ontimize-web-ngx 15.0.0-beta.4 → 15.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/esm2020/lib/components/form/o-form.component.mjs +11 -2
  2. package/esm2020/lib/components/grid/o-grid.component.mjs +11 -1
  3. package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +3 -3
  4. package/esm2020/lib/components/input/currency-input/o-currency-input.component.mjs +4 -4
  5. package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +2 -18
  6. package/esm2020/lib/components/input/o-form-service-component.class.mjs +7 -9
  7. package/esm2020/lib/components/o-service-component.class.mjs +3 -6
  8. package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +26 -4
  9. package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +20 -4
  10. package/esm2020/lib/components/table/o-table.component.mjs +4 -1
  11. package/esm2020/lib/directives/o-mat-error.directive.mjs +4 -1
  12. package/esm2020/lib/i18n/i18n.mjs +12 -6
  13. package/esm2020/lib/layouts/form-layout/o-form-layout-manager-base.class.mjs +1 -1
  14. package/fesm2015/ontimize-web-ngx.mjs +95 -47
  15. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  16. package/fesm2020/ontimize-web-ngx.mjs +95 -47
  17. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  18. package/lib/components/form/o-form.component.d.ts +4 -1
  19. package/lib/components/grid/o-grid.component.d.ts +1 -0
  20. package/lib/components/input/file-input/o-file-input.component.d.ts +1 -1
  21. package/lib/components/table/extensions/header/table-menu/o-table-menu.component.d.ts +5 -0
  22. package/lib/components/table/o-table.component.d.ts +1 -1
  23. package/lib/i18n/i18n.d.ts +6 -0
  24. package/lib/layouts/form-layout/o-form-layout-manager-base.class.d.ts +1 -0
  25. package/package.json +1 -1
  26. package/theme.scss +71 -71
  27. package/theming/styles/ontimize-v8/o-form-field-style.scss +6 -3
@@ -26,22 +26,6 @@ import * as i13 from "@angular/material/tooltip";
26
26
  import * as i14 from "../../../pipes/o-translate.pipe";
27
27
  import * as i15 from "../../form/o-form.component";
28
28
  export const DEFAULT_INPUTS_O_FILE_INPUT = [
29
- 'oattr: attr',
30
- 'olabel: label',
31
- 'floatLabel: float-label',
32
- 'oplaceholder: placeholder',
33
- 'tooltip',
34
- 'tooltipPosition: tooltip-position',
35
- 'tooltipShowDelay: tooltip-show-delay',
36
- 'tooltipHideDelay: tooltip-hide-delay',
37
- 'enabled',
38
- 'orequired: required',
39
- 'service',
40
- 'entity',
41
- 'serviceType : service-type',
42
- 'width',
43
- 'readOnly: read-only',
44
- 'clearButton: clear-button',
45
29
  'acceptFileType: accept-file-type',
46
30
  'maxFileSize: max-file-size',
47
31
  'multiple',
@@ -233,7 +217,7 @@ export class OFileInputComponent extends OFormDataComponent {
233
217
  }
234
218
  }
235
219
  OFileInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OFileInputComponent, deps: [{ token: forwardRef(() => OFormComponent), optional: true }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
236
- OFileInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OFileInputComponent, selector: "o-file-input", inputs: { oattr: ["attr", "oattr"], olabel: ["label", "olabel"], floatLabel: ["float-label", "floatLabel"], oplaceholder: ["placeholder", "oplaceholder"], tooltip: "tooltip", tooltipPosition: ["tooltip-position", "tooltipPosition"], tooltipShowDelay: ["tooltip-show-delay", "tooltipShowDelay"], tooltipHideDelay: ["tooltip-hide-delay", "tooltipHideDelay"], enabled: "enabled", orequired: ["required", "orequired"], service: "service", entity: "entity", serviceType: ["service-type", "serviceType"], width: "width", readOnly: ["read-only", "readOnly"], clearButton: ["clear-button", "clearButton"], acceptFileType: ["accept-file-type", "acceptFileType"], maxFileSize: ["max-file-size", "maxFileSize"], multiple: "multiple", maxFiles: ["max-files", "maxFiles"], showInfo: ["show-info", "showInfo"], splitUpload: ["split-upload", "splitUpload"], additionalData: ["additional-data", "additionalData"], appearance: "appearance", hideRequiredMarker: ["hide-required-marker", "hideRequiredMarker"], labelVisible: ["label-visible", "labelVisible"] }, outputs: { onBeforeUpload: "onBeforeUpload", onBeforeUploadFile: "onBeforeUploadFile", onProgress: "onProgress", onProgressFile: "onProgressFile", onCancel: "onCancel", onCancelFile: "onCancelFile", onUpload: "onUpload", onUploadFile: "onUploadFile", onComplete: "onComplete", onCompleteFile: "onCompleteFile", onError: "onError", onErrorFile: "onErrorFile" }, providers: [
220
+ OFileInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OFileInputComponent, selector: "o-file-input", inputs: { acceptFileType: ["accept-file-type", "acceptFileType"], maxFileSize: ["max-file-size", "maxFileSize"], multiple: "multiple", maxFiles: ["max-files", "maxFiles"], showInfo: ["show-info", "showInfo"], splitUpload: ["split-upload", "splitUpload"], additionalData: ["additional-data", "additionalData"], appearance: "appearance", hideRequiredMarker: ["hide-required-marker", "hideRequiredMarker"], labelVisible: ["label-visible", "labelVisible"] }, outputs: { onBeforeUpload: "onBeforeUpload", onBeforeUploadFile: "onBeforeUploadFile", onProgress: "onProgress", onProgressFile: "onProgressFile", onCancel: "onCancel", onCancelFile: "onCancelFile", onUpload: "onUpload", onUploadFile: "onUploadFile", onComplete: "onComplete", onCompleteFile: "onCompleteFile", onError: "onError", onErrorFile: "onErrorFile" }, providers: [
237
221
  { provide: OntimizeFileService, useFactory: fileServiceFactory, deps: [Injector] }
238
222
  ], viewQueries: [{ propertyName: "inputFile", first: true, predicate: ["inputFile"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\"\n [matTooltipPosition]=\"tooltipPosition\" [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\">\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [hideRequiredMarker]=\"hideRequiredMarker\" [class.custom-width]=\"hasCustomWidth\"\n class=\"icon-field\" (click)=\"!enabled || isReadOnly ? null : inputFile.click()\" fxFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <input #inputShowValue matInput type=\"text\" [id]=\"getAttribute()\" [formControlName]=\"getAttribute()\" [placeholder]=\"placeHolder\"\n [required]=\"isRequired\" readonly (change)=\"onChangeEvent($event)\">\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n <button type=\"button\" *ngIf=\"getValue()\" [disabled]=\"!isValid || uploader.isUploading\" matSuffix mat-icon-button (click)=\"onClickUpload($event)\">\n <mat-icon>file_upload</mat-icon>\n </button>\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('fileType')\">\n {{ 'FORM_VALIDATION.FILE_TYPE' | oTranslate}} ({{ getErrorValue('fileType','allowedFileTypes') }})\n </mat-error>\n <mat-error *oMatError=\"hasError('fileSize')\">\n {{ 'FORM_VALIDATION.FILE_MAXSIZE' | oTranslate }}: {{ getErrorValue('fileSize', 'maxFileSize') }} bytes\n </mat-error>\n <mat-error *oMatError=\"hasError('numFile')\">\n {{ 'FORM_VALIDATION.FILE_MAXNUM' | oTranslate }}: {{ getErrorValue('numFile', 'maxFiles') }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n <input #inputFile type=\"file\" id=\"{{getAttribute()+'-file-input'}}\"\n [attr.accept]=\"acceptFileType ? acceptFileType.replace(arraySeparatorRegExp, ',') : null\" (change)=\"fileSelected($event)\" hidden=\"true\"\n [attr.multiple]=\"multiple ? '' : null\">\n <div *ngIf=\"showInfo && files\">\n <mat-progress-bar *ngIf=\"!splitUpload && uploader.isUploading\" color=\"accent\" mode=\"determinate\" [value]=\"uploader.progress\"></mat-progress-bar>\n <mat-list>\n <mat-list-item *ngFor=\"let file of files\">\n <mat-icon mat-list-icon>insert_drive_file</mat-icon>\n <span mat-line>{{ file.name }}</span>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <mat-progress-spinner *ngIf=\"splitUpload && file.isUploading\" color=\"accent\" mode=\"determinate\" [value]=\"file.progress\" class=\"uploading\"\n diameter=\"3\" strokeWidth=\"3\"></mat-progress-spinner>\n <mat-icon *ngIf=\"splitUpload && file.isUploaded && file.isSuccess\" class=\"uploaded\" svgIcon=\"ontimize:check_circle\"></mat-icon>\n <mat-icon *ngIf=\"splitUpload && file.isUploaded && file.isError\" class=\"error\" svgIcon=\"ontimize:error_outline\"></mat-icon>\n </div>\n </mat-list-item>\n </mat-list>\n </div>\n</div>\n", styles: [".o-file-input-buttons{position:absolute;top:0;bottom:0;right:0;margin:auto}mat-icon.uploaded{color:#0f9d58}mat-icon.error{color:#d50000}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.OMatErrorDirective, selector: "[oMatError]", inputs: ["oMatError"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatLine, selector: "[mat-line], [matLine]" }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i9.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i10.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i10.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i11.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i12.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i14.OTranslatePipe, name: "oTranslate" }] });
239
223
  __decorate([
@@ -270,4 +254,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
270
254
  type: ViewChild,
271
255
  args: ['inputFile']
272
256
  }], showInfo: [], multiple: [], splitUpload: [], maxFileSize: [], maxFiles: [] } });
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1maWxlLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2ZpbGUtaW5wdXQvby1maWxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2ZpbGUtaW5wdXQvby1maWxlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUd2RixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXhELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHO0lBQ3pDLGFBQWE7SUFD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LEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUU7S0FDbkYseUpDbkZILDh5R0FnREE7QUQrQ0U7SUFBQyxxQkFBcUIsRUFBRTs7cURBQ1M7QUFDakM7SUFBQyxxQkFBcUIsRUFBRTs7cURBQ1M7QUFDakM7SUFBQyxxQkFBcUIsRUFBRTs7d0RBQ1c7QUFFbkM7SUFBQyxvQkFBb0IsRUFBRTs7d0RBQ0k7QUFDM0I7SUFBQyxvQkFBb0IsRUFBRTs7cURBQ007MkZBcEJsQixtQkFBbUI7a0JBVi9CLFNBQVM7K0JBQ0UsY0FBYyxVQUdoQiwyQkFBMkIsV0FDMUIsNEJBQTRCLGFBQzFCO3dCQUNULEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRTtxQkFDbkY7OzBCQTBDRSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7NEZBbEMvQyxTQUFTO3NCQURmLFNBQVM7dUJBQUMsV0FBVztnQkFNZixRQUFRLE1BRVIsUUFBUSxNQUVSLFdBQVcsTUFHWCxXQUFXLE1BRVgsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3QsIEluamVjdG9yLCBPbkluaXQsIE9wdGlvbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciwgTnVtYmVySW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBJRmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2ZpbGUtc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZmlsZVNlcnZpY2VGYWN0b3J5IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE9udGltaXplRmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vbnRpbWl6ZS9vbnRpbWl6ZS1maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0NvbmZpZ3VyZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29uZmlndXJlLXNlcnZpY2UtYXJncy50eXBlJztcbmltcG9ydCB7IEZvcm1WYWx1ZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9mb3JtLXZhbHVlLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL28tZm9ybS1kYXRhLWNvbXBvbmVudC5jbGFzcyc7XG5pbXBvcnQgeyBPVmFsdWVDaGFuZ2VFdmVudCB9IGZyb20gJy4uLy4uL28tdmFsdWUtY2hhbmdlLWV2ZW50LmNsYXNzJztcbmltcG9ydCB7IE9GaWxlSXRlbSB9IGZyb20gJy4vby1maWxlLWl0ZW0uY2xhc3MnO1xuaW1wb3J0IHsgT0ZpbGVVcGxvYWRlciB9IGZyb20gJy4vby1maWxlLXVwbG9hZGVyLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fRklMRV9JTlBVVCA9IFtcbiAgJ29hdHRyOiBhdHRyJyxcbiAgJ29sYWJlbDogbGFiZWwnLFxuICAnZmxvYXRMYWJlbDogZmxvYXQtbGFiZWwnLFxuICAnb3BsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcicsXG4gICd0b29sdGlwJyxcbiAgJ3Rvb2x0aXBQb3NpdGlvbjogdG9vbHRpcC1wb3NpdGlvbicsXG4gICd0b29sdGlwU2hvd0RlbGF5OiB0b29sdGlwLXNob3ctZGVsYXknLFxuICAndG9vbHRpcEhpZGVEZWxheTogdG9vbHRpcC1oaWRlLWRlbGF5JyxcbiAgJ2VuYWJsZWQnLFxuICAnb3JlcXVpcmVkOiByZXF1aXJlZCcsXG4gICdzZXJ2aWNlJyxcbiAgJ2VudGl0eScsXG4gICdzZXJ2aWNlVHlwZSA6IHNlcnZpY2UtdHlwZScsXG4gICd3aWR0aCcsXG4gICdyZWFkT25seTogcmVhZC1vbmx5JyxcbiAgJ2NsZWFyQnV0dG9uOiBjbGVhci1idXR0b24nLFxuXG4gIC8vIGFjY2VwdC1maWxlLXR5cGUgW3N0cmluZ106IGZpbGUgdHlwZXMgYWxsb3dlZCBvbiB0aGUgZmlsZSBpbnB1dCwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gIC8vIGZpbGVfZXh0ZW5zaW9uLCBhdWRpby8qLCB2aWRlby8qLCBpbWFnZS8qLCBtZWRpYV90eXBlLiBTZWUgaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS90YWdzL2F0dF9pbnB1dF9hY2NlcHQuYXNwXG4gICdhY2NlcHRGaWxlVHlwZTogYWNjZXB0LWZpbGUtdHlwZScsXG5cbiAgLy8gbWF4LWZpbGUtc2l6ZSBbbnVtYmVyXTogbWF4aW11bSBmaWxlIHNpemUgYWxsb3dlZCwgaW4gYnl0ZXMuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnbWF4RmlsZVNpemU6IG1heC1maWxlLXNpemUnLFxuXG4gIC8vIG11bHRpcGxlIFtib29sZWFuXTogbXVsdGlwbGUgZmlsZSBzZWxlY3Rpb24gYWxsb3dlZC4gRGVmYXVsdDogbm8uXG4gICdtdWx0aXBsZScsXG5cbiAgLy8gbWF4LWZpbGVzIFtudW1iZXJdOiBtYXhpbXVtIG51bWJlciBvZiBmaWxlcyBhbGxvd2VkLiBEZWZhdWx0OiAtMS5cbiAgJ21heEZpbGVzOiBtYXgtZmlsZXMnLFxuXG4gIC8vIHNob3ctaW5mbyBbYm9vbGVhbl06IHNob3cgZmlsZXMgaW5mb3JtYXRpb24uIERlZmF1bHQ6IG5vLlxuICAnc2hvd0luZm86IHNob3ctaW5mbycsXG5cbiAgLy8gc3BsaXQtdXBsb2FkIFtib29sZWFuXTogZWFjaCBmaWxlIGlzIHVwbG9hZGVkIGluIGEgcmVxdWVzdCAodHJ1ZSkgb3IgYWxsIGZpbGVzIGFyZSB1cGxvYWRlZCBpbiBhIHNpbmdsZSByZXF1ZXN0IChmYWxzZSkuIERlZmF1bHQ6IHllcy5cbiAgJ3NwbGl0VXBsb2FkOiBzcGxpdC11cGxvYWQnLFxuXG4gIC8vIGFkZGl0aW9uYWwtZGF0YSBbSlNPTl06IHVzZWQgdG8gc2VuZCBhZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhlIHVwbG9hZCByZXF1ZXN0LlxuICAnYWRkaXRpb25hbERhdGE6IGFkZGl0aW9uYWwtZGF0YScsXG4gICdhcHBlYXJhbmNlJyxcbiAgJ2hpZGVSZXF1aXJlZE1hcmtlcjpoaWRlLXJlcXVpcmVkLW1hcmtlcicsXG4gICdsYWJlbFZpc2libGU6bGFiZWwtdmlzaWJsZSdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19GSUxFX0lOUFVUID0gW1xuICAnb25CZWZvcmVVcGxvYWQnLFxuICAnb25CZWZvcmVVcGxvYWRGaWxlJyxcbiAgJ29uUHJvZ3Jlc3MnLFxuICAnb25Qcm9ncmVzc0ZpbGUnLFxuICAnb25DYW5jZWwnLFxuICAnb25DYW5jZWxGaWxlJyxcbiAgJ29uVXBsb2FkJyxcbiAgJ29uVXBsb2FkRmlsZScsXG4gICdvbkNvbXBsZXRlJyxcbiAgJ29uQ29tcGxldGVGaWxlJyxcbiAgJ29uRXJyb3InLFxuICAnb25FcnJvckZpbGUnXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWZpbGUtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vby1maWxlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1maWxlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19GSUxFX0lOUFVULFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19GSUxFX0lOUFVULFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE9udGltaXplRmlsZVNlcnZpY2UsIHVzZUZhY3Rvcnk6IGZpbGVTZXJ2aWNlRmFjdG9yeSwgZGVwczogW0luamVjdG9yXSB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgT0ZpbGVJbnB1dENvbXBvbmVudCBleHRlbmRzIE9Gb3JtRGF0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIGFycmF5U2VwYXJhdG9yUmVnRXhwID0gbmV3IFJlZ0V4cCgvXFw7L2dpKTtcbiAgcHVibGljIHVwbG9hZGVyOiBPRmlsZVVwbG9hZGVyO1xuICBwdWJsaWMgZmlsZVNlcnZpY2U6IElGaWxlU2VydmljZTtcbiAgQFZpZXdDaGlsZCgnaW5wdXRGaWxlJylcbiAgcHVibGljIGlucHV0RmlsZTogRWxlbWVudFJlZjtcblxuICBwdWJsaWMgYXV0b0JpbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGF1dG9SZWdpc3RlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHNob3dJbmZvOiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzcGxpdFVwbG9hZDogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBhY2NlcHRGaWxlVHlwZTogc3RyaW5nO1xuICBATnVtYmVySW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgbWF4RmlsZVNpemU6IG51bWJlcjtcbiAgQE51bWJlcklucHV0Q29udmVydGVyKClcbiAgcHVibGljIG1heEZpbGVzOiBudW1iZXIgPSAtMTtcblxuICBwdWJsaWMgb25CZWZvcmVVcGxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBvbkJlZm9yZVVwbG9hZEZpbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBvblByb2dyZXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25Qcm9ncmVzc0ZpbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uQ2FuY2VsRmlsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uVXBsb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25VcGxvYWRGaWxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25Db21wbGV0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uQ29tcGxldGVGaWxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25FcnJvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uRXJyb3JGaWxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByb3RlY3RlZCBzZXJ2aWNlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBlbnRpdHk6IHN0cmluZztcbiAgcHJvdGVjdGVkIHNlcnZpY2VUeXBlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE9Gb3JtQ29tcG9uZW50KSkgZm9ybTogT0Zvcm1Db21wb25lbnQsXG4gICAgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHtcbiAgICBzdXBlcihmb3JtLCBlbFJlZiwgaW5qZWN0b3IpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuXG4gICAgdGhpcy51cGxvYWRlci5vbkJlZm9yZVVwbG9hZEFsbCA9ICgpID0+IHRoaXMub25CZWZvcmVVcGxvYWQuZW1pdCgpO1xuICAgIHRoaXMudXBsb2FkZXIub25CZWZvcmVVcGxvYWRJdGVtID0gaXRlbSA9PiB0aGlzLm9uQmVmb3JlVXBsb2FkRmlsZS5lbWl0KGl0ZW0pO1xuICAgIHRoaXMudXBsb2FkZXIub25Qcm9ncmVzc0FsbCA9IHByb2dyZXNzID0+IHRoaXMub25Qcm9ncmVzcy5lbWl0KHByb2dyZXNzKTtcbiAgICB0aGlzLnVwbG9hZGVyLm9uUHJvZ3Jlc3NJdGVtID0gKGl0ZW0sIHByb2dyZXNzKSA9PiB0aGlzLm9uUHJvZ3Jlc3NGaWxlLmVtaXQoeyBpdGVtOiBpdGVtLCBwcm9ncmVzczogcHJvZ3Jlc3MgfSk7XG4gICAgdGhpcy51cGxvYWRlci5vbkNhbmNlbEFsbCA9ICgpID0+IHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICAgIHRoaXMudXBsb2FkZXIub25DYW5jZWxJdGVtID0gaXRlbSA9PiB0aGlzLm9uQ2FuY2VsRmlsZS5lbWl0KCk7XG4gICAgdGhpcy51cGxvYWRlci5vblN1Y2Nlc3NBbGwgPSByZXNwb25zZSA9PiB0aGlzLm9uVXBsb2FkLmVtaXQoeyByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gICAgdGhpcy51cGxvYWRlci5vblN1Y2Nlc3NJdGVtID0gKGl0ZW0sIHJlc3BvbnNlKSA9PiB0aGlzLm9uVXBsb2FkRmlsZS5lbWl0KHsgaXRlbTogaXRlbSwgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICAgIHRoaXMudXBsb2FkZXIub25Db21wbGV0ZUFsbCA9ICgpID0+IHRoaXMub25Db21wbGV0ZS5lbWl0KCk7XG4gICAgdGhpcy51cGxvYWRlci5vbkNvbXBsZXRlSXRlbSA9IGl0ZW0gPT4gdGhpcy5vbkNvbXBsZXRlRmlsZS5lbWl0KGl0ZW0pO1xuICAgIHRoaXMudXBsb2FkZXIub25FcnJvckFsbCA9IGVycm9yID0+IHRoaXMub25FcnJvci5lbWl0KGVycm9yKTtcbiAgICB0aGlzLnVwbG9hZGVyLm9uRXJyb3JJdGVtID0gKGl0ZW0sIGVycm9yKSA9PiB0aGlzLm9uRXJyb3JGaWxlLmVtaXQoeyBpdGVtOiBpdGVtLCBlcnJvcjogZXJyb3IgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5pbml0aWFsaXplKCk7XG5cbiAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5mb3JtLnNlcnZpY2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcbiAgICAgIHRoaXMuZW50aXR5ID0gdGhpcy5mb3JtLmVudGl0eTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZ3VyZVNlcnZpY2UoKTtcbiAgICB0aGlzLnVwbG9hZGVyID0gbmV3IE9GaWxlVXBsb2FkZXIodGhpcy5maWxlU2VydmljZSwgdGhpcy5lbnRpdHkpO1xuICAgIHRoaXMudXBsb2FkZXIuc3BsaXRVcGxvYWQgPSB0aGlzLnNwbGl0VXBsb2FkO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZ3VyZVNlcnZpY2UoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVTZXJ2aWNlQXJncyA9IHsgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsIGJhc2VTZXJ2aWNlOiBPbnRpbWl6ZUZpbGVTZXJ2aWNlLCBlbnRpdHk6IHRoaXMuZW50aXR5LCBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlIH1cbiAgICB0aGlzLmZpbGVTZXJ2aWNlID0gVXRpbC5jb25maWd1cmVTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzKTtcblxuICB9XG5cbiAgcHVibGljIHJlc29sdmVWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBzdXBlci5yZXNvbHZlVmFsaWRhdG9ycygpO1xuICAgIGlmICh0aGlzLmFjY2VwdEZpbGVUeXBlKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5maWxldHlwZVZhbGlkYXRvci5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4RmlsZVNpemUpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLm1heEZpbGVTaXplVmFsaWRhdG9yLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLm1heEZpbGVzICE9PSAtMSkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMubWF4RmlsZXNWYWxpZGF0b3IuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICB9XG5cbiAgcHVibGljIGZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgdmFsdWU6IHN0cmluZyA9ICcnO1xuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZUxpc3QgPSB0YXJnZXQuZmlsZXM7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudXBsb2FkZXIuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgZjogRmlsZTsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZiA9IGZpbGVzW2ldO1xuICAgICAgICAgIGNvbnN0IGZpbGVJdGVtOiBPRmlsZUl0ZW0gPSBuZXcgT0ZpbGVJdGVtKGYsIHRoaXMudXBsb2FkZXIpO1xuICAgICAgICAgIHRoaXMudXBsb2FkZXIuYWRkRmlsZShmaWxlSXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB0aGlzLnVwbG9hZGVyLmZpbGVzLm1hcChmaWxlID0+IGZpbGUubmFtZSkuam9pbignLCAnKTtcblxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSAhPT0gJycgPyB2YWx1ZSA6IHVuZGVmaW5lZCwgeyBjaGFuZ2VUeXBlOiBPVmFsdWVDaGFuZ2VFdmVudC5VU0VSX0NIQU5HRSB9KTtcbiAgICAgICAgICBpZiAodGhpcy5fZkNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBzdXBlci5jbGVhclZhbHVlKCk7XG4gICAqL1xuICBwdWJsaWMgY2xlYXJWYWx1ZShvcHRpb25zPzogRm9ybVZhbHVlT3B0aW9ucywgc2V0RGlydHk6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHN1cGVyLmNsZWFyVmFsdWUob3B0aW9ucywgc2V0RGlydHkpO1xuICAgIHRoaXMudXBsb2FkZXIuY2xlYXIoKTtcbiAgICB0aGlzLmlucHV0RmlsZS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwdWJsaWMgb25DbGlja1VwbG9hZChlOiBFdmVudCk6IHZvaWQge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgdGhpcy51cGxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkZXIudXBsb2FkKCk7XG4gIH1cblxuICBnZXQgZmlsZXMoKTogT0ZpbGVJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLnVwbG9hZGVyLmZpbGVzO1xuICB9XG5cbiAgZ2V0IGFkZGl0aW9uYWxEYXRhKCk6IGFueSB7XG4gICAgaWYgKHRoaXMudXBsb2FkZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZGVyLmRhdGE7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0IGFkZGl0aW9uYWxEYXRhKGRhdGE6IGFueSkge1xuICAgIGlmICh0aGlzLnVwbG9hZGVyKSB7XG4gICAgICB0aGlzLnVwbG9hZGVyLmRhdGEgPSBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbm5lck9uQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZU9Gb3JtVmFsdWUoZXZlbnQpO1xuICAgIGlmICh0aGlzLl9mQ29udHJvbCAmJiB0aGlzLl9mQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLl9mQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbGV0eXBlVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLmFjY2VwdEZpbGVUeXBlKSB7XG4gICAgICBjb25zdCByZWdleDogUmVnRXhwID0gbmV3IFJlZ0V4cCh0aGlzLmFjY2VwdEZpbGVUeXBlLnJlcGxhY2UoJzsnLCAnfCcpKTtcbiAgICAgIGlmICghdGhpcy5maWxlcy5ldmVyeShmaWxlID0+IGZpbGUudHlwZS5tYXRjaChyZWdleCkgIT09IG51bGwgfHwgZmlsZS5uYW1lLnN1YnN0cihmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKSkubWF0Y2gocmVnZXgpICE9PSBudWxsKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbGVUeXBlOiB7XG4gICAgICAgICAgICBhbGxvd2VkRmlsZVR5cGVzOiB0aGlzLmFjY2VwdEZpbGVUeXBlLnJlcGxhY2UoJzsnLCAnLCAnKVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIG1heEZpbGVTaXplVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLm1heEZpbGVTaXplKSB7XG4gICAgICBpZiAoIXRoaXMuZmlsZXMuZXZlcnkoZmlsZSA9PiBmaWxlLnNpemUgPCB0aGlzLm1heEZpbGVTaXplKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbGVTaXplOiB7XG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogdGhpcy5tYXhGaWxlU2l6ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIG1heEZpbGVzVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLm11bHRpcGxlICYmIHRoaXMubWF4RmlsZXMgIT09IC0xKSB7XG4gICAgICBpZiAodGhpcy5tYXhGaWxlcyA8IHRoaXMuZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbnVtRmlsZToge1xuICAgICAgICAgICAgbWF4RmlsZXM6IHRoaXMubWF4RmlsZXNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIiwiPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKClcIiBbbWF0VG9vbHRpcF09XCJ0b29sdGlwXCIgW21hdFRvb2x0aXBDbGFzc109XCJ0b29sdGlwQ2xhc3NcIlxuICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cInRvb2x0aXBTaG93RGVsYXlcIiBbbWF0VG9vbHRpcEhpZGVEZWxheV09XCJ0b29sdGlwSGlkZURlbGF5XCI+XG4gIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCIgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwiaGlkZVJlcXVpcmVkTWFya2VyXCIgW2NsYXNzLmN1c3RvbS13aWR0aF09XCJoYXNDdXN0b21XaWR0aFwiXG4gICAgY2xhc3M9XCJpY29uLWZpZWxkXCIgKGNsaWNrKT1cIiFlbmFibGVkIHx8IGlzUmVhZE9ubHkgPyBudWxsIDogaW5wdXRGaWxlLmNsaWNrKClcIiBmeEZpbGwgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIj5cbiAgICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxWaXNpYmxlXCI+e3sgb2xhYmVsIHwgb1RyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCAjaW5wdXRTaG93VmFsdWUgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwiZ2V0QXR0cmlidXRlKClcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImdldEF0dHJpYnV0ZSgpXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCJcbiAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCIgcmVhZG9ubHkgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KCRldmVudClcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cInNob3dDbGVhckJ1dHRvblwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tDbGVhclZhbHVlKCRldmVudClcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6Y2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZ2V0VmFsdWUoKVwiIFtkaXNhYmxlZF09XCIhaXNWYWxpZCB8fCB1cGxvYWRlci5pc1VwbG9hZGluZ1wiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tVcGxvYWQoJGV2ZW50KVwiPlxuICAgICAgPG1hdC1pY29uPmZpbGVfdXBsb2FkPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJoYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5SRVFVSVJFRCcgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ2ZpbGVUeXBlJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uRklMRV9UWVBFJyB8IG9UcmFuc2xhdGV9fSAoe3sgZ2V0RXJyb3JWYWx1ZSgnZmlsZVR5cGUnLCdhbGxvd2VkRmlsZVR5cGVzJykgfX0pXG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ2ZpbGVTaXplJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uRklMRV9NQVhTSVpFJyB8IG9UcmFuc2xhdGUgfX06IHt7IGdldEVycm9yVmFsdWUoJ2ZpbGVTaXplJywgJ21heEZpbGVTaXplJykgfX0gYnl0ZXNcbiAgICA8L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJoYXNFcnJvcignbnVtRmlsZScpXCI+XG4gICAgICB7eyAnRk9STV9WQUxJREFUSU9OLkZJTEVfTUFYTlVNJyB8IG9UcmFuc2xhdGUgfX06IHt7IGdldEVycm9yVmFsdWUoJ251bUZpbGUnLCAnbWF4RmlsZXMnKSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm5nRm9yPVwibGV0IG9FcnJvciBvZiBnZXRBY3RpdmVPRXJyb3JzKClcIj5cbiAgICAgIHt7IG9FcnJvci50ZXh0IHwgb1RyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8aW5wdXQgI2lucHV0RmlsZSB0eXBlPVwiZmlsZVwiIGlkPVwie3tnZXRBdHRyaWJ1dGUoKSsnLWZpbGUtaW5wdXQnfX1cIlxuICAgIFthdHRyLmFjY2VwdF09XCJhY2NlcHRGaWxlVHlwZSA/IGFjY2VwdEZpbGVUeXBlLnJlcGxhY2UoYXJyYXlTZXBhcmF0b3JSZWdFeHAsICcsJykgOiBudWxsXCIgKGNoYW5nZSk9XCJmaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIGhpZGRlbj1cInRydWVcIlxuICAgIFthdHRyLm11bHRpcGxlXT1cIm11bHRpcGxlID8gJycgOiBudWxsXCI+XG4gIDxkaXYgKm5nSWY9XCJzaG93SW5mbyAmJiBmaWxlc1wiPlxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwiIXNwbGl0VXBsb2FkICYmIHVwbG9hZGVyLmlzVXBsb2FkaW5nXCIgY29sb3I9XCJhY2NlbnRcIiBtb2RlPVwiZGV0ZXJtaW5hdGVcIiBbdmFsdWVdPVwidXBsb2FkZXIucHJvZ3Jlc3NcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgPG1hdC1saXN0PlxuICAgICAgPG1hdC1saXN0LWl0ZW0gKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXNcIj5cbiAgICAgICAgPG1hdC1pY29uIG1hdC1saXN0LWljb24+aW5zZXJ0X2RyaXZlX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICA8c3BhbiBtYXQtbGluZT57eyBmaWxlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cbiAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgKm5nSWY9XCJzcGxpdFVwbG9hZCAmJiBmaWxlLmlzVXBsb2FkaW5nXCIgY29sb3I9XCJhY2NlbnRcIiBtb2RlPVwiZGV0ZXJtaW5hdGVcIiBbdmFsdWVdPVwiZmlsZS5wcm9ncmVzc1wiIGNsYXNzPVwidXBsb2FkaW5nXCJcbiAgICAgICAgICAgIGRpYW1ldGVyPVwiM1wiIHN0cm9rZVdpZHRoPVwiM1wiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic3BsaXRVcGxvYWQgJiYgZmlsZS5pc1VwbG9hZGVkICYmIGZpbGUuaXNTdWNjZXNzXCIgY2xhc3M9XCJ1cGxvYWRlZFwiIHN2Z0ljb249XCJvbnRpbWl6ZTpjaGVja19jaXJjbGVcIj48L21hdC1pY29uPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInNwbGl0VXBsb2FkICYmIGZpbGUuaXNVcGxvYWRlZCAmJiBmaWxlLmlzRXJyb3JcIiBjbGFzcz1cImVycm9yXCIgc3ZnSWNvbj1cIm9udGltaXplOmVycm9yX291dGxpbmVcIj48L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICA8L21hdC1saXN0PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1maWxlLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2ZpbGUtaW5wdXQvby1maWxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2ZpbGUtaW5wdXQvby1maWxlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUd2RixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXhELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHO0lBSXpDLGtDQUFrQztJ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LG9CQUFvQixFQUFFOztxREFDTTsyRkFwQmxCLG1CQUFtQjtrQkFWL0IsU0FBUzsrQkFDRSxjQUFjLFVBR2hCLDJCQUEyQixXQUMxQiw0QkFBNEIsYUFDMUI7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFO3FCQUNuRjs7MEJBMENFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQzs0RkFsQy9DLFNBQVM7c0JBRGYsU0FBUzt1QkFBQyxXQUFXO2dCQU1mLFFBQVEsTUFFUixRQUFRLE1BRVIsV0FBVyxNQUdYLFdBQVcsTUFFWCxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdCwgSW5qZWN0b3IsIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyLCBOdW1iZXJJbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IElGaWxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvZmlsZS1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBmaWxlU2VydmljZUZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgT250aW1pemVGaWxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29udGltaXplL29udGltaXplLWZpbGUuc2VydmljZSc7XG5pbXBvcnQgeyBPQ29uZmlndXJlU2VydmljZUFyZ3MgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb25maWd1cmUtc2VydmljZS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgRm9ybVZhbHVlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2Zvcm0tdmFsdWUtb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1EYXRhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vby1mb3JtLWRhdGEtY29tcG9uZW50LmNsYXNzJztcbmltcG9ydCB7IE9WYWx1ZUNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vLi4vby12YWx1ZS1jaGFuZ2UtZXZlbnQuY2xhc3MnO1xuaW1wb3J0IHsgT0ZpbGVJdGVtIH0gZnJvbSAnLi9vLWZpbGUtaXRlbS5jbGFzcyc7XG5pbXBvcnQgeyBPRmlsZVVwbG9hZGVyIH0gZnJvbSAnLi9vLWZpbGUtdXBsb2FkZXIuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19GSUxFX0lOUFVUID0gW1xuXG4gIC8vIGFjY2VwdC1maWxlLXR5cGUgW3N0cmluZ106IGZpbGUgdHlwZXMgYWxsb3dlZCBvbiB0aGUgZmlsZSBpbnB1dCwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gIC8vIGZpbGVfZXh0ZW5zaW9uLCBhdWRpby8qLCB2aWRlby8qLCBpbWFnZS8qLCBtZWRpYV90eXBlLiBTZWUgaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS90YWdzL2F0dF9pbnB1dF9hY2NlcHQuYXNwXG4gICdhY2NlcHRGaWxlVHlwZTogYWNjZXB0LWZpbGUtdHlwZScsXG5cbiAgLy8gbWF4LWZpbGUtc2l6ZSBbbnVtYmVyXTogbWF4aW11bSBmaWxlIHNpemUgYWxsb3dlZCwgaW4gYnl0ZXMuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnbWF4RmlsZVNpemU6IG1heC1maWxlLXNpemUnLFxuXG4gIC8vIG11bHRpcGxlIFtib29sZWFuXTogbXVsdGlwbGUgZmlsZSBzZWxlY3Rpb24gYWxsb3dlZC4gRGVmYXVsdDogbm8uXG4gICdtdWx0aXBsZScsXG5cbiAgLy8gbWF4LWZpbGVzIFtudW1iZXJdOiBtYXhpbXVtIG51bWJlciBvZiBmaWxlcyBhbGxvd2VkLiBEZWZhdWx0OiAtMS5cbiAgJ21heEZpbGVzOiBtYXgtZmlsZXMnLFxuXG4gIC8vIHNob3ctaW5mbyBbYm9vbGVhbl06IHNob3cgZmlsZXMgaW5mb3JtYXRpb24uIERlZmF1bHQ6IG5vLlxuICAnc2hvd0luZm86IHNob3ctaW5mbycsXG5cbiAgLy8gc3BsaXQtdXBsb2FkIFtib29sZWFuXTogZWFjaCBmaWxlIGlzIHVwbG9hZGVkIGluIGEgcmVxdWVzdCAodHJ1ZSkgb3IgYWxsIGZpbGVzIGFyZSB1cGxvYWRlZCBpbiBhIHNpbmdsZSByZXF1ZXN0IChmYWxzZSkuIERlZmF1bHQ6IHllcy5cbiAgJ3NwbGl0VXBsb2FkOiBzcGxpdC11cGxvYWQnLFxuXG4gIC8vIGFkZGl0aW9uYWwtZGF0YSBbSlNPTl06IHVzZWQgdG8gc2VuZCBhZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhlIHVwbG9hZCByZXF1ZXN0LlxuICAnYWRkaXRpb25hbERhdGE6IGFkZGl0aW9uYWwtZGF0YScsXG4gICdhcHBlYXJhbmNlJyxcbiAgJ2hpZGVSZXF1aXJlZE1hcmtlcjpoaWRlLXJlcXVpcmVkLW1hcmtlcicsXG4gICdsYWJlbFZpc2libGU6bGFiZWwtdmlzaWJsZSdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19GSUxFX0lOUFVUID0gW1xuICAnb25CZWZvcmVVcGxvYWQnLFxuICAnb25CZWZvcmVVcGxvYWRGaWxlJyxcbiAgJ29uUHJvZ3Jlc3MnLFxuICAnb25Qcm9ncmVzc0ZpbGUnLFxuICAnb25DYW5jZWwnLFxuICAnb25DYW5jZWxGaWxlJyxcbiAgJ29uVXBsb2FkJyxcbiAgJ29uVXBsb2FkRmlsZScsXG4gICdvbkNvbXBsZXRlJyxcbiAgJ29uQ29tcGxldGVGaWxlJyxcbiAgJ29uRXJyb3InLFxuICAnb25FcnJvckZpbGUnXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWZpbGUtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vby1maWxlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1maWxlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19GSUxFX0lOUFVULFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19GSUxFX0lOUFVULFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE9udGltaXplRmlsZVNlcnZpY2UsIHVzZUZhY3Rvcnk6IGZpbGVTZXJ2aWNlRmFjdG9yeSwgZGVwczogW0luamVjdG9yXSB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgT0ZpbGVJbnB1dENvbXBvbmVudCBleHRlbmRzIE9Gb3JtRGF0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIGFycmF5U2VwYXJhdG9yUmVnRXhwID0gbmV3IFJlZ0V4cCgvXFw7L2dpKTtcbiAgcHVibGljIHVwbG9hZGVyOiBPRmlsZVVwbG9hZGVyO1xuICBwdWJsaWMgZmlsZVNlcnZpY2U6IElGaWxlU2VydmljZTtcbiAgQFZpZXdDaGlsZCgnaW5wdXRGaWxlJylcbiAgcHVibGljIGlucHV0RmlsZTogRWxlbWVudFJlZjtcblxuICBwdWJsaWMgYXV0b0JpbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGF1dG9SZWdpc3RlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHNob3dJbmZvOiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzcGxpdFVwbG9hZDogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBhY2NlcHRGaWxlVHlwZTogc3RyaW5nO1xuICBATnVtYmVySW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgbWF4RmlsZVNpemU6IG51bWJlcjtcbiAgQE51bWJlcklucHV0Q29udmVydGVyKClcbiAgcHVibGljIG1heEZpbGVzOiBudW1iZXIgPSAtMTtcblxuICBwdWJsaWMgb25CZWZvcmVVcGxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBvbkJlZm9yZVVwbG9hZEZpbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBvblByb2dyZXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25Qcm9ncmVzc0ZpbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uQ2FuY2VsRmlsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uVXBsb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25VcGxvYWRGaWxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25Db21wbGV0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uQ29tcGxldGVGaWxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25FcnJvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uRXJyb3JGaWxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByb3RlY3RlZCBzZXJ2aWNlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBlbnRpdHk6IHN0cmluZztcbiAgcHJvdGVjdGVkIHNlcnZpY2VUeXBlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE9Gb3JtQ29tcG9uZW50KSkgZm9ybTogT0Zvcm1Db21wb25lbnQsXG4gICAgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHtcbiAgICBzdXBlcihmb3JtLCBlbFJlZiwgaW5qZWN0b3IpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuXG4gICAgdGhpcy51cGxvYWRlci5vbkJlZm9yZVVwbG9hZEFsbCA9ICgpID0+IHRoaXMub25CZWZvcmVVcGxvYWQuZW1pdCgpO1xuICAgIHRoaXMudXBsb2FkZXIub25CZWZvcmVVcGxvYWRJdGVtID0gaXRlbSA9PiB0aGlzLm9uQmVmb3JlVXBsb2FkRmlsZS5lbWl0KGl0ZW0pO1xuICAgIHRoaXMudXBsb2FkZXIub25Qcm9ncmVzc0FsbCA9IHByb2dyZXNzID0+IHRoaXMub25Qcm9ncmVzcy5lbWl0KHByb2dyZXNzKTtcbiAgICB0aGlzLnVwbG9hZGVyLm9uUHJvZ3Jlc3NJdGVtID0gKGl0ZW0sIHByb2dyZXNzKSA9PiB0aGlzLm9uUHJvZ3Jlc3NGaWxlLmVtaXQoeyBpdGVtOiBpdGVtLCBwcm9ncmVzczogcHJvZ3Jlc3MgfSk7XG4gICAgdGhpcy51cGxvYWRlci5vbkNhbmNlbEFsbCA9ICgpID0+IHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICAgIHRoaXMudXBsb2FkZXIub25DYW5jZWxJdGVtID0gaXRlbSA9PiB0aGlzLm9uQ2FuY2VsRmlsZS5lbWl0KCk7XG4gICAgdGhpcy51cGxvYWRlci5vblN1Y2Nlc3NBbGwgPSByZXNwb25zZSA9PiB0aGlzLm9uVXBsb2FkLmVtaXQoeyByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gICAgdGhpcy51cGxvYWRlci5vblN1Y2Nlc3NJdGVtID0gKGl0ZW0sIHJlc3BvbnNlKSA9PiB0aGlzLm9uVXBsb2FkRmlsZS5lbWl0KHsgaXRlbTogaXRlbSwgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICAgIHRoaXMudXBsb2FkZXIub25Db21wbGV0ZUFsbCA9ICgpID0+IHRoaXMub25Db21wbGV0ZS5lbWl0KCk7XG4gICAgdGhpcy51cGxvYWRlci5vbkNvbXBsZXRlSXRlbSA9IGl0ZW0gPT4gdGhpcy5vbkNvbXBsZXRlRmlsZS5lbWl0KGl0ZW0pO1xuICAgIHRoaXMudXBsb2FkZXIub25FcnJvckFsbCA9IGVycm9yID0+IHRoaXMub25FcnJvci5lbWl0KGVycm9yKTtcbiAgICB0aGlzLnVwbG9hZGVyLm9uRXJyb3JJdGVtID0gKGl0ZW0sIGVycm9yKSA9PiB0aGlzLm9uRXJyb3JGaWxlLmVtaXQoeyBpdGVtOiBpdGVtLCBlcnJvcjogZXJyb3IgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5pbml0aWFsaXplKCk7XG5cbiAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5mb3JtLnNlcnZpY2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbnRpdHkpIHtcbiAgICAgIHRoaXMuZW50aXR5ID0gdGhpcy5mb3JtLmVudGl0eTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZ3VyZVNlcnZpY2UoKTtcbiAgICB0aGlzLnVwbG9hZGVyID0gbmV3IE9GaWxlVXBsb2FkZXIodGhpcy5maWxlU2VydmljZSwgdGhpcy5lbnRpdHkpO1xuICAgIHRoaXMudXBsb2FkZXIuc3BsaXRVcGxvYWQgPSB0aGlzLnNwbGl0VXBsb2FkO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZ3VyZVNlcnZpY2UoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVTZXJ2aWNlQXJncyA9IHsgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsIGJhc2VTZXJ2aWNlOiBPbnRpbWl6ZUZpbGVTZXJ2aWNlLCBlbnRpdHk6IHRoaXMuZW50aXR5LCBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlIH1cbiAgICB0aGlzLmZpbGVTZXJ2aWNlID0gVXRpbC5jb25maWd1cmVTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzKTtcblxuICB9XG5cbiAgcHVibGljIHJlc29sdmVWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBzdXBlci5yZXNvbHZlVmFsaWRhdG9ycygpO1xuICAgIGlmICh0aGlzLmFjY2VwdEZpbGVUeXBlKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5maWxldHlwZVZhbGlkYXRvci5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4RmlsZVNpemUpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLm1heEZpbGVTaXplVmFsaWRhdG9yLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLm1heEZpbGVzICE9PSAtMSkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMubWF4RmlsZXNWYWxpZGF0b3IuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICB9XG5cbiAgcHVibGljIGZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgdmFsdWU6IHN0cmluZyA9ICcnO1xuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZUxpc3QgPSB0YXJnZXQuZmlsZXM7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudXBsb2FkZXIuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgZjogRmlsZTsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZiA9IGZpbGVzW2ldO1xuICAgICAgICAgIGNvbnN0IGZpbGVJdGVtOiBPRmlsZUl0ZW0gPSBuZXcgT0ZpbGVJdGVtKGYsIHRoaXMudXBsb2FkZXIpO1xuICAgICAgICAgIHRoaXMudXBsb2FkZXIuYWRkRmlsZShmaWxlSXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB0aGlzLnVwbG9hZGVyLmZpbGVzLm1hcChmaWxlID0+IGZpbGUubmFtZSkuam9pbignLCAnKTtcblxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSAhPT0gJycgPyB2YWx1ZSA6IHVuZGVmaW5lZCwgeyBjaGFuZ2VUeXBlOiBPVmFsdWVDaGFuZ2VFdmVudC5VU0VSX0NIQU5HRSB9KTtcbiAgICAgICAgICBpZiAodGhpcy5fZkNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBzdXBlci5jbGVhclZhbHVlKCk7XG4gICAqL1xuICBwdWJsaWMgY2xlYXJWYWx1ZShvcHRpb25zPzogRm9ybVZhbHVlT3B0aW9ucywgc2V0RGlydHk6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHN1cGVyLmNsZWFyVmFsdWUob3B0aW9ucywgc2V0RGlydHkpO1xuICAgIHRoaXMudXBsb2FkZXIuY2xlYXIoKTtcbiAgICB0aGlzLmlucHV0RmlsZS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwdWJsaWMgb25DbGlja1VwbG9hZChlOiBFdmVudCk6IHZvaWQge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgdGhpcy51cGxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkZXIudXBsb2FkKCk7XG4gIH1cblxuICBnZXQgZmlsZXMoKTogT0ZpbGVJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLnVwbG9hZGVyLmZpbGVzO1xuICB9XG5cbiAgZ2V0IGFkZGl0aW9uYWxEYXRhKCk6IGFueSB7XG4gICAgaWYgKHRoaXMudXBsb2FkZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZGVyLmRhdGE7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0IGFkZGl0aW9uYWxEYXRhKGRhdGE6IGFueSkge1xuICAgIGlmICh0aGlzLnVwbG9hZGVyKSB7XG4gICAgICB0aGlzLnVwbG9hZGVyLmRhdGEgPSBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbm5lck9uQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZU9Gb3JtVmFsdWUoZXZlbnQpO1xuICAgIGlmICh0aGlzLl9mQ29udHJvbCAmJiB0aGlzLl9mQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLl9mQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbGV0eXBlVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLmFjY2VwdEZpbGVUeXBlKSB7XG4gICAgICBjb25zdCByZWdleDogUmVnRXhwID0gbmV3IFJlZ0V4cCh0aGlzLmFjY2VwdEZpbGVUeXBlLnJlcGxhY2UoJzsnLCAnfCcpKTtcbiAgICAgIGlmICghdGhpcy5maWxlcy5ldmVyeShmaWxlID0+IGZpbGUudHlwZS5tYXRjaChyZWdleCkgIT09IG51bGwgfHwgZmlsZS5uYW1lLnN1YnN0cihmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKSkubWF0Y2gocmVnZXgpICE9PSBudWxsKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbGVUeXBlOiB7XG4gICAgICAgICAgICBhbGxvd2VkRmlsZVR5cGVzOiB0aGlzLmFjY2VwdEZpbGVUeXBlLnJlcGxhY2UoJzsnLCAnLCAnKVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIG1heEZpbGVTaXplVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLm1heEZpbGVTaXplKSB7XG4gICAgICBpZiAoIXRoaXMuZmlsZXMuZXZlcnkoZmlsZSA9PiBmaWxlLnNpemUgPCB0aGlzLm1heEZpbGVTaXplKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbGVTaXplOiB7XG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogdGhpcy5tYXhGaWxlU2l6ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIG1heEZpbGVzVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLm11bHRpcGxlICYmIHRoaXMubWF4RmlsZXMgIT09IC0xKSB7XG4gICAgICBpZiAodGhpcy5tYXhGaWxlcyA8IHRoaXMuZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbnVtRmlsZToge1xuICAgICAgICAgICAgbWF4RmlsZXM6IHRoaXMubWF4RmlsZXNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIiwiPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKClcIiBbbWF0VG9vbHRpcF09XCJ0b29sdGlwXCIgW21hdFRvb2x0aXBDbGFzc109XCJ0b29sdGlwQ2xhc3NcIlxuICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cInRvb2x0aXBTaG93RGVsYXlcIiBbbWF0VG9vbHRpcEhpZGVEZWxheV09XCJ0b29sdGlwSGlkZURlbGF5XCI+XG4gIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCIgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwiaGlkZVJlcXVpcmVkTWFya2VyXCIgW2NsYXNzLmN1c3RvbS13aWR0aF09XCJoYXNDdXN0b21XaWR0aFwiXG4gICAgY2xhc3M9XCJpY29uLWZpZWxkXCIgKGNsaWNrKT1cIiFlbmFibGVkIHx8IGlzUmVhZE9ubHkgPyBudWxsIDogaW5wdXRGaWxlLmNsaWNrKClcIiBmeEZpbGwgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIj5cbiAgICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxWaXNpYmxlXCI+e3sgb2xhYmVsIHwgb1RyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCAjaW5wdXRTaG93VmFsdWUgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwiZ2V0QXR0cmlidXRlKClcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImdldEF0dHJpYnV0ZSgpXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCJcbiAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCIgcmVhZG9ubHkgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KCRldmVudClcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cInNob3dDbGVhckJ1dHRvblwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tDbGVhclZhbHVlKCRldmVudClcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6Y2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZ2V0VmFsdWUoKVwiIFtkaXNhYmxlZF09XCIhaXNWYWxpZCB8fCB1cGxvYWRlci5pc1VwbG9hZGluZ1wiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tVcGxvYWQoJGV2ZW50KVwiPlxuICAgICAgPG1hdC1pY29uPmZpbGVfdXBsb2FkPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJoYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5SRVFVSVJFRCcgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ2ZpbGVUeXBlJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uRklMRV9UWVBFJyB8IG9UcmFuc2xhdGV9fSAoe3sgZ2V0RXJyb3JWYWx1ZSgnZmlsZVR5cGUnLCdhbGxvd2VkRmlsZVR5cGVzJykgfX0pXG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ2ZpbGVTaXplJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uRklMRV9NQVhTSVpFJyB8IG9UcmFuc2xhdGUgfX06IHt7IGdldEVycm9yVmFsdWUoJ2ZpbGVTaXplJywgJ21heEZpbGVTaXplJykgfX0gYnl0ZXNcbiAgICA8L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJoYXNFcnJvcignbnVtRmlsZScpXCI+XG4gICAgICB7eyAnRk9STV9WQUxJREFUSU9OLkZJTEVfTUFYTlVNJyB8IG9UcmFuc2xhdGUgfX06IHt7IGdldEVycm9yVmFsdWUoJ251bUZpbGUnLCAnbWF4RmlsZXMnKSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm5nRm9yPVwibGV0IG9FcnJvciBvZiBnZXRBY3RpdmVPRXJyb3JzKClcIj5cbiAgICAgIHt7IG9FcnJvci50ZXh0IHwgb1RyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8aW5wdXQgI2lucHV0RmlsZSB0eXBlPVwiZmlsZVwiIGlkPVwie3tnZXRBdHRyaWJ1dGUoKSsnLWZpbGUtaW5wdXQnfX1cIlxuICAgIFthdHRyLmFjY2VwdF09XCJhY2NlcHRGaWxlVHlwZSA/IGFjY2VwdEZpbGVUeXBlLnJlcGxhY2UoYXJyYXlTZXBhcmF0b3JSZWdFeHAsICcsJykgOiBudWxsXCIgKGNoYW5nZSk9XCJmaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIGhpZGRlbj1cInRydWVcIlxuICAgIFthdHRyLm11bHRpcGxlXT1cIm11bHRpcGxlID8gJycgOiBudWxsXCI+XG4gIDxkaXYgKm5nSWY9XCJzaG93SW5mbyAmJiBmaWxlc1wiPlxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwiIXNwbGl0VXBsb2FkICYmIHVwbG9hZGVyLmlzVXBsb2FkaW5nXCIgY29sb3I9XCJhY2NlbnRcIiBtb2RlPVwiZGV0ZXJtaW5hdGVcIiBbdmFsdWVdPVwidXBsb2FkZXIucHJvZ3Jlc3NcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgPG1hdC1saXN0PlxuICAgICAgPG1hdC1saXN0LWl0ZW0gKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXNcIj5cbiAgICAgICAgPG1hdC1pY29uIG1hdC1saXN0LWljb24+aW5zZXJ0X2RyaXZlX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICA8c3BhbiBtYXQtbGluZT57eyBmaWxlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cbiAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgKm5nSWY9XCJzcGxpdFVwbG9hZCAmJiBmaWxlLmlzVXBsb2FkaW5nXCIgY29sb3I9XCJhY2NlbnRcIiBtb2RlPVwiZGV0ZXJtaW5hdGVcIiBbdmFsdWVdPVwiZmlsZS5wcm9ncmVzc1wiIGNsYXNzPVwidXBsb2FkaW5nXCJcbiAgICAgICAgICAgIGRpYW1ldGVyPVwiM1wiIHN0cm9rZVdpZHRoPVwiM1wiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic3BsaXRVcGxvYWQgJiYgZmlsZS5pc1VwbG9hZGVkICYmIGZpbGUuaXNTdWNjZXNzXCIgY2xhc3M9XCJ1cGxvYWRlZFwiIHN2Z0ljb249XCJvbnRpbWl6ZTpjaGVja19jaXJjbGVcIj48L21hdC1pY29uPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInNwbGl0VXBsb2FkICYmIGZpbGUuaXNVcGxvYWRlZCAmJiBmaWxlLmlzRXJyb3JcIiBjbGFzcz1cImVycm9yXCIgc3ZnSWNvbj1cIm9udGltaXplOmVycm9yX291dGxpbmVcIj48L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICA8L21hdC1saXN0PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -130,14 +130,12 @@ export class OFormServiceComponent extends OFormDataComponent {
130
130
  const setValueSetKeys = Object.keys(this._setValueOnValueChangeEquiv);
131
131
  if (setValueSetKeys.length) {
132
132
  const formComponents = this.form.getComponents();
133
- if (Util.isDefined(record)) {
134
- setValueSetKeys.forEach(key => {
135
- const comp = formComponents[this._setValueOnValueChangeEquiv[key]];
136
- if (Util.isDefined(comp)) {
137
- comp.setValue(record[key]);
138
- }
139
- });
140
- }
133
+ setValueSetKeys.forEach(key => {
134
+ const comp = formComponents[this._setValueOnValueChangeEquiv[key]];
135
+ if (Util.isDefined(comp)) {
136
+ comp.setValue(Util.isDefined(record) ? record[key] : undefined);
137
+ }
138
+ });
141
139
  }
142
140
  }
143
141
  configureService() {
@@ -357,4 +355,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
357
355
  type: ViewChild,
358
356
  args: [OContextMenuComponent]
359
357
  }] } });
360
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXQvby1mb3JtLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUczRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQUVwRSxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRztJQUVyRCx5QkFBeUI7SUFDekIsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsMkJBQTJCO0lBQzNCLG9DQUFvQztJQUNwQyx5QkFBeUI7SUFFekIsaUNBQWlDO0lBRWpDLHlDQUF5QztJ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QUFVLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDdEI7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDOztrSEEvV1UscUJBQXFCO3NHQUFyQixxQkFBcUIscW1EQXdEckIscUJBQXFCO0FBM0NoQztJQUFDLHFCQUFxQixFQUFFOzswREFDYztBQUN0QztJQUFDLHFCQUFxQixFQUFFOzswREFDZTtBQUl2QztJQUFDLHFCQUFxQixFQUFFOztzRUFDaUI7QUFJekM7SUFBQyxxQkFBcUIsRUFBRTs7d0RBQ1U7MkZBMUJ2QixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1QsTUFBTSxFQUFFLHVDQUF1QztvQkFDL0MsT0FBTyxFQUFFLHVDQUF1QztpQkFDakQ7cUpBZVcsV0FBVyxNQUVYLFdBQVcsTUFLckIsdUJBQXVCLE1BS2hCLFNBQVMsTUErQlosZUFBZTtzQkFEbEIsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIE5nWm9uZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NlcnZpY2UtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9FcnJvckRpYWxvZ01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vLWVycm9yLWRpYWxvZy1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT250aW1pemVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb250aW1pemUvb250aW1pemUuc2VydmljZSc7XG5pbXBvcnQgeyBPQ29uZmlndXJlU2VydmljZUFyZ3MgfSBmcm9tICcuLi8uLi90eXBlcy9jb25maWd1cmUtc2VydmljZS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgRm9ybVZhbHVlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL2Zvcm0tdmFsdWUtb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3NlcnZpY2UudXRpbHMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jb250ZXh0bWVudS9vLWNvbnRleHQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1EYXRhQ29tcG9uZW50IH0gZnJvbSAnLi4vby1mb3JtLWRhdGEtY29tcG9uZW50LmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fRk9STV9TRVJWSUNFX0NPTVBPTkVOVCA9IFtcbiAgLy8gc3RhdGljLWRhdGEgW0FycmF5PGFueT5dIDogd2F5IHRvIHBvcHVsYXRlIHdpdGggc3RhdGljIGRhdGEuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc3RhdGljRGF0YTogc3RhdGljLWRhdGEnLFxuICAnZW50aXR5JyxcbiAgJ3NlcnZpY2UnLFxuICAnY29sdW1ucycsXG4gICd2YWx1ZUNvbHVtbjogdmFsdWUtY29sdW1uJyxcbiAgJ3ZhbHVlQ29sdW1uVHlwZTogdmFsdWUtY29sdW1uLXR5cGUnLFxuICAncGFyZW50S2V5czogcGFyZW50LWtleXMnLFxuICAvLyBWaXNpYmxlIGNvbHVtbnMgaW50byBzZWxlY3Rpb24gZGlhbG9nIGZyb20gcGFyYW1ldGVyICdjb2x1bW5zJy4gV2l0aCBlbXB0eSBwYXJhbWV0ZXIgYWxsIGNvbHVtbnMgYXJlIHZpc2libGUuXG4gICd2aXNpYmxlQ29sdW1uczogdmlzaWJsZS1jb2x1bW5zJyxcbiAgLy8gVmlzaWJsZSBjb2x1bW5zIGluIHRleHQgZmllbGQuIEJ5IGRlZmF1bHQsIGl0IGlzIHRoZSBwYXJhbWV0ZXIgdmFsdWUgb2YgdmlzaWJsZSBjb2x1bW5zLlxuICAnZGVzY3JpcHRpb25Db2x1bW5zOiBkZXNjcmlwdGlvbi1jb2x1bW5zJyxcblxuICAnc2VwYXJhdG9yJyxcblxuICAncXVlcnlPbkluaXQ6IHF1ZXJ5LW9uLWluaXQnLFxuICAncXVlcnlPbkJpbmQ6IHF1ZXJ5LW9uLWJpbmQnLFxuICAncXVlcnlPbkV2ZW50OiBxdWVyeS1vbi1ldmVudCcsXG5cbiAgLy8gcXVlcnktbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIHF1ZXJpZXMuIERlZmF1bHQ6IHF1ZXJ5LlxuICAncXVlcnlNZXRob2Q6IHF1ZXJ5LW1ldGhvZCcsXG5cbiAgJ3NlcnZpY2VUeXBlOiBzZXJ2aWNlLXR5cGUnLFxuXG4gIC8vIHF1ZXJ5LXdpdGgtbnVsbC1wYXJlbnQta2V5cyBbc3RyaW5nXVt5ZXN8bm98dHJ1ZXxmYWxzZV06IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byB0cmlnZ2VyIHF1ZXJ5IG1ldGhvZCB3aGVuIHBhcmVudC1rZXlzIGZpbHRlciBpcyBudWxsLiBEZWZhdWx0OiBmYWxzZVxuICAncXVlcnlXaXRoTnVsbFBhcmVudEtleXM6IHF1ZXJ5LXdpdGgtbnVsbC1wYXJlbnQta2V5cycsXG5cbiAgLy8gc2V0LXZhbHVlLW9uLXZhbHVlLWNoYW5nZSBbc3RyaW5nXTogRm9ybSBjb21wb25lbnQgYXR0cmlidXRlcyB3aG9zZSB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQgY2hhbmdlcyBkdWUgdG8gdXNlciBpbnRlcmFjdGlvbi4gU2VwYXJhdGVkIGJ5ICc7Jy4gQWNjZXB0ZWQgZm9ybWF0OiBhdHRyIHwgY29sdW1uTmFtZTphdHRyXG4gICdzZXRWYWx1ZU9uVmFsdWVDaGFuZ2U6IHNldC12YWx1ZS1vbi12YWx1ZS1jaGFuZ2UnLFxuXG4gIC8vIFtmdW5jdGlvbl06IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gcXVlcnkgZXJyb3IuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAncXVlcnlGYWxsYmFja0Z1bmN0aW9uOiBxdWVyeS1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ2luc2VydEZhbGxiYWNrRnVuY3Rpb246IGluc2VydC1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ3VwZGF0ZUZhbGxiYWNrRnVuY3Rpb246IHVwZGF0ZS1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ2RlbGV0ZUZhbGxiYWNrRnVuY3Rpb246IGRlbGV0ZS1mYWxsYmFjay1mdW5jdGlvbidcblxuICAndHJhbnNsYXRlJyxcblxuICAvLyBzb3J0IFtzdHJpbmddOiBzb3J0aW5nIEFTQyBvciBERVNDLiBEZWZhdWx0OiBubyB2YWx1ZVxuICAnc29ydCdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19GT1JNX1NFUlZJQ0VfQ09NUE9ORU5UID0gW1xuICAnb25TZXRWYWx1ZU9uVmFsdWVDaGFuZ2UnLFxuICAnb25EYXRhTG9hZGVkJ1xuXTtcblxuQERpcmVjdGl2ZSh7XG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19GT1JNX1NFUlZJQ0VfQ09NUE9ORU5ULFxuICBvdXRwdXRzOiBERUZBVUxUX0lOUFVUU19PX0ZPUk1fU0VSVklDRV9DT01QT05FTlRcbn0pXG5leHBvcnQgY2xhc3MgT0Zvcm1TZXJ2aWNlQ29tcG9uZW50IGV4dGVuZHMgT0Zvcm1EYXRhQ29tcG9uZW50IHtcblxuICAvKiBJbnB1dHMgKi9cbiAgcHJvdGVjdGVkIHN0YXRpY0RhdGE6IEFycmF5PGFueT47XG4gIHByb3RlY3RlZCBlbnRpdHk6IHN0cmluZztcbiAgcHJvdGVjdGVkIHNlcnZpY2U6IHN0cmluZztcbiAgcHJvdGVjdGVkIGNvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIHZhbHVlQ29sdW1uOiBzdHJpbmc7XG4gIHByb3RlY3RlZCB2YWx1ZUNvbHVtblR5cGU6IHN0cmluZyA9IENvZGVzLlRZUEVfSU5UO1xuICBwcm90ZWN0ZWQgcGFyZW50S2V5czogc3RyaW5nO1xuICBwcm90ZWN0ZWQgdmlzaWJsZUNvbHVtbnM6IHN0cmluZztcbiAgcHJvdGVjdGVkIGRlc2NyaXB0aW9uQ29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgc2VwYXJhdG9yOiBzdHJpbmcgPSBDb2Rlcy5TUEFDRV9TRVBBUkFUT1I7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgcXVlcnlPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIHF1ZXJ5T25CaW5kOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBxdWVyeU9uRXZlbnQ6IGFueTtcbiAgcHJvdGVjdGVkIHF1ZXJ5TWV0aG9kOiBzdHJpbmcgPSBDb2Rlcy5RVUVSWV9NRVRIT0Q7XG4gIHByb3RlY3RlZCBzZXJ2aWNlVHlwZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcXVlcnlXaXRoTnVsbFBhcmVudEtleXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNldFZhbHVlT25WYWx1ZUNoYW5nZTogc3RyaW5nO1xuICBwdWJsaWMgcXVlcnlGYWxsYmFja0Z1bmN0aW9uOiAoZXJyb3I6IGFueSkgPT4gdm9pZDtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHRyYW5zbGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc29ydDogJ0FTQycgfCAnREVTQyc7XG5cbiAgLyogT3V0cHV0cyAqL1xuICBwdWJsaWMgb25TZXRWYWx1ZU9uVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIHB1YmxpYyBvbkRhdGFMb2FkZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG5cbiAgLyogSW50ZXJuYWwgdmFyaWFibGVzICovXG4gIHB1YmxpYyBkYXRhQXJyYXk6IGFueVtdID0gW107XG4gIHByb3RlY3RlZCBjb2xBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIHZpc2libGVDb2xBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGRlc2NyaXB0aW9uQ29sQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIHByb3RlY3RlZCBkYXRhU2VydmljZTogT250aW1pemVTZXJ2aWNlO1xuICBwdWJsaWMgbG9hZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgcXVlcnlTdXNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgY2FjaGVRdWVyaWVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfcEtleXNFcXVpdiA9IHt9O1xuICBwcm90ZWN0ZWQgX3NldFZhbHVlT25WYWx1ZUNoYW5nZUVxdWl2ID0ge307XG4gIHByb3RlY3RlZCBfZm9ybURhdGFTdWJjcmliZTtcbiAgcHJvdGVjdGVkIF9jdXJyZW50SW5kZXg7XG4gIHByb3RlY3RlZCBvRXJyb3JEaWFsb2dNYW5hZ2VyOiBPRXJyb3JEaWFsb2dNYW5hZ2VyO1xuXG4gIHByb3RlY3RlZCBxdWVyeU9uRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbkRhdGFMb2FkOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHB1YmxpYyBkZWxheUxvYWQgPSAyNTA7XG4gIHB1YmxpYyBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBvQ29udGV4dE1lbnU6IE9Db250ZXh0TWVudUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChPQ29udGV4dE1lbnVDb21wb25lbnQpXG4gIHNldCBvQ29udGV4dE1lbnVSZWYodmFsdWU6IE9Db250ZXh0TWVudUNvbXBvbmVudCkge1xuICAgIHRoaXMub0NvbnRleHRNZW51ID0gdmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtOiBPRm9ybUNvbXBvbmVudCxcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoZm9ybSwgZWxSZWYsIGluamVjdG9yKTtcbiAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIHRoaXMuZWxSZWYgPSBlbFJlZjtcbiAgICB0aGlzLm9FcnJvckRpYWxvZ01hbmFnZXIgPSBpbmplY3Rvci5nZXQoT0Vycm9yRGlhbG9nTWFuYWdlcik7XG4gIH1cblxuICBpbml0aWFsaXplKCkge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQuYWRkKHRoaXMub25EYXRhTG9hZGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN5bmNEYXRhSW5kZXgoZmFsc2UpKSk7XG5cbiAgICB0aGlzLmNhY2hlUXVlcmllZCA9IGZhbHNlO1xuICAgIHRoaXMuY29sQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5jb2x1bW5zLCB0cnVlKTtcblxuICAgIHRoaXMudmlzaWJsZUNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMudmlzaWJsZUNvbHVtbnMsIHRydWUpO1xuICAgIGlmIChVdGlsLmlzQXJyYXlFbXB0eSh0aGlzLnZpc2libGVDb2xBcnJheSkpIHtcbiAgICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBhc3NpbmcgdmFsdWUgdG8gdmlzaWJsZUNvbHVtbnMgdG8gcHJvcGFnYXRlIHRoZSBwYXJhbWV0ZXIuXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgICAgdGhpcy52aXNpYmxlQ29sQXJyYXkgPSB0aGlzLmNvbEFycmF5O1xuICAgIH1cblxuICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLmRlc2NyaXB0aW9uQ29sdW1ucyk7XG4gICAgaWYgKFV0aWwuaXNBcnJheUVtcHR5KHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSkpIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSA9IHRoaXMudmlzaWJsZUNvbEFycmF5O1xuICAgIH1cblxuICAgIGNvbnN0IHBrQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5wYXJlbnRLZXlzKTtcbiAgICB0aGlzLl9wS2V5c0VxdWl2ID0gVXRpbC5wYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocGtBcnJheSk7XG5cbiAgICBjb25zdCBzZXRWYWx1ZVNldEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuc2V0VmFsdWVPblZhbHVlQ2hhbmdlKTtcbiAgICB0aGlzLl9zZXRWYWx1ZU9uVmFsdWVDaGFuZ2VFcXVpdiA9IFV0aWwucGFyc2VQYXJlbnRLZXlzRXF1aXZhbGVuY2VzKHNldFZhbHVlU2V0QXJyYXkpO1xuXG4gICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLnF1ZXJ5T25CaW5kKSB7XG4gICAgICB0aGlzLl9mb3JtRGF0YVN1YmNyaWJlID0gdGhpcy5mb3JtLm9uRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5xdWVyeURhdGEoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGljRGF0YSkge1xuICAgICAgdGhpcy5xdWVyeU9uQmluZCA9IGZhbHNlO1xuICAgICAgdGhpcy5xdWVyeU9uSW5pdCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWd1cmVTZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucXVlcnlPbkV2ZW50ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucXVlcnlPbkV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQodmFsdWUpIHx8IHRoaXMucXVlcnlXaXRoTnVsbFBhcmVudEtleXMpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5RGF0YSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cblxuXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5fZm9ybURhdGFTdWJjcmliZSkge1xuICAgICAgdGhpcy5fZm9ybURhdGFTdWJjcmliZS51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeU9uRXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlcnlPbkV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdE9uVmFsdWVDaGFuZ2UodHlwZSwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgc3VwZXIuZW1pdE9uVmFsdWVDaGFuZ2UodHlwZSwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAvLyBTZXQgdmFsdWUgZm9yICdzZXQtdmFsdWUtb24tdmFsdWUtY2hhbmdlJyBjb21wb25lbnRzXG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5nZXRTZWxlY3RlZFJlY29yZCgpO1xuICAgIHRoaXMub25TZXRWYWx1ZU9uVmFsdWVDaGFuZ2UuZW1pdChyZWNvcmQpO1xuICAgIGNvbnN0IHNldFZhbHVlU2V0S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX3NldFZhbHVlT25WYWx1ZUNoYW5nZUVxdWl2KTtcbiAgICBpZiAoc2V0VmFsdWVTZXRLZXlzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZm9ybUNvbXBvbmVudHMgPSB0aGlzLmZvcm0uZ2V0Q29tcG9uZW50cygpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHJlY29yZCkpIHtcbiAgICAgICAgc2V0VmFsdWVTZXRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBjb21wID0gZm9ybUNvbXBvbmVudHNbdGhpcy5fc2V0VmFsdWVPblZhbHVlQ2hhbmdlRXF1aXZba2V5XV07XG4gICAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbXApKSB7XG4gICAgICAgICAgICBjb21wLnNldFZhbHVlKHJlY29yZFtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qIFV0aWxpdHkgbWV0aG9kcyAqL1xuICBjb25maWd1cmVTZXJ2aWNlKCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlU2VydmljZUFyZ3MgPSB7IGluamVjdG9yOiB0aGlzLmluamVjdG9yLCBiYXNlU2VydmljZTogT250aW1pemVTZXJ2aWNlLCBlbnRpdHk6IHRoaXMuZW50aXR5LCBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlIH1cbiAgICB0aGlzLmRhdGFTZXJ2aWNlID0gVXRpbC5jb25maWd1cmVTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzKTtcblxuXG4gIH1cblxuICBnZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeShjb2x1bW5zPzogQXJyYXk8YW55Pikge1xuICAgIGNvbnN0IHJlc3VsdCA9IFV0aWwuaXNEZWZpbmVkKGNvbHVtbnMpID8gY29sdW1ucyA6IHRoaXMuY29sQXJyYXk7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHRoaXMudmFsdWVDb2x1bW4pID09PSAtMSkge1xuICAgICAgcmVzdWx0LnB1c2godGhpcy52YWx1ZUNvbHVtbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBxdWVyeURhdGEoZmlsdGVyPzogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlIHx8ICEodGhpcy5xdWVyeU1ldGhvZCBpbiB0aGlzLmRhdGFTZXJ2aWNlKSB8fCAhdGhpcy5lbnRpdHkpIHtcbiAgICAgIGNvbnNvbGUud2FybignU2VydmljZSBub3QgcHJvcGVybHkgY29uZmlndXJlZCEgYWJvcnRpbmcgcXVlcnknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihmaWx0ZXIgfHwge30sIFNlcnZpY2VVdGlscy5nZXRQYXJlbnRLZXlzRnJvbUZvcm0odGhpcy5fcEtleXNFcXVpdiwgdGhpcy5mb3JtKSk7XG4gICAgaWYgKCFTZXJ2aWNlVXRpbHMuZmlsdGVyQ29udGFpbnNBbGxQYXJlbnRLZXlzKGZpbHRlciwgdGhpcy5fcEtleXNFcXVpdikgJiYgIXRoaXMucXVlcnlXaXRoTnVsbFBhcmVudEtleXMpIHtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucXVlcnlTdXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnF1ZXJ5U3VzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmxvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWVyeUNvbHMgPSB0aGlzLmdldEF0dHJpYnV0ZXNWYWx1ZXNUb1F1ZXJ5KCk7XG4gICAgICBjb25zdCBzcWxUeXBlcyA9IHRoaXMuZm9ybSA/IHRoaXMuZm9ybS5nZXRBdHRyaWJ1dGVzU1FMVHlwZXMoKSA6IHt9O1xuXG4gICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbiA9IHRoaXMubG9hZCgpO1xuICAgICAgdGhpcy5xdWVyeVN1c2NyaXB0aW9uID0gdGhpcy5kYXRhU2VydmljZVt0aGlzLnF1ZXJ5TWV0aG9kXShmaWx0ZXIsIHF1ZXJ5Q29scywgdGhpcy5lbnRpdHksIHNxbFR5cGVzKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcC5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVF1ZXJpZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhQXJyYXkocmVzcC5kYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24oZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vRXJyb3JEaWFsb2dNYW5hZ2VyLm9wZW5FcnJvckRpYWxvZyhlcnIpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YUFycmF5KCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQXJyYXk7XG4gIH1cblxuICBzZXREYXRhQXJyYXkoZGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKFV0aWwuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5kYXRhQXJyYXkgPSB0aGlzLnNvcnREYXRhKGRhdGEpO1xuICAgIH0gZWxzZSBpZiAoVXRpbC5pc09iamVjdChkYXRhKSAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRhdGFBcnJheSA9IFtkYXRhXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdDb21wb25lbnQgaGFzIHJlY2VpdmVkIG5vdCBzdXBwb3J0ZWQgc2VydmljZSBkYXRhLiBTdXBwb3J0ZWQgZGF0YSBhcmUgQXJyYXkgb3Igbm90IGVtcHR5IE9iamVjdCcpO1xuICAgICAgdGhpcy5kYXRhQXJyYXkgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCh0aGlzLmRhdGFBcnJheSk7XG4gIH1cblxuICBzeW5jRGF0YUluZGV4KHF1ZXJ5SWZOb3RGb3VuZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLl9jdXJyZW50SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMudmFsdWUpICYmICF0aGlzLmlzRW1wdHkoKSAmJiB0aGlzLmRhdGFBcnJheSkge1xuICAgICAgdGhpcy5kYXRhQXJyYXkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUudmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IFtdO1xuICAgICAgICAgIHRoaXMudmFsdWUudmFsdWUuZm9yRWFjaCgoaXRlbVZhbHVlLCBpbmRleFZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVt0aGlzLnZhbHVlQ29sdW1uXSA9PT0gaXRlbVZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleFt0aGlzLl9jdXJyZW50SW5kZXgubGVuZ3RoXSA9IGluZGV4VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVt0aGlzLnZhbHVlQ29sdW1uXSA9PT0gdGhpcy52YWx1ZS52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtW3RoaXMudmFsdWVDb2x1bW5dID09PSB0aGlzLnZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5fY3VycmVudEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHF1ZXJ5SWZOb3RGb3VuZCAmJlxuICAgICAgICAgIHRoaXMucXVlcnlPbkJpbmQgJiYgdGhpcy5kYXRhQXJyYXkgJiYgdGhpcy5kYXRhQXJyYXkubGVuZ3RoID09PSAwICYmICF0aGlzLmNhY2hlUXVlcmllZCkge1xuICAgICAgICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXF1ZXJ5SWZOb3RGb3VuZCAmJiB0aGlzLmRhdGFBcnJheSAmJiB0aGlzLmRhdGFBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJdCB3YXMgc2V0IHRoZSB2YWx1ZSAnICsgdGhpcy52YWx1ZS52YWx1ZSArICcgdG8gdGhlIGNvbXBvbmVudCAnICsgdGhpcy5vYXR0ciArICcgYnV0IHRoaXMgdmFsdWUgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGEgYXJyYXkgYW5kIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZSh2b2lkIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlQnlWYWx1ZUNvbHVtblR5cGUodmFsOiBhbnkpIHtcbiAgICBsZXQgdmFsdWUgPSB2YWw7XG5cbiAgICBpZiAodGhpcy52YWx1ZUNvbHVtblR5cGUgPT09IENvZGVzLlRZUEVfSU5UKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgaWYgKCFpc05hTihwYXJzZWQpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRWYWx1ZSh2YWw6IGFueSwgb3B0aW9ucz86IEZvcm1WYWx1ZU9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VCeVZhbHVlQ29sdW1uVHlwZSh2YWwpO1xuICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHNldERhdGEodmFsOiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VCeVZhbHVlQ29sdW1uVHlwZSh2YWwpO1xuICAgIHN1cGVyLnNldERhdGEodmFsdWUpO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRSZWNvcmQoKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzZWxlY3RlZFZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5nZXREYXRhQXJyYXkoKS5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLnZhbHVlQ29sdW1uXSA9PT0gc2VsZWN0ZWRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBsb2FkKCk6IGFueSB7XG4gICAgY29uc3Qgem9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgY29uc3QgbG9hZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh0cnVlKTtcbiAgICAgIH0sIHRoaXMuZGVsYXlMb2FkKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgfSk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbG9hZE9ic2VydmFibGUuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHZhbCBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodmFsIGFzIGJvb2xlYW4pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIG9uRm9ybUNvbnRyb2xDaGFuZ2UodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLm9sZFZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5vbkZvcm1Db250cm9sQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcHRpb25EZXNjcmlwdGlvblZhbHVlKGl0ZW06IGFueSA9IHt9KTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY1R4dCA9ICcnO1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uQ29sQXJyYXkgJiYgdGhpcy5kZXNjcmlwdGlvbkNvbEFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheS5mb3JFYWNoKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCB0eHQgPSBpdGVtW2NvbF07XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0eHQpKSB7XG4gICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlICYmIHRoaXMudHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgICAgICAgdHh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0eHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZXNjVHh0ICs9IHR4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmRlc2NyaXB0aW9uQ29sQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGRlc2NUeHQgKz0gdGhpcy5zZXBhcmF0b3I7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGVzY1R4dC50cmltKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnQpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNvcnREaXJlY3Rpb24gIT09IENvZGVzLkFTQ19TT1JUICYmIHNvcnREaXJlY3Rpb24gIT09IENvZGVzLkRFU0NfU09SVCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydGVkRGF0YSA9IGRhdGEuc29ydCgoYSwgYikgPT4gVXRpbC5jb21wYXJlKHRoaXMuZ2V0T3B0aW9uRGVzY3JpcHRpb25WYWx1ZShhKSwgdGhpcy5nZXRPcHRpb25EZXNjcmlwdGlvblZhbHVlKGIpKSk7XG4gICAgaWYgKHNvcnREaXJlY3Rpb24gPT09IENvZGVzLkRFU0NfU09SVCkge1xuICAgICAgc29ydGVkRGF0YS5yZXZlcnNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3J0ZWREYXRhO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnF1ZXJ5RGF0YSgpO1xuICB9XG5cbn1cbiJdfQ==
358
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXQvby1mb3JtLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUczRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQUVwRSxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRztJQUVyRCx5QkFBeUI7SUFDekIsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsMkJBQTJCO0lBQzNCLG9DQUFvQztJQUNwQyx5QkFBeUI7SUFFekIsaUNBQWlDO0lBRWpDLHlDQUF5QztJ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RUFBRTtZQUNyQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDdEI7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDOztrSEE3V1UscUJBQXFCO3NHQUFyQixxQkFBcUIscW1EQXdEckIscUJBQXFCO0FBM0NoQztJQUFDLHFCQUFxQixFQUFFOzswREFDYztBQUN0QztJQUFDLHFCQUFxQixFQUFFOzswREFDZTtBQUl2QztJQUFDLHFCQUFxQixFQUFFOztzRUFDaUI7QUFJekM7SUFBQyxxQkFBcUIsRUFBRTs7d0RBQ1U7MkZBMUJ2QixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1QsTUFBTSxFQUFFLHVDQUF1QztvQkFDL0MsT0FBTyxFQUFFLHVDQUF1QztpQkFDakQ7cUpBZVcsV0FBVyxNQUVYLFdBQVcsTUFLckIsdUJBQXVCLE1BS2hCLFNBQVMsTUErQlosZUFBZTtzQkFEbEIsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIE5nWm9uZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NlcnZpY2UtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9FcnJvckRpYWxvZ01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vLWVycm9yLWRpYWxvZy1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT250aW1pemVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb250aW1pemUvb250aW1pemUuc2VydmljZSc7XG5pbXBvcnQgeyBPQ29uZmlndXJlU2VydmljZUFyZ3MgfSBmcm9tICcuLi8uLi90eXBlcy9jb25maWd1cmUtc2VydmljZS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgRm9ybVZhbHVlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL2Zvcm0tdmFsdWUtb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3NlcnZpY2UudXRpbHMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jb250ZXh0bWVudS9vLWNvbnRleHQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1EYXRhQ29tcG9uZW50IH0gZnJvbSAnLi4vby1mb3JtLWRhdGEtY29tcG9uZW50LmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fRk9STV9TRVJWSUNFX0NPTVBPTkVOVCA9IFtcbiAgLy8gc3RhdGljLWRhdGEgW0FycmF5PGFueT5dIDogd2F5IHRvIHBvcHVsYXRlIHdpdGggc3RhdGljIGRhdGEuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc3RhdGljRGF0YTogc3RhdGljLWRhdGEnLFxuICAnZW50aXR5JyxcbiAgJ3NlcnZpY2UnLFxuICAnY29sdW1ucycsXG4gICd2YWx1ZUNvbHVtbjogdmFsdWUtY29sdW1uJyxcbiAgJ3ZhbHVlQ29sdW1uVHlwZTogdmFsdWUtY29sdW1uLXR5cGUnLFxuICAncGFyZW50S2V5czogcGFyZW50LWtleXMnLFxuICAvLyBWaXNpYmxlIGNvbHVtbnMgaW50byBzZWxlY3Rpb24gZGlhbG9nIGZyb20gcGFyYW1ldGVyICdjb2x1bW5zJy4gV2l0aCBlbXB0eSBwYXJhbWV0ZXIgYWxsIGNvbHVtbnMgYXJlIHZpc2libGUuXG4gICd2aXNpYmxlQ29sdW1uczogdmlzaWJsZS1jb2x1bW5zJyxcbiAgLy8gVmlzaWJsZSBjb2x1bW5zIGluIHRleHQgZmllbGQuIEJ5IGRlZmF1bHQsIGl0IGlzIHRoZSBwYXJhbWV0ZXIgdmFsdWUgb2YgdmlzaWJsZSBjb2x1bW5zLlxuICAnZGVzY3JpcHRpb25Db2x1bW5zOiBkZXNjcmlwdGlvbi1jb2x1bW5zJyxcblxuICAnc2VwYXJhdG9yJyxcblxuICAncXVlcnlPbkluaXQ6IHF1ZXJ5LW9uLWluaXQnLFxuICAncXVlcnlPbkJpbmQ6IHF1ZXJ5LW9uLWJpbmQnLFxuICAncXVlcnlPbkV2ZW50OiBxdWVyeS1vbi1ldmVudCcsXG5cbiAgLy8gcXVlcnktbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIHF1ZXJpZXMuIERlZmF1bHQ6IHF1ZXJ5LlxuICAncXVlcnlNZXRob2Q6IHF1ZXJ5LW1ldGhvZCcsXG5cbiAgJ3NlcnZpY2VUeXBlOiBzZXJ2aWNlLXR5cGUnLFxuXG4gIC8vIHF1ZXJ5LXdpdGgtbnVsbC1wYXJlbnQta2V5cyBbc3RyaW5nXVt5ZXN8bm98dHJ1ZXxmYWxzZV06IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byB0cmlnZ2VyIHF1ZXJ5IG1ldGhvZCB3aGVuIHBhcmVudC1rZXlzIGZpbHRlciBpcyBudWxsLiBEZWZhdWx0OiBmYWxzZVxuICAncXVlcnlXaXRoTnVsbFBhcmVudEtleXM6IHF1ZXJ5LXdpdGgtbnVsbC1wYXJlbnQta2V5cycsXG5cbiAgLy8gc2V0LXZhbHVlLW9uLXZhbHVlLWNoYW5nZSBbc3RyaW5nXTogRm9ybSBjb21wb25lbnQgYXR0cmlidXRlcyB3aG9zZSB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQgY2hhbmdlcyBkdWUgdG8gdXNlciBpbnRlcmFjdGlvbi4gU2VwYXJhdGVkIGJ5ICc7Jy4gQWNjZXB0ZWQgZm9ybWF0OiBhdHRyIHwgY29sdW1uTmFtZTphdHRyXG4gICdzZXRWYWx1ZU9uVmFsdWVDaGFuZ2U6IHNldC12YWx1ZS1vbi12YWx1ZS1jaGFuZ2UnLFxuXG4gIC8vIFtmdW5jdGlvbl06IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gcXVlcnkgZXJyb3IuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAncXVlcnlGYWxsYmFja0Z1bmN0aW9uOiBxdWVyeS1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ2luc2VydEZhbGxiYWNrRnVuY3Rpb246IGluc2VydC1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ3VwZGF0ZUZhbGxiYWNrRnVuY3Rpb246IHVwZGF0ZS1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ2RlbGV0ZUZhbGxiYWNrRnVuY3Rpb246IGRlbGV0ZS1mYWxsYmFjay1mdW5jdGlvbidcblxuICAndHJhbnNsYXRlJyxcblxuICAvLyBzb3J0IFtzdHJpbmddOiBzb3J0aW5nIEFTQyBvciBERVNDLiBEZWZhdWx0OiBubyB2YWx1ZVxuICAnc29ydCdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19GT1JNX1NFUlZJQ0VfQ09NUE9ORU5UID0gW1xuICAnb25TZXRWYWx1ZU9uVmFsdWVDaGFuZ2UnLFxuICAnb25EYXRhTG9hZGVkJ1xuXTtcblxuQERpcmVjdGl2ZSh7XG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19GT1JNX1NFUlZJQ0VfQ09NUE9ORU5ULFxuICBvdXRwdXRzOiBERUZBVUxUX0lOUFVUU19PX0ZPUk1fU0VSVklDRV9DT01QT05FTlRcbn0pXG5leHBvcnQgY2xhc3MgT0Zvcm1TZXJ2aWNlQ29tcG9uZW50IGV4dGVuZHMgT0Zvcm1EYXRhQ29tcG9uZW50IHtcblxuICAvKiBJbnB1dHMgKi9cbiAgcHJvdGVjdGVkIHN0YXRpY0RhdGE6IEFycmF5PGFueT47XG4gIHByb3RlY3RlZCBlbnRpdHk6IHN0cmluZztcbiAgcHJvdGVjdGVkIHNlcnZpY2U6IHN0cmluZztcbiAgcHJvdGVjdGVkIGNvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIHZhbHVlQ29sdW1uOiBzdHJpbmc7XG4gIHByb3RlY3RlZCB2YWx1ZUNvbHVtblR5cGU6IHN0cmluZyA9IENvZGVzLlRZUEVfSU5UO1xuICBwcm90ZWN0ZWQgcGFyZW50S2V5czogc3RyaW5nO1xuICBwcm90ZWN0ZWQgdmlzaWJsZUNvbHVtbnM6IHN0cmluZztcbiAgcHJvdGVjdGVkIGRlc2NyaXB0aW9uQ29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgc2VwYXJhdG9yOiBzdHJpbmcgPSBDb2Rlcy5TUEFDRV9TRVBBUkFUT1I7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgcXVlcnlPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIHF1ZXJ5T25CaW5kOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBxdWVyeU9uRXZlbnQ6IGFueTtcbiAgcHJvdGVjdGVkIHF1ZXJ5TWV0aG9kOiBzdHJpbmcgPSBDb2Rlcy5RVUVSWV9NRVRIT0Q7XG4gIHByb3RlY3RlZCBzZXJ2aWNlVHlwZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcXVlcnlXaXRoTnVsbFBhcmVudEtleXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNldFZhbHVlT25WYWx1ZUNoYW5nZTogc3RyaW5nO1xuICBwdWJsaWMgcXVlcnlGYWxsYmFja0Z1bmN0aW9uOiAoZXJyb3I6IGFueSkgPT4gdm9pZDtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHRyYW5zbGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc29ydDogJ0FTQycgfCAnREVTQyc7XG5cbiAgLyogT3V0cHV0cyAqL1xuICBwdWJsaWMgb25TZXRWYWx1ZU9uVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIHB1YmxpYyBvbkRhdGFMb2FkZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG5cbiAgLyogSW50ZXJuYWwgdmFyaWFibGVzICovXG4gIHB1YmxpYyBkYXRhQXJyYXk6IGFueVtdID0gW107XG4gIHByb3RlY3RlZCBjb2xBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIHZpc2libGVDb2xBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGRlc2NyaXB0aW9uQ29sQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIHByb3RlY3RlZCBkYXRhU2VydmljZTogT250aW1pemVTZXJ2aWNlO1xuICBwdWJsaWMgbG9hZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgcXVlcnlTdXNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgY2FjaGVRdWVyaWVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfcEtleXNFcXVpdiA9IHt9O1xuICBwcm90ZWN0ZWQgX3NldFZhbHVlT25WYWx1ZUNoYW5nZUVxdWl2ID0ge307XG4gIHByb3RlY3RlZCBfZm9ybURhdGFTdWJjcmliZTtcbiAgcHJvdGVjdGVkIF9jdXJyZW50SW5kZXg7XG4gIHByb3RlY3RlZCBvRXJyb3JEaWFsb2dNYW5hZ2VyOiBPRXJyb3JEaWFsb2dNYW5hZ2VyO1xuXG4gIHByb3RlY3RlZCBxdWVyeU9uRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbkRhdGFMb2FkOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHB1YmxpYyBkZWxheUxvYWQgPSAyNTA7XG4gIHB1YmxpYyBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBvQ29udGV4dE1lbnU6IE9Db250ZXh0TWVudUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChPQ29udGV4dE1lbnVDb21wb25lbnQpXG4gIHNldCBvQ29udGV4dE1lbnVSZWYodmFsdWU6IE9Db250ZXh0TWVudUNvbXBvbmVudCkge1xuICAgIHRoaXMub0NvbnRleHRNZW51ID0gdmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtOiBPRm9ybUNvbXBvbmVudCxcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoZm9ybSwgZWxSZWYsIGluamVjdG9yKTtcbiAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIHRoaXMuZWxSZWYgPSBlbFJlZjtcbiAgICB0aGlzLm9FcnJvckRpYWxvZ01hbmFnZXIgPSBpbmplY3Rvci5nZXQoT0Vycm9yRGlhbG9nTWFuYWdlcik7XG4gIH1cblxuICBpbml0aWFsaXplKCkge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQuYWRkKHRoaXMub25EYXRhTG9hZGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN5bmNEYXRhSW5kZXgoZmFsc2UpKSk7XG5cbiAgICB0aGlzLmNhY2hlUXVlcmllZCA9IGZhbHNlO1xuICAgIHRoaXMuY29sQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5jb2x1bW5zLCB0cnVlKTtcblxuICAgIHRoaXMudmlzaWJsZUNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMudmlzaWJsZUNvbHVtbnMsIHRydWUpO1xuICAgIGlmIChVdGlsLmlzQXJyYXlFbXB0eSh0aGlzLnZpc2libGVDb2xBcnJheSkpIHtcbiAgICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBhc3NpbmcgdmFsdWUgdG8gdmlzaWJsZUNvbHVtbnMgdG8gcHJvcGFnYXRlIHRoZSBwYXJhbWV0ZXIuXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgICAgdGhpcy52aXNpYmxlQ29sQXJyYXkgPSB0aGlzLmNvbEFycmF5O1xuICAgIH1cblxuICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLmRlc2NyaXB0aW9uQ29sdW1ucyk7XG4gICAgaWYgKFV0aWwuaXNBcnJheUVtcHR5KHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSkpIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSA9IHRoaXMudmlzaWJsZUNvbEFycmF5O1xuICAgIH1cblxuICAgIGNvbnN0IHBrQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5wYXJlbnRLZXlzKTtcbiAgICB0aGlzLl9wS2V5c0VxdWl2ID0gVXRpbC5wYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocGtBcnJheSk7XG5cbiAgICBjb25zdCBzZXRWYWx1ZVNldEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuc2V0VmFsdWVPblZhbHVlQ2hhbmdlKTtcbiAgICB0aGlzLl9zZXRWYWx1ZU9uVmFsdWVDaGFuZ2VFcXVpdiA9IFV0aWwucGFyc2VQYXJlbnRLZXlzRXF1aXZhbGVuY2VzKHNldFZhbHVlU2V0QXJyYXkpO1xuXG4gICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLnF1ZXJ5T25CaW5kKSB7XG4gICAgICB0aGlzLl9mb3JtRGF0YVN1YmNyaWJlID0gdGhpcy5mb3JtLm9uRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5xdWVyeURhdGEoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGljRGF0YSkge1xuICAgICAgdGhpcy5xdWVyeU9uQmluZCA9IGZhbHNlO1xuICAgICAgdGhpcy5xdWVyeU9uSW5pdCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWd1cmVTZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucXVlcnlPbkV2ZW50ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucXVlcnlPbkV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQodmFsdWUpIHx8IHRoaXMucXVlcnlXaXRoTnVsbFBhcmVudEtleXMpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5RGF0YSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cblxuXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5fZm9ybURhdGFTdWJjcmliZSkge1xuICAgICAgdGhpcy5fZm9ybURhdGFTdWJjcmliZS51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeU9uRXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlcnlPbkV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdE9uVmFsdWVDaGFuZ2UodHlwZSwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgc3VwZXIuZW1pdE9uVmFsdWVDaGFuZ2UodHlwZSwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAvLyBTZXQgdmFsdWUgZm9yICdzZXQtdmFsdWUtb24tdmFsdWUtY2hhbmdlJyBjb21wb25lbnRzXG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5nZXRTZWxlY3RlZFJlY29yZCgpO1xuICAgIHRoaXMub25TZXRWYWx1ZU9uVmFsdWVDaGFuZ2UuZW1pdChyZWNvcmQpO1xuICAgIGNvbnN0IHNldFZhbHVlU2V0S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX3NldFZhbHVlT25WYWx1ZUNoYW5nZUVxdWl2KTtcbiAgICBpZiAoc2V0VmFsdWVTZXRLZXlzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZm9ybUNvbXBvbmVudHMgPSB0aGlzLmZvcm0uZ2V0Q29tcG9uZW50cygpO1xuICAgICAgc2V0VmFsdWVTZXRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgY29tcCA9IGZvcm1Db21wb25lbnRzW3RoaXMuX3NldFZhbHVlT25WYWx1ZUNoYW5nZUVxdWl2W2tleV1dO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29tcCkpIHtcbiAgICAgICAgICBjb21wLnNldFZhbHVlKFV0aWwuaXNEZWZpbmVkKHJlY29yZCkgPyByZWNvcmRba2V5XSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qIFV0aWxpdHkgbWV0aG9kcyAqL1xuICBjb25maWd1cmVTZXJ2aWNlKCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlU2VydmljZUFyZ3MgPSB7IGluamVjdG9yOiB0aGlzLmluamVjdG9yLCBiYXNlU2VydmljZTogT250aW1pemVTZXJ2aWNlLCBlbnRpdHk6IHRoaXMuZW50aXR5LCBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlIH1cbiAgICB0aGlzLmRhdGFTZXJ2aWNlID0gVXRpbC5jb25maWd1cmVTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzKTtcblxuXG4gIH1cblxuICBnZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeShjb2x1bW5zPzogQXJyYXk8YW55Pikge1xuICAgIGNvbnN0IHJlc3VsdCA9IFV0aWwuaXNEZWZpbmVkKGNvbHVtbnMpID8gY29sdW1ucyA6IHRoaXMuY29sQXJyYXk7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHRoaXMudmFsdWVDb2x1bW4pID09PSAtMSkge1xuICAgICAgcmVzdWx0LnB1c2godGhpcy52YWx1ZUNvbHVtbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBxdWVyeURhdGEoZmlsdGVyPzogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlIHx8ICEodGhpcy5xdWVyeU1ldGhvZCBpbiB0aGlzLmRhdGFTZXJ2aWNlKSB8fCAhdGhpcy5lbnRpdHkpIHtcbiAgICAgIGNvbnNvbGUud2FybignU2VydmljZSBub3QgcHJvcGVybHkgY29uZmlndXJlZCEgYWJvcnRpbmcgcXVlcnknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihmaWx0ZXIgfHwge30sIFNlcnZpY2VVdGlscy5nZXRQYXJlbnRLZXlzRnJvbUZvcm0odGhpcy5fcEtleXNFcXVpdiwgdGhpcy5mb3JtKSk7XG4gICAgaWYgKCFTZXJ2aWNlVXRpbHMuZmlsdGVyQ29udGFpbnNBbGxQYXJlbnRLZXlzKGZpbHRlciwgdGhpcy5fcEtleXNFcXVpdikgJiYgIXRoaXMucXVlcnlXaXRoTnVsbFBhcmVudEtleXMpIHtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucXVlcnlTdXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnF1ZXJ5U3VzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmxvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWVyeUNvbHMgPSB0aGlzLmdldEF0dHJpYnV0ZXNWYWx1ZXNUb1F1ZXJ5KCk7XG4gICAgICBjb25zdCBzcWxUeXBlcyA9IHRoaXMuZm9ybSA/IHRoaXMuZm9ybS5nZXRBdHRyaWJ1dGVzU1FMVHlwZXMoKSA6IHt9O1xuXG4gICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbiA9IHRoaXMubG9hZCgpO1xuICAgICAgdGhpcy5xdWVyeVN1c2NyaXB0aW9uID0gdGhpcy5kYXRhU2VydmljZVt0aGlzLnF1ZXJ5TWV0aG9kXShmaWx0ZXIsIHF1ZXJ5Q29scywgdGhpcy5lbnRpdHksIHNxbFR5cGVzKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcC5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVF1ZXJpZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhQXJyYXkocmVzcC5kYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24oZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vRXJyb3JEaWFsb2dNYW5hZ2VyLm9wZW5FcnJvckRpYWxvZyhlcnIpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YUFycmF5KCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQXJyYXk7XG4gIH1cblxuICBzZXREYXRhQXJyYXkoZGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKFV0aWwuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5kYXRhQXJyYXkgPSB0aGlzLnNvcnREYXRhKGRhdGEpO1xuICAgIH0gZWxzZSBpZiAoVXRpbC5pc09iamVjdChkYXRhKSAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRhdGFBcnJheSA9IFtkYXRhXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdDb21wb25lbnQgaGFzIHJlY2VpdmVkIG5vdCBzdXBwb3J0ZWQgc2VydmljZSBkYXRhLiBTdXBwb3J0ZWQgZGF0YSBhcmUgQXJyYXkgb3Igbm90IGVtcHR5IE9iamVjdCcpO1xuICAgICAgdGhpcy5kYXRhQXJyYXkgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCh0aGlzLmRhdGFBcnJheSk7XG4gIH1cblxuICBzeW5jRGF0YUluZGV4KHF1ZXJ5SWZOb3RGb3VuZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLl9jdXJyZW50SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMudmFsdWUpICYmICF0aGlzLmlzRW1wdHkoKSAmJiB0aGlzLmRhdGFBcnJheSkge1xuICAgICAgdGhpcy5kYXRhQXJyYXkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUudmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IFtdO1xuICAgICAgICAgIHRoaXMudmFsdWUudmFsdWUuZm9yRWFjaCgoaXRlbVZhbHVlLCBpbmRleFZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVt0aGlzLnZhbHVlQ29sdW1uXSA9PT0gaXRlbVZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleFt0aGlzLl9jdXJyZW50SW5kZXgubGVuZ3RoXSA9IGluZGV4VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVt0aGlzLnZhbHVlQ29sdW1uXSA9PT0gdGhpcy52YWx1ZS52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtW3RoaXMudmFsdWVDb2x1bW5dID09PSB0aGlzLnZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5fY3VycmVudEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHF1ZXJ5SWZOb3RGb3VuZCAmJlxuICAgICAgICAgIHRoaXMucXVlcnlPbkJpbmQgJiYgdGhpcy5kYXRhQXJyYXkgJiYgdGhpcy5kYXRhQXJyYXkubGVuZ3RoID09PSAwICYmICF0aGlzLmNhY2hlUXVlcmllZCkge1xuICAgICAgICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXF1ZXJ5SWZOb3RGb3VuZCAmJiB0aGlzLmRhdGFBcnJheSAmJiB0aGlzLmRhdGFBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJdCB3YXMgc2V0IHRoZSB2YWx1ZSAnICsgdGhpcy52YWx1ZS52YWx1ZSArICcgdG8gdGhlIGNvbXBvbmVudCAnICsgdGhpcy5vYXR0ciArICcgYnV0IHRoaXMgdmFsdWUgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGEgYXJyYXkgYW5kIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZSh2b2lkIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlQnlWYWx1ZUNvbHVtblR5cGUodmFsOiBhbnkpIHtcbiAgICBsZXQgdmFsdWUgPSB2YWw7XG5cbiAgICBpZiAodGhpcy52YWx1ZUNvbHVtblR5cGUgPT09IENvZGVzLlRZUEVfSU5UKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgaWYgKCFpc05hTihwYXJzZWQpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRWYWx1ZSh2YWw6IGFueSwgb3B0aW9ucz86IEZvcm1WYWx1ZU9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VCeVZhbHVlQ29sdW1uVHlwZSh2YWwpO1xuICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHNldERhdGEodmFsOiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VCeVZhbHVlQ29sdW1uVHlwZSh2YWwpO1xuICAgIHN1cGVyLnNldERhdGEodmFsdWUpO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRSZWNvcmQoKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzZWxlY3RlZFZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5nZXREYXRhQXJyYXkoKS5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLnZhbHVlQ29sdW1uXSA9PT0gc2VsZWN0ZWRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBsb2FkKCk6IGFueSB7XG4gICAgY29uc3Qgem9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgY29uc3QgbG9hZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh0cnVlKTtcbiAgICAgIH0sIHRoaXMuZGVsYXlMb2FkKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgfSk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbG9hZE9ic2VydmFibGUuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHZhbCBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodmFsIGFzIGJvb2xlYW4pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIG9uRm9ybUNvbnRyb2xDaGFuZ2UodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLm9sZFZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5vbkZvcm1Db250cm9sQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcHRpb25EZXNjcmlwdGlvblZhbHVlKGl0ZW06IGFueSA9IHt9KTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY1R4dCA9ICcnO1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uQ29sQXJyYXkgJiYgdGhpcy5kZXNjcmlwdGlvbkNvbEFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheS5mb3JFYWNoKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCB0eHQgPSBpdGVtW2NvbF07XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0eHQpKSB7XG4gICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlICYmIHRoaXMudHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgICAgICAgdHh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0eHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZXNjVHh0ICs9IHR4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmRlc2NyaXB0aW9uQ29sQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGRlc2NUeHQgKz0gdGhpcy5zZXBhcmF0b3I7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGVzY1R4dC50cmltKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnQpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNvcnREaXJlY3Rpb24gIT09IENvZGVzLkFTQ19TT1JUICYmIHNvcnREaXJlY3Rpb24gIT09IENvZGVzLkRFU0NfU09SVCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydGVkRGF0YSA9IGRhdGEuc29ydCgoYSwgYikgPT4gVXRpbC5jb21wYXJlKHRoaXMuZ2V0T3B0aW9uRGVzY3JpcHRpb25WYWx1ZShhKSwgdGhpcy5nZXRPcHRpb25EZXNjcmlwdGlvblZhbHVlKGIpKSk7XG4gICAgaWYgKHNvcnREaXJlY3Rpb24gPT09IENvZGVzLkRFU0NfU09SVCkge1xuICAgICAgc29ydGVkRGF0YS5yZXZlcnNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3J0ZWREYXRhO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnF1ZXJ5RGF0YSgpO1xuICB9XG5cbn1cbiJdfQ==