@quadrel-enterprise-ui/framework 18.31.4 → 18.32.0

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 (36) hide show
  1. package/esm2022/lib/comments/add-comment/add-comment-dialog.component.mjs +3 -4
  2. package/esm2022/lib/forms/checkbox-chips/checkbox-chips.component.mjs +3 -3
  3. package/esm2022/lib/forms/checkboxes/checkboxes.component.mjs +3 -3
  4. package/esm2022/lib/forms/datepicker/datepicker.component.mjs +3 -3
  5. package/esm2022/lib/forms/dropdown/dropdown.component.mjs +3 -3
  6. package/esm2022/lib/forms/file-upload/file-upload.component.mjs +3 -3
  7. package/esm2022/lib/forms/input/input.component.mjs +3 -3
  8. package/esm2022/lib/forms/multi-input/multi-input.component.mjs +3 -3
  9. package/esm2022/lib/forms/pin-code/pin-code.component.mjs +3 -3
  10. package/esm2022/lib/forms/radio-buttons/radio-buttons.component.mjs +3 -3
  11. package/esm2022/lib/forms/richtext/richtext.component.mjs +3 -3
  12. package/esm2022/lib/forms/switches/switches.component.mjs +3 -3
  13. package/esm2022/lib/forms/textarea/textarea.component.mjs +3 -3
  14. package/esm2022/lib/page/object-header/page-object-header.component.mjs +8 -4
  15. package/esm2022/lib/page/page.component.mjs +8 -2
  16. package/esm2022/lib/page/shared/services/form-group-manager.service.mjs +59 -14
  17. package/esm2022/lib/page/shared/services/page-submit-action.service.mjs +4 -2
  18. package/esm2022/lib/quick-edit/quick-edit.component.mjs +2 -2
  19. package/esm2022/lib/table/store/table.reducer.mjs +1 -1
  20. package/fesm2022/quadrel-enterprise-ui-framework.mjs +103 -47
  21. package/fesm2022/quadrel-enterprise-ui-framework.mjs.map +1 -1
  22. package/lib/comments/add-comment/add-comment-dialog.component.d.ts +0 -4
  23. package/lib/comments/add-comment/add-comment-dialog.component.d.ts.map +1 -1
  24. package/lib/page/object-header/page-object-header.component.d.ts.map +1 -1
  25. package/lib/page/page.component.d.ts +1 -0
  26. package/lib/page/page.component.d.ts.map +1 -1
  27. package/lib/page/shared/services/form-group-manager.service.d.ts +10 -0
  28. package/lib/page/shared/services/form-group-manager.service.d.ts.map +1 -1
  29. package/lib/page/shared/services/page-submit-action.service.d.ts +1 -0
  30. package/lib/page/shared/services/page-submit-action.service.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/esm2022/index.mjs +0 -74
  33. package/esm2022/lib/table/__mocks__/mock-secondary-actions.service.mjs +0 -26
  34. package/index.d.ts.map +0 -1
  35. package/lib/table/__mocks__/mock-secondary-actions.service.d.ts +0 -14
  36. package/lib/table/__mocks__/mock-secondary-actions.service.d.ts.map +0 -1
@@ -281,7 +281,7 @@ export class QdFileUploadComponent {
281
281
  },
282
282
  QdFormsActionEmitterService,
283
283
  QdFileUploadService
284
- ], ngImport: i0, template: "<qd-form-label\n [label]=\"config?.label?.i18n\"\n [readonly]=\"config.readonly\"\n [viewonly]=\"config.viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!isReadonly && !isViewonly\">\n <input #fileInput type=\"file\" hidden [disabled]=\"isDisabled\" (change)=\"onFileSelect($event)\" />\n\n <div class=\"upload-box\" (click)=\"fileInput.click()\">\n <div class=\"upload-content\">\n <ng-container *ngIf=\"!file\">\n <span class=\"placeholder\">\n {{ (config?.placeholder?.i18n | translate) || (\"i18n.qd.form.placeholder.selectFile\" | translate) }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"file\">\n <div class=\"file-row\">\n <span class=\"file-name\">{{ file.name }} </span>\n\n <ng-container *ngIf=\"isUploading\">\n <div class=\"progress-wrapper\">\n <div class=\"progress-bar\" [style.width.%]=\"uploadProgress$ | async\"></div>\n <span class=\"progress-label\">{{ uploadProgress$ | async }}%</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"hasError\">\n <span class=\"upload-error\">\n {{ \"i18n.qd.form.error.uploadFailed\" | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"!isUploading\">\n <span class=\"file-size\">{{ file.size | qdFileSize }}</span>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"button-actions\">\n <button *ngIf=\"file && isUploading\" type=\"button\" (click)=\"cancelUpload()\">\n <qd-icon icon=\"timesCircleSolid\"></qd-icon>\n </button>\n\n <button *ngIf=\"(file && isUploaded) || (file && hasValidationError)\" type=\"button\" (click)=\"removeFile()\">\n <qd-icon icon=\"trash\"></qd-icon>\n </button>\n </div>\n\n <qd-form-hint\n *ngIf=\"config?.hint\"\n [hint]=\"config?.hint.i18n\"\n [hasError]=\"hasValidationError\"\n [control]=\"control\"\n [hintAction]=\"config.hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"isReadonly\"\n [values]=\"[file?.name]\"\n [readonlyAction]=\"config.readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"isViewonly\"\n [values]=\"[file?.name]\"\n [viewonlyAction]=\"config.viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{position:relative;display:block;width:100%;margin-bottom:.75rem}:host .upload-box{position:relative;display:block;padding:.5rem;margin-bottom:.375rem;background-color:#fff;box-shadow:inset 0 0 0 .0625rem #069;cursor:pointer;-webkit-user-select:none;user-select:none}:host .upload-box .file-name{color:#069!important}:host .upload-box .placeholder{color:#069!important}:host .upload-box .qd-icon{color:#069!important}:host .upload-box .upload-content{display:flex;flex-direction:column;padding-right:2rem;padding-left:.5rem}:host .upload-box .upload-content .placeholder{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row{display:flex;flex-wrap:nowrap;align-items:center;gap:.5rem}:host .upload-box .upload-content .file-row .file-name{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row .progress-wrapper{position:relative;display:flex;overflow:hidden;min-width:6.25rem;height:1.25rem;flex:1 1 auto;border-radius:.625rem}:host .upload-box .upload-content .file-row .progress-wrapper .progress-bar{height:100%;border-radius:inherit;background-color:#fee3b5}:host .upload-box .upload-content .file-row .progress-wrapper .progress-label{color:#e97e00;font-size:.875rem;font-weight:500;line-height:1.25rem;position:absolute;z-index:1000;left:.75rem}:host .upload-box .upload-content .file-row .file-size{margin-left:auto;color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem}:host .button-actions{position:absolute;top:1.625rem;right:.875rem;display:flex}:host .button-actions button{padding:0;border:none;background:none;cursor:pointer}:host .button-actions qd-icon{color:#069}:host.qd-form-disabled .upload-box{cursor:not-allowed;opacity:.6}:host.qd-form-readonly .upload-box,:host.qd-form-viewonly .upload-box{cursor:default}:host(.qd-form-error) .upload-box{box-shadow:inset 0 0 0 .0625rem #c70023!important}:host(.qd-form-error) .upload-box .file-name,:host(.qd-form-error) .upload-box .placeholder,:host(.qd-form-error) .upload-box .file-size,:host(.qd-form-error) .upload-box+.button-actions .qd-icon{color:#c70023!important}:host(.qd-form-error) .upload-box:hover{box-shadow:inset 0 0 0 .0625rem #069!important}:host(.qd-form-error) .upload-box:hover .file-name,:host(.qd-form-error) .upload-box:hover .placeholder,:host(.qd-form-error) .upload-box:hover .file-size,:host(.qd-form-error) .upload-box:hover+.button-actions .qd-icon{color:#069!important}:host(.qd-form-uploaded) .upload-box{box-shadow:inset 0 0 0 .0625rem #b4b4b4!important}:host(.qd-form-uploaded) .upload-box .file-name,:host(.qd-form-uploaded) .upload-box .placeholder,:host(.qd-form-uploaded) .upload-box .file-size{color:#171717!important;font-weight:400!important}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: i6.QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: i7.QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: i8.QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: i9.QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }, { kind: "pipe", type: i11.QdFileSizePipe, name: "qdFileSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
284
+ ], ngImport: i0, template: "<qd-form-label\n [label]=\"config?.label?.i18n\"\n [readonly]=\"config.readonly\"\n [viewonly]=\"config.viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!isReadonly && !isViewonly\">\n <input #fileInput type=\"file\" hidden [disabled]=\"isDisabled\" (change)=\"onFileSelect($event)\" />\n\n <div class=\"upload-box\" (click)=\"fileInput.click()\">\n <div class=\"upload-content\">\n <ng-container *ngIf=\"!file\">\n <span class=\"placeholder\">\n {{ (config?.placeholder?.i18n | translate) || (\"i18n.qd.form.placeholder.selectFile\" | translate) }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"file\">\n <div class=\"file-row\">\n <span class=\"file-name\">{{ file.name }} </span>\n\n <ng-container *ngIf=\"isUploading\">\n <div class=\"progress-wrapper\">\n <div class=\"progress-bar\" [style.width.%]=\"uploadProgress$ | async\"></div>\n <span class=\"progress-label\">{{ uploadProgress$ | async }}%</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"hasError\">\n <span class=\"upload-error\">\n {{ \"i18n.qd.form.error.uploadFailed\" | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"!isUploading\">\n <span class=\"file-size\">{{ file.size | qdFileSize }}</span>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"button-actions\">\n <button *ngIf=\"file && isUploading\" type=\"button\" (click)=\"cancelUpload()\">\n <qd-icon icon=\"timesCircleSolid\"></qd-icon>\n </button>\n\n <button *ngIf=\"(file && isUploaded) || (file && hasValidationError)\" type=\"button\" (click)=\"removeFile()\">\n <qd-icon icon=\"trash\"></qd-icon>\n </button>\n </div>\n\n <qd-form-hint\n *ngIf=\"config?.hint || hasValidationError\"\n [hint]=\"config?.hint?.i18n\"\n [hasError]=\"hasValidationError\"\n [control]=\"control\"\n [hintAction]=\"config.hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"isReadonly\"\n [values]=\"[file?.name]\"\n [readonlyAction]=\"config.readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"isViewonly\"\n [values]=\"[file?.name]\"\n [viewonlyAction]=\"config.viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{position:relative;display:block;width:100%;margin-bottom:.75rem}:host .upload-box{position:relative;display:block;padding:.5rem;margin-bottom:.375rem;background-color:#fff;box-shadow:inset 0 0 0 .0625rem #069;cursor:pointer;-webkit-user-select:none;user-select:none}:host .upload-box .file-name{color:#069!important}:host .upload-box .placeholder{color:#069!important}:host .upload-box .qd-icon{color:#069!important}:host .upload-box .upload-content{display:flex;flex-direction:column;padding-right:2rem;padding-left:.5rem}:host .upload-box .upload-content .placeholder{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row{display:flex;flex-wrap:nowrap;align-items:center;gap:.5rem}:host .upload-box .upload-content .file-row .file-name{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row .progress-wrapper{position:relative;display:flex;overflow:hidden;min-width:6.25rem;height:1.25rem;flex:1 1 auto;border-radius:.625rem}:host .upload-box .upload-content .file-row .progress-wrapper .progress-bar{height:100%;border-radius:inherit;background-color:#fee3b5}:host .upload-box .upload-content .file-row .progress-wrapper .progress-label{color:#e97e00;font-size:.875rem;font-weight:500;line-height:1.25rem;position:absolute;z-index:1000;left:.75rem}:host .upload-box .upload-content .file-row .file-size{margin-left:auto;color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem}:host .button-actions{position:absolute;top:1.625rem;right:.875rem;display:flex}:host .button-actions button{padding:0;border:none;background:none;cursor:pointer}:host .button-actions qd-icon{color:#069}:host.qd-form-disabled .upload-box{cursor:not-allowed;opacity:.6}:host.qd-form-readonly .upload-box,:host.qd-form-viewonly .upload-box{cursor:default}:host(.qd-form-error) .upload-box{box-shadow:inset 0 0 0 .0625rem #c70023!important}:host(.qd-form-error) .upload-box .file-name,:host(.qd-form-error) .upload-box .placeholder,:host(.qd-form-error) .upload-box .file-size,:host(.qd-form-error) .upload-box+.button-actions .qd-icon{color:#c70023!important}:host(.qd-form-error) .upload-box:hover{box-shadow:inset 0 0 0 .0625rem #069!important}:host(.qd-form-error) .upload-box:hover .file-name,:host(.qd-form-error) .upload-box:hover .placeholder,:host(.qd-form-error) .upload-box:hover .file-size,:host(.qd-form-error) .upload-box:hover+.button-actions .qd-icon{color:#069!important}:host(.qd-form-uploaded) .upload-box{box-shadow:inset 0 0 0 .0625rem #b4b4b4!important}:host(.qd-form-uploaded) .upload-box .file-name,:host(.qd-form-uploaded) .upload-box .placeholder,:host(.qd-form-uploaded) .upload-box .file-size{color:#171717!important;font-weight:400!important}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: i6.QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: i7.QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: i8.QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: i9.QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }, { kind: "pipe", type: i11.QdFileSizePipe, name: "qdFileSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
285
285
  }
286
286
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdFileUploadComponent, decorators: [{
287
287
  type: Component,
@@ -301,7 +301,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
301
301
  '[class.qd-form-uploading]': 'isUploading',
302
302
  '[class.qd-form-uploaded]': 'isUploaded',
303
303
  '[attr.data-test-id]': 'testId'
304
- }, template: "<qd-form-label\n [label]=\"config?.label?.i18n\"\n [readonly]=\"config.readonly\"\n [viewonly]=\"config.viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!isReadonly && !isViewonly\">\n <input #fileInput type=\"file\" hidden [disabled]=\"isDisabled\" (change)=\"onFileSelect($event)\" />\n\n <div class=\"upload-box\" (click)=\"fileInput.click()\">\n <div class=\"upload-content\">\n <ng-container *ngIf=\"!file\">\n <span class=\"placeholder\">\n {{ (config?.placeholder?.i18n | translate) || (\"i18n.qd.form.placeholder.selectFile\" | translate) }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"file\">\n <div class=\"file-row\">\n <span class=\"file-name\">{{ file.name }} </span>\n\n <ng-container *ngIf=\"isUploading\">\n <div class=\"progress-wrapper\">\n <div class=\"progress-bar\" [style.width.%]=\"uploadProgress$ | async\"></div>\n <span class=\"progress-label\">{{ uploadProgress$ | async }}%</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"hasError\">\n <span class=\"upload-error\">\n {{ \"i18n.qd.form.error.uploadFailed\" | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"!isUploading\">\n <span class=\"file-size\">{{ file.size | qdFileSize }}</span>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"button-actions\">\n <button *ngIf=\"file && isUploading\" type=\"button\" (click)=\"cancelUpload()\">\n <qd-icon icon=\"timesCircleSolid\"></qd-icon>\n </button>\n\n <button *ngIf=\"(file && isUploaded) || (file && hasValidationError)\" type=\"button\" (click)=\"removeFile()\">\n <qd-icon icon=\"trash\"></qd-icon>\n </button>\n </div>\n\n <qd-form-hint\n *ngIf=\"config?.hint\"\n [hint]=\"config?.hint.i18n\"\n [hasError]=\"hasValidationError\"\n [control]=\"control\"\n [hintAction]=\"config.hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"isReadonly\"\n [values]=\"[file?.name]\"\n [readonlyAction]=\"config.readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"isViewonly\"\n [values]=\"[file?.name]\"\n [viewonlyAction]=\"config.viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{position:relative;display:block;width:100%;margin-bottom:.75rem}:host .upload-box{position:relative;display:block;padding:.5rem;margin-bottom:.375rem;background-color:#fff;box-shadow:inset 0 0 0 .0625rem #069;cursor:pointer;-webkit-user-select:none;user-select:none}:host .upload-box .file-name{color:#069!important}:host .upload-box .placeholder{color:#069!important}:host .upload-box .qd-icon{color:#069!important}:host .upload-box .upload-content{display:flex;flex-direction:column;padding-right:2rem;padding-left:.5rem}:host .upload-box .upload-content .placeholder{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row{display:flex;flex-wrap:nowrap;align-items:center;gap:.5rem}:host .upload-box .upload-content .file-row .file-name{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row .progress-wrapper{position:relative;display:flex;overflow:hidden;min-width:6.25rem;height:1.25rem;flex:1 1 auto;border-radius:.625rem}:host .upload-box .upload-content .file-row .progress-wrapper .progress-bar{height:100%;border-radius:inherit;background-color:#fee3b5}:host .upload-box .upload-content .file-row .progress-wrapper .progress-label{color:#e97e00;font-size:.875rem;font-weight:500;line-height:1.25rem;position:absolute;z-index:1000;left:.75rem}:host .upload-box .upload-content .file-row .file-size{margin-left:auto;color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem}:host .button-actions{position:absolute;top:1.625rem;right:.875rem;display:flex}:host .button-actions button{padding:0;border:none;background:none;cursor:pointer}:host .button-actions qd-icon{color:#069}:host.qd-form-disabled .upload-box{cursor:not-allowed;opacity:.6}:host.qd-form-readonly .upload-box,:host.qd-form-viewonly .upload-box{cursor:default}:host(.qd-form-error) .upload-box{box-shadow:inset 0 0 0 .0625rem #c70023!important}:host(.qd-form-error) .upload-box .file-name,:host(.qd-form-error) .upload-box .placeholder,:host(.qd-form-error) .upload-box .file-size,:host(.qd-form-error) .upload-box+.button-actions .qd-icon{color:#c70023!important}:host(.qd-form-error) .upload-box:hover{box-shadow:inset 0 0 0 .0625rem #069!important}:host(.qd-form-error) .upload-box:hover .file-name,:host(.qd-form-error) .upload-box:hover .placeholder,:host(.qd-form-error) .upload-box:hover .file-size,:host(.qd-form-error) .upload-box:hover+.button-actions .qd-icon{color:#069!important}:host(.qd-form-uploaded) .upload-box{box-shadow:inset 0 0 0 .0625rem #b4b4b4!important}:host(.qd-form-uploaded) .upload-box .file-name,:host(.qd-form-uploaded) .upload-box .placeholder,:host(.qd-form-uploaded) .upload-box .file-size{color:#171717!important;font-weight:400!important}\n"] }]
304
+ }, template: "<qd-form-label\n [label]=\"config?.label?.i18n\"\n [readonly]=\"config.readonly\"\n [viewonly]=\"config.viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!isReadonly && !isViewonly\">\n <input #fileInput type=\"file\" hidden [disabled]=\"isDisabled\" (change)=\"onFileSelect($event)\" />\n\n <div class=\"upload-box\" (click)=\"fileInput.click()\">\n <div class=\"upload-content\">\n <ng-container *ngIf=\"!file\">\n <span class=\"placeholder\">\n {{ (config?.placeholder?.i18n | translate) || (\"i18n.qd.form.placeholder.selectFile\" | translate) }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"file\">\n <div class=\"file-row\">\n <span class=\"file-name\">{{ file.name }} </span>\n\n <ng-container *ngIf=\"isUploading\">\n <div class=\"progress-wrapper\">\n <div class=\"progress-bar\" [style.width.%]=\"uploadProgress$ | async\"></div>\n <span class=\"progress-label\">{{ uploadProgress$ | async }}%</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"hasError\">\n <span class=\"upload-error\">\n {{ \"i18n.qd.form.error.uploadFailed\" | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"!isUploading\">\n <span class=\"file-size\">{{ file.size | qdFileSize }}</span>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"button-actions\">\n <button *ngIf=\"file && isUploading\" type=\"button\" (click)=\"cancelUpload()\">\n <qd-icon icon=\"timesCircleSolid\"></qd-icon>\n </button>\n\n <button *ngIf=\"(file && isUploaded) || (file && hasValidationError)\" type=\"button\" (click)=\"removeFile()\">\n <qd-icon icon=\"trash\"></qd-icon>\n </button>\n </div>\n\n <qd-form-hint\n *ngIf=\"config?.hint || hasValidationError\"\n [hint]=\"config?.hint?.i18n\"\n [hasError]=\"hasValidationError\"\n [control]=\"control\"\n [hintAction]=\"config.hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"isReadonly\"\n [values]=\"[file?.name]\"\n [readonlyAction]=\"config.readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"isViewonly\"\n [values]=\"[file?.name]\"\n [viewonlyAction]=\"config.viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{position:relative;display:block;width:100%;margin-bottom:.75rem}:host .upload-box{position:relative;display:block;padding:.5rem;margin-bottom:.375rem;background-color:#fff;box-shadow:inset 0 0 0 .0625rem #069;cursor:pointer;-webkit-user-select:none;user-select:none}:host .upload-box .file-name{color:#069!important}:host .upload-box .placeholder{color:#069!important}:host .upload-box .qd-icon{color:#069!important}:host .upload-box .upload-content{display:flex;flex-direction:column;padding-right:2rem;padding-left:.5rem}:host .upload-box .upload-content .placeholder{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row{display:flex;flex-wrap:nowrap;align-items:center;gap:.5rem}:host .upload-box .upload-content .file-row .file-name{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row .progress-wrapper{position:relative;display:flex;overflow:hidden;min-width:6.25rem;height:1.25rem;flex:1 1 auto;border-radius:.625rem}:host .upload-box .upload-content .file-row .progress-wrapper .progress-bar{height:100%;border-radius:inherit;background-color:#fee3b5}:host .upload-box .upload-content .file-row .progress-wrapper .progress-label{color:#e97e00;font-size:.875rem;font-weight:500;line-height:1.25rem;position:absolute;z-index:1000;left:.75rem}:host .upload-box .upload-content .file-row .file-size{margin-left:auto;color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem}:host .button-actions{position:absolute;top:1.625rem;right:.875rem;display:flex}:host .button-actions button{padding:0;border:none;background:none;cursor:pointer}:host .button-actions qd-icon{color:#069}:host.qd-form-disabled .upload-box{cursor:not-allowed;opacity:.6}:host.qd-form-readonly .upload-box,:host.qd-form-viewonly .upload-box{cursor:default}:host(.qd-form-error) .upload-box{box-shadow:inset 0 0 0 .0625rem #c70023!important}:host(.qd-form-error) .upload-box .file-name,:host(.qd-form-error) .upload-box .placeholder,:host(.qd-form-error) .upload-box .file-size,:host(.qd-form-error) .upload-box+.button-actions .qd-icon{color:#c70023!important}:host(.qd-form-error) .upload-box:hover{box-shadow:inset 0 0 0 .0625rem #069!important}:host(.qd-form-error) .upload-box:hover .file-name,:host(.qd-form-error) .upload-box:hover .placeholder,:host(.qd-form-error) .upload-box:hover .file-size,:host(.qd-form-error) .upload-box:hover+.button-actions .qd-icon{color:#069!important}:host(.qd-form-uploaded) .upload-box{box-shadow:inset 0 0 0 .0625rem #b4b4b4!important}:host(.qd-form-uploaded) .upload-box .file-name,:host(.qd-form-uploaded) .upload-box .placeholder,:host(.qd-form-uploaded) .upload-box .file-size{color:#171717!important;font-weight:400!important}\n"] }]
305
305
  }], ctorParameters: () => [{ type: i1.ControlContainer, decorators: [{
306
306
  type: Optional
307
307
  }, {
@@ -330,4 +330,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
330
330
  }], clickViewonly: [{
331
331
  type: Output
332
332
  }] } });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9mb3Jtcy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osSUFBSSxFQUNKLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXJELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RUc7QUF5QkgsTUFBTSxPQUFPLHFCQUFxQjtJQWtIbUI7SUFDaEM7SUFDQTtJQW5IbkI7O09BRUc7SUFDTSxlQUFlLENBQVU7SUFFbEM7O09BRUc7SUFDTSxNQUFNLENBQWlDO0lBRWhEOztPQUVHO0lBQ0gsSUFDSSxLQUFLLENBQUMsSUFBaUI7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFD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LFFBQVE7cUhBOUd0QixlQUFlO3NCQUF2QixLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFNRixLQUFLO3NCQURSLEtBQUs7Z0JBZU4sTUFBTTtzQkFETCxLQUFLO3VCQUFDLGNBQWM7Z0JBTVgsV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxZQUFZO3NCQUFyQixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUUsU0FBUztzQkFEakIsTUFBTTtnQkFPRSxhQUFhO3NCQURyQixNQUFNO2dCQU9FLGFBQWE7c0JBRHJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2tpcFNlbGZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xDb250YWluZXIsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBRZEZvcm1Db250cm9sIH0gZnJvbSAnLi4vcmVhY3RpdmUtZm9ybXMvY29udHJvbHMvZm9ybS1jb250cm9sJztcbmltcG9ydCB7IFFkRm9ybUZpbGVVcGxvYWRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbW9kZWwvZm9ybXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFFkVXBsb2FkU3RhdGUgfSBmcm9tICcuL21vZGVsL2ZpbGUtdXBsb2FkLm1vZGVsJztcbmltcG9ydCB7IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9hY3Rpb24tZW1pdHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFFkRmlsZVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ZpbGUtdXBsb2FkLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSAqKlFkRmlsZVVwbG9hZCoqIGNvbXBvbmVudCBoYW5kbGVzIGZpbGUgdXBsb2FkcyBhbmQgaW50ZWdyYXRlcyB3aXRoIGZvcm1zLlxuICpcbiAqICMjIyBGZWF0dXJlc1xuICogLSBVcGxvYWQgZmlsZXMgd2l0aCBjb25maWd1cmFibGUgc2l6ZSBhbmQgdHlwZSByZXN0cmljdGlvbnNcbiAqIC0gU2hvdyB1cGxvYWQgcHJvZ3Jlc3MgYW5kIGhhbmRsZSBlcnJvcnNcbiAqIC0gSW50ZWdyYXRlIGludG8gYSByZWFjdGl2ZSBmb3JtIG9yIGJpbmQgZGlyZWN0bHkgdG8gYSBtb2RlbFxuICpcbiAqICMjIyBVc2FnZSB3aXRoIFJlYWN0aXZlIEZvcm1zXG4gKlxuICogYGBgdHNcbiAqIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAqICAgZmlsZTogbmV3IEZvcm1Db250cm9sKG51bGwsIFtRZFZhbGlkYXRvcnMuZmlsZVNpemUoNSksIFFkVmFsaWRhdG9ycy5maWxlVHlwZShbJy5qcGVnJywgJy5wZGYnXV0pXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIGBgYGh0bWxcbiAqIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICogICA8cWQtZmlsZS11cGxvYWQgZm9ybUNvbnRyb2xOYW1lPVwiZmlsZVwiIFtjb25maWddPVwiY29uZmlnXCI+PC9xZC1maWxlLXVwbG9hZD5cbiAqIDwvZm9ybT5cbiAqIGBgYFxuICpcbiAqICMjIyBVc2FnZSB3aXRoIE1vZGVsIEJpbmRpbmdcbiAqXG4gKiBgYGB0c1xuICogdmFsdWU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAqIGBgYFxuICogYGBgaHRtbFxuICogPHFkLWZpbGUtdXBsb2FkIFsodmFsdWUpXT1cInZhbHVlXCIgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLWZpbGUtdXBsb2FkPlxuICogYGBgXG4gKlxuICogIyMjIFVwbG9hZCBNYW5hZ2VyIEludGVncmF0aW9uXG4gKlxuICogVG8gY29ubmVjdCB0aGUgY29tcG9uZW50IHRvIHlvdXIgYmFja2VuZCwgaW1wbGVtZW50IHRoZSBgUWRGaWxlVXBsb2FkTWFuYWdlcmAgaW50ZXJmYWNlLlxuICogUHJvdmlkZSB5b3VyIG93biB1cGxvYWQgbWFuYWdlciB1c2luZyBBbmd1bGFy4oCZcyBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYFFEX1VQTE9BRF9IVFRQX09QVElPTlNgIGlzIG1pc3NpbmcsIHRoZSBGaWxlVXBsb2FkIGNvbXBvbmVudCB3aWxsIGJyZWFrLlxuICpcbiAqIGBgYHRzXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBleHBvcnQgY2xhc3MgTXlGaWxlVXBsb2FkTWFuYWdlciBpbXBsZW1lbnRzIFFkRmlsZVVwbG9hZE1hbmFnZXIge1xuICogICB1cGxvYWQoZmlsZTogRmlsZSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PE15VXBsb2FkUmVzdWx0Pj4ge1xuICogICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gKiAgICAgLy8gQWRkIHRoZSBzZWxlY3RlZCBmaWxlIHRvIHRoZSBmb3JtIGRhdGFcbiAqICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAqXG4gKiAgICAgLy8gU2VuZCB0aGUgZm9ybSBkYXRhIHRvIHlvdXIgYmFja2VuZCB3aXRoIHByb2dyZXNzIHRyYWNraW5nIGVuYWJsZWRcbiAqICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoJy9teS11cGxvYWQtZW5kcG9pbnQnLCBmb3JtRGF0YSwgUURfVVBMT0FEX0hUVFBfT1BUSU9OUyk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZW4gcmVnaXN0ZXIgeW91ciB1cGxvYWQgbWFuYWdlciBpbiB0aGUgY29tcG9uZW50IHByb3ZpZGVyOlxuICpcbiAqIGBgYHRzXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgLi4uXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHtcbiAqICAgICAgIHByb3ZpZGU6IFFEX0ZJTEVfVVBMT0FEX01BTkFHRVJfVE9LRU4sXG4gKiAgICAgICB1c2VDbGFzczogTXlGaWxlVXBsb2FkTWFuYWdlclxuICogICAgIH1cbiAqICAgXVxuICogfSlcbiAqIGBgYFxuICpcbiAqIFRoZSB1cGxvYWQgY29tcG9uZW50IHJlbGllcyBvbiBgSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzc2AgYW5kIGBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlYFxuICogdG8gc2hvdyBwcm9ncmVzcyBhbmQgZGV0ZWN0IHdoZW4gdGhlIHVwbG9hZCBpcyBjb21wbGV0ZS5cbiAqXG4gKiBXaGVuIHRoZSBmdWxsIGZvcm0gaXMgc3VibWl0dGVkLCB0aGUgZmlsZSdzIG1ldGFkYXRhIChzdWNoIGFzIG5hbWUsIHR5cGUsIGFuZCBzaXplKSBpcyBpbmNsdWRlZC5cbiAqIFRoaXMgYWxsb3dzIHRoZSBiYWNrZW5kIHRvIHBlcmZvcm0gY2xlYW51cCB0YXNrcywgbGlrZSByZW1vdmluZyB0ZW1wb3JhcnkgdXBsb2FkcyB0aGF0IHdlcmUgbm90IHNhdmVkLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1maWxlLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBRZEZpbGVVcGxvYWRDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgUWRGb3Jtc0FjdGlvbkVtaXR0ZXJTZXJ2aWNlLFxuICAgIFFkRmlsZVVwbG9hZFNlcnZpY2VcbiAgXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MucWQtZm9ybS1kaXNhYmxlZF0nOiAnaXNEaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5xZC1mb3JtLXJlYWRvbmx5XSc6ICdpc1JlYWRvbmx5JyxcbiAgICAnW2NsYXNzLnFkLWZvcm0tdmlld29ubHldJzogJ2lzVmlld29ubHknLFxuICAgICdbY2xhc3MucWQtZm9ybS1lcnJvcl0nOiAnaGFzVmFsaWRhdGlvbkVycm9yIHx8IGhhc0Vycm9yJyxcbiAgICAnW2NsYXNzLnFkLWZvcm0tdXBsb2FkaW5nXSc6ICdpc1VwbG9hZGluZycsXG4gICAgJ1tjbGFzcy5xZC1mb3JtLXVwbG9hZGVkXSc6ICdpc1VwbG9hZGVkJyxcbiAgICAnW2F0dHIuZGF0YS10ZXN0LWlkXSc6ICd0ZXN0SWQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgUWRGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgbmFtZSBjYW4gYmUgYXNzaWduZWQgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgUmVhY3RpdmUgRm9ybXMuXG4gICAqL1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIGZvcm0gaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFFkRm9ybUZpbGVVcGxvYWRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBmb3JtIGl0ZW0gdmFsdWUsIGlmIHlvdSBhcmUgd29ya2luZyB3aXRoIE1vZGVsIEJpbmRpbmcuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgdmFsdWUoZmlsZTogRmlsZSB8IG51bGwpIHtcbiAgICB0aGlzLl92YWx1ZSA9IGZpbGU7XG4gICAgdGhpcy5maWxlID0gZmlsZTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBGaWxlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3RhdGljIHRlc3QgSUQgZm9yIGludGVncmF0aW9uIHRlc3RzIGNhbiBiZSBzZXQuIDxiciAvPlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSBIVE1MIGF0dHJpYnV0ZSBbZGF0YS10ZXN0LWlkXS5cbiAgICovXG4gIEBJbnB1dCgnZGF0YS10ZXN0LWlkJylcbiAgdGVzdElkID0gJ2ZpbGUtdXBsb2FkJztcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgZmlsZSB2YWx1ZSBoYXMgY2hhbmdlZC4gUmV0dXJuIHZhbHVlIG1hdGNoZXMgdGhlIGN1cnJlbnQgZmlsZS5cbiAgICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZSB8IG51bGw+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gYSBmaWxlIGhhcyBiZWVuIHNlbGVjdGVkLlxuICAgKi9cbiAgQE91dHB1dCgpIGZpbGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgc2VsZWN0ZWQgZmlsZSBoYXMgYmVlbiByZW1vdmVkLlxuICAgKi9cbiAgQE91dHB1dCgpIGZpbGVSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSBoaW50IGlzIGNsaWNrZWQvdGFwcGVkLiBgaGludEFjdGlvbmAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsaWNrSGludCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgcmVhZG9ubHkgdmFsdWUgaXMgY2xpY2tlZC90YXBwZWQuIGBjbGlja1JlYWRvbmx5IGAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsaWNrUmVhZG9ubHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHZpZXdvbmx5IHZhbHVlIGlzIGNsaWNrZWQvdGFwcGVkLiBgY2xpY2tWaWV3b25seSBgIG11c3QgYmUgc2V0IHRvIGB0cnVlYCBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjbGlja1ZpZXdvbmx5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAgdXBsb2FkUHJvZ3Jlc3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBRZEZvcm1Db250cm9sPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9pc0Rpc2FibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBGaWxlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3N0YXRlOiBRZFVwbG9hZFN0YXRlID0gUWRVcGxvYWRTdGF0ZS5JRExFO1xuICBwcml2YXRlIF91cGxvYWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2FjdGlvblN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6IChfOiBGaWxlIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBnZXQgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNEaXNhYmxlZCB8fCB0aGlzLmNvbmZpZz8uZGlzYWJsZWQgPT09IHRydWU7XG4gIH1cblxuICBzZXQgaXNEaXNhYmxlZChpc0Rpc2FibGVkKSB7XG4gICAgdGhpcy5faXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNSZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnJlYWRvbmx5ID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzVmlld29ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy52aWV3b25seSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1VwbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUgPT09IFFkVXBsb2FkU3RhdGUuVVBMT0FESU5HO1xuICB9XG5cbiAgZ2V0IGlzVXBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlID09PSBRZFVwbG9hZFN0YXRlLlVQTE9BREVEO1xuICB9XG5cbiAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gUWRVcGxvYWRTdGF0ZS5FUlJPUjtcbiAgfVxuXG4gIGdldCBoYXNWYWxpZGF0aW9uRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCAhPSBudWxsICYmIHRoaXMuY29udHJvbC5pbnZhbGlkICYmICh0aGlzLmNvbnRyb2wuZGlydHkgfHwgdGhpcy5jb250cm9sLnRvdWNoZWQpO1xuICB9XG5cbiAgZ2V0IHZhbGlkYXRpb25FcnJvcnMoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2w/LmVycm9ycyA/PyBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cGxvYWRTZXJ2aWNlOiBRZEZpbGVVcGxvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uRW1pdHRlclNlcnZpY2U6IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZVxuICApIHtcbiAgICB0aGlzLl9hY3Rpb25TdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLmhpbnRFdmVudEVtaXR0ZXIkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsaWNrSGludC5lbWl0KCkpKTtcbiAgICB0aGlzLl9hY3Rpb25TdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuYWN0aW9uRW1pdHRlclNlcnZpY2UucmVhZG9ubHlFdmVudEVtaXR0ZXIkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsaWNrUmVhZG9ubHkuZW1pdCgpKVxuICAgICk7XG4gICAgdGhpcy5fYWN0aW9uU3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLnZpZXdvbmx5RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja1ZpZXdvbmx5LmVtaXQoKSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udHJvbENvbnRhaW5lciAmJiB0aGlzLmZvcm1Db250cm9sTmFtZSlcbiAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sPy5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpID8/IG51bGw7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl91cGxvYWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fYWN0aW9uU3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShmaWxlOiBGaWxlIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gZmlsZTtcbiAgICB0aGlzLmZpbGUgPSBmaWxlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IEZpbGUgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG9uRmlsZVNlbGVjdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdIHx8IG51bGw7XG4gICAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlKTtcbiAgfVxuXG4gIHN0YXJ0VXBsb2FkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5maWxlIHx8IHRoaXMuaGFzVmFsaWRhdGlvbkVycm9yKSByZXR1cm47XG5cbiAgICB0aGlzLnJlc2V0U3RhdGUoUWRVcGxvYWRTdGF0ZS5VUExPQURJTkcpO1xuICAgIHRoaXMuX3VwbG9hZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvVXBsb2FkKHRoaXMuZmlsZSk7XG4gIH1cblxuICBjYW5jZWxVcGxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRQcm9ncmVzcyQubmV4dCgwKTtcbiAgICB0aGlzLmNsZWFyRmlsZSgpO1xuICB9XG5cbiAgcmVtb3ZlRmlsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0U3RhdGUoUWRVcGxvYWRTdGF0ZS5JRExFKTtcbiAgICB0aGlzLmNsZWFyRmlsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGaWxlSW5wdXQoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlKGZpbGUpO1xuICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgdGhpcy52YWx1ZSA9IGZpbGU7XG4gICAgdGhpcy5lbWl0RmlsZVN0YXRlQ2hhbmdlcyhmaWxlKTtcbiAgICB0aGlzLnN0YXJ0VXBsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWxlU3RhdGVDaGFuZ2VzKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZmlsZSk7XG4gICAgdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChmaWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9VcGxvYWQoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuX3VwbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMudXBsb2FkU2VydmljZS51cGxvYWQoZmlsZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICh7IHByb2dyZXNzIH0pID0+IHtcbiAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcyQubmV4dChwcm9ncmVzcyk7XG4gICAgICAgIGlmIChwcm9ncmVzcyA+PSAxMDApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0U3RhdGUoUWRVcGxvYWRTdGF0ZS5VUExPQURFRCk7XG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMucmVzZXRTdGF0ZShRZFVwbG9hZFN0YXRlLkVSUk9SKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFN0YXRlKHN0YXRlOiBRZFVwbG9hZFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcblxuICAgIGlmIChzdGF0ZSA9PT0gUWRVcGxvYWRTdGF0ZS5VUExPQURJTkcpIHtcbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3MkLm5leHQoMCk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gUWRVcGxvYWRTdGF0ZS5VUExPQURFRCkge1xuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcyQubmV4dCgxMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwbG9hZFByb2dyZXNzJC5uZXh0KDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJGaWxlKCk6IHZvaWQge1xuICAgIHRoaXMuX3VwbG9hZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZpbGUgPSBudWxsO1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX29uQ2hhbmdlKG51bGwpO1xuICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChudWxsKTtcbiAgICB0aGlzLmZpbGVSZW1vdmVkLmVtaXQoKTtcbiAgfVxufVxuIiwiPHFkLWZvcm0tbGFiZWxcbiAgW2xhYmVsXT1cImNvbmZpZz8ubGFiZWw/LmkxOG5cIlxuICBbcmVhZG9ubHldPVwiY29uZmlnLnJlYWRvbmx5XCJcbiAgW3ZpZXdvbmx5XT1cImNvbmZpZy52aWV3b25seVwiXG4gIFtjb250cm9sXT1cImNvbnRyb2xcIlxuICBbdG9vbHRpcF09XCJjb25maWc/LnRvb2x0aXBcIlxuICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4+PC9xZC1mb3JtLWxhYmVsPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUmVhZG9ubHkgJiYgIWlzVmlld29ubHlcIj5cbiAgPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBoaWRkZW4gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdCgkZXZlbnQpXCIgLz5cblxuICA8ZGl2IGNsYXNzPVwidXBsb2FkLWJveFwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtY29udGVudFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWxlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7eyAoY29uZmlnPy5wbGFjZWhvbGRlcj8uaTE4biB8IHRyYW5zbGF0ZSkgfHwgKFwiaTE4bi5xZC5mb3JtLnBsYWNlaG9sZGVyLnNlbGVjdEZpbGVcIiB8IHRyYW5zbGF0ZSkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXJvd1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS1uYW1lXCI+e3sgZmlsZS5uYW1lIH19IDwvc3Bhbj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1VwbG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiIFtzdHlsZS53aWR0aC4lXT1cInVwbG9hZFByb2dyZXNzJCB8IGFzeW5jXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZ3Jlc3MtbGFiZWxcIj57eyB1cGxvYWRQcm9ncmVzcyQgfCBhc3luYyB9fSU8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNFcnJvclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtZXJyb3JcIj5cbiAgICAgICAgICAgICAge3sgXCJpMThuLnFkLmZvcm0uZXJyb3IudXBsb2FkRmFpbGVkXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNVcGxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS1zaXplXCI+e3sgZmlsZS5zaXplIHwgcWRGaWxlU2l6ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImJ1dHRvbi1hY3Rpb25zXCI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImZpbGUgJiYgaXNVcGxvYWRpbmdcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbFVwbG9hZCgpXCI+XG4gICAgICA8cWQtaWNvbiBpY29uPVwidGltZXNDaXJjbGVTb2xpZFwiPjwvcWQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gKm5nSWY9XCIoZmlsZSAmJiBpc1VwbG9hZGVkKSB8fCAoZmlsZSAmJiBoYXNWYWxpZGF0aW9uRXJyb3IpXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVGaWxlKClcIj5cbiAgICAgIDxxZC1pY29uIGljb249XCJ0cmFzaFwiPjwvcWQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPHFkLWZvcm0taGludFxuICAgICpuZ0lmPVwiY29uZmlnPy5oaW50XCJcbiAgICBbaGludF09XCJjb25maWc/LmhpbnQuaTE4blwiXG4gICAgW2hhc0Vycm9yXT1cImhhc1ZhbGlkYXRpb25FcnJvclwiXG4gICAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgW2hpbnRBY3Rpb25dPVwiY29uZmlnLmhpbnRBY3Rpb25cIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgPjwvcWQtZm9ybS1oaW50PlxuPC9uZy1jb250YWluZXI+XG5cbjxxZC1mb3JtLXJlYWRvbmx5XG4gICpuZ0lmPVwiaXNSZWFkb25seVwiXG4gIFt2YWx1ZXNdPVwiW2ZpbGU/Lm5hbWVdXCJcbiAgW3JlYWRvbmx5QWN0aW9uXT1cImNvbmZpZy5yZWFkb25seUFjdGlvblwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tcmVhZG9ubHk+XG5cbjxxZC1mb3JtLXZpZXdvbmx5XG4gICpuZ0lmPVwiaXNWaWV3b25seVwiXG4gIFt2YWx1ZXNdPVwiW2ZpbGU/Lm5hbWVdXCJcbiAgW3ZpZXdvbmx5QWN0aW9uXT1cImNvbmZpZy52aWV3b25seUFjdGlvblwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tdmlld29ubHk+XG4iXX0=
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9mb3Jtcy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osSUFBSSxFQUNKLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXJELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RUc7QUF5QkgsTUFBTSxPQUFPLHFCQUFxQjtJQWtIbUI7SUFDaEM7SUFDQTtJQW5IbkI7O09BRUc7SUFDTSxlQUFlLENBQVU7SUFFbEM7O09BRUc7SUFDTSxNQUFNLENBQWlDO0lBRWhEOztPQUVHO0lBQ0gsSUFDSSxLQUFLLENBQUMsSUFBaUI7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFD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LFFBQVE7cUhBOUd0QixlQUFlO3NCQUF2QixLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFNRixLQUFLO3NCQURSLEtBQUs7Z0JBZU4sTUFBTTtzQkFETCxLQUFLO3VCQUFDLGNBQWM7Z0JBTVgsV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxZQUFZO3NCQUFyQixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUUsU0FBUztzQkFEakIsTUFBTTtnQkFPRSxhQUFhO3NCQURyQixNQUFNO2dCQU9FLGFBQWE7c0JBRHJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2tpcFNlbGZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xDb250YWluZXIsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBRZEZvcm1Db250cm9sIH0gZnJvbSAnLi4vcmVhY3RpdmUtZm9ybXMvY29udHJvbHMvZm9ybS1jb250cm9sJztcbmltcG9ydCB7IFFkRm9ybUZpbGVVcGxvYWRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbW9kZWwvZm9ybXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFFkVXBsb2FkU3RhdGUgfSBmcm9tICcuL21vZGVsL2ZpbGUtdXBsb2FkLm1vZGVsJztcbmltcG9ydCB7IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9hY3Rpb24tZW1pdHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFFkRmlsZVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ZpbGUtdXBsb2FkLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSAqKlFkRmlsZVVwbG9hZCoqIGNvbXBvbmVudCBoYW5kbGVzIGZpbGUgdXBsb2FkcyBhbmQgaW50ZWdyYXRlcyB3aXRoIGZvcm1zLlxuICpcbiAqICMjIyBGZWF0dXJlc1xuICogLSBVcGxvYWQgZmlsZXMgd2l0aCBjb25maWd1cmFibGUgc2l6ZSBhbmQgdHlwZSByZXN0cmljdGlvbnNcbiAqIC0gU2hvdyB1cGxvYWQgcHJvZ3Jlc3MgYW5kIGhhbmRsZSBlcnJvcnNcbiAqIC0gSW50ZWdyYXRlIGludG8gYSByZWFjdGl2ZSBmb3JtIG9yIGJpbmQgZGlyZWN0bHkgdG8gYSBtb2RlbFxuICpcbiAqICMjIyBVc2FnZSB3aXRoIFJlYWN0aXZlIEZvcm1zXG4gKlxuICogYGBgdHNcbiAqIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAqICAgZmlsZTogbmV3IEZvcm1Db250cm9sKG51bGwsIFtRZFZhbGlkYXRvcnMuZmlsZVNpemUoNSksIFFkVmFsaWRhdG9ycy5maWxlVHlwZShbJy5qcGVnJywgJy5wZGYnXV0pXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIGBgYGh0bWxcbiAqIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICogICA8cWQtZmlsZS11cGxvYWQgZm9ybUNvbnRyb2xOYW1lPVwiZmlsZVwiIFtjb25maWddPVwiY29uZmlnXCI+PC9xZC1maWxlLXVwbG9hZD5cbiAqIDwvZm9ybT5cbiAqIGBgYFxuICpcbiAqICMjIyBVc2FnZSB3aXRoIE1vZGVsIEJpbmRpbmdcbiAqXG4gKiBgYGB0c1xuICogdmFsdWU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAqIGBgYFxuICogYGBgaHRtbFxuICogPHFkLWZpbGUtdXBsb2FkIFsodmFsdWUpXT1cInZhbHVlXCIgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLWZpbGUtdXBsb2FkPlxuICogYGBgXG4gKlxuICogIyMjIFVwbG9hZCBNYW5hZ2VyIEludGVncmF0aW9uXG4gKlxuICogVG8gY29ubmVjdCB0aGUgY29tcG9uZW50IHRvIHlvdXIgYmFja2VuZCwgaW1wbGVtZW50IHRoZSBgUWRGaWxlVXBsb2FkTWFuYWdlcmAgaW50ZXJmYWNlLlxuICogUHJvdmlkZSB5b3VyIG93biB1cGxvYWQgbWFuYWdlciB1c2luZyBBbmd1bGFy4oCZcyBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYFFEX1VQTE9BRF9IVFRQX09QVElPTlNgIGlzIG1pc3NpbmcsIHRoZSBGaWxlVXBsb2FkIGNvbXBvbmVudCB3aWxsIGJyZWFrLlxuICpcbiAqIGBgYHRzXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBleHBvcnQgY2xhc3MgTXlGaWxlVXBsb2FkTWFuYWdlciBpbXBsZW1lbnRzIFFkRmlsZVVwbG9hZE1hbmFnZXIge1xuICogICB1cGxvYWQoZmlsZTogRmlsZSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PE15VXBsb2FkUmVzdWx0Pj4ge1xuICogICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gKiAgICAgLy8gQWRkIHRoZSBzZWxlY3RlZCBmaWxlIHRvIHRoZSBmb3JtIGRhdGFcbiAqICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAqXG4gKiAgICAgLy8gU2VuZCB0aGUgZm9ybSBkYXRhIHRvIHlvdXIgYmFja2VuZCB3aXRoIHByb2dyZXNzIHRyYWNraW5nIGVuYWJsZWRcbiAqICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoJy9teS11cGxvYWQtZW5kcG9pbnQnLCBmb3JtRGF0YSwgUURfVVBMT0FEX0hUVFBfT1BUSU9OUyk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZW4gcmVnaXN0ZXIgeW91ciB1cGxvYWQgbWFuYWdlciBpbiB0aGUgY29tcG9uZW50IHByb3ZpZGVyOlxuICpcbiAqIGBgYHRzXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgLi4uXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHtcbiAqICAgICAgIHByb3ZpZGU6IFFEX0ZJTEVfVVBMT0FEX01BTkFHRVJfVE9LRU4sXG4gKiAgICAgICB1c2VDbGFzczogTXlGaWxlVXBsb2FkTWFuYWdlclxuICogICAgIH1cbiAqICAgXVxuICogfSlcbiAqIGBgYFxuICpcbiAqIFRoZSB1cGxvYWQgY29tcG9uZW50IHJlbGllcyBvbiBgSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzc2AgYW5kIGBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlYFxuICogdG8gc2hvdyBwcm9ncmVzcyBhbmQgZGV0ZWN0IHdoZW4gdGhlIHVwbG9hZCBpcyBjb21wbGV0ZS5cbiAqXG4gKiBXaGVuIHRoZSBmdWxsIGZvcm0gaXMgc3VibWl0dGVkLCB0aGUgZmlsZSdzIG1ldGFkYXRhIChzdWNoIGFzIG5hbWUsIHR5cGUsIGFuZCBzaXplKSBpcyBpbmNsdWRlZC5cbiAqIFRoaXMgYWxsb3dzIHRoZSBiYWNrZW5kIHRvIHBlcmZvcm0gY2xlYW51cCB0YXNrcywgbGlrZSByZW1vdmluZyB0ZW1wb3JhcnkgdXBsb2FkcyB0aGF0IHdlcmUgbm90IHNhdmVkLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1maWxlLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBRZEZpbGVVcGxvYWRDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgUWRGb3Jtc0FjdGlvbkVtaXR0ZXJTZXJ2aWNlLFxuICAgIFFkRmlsZVVwbG9hZFNlcnZpY2VcbiAgXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MucWQtZm9ybS1kaXNhYmxlZF0nOiAnaXNEaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5xZC1mb3JtLXJlYWRvbmx5XSc6ICdpc1JlYWRvbmx5JyxcbiAgICAnW2NsYXNzLnFkLWZvcm0tdmlld29ubHldJzogJ2lzVmlld29ubHknLFxuICAgICdbY2xhc3MucWQtZm9ybS1lcnJvcl0nOiAnaGFzVmFsaWRhdGlvbkVycm9yIHx8IGhhc0Vycm9yJyxcbiAgICAnW2NsYXNzLnFkLWZvcm0tdXBsb2FkaW5nXSc6ICdpc1VwbG9hZGluZycsXG4gICAgJ1tjbGFzcy5xZC1mb3JtLXVwbG9hZGVkXSc6ICdpc1VwbG9hZGVkJyxcbiAgICAnW2F0dHIuZGF0YS10ZXN0LWlkXSc6ICd0ZXN0SWQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgUWRGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgbmFtZSBjYW4gYmUgYXNzaWduZWQgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgUmVhY3RpdmUgRm9ybXMuXG4gICAqL1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIGZvcm0gaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFFkRm9ybUZpbGVVcGxvYWRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBmb3JtIGl0ZW0gdmFsdWUsIGlmIHlvdSBhcmUgd29ya2luZyB3aXRoIE1vZGVsIEJpbmRpbmcuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgdmFsdWUoZmlsZTogRmlsZSB8IG51bGwpIHtcbiAgICB0aGlzLl92YWx1ZSA9IGZpbGU7XG4gICAgdGhpcy5maWxlID0gZmlsZTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBGaWxlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3RhdGljIHRlc3QgSUQgZm9yIGludGVncmF0aW9uIHRlc3RzIGNhbiBiZSBzZXQuIDxiciAvPlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSBIVE1MIGF0dHJpYnV0ZSBbZGF0YS10ZXN0LWlkXS5cbiAgICovXG4gIEBJbnB1dCgnZGF0YS10ZXN0LWlkJylcbiAgdGVzdElkID0gJ2ZpbGUtdXBsb2FkJztcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgZmlsZSB2YWx1ZSBoYXMgY2hhbmdlZC4gUmV0dXJuIHZhbHVlIG1hdGNoZXMgdGhlIGN1cnJlbnQgZmlsZS5cbiAgICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZSB8IG51bGw+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gYSBmaWxlIGhhcyBiZWVuIHNlbGVjdGVkLlxuICAgKi9cbiAgQE91dHB1dCgpIGZpbGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgc2VsZWN0ZWQgZmlsZSBoYXMgYmVlbiByZW1vdmVkLlxuICAgKi9cbiAgQE91dHB1dCgpIGZpbGVSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSBoaW50IGlzIGNsaWNrZWQvdGFwcGVkLiBgaGludEFjdGlvbmAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsaWNrSGludCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgcmVhZG9ubHkgdmFsdWUgaXMgY2xpY2tlZC90YXBwZWQuIGBjbGlja1JlYWRvbmx5IGAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsaWNrUmVhZG9ubHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHZpZXdvbmx5IHZhbHVlIGlzIGNsaWNrZWQvdGFwcGVkLiBgY2xpY2tWaWV3b25seSBgIG11c3QgYmUgc2V0IHRvIGB0cnVlYCBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjbGlja1ZpZXdvbmx5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAgdXBsb2FkUHJvZ3Jlc3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBRZEZvcm1Db250cm9sPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9pc0Rpc2FibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBGaWxlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3N0YXRlOiBRZFVwbG9hZFN0YXRlID0gUWRVcGxvYWRTdGF0ZS5JRExFO1xuICBwcml2YXRlIF91cGxvYWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2FjdGlvblN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6IChfOiBGaWxlIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBnZXQgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNEaXNhYmxlZCB8fCB0aGlzLmNvbmZpZz8uZGlzYWJsZWQgPT09IHRydWU7XG4gIH1cblxuICBzZXQgaXNEaXNhYmxlZChpc0Rpc2FibGVkKSB7XG4gICAgdGhpcy5faXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNSZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnJlYWRvbmx5ID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzVmlld29ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy52aWV3b25seSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1VwbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUgPT09IFFkVXBsb2FkU3RhdGUuVVBMT0FESU5HO1xuICB9XG5cbiAgZ2V0IGlzVXBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlID09PSBRZFVwbG9hZFN0YXRlLlVQTE9BREVEO1xuICB9XG5cbiAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gUWRVcGxvYWRTdGF0ZS5FUlJPUjtcbiAgfVxuXG4gIGdldCBoYXNWYWxpZGF0aW9uRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCAhPSBudWxsICYmIHRoaXMuY29udHJvbC5pbnZhbGlkICYmICh0aGlzLmNvbnRyb2wuZGlydHkgfHwgdGhpcy5jb250cm9sLnRvdWNoZWQpO1xuICB9XG5cbiAgZ2V0IHZhbGlkYXRpb25FcnJvcnMoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2w/LmVycm9ycyA/PyBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cGxvYWRTZXJ2aWNlOiBRZEZpbGVVcGxvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uRW1pdHRlclNlcnZpY2U6IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZVxuICApIHtcbiAgICB0aGlzLl9hY3Rpb25TdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLmhpbnRFdmVudEVtaXR0ZXIkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsaWNrSGludC5lbWl0KCkpKTtcbiAgICB0aGlzLl9hY3Rpb25TdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuYWN0aW9uRW1pdHRlclNlcnZpY2UucmVhZG9ubHlFdmVudEVtaXR0ZXIkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsaWNrUmVhZG9ubHkuZW1pdCgpKVxuICAgICk7XG4gICAgdGhpcy5fYWN0aW9uU3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLnZpZXdvbmx5RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja1ZpZXdvbmx5LmVtaXQoKSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udHJvbENvbnRhaW5lciAmJiB0aGlzLmZvcm1Db250cm9sTmFtZSlcbiAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sPy5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpID8/IG51bGw7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl91cGxvYWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fYWN0aW9uU3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShmaWxlOiBGaWxlIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gZmlsZTtcbiAgICB0aGlzLmZpbGUgPSBmaWxlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IEZpbGUgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG9uRmlsZVNlbGVjdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdIHx8IG51bGw7XG4gICAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlKTtcbiAgfVxuXG4gIHN0YXJ0VXBsb2FkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5maWxlIHx8IHRoaXMuaGFzVmFsaWRhdGlvbkVycm9yKSByZXR1cm47XG5cbiAgICB0aGlzLnJlc2V0U3RhdGUoUWRVcGxvYWRTdGF0ZS5VUExPQURJTkcpO1xuICAgIHRoaXMuX3VwbG9hZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvVXBsb2FkKHRoaXMuZmlsZSk7XG4gIH1cblxuICBjYW5jZWxVcGxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRQcm9ncmVzcyQubmV4dCgwKTtcbiAgICB0aGlzLmNsZWFyRmlsZSgpO1xuICB9XG5cbiAgcmVtb3ZlRmlsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0U3RhdGUoUWRVcGxvYWRTdGF0ZS5JRExFKTtcbiAgICB0aGlzLmNsZWFyRmlsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGaWxlSW5wdXQoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlKGZpbGUpO1xuICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgdGhpcy52YWx1ZSA9IGZpbGU7XG4gICAgdGhpcy5lbWl0RmlsZVN0YXRlQ2hhbmdlcyhmaWxlKTtcbiAgICB0aGlzLnN0YXJ0VXBsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWxlU3RhdGVDaGFuZ2VzKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZmlsZSk7XG4gICAgdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChmaWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9VcGxvYWQoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuX3VwbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMudXBsb2FkU2VydmljZS51cGxvYWQoZmlsZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICh7IHByb2dyZXNzIH0pID0+IHtcbiAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcyQubmV4dChwcm9ncmVzcyk7XG4gICAgICAgIGlmIChwcm9ncmVzcyA+PSAxMDApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0U3RhdGUoUWRVcGxvYWRTdGF0ZS5VUExPQURFRCk7XG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMucmVzZXRTdGF0ZShRZFVwbG9hZFN0YXRlLkVSUk9SKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFN0YXRlKHN0YXRlOiBRZFVwbG9hZFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcblxuICAgIGlmIChzdGF0ZSA9PT0gUWRVcGxvYWRTdGF0ZS5VUExPQURJTkcpIHtcbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3MkLm5leHQoMCk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gUWRVcGxvYWRTdGF0ZS5VUExPQURFRCkge1xuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcyQubmV4dCgxMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwbG9hZFByb2dyZXNzJC5uZXh0KDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJGaWxlKCk6IHZvaWQge1xuICAgIHRoaXMuX3VwbG9hZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZpbGUgPSBudWxsO1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX29uQ2hhbmdlKG51bGwpO1xuICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChudWxsKTtcbiAgICB0aGlzLmZpbGVSZW1vdmVkLmVtaXQoKTtcbiAgfVxufVxuIiwiPHFkLWZvcm0tbGFiZWxcbiAgW2xhYmVsXT1cImNvbmZpZz8ubGFiZWw/LmkxOG5cIlxuICBbcmVhZG9ubHldPVwiY29uZmlnLnJlYWRvbmx5XCJcbiAgW3ZpZXdvbmx5XT1cImNvbmZpZy52aWV3b25seVwiXG4gIFtjb250cm9sXT1cImNvbnRyb2xcIlxuICBbdG9vbHRpcF09XCJjb25maWc/LnRvb2x0aXBcIlxuICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4+PC9xZC1mb3JtLWxhYmVsPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUmVhZG9ubHkgJiYgIWlzVmlld29ubHlcIj5cbiAgPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBoaWRkZW4gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdCgkZXZlbnQpXCIgLz5cblxuICA8ZGl2IGNsYXNzPVwidXBsb2FkLWJveFwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtY29udGVudFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWxlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7eyAoY29uZmlnPy5wbGFjZWhvbGRlcj8uaTE4biB8IHRyYW5zbGF0ZSkgfHwgKFwiaTE4bi5xZC5mb3JtLnBsYWNlaG9sZGVyLnNlbGVjdEZpbGVcIiB8IHRyYW5zbGF0ZSkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXJvd1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS1uYW1lXCI+e3sgZmlsZS5uYW1lIH19IDwvc3Bhbj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1VwbG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiIFtzdHlsZS53aWR0aC4lXT1cInVwbG9hZFByb2dyZXNzJCB8IGFzeW5jXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZ3Jlc3MtbGFiZWxcIj57eyB1cGxvYWRQcm9ncmVzcyQgfCBhc3luYyB9fSU8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNFcnJvclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtZXJyb3JcIj5cbiAgICAgICAgICAgICAge3sgXCJpMThuLnFkLmZvcm0uZXJyb3IudXBsb2FkRmFpbGVkXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNVcGxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS1zaXplXCI+e3sgZmlsZS5zaXplIHwgcWRGaWxlU2l6ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImJ1dHRvbi1hY3Rpb25zXCI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImZpbGUgJiYgaXNVcGxvYWRpbmdcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbFVwbG9hZCgpXCI+XG4gICAgICA8cWQtaWNvbiBpY29uPVwidGltZXNDaXJjbGVTb2xpZFwiPjwvcWQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gKm5nSWY9XCIoZmlsZSAmJiBpc1VwbG9hZGVkKSB8fCAoZmlsZSAmJiBoYXNWYWxpZGF0aW9uRXJyb3IpXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVGaWxlKClcIj5cbiAgICAgIDxxZC1pY29uIGljb249XCJ0cmFzaFwiPjwvcWQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPHFkLWZvcm0taGludFxuICAgICpuZ0lmPVwiY29uZmlnPy5oaW50IHx8IGhhc1ZhbGlkYXRpb25FcnJvclwiXG4gICAgW2hpbnRdPVwiY29uZmlnPy5oaW50Py5pMThuXCJcbiAgICBbaGFzRXJyb3JdPVwiaGFzVmFsaWRhdGlvbkVycm9yXCJcbiAgICBbY29udHJvbF09XCJjb250cm9sXCJcbiAgICBbaGludEFjdGlvbl09XCJjb25maWcuaGludEFjdGlvblwiXG4gICAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuICA+PC9xZC1mb3JtLWhpbnQ+XG48L25nLWNvbnRhaW5lcj5cblxuPHFkLWZvcm0tcmVhZG9ubHlcbiAgKm5nSWY9XCJpc1JlYWRvbmx5XCJcbiAgW3ZhbHVlc109XCJbZmlsZT8ubmFtZV1cIlxuICBbcmVhZG9ubHlBY3Rpb25dPVwiY29uZmlnLnJlYWRvbmx5QWN0aW9uXCJcbiAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuPjwvcWQtZm9ybS1yZWFkb25seT5cblxuPHFkLWZvcm0tdmlld29ubHlcbiAgKm5nSWY9XCJpc1ZpZXdvbmx5XCJcbiAgW3ZhbHVlc109XCJbZmlsZT8ubmFtZV1cIlxuICBbdmlld29ubHlBY3Rpb25dPVwiY29uZmlnLnZpZXdvbmx5QWN0aW9uXCJcbiAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuPjwvcWQtZm9ybS12aWV3b25seT5cbiJdfQ==
@@ -519,7 +519,7 @@ export class QdInputComponent {
519
519
  provide: QD_FOCUSABLE_TOKEN,
520
520
  useExisting: QdInputComponent
521
521
  }
522
- ], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!readonly && !viewonly && !hasOptions\">\n <div class=\"qd-input-input\" (keydown.enter)=\"emitEnterClick()\">\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<div *ngIf=\"!readonly && !viewonly && hasOptions\">\n <div\n class=\"qd-input-input\"\n qdInputOptions\n [qdPopoverMinWidth]=\"200\"\n [config]=\"config\"\n [value]=\"_value.value\"\n (optionSelected)=\"handleOptionSelected($event)\"\n (enterClick)=\"emitEnterClick()\"\n >\n <!-- handle (enterClick) by options directive here because event has to be fired after selection -->\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</div>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"valueAsList\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"valueAsList\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n\n<ng-template #inputBox>\n <input\n #input\n [placeholder]=\"placeholder | translate\"\n [value]=\"hasOptions ? (_value.value.toString() | translate) : _value.value\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n [disabled]=\"disabled || readonly\"\n [type]=\"inputType\"\n [attr.inputmode]=\"inputMode\"\n [qdAutofocus]=\"hasAutofocus\"\n [attr.data-test-id]=\"testId + '-input'\"\n [step]=\"config?.step\"\n required\n />\n <div class=\"qd-input-suffix\">\n <qd-icon *ngIf=\"hasError && !hasOnlyUnitsError\" class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n <qd-icon *ngIf=\"clearable\" class=\"qd-input-clearable-icon\" icon=\"timesLarge\" (click)=\"clearInput()\"></qd-icon>\n <ng-content select=\"[qdIconButton]\"></ng-content>\n </div>\n <qd-input-units\n *ngIf=\"hasUnits\"\n [unit]=\"_value.unit\"\n [config]=\"config\"\n (unitChange)=\"handleUnitChange($event)\"\n (opened)=\"handleUnitsOpened()\"\n (closed)=\"handleUnitsClosed()\"\n ></qd-input-units>\n <div class=\"qd-input-suffix\" *ngIf=\"hasError && hasOnlyUnitsError\">\n <qd-icon class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:block;width:100%;flex-direction:column;margin-bottom:.75rem}:host .qd-input-input{display:flex;overflow:hidden;height:2.25rem;align-items:center;padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(180,180,180);border-radius:0;margin-bottom:.375rem;background-color:#fff}:host .qd-input-input:hover,:host .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(23,23,23);border-radius:0}:host .qd-input-input input{overflow:hidden;width:100%;flex-grow:1;border:none;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.875rem}:host .qd-input-input input:hover,:host .qd-input-input input:focus,:host .qd-input-input input:active{border:none;outline:none}:host .qd-input-input input::placeholder{color:#b4b4b4}:host .qd-input-input input:focus::placeholder{display:block;color:#b4b4b4}:host .qd-input-input .qd-input-suffix{display:flex;align-items:center;margin-left:.75rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon{padding-right:.5rem;color:#c70023}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon+.qd-input-clearable-icon{margin-left:-.25rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon{margin-right:.5625rem;color:#979797;cursor:pointer;font-size:1.25rem;line-height:2rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:hover,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:focus,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:active{color:#171717}:host .qd-input-input qd-input-units+.qd-input-suffix{margin:0 0 0 -.1875rem}:host .qd-input-character-counter{padding-left:.125rem;color:#757575;float:right;font-size:.75rem;font-weight:300;line-height:.75rem}:host:after{display:block;height:0;clear:both;content:\".\";visibility:hidden}:host.qd-input-focus .qd-input-input{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(0,102,153);border-radius:0;outline:none}:host.qd-input-readonly .qd-input-readonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-viewonly .qd-input-viewonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-disabled .qd-input-input{border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled .qd-input-input input{background-color:#f5f5f5;color:#979797}:host.qd-input-disabled .qd-input-input input::placeholder{opacity:0}:host.qd-input-disabled .qd-input-input:hover,:host.qd-input-disabled .qd-input-input:active{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled.qd-input-focus{border-color:#ff9b00}:host.qd-input--readonly-action .qd-input-readonly{color:#069;cursor:pointer}:host.qd-input--readonly-action .qd-input-readonly:hover,:host.qd-input--readonly-action .qd-input-readonly:active,:host.qd-input--readonly-action .qd-input-readonly:focus{text-decoration:underline}:host.qd-input--viewonly-action .qd-input-viewonly{color:#069;cursor:pointer}:host.qd-input--viewonly-action .qd-input-viewonly:hover,:host.qd-input--viewonly-action .qd-input-viewonly:active,:host.qd-input--viewonly-action .qd-input-viewonly:focus{text-decoration:underline}:host.qd-input-error .qd-input-input,:host.qd-input-error-from-outside .qd-input-input{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(199,0,35)}:host.qd-input-error .qd-input-input:hover,:host.qd-input-error .qd-input-input:active,:host.qd-input-error-from-outside .qd-input-input:hover,:host.qd-input-error-from-outside .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(199,0,35)}:host.qd-input-error.qd-input-focus,:host.qd-input-error-from-outside.qd-input-focus{border-color:#c70023}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.QdAutofocusDirective, selector: "[qdAutofocus]", inputs: ["qdAutofocus"] }, { kind: "component", type: i7.QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: i8.QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: i9.QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: i10.QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: i11.QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "component", type: i12.QdInputUnitsComponent, selector: "qd-input-units", inputs: ["config", "unit"], outputs: ["unitChange", "opened", "closed"] }, { kind: "directive", type: i13.QdInputOptionsDirective, selector: "[qdInputOptions]", inputs: ["value", "config"], outputs: ["enterClick", "optionSelected"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
522
+ ], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!readonly && !viewonly && !hasOptions\">\n <div class=\"qd-input-input\" (keydown.enter)=\"emitEnterClick()\">\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n *ngIf=\"hint || hasError\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<div *ngIf=\"!readonly && !viewonly && hasOptions\">\n <div\n class=\"qd-input-input\"\n qdInputOptions\n [qdPopoverMinWidth]=\"200\"\n [config]=\"config\"\n [value]=\"_value.value\"\n (optionSelected)=\"handleOptionSelected($event)\"\n (enterClick)=\"emitEnterClick()\"\n >\n <!-- handle (enterClick) by options directive here because event has to be fired after selection -->\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n *ngIf=\"hint || hasError\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</div>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"valueAsList\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"valueAsList\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n\n<ng-template #inputBox>\n <input\n #input\n [placeholder]=\"placeholder | translate\"\n [value]=\"hasOptions ? (_value.value.toString() | translate) : _value.value\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n [disabled]=\"disabled || readonly\"\n [type]=\"inputType\"\n [attr.inputmode]=\"inputMode\"\n [qdAutofocus]=\"hasAutofocus\"\n [attr.data-test-id]=\"testId + '-input'\"\n [step]=\"config?.step\"\n required\n />\n <div class=\"qd-input-suffix\">\n <qd-icon *ngIf=\"hasError && !hasOnlyUnitsError\" class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n <qd-icon *ngIf=\"clearable\" class=\"qd-input-clearable-icon\" icon=\"timesLarge\" (click)=\"clearInput()\"></qd-icon>\n <ng-content select=\"[qdIconButton]\"></ng-content>\n </div>\n <qd-input-units\n *ngIf=\"hasUnits\"\n [unit]=\"_value.unit\"\n [config]=\"config\"\n (unitChange)=\"handleUnitChange($event)\"\n (opened)=\"handleUnitsOpened()\"\n (closed)=\"handleUnitsClosed()\"\n ></qd-input-units>\n <div class=\"qd-input-suffix\" *ngIf=\"hasError && hasOnlyUnitsError\">\n <qd-icon class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:block;width:100%;flex-direction:column;margin-bottom:.75rem}:host .qd-input-input{display:flex;overflow:hidden;height:2.25rem;align-items:center;padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(180,180,180);border-radius:0;margin-bottom:.375rem;background-color:#fff}:host .qd-input-input:hover,:host .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(23,23,23);border-radius:0}:host .qd-input-input input{overflow:hidden;width:100%;flex-grow:1;border:none;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.875rem}:host .qd-input-input input:hover,:host .qd-input-input input:focus,:host .qd-input-input input:active{border:none;outline:none}:host .qd-input-input input::placeholder{color:#b4b4b4}:host .qd-input-input input:focus::placeholder{display:block;color:#b4b4b4}:host .qd-input-input .qd-input-suffix{display:flex;align-items:center;margin-left:.75rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon{padding-right:.5rem;color:#c70023}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon+.qd-input-clearable-icon{margin-left:-.25rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon{margin-right:.5625rem;color:#979797;cursor:pointer;font-size:1.25rem;line-height:2rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:hover,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:focus,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:active{color:#171717}:host .qd-input-input qd-input-units+.qd-input-suffix{margin:0 0 0 -.1875rem}:host .qd-input-character-counter{padding-left:.125rem;color:#757575;float:right;font-size:.75rem;font-weight:300;line-height:.75rem}:host:after{display:block;height:0;clear:both;content:\".\";visibility:hidden}:host.qd-input-focus .qd-input-input{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(0,102,153);border-radius:0;outline:none}:host.qd-input-readonly .qd-input-readonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-viewonly .qd-input-viewonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-disabled .qd-input-input{border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled .qd-input-input input{background-color:#f5f5f5;color:#979797}:host.qd-input-disabled .qd-input-input input::placeholder{opacity:0}:host.qd-input-disabled .qd-input-input:hover,:host.qd-input-disabled .qd-input-input:active{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled.qd-input-focus{border-color:#ff9b00}:host.qd-input--readonly-action .qd-input-readonly{color:#069;cursor:pointer}:host.qd-input--readonly-action .qd-input-readonly:hover,:host.qd-input--readonly-action .qd-input-readonly:active,:host.qd-input--readonly-action .qd-input-readonly:focus{text-decoration:underline}:host.qd-input--viewonly-action .qd-input-viewonly{color:#069;cursor:pointer}:host.qd-input--viewonly-action .qd-input-viewonly:hover,:host.qd-input--viewonly-action .qd-input-viewonly:active,:host.qd-input--viewonly-action .qd-input-viewonly:focus{text-decoration:underline}:host.qd-input-error .qd-input-input,:host.qd-input-error-from-outside .qd-input-input{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(199,0,35)}:host.qd-input-error .qd-input-input:hover,:host.qd-input-error .qd-input-input:active,:host.qd-input-error-from-outside .qd-input-input:hover,:host.qd-input-error-from-outside .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(199,0,35)}:host.qd-input-error.qd-input-focus,:host.qd-input-error-from-outside.qd-input-focus{border-color:#c70023}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.QdAutofocusDirective, selector: "[qdAutofocus]", inputs: ["qdAutofocus"] }, { kind: "component", type: i7.QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: i8.QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: i9.QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: i10.QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: i11.QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "component", type: i12.QdInputUnitsComponent, selector: "qd-input-units", inputs: ["config", "unit"], outputs: ["unitChange", "opened", "closed"] }, { kind: "directive", type: i13.QdInputOptionsDirective, selector: "[qdInputOptions]", inputs: ["value", "config"], outputs: ["enterClick", "optionSelected"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
523
523
  }
524
524
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdInputComponent, decorators: [{
525
525
  type: Component,
@@ -537,7 +537,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
537
537
  provide: QD_FOCUSABLE_TOKEN,
538
538
  useExisting: QdInputComponent
539
539
  }
540
- ], template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!readonly && !viewonly && !hasOptions\">\n <div class=\"qd-input-input\" (keydown.enter)=\"emitEnterClick()\">\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<div *ngIf=\"!readonly && !viewonly && hasOptions\">\n <div\n class=\"qd-input-input\"\n qdInputOptions\n [qdPopoverMinWidth]=\"200\"\n [config]=\"config\"\n [value]=\"_value.value\"\n (optionSelected)=\"handleOptionSelected($event)\"\n (enterClick)=\"emitEnterClick()\"\n >\n <!-- handle (enterClick) by options directive here because event has to be fired after selection -->\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</div>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"valueAsList\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"valueAsList\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n\n<ng-template #inputBox>\n <input\n #input\n [placeholder]=\"placeholder | translate\"\n [value]=\"hasOptions ? (_value.value.toString() | translate) : _value.value\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n [disabled]=\"disabled || readonly\"\n [type]=\"inputType\"\n [attr.inputmode]=\"inputMode\"\n [qdAutofocus]=\"hasAutofocus\"\n [attr.data-test-id]=\"testId + '-input'\"\n [step]=\"config?.step\"\n required\n />\n <div class=\"qd-input-suffix\">\n <qd-icon *ngIf=\"hasError && !hasOnlyUnitsError\" class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n <qd-icon *ngIf=\"clearable\" class=\"qd-input-clearable-icon\" icon=\"timesLarge\" (click)=\"clearInput()\"></qd-icon>\n <ng-content select=\"[qdIconButton]\"></ng-content>\n </div>\n <qd-input-units\n *ngIf=\"hasUnits\"\n [unit]=\"_value.unit\"\n [config]=\"config\"\n (unitChange)=\"handleUnitChange($event)\"\n (opened)=\"handleUnitsOpened()\"\n (closed)=\"handleUnitsClosed()\"\n ></qd-input-units>\n <div class=\"qd-input-suffix\" *ngIf=\"hasError && hasOnlyUnitsError\">\n <qd-icon class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:block;width:100%;flex-direction:column;margin-bottom:.75rem}:host .qd-input-input{display:flex;overflow:hidden;height:2.25rem;align-items:center;padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(180,180,180);border-radius:0;margin-bottom:.375rem;background-color:#fff}:host .qd-input-input:hover,:host .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(23,23,23);border-radius:0}:host .qd-input-input input{overflow:hidden;width:100%;flex-grow:1;border:none;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.875rem}:host .qd-input-input input:hover,:host .qd-input-input input:focus,:host .qd-input-input input:active{border:none;outline:none}:host .qd-input-input input::placeholder{color:#b4b4b4}:host .qd-input-input input:focus::placeholder{display:block;color:#b4b4b4}:host .qd-input-input .qd-input-suffix{display:flex;align-items:center;margin-left:.75rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon{padding-right:.5rem;color:#c70023}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon+.qd-input-clearable-icon{margin-left:-.25rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon{margin-right:.5625rem;color:#979797;cursor:pointer;font-size:1.25rem;line-height:2rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:hover,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:focus,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:active{color:#171717}:host .qd-input-input qd-input-units+.qd-input-suffix{margin:0 0 0 -.1875rem}:host .qd-input-character-counter{padding-left:.125rem;color:#757575;float:right;font-size:.75rem;font-weight:300;line-height:.75rem}:host:after{display:block;height:0;clear:both;content:\".\";visibility:hidden}:host.qd-input-focus .qd-input-input{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(0,102,153);border-radius:0;outline:none}:host.qd-input-readonly .qd-input-readonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-viewonly .qd-input-viewonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-disabled .qd-input-input{border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled .qd-input-input input{background-color:#f5f5f5;color:#979797}:host.qd-input-disabled .qd-input-input input::placeholder{opacity:0}:host.qd-input-disabled .qd-input-input:hover,:host.qd-input-disabled .qd-input-input:active{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled.qd-input-focus{border-color:#ff9b00}:host.qd-input--readonly-action .qd-input-readonly{color:#069;cursor:pointer}:host.qd-input--readonly-action .qd-input-readonly:hover,:host.qd-input--readonly-action .qd-input-readonly:active,:host.qd-input--readonly-action .qd-input-readonly:focus{text-decoration:underline}:host.qd-input--viewonly-action .qd-input-viewonly{color:#069;cursor:pointer}:host.qd-input--viewonly-action .qd-input-viewonly:hover,:host.qd-input--viewonly-action .qd-input-viewonly:active,:host.qd-input--viewonly-action .qd-input-viewonly:focus{text-decoration:underline}:host.qd-input-error .qd-input-input,:host.qd-input-error-from-outside .qd-input-input{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(199,0,35)}:host.qd-input-error .qd-input-input:hover,:host.qd-input-error .qd-input-input:active,:host.qd-input-error-from-outside .qd-input-input:hover,:host.qd-input-error-from-outside .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(199,0,35)}:host.qd-input-error.qd-input-focus,:host.qd-input-error-from-outside.qd-input-focus{border-color:#c70023}\n"] }]
540
+ ], template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!readonly && !viewonly && !hasOptions\">\n <div class=\"qd-input-input\" (keydown.enter)=\"emitEnterClick()\">\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n *ngIf=\"hint || hasError\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<div *ngIf=\"!readonly && !viewonly && hasOptions\">\n <div\n class=\"qd-input-input\"\n qdInputOptions\n [qdPopoverMinWidth]=\"200\"\n [config]=\"config\"\n [value]=\"_value.value\"\n (optionSelected)=\"handleOptionSelected($event)\"\n (enterClick)=\"emitEnterClick()\"\n >\n <!-- handle (enterClick) by options directive here because event has to be fired after selection -->\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n *ngIf=\"hint || hasError\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</div>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"valueAsList\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"valueAsList\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n\n<ng-template #inputBox>\n <input\n #input\n [placeholder]=\"placeholder | translate\"\n [value]=\"hasOptions ? (_value.value.toString() | translate) : _value.value\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n [disabled]=\"disabled || readonly\"\n [type]=\"inputType\"\n [attr.inputmode]=\"inputMode\"\n [qdAutofocus]=\"hasAutofocus\"\n [attr.data-test-id]=\"testId + '-input'\"\n [step]=\"config?.step\"\n required\n />\n <div class=\"qd-input-suffix\">\n <qd-icon *ngIf=\"hasError && !hasOnlyUnitsError\" class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n <qd-icon *ngIf=\"clearable\" class=\"qd-input-clearable-icon\" icon=\"timesLarge\" (click)=\"clearInput()\"></qd-icon>\n <ng-content select=\"[qdIconButton]\"></ng-content>\n </div>\n <qd-input-units\n *ngIf=\"hasUnits\"\n [unit]=\"_value.unit\"\n [config]=\"config\"\n (unitChange)=\"handleUnitChange($event)\"\n (opened)=\"handleUnitsOpened()\"\n (closed)=\"handleUnitsClosed()\"\n ></qd-input-units>\n <div class=\"qd-input-suffix\" *ngIf=\"hasError && hasOnlyUnitsError\">\n <qd-icon class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:block;width:100%;flex-direction:column;margin-bottom:.75rem}:host .qd-input-input{display:flex;overflow:hidden;height:2.25rem;align-items:center;padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(180,180,180);border-radius:0;margin-bottom:.375rem;background-color:#fff}:host .qd-input-input:hover,:host .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(23,23,23);border-radius:0}:host .qd-input-input input{overflow:hidden;width:100%;flex-grow:1;border:none;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.875rem}:host .qd-input-input input:hover,:host .qd-input-input input:focus,:host .qd-input-input input:active{border:none;outline:none}:host .qd-input-input input::placeholder{color:#b4b4b4}:host .qd-input-input input:focus::placeholder{display:block;color:#b4b4b4}:host .qd-input-input .qd-input-suffix{display:flex;align-items:center;margin-left:.75rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon{padding-right:.5rem;color:#c70023}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon+.qd-input-clearable-icon{margin-left:-.25rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon{margin-right:.5625rem;color:#979797;cursor:pointer;font-size:1.25rem;line-height:2rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:hover,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:focus,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:active{color:#171717}:host .qd-input-input qd-input-units+.qd-input-suffix{margin:0 0 0 -.1875rem}:host .qd-input-character-counter{padding-left:.125rem;color:#757575;float:right;font-size:.75rem;font-weight:300;line-height:.75rem}:host:after{display:block;height:0;clear:both;content:\".\";visibility:hidden}:host.qd-input-focus .qd-input-input{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(0,102,153);border-radius:0;outline:none}:host.qd-input-readonly .qd-input-readonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-viewonly .qd-input-viewonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-disabled .qd-input-input{border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled .qd-input-input input{background-color:#f5f5f5;color:#979797}:host.qd-input-disabled .qd-input-input input::placeholder{opacity:0}:host.qd-input-disabled .qd-input-input:hover,:host.qd-input-disabled .qd-input-input:active{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled.qd-input-focus{border-color:#ff9b00}:host.qd-input--readonly-action .qd-input-readonly{color:#069;cursor:pointer}:host.qd-input--readonly-action .qd-input-readonly:hover,:host.qd-input--readonly-action .qd-input-readonly:active,:host.qd-input--readonly-action .qd-input-readonly:focus{text-decoration:underline}:host.qd-input--viewonly-action .qd-input-viewonly{color:#069;cursor:pointer}:host.qd-input--viewonly-action .qd-input-viewonly:hover,:host.qd-input--viewonly-action .qd-input-viewonly:active,:host.qd-input--viewonly-action .qd-input-viewonly:focus{text-decoration:underline}:host.qd-input-error .qd-input-input,:host.qd-input-error-from-outside .qd-input-input{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(199,0,35)}:host.qd-input-error .qd-input-input:hover,:host.qd-input-error .qd-input-input:active,:host.qd-input-error-from-outside .qd-input-input:hover,:host.qd-input-error-from-outside .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(199,0,35)}:host.qd-input-error.qd-input-focus,:host.qd-input-error-from-outside.qd-input-focus{border-color:#c70023}\n"] }]
541
541
  }], ctorParameters: () => [{ type: i1.QdFormsActionEmitterService }, { type: i2.QdFormOptionsResolverRegistry }, { type: i3.ControlContainer, decorators: [{
542
542
  type: Optional
543
543
  }, {
@@ -609,4 +609,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
609
609
  type: ViewChild,
610
610
  args: ['input']
611
611
  }] } });
612
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL2lucHV0L2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9mb3Jtcy9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixXQUFXLEVBQ1gsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQVVuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsZUFBZSxFQUNmLE9BQU8sRUFDUCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFlBQVksRUFDWixRQUFRLEVBQ1IsY0FBYyxFQUNkLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFdBQVcsRUFDWCxpQkFBaUIsRUFD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dEI7NEJBQ0UsT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxrQkFBa0I7eUJBQzlCO3FCQUNGOzswQkE2S0UsUUFBUTs7MEJBQUksSUFBSTs7MEJBQUksUUFBUTs7MEJBQzVCLFFBQVE7eUNBdktYLGVBQWU7c0JBRGQsS0FBSztnQkFVTixLQUFLO3NCQURKLEtBQUs7Z0JBY04sTUFBTTtzQkFETCxLQUFLO2dCQVNOLE9BQU87c0JBRE4sS0FBSztnQkFRTixNQUFNO3NCQURMLEtBQUs7dUJBQUMsY0FBYztnQkFRWixXQUFXO3NCQURuQixNQUFNO2dCQVFFLFVBQVU7c0JBRGxCLE1BQU07Z0JBUUUsVUFBVTtzQkFEbEIsTUFBTTtnQkFPRSxTQUFTO3NCQURqQixNQUFNO2dCQU9FLGFBQWE7c0JBRHJCLE1BQU07Z0JBT0UsYUFBYTtzQkFEckIsTUFBTTtnQkFJUCxRQUFRO3NCQURQLFdBQVc7dUJBQUMseUJBQXlCO2dCQUl0QyxjQUFjO3NCQURiLFdBQVc7dUJBQUMsaUNBQWlDO2dCQUk5QyxRQUFRO3NCQURQLFdBQVc7dUJBQUMseUJBQXlCO2dCQUl0QyxjQUFjO3NCQURiLFdBQVc7dUJBQUMsaUNBQWlDO2dCQUs5QyxVQUFVO3NCQUZULFdBQVc7dUJBQUMsMkJBQTJCOztzQkFDdkMsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBS3pDLFFBQVE7c0JBRlAsV0FBVzt1QkFBQyx3QkFBd0I7O3NCQUNwQyxXQUFXO3VCQUFDLHlCQUF5QjtnQkFJdEMsY0FBYztzQkFEYixXQUFXO3VCQUFDLHNCQUFzQjtnQkFNL0IsUUFBUTtzQkFGWCxXQUFXO3VCQUFDLHFCQUFxQjs7c0JBQ2pDLFdBQVc7dUJBQUMsc0JBQXNCO2dCQU0vQixrQkFBa0I7c0JBRHJCLFdBQVc7dUJBQUMsbUNBQW1DO2dCQU1oRCxZQUFZO3NCQURYLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1zdHJpY3QtaWdub3JlXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdCxcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBTa2lwU2VsZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBRZEZvY3VzYWJsZSB9IGZyb20gJy4uLy4uL2NvcmUvZm9jdXNhYmxlL2ZvY3VzYWJsZSc7XG5pbXBvcnQgeyBRRF9GT0NVU0FCTEVfVE9LRU4gfSBmcm9tICcuLi8uLi9jb3JlL2ZvY3VzYWJsZS9mb2N1c2FibGUudG9rZW4nO1xuaW1wb3J0IHsgUWRFdmVudEJyb2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2V2ZW50LWJyb2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFZhbHVlV2l0aFVuaXQgfSBmcm9tICcuL2hlbHBlcnMvZ2V0LXZhbHVlLXdpdGgtdW5pdCc7XG5cbmltcG9ydCB7IFFkUG9wb3ZlclNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3BvcG92ZXIvcG9wb3Zlci1zaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBRZEZvcm1PcHRpb25zUmVzb2x2ZXIgfSBmcm9tICcuLi9tb2RlbC9mb3JtLW9wdGlvbnMtcmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgUWRGb3JtSW5wdXRDb25maWd1cmF0aW9uLFxuICBRZElucHV0TW9kZSxcbiAgUWRJbnB1dFR5cGUsXG4gIFFkSW5wdXRWYWx1ZSxcbiAgUWRJbnB1dFZhbHVlV2l0aFVuaXRcbn0gZnJvbSAnLi4vbW9kZWwvZm9ybXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFFkRm9ybUlucHV0T3B0aW9uIH0gZnJvbSAnLi4vbW9kZWwvb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUWRGb3JtQ29udHJvbCB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm1zL2NvbnRyb2xzL2Zvcm0tY29udHJvbCc7XG5pbXBvcnQge1xuICBnZXRDbGVhcmFibGUsXG4gIGdldERpc2FibGVkLFxuICBnZXRIYXNBdXRvZm9jdXMsXG4gIGdldEhpbnQsXG4gIGdldEhpbnRBY3Rpb24sXG4gIGdldElucHV0TW9kZSxcbiAgZ2V0SW5wdXRUeXBlLFxuICBnZXRMYWJlbCxcbiAgZ2V0UGxhY2Vob2xkZXIsXG4gIGdldFJlYWRvbmx5LFxuICBnZXRSZWFkb25seUFjdGlvbixcbiAgZ2V0VmFsdWUsXG4gIGdldFZpZXdvbmx5LFxuICBnZXRWaWV3b25seUFjdGlvblxufSBmcm9tICcuLi9zaGFyZWQvaGVscGVycy9mb3Jtcy5oZWxwZXJzJztcbmltcG9ydCB7IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9hY3Rpb24tZW1pdHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFFkRm9ybU9wdGlvbnNSZXNvbHZlclJlZ2lzdHJ5IH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL29wdGlvbnMtcmVzb2x2ZXIucmVnaXN0cnknO1xuXG4vKipcbiAqIFRoZSAqKlFkSW5wdXQqKiBjb21wb25lbnQgcHJvdmlkZXMgYSBGb3JtRWxlbWVudCBmb3IgZW50ZXJpbmcgdGV4dCBpbnRvIGEgVUkuPGJyIC8+XG4gKiBJdCBjYW4gYmUgdXNlZCB3aXRoIFF1YWRyZWwgUmVhY3RpdmUgRm9ybXMgb3Igd2l0aCBtb2RlbCBiaW5kaW5nLlxuICpcbiAqICMjIyAqKlVzYWdlIHdpdGggUmVhY3RpdmUgRm9ybXMqKlxuICpcbiAqIGBgYHRzXG4gKiBmb3JtID0gbmV3IFFkRm9ybUdyb3VwKHtcbiAqICAgaW5wdXQ6IG5ldyBRZEZvcm1Db250cm9sKClcbiAqIH0pO1xuICogYGBgXG4gKiBgYGBodG1sXG4gKiA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAqICAgPHFkLWlucHV0IFtmb3JtQ29udHJvbE5hbWVdPVwiaW5wdXRcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtaW5wdXQ+XG4gKiA8L2Zvcm0+XG4gKiBgYGBcbiAqXG4gKiAjIyMgKipVc2FnZSB3aXRoIE1vZGVsIEJpbmRpbmcqKlxuICogYGBgdHNcbiAqIHZhbHVlO1xuICogYGBgXG4gKiBgYGBodG1sXG4gKiA8cWQtaW5wdXQgWyh2YWx1ZSldPVwidmFsdWVcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtaW5wdXQ+XG4gKiBgYGBcbiAqXG4gKiAjIyAqKlN1Z2dlc3RlZCBPcHRpb25zKipcbiAqXG4gKiAjIyMgKipTdGF0aWMgb3B0aW9ucyBieSBjb25maWcqKlxuICpcbiAqIFN0YXRpYyBvcHRpb25zIGNhbiBiZSBkZWZpbmVkIGluIHRoZSBjb25maWcgYG9wdGlvbnNgIGZpZWxkOlxuICpcbiAqIGBgYHRzXG4gKiBjb25maWc6IFFkRm9ybUlucHV0Q29uZmlndXJhdGlvbiA9IHtcbiAqICAgLi4uXG4gKiAgIG9wdGlvbnM6IFtcbiAqICAgICB7IGkxOG46ICdpMThuLnFkLmV4YW1wbGVGb3JtRmllbGQuZ29vZHNEZWNsYXJhdGlvbi5pbXBvcnQnLCB2YWx1ZTogJ2ltcG9ydCcgfSxcbiAqICAgICB7IGkxOG46ICdpMThuLnFkLmV4YW1wbGVGb3JtRmllbGQuZ29vZHNEZWNsYXJhdGlvbi5leHBvcnQnLCB2YWx1ZTogJ2V4cG9ydCcgfSxcbiAqICAgICB7IGkxOG46ICdpMThuLnFkLmV4YW1wbGVGb3JtRmllbGQuZ29vZHNEZWNsYXJhdGlvbi50cmFuc2l0JywgdmFsdWU6ICd0cmFuc2l0JywgZGlzYWJsZWQ6IHRydWUgfVxuICogICBdXG4gKiB9XG4gKiBgYGBcbiAqIGBgYGh0bWxcbiAqIDxxZC1pbnB1dCBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtaW5wdXQ+XG4gKiBgYGBcbiAqXG4gKiA8U3RvcnkgaWQ9XCJjb21wb25lbnRzLWdyaWQtc3lzdGVtLWNvbnRhaW5lci0tY29sdW1ucy02XCIgLz5cbiAqXG4gKiAjIyMgKipEeW5hbWljIG9wdGlvbnMgYnkgcmVzb2x2ZXIqKlxuICpcbiAqIElmIHlvdSB3YW50IHRvIGRlZmluZSB0aGUgb3B0aW9ucyBkeW5hbWljYWxseSwgeW91IGNhbiBpbmplY3QgYSBgUWRGb3JtT3B0aW9uc1Jlc29sdmVyYFxuICogd2l0aCB0aGUgYFFEX0ZPUk1fT1BUSU9OU19SRVNPTFZFUmAgaW5qZWN0aW9uIHRva2VuLiBUaGUgcmVzb2x2ZXIganVzdCBoYXMgdG8gaW1wbGVtZW50IHRoZSBgcmVzb2x2ZXJgXG4gKiBtZXRob2QuXG4gKlxuICogYGBgdHNcbiAqIEBJbmplY3RhYmxlKClcbiAqIGV4cG9ydCBjbGFzcyBZb3VyRm9ybU9wdGlvbnNSZXNvbHZlciBpbXBsZW1lbnRzIFFkRm9ybU9wdGlvbnNSZXNvbHZlciB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSHR0cENsaWVudCkge31cbiAqXG4gKiAgIHJlc29sdmUodmFsdWU6IHN0cmluZyk6IE9ic2VydmFibGU8UWRGb3JtSW5wdXRbXT4ge1xuICogICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAqICAgICAgIC5nZXQoeW91ckJhY2tlbmRVcmwpXG4gKiAgICAgICAucGlwZShcbiAqICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gKiAgICAgICAgICAgY29uc29sZS5lcnJvcigneW91ciBlcnJvciBtZXNzYWdlJyk7XG4gKlxuICogICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAqICAgICAgICAgfSlcbiAqICAgICAgICk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICogVGhlIG9wdGlvbnMgcmVzb2x2ZXIgY2FuIGJlIGluamVjdGVkIGludG8gYSBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgYFFkSW5wdXRgIG9yIGFsc28gaW50byBhIHBhcmVudFxuICogY29tcG9uZW50LiBJZiB5b3UgbmVlZCBkeW5hbWljIG9wdGlvbnMgZm9yIHRoZSBzZWFyY2ggaW4gdGhlIHNlY3Rpb24gdG9vbGJhciwgeW91IGNhbiBpbmplY3RcbiAqIHRoZSByZXNvbHZlciBvbiBhIGhpZ2hlciBsZXZlbCwgZS5nLiBpbiB0aGUgY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIHNlY3Rpb24uXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICAuLi5cbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgLi4uXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfRk9STV9PUFRJT05TX1JFU09MVkVSLFxuICogICAgICAgdXNlQ2xhc3M6IFlvdXJGb3JtT3B0aW9uc1Jlc29sdmVyXG4gKiAgICAgfVxuICogICBdXG4gKiB9KVxuICogYGBgXG4gKlxuICogQnkgZGVmYXVsdCwgdGhlIHJlc29sdmVyIGlzIGFwcGxpZWQgdG8gZXZlcnkgaW5wdXQgdGhhdCBpcyBpbnNpZGUgdGhlIGNvbXBvbmVudCB0aGF0IGluamVjdHMgdGhlIHJlc29sdmVyLlxuICogVG8gZGlzYWJsZSB0aGUgcmVzb2x2ZXIgZm9yIGFuIGlucHV0LCB5b3UgaGF2ZSB0byBzZXQgdGhlIGBvcHRpb25zUmVzb2x2ZXJOYW1lYCBwcm9wZXJ0eSBpbiB0aGVcbiAqIGlucHV0IGNvbmZpZyB0byBgbnVsbGAuIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBkZWZpbmUgYSBgbmFtZWAgZm9yIHRoZSByZXNvbHZlciBieSBzZXR0aW5nIHRoZSBgbmFtZWAgcHJvcGVydHlcbiAqIGluIHRoZSByZXNvbHZlciBjbGFzcy4gVGh1cywgeW91IGNhbiBjb25uZWN0IHRoZSBpbnB1dCB0byBhIHNwZWNpZmljIHJlc29sdmVyLiBCZWxvdyB0aGVyZSBpcyBhbHNvIGFcbiAqIGRlc2NyaXB0aW9uIG9mIGhvdyB0byB1c2UgbXVsdGlwbGUgaW5wdXRzIHdpdGggZGlmZmVyZW50IHJlc29sdmVycyBpbiBvbmUgY29tcG9uZW50LlxuICogPGJyPjxicj5cbiAqXG4gKiAjIyMjICoqTXVsdGlwbGUgaW5wdXRzIHdpdGggc3VnZ2VzdGVkIG9wdGlvbnMqKlxuICpcbiAqIEZvciBtdWx0aXBsZSBpbnB1dHMgd2l0aCB2YXJpb3VzIHJlc29sdmVycyBpbiBvbmUgY29tcG9uZW50IHlvdSBjYW4gZGlzdGluZ3Vpc2ggdGhlIHJlc29sdmVycyBieSBzZXR0aW5nIHRoZVxuICogYG5hbWVgIGFzIGEgcHJvcGVydHkgaW4gdGhlIHJlc29sdmVyIGNsYXNzLlxuICpcbiAqIGBgYHRzXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBleHBvcnQgY2xhc3MgRnJ1aXRzRm9ybU9wdGlvbnNSZXNvbHZlciBpbXBsZW1lbnRzIFFkRm9ybU9wdGlvbnNSZXNvbHZlciB7XG4gKiAgIG5hbWUgPSAnZnJ1aXRzJztcbiAqICAgLy8gLi4uXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuICogQEluamVjdGFibGUoKVxuICogZXhwb3J0IGNsYXNzIENvdW50cmllc0Zvcm1PcHRpb25zUmVzb2x2ZXIgaW1wbGVtZW50cyBRZEZvcm1PcHRpb25zUmVzb2x2ZXIge1xuICogICBuYW1lID0gJ2NvdW50cmllcyc7XG4gKiAgIC8vIC4uLlxuICogfVxuICogYGBgXG4gKlxuICogVGhlbiB0aGUgaW5wdXQgY2FuIGJlIGFzc2lnbmVkIHRvIGEgcmVzb2x2ZXIgYnkgc2V0dGluZyB0aGUgYG9wdGlvbnNSZXNvbHZlck5hbWVgIHByb3BlcnR5XG4gKiBpbiB0aGUgaW5wdXQgY29uZmlnLlxuICpcbiAqIGBgYHRzXG4gKiBjb25maWc6IFFkRm9ybUlucHV0Q29uZmlndXJhdGlvbiA9IHtcbiAqICAgLi4uXG4gKiAgIG9wdGlvbnNSZXNvbHZlck5hbWU6ICdmcnVpdHMnXG4gKiB9XG4gKlxuICogY29uZmlnMjogUWRGb3JtSW5wdXRDb25maWd1cmF0aW9uID0ge1xuICogICAuLi5cbiAqICAgb3B0aW9uc1Jlc29sdmVyTmFtZTogJ2NvdW50cmllcydcbiAqIH1cbiAqIGBgYFxuICogYGBgaHRtbFxuICogPHFkLWlucHV0IFtjb25maWddPVwiY29uZmlnXCI+PC9xZC1pbnB1dD5cbiAqIDxxZC1pbnB1dCBbY29uZmlnXT1cImNvbmZpZzJcIj48L3FkLWlucHV0PlxuICogYGBgXG4gKiBUbyBpbmplY3QgbXVsdGlwbGUgcmVzb2x2ZXJzIGluIGEgY29tcG9uZW50IHlvdSBjYW4gdXNlIHRoZSBwcm92aWRlciBzZXR0aW5nIGBtdWx0aTogdHJ1ZWAuXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICAuLi5cbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgLi4uXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfRk9STV9PUFRJT05TX1JFU09MVkVSLFxuICogICAgICAgdXNlQ2xhc3M6IEZydWl0c0Zvcm1PcHRpb25zUmVzb2x2ZXIsXG4gKiAgICAgICBtdWx0aTogdHJ1ZVxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfRk9STV9PUFRJT05TX1JFU09MVkVSLFxuICogICAgICAgdXNlQ2xhc3M6IENvdW50cmllc0Zvcm1PcHRpb25zUmVzb2x2ZXIsXG4gKiAgICAgICBtdWx0aTogdHJ1ZVxuICogICAgIH1cbiAqICAgXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyMgKipDdXN0b20gbG9hZGluZyBhbmQgZXJyb3IgaGludHMqKlxuICpcbiAqIEluIHRoZSByZXNvbHZlciB5b3UgYWxzbyBjYW4gZGVmaW5lIGN1c3RvbSBsb2FkaW5nIGFuZCBlcnJvciBoaW50cyB3aXRoIHRoZSBwcm9wZXJ0aWVzIGByZXF1ZXN0TG9hZGluZ0hpbnRgXG4gKiBhbmQgYHJlcXVlc3RFcnJvckhpbnRgLlxuICpcbiAqIGBgYHRzXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBleHBvcnQgY2xhc3MgWW91ckZvcm1PcHRpb25zUmVzb2x2ZXIgaW1wbGVtZW50cyBRZEZvcm1PcHRpb25zUmVzb2x2ZXIge1xuICogICByZXF1ZXN0TG9hZGluZ0hpbnQgPSB7IGkxOG46ICdpMThuLmN1c3RvbS5vcHRpb25zLmxvYWRpbmcnIH07XG4gKiAgIHJlcXVlc3RFcnJvckhpbnQgPSB7IGkxOG46ICdpMThuLmN1c3RvbS5vcHRpb25zLmVycm9yJyB9O1xuICpcbiAqICAgLy8gLi4uXG4gKlxuICogICByZXNvbHZlKHZhbHVlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFFkRm9ybUlucHV0W10+IHtcbiAqICAgICAvLyAuLi5cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiBZb3UgYWxzbyBjYW4gdXBkYXRlIHRoZSBlcnJvciBoaW50IGRpcmVjdGx5IGluIHRoZSByZXNvbHZlIG1ldGhvZCB0byBkaXNwbGF5IGEgbW9yZSBzcGVjaWZpYyBlcnJvclxuICogbWVzc2FnZSB3aGVuIGFuIGVycm9yIG9jY3Vycy5cbiAqXG4gKiBgYGB0c1xuICogQEluamVjdGFibGUoKVxuICogZXhwb3J0IGNsYXNzIFlvdXJGb3JtT3B0aW9uc1Jlc29sdmVyIGltcGxlbWVudHMgUWRGb3JtT3B0aW9uc1Jlc29sdmVyIHtcbiAqICAgLy8gLi4uXG4gKlxuICogICBjb25zdHJ1Y3RvcihcbiAqICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEJBQ0tFTkRfRVJST1JfQ09ERVMpIHByaXZhdGUgcmVhZG9ubHkgYmFja2VuZEVycm9yQ29kZXNcbiAqICAgKSB7XG4gKiAgICAgdGhpcy5iYWNrZW5kRXJyb3JDb2RlcyA9IHRoaXMuYmFja2VuZEVycm9yQ29kZXMgfHwge307XG4gKiAgIH1cbiAqXG4gKiAgIC8vIC4uLlxuICpcbiAqICAgcmVzb2x2ZSh2YWx1ZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxRZEZvcm1JbnB1dFtdPiB7XG4gKiAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICogICAgICAgLmdldCh5b3VyQmFja2VuZFVybClcbiAqICAgICAgIC5waXBlKFxuICogICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAqICAgICAgICAgICBpZiAoZXJyb3IuZXJyb3I/LmVycm9yQ29kZSAmJiBlcnJvci5lcnJvci5lcnJvckNvZGUgaW4gdGhpcy5iYWNrZW5kRXJyb3JDb2RlcylcbiAqICAgICAgICAgICAgIHRoaXMucmVxdWVzdEVycm9ySGludCA9IHsgaTE4bjogJ0VSUk9SLicgKyBlcnJvci5lcnJvci5lcnJvckNvZGUgfTtcbiAqICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gKiAgICAgICAgIH0pXG4gKiAgICAgICApO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncWQtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBRZElucHV0Q29tcG9uZW50LFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSxcbiAgICBRZEZvcm1PcHRpb25zUmVzb2x2ZXJSZWdpc3RyeSxcbiAgICAvLyBUT0RPOiBSZW1vdmUgd2hlbiByZW1vdmluZyBkZXJpdmVkIGRpcmVjdGl2ZVxuICAgIFFkUG9wb3ZlclNpemluZ1NlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogUURfRk9DVVNBQkxFX1RPS0VOLFxuICAgICAgdXNlRXhpc3Rpbmc6IFFkSW5wdXRDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUWRJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBRZEZvY3VzYWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIG5hbWUgY2FuIGJlIGFzc2lnbmVkIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIFJlYWN0aXZlIEZvcm1zLlxuICAgKi9cbiAgQElucHV0KClcbiAgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGZvcm0gaXRlbSB2YWx1ZSwgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggTW9kZWwgQmluZGluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogPHFkLWlucHV0IFsodmFsdWUpXT1cInZhbHVlXCIgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLWlucHV0PlxuICAgKi9cbiAgQElucHV0KClcbiAgdmFsdWU7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIGZvcm0gaXRlbVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgbGFiZWw6IHsgaTE4bjogJ2xhYmVsJyB9LFxuICAgKiAgIHBsYWNlaG9sZGVyOiB7IGkxOG46ICdwbGFjZWhvbGRlcicgfSxcbiAgICogICBoaW50OiB7IGkxOG46ICdoaW50JyB9XG4gICAqIH07XG4gICAqL1xuICBASW5wdXQoKVxuICBjb25maWc6IFFkRm9ybUlucHV0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU2V0IGNvbXBvbmVudCB0byBcImVycm9yXCIgZXh0ZXJuYWxseS4gTm8gcmVhY3RpdmUgZm9ybXMgcmVxdWlyZWQuIFVzZWQgZm9yIGNvbXBvbmVudHMgd2l0aGluIHRoZSBRdWFkcmVsIFVJIGZyYW1ld29yay4gVGhpcyBpcyBkb25lIGJ5IGEgQ1NTIGNsYXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgaXNFcnJvciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIHN0YXRpYyB0ZXN0IElEIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW4gYmUgc2V0LiA8YnIgLz5cbiAgICogVGhlIHZhbHVlIGZvciB0aGUgSFRNTCBhdHRyaWJ1dGUgW2RhdGEtdGVzdC1pZF0uXG4gICAqL1xuICBASW5wdXQoJ2RhdGEtdGVzdC1pZCcpXG4gIHRlc3RJZCA9ICd0ZXh0LWlucHV0JztcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQuXG4gICAqIE9wdGlvbmFsbHkgZW1pdHMgdGhlIGN1cnJlbnQgaW5wdXQgdmFsdWUsIGluY2x1ZGluZyB1bml0IChpZiBjb25maWd1cmVkKS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UWRJbnB1dFZhbHVlIHwgUWRJbnB1dFZhbHVlV2l0aFVuaXQgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLiBOb3RlOiBFbWl0cyBvbiBrZXl1cCAobm8gbG9uZ2VyIG9uIGNsaWNrLCBhcyBiZWZvcmUpIVxuICAgKiBPcHRpb25hbGx5IGVtaXRzIHRoZSBjdXJyZW50IGlucHV0IHZhbHVlLCBpbmNsdWRpbmcgdW5pdCAoaWYgY29uZmlndXJlZCkuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgZW50ZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8UWRJbnB1dFZhbHVlIHwgUWRJbnB1dFZhbHVlV2l0aFVuaXQgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIGlucHV0IGZpZWxkIHdhcyBsYXBwZWQgb24gY2xpY2svdGFwIG9uIHRoZSB4IGljb24uIDxiciAvPlxuICAgKiBgUWRGb3JtSW5wdXRDb25maWd1cmF0aW9uWydjbGVhcmFibGUnXWAgbXVzdCBiZSBzZXQgdG8gdHJ1ZSBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjbGlja0NsZWFyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSBoaW50IGlzIGNsaWNrZWQvdGFwcGVkLiBgaGludEFjdGlvbmAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsaWNrSGludCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgcmVhZG9ubHkgdmFsdWUgaXMgY2xpY2tlZC90YXBwZWQuIGBjbGlja1JlYWRvbmx5IGAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsaWNrUmVhZG9ubHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHZpZXdvbmx5IHZhbHVlIGlzIGNsaWNrZWQvdGFwcGVkLiBgY2xpY2tWaWV3b25seSBgIG11c3QgYmUgc2V0IHRvIGB0cnVlYCBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjbGlja1ZpZXdvbmx5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtcmVhZG9ubHknKVxuICByZWFkb25seTogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LS1yZWFkb25seS1hY3Rpb24nKVxuICByZWFkb25seUFjdGlvbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtdmlld29ubHknKVxuICB2aWV3b25seTogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LS12aWV3b25seS1hY3Rpb24nKVxuICB2aWV3b25seUFjdGlvbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1oaW50LWFjdGlvbicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtaGludC1hY3Rpb24nKVxuICBoaW50QWN0aW9uID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1mb3JtLWRpc2FibGVkJylcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1pbnB1dC1kaXNhYmxlZCcpXG4gIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtZm9jdXMnKVxuICBpc0lucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICBhcmVVbml0c09wZW5lZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1lcnJvcicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtZXJyb3InKVxuICBnZXQgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC50b3VjaGVkICYmIHRoaXMuY29udHJvbC5pbnZhbGlkIDogZmFsc2U7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LWVycm9yLWZyb20tb3V0c2lkZScpXG4gIGdldCBpc0Vycm9yRnJvbU91dHNpZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFcnJvcjtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JylcbiAgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIGlucHV0VHlwZTogUWRJbnB1dFR5cGU7XG4gIGlucHV0TW9kZTogUWRJbnB1dE1vZGU7XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGhpbnQ6IHN0cmluZztcbiAgY2xlYXJhYmxlOiBib29sZWFuO1xuICBoYXNBdXRvZm9jdXM6IGJvb2xlYW47XG4gIGhhc09wdGlvbnMgPSBmYWxzZTtcbiAgX3ZhbHVlOiBRZElucHV0VmFsdWVXaXRoVW5pdCA9IHsgdmFsdWU6ICcnIH07XG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IFFkRm9ybUNvbnRyb2w8YW55PjtcblxuICBwcml2YXRlIF9vcHRpb25zUmVzb2x2ZXIhOiBRZEZvcm1PcHRpb25zUmVzb2x2ZXIgfCBudWxsO1xuICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfb25Ub3VjaDogYW55ID0gKCkgPT4ge307XG5cbiAgZ2V0IGhhc09ubHlVbml0c0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0VxdWFsKE9iamVjdC5rZXlzKHRoaXMuY29udHJvbC5lcnJvcnMpLCBbJ3JlcXVpcmVkJ10pICYmIHRoaXMuX3ZhbHVlLnZhbHVlICE9PSAnJztcbiAgfVxuXG4gIGdldCBoYXNVbml0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnVuaXRzPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IG51bWJlck9mQ2hhcmFjdGVycygpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5fdmFsdWUudmFsdWUpIHJldHVybiAwO1xuXG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLl92YWx1ZS52YWx1ZSkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGhhc01heExlbmd0aCgpOiBib29sZWFuIHtcbiAgICBpZiAoISh0aGlzLmNvbnRyb2wgaW5zdGFuY2VvZiBRZEZvcm1Db250cm9sKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbC5oYXNNYXhMZW5ndGgoKTtcbiAgfVxuXG4gIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICBpZiAoISh0aGlzLmNvbnRyb2wgaW5zdGFuY2VvZiBRZEZvcm1Db250cm9sKSkgcmV0dXJuO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbC5nZXRNYXhMZW5ndGhPclVuZGVmaW5lZCgpO1xuICB9XG5cbiAgZ2V0IHZhbHVlQXNMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW2Ake3RoaXMuX3ZhbHVlLnZhbHVlfSR7dGhpcy5fdmFsdWUudW5pdCA/ICcgJyArIHRoaXMuX3ZhbHVlLnVuaXQgOiAnJ31gXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uRW1pdHRlclNlcnZpY2U6IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVyUmVnaXN0cnk6IFFkRm9ybU9wdGlvbnNSZXNvbHZlclJlZ2lzdHJ5LFxuICAgIEBPcHRpb25hbCgpIEBIb3N0KCkgQFNraXBTZWxmKCkgcHJpdmF0ZSByZWFkb25seSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRCcm9rZXJTZXJ2aWNlOiBRZEV2ZW50QnJva2VyU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplT3B0aW9uc1Jlc29sdmVyKCk7XG4gICAgdGhpcy51cGRhdGVDb25maWcoKTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2xDb250YWluZXIpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sTmFtZSkge1xuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbC5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpO1xuXG4gICAgICAgIC8vIFRPRE8gcmVtb3ZlIGxvZ2ljIGZvciBzdXBwb3J0IG9mIGFuZ3VsYXIgRm9ybUNvbnRyb2wgd2l0aCBhbmd1bGFyIDIwIHVwZGF0ZVxuICAgICAgICBpZiAoISh0aGlzLmNvbnRyb2wgaW5zdGFuY2VvZiBRZEZvcm1Db250cm9sKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1FELVVJIHwgUWRJbnB1dENvbXBvbmVudCAtIFBsZWFzZSB1c2UgdGhlIFFkRm9ybUNvbnRyb2wgaW5zdGVhZCBvZiB0aGUgQW5ndWxhciBGb3JtQ29udHJvbCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlID8/IGdldFZhbHVlKHRoaXMuY29uZmlnKSk7XG5cbiAgICB0aGlzLm5vcm1hbGl6ZUluaXRpYWxDb250cm9sVmFsdWVJZk5lZWRlZCgpO1xuXG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5oaW50RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja0hpbnQuZW1pdCgpKSk7XG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5yZWFkb25seUV2ZW50RW1pdHRlciQuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xpY2tSZWFkb25seS5lbWl0KCkpKTtcbiAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLnZpZXdvbmx5RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja1ZpZXdvbmx5LmVtaXQoKSkpO1xuICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuaW5pdE9wTW9kZVN1YnNjcmlwdGlvbigpKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKCk7XG4gICAgICB0aGlzLm5vcm1hbGl6ZUluaXRpYWxDb250cm9sVmFsdWVJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB0aGlzLndyaXRlVmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgZm5TdHJpbmcgPSBmbi50b1N0cmluZygpO1xuXG4gICAgaWYgKGZuU3RyaW5nLmluY2x1ZGVzKCdfbm9Db250cm9sRXJyb3InKSB8fCBmblN0cmluZy5pbmNsdWRlcygndmFsaWRhdGVDb250cm9sUHJlc2VuY2VPbkNoYW5nZScpKSByZXR1cm47XG5cbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IFFkSW5wdXRWYWx1ZVdpdGhVbml0IHwgUWRJbnB1dFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSBnZXRWYWx1ZVdpdGhVbml0KHZhbHVlLCB0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIHRoaXMuY2xlYXJhYmxlID0gZ2V0Q2xlYXJhYmxlKHRoaXMuY29uZmlnKSAmJiAhdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG4gIGhhbmRsZUlucHV0KGV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5fdmFsdWUgPSB7IC4uLnRoaXMuX3ZhbHVlLCB2YWx1ZSB9O1xuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgdGhpcy5fb25Ub3VjaCgpO1xuICB9XG5cbiAgaGFuZGxlT3B0aW9uU2VsZWN0ZWQob3B0aW9uOiBRZEZvcm1JbnB1dE9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0geyAuLi50aGlzLl92YWx1ZSwgdmFsdWU6IG9wdGlvbi5pMThuIH07XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG9wdGlvbi52YWx1ZSk7XG4gICAgdGhpcy5fb25DaGFuZ2Uob3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLl9vblRvdWNoKCk7XG4gIH1cblxuICBoYW5kbGVVbml0Q2hhbmdlKHVuaXQpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHsgLi4udGhpcy5fdmFsdWUsIHVuaXQgfTtcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgaGFuZGxlSW5wdXRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW5wdXRGb2N1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUlucHV0Qmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW5wdXRGb2N1c2VkID0gZmFsc2U7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmVVbml0c09wZW5lZCkgdGhpcy5fb25Ub3VjaCgpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBoYW5kbGVVbml0c09wZW5lZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFyZVVuaXRzT3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZVVuaXRzQ2xvc2VkKCk6IHZvaWQge1xuICAgIHRoaXMuYXJlVW5pdHNPcGVuZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl92YWx1ZS51bml0ICYmIHRoaXMuX3ZhbHVlLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vblRvdWNoKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHsgLi4udGhpcy5fdmFsdWUsIHZhbHVlOiAnJyB9O1xuICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgdGhpcy5jbGlja0NsZWFyLmVtaXQoKTtcbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIGVtaXRFbnRlckNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1VuaXRzKSB7XG4gICAgICB0aGlzLmVudGVyQ2xpY2suZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW50ZXJDbGljay5lbWl0KHRoaXMuX3ZhbHVlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0VHlwZSA9IGdldElucHV0VHlwZSh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5pbnB1dE1vZGUgPSBnZXRJbnB1dE1vZGUodGhpcy5jb25maWcpO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBnZXRQbGFjZWhvbGRlcih0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5sYWJlbCA9IGdldExhYmVsKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmhpbnQgPSBnZXRIaW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnJlYWRvbmx5ID0gZ2V0UmVhZG9ubHkodGhpcy5jb25maWcsIHRoaXMucmVhZG9ubHkpO1xuICAgIHRoaXMudmlld29ubHkgPSBnZXRWaWV3b25seSh0aGlzLmNvbmZpZywgdGhpcy52aWV3b25seSk7XG4gICAgdGhpcy5oaW50QWN0aW9uID0gZ2V0SGludEFjdGlvbih0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5yZWFkb25seUFjdGlvbiA9IGdldFJlYWRvbmx5QWN0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnZpZXdvbmx5QWN0aW9uID0gZ2V0Vmlld29ubHlBY3Rpb24odGhpcy5jb25maWcpO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBnZXREaXNhYmxlZCh0aGlzLmNvbmZpZykgfHwgISF0aGlzLmNvbnRyb2w/LmRpc2FibGVkO1xuICAgIHRoaXMuY2xlYXJhYmxlID0gIXRoaXMuZGlzYWJsZWQgJiYgZ2V0Q2xlYXJhYmxlKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmhhc0F1dG9mb2N1cyA9IGdldEhhc0F1dG9mb2N1cyh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5oYXNPcHRpb25zID0gKHRoaXMuY29uZmlnLm9wdGlvbnMgJiYgdGhpcy5jb25maWcub3B0aW9ucy5sZW5ndGggPiAwKSB8fCAhIXRoaXMuX29wdGlvbnNSZXNvbHZlcjtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU9wdGlvbnNSZXNvbHZlcigpOiB2b2lkIHtcbiAgICB0aGlzLnJlc29sdmVyUmVnaXN0cnkuaW5pdGlhbGl6ZSh0aGlzLmNvbmZpZz8ub3B0aW9uc1Jlc29sdmVyTmFtZSk7XG4gICAgdGhpcy5fb3B0aW9uc1Jlc29sdmVyID0gdGhpcy5yZXNvbHZlclJlZ2lzdHJ5LmZpbmRSZXNvbHZlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VmFsdWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzVW5pdHMpIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZS52YWx1ZSk7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0T3BNb2RlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB8IHZvaWQge1xuICAgIGlmICghdGhpcy5ldmVudEJyb2tlclNlcnZpY2UpIHJldHVybjtcblxuICAgIHJldHVybiB0aGlzLmV2ZW50QnJva2VyU2VydmljZS5jb25zdW1lPHsgaXNWaWV3b25seTogYm9vbGVhbiB9Pignb3BlcmF0aW9uX21vZGVfY2hhbmdlZCcpLnN1YnNjcmliZSh0b3BpYyA9PiB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlnLnZpZXdvbmx5ID09PSAnYm9vbGVhbicpIHJldHVybjtcblxuICAgICAgdGhpcy52aWV3b25seSA9IGdldFZpZXdvbmx5KHRoaXMuY29uZmlnLCB0b3BpYy5wYXlsb2FkLmlzVmlld29ubHkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVJbml0aWFsQ29udHJvbFZhbHVlSWZOZWVkZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2wpIHJldHVybjtcblxuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSAodGhpcy5jb250cm9sIGFzIGFueSkudmFsdWU7XG5cbiAgICBpZiAobW9kZWxWYWx1ZSA9PSBudWxsKSByZXR1cm4gdm9pZCAodGhpcy5fdmFsdWUgPSBnZXRWYWx1ZVdpdGhVbml0KG1vZGVsVmFsdWUsIHRoaXMuY29uZmlnKSk7XG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gZ2V0VmFsdWVXaXRoVW5pdChtb2RlbFZhbHVlLCB0aGlzLmNvbmZpZyk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5oYXNVbml0cyA/IG5vcm1hbGl6ZWQgOiBub3JtYWxpemVkLnZhbHVlO1xuXG4gICAgaWYgKCFpc0VxdWFsKG1vZGVsVmFsdWUsIHRhcmdldCkpICh0aGlzLmNvbnRyb2wgYXMgYW55KS5zZXRWYWx1ZSh0YXJnZXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIHRoaXMuX3ZhbHVlID0gbm9ybWFsaXplZDtcbiAgfVxufVxuIiwiPHFkLWZvcm0tbGFiZWxcbiAgW2xhYmVsXT1cImxhYmVsXCJcbiAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgW3ZpZXdvbmx5XT1cInZpZXdvbmx5XCJcbiAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gIFt0b29sdGlwXT1cImNvbmZpZz8udG9vbHRpcFwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tbGFiZWw+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5ICYmICFoYXNPcHRpb25zXCI+XG4gIDxkaXYgY2xhc3M9XCJxZC1pbnB1dC1pbnB1dFwiIChrZXlkb3duLmVudGVyKT1cImVtaXRFbnRlckNsaWNrKClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRCb3hcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gY2xhc3M9XCJxZC1pbnB1dC1jaGFyYWN0ZXItY291bnRlclwiICpuZ0lmPVwiaGFzTWF4TGVuZ3RoXCI+e3sgbnVtYmVyT2ZDaGFyYWN0ZXJzIH19IC8ge3sgbWF4TGVuZ3RoIH19PC9zcGFuPlxuXG4gIDxxZC1mb3JtLWhpbnRcbiAgICBbaGludF09XCJoaW50XCJcbiAgICBbY29udHJvbF09XCJjb250cm9sXCJcbiAgICBbaGFzRXJyb3JdPVwiaGFzRXJyb3JcIlxuICAgIFtoaW50QWN0aW9uXT1cImhpbnRBY3Rpb25cIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgPjwvcWQtZm9ybS1oaW50PlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXYgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5ICYmIGhhc09wdGlvbnNcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicWQtaW5wdXQtaW5wdXRcIlxuICAgIHFkSW5wdXRPcHRpb25zXG4gICAgW3FkUG9wb3Zlck1pbldpZHRoXT1cIjIwMFwiXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgIFt2YWx1ZV09XCJfdmFsdWUudmFsdWVcIlxuICAgIChvcHRpb25TZWxlY3RlZCk9XCJoYW5kbGVPcHRpb25TZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAoZW50ZXJDbGljayk9XCJlbWl0RW50ZXJDbGljaygpXCJcbiAgPlxuICAgIDwhLS0gaGFuZGxlIChlbnRlckNsaWNrKSBieSBvcHRpb25zIGRpcmVjdGl2ZSBoZXJlIGJlY2F1c2UgZXZlbnQgaGFzIHRvIGJlIGZpcmVkIGFmdGVyIHNlbGVjdGlvbiAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRCb3hcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gY2xhc3M9XCJxZC1pbnB1dC1jaGFyYWN0ZXItY291bnRlclwiICpuZ0lmPVwiaGFzTWF4TGVuZ3RoXCI+e3sgbnVtYmVyT2ZDaGFyYWN0ZXJzIH19IC8ge3sgbWF4TGVuZ3RoIH19PC9zcGFuPlxuXG4gIDxxZC1mb3JtLWhpbnRcbiAgICBbaGludF09XCJoaW50XCJcbiAgICBbY29udHJvbF09XCJjb250cm9sXCJcbiAgICBbaGFzRXJyb3JdPVwiaGFzRXJyb3JcIlxuICAgIFtoaW50QWN0aW9uXT1cImhpbnRBY3Rpb25cIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgPjwvcWQtZm9ybS1oaW50PlxuPC9kaXY+XG5cbjxxZC1mb3JtLXJlYWRvbmx5XG4gICpuZ0lmPVwicmVhZG9ubHlcIlxuICBbdmFsdWVzXT1cInZhbHVlQXNMaXN0XCJcbiAgW3JlYWRvbmx5QWN0aW9uXT1cInJlYWRvbmx5QWN0aW9uXCJcbiAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuPjwvcWQtZm9ybS1yZWFkb25seT5cblxuPHFkLWZvcm0tdmlld29ubHlcbiAgKm5nSWY9XCJ2aWV3b25seVwiXG4gIFt2YWx1ZXNdPVwidmFsdWVBc0xpc3RcIlxuICBbdmlld29ubHlBY3Rpb25dPVwidmlld29ubHlBY3Rpb25cIlxuICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4+PC9xZC1mb3JtLXZpZXdvbmx5PlxuXG48bmctdGVtcGxhdGUgI2lucHV0Qm94PlxuICA8aW5wdXRcbiAgICAjaW5wdXRcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgIFt2YWx1ZV09XCJoYXNPcHRpb25zID8gKF92YWx1ZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlKSA6IF92YWx1ZS52YWx1ZVwiXG4gICAgKGlucHV0KT1cImhhbmRsZUlucHV0KCRldmVudClcIlxuICAgIChmb2N1cyk9XCJoYW5kbGVJbnB1dEZvY3VzKClcIlxuICAgIChibHVyKT1cImhhbmRsZUlucHV0Qmx1cigpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgIFt0eXBlXT1cImlucHV0VHlwZVwiXG4gICAgW2F0dHIuaW5wdXRtb2RlXT1cImlucHV0TW9kZVwiXG4gICAgW3FkQXV0b2ZvY3VzXT1cImhhc0F1dG9mb2N1c1wiXG4gICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZCArICctaW5wdXQnXCJcbiAgICBbc3RlcF09XCJjb25maWc/LnN0ZXBcIlxuICAgIHJlcXVpcmVkXG4gIC8+XG4gIDxkaXYgY2xhc3M9XCJxZC1pbnB1dC1zdWZmaXhcIj5cbiAgICA8cWQtaWNvbiAqbmdJZj1cImhhc0Vycm9yICYmICFoYXNPbmx5VW5pdHNFcnJvclwiIGNsYXNzPVwicWQtaW5wdXQtZXJyb3ItaWNvblwiIGljb249XCJleGNsYW1hdGlvbkNpcmNsZVNvbGlkXCI+PC9xZC1pY29uPlxuICAgIDxxZC1pY29uICpuZ0lmPVwiY2xlYXJhYmxlXCIgY2xhc3M9XCJxZC1pbnB1dC1jbGVhcmFibGUtaWNvblwiIGljb249XCJ0aW1lc0xhcmdlXCIgKGNsaWNrKT1cImNsZWFySW5wdXQoKVwiPjwvcWQtaWNvbj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcWRJY29uQnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG4gIDxxZC1pbnB1dC11bml0c1xuICAgICpuZ0lmPVwiaGFzVW5pdHNcIlxuICAgIFt1bml0XT1cIl92YWx1ZS51bml0XCJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgKHVuaXRDaGFuZ2UpPVwiaGFuZGxlVW5pdENoYW5nZSgkZXZlbnQpXCJcbiAgICAob3BlbmVkKT1cImhhbmRsZVVuaXRzT3BlbmVkKClcIlxuICAgIChjbG9zZWQpPVwiaGFuZGxlVW5pdHNDbG9zZWQoKVwiXG4gID48L3FkLWlucHV0LXVuaXRzPlxuICA8ZGl2IGNsYXNzPVwicWQtaW5wdXQtc3VmZml4XCIgKm5nSWY9XCJoYXNFcnJvciAmJiBoYXNPbmx5VW5pdHNFcnJvclwiPlxuICAgIDxxZC1pY29uIGNsYXNzPVwicWQtaW5wdXQtZXJyb3ItaWNvblwiIGljb249XCJleGNsYW1hdGlvbkNpcmNsZVNvbGlkXCI+PC9xZC1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
612
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL2lucHV0L2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9mb3Jtcy9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixXQUFXLEVBQ1gsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQVVuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsZUFBZSxFQUNmLE9BQU8sRUFDUCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFlBQVksRUFDWixRQUFRLEVBQ1IsY0FBYyxFQUNkLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFdBQVcsRUFDWCxpQkFBaUIsRUFDbEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUU3Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBNRztBQXFCSCxNQUFNLE9BQU8sZ0JBQWdCO0lBeUtSO0lBQ0E7SUFDZ0M7SUFDcEI7SUEzSy9COztPQUVHO0lBRUgsZUFBZSxDQUFTO0lBRXhCOzs7OztPQUtHO0lBRUgsS0FBSyxDQUFDO0lBRU47Ozs7Ozs7OztPQVNHO0lBRUgsTUFBTSxDQUEyQjtJQUVqQzs7OztPQUlHO0lBRUgsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVoQjs7O09BR0c7SUFFSCxNQUFNLEdBQUcsWUFBWSxDQUFDO0lBRXRCOzs7T0FHRztJQUVNLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBbUQsQ0FBQztJQUUzRjs7O09BR0c7SUFFTSxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1ELENBQUM7SUFFMUY7OztPQUdHO0lBRU0sVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFekM7O09BRUc7SUFFTSxTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUV4Qzs7T0FFRztJQUVNLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRTVDOztPQUVHO0lBRU0sYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFHNUMsUUFBUSxDQUFVO0lBR2xCLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFHdkIsUUFBUSxDQUFVO0lBR2xCLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFJdkIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUluQixRQUFRLENBQVU7SUFHbEIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRXZCLElBRUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFDSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFHRCxZQUFZLENBQWE7SUFFekIsU0FBUyxDQUFjO0lBQ3ZCLFNBQVMsQ0FBYztJQUN2QixXQUFXLENBQVM7SUFDcEIsS0FBSyxDQUFTO0lBQ2QsSUFBSSxDQUFTO0lBQ2IsU0FBUyxDQUFVO0lBQ25CLFlBQVksQ0FBVTtJQUN0QixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE1BQU0sR0FBeUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDN0MsT0FBTyxDQUF1QztJQUV0QyxnQkFBZ0IsQ0FBZ0M7SUFDaEQsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFM0IsU0FBUyxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUMxQixRQUFRLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRWpDLElBQUksaUJBQWlCO1FBQ25CLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO0lBQzdGLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUVqQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sWUFBWSxhQUFhLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUzRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLFlBQVksYUFBYSxDQUFDO1lBQUUsT0FBTztRQUVyRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsWUFDbUIsb0JBQWlELEVBQ2pELGdCQUErQyxFQUNmLGdCQUFrQyxFQUN0RCxrQkFBd0M7UUFIcEQseUJBQW9CLEdBQXBCLG9CQUFvQixDQUE2QjtRQUNqRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQStCO1FBQ2YscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN0RCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXNCO0lBQ3BFLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUV2RSw4RUFBOEU7Z0JBQzlFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLFlBQVksYUFBYSxDQUFDO29CQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLDRGQUE0RixDQUFDLENBQUM7WUFDL0csQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDO1FBRTVDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFvQjtRQUNuQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFL0IsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQztZQUFFLE9BQU87UUFFekcsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUEwQztRQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWlCO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDL0QsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUF5QjtRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBSTtRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUU1QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO2dCQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBRTVCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFeEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7UUFDckUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3ZHLENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCO1lBQUUsT0FBTztRQUVyQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQTBCLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFHLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTO2dCQUFFLE9BQU87WUFFdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9DQUFvQztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRTFCLE1BQU0sVUFBVSxHQUFJLElBQUksQ0FBQyxPQUFlLENBQUMsS0FBSyxDQUFDO1FBRS9DLElBQUksVUFBVSxJQUFJLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUU5RixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUU3RCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUM7WUFBRyxJQUFJLENBQUMsT0FBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUvRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUMzQixDQUFDO3VHQWpXVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQixnOEJBaEJoQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxnQkFBZ0I7Z0JBQzdCLEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRCwyQkFBMkI7WUFDM0IsNkJBQTZCO1lBQzdCLCtDQUErQztZQUMvQyxzQkFBc0I7WUFDdEI7Z0JBQ0UsT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsV0FBVyxFQUFFLGdCQUFnQjthQUM5QjtTQUNGLHNKQ3JSSCw0b0dBbUdBOzsyRkRvTGEsZ0JBQWdCO2tCQXBCNUIsU0FBUzsrQkFDRSxVQUFVLGFBR1Q7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxrQkFBa0I7NEJBQzdCLEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELDJCQUEyQjt3QkFDM0IsNkJBQTZCO3dCQUM3QiwrQ0FBK0M7d0JBQy9DLHNCQUFzQjt3QkFDdEI7NEJBQ0UsT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxrQkFBa0I7eUJBQzlCO3FCQUNGOzswQkE2S0UsUUFBUTs7MEJBQUksSUFBSTs7MEJBQUksUUFBUTs7MEJBQzVCLFFBQVE7eUNBdktYLGVBQWU7c0JBRGQsS0FBSztnQkFVTixLQUFLO3NCQURKLEtBQUs7Z0JBY04sTUFBTTtzQkFETCxLQUFLO2dCQVNOLE9BQU87c0JBRE4sS0FBSztnQkFRTixNQUFNO3NCQURMLEtBQUs7dUJBQUMsY0FBYztnQkFRWixXQUFXO3NCQURuQixNQUFNO2dCQVFFLFVBQVU7c0JBRGxCLE1BQU07Z0JBUUUsVUFBVTtzQkFEbEIsTUFBTTtnQkFPRSxTQUFTO3NCQURqQixNQUFNO2dCQU9FLGFBQWE7c0JBRHJCLE1BQU07Z0JBT0UsYUFBYTtzQkFEckIsTUFBTTtnQkFJUCxRQUFRO3NCQURQLFdBQVc7dUJBQUMseUJBQXlCO2dCQUl0QyxjQUFjO3NCQURiLFdBQVc7dUJBQUMsaUNBQWlDO2dCQUk5QyxRQUFRO3NCQURQLFdBQVc7dUJBQUMseUJBQXlCO2dCQUl0QyxjQUFjO3NCQURiLFdBQVc7dUJBQUMsaUNBQWlDO2dCQUs5QyxVQUFVO3NCQUZULFdBQVc7dUJBQUMsMkJBQTJCOztzQkFDdkMsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBS3pDLFFBQVE7c0JBRlAsV0FBVzt1QkFBQyx3QkFBd0I7O3NCQUNwQyxXQUFXO3VCQUFDLHlCQUF5QjtnQkFJdEMsY0FBYztzQkFEYixXQUFXO3VCQUFDLHNCQUFzQjtnQkFNL0IsUUFBUTtzQkFGWCxXQUFXO3VCQUFDLHFCQUFxQjs7c0JBQ2pDLFdBQVc7dUJBQUMsc0JBQXNCO2dCQU0vQixrQkFBa0I7c0JBRHJCLFdBQVc7dUJBQUMsbUNBQW1DO2dCQU1oRCxZQUFZO3NCQURYLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1zdHJpY3QtaWdub3JlXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdCxcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBTa2lwU2VsZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBRZEZvY3VzYWJsZSB9IGZyb20gJy4uLy4uL2NvcmUvZm9jdXNhYmxlL2ZvY3VzYWJsZSc7XG5pbXBvcnQgeyBRRF9GT0NVU0FCTEVfVE9LRU4gfSBmcm9tICcuLi8uLi9jb3JlL2ZvY3VzYWJsZS9mb2N1c2FibGUudG9rZW4nO1xuaW1wb3J0IHsgUWRFdmVudEJyb2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2V2ZW50LWJyb2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFZhbHVlV2l0aFVuaXQgfSBmcm9tICcuL2hlbHBlcnMvZ2V0LXZhbHVlLXdpdGgtdW5pdCc7XG5cbmltcG9ydCB7IFFkUG9wb3ZlclNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3BvcG92ZXIvcG9wb3Zlci1zaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBRZEZvcm1PcHRpb25zUmVzb2x2ZXIgfSBmcm9tICcuLi9tb2RlbC9mb3JtLW9wdGlvbnMtcmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgUWRGb3JtSW5wdXRDb25maWd1cmF0aW9uLFxuICBRZElucHV0TW9kZSxcbiAgUWRJbnB1dFR5cGUsXG4gIFFkSW5wdXRWYWx1ZSxcbiAgUWRJbnB1dFZhbHVlV2l0aFVuaXRcbn0gZnJvbSAnLi4vbW9kZWwvZm9ybXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFFkRm9ybUlucHV0T3B0aW9uIH0gZnJvbSAnLi4vbW9kZWwvb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUWRGb3JtQ29udHJvbCB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm1zL2NvbnRyb2xzL2Zvcm0tY29udHJvbCc7XG5pbXBvcnQge1xuICBnZXRDbGVhcmFibGUsXG4gIGdldERpc2FibGVkLFxuICBnZXRIYXNBdXRvZm9jdXMsXG4gIGdldEhpbnQsXG4gIGdldEhpbnRBY3Rpb24sXG4gIGdldElucHV0TW9kZSxcbiAgZ2V0SW5wdXRUeXBlLFxuICBnZXRMYWJlbCxcbiAgZ2V0UGxhY2Vob2xkZXIsXG4gIGdldFJlYWRvbmx5LFxuICBnZXRSZWFkb25seUFjdGlvbixcbiAgZ2V0VmFsdWUsXG4gIGdldFZpZXdvbmx5LFxuICBnZXRWaWV3b25seUFjdGlvblxufSBmcm9tICcuLi9zaGFyZWQvaGVscGVycy9mb3Jtcy5oZWxwZXJzJztcbmltcG9ydCB7IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9hY3Rpb24tZW1pdHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFFkRm9ybU9wdGlvbnNSZXNvbHZlclJlZ2lzdHJ5IH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL29wdGlvbnMtcmVzb2x2ZXIucmVnaXN0cnknO1xuXG4vKipcbiAqIFRoZSAqKlFkSW5wdXQqKiBjb21wb25lbnQgcHJvdmlkZXMgYSBGb3JtRWxlbWVudCBmb3IgZW50ZXJpbmcgdGV4dCBpbnRvIGEgVUkuPGJyIC8+XG4gKiBJdCBjYW4gYmUgdXNlZCB3aXRoIFF1YWRyZWwgUmVhY3RpdmUgRm9ybXMgb3Igd2l0aCBtb2RlbCBiaW5kaW5nLlxuICpcbiAqICMjIyAqKlVzYWdlIHdpdGggUmVhY3RpdmUgRm9ybXMqKlxuICpcbiAqIGBgYHRzXG4gKiBmb3JtID0gbmV3IFFkRm9ybUdyb3VwKHtcbiAqICAgaW5wdXQ6IG5ldyBRZEZvcm1Db250cm9sKClcbiAqIH0pO1xuICogYGBgXG4gKiBgYGBodG1sXG4gKiA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAqICAgPHFkLWlucHV0IFtmb3JtQ29udHJvbE5hbWVdPVwiaW5wdXRcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtaW5wdXQ+XG4gKiA8L2Zvcm0+XG4gKiBgYGBcbiAqXG4gKiAjIyMgKipVc2FnZSB3aXRoIE1vZGVsIEJpbmRpbmcqKlxuICogYGBgdHNcbiAqIHZhbHVlO1xuICogYGBgXG4gKiBgYGBodG1sXG4gKiA8cWQtaW5wdXQgWyh2YWx1ZSldPVwidmFsdWVcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtaW5wdXQ+XG4gKiBgYGBcbiAqXG4gKiAjIyAqKlN1Z2dlc3RlZCBPcHRpb25zKipcbiAqXG4gKiAjIyMgKipTdGF0aWMgb3B0aW9ucyBieSBjb25maWcqKlxuICpcbiAqIFN0YXRpYyBvcHRpb25zIGNhbiBiZSBkZWZpbmVkIGluIHRoZSBjb25maWcgYG9wdGlvbnNgIGZpZWxkOlxuICpcbiAqIGBgYHRzXG4gKiBjb25maWc6IFFkRm9ybUlucHV0Q29uZmlndXJhdGlvbiA9IHtcbiAqICAgLi4uXG4gKiAgIG9wdGlvbnM6IFtcbiAqICAgICB7IGkxOG46ICdpMThuLnFkLmV4YW1wbGVGb3JtRmllbGQuZ29vZHNEZWNsYXJhdGlvbi5pbXBvcnQnLCB2YWx1ZTogJ2ltcG9ydCcgfSxcbiAqICAgICB7IGkxOG46ICdpMThuLnFkLmV4YW1wbGVGb3JtRmllbGQuZ29vZHNEZWNsYXJhdGlvbi5leHBvcnQnLCB2YWx1ZTogJ2V4cG9ydCcgfSxcbiAqICAgICB7IGkxOG46ICdpMThuLnFkLmV4YW1wbGVGb3JtRmllbGQuZ29vZHNEZWNsYXJhdGlvbi50cmFuc2l0JywgdmFsdWU6ICd0cmFuc2l0JywgZGlzYWJsZWQ6IHRydWUgfVxuICogICBdXG4gKiB9XG4gKiBgYGBcbiAqIGBgYGh0bWxcbiAqIDxxZC1pbnB1dCBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtaW5wdXQ+XG4gKiBgYGBcbiAqXG4gKiA8U3RvcnkgaWQ9XCJjb21wb25lbnRzLWdyaWQtc3lzdGVtLWNvbnRhaW5lci0tY29sdW1ucy02XCIgLz5cbiAqXG4gKiAjIyMgKipEeW5hbWljIG9wdGlvbnMgYnkgcmVzb2x2ZXIqKlxuICpcbiAqIElmIHlvdSB3YW50IHRvIGRlZmluZSB0aGUgb3B0aW9ucyBkeW5hbWljYWxseSwgeW91IGNhbiBpbmplY3QgYSBgUWRGb3JtT3B0aW9uc1Jlc29sdmVyYFxuICogd2l0aCB0aGUgYFFEX0ZPUk1fT1BUSU9OU19SRVNPTFZFUmAgaW5qZWN0aW9uIHRva2VuLiBUaGUgcmVzb2x2ZXIganVzdCBoYXMgdG8gaW1wbGVtZW50IHRoZSBgcmVzb2x2ZXJgXG4gKiBtZXRob2QuXG4gKlxuICogYGBgdHNcbiAqIEBJbmplY3RhYmxlKClcbiAqIGV4cG9ydCBjbGFzcyBZb3VyRm9ybU9wdGlvbnNSZXNvbHZlciBpbXBsZW1lbnRzIFFkRm9ybU9wdGlvbnNSZXNvbHZlciB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSHR0cENsaWVudCkge31cbiAqXG4gKiAgIHJlc29sdmUodmFsdWU6IHN0cmluZyk6IE9ic2VydmFibGU8UWRGb3JtSW5wdXRbXT4ge1xuICogICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAqICAgICAgIC5nZXQoeW91ckJhY2tlbmRVcmwpXG4gKiAgICAgICAucGlwZShcbiAqICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gKiAgICAgICAgICAgY29uc29sZS5lcnJvcigneW91ciBlcnJvciBtZXNzYWdlJyk7XG4gKlxuICogICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAqICAgICAgICAgfSlcbiAqICAgICAgICk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICogVGhlIG9wdGlvbnMgcmVzb2x2ZXIgY2FuIGJlIGluamVjdGVkIGludG8gYSBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgYFFkSW5wdXRgIG9yIGFsc28gaW50byBhIHBhcmVudFxuICogY29tcG9uZW50LiBJZiB5b3UgbmVlZCBkeW5hbWljIG9wdGlvbnMgZm9yIHRoZSBzZWFyY2ggaW4gdGhlIHNlY3Rpb24gdG9vbGJhciwgeW91IGNhbiBpbmplY3RcbiAqIHRoZSByZXNvbHZlciBvbiBhIGhpZ2hlciBsZXZlbCwgZS5nLiBpbiB0aGUgY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIHNlY3Rpb24uXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICAuLi5cbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgLi4uXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfRk9STV9PUFRJT05TX1JFU09MVkVSLFxuICogICAgICAgdXNlQ2xhc3M6IFlvdXJGb3JtT3B0aW9uc1Jlc29sdmVyXG4gKiAgICAgfVxuICogICBdXG4gKiB9KVxuICogYGBgXG4gKlxuICogQnkgZGVmYXVsdCwgdGhlIHJlc29sdmVyIGlzIGFwcGxpZWQgdG8gZXZlcnkgaW5wdXQgdGhhdCBpcyBpbnNpZGUgdGhlIGNvbXBvbmVudCB0aGF0IGluamVjdHMgdGhlIHJlc29sdmVyLlxuICogVG8gZGlzYWJsZSB0aGUgcmVzb2x2ZXIgZm9yIGFuIGlucHV0LCB5b3UgaGF2ZSB0byBzZXQgdGhlIGBvcHRpb25zUmVzb2x2ZXJOYW1lYCBwcm9wZXJ0eSBpbiB0aGVcbiAqIGlucHV0IGNvbmZpZyB0byBgbnVsbGAuIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBkZWZpbmUgYSBgbmFtZWAgZm9yIHRoZSByZXNvbHZlciBieSBzZXR0aW5nIHRoZSBgbmFtZWAgcHJvcGVydHlcbiAqIGluIHRoZSByZXNvbHZlciBjbGFzcy4gVGh1cywgeW91IGNhbiBjb25uZWN0IHRoZSBpbnB1dCB0byBhIHNwZWNpZmljIHJlc29sdmVyLiBCZWxvdyB0aGVyZSBpcyBhbHNvIGFcbiAqIGRlc2NyaXB0aW9uIG9mIGhvdyB0byB1c2UgbXVsdGlwbGUgaW5wdXRzIHdpdGggZGlmZmVyZW50IHJlc29sdmVycyBpbiBvbmUgY29tcG9uZW50LlxuICogPGJyPjxicj5cbiAqXG4gKiAjIyMjICoqTXVsdGlwbGUgaW5wdXRzIHdpdGggc3VnZ2VzdGVkIG9wdGlvbnMqKlxuICpcbiAqIEZvciBtdWx0aXBsZSBpbnB1dHMgd2l0aCB2YXJpb3VzIHJlc29sdmVycyBpbiBvbmUgY29tcG9uZW50IHlvdSBjYW4gZGlzdGluZ3Vpc2ggdGhlIHJlc29sdmVycyBieSBzZXR0aW5nIHRoZVxuICogYG5hbWVgIGFzIGEgcHJvcGVydHkgaW4gdGhlIHJlc29sdmVyIGNsYXNzLlxuICpcbiAqIGBgYHRzXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBleHBvcnQgY2xhc3MgRnJ1aXRzRm9ybU9wdGlvbnNSZXNvbHZlciBpbXBsZW1lbnRzIFFkRm9ybU9wdGlvbnNSZXNvbHZlciB7XG4gKiAgIG5hbWUgPSAnZnJ1aXRzJztcbiAqICAgLy8gLi4uXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuICogQEluamVjdGFibGUoKVxuICogZXhwb3J0IGNsYXNzIENvdW50cmllc0Zvcm1PcHRpb25zUmVzb2x2ZXIgaW1wbGVtZW50cyBRZEZvcm1PcHRpb25zUmVzb2x2ZXIge1xuICogICBuYW1lID0gJ2NvdW50cmllcyc7XG4gKiAgIC8vIC4uLlxuICogfVxuICogYGBgXG4gKlxuICogVGhlbiB0aGUgaW5wdXQgY2FuIGJlIGFzc2lnbmVkIHRvIGEgcmVzb2x2ZXIgYnkgc2V0dGluZyB0aGUgYG9wdGlvbnNSZXNvbHZlck5hbWVgIHByb3BlcnR5XG4gKiBpbiB0aGUgaW5wdXQgY29uZmlnLlxuICpcbiAqIGBgYHRzXG4gKiBjb25maWc6IFFkRm9ybUlucHV0Q29uZmlndXJhdGlvbiA9IHtcbiAqICAgLi4uXG4gKiAgIG9wdGlvbnNSZXNvbHZlck5hbWU6ICdmcnVpdHMnXG4gKiB9XG4gKlxuICogY29uZmlnMjogUWRGb3JtSW5wdXRDb25maWd1cmF0aW9uID0ge1xuICogICAuLi5cbiAqICAgb3B0aW9uc1Jlc29sdmVyTmFtZTogJ2NvdW50cmllcydcbiAqIH1cbiAqIGBgYFxuICogYGBgaHRtbFxuICogPHFkLWlucHV0IFtjb25maWddPVwiY29uZmlnXCI+PC9xZC1pbnB1dD5cbiAqIDxxZC1pbnB1dCBbY29uZmlnXT1cImNvbmZpZzJcIj48L3FkLWlucHV0PlxuICogYGBgXG4gKiBUbyBpbmplY3QgbXVsdGlwbGUgcmVzb2x2ZXJzIGluIGEgY29tcG9uZW50IHlvdSBjYW4gdXNlIHRoZSBwcm92aWRlciBzZXR0aW5nIGBtdWx0aTogdHJ1ZWAuXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICAuLi5cbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgLi4uXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfRk9STV9PUFRJT05TX1JFU09MVkVSLFxuICogICAgICAgdXNlQ2xhc3M6IEZydWl0c0Zvcm1PcHRpb25zUmVzb2x2ZXIsXG4gKiAgICAgICBtdWx0aTogdHJ1ZVxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfRk9STV9PUFRJT05TX1JFU09MVkVSLFxuICogICAgICAgdXNlQ2xhc3M6IENvdW50cmllc0Zvcm1PcHRpb25zUmVzb2x2ZXIsXG4gKiAgICAgICBtdWx0aTogdHJ1ZVxuICogICAgIH1cbiAqICAgXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyMgKipDdXN0b20gbG9hZGluZyBhbmQgZXJyb3IgaGludHMqKlxuICpcbiAqIEluIHRoZSByZXNvbHZlciB5b3UgYWxzbyBjYW4gZGVmaW5lIGN1c3RvbSBsb2FkaW5nIGFuZCBlcnJvciBoaW50cyB3aXRoIHRoZSBwcm9wZXJ0aWVzIGByZXF1ZXN0TG9hZGluZ0hpbnRgXG4gKiBhbmQgYHJlcXVlc3RFcnJvckhpbnRgLlxuICpcbiAqIGBgYHRzXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBleHBvcnQgY2xhc3MgWW91ckZvcm1PcHRpb25zUmVzb2x2ZXIgaW1wbGVtZW50cyBRZEZvcm1PcHRpb25zUmVzb2x2ZXIge1xuICogICByZXF1ZXN0TG9hZGluZ0hpbnQgPSB7IGkxOG46ICdpMThuLmN1c3RvbS5vcHRpb25zLmxvYWRpbmcnIH07XG4gKiAgIHJlcXVlc3RFcnJvckhpbnQgPSB7IGkxOG46ICdpMThuLmN1c3RvbS5vcHRpb25zLmVycm9yJyB9O1xuICpcbiAqICAgLy8gLi4uXG4gKlxuICogICByZXNvbHZlKHZhbHVlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFFkRm9ybUlucHV0W10+IHtcbiAqICAgICAvLyAuLi5cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiBZb3UgYWxzbyBjYW4gdXBkYXRlIHRoZSBlcnJvciBoaW50IGRpcmVjdGx5IGluIHRoZSByZXNvbHZlIG1ldGhvZCB0byBkaXNwbGF5IGEgbW9yZSBzcGVjaWZpYyBlcnJvclxuICogbWVzc2FnZSB3aGVuIGFuIGVycm9yIG9jY3Vycy5cbiAqXG4gKiBgYGB0c1xuICogQEluamVjdGFibGUoKVxuICogZXhwb3J0IGNsYXNzIFlvdXJGb3JtT3B0aW9uc1Jlc29sdmVyIGltcGxlbWVudHMgUWRGb3JtT3B0aW9uc1Jlc29sdmVyIHtcbiAqICAgLy8gLi4uXG4gKlxuICogICBjb25zdHJ1Y3RvcihcbiAqICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEJBQ0tFTkRfRVJST1JfQ09ERVMpIHByaXZhdGUgcmVhZG9ubHkgYmFja2VuZEVycm9yQ29kZXNcbiAqICAgKSB7XG4gKiAgICAgdGhpcy5iYWNrZW5kRXJyb3JDb2RlcyA9IHRoaXMuYmFja2VuZEVycm9yQ29kZXMgfHwge307XG4gKiAgIH1cbiAqXG4gKiAgIC8vIC4uLlxuICpcbiAqICAgcmVzb2x2ZSh2YWx1ZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxRZEZvcm1JbnB1dFtdPiB7XG4gKiAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICogICAgICAgLmdldCh5b3VyQmFja2VuZFVybClcbiAqICAgICAgIC5waXBlKFxuICogICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAqICAgICAgICAgICBpZiAoZXJyb3IuZXJyb3I/LmVycm9yQ29kZSAmJiBlcnJvci5lcnJvci5lcnJvckNvZGUgaW4gdGhpcy5iYWNrZW5kRXJyb3JDb2RlcylcbiAqICAgICAgICAgICAgIHRoaXMucmVxdWVzdEVycm9ySGludCA9IHsgaTE4bjogJ0VSUk9SLicgKyBlcnJvci5lcnJvci5lcnJvckNvZGUgfTtcbiAqICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gKiAgICAgICAgIH0pXG4gKiAgICAgICApO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncWQtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBRZElucHV0Q29tcG9uZW50LFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSxcbiAgICBRZEZvcm1PcHRpb25zUmVzb2x2ZXJSZWdpc3RyeSxcbiAgICAvLyBUT0RPOiBSZW1vdmUgd2hlbiByZW1vdmluZyBkZXJpdmVkIGRpcmVjdGl2ZVxuICAgIFFkUG9wb3ZlclNpemluZ1NlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogUURfRk9DVVNBQkxFX1RPS0VOLFxuICAgICAgdXNlRXhpc3Rpbmc6IFFkSW5wdXRDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUWRJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBRZEZvY3VzYWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIG5hbWUgY2FuIGJlIGFzc2lnbmVkIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIFJlYWN0aXZlIEZvcm1zLlxuICAgKi9cbiAgQElucHV0KClcbiAgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGZvcm0gaXRlbSB2YWx1ZSwgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggTW9kZWwgQmluZGluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogPHFkLWlucHV0IFsodmFsdWUpXT1cInZhbHVlXCIgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLWlucHV0PlxuICAgKi9cbiAgQElucHV0KClcbiAgdmFsdWU7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIGZvcm0gaXRlbVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgbGFiZWw6IHsgaTE4bjogJ2xhYmVsJyB9LFxuICAgKiAgIHBsYWNlaG9sZGVyOiB7IGkxOG46ICdwbGFjZWhvbGRlcicgfSxcbiAgICogICBoaW50OiB7IGkxOG46ICdoaW50JyB9XG4gICAqIH07XG4gICAqL1xuICBASW5wdXQoKVxuICBjb25maWc6IFFkRm9ybUlucHV0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU2V0IGNvbXBvbmVudCB0byBcImVycm9yXCIgZXh0ZXJuYWxseS4gTm8gcmVhY3RpdmUgZm9ybXMgcmVxdWlyZWQuIFVzZWQgZm9yIGNvbXBvbmVudHMgd2l0aGluIHRoZSBRdWFkcmVsIFVJIGZyYW1ld29yay4gVGhpcyBpcyBkb25lIGJ5IGEgQ1NTIGNsYXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgaXNFcnJvciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIHN0YXRpYyB0ZXN0IElEIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW4gYmUgc2V0LiA8YnIgLz5cbiAgICogVGhlIHZhbHVlIGZvciB0aGUgSFRNTCBhdHRyaWJ1dGUgW2RhdGEtdGVzdC1pZF0uXG4gICAqL1xuICBASW5wdXQoJ2RhdGEtdGVzdC1pZCcpXG4gIHRlc3RJZCA9ICd0ZXh0LWlucHV0JztcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQuXG4gICAqIE9wdGlvbmFsbHkgZW1pdHMgdGhlIGN1cnJlbnQgaW5wdXQgdmFsdWUsIGluY2x1ZGluZyB1bml0IChpZiBjb25maWd1cmVkKS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UWRJbnB1dFZhbHVlIHwgUWRJbnB1dFZhbHVlV2l0aFVuaXQgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLiBOb3RlOiBFbWl0cyBvbiBrZXl1cCAobm8gbG9uZ2VyIG9uIGNsaWNrLCBhcyBiZWZvcmUpIVxuICAgKiBPcHRpb25hbGx5IGVtaXRzIHRoZSBjdXJyZW50IGlucHV0IHZhbHVlLCBpbmNsdWRpbmcgdW5pdCAoaWYgY29uZmlndXJlZCkuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgZW50ZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8UWRJbnB1dFZhbHVlIHwgUWRJbnB1dFZhbHVlV2l0aFVuaXQgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIGlucHV0IGZpZWxkIHdhcyBsYXBwZWQgb24gY2xpY2svdGFwIG9uIHRoZSB4IGljb24uIDxiciAvPlxuICAgKiBgUWRGb3JtSW5wdXRDb25maWd1cmF0aW9uWydjbGVhcmFibGUnXWAgbXVzdCBiZSBzZXQgdG8gdHJ1ZSBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjbGlja0NsZWFyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSBoaW50IGlzIGNsaWNrZWQvdGFwcGVkLiBgaGludEFjdGlvbmAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsaWNrSGludCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgcmVhZG9ubHkgdmFsdWUgaXMgY2xpY2tlZC90YXBwZWQuIGBjbGlja1JlYWRvbmx5IGAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsaWNrUmVhZG9ubHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHZpZXdvbmx5IHZhbHVlIGlzIGNsaWNrZWQvdGFwcGVkLiBgY2xpY2tWaWV3b25seSBgIG11c3QgYmUgc2V0IHRvIGB0cnVlYCBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjbGlja1ZpZXdvbmx5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtcmVhZG9ubHknKVxuICByZWFkb25seTogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LS1yZWFkb25seS1hY3Rpb24nKVxuICByZWFkb25seUFjdGlvbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtdmlld29ubHknKVxuICB2aWV3b25seTogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LS12aWV3b25seS1hY3Rpb24nKVxuICB2aWV3b25seUFjdGlvbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1oaW50LWFjdGlvbicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtaGludC1hY3Rpb24nKVxuICBoaW50QWN0aW9uID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1mb3JtLWRpc2FibGVkJylcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1pbnB1dC1kaXNhYmxlZCcpXG4gIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtZm9jdXMnKVxuICBpc0lucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICBhcmVVbml0c09wZW5lZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1lcnJvcicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtZXJyb3InKVxuICBnZXQgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC50b3VjaGVkICYmIHRoaXMuY29udHJvbC5pbnZhbGlkIDogZmFsc2U7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LWVycm9yLWZyb20tb3V0c2lkZScpXG4gIGdldCBpc0Vycm9yRnJvbU91dHNpZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFcnJvcjtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JylcbiAgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIGlucHV0VHlwZTogUWRJbnB1dFR5cGU7XG4gIGlucHV0TW9kZTogUWRJbnB1dE1vZGU7XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGhpbnQ6IHN0cmluZztcbiAgY2xlYXJhYmxlOiBib29sZWFuO1xuICBoYXNBdXRvZm9jdXM6IGJvb2xlYW47XG4gIGhhc09wdGlvbnMgPSBmYWxzZTtcbiAgX3ZhbHVlOiBRZElucHV0VmFsdWVXaXRoVW5pdCA9IHsgdmFsdWU6ICcnIH07XG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IFFkRm9ybUNvbnRyb2w8YW55PjtcblxuICBwcml2YXRlIF9vcHRpb25zUmVzb2x2ZXIhOiBRZEZvcm1PcHRpb25zUmVzb2x2ZXIgfCBudWxsO1xuICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfb25Ub3VjaDogYW55ID0gKCkgPT4ge307XG5cbiAgZ2V0IGhhc09ubHlVbml0c0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0VxdWFsKE9iamVjdC5rZXlzKHRoaXMuY29udHJvbC5lcnJvcnMpLCBbJ3JlcXVpcmVkJ10pICYmIHRoaXMuX3ZhbHVlLnZhbHVlICE9PSAnJztcbiAgfVxuXG4gIGdldCBoYXNVbml0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnVuaXRzPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IG51bWJlck9mQ2hhcmFjdGVycygpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5fdmFsdWUudmFsdWUpIHJldHVybiAwO1xuXG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLl92YWx1ZS52YWx1ZSkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGhhc01heExlbmd0aCgpOiBib29sZWFuIHtcbiAgICBpZiAoISh0aGlzLmNvbnRyb2wgaW5zdGFuY2VvZiBRZEZvcm1Db250cm9sKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbC5oYXNNYXhMZW5ndGgoKTtcbiAgfVxuXG4gIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICBpZiAoISh0aGlzLmNvbnRyb2wgaW5zdGFuY2VvZiBRZEZvcm1Db250cm9sKSkgcmV0dXJuO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbC5nZXRNYXhMZW5ndGhPclVuZGVmaW5lZCgpO1xuICB9XG5cbiAgZ2V0IHZhbHVlQXNMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW2Ake3RoaXMuX3ZhbHVlLnZhbHVlfSR7dGhpcy5fdmFsdWUudW5pdCA/ICcgJyArIHRoaXMuX3ZhbHVlLnVuaXQgOiAnJ31gXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uRW1pdHRlclNlcnZpY2U6IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVyUmVnaXN0cnk6IFFkRm9ybU9wdGlvbnNSZXNvbHZlclJlZ2lzdHJ5LFxuICAgIEBPcHRpb25hbCgpIEBIb3N0KCkgQFNraXBTZWxmKCkgcHJpdmF0ZSByZWFkb25seSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRCcm9rZXJTZXJ2aWNlOiBRZEV2ZW50QnJva2VyU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplT3B0aW9uc1Jlc29sdmVyKCk7XG4gICAgdGhpcy51cGRhdGVDb25maWcoKTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2xDb250YWluZXIpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sTmFtZSkge1xuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbC5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpO1xuXG4gICAgICAgIC8vIFRPRE8gcmVtb3ZlIGxvZ2ljIGZvciBzdXBwb3J0IG9mIGFuZ3VsYXIgRm9ybUNvbnRyb2wgd2l0aCBhbmd1bGFyIDIwIHVwZGF0ZVxuICAgICAgICBpZiAoISh0aGlzLmNvbnRyb2wgaW5zdGFuY2VvZiBRZEZvcm1Db250cm9sKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1FELVVJIHwgUWRJbnB1dENvbXBvbmVudCAtIFBsZWFzZSB1c2UgdGhlIFFkRm9ybUNvbnRyb2wgaW5zdGVhZCBvZiB0aGUgQW5ndWxhciBGb3JtQ29udHJvbCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlID8/IGdldFZhbHVlKHRoaXMuY29uZmlnKSk7XG5cbiAgICB0aGlzLm5vcm1hbGl6ZUluaXRpYWxDb250cm9sVmFsdWVJZk5lZWRlZCgpO1xuXG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5oaW50RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja0hpbnQuZW1pdCgpKSk7XG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5yZWFkb25seUV2ZW50RW1pdHRlciQuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xpY2tSZWFkb25seS5lbWl0KCkpKTtcbiAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLnZpZXdvbmx5RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja1ZpZXdvbmx5LmVtaXQoKSkpO1xuICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuaW5pdE9wTW9kZVN1YnNjcmlwdGlvbigpKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKCk7XG4gICAgICB0aGlzLm5vcm1hbGl6ZUluaXRpYWxDb250cm9sVmFsdWVJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB0aGlzLndyaXRlVmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgZm5TdHJpbmcgPSBmbi50b1N0cmluZygpO1xuXG4gICAgaWYgKGZuU3RyaW5nLmluY2x1ZGVzKCdfbm9Db250cm9sRXJyb3InKSB8fCBmblN0cmluZy5pbmNsdWRlcygndmFsaWRhdGVDb250cm9sUHJlc2VuY2VPbkNoYW5nZScpKSByZXR1cm47XG5cbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IFFkSW5wdXRWYWx1ZVdpdGhVbml0IHwgUWRJbnB1dFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSBnZXRWYWx1ZVdpdGhVbml0KHZhbHVlLCB0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIHRoaXMuY2xlYXJhYmxlID0gZ2V0Q2xlYXJhYmxlKHRoaXMuY29uZmlnKSAmJiAhdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG4gIGhhbmRsZUlucHV0KGV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5fdmFsdWUgPSB7IC4uLnRoaXMuX3ZhbHVlLCB2YWx1ZSB9O1xuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgdGhpcy5fb25Ub3VjaCgpO1xuICB9XG5cbiAgaGFuZGxlT3B0aW9uU2VsZWN0ZWQob3B0aW9uOiBRZEZvcm1JbnB1dE9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0geyAuLi50aGlzLl92YWx1ZSwgdmFsdWU6IG9wdGlvbi5pMThuIH07XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG9wdGlvbi52YWx1ZSk7XG4gICAgdGhpcy5fb25DaGFuZ2Uob3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLl9vblRvdWNoKCk7XG4gIH1cblxuICBoYW5kbGVVbml0Q2hhbmdlKHVuaXQpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHsgLi4udGhpcy5fdmFsdWUsIHVuaXQgfTtcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgaGFuZGxlSW5wdXRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW5wdXRGb2N1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUlucHV0Qmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW5wdXRGb2N1c2VkID0gZmFsc2U7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmVVbml0c09wZW5lZCkgdGhpcy5fb25Ub3VjaCgpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBoYW5kbGVVbml0c09wZW5lZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFyZVVuaXRzT3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZVVuaXRzQ2xvc2VkKCk6IHZvaWQge1xuICAgIHRoaXMuYXJlVW5pdHNPcGVuZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl92YWx1ZS51bml0ICYmIHRoaXMuX3ZhbHVlLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vblRvdWNoKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHsgLi4udGhpcy5fdmFsdWUsIHZhbHVlOiAnJyB9O1xuICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgdGhpcy5jbGlja0NsZWFyLmVtaXQoKTtcbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIGVtaXRFbnRlckNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1VuaXRzKSB7XG4gICAgICB0aGlzLmVudGVyQ2xpY2suZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW50ZXJDbGljay5lbWl0KHRoaXMuX3ZhbHVlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0VHlwZSA9IGdldElucHV0VHlwZSh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5pbnB1dE1vZGUgPSBnZXRJbnB1dE1vZGUodGhpcy5jb25maWcpO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBnZXRQbGFjZWhvbGRlcih0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5sYWJlbCA9IGdldExhYmVsKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmhpbnQgPSBnZXRIaW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnJlYWRvbmx5ID0gZ2V0UmVhZG9ubHkodGhpcy5jb25maWcsIHRoaXMucmVhZG9ubHkpO1xuICAgIHRoaXMudmlld29ubHkgPSBnZXRWaWV3b25seSh0aGlzLmNvbmZpZywgdGhpcy52aWV3b25seSk7XG4gICAgdGhpcy5oaW50QWN0aW9uID0gZ2V0SGludEFjdGlvbih0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5yZWFkb25seUFjdGlvbiA9IGdldFJlYWRvbmx5QWN0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnZpZXdvbmx5QWN0aW9uID0gZ2V0Vmlld29ubHlBY3Rpb24odGhpcy5jb25maWcpO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBnZXREaXNhYmxlZCh0aGlzLmNvbmZpZykgfHwgISF0aGlzLmNvbnRyb2w/LmRpc2FibGVkO1xuICAgIHRoaXMuY2xlYXJhYmxlID0gIXRoaXMuZGlzYWJsZWQgJiYgZ2V0Q2xlYXJhYmxlKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmhhc0F1dG9mb2N1cyA9IGdldEhhc0F1dG9mb2N1cyh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5oYXNPcHRpb25zID0gKHRoaXMuY29uZmlnLm9wdGlvbnMgJiYgdGhpcy5jb25maWcub3B0aW9ucy5sZW5ndGggPiAwKSB8fCAhIXRoaXMuX29wdGlvbnNSZXNvbHZlcjtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU9wdGlvbnNSZXNvbHZlcigpOiB2b2lkIHtcbiAgICB0aGlzLnJlc29sdmVyUmVnaXN0cnkuaW5pdGlhbGl6ZSh0aGlzLmNvbmZpZz8ub3B0aW9uc1Jlc29sdmVyTmFtZSk7XG4gICAgdGhpcy5fb3B0aW9uc1Jlc29sdmVyID0gdGhpcy5yZXNvbHZlclJlZ2lzdHJ5LmZpbmRSZXNvbHZlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VmFsdWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzVW5pdHMpIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZS52YWx1ZSk7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0T3BNb2RlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB8IHZvaWQge1xuICAgIGlmICghdGhpcy5ldmVudEJyb2tlclNlcnZpY2UpIHJldHVybjtcblxuICAgIHJldHVybiB0aGlzLmV2ZW50QnJva2VyU2VydmljZS5jb25zdW1lPHsgaXNWaWV3b25seTogYm9vbGVhbiB9Pignb3BlcmF0aW9uX21vZGVfY2hhbmdlZCcpLnN1YnNjcmliZSh0b3BpYyA9PiB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlnLnZpZXdvbmx5ID09PSAnYm9vbGVhbicpIHJldHVybjtcblxuICAgICAgdGhpcy52aWV3b25seSA9IGdldFZpZXdvbmx5KHRoaXMuY29uZmlnLCB0b3BpYy5wYXlsb2FkLmlzVmlld29ubHkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVJbml0aWFsQ29udHJvbFZhbHVlSWZOZWVkZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2wpIHJldHVybjtcblxuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSAodGhpcy5jb250cm9sIGFzIGFueSkudmFsdWU7XG5cbiAgICBpZiAobW9kZWxWYWx1ZSA9PSBudWxsKSByZXR1cm4gdm9pZCAodGhpcy5fdmFsdWUgPSBnZXRWYWx1ZVdpdGhVbml0KG1vZGVsVmFsdWUsIHRoaXMuY29uZmlnKSk7XG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gZ2V0VmFsdWVXaXRoVW5pdChtb2RlbFZhbHVlLCB0aGlzLmNvbmZpZyk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5oYXNVbml0cyA/IG5vcm1hbGl6ZWQgOiBub3JtYWxpemVkLnZhbHVlO1xuXG4gICAgaWYgKCFpc0VxdWFsKG1vZGVsVmFsdWUsIHRhcmdldCkpICh0aGlzLmNvbnRyb2wgYXMgYW55KS5zZXRWYWx1ZSh0YXJnZXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIHRoaXMuX3ZhbHVlID0gbm9ybWFsaXplZDtcbiAgfVxufVxuIiwiPHFkLWZvcm0tbGFiZWxcbiAgW2xhYmVsXT1cImxhYmVsXCJcbiAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgW3ZpZXdvbmx5XT1cInZpZXdvbmx5XCJcbiAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gIFt0b29sdGlwXT1cImNvbmZpZz8udG9vbHRpcFwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tbGFiZWw+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5ICYmICFoYXNPcHRpb25zXCI+XG4gIDxkaXYgY2xhc3M9XCJxZC1pbnB1dC1pbnB1dFwiIChrZXlkb3duLmVudGVyKT1cImVtaXRFbnRlckNsaWNrKClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRCb3hcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gY2xhc3M9XCJxZC1pbnB1dC1jaGFyYWN0ZXItY291bnRlclwiICpuZ0lmPVwiaGFzTWF4TGVuZ3RoXCI+e3sgbnVtYmVyT2ZDaGFyYWN0ZXJzIH19IC8ge3sgbWF4TGVuZ3RoIH19PC9zcGFuPlxuXG4gIDxxZC1mb3JtLWhpbnRcbiAgICAqbmdJZj1cImhpbnQgfHwgaGFzRXJyb3JcIlxuICAgIFtoaW50XT1cImhpbnRcIlxuICAgIFtjb250cm9sXT1cImNvbnRyb2xcIlxuICAgIFtoYXNFcnJvcl09XCJoYXNFcnJvclwiXG4gICAgW2hpbnRBY3Rpb25dPVwiaGludEFjdGlvblwiXG4gICAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuICA+PC9xZC1mb3JtLWhpbnQ+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdiAqbmdJZj1cIiFyZWFkb25seSAmJiAhdmlld29ubHkgJiYgaGFzT3B0aW9uc1wiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJxZC1pbnB1dC1pbnB1dFwiXG4gICAgcWRJbnB1dE9wdGlvbnNcbiAgICBbcWRQb3BvdmVyTWluV2lkdGhdPVwiMjAwXCJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgW3ZhbHVlXT1cIl92YWx1ZS52YWx1ZVwiXG4gICAgKG9wdGlvblNlbGVjdGVkKT1cImhhbmRsZU9wdGlvblNlbGVjdGVkKCRldmVudClcIlxuICAgIChlbnRlckNsaWNrKT1cImVtaXRFbnRlckNsaWNrKClcIlxuICA+XG4gICAgPCEtLSBoYW5kbGUgKGVudGVyQ2xpY2spIGJ5IG9wdGlvbnMgZGlyZWN0aXZlIGhlcmUgYmVjYXVzZSBldmVudCBoYXMgdG8gYmUgZmlyZWQgYWZ0ZXIgc2VsZWN0aW9uIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dEJveFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8c3BhbiBjbGFzcz1cInFkLWlucHV0LWNoYXJhY3Rlci1jb3VudGVyXCIgKm5nSWY9XCJoYXNNYXhMZW5ndGhcIj57eyBudW1iZXJPZkNoYXJhY3RlcnMgfX0gLyB7eyBtYXhMZW5ndGggfX08L3NwYW4+XG5cbiAgPHFkLWZvcm0taGludFxuICAgICpuZ0lmPVwiaGludCB8fCBoYXNFcnJvclwiXG4gICAgW2hpbnRdPVwiaGludFwiXG4gICAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgW2hhc0Vycm9yXT1cImhhc0Vycm9yXCJcbiAgICBbaGludEFjdGlvbl09XCJoaW50QWN0aW9uXCJcbiAgICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4gID48L3FkLWZvcm0taGludD5cbjwvZGl2PlxuXG48cWQtZm9ybS1yZWFkb25seVxuICAqbmdJZj1cInJlYWRvbmx5XCJcbiAgW3ZhbHVlc109XCJ2YWx1ZUFzTGlzdFwiXG4gIFtyZWFkb25seUFjdGlvbl09XCJyZWFkb25seUFjdGlvblwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tcmVhZG9ubHk+XG5cbjxxZC1mb3JtLXZpZXdvbmx5XG4gICpuZ0lmPVwidmlld29ubHlcIlxuICBbdmFsdWVzXT1cInZhbHVlQXNMaXN0XCJcbiAgW3ZpZXdvbmx5QWN0aW9uXT1cInZpZXdvbmx5QWN0aW9uXCJcbiAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuPjwvcWQtZm9ybS12aWV3b25seT5cblxuPG5nLXRlbXBsYXRlICNpbnB1dEJveD5cbiAgPGlucHV0XG4gICAgI2lucHV0XG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICBbdmFsdWVdPVwiaGFzT3B0aW9ucyA/IChfdmFsdWUudmFsdWUudG9TdHJpbmcoKSB8IHRyYW5zbGF0ZSkgOiBfdmFsdWUudmFsdWVcIlxuICAgIChpbnB1dCk9XCJoYW5kbGVJbnB1dCgkZXZlbnQpXCJcbiAgICAoZm9jdXMpPVwiaGFuZGxlSW5wdXRGb2N1cygpXCJcbiAgICAoYmx1cik9XCJoYW5kbGVJbnB1dEJsdXIoKVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICBbdHlwZV09XCJpbnB1dFR5cGVcIlxuICAgIFthdHRyLmlucHV0bW9kZV09XCJpbnB1dE1vZGVcIlxuICAgIFtxZEF1dG9mb2N1c109XCJoYXNBdXRvZm9jdXNcIlxuICAgIFthdHRyLmRhdGEtdGVzdC1pZF09XCJ0ZXN0SWQgKyAnLWlucHV0J1wiXG4gICAgW3N0ZXBdPVwiY29uZmlnPy5zdGVwXCJcbiAgICByZXF1aXJlZFxuICAvPlxuICA8ZGl2IGNsYXNzPVwicWQtaW5wdXQtc3VmZml4XCI+XG4gICAgPHFkLWljb24gKm5nSWY9XCJoYXNFcnJvciAmJiAhaGFzT25seVVuaXRzRXJyb3JcIiBjbGFzcz1cInFkLWlucHV0LWVycm9yLWljb25cIiBpY29uPVwiZXhjbGFtYXRpb25DaXJjbGVTb2xpZFwiPjwvcWQtaWNvbj5cbiAgICA8cWQtaWNvbiAqbmdJZj1cImNsZWFyYWJsZVwiIGNsYXNzPVwicWQtaW5wdXQtY2xlYXJhYmxlLWljb25cIiBpY29uPVwidGltZXNMYXJnZVwiIChjbGljayk9XCJjbGVhcklucHV0KClcIj48L3FkLWljb24+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3FkSWNvbkJ1dHRvbl1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuICA8cWQtaW5wdXQtdW5pdHNcbiAgICAqbmdJZj1cImhhc1VuaXRzXCJcbiAgICBbdW5pdF09XCJfdmFsdWUudW5pdFwiXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICh1bml0Q2hhbmdlKT1cImhhbmRsZVVuaXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG9wZW5lZCk9XCJoYW5kbGVVbml0c09wZW5lZCgpXCJcbiAgICAoY2xvc2VkKT1cImhhbmRsZVVuaXRzQ2xvc2VkKClcIlxuICA+PC9xZC1pbnB1dC11bml0cz5cbiAgPGRpdiBjbGFzcz1cInFkLWlucHV0LXN1ZmZpeFwiICpuZ0lmPVwiaGFzRXJyb3IgJiYgaGFzT25seVVuaXRzRXJyb3JcIj5cbiAgICA8cWQtaWNvbiBjbGFzcz1cInFkLWlucHV0LWVycm9yLWljb25cIiBpY29uPVwiZXhjbGFtYXRpb25DaXJjbGVTb2xpZFwiPjwvcWQtaWNvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19