@eo-sdk/client 11.8.0-rc.1 → 11.8.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-widget.component.d.ts.map +1 -1
  2. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
  3. package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts.map +1 -1
  4. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +78 -23
  5. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts.map +1 -1
  6. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.service.d.ts +24 -0
  7. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.service.d.ts.map +1 -0
  8. package/app/eo-framework/grid/filters/dynamic-list-filter.component.d.ts +5 -5
  9. package/app/eo-framework/grid/filters/dynamic-list-filter.component.d.ts.map +1 -1
  10. package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
  11. package/app/eo-framework/object-form/object-form-helper.service.d.ts +31 -11
  12. package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
  13. package/assets/_default/i18n/de.json +2 -1
  14. package/assets/_default/i18n/en.json +2 -1
  15. package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
  16. package/esm2022/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-widget.component.mjs +2 -1
  17. package/esm2022/app/eo-client/process-state/process-state.component.mjs +1 -1
  18. package/esm2022/app/eo-client/settings/settings.component.mjs +3 -3
  19. package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +4 -3
  20. package/esm2022/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +3 -2
  21. package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +215 -94
  22. package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.service.mjs +39 -0
  23. package/esm2022/app/eo-framework/form-elements/string/string.component.mjs +2 -2
  24. package/esm2022/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +16 -22
  25. package/esm2022/app/eo-framework/inbox-details/inbox-details.component.mjs +8 -3
  26. package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +3 -3
  27. package/esm2022/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.mjs +3 -3
  28. package/esm2022/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +3 -3
  29. package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +43 -16
  30. package/esm2022/app/eo-framework/upload-overlay/upload-overlay.component.mjs +3 -3
  31. package/esm2022/app/eo-framework-core/agent/agent.service.mjs +3 -3
  32. package/fesm2022/eo-sdk-client.mjs +442 -263
  33. package/fesm2022/eo-sdk-client.mjs.map +1 -1
  34. package/package.json +2 -2
@@ -456,13 +456,13 @@ export class UploadOverlayComponent {
456
456
  return Array.from(event.clipboardData.items || []).filter(i => i.kind === 'file').length;
457
457
  }
458
458
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: UploadOverlayComponent, deps: [{ token: i1.Router }, { token: i0.Renderer2 }, { token: i2.PrepareService }, { token: i2.TranslateService }, { token: i2.UserService }, { token: i3.AgentService }, { token: i2.SystemService }, { token: i2.EventService }, { token: i2.LocalStorageService }, { token: i2.UploadRegistryService }], target: i0.ɵɵFactoryTarget.Component }); }
459
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: UploadOverlayComponent, selector: "eo-upload-overlay", viewQueries: [{ propertyName: "overlayEl", first: true, predicate: ["overlay"], descendants: true }], ngImport: i0, template: "<div id=\"eo-upload-overlay\" #overlay class=\"dark\" *ngIf=\"fileOver\" tabindex=\"1\"\n [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"close()\"></eo-icon>\n\n <div class=\"count\">\n <div>{{queue.length}}</div>\n <div class=\"queueSize\">{{queueSize | fileSize}}</div>\n </div>\n\n <div class=\"headline\">\n <h1 translate>eo.upload.global.headline</h1>\n </div>\n \n <eo-icon class=\"uploady\" [iconSrc]=\"'assets/_default/svg/ic_upload.svg'\"></eo-icon>\n\n <!-- batch upload dialog -->\n <div class=\"batch-dialog\" *ngIf=\"!invalidInput && selectedUploadTarget && !isUploading\">\n\n <h2 translate>eo.upload.global.choose.title</h2>\n <p translate>eo.upload.global.choose.message</p>\n <div class=\"actions\">\n <button (click)=\"resetSelectedUploadTarget()\" translate>eo.cta.button.cancel</button>\n <button (click)=\"proceedWithSelectedTarget(false)\" class=\"primary\"\n translate>eo.upload.global.choose.single</button>\n <button (click)=\"proceedWithSelectedTarget(true)\" class=\"primary\" translate>eo.upload.global.choose.multi</button>\n </div>\n </div>\n\n <!-- invalid input dialog -->\n <div class=\"batch-dialog\" *ngIf=\"hasValidUploadTargets && invalidInput\">\n\n <h2 translate>eo.upload.global.invalid.title</h2>\n <p translate>eo.upload.global.invalid.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <!-- no upload targets available -->\n <div class=\"batch-dialog\" *ngIf=\"!hasValidUploadTargets\">\n\n <h2 translate>eo.upload.global.notarget.title</h2>\n <p translate>eo.upload.global.notarget.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <div class=\"contents\" *ngIf=\"hasValidUploadTargets && !invalidInput && !selectedUploadTarget && !isUploading\">\n\n <div class=\"section\">\n <!-- list of available upload targets -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (targetType of targetTypes; track targetType.type) {\n @for (t of validUploadTargets; track t.id) {\n @if (t.type === targetType.type) {\n <ng-container *ngTemplateOutlet=\"uploadTargetTemplate; context: {\n iconSrc: targetType.iconSrc,\n targetClass: targetType.targetClass,\n name: targetType.type === 'custom' ? t.name : (targetType.type === 'context' ? (targetType.name | translate : { context: t.referenceObject.type.label }) : (targetType. name | translate)),\n description: targetType.type === 'custom' || targetType.type === 'object' || targetType. type === 'context' ? t.description : (targetType.description | translate),\n targets: t\n }\">\n </ng-container>\n }\n }\n }\n </div>\n </div>\n\n <!-- upload to favorite -->\n @if (folderFavorites.length > 0) {\n <eo-simple-accordion [selected]=\"favoritesAccSelected\" [header]=\"'eo.upload.global.context.favorite' | translate\"\n (selectChange)=\"onFavoriteToggle($event)\">\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'favorite') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-favorite\">\n <div class=\"name\">{{t.title}}\n <div class=\"description\">{{t.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n\n @if(lastOpenedFolder.length > 0){\n <eo-simple-accordion [selected]=\"agentAccSelected\" [header]=\"'eo.upload.global.context.agent' | translate\"\n (selectChange)=\"onAgentToggle($event)\">\n <!-- upload to last opened folder -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'agent') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-agent\">\n <div class=\"name\">{{t?.title}}\n <div class=\"description\">{{t?.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n </div>\n <!-- list of files dragged to the component -->\n <div class=\"files\" [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n <div class=\"files-list\">\n <div class=\"file-item\">\n @for (i of queue; track $index) {\n <div>\n <div class=\"name\">{{i.name}}</div>\n <div class=\"desc\"><span class=\"size\">{{i.size | fileSize}}</span>\n <span class=\"desc-text\">&nbsp;{{i.type}}</span></div>\n </div>\n <eo-icon class=\"button white\" (click)=\"removeFileItem(i)\"\n [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"></eo-icon>\n }\n </div>\n </div>\n </div>\n </div>\n\n @if (isUploading) {\n <div class=\"loading\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n }\n</div>\n\n<ng-template #uploadTargetTemplate let-iconSrc=\"iconSrc\" let-targetClass=\"targetClass\" let-name=\"name\"\n let-description=\"description\" let-targets=\"targets\">\n <div class=\"upload-target\" (click)=\"proceedWithUpload(targets)\">\n <ng-container>\n <eo-icon [iconSrc]=\"iconSrc\"></eo-icon>\n <div [ngClass]=\"targetClass\">\n <div class=\"name\">{{ name }}</div>\n <div class=\"description\">{{ description }}</div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host #eo-upload-overlay{position:absolute;inset:0;z-index:9900;background-color:rgba(var(--color-black-rgb),.85);animation:eoFadeIn var(--app-default-transition-duration);display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-white);overflow:auto}:host #eo-upload-overlay .headline{display:flex;width:100%;min-width:200px;justify-content:center}:host #eo-upload-overlay .headline h1{font-size:4em;font-weight:var(--font-weight-light);color:rgba(var(--color-white-rgb),.5);animation:eoFadeInDown var(--app-default-transition-duration);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .uploady{animation:uploady 2s linear infinite;width:20vw;height:20vw;display:block}:host #eo-upload-overlay .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding)}:host #eo-upload-overlay .count{position:absolute;display:none;right:calc(var(--app-pane-padding) * 3);top:calc(var(--app-pane-padding) * 3);font-size:10vh;flex-flow:column;align-items:flex-end;line-height:1em;animation:eoFadeInDown var(--app-default-transition-duration)}:host #eo-upload-overlay .count .queueSize{font-size:var(--font-caption);line-height:var(--font-caption);margin-top:calc(var(--app-pane-padding) / 2);border-radius:2px;padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .batch-dialog{max-width:350px}:host #eo-upload-overlay .batch-dialog .actions{display:flex;padding-top:var(--app-pane-padding);justify-content:flex-end}:host #eo-upload-overlay .batch-dialog .actions button{margin:0 calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .contents{display:none;flex-flow:row wrap;margin:var(--app-pane-padding);max-width:100%;max-height:100%;width:100%;height:100%}:host #eo-upload-overlay .targets{order:1;margin:0 calc(var(--app-pane-padding) / 2);display:flex;flex-flow:column;justify-content:center;position:relative}:host #eo-upload-overlay .targets .target-list{animation:eoFadeInRight var(--app-default-transition-duration);overflow-y:auto}:host #eo-upload-overlay .targets .target-list h2{font-size:var(--font-subhead);font-weight:400}:host #eo-upload-overlay .targets .target-list .upload-target{background:rgba(var(--color-accent),.6);border:1px solid rgba(var(--color-white-rgb),.4);margin:calc(var(--app-pane-padding) / 2) 0;padding:calc(var(--app-pane-padding) / 2);border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;cursor:pointer;flex-flow:row nowrap;align-items:center}:host #eo-upload-overlay .targets .target-list .upload-target eo-icon{flex:0 0 auto;margin:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div{flex:1 1 auto;margin:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .targets .target-list .upload-target>div .description{width:100%;max-width:250px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-caption);opacity:.7}:host #eo-upload-overlay .targets .target-list .upload-target:hover{background-color:var(--color-accent)}:host #eo-upload-overlay .files{padding:calc(var(--app-pane-padding) / 4);margin:0 calc(var(--app-pane-padding) / 2);overflow-y:auto;border-radius:2px;max-width:150px;width:95%;min-width:25%;animation:eoFadeInLeft var(--app-default-transition-duration);display:flex;flex-flow:column;justify-content:center}:host #eo-upload-overlay .files .files-list{height:100%;width:100%}:host #eo-upload-overlay .files .files-list .file-item{display:flex;align-items:center;cursor:default;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 4);margin-bottom:calc(var(--app-pane-padding) / 4);background-color:rgba(var(--color-white-rgb),.1);-webkit-user-select:none;user-select:none}:host #eo-upload-overlay .files .files-list .file-item>div{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .desc{color:rgba(var(--color-white-rgb),.75);font-size:var(--font-hint);margin-top:calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .files .files-list .file-item>div .size{border-radius:2px;display:inline-block;padding:0 4px;background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .files .files-list .file-item eo-icon{flex:0 0 auto;width:18px;height:18px;padding:calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay.invalid>h1,:host #eo-upload-overlay.invalid .uploady{display:none}:host #eo-upload-overlay.file .uploady{display:none}:host #eo-upload-overlay.file .contents{flex-flow:row-reverse;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;flex:1 1;flex-direction:row-reverse}:host #eo-upload-overlay.file .contents .section{display:flow-root;width:25%;min-width:200px;flex:0 0 auto;max-height:fit-content;overflow:hidden;box-sizing:content-box}:host #eo-upload-overlay.file .contents .targets{order:0;margin-bottom:var(--app-pane-padding)}:host #eo-upload-overlay.uploading h1,:host #eo-upload-overlay.uploading .close{display:none}@keyframes uploady{0%{transform:translateY(0);opacity:.1}50%{transform:translateY(-40px);opacity:.3}to{transform:translateY(0);opacity:.1}}::ng-deep eo-simple-accordion{display:flex;flex-flow:column;flex:0 0 auto}::ng-deep eo-simple-accordion:not(.selected){margin-bottom:var(--app-pane-padding)}::ng-deep eo-simple-accordion>section{min-height:50px;max-height:190px;overflow-y:auto;overflow-x:hidden}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i6.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i7.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i8.SimpleAccordionComponent, selector: "eo-simple-accordion", inputs: ["header", "item", "styles", "headerClass", "selected"], outputs: ["selectChange"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.FileSizePipe, name: "fileSize" }] }); }
459
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: UploadOverlayComponent, selector: "eo-upload-overlay", viewQueries: [{ propertyName: "overlayEl", first: true, predicate: ["overlay"], descendants: true }], ngImport: i0, template: "<div id=\"eo-upload-overlay\" #overlay class=\"dark\" *ngIf=\"fileOver\" tabindex=\"1\"\n [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"close()\"></eo-icon>\n\n <div class=\"count\">\n <div>{{queue.length}}</div>\n <div class=\"queueSize\">{{queueSize | fileSize}}</div>\n </div>\n\n <div class=\"headline\">\n <h1 translate>eo.upload.global.headline</h1>\n </div>\n \n <eo-icon class=\"uploady\" [iconSrc]=\"'assets/_default/svg/ic_upload.svg'\"></eo-icon>\n\n <!-- batch upload dialog -->\n <div class=\"batch-dialog\" *ngIf=\"!invalidInput && selectedUploadTarget && !isUploading\">\n\n <h2 translate>eo.upload.global.choose.title</h2>\n <p translate>eo.upload.global.choose.message</p>\n <div class=\"actions\">\n <button (click)=\"resetSelectedUploadTarget()\" translate>eo.cta.button.cancel</button>\n <button (click)=\"proceedWithSelectedTarget(false)\" class=\"primary\"\n translate>eo.upload.global.choose.single</button>\n <button (click)=\"proceedWithSelectedTarget(true)\" class=\"primary\" translate>eo.upload.global.choose.multi</button>\n </div>\n </div>\n\n <!-- invalid input dialog -->\n <div class=\"batch-dialog\" *ngIf=\"hasValidUploadTargets && invalidInput\">\n\n <h2 translate>eo.upload.global.invalid.title</h2>\n <p translate>eo.upload.global.invalid.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <!-- no upload targets available -->\n <div class=\"batch-dialog\" *ngIf=\"!hasValidUploadTargets\">\n\n <h2 translate>eo.upload.global.notarget.title</h2>\n <p translate>eo.upload.global.notarget.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <div class=\"contents\" *ngIf=\"hasValidUploadTargets && !invalidInput && !selectedUploadTarget && !isUploading\">\n\n <div class=\"section\">\n <!-- list of available upload targets -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (targetType of targetTypes; track targetType.type) {\n @for (t of validUploadTargets; track t.id) {\n @if (t.type === targetType.type) {\n <ng-container *ngTemplateOutlet=\"uploadTargetTemplate; context: {\n iconSrc: targetType.iconSrc,\n targetClass: targetType.targetClass,\n name: targetType.type === 'custom' ? t.name : (targetType.type === 'context' ? (targetType.name | translate : { context: t.referenceObject.type.label }) : (targetType. name | translate)),\n description: targetType.type === 'custom' || targetType.type === 'object' || targetType. type === 'context' ? t.description : (targetType.description | translate),\n targets: t\n }\">\n </ng-container>\n }\n }\n }\n </div>\n </div>\n\n <!-- upload to favorite -->\n @if (folderFavorites.length > 0) {\n <eo-simple-accordion [selected]=\"favoritesAccSelected\" [header]=\"'eo.upload.global.context.favorite' | translate\"\n (selectChange)=\"onFavoriteToggle($event)\">\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'favorite') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-favorite\">\n <div class=\"name\">{{t.title}}\n <div class=\"description\">{{t.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n\n @if(lastOpenedFolder.length > 0){\n <eo-simple-accordion [selected]=\"agentAccSelected\" [header]=\"'eo.upload.global.context.agent' | translate\"\n (selectChange)=\"onAgentToggle($event)\">\n <!-- upload to last opened folder -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'agent') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-agent\">\n <div class=\"name\">{{t?.title}}\n <div class=\"description\">{{t?.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n </div>\n <!-- list of files dragged to the component -->\n <div class=\"files\" [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n <div class=\"files-list\">\n @for (i of queue; track $index) {\n <div class=\"file-item\">\n <div>\n <div class=\"name\">{{i.name}}</div>\n <div class=\"desc\"><span class=\"size\">{{i.size | fileSize}}</span>\n <span class=\"desc-text\">&nbsp;{{i.type}}</span></div>\n </div>\n <eo-icon class=\"button white\" (click)=\"removeFileItem(i)\"\n [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"></eo-icon>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (isUploading) {\n <div class=\"loading\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n }\n</div>\n\n<ng-template #uploadTargetTemplate let-iconSrc=\"iconSrc\" let-targetClass=\"targetClass\" let-name=\"name\"\n let-description=\"description\" let-targets=\"targets\">\n <div class=\"upload-target\" (click)=\"proceedWithUpload(targets)\">\n <ng-container>\n <eo-icon [iconSrc]=\"iconSrc\"></eo-icon>\n <div [ngClass]=\"targetClass\">\n <div class=\"name\">{{ name }}</div>\n <div class=\"description\">{{ description }}</div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host #eo-upload-overlay{position:absolute;inset:0;z-index:9900;background-color:rgba(var(--color-black-rgb),.85);animation:eoFadeIn var(--app-default-transition-duration);display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-white);overflow:hidden}:host #eo-upload-overlay .headline{display:flex;width:100%;min-width:200px;justify-content:center;overflow:hidden;align-content:center;flex-wrap:wrap}:host #eo-upload-overlay .headline h1{font-size:4em;font-weight:var(--font-weight-light);color:rgba(var(--color-white-rgb),.5);animation:eoFadeInDown var(--app-default-transition-duration);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .uploady{animation:uploady 2s linear infinite;width:20vw;height:20vw;display:block}:host #eo-upload-overlay .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding)}:host #eo-upload-overlay .count{position:absolute;display:none;right:calc(var(--app-pane-padding) * 3);top:calc(var(--app-pane-padding) * 3);font-size:10vh;flex-flow:column;align-items:flex-end;line-height:1em;animation:eoFadeInDown var(--app-default-transition-duration)}:host #eo-upload-overlay .count .queueSize{font-size:var(--font-caption);line-height:var(--font-caption);margin-top:calc(var(--app-pane-padding) / 2);border-radius:2px;padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .batch-dialog{max-width:350px}:host #eo-upload-overlay .batch-dialog .actions{display:flex;padding-top:var(--app-pane-padding);justify-content:flex-end}:host #eo-upload-overlay .batch-dialog .actions button{margin:0 calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .contents{display:none;flex-flow:row wrap;margin:var(--app-pane-padding);max-width:100%;max-height:100%;width:100%;height:100%}:host #eo-upload-overlay .targets{order:1;margin:0 calc(var(--app-pane-padding) / 2);display:flex;flex-flow:column;justify-content:center;position:relative}:host #eo-upload-overlay .targets .target-list{animation:eoFadeInRight var(--app-default-transition-duration);overflow-y:auto}:host #eo-upload-overlay .targets .target-list h2{font-size:var(--font-subhead);font-weight:400}:host #eo-upload-overlay .targets .target-list .upload-target{background:rgba(var(--color-accent),.6);border:1px solid rgba(var(--color-white-rgb),.4);margin:calc(var(--app-pane-padding) / 2) 0;padding:calc(var(--app-pane-padding) / 2);border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;cursor:pointer;flex-flow:row nowrap;align-items:center}:host #eo-upload-overlay .targets .target-list .upload-target eo-icon{flex:0 0 auto;margin:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div{flex:1 1 auto;margin:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .targets .target-list .upload-target>div .description{width:100%;max-width:250px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-caption);opacity:.7}:host #eo-upload-overlay .targets .target-list .upload-target:hover{background-color:var(--color-accent)}:host #eo-upload-overlay .files{padding:calc(var(--app-pane-padding) / 4);margin:0 calc(var(--app-pane-padding) / 2);overflow-y:auto;border-radius:2px;max-width:150px;width:95%;min-width:25%;animation:eoFadeInLeft var(--app-default-transition-duration);display:flex;flex-flow:column;justify-content:center}:host #eo-upload-overlay .files .files-list{height:100%;width:100%}:host #eo-upload-overlay .files .files-list .file-item{display:flex;align-items:center;cursor:default;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 4);margin-bottom:calc(var(--app-pane-padding) / 4);background-color:rgba(var(--color-white-rgb),.1);-webkit-user-select:none;user-select:none}:host #eo-upload-overlay .files .files-list .file-item>div{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .desc{color:rgba(var(--color-white-rgb),.75);font-size:var(--font-hint);margin-top:calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .files .files-list .file-item>div .size{border-radius:2px;display:inline-block;padding:0 4px;background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .files .files-list .file-item eo-icon{flex:0 0 auto;width:18px;height:18px;padding:calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay.invalid>h1,:host #eo-upload-overlay.invalid .uploady{display:none}:host #eo-upload-overlay.file .uploady{display:none}:host #eo-upload-overlay.file .contents{flex-flow:row-reverse;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;flex:1 1;flex-direction:row-reverse}:host #eo-upload-overlay.file .contents .section{display:flow-root;width:25%;min-width:200px;flex:0 0 auto;max-height:fit-content;overflow:hidden;box-sizing:content-box}:host #eo-upload-overlay.file .contents .targets{order:0;margin-bottom:var(--app-pane-padding)}:host #eo-upload-overlay.uploading h1,:host #eo-upload-overlay.uploading .close{display:none}@keyframes uploady{0%{transform:translateY(0);opacity:.1}50%{transform:translateY(-40px);opacity:.3}to{transform:translateY(0);opacity:.1}}::ng-deep eo-simple-accordion{display:flex;flex-flow:column;flex:0 0 auto}::ng-deep eo-simple-accordion:not(.selected){margin-bottom:var(--app-pane-padding)}::ng-deep eo-simple-accordion>section{min-height:50px;max-height:190px;overflow-y:auto;overflow-x:hidden}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i6.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i7.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i8.SimpleAccordionComponent, selector: "eo-simple-accordion", inputs: ["header", "item", "styles", "headerClass", "selected"], outputs: ["selectChange"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.FileSizePipe, name: "fileSize" }] }); }
460
460
  }
461
461
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: UploadOverlayComponent, decorators: [{
462
462
  type: Component,
463
- args: [{ selector: 'eo-upload-overlay', template: "<div id=\"eo-upload-overlay\" #overlay class=\"dark\" *ngIf=\"fileOver\" tabindex=\"1\"\n [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"close()\"></eo-icon>\n\n <div class=\"count\">\n <div>{{queue.length}}</div>\n <div class=\"queueSize\">{{queueSize | fileSize}}</div>\n </div>\n\n <div class=\"headline\">\n <h1 translate>eo.upload.global.headline</h1>\n </div>\n \n <eo-icon class=\"uploady\" [iconSrc]=\"'assets/_default/svg/ic_upload.svg'\"></eo-icon>\n\n <!-- batch upload dialog -->\n <div class=\"batch-dialog\" *ngIf=\"!invalidInput && selectedUploadTarget && !isUploading\">\n\n <h2 translate>eo.upload.global.choose.title</h2>\n <p translate>eo.upload.global.choose.message</p>\n <div class=\"actions\">\n <button (click)=\"resetSelectedUploadTarget()\" translate>eo.cta.button.cancel</button>\n <button (click)=\"proceedWithSelectedTarget(false)\" class=\"primary\"\n translate>eo.upload.global.choose.single</button>\n <button (click)=\"proceedWithSelectedTarget(true)\" class=\"primary\" translate>eo.upload.global.choose.multi</button>\n </div>\n </div>\n\n <!-- invalid input dialog -->\n <div class=\"batch-dialog\" *ngIf=\"hasValidUploadTargets && invalidInput\">\n\n <h2 translate>eo.upload.global.invalid.title</h2>\n <p translate>eo.upload.global.invalid.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <!-- no upload targets available -->\n <div class=\"batch-dialog\" *ngIf=\"!hasValidUploadTargets\">\n\n <h2 translate>eo.upload.global.notarget.title</h2>\n <p translate>eo.upload.global.notarget.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <div class=\"contents\" *ngIf=\"hasValidUploadTargets && !invalidInput && !selectedUploadTarget && !isUploading\">\n\n <div class=\"section\">\n <!-- list of available upload targets -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (targetType of targetTypes; track targetType.type) {\n @for (t of validUploadTargets; track t.id) {\n @if (t.type === targetType.type) {\n <ng-container *ngTemplateOutlet=\"uploadTargetTemplate; context: {\n iconSrc: targetType.iconSrc,\n targetClass: targetType.targetClass,\n name: targetType.type === 'custom' ? t.name : (targetType.type === 'context' ? (targetType.name | translate : { context: t.referenceObject.type.label }) : (targetType. name | translate)),\n description: targetType.type === 'custom' || targetType.type === 'object' || targetType. type === 'context' ? t.description : (targetType.description | translate),\n targets: t\n }\">\n </ng-container>\n }\n }\n }\n </div>\n </div>\n\n <!-- upload to favorite -->\n @if (folderFavorites.length > 0) {\n <eo-simple-accordion [selected]=\"favoritesAccSelected\" [header]=\"'eo.upload.global.context.favorite' | translate\"\n (selectChange)=\"onFavoriteToggle($event)\">\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'favorite') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-favorite\">\n <div class=\"name\">{{t.title}}\n <div class=\"description\">{{t.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n\n @if(lastOpenedFolder.length > 0){\n <eo-simple-accordion [selected]=\"agentAccSelected\" [header]=\"'eo.upload.global.context.agent' | translate\"\n (selectChange)=\"onAgentToggle($event)\">\n <!-- upload to last opened folder -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'agent') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-agent\">\n <div class=\"name\">{{t?.title}}\n <div class=\"description\">{{t?.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n </div>\n <!-- list of files dragged to the component -->\n <div class=\"files\" [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n <div class=\"files-list\">\n <div class=\"file-item\">\n @for (i of queue; track $index) {\n <div>\n <div class=\"name\">{{i.name}}</div>\n <div class=\"desc\"><span class=\"size\">{{i.size | fileSize}}</span>\n <span class=\"desc-text\">&nbsp;{{i.type}}</span></div>\n </div>\n <eo-icon class=\"button white\" (click)=\"removeFileItem(i)\"\n [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"></eo-icon>\n }\n </div>\n </div>\n </div>\n </div>\n\n @if (isUploading) {\n <div class=\"loading\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n }\n</div>\n\n<ng-template #uploadTargetTemplate let-iconSrc=\"iconSrc\" let-targetClass=\"targetClass\" let-name=\"name\"\n let-description=\"description\" let-targets=\"targets\">\n <div class=\"upload-target\" (click)=\"proceedWithUpload(targets)\">\n <ng-container>\n <eo-icon [iconSrc]=\"iconSrc\"></eo-icon>\n <div [ngClass]=\"targetClass\">\n <div class=\"name\">{{ name }}</div>\n <div class=\"description\">{{ description }}</div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host #eo-upload-overlay{position:absolute;inset:0;z-index:9900;background-color:rgba(var(--color-black-rgb),.85);animation:eoFadeIn var(--app-default-transition-duration);display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-white);overflow:auto}:host #eo-upload-overlay .headline{display:flex;width:100%;min-width:200px;justify-content:center}:host #eo-upload-overlay .headline h1{font-size:4em;font-weight:var(--font-weight-light);color:rgba(var(--color-white-rgb),.5);animation:eoFadeInDown var(--app-default-transition-duration);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .uploady{animation:uploady 2s linear infinite;width:20vw;height:20vw;display:block}:host #eo-upload-overlay .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding)}:host #eo-upload-overlay .count{position:absolute;display:none;right:calc(var(--app-pane-padding) * 3);top:calc(var(--app-pane-padding) * 3);font-size:10vh;flex-flow:column;align-items:flex-end;line-height:1em;animation:eoFadeInDown var(--app-default-transition-duration)}:host #eo-upload-overlay .count .queueSize{font-size:var(--font-caption);line-height:var(--font-caption);margin-top:calc(var(--app-pane-padding) / 2);border-radius:2px;padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .batch-dialog{max-width:350px}:host #eo-upload-overlay .batch-dialog .actions{display:flex;padding-top:var(--app-pane-padding);justify-content:flex-end}:host #eo-upload-overlay .batch-dialog .actions button{margin:0 calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .contents{display:none;flex-flow:row wrap;margin:var(--app-pane-padding);max-width:100%;max-height:100%;width:100%;height:100%}:host #eo-upload-overlay .targets{order:1;margin:0 calc(var(--app-pane-padding) / 2);display:flex;flex-flow:column;justify-content:center;position:relative}:host #eo-upload-overlay .targets .target-list{animation:eoFadeInRight var(--app-default-transition-duration);overflow-y:auto}:host #eo-upload-overlay .targets .target-list h2{font-size:var(--font-subhead);font-weight:400}:host #eo-upload-overlay .targets .target-list .upload-target{background:rgba(var(--color-accent),.6);border:1px solid rgba(var(--color-white-rgb),.4);margin:calc(var(--app-pane-padding) / 2) 0;padding:calc(var(--app-pane-padding) / 2);border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;cursor:pointer;flex-flow:row nowrap;align-items:center}:host #eo-upload-overlay .targets .target-list .upload-target eo-icon{flex:0 0 auto;margin:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div{flex:1 1 auto;margin:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .targets .target-list .upload-target>div .description{width:100%;max-width:250px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-caption);opacity:.7}:host #eo-upload-overlay .targets .target-list .upload-target:hover{background-color:var(--color-accent)}:host #eo-upload-overlay .files{padding:calc(var(--app-pane-padding) / 4);margin:0 calc(var(--app-pane-padding) / 2);overflow-y:auto;border-radius:2px;max-width:150px;width:95%;min-width:25%;animation:eoFadeInLeft var(--app-default-transition-duration);display:flex;flex-flow:column;justify-content:center}:host #eo-upload-overlay .files .files-list{height:100%;width:100%}:host #eo-upload-overlay .files .files-list .file-item{display:flex;align-items:center;cursor:default;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 4);margin-bottom:calc(var(--app-pane-padding) / 4);background-color:rgba(var(--color-white-rgb),.1);-webkit-user-select:none;user-select:none}:host #eo-upload-overlay .files .files-list .file-item>div{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .desc{color:rgba(var(--color-white-rgb),.75);font-size:var(--font-hint);margin-top:calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .files .files-list .file-item>div .size{border-radius:2px;display:inline-block;padding:0 4px;background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .files .files-list .file-item eo-icon{flex:0 0 auto;width:18px;height:18px;padding:calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay.invalid>h1,:host #eo-upload-overlay.invalid .uploady{display:none}:host #eo-upload-overlay.file .uploady{display:none}:host #eo-upload-overlay.file .contents{flex-flow:row-reverse;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;flex:1 1;flex-direction:row-reverse}:host #eo-upload-overlay.file .contents .section{display:flow-root;width:25%;min-width:200px;flex:0 0 auto;max-height:fit-content;overflow:hidden;box-sizing:content-box}:host #eo-upload-overlay.file .contents .targets{order:0;margin-bottom:var(--app-pane-padding)}:host #eo-upload-overlay.uploading h1,:host #eo-upload-overlay.uploading .close{display:none}@keyframes uploady{0%{transform:translateY(0);opacity:.1}50%{transform:translateY(-40px);opacity:.3}to{transform:translateY(0);opacity:.1}}::ng-deep eo-simple-accordion{display:flex;flex-flow:column;flex:0 0 auto}::ng-deep eo-simple-accordion:not(.selected){margin-bottom:var(--app-pane-padding)}::ng-deep eo-simple-accordion>section{min-height:50px;max-height:190px;overflow-y:auto;overflow-x:hidden}\n"] }]
463
+ args: [{ selector: 'eo-upload-overlay', template: "<div id=\"eo-upload-overlay\" #overlay class=\"dark\" *ngIf=\"fileOver\" tabindex=\"1\"\n [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"close()\"></eo-icon>\n\n <div class=\"count\">\n <div>{{queue.length}}</div>\n <div class=\"queueSize\">{{queueSize | fileSize}}</div>\n </div>\n\n <div class=\"headline\">\n <h1 translate>eo.upload.global.headline</h1>\n </div>\n \n <eo-icon class=\"uploady\" [iconSrc]=\"'assets/_default/svg/ic_upload.svg'\"></eo-icon>\n\n <!-- batch upload dialog -->\n <div class=\"batch-dialog\" *ngIf=\"!invalidInput && selectedUploadTarget && !isUploading\">\n\n <h2 translate>eo.upload.global.choose.title</h2>\n <p translate>eo.upload.global.choose.message</p>\n <div class=\"actions\">\n <button (click)=\"resetSelectedUploadTarget()\" translate>eo.cta.button.cancel</button>\n <button (click)=\"proceedWithSelectedTarget(false)\" class=\"primary\"\n translate>eo.upload.global.choose.single</button>\n <button (click)=\"proceedWithSelectedTarget(true)\" class=\"primary\" translate>eo.upload.global.choose.multi</button>\n </div>\n </div>\n\n <!-- invalid input dialog -->\n <div class=\"batch-dialog\" *ngIf=\"hasValidUploadTargets && invalidInput\">\n\n <h2 translate>eo.upload.global.invalid.title</h2>\n <p translate>eo.upload.global.invalid.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <!-- no upload targets available -->\n <div class=\"batch-dialog\" *ngIf=\"!hasValidUploadTargets\">\n\n <h2 translate>eo.upload.global.notarget.title</h2>\n <p translate>eo.upload.global.notarget.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <div class=\"contents\" *ngIf=\"hasValidUploadTargets && !invalidInput && !selectedUploadTarget && !isUploading\">\n\n <div class=\"section\">\n <!-- list of available upload targets -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (targetType of targetTypes; track targetType.type) {\n @for (t of validUploadTargets; track t.id) {\n @if (t.type === targetType.type) {\n <ng-container *ngTemplateOutlet=\"uploadTargetTemplate; context: {\n iconSrc: targetType.iconSrc,\n targetClass: targetType.targetClass,\n name: targetType.type === 'custom' ? t.name : (targetType.type === 'context' ? (targetType.name | translate : { context: t.referenceObject.type.label }) : (targetType. name | translate)),\n description: targetType.type === 'custom' || targetType.type === 'object' || targetType. type === 'context' ? t.description : (targetType.description | translate),\n targets: t\n }\">\n </ng-container>\n }\n }\n }\n </div>\n </div>\n\n <!-- upload to favorite -->\n @if (folderFavorites.length > 0) {\n <eo-simple-accordion [selected]=\"favoritesAccSelected\" [header]=\"'eo.upload.global.context.favorite' | translate\"\n (selectChange)=\"onFavoriteToggle($event)\">\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'favorite') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-favorite\">\n <div class=\"name\">{{t.title}}\n <div class=\"description\">{{t.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n\n @if(lastOpenedFolder.length > 0){\n <eo-simple-accordion [selected]=\"agentAccSelected\" [header]=\"'eo.upload.global.context.agent' | translate\"\n (selectChange)=\"onAgentToggle($event)\">\n <!-- upload to last opened folder -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'agent') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-agent\">\n <div class=\"name\">{{t?.title}}\n <div class=\"description\">{{t?.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n </div>\n <!-- list of files dragged to the component -->\n <div class=\"files\" [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n <div class=\"files-list\">\n @for (i of queue; track $index) {\n <div class=\"file-item\">\n <div>\n <div class=\"name\">{{i.name}}</div>\n <div class=\"desc\"><span class=\"size\">{{i.size | fileSize}}</span>\n <span class=\"desc-text\">&nbsp;{{i.type}}</span></div>\n </div>\n <eo-icon class=\"button white\" (click)=\"removeFileItem(i)\"\n [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"></eo-icon>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (isUploading) {\n <div class=\"loading\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n }\n</div>\n\n<ng-template #uploadTargetTemplate let-iconSrc=\"iconSrc\" let-targetClass=\"targetClass\" let-name=\"name\"\n let-description=\"description\" let-targets=\"targets\">\n <div class=\"upload-target\" (click)=\"proceedWithUpload(targets)\">\n <ng-container>\n <eo-icon [iconSrc]=\"iconSrc\"></eo-icon>\n <div [ngClass]=\"targetClass\">\n <div class=\"name\">{{ name }}</div>\n <div class=\"description\">{{ description }}</div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host #eo-upload-overlay{position:absolute;inset:0;z-index:9900;background-color:rgba(var(--color-black-rgb),.85);animation:eoFadeIn var(--app-default-transition-duration);display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-white);overflow:hidden}:host #eo-upload-overlay .headline{display:flex;width:100%;min-width:200px;justify-content:center;overflow:hidden;align-content:center;flex-wrap:wrap}:host #eo-upload-overlay .headline h1{font-size:4em;font-weight:var(--font-weight-light);color:rgba(var(--color-white-rgb),.5);animation:eoFadeInDown var(--app-default-transition-duration);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .uploady{animation:uploady 2s linear infinite;width:20vw;height:20vw;display:block}:host #eo-upload-overlay .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding)}:host #eo-upload-overlay .count{position:absolute;display:none;right:calc(var(--app-pane-padding) * 3);top:calc(var(--app-pane-padding) * 3);font-size:10vh;flex-flow:column;align-items:flex-end;line-height:1em;animation:eoFadeInDown var(--app-default-transition-duration)}:host #eo-upload-overlay .count .queueSize{font-size:var(--font-caption);line-height:var(--font-caption);margin-top:calc(var(--app-pane-padding) / 2);border-radius:2px;padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .batch-dialog{max-width:350px}:host #eo-upload-overlay .batch-dialog .actions{display:flex;padding-top:var(--app-pane-padding);justify-content:flex-end}:host #eo-upload-overlay .batch-dialog .actions button{margin:0 calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .contents{display:none;flex-flow:row wrap;margin:var(--app-pane-padding);max-width:100%;max-height:100%;width:100%;height:100%}:host #eo-upload-overlay .targets{order:1;margin:0 calc(var(--app-pane-padding) / 2);display:flex;flex-flow:column;justify-content:center;position:relative}:host #eo-upload-overlay .targets .target-list{animation:eoFadeInRight var(--app-default-transition-duration);overflow-y:auto}:host #eo-upload-overlay .targets .target-list h2{font-size:var(--font-subhead);font-weight:400}:host #eo-upload-overlay .targets .target-list .upload-target{background:rgba(var(--color-accent),.6);border:1px solid rgba(var(--color-white-rgb),.4);margin:calc(var(--app-pane-padding) / 2) 0;padding:calc(var(--app-pane-padding) / 2);border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;cursor:pointer;flex-flow:row nowrap;align-items:center}:host #eo-upload-overlay .targets .target-list .upload-target eo-icon{flex:0 0 auto;margin:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div{flex:1 1 auto;margin:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .targets .target-list .upload-target>div .description{width:100%;max-width:250px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-caption);opacity:.7}:host #eo-upload-overlay .targets .target-list .upload-target:hover{background-color:var(--color-accent)}:host #eo-upload-overlay .files{padding:calc(var(--app-pane-padding) / 4);margin:0 calc(var(--app-pane-padding) / 2);overflow-y:auto;border-radius:2px;max-width:150px;width:95%;min-width:25%;animation:eoFadeInLeft var(--app-default-transition-duration);display:flex;flex-flow:column;justify-content:center}:host #eo-upload-overlay .files .files-list{height:100%;width:100%}:host #eo-upload-overlay .files .files-list .file-item{display:flex;align-items:center;cursor:default;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 4);margin-bottom:calc(var(--app-pane-padding) / 4);background-color:rgba(var(--color-white-rgb),.1);-webkit-user-select:none;user-select:none}:host #eo-upload-overlay .files .files-list .file-item>div{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .desc{color:rgba(var(--color-white-rgb),.75);font-size:var(--font-hint);margin-top:calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .files .files-list .file-item>div .size{border-radius:2px;display:inline-block;padding:0 4px;background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .files .files-list .file-item eo-icon{flex:0 0 auto;width:18px;height:18px;padding:calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay.invalid>h1,:host #eo-upload-overlay.invalid .uploady{display:none}:host #eo-upload-overlay.file .uploady{display:none}:host #eo-upload-overlay.file .contents{flex-flow:row-reverse;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;flex:1 1;flex-direction:row-reverse}:host #eo-upload-overlay.file .contents .section{display:flow-root;width:25%;min-width:200px;flex:0 0 auto;max-height:fit-content;overflow:hidden;box-sizing:content-box}:host #eo-upload-overlay.file .contents .targets{order:0;margin-bottom:var(--app-pane-padding)}:host #eo-upload-overlay.uploading h1,:host #eo-upload-overlay.uploading .close{display:none}@keyframes uploady{0%{transform:translateY(0);opacity:.1}50%{transform:translateY(-40px);opacity:.3}to{transform:translateY(0);opacity:.1}}::ng-deep eo-simple-accordion{display:flex;flex-flow:column;flex:0 0 auto}::ng-deep eo-simple-accordion:not(.selected){margin-bottom:var(--app-pane-padding)}::ng-deep eo-simple-accordion>section{min-height:50px;max-height:190px;overflow-y:auto;overflow-x:hidden}\n"] }]
464
464
  }], ctorParameters: () => [{ type: i1.Router }, { type: i0.Renderer2 }, { type: i2.PrepareService }, { type: i2.TranslateService }, { type: i2.UserService }, { type: i3.AgentService }, { type: i2.SystemService }, { type: i2.EventService }, { type: i2.LocalStorageService }, { type: i2.UploadRegistryService }], propDecorators: { overlayEl: [{
465
465
  type: ViewChild,
466
466
  args: ['overlay']
467
467
  }] } });
468
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdXBsb2FkLW92ZXJsYXkvdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdXBsb2FkLW92ZXJsYXkvdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEVBQUUsSUFBSSxZQUFZLEVBQUUsUUFBUSxJQUFJLGtCQUFrQixFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwRixPQUFPLEVBQUMsU0FBUyxFQUFxQixTQUFTLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBRTdGLE9BQU8sRUFHTCxVQUFVLEVBRVYsWUFBWSxFQUNaLGNBQWMsRUFFZCxLQUFLLEVBRUwsZ0JBQWdCLEVBR2pCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBZSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFPckUsTUFBTSxPQUFPLHNCQUFzQjtJQThEakMsWUFBb0IsTUFBYyxFQUN4QixRQUFtQixFQUNuQixjQUE4QixFQUM5QixTQUEyQixFQUMzQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixhQUE0QixFQUM1QixZQUEwQixFQUMxQixjQUFtQyxFQUNuQyxjQUFxQztRQVQzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFxQjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFuRS9DLFVBQUssR0FBcUIsRUFBRSxDQUFDO1FBTTdCLHVCQUFrQixHQUFtQixFQUFFLENBQUM7UUFFeEMsb0JBQWUsR0FBbUIsRUFBRSxDQUFDO1FBQ3JDLHFCQUFnQixHQUFtQixFQUFFLENBQUM7UUFLdEMsZ0JBQVcsR0FBRztZQUNaO2dCQUNFLElBQUksRUFBRSxNQUFNO2dCQUNaLE9BQU8sRUFBRSw0Q0FBNEM7Z0JBQ3JELFdBQVcsRUFBRSx1QkFBdUI7Z0JBQ3BDLElBQUksRUFBRSw2QkFBNkI7Z0JBQ25DLFdBQVcsRUFBRSxtQ0FBbUM7YUFDakQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxPQUFPLEVBQUUsMENBQTBDO2dCQUNuRCxXQUFXLEVBQUUsdUJBQXVCO2dCQUNwQyxJQUFJLEVBQUUsK0JBQStCO2FBQ3RDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsT0FBTyxFQUFFLHNEQUFzRDtnQkFDL0QsV0FBVyxFQUFFLHVCQUF1QjtnQkFDcEMsSUFBSSxFQUFFLGdDQUFnQzthQUN2QztZQUNEO2dCQUNFLElBQUksRUFBRSxhQUFhO2dCQUNuQixPQUFPLEVBQUUsc0RBQXNEO2dCQUMvRCxXQUFXLEVBQUUsMkJBQTJCO2dCQUN4QyxJQUFJLEVBQUUsaUNBQWlDO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsT0FBTyxFQUFFLG1DQUFtQztnQkFDNUMsV0FBVyxFQUFFLHNCQUFzQjtnQkFDbkMsSUFBSSxFQUFFLEVBQUU7YUFDVDtTQUNGLENBQUM7UUFFTSxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFPbkMsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsYUFBUSxHQUFHLG1CQUFtQixDQUFDO1FBWXJDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxpQkFBaUIsQ0FBQyxZQUEwQjtRQUVqRCxJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RSwyRkFBMkY7WUFDM0YseUNBQXlDO1lBR3pDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFZLENBQUM7UUFDM0MsQ0FBQzthQUFNLElBQUksWUFBWSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckQsOENBQThDO1lBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0kseUJBQXlCLENBQUMsY0FBdUI7UUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSx5QkFBeUI7UUFDOUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyxDQUFDLFFBQXdCO1FBRTVDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLENBQUM7YUFBTSxDQUFDO1lBQ04seURBQXlEO1lBQ3pELGlDQUFpQztZQUNqQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWE7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFhO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxTQUFTO1FBQ1AsbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFPLEVBQVEsRUFBRTtZQUN2RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQTRFLEVBQUUsRUFBRTtnQkFDL0csSUFBSSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQzNCLElBQUksQ0FBQyxFQUFFLEVBQ1AsT0FBTyxFQUNQLElBQUksRUFBRSxLQUFLLEVBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFDbEQsSUFBSSxDQUFDLElBQUksQ0FDVixDQUFDO2dCQUNGLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUM7Z0JBQzdDLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0csQ0FBQyxDQUFDLENBQUM7UUFFSCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNoRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFpQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztZQUN6RyxJQUFJLENBQUMsZUFBZSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUNkLFVBQVUsRUFDVixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2pCLENBQUM7Z0JBQ0YsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWpCLDhFQUE4RTtRQUM5RSxJQUFJLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztZQUMzQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBNkIsRUFBRSxFQUFFO1lBQzdFLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBaUIsRUFBRSxFQUFFO1lBQ25GLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQVksRUFBRSxFQUFFO1lBQ3RGLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sT0FBTyxDQUFDLENBQWlCO1FBQy9CLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsT0FBTztZQUNULENBQUM7WUFFRCx3QkFBd0I7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQy9DLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN6QixPQUFPO2dCQUNULENBQUM7Z0JBQ0QsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNoRCxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN6QixPQUFPO2dCQUNULENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxDQUFZO1FBQzlCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV2QiwwR0FBMEc7WUFDMUcsNERBQTREO1lBQzVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2Qsc0dBQXNHO2dCQUN0RyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDckMsaUdBQWlHO2dCQUNqRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRTtvQkFDNUYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN0QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQzlCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDZixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ3JGLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDZCxPQUFPO29CQUNULENBQUM7b0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFFMUIsd0JBQXdCO29CQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDL0MsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO3dCQUNoRCxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7NEJBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO3dCQUMzQixDQUFDO29CQUNILENBQUM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3RDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUM3RixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN0QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2QsT0FBTztvQkFDVCxDQUFDO29CQUNELFFBQVEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO29CQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQVU7UUFDN0IsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLGNBQWM7SUFDbkcsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFVO1FBQ2hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxTQUFpQjtRQUN0QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsdUNBQXVDO1FBQ3ZDLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNwRSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLDJCQUEyQjtRQUMzQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRSxTQUFTLENBQ1IsQ0FBQyxHQUE2QyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUcsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtZQUM5RixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVHLENBQUMsRUFBRSxHQUFHLEVBQUU7WUFDTixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQy9CLENBQUMsRUFBRSxHQUFHLEVBQUU7WUFDTixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUNGLENBQUM7SUFDTixDQUFDO0lBRU8sb0JBQW9CLENBQUMsTUFBb0I7UUFFL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixPQUFPLFlBQVksQ0FBQyxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMzQixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7WUFFbEIsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFdEMscURBQXFEO2dCQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7cUJBQ2pELFNBQVMsQ0FDUixDQUFDLEdBQTBDLEVBQUUsRUFBRTtvQkFDN0MsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ3RELENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO29CQUN2QyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2YsQ0FBQyxFQUFFLEdBQUcsRUFBRTtvQkFDTixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztvQkFDdkMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNmLENBQUMsQ0FDRixDQUFDO1lBQ04sQ0FBQztpQkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUUvQyxtRUFBbUU7Z0JBQ25FLEtBQUssR0FBRyxNQUFNLENBQUMsZUFBZTtvQkFDNUIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUM7b0JBQ3hDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJO29CQUM1QixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBVztvQkFDbkMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ3JFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7b0JBQ3ZCLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRO29CQUNyRCxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssV0FBVyxDQUFDO2dCQUMzRCxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2YsQ0FBQztpQkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFFN0YsNkVBQTZFO2dCQUM3RSxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztxQkFDdEUsU0FBUyxDQUNSLENBQUMsR0FBMEMsRUFBRSxFQUFFO29CQUM3QyxLQUFLLEdBQUcsTUFBTSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUVoRiwwREFBMEQ7b0JBQzFELDBDQUEwQztvQkFDMUMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUNsRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO3dCQUNuQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDM0YsQ0FBQztvQkFFRCxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztvQkFDdkMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNmLENBQUMsRUFBRSxHQUFHLEVBQUU7b0JBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7b0JBQ3ZDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZixDQUFDLENBQ0YsQ0FBQztZQUNOLENBQUM7aUJBQU0sQ0FBQztnQkFDTixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxZQUFZO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkYsWUFBWSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFdBQVcsQ0FBQyxZQUEwQixFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFdkQsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjO2FBQ2hCLGNBQWMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUM7YUFDeEQsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUNiLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ2QsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDcEcsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDdkYsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxjQUFjO3lCQUNoQiwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt5QkFDckUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDbEUsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLENBQUMsRUFDQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxFQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQzlELENBQUM7UUFDSixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN6QixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQWM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssaUJBQWlCLENBQUMsS0FBZ0I7UUFDeEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsS0FBcUI7UUFDOUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNGLENBQUM7OEdBOWdCVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiwrSkN4Qm5DLDRwTkErSkE7OzJGRHZJYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsbUJBQW1CO2lWQU1QLFNBQVM7c0JBQTlCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7b2YgYXMgb2JzZXJ2YWJsZU9mLCBmb3JrSm9pbiBhcyBvYnNlcnZhYmxlRm9ya0pvaW4sIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIE9iamVjdFR5cGUsXG4gIEV2ZW50U2VydmljZSxcbiAgRW5haW9FdmVudCxcbiAgVXBsb2FkUmVnaXN0cnlTZXJ2aWNlLFxuICBVcGxvYWRUYXJnZXQsXG4gIFVwbG9hZEZpbGVJdGVtLFxuICBQcmVwYXJlU2VydmljZSxcbiAgVXRpbHMsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsXG4gIEVudmlyb25tZW50RW5haW8sIFN5c3RlbVNlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlLFxuICBMb2NhbFN0b3JhZ2VTZXJ2aWNlXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0FnZW50U2VydmljZSwgTG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uLy4uL2VvLWZyYW1ld29yay1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tdXBsb2FkLW92ZXJsYXknLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtb3ZlcmxheS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZE92ZXJsYXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXlFbDogRWxlbWVudFJlZjtcblxuICBxdWV1ZTogVXBsb2FkRmlsZUl0ZW1bXSA9IFtdO1xuICBmaWxlT3ZlcjogYm9vbGVhbjtcbiAgaXNVcGxvYWRpbmc6IGJvb2xlYW47XG4gIGhhc1ZhbGlkVXBsb2FkVGFyZ2V0czogYm9vbGVhbjtcbiAgaW52YWxpZElucHV0OiBib29sZWFuO1xuICBxdWV1ZVNpemU6IG51bWJlcjtcbiAgdmFsaWRVcGxvYWRUYXJnZXRzOiBVcGxvYWRUYXJnZXRbXSA9IFtdO1xuICBzZWxlY3RlZFVwbG9hZFRhcmdldDogVXBsb2FkVGFyZ2V0O1xuICBmb2xkZXJGYXZvcml0ZXM6IFVwbG9hZFRhcmdldFtdID0gW107XG4gIGxhc3RPcGVuZWRGb2xkZXI6IFVwbG9hZFRhcmdldFtdID0gW107XG4gIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgYWdlbnRBY2NTZWxlY3RlZDogYm9vbGVhbjtcbiAgZmF2b3JpdGVzQWNjU2VsZWN0ZWQ6IGJvb2xlYW47XG5cbiAgdGFyZ2V0VHlwZXMgPSBbXG4gICAge1xuICAgICAgdHlwZTogJ3Jvb3QnLFxuICAgICAgaWNvblNyYzogJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY3JlYXRlX2RvY3VtZW50LnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtZ2VuZXJhbCcsXG4gICAgICBuYW1lOiAnZW8udXBsb2FkLmdsb2JhbC5yb290LnRpdGxlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnZW8udXBsb2FkLmdsb2JhbC5yb290LmRlc2NyaXB0aW9uJ1xuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBpY29uU3JjOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19kb2N1bWVudF9maWxlLnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtcmVwbGFjZScsXG4gICAgICBuYW1lOiAnZW8udXBsb2FkLmdsb2JhbC5vYmplY3QudGl0bGUnXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnY29udGV4dCcsXG4gICAgICBpY29uU3JjOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jcmVhdGVfZG9jdW1lbnRfaW5fZm9sZGVyLnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtY29udGV4dCcsXG4gICAgICBuYW1lOiAnZW8udXBsb2FkLmdsb2JhbC5jb250ZXh0LnRpdGxlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdjb250ZXh0dHJlZScsXG4gICAgICBpY29uU3JjOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jcmVhdGVfZG9jdW1lbnRfaW5fZm9sZGVyLnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtY29udGV4dHRyZWUnLFxuICAgICAgbmFtZTogJ2VvLmFkZC50aXRsZS5sb2NhdGlvbi5zdWJmb2xkZXInXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgIGljb25TcmM6ICdhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3VwbG9hZC5zdmcnLFxuICAgICAgdGFyZ2V0Q2xhc3M6ICd1cGxvYWQtdGFyZ2V0LWN1c3RvbScsXG4gICAgICBuYW1lOiAnJyxcbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSB1cGxvYWRUYXJnZXRzOiBVcGxvYWRUYXJnZXRbXSA9IFtdO1xuICBwcml2YXRlIGRyYWdMZWF2ZUxpc3RlbmVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBkcm9wTGlzdGVuZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGRyYWdPdmVyTGlzdGVuZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGVzY0tleUxpc3RlbmVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBkcmFnRW50ZXJMaXN0ZW5lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgcGFzdGVMaXN0ZW5lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgZHJhZ0V2ZW50Q291bnQgPSAwO1xuICBwcml2YXRlIGNhY2hlS2V5ID0gJ2FjY29yZGlvbi5zdGF0ZS0tJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHByZXBhcmVTZXJ2aWNlOiBQcmVwYXJlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGFnZW50U2VydmljZTogQWdlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1cGxvYWRSZWdpc3RyeTogVXBsb2FkUmVnaXN0cnlTZXJ2aWNlKSB7XG4gICAgdGhpcy5kYXRlUGlwZSA9IG5ldyBMb2NhbGVEYXRlUGlwZSh0cmFuc2xhdGUpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kcmFnRW50ZXJMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kcmFnRW50ZXJMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZWVkIHVwbG9hZCB3aXRoIGEgc2VsZWN0ZWQgdXBsb2FkIHRhcmdldC5cbiAgICogQHBhcmFtIHVwbG9hZFRhcmdldCAtIHRoZSB0YXJnZXQgdG8gdXBsb2FkIGZpbGVzIHRvXG4gICAqL1xuICBwdWJsaWMgcHJvY2VlZFdpdGhVcGxvYWQodXBsb2FkVGFyZ2V0OiBVcGxvYWRUYXJnZXQpOiB2b2lkIHtcblxuICAgIGlmICh1cGxvYWRUYXJnZXQudHlwZSAhPT0gVXBsb2FkVGFyZ2V0LkNVU1RPTSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZvciBtb3JlIHRoYW4gb25lIGZpbGUgdG8gYmUgdXBsb2FkZWQgdG8gYSBub25lIGN1c3RvbSB0YXJnZXQsIHdlIGxldCB0aGUgdXNlciBkZWNpZGUgaWZcbiAgICAgIC8vIGJhdGNoIHVwbG9hZCBzaG91bGQgYmUgdXNlZCBvciBub3QgLi4uXG5cblxuICAgICAgdGhpcy5zZWxlY3RlZFVwbG9hZFRhcmdldCA9IHVwbG9hZFRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHVwbG9hZFRhcmdldC50eXBlID09PSBVcGxvYWRUYXJnZXQuT0JKRUNUKSB7XG4gICAgICAvLyAuLi4gb3RoZXJ3aXNlIHVwbG9hZCBpcyBzdGFydGVkIGltbWVkaWF0ZWx5XG4gICAgICB0aGlzLnN0YXJ0VXBsb2FkKHVwbG9hZFRhcmdldCwgW251bGwsIHRoaXMuZ2V0U3RhdGVSb3V0ZSgpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRVcGxvYWQodXBsb2FkVGFyZ2V0LCBbbnVsbCwgJy9wcmVwYXJlJ10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZWVkIHVwbG9hZCB1c2luZyB0aGUgc2VsZWN0ZWQgdXBsb2FkIHRhcmdldC5cbiAgICogQHBhcmFtIHVzZUJhdGNoVXBsb2FkIC0gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIHVzZSBiYXRjaCB1cGxvYWRcbiAgICovXG4gIHB1YmxpYyBwcm9jZWVkV2l0aFNlbGVjdGVkVGFyZ2V0KHVzZUJhdGNoVXBsb2FkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdGFydFVwbG9hZCh0aGlzLnNlbGVjdGVkVXBsb2FkVGFyZ2V0LCBbdXNlQmF0Y2hVcGxvYWQsICcvcHJlcGFyZSddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHNlbGVjdGVkIHVwbG9hZCB0YXJnZXQuXG4gICAqL1xuICBwdWJsaWMgcmVzZXRTZWxlY3RlZFVwbG9hZFRhcmdldCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkVGFyZ2V0ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZmlsZSBmcm9tIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGJlIHVwbG9hZGVkLlxuICAgKiBAcGFyYW0gZmlsZUl0ZW0gLSB0aGUgZmlsZSBpdGVtIHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWxlSXRlbShmaWxlSXRlbTogVXBsb2FkRmlsZUl0ZW0pOiB2b2lkIHtcblxuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gZmlsZUl0ZW0uaWQpO1xuICAgIGlmICghdGhpcy5xdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlIGF2YWlsYWJsZSB1cGxvYWQgdGFyZ2V0cyBiZWNhdXNlIHRoZWlyIHZhbGlkaXR5XG4gICAgICAvLyBtYXkgYmUgYmFzZWQgb24gdGhlIHF1ZXVlIHNpemVcbiAgICAgIHRoaXMudmFsaWRhdGVVcGxvYWRUYXJnZXRzKCk7XG4gICAgICB0aGlzLnNldFF1ZXVlU2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRlUm91dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIudXJsO1xuICB9XG5cbiAgb25BZ2VudFRvZ2dsZShpbmZvOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnYWdlbnQtZm9sZGVyJywgSlNPTi5zdHJpbmdpZnkoaW5mbykpO1xuICB9XG5cbiAgb25GYXZvcml0ZVRvZ2dsZShpbmZvOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnZmF2b3JpdGUtZm9sZGVyJywgSlNPTi5zdHJpbmdpZnkoaW5mbykpO1xuICB9XG5cbiAgZ2V0Rm9sZGVyKCk6IHZvaWQge1xuICAgIC8vZm9sZGVyIGZyb20gYWdlbnRcbiAgICB0aGlzLmFnZW50U2VydmljZS5nZXRMYXN0T3BlbmVkRm9sZGVyc0luZm8oKS5zdWJzY3JpYmUoKHJlczogW10pOiB2b2lkID0+IHtcbiAgICAgIHRoaXMubGFzdE9wZW5lZEZvbGRlciA9IHJlcy5tYXAoKGl0ZW06IHt0aXRsZTogc3RyaW5nOyBkYXRhOiB7ZGVzY3JpcHRpb246IHN0cmluZ307IGlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZ30pID0+IHtcbiAgICAgICAgbGV0IHRhcmdldCA9IG5ldyBVcGxvYWRUYXJnZXQoXG4gICAgICAgICAgaXRlbS5pZCxcbiAgICAgICAgICAnYWdlbnQnLFxuICAgICAgICAgIGl0ZW0/LnRpdGxlLFxuICAgICAgICAgIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKGl0ZW0udHlwZSkuaWNvbklkLFxuICAgICAgICAgIGl0ZW0udHlwZVxuICAgICAgICApO1xuICAgICAgICB0YXJnZXQuZGVzY3JpcHRpb24gPSBpdGVtPy5kYXRhPy5kZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sYXN0T3BlbmVkRm9sZGVyLmZvckVhY2godGFyZ2V0ID0+IHRhcmdldC5vblVwbG9hZFN1Y2Nlc3MgPSAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wcmVwYXJlJ10pKTtcbiAgICB9KTtcblxuICAgIC8vIEZvbGRlciBmcm9tIGZhdm9yaXRlXG4gICAgdGhpcy51c2VyU2VydmljZS5nZXRGYXZvcml0ZXMoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgY29uc3QgZmF2b3JpdGVzRmlsdGVyZWQgPSByZXMuZmlsdGVyKChpdGVtOiB7dGFyZ2V0OiB7Zm9sZGVyOiBib29sZWFufX0pID0+IGl0ZW0udGFyZ2V0LmZvbGRlciA9PT0gdHJ1ZSk7XG4gICAgICB0aGlzLmZvbGRlckZhdm9yaXRlcyA9IGZhdm9yaXRlc0ZpbHRlcmVkLm1hcChpdGVtID0+IHtcbiAgICAgICAgbGV0IHRhcmdldCA9IG5ldyBVcGxvYWRUYXJnZXQoXG4gICAgICAgICAgaXRlbS50YXJnZXQuaWQsXG4gICAgICAgICAgJ2Zhdm9yaXRlJyxcbiAgICAgICAgICBpdGVtLnRpdGxlLFxuICAgICAgICAgIGl0ZW0udGFyZ2V0Lmljb24uaWQsXG4gICAgICAgICAgaXRlbS50YXJnZXQudHlwZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGFyZ2V0LmRlc2NyaXB0aW9uID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oaXRlbS5jcmVhdGVkKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb2xkZXJGYXZvcml0ZXMuZm9yRWFjaCh0YXJnZXQgPT4gdGFyZ2V0Lm9uVXBsb2FkU3VjY2VzcyA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3ByZXBhcmUnXSkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSB1cGxvYWQgb3ZlcmxheSBhbmQgcmVsZWFzZSBhbGwgYm91bmQgcmVzb3VyY2VzLlxuICAgKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgLy8gdW5iaW5kIGJvdW5kIGV2ZW50IGxpc3RlbmVyLCB3aGVuIHRoZXkgYXJlIG5vdCBuZWVkZWQgYW55bW9yZVxuICAgIHRoaXMudW5iaW5kTGlzdGVuZXJzKCk7XG4gICAgLy8gY2xlYXIgdXBsb2FkIHF1ZXVlXG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIC8vIGhpZGUgdGhlIG92ZXJsYXlcbiAgICB0aGlzLnNldEZpbGVPdmVyKGZhbHNlKTtcbiAgICB0aGlzLmludmFsaWRJbnB1dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIHRoaXMuZ2V0Rm9sZGVyKCk7XG5cbiAgICAvLyBnbG9iYWwgZHJhZyZkcm9wIHVwbG9hZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIG9uIGRlc2t0b3AgKHdlYiBvciBlbGVjdHJvbilcbiAgICBpZiAoRW52aXJvbm1lbnRFbmFpby5pc01vYmlsZUVudmlyb25tZW50KCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzdWJzY3JpYmUgZm9yIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgdXBsb2FkIHRhcmdldHNcbiAgICB0aGlzLnVwbG9hZFJlZ2lzdHJ5LnVwbG9hZFRhcmdldHMkLnN1YnNjcmliZSgodXBsb2FkVGFyZ2V0czogVXBsb2FkVGFyZ2V0W10pID0+IHtcbiAgICAgIHRoaXMudXBsb2FkVGFyZ2V0cyA9IHVwbG9hZFRhcmdldHM7XG4gICAgfSk7XG5cbiAgICB0aGlzLnBhc3RlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAncGFzdGUnLCAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgIHRoaXMub25QYXN0ZShlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ0VudGVyTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnZHJhZ2VudGVyJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgdGhpcy5vbkRyYWdFbnRlcihlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25QYXN0ZShlOiBDbGlwYm9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaGFzVmFsaWRVcGxvYWRUYXJnZXRzID0gdHJ1ZTtcbiAgICB0aGlzLmludmFsaWRJbnB1dCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5maWxlT3ZlciAmJiB0aGlzLnBhc3RlQ29udGFpbnNGaWxlcyhlKSkge1xuICAgICAgbGV0IHRyYW5zZmVyID0gZS5jbGlwYm9hcmREYXRhO1xuICAgICAgaWYgKCF0cmFuc2Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGZvciBkaXJlY3Rvcmllc1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmFuc2Zlci5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodHJhbnNmZXIuaXRlbXNbaV0ua2luZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmludmFsaWRJbnB1dCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZlID0gdHJhbnNmZXIuaXRlbXNbaV0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgICAgICBpZiAoZmUgJiYgZmUuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICB0aGlzLmludmFsaWRJbnB1dCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaW52YWxpZElucHV0KSB7XG4gICAgICAgIHRoaXMuX3ByZXZlbnRBbmRTdG9wKGUpO1xuICAgICAgICB0aGlzLnNldEZpbGVPdmVyKHRydWUpO1xuICAgICAgICB0aGlzLm9uRmlsZXNEcm9wcGVkKEFycmF5LmZyb20odHJhbnNmZXIuZmlsZXMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZ0VudGVyKGU6IERyYWdFdmVudCkge1xuICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaGFzVmFsaWRVcGxvYWRUYXJnZXRzID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuZmlsZU92ZXIgJiYgdGhpcy5kcmFnQ29udGFpbnNGaWxlcyhlKSkge1xuICAgICAgdGhpcy5kcmFnRXZlbnRDb3VudCA9IDA7XG4gICAgICB0aGlzLnNldEZpbGVPdmVyKHRydWUpO1xuXG4gICAgICAvLyB1c2UgdGltZW91dCBoZXJlIHRvIGZvcmNlIGFuZ3VsYXIgZGlnZXN0IGN5Y2xlIGJlZm9yZSBjb250aW51aW5nLCBiZWNhdXNlIHdlIGFyZSBhY2Nlc3NpbmcgZG9tIGVsZW1lbnRzXG4gICAgICAvLyB0aGF0IGFyZSBub3QgdGhlcmUgKCpuZ0lmKSB1bnRpbCBmaWxlT3ZlciBpcyBzZXQgdG8gdHJ1ZS5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyB0b2RvOiByZXBsYWNlIGJ5IHJlbmRlcmVyIHNvbHV0aW9uIHdoZW4gYXZhaWxhYmxlIChodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNTY3NClcbiAgICAgICAgdGhpcy5vdmVybGF5RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAvLyBiaW5kIGxhdGUgKG9ubHksIHdoZW4gbmVlZGVkKSB0byBkcmFnbGVhdmUgZXZlbnQgdG8gYXZvaWQgaGVhdnkgcHJvY2Vzc2luZyBvbiBldmVyeSBkcmFnIGV2ZW50XG4gICAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJhZ2xlYXZlJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZHJhZ0V2ZW50Q291bnQtLTtcbiAgICAgICAgICBpZiAodGhpcy5kcmFnRXZlbnRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kcm9wTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJvcCcsIChldnQpID0+IHtcbiAgICAgICAgICBsZXQgdHJhbnNmZXIgPSB0aGlzLl9nZXRUcmFuc2ZlcihldnQpO1xuICAgICAgICAgIGlmICghdHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZ0KTtcblxuICAgICAgICAgIC8vIGNoZWNrIGZvciBkaXJlY3Rvcmllc1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNmZXIuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZlID0gdHJhbnNmZXIuaXRlbXNbaV0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgICAgICAgICAgaWYgKGZlICYmIGZlLmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICAgIHRoaXMuaW52YWxpZElucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmludmFsaWRJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5vbkZpbGVzRHJvcHBlZCh0cmFuc2Zlci5maWxlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyYWdPdmVyTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJhZ292ZXInLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgbGV0IHRyYW5zZmVyID0gdGhpcy5fZ2V0VHJhbnNmZXIoZXZ0KTtcbiAgICAgICAgICBpZiAoIXRyYW5zZmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmFnRXZlbnRDb3VudCsrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFRyYW5zZmVyKGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBldmVudC5kYXRhVHJhbnNmZXIgPyBldmVudC5kYXRhVHJhbnNmZXIgOiBldmVudC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjsgLy8galF1ZXJ5IGZpeDtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXZlbnRBbmRTdG9wKGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZXNEcm9wcGVkKGZpbGVJdGVtczogRmlsZVtdKSB7XG4gICAgdGhpcy5nZXRGb2xkZXIoKTtcbiAgICB0aGlzLmdldENhY2hlZEFjY29yZGlvblN0YXRlKCk7XG4gICAgLy8gY2xlYXIgcXVldWUgd2hlbiBuZXcgZmlsZXMgYXJlIGFkZGVkXG4gICAgLy8gdG9kbzogcmVtb3ZlIGluIGZ1dHVyZSByZWxlYXNlcyB0byBzdXBwb3J0IGNvbGxlY3RpdmUgZmlsZSBhZGRpbmdcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlSXRlbXMpIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChuZXcgVXBsb2FkRmlsZUl0ZW0oZmlsZSkpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgRVNDIGtleSBsaXN0ZW5lciBmb3IgY2xvc2luZyB0aGUgZGlhbG9nIGFzIGxhdGUgYXMgcG9zc2libGVcbiAgICBpZiAoIXRoaXMuZXNjS2V5TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAna2V5dXAnLCAoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGNhbGN1bGF0ZSB0b3RhbCBzaXplIG9mIHF1ZXVlXG4gICAgdGhpcy5zZXRRdWV1ZVNpemUoKTtcbiAgICAvLyBmaWx0ZXIgYXZhaWxhYmxlIHRhcmdldHNcbiAgICB0aGlzLnZhbGlkYXRlVXBsb2FkVGFyZ2V0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBsaXN0IG9mIHJlZ2lzdGVyZWQgdXBsb2FkIHRhcmdldHMsIHNvIG9ubHkgdmFsaWQgdGFyZ2V0cyB3aWxsIGJlIHNob3duLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVwbG9hZFRhcmdldHMoKSB7XG4gICAgdGhpcy5oYXNWYWxpZFVwbG9hZFRhcmdldHMgPSB0cnVlO1xuICAgIHRoaXMuZ2V0Rm9sZGVyKCk7XG4gICAgb2JzZXJ2YWJsZUZvcmtKb2luKHRoaXMudXBsb2FkVGFyZ2V0cy5tYXAodCA9PiB0aGlzLnZhbGlkYXRlVXBsb2FkVGFyZ2V0KHQpKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IHt0YXJnZXQ6IFVwbG9hZFRhcmdldDsgdmFsaWQ6IGJvb2xlYW59W10pID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IHJlcy5maWx0ZXIociA9PiByLnZhbGlkKS5tYXAoZmlsdGVyZWQgPT4gZmlsdGVyZWQudGFyZ2V0KS5yZXZlcnNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEudHlwZSA9PT0gJ2NvbnRleHQnID8gLTEgOiBiLnR5cGUgPT09ICdjb250ZXh0JyA/IDEgOiAwOyAvLyBDb250ZXh0IHNob3VsZCBiZSBvbiB0b3BcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IFsuLi50aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cywgLi4udGhpcy5mb2xkZXJGYXZvcml0ZXMsIC4uLnRoaXMubGFzdE9wZW5lZEZvbGRlcl07XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IFtdO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYXNWYWxpZFVwbG9hZFRhcmdldHMgPSB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cy5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVwbG9hZFRhcmdldCh0YXJnZXQ6IFVwbG9hZFRhcmdldCk6IE9ic2VydmFibGU8e3RhcmdldDogVXBsb2FkVGFyZ2V0OyB2YWxpZDogYm9vbGVhbn0+IHtcblxuICAgIGlmICghdGhpcy5xdWV1ZSkge1xuICAgICAgcmV0dXJuIG9ic2VydmFibGVPZih7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZShvID0+IHtcbiAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5ST09UKSB7XG5cbiAgICAgICAgLy8gdG9kbzogYXJlIHRoZXJlIG90aGVyIHJlc3RyaWN0aW9ucyBvbiByb290IHRhcmdldD9cbiAgICAgICAgdGhpcy5wcmVwYXJlU2VydmljZS5nZXRQcmVwYXJlQ2hpbGRUeXBlcyhudWxsLCB0cnVlKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAocmVzOiB7cGFyZW50OiBzdHJpbmc7IHR5cGVzOiBPYmplY3RUeXBlW119KSA9PiB7XG4gICAgICAgICAgICAgIHZhbGlkID0gdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHJlcy50eXBlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogdmFsaWR9KTtcbiAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogZmFsc2V9KTtcbiAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC50eXBlID09PSBVcGxvYWRUYXJnZXQuT0JKRUNUKSB7XG5cbiAgICAgICAgLy8gdG9kbzogY2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBvYmplY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIGZpbGUgdHlwZVxuICAgICAgICB2YWxpZCA9IHRhcmdldC5yZWZlcmVuY2VPYmplY3QgJiZcbiAgICAgICAgICB0YXJnZXQucmVmZXJlbmNlT2JqZWN0LnR5cGUubWF4RmlsZXMgPiAwICYmXG4gICAgICAgICAgIXRhcmdldC5yZWZlcmVuY2VPYmplY3QubG9jayAmJlxuICAgICAgICAgICF0YXJnZXQucmVmZXJlbmNlT2JqZWN0LmlzRmluYWxpemVkICYmXG4gICAgICAgICAgKHRhcmdldC5yZWZlcmVuY2VPYmplY3QucmlnaHRzICYmIHRhcmdldC5yZWZlcmVuY2VPYmplY3QucmlnaHRzLmVkaXQpICYmXG4gICAgICAgICAgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICB0YXJnZXQucmVmZXJlbmNlT2JqZWN0LmRhdGEueXV2c2lnc3RhdHVzICE9PSAnc2lnbmVkJyAmJlxuICAgICAgICAgIHRhcmdldC5yZWZlcmVuY2VPYmplY3QuZGF0YS55dXZzaWdzdGF0dXMgIT09ICdpbnByb2Nlc3MnO1xuICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogdmFsaWR9KTtcbiAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXQudHlwZSA9PT0gVXBsb2FkVGFyZ2V0LkNPTlRFWFQgfHwgdGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5DT05URVhUX1RSRUUpIHtcblxuICAgICAgICAvLyB0b2RvOiBhZGQgY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIHJlZmVyZW5jZSBvYmplY3QgKGUuZy4gYWxsb3dlZCBmaWxlIHR5cGVzKVxuICAgICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFByZXBhcmVDaGlsZFR5cGVzKHRhcmdldC5yZWZlcmVuY2VPYmplY3QuaWQsIHRydWUpXG4gICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgIChyZXM6IHtwYXJlbnQ6IHN0cmluZzsgdHlwZXM6IE9iamVjdFR5cGVbXX0pID0+IHtcbiAgICAgICAgICAgICAgdmFsaWQgPSB0YXJnZXQucmVmZXJlbmNlT2JqZWN0ICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiByZXMudHlwZXMubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgICAvLyBmb3IgQ09OVEVYVF9UUkVFIHRhcmdldHMgYWxzbyBjaGVjayBpZiB0aGUgZGVzaXJlZCBub2RlXG4gICAgICAgICAgICAgIC8vIHR5cGUgaXMgcGFydCBvZiB0aGUgcHJlcGFyZSBjaGlsZCB0eXBlc1xuICAgICAgICAgICAgICBpZiAodGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5DT05URVhUX1RSRUUgJiYgdGFyZ2V0LnN1YkZvbGRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlciA9IHRhcmdldC5zdWJGb2xkZXI7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSAhIXJlcy50eXBlcy5maW5kKHQgPT4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmltcGxlbWVudHNUeXBlKHQsIHN1YkZvbGRlci5kYXRhLnR5cGUpKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiB2YWxpZH0pO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiBmYWxzZX0pO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiBmYWxzZX0pO1xuICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENhY2hlZEFjY29yZGlvblN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuYWdlbnRBY2NTZWxlY3RlZCA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnYWdlbnQtZm9sZGVyJykpO1xuICAgIHRoaXMuZmF2b3JpdGVzQWNjU2VsZWN0ZWQgPSBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSh0aGlzLmNhY2hlS2V5ICsgJ2Zhdm9yaXRlLWZvbGRlcicpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc2Z1bFVwbG9hZCh0YXJnZXQsIHVwbG9hZFRhcmdldCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnRyaWdnZXIoRW5haW9FdmVudC5ETVNfT0JKRUNUX1VQREFURUQsIHVwbG9hZFRhcmdldC5yZWZlcmVuY2VPYmplY3QpO1xuICAgIHVwbG9hZFRhcmdldC5vblVwbG9hZFN1Y2Nlc3ModGFyZ2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgYWN0dWFsIHVwbG9hZC5cbiAgICogQHBhcmFtIHVwbG9hZFRhcmdldCAtIHRhcmdldCB0byB1cGxvYWQgdGhlIGZpbGVzIHRvXG4gICAqIEBwYXJhbSB1c2VCYXRjaFVwbG9hZCAtIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byB1c2UgYmF0Y2ggdXBsb2FkXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0VXBsb2FkKHVwbG9hZFRhcmdldDogVXBsb2FkVGFyZ2V0LCBbLi4uYXJnc10pOiB2b2lkIHtcblxuICAgIGNvbnN0IFt1c2VCYXRjaFVwbG9hZCwgdGFyZ2V0XSA9IGFyZ3M7XG5cbiAgICB0aGlzLmlzVXBsb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnVuYmluZExpc3RlbmVycygpO1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC51cGxvYWRUb1RhcmdldCh1cGxvYWRUYXJnZXQsIHRoaXMucXVldWUsIHVzZUJhdGNoVXBsb2FkKVxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHVwbG9hZFRhcmdldC5zdWJGb2xkZXIgJiYgdXBsb2FkVGFyZ2V0LnN1YkZvbGRlci5kYXRhLmRhdGEpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICAgICAgICBsZXQgb2JzID0gW107XG4gICAgICAgICAgICByZXMuZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgICAgb2JzLnB1c2godGhpcy5wcmVwYXJlU2VydmljZS51cGRhdGVQcmVwYXJlZEl0ZW1JbmRleERhdGEoci5pZCwgdXBsb2FkVGFyZ2V0LnN1YkZvbGRlci5kYXRhLmRhdGEpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZUZvcmtKb2luKG9icykuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3VjY2Vzc2Z1bFVwbG9hZCh0YXJnZXQsIHVwbG9hZFRhcmdldCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAgICAgICAgIC51cGRhdGVQcmVwYXJlZEl0ZW1JbmRleERhdGEocmVzLmlkLCB1cGxvYWRUYXJnZXQuc3ViRm9sZGVyLmRhdGEuZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN1Y2Nlc3NmdWxVcGxvYWQodGFyZ2V0LCB1cGxvYWRUYXJnZXQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzZnVsVXBsb2FkKHRhcmdldCwgdXBsb2FkVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9LCBVdGlscy50aHJvdygoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdXBsb2FkVGFyZ2V0Lm9uVXBsb2FkRmFpbCgpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9LFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby51cGxvYWQuZ2xvYmFsLmVycm9yLnRpdGxlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVwbG9hZC5nbG9iYWwuZXJyb3IuZGVzY3JpcHRpb24nKSlcbiAgICAgICk7XG4gICAgdGhpcy5yZXNldFNlbGVjdGVkVXBsb2FkVGFyZ2V0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldFF1ZXVlU2l6ZSgpOiB2b2lkIHtcbiAgICBsZXQgcyA9IDA7XG4gICAgZm9yIChsZXQgZiBvZiB0aGlzLnF1ZXVlKSB7XG4gICAgICBzICs9IGYuc2l6ZTtcbiAgICB9XG4gICAgdGhpcy5xdWV1ZVNpemUgPSBzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGaWxlT3Zlcih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZmlsZU92ZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnVwbG9hZFJlZ2lzdHJ5LnNldE92ZXJsYXlBY3RpdmUodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmJpbmRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcmFnT3Zlckxpc3RlbmVyKSB7XG4gICAgICB0aGlzLmRyYWdPdmVyTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJhZ092ZXJMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3BMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kcm9wTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJvcExpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXNjS2V5TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgZHJhZyBldmVudCBjb250YWlucyBvbmUgb3IgbW9yZSBmaWxlcy5cbiAgICogQHBhcmFtIGV2ZW50IC0gdGhlIGRyYWcgZXZlbnQgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBudW1iZXIgb2YgZmlsZXNcbiAgICovXG4gIHByaXZhdGUgZHJhZ0NvbnRhaW5zRmlsZXMoZXZlbnQ6IERyYWdFdmVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zIHx8IFtdKS5maWx0ZXIoaSA9PiBpLmtpbmQgPT09ICdmaWxlJykubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBwYXN0ZSBldmVudCBjb250YWlucyBvbmUgb3IgbW9yZSBmaWxlcy5cbiAgICogQHBhcmFtIGV2ZW50IC0gdGhlIHBhc3RlIGV2ZW50IHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgbnVtYmVyIG9mIGZpbGVzXG4gICAqL1xuICBwcml2YXRlIHBhc3RlQ29udGFpbnNGaWxlcyhldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMgfHwgW10pLmZpbHRlcihpID0+IGkua2luZCA9PT0gJ2ZpbGUnKS5sZW5ndGg7XG4gIH1cbn1cbiIsIjxkaXYgaWQ9XCJlby11cGxvYWQtb3ZlcmxheVwiICNvdmVybGF5IGNsYXNzPVwiZGFya1wiICpuZ0lmPVwiZmlsZU92ZXJcIiB0YWJpbmRleD1cIjFcIlxuICBbbmdDbGFzc109XCJ7ZmlsZTogcXVldWUubGVuZ3RoLCBpbnZhbGlkOiBpbnZhbGlkSW5wdXQsIHVwbG9hZGluZzogaXNVcGxvYWRpbmd9XCI+XG5cbiAgPGVvLWljb24gY2xhc3M9XCJidXR0b24gd2hpdGUgY2xvc2VcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCIgKGNsaWNrKT1cImNsb3NlKClcIj48L2VvLWljb24+XG5cbiAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgPGRpdj57e3F1ZXVlLmxlbmd0aH19PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInF1ZXVlU2l6ZVwiPnt7cXVldWVTaXplIHwgZmlsZVNpemV9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaGVhZGxpbmVcIj5cbiAgICA8aDEgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaGVhZGxpbmU8L2gxPlxuICA8L2Rpdj5cbiAgXG4gIDxlby1pY29uIGNsYXNzPVwidXBsb2FkeVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3VwbG9hZC5zdmcnXCI+PC9lby1pY29uPlxuXG4gIDwhLS0gYmF0Y2ggdXBsb2FkIGRpYWxvZyAtLT5cbiAgPGRpdiBjbGFzcz1cImJhdGNoLWRpYWxvZ1wiICpuZ0lmPVwiIWludmFsaWRJbnB1dCAmJiBzZWxlY3RlZFVwbG9hZFRhcmdldCAmJiAhaXNVcGxvYWRpbmdcIj5cblxuICAgIDxoMiB0cmFuc2xhdGU+ZW8udXBsb2FkLmdsb2JhbC5jaG9vc2UudGl0bGU8L2gyPlxuICAgIDxwIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNob29zZS5tZXNzYWdlPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJyZXNldFNlbGVjdGVkVXBsb2FkVGFyZ2V0KClcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cInByb2NlZWRXaXRoU2VsZWN0ZWRUYXJnZXQoZmFsc2UpXCIgY2xhc3M9XCJwcmltYXJ5XCJcbiAgICAgICAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuY2hvb3NlLnNpbmdsZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicHJvY2VlZFdpdGhTZWxlY3RlZFRhcmdldCh0cnVlKVwiIGNsYXNzPVwicHJpbWFyeVwiIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNob29zZS5tdWx0aTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIGludmFsaWQgaW5wdXQgZGlhbG9nIC0tPlxuICA8ZGl2IGNsYXNzPVwiYmF0Y2gtZGlhbG9nXCIgKm5nSWY9XCJoYXNWYWxpZFVwbG9hZFRhcmdldHMgJiYgaW52YWxpZElucHV0XCI+XG5cbiAgICA8aDIgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaW52YWxpZC50aXRsZTwvaDI+XG4gICAgPHAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaW52YWxpZC5tZXNzYWdlPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCIgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuY2xvc2U8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBubyB1cGxvYWQgdGFyZ2V0cyBhdmFpbGFibGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJiYXRjaC1kaWFsb2dcIiAqbmdJZj1cIiFoYXNWYWxpZFVwbG9hZFRhcmdldHNcIj5cblxuICAgIDxoMiB0cmFuc2xhdGU+ZW8udXBsb2FkLmdsb2JhbC5ub3RhcmdldC50aXRsZTwvaDI+XG4gICAgPHAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwubm90YXJnZXQubWVzc2FnZTwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNsb3NlPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb250ZW50c1wiICpuZ0lmPVwiaGFzVmFsaWRVcGxvYWRUYXJnZXRzICYmICFpbnZhbGlkSW5wdXQgJiYgIXNlbGVjdGVkVXBsb2FkVGFyZ2V0ICYmICFpc1VwbG9hZGluZ1wiPlxuXG4gICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDwhLS0gbGlzdCBvZiBhdmFpbGFibGUgdXBsb2FkIHRhcmdldHMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0c1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0LWxpc3RcIj5cbiAgICAgICAgICBAZm9yICh0YXJnZXRUeXBlIG9mIHRhcmdldFR5cGVzOyB0cmFjayB0YXJnZXRUeXBlLnR5cGUpIHtcbiAgICAgICAgICAgIEBmb3IgKHQgb2YgdmFsaWRVcGxvYWRUYXJnZXRzOyB0cmFjayB0LmlkKSB7XG4gICAgICAgICAgICAgIEBpZiAodC50eXBlID09PSB0YXJnZXRUeXBlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkVGFyZ2V0VGVtcGxhdGU7IGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblNyYzogdGFyZ2V0VHlwZS5pY29uU3JjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDbGFzczogdGFyZ2V0VHlwZS50YXJnZXRDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGFyZ2V0VHlwZS50eXBlID09PSAnY3VzdG9tJyA/IHQubmFtZSA6ICh0YXJnZXRUeXBlLnR5cGUgPT09ICdjb250ZXh0JyA/ICAgICAgKHRhcmdldFR5cGUubmFtZSB8IHRyYW5zbGF0ZSA6IHsgY29udGV4dDogdC5yZWZlcmVuY2VPYmplY3QudHlwZS5sYWJlbCB9KSA6ICAgICAodGFyZ2V0VHlwZS4gbmFtZSB8IHRyYW5zbGF0ZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGFyZ2V0VHlwZS50eXBlID09PSAnY3VzdG9tJyB8fCB0YXJnZXRUeXBlLnR5cGUgPT09ICdvYmplY3QnIHx8ICAgIHRhcmdldFR5cGUuICB0eXBlID09PSAnY29udGV4dCcgPyB0LmRlc2NyaXB0aW9uIDogKHRhcmdldFR5cGUuZGVzY3JpcHRpb24gfCAgIHRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHM6IHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSB1cGxvYWQgdG8gZmF2b3JpdGUgLS0+XG4gICAgICBAaWYgKGZvbGRlckZhdm9yaXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uIFtzZWxlY3RlZF09XCJmYXZvcml0ZXNBY2NTZWxlY3RlZFwiIFtoZWFkZXJdPVwiJ2VvLnVwbG9hZC5nbG9iYWwuY29udGV4dC5mYXZvcml0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIm9uRmF2b3JpdGVUb2dnbGUoJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXJnZXRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0LWxpc3RcIj5cbiAgICAgICAgICAgICAgQGZvciAodCBvZiB2YWxpZFVwbG9hZFRhcmdldHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBpZiAodC50eXBlID09PSAnZmF2b3JpdGUnKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRhcmdldFwiIChjbGljayk9XCJwcm9jZWVkV2l0aFVwbG9hZCh0KVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidC5pY29uSWRcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10YXJnZXQtZmF2b3JpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+e3t0LnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t0LmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZW8tc2ltcGxlLWFjY29yZGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmKGxhc3RPcGVuZWRGb2xkZXIubGVuZ3RoID4gMCl7XG4gICAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uIFtzZWxlY3RlZF09XCJhZ2VudEFjY1NlbGVjdGVkXCIgW2hlYWRlcl09XCInZW8udXBsb2FkLmdsb2JhbC5jb250ZXh0LmFnZW50JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RDaGFuZ2UpPVwib25BZ2VudFRvZ2dsZSgkZXZlbnQpXCI+XG4gICAgICAgICAgPCEtLSB1cGxvYWQgdG8gbGFzdCBvcGVuZWQgZm9sZGVyICAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0c1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldC1saXN0XCI+XG4gICAgICAgICAgICAgIEBmb3IgKHQgb2YgdmFsaWRVcGxvYWRUYXJnZXRzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBAaWYgKHQudHlwZSA9PT0gJ2FnZW50Jykge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10YXJnZXRcIiAoY2xpY2spPVwicHJvY2VlZFdpdGhVcGxvYWQodClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvbklkXT1cInQuaWNvbklkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdGFyZ2V0LWFnZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPnt7dD8udGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3Q/LmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZW8tc2ltcGxlLWFjY29yZGlvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8IS0tIGxpc3Qgb2YgZmlsZXMgZHJhZ2dlZCB0byB0aGUgY29tcG9uZW50IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmaWxlc1wiIFtuZ0NsYXNzXT1cIntmaWxlOiBxdWV1ZS5sZW5ndGgsIGludmFsaWQ6IGludmFsaWRJbnB1dCwgdXBsb2FkaW5nOiBpc1VwbG9hZGluZ31cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlcy1saXN0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWl0ZW1cIj5cbiAgICAgICAgICBAZm9yIChpIG9mIHF1ZXVlOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+e3tpLm5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPjxzcGFuIGNsYXNzPVwic2l6ZVwiPnt7aS5zaXplIHwgZmlsZVNpemV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlc2MtdGV4dFwiPiZuYnNwO3t7aS50eXBlfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uIHdoaXRlXCIgKGNsaWNrKT1cInJlbW92ZUZpbGVJdGVtKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICBAaWYgKGlzVXBsb2FkaW5nKSB7XG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmdcIj5cbiAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgW3NpemVdPVwiJ2xhcmdlJ1wiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN1cGxvYWRUYXJnZXRUZW1wbGF0ZSBsZXQtaWNvblNyYz1cImljb25TcmNcIiBsZXQtdGFyZ2V0Q2xhc3M9XCJ0YXJnZXRDbGFzc1wiIGxldC1uYW1lPVwibmFtZVwiXG4gIGxldC1kZXNjcmlwdGlvbj1cImRlc2NyaXB0aW9uXCIgbGV0LXRhcmdldHM9XCJ0YXJnZXRzXCI+XG4gIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdGFyZ2V0XCIgKGNsaWNrKT1cInByb2NlZWRXaXRoVXBsb2FkKHRhcmdldHMpXCI+XG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cImljb25TcmNcIj48L2VvLWljb24+XG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInRhcmdldENsYXNzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+e3sgbmFtZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57eyBkZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdXBsb2FkLW92ZXJsYXkvdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdXBsb2FkLW92ZXJsYXkvdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEVBQUUsSUFBSSxZQUFZLEVBQUUsUUFBUSxJQUFJLGtCQUFrQixFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwRixPQUFPLEVBQUMsU0FBUyxFQUFxQixTQUFTLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBRTdGLE9BQU8sRUFHTCxVQUFVLEVBRVYsWUFBWSxFQUNaLGNBQWMsRUFFZCxLQUFLLEVBRUwsZ0JBQWdCLEVBR2pCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBZSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFPckUsTUFBTSxPQUFPLHNCQUFzQjtJQThEakMsWUFBb0IsTUFBYyxFQUN4QixRQUFtQixFQUNuQixjQUE4QixFQUM5QixTQUEyQixFQUMzQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixhQUE0QixFQUM1QixZQUEwQixFQUMxQixjQUFtQyxFQUNuQyxjQUFxQztRQVQzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdB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QUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsS0FBcUI7UUFDOUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNGLENBQUM7OEdBOWdCVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiwrSkN4Qm5DLHlxTkErSkE7OzJGRHZJYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsbUJBQW1CO2lWQU1QLFNBQVM7c0JBQTlCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7b2YgYXMgb2JzZXJ2YWJsZU9mLCBmb3JrSm9pbiBhcyBvYnNlcnZhYmxlRm9ya0pvaW4sIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIE9iamVjdFR5cGUsXG4gIEV2ZW50U2VydmljZSxcbiAgRW5haW9FdmVudCxcbiAgVXBsb2FkUmVnaXN0cnlTZXJ2aWNlLFxuICBVcGxvYWRUYXJnZXQsXG4gIFVwbG9hZEZpbGVJdGVtLFxuICBQcmVwYXJlU2VydmljZSxcbiAgVXRpbHMsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsXG4gIEVudmlyb25tZW50RW5haW8sIFN5c3RlbVNlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlLFxuICBMb2NhbFN0b3JhZ2VTZXJ2aWNlXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0FnZW50U2VydmljZSwgTG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uLy4uL2VvLWZyYW1ld29yay1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tdXBsb2FkLW92ZXJsYXknLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtb3ZlcmxheS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZE92ZXJsYXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXlFbDogRWxlbWVudFJlZjtcblxuICBxdWV1ZTogVXBsb2FkRmlsZUl0ZW1bXSA9IFtdO1xuICBmaWxlT3ZlcjogYm9vbGVhbjtcbiAgaXNVcGxvYWRpbmc6IGJvb2xlYW47XG4gIGhhc1ZhbGlkVXBsb2FkVGFyZ2V0czogYm9vbGVhbjtcbiAgaW52YWxpZElucHV0OiBib29sZWFuO1xuICBxdWV1ZVNpemU6IG51bWJlcjtcbiAgdmFsaWRVcGxvYWRUYXJnZXRzOiBVcGxvYWRUYXJnZXRbXSA9IFtdO1xuICBzZWxlY3RlZFVwbG9hZFRhcmdldDogVXBsb2FkVGFyZ2V0O1xuICBmb2xkZXJGYXZvcml0ZXM6IFVwbG9hZFRhcmdldFtdID0gW107XG4gIGxhc3RPcGVuZWRGb2xkZXI6IFVwbG9hZFRhcmdldFtdID0gW107XG4gIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgYWdlbnRBY2NTZWxlY3RlZDogYm9vbGVhbjtcbiAgZmF2b3JpdGVzQWNjU2VsZWN0ZWQ6IGJvb2xlYW47XG5cbiAgdGFyZ2V0VHlwZXMgPSBbXG4gICAge1xuICAgICAgdHlwZTogJ3Jvb3QnLFxuICAgICAgaWNvblNyYzogJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY3JlYXRlX2RvY3VtZW50LnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtZ2VuZXJhbCcsXG4gICAgICBuYW1lOiAnZW8udXBsb2FkLmdsb2JhbC5yb290LnRpdGxlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnZW8udXBsb2FkLmdsb2JhbC5yb290LmRlc2NyaXB0aW9uJ1xuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBpY29uU3JjOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19kb2N1bWVudF9maWxlLnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtcmVwbGFjZScsXG4gICAgICBuYW1lOiAnZW8udXBsb2FkLmdsb2JhbC5vYmplY3QudGl0bGUnXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnY29udGV4dCcsXG4gICAgICBpY29uU3JjOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jcmVhdGVfZG9jdW1lbnRfaW5fZm9sZGVyLnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtY29udGV4dCcsXG4gICAgICBuYW1lOiAnZW8udXBsb2FkLmdsb2JhbC5jb250ZXh0LnRpdGxlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdjb250ZXh0dHJlZScsXG4gICAgICBpY29uU3JjOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jcmVhdGVfZG9jdW1lbnRfaW5fZm9sZGVyLnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtY29udGV4dHRyZWUnLFxuICAgICAgbmFtZTogJ2VvLmFkZC50aXRsZS5sb2NhdGlvbi5zdWJmb2xkZXInXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgIGljb25TcmM6ICdhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3VwbG9hZC5zdmcnLFxuICAgICAgdGFyZ2V0Q2xhc3M6ICd1cGxvYWQtdGFyZ2V0LWN1c3RvbScsXG4gICAgICBuYW1lOiAnJyxcbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSB1cGxvYWRUYXJnZXRzOiBVcGxvYWRUYXJnZXRbXSA9IFtdO1xuICBwcml2YXRlIGRyYWdMZWF2ZUxpc3RlbmVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBkcm9wTGlzdGVuZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGRyYWdPdmVyTGlzdGVuZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGVzY0tleUxpc3RlbmVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBkcmFnRW50ZXJMaXN0ZW5lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgcGFzdGVMaXN0ZW5lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgZHJhZ0V2ZW50Q291bnQgPSAwO1xuICBwcml2YXRlIGNhY2hlS2V5ID0gJ2FjY29yZGlvbi5zdGF0ZS0tJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHByZXBhcmVTZXJ2aWNlOiBQcmVwYXJlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGFnZW50U2VydmljZTogQWdlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1cGxvYWRSZWdpc3RyeTogVXBsb2FkUmVnaXN0cnlTZXJ2aWNlKSB7XG4gICAgdGhpcy5kYXRlUGlwZSA9IG5ldyBMb2NhbGVEYXRlUGlwZSh0cmFuc2xhdGUpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kcmFnRW50ZXJMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kcmFnRW50ZXJMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZWVkIHVwbG9hZCB3aXRoIGEgc2VsZWN0ZWQgdXBsb2FkIHRhcmdldC5cbiAgICogQHBhcmFtIHVwbG9hZFRhcmdldCAtIHRoZSB0YXJnZXQgdG8gdXBsb2FkIGZpbGVzIHRvXG4gICAqL1xuICBwdWJsaWMgcHJvY2VlZFdpdGhVcGxvYWQodXBsb2FkVGFyZ2V0OiBVcGxvYWRUYXJnZXQpOiB2b2lkIHtcblxuICAgIGlmICh1cGxvYWRUYXJnZXQudHlwZSAhPT0gVXBsb2FkVGFyZ2V0LkNVU1RPTSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZvciBtb3JlIHRoYW4gb25lIGZpbGUgdG8gYmUgdXBsb2FkZWQgdG8gYSBub25lIGN1c3RvbSB0YXJnZXQsIHdlIGxldCB0aGUgdXNlciBkZWNpZGUgaWZcbiAgICAgIC8vIGJhdGNoIHVwbG9hZCBzaG91bGQgYmUgdXNlZCBvciBub3QgLi4uXG5cblxuICAgICAgdGhpcy5zZWxlY3RlZFVwbG9hZFRhcmdldCA9IHVwbG9hZFRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHVwbG9hZFRhcmdldC50eXBlID09PSBVcGxvYWRUYXJnZXQuT0JKRUNUKSB7XG4gICAgICAvLyAuLi4gb3RoZXJ3aXNlIHVwbG9hZCBpcyBzdGFydGVkIGltbWVkaWF0ZWx5XG4gICAgICB0aGlzLnN0YXJ0VXBsb2FkKHVwbG9hZFRhcmdldCwgW251bGwsIHRoaXMuZ2V0U3RhdGVSb3V0ZSgpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRVcGxvYWQodXBsb2FkVGFyZ2V0LCBbbnVsbCwgJy9wcmVwYXJlJ10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZWVkIHVwbG9hZCB1c2luZyB0aGUgc2VsZWN0ZWQgdXBsb2FkIHRhcmdldC5cbiAgICogQHBhcmFtIHVzZUJhdGNoVXBsb2FkIC0gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIHVzZSBiYXRjaCB1cGxvYWRcbiAgICovXG4gIHB1YmxpYyBwcm9jZWVkV2l0aFNlbGVjdGVkVGFyZ2V0KHVzZUJhdGNoVXBsb2FkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdGFydFVwbG9hZCh0aGlzLnNlbGVjdGVkVXBsb2FkVGFyZ2V0LCBbdXNlQmF0Y2hVcGxvYWQsICcvcHJlcGFyZSddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHNlbGVjdGVkIHVwbG9hZCB0YXJnZXQuXG4gICAqL1xuICBwdWJsaWMgcmVzZXRTZWxlY3RlZFVwbG9hZFRhcmdldCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkVGFyZ2V0ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZmlsZSBmcm9tIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGJlIHVwbG9hZGVkLlxuICAgKiBAcGFyYW0gZmlsZUl0ZW0gLSB0aGUgZmlsZSBpdGVtIHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWxlSXRlbShmaWxlSXRlbTogVXBsb2FkRmlsZUl0ZW0pOiB2b2lkIHtcblxuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gZmlsZUl0ZW0uaWQpO1xuICAgIGlmICghdGhpcy5xdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlIGF2YWlsYWJsZSB1cGxvYWQgdGFyZ2V0cyBiZWNhdXNlIHRoZWlyIHZhbGlkaXR5XG4gICAgICAvLyBtYXkgYmUgYmFzZWQgb24gdGhlIHF1ZXVlIHNpemVcbiAgICAgIHRoaXMudmFsaWRhdGVVcGxvYWRUYXJnZXRzKCk7XG4gICAgICB0aGlzLnNldFF1ZXVlU2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRlUm91dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIudXJsO1xuICB9XG5cbiAgb25BZ2VudFRvZ2dsZShpbmZvOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnYWdlbnQtZm9sZGVyJywgSlNPTi5zdHJpbmdpZnkoaW5mbykpO1xuICB9XG5cbiAgb25GYXZvcml0ZVRvZ2dsZShpbmZvOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnZmF2b3JpdGUtZm9sZGVyJywgSlNPTi5zdHJpbmdpZnkoaW5mbykpO1xuICB9XG5cbiAgZ2V0Rm9sZGVyKCk6IHZvaWQge1xuICAgIC8vZm9sZGVyIGZyb20gYWdlbnRcbiAgICB0aGlzLmFnZW50U2VydmljZS5nZXRMYXN0T3BlbmVkRm9sZGVyc0luZm8oKS5zdWJzY3JpYmUoKHJlczogW10pOiB2b2lkID0+IHtcbiAgICAgIHRoaXMubGFzdE9wZW5lZEZvbGRlciA9IHJlcy5tYXAoKGl0ZW06IHt0aXRsZTogc3RyaW5nOyBkYXRhOiB7ZGVzY3JpcHRpb246IHN0cmluZ307IGlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZ30pID0+IHtcbiAgICAgICAgbGV0IHRhcmdldCA9IG5ldyBVcGxvYWRUYXJnZXQoXG4gICAgICAgICAgaXRlbS5pZCxcbiAgICAgICAgICAnYWdlbnQnLFxuICAgICAgICAgIGl0ZW0/LnRpdGxlLFxuICAgICAgICAgIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKGl0ZW0udHlwZSkuaWNvbklkLFxuICAgICAgICAgIGl0ZW0udHlwZVxuICAgICAgICApO1xuICAgICAgICB0YXJnZXQuZGVzY3JpcHRpb24gPSBpdGVtPy5kYXRhPy5kZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sYXN0T3BlbmVkRm9sZGVyLmZvckVhY2godGFyZ2V0ID0+IHRhcmdldC5vblVwbG9hZFN1Y2Nlc3MgPSAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wcmVwYXJlJ10pKTtcbiAgICB9KTtcblxuICAgIC8vIEZvbGRlciBmcm9tIGZhdm9yaXRlXG4gICAgdGhpcy51c2VyU2VydmljZS5nZXRGYXZvcml0ZXMoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgY29uc3QgZmF2b3JpdGVzRmlsdGVyZWQgPSByZXMuZmlsdGVyKChpdGVtOiB7dGFyZ2V0OiB7Zm9sZGVyOiBib29sZWFufX0pID0+IGl0ZW0udGFyZ2V0LmZvbGRlciA9PT0gdHJ1ZSk7XG4gICAgICB0aGlzLmZvbGRlckZhdm9yaXRlcyA9IGZhdm9yaXRlc0ZpbHRlcmVkLm1hcChpdGVtID0+IHtcbiAgICAgICAgbGV0IHRhcmdldCA9IG5ldyBVcGxvYWRUYXJnZXQoXG4gICAgICAgICAgaXRlbS50YXJnZXQuaWQsXG4gICAgICAgICAgJ2Zhdm9yaXRlJyxcbiAgICAgICAgICBpdGVtLnRpdGxlLFxuICAgICAgICAgIGl0ZW0udGFyZ2V0Lmljb24uaWQsXG4gICAgICAgICAgaXRlbS50YXJnZXQudHlwZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGFyZ2V0LmRlc2NyaXB0aW9uID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oaXRlbS5jcmVhdGVkKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb2xkZXJGYXZvcml0ZXMuZm9yRWFjaCh0YXJnZXQgPT4gdGFyZ2V0Lm9uVXBsb2FkU3VjY2VzcyA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3ByZXBhcmUnXSkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSB1cGxvYWQgb3ZlcmxheSBhbmQgcmVsZWFzZSBhbGwgYm91bmQgcmVzb3VyY2VzLlxuICAgKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgLy8gdW5iaW5kIGJvdW5kIGV2ZW50IGxpc3RlbmVyLCB3aGVuIHRoZXkgYXJlIG5vdCBuZWVkZWQgYW55bW9yZVxuICAgIHRoaXMudW5iaW5kTGlzdGVuZXJzKCk7XG4gICAgLy8gY2xlYXIgdXBsb2FkIHF1ZXVlXG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIC8vIGhpZGUgdGhlIG92ZXJsYXlcbiAgICB0aGlzLnNldEZpbGVPdmVyKGZhbHNlKTtcbiAgICB0aGlzLmludmFsaWRJbnB1dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIHRoaXMuZ2V0Rm9sZGVyKCk7XG5cbiAgICAvLyBnbG9iYWwgZHJhZyZkcm9wIHVwbG9hZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIG9uIGRlc2t0b3AgKHdlYiBvciBlbGVjdHJvbilcbiAgICBpZiAoRW52aXJvbm1lbnRFbmFpby5pc01vYmlsZUVudmlyb25tZW50KCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzdWJzY3JpYmUgZm9yIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgdXBsb2FkIHRhcmdldHNcbiAgICB0aGlzLnVwbG9hZFJlZ2lzdHJ5LnVwbG9hZFRhcmdldHMkLnN1YnNjcmliZSgodXBsb2FkVGFyZ2V0czogVXBsb2FkVGFyZ2V0W10pID0+IHtcbiAgICAgIHRoaXMudXBsb2FkVGFyZ2V0cyA9IHVwbG9hZFRhcmdldHM7XG4gICAgfSk7XG5cbiAgICB0aGlzLnBhc3RlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAncGFzdGUnLCAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgIHRoaXMub25QYXN0ZShlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ0VudGVyTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnZHJhZ2VudGVyJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgdGhpcy5vbkRyYWdFbnRlcihlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25QYXN0ZShlOiBDbGlwYm9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaGFzVmFsaWRVcGxvYWRUYXJnZXRzID0gdHJ1ZTtcbiAgICB0aGlzLmludmFsaWRJbnB1dCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5maWxlT3ZlciAmJiB0aGlzLnBhc3RlQ29udGFpbnNGaWxlcyhlKSkge1xuICAgICAgbGV0IHRyYW5zZmVyID0gZS5jbGlwYm9hcmREYXRhO1xuICAgICAgaWYgKCF0cmFuc2Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGZvciBkaXJlY3Rvcmllc1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmFuc2Zlci5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodHJhbnNmZXIuaXRlbXNbaV0ua2luZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmludmFsaWRJbnB1dCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZlID0gdHJhbnNmZXIuaXRlbXNbaV0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgICAgICBpZiAoZmUgJiYgZmUuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICB0aGlzLmludmFsaWRJbnB1dCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaW52YWxpZElucHV0KSB7XG4gICAgICAgIHRoaXMuX3ByZXZlbnRBbmRTdG9wKGUpO1xuICAgICAgICB0aGlzLnNldEZpbGVPdmVyKHRydWUpO1xuICAgICAgICB0aGlzLm9uRmlsZXNEcm9wcGVkKEFycmF5LmZyb20odHJhbnNmZXIuZmlsZXMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZ0VudGVyKGU6IERyYWdFdmVudCkge1xuICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaGFzVmFsaWRVcGxvYWRUYXJnZXRzID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuZmlsZU92ZXIgJiYgdGhpcy5kcmFnQ29udGFpbnNGaWxlcyhlKSkge1xuICAgICAgdGhpcy5kcmFnRXZlbnRDb3VudCA9IDA7XG4gICAgICB0aGlzLnNldEZpbGVPdmVyKHRydWUpO1xuXG4gICAgICAvLyB1c2UgdGltZW91dCBoZXJlIHRvIGZvcmNlIGFuZ3VsYXIgZGlnZXN0IGN5Y2xlIGJlZm9yZSBjb250aW51aW5nLCBiZWNhdXNlIHdlIGFyZSBhY2Nlc3NpbmcgZG9tIGVsZW1lbnRzXG4gICAgICAvLyB0aGF0IGFyZSBub3QgdGhlcmUgKCpuZ0lmKSB1bnRpbCBmaWxlT3ZlciBpcyBzZXQgdG8gdHJ1ZS5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyB0b2RvOiByZXBsYWNlIGJ5IHJlbmRlcmVyIHNvbHV0aW9uIHdoZW4gYXZhaWxhYmxlIChodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNTY3NClcbiAgICAgICAgdGhpcy5vdmVybGF5RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAvLyBiaW5kIGxhdGUgKG9ubHksIHdoZW4gbmVlZGVkKSB0byBkcmFnbGVhdmUgZXZlbnQgdG8gYXZvaWQgaGVhdnkgcHJvY2Vzc2luZyBvbiBldmVyeSBkcmFnIGV2ZW50XG4gICAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJhZ2xlYXZlJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZHJhZ0V2ZW50Q291bnQtLTtcbiAgICAgICAgICBpZiAodGhpcy5kcmFnRXZlbnRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kcm9wTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJvcCcsIChldnQpID0+IHtcbiAgICAgICAgICBsZXQgdHJhbnNmZXIgPSB0aGlzLl9nZXRUcmFuc2ZlcihldnQpO1xuICAgICAgICAgIGlmICghdHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZ0KTtcblxuICAgICAgICAgIC8vIGNoZWNrIGZvciBkaXJlY3Rvcmllc1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNmZXIuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZlID0gdHJhbnNmZXIuaXRlbXNbaV0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgICAgICAgICAgaWYgKGZlICYmIGZlLmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICAgIHRoaXMuaW52YWxpZElucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmludmFsaWRJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5vbkZpbGVzRHJvcHBlZCh0cmFuc2Zlci5maWxlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyYWdPdmVyTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJhZ292ZXInLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgbGV0IHRyYW5zZmVyID0gdGhpcy5fZ2V0VHJhbnNmZXIoZXZ0KTtcbiAgICAgICAgICBpZiAoIXRyYW5zZmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmFnRXZlbnRDb3VudCsrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFRyYW5zZmVyKGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBldmVudC5kYXRhVHJhbnNmZXIgPyBldmVudC5kYXRhVHJhbnNmZXIgOiBldmVudC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjsgLy8galF1ZXJ5IGZpeDtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXZlbnRBbmRTdG9wKGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZXNEcm9wcGVkKGZpbGVJdGVtczogRmlsZVtdKSB7XG4gICAgdGhpcy5nZXRGb2xkZXIoKTtcbiAgICB0aGlzLmdldENhY2hlZEFjY29yZGlvblN0YXRlKCk7XG4gICAgLy8gY2xlYXIgcXVldWUgd2hlbiBuZXcgZmlsZXMgYXJlIGFkZGVkXG4gICAgLy8gdG9kbzogcmVtb3ZlIGluIGZ1dHVyZSByZWxlYXNlcyB0byBzdXBwb3J0IGNvbGxlY3RpdmUgZmlsZSBhZGRpbmdcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlSXRlbXMpIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChuZXcgVXBsb2FkRmlsZUl0ZW0oZmlsZSkpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgRVNDIGtleSBsaXN0ZW5lciBmb3IgY2xvc2luZyB0aGUgZGlhbG9nIGFzIGxhdGUgYXMgcG9zc2libGVcbiAgICBpZiAoIXRoaXMuZXNjS2V5TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAna2V5dXAnLCAoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGNhbGN1bGF0ZSB0b3RhbCBzaXplIG9mIHF1ZXVlXG4gICAgdGhpcy5zZXRRdWV1ZVNpemUoKTtcbiAgICAvLyBmaWx0ZXIgYXZhaWxhYmxlIHRhcmdldHNcbiAgICB0aGlzLnZhbGlkYXRlVXBsb2FkVGFyZ2V0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBsaXN0IG9mIHJlZ2lzdGVyZWQgdXBsb2FkIHRhcmdldHMsIHNvIG9ubHkgdmFsaWQgdGFyZ2V0cyB3aWxsIGJlIHNob3duLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVwbG9hZFRhcmdldHMoKSB7XG4gICAgdGhpcy5oYXNWYWxpZFVwbG9hZFRhcmdldHMgPSB0cnVlO1xuICAgIHRoaXMuZ2V0Rm9sZGVyKCk7XG4gICAgb2JzZXJ2YWJsZUZvcmtKb2luKHRoaXMudXBsb2FkVGFyZ2V0cy5tYXAodCA9PiB0aGlzLnZhbGlkYXRlVXBsb2FkVGFyZ2V0KHQpKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IHt0YXJnZXQ6IFVwbG9hZFRhcmdldDsgdmFsaWQ6IGJvb2xlYW59W10pID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IHJlcy5maWx0ZXIociA9PiByLnZhbGlkKS5tYXAoZmlsdGVyZWQgPT4gZmlsdGVyZWQudGFyZ2V0KS5yZXZlcnNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEudHlwZSA9PT0gJ2NvbnRleHQnID8gLTEgOiBiLnR5cGUgPT09ICdjb250ZXh0JyA/IDEgOiAwOyAvLyBDb250ZXh0IHNob3VsZCBiZSBvbiB0b3BcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IFsuLi50aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cywgLi4udGhpcy5mb2xkZXJGYXZvcml0ZXMsIC4uLnRoaXMubGFzdE9wZW5lZEZvbGRlcl07XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IFtdO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYXNWYWxpZFVwbG9hZFRhcmdldHMgPSB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cy5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVwbG9hZFRhcmdldCh0YXJnZXQ6IFVwbG9hZFRhcmdldCk6IE9ic2VydmFibGU8e3RhcmdldDogVXBsb2FkVGFyZ2V0OyB2YWxpZDogYm9vbGVhbn0+IHtcblxuICAgIGlmICghdGhpcy5xdWV1ZSkge1xuICAgICAgcmV0dXJuIG9ic2VydmFibGVPZih7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZShvID0+IHtcbiAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5ST09UKSB7XG5cbiAgICAgICAgLy8gdG9kbzogYXJlIHRoZXJlIG90aGVyIHJlc3RyaWN0aW9ucyBvbiByb290IHRhcmdldD9cbiAgICAgICAgdGhpcy5wcmVwYXJlU2VydmljZS5nZXRQcmVwYXJlQ2hpbGRUeXBlcyhudWxsLCB0cnVlKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAocmVzOiB7cGFyZW50OiBzdHJpbmc7IHR5cGVzOiBPYmplY3RUeXBlW119KSA9PiB7XG4gICAgICAgICAgICAgIHZhbGlkID0gdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHJlcy50eXBlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogdmFsaWR9KTtcbiAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogZmFsc2V9KTtcbiAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC50eXBlID09PSBVcGxvYWRUYXJnZXQuT0JKRUNUKSB7XG5cbiAgICAgICAgLy8gdG9kbzogY2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBvYmplY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIGZpbGUgdHlwZVxuICAgICAgICB2YWxpZCA9IHRhcmdldC5yZWZlcmVuY2VPYmplY3QgJiZcbiAgICAgICAgICB0YXJnZXQucmVmZXJlbmNlT2JqZWN0LnR5cGUubWF4RmlsZXMgPiAwICYmXG4gICAgICAgICAgIXRhcmdldC5yZWZlcmVuY2VPYmplY3QubG9jayAmJlxuICAgICAgICAgICF0YXJnZXQucmVmZXJlbmNlT2JqZWN0LmlzRmluYWxpemVkICYmXG4gICAgICAgICAgKHRhcmdldC5yZWZlcmVuY2VPYmplY3QucmlnaHRzICYmIHRhcmdldC5yZWZlcmVuY2VPYmplY3QucmlnaHRzLmVkaXQpICYmXG4gICAgICAgICAgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICB0YXJnZXQucmVmZXJlbmNlT2JqZWN0LmRhdGEueXV2c2lnc3RhdHVzICE9PSAnc2lnbmVkJyAmJlxuICAgICAgICAgIHRhcmdldC5yZWZlcmVuY2VPYmplY3QuZGF0YS55dXZzaWdzdGF0dXMgIT09ICdpbnByb2Nlc3MnO1xuICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogdmFsaWR9KTtcbiAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXQudHlwZSA9PT0gVXBsb2FkVGFyZ2V0LkNPTlRFWFQgfHwgdGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5DT05URVhUX1RSRUUpIHtcblxuICAgICAgICAvLyB0b2RvOiBhZGQgY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIHJlZmVyZW5jZSBvYmplY3QgKGUuZy4gYWxsb3dlZCBmaWxlIHR5cGVzKVxuICAgICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFByZXBhcmVDaGlsZFR5cGVzKHRhcmdldC5yZWZlcmVuY2VPYmplY3QuaWQsIHRydWUpXG4gICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgIChyZXM6IHtwYXJlbnQ6IHN0cmluZzsgdHlwZXM6IE9iamVjdFR5cGVbXX0pID0+IHtcbiAgICAgICAgICAgICAgdmFsaWQgPSB0YXJnZXQucmVmZXJlbmNlT2JqZWN0ICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiByZXMudHlwZXMubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgICAvLyBmb3IgQ09OVEVYVF9UUkVFIHRhcmdldHMgYWxzbyBjaGVjayBpZiB0aGUgZGVzaXJlZCBub2RlXG4gICAgICAgICAgICAgIC8vIHR5cGUgaXMgcGFydCBvZiB0aGUgcHJlcGFyZSBjaGlsZCB0eXBlc1xuICAgICAgICAgICAgICBpZiAodGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5DT05URVhUX1RSRUUgJiYgdGFyZ2V0LnN1YkZvbGRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlciA9IHRhcmdldC5zdWJGb2xkZXI7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSAhIXJlcy50eXBlcy5maW5kKHQgPT4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmltcGxlbWVudHNUeXBlKHQsIHN1YkZvbGRlci5kYXRhLnR5cGUpKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiB2YWxpZH0pO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiBmYWxzZX0pO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiBmYWxzZX0pO1xuICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENhY2hlZEFjY29yZGlvblN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuYWdlbnRBY2NTZWxlY3RlZCA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnYWdlbnQtZm9sZGVyJykpO1xuICAgIHRoaXMuZmF2b3JpdGVzQWNjU2VsZWN0ZWQgPSBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSh0aGlzLmNhY2hlS2V5ICsgJ2Zhdm9yaXRlLWZvbGRlcicpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc2Z1bFVwbG9hZCh0YXJnZXQsIHVwbG9hZFRhcmdldCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnRyaWdnZXIoRW5haW9FdmVudC5ETVNfT0JKRUNUX1VQREFURUQsIHVwbG9hZFRhcmdldC5yZWZlcmVuY2VPYmplY3QpO1xuICAgIHVwbG9hZFRhcmdldC5vblVwbG9hZFN1Y2Nlc3ModGFyZ2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgYWN0dWFsIHVwbG9hZC5cbiAgICogQHBhcmFtIHVwbG9hZFRhcmdldCAtIHRhcmdldCB0byB1cGxvYWQgdGhlIGZpbGVzIHRvXG4gICAqIEBwYXJhbSB1c2VCYXRjaFVwbG9hZCAtIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byB1c2UgYmF0Y2ggdXBsb2FkXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0VXBsb2FkKHVwbG9hZFRhcmdldDogVXBsb2FkVGFyZ2V0LCBbLi4uYXJnc10pOiB2b2lkIHtcblxuICAgIGNvbnN0IFt1c2VCYXRjaFVwbG9hZCwgdGFyZ2V0XSA9IGFyZ3M7XG5cbiAgICB0aGlzLmlzVXBsb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnVuYmluZExpc3RlbmVycygpO1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC51cGxvYWRUb1RhcmdldCh1cGxvYWRUYXJnZXQsIHRoaXMucXVldWUsIHVzZUJhdGNoVXBsb2FkKVxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHVwbG9hZFRhcmdldC5zdWJGb2xkZXIgJiYgdXBsb2FkVGFyZ2V0LnN1YkZvbGRlci5kYXRhLmRhdGEpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICAgICAgICBsZXQgb2JzID0gW107XG4gICAgICAgICAgICByZXMuZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgICAgb2JzLnB1c2godGhpcy5wcmVwYXJlU2VydmljZS51cGRhdGVQcmVwYXJlZEl0ZW1JbmRleERhdGEoci5pZCwgdXBsb2FkVGFyZ2V0LnN1YkZvbGRlci5kYXRhLmRhdGEpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZUZvcmtKb2luKG9icykuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3VjY2Vzc2Z1bFVwbG9hZCh0YXJnZXQsIHVwbG9hZFRhcmdldCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAgICAgICAgIC51cGRhdGVQcmVwYXJlZEl0ZW1JbmRleERhdGEocmVzLmlkLCB1cGxvYWRUYXJnZXQuc3ViRm9sZGVyLmRhdGEuZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN1Y2Nlc3NmdWxVcGxvYWQodGFyZ2V0LCB1cGxvYWRUYXJnZXQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzZnVsVXBsb2FkKHRhcmdldCwgdXBsb2FkVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9LCBVdGlscy50aHJvdygoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdXBsb2FkVGFyZ2V0Lm9uVXBsb2FkRmFpbCgpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9LFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby51cGxvYWQuZ2xvYmFsLmVycm9yLnRpdGxlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVwbG9hZC5nbG9iYWwuZXJyb3IuZGVzY3JpcHRpb24nKSlcbiAgICAgICk7XG4gICAgdGhpcy5yZXNldFNlbGVjdGVkVXBsb2FkVGFyZ2V0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldFF1ZXVlU2l6ZSgpOiB2b2lkIHtcbiAgICBsZXQgcyA9IDA7XG4gICAgZm9yIChsZXQgZiBvZiB0aGlzLnF1ZXVlKSB7XG4gICAgICBzICs9IGYuc2l6ZTtcbiAgICB9XG4gICAgdGhpcy5xdWV1ZVNpemUgPSBzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGaWxlT3Zlcih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZmlsZU92ZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnVwbG9hZFJlZ2lzdHJ5LnNldE92ZXJsYXlBY3RpdmUodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmJpbmRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcmFnT3Zlckxpc3RlbmVyKSB7XG4gICAgICB0aGlzLmRyYWdPdmVyTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJhZ092ZXJMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3BMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kcm9wTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJvcExpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXNjS2V5TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgZHJhZyBldmVudCBjb250YWlucyBvbmUgb3IgbW9yZSBmaWxlcy5cbiAgICogQHBhcmFtIGV2ZW50IC0gdGhlIGRyYWcgZXZlbnQgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBudW1iZXIgb2YgZmlsZXNcbiAgICovXG4gIHByaXZhdGUgZHJhZ0NvbnRhaW5zRmlsZXMoZXZlbnQ6IERyYWdFdmVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zIHx8IFtdKS5maWx0ZXIoaSA9PiBpLmtpbmQgPT09ICdmaWxlJykubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBwYXN0ZSBldmVudCBjb250YWlucyBvbmUgb3IgbW9yZSBmaWxlcy5cbiAgICogQHBhcmFtIGV2ZW50IC0gdGhlIHBhc3RlIGV2ZW50IHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgbnVtYmVyIG9mIGZpbGVzXG4gICAqL1xuICBwcml2YXRlIHBhc3RlQ29udGFpbnNGaWxlcyhldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMgfHwgW10pLmZpbHRlcihpID0+IGkua2luZCA9PT0gJ2ZpbGUnKS5sZW5ndGg7XG4gIH1cbn1cbiIsIjxkaXYgaWQ9XCJlby11cGxvYWQtb3ZlcmxheVwiICNvdmVybGF5IGNsYXNzPVwiZGFya1wiICpuZ0lmPVwiZmlsZU92ZXJcIiB0YWJpbmRleD1cIjFcIlxuICBbbmdDbGFzc109XCJ7ZmlsZTogcXVldWUubGVuZ3RoLCBpbnZhbGlkOiBpbnZhbGlkSW5wdXQsIHVwbG9hZGluZzogaXNVcGxvYWRpbmd9XCI+XG5cbiAgPGVvLWljb24gY2xhc3M9XCJidXR0b24gd2hpdGUgY2xvc2VcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCIgKGNsaWNrKT1cImNsb3NlKClcIj48L2VvLWljb24+XG5cbiAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgPGRpdj57e3F1ZXVlLmxlbmd0aH19PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInF1ZXVlU2l6ZVwiPnt7cXVldWVTaXplIHwgZmlsZVNpemV9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaGVhZGxpbmVcIj5cbiAgICA8aDEgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaGVhZGxpbmU8L2gxPlxuICA8L2Rpdj5cbiAgXG4gIDxlby1pY29uIGNsYXNzPVwidXBsb2FkeVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3VwbG9hZC5zdmcnXCI+PC9lby1pY29uPlxuXG4gIDwhLS0gYmF0Y2ggdXBsb2FkIGRpYWxvZyAtLT5cbiAgPGRpdiBjbGFzcz1cImJhdGNoLWRpYWxvZ1wiICpuZ0lmPVwiIWludmFsaWRJbnB1dCAmJiBzZWxlY3RlZFVwbG9hZFRhcmdldCAmJiAhaXNVcGxvYWRpbmdcIj5cblxuICAgIDxoMiB0cmFuc2xhdGU+ZW8udXBsb2FkLmdsb2JhbC5jaG9vc2UudGl0bGU8L2gyPlxuICAgIDxwIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNob29zZS5tZXNzYWdlPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJyZXNldFNlbGVjdGVkVXBsb2FkVGFyZ2V0KClcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cInByb2NlZWRXaXRoU2VsZWN0ZWRUYXJnZXQoZmFsc2UpXCIgY2xhc3M9XCJwcmltYXJ5XCJcbiAgICAgICAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuY2hvb3NlLnNpbmdsZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicHJvY2VlZFdpdGhTZWxlY3RlZFRhcmdldCh0cnVlKVwiIGNsYXNzPVwicHJpbWFyeVwiIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNob29zZS5tdWx0aTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIGludmFsaWQgaW5wdXQgZGlhbG9nIC0tPlxuICA8ZGl2IGNsYXNzPVwiYmF0Y2gtZGlhbG9nXCIgKm5nSWY9XCJoYXNWYWxpZFVwbG9hZFRhcmdldHMgJiYgaW52YWxpZElucHV0XCI+XG5cbiAgICA8aDIgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaW52YWxpZC50aXRsZTwvaDI+XG4gICAgPHAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaW52YWxpZC5tZXNzYWdlPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCIgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuY2xvc2U8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBubyB1cGxvYWQgdGFyZ2V0cyBhdmFpbGFibGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJiYXRjaC1kaWFsb2dcIiAqbmdJZj1cIiFoYXNWYWxpZFVwbG9hZFRhcmdldHNcIj5cblxuICAgIDxoMiB0cmFuc2xhdGU+ZW8udXBsb2FkLmdsb2JhbC5ub3RhcmdldC50aXRsZTwvaDI+XG4gICAgPHAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwubm90YXJnZXQubWVzc2FnZTwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNsb3NlPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb250ZW50c1wiICpuZ0lmPVwiaGFzVmFsaWRVcGxvYWRUYXJnZXRzICYmICFpbnZhbGlkSW5wdXQgJiYgIXNlbGVjdGVkVXBsb2FkVGFyZ2V0ICYmICFpc1VwbG9hZGluZ1wiPlxuXG4gICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDwhLS0gbGlzdCBvZiBhdmFpbGFibGUgdXBsb2FkIHRhcmdldHMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0c1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0LWxpc3RcIj5cbiAgICAgICAgICBAZm9yICh0YXJnZXRUeXBlIG9mIHRhcmdldFR5cGVzOyB0cmFjayB0YXJnZXRUeXBlLnR5cGUpIHtcbiAgICAgICAgICAgIEBmb3IgKHQgb2YgdmFsaWRVcGxvYWRUYXJnZXRzOyB0cmFjayB0LmlkKSB7XG4gICAgICAgICAgICAgIEBpZiAodC50eXBlID09PSB0YXJnZXRUeXBlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkVGFyZ2V0VGVtcGxhdGU7IGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblNyYzogdGFyZ2V0VHlwZS5pY29uU3JjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDbGFzczogdGFyZ2V0VHlwZS50YXJnZXRDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGFyZ2V0VHlwZS50eXBlID09PSAnY3VzdG9tJyA/IHQubmFtZSA6ICh0YXJnZXRUeXBlLnR5cGUgPT09ICdjb250ZXh0JyA/ICAgICAgKHRhcmdldFR5cGUubmFtZSB8IHRyYW5zbGF0ZSA6IHsgY29udGV4dDogdC5yZWZlcmVuY2VPYmplY3QudHlwZS5sYWJlbCB9KSA6ICAgICAodGFyZ2V0VHlwZS4gbmFtZSB8IHRyYW5zbGF0ZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGFyZ2V0VHlwZS50eXBlID09PSAnY3VzdG9tJyB8fCB0YXJnZXRUeXBlLnR5cGUgPT09ICdvYmplY3QnIHx8ICAgIHRhcmdldFR5cGUuICB0eXBlID09PSAnY29udGV4dCcgPyB0LmRlc2NyaXB0aW9uIDogKHRhcmdldFR5cGUuZGVzY3JpcHRpb24gfCAgIHRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHM6IHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSB1cGxvYWQgdG8gZmF2b3JpdGUgLS0+XG4gICAgICBAaWYgKGZvbGRlckZhdm9yaXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uIFtzZWxlY3RlZF09XCJmYXZvcml0ZXNBY2NTZWxlY3RlZFwiIFtoZWFkZXJdPVwiJ2VvLnVwbG9hZC5nbG9iYWwuY29udGV4dC5mYXZvcml0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIm9uRmF2b3JpdGVUb2dnbGUoJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXJnZXRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0LWxpc3RcIj5cbiAgICAgICAgICAgICAgQGZvciAodCBvZiB2YWxpZFVwbG9hZFRhcmdldHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBpZiAodC50eXBlID09PSAnZmF2b3JpdGUnKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRhcmdldFwiIChjbGljayk9XCJwcm9jZWVkV2l0aFVwbG9hZCh0KVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidC5pY29uSWRcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10YXJnZXQtZmF2b3JpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+e3t0LnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t0LmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZW8tc2ltcGxlLWFjY29yZGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmKGxhc3RPcGVuZWRGb2xkZXIubGVuZ3RoID4gMCl7XG4gICAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uIFtzZWxlY3RlZF09XCJhZ2VudEFjY1NlbGVjdGVkXCIgW2hlYWRlcl09XCInZW8udXBsb2FkLmdsb2JhbC5jb250ZXh0LmFnZW50JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RDaGFuZ2UpPVwib25BZ2VudFRvZ2dsZSgkZXZlbnQpXCI+XG4gICAgICAgICAgPCEtLSB1cGxvYWQgdG8gbGFzdCBvcGVuZWQgZm9sZGVyICAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0c1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldC1saXN0XCI+XG4gICAgICAgICAgICAgIEBmb3IgKHQgb2YgdmFsaWRVcGxvYWRUYXJnZXRzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBAaWYgKHQudHlwZSA9PT0gJ2FnZW50Jykge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10YXJnZXRcIiAoY2xpY2spPVwicHJvY2VlZFdpdGhVcGxvYWQodClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvbklkXT1cInQuaWNvbklkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdGFyZ2V0LWFnZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPnt7dD8udGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3Q/LmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZW8tc2ltcGxlLWFjY29yZGlvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8IS0tIGxpc3Qgb2YgZmlsZXMgZHJhZ2dlZCB0byB0aGUgY29tcG9uZW50IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmaWxlc1wiIFtuZ0NsYXNzXT1cIntmaWxlOiBxdWV1ZS5sZW5ndGgsIGludmFsaWQ6IGludmFsaWRJbnB1dCwgdXBsb2FkaW5nOiBpc1VwbG9hZGluZ31cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlcy1saXN0XCI+XG4gICAgICAgIEBmb3IgKGkgb2YgcXVldWU7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPnt7aS5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPjxzcGFuIGNsYXNzPVwic2l6ZVwiPnt7aS5zaXplIHwgZmlsZVNpemV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGVzYy10ZXh0XCI+Jm5ic3A7e3tpLnR5cGV9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uIHdoaXRlXCIgKGNsaWNrKT1cInJlbW92ZUZpbGVJdGVtKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgQGlmIChpc1VwbG9hZGluZykge1xuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nXCI+XG4gICAgICA8ZW8tbG9hZGluZy1zcGlubmVyIFtzaXplXT1cIidsYXJnZSdcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdXBsb2FkVGFyZ2V0VGVtcGxhdGUgbGV0LWljb25TcmM9XCJpY29uU3JjXCIgbGV0LXRhcmdldENsYXNzPVwidGFyZ2V0Q2xhc3NcIiBsZXQtbmFtZT1cIm5hbWVcIlxuICBsZXQtZGVzY3JpcHRpb249XCJkZXNjcmlwdGlvblwiIGxldC10YXJnZXRzPVwidGFyZ2V0c1wiPlxuICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRhcmdldFwiIChjbGljayk9XCJwcm9jZWVkV2l0aFVwbG9hZCh0YXJnZXRzKVwiPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgICA8ZW8taWNvbiBbaWNvblNyY109XCJpY29uU3JjXCI+PC9lby1pY29uPlxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ0YXJnZXRDbGFzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPnt7IG5hbWUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -149,8 +149,8 @@ export class AgentService {
149
149
  * @returns Observable<any>
150
150
  */
151
151
  getLastOpenedFoldersInfo() {
152
- const uri = '/agent/locations';
153
- return this.http.get(uri);
152
+ const uri = '/locations';
153
+ return this.backendService.get(uri, '/agent');
154
154
  }
155
155
  /**
156
156
  * Send items as email.
@@ -190,4 +190,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
190
190
  type: Inject,
191
191
  args: [CORE_CONFIG]
192
192
  }] }, { type: i1.Logger }, { type: i2.HttpClient }, { type: i1.SystemService }, { type: i1.BackendService }, { type: i1.UserService }, { type: i1.TranslateService }, { type: i1.NotificationsService }, { type: i1.AppCacheService }] });
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrLWNvcmUvYWdlbnQvYWdlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQThDLFdBQVcsRUFBeUYsS0FBSyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BMLE9BQU8sRUFBQyxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFLcEQsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN6Qiw4Q0FBMkIsQ0FBQTtJQUMzQixnREFBNkIsQ0FBQTtBQUMvQixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUI7QUFXRCxNQUFNLE9BQU8sWUFBWTtJQWdCdkIsWUFDOEIsVUFBc0IsRUFDMUMsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLFNBQTJCLEVBQzNCLGFBQW1DLEVBQ25DLGVBQWdDO1FBUlosZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUMxQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBQ25DLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXZCbEMsbUJB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LFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQVUsRUFBRSxJQUFJO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSTtRQUM5QixNQUFNLE9BQU8sR0FBRztZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSTtZQUM1QyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtTQUNyQixDQUFDO1FBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRU8sT0FBTztRQUNiLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQzs4R0FuTVUsWUFBWSxrQkFpQmIsV0FBVztrSEFqQlYsWUFBWTs7MkZBQVosWUFBWTtrQkFEeEIsVUFBVTs7MEJBa0JOLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FwcENhY2hlU2VydmljZSwgQmFja2VuZFNlcnZpY2UsIENvcmVDb25maWcsIENPUkVfQ09ORklHLCBEbXNPYmplY3QsIExvZ2dlciwgTm90aWZpY2F0aW9uc1NlcnZpY2UsIFN5c3RlbVNlcnZpY2UsIFRyYW5zbGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlLCBVdGlsc30gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtUcmVlTm9kZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrL3RyZWUvdHJlZS5jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7TG9ja1NldHRpbmdzfSBmcm9tICcuLy4uLy4uL2VvLWNsaWVudC9zZXR0aW5ncy9hZ2VudC1sb2NrLXNldHRpbmdzLmVudW0nO1xuaW1wb3J0IHtDdXN0b21FbWFpbH0gZnJvbSAnLi9hZ2VudC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgZW51bSBhZ2VudENvbmZpZ0tleXMge1xuICBBVVRPQ09OTkVDVCA9ICdhdXRvY29ubmVjdCcsXG4gIExPQ0tTRVRUSU5HUyA9ICdsb2Nrc2V0dGluZ3MnXG59XG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuZGVkQ29uZmlnIHtcbiAgYWdlbnQ6IHtcbiAgICBbYWdlbnRDb25maWdLZXlzLkFVVE9DT05ORUNUXT86IGJvb2xlYW47XG4gICAgW2FnZW50Q29uZmlnS2V5cy5MT0NLU0VUVElOR1NdPzogTG9ja1NldHRpbmdzXG4gIH1cbn1cbmV4cG9ydCB0eXBlIEFnZW50Q29ubmVjdGlvbkNvbmZpZyA9IEV4dGVuZGVkQ29uZmlnWydhZ2VudCddXG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFnZW50U2VydmljZSB7XG5cbiAgcHJpdmF0ZSBFTkFJT19QUk9UT0NPTCA9ICd5dXV2aXM6Ly8nO1xuXG4gIGFnZW50QXZhaWxhYmlsaXR5ID0ge1xuICAgIENPTk5FQ1RFRDogJ2VvLmFnZW50LmF2YWlsYWJpbGl0eS5jb25uZWN0ZWQnLFxuICAgIEFWQUlMQUJMRTogJ2VvLmFnZW50LmF2YWlsYWJpbGl0eS5hdmFpbGFibGUnLFxuICAgIFVOQVZBSUxBQkxFOiAnZW8uYWdlbnQuYXZhaWxhYmlsaXR5LnVuYXZhaWxhYmxlJ1xuICB9O1xuXG4gIHByaXZhdGUgX2lzQ29ubmVjdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgaXNDb25uZWN0ZWRTb3VyY2UgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgcHVibGljIGlzQ29ubmVjdGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuaXNDb25uZWN0ZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gIHByaXZhdGUgYWdlbnRDb25maWcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFnZW50Q29ubmVjdGlvbkNvbmZpZz4obnVsbCk7XG4gIHB1YmxpYyBhZ2VudENvbmZpZyQ6IE9ic2VydmFibGU8QWdlbnRDb25uZWN0aW9uQ29uZmlnPiA9IHRoaXMuYWdlbnRDb25maWcuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChDT1JFX0NPTkZJRykgcHVibGljIGNvcmVDb25maWc6IENvcmVDb25maWcsXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlcixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFja2VuZFNlcnZpY2U6IEJhY2tlbmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBDYWNoZVNlcnZpY2U6IEFwcENhY2hlU2VydmljZSkge1xuICAgIHRoaXMuZ2V0QWdlbnRDb25uZWN0aW9uU3RhdHVzKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEFnZW50Q29ubmVjdGlvblN0YXR1cygpIHtcbiAgICBmb3JrSm9pbihbdGhpcy5hcHBDYWNoZVNlcnZpY2UuZ2V0SXRlbSgnZW8uYWdlbnQuY29ubmVjdGVkJyksIHRoaXMuZ2V0QWdlbnRDb25maWcoKV0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChbc3RvcmFnZSwgY29uZmlnXSkgPT4gdGhpcy5pc0Nvbm5lY3RlZCA9IChjb25maWcgJiYgY29uZmlnLmhhc093blByb3BlcnR5KGFnZW50Q29uZmlnS2V5cy5BVVRPQ09OTkVDVCkgPyBjb25maWcuYXV0b2Nvbm5lY3QgOiBzdG9yYWdlICE9PSBudWxsID8gc3RvcmFnZSA6IG51bGwpKVxuICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdldEFnZW50Q29uZmlnKCk6IE9ic2VydmFibGU8QWdlbnRDb25uZWN0aW9uQ29uZmlnPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8RXh0ZW5kZWRDb25maWc+KCdhc3NldHMvX2RlZmF1bHQvY29uZmlnL2V4dGVuZC5qc29uJywge3dpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFsc30pLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSxcbiAgICAgIHRhcCgoY29uZmlnOiBFeHRlbmRlZENvbmZpZykgPT4gdGhpcy5hZ2VudENvbmZpZy5uZXh0KHsuLi5jb25maWc/LmFnZW50fSkpLFxuICAgICAgbWFwKChjb25maWc6IEV4dGVuZGVkQ29uZmlnKSA9PiBjb25maWc/LmFnZW50KSlcbiAgfVxuXG4gIHNldCBpc0Nvbm5lY3RlZChpc0Nvbm5lY3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gaXNDb25uZWN0ZWQ7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZFNvdXJjZS5uZXh0KGlzQ29ubmVjdGVkKTtcbiAgICB0aGlzLmFwcENhY2hlU2VydmljZS5zZXRJdGVtKCdlby5hZ2VudC5jb25uZWN0ZWQnLCBpc0Nvbm5lY3RlZCk7XG4gIH1cblxuICBnZXQgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ29ubmVjdGVkO1xuICB9XG5cbiAgc2V0QWdlbnRTdGF0dXMoY29ubmVjdGFnZW50KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKHR5cGVvZiBjb25uZWN0YWdlbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmlzQ29ubmVjdGVkID0gY29ubmVjdGFnZW50O1xuICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbG9jYXRpb24gZW50cnkgdG8gdGhlIGFnZW50IHNlcnZpY2VzIGxvY2F0aW9uIGhpc3RvcnkuXG4gICAqIEBwYXJhbSBjb250ZXh0Rm9sZGVyIFRoZSBsb2NhdGlvbnMgY29udGV4dCBmb2xkZXJcbiAgICogQHBhcmFtIHRyZWVOb2RlIE5vZGUgZnJvbSB0aGUgY29udGV4dCBmb2xkZXJzIHN0cnVjdHVyZSB0cmVlXG4gICAqL1xuICB1cGRhdGVVc2VyTG9jYXRpb24oY29udGV4dEZvbGRlcjogRG1zT2JqZWN0LCB0cmVlTm9kZT86IFRyZWVOb2RlKSB7XG5cbiAgICBpZiAodHJlZU5vZGUgJiYgdHJlZU5vZGUuZGF0YSAmJiB0cmVlTm9kZS5kYXRhLnR5cGUpIHtcblxuICAgICAgLy8gaWYgYSBnaXZlbiB0cmVlTm9kZSBjb250YWlucyBhIHRhcmdldCB0eXBlLCB3ZSdsbCBvbmx5IGFkZCBhIHVzZXIgbG9jYXRpb25cbiAgICAgIC8vIHdoZW4gdGhlIHR5cGUgaXMgYWJsZSB0byBhY2NlcHQgY29udGVudCAob3RoZXJ3aXNlIHVzZWxlc3MgZm9yIG9mZmljZSBBZGRJbnMpXG4gICAgICBjb25zdCB0YXJnZXRUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUodHJlZU5vZGUuZGF0YS50eXBlKTtcbiAgICAgIGlmICh0YXJnZXRUeXBlLm1heEZpbGVzID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGl0bGUgPSBjb250ZXh0Rm9sZGVyLnRpdGxlO1xuICAgIGlmICh0cmVlTm9kZSkge1xuICAgICAgdGl0bGUgKz0gJyA+ICcgKyB0cmVlTm9kZS5wYXRoLmpvaW4oJyA+ICcpO1xuICAgIH1cblxuICAgIGxldCBpZCA9IGNvbnRleHRGb2xkZXIuaWQ7XG4gICAgaWYgKHRyZWVOb2RlKSB7XG4gICAgICBpZCArPSAnXycgKyB0cmVlTm9kZS5kYXRhLmtleTtcbiAgICB9XG5cbiAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLnBvc3QoJy9sb2NhdGlvbnMnLCB7XG4gICAgICBpZDogaWQsXG4gICAgICB0aXRsZTogdGl0bGUsXG4gICAgICB0eXBlOiBjb250ZXh0Rm9sZGVyLnR5cGUubmFtZSxcbiAgICAgIGNoaWxkVHlwZTogKHRyZWVOb2RlICYmIHRyZWVOb2RlLmRhdGEpID8gdHJlZU5vZGUuZGF0YS50eXBlIDogdW5kZWZpbmVkLFxuICAgICAgZGF0YToge1xuICAgICAgICAnZGVzY3JpcHRpb24nOiBjb250ZXh0Rm9sZGVyPy5kZXNjcmlwdGlvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgICd0cmVlTm9kZSc6IHRyZWVOb2RlPy5kYXRhPy5kYXRhID8/IHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgICAgICAgXG4gICAgfSwgdGhpcy5iYWNrZW5kU2VydmljZS5nZXRBZ2VudEJhc2UoKSkuc3Vic2NyaWJlKHIgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYGFkZGVkIGxvY2F0aW9uICcke3RpdGxlfScgdG8gYWdlbnQgc2VydmljZWApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSBkb2N1bWVudCB2aWEgYWdlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBkb2N1bWVudCBBIGRvY3VtZW50IHRvIG9wZW4uXG4gICAqIEBwYXJhbSBsb2NrIEJvb2xlYW4sIGlmIHRoZSBkbXMgaXRlbSBzaG91bGQgYmUgbG9ja2VkLlxuICAgKi9cbiAgb3BlbkRvY3VtZW50KGRvY3VtZW50LCBsb2NrKSB7XG4gICAgY29uc3QgaWQgPSBkb2N1bWVudC5pZDtcbiAgICBpZiAobG9jaykge1xuICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5wdXQoJy9kbXMvbG9jay8nICsgaWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmxvY2sgPSB7XG4gICAgICAgICAgYnk6IHtcbiAgICAgICAgICAgIG1lOiB0cnVlLFxuICAgICAgICAgICAgbmFtZTogdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLm5hbWUsXG4gICAgICAgICAgICBvdGhlcjogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZSgnb3BlbkRvY3VtZW50JywgaWQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoJ29wZW5Eb2N1bWVudCcsIGlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWQgY29udGVudCB2aWEgYWdlbnQuXG4gICAqIE9uIGNvbXBsZXRpb24sIHRoZSBhZ2VudCB3aWxsIHZpc3VhbGl6ZSB0aGUgZG93bmxvYWRlZCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGRvY3VtZW50cyBBIGRvY3VtZW50IHRvIG9wZW4uXG4gICAqL1xuICBkb3dubG9hZENvbnRlbnQoZG9jdW1lbnRzKSB7XG4gICAgbGV0IGRvY3MgPSBkb2N1bWVudHMubWFwKGRvYyA9PiB7XG4gICAgICByZXR1cm4ge2lkOiBkb2MuaWQsIHRpdGxlOiBkb2MudGl0bGUsIHR5cGU6IGRvYy50eXBlLm5hbWUgfHwgJycsIHZlcnNpb246IGRvYy52ZXJzaW9ufTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlKCdkb3dubG9hZENvbnRlbnQnLCBkb2NzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IGl0ZW1zIHRvIGNsaXBib2FyZC5cbiAgICpcbiAgICogQHBhcmFtIGRvY3VtZW50cyBMaXN0IG9mIGRvY3VtZW50cyB3aXRoIGlkLCB0aXRsZSwgdHlwZSBhbmQgcmVuZGl0aW9uLlxuICAgKi9cbiAgY29weVRvQ2xpcGJvYXJkKGRvY3VtZW50cykge1xuICAgIGlmICghZG9jdW1lbnRzIHx8IGRvY3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignQWdlbnQgY29weVRvQ2xpcGJvYXJkIGVycm9yOiBkb2N1bWVudHMgZG9lcyBub3QgY29udGFpbiBlbGVtZW50cycpO1xuICAgICAgcmV0dXJuIFV0aWxzLnRocm93KG51bGwsICdkb2N1bWVudHMgZG9lcyBub3QgY29udGFpbiBlbGVtZW50cycpLmNhbGwodGhpcywge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlKCdjb3B5VG9DbGlwYm9hcmQnLCBkb2N1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlcyB0aGUgc2V0dXAgaW5mb3JtYXRpb25zIGFib3V0IHRoZSBsYXN0IG9wZW5lZCBmb2xkZXJzXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8YW55PlxuICAgKi9cbiAgZ2V0TGFzdE9wZW5lZEZvbGRlcnNJbmZvKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICBjb25zdCB1cmkgPSAnL2FnZW50L2xvY2F0aW9ucyc7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmkpO1xuICAgIH1cblxuICAvKipcbiAgICogU2VuZCBpdGVtcyBhcyBlbWFpbC5cbiAgICpcbiAgICogQHBhcmFtIEN1c3RvbUVtYWlsIGNvbnRhaW4gYXR0YWNoZW1udHMgYW5kIG1lc3NhZ2UuIE1lc3NhZ2UgbXkgY29udGFpbnMgZGV0YWlscyBhYm91dCB0aGUgbWFpbC5cbiAgICovXG4gIHNlbmRBc01haWwoe2F0dGFjaG1lbnRzLCBtZXNzYWdlfTogQ3VzdG9tRW1haWwpIHtcbiAgICBpZiAoIWF0dGFjaG1lbnRzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdBZ2VudCBzZW5kQXNNYWlsIGVycm9yOiBkb2N1bWVudHMgYXJyYXkgZG9lcyBub3QgY29udGFpbiBlbGVtZW50cy4gQXR0YWNobWVudHMgY291bGQgbm90IGJlIGZvdW5kLicpO1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmVycm9yKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmRvY3VtZW50Lm9wZW4uZXJyb3IudGl0bGUnKSwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uZG9jdW1lbnQub3Blbi5lcnJvci5tZXNzYWdlJykpO1xuICAgICAgcmV0dXJuIFV0aWxzLnRocm93KG51bGwsICdkb2N1bWVudHMgYXJyYXkgZG9lcyBub3QgY29udGFpbiBlbGVtZW50cycpLmNhbGwodGhpcywge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlKCdzZW5kQXNNYWlsJywge2F0dGFjaG1lbnRzLCBtZXNzYWdlfSk7XG4gICAgfVxuICB9XG5cbiAgc2VuZEV4dGVybmFsQWN0aW9uKGV4ZWN1dGFibGUsIGFyZ3MpIHtcbiAgICB0aGlzLnNlbmRNZXNzYWdlKCdleHRlcm5hbCcsIHtleGVjdXRhYmxlLCBhcmdzfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbmRNZXNzYWdlKGFjdGlvbiwgZGF0YSkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLm5hbWUsXG4gICAgICBob3N0OiB0aGlzLmdldEhvc3QoKVxuICAgIH07XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLkVOQUlPX1BST1RPQ09MICsgYWN0aW9uICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SG9zdCgpIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgfVxuXG59XG4iXX0=
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrLWNvcmUvYWdlbnQvYWdlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQThDLFdBQVcsRUFBeUYsS0FBSyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BMLE9BQU8sRUFBQyxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFLcEQsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN6Qiw4Q0FBMkIsQ0FBQTtJQUMzQixnREFBNkIsQ0FBQTtBQUMvQixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUI7QUFXRCxNQUFNLE9BQU8sWUFBWTtJQWdCdkIsWUFDOEIsVUFBc0IsRUFDMUMsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLFNBQTJCLEVBQzNCLGFBQW1DLEVBQ25DLGVBQWdDO1FBUlosZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUMxQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBQ25DLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXZCbEMsbUJB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QUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBVSxFQUFFLElBQUk7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU8sV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJO1FBQzlCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJO1lBQzVDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1NBQ3JCLENBQUM7UUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFTyxPQUFPO1FBQ2IsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDOzhHQW5NVSxZQUFZLGtCQWlCYixXQUFXO2tIQWpCVixZQUFZOzsyRkFBWixZQUFZO2tCQUR4QixVQUFVOzswQkFrQk4sTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXBwQ2FjaGVTZXJ2aWNlLCBCYWNrZW5kU2VydmljZSwgQ29yZUNvbmZpZywgQ09SRV9DT05GSUcsIERtc09iamVjdCwgTG9nZ2VyLCBOb3RpZmljYXRpb25zU2VydmljZSwgU3lzdGVtU2VydmljZSwgVHJhbnNsYXRlU2VydmljZSwgVXNlclNlcnZpY2UsIFV0aWxzfSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIG1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1RyZWVOb2RlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmsvdHJlZS90cmVlLmNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2NrU2V0dGluZ3N9IGZyb20gJy4vLi4vLi4vZW8tY2xpZW50L3NldHRpbmdzL2FnZW50LWxvY2stc2V0dGluZ3MuZW51bSc7XG5pbXBvcnQge0N1c3RvbUVtYWlsfSBmcm9tICcuL2FnZW50LmludGVyZmFjZSc7XG5cbmV4cG9ydCBlbnVtIGFnZW50Q29uZmlnS2V5cyB7XG4gIEFVVE9DT05ORUNUID0gJ2F1dG9jb25uZWN0JyxcbiAgTE9DS1NFVFRJTkdTID0gJ2xvY2tzZXR0aW5ncydcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRDb25maWcge1xuICBhZ2VudDoge1xuICAgIFthZ2VudENvbmZpZ0tleXMuQVVUT0NPTk5FQ1RdPzogYm9vbGVhbjtcbiAgICBbYWdlbnRDb25maWdLZXlzLkxPQ0tTRVRUSU5HU10/OiBMb2NrU2V0dGluZ3NcbiAgfVxufVxuZXhwb3J0IHR5cGUgQWdlbnRDb25uZWN0aW9uQ29uZmlnID0gRXh0ZW5kZWRDb25maWdbJ2FnZW50J11cblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWdlbnRTZXJ2aWNlIHtcblxuICBwcml2YXRlIEVOQUlPX1BST1RPQ09MID0gJ3l1dXZpczovLyc7XG5cbiAgYWdlbnRBdmFpbGFiaWxpdHkgPSB7XG4gICAgQ09OTkVDVEVEOiAnZW8uYWdlbnQuYXZhaWxhYmlsaXR5LmNvbm5lY3RlZCcsXG4gICAgQVZBSUxBQkxFOiAnZW8uYWdlbnQuYXZhaWxhYmlsaXR5LmF2YWlsYWJsZScsXG4gICAgVU5BVkFJTEFCTEU6ICdlby5hZ2VudC5hdmFpbGFiaWxpdHkudW5hdmFpbGFibGUnXG4gIH07XG5cbiAgcHJpdmF0ZSBfaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0Nvbm5lY3RlZFNvdXJjZSA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICBwdWJsaWMgaXNDb25uZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5pc0Nvbm5lY3RlZFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgcHJpdmF0ZSBhZ2VudENvbmZpZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWdlbnRDb25uZWN0aW9uQ29uZmlnPihudWxsKTtcbiAgcHVibGljIGFnZW50Q29uZmlnJDogT2JzZXJ2YWJsZTxBZ2VudENvbm5lY3Rpb25Db25maWc+ID0gdGhpcy5hZ2VudENvbmZpZy5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KENPUkVfQ09ORklHKSBwdWJsaWMgY29yZUNvbmZpZzogQ29yZUNvbmZpZyxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYWNrZW5kU2VydmljZTogQmFja2VuZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENhY2hlU2VydmljZTogQXBwQ2FjaGVTZXJ2aWNlKSB7XG4gICAgdGhpcy5nZXRBZ2VudENvbm5lY3Rpb25TdGF0dXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWdlbnRDb25uZWN0aW9uU3RhdHVzKCkge1xuICAgIGZvcmtKb2luKFt0aGlzLmFwcENhY2hlU2VydmljZS5nZXRJdGVtKCdlby5hZ2VudC5jb25uZWN0ZWQnKSwgdGhpcy5nZXRBZ2VudENvbmZpZygpXSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKFtzdG9yYWdlLCBjb25maWddKSA9PiB0aGlzLmlzQ29ubmVjdGVkID0gKGNvbmZpZyAmJiBjb25maWcuaGFzT3duUHJvcGVydHkoYWdlbnRDb25maWdLZXlzLkFVVE9DT05ORUNUKSA/IGNvbmZpZy5hdXRvY29ubmVjdCA6IHN0b3JhZ2UgIT09IG51bGwgPyBzdG9yYWdlIDogbnVsbCkpXG4gICAgICApLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ2V0QWdlbnRDb25maWcoKTogT2JzZXJ2YWJsZTxBZ2VudENvbm5lY3Rpb25Db25maWc+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxFeHRlbmRlZENvbmZpZz4oJ2Fzc2V0cy9fZGVmYXVsdC9jb25maWcvZXh0ZW5kLmpzb24nLCB7d2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvcmVDb25maWcud2l0aENyZWRlbnRpYWxzfSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpLFxuICAgICAgdGFwKChjb25maWc6IEV4dGVuZGVkQ29uZmlnKSA9PiB0aGlzLmFnZW50Q29uZmlnLm5leHQoey4uLmNvbmZpZz8uYWdlbnR9KSksXG4gICAgICBtYXAoKGNvbmZpZzogRXh0ZW5kZWRDb25maWcpID0+IGNvbmZpZz8uYWdlbnQpKVxuICB9XG5cbiAgc2V0IGlzQ29ubmVjdGVkKGlzQ29ubmVjdGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNDb25uZWN0ZWQgPSBpc0Nvbm5lY3RlZDtcbiAgICB0aGlzLmlzQ29ubmVjdGVkU291cmNlLm5leHQoaXNDb25uZWN0ZWQpO1xuICAgIHRoaXMuYXBwQ2FjaGVTZXJ2aWNlLnNldEl0ZW0oJ2VvLmFnZW50LmNvbm5lY3RlZCcsIGlzQ29ubmVjdGVkKTtcbiAgfVxuXG4gIGdldCBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNDb25uZWN0ZWQ7XG4gIH1cblxuICBzZXRBZ2VudFN0YXR1cyhjb25uZWN0YWdlbnQpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBpZiAodHlwZW9mIGNvbm5lY3RhZ2VudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBjb25uZWN0YWdlbnQ7XG4gICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBsb2NhdGlvbiBlbnRyeSB0byB0aGUgYWdlbnQgc2VydmljZXMgbG9jYXRpb24gaGlzdG9yeS5cbiAgICogQHBhcmFtIGNvbnRleHRGb2xkZXIgVGhlIGxvY2F0aW9ucyBjb250ZXh0IGZvbGRlclxuICAgKiBAcGFyYW0gdHJlZU5vZGUgTm9kZSBmcm9tIHRoZSBjb250ZXh0IGZvbGRlcnMgc3RydWN0dXJlIHRyZWVcbiAgICovXG4gIHVwZGF0ZVVzZXJMb2NhdGlvbihjb250ZXh0Rm9sZGVyOiBEbXNPYmplY3QsIHRyZWVOb2RlPzogVHJlZU5vZGUpIHtcblxuICAgIGlmICh0cmVlTm9kZSAmJiB0cmVlTm9kZS5kYXRhICYmIHRyZWVOb2RlLmRhdGEudHlwZSkge1xuXG4gICAgICAvLyBpZiBhIGdpdmVuIHRyZWVOb2RlIGNvbnRhaW5zIGEgdGFyZ2V0IHR5cGUsIHdlJ2xsIG9ubHkgYWRkIGEgdXNlciBsb2NhdGlvblxuICAgICAgLy8gd2hlbiB0aGUgdHlwZSBpcyBhYmxlIHRvIGFjY2VwdCBjb250ZW50IChvdGhlcndpc2UgdXNlbGVzcyBmb3Igb2ZmaWNlIEFkZElucylcbiAgICAgIGNvbnN0IHRhcmdldFR5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZSh0cmVlTm9kZS5kYXRhLnR5cGUpO1xuICAgICAgaWYgKHRhcmdldFR5cGUubWF4RmlsZXMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0aXRsZSA9IGNvbnRleHRGb2xkZXIudGl0bGU7XG4gICAgaWYgKHRyZWVOb2RlKSB7XG4gICAgICB0aXRsZSArPSAnID4gJyArIHRyZWVOb2RlLnBhdGguam9pbignID4gJyk7XG4gICAgfVxuXG4gICAgbGV0IGlkID0gY29udGV4dEZvbGRlci5pZDtcbiAgICBpZiAodHJlZU5vZGUpIHtcbiAgICAgIGlkICs9ICdfJyArIHRyZWVOb2RlLmRhdGEua2V5O1xuICAgIH1cblxuICAgIHRoaXMuYmFja2VuZFNlcnZpY2UucG9zdCgnL2xvY2F0aW9ucycsIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIHR5cGU6IGNvbnRleHRGb2xkZXIudHlwZS5uYW1lLFxuICAgICAgY2hpbGRUeXBlOiAodHJlZU5vZGUgJiYgdHJlZU5vZGUuZGF0YSkgPyB0cmVlTm9kZS5kYXRhLnR5cGUgOiB1bmRlZmluZWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgICdkZXNjcmlwdGlvbic6IGNvbnRleHRGb2xkZXI/LmRlc2NyaXB0aW9uID8/IHVuZGVmaW5lZCxcbiAgICAgICAgJ3RyZWVOb2RlJzogdHJlZU5vZGU/LmRhdGE/LmRhdGEgPz8gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICAgICAgICBcbiAgICB9LCB0aGlzLmJhY2tlbmRTZXJ2aWNlLmdldEFnZW50QmFzZSgpKS5zdWJzY3JpYmUociA9PiB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgYWRkZWQgbG9jYXRpb24gJyR7dGl0bGV9JyB0byBhZ2VudCBzZXJ2aWNlYCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIGRvY3VtZW50IHZpYSBhZ2VudC5cbiAgICpcbiAgICogQHBhcmFtIGRvY3VtZW50IEEgZG9jdW1lbnQgdG8gb3Blbi5cbiAgICogQHBhcmFtIGxvY2sgQm9vbGVhbiwgaWYgdGhlIGRtcyBpdGVtIHNob3VsZCBiZSBsb2NrZWQuXG4gICAqL1xuICBvcGVuRG9jdW1lbnQoZG9jdW1lbnQsIGxvY2spIHtcbiAgICBjb25zdCBpZCA9IGRvY3VtZW50LmlkO1xuICAgIGlmIChsb2NrKSB7XG4gICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLnB1dCgnL2Rtcy9sb2NrLycgKyBpZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQubG9jayA9IHtcbiAgICAgICAgICBieToge1xuICAgICAgICAgICAgbWU6IHRydWUsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkubmFtZSxcbiAgICAgICAgICAgIG90aGVyOiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKCdvcGVuRG9jdW1lbnQnLCBpZCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZSgnb3BlbkRvY3VtZW50JywgaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZCBjb250ZW50IHZpYSBhZ2VudC5cbiAgICogT24gY29tcGxldGlvbiwgdGhlIGFnZW50IHdpbGwgdmlzdWFsaXplIHRoZSBkb3dubG9hZGVkIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZG9jdW1lbnRzIEEgZG9jdW1lbnQgdG8gb3Blbi5cbiAgICovXG4gIGRvd25sb2FkQ29udGVudChkb2N1bWVudHMpIHtcbiAgICBsZXQgZG9jcyA9IGRvY3VtZW50cy5tYXAoZG9jID0+IHtcbiAgICAgIHJldHVybiB7aWQ6IGRvYy5pZCwgdGl0bGU6IGRvYy50aXRsZSwgdHlwZTogZG9jLnR5cGUubmFtZSB8fCAnJywgdmVyc2lvbjogZG9jLnZlcnNpb259O1xuICAgIH0pO1xuICAgIHRoaXMuc2VuZE1lc3NhZ2UoJ2Rvd25sb2FkQ29udGVudCcsIGRvY3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHkgaXRlbXMgdG8gY2xpcGJvYXJkLlxuICAgKlxuICAgKiBAcGFyYW0gZG9jdW1lbnRzIExpc3Qgb2YgZG9jdW1lbnRzIHdpdGggaWQsIHRpdGxlLCB0eXBlIGFuZCByZW5kaXRpb24uXG4gICAqL1xuICBjb3B5VG9DbGlwYm9hcmQoZG9jdW1lbnRzKSB7XG4gICAgaWYgKCFkb2N1bWVudHMgfHwgZG9jdW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdBZ2VudCBjb3B5VG9DbGlwYm9hcmQgZXJyb3I6IGRvY3VtZW50cyBkb2VzIG5vdCBjb250YWluIGVsZW1lbnRzJyk7XG4gICAgICByZXR1cm4gVXRpbHMudGhyb3cobnVsbCwgJ2RvY3VtZW50cyBkb2VzIG5vdCBjb250YWluIGVsZW1lbnRzJykuY2FsbCh0aGlzLCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoJ2NvcHlUb0NsaXBib2FyZCcsIGRvY3VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVzIHRoZSBzZXR1cCBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIGxhc3Qgb3BlbmVkIGZvbGRlcnNcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBnZXRMYXN0T3BlbmVkRm9sZGVyc0luZm8oKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgIGNvbnN0IHVyaSA9ICcvbG9jYXRpb25zJztcbiAgICAgIHJldHVybiB0aGlzLmJhY2tlbmRTZXJ2aWNlLmdldCh1cmksICcvYWdlbnQnKTtcbiAgICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgaXRlbXMgYXMgZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSBDdXN0b21FbWFpbCBjb250YWluIGF0dGFjaGVtbnRzIGFuZCBtZXNzYWdlLiBNZXNzYWdlIG15IGNvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhlIG1haWwuXG4gICAqL1xuICBzZW5kQXNNYWlsKHthdHRhY2htZW50cywgbWVzc2FnZX06IEN1c3RvbUVtYWlsKSB7XG4gICAgaWYgKCFhdHRhY2htZW50cz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignQWdlbnQgc2VuZEFzTWFpbCBlcnJvcjogZG9jdW1lbnRzIGFycmF5IGRvZXMgbm90IGNvbnRhaW4gZWxlbWVudHMuIEF0dGFjaG1lbnRzIGNvdWxkIG5vdCBiZSBmb3VuZC4nKTtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5lcnJvcih0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5kb2N1bWVudC5vcGVuLmVycm9yLnRpdGxlJyksIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmRvY3VtZW50Lm9wZW4uZXJyb3IubWVzc2FnZScpKTtcbiAgICAgIHJldHVybiBVdGlscy50aHJvdyhudWxsLCAnZG9jdW1lbnRzIGFycmF5IGRvZXMgbm90IGNvbnRhaW4gZWxlbWVudHMnKS5jYWxsKHRoaXMsIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZSgnc2VuZEFzTWFpbCcsIHthdHRhY2htZW50cywgbWVzc2FnZX0pO1xuICAgIH1cbiAgfVxuXG4gIHNlbmRFeHRlcm5hbEFjdGlvbihleGVjdXRhYmxlLCBhcmdzKSB7XG4gICAgdGhpcy5zZW5kTWVzc2FnZSgnZXh0ZXJuYWwnLCB7ZXhlY3V0YWJsZSwgYXJnc30pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kTWVzc2FnZShhY3Rpb24sIGRhdGEpIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHVzZXI6IHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS5uYW1lLFxuICAgICAgaG9zdDogdGhpcy5nZXRIb3N0KClcbiAgICB9O1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5FTkFJT19QUk9UT0NPTCArIGFjdGlvbiArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEhvc3QoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gIH1cblxufVxuIl19