@eqproject/eqp-dynamic-module 2.10.58 → 2.10.60
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.
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +5 -5
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +3 -3
- package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +7 -6
- package/esm2020/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.mjs +5 -4
- package/esm2020/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +9 -8
- package/esm2020/lib/components/private/graphs/graphs.component.mjs +3 -3
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.mjs +8 -7
- package/esm2020/lib/eqp-dynamic-module.module.mjs +17 -8
- package/esm2020/lib/models/baseField.model.mjs +2 -2
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +72 -63
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +72 -63
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/eqp-dynamic-module.module.d.ts +1 -1
- package/lib/models/baseField.model.d.ts +1 -1
- package/package.json +4 -2
package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs
CHANGED
|
@@ -349,10 +349,10 @@ export class DynamicModuleFieldFixComponent {
|
|
|
349
349
|
}
|
|
350
350
|
}
|
|
351
351
|
DynamicModuleFieldFixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, deps: [{ token: i1.MatDialog }, { token: i2.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
352
|
-
DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i6.BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i7.DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i8.TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i9.NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i10.ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i11.AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "formulaObject", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: i12.ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: i13.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons", "contestualizationParams"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "formulaObject", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i15.LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i16.ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: i17.DbgetterComponent, selector: "dbgetter", inputs: ["configurations", "form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue", "doReload"] }, { kind: "component", type: i18.ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["fireTrigger", "recordChange"] }, { kind: "component", type: i19.ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: ["field", "record"] }] });
|
|
352
|
+
DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container\r\n *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\"\r\n [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\">\r\n\r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\"\r\n [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter *ngIf=\"loadedDBGetter\" class=\"dbgetter\" [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" [form]=\"form\" [(record)]=\"record\" [field]=\"field\"\r\n [DirectlyOpenTable]=\"directlyOpenTable\" [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [inConfig]=\"inConfig\" (out)=\"onExternalComponentOut($event)\" (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\">\r\n\r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\"\r\n [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\" [matTooltip]=\"field.Description\"\r\n [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template>\r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\"\r\n [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\" [matTooltip]=\"field.Description\"\r\n [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template>\r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n\r\n\r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i6.BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i7.DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i8.TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i9.NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i10.ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i11.AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "formulaObject", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: i12.ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: i13.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons", "contestualizationParams"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "formulaObject", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i15.LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i16.ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: i17.DbgetterComponent, selector: "dbgetter", inputs: ["configurations", "form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue", "doReload"] }, { kind: "component", type: i18.ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["fireTrigger", "recordChange"] }, { kind: "component", type: i19.ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: ["field", "record"] }] });
|
|
353
353
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, decorators: [{
|
|
354
354
|
type: Component,
|
|
355
|
-
args: [{ selector: 'dynamic-module-field-fix', template: "<ng-container
|
|
355
|
+
args: [{ selector: 'dynamic-module-field-fix', template: "<ng-container\r\n *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\"\r\n [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\">\r\n\r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\"\r\n [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter *ngIf=\"loadedDBGetter\" class=\"dbgetter\" [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" [form]=\"form\" [(record)]=\"record\" [field]=\"field\"\r\n [DirectlyOpenTable]=\"directlyOpenTable\" [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [inConfig]=\"inConfig\" (out)=\"onExternalComponentOut($event)\" (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\">\r\n\r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\"\r\n [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\" [matTooltip]=\"field.Description\"\r\n [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template>\r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\"\r\n [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\" [matTooltip]=\"field.Description\"\r\n [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template>\r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n\r\n\r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"] }]
|
|
356
356
|
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.UtilityHelperService }]; }, propDecorators: { configurations: [{
|
|
357
357
|
type: Input
|
|
358
358
|
}], endPointConfiguration: [{
|
|
@@ -387,4 +387,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
387
387
|
type: ViewChildren,
|
|
388
388
|
args: ['listInnerFormRecords']
|
|
389
389
|
}] } });
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1tb2R1bGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQTBCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEksT0FBTyxFQUFhLGFBQWEsRUFBRSxrQkFBa0IsRUFBZSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXhGLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3RILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV0RCxPQUFPLEVBQTZDLGFBQWEsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBS3ZILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWpFLE1BQU0sT0FBTyw4QkFBOEI7SUFvQ3pDLFlBQ1UsTUFBaUIsRUFDakIsb0JBQTBDO1FBRDFDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQXBDM0Ms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S0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxHQUFHO3NCQUFaLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFnQitDLHFCQUFxQjtzQkFBMUUsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3JCLGFBQWE7c0JBQTNDLFlBQVk7dUJBQUMsZUFBZTtnQkFDUyxvQkFBb0I7c0JBQXpELFlBQVk7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSwgRGF0YUdldHRlclR5cGVFbnVtLCBBbnN3ZXJTdHlsZSwgRGF0YUdldHRlckNhcmRpbmFsaXR5RW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0JztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RGb3JtUmVjb3JkQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1yZWNvcmRzL2xpc3QtZm9ybS1yZWNvcmQvbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnQnO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlyZVRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBCYXNlRmllbGQ7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybTtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBpbkNvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuXHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgZmlyZVRyaWdnZXI6IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPigpO1xyXG5cclxuICBjb25maWdMaXN0OiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZygpO1xyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG4gIERhdGFHZXR0ZXJUeXBlRW51bSA9IERhdGFHZXR0ZXJUeXBlRW51bTtcclxuICBkaXJlY3RseU9wZW5UYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRtbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbG9hZGVkREJHZXR0ZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIERCR2V0dGVyRmllbGRzTG9hZGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGFnZ2l1bmdlcmUvbW9kaWZpY2FyZSBpIHJlY29yZCBkaSB1bmEgZm9ybSBkaSBkZXR0YWdsaW9cclxuICBzZWxlY3RlZElubmVyRm9ybTogRm9ybTtcclxuICBzZWxlY3RlZElubmVyRm9ybVJlY29yZDogUmVjb3JkO1xyXG4gIGluZGV4SW5uZXJGb3JtUmVjb3JkOiBudW1iZXI7XHJcbiAgb25seVZpZXdJbm5lckZvcm1SZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaWFsb2dJbm5lckZvcm1SZWNvcmRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKCdkaWFsb2dJbm5lckZvcm1SZWNvcmQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dJbm5lckZvcm1SZWNvcmQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oXCJmaWVsZFRlbXBsYXRlXCIpIGZpZWxkVGVtcGxhdGU6IFF1ZXJ5TGlzdDxEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQ+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2xpc3RJbm5lckZvcm1SZWNvcmRzJykgbGlzdElubmVyRm9ybVJlY29yZHM6IFF1ZXJ5TGlzdDxMaXN0Rm9ybVJlY29yZENvbXBvbmVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiB1cGRhdGVGaWVsZFxyXG4gIHVwZGF0ZUZpZWxkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZmllbGRUZW1wbGF0ZSAmJiB0aGlzLmZpZWxkVGVtcGxhdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZpZWxkVGVtcGxhdGUuZm9yRWFjaCgoZikgPT4geyBpZiAoZiAhPSBudWxsICYmIHR5cGVvZiBmLnVwZGF0ZUZpZWxkID09PSAnZnVuY3Rpb24nKSB7IGYudXBkYXRlRmllbGQoKTsgfSB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHVwZGF0ZUZpZWxkXHJcblxyXG4gIC8vI3JlZ2lvbiBuZ09uSW5pdFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJkeW5hbWljLW1vZHVsZS1maWVsZFwiLCB0aGlzLmZpZWxkKTtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ0xpc3QudmFsdWVzID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXVxyXG4gICAgdGhpcy5jb25maWdMaXN0LnNob3dUaXRsZSA9IHRydWU7XHJcbiAgICB0aGlzLmNvbmZpZ0xpc3QuZGVmYXVsdExpc3RBY3Rpb25zID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KClcclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyAhPSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlciA9IEpTT04ucGFyc2UoYXRvYih0aGlzLmZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZykpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdKXtcclxuICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlciAhPSBudWxsICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0RhIG1vZHVsbyBkaW5hbWljbyddKSB7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VETUdldHRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRtbG9hZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG5nT25Jbml0XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHZhbG9yZSBkaSBvZ25pIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIHJlY29yZC5cclxuICAgKiBTZXJ2ZSBhZCBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkaSB0dXR0aSBpIGNhbXBpIGNoZSBoYW5ubyB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICBvblJlY29yZENoYW5nZSgpIHtcclxuICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHVuYSBJbm5lckZvcm0gYSBwYXJ0aXJlIGRhbCBGaWVsZCBjaGUgbGEgcmFwcHJlc2VudGEuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGEgcGFydGlyZSBkYWwgcXVhbGUgc2kgdnVvbGUgcmVjdXBlcmFyZSBsYSBJbm5lckZvcm0uXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW4gb2dnZXR0byBkaSB0aXBvIEZvcm0uXHJcbiAgICovXHJcbiAgZ2V0SW5uZXJGb3JtRnJvbUZpZWxkKGZpZWxkOiBCYXNlRmllbGQpOiBGb3JtIHtcclxuICAgIGlmICh0aGlzLmZvcm0uSW5uZXJGb3JtcyAmJiB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5maW5kKGYgPT4gZi5OYW1lID09IGZpZWxkLkxhYmVsKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZChmID0+IGYuTmFtZSA9PSBmaWVsZC5MYWJlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBvbkFkZFZpZXdFZGl0SW5uZXJGb3JtUmVjb3JkXHJcbiAgLyoqXHJcbiAqIE1ldG9kbyBwZXIgYXByaXJlIHVuIGRpYWxvZyBpbiBjdWkgYWdnaXVuZ2VyZS9tb2RpZmljYXJlL3Zpc3VhbGl6emFyZSB1biByZWNvcmQgYXBwYXJ0ZW5lbnRlXHJcbiAqIGEgdW5hIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gKiBAcGFyYW0gcmVjb3JkIEV2ZW50byBkaSBvdXRwdXQgZGVsIGNvbXBvbmVudGUgbGlzdC1mb3JtLXJlY29yZCwgY29udGllbmUgaWwgcmVjb3JkIHNlbGV6aW9uYXRvIGUgdW4gYm9vbGVubyBjaGUgaW5kaWNhIFxyXG4gKiBzZSBsJ3V0ZW50ZSB2dW9sZSBtb2RpZmljYXJlIG8gdmlzdWFsaXp6YXJlIGwnZWxlbWVudG8gc2VsZXppb25hdG8uXHJcbiAqIEBwYXJhbSBpbm5lckZvcm0gQ29udGllbmUgbGEgRm9ybSBkaSBkZXR0YWdsaW8gZGFsbGEgcXVhbGUgw6ggc3RhdG8gcmljaGllc3RvIGlsIHJlY29yZC5cclxuICovXHJcbiAgb25BZGRWaWV3RWRpdElubmVyRm9ybVJlY29yZChyZWNvcmQ6IHsgcmVjb3JkOiBSZWNvcmQsIG9ubHlWaWV3OiBib29sZWFuIH0sIGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0gPSB0aGlzLmdldElubmVyRm9ybUZyb21GaWVsZChmaWVsZCk7XHJcbiAgICBpZiAocmVjb3JkID09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElubmVyRm9ybVJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgdGhpcy5pbmRleElubmVyRm9ybVJlY29yZCA9IG51bGw7XHJcbiAgICAgIHRoaXMub25seVZpZXdJbm5lckZvcm1SZWNvcmQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm1SZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlY29yZC5yZWNvcmQpKTtcclxuICAgICAgdGhpcy5pbmRleElubmVyRm9ybVJlY29yZCA9IHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdLmluZGV4T2YocmVjb3JkKTtcclxuICAgICAgdGhpcy5vbmx5Vmlld0lubmVyRm9ybVJlY29yZCA9IHJlY29yZC5vbmx5VmlldztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0lubmVyRm9ybVJlY29yZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbm5lckZvcm1SZWNvcmQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6ICc3NSUnXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkVmlld0VkaXRJbm5lckZvcm1SZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIG9uU2F2ZUlubmVyRm9ybVJlY29yZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBzYWx2YXRhZ2dpbyBvIGFsbGEgY2hpdXN1cmEgZGVsIGRpYWxvZyBkaSBhZ2dpdW50YS9tb2RpZmljYS92aXN1YWxpenphemlvbmVcclxuICAgKiBkaSB1biByZWNvcmQgZGkgdW5hIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgT2dnZXR0byByZXN0aXR1aXRvIGRhbCBjb21wb25lbnRlIGFkZC1mb3JtLWZpZWxkIChxdWVzdG8gcXVpKSBjb250ZW5lbnRlIGlsIFJlY29yZCBcclxuICAgKiBhZ2dpb3JuYXRvIGRhbGwndXRlbnRlLiBTZSBudWxsIGFsbG9yYSBsJ3V0ZW50ZSBub24gaGEgbW9kaWZpY2F0byBudWxsYSBlIGhhIGNoaXVzbyBpbCBkaWFsb2cuXHJcbiAgICovXHJcbiAgb25TYXZlSW5uZXJGb3JtUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAocmVjb3JkICE9IG51bGwpIHtcclxuICAgICAgY29uc3QgYXJyYXlOYW1lOiBzdHJpbmcgPSB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtLk5hbWUuc3BsaXQoJyAnKS5qb2luKCdfJyk7XHJcbiAgICAgIGlmICh0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkICE9IG51bGwgJiYgdGhpcy5pbmRleElubmVyRm9ybVJlY29yZCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXVt0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkXSA9IHJlY29yZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMucmVjb3JkW2FycmF5TmFtZV0pIHtcclxuICAgICAgICAgIHRoaXMucmVjb3JkW2FycmF5TmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXS5wdXNoKHJlY29yZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVjb3JkUmVmLmNsb3NlKCk7XHJcblxyXG4gICAgLy8gUmljYXJpY28gbGEgdGFiZWxsYSBkZWkgcmVjb3JkIHBlciB2aXN1YWxpenphcmUgbGUgbW9kaWZpY2hlIGZhdHRlIGRhbGwndXRlbnRlLlxyXG4gICAgaWYgKHRoaXMubGlzdElubmVyRm9ybVJlY29yZHMgJiYgdGhpcy5saXN0SW5uZXJGb3JtUmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGlzdElubmVyRm9ybVJlY29yZHMuZm9yRWFjaChsaXN0ID0+IHtcclxuICAgICAgICBpZiAobGlzdCAmJiBsaXN0LnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICAgICAgbGlzdC50YWJsZVJlY29yZHMucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uU2F2ZUlubmVyRm9ybVJlY29yZFxyXG5cclxuICAvLyBQYXNzbyBsJ2ltbWFnaW5lIGRpc2VnbmF0YSBhbCBsaXZlbGxvIHN1cGVyaW9yZVxyXG4gIG9uSW1hZ2VEcmF3KGV2ZW50OiBEeW5BdHRhY2htZW50KSB7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gZXZlbnQ7XHJcbiAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8vIFBhc3NvIGwnaW1tYWdpbmUgZGlzZWduYXRhIGFsIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgb25JbWFnZU1hcmsoZXZlbnQ6IER5bkF0dGFjaG1lbnQpIHtcclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBldmVudDtcclxuICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gIH1cclxuICBcclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCkge1xyXG4gICAgdGhpcy5vdXQuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gb25TZWxlY3RlZFZhbHVlXHJcbiAgb25TZWxlY3RlZFZhbHVlKHZhbHVlOiBhbnkpIHtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25TZWxlY3RlZFZhbHVlIEZST00gREJHRVRURVJcIiwgdmFsdWUpO1xyXG4gICAgY29uc29sZS5sb2coXCJvblNlbGVjdGVkVmFsdWUgRlJPTSBEQkdFVFRFUlwiLCB2YWx1ZSwgdGhpcy5maWVsZCwgdGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10pO1xyXG5cclxuICAgIGlmICh2YWx1ZVswXSA9PSBcIioqKipDTE9TRSoqKipcIikgeyByZXR1cm47IH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQ2FtcG8gZGkgdGVzdG8nXSkge1xyXG4gICAgICB2YXIgdmFsdWVUb1B1dCA9IG51bGw7XHJcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKXsgdmFsdWVUb1B1dCA9IG51bGw7IH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVswXSkpIHsgdmFsdWVUb1B1dCA9IHZhbHVlWzBdWzBdOyB9IGVsc2UgeyB2YWx1ZVRvUHV0ID0gdmFsdWVbMF07IH1cclxuICAgICAgY29uc29sZS5sb2coXCJWQUxVRVRPUFVUIGNhbXBvZGl0ZXN0b1wiLCB2YWx1ZSwgdmFsdWVUb1B1dCk7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB2YWx1ZVRvUHV0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXSkge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25TZWxlY3RlZFZhbHVlIEZST00gREJHRVRURVIgRUxFTkNPIEdFTkVSSUNPXCIsIHZhbHVlKTtcclxuXHJcbiAgICAgIHZhciB2YWx1ZVRvUHV0ID0gbnVsbDtcclxuICAgICAgaWYgKHZhbHVlID09IG51bGwpeyB2YWx1ZVRvUHV0ID0gW107IH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVswXSkpIHsgdmFsdWVUb1B1dCA9IHZhbHVlWzBdWzBdOyB9IGVsc2UgeyB2YWx1ZVRvUHV0ID0gdmFsdWVbMF07IH1cclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiVkFMVUVUT1BVVCBlbGVuY29nZW5lcmljb1wiLCB2YWx1ZSwgdmFsdWVUb1B1dCk7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB2YWx1ZVRvUHV0O1xyXG4gICAgICB0aGlzLkRCR2V0dGVyRmllbGRzTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLkRCR2V0dGVyRmllbGRzTG9hZGVkID0gdHJ1ZTsgfSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25TZWxlY3RlZFZhbHVlXHJcblxyXG4gIC8vI3JlZ2lvbiBtYW5hZ2VETUdldHRlclxyXG4gIC8vIGNpIGVudHJvIHNlIGlsIGNhbXBvIGhhIGxhIG1vZGFsaXTDoCBkaSByZWN1cGVybyBkZWkgZGF0aSBcImRhIG1vZHVsbyBkaW5hbWljb1wiIFxyXG4gIC8vIGNoaWVkbyBhbCBzZXJ2ZXIgaSB2YWxvcmkgZWQgaW1wb3N0byB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdXHJcbiAgLyoqXHJcbiAgICogR2VzdGlzY2UgaWwgcmVjdXBlcm8gZGVpIGRhdGkgZGluYW1pY2kgKER5bmFtaWMgTW9kdWxlIEdldHRlcikgaW4gYmFzZSBhbGxhIG1vZGFsaXTDoC5cclxuICAgKi9cclxuICBtYW5hZ2VETUdldHRlcigpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNhcmRpbmFsaXR5ID09PSBEYXRhR2V0dGVyQ2FyZGluYWxpdHlFbnVtWydDT05URVNUVUFMSVpaQVRBIEFMTEEgUklTUE9TVEEnXSkge1xyXG4gICAgICAvLyBTZSBsYSBtb2RhbGl0w6Agw6ggXCJjb250ZXN0dWFsaXp6YXRhIGFsbGEgcmlzcG9zdGFcIlxyXG4gICAgICB0aGlzLmhhbmRsZVJlc3BvbnNlQ29udGV4dHVhbGl6ZWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEFsdHJpbWVudGkgZ2VzdGlhbW8gbGUgYWx0cmUgbW9kYWxpdMOgXHJcbiAgICAgIHRoaXMuaGFuZGxlTm9uQ29udGV4dHVhbGl6ZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVzZWd1ZSBsYSBjaGlhbWF0YSBzZSBsYSBtb2RhbGl0w6Agw6ggXCJjb250ZXN0dWFsaXp6YXRhIGFsbGEgcmlzcG9zdGFcIixcclxuICAgKiB1dGlsaXp6YW5kbyBsJ0lEIGRlbGxhIHJpc3Bvc3RhIG9yaWdpbmFyaWEuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVSZXNwb25zZUNvbnRleHR1YWxpemVkKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbnM/LmFkZGl0aW9uYWxQYXJhbXM/LltcIk9yaWdpbkFuc3dlcklEXCJdKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IFt7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5jb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zW1wiT3JpZ2luQW5zd2VySURcIl0sXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH1dO1xyXG4gIFxyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyBQYXJzaW5nIGRlbGxhIHJpc3Bvc3RhIGUgYWdnaW9ybmFtZW50byBkZWwgcmVjb3JkXHJcbiAgICAgICAgICBjb25zdCBhbnN3ZXJPYmogPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShhbnN3ZXJPYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb250ZXN0byBub24gdHJvdmF0b1wiKTtcclxuICAgICAgdGhpcy5kbWxvYWRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXN0aXNjZSB0dXR0ZSBsZSBhbHRyZSBtb2RhbGl0w6AsIGluY2x1c2EgbGEgY29udGVzdHVhbGl6emF6aW9uZSBwZXIgSUQgZXN0ZXJuby5cclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZU5vbkNvbnRleHR1YWxpemVkKCkge1xyXG4gICAgY29uc3QgY29udGVzdHVhbGl6YXRpb25QYXJhbSA9IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29udGVzdHVhbGl6YXRpb24/LmVudGl0eURNQWRkaXRpb25hbFBhcmFtIHx8IG51bGw7XHJcbiAgICBjb25zdCBjb250ZXN0dWFsaXphdGlvbklkID0gdGhpcy5jb25maWd1cmF0aW9ucz8uYWRkaXRpb25hbFBhcmFtcz8uW2NvbnRlc3R1YWxpemF0aW9uUGFyYW1dIHx8IG51bGw7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmJ1aWxkQmFzZVBhcmFtcyhjb250ZXN0dWFsaXphdGlvblBhcmFtLCBjb250ZXN0dWFsaXphdGlvbklkKTtcclxuICBcclxuICAgIGlmIChjb250ZXN0dWFsaXphdGlvbklkKSB7XHJcbiAgICAgIC8vIHNlIGhvIGNvbnRlc3R1YWxpenphemlvbmUgdHJhbWl0ZSBwYXJhbWV0cmlcclxuICAgICAgdGhpcy5mZXRjaERhdGFXaXRoQ29udGV4dHVhbGl6YXRpb24ocGFyYW1zLCBjb250ZXN0dWFsaXphdGlvblBhcmFtLCBjb250ZXN0dWFsaXphdGlvbklkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmV0Y2hEYXRhV2l0aG91dENvbnRleHR1YWxpemF0aW9uKHBhcmFtcywgY29udGVzdHVhbGl6YXRpb25QYXJhbSwgY29udGVzdHVhbGl6YXRpb25JZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb3N0cnVpc2NlIGkgcGFyYW1ldHJpIHJpY2hpZXN0aSBkYWxsYSBjaGlhbWF0YSBBUEkgaW4gYmFzZSBhbCBjb250ZXN0by5cclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkQmFzZVBhcmFtcyhwYXJhbTogc3RyaW5nLCBpZDogYW55KTogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiB7XHJcbiAgICBjb25zdCBiYXNlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID0gW1xyXG4gICAgICB7IFBhcmFtTmFtZTogXCJGb3JtQ29kZVwiLCBQYXJhbVZhbHVlOiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJVc2VySURcIiwgUGFyYW1WYWx1ZTogdGhpcy51c2VySUQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIk9yZ2FJRFwiLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uT3JnYUlELCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJtb2RlXCIsIFBhcmFtVmFsdWU6IDIsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgLy8gU2UgZGlzcG9uaWJpbGUsIGFnZ2l1bmdlIHBhcmFtZXRyaSBwZXIgbGEgY29udGVzdHVhbGl6emF6aW9uZVxyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIGJhc2VQYXJhbXMucHVzaCh7IFBhcmFtTmFtZTogXCJDb250ZXN0dWFsaXphdGlvblBhcmFtXCIsIFBhcmFtVmFsdWU6IHBhcmFtLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSB9KTtcclxuICAgICAgYmFzZVBhcmFtcy5wdXNoKHsgUGFyYW1OYW1lOiBcIkNvbnRlc3R1YWxpemF0aW9uSWRcIiwgUGFyYW1WYWx1ZTogaWQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdIH0pO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgcmV0dXJuIGJhc2VQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGlsIHZhbG9yZSBkZWwgY2FtcG8gbmVsIHJlY29yZCBjb3JyZW50ZSwgdXNhbmRvIGxhIGNvbG9ubmEgc3BlY2lmaWNhdGEuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGaWVsZFZhbHVlKGFuc3dlck9iajogYW55KSB7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gYW5zd2VyT2JqW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2VdIDtcclxuICAgIHRoaXMuZG1sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXNlZ3VlIGxhIGNoaWFtYXRhIEFQSSBpbiBtb2RhbGl0w6AgY29udGVzdHVhbGl6emF0YSBlIGFzc2VnbmEgaWwgcmlzdWx0YXRvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmV0Y2hEYXRhV2l0aENvbnRleHR1YWxpemF0aW9uKHBhcmFtcywgcGFyYW1OYW1lLCBwYXJhbUlkKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRXaXRoQ29udGV4dHVhbGl6YXRpb25CeUZvcm1Db2RlRW5kUG9pbnQsXHJcbiAgICAgIHBhcmFtcyxcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyZXMgfHwgcmVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5kbWxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNvbnN0IGFuc3dlciA9IHRoaXMucGlja0Fuc3dlcihyZXMpO1xyXG4gICAgICAgIGlmICghYW5zd2VyKSByZXR1cm47XHJcbiAgXHJcbiAgICAgICAgY29uc3QgYW5zd2VyT2JqID0gSlNPTi5wYXJzZShhbnN3ZXIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKGFuc3dlck9iaik7XHJcbiAgICAgIH0sXHJcbiAgICAgICgpID0+IHsgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogRXNlZ3VlIGxhIGNoaWFtYXRhIEFQSSBpbiBtb2RhbGl0w6AgTk9OIGNvbnRlc3R1YWxpenphdGEgZSBhc3NlZ25hIGlsIHJpc3VsdGF0by5cclxuICAgKi9cclxuICBwcml2YXRlIGZldGNoRGF0YVdpdGhvdXRDb250ZXh0dWFsaXphdGlvbihwYXJhbXMsIHBhcmFtTmFtZSwgcGFyYW1JZCkge1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtQ29kZUVuZFBvaW50LFxyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzIHx8IHJlcy5BbnN3ZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5kbWxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGxldCBhbnN3ZXJzID0gcmVzLkFuc3dlcnM7XHJcbiAgICAgICAgaWYgKHBhcmFtSWQpIHtcclxuICAgICAgICAgIGFuc3dlcnMgPSBhbnN3ZXJzLmZpbHRlcigoYSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsUGFyYW1zID0gSlNPTi5wYXJzZShyZXMuQWRkaXRpb25hbFBhcmFtc1tpXSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhZGRpdGlvbmFsUGFyYW1zW3BhcmFtTmFtZV0gPT0gcGFyYW1JZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjb25zdCBhbnN3ZXJTdHIgPSB0aGlzLnBpY2tBbnN3ZXIoYW5zd2Vycyk/LkFuc3dlcjtcclxuICAgICAgICBpZiAoIWFuc3dlclN0cikgcmV0dXJuO1xyXG4gIFxyXG4gICAgICAgIGNvbnN0IGFuc3dlck9iaiA9IEpTT04ucGFyc2UoYW5zd2VyU3RyKTtcclxuICAgICAgICB0aGlzLnNldEZpZWxkVmFsdWUoYW5zd2VyT2JqKTtcclxuICAgICAgfSxcclxuICAgICAgKCkgPT4geyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZXppb25hIGxhIHJpc3Bvc3RhIGNvcnJldHRhIHRyYSBsZSBkaXNwb25pYmlsaSwgaW4gYmFzZSBhbGxhIGNhcmRpbmFsaXTDoC5cclxuICAgKi9cclxuICBwcml2YXRlIHBpY2tBbnN3ZXIoYW5zd2VyczogYW55W10pOiBhbnkge1xyXG4gICAgaWYgKGFuc3dlcnMubGVuZ3RoID09PSAxKSByZXR1cm4gYW5zd2Vyc1swXTtcclxuXHJcbiAgICAvLyBTZSDDqCByaWNoaWVzdGEgbGEgcmlzcG9zdGEgXCJwacO5IHJlY2VudGVcIiwgcHJlbmRpYW1vIGxhIHByaW1hIChvcmRpbmFtZW50byBnacOgIGdlc3RpdG8gYSBtb250ZSlcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNhcmRpbmFsaXR5ID09IERhdGFHZXR0ZXJDYXJkaW5hbGl0eUVudW1bJ1BJVSBSRUNFTlRFJ10pIHtcclxuICAgICAgcmV0dXJuIGFuc3dlcnNbMF07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIERlZmF1bHQ6IHJlc3RpdHVpYW1vIGxhIHByaW1hXHJcbiAgICByZXR1cm4gYW5zd2Vyc1swXTtcclxuICB9XHJcbiAgXHJcbiAgLy8jZW5kcmVnaW9uIG1hbmFnZURNR2V0dGVyXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkZpcmVUcmlnZ2VyXHJcbiAgb25GaXJlVHJpZ2dlcihldjogRmlyZVRyaWdnZXIpIHtcclxuICAgIGV2LmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICBldi51c2VyUGF0aWVudCA9IHRoaXMudXNlcklELnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQoZXYpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25GaXJlVHJpZ2dlclxyXG5cclxuICAvLyNyZWdpb24gcmVsb2FkREJHZXR0ZXJcclxuICByZWxvYWREQkdldHRlcigpIHtcclxuICAgIHRoaXMubG9hZGVkREJHZXR0ZXIgPSBmYWxzZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlZERCR2V0dGVyID0gdHJ1ZTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gcmVsb2FkREJHZXR0ZXJcclxuXHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydNYW51YWxlJ10gfHwgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0Zvcm11bGEnXVwiPiBcclxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRzVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIHJlY29yZDogcmVjb3JkLCBmb3JjZWRWYWx1ZXM6IG51bGwgfVwiPjwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bVsnRGEgZGF0YWJhc2UnXVwiPiBcclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBkYXRhZ2V0dGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiREJHZXR0ZXJGaWVsZHNMb2FkZWRcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZHNEQkdUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCwgcmVjb3JkOiByZWNvcmQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGJnZXR0ZXIgIFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsb2FkZWREQkdldHRlclwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRiZ2V0dGVyXCJcclxuICAgICAgICAgICAgICAgIFtjb25maWd1cmF0aW9uc109XCJjb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiFmaWVsZC5Jbkxpc3RWaWV3XCIgXHJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCIgXHJcbiAgICAgICAgICAgICAgICBbKHJlY29yZCldPVwicmVjb3JkXCIgXHJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIiBcclxuICAgICAgICAgICAgICAgIFtEaXJlY3RseU9wZW5UYWJsZV09XCJkaXJlY3RseU9wZW5UYWJsZVwiIFxyXG4gICAgICAgICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCIgXHJcbiAgICAgICAgICAgICAgICBbaW5Db25maWddPVwiaW5Db25maWdcIiBcclxuICAgICAgICAgICAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCIgXHJcbiAgICAgICAgICAgICAgICAoZG9SZWxvYWQpPVwicmVsb2FkREJHZXR0ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRWYWx1ZSk9XCJvblNlbGVjdGVkVmFsdWUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2RiZ2V0dGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydEYSBtb2R1bG8gZGluYW1pY28nXVwiPiBcclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZG1sb2FkZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRzVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIHJlY29yZDogcmVjb3JkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZmllbGRzVGVtcGxhdGU+XHJcblxyXG4gICAgPHRleHQtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQ2FtcG8gZGkgdGVzdG8nXVwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvdGV4dC1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8dGV4dGFyZWEtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQXJlYSBkaSB0ZXN0byddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvdGV4dGFyZWEtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGFjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQm90dG9uZSBhemlvbmUnXVwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIiAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCI+XHJcbiAgICA8L2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGJvb2xlYW4tZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQm9vbGVhbm8nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2Jvb2xlYW4tZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGRhdGUtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRGF0YSBlL28gb3JhJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9kYXRlLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxudW1lcmljLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0NhbXBvIG51bWVyaWNvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9udW1lcmljLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxsaXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8YXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydBbGxlZ2F0byddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5EZXNjcmlwdGlvblwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2F0dGFjaG1lbnQtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGltYWdlLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0ltbWFnaW5lJ11cIiBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtpbkNvbmZpZ109XCJpbkNvbmZpZ1wiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuRGVzY3JpcHRpb25cIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiIChpbWFnZURyYXcpPVwib25JbWFnZURyYXcoJGV2ZW50KVwiPlxyXG4gICAgPC9pbWFnZS1maWVsZC10ZW1wbGF0ZT4gXHJcblxyXG4gICAgPGltYWdlLXdpdGgtbWFya2Vycy1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSBjb24gbWFya2VycyddXCIgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIiBbaW5Db25maWddPVwiaW5Db25maWdcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLkRlc2NyaXB0aW9uXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIiAoaW1hZ2VNYXJrKT1cIm9uSW1hZ2VNYXJrKCRldmVudClcIj5cclxuICAgIDwvaW1hZ2Utd2l0aC1tYXJrZXJzLWZpZWxkLXRlbXBsYXRlPiBcclxuXHJcbiAgICA8aW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRWxlbmNvIGltbWFnaW5pJ11cIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiZmllbGQuRGVzY3JpcHRpb25cIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiXHJcbiAgICA+XHJcbiAgICA8L2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlPlxyXG5cclxuICAgIDxsYWJlbC1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydFdGljaGV0dGEnXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2xhYmVsLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDwhLS0gRk9STSBESSBERVRUQUdMSU8gKExBU0NJQVJFIElOIEZPTkRPKSAtLT5cclxuICAgIDxsaXN0LWZvcm0tcmVjb3JkICNsaXN0SW5uZXJGb3JtUmVjb3JkcyAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydGb3JtIGRpIGRldHRhZ2xpbyddXCJcclxuICAgICAgICBbZm9ybV09XCJnZXRJbm5lckZvcm1Gcm9tRmllbGQoZmllbGQpXCIgW2NvbmZpZ3VyYXRpb25zXT1cImNvbmZpZ0xpc3RcIlxyXG4gICAgICAgIChvbkFkZFZpZXdFZGl0UmVjb3JkKT1cIm9uQWRkVmlld0VkaXRJbm5lckZvcm1SZWNvcmQoJGV2ZW50LCBmaWVsZClcIj5cclxuICAgIDwvbGlzdC1mb3JtLXJlY29yZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZmllbGRzREJHVGVtcGxhdGU+XHJcblxyXG4gICAgPHRleHQtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQ2FtcG8gZGkgdGVzdG8nXVwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvdGV4dC1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bGlzdC12YWx1ZS1kYmctdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2xpc3QtdmFsdWUtZGJnLXRlbXBsYXRlPlxyXG4gICAgXHJcbiAgICBcclxuICAgIDwhLS0gTm9uIGdlc3RpdGkgKGZ1bnppb25hbm8gYSBjdWxvKSAtLT5cclxuXHJcbiAgICA8ZGF0ZS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydEYXRhIGUvbyBvcmEnXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2RhdGUtZmllbGQtdGVtcGxhdGU+ICBcclxuICAgIFxyXG4gICAgPHRleHRhcmVhLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0FyZWEgZGkgdGVzdG8nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L3RleHRhcmVhLWZpZWxkLXRlbXBsYXRlPiAgICBcclxuXHJcbiAgICA8Ym9vbGVhbi1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydCb29sZWFubyddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZT4gICAgXHJcblxyXG4gICAgPG51bWVyaWMtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQ2FtcG8gbnVtZXJpY28nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L251bWVyaWMtZmllbGQtdGVtcGxhdGU+ICAgIFxyXG5cclxuXHJcblxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1tb2R1bGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQTBCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEksT0FBTyxFQUFhLGFBQWEsRUFBRSxrQkFBa0IsRUFBZSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXhGLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3RILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV0RCxPQUFPLEVBQTZDLGFBQWEsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBS3ZILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWpFLE1BQU0sT0FBTyw4QkFBOEI7SUFvQ3pDLFlBQ1UsTUFBaUIsRUFDakIsb0JBQTBDO1FBRDFDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQXBDM0Ms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S0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxHQUFHO3NCQUFaLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFnQitDLHFCQUFxQjtzQkFBMUUsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3JCLGFBQWE7c0JBQTNDLFlBQVk7dUJBQUMsZUFBZTtnQkFDUyxvQkFBb0I7c0JBQXpELFlBQVk7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSwgRGF0YUdldHRlclR5cGVFbnVtLCBBbnN3ZXJTdHlsZSwgRGF0YUdldHRlckNhcmRpbmFsaXR5RW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0JztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RGb3JtUmVjb3JkQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1yZWNvcmRzL2xpc3QtZm9ybS1yZWNvcmQvbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnQnO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlyZVRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBCYXNlRmllbGQ7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybTtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBpbkNvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuXHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgZmlyZVRyaWdnZXI6IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPigpO1xyXG5cclxuICBjb25maWdMaXN0OiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZygpO1xyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG4gIERhdGFHZXR0ZXJUeXBlRW51bSA9IERhdGFHZXR0ZXJUeXBlRW51bTtcclxuICBkaXJlY3RseU9wZW5UYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRtbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbG9hZGVkREJHZXR0ZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIERCR2V0dGVyRmllbGRzTG9hZGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGFnZ2l1bmdlcmUvbW9kaWZpY2FyZSBpIHJlY29yZCBkaSB1bmEgZm9ybSBkaSBkZXR0YWdsaW9cclxuICBzZWxlY3RlZElubmVyRm9ybTogRm9ybTtcclxuICBzZWxlY3RlZElubmVyRm9ybVJlY29yZDogUmVjb3JkO1xyXG4gIGluZGV4SW5uZXJGb3JtUmVjb3JkOiBudW1iZXI7XHJcbiAgb25seVZpZXdJbm5lckZvcm1SZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaWFsb2dJbm5lckZvcm1SZWNvcmRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKCdkaWFsb2dJbm5lckZvcm1SZWNvcmQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dJbm5lckZvcm1SZWNvcmQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oXCJmaWVsZFRlbXBsYXRlXCIpIGZpZWxkVGVtcGxhdGU6IFF1ZXJ5TGlzdDxEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQ+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2xpc3RJbm5lckZvcm1SZWNvcmRzJykgbGlzdElubmVyRm9ybVJlY29yZHM6IFF1ZXJ5TGlzdDxMaXN0Rm9ybVJlY29yZENvbXBvbmVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiB1cGRhdGVGaWVsZFxyXG4gIHVwZGF0ZUZpZWxkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZmllbGRUZW1wbGF0ZSAmJiB0aGlzLmZpZWxkVGVtcGxhdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZpZWxkVGVtcGxhdGUuZm9yRWFjaCgoZikgPT4geyBpZiAoZiAhPSBudWxsICYmIHR5cGVvZiBmLnVwZGF0ZUZpZWxkID09PSAnZnVuY3Rpb24nKSB7IGYudXBkYXRlRmllbGQoKTsgfSB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHVwZGF0ZUZpZWxkXHJcblxyXG4gIC8vI3JlZ2lvbiBuZ09uSW5pdFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJkeW5hbWljLW1vZHVsZS1maWVsZFwiLCB0aGlzLmZpZWxkKTtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ0xpc3QudmFsdWVzID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXVxyXG4gICAgdGhpcy5jb25maWdMaXN0LnNob3dUaXRsZSA9IHRydWU7XHJcbiAgICB0aGlzLmNvbmZpZ0xpc3QuZGVmYXVsdExpc3RBY3Rpb25zID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KClcclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyAhPSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlciA9IEpTT04ucGFyc2UoYXRvYih0aGlzLmZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZykpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdKXtcclxuICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlciAhPSBudWxsICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0RhIG1vZHVsbyBkaW5hbWljbyddKSB7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VETUdldHRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRtbG9hZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG5nT25Jbml0XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHZhbG9yZSBkaSBvZ25pIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIHJlY29yZC5cclxuICAgKiBTZXJ2ZSBhZCBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkaSB0dXR0aSBpIGNhbXBpIGNoZSBoYW5ubyB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICBvblJlY29yZENoYW5nZSgpIHtcclxuICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHVuYSBJbm5lckZvcm0gYSBwYXJ0aXJlIGRhbCBGaWVsZCBjaGUgbGEgcmFwcHJlc2VudGEuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGEgcGFydGlyZSBkYWwgcXVhbGUgc2kgdnVvbGUgcmVjdXBlcmFyZSBsYSBJbm5lckZvcm0uXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW4gb2dnZXR0byBkaSB0aXBvIEZvcm0uXHJcbiAgICovXHJcbiAgZ2V0SW5uZXJGb3JtRnJvbUZpZWxkKGZpZWxkOiBCYXNlRmllbGQpOiBGb3JtIHtcclxuICAgIGlmICh0aGlzLmZvcm0uSW5uZXJGb3JtcyAmJiB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5maW5kKGYgPT4gZi5OYW1lID09IGZpZWxkLkxhYmVsKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZChmID0+IGYuTmFtZSA9PSBmaWVsZC5MYWJlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBvbkFkZFZpZXdFZGl0SW5uZXJGb3JtUmVjb3JkXHJcbiAgLyoqXHJcbiAqIE1ldG9kbyBwZXIgYXByaXJlIHVuIGRpYWxvZyBpbiBjdWkgYWdnaXVuZ2VyZS9tb2RpZmljYXJlL3Zpc3VhbGl6emFyZSB1biByZWNvcmQgYXBwYXJ0ZW5lbnRlXHJcbiAqIGEgdW5hIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gKiBAcGFyYW0gcmVjb3JkIEV2ZW50byBkaSBvdXRwdXQgZGVsIGNvbXBvbmVudGUgbGlzdC1mb3JtLXJlY29yZCwgY29udGllbmUgaWwgcmVjb3JkIHNlbGV6aW9uYXRvIGUgdW4gYm9vbGVubyBjaGUgaW5kaWNhIFxyXG4gKiBzZSBsJ3V0ZW50ZSB2dW9sZSBtb2RpZmljYXJlIG8gdmlzdWFsaXp6YXJlIGwnZWxlbWVudG8gc2VsZXppb25hdG8uXHJcbiAqIEBwYXJhbSBpbm5lckZvcm0gQ29udGllbmUgbGEgRm9ybSBkaSBkZXR0YWdsaW8gZGFsbGEgcXVhbGUgw6ggc3RhdG8gcmljaGllc3RvIGlsIHJlY29yZC5cclxuICovXHJcbiAgb25BZGRWaWV3RWRpdElubmVyRm9ybVJlY29yZChyZWNvcmQ6IHsgcmVjb3JkOiBSZWNvcmQsIG9ubHlWaWV3OiBib29sZWFuIH0sIGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0gPSB0aGlzLmdldElubmVyRm9ybUZyb21GaWVsZChmaWVsZCk7XHJcbiAgICBpZiAocmVjb3JkID09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElubmVyRm9ybVJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgdGhpcy5pbmRleElubmVyRm9ybVJlY29yZCA9IG51bGw7XHJcbiAgICAgIHRoaXMub25seVZpZXdJbm5lckZvcm1SZWNvcmQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm1SZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlY29yZC5yZWNvcmQpKTtcclxuICAgICAgdGhpcy5pbmRleElubmVyRm9ybVJlY29yZCA9IHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdLmluZGV4T2YocmVjb3JkKTtcclxuICAgICAgdGhpcy5vbmx5Vmlld0lubmVyRm9ybVJlY29yZCA9IHJlY29yZC5vbmx5VmlldztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0lubmVyRm9ybVJlY29yZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbm5lckZvcm1SZWNvcmQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6ICc3NSUnXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkVmlld0VkaXRJbm5lckZvcm1SZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIG9uU2F2ZUlubmVyRm9ybVJlY29yZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBzYWx2YXRhZ2dpbyBvIGFsbGEgY2hpdXN1cmEgZGVsIGRpYWxvZyBkaSBhZ2dpdW50YS9tb2RpZmljYS92aXN1YWxpenphemlvbmVcclxuICAgKiBkaSB1biByZWNvcmQgZGkgdW5hIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgT2dnZXR0byByZXN0aXR1aXRvIGRhbCBjb21wb25lbnRlIGFkZC1mb3JtLWZpZWxkIChxdWVzdG8gcXVpKSBjb250ZW5lbnRlIGlsIFJlY29yZCBcclxuICAgKiBhZ2dpb3JuYXRvIGRhbGwndXRlbnRlLiBTZSBudWxsIGFsbG9yYSBsJ3V0ZW50ZSBub24gaGEgbW9kaWZpY2F0byBudWxsYSBlIGhhIGNoaXVzbyBpbCBkaWFsb2cuXHJcbiAgICovXHJcbiAgb25TYXZlSW5uZXJGb3JtUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAocmVjb3JkICE9IG51bGwpIHtcclxuICAgICAgY29uc3QgYXJyYXlOYW1lOiBzdHJpbmcgPSB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtLk5hbWUuc3BsaXQoJyAnKS5qb2luKCdfJyk7XHJcbiAgICAgIGlmICh0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkICE9IG51bGwgJiYgdGhpcy5pbmRleElubmVyRm9ybVJlY29yZCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXVt0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkXSA9IHJlY29yZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMucmVjb3JkW2FycmF5TmFtZV0pIHtcclxuICAgICAgICAgIHRoaXMucmVjb3JkW2FycmF5TmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXS5wdXNoKHJlY29yZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVjb3JkUmVmLmNsb3NlKCk7XHJcblxyXG4gICAgLy8gUmljYXJpY28gbGEgdGFiZWxsYSBkZWkgcmVjb3JkIHBlciB2aXN1YWxpenphcmUgbGUgbW9kaWZpY2hlIGZhdHRlIGRhbGwndXRlbnRlLlxyXG4gICAgaWYgKHRoaXMubGlzdElubmVyRm9ybVJlY29yZHMgJiYgdGhpcy5saXN0SW5uZXJGb3JtUmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGlzdElubmVyRm9ybVJlY29yZHMuZm9yRWFjaChsaXN0ID0+IHtcclxuICAgICAgICBpZiAobGlzdCAmJiBsaXN0LnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICAgICAgbGlzdC50YWJsZVJlY29yZHMucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uU2F2ZUlubmVyRm9ybVJlY29yZFxyXG5cclxuICAvLyBQYXNzbyBsJ2ltbWFnaW5lIGRpc2VnbmF0YSBhbCBsaXZlbGxvIHN1cGVyaW9yZVxyXG4gIG9uSW1hZ2VEcmF3KGV2ZW50OiBEeW5BdHRhY2htZW50KSB7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gZXZlbnQ7XHJcbiAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8vIFBhc3NvIGwnaW1tYWdpbmUgZGlzZWduYXRhIGFsIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgb25JbWFnZU1hcmsoZXZlbnQ6IER5bkF0dGFjaG1lbnQpIHtcclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBldmVudDtcclxuICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gIH1cclxuICBcclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCkge1xyXG4gICAgdGhpcy5vdXQuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gb25TZWxlY3RlZFZhbHVlXHJcbiAgb25TZWxlY3RlZFZhbHVlKHZhbHVlOiBhbnkpIHtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25TZWxlY3RlZFZhbHVlIEZST00gREJHRVRURVJcIiwgdmFsdWUpO1xyXG4gICAgY29uc29sZS5sb2coXCJvblNlbGVjdGVkVmFsdWUgRlJPTSBEQkdFVFRFUlwiLCB2YWx1ZSwgdGhpcy5maWVsZCwgdGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10pO1xyXG5cclxuICAgIGlmICh2YWx1ZVswXSA9PSBcIioqKipDTE9TRSoqKipcIikgeyByZXR1cm47IH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQ2FtcG8gZGkgdGVzdG8nXSkge1xyXG4gICAgICB2YXIgdmFsdWVUb1B1dCA9IG51bGw7XHJcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKXsgdmFsdWVUb1B1dCA9IG51bGw7IH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVswXSkpIHsgdmFsdWVUb1B1dCA9IHZhbHVlWzBdWzBdOyB9IGVsc2UgeyB2YWx1ZVRvUHV0ID0gdmFsdWVbMF07IH1cclxuICAgICAgY29uc29sZS5sb2coXCJWQUxVRVRPUFVUIGNhbXBvZGl0ZXN0b1wiLCB2YWx1ZSwgdmFsdWVUb1B1dCk7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB2YWx1ZVRvUHV0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXSkge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25TZWxlY3RlZFZhbHVlIEZST00gREJHRVRURVIgRUxFTkNPIEdFTkVSSUNPXCIsIHZhbHVlKTtcclxuXHJcbiAgICAgIHZhciB2YWx1ZVRvUHV0ID0gbnVsbDtcclxuICAgICAgaWYgKHZhbHVlID09IG51bGwpeyB2YWx1ZVRvUHV0ID0gW107IH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVswXSkpIHsgdmFsdWVUb1B1dCA9IHZhbHVlWzBdWzBdOyB9IGVsc2UgeyB2YWx1ZVRvUHV0ID0gdmFsdWVbMF07IH1cclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiVkFMVUVUT1BVVCBlbGVuY29nZW5lcmljb1wiLCB2YWx1ZSwgdmFsdWVUb1B1dCk7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB2YWx1ZVRvUHV0O1xyXG4gICAgICB0aGlzLkRCR2V0dGVyRmllbGRzTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLkRCR2V0dGVyRmllbGRzTG9hZGVkID0gdHJ1ZTsgfSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25TZWxlY3RlZFZhbHVlXHJcblxyXG4gIC8vI3JlZ2lvbiBtYW5hZ2VETUdldHRlclxyXG4gIC8vIGNpIGVudHJvIHNlIGlsIGNhbXBvIGhhIGxhIG1vZGFsaXTDoCBkaSByZWN1cGVybyBkZWkgZGF0aSBcImRhIG1vZHVsbyBkaW5hbWljb1wiIFxyXG4gIC8vIGNoaWVkbyBhbCBzZXJ2ZXIgaSB2YWxvcmkgZWQgaW1wb3N0byB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdXHJcbiAgLyoqXHJcbiAgICogR2VzdGlzY2UgaWwgcmVjdXBlcm8gZGVpIGRhdGkgZGluYW1pY2kgKER5bmFtaWMgTW9kdWxlIEdldHRlcikgaW4gYmFzZSBhbGxhIG1vZGFsaXTDoC5cclxuICAgKi9cclxuICBtYW5hZ2VETUdldHRlcigpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNhcmRpbmFsaXR5ID09PSBEYXRhR2V0dGVyQ2FyZGluYWxpdHlFbnVtWydDT05URVNUVUFMSVpaQVRBIEFMTEEgUklTUE9TVEEnXSkge1xyXG4gICAgICAvLyBTZSBsYSBtb2RhbGl0w6Agw6ggXCJjb250ZXN0dWFsaXp6YXRhIGFsbGEgcmlzcG9zdGFcIlxyXG4gICAgICB0aGlzLmhhbmRsZVJlc3BvbnNlQ29udGV4dHVhbGl6ZWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEFsdHJpbWVudGkgZ2VzdGlhbW8gbGUgYWx0cmUgbW9kYWxpdMOgXHJcbiAgICAgIHRoaXMuaGFuZGxlTm9uQ29udGV4dHVhbGl6ZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVzZWd1ZSBsYSBjaGlhbWF0YSBzZSBsYSBtb2RhbGl0w6Agw6ggXCJjb250ZXN0dWFsaXp6YXRhIGFsbGEgcmlzcG9zdGFcIixcclxuICAgKiB1dGlsaXp6YW5kbyBsJ0lEIGRlbGxhIHJpc3Bvc3RhIG9yaWdpbmFyaWEuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVSZXNwb25zZUNvbnRleHR1YWxpemVkKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbnM/LmFkZGl0aW9uYWxQYXJhbXM/LltcIk9yaWdpbkFuc3dlcklEXCJdKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IFt7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5jb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zW1wiT3JpZ2luQW5zd2VySURcIl0sXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH1dO1xyXG4gIFxyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyBQYXJzaW5nIGRlbGxhIHJpc3Bvc3RhIGUgYWdnaW9ybmFtZW50byBkZWwgcmVjb3JkXHJcbiAgICAgICAgICBjb25zdCBhbnN3ZXJPYmogPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShhbnN3ZXJPYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb250ZXN0byBub24gdHJvdmF0b1wiKTtcclxuICAgICAgdGhpcy5kbWxvYWRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXN0aXNjZSB0dXR0ZSBsZSBhbHRyZSBtb2RhbGl0w6AsIGluY2x1c2EgbGEgY29udGVzdHVhbGl6emF6aW9uZSBwZXIgSUQgZXN0ZXJuby5cclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZU5vbkNvbnRleHR1YWxpemVkKCkge1xyXG4gICAgY29uc3QgY29udGVzdHVhbGl6YXRpb25QYXJhbSA9IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29udGVzdHVhbGl6YXRpb24/LmVudGl0eURNQWRkaXRpb25hbFBhcmFtIHx8IG51bGw7XHJcbiAgICBjb25zdCBjb250ZXN0dWFsaXphdGlvbklkID0gdGhpcy5jb25maWd1cmF0aW9ucz8uYWRkaXRpb25hbFBhcmFtcz8uW2NvbnRlc3R1YWxpemF0aW9uUGFyYW1dIHx8IG51bGw7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmJ1aWxkQmFzZVBhcmFtcyhjb250ZXN0dWFsaXphdGlvblBhcmFtLCBjb250ZXN0dWFsaXphdGlvbklkKTtcclxuICBcclxuICAgIGlmIChjb250ZXN0dWFsaXphdGlvbklkKSB7XHJcbiAgICAgIC8vIHNlIGhvIGNvbnRlc3R1YWxpenphemlvbmUgdHJhbWl0ZSBwYXJhbWV0cmlcclxuICAgICAgdGhpcy5mZXRjaERhdGFXaXRoQ29udGV4dHVhbGl6YXRpb24ocGFyYW1zLCBjb250ZXN0dWFsaXphdGlvblBhcmFtLCBjb250ZXN0dWFsaXphdGlvbklkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmV0Y2hEYXRhV2l0aG91dENvbnRleHR1YWxpemF0aW9uKHBhcmFtcywgY29udGVzdHVhbGl6YXRpb25QYXJhbSwgY29udGVzdHVhbGl6YXRpb25JZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb3N0cnVpc2NlIGkgcGFyYW1ldHJpIHJpY2hpZXN0aSBkYWxsYSBjaGlhbWF0YSBBUEkgaW4gYmFzZSBhbCBjb250ZXN0by5cclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkQmFzZVBhcmFtcyhwYXJhbTogc3RyaW5nLCBpZDogYW55KTogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiB7XHJcbiAgICBjb25zdCBiYXNlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID0gW1xyXG4gICAgICB7IFBhcmFtTmFtZTogXCJGb3JtQ29kZVwiLCBQYXJhbVZhbHVlOiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJVc2VySURcIiwgUGFyYW1WYWx1ZTogdGhpcy51c2VySUQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIk9yZ2FJRFwiLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uT3JnYUlELCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJtb2RlXCIsIFBhcmFtVmFsdWU6IDIsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgLy8gU2UgZGlzcG9uaWJpbGUsIGFnZ2l1bmdlIHBhcmFtZXRyaSBwZXIgbGEgY29udGVzdHVhbGl6emF6aW9uZVxyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIGJhc2VQYXJhbXMucHVzaCh7IFBhcmFtTmFtZTogXCJDb250ZXN0dWFsaXphdGlvblBhcmFtXCIsIFBhcmFtVmFsdWU6IHBhcmFtLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSB9KTtcclxuICAgICAgYmFzZVBhcmFtcy5wdXNoKHsgUGFyYW1OYW1lOiBcIkNvbnRlc3R1YWxpemF0aW9uSWRcIiwgUGFyYW1WYWx1ZTogaWQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdIH0pO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgcmV0dXJuIGJhc2VQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGlsIHZhbG9yZSBkZWwgY2FtcG8gbmVsIHJlY29yZCBjb3JyZW50ZSwgdXNhbmRvIGxhIGNvbG9ubmEgc3BlY2lmaWNhdGEuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGaWVsZFZhbHVlKGFuc3dlck9iajogYW55KSB7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gYW5zd2VyT2JqW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2VdIDtcclxuICAgIHRoaXMuZG1sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXNlZ3VlIGxhIGNoaWFtYXRhIEFQSSBpbiBtb2RhbGl0w6AgY29udGVzdHVhbGl6emF0YSBlIGFzc2VnbmEgaWwgcmlzdWx0YXRvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmV0Y2hEYXRhV2l0aENvbnRleHR1YWxpemF0aW9uKHBhcmFtcywgcGFyYW1OYW1lLCBwYXJhbUlkKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRXaXRoQ29udGV4dHVhbGl6YXRpb25CeUZvcm1Db2RlRW5kUG9pbnQsXHJcbiAgICAgIHBhcmFtcyxcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyZXMgfHwgcmVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5kbWxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNvbnN0IGFuc3dlciA9IHRoaXMucGlja0Fuc3dlcihyZXMpO1xyXG4gICAgICAgIGlmICghYW5zd2VyKSByZXR1cm47XHJcbiAgXHJcbiAgICAgICAgY29uc3QgYW5zd2VyT2JqID0gSlNPTi5wYXJzZShhbnN3ZXIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKGFuc3dlck9iaik7XHJcbiAgICAgIH0sXHJcbiAgICAgICgpID0+IHsgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogRXNlZ3VlIGxhIGNoaWFtYXRhIEFQSSBpbiBtb2RhbGl0w6AgTk9OIGNvbnRlc3R1YWxpenphdGEgZSBhc3NlZ25hIGlsIHJpc3VsdGF0by5cclxuICAgKi9cclxuICBwcml2YXRlIGZldGNoRGF0YVdpdGhvdXRDb250ZXh0dWFsaXphdGlvbihwYXJhbXMsIHBhcmFtTmFtZSwgcGFyYW1JZCkge1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtQ29kZUVuZFBvaW50LFxyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzIHx8IHJlcy5BbnN3ZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5kbWxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGxldCBhbnN3ZXJzID0gcmVzLkFuc3dlcnM7XHJcbiAgICAgICAgaWYgKHBhcmFtSWQpIHtcclxuICAgICAgICAgIGFuc3dlcnMgPSBhbnN3ZXJzLmZpbHRlcigoYSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsUGFyYW1zID0gSlNPTi5wYXJzZShyZXMuQWRkaXRpb25hbFBhcmFtc1tpXSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhZGRpdGlvbmFsUGFyYW1zW3BhcmFtTmFtZV0gPT0gcGFyYW1JZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjb25zdCBhbnN3ZXJTdHIgPSB0aGlzLnBpY2tBbnN3ZXIoYW5zd2Vycyk/LkFuc3dlcjtcclxuICAgICAgICBpZiAoIWFuc3dlclN0cikgcmV0dXJuO1xyXG4gIFxyXG4gICAgICAgIGNvbnN0IGFuc3dlck9iaiA9IEpTT04ucGFyc2UoYW5zd2VyU3RyKTtcclxuICAgICAgICB0aGlzLnNldEZpZWxkVmFsdWUoYW5zd2VyT2JqKTtcclxuICAgICAgfSxcclxuICAgICAgKCkgPT4geyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZXppb25hIGxhIHJpc3Bvc3RhIGNvcnJldHRhIHRyYSBsZSBkaXNwb25pYmlsaSwgaW4gYmFzZSBhbGxhIGNhcmRpbmFsaXTDoC5cclxuICAgKi9cclxuICBwcml2YXRlIHBpY2tBbnN3ZXIoYW5zd2VyczogYW55W10pOiBhbnkge1xyXG4gICAgaWYgKGFuc3dlcnMubGVuZ3RoID09PSAxKSByZXR1cm4gYW5zd2Vyc1swXTtcclxuXHJcbiAgICAvLyBTZSDDqCByaWNoaWVzdGEgbGEgcmlzcG9zdGEgXCJwacO5IHJlY2VudGVcIiwgcHJlbmRpYW1vIGxhIHByaW1hIChvcmRpbmFtZW50byBnacOgIGdlc3RpdG8gYSBtb250ZSlcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNhcmRpbmFsaXR5ID09IERhdGFHZXR0ZXJDYXJkaW5hbGl0eUVudW1bJ1BJVSBSRUNFTlRFJ10pIHtcclxuICAgICAgcmV0dXJuIGFuc3dlcnNbMF07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIERlZmF1bHQ6IHJlc3RpdHVpYW1vIGxhIHByaW1hXHJcbiAgICByZXR1cm4gYW5zd2Vyc1swXTtcclxuICB9XHJcbiAgXHJcbiAgLy8jZW5kcmVnaW9uIG1hbmFnZURNR2V0dGVyXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkZpcmVUcmlnZ2VyXHJcbiAgb25GaXJlVHJpZ2dlcihldjogRmlyZVRyaWdnZXIpIHtcclxuICAgIGV2LmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICBldi51c2VyUGF0aWVudCA9IHRoaXMudXNlcklELnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQoZXYpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25GaXJlVHJpZ2dlclxyXG5cclxuICAvLyNyZWdpb24gcmVsb2FkREJHZXR0ZXJcclxuICByZWxvYWREQkdldHRlcigpIHtcclxuICAgIHRoaXMubG9hZGVkREJHZXR0ZXIgPSBmYWxzZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlZERCR2V0dGVyID0gdHJ1ZTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gcmVsb2FkREJHZXR0ZXJcclxuXHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bVsnTWFudWFsZSddIHx8IGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydGb3JtdWxhJ11cIj5cclxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRzVGVtcGxhdGVcIlxyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCwgcmVjb3JkOiByZWNvcmQsIGZvcmNlZFZhbHVlczogbnVsbCB9XCI+PC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydEYSBkYXRhYmFzZSddXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBkYXRhZ2V0dGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiREJHZXR0ZXJGaWVsZHNMb2FkZWRcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZHNEQkdUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIHJlY29yZDogcmVjb3JkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRiZ2V0dGVyICpuZ0lmPVwibG9hZGVkREJHZXR0ZXJcIiBjbGFzcz1cImRiZ2V0dGVyXCIgW2NvbmZpZ3VyYXRpb25zXT1cImNvbmZpZ3VyYXRpb25zXCJcclxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiIWZpZWxkLkluTGlzdFZpZXdcIiBbZm9ybV09XCJmb3JtXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgICBbRGlyZWN0bHlPcGVuVGFibGVdPVwiZGlyZWN0bHlPcGVuVGFibGVcIiBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgW2luQ29uZmlnXT1cImluQ29uZmlnXCIgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIiAoZG9SZWxvYWQpPVwicmVsb2FkREJHZXR0ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRWYWx1ZSk9XCJvblNlbGVjdGVkVmFsdWUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2RiZ2V0dGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydEYSBtb2R1bG8gZGluYW1pY28nXVwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImRtbG9hZGVkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpZWxkc1RlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCwgcmVjb3JkOiByZWNvcmQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNmaWVsZHNUZW1wbGF0ZT5cclxuXHJcbiAgICA8dGV4dC1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydDYW1wbyBkaSB0ZXN0byddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC90ZXh0LWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDx0ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydBcmVhIGRpIHRlc3RvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L3RleHRhcmVhLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxhY3Rpb24tYnV0dG9uLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0JvdHRvbmUnXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCJcclxuICAgICAgICAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIiAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCI+XHJcbiAgICA8L2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGJvb2xlYW4tZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQm9vbGVhbm8nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCJcclxuICAgICAgICAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGF0ZS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydEYXRhIGUvbyBvcmEnXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCJcclxuICAgICAgICAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvZGF0ZS1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bnVtZXJpYy1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydDYW1wbyBudW1lcmljbyddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9udW1lcmljLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxsaXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxhdHRhY2htZW50LWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0FsbGVnYXRvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLkRlc2NyaXB0aW9uXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9hdHRhY2htZW50LWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxpbWFnZS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSddXCJcclxuICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtpbkNvbmZpZ109XCJpbkNvbmZpZ1wiIFttYXRUb29sdGlwXT1cImZpZWxkLkRlc2NyaXB0aW9uXCJcclxuICAgICAgICBbKHJlY29yZCldPVwicmVjb3JkXCIgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiXHJcbiAgICAgICAgKGltYWdlRHJhdyk9XCJvbkltYWdlRHJhdygkZXZlbnQpXCI+XHJcbiAgICA8L2ltYWdlLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxpbWFnZS13aXRoLW1hcmtlcnMtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnSW1tYWdpbmUgY29uIG1hcmtlcnMnXVwiXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIiBbaW5Db25maWddPVwiaW5Db25maWdcIiBbbWF0VG9vbHRpcF09XCJmaWVsZC5EZXNjcmlwdGlvblwiXHJcbiAgICAgICAgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIlxyXG4gICAgICAgIChpbWFnZU1hcmspPVwib25JbWFnZU1hcmsoJGV2ZW50KVwiPlxyXG4gICAgPC9pbWFnZS13aXRoLW1hcmtlcnMtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBpbW1hZ2luaSddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5EZXNjcmlwdGlvblwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCJcclxuICAgICAgICAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGU+XHJcblxyXG4gICAgPGxhYmVsLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0V0aWNoZXR0YSddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9sYWJlbC1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8IS0tIEZPUk0gREkgREVUVEFHTElPIChMQVNDSUFSRSBJTiBGT05ETykgLS0+XHJcbiAgICA8bGlzdC1mb3JtLXJlY29yZCAjbGlzdElubmVyRm9ybVJlY29yZHMgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRm9ybSBkaSBkZXR0YWdsaW8nXVwiXHJcbiAgICAgICAgW2Zvcm1dPVwiZ2V0SW5uZXJGb3JtRnJvbUZpZWxkKGZpZWxkKVwiIFtjb25maWd1cmF0aW9uc109XCJjb25maWdMaXN0XCJcclxuICAgICAgICAob25BZGRWaWV3RWRpdFJlY29yZCk9XCJvbkFkZFZpZXdFZGl0SW5uZXJGb3JtUmVjb3JkKCRldmVudCwgZmllbGQpXCI+XHJcbiAgICA8L2xpc3QtZm9ybS1yZWNvcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2ZpZWxkc0RCR1RlbXBsYXRlPlxyXG5cclxuICAgIDx0ZXh0LWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0NhbXBvIGRpIHRlc3RvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L3RleHQtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGxpc3QtdmFsdWUtZGJnLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9saXN0LXZhbHVlLWRiZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgPCEtLSBOb24gZ2VzdGl0aSAoZnVuemlvbmFubyBhIGN1bG8pIC0tPlxyXG5cclxuICAgIDxkYXRlLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0RhdGEgZS9vIG9yYSddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9kYXRlLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDx0ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydBcmVhIGRpIHRlc3RvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L3RleHRhcmVhLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxib29sZWFuLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0Jvb2xlYW5vJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2Jvb2xlYW4tZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPG51bWVyaWMtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQ2FtcG8gbnVtZXJpY28nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2ZpZWxkXT1cImZpZWxkXCJcclxuICAgICAgICAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvbnVtZXJpYy1maWVsZC10ZW1wbGF0ZT5cclxuXHJcblxyXG5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
@@ -4,7 +4,8 @@ import { UtilityHelperService } from '../../../../services/utilityHelper.service
|
|
|
4
4
|
import { DataGetterTypeEnum } from '../../../../models/baseField.model';
|
|
5
5
|
import { ModeEnum, TimeTypeEnum } from "tmw-picker";
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "
|
|
7
|
+
import * as i1 from "@angular/forms";
|
|
8
|
+
import * as i2 from "tmw-picker";
|
|
8
9
|
export class DateFieldTemplateComponent {
|
|
9
10
|
constructor() {
|
|
10
11
|
this.formulaObject = {};
|
|
@@ -63,10 +64,10 @@ export class DateFieldTemplateComponent {
|
|
|
63
64
|
}
|
|
64
65
|
else {
|
|
65
66
|
if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo data']) {
|
|
66
|
-
this.outputFormat = '
|
|
67
|
+
this.outputFormat = 'dd/MM/yyyy';
|
|
67
68
|
}
|
|
68
69
|
if (this.field.IsOnlyDate == DateTimeTypeEnum['Data e ora']) {
|
|
69
|
-
this.outputFormat = '
|
|
70
|
+
this.outputFormat = 'dd/MM/yyyy HH:mm';
|
|
70
71
|
}
|
|
71
72
|
if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo orario']) {
|
|
72
73
|
this.outputFormat = 'HH:mm';
|
|
@@ -95,10 +96,10 @@ export class DateFieldTemplateComponent {
|
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
DateFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateFieldTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
98
|
-
DateFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateFieldTemplateComponent, selector: "date-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<tmw-datetimepicker [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\" \r\n [disabled]=\"field.Readonly\" [(
|
|
99
|
+
DateFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateFieldTemplateComponent, selector: "date-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<tmw-datetimepicker [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\" \r\n [disabled]=\"field.Readonly\" [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onRecordValueChange($event)\" [outputFormat]=\"outputFormat\" [showSeconds]=\"showSeconds\">\r\n</tmw-datetimepicker>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.TmwDateTimePickerComponent, selector: "tmw-datetimepicker", inputs: ["debugMode", "pickerMode", "timeType", "label", "placeholder", "hint", "minDate", "maxDate", "locale", "inputFormat", "outputFormat", "forSaveLocalOnDB", "timeZone", "disabled", "readonly", "currentDateAsDefault", "showSpinners", "touchUi", "enableMeridian", "hideTime", "stepHour", "showHours", "hourLabel", "stepMinute", "showMinutes", "minuteLabel", "stepSecond", "showSeconds", "secondLabel", "disableMinute", "dayLabel", "monthLabel", "yearLabel", "highLightedDates"], outputs: ["dateChange"] }] });
|
|
99
100
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateFieldTemplateComponent, decorators: [{
|
|
100
101
|
type: Component,
|
|
101
|
-
args: [{ selector: 'date-field-template', template: "<tmw-datetimepicker [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\" \r\n [disabled]=\"field.Readonly\" [(
|
|
102
|
+
args: [{ selector: 'date-field-template', template: "<tmw-datetimepicker [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\" \r\n [disabled]=\"field.Readonly\" [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onRecordValueChange($event)\" [outputFormat]=\"outputFormat\" [showSeconds]=\"showSeconds\">\r\n</tmw-datetimepicker>" }]
|
|
102
103
|
}], ctorParameters: function () { return []; }, propDecorators: { field: [{
|
|
103
104
|
type: Input
|
|
104
105
|
}], record: [{
|
|
@@ -110,4 +111,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
110
111
|
}], recordChange: [{
|
|
111
112
|
type: Output
|
|
112
113
|
}] } });
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2RhdGUtZmllbGQtdGVtcGxhdGUvZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2RhdGUtZmllbGQtdGVtcGxhdGUvZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFhLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQU9wRCxNQUFNLE9BQU8sMEJBQTBCO0lBZXJDO1FBWFMsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDeEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUN6QixpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTFFLFVBQUssR0FBRyxRQUFRLENBQUM7UUFDakIsYUFBUSxHQUFHLFlBQVksQ0FBQztRQUd4QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixpQkFBWSxHQUFXLElBQUksQ0FBQztJQUVaLENB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bEMsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO2dCQUNoQyxNQUFNO1lBQ1IsS0FBSyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQkFDcEMsTUFBTTtTQUNUO0lBQ0gsQ0FBQzs7d0hBckdVLDBCQUEwQjs0R0FBMUIsMEJBQTBCLCtOQ2J2Qyw2YkFJcUI7NEZEU1IsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHFCQUFxQjswRUFNdEIsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgRGF0ZUZpZWxkLCBEYXRlVGltZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IERhdGFHZXR0ZXJUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBNb2RlRW51bSwgVGltZVR5cGVFbnVtIH0gZnJvbSBcInRtdy1waWNrZXJcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGF0ZS1maWVsZC10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZUZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgSUJhc2VGaWVsZENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkOiBEYXRlRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBtb2RlcyA9IE1vZGVFbnVtO1xyXG4gIHRpbWVUeXBlID0gVGltZVR5cGVFbnVtO1xyXG4gIG1vZGU6IE1vZGVFbnVtO1xyXG5cclxuICBzaG93U2Vjb25kczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG91dHB1dEZvcm1hdDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFRpbWVUeXBlKCk7XHJcbiAgICB0aGlzLnNldE91dHB1dEZvcm1hdCgpO1xyXG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRlbCBjYW1wbyBxdWFuZG8gcXVlc3RvIMOoIHJhcHByZXNlbnRhdG8gZGEgdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgdXBkYXRlRmllbGQoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5SZWFkb25seUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuUmVhZG9ubHkgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlJlYWRvbmx5SWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKCh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGUgfHwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5Gb3JtdWxhKSAmJiB0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWVsZC5WaXNpYmxlSWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICBpZighdGhpcy5maWVsZC5Jbkxpc3RWaWV3ICYmICF0aGlzLmZpZWxkLk1haW50YWluX1ZhbHVlKXtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdPW51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGUgJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlO1xyXG4gICAgfSAgICAgICBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZW1ldHRlcmUgbCdldmVudG8gY2hlIGlsIHZhbG9yZSBkZWwgcmVjb3JkIMOoIGNhbWJpYXRvLlxyXG4gICAqL1xyXG4gIG9uUmVjb3JkVmFsdWVDaGFuZ2UoZXYpIHtcclxuICAgIHRoaXMuZmllbGQuRmllbGRWYWx1ZT1ldjtcclxuICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5nZXQoW3RoaXMuZmllbGQuTmFtZV0pLnNldFZhbHVlKGV2KTtcclxuICAgIGlmICghdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0T3V0cHV0Rm9ybWF0KCl7XHJcblxyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0ZUZvcm1hdCAhPSBudWxsKXtcclxuICAgICAgdGhpcy5vdXRwdXRGb3JtYXQgPSB0aGlzLmZpZWxkLkRhdGVGb3JtYXQgXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5maWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gZGF0YSddKXtcclxuICAgICAgICB0aGlzLm91dHB1dEZvcm1hdCA9ICdERC9NTS9ZWVlZJztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ0RhdGEgZSBvcmEnXSl7XHJcbiAgICAgICAgdGhpcy5vdXRwdXRGb3JtYXQgPSAnREQvTU0vWVlZWSBISDptbSc7XHJcbiAgICAgIH0gICAgICBcclxuICAgICAgaWYgKHRoaXMuZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIG9yYXJpbyddKXtcclxuICAgICAgICB0aGlzLm91dHB1dEZvcm1hdCA9ICdISDptbSc7XHJcbiAgICAgIH0gICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3V0cHV0Rm9ybWF0LmluZGV4T2YoXCJzc1wiKSAhPSAtMSl7XHJcbiAgICAgIHRoaXMuc2hvd1NlY29uZHMgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbiBiYXNlIGFsIGZvcm1hdG8gZGVsbGEgZGF0YSByaWNoaWVzdGEgbmVsIERhdGVGaWVsZCAoc29sbyBkYXRhLCBzb2xvIG9yYXJpbyBvIGRhdGEgZSBvcmEpXHJcbiAgICogaW1wb3N0YSBsYSB2aXN1YWxpenphemlvbmUgY29ycmV0dGEgZGVsIGNvbXBvbmVudGUgZXFwLWRhdGV0aW1lcGlja2VyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VGltZVR5cGUoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZmllbGQuSXNPbmx5RGF0ZSkge1xyXG4gICAgICBjYXNlIERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl06XHJcbiAgICAgICAgdGhpcy5tb2RlID0gTW9kZUVudW0uREFURVBJQ0tFUjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBvcmFyaW9cIl06XHJcbiAgICAgICAgdGhpcy5tb2RlID0gTW9kZUVudW0uVElNRVBJQ0tFUjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBEYXRlVGltZVR5cGVFbnVtW1wiRGF0YSBlIG9yYVwiXTpcclxuICAgICAgICB0aGlzLm1vZGUgPSBNb2RlRW51bS5EQVRFVElNRVBJQ0tFUjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHRtdy1kYXRldGltZXBpY2tlciBbcGxhY2Vob2xkZXJdPVwiZmllbGQuRGVzY3JpcHRpb25cIiBbbGFiZWxdPVwiZmllbGQuRGVzY3JpcHRpb25cIiAgW3BpY2tlck1vZGVdPVwibW9kZVwiXHJcbiAgICBbbWluRGF0ZV09XCJmaWVsZC5NaW5EYXRlID8gZmllbGQuTWluRGF0ZSA6IG51bGxcIiBbbWF4RGF0ZV09XCJmaWVsZC5NYXhEYXRlID8gZmllbGQuTWF4RGF0ZSA6IG51bGxcIiBcclxuICAgIFtkaXNhYmxlZF09XCJmaWVsZC5SZWFkb25seVwiIFsobmdNb2RlbElucHV0KV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIlxyXG4gICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKCRldmVudClcIiBbb3V0cHV0Rm9ybWF0XT1cIm91dHB1dEZvcm1hdFwiIFtzaG93U2Vjb25kc109XCJzaG93U2Vjb25kc1wiPlxyXG48L3Rtdy1kYXRldGltZXBpY2tlcj4iXX0=
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2RhdGUtZmllbGQtdGVtcGxhdGUvZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2RhdGUtZmllbGQtdGVtcGxhdGUvZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFhLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUFPcEQsTUFBTSxPQUFPLDBCQUEwQjtJQWVyQztRQVhTLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDekIsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUUxRSxVQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxZQUFZLENBQUM7UUFHeEIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsaUJBQVksR0FBVyxJQUFJLENBQUM7SUFFWixD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Q2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDaEMsTUFBTTtZQUNSLEtBQUssZ0JBQWdCLENBQUMsWUFBWSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7Z0JBQ3BDLE1BQU07U0FDVDtJQUNILENBQUM7O3dIQXJHVSwwQkFBMEI7NEdBQTFCLDBCQUEwQiwrTkNidkMsZ2JBSXFCOzRGRFNSLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSxxQkFBcUI7MEVBTXRCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGVGaWVsZCwgRGF0ZVRpbWVUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvZGF0ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBEYXRhR2V0dGVyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTW9kZUVudW0sIFRpbWVUeXBlRW51bSB9IGZyb20gXCJ0bXctcGlja2VyXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RhdGUtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVGaWVsZFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBmaWVsZDogRGF0ZUZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgbW9kZXMgPSBNb2RlRW51bTtcclxuICB0aW1lVHlwZSA9IFRpbWVUeXBlRW51bTtcclxuICBtb2RlOiBNb2RlRW51bTtcclxuXHJcbiAgc2hvd1NlY29uZHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvdXRwdXRGb3JtYXQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRUaW1lVHlwZSgpO1xyXG4gICAgdGhpcy5zZXRPdXRwdXRGb3JtYXQoKTtcclxuICAgIHRoaXMudXBkYXRlRmllbGQoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVhZG9ubHlJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLlJlYWRvbmx5ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5SZWFkb25seUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgIH1cclxuICAgIGlmICgodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIHx8IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW0uRm9ybXVsYSkgJiYgdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuVmlzaWJsZUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgICAgaWYoIXRoaXMuZmllbGQuSW5MaXN0VmlldyAmJiAhdGhpcy5maWVsZC5NYWludGFpbl9WYWx1ZSl7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXT1udWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTtcclxuICAgIH0gICAgICAgXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuICAgKi9cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKGV2KSB7XHJcbiAgICB0aGlzLmZpZWxkLkZpZWxkVmFsdWU9ZXY7XHJcbiAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuZ2V0KFt0aGlzLmZpZWxkLk5hbWVdKS5zZXRWYWx1ZShldik7XHJcbiAgICBpZiAoIXRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE91dHB1dEZvcm1hdCgpe1xyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGVGb3JtYXQgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMub3V0cHV0Rm9ybWF0ID0gdGhpcy5maWVsZC5EYXRlRm9ybWF0IFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIGRhdGEnXSl7XHJcbiAgICAgICAgdGhpcy5vdXRwdXRGb3JtYXQgPSAnZGQvTU0veXl5eSc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydEYXRhIGUgb3JhJ10pe1xyXG4gICAgICAgIHRoaXMub3V0cHV0Rm9ybWF0ID0gJ2RkL01NL3l5eXkgSEg6bW0nO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBvcmFyaW8nXSl7XHJcbiAgICAgICAgdGhpcy5vdXRwdXRGb3JtYXQgPSAnSEg6bW0nO1xyXG4gICAgICB9ICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm91dHB1dEZvcm1hdC5pbmRleE9mKFwic3NcIikgIT0gLTEpe1xyXG4gICAgICB0aGlzLnNob3dTZWNvbmRzID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW4gYmFzZSBhbCBmb3JtYXRvIGRlbGxhIGRhdGEgcmljaGllc3RhIG5lbCBEYXRlRmllbGQgKHNvbG8gZGF0YSwgc29sbyBvcmFyaW8gbyBkYXRhIGUgb3JhKVxyXG4gICAqIGltcG9zdGEgbGEgdmlzdWFsaXp6YXppb25lIGNvcnJldHRhIGRlbCBjb21wb25lbnRlIGVxcC1kYXRldGltZXBpY2tlci5cclxuICAgKi9cclxuICBwcml2YXRlIHNldFRpbWVUeXBlKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLmZpZWxkLklzT25seURhdGUpIHtcclxuICAgICAgY2FzZSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBkYXRhXCJdOlxyXG4gICAgICAgIHRoaXMubW9kZSA9IE1vZGVFbnVtLkRBVEVQSUNLRVI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gb3JhcmlvXCJdOlxyXG4gICAgICAgIHRoaXMubW9kZSA9IE1vZGVFbnVtLlRJTUVQSUNLRVI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRGF0ZVRpbWVUeXBlRW51bVtcIkRhdGEgZSBvcmFcIl06XHJcbiAgICAgICAgdGhpcy5tb2RlID0gTW9kZUVudW0uREFURVRJTUVQSUNLRVI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjx0bXctZGF0ZXRpbWVwaWNrZXIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLkRlc2NyaXB0aW9uXCIgW2xhYmVsXT1cImZpZWxkLkRlc2NyaXB0aW9uXCIgIFtwaWNrZXJNb2RlXT1cIm1vZGVcIlxyXG4gICAgW21pbkRhdGVdPVwiZmllbGQuTWluRGF0ZSA/IGZpZWxkLk1pbkRhdGUgOiBudWxsXCIgW21heERhdGVdPVwiZmllbGQuTWF4RGF0ZSA/IGZpZWxkLk1heERhdGUgOiBudWxsXCIgXHJcbiAgICBbZGlzYWJsZWRdPVwiZmllbGQuUmVhZG9ubHlcIiBbKG5nTW9kZWwpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiXHJcbiAgICAoZGF0ZUNoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKCRldmVudClcIiBbb3V0cHV0Rm9ybWF0XT1cIm91dHB1dEZvcm1hdFwiIFtzaG93U2Vjb25kc109XCJzaG93U2Vjb25kc1wiPlxyXG48L3Rtdy1kYXRldGltZXBpY2tlcj4iXX0=
|