@colijnit/homedecorator 255.1.2 → 255.1.3

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 (58) hide show
  1. package/app/core/model/homedecorator-settings-options.d.ts +1 -0
  2. package/app/core/service/homedecorator-connector-adapter.service.d.ts +1 -1
  3. package/app/core/service/utils.service.d.ts +1 -0
  4. package/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.scss +2 -4
  5. package/app/plugins/core3d/items/floor-plane-item.d.ts +8 -1
  6. package/app/plugins/core3d/items/metadata.d.ts +2 -0
  7. package/app/plugins/core3d/service/ar.service.d.ts +1 -0
  8. package/app/plugins/core3d/service/floor-pattern.service.d.ts +26 -0
  9. package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +25 -0
  10. package/app/plugins/core3d/service/outline.service.d.ts +1 -2
  11. package/app/plugins/core3d/service/post-processing.service.d.ts +6 -0
  12. package/app/plugins/core3d/service/scene.service.d.ts +4 -1
  13. package/app/plugins/core3d/service/ssr.service.d.ts +18 -0
  14. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +40 -3
  15. package/app/plugins/render/service/new-render.service.d.ts +1 -0
  16. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +10 -1
  17. package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +1 -0
  18. package/app/plugins/toolbar/toolbar.module.d.ts +2 -1
  19. package/app/shared/pdf-export/pdf-export.component.d.ts +20 -0
  20. package/app/shared/pdf-export/pdf-export.component.scss +19 -0
  21. package/app/shared/pdf-export/pdf-export.module.d.ts +11 -0
  22. package/assets/icons/pen-ruler.svg +1 -0
  23. package/assets/icons/xmark_regular.svg +1 -0
  24. package/bundles/colijnit-homedecorator.umd.js +1195 -174
  25. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  26. package/colijnit-homedecorator-255.1.2.tgz +0 -0
  27. package/esm2015/app/app.version.js +4 -4
  28. package/esm2015/app/core/model/homedecorator-settings-options.js +2 -1
  29. package/esm2015/app/core/model/light-preset.js +11 -7
  30. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +4 -6
  31. package/esm2015/app/core/service/homedecorator-connector.service.js +3 -1
  32. package/esm2015/app/core/service/utils.service.js +16 -1
  33. package/esm2015/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.js +2 -2
  34. package/esm2015/app/plugins/core3d/items/floor-plane-item.js +25 -2
  35. package/esm2015/app/plugins/core3d/items/metadata.js +1 -1
  36. package/esm2015/app/plugins/core3d/service/ar.service.js +14 -1
  37. package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +156 -0
  38. package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +122 -0
  39. package/esm2015/app/plugins/core3d/service/floor.service.js +5 -2
  40. package/esm2015/app/plugins/core3d/service/outline.service.js +9 -8
  41. package/esm2015/app/plugins/core3d/service/post-processing.service.js +77 -22
  42. package/esm2015/app/plugins/core3d/service/scene.service.js +30 -13
  43. package/esm2015/app/plugins/core3d/service/ssr.service.js +53 -0
  44. package/esm2015/app/plugins/lite-selector/lite-selector/component/selections-summary/selections-summary.component.js +3 -3
  45. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +335 -79
  46. package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +3 -2
  47. package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +3 -2
  48. package/esm2015/app/plugins/render/service/new-render.service.js +37 -13
  49. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +135 -5
  50. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +34 -8
  51. package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +9 -25
  52. package/esm2015/app/plugins/toolbar/toolbar.module.js +8 -4
  53. package/esm2015/app/shared/pdf-export/pdf-export.component.js +86 -0
  54. package/esm2015/app/shared/pdf-export/pdf-export.module.js +38 -0
  55. package/fesm2015/colijnit-homedecorator.js +1156 -181
  56. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  57. package/package.json +2 -2
  58. package/assets/hdri/ground_MASK.jpg +0 -0
@@ -21,13 +21,14 @@ export class ModelUploaderComponent {
21
21
  this.file = null;
22
22
  this.fileMaxSize = 30; // file size in mb
23
23
  this._maxFileSize = this.fileMaxSize * 1024 * 1024; // fileMaxSize to kb
24
- this._allowedFiles = ['glb', 'obj', 'fbx', '3ds', 'gltf'];
24
+ this._allowedFiles = ['glb', 'obj', 'fbx', '3ds', 'gltf', 'stl'];
25
25
  }
26
26
  ngOnInit() {
27
27
  }
28
28
  ngOnDestroy() {
29
29
  }
30
30
  onChange(event) {
31
+ this.showUploadError = false;
31
32
  const file = event.target.files[0];
32
33
  if (file) {
33
34
  this.file = file;
@@ -129,4 +130,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
129
130
  type: ViewChild,
130
131
  args: ['fileUpload']
131
132
  }] } });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdXBsb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9tb2RlbC11cGxvYWRlci9tb2RlbC11cGxvYWRlci9tb2RlbC11cGxvYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBd0MsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7O0FBd0JqRSxNQUFNLE9BQU8sc0JBQXNCO0lBV2pDLFlBQ1MsZUFBNkMsRUFDNUMsZUFBa0M7UUFEbkMsb0JBQWUsR0FBZixlQUFlLENBQThCO1FBQzVDLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQVRyQyxTQUFJLEdBQWdCLElBQUksQ0FBQztRQUN6QixnQkFBVyxHQUFXLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQjtRQUczQyxpQkFBWSxHQUFXLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLG9CQUFvQjtRQUMzRSxrQkFBYSxHQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBTXZFLENBQUM7SUFFRCxRQUFRO0lBRVIsQ0FBQztJQUVELFdBQVc7SUFFWCxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQVU7UUFDeEIsTUFBTSxJQUFJLEdBQVMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RDLDREQUE0RDtnQkFDNUQsNERBQTREO2dCQUM1RCxNQUFNLFNBQVMsR0FBYSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakQsTUFBTSxhQUFhLEdBQVcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFO29CQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUM1QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyw4QkFBOEIsQ0FBQztpQkFDbkQ7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzthQUM3RTtTQUNGO0lBQ0gsQ0FBQztJQUVZLE1BQU0sQ0FBQyxhQUFxQjs7WUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNiLE1BQU0sV0FBVyxHQUFnQixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pFLE1BQU0sSUFBSSxHQUFRO29CQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsWUFBWSxFQUFFLFdBQVc7b0JBQ3pCLFFBQVEsRUFBRSxhQUFhO2lCQUN4QixDQUFDO2dCQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzthQUMvQztRQUNILENBQUM7S0FBQTtJQUVZLGlCQUFpQixDQUFFLElBQVU7O1lBQ3hDLE9BQU8sSUFBSSxPQUFPLENBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO29CQUNuQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7d0JBQ2pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBcUIsQ0FBQyxDQUFDO3FCQUN2Qzt5QkFBTTt3QkFDTCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxDQUFDO3FCQUM3RDtnQkFDSCxDQUFDLENBQUM7Z0JBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7b0JBQ3BCLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLENBQUMsQ0FBQztnQkFFRixNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7O29IQTdFVSxzQkFBc0I7d0dBQXRCLHNCQUFzQix3S0FuQnZCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JUOzRGQUdVLHNCQUFzQjtrQkFyQmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JUO29CQUNELFNBQVMsRUFBRSxDQUFDLCtCQUErQixDQUFDO2lCQUM3QzttSkFHaUMsZUFBZTtzQkFBOUMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC1tb2RlbC11cGxvYWRlcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJtb2RlbC11cGxvYWQtY29udGFpbmVyXCIgKGNsaWNrKT1cImZpbGVVcGxvYWQuY2xpY2soKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxoMz5VcGxvYWQgM0QgbW9kZWw8L2gzPlxyXG4gICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlxyXG4gICAgICAgIFVwbG9hZCBhIG1vZGVsXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd1VwbG9hZEVycm9yXCIgY2xhc3M9XCJ1cGxvYWQtZXJyb3ItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPHNwYW4+e3sgdXBsb2FkRXJyb3IgfX08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCIgaWQ9XCJmaWxlVXBsb2FkXCIgY2xhc3M9XCJmaWxlLWlucHV0XCIgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIgI2ZpbGVVcGxvYWQvPlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZVVybHM6IFsnLi9tb2RlbC11cGxvYWQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9kZWxVcGxvYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsZVVwbG9hZCcpIHB1YmxpYyBmaWxlVXBsb2FkSW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHB1YmxpYyBmaWxlOiBGaWxlIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIGZpbGVNYXhTaXplOiBudW1iZXIgPSAzMDsgLy8gZmlsZSBzaXplIGluIG1iXHJcbiAgcHVibGljIHNob3dVcGxvYWRFcnJvcjogYm9vbGVhbjtcclxuICBwdWJsaWMgdXBsb2FkRXJyb3I6IHN0cmluZztcclxuICBwcml2YXRlIF9tYXhGaWxlU2l6ZTogbnVtYmVyID0gdGhpcy5maWxlTWF4U2l6ZSAqIDEwMjQgKiAxMDI0OyAvLyBmaWxlTWF4U2l6ZSB0byBrYlxyXG4gIHByaXZhdGUgX2FsbG93ZWRGaWxlczogc3RyaW5nW10gPSBbJ2dsYicsICdvYmonLCAnZmJ4JywgJzNkcycsICdnbHRmJ107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHNldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICB0aGlzLmZpbGUgPSBmaWxlO1xyXG4gICAgICBpZiAodGhpcy5maWxlLnNpemUgPCB0aGlzLl9tYXhGaWxlU2l6ZSkge1xyXG4gICAgICAgIC8vIHNhZGx5IHdlIGNhbid0IHVzZSBmaWxlLnR5cGUgdG8gdmFsaWRhdGUgdGhlIHVwbG9hZCB0eXBlLlxyXG4gICAgICAgIC8vIGZvciBub3cganVzdCBiYXNlIGl0IG9uIHRoZSBmaWxlIGV4dGVuc2lvbiBmcm9tIHRoZSBuYW1lLlxyXG4gICAgICAgIGNvbnN0IGZpbGVQYXJ0czogc3RyaW5nW10gPSBmaWxlLm5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcgPSBmaWxlUGFydHNbMV07XHJcbiAgICAgICAgaWYgKHRoaXMuX2FsbG93ZWRGaWxlcy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZChmaWxlRXh0ZW5zaW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zaG93VXBsb2FkRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRFcnJvciA9ICdZb3VyIHVwbG9hZCBpcyBub3Qgc3VwcG9ydGVkJztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93VXBsb2FkRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSAnWW91ciB1cGxvYWQgaXMgbGFyZ2VyIHRoYW4gJyArIHRoaXMuZmlsZU1heFNpemUgKyAnIG1iJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwbG9hZChmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgY29uc3QgYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyID0gYXdhaXQgdGhpcy5maWxlVG9BcnJheUJ1ZmZlcih0aGlzLmZpbGUpO1xyXG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSB7XHJcbiAgICAgICAgZmlsZTogdGhpcy5maWxlLFxyXG4gICAgICAgIGZpbGVDb250ZW50czogYXJyYXlCdWZmZXIsXHJcbiAgICAgICAgZmlsZVR5cGU6IGZpbGVFeHRlbnNpb25cclxuICAgICAgfTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5Vc2VyTW9kZWxVcGxvYWRlZCwgZGF0YSk7XHJcbiAgICAgIHRoaXMuZmlsZVVwbG9hZElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBmaWxlVG9BcnJheUJ1ZmZlciAoZmlsZTogRmlsZSk6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxBcnJheUJ1ZmZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChyZWFkZXIucmVzdWx0KSB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGaWxlIGNvdWxkIG5vdCBiZSByZWFkIGFzIEFycmF5QnVmZmVyLicpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgICByZWplY3QobmV3IEVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBmaWxlLicpKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdXBsb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9tb2RlbC11cGxvYWRlci9tb2RlbC11cGxvYWRlci9tb2RlbC11cGxvYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBd0MsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7O0FBd0JqRSxNQUFNLE9BQU8sc0JBQXNCO0lBV2pDLFlBQ1MsZUFBNkMsRUFDNUMsZUFBa0M7UUFEbkMsb0JBQWUsR0FBZixlQUFlLENBQThCO1FBQzVDLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQVRyQyxTQUFJLEdBQWdCLElBQUksQ0FBQztRQUN6QixnQkFBVyxHQUFXLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQjtRQUczQyxpQkFBWSxHQUFXLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLG9CQUFvQjtRQUMzRSxrQkFBYSxHQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQU05RSxDQUFDO0lBRUQsUUFBUTtJQUVSLENBQUM7SUFFRCxXQUFXO0lBRVgsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFVO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFTLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN0Qyw0REFBNEQ7Z0JBQzVELDREQUE0RDtnQkFDNUQsTUFBTSxTQUFTLEdBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pELE1BQU0sYUFBYSxHQUFXLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtvQkFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDNUI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsOEJBQThCLENBQUM7aUJBQ25EO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7YUFDN0U7U0FDRjtJQUNILENBQUM7SUFFWSxNQUFNLENBQUMsYUFBcUI7O1lBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDYixNQUFNLFdBQVcsR0FBZ0IsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6RSxNQUFNLElBQUksR0FBUTtvQkFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFlBQVksRUFBRSxXQUFXO29CQUN6QixRQUFRLEVBQUUsYUFBYTtpQkFDeEIsQ0FBQztnQkFDRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7YUFDL0M7UUFDSCxDQUFDO0tBQUE7SUFFWSxpQkFBaUIsQ0FBRSxJQUFVOztZQUN4QyxPQUFPLElBQUksT0FBTyxDQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtvQkFDbkIsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO3dCQUNqQixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQXFCLENBQUMsQ0FBQztxQkFDdkM7eUJBQU07d0JBQ0wsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUMsQ0FBQztxQkFDN0Q7Z0JBQ0gsQ0FBQyxDQUFDO2dCQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO29CQUNwQixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRSxDQUFDLENBQUM7Z0JBRUYsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBOztvSEE5RVUsc0JBQXNCO3dHQUF0QixzQkFBc0Isd0tBbkJ2Qjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCVDs0RkFHVSxzQkFBc0I7a0JBckJsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCVDtvQkFDRCxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztpQkFDN0M7bUpBR2lDLGVBQWU7c0JBQTlDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnAtbW9kZWwtdXBsb2FkZXInLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kZWwtdXBsb2FkLWNvbnRhaW5lclwiIChjbGljayk9XCJmaWxlVXBsb2FkLmNsaWNrKClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jb250YWluZXJcIj5cclxuICAgICAgICA8aDM+VXBsb2FkIDNEIG1vZGVsPC9oMz5cclxuICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj5cclxuICAgICAgICBVcGxvYWQgYSBtb2RlbFxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInNob3dVcGxvYWRFcnJvclwiIGNsYXNzPVwidXBsb2FkLWVycm9yLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxzcGFuPnt7IHVwbG9hZEVycm9yIH19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGlucHV0IHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiIGlkPVwiZmlsZVVwbG9hZFwiIGNsYXNzPVwiZmlsZS1pbnB1dFwiIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiICNmaWxlVXBsb2FkLz5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGVsVXBsb2FkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWQnKSBwdWJsaWMgZmlsZVVwbG9hZElucHV0OiBFbGVtZW50UmVmO1xyXG5cclxuICBwdWJsaWMgZmlsZTogRmlsZSB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBmaWxlTWF4U2l6ZTogbnVtYmVyID0gMzA7IC8vIGZpbGUgc2l6ZSBpbiBtYlxyXG4gIHB1YmxpYyBzaG93VXBsb2FkRXJyb3I6IGJvb2xlYW47XHJcbiAgcHVibGljIHVwbG9hZEVycm9yOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfbWF4RmlsZVNpemU6IG51bWJlciA9IHRoaXMuZmlsZU1heFNpemUgKiAxMDI0ICogMTAyNDsgLy8gZmlsZU1heFNpemUgdG8ga2JcclxuICBwcml2YXRlIF9hbGxvd2VkRmlsZXM6IHN0cmluZ1tdID0gWydnbGInLCAnb2JqJywgJ2ZieCcsICczZHMnLCAnZ2x0ZicsICdzdGwnXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93VXBsb2FkRXJyb3IgPSBmYWxzZTtcclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICB0aGlzLmZpbGUgPSBmaWxlO1xyXG4gICAgICBpZiAodGhpcy5maWxlLnNpemUgPCB0aGlzLl9tYXhGaWxlU2l6ZSkge1xyXG4gICAgICAgIC8vIHNhZGx5IHdlIGNhbid0IHVzZSBmaWxlLnR5cGUgdG8gdmFsaWRhdGUgdGhlIHVwbG9hZCB0eXBlLlxyXG4gICAgICAgIC8vIGZvciBub3cganVzdCBiYXNlIGl0IG9uIHRoZSBmaWxlIGV4dGVuc2lvbiBmcm9tIHRoZSBuYW1lLlxyXG4gICAgICAgIGNvbnN0IGZpbGVQYXJ0czogc3RyaW5nW10gPSBmaWxlLm5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcgPSBmaWxlUGFydHNbMV07XHJcbiAgICAgICAgaWYgKHRoaXMuX2FsbG93ZWRGaWxlcy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZChmaWxlRXh0ZW5zaW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zaG93VXBsb2FkRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRFcnJvciA9ICdZb3VyIHVwbG9hZCBpcyBub3Qgc3VwcG9ydGVkJztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93VXBsb2FkRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSAnWW91ciB1cGxvYWQgaXMgbGFyZ2VyIHRoYW4gJyArIHRoaXMuZmlsZU1heFNpemUgKyAnIG1iJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwbG9hZChmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgY29uc3QgYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyID0gYXdhaXQgdGhpcy5maWxlVG9BcnJheUJ1ZmZlcih0aGlzLmZpbGUpO1xyXG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSB7XHJcbiAgICAgICAgZmlsZTogdGhpcy5maWxlLFxyXG4gICAgICAgIGZpbGVDb250ZW50czogYXJyYXlCdWZmZXIsXHJcbiAgICAgICAgZmlsZVR5cGU6IGZpbGVFeHRlbnNpb25cclxuICAgICAgfTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5Vc2VyTW9kZWxVcGxvYWRlZCwgZGF0YSk7XHJcbiAgICAgIHRoaXMuZmlsZVVwbG9hZElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBmaWxlVG9BcnJheUJ1ZmZlciAoZmlsZTogRmlsZSk6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxBcnJheUJ1ZmZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChyZWFkZXIucmVzdWx0KSB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGaWxlIGNvdWxkIG5vdCBiZSByZWFkIGFzIEFycmF5QnVmZmVyLicpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgICByZWplY3QobmV3IEVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBmaWxlLicpKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -147,7 +147,8 @@ export class ProductCatalogComponent {
147
147
  if (jsonString) {
148
148
  const jsonObj = JSON.parse(jsonString);
149
149
  if (jsonObj['hash'] !== undefined) {
150
- const customerName = 'Linteloo';
150
+ const customerName = this.catalogInfo.username;
151
+ // const customerName: string = 'Linteloo';
151
152
  // three main api urls
152
153
  const modelUrl = this.catalogInfo.externalSource.domain + '/models/' + jsonObj['hash'] + '/glb';
153
154
  const configurationUrl = this.catalogInfo.externalSource.domain + '/configurationData/' + jsonObj['hash'];
@@ -435,4 +436,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
435
436
  type: HostBinding,
436
437
  args: ['class.no-offset']
437
438
  }] } });
438
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jYXRhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvcHJvZHVjdC1jYXRhbG9nL3Byb2R1Y3QtY2F0YWxvZy9wcm9kdWN0LWNhdGFsb2cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUE4QixNQUFNLGVBQWUsQ0FBQztBQUdsRixPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQVkxRyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFHakUsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVFekgsTUFBTSxPQUFPLHVCQUF1QjtJQXlCbEMsWUFDUyxlQUE2QyxFQUM1QyxXQUE4QixFQUM5QixlQUE4QyxFQUM5QyxrQkFBNkMsRUFDN0MsYUFBMkIsRUFDM0IsaUJBQW1DLEVBQ25DLFNBQW1CLEVBQ25CLGVBQStCLEVBQy9CLHFCQUEyQyxFQUMzQyxlQUFxRCxFQUNyRCxzQkFBNkMsRUFDN0MsdUJBQStDO1FBWGhELG9CQUFlLEdBQWYsZUFBZSxDQUE4QjtRQUM1QyxnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQStCO1FBQzlDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBMkI7UUFDN0Msa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBQzNDLG9CQUFlLEdBQWYsZUFBZSxDQUFzQztRQUNyRCwyQkFB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Ozs7Ozs7Ozs7R0E0RFg7b0JBQ0QsU0FBUyxFQUFFLENBQUMsa0NBQWtDLENBQUM7aUJBQ2hEO3NmQUdjLEtBQUs7c0JBRGYsV0FBVzt1QkFBQyxhQUFhO2dCQVFuQixlQUFlO3NCQURyQixXQUFXO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0V4dGVybmFsU291cmNlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1zb3VyY2UuYm8nO1xyXG5pbXBvcnQge0V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mbyc7XHJcbmltcG9ydCB7Q2F0YWxvZ0RlZmluaXRpb259IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2NhdGFsb2ctZGVmaW5pdGlvbi5ibyc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3MnO1xyXG5pbXBvcnQge0V4dGVybmFsU291cmNlVmlld21vZGVsfSBmcm9tICdAY29saWpuaXQvY2F0YWxvZy9saWIvbW9kZWwvZXh0ZXJuYWwtc291cmNlLXZpZXdtb2RlbCc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY3JlZW5TaXplQW5hbHlzaXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2NyZWVuLXNpemUtYW5hbHlzaXMvc2NyZWVuLXNpemUtYW5hbHlzaXMuc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdWlsZEZ1cm5pdHVyZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvYnVpbGQtZnVybml0dXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29ycGxhblNlcnZpY2V9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL2Zsb29ycGxhbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtDYXRhbG9nU2VydmljZX0gZnJvbSAnQGNvbGlqbml0L2NhdGFsb2cnO1xyXG5pbXBvcnQge0R5bmFtaWNTY3JpcHRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2R5bmFtaWMtc2NyaXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLWNhdGFsb2ctc3RhcnR1cC1pbmZvLXJlcXVlc3QnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JFeHRlcm5hbFNldHRpbmdzSW50ZXJmYWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9ob21lZGVjb3JhdG9yLWV4dGVybmFsLXNldHRpbmdzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7VGhpcmRQYXJ0eU1vZGVsU2VydmljZX0gZnJvbSAnLi4vLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3Ivc2VydmljZS90aGlyZC1wYXJ0eS1tb2RlbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtFeHRlcm5hbFNvdXJjZUFydGljbGVDbGlja0ludGVyZmFjZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvaW50ZXJmYWNlL2V4dGVybmFsLXNvdXJjZS1hcnRpY2xlLWNsaWNrLmludGVyZmFjZSc7XHJcbmltcG9ydCB7QXJ0aWNsZUxpc3RPYmplY3RFeHRlbmRlZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1saXN0LW9iamVjdC1leHRlbmRlZC5ibyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncnAtcHJvZHVjdC1jYXRhbG9nJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LWNhdGFsb2ctd3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXRhbG9nLWJ1dHRvbi13cmFwcGVyXCIgKm5nSWY9XCJzaG93T3duQ29sbGVjdGlvbiB8fCBzaG93RXh0ZXJuYWxDYXRhbG9nXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFjay1idXR0b25cIiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKCRldmVudClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmFycm93X2JhY2s8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhY2stYnV0dG9uLXNwYW5cIj5UZXJ1Zzwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1zcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWZyZXNoLWJ1dHRvblwiIChjbGljayk9XCJoYW5kbGVSZWZyZXNoQ2xpY2soJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+cmVmcmVzaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVmcmVzaC1idXR0b24tc3BhblwiPlZlcnZlcnNlbjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tc3BhY2VyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVmcmVzaC1idXR0b25cIiAoY2xpY2spPVwiaWZyYW1lVGVzdCgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5yZWZyZXNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZyZXNoLWJ1dHRvbi1zcGFuXCI+aWZyYW1lVGVzdDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd093bkNvbGxlY3Rpb25cIj5cclxuICAgICAgICAgIDxycC1wcm9kdWN0LW93bi1jb2xsZWN0aW9uXHJcbiAgICAgICAgICAgIFtzZXR0aW5nc109XCJzZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAoYXJ0aWNsZUNsaWNrKT1cImhhbmRsZUFydGljbGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgID48L3JwLXByb2R1Y3Qtb3duLWNvbGxlY3Rpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJob21lRGVjb0h1YiAmJiAhc2hvd093bkNvbGxlY3Rpb24gJiYgIXNob3dFeHRlcm5hbENhdGFsb2dcIj5cclxuICAgICAgICAgIDxycC1tb2RlbC11cGxvYWRlcj5cclxuXHJcbiAgICAgICAgICA8L3JwLW1vZGVsLXVwbG9hZGVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaG93T3duQ29sbGVjdGlvbiAmJiBsb2FkZWRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvd24tY29sbGVjdGlvbi1idXR0b24td3JhcHBlclwiIChjbGljayk9XCJoYW5kbGVTaG93T3duQ29sbGVjdGlvbkNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAqbmdJZj1cIiFzaG93RXh0ZXJuYWxDYXRhbG9nICYmIHNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dPd25DYXRhbG9nQnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvd24tY29sbGVjdGlvbi1kZXNjcmlwdGlvblwiIFt0ZXh0Q29udGVudF09XCInT1dOX0NPTExFQ1RJT04nIHwgbG9jYWxpemVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGNvLWltYWdlIFtzb3VyY2VdPVwiJ2Fzc2V0cy9pbWFnZXMvbG9nby5zdmcnXCI+PC9jby1pbWFnZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGNvLWNhdGFsb2ctZXh0ZXJuYWwtc291cmNlcyAqbmdJZj1cIiFzaG93RXh0ZXJuYWxDYXRhbG9nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4dGVybmFsU291cmNlQ2xpY2spPVwiaGFuZGxlRXh0ZXJuYWxTb3VyY2VDbGljaygkZXZlbnQpXCI+PC9jby1jYXRhbG9nLWV4dGVybmFsLXNvdXJjZXM+XHJcbiAgICAgICAgICA8Y28tY2F0YWxvZy1leHRlcm5hbC1zb3VyY2UgKm5nSWY9XCJzaG93RXh0ZXJuYWxDYXRhbG9nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7c2VhcmNoT25TdGFydDogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtleHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb109XCJjYXRhbG9nSW5mb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhdGFsb2dEZWZpbml0aW9uXT1cImNhdGFsb2dEZWZpbml0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0NBVEFMT0cnIHwgbG9jYWxpemUgfCBhcHBlbmQ6ICcgJyB8IGFwcGVuZDogZXh0ZXJuYWxDYXRhbG9nTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1YlRpdGxlXT1cIidab2VrZW4gbmFhciBhcnRpa2VsZW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoUGxhY2Vob2xkZXJdPVwiJ1pvZWsgbmFhciBhcnRpa2VsZW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJleHRlcm5hbENhdGFsb2dOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0ZpbHRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFydGljbGVDbGljayk9XCJoYW5kbGVBcnRpY2xlQ2xpY2soJGV2ZW50LCBjYXRhbG9nSW5mbylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRlLWZpbHRlcl09XCJzZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93T25seUhvbWVEZWNvRmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaUZyYW1lRmVlZGJhY2tSZWNlaXZlZCk9XCJoYW5kbGVJRnJhbWVGZWVkYmFjaygkZXZlbnQpXCJcclxuICAgICAgICAgID48L2NvLWNhdGFsb2ctZXh0ZXJuYWwtc291cmNlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiaGlkZS1jYXRhbG9nXCIgKGNsaWNrKT1cImhpZGVDYXRhbG9nKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcHJvZHVjdC1jYXRhbG9nLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3RDYXRhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zaG93bicpXHJcbiAgICBwdWJsaWMgZ2V0IHNob3duKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93Q2F0YWxvZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIHNldHRpbmdzOiBIb21lZGVjb3JhdG9yU2V0dGluZ3M7XHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5vLW9mZnNldCcpXHJcbiAgICBwdWJsaWMgcGhvbmVTaXplU2NyZWVuOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBleHRlcm5hbENhdGFsb2dOYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2hvd0V4dGVybmFsQ2F0YWxvZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNob3dPd25Db2xsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZXh0ZXJuYWxTb3VyY2U6IEV4dGVybmFsU291cmNlO1xyXG4gICAgcHVibGljIGNhdGFsb2dEZWZpbml0aW9uOiBDYXRhbG9nRGVmaW5pdGlvbjtcclxuICAgIHB1YmxpYyBjYXRhbG9nSW5mbzogRXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm87XHJcblxyXG4gICAgcHVibGljIGhvbWVEZWNvSHViID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudXNlcjNETW9kZWxVcGxvYWRFbmFibGVkO1xyXG5cclxuICAgIHByaXZhdGUgX3Nob3dDYXRhbG9nOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlOiBFeHRlcm5hbFNvdXJjZVZpZXdtb2RlbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1czogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pb25lQ29udHJvbGxlcjogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY3JlZW5TaXplU2VydmljZTogU2NyZWVuU2l6ZUFuYWx5c2lzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JQbGFuU2VydmljZTogRmxvb3JwbGFuU2VydmljZSxcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgX2NhdGFsb2dTZXJ2aWNlOiBDYXRhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgX2R5bmFtaWNTY3JpcHRTZXJ2aWNlOiBEeW5hbWljU2NyaXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX2FkYXB0ZXJTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9idWlsZEZ1cm5pdHVyZVNlcnZpY2U6IEJ1aWxkRnVybml0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RoaXJkUGFydHlNb2RlbFNlcnZpY2U6IFRoaXJkUGFydHlNb2RlbFNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShcclxuICAgICAgICBNZXNzYWdlVHlwZS5TaG93UHJvZHVjdENhdGFsb2csICgpID0+IHRoaXMuX2hhbmRsZVNob3dQcm9kdWN0Q2F0YWxvZ01lc3NhZ2VSZWNlaXZlZCgpXHJcbiAgICAgICksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKFxyXG4gICAgICAgIE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZywgKCkgPT4gdGhpcy5oaWRlQ2F0YWxvZygpXHJcbiAgICAgICksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKFxyXG4gICAgICAgIE1lc3NhZ2VUeXBlLlZpZXdNb2RlQ2hhbmdlZCwgKCkgPT4gdGhpcy5oaWRlQ2F0YWxvZygpXHJcbiAgICAgICksXHJcbiAgICAgIHRoaXMuX2lvbmVDb250cm9sbGVyLmNvbnRyb2xsZXJJbml0aWFsaXplZC5zdWJzY3JpYmUoKGxvYWRlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChsb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAvLyB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncztcclxuICAgICAgICAgICAgdGhpcy5fY2F0YWxvZ1NlcnZpY2UuaW5pdCh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9zY3JlZW5TaXplU2VydmljZS5zY3JlZW5TaXplQ2hhbmdlZC5zdWJzY3JpYmUoaW5mbyA9PiB0aGlzLnBob25lU2l6ZVNjcmVlbiA9IGluZm8uaXNQaG9uZVNpemUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWRlQ2F0YWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Nob3dDYXRhbG9nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQXJ0aWNsZUNsaWNrKGRhdGE6IEV4dGVybmFsU291cmNlQXJ0aWNsZUNsaWNrSW50ZXJmYWNlLCBjYXRhbG9nSW5mbz86IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvKTogdm9pZCB7XHJcbiAgICBpZiAoZGF0YS5hcnRpY2xlKSB7XHJcbiAgICAgIGxldCBzZXR0aW5nczogSG9tZWRlY29yYXRvckV4dGVybmFsU2V0dGluZ3NJbnRlcmZhY2U7XHJcbiAgICAgIGlmIChjYXRhbG9nSW5mbyAmJiBjYXRhbG9nSW5mby5leHRlcm5hbFNvdXJjZSkge1xyXG4gICAgICAgIHNldHRpbmdzID0ge1xyXG4gICAgICAgICAgbmFtZTogZGF0YS5zZXR0aW5ncy5uYW1lLFxyXG4gICAgICAgICAgc2V0dGluZ3M6IGRhdGEuc2V0dGluZ3Muc2V0dGluZ3MsXHJcbiAgICAgICAgICBleHRlcm5hbFNvdXJjZTogY2F0YWxvZ0luZm8uZXh0ZXJuYWxTb3VyY2UsXHJcbiAgICAgICAgICBjYXRhbG9nRGVmaW5pdGlvbjogZGF0YS5jYXRhbG9nRGVmaW5pdGlvbixcclxuICAgICAgICAgIHNjaGVtYTogY2F0YWxvZ0luZm8uZXh0ZXJuYWxTb3VyY2Uuc2NoZW1hXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzZXR0aW5ncy5zZXR0aW5ncy5wYXNzd29yZCA9ICcnO1xyXG4gICAgICAgIHNldHRpbmdzLnNldHRpbmdzLnVzZXJuYW1lID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBkYXRhLmFydGljbGUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkxvYWRJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1UsIHtcclxuICAgICAgICAgIHNrdTogZGF0YS5hcnRpY2xlLmFydGljbGVOdW1iZXIsXHJcbiAgICAgICAgICBzZXR0aW5nczogc2V0dGluZ3MsXHJcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5fZmxvb3JQbGFuU2VydmljZS5nZXRDZW50ZXIoKSxcclxuICAgICAgICAgIGZ1bGxBcnRpY2xlT2JqZWN0OiBkYXRhLmFydGljbGVcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9zaG93Q2F0YWxvZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUFyQnV0dG9uQ2xpY2soZGF0YTogeyBhcnRpY2xlOiBBcnRpY2xlTGlzdE9iamVjdEV4dGVuZGVkLCBzZXR0aW5nczogSG9tZWRlY29yYXRvckV4dGVybmFsU2V0dGluZ3NJbnRlcmZhY2UgfSk6IHZvaWQge1xyXG4gICAgaWYgKGRhdGEuYXJ0aWNsZSkge1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYXJNb2RlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fc2hvd0NhdGFsb2cgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkxvYWRJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1UsIHtcclxuICAgICAgICBza3U6IGRhdGEuYXJ0aWNsZS5hcnRpY2xlTnVtYmVyLFxyXG4gICAgICAgIHNldHRpbmdzOiBkYXRhLnNldHRpbmdzLFxyXG4gICAgICAgIHBvc2l0aW9uOiB7eDogMCwgeTogMH0sXHJcbiAgICAgICAgZnVsbEFydGljbGVPYmplY3Q6IGRhdGEuYXJ0aWNsZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVFeHRlcm5hbFNvdXJjZUNsaWNrKHNvdXJjZT86IEV4dGVybmFsU291cmNlVmlld21vZGVsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgIHRoaXMuX3NvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgLy8gcmVzZXQgY29ubmVjdGlvbiB0byBob3N0XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgYXdhaXQgdGhpcy5fYWRhcHRlclNlcnZpY2UuaW5pdENvbm5lY3Rvcih0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncywgdW5kZWZpbmVkKTtcclxuXHJcbiAgICAgIHRoaXMuY2F0YWxvZ0RlZmluaXRpb24gPSBzb3VyY2UuY2F0YWxvZ0RlZmluaXRpb247XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxTb3VyY2UgPSBzb3VyY2UuZXh0ZXJuYWxTb3VyY2U7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxDYXRhbG9nTmFtZSA9IHNvdXJjZS5jYXRhbG9nRGVmaW5pdGlvbi5uYW1lO1xyXG4gICAgICBsZXQgaW5mbzogRXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8gPSBuZXcgRXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8oKTtcclxuXHJcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvUmVxdWVzdCA9IHRoaXMuX2J1aWxkRXh0ZXJuYWxDYXRhbG9nUmVxdWVzdCgpO1xyXG5cclxuICAgICAgaW5mbyA9IGF3YWl0IHRoaXMuX2lvbmVDb250cm9sbGVyLmdldFdlYlZpZXdTdGFydHVwSW5mbyhyZXF1ZXN0KTtcclxuICAgICAgdGhpcy5jYXRhbG9nSW5mbyA9IGluZm87XHJcbiAgICAgIHRoaXMuc2hvd0V4dGVybmFsQ2F0YWxvZyA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dFeHRlcm5hbENhdGFsb2cgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVTaG93T3duQ29sbGVjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dPd25Db2xsZWN0aW9uID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVCYWNrQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0V4dGVybmFsQ2F0YWxvZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93T3duQ29sbGVjdGlvbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVJlZnJlc2hDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVFeHRlcm5hbFNvdXJjZUNsaWNrKHRoaXMuX3NvdXJjZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlSUZyYW1lRmVlZGJhY2soanNvblN0cmluZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoanNvblN0cmluZykge1xyXG4gICAgICBjb25zdCBqc29uT2JqID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICAgICAgaWYgKGpzb25PYmpbJ2hhc2gnXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tZXJOYW1lOiBzdHJpbmcgPSAnTGludGVsb28nO1xyXG4gICAgICAgIC8vIHRocmVlIG1haW4gYXBpIHVybHNcclxuICAgICAgICBjb25zdCBtb2RlbFVybDogc3RyaW5nID0gdGhpcy5jYXRhbG9nSW5mby5leHRlcm5hbFNvdXJjZS5kb21haW4gKyAnL21vZGVscy8nICsganNvbk9ialsnaGFzaCddICsgJy9nbGInO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25Vcmw6IHN0cmluZyA9IHRoaXMuY2F0YWxvZ0luZm8uZXh0ZXJuYWxTb3VyY2UuZG9tYWluICsgJy9jb25maWd1cmF0aW9uRGF0YS8nICsganNvbk9ialsnaGFzaCddO1xyXG4gICAgICAgIGNvbnN0IHByaWNlRGF0YVVybDogc3RyaW5nID0gdGhpcy5jYXRhbG9nSW5mby5leHRlcm5hbFNvdXJjZS5kb21haW4gKyAnL3J1bGVzL2FwaS8nICsgY3VzdG9tZXJOYW1lLnRvTG93ZXJDYXNlKCkgKyAnLycgKyBqc29uT2JqWydoYXNoJ107XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBhcGlSZXNwb25zZXM6IFJlc3BvbnNlW10gPSBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICAgIHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UuZG93bmxvYWRNb2RlbChtb2RlbFVybCksXHJcbiAgICAgICAgICAgIHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UuZmV0Y2hKc29uRmlsZShjb25maWd1cmF0aW9uVXJsKSxcclxuICAgICAgICAgICAgdGhpcy5fdGhpcmRQYXJ0eU1vZGVsU2VydmljZS5mZXRjaEpzb25GaWxlKHByaWNlRGF0YVVybClcclxuICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgY29uc3QgbW9kZWxSZXNwb25zZTogUmVzcG9uc2UgPSBhcGlSZXNwb25zZXNbMF07XHJcbiAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uUmVzcG9uc2U6IFJlc3BvbnNlID0gYXBpUmVzcG9uc2VzWzFdO1xyXG4gICAgICAgICAgY29uc3QgcHJpY2VEYXRhUmVzcG9uc2U6IFJlc3BvbnNlID0gYXBpUmVzcG9uc2VzWzJdO1xyXG5cclxuICAgICAgICAgIGxldCBjb25maWd1cmF0aW9uRGF0YTogYW55O1xyXG4gICAgICAgICAgbGV0IHByaWNlRGF0YTogYW55O1xyXG5cclxuICAgICAgICAgIGlmIChtb2RlbFJlc3BvbnNlICYmIG1vZGVsUmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgbW9kZWxSZXNwb25zZS5hcnJheUJ1ZmZlcigpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25SZXNwb25zZSAmJiBjb25maWd1cmF0aW9uUmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25SZXNwb25zZS5qc29uKCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uRGF0YSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbkRhdGEgPSB7fTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocHJpY2VEYXRhUmVzcG9uc2UgJiYgcHJpY2VEYXRhUmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgICAgIHByaWNlRGF0YVJlc3BvbnNlLmpzb24oKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgIHByaWNlRGF0YSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgICAgICAgcHJpY2VEYXRhID0ge307XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdGhpcmRQYXJ0eU1vZGVsU2VydmljZS5wYXJzZU1vZGVsVG9HTEIoZGF0YSwganNvbk9ialsnaGFzaCddLCBtb2RlbFVybCwgY29uZmlndXJhdGlvbkRhdGEsIHByaWNlRGF0YSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQ2F0YWxvZygpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoIW1vZGVsUmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggZGF0YScpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGNvbnN0IHJlc3BvbnNlOiBSZXNwb25zZSA9IGF3YWl0IHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UuZG93bmxvYWRNb2RlbCh1cmxUb0ZldGNoKTtcclxuICAgICAgICAgIC8vIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggZGF0YScpO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgLy8gICB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLnBhcnNlTW9kZWxUb0dMQihkYXRhLCBqc29uT2JqWydoYXNoJ10sIHVybFRvRmV0Y2gpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgIC8vICAgICB0aGlzLmhpZGVDYXRhbG9nKCk7XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGRhdGE6JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGlmcmFtZVRlc3QoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgLy8gdGhyZWUgbWFpbiBhcGkgdXJsc1xyXG4gICAgY29uc3QgbW9kZWxVcmw6IHN0cmluZyA9ICdodHRwczovL2xpbnRlbG9vLnBsYXRmb3JtYXBpLWFjY2VwdC4zZGltZXJjZS5jb20vbW9kZWxzLzM5MjBmNTBjYmJkY2I1OTgwYzg5OTQ3NDZkZjBmNjIxMjdjZTEwNjQxMDhjZDdiYzFhMjdlYTdkNGMxNzFkYzgvZ2xiJztcclxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25Vcmw6IHN0cmluZyA9ICdodHRwczovL2xpbnRlbG9vLnBsYXRmb3JtYXBpLWFjY2VwdC4zZGltZXJjZS5jb20vY29uZmlndXJhdGlvbkRhdGEvMzkyMGY1MGNiYmRjYjU5ODBjODk5NDc0NmRmMGY2MjEyN2NlMTA2NDEwOGNkN2JjMWEyN2VhN2Q0YzE3MWRjOCc7XHJcbiAgICBjb25zdCBwcmljZURhdGFVcmw6IHN0cmluZyA9ICdodHRwczovL2xpbnRlbG9vLnBsYXRmb3JtYXBpLWFjY2VwdC4zZGltZXJjZS5jb20vcnVsZXMvYXBpL2xpbnRlbG9vLzM5MjBmNTBjYmJkY2I1OTgwYzg5OTQ3NDZkZjBmNjIxMjdjZTEwNjQxMDhjZDdiYzFhMjdlYTdkNGMxNzFkYzgnO1xyXG4gICAgY29uc3QgaGFzaDogc3RyaW5nID0gJzM5MjBmNTBjYmJkY2I1OTgwYzg5OTQ3NDZkZjBmNjIxMjdjZTEwNjQxMDhjZDdiYzFhMjdlYTdkNGMxNzFkYzgnO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGFwaVJlc3BvbnNlczogUmVzcG9uc2VbXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLmRvd25sb2FkTW9kZWwobW9kZWxVcmwpLFxyXG4gICAgICAgIHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UuZmV0Y2hKc29uRmlsZShjb25maWd1cmF0aW9uVXJsKSxcclxuICAgICAgICB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLmZldGNoSnNvbkZpbGUocHJpY2VEYXRhVXJsKVxyXG4gICAgICBdKTtcclxuICAgICAgY29uc3QgbW9kZWxSZXNwb25zZTogUmVzcG9uc2UgPSBhcGlSZXNwb25zZXNbMF07XHJcbiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25SZXNwb25zZTogUmVzcG9uc2UgPSBhcGlSZXNwb25zZXNbMV07XHJcbiAgICAgIGNvbnN0IHByaWNlRGF0YVJlc3BvbnNlOiBSZXNwb25zZSA9IGFwaVJlc3BvbnNlc1syXTtcclxuXHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uRGF0YTogYW55O1xyXG4gICAgICBsZXQgcHJpY2VEYXRhOiBhbnk7XHJcblxyXG4gICAgICBpZiAobW9kZWxSZXNwb25zZSAmJiBtb2RlbFJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgbW9kZWxSZXNwb25zZS5hcnJheUJ1ZmZlcigpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblJlc3BvbnNlICYmIGNvbmZpZ3VyYXRpb25SZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uUmVzcG9uc2UuanNvbigpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25EYXRhID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgICBjb25maWd1cmF0aW9uRGF0YSA9IHt9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwcmljZURhdGFSZXNwb25zZSAmJiBwcmljZURhdGFSZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICBwcmljZURhdGFSZXNwb25zZS5qc29uKCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgcHJpY2VEYXRhID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgICBwcmljZURhdGEgPSB7fTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLnBhcnNlTW9kZWxUb0dMQihkYXRhLCBoYXNoLCBtb2RlbFVybCwgY29uZmlndXJhdGlvbkRhdGEsIHByaWNlRGF0YSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVDYXRhbG9nKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICghbW9kZWxSZXNwb25zZS5vaykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGZldGNoIGRhdGEnKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YTonLCBlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbGV0IGNvbmZpZ3VyYXRpb25EYXRhOiBhbnk7XHJcbiAgICAvLyBsZXQgcHJpY2VEYXRhOiBhbnk7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8gZ2V0IGNvbmZpZyBkYXRhXHJcbiAgICAvLyBjb25zdCBjb25maWd1cmF0aW9uVXJsUmVzcG9uc2UgPSBhd2FpdCB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLmZldGNoSnNvbkZpbGUoY29uZmlndXJhdGlvblVybCkuY2F0Y2goKGUpID0+IGNvbnNvbGUuZXJyb3IoZSkpO1xyXG4gICAgLy8gaWYgKGNvbmZpZ3VyYXRpb25VcmxSZXNwb25zZSAmJiBjb25maWd1cmF0aW9uVXJsUmVzcG9uc2Uub2spIHtcclxuICAgIC8vICAgY29uZmlndXJhdGlvbkRhdGEgPSBhd2FpdCBjb25maWd1cmF0aW9uVXJsUmVzcG9uc2UuanNvbigpO1xyXG4gICAgLy8gfVxyXG4gICAgLy9cclxuICAgIC8vIC8vIGdldCBwcmljaW5nIGRhdGFcclxuICAgIC8vIGNvbnN0IHByaWNlRGF0YVJlc3BvbnNlID0gYXdhaXQgdGhpcy5fdGhpcmRQYXJ0eU1vZGVsU2VydmljZS5mZXRjaEpzb25GaWxlKHByaWNlRGF0YVVybCkuY2F0Y2goKGUpID0+IGNvbnNvbGUuZXJyb3IoZSkpO1xyXG4gICAgLy8gaWYgKHByaWNlRGF0YVJlc3BvbnNlICYmIHByaWNlRGF0YVJlc3BvbnNlLm9rKSB7XHJcbiAgICAvLyAgIHByaWNlRGF0YSA9IGF3YWl0IHByaWNlRGF0YVJlc3BvbnNlLmpzb24oKTtcclxuICAgIC8vIH1cclxuICAgIC8vIC8vIGdldCBtb2RlbCBhbmQgY3JlYXRlIHRoZSBvYmplY3RcclxuICAgIC8vIHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UuZG93bmxvYWRNb2RlbChtb2RlbFVybCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgLy8gICBpZiAocmVzdWx0ICYmIHJlc3VsdC5vaykge1xyXG4gICAgLy8gICAgIHJlc3VsdC5hcnJheUJ1ZmZlcigpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLnBhcnNlTW9kZWxUb0dMQihkYXRhLCBoYXNoLCBtb2RlbFVybCwgY29uZmlndXJhdGlvbkRhdGEsIHByaWNlRGF0YSkudGhlbihzdGF0dXMgPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmhpZGVDYXRhbG9nKCk7XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSkuY2F0Y2goZSA9PiB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9idWlsZEV4dGVybmFsQ2F0YWxvZ1JlcXVlc3QoKTogRXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm9SZXF1ZXN0IHtcclxuICAgIGNvbnN0IHJlcXVlc3Q6IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvUmVxdWVzdCA9IG5ldyBFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3QoKTtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHJlcXVlc3QuY2F0YWxvZ0lkID0gdGhpcy5jYXRhbG9nRGVmaW5pdGlvbi5nZXRJZCgpO1xyXG4gICAgcmVxdWVzdC5wb3NOYW1lID0gJ05OQic7IC8vIE5vZyBOaWV0IEJlcGFhbGRcclxuICAgIHJldHVybiByZXF1ZXN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlU2hvd1Byb2R1Y3RDYXRhbG9nTWVzc2FnZVJlY2VpdmVkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc2hvd0NhdGFsb2cgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iXX0=
439
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jYXRhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvcHJvZHVjdC1jYXRhbG9nL3Byb2R1Y3QtY2F0YWxvZy9wcm9kdWN0LWNhdGFsb2cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUE4QixNQUFNLGVBQWUsQ0FBQztBQUdsRixPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQVkxRyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFHakUsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVFekgsTUFBTSxPQUFPLHVCQUF1QjtJQXlCbEMsWUFDUyxlQUE2QyxFQUM1QyxXQUE4QixFQUM5QixlQUE4QyxFQUM5QyxrQkFBNkMsRUFDN0MsYUFBMkIsRUFDM0IsaUJBQW1DLEVBQ25DLFNBQW1CLEVBQ25CLGVBQStCLEVBQy9CLHFCQUEyQyxFQUMzQyxlQUFxRCxFQUNyRCxzQkFBNkMsRUFDN0MsdUJBQStDO1FBWGhELG9CQUFlLEdBQWYsZUFBZSxDQUE4QjtRQUM1QyxnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQStCO1FBQzlDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBMkI7UUFDN0Msa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBQzNDLG9CQUFlLEdBQWYsZUFBZSxDQUFzQztRQUNyRCwyQkFB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNERYO29CQUNELFNBQVMsRUFBRSxDQUFDLGtDQUFrQyxDQUFDO2lCQUNoRDtzZkFHYyxLQUFLO3NCQURmLFdBQVc7dUJBQUMsYUFBYTtnQkFRbkIsZUFBZTtzQkFEckIsV0FBVzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtFeHRlcm5hbFNvdXJjZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZXh0ZXJuYWwtc291cmNlLmJvJztcclxuaW1wb3J0IHtFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb30gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZXh0ZXJuYWwtY2F0YWxvZy1zdGFydHVwLWluZm8nO1xyXG5pbXBvcnQge0NhdGFsb2dEZWZpbml0aW9ufSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9jYXRhbG9nLWRlZmluaXRpb24uYm8nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JTZXR0aW5nc30gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC9ob21lZGVjb3JhdG9yLXNldHRpbmdzJztcclxuaW1wb3J0IHtFeHRlcm5hbFNvdXJjZVZpZXdtb2RlbH0gZnJvbSAnQGNvbGlqbml0L2NhdGFsb2cvbGliL21vZGVsL2V4dGVybmFsLXNvdXJjZS12aWV3bW9kZWwnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7U2NyZWVuU2l6ZUFuYWx5c2lzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NjcmVlbi1zaXplLWFuYWx5c2lzL3NjcmVlbi1zaXplLWFuYWx5c2lzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7QnVpbGRGdXJuaXR1cmVTZXJ2aWNlfSBmcm9tICcuLi8uLi90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci9zZXJ2aWNlL2J1aWxkLWZ1cm5pdHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vcnBsYW5TZXJ2aWNlfSBmcm9tICcuLi8uLi9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9mbG9vcnBsYW4uc2VydmljZSc7XHJcbmltcG9ydCB7Q2F0YWxvZ1NlcnZpY2V9IGZyb20gJ0Bjb2xpam5pdC9jYXRhbG9nJztcclxuaW1wb3J0IHtEeW5hbWljU2NyaXB0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9keW5hbWljLXNjcmlwdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm9SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mby1yZXF1ZXN0JztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yRXh0ZXJuYWxTZXR0aW5nc0ludGVyZmFjZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9pbnRlcmZhY2UvaG9tZWRlY29yYXRvci1leHRlcm5hbC1zZXR0aW5ncy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1RoaXJkUGFydHlNb2RlbFNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvdGhpcmQtcGFydHktbW9kZWwuc2VydmljZSc7XHJcbmltcG9ydCB7RXh0ZXJuYWxTb3VyY2VBcnRpY2xlQ2xpY2tJbnRlcmZhY2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2ludGVyZmFjZS9leHRlcm5hbC1zb3VyY2UtYXJ0aWNsZS1jbGljay5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0FydGljbGVMaXN0T2JqZWN0RXh0ZW5kZWR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtbGlzdC1vYmplY3QtZXh0ZW5kZWQuYm8nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3JwLXByb2R1Y3QtY2F0YWxvZycsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1jYXRhbG9nLXdyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0YWxvZy1idXR0b24td3JhcHBlclwiICpuZ0lmPVwic2hvd093bkNvbGxlY3Rpb24gfHwgc2hvd0V4dGVybmFsQ2F0YWxvZ1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhY2stYnV0dG9uXCIgKGNsaWNrKT1cImhhbmRsZUJhY2tDbGljaygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWNrLWJ1dHRvbi1zcGFuXCI+VGVydWc8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tc3BhY2VyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVmcmVzaC1idXR0b25cIiAoY2xpY2spPVwiaGFuZGxlUmVmcmVzaENsaWNrKCRldmVudClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPnJlZnJlc2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZnJlc2gtYnV0dG9uLXNwYW5cIj5WZXJ2ZXJzZW48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlZnJlc2gtYnV0dG9uXCIgKGNsaWNrKT1cImlmcmFtZVRlc3QoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+cmVmcmVzaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVmcmVzaC1idXR0b24tc3BhblwiPmlmcmFtZVRlc3Q8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dPd25Db2xsZWN0aW9uXCI+XHJcbiAgICAgICAgICA8cnAtcHJvZHVjdC1vd24tY29sbGVjdGlvblxyXG4gICAgICAgICAgICBbc2V0dGluZ3NdPVwic2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzXCJcclxuICAgICAgICAgICAgKGFydGljbGVDbGljayk9XCJoYW5kbGVBcnRpY2xlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICA+PC9ycC1wcm9kdWN0LW93bi1jb2xsZWN0aW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaG9tZURlY29IdWIgJiYgIXNob3dPd25Db2xsZWN0aW9uICYmICFzaG93RXh0ZXJuYWxDYXRhbG9nXCI+XHJcbiAgICAgICAgICA8cnAtbW9kZWwtdXBsb2FkZXI+XHJcblxyXG4gICAgICAgICAgPC9ycC1tb2RlbC11cGxvYWRlcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd093bkNvbGxlY3Rpb24gJiYgbG9hZGVkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwib3duLWNvbGxlY3Rpb24tYnV0dG9uLXdyYXBwZXJcIiAoY2xpY2spPVwiaGFuZGxlU2hvd093bkNvbGxlY3Rpb25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgKm5nSWY9XCIhc2hvd0V4dGVybmFsQ2F0YWxvZyAmJiBzZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93T3duQ2F0YWxvZ0J1dHRvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3duLWNvbGxlY3Rpb24tZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiJ09XTl9DT0xMRUNUSU9OJyB8IGxvY2FsaXplXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxjby1pbWFnZSBbc291cmNlXT1cIidhc3NldHMvaW1hZ2VzL2xvZ28uc3ZnJ1wiPjwvY28taW1hZ2U+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxjby1jYXRhbG9nLWV4dGVybmFsLXNvdXJjZXMgKm5nSWY9XCIhc2hvd0V4dGVybmFsQ2F0YWxvZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHRlcm5hbFNvdXJjZUNsaWNrKT1cImhhbmRsZUV4dGVybmFsU291cmNlQ2xpY2soJGV2ZW50KVwiPjwvY28tY2F0YWxvZy1leHRlcm5hbC1zb3VyY2VzPlxyXG4gICAgICAgICAgPGNvLWNhdGFsb2ctZXh0ZXJuYWwtc291cmNlICpuZ0lmPVwic2hvd0V4dGVybmFsQ2F0YWxvZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwie3NlYXJjaE9uU3RhcnQ6IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm9dPVwiY2F0YWxvZ0luZm9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYXRhbG9nRGVmaW5pdGlvbl09XCJjYXRhbG9nRGVmaW5pdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidDQVRBTE9HJyB8IGxvY2FsaXplIHwgYXBwZW5kOiAnICcgfCBhcHBlbmQ6IGV4dGVybmFsQ2F0YWxvZ05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWJUaXRsZV09XCInWm9la2VuIG5hYXIgYXJ0aWtlbGVuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFBsYWNlaG9sZGVyXT1cIidab2VrIG5hYXIgYXJ0aWtlbGVuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZXh0ZXJuYWxDYXRhbG9nTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dGaWx0ZXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcnRpY2xlQ2xpY2spPVwiaGFuZGxlQXJ0aWNsZUNsaWNrKCRldmVudCwgY2F0YWxvZ0luZm8pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZS1maWx0ZXJdPVwic2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd09ubHlIb21lRGVjb0ZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlGcmFtZUZlZWRiYWNrUmVjZWl2ZWQpPVwiaGFuZGxlSUZyYW1lRmVlZGJhY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICA+PC9jby1jYXRhbG9nLWV4dGVybmFsLXNvdXJjZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImhpZGUtY2F0YWxvZ1wiIChjbGljayk9XCJoaWRlQ2F0YWxvZygpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtY2F0YWxvZy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0Q2F0YWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc2hvd24nKVxyXG4gICAgcHVibGljIGdldCBzaG93bigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0NhdGFsb2c7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzZXR0aW5nczogSG9tZWRlY29yYXRvclNldHRpbmdzO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uby1vZmZzZXQnKVxyXG4gICAgcHVibGljIHBob25lU2l6ZVNjcmVlbjogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgZXh0ZXJuYWxDYXRhbG9nTmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHNob3dFeHRlcm5hbENhdGFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93T3duQ29sbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGV4dGVybmFsU291cmNlOiBFeHRlcm5hbFNvdXJjZTtcclxuICAgIHB1YmxpYyBjYXRhbG9nRGVmaW5pdGlvbjogQ2F0YWxvZ0RlZmluaXRpb247XHJcbiAgICBwdWJsaWMgY2F0YWxvZ0luZm86IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvO1xyXG5cclxuICAgIHB1YmxpYyBob21lRGVjb0h1YiA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnVzZXIzRE1vZGVsVXBsb2FkRW5hYmxlZDtcclxuXHJcbiAgICBwcml2YXRlIF9zaG93Q2F0YWxvZzogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZTogRXh0ZXJuYWxTb3VyY2VWaWV3bW9kZWw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHNldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VCdXM6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW9uZUNvbnRyb2xsZXI6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NyZWVuU2l6ZVNlcnZpY2U6IFNjcmVlblNpemVBbmFseXNpc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29yUGxhblNlcnZpY2U6IEZsb29ycGxhblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9jYXRhbG9nU2VydmljZTogQ2F0YWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9keW5hbWljU2NyaXB0U2VydmljZTogRHluYW1pY1NjcmlwdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hZGFwdGVyU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYnVpbGRGdXJuaXR1cmVTZXJ2aWNlOiBCdWlsZEZ1cm5pdHVyZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlOiBUaGlyZFBhcnR5TW9kZWxTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoXHJcbiAgICAgICAgTWVzc2FnZVR5cGUuU2hvd1Byb2R1Y3RDYXRhbG9nLCAoKSA9PiB0aGlzLl9oYW5kbGVTaG93UHJvZHVjdENhdGFsb2dNZXNzYWdlUmVjZWl2ZWQoKVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShcclxuICAgICAgICBNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2csICgpID0+IHRoaXMuaGlkZUNhdGFsb2coKVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShcclxuICAgICAgICBNZXNzYWdlVHlwZS5WaWV3TW9kZUNoYW5nZWQsICgpID0+IHRoaXMuaGlkZUNhdGFsb2coKVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLl9pb25lQ29udHJvbGxlci5jb250cm9sbGVySW5pdGlhbGl6ZWQuc3Vic2NyaWJlKChsb2FkZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAobG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnNldHRpbmdzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgLy8gdGhpcy5sb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3M7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhdGFsb2dTZXJ2aWNlLmluaXQodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fc2NyZWVuU2l6ZVNlcnZpY2Uuc2NyZWVuU2l6ZUNoYW5nZWQuc3Vic2NyaWJlKGluZm8gPT4gdGhpcy5waG9uZVNpemVTY3JlZW4gPSBpbmZvLmlzUGhvbmVTaXplKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZUNhdGFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zaG93Q2F0YWxvZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUFydGljbGVDbGljayhkYXRhOiBFeHRlcm5hbFNvdXJjZUFydGljbGVDbGlja0ludGVyZmFjZSwgY2F0YWxvZ0luZm8/OiBFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mbyk6IHZvaWQge1xyXG4gICAgaWYgKGRhdGEuYXJ0aWNsZSkge1xyXG4gICAgICBsZXQgc2V0dGluZ3M6IEhvbWVkZWNvcmF0b3JFeHRlcm5hbFNldHRpbmdzSW50ZXJmYWNlO1xyXG4gICAgICBpZiAoY2F0YWxvZ0luZm8gJiYgY2F0YWxvZ0luZm8uZXh0ZXJuYWxTb3VyY2UpIHtcclxuICAgICAgICBzZXR0aW5ncyA9IHtcclxuICAgICAgICAgIG5hbWU6IGRhdGEuc2V0dGluZ3MubmFtZSxcclxuICAgICAgICAgIHNldHRpbmdzOiBkYXRhLnNldHRpbmdzLnNldHRpbmdzLFxyXG4gICAgICAgICAgZXh0ZXJuYWxTb3VyY2U6IGNhdGFsb2dJbmZvLmV4dGVybmFsU291cmNlLFxyXG4gICAgICAgICAgY2F0YWxvZ0RlZmluaXRpb246IGRhdGEuY2F0YWxvZ0RlZmluaXRpb24sXHJcbiAgICAgICAgICBzY2hlbWE6IGNhdGFsb2dJbmZvLmV4dGVybmFsU291cmNlLnNjaGVtYVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2V0dGluZ3Muc2V0dGluZ3MucGFzc3dvcmQgPSAnJztcclxuICAgICAgICBzZXR0aW5ncy5zZXR0aW5ncy51c2VybmFtZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgZGF0YS5hcnRpY2xlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5Mb2FkSU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVLCB7XHJcbiAgICAgICAgICBza3U6IGRhdGEuYXJ0aWNsZS5hcnRpY2xlTnVtYmVyLFxyXG4gICAgICAgICAgc2V0dGluZ3M6IHNldHRpbmdzLFxyXG4gICAgICAgICAgcG9zaXRpb246IHRoaXMuX2Zsb29yUGxhblNlcnZpY2UuZ2V0Q2VudGVyKCksXHJcbiAgICAgICAgICBmdWxsQXJ0aWNsZU9iamVjdDogZGF0YS5hcnRpY2xlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fc2hvd0NhdGFsb2cgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVBckJ1dHRvbkNsaWNrKGRhdGE6IHsgYXJ0aWNsZTogQXJ0aWNsZUxpc3RPYmplY3RFeHRlbmRlZCwgc2V0dGluZ3M6IEhvbWVkZWNvcmF0b3JFeHRlcm5hbFNldHRpbmdzSW50ZXJmYWNlIH0pOiB2b2lkIHtcclxuICAgIGlmIChkYXRhLmFydGljbGUpIHtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFyTW9kZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuX3Nob3dDYXRhbG9nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5Mb2FkSU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVLCB7XHJcbiAgICAgICAgc2t1OiBkYXRhLmFydGljbGUuYXJ0aWNsZU51bWJlcixcclxuICAgICAgICBzZXR0aW5nczogZGF0YS5zZXR0aW5ncyxcclxuICAgICAgICBwb3NpdGlvbjoge3g6IDAsIHk6IDB9LFxyXG4gICAgICAgIGZ1bGxBcnRpY2xlT2JqZWN0OiBkYXRhLmFydGljbGVcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlRXh0ZXJuYWxTb3VyY2VDbGljayhzb3VyY2U/OiBFeHRlcm5hbFNvdXJjZVZpZXdtb2RlbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICB0aGlzLl9zb3VyY2UgPSBzb3VyY2U7XHJcbiAgICAgIC8vIHJlc2V0IGNvbm5lY3Rpb24gdG8gaG9zdFxyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIGF3YWl0IHRoaXMuX2FkYXB0ZXJTZXJ2aWNlLmluaXRDb25uZWN0b3IodGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MsIHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICB0aGlzLmNhdGFsb2dEZWZpbml0aW9uID0gc291cmNlLmNhdGFsb2dEZWZpbml0aW9uO1xyXG4gICAgICB0aGlzLmV4dGVybmFsU291cmNlID0gc291cmNlLmV4dGVybmFsU291cmNlO1xyXG4gICAgICB0aGlzLmV4dGVybmFsQ2F0YWxvZ05hbWUgPSBzb3VyY2UuY2F0YWxvZ0RlZmluaXRpb24ubmFtZTtcclxuICAgICAgbGV0IGluZm86IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvID0gbmV3IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvKCk7XHJcblxyXG4gICAgICBjb25zdCByZXF1ZXN0OiBFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3QgPSB0aGlzLl9idWlsZEV4dGVybmFsQ2F0YWxvZ1JlcXVlc3QoKTtcclxuXHJcbiAgICAgIGluZm8gPSBhd2FpdCB0aGlzLl9pb25lQ29udHJvbGxlci5nZXRXZWJWaWV3U3RhcnR1cEluZm8ocmVxdWVzdCk7XHJcbiAgICAgIHRoaXMuY2F0YWxvZ0luZm8gPSBpbmZvO1xyXG4gICAgICB0aGlzLnNob3dFeHRlcm5hbENhdGFsb2cgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93RXh0ZXJuYWxDYXRhbG9nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlU2hvd093bkNvbGxlY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93T3duQ29sbGVjdGlvbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQmFja0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dFeHRlcm5hbENhdGFsb2cgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd093bkNvbGxlY3Rpb24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVSZWZyZXNoQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlRXh0ZXJuYWxTb3VyY2VDbGljayh0aGlzLl9zb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZUlGcmFtZUZlZWRiYWNrKGpzb25TdHJpbmc6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGpzb25TdHJpbmcpIHtcclxuICAgICAgY29uc3QganNvbk9iaiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XHJcbiAgICAgIGlmIChqc29uT2JqWydoYXNoJ10gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbWVyTmFtZTogc3RyaW5nID0gdGhpcy5jYXRhbG9nSW5mby51c2VybmFtZTtcclxuICAgICAgICAvLyBjb25zdCBjdXN0b21lck5hbWU6IHN0cmluZyA9ICdMaW50ZWxvbyc7XHJcbiAgICAgICAgLy8gdGhyZWUgbWFpbiBhcGkgdXJsc1xyXG4gICAgICAgIGNvbnN0IG1vZGVsVXJsOiBzdHJpbmcgPSB0aGlzLmNhdGFsb2dJbmZvLmV4dGVybmFsU291cmNlLmRvbWFpbiArICcvbW9kZWxzLycgKyBqc29uT2JqWydoYXNoJ10gKyAnL2dsYic7XHJcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvblVybDogc3RyaW5nID0gdGhpcy5jYXRhbG9nSW5mby5leHRlcm5hbFNvdXJjZS5kb21haW4gKyAnL2NvbmZpZ3VyYXRpb25EYXRhLycgKyBqc29uT2JqWydoYXNoJ107XHJcbiAgICAgICAgY29uc3QgcHJpY2VEYXRhVXJsOiBzdHJpbmcgPSB0aGlzLmNhdGFsb2dJbmZvLmV4dGVybmFsU291cmNlLmRvbWFpbiArICcvcnVsZXMvYXBpLycgKyBjdXN0b21lck5hbWUudG9Mb3dlckNhc2UoKSArICcvJyArIGpzb25PYmpbJ2hhc2gnXTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGFwaVJlc3BvbnNlczogUmVzcG9uc2VbXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICAgICAgdGhpcy5fdGhpcmRQYXJ0eU1vZGVsU2VydmljZS5kb3dubG9hZE1vZGVsKG1vZGVsVXJsKSxcclxuICAgICAgICAgICAgdGhpcy5fdGhpcmRQYXJ0eU1vZGVsU2VydmljZS5mZXRjaEpzb25GaWxlKGNvbmZpZ3VyYXRpb25VcmwpLFxyXG4gICAgICAgICAgICB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLmZldGNoSnNvbkZpbGUocHJpY2VEYXRhVXJsKVxyXG4gICAgICAgICAgXSk7XHJcbiAgICAgICAgICBjb25zdCBtb2RlbFJlc3BvbnNlOiBSZXNwb25zZSA9IGFwaVJlc3BvbnNlc1swXTtcclxuICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25SZXNwb25zZTogUmVzcG9uc2UgPSBhcGlSZXNwb25zZXNbMV07XHJcbiAgICAgICAgICBjb25zdCBwcmljZURhdGFSZXNwb25zZTogUmVzcG9uc2UgPSBhcGlSZXNwb25zZXNbMl07XHJcblxyXG4gICAgICAgICAgbGV0IGNvbmZpZ3VyYXRpb25EYXRhOiBhbnk7XHJcbiAgICAgICAgICBsZXQgcHJpY2VEYXRhOiBhbnk7XHJcblxyXG4gICAgICAgICAgaWYgKG1vZGVsUmVzcG9uc2UgJiYgbW9kZWxSZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICBtb2RlbFJlc3BvbnNlLmFycmF5QnVmZmVyKCkudGhlbihkYXRhID0+IHtcclxuICAgICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblJlc3BvbnNlICYmIGNvbmZpZ3VyYXRpb25SZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvblJlc3BvbnNlLmpzb24oKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25EYXRhID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uRGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChwcmljZURhdGFSZXNwb25zZSAmJiBwcmljZURhdGFSZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICAgICAgcHJpY2VEYXRhUmVzcG9uc2UuanNvbigpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgcHJpY2VEYXRhID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICAgICAgICAgICAgICBwcmljZURhdGEgPSB7fTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLnBhcnNlTW9kZWxUb0dMQihkYXRhLCBqc29uT2JqWydoYXNoJ10sIG1vZGVsVXJsLCBjb25maWd1cmF0aW9uRGF0YSwgcHJpY2VEYXRhKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVDYXRhbG9nKCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICghbW9kZWxSZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBkYXRhJyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gY29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQgdGhpcy5fdGhpcmRQYXJ0eU1vZGVsU2VydmljZS5kb3dubG9hZE1vZGVsKHVybFRvRmV0Y2gpO1xyXG4gICAgICAgICAgLy8gaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgLy8gICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBkYXRhJyk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyByZXNwb25zZS5hcnJheUJ1ZmZlcigpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UucGFyc2VNb2RlbFRvR0xCKGRhdGEsIGpzb25PYmpbJ2hhc2gnXSwgdXJsVG9GZXRjaCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuaGlkZUNhdGFsb2coKTtcclxuICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YTonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaWZyYW1lVGVzdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICAvLyB0aHJlZSBtYWluIGFwaSB1cmxzXHJcbiAgICBjb25zdCBtb2RlbFVybDogc3RyaW5nID0gJ2h0dHBzOi8vbGludGVsb28ucGxhdGZvcm1hcGktYWNjZXB0LjNkaW1lcmNlLmNvbS9tb2RlbHMvMzkyMGY1MGNiYmRjYjU5ODBjODk5NDc0NmRmMGY2MjEyN2NlMTA2NDEwOGNkN2JjMWEyN2VhN2Q0YzE3MWRjOC9nbGInO1xyXG4gICAgY29uc3QgY29uZmlndXJhdGlvblVybDogc3RyaW5nID0gJ2h0dHBzOi8vbGludGVsb28ucGxhdGZvcm1hcGktYWNjZXB0LjNkaW1lcmNlLmNvbS9jb25maWd1cmF0aW9uRGF0YS8zOTIwZjUwY2JiZGNiNTk4MGM4OTk0NzQ2ZGYwZjYyMTI3Y2UxMDY0MTA4Y2Q3YmMxYTI3ZWE3ZDRjMTcxZGM4JztcclxuICAgIGNvbnN0IHByaWNlRGF0YVVybDogc3RyaW5nID0gJ2h0dHBzOi8vbGludGVsb28ucGxhdGZvcm1hcGktYWNjZXB0LjNkaW1lcmNlLmNvbS9ydWxlcy9hcGkvbGludGVsb28vMzkyMGY1MGNiYmRjYjU5ODBjODk5NDc0NmRmMGY2MjEyN2NlMTA2NDEwOGNkN2JjMWEyN2VhN2Q0YzE3MWRjOCc7XHJcbiAgICBjb25zdCBoYXNoOiBzdHJpbmcgPSAnMzkyMGY1MGNiYmRjYjU5ODBjODk5NDc0NmRmMGY2MjEyN2NlMTA2NDEwOGNkN2JjMWEyN2VhN2Q0YzE3MWRjOCc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgYXBpUmVzcG9uc2VzOiBSZXNwb25zZVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgIHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UuZG93bmxvYWRNb2RlbChtb2RlbFVybCksXHJcbiAgICAgICAgdGhpcy5fdGhpcmRQYXJ0eU1vZGVsU2VydmljZS5mZXRjaEpzb25GaWxlKGNvbmZpZ3VyYXRpb25VcmwpLFxyXG4gICAgICAgIHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UuZmV0Y2hKc29uRmlsZShwcmljZURhdGFVcmwpXHJcbiAgICAgIF0pO1xyXG4gICAgICBjb25zdCBtb2RlbFJlc3BvbnNlOiBSZXNwb25zZSA9IGFwaVJlc3BvbnNlc1swXTtcclxuICAgICAgY29uc3QgY29uZmlndXJhdGlvblJlc3BvbnNlOiBSZXNwb25zZSA9IGFwaVJlc3BvbnNlc1sxXTtcclxuICAgICAgY29uc3QgcHJpY2VEYXRhUmVzcG9uc2U6IFJlc3BvbnNlID0gYXBpUmVzcG9uc2VzWzJdO1xyXG5cclxuICAgICAgbGV0IGNvbmZpZ3VyYXRpb25EYXRhOiBhbnk7XHJcbiAgICAgIGxldCBwcmljZURhdGE6IGFueTtcclxuXHJcbiAgICAgIGlmIChtb2RlbFJlc3BvbnNlICYmIG1vZGVsUmVzcG9uc2Uub2spIHtcclxuICAgICAgICBtb2RlbFJlc3BvbnNlLmFycmF5QnVmZmVyKCkudGhlbihkYXRhID0+IHtcclxuICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uUmVzcG9uc2UgJiYgY29uZmlndXJhdGlvblJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25SZXNwb25zZS5qc29uKCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgY29uZmlndXJhdGlvbkRhdGEgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25EYXRhID0ge307XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHByaWNlRGF0YVJlc3BvbnNlICYmIHByaWNlRGF0YVJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgIHByaWNlRGF0YVJlc3BvbnNlLmpzb24oKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgICAgICAgICBwcmljZURhdGEgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICAgICAgICAgIHByaWNlRGF0YSA9IHt9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UucGFyc2VNb2RlbFRvR0xCKGRhdGEsIGhhc2gsIG1vZGVsVXJsLCBjb25maWd1cmF0aW9uRGF0YSwgcHJpY2VEYXRhKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZUNhdGFsb2coKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKCFtb2RlbFJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggZGF0YScpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBkYXRhOicsIGVycm9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsZXQgY29uZmlndXJhdGlvbkRhdGE6IGFueTtcclxuICAgIC8vIGxldCBwcmljZURhdGE6IGFueTtcclxuICAgIC8vXHJcbiAgICAvLyAvLyBnZXQgY29uZmlnIGRhdGFcclxuICAgIC8vIGNvbnN0IGNvbmZpZ3VyYXRpb25VcmxSZXNwb25zZSA9IGF3YWl0IHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UuZmV0Y2hKc29uRmlsZShjb25maWd1cmF0aW9uVXJsKS5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcihlKSk7XHJcbiAgICAvLyBpZiAoY29uZmlndXJhdGlvblVybFJlc3BvbnNlICYmIGNvbmZpZ3VyYXRpb25VcmxSZXNwb25zZS5vaykge1xyXG4gICAgLy8gICBjb25maWd1cmF0aW9uRGF0YSA9IGF3YWl0IGNvbmZpZ3VyYXRpb25VcmxSZXNwb25zZS5qc29uKCk7XHJcbiAgICAvLyB9XHJcbiAgICAvL1xyXG4gICAgLy8gLy8gZ2V0IHByaWNpbmcgZGF0YVxyXG4gICAgLy8gY29uc3QgcHJpY2VEYXRhUmVzcG9uc2UgPSBhd2FpdCB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLmZldGNoSnNvbkZpbGUocHJpY2VEYXRhVXJsKS5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcihlKSk7XHJcbiAgICAvLyBpZiAocHJpY2VEYXRhUmVzcG9uc2UgJiYgcHJpY2VEYXRhUmVzcG9uc2Uub2spIHtcclxuICAgIC8vICAgcHJpY2VEYXRhID0gYXdhaXQgcHJpY2VEYXRhUmVzcG9uc2UuanNvbigpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gLy8gZ2V0IG1vZGVsIGFuZCBjcmVhdGUgdGhlIG9iamVjdFxyXG4gICAgLy8gdGhpcy5fdGhpcmRQYXJ0eU1vZGVsU2VydmljZS5kb3dubG9hZE1vZGVsKG1vZGVsVXJsKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAvLyAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lm9rKSB7XHJcbiAgICAvLyAgICAgcmVzdWx0LmFycmF5QnVmZmVyKCkudGhlbihkYXRhID0+IHtcclxuICAgIC8vICAgICAgIHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UucGFyc2VNb2RlbFRvR0xCKGRhdGEsIGhhc2gsIG1vZGVsVXJsLCBjb25maWd1cmF0aW9uRGF0YSwgcHJpY2VEYXRhKS50aGVuKHN0YXR1cyA9PiB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuaGlkZUNhdGFsb2coKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KS5jYXRjaChlID0+IHtcclxuICAgIC8vICAgY29uc29sZS5sb2coZSk7XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2J1aWxkRXh0ZXJuYWxDYXRhbG9nUmVxdWVzdCgpOiBFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3Qge1xyXG4gICAgY29uc3QgcmVxdWVzdDogRXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm9SZXF1ZXN0ID0gbmV3IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvUmVxdWVzdCgpO1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgcmVxdWVzdC5jYXRhbG9nSWQgPSB0aGlzLmNhdGFsb2dEZWZpbml0aW9uLmdldElkKCk7XHJcbiAgICByZXF1ZXN0LnBvc05hbWUgPSAnTk5CJzsgLy8gTm9nIE5pZXQgQmVwYWFsZFxyXG4gICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVTaG93UHJvZHVjdENhdGFsb2dNZXNzYWdlUmVjZWl2ZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9zaG93Q2F0YWxvZyA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -121,13 +121,15 @@ export class NewRenderService {
121
121
  _getNewRenderImage(force = false) {
122
122
  return __awaiter(this, void 0, void 0, function* () {
123
123
  if (this._settingsService.settings.blenderRenderService) {
124
- this.messageService.emit(MessageType.ShowLoadingIndicator, { title: 'Rendering...' });
125
- const renderInput = {
126
- 'height': 800,
127
- 'width': 1200,
128
- 'sceneAssetId': this._settingsService.settings.productRenderSceneAssetId
129
- };
130
- yield this._utilsService.prepRoomForRender(true, renderInput);
124
+ const data = this._getDataForRender(force);
125
+ this._handleAjaxBlenderRender(data);
126
+ // this.messageService.emit(MessageType.ShowLoadingIndicator, {title: 'Rendering...'});
127
+ // const renderInput = {
128
+ // 'height': 800,
129
+ // 'width': 1200,
130
+ // 'sceneAssetId': this._settingsService.settings.productRenderSceneAssetId
131
+ // };
132
+ // await this._utilsService.prepRoomForRender(true, renderInput);
131
133
  }
132
134
  else {
133
135
  const data = this._getDataForRender(force);
@@ -140,6 +142,25 @@ export class NewRenderService {
140
142
  }
141
143
  });
142
144
  }
145
+ _handleAjaxBlenderRender(data) {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ const result = yield axios({
148
+ headers: {
149
+ 'Content-Type': 'application/json'
150
+ },
151
+ method: 'POST',
152
+ data: JSON.stringify(data),
153
+ url: `${this._settingsService.settings.newRenderParameters.host}:${this._settingsService.settings.newRenderParameters.port}/getBlenderRenderFromData`,
154
+ responseType: 'json'
155
+ });
156
+ if (result.status === 200) {
157
+ // const image = `data:${result.data.fileType};base64,${result.data.image}`;
158
+ // this._showPreviewImage(result.data.image);
159
+ // console.log(image);
160
+ this.renderImageChanged.next(result.data.image);
161
+ }
162
+ });
163
+ }
143
164
  _handleAjaxRender(data) {
144
165
  return __awaiter(this, void 0, void 0, function* () {
145
166
  const result = yield axios({
@@ -152,10 +173,10 @@ export class NewRenderService {
152
173
  responseType: 'json'
153
174
  });
154
175
  if (result.status === 200) {
155
- const image = `data:${result.data.fileType};base64,${result.data.image}`;
156
- // this._showPreviewImage(image);
176
+ // const image = `data:${result.data.fileType};base64,${result.data.image}`;
177
+ // this._showPreviewImage(result.data.image);
157
178
  // console.log(image);
158
- this.renderImageChanged.next(image);
179
+ this.renderImageChanged.next(result.data.image);
159
180
  }
160
181
  });
161
182
  }
@@ -210,21 +231,24 @@ export class NewRenderService {
210
231
  img.style.position = 'fixed';
211
232
  img.style.top = '0';
212
233
  img.style.left = '0';
213
- img.style.width = '800px';
234
+ // img.style.width = '800px';
214
235
  img.style.height = '600px';
215
236
  img.style.zIndex = '10';
216
237
  }
217
238
  img.src = src;
218
239
  }
219
240
  _getDataForRender(force = false) {
241
+ this._cameraService.camera.updateMatrixWorld(true);
242
+ const camMatrix = Array.from(this._cameraService.camera.matrixWorld.elements);
220
243
  const options = {
221
244
  force: force,
222
245
  width: this._settingsService.settings.newRenderParameters.imageWidth,
223
246
  height: this._settingsService.settings.newRenderParameters.imageHeight,
247
+ sceneAssetId: this._settingsService.settings.productRenderSceneAssetId,
224
248
  max_samples: this._settingsService.settings.newRenderParameters.iterations,
225
249
  cameraOptions: {
226
250
  fov: this._cameraService.camera.fov,
227
- matrix: this.standAloneCameraMatrix
251
+ matrix: camMatrix
228
252
  },
229
253
  environmentOptions: {
230
254
  hdri: this._settingsService.settings.newRenderParameters.hdri,
@@ -299,4 +323,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
299
323
  providedIn: 'root',
300
324
  }]
301
325
  }], ctorParameters: function () { return [{ type: i1.MessageBusService }, { type: i2.HomedecoratorSettingsService }, { type: i3.BuildFurnitureService }, { type: i4.CameraService }, { type: i5.SceneService }, { type: i6.HomedecoratorConnectorService }, { type: i7.HomedecoratorConnectorAdapterService }, { type: i8.ThreedselectorService }, { type: i9.ToastService }, { type: i1.MessageBusService }, { type: i10.GoogleTagManagerService }, { type: i11.RoomService }, { type: i12.FloorService }, { type: i13.LoadFurnitureService }, { type: i14.UtilsService }]; } });
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LXJlbmRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yZW5kZXIvc2VydmljZS9uZXctcmVuZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLGVBQWUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQUMsS0FBSyxFQUFXLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFjM0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUtqRSxNQUFNLE9BQU8sZ0JBQWdCO0lBYTNCLFlBQ1MsY0FBaUMsRUFDaEMsZ0JBQThDLEVBQzlDLHNCQUE2QyxFQUM3QyxjQUE2QixFQUM3QixhQUEyQixFQUMzQixLQUFvQyxFQUNwQyxxQkFBMkQsRUFDM0Qsc0JBQTZDLEVBQzdDLGFBQTJCLEVBQzNCLGtCQUFxQyxFQUNyQyxpQkFBMEMsRUFDMUMsWUFBeUIsRUFDekIsYUFBMkIsRUFDM0IscUJBQTJDLEVBQzNDLGFBQTJCO1FBZDVCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQThCO1FBQzlDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDN0MsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsVUFBSyxH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Q2QsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE1BQW1CO1FBQzlDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQzs7OEdBblJVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1NlcnZpY2V9IGZyb20gJ0BtaWdlbml1cy9yZWFsaXR5c2VydmVyLWNsaWVudCc7XHJcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1NjZW5lfSBmcm9tICd0aHJlZS9zcmMvc2NlbmVzL1NjZW5lJztcclxuaW1wb3J0IHtMaWdodCwgT2JqZWN0M0R9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtHTFRGRXhwb3J0ZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9leHBvcnRlcnMvR0xURkV4cG9ydGVyJztcclxuaW1wb3J0IHtSZW5kZXJRdWV1ZUl0ZW19IGZyb20gJy4uL21vZGVsL3JlbmRlci1xdWV1ZS1pdGVtJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdWlsZEZ1cm5pdHVyZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvYnVpbGQtZnVybml0dXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtUaHJlZWRzZWxlY3RvclNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvdGhyZWVkc2VsZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7VG9hc3RTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtHb29nbGVUYWdNYW5hZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9nb29nbGUtdGFnLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7Um9vbVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL3Jvb20uc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9mbG9vci5zZXJ2aWNlJztcclxuaW1wb3J0IHtMb2FkRnVybml0dXJlU2VydmljZX0gZnJvbSAnLi4vLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3Ivc2VydmljZS9sb2FkLWZ1cm5pdHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZW5kZXJTdGF0dXN9IGZyb20gJy4uL2VudW0vcmVuZGVyLXN0YXR1cyc7XHJcbmltcG9ydCB7VXRpbHNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmV3UmVuZGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyByZW5kZXJJbWFnZUNoYW5nZWQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XHJcbiAgcHVibGljIHJlbmRlclVwZGF0ZUltYWdlQ2hhbmdlZDogQmVoYXZpb3JTdWJqZWN0PHsgaW1hZ2U6IHN0cmluZywgcHJvZ3Jlc3M6IG51bWJlciwgZmluaXNoZWQ6IGJvb2xlYW4gfT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIHJlbmRlclJvb21JbWFnZUNoYW5nZWQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XHJcblxyXG4gIHB1YmxpYyBzZXJ2aWNlOiBTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGFuZEFsb25lQ2FtZXJhTWF0cml4OiBudW1iZXJbXTtcclxuICBwdWJsaWMgY3VycmVudFF1ZXVlUmVuZGVySXRlbTogUmVuZGVyUXVldWVJdGVtID0gbmV3IFJlbmRlclF1ZXVlSXRlbSgpO1xyXG4gIHB1YmxpYyByZW5kZXJlZFJvb21JbWFnZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2J1aWxkRnVybml0dXJlU2VydmljZTogQnVpbGRGdXJuaXR1cmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW9uZTogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pb25lQ29ubmVjdG9yQWRhcHRlcjogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdGhyZWVkU2VsZWN0b3JTZXJ2aWNlOiBUaHJlZWRzZWxlY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VCdXNTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2dvb2dsZVRhZ01hbmFnZXI6IEdvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JTZXJ2aWNlOiBGbG9vclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sb2FkRnVybml0dXJlU2VydmljZTogTG9hZEZ1cm5pdHVyZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF91dGlsc1NlcnZpY2U6IFV0aWxzU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5CbGVuZGVyUmVuZGVyRmlsZVJlYWR5LCAoZmlsZSkgPT4gdGhpcy5wcm9jZXNSZW5kZXJGaWxlKGZpbGUpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcm9jZXNSZW5kZXJGaWxlKGZpbGU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJJbWFnZUNoYW5nZWQubmV4dChmaWxlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb3JjZVJlbmRlckltYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZ2V0TmV3UmVuZGVySW1hZ2UodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVySW1hZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9nZXROZXdSZW5kZXJJbWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlbmRlclJvb20oc2l6ZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBzY2VuZURhdGE6IGFueSA9IGF3YWl0IHRoaXMuX2V4cG9ydFRvR2xiKCk7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZ2V0RGF0YUZvclJvb21SZW5kZXIoc2l6ZSk7XHJcbiAgICBkYXRhLmZpbGVzID0ge1xyXG4gICAgICBnbGJEYXRhOiB0aGlzLl9hcnJheUJ1ZmZlclRvQmFzZTY0KHNjZW5lRGF0YSlcclxuICAgIH07XHJcbiAgICB0aGlzLl9oYW5kbGVXZWJTb2NrZXRSb29tUmVuZGVyKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZXhwb3J0VG9HbGIoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIFRoZSBncm91bmQgcGxhbmUgbG9va3Mgb2RkIGluIHJlbmRlcnMuXHJcbiAgICAvLyBUaGUgaHVkLXJpbmcgYW5kIGh1ZC1jaXJjbGUgYXJlIHRoZSB3YWxrdGhyb3VnaCBtb2RlIG1hcmtlcixcclxuICAgIC8vIHdoaWNoIGlzIG5vdCBzdXBwb3NlZCB0byBiZSByZW5kZXJlZC5cclxuICAgIGNvbnN0IGVsZW1lbnRzVG9SZW1vdmUgPSBbJ2dyb3VuZC1wbGFuZScsICdodWQtcmluZycsICdodWQtY2lyY2xlJ107XHJcblxyXG4gICAgbGV0IHNjZW5lOiBTY2VuZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHNjZW5lID0gdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLmNsb25lKCk7XHJcblxyXG4gICAgICBzY2VuZS5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICAgIHNjZW5lLnJlbW92ZShjKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZWxlbWVudHNUb1JlbW92ZS5mb3JFYWNoKGVsZW1lbnROYW1lID0+IHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZE9iamVjdDogT2JqZWN0M0QgPSBzY2VuZS5nZXRPYmplY3RCeU5hbWUoZWxlbWVudE5hbWUpO1xyXG4gICAgICAgIHNjZW5lLnJlbW92ZShzZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgIHRyczogZmFsc2UsXHJcbiAgICAgICAgb25seVZpc2libGU6IHRydWUsXHJcbiAgICAgICAgdHJ1bmNhdGVEcmF3UmFuZ2U6IHRydWUsXHJcbiAgICAgICAgYmluYXJ5OiB0cnVlLFxyXG4gICAgICAgIGZvcmNlSW5kaWNlczogZmFsc2UsXHJcbiAgICAgICAgZm9yY2VQb3dlck9mVHdvVGV4dHVyZXM6IGZhbHNlLFxyXG4gICAgICAgIC8vIG1heFRleHR1cmVTaXplOiA1MDAsXHJcbiAgICAgICAgZW1iZWRJbWFnZXM6IHRydWUsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBleHBvcnRlcjogR0xURkV4cG9ydGVyID0gbmV3IEdMVEZFeHBvcnRlcigpO1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgZXhwb3J0ZXIucGFyc2Uoc2NlbmUsIGFzeW5jIChleHBvcnRlZFNjZW5lOiBBcnJheUJ1ZmZlcikgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZShleHBvcnRlZFNjZW5lKTtcclxuICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgfSwgb3B0aW9ucyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aHJvdyAoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9nZXROZXdSZW5kZXJJbWFnZShmb3JjZTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmJsZW5kZXJSZW5kZXJTZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TaG93TG9hZGluZ0luZGljYXRvciwge3RpdGxlOiAnUmVuZGVyaW5nLi4uJ30pO1xyXG4gICAgICBjb25zdCByZW5kZXJJbnB1dCA9IHtcclxuICAgICAgICAnaGVpZ2h0JzogODAwLFxyXG4gICAgICAgICd3aWR0aCc6IDEyMDAsXHJcbiAgICAgICAgJ3NjZW5lQXNzZXRJZCc6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5wcm9kdWN0UmVuZGVyU2NlbmVBc3NldElkXHJcbiAgICAgIH07XHJcbiAgICAgIGF3YWl0IHRoaXMuX3V0aWxzU2VydmljZS5wcmVwUm9vbUZvclJlbmRlcih0cnVlLCByZW5kZXJJbnB1dCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5fZ2V0RGF0YUZvclJlbmRlcihmb3JjZSk7XHJcbiAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VSZW5kZXJXZWJzb2NrZXQpIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVXZWJTb2NrZXRSZW5kZXIoZGF0YSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlQWpheFJlbmRlcihkYXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlQWpheFJlbmRlcihkYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF4aW9zKHtcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgfSxcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxyXG4gICAgICB1cmw6IGAke3RoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5uZXdSZW5kZXJQYXJhbWV0ZXJzLmhvc3R9OiR7dGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm5ld1JlbmRlclBhcmFtZXRlcnMucG9ydH0vZ2V0UmVuZGVyRnJvbURhdGFgLFxyXG4gICAgICByZXNwb25zZVR5cGU6ICdqc29uJ1xyXG4gICAgfSk7XHJcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgIGNvbnN0IGltYWdlID0gYGRhdGE6JHtyZXN1bHQuZGF0YS5maWxlVHlwZX07YmFzZTY0LCR7cmVzdWx0LmRhdGEuaW1hZ2V9YDtcclxuICAgICAgLy8gdGhpcy5fc2hvd1ByZXZpZXdJbWFnZShpbWFnZSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGltYWdlKTtcclxuICAgICAgdGhpcy5yZW5kZXJJbWFnZUNoYW5nZWQubmV4dChpbWFnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVXZWJTb2NrZXRSZW5kZXIoZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB3ZWJTb2NrZXRDb25uZWN0aW9uOiBzdHJpbmcgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy53ZWJzb2NrZXQ7XHJcbiAgICBjb25zdCB3ZWJTb2NrZXQgPSBuZXcgV2ViU29ja2V0KHdlYlNvY2tldENvbm5lY3Rpb24pO1xyXG4gICAgd2ViU29ja2V0Lm9ub3BlbiA9ICgpID0+IHtcclxuICAgICAgd2ViU29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgfTtcclxuICAgIHdlYlNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlID0gYGRhdGE6JHtyZXN1bHQuZmlsZVR5cGV9O2Jhc2U2NCwke3Jlc3VsdC5pbWFnZX1gO1xyXG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gcmVzdWx0LnJlbmRlcmVkO1xyXG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gcmVzdWx0LmZpbmlzaGVkO1xyXG4gICAgICAgIC8vIHRoaXMuX3Nob3dQcmV2aWV3SW1hZ2UoaW1hZ2UpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3VsdC5yZW5kZXJlZCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJVcGRhdGVJbWFnZUNoYW5nZWQubmV4dCh7aW1hZ2U6IGltYWdlLCBwcm9ncmVzczogcHJvZ3Jlc3MsIGZpbmlzaGVkOiBmaW5pc2hlZH0pO1xyXG4gICAgICAgIGlmIChyZXN1bHQuZmluaXNoZWQpIHtcclxuICAgICAgICAgIHdlYlNvY2tldC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVdlYlNvY2tldFJvb21SZW5kZXIoZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB3ZWJTb2NrZXRDb25uZWN0aW9uOiBzdHJpbmcgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy53ZWJzb2NrZXQ7XHJcbiAgICBjb25zdCB3ZWJTb2NrZXQgPSBuZXcgV2ViU29ja2V0KHdlYlNvY2tldENvbm5lY3Rpb24pO1xyXG4gICAgd2ViU29ja2V0Lm9ub3BlbiA9ICgpID0+IHtcclxuICAgICAgd2ViU29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgfTtcclxuICAgIHdlYlNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlID0gYGRhdGE6JHtyZXN1bHQuZmlsZVR5cGV9O2Jhc2U2NCwke3Jlc3VsdC5pbWFnZX1gO1xyXG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gcmVzdWx0LnJlbmRlcmVkO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5yZW5kZXJQcm9ncmVzcyA9IHByb2dyZXNzO1xyXG4gICAgICAgIHRoaXMucmVuZGVyUm9vbUltYWdlQ2hhbmdlZC5uZXh0KGltYWdlKTtcclxuICAgICAgICBpZiAocmVzdWx0LmZpbmlzaGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVkUm9vbUltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5yZW5kZXJTdGF0dXMgPSBSZW5kZXJTdGF0dXMuSXNTdWNjZXNzO1xyXG4gICAgICAgICAgd2ViU29ja2V0LmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd1ByZXZpZXdJbWFnZShzcmM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGltZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmV2aWV3X2ltZycpO1xyXG4gICAgaWYgKCFpbWcpIHtcclxuICAgICAgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgIGltZy5pZCA9ICdwcmV2aWV3X2ltZyc7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucHJlcGVuZChpbWcpO1xyXG4gICAgICBpbWcuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgICBpbWcuc3R5bGUudG9wID0gJzAnO1xyXG4gICAgICBpbWcuc3R5bGUubGVmdCA9ICcwJztcclxuICAgICAgaW1nLnN0eWxlLndpZHRoID0gJzgwMHB4JztcclxuICAgICAgaW1nLnN0eWxlLmhlaWdodCA9ICc2MDBweCc7XHJcbiAgICAgIGltZy5zdHlsZS56SW5kZXggPSAnMTAnO1xyXG4gICAgfVxyXG4gICAgKGltZyBhcyBhbnkpLnNyYyA9IHNyYztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldERhdGFGb3JSZW5kZXIoZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICBmb3JjZTogZm9yY2UsXHJcbiAgICAgIHdpZHRoOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy5pbWFnZVdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5uZXdSZW5kZXJQYXJhbWV0ZXJzLmltYWdlSGVpZ2h0LFxyXG4gICAgICBtYXhfc2FtcGxlczogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm5ld1JlbmRlclBhcmFtZXRlcnMuaXRlcmF0aW9ucyxcclxuICAgICAgY2FtZXJhT3B0aW9uczoge1xyXG4gICAgICAgIGZvdjogdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEuZm92LFxyXG4gICAgICAgIG1hdHJpeDogdGhpcy5zdGFuZEFsb25lQ2FtZXJhTWF0cml4XHJcbiAgICAgIH0sXHJcbiAgICAgIGVudmlyb25tZW50T3B0aW9uczoge1xyXG4gICAgICAgIGhkcmk6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5uZXdSZW5kZXJQYXJhbWV0ZXJzLmhkcmksXHJcbiAgICAgICAgaGRyaUludGVuc2l0eTogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm5ld1JlbmRlclBhcmFtZXRlcnMuaGRyaUludGVuc2l0eVxyXG4gICAgICB9LFxyXG4gICAgICBvYmplY3RPcHRpb25zOiB7XHJcbiAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgIHg6IHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5wb3NpdGlvbi54LFxyXG4gICAgICAgICAgeTogMCxcclxuICAgICAgICAgIHo6IHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5wb3NpdGlvbi56XHJcbiAgICAgICAgfSxcclxuICAgICAgICByb3RhdGlvbjoge1xyXG4gICAgICAgICAgeDogdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmN1cnJlbnRDdXN0b21GbG9vckdyb3VwLnJvdGF0aW9uLngsXHJcbiAgICAgICAgICB5OiB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuY3VycmVudEN1c3RvbUZsb29yR3JvdXAucm90YXRpb24ueSxcclxuICAgICAgICAgIHo6IHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5yb3RhdGlvbi56XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuX2lvbmUuc2VsZWN0aW9ucy5tYXAocyA9PiBPYmplY3QuYXNzaWduKHt9LCBzKSk7XHJcbiAgICBzZWxlY3Rpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgIHMuaW1hZ2VEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICBzLmltYWdlRGF0YUxhc3RBbnN3ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIHNlbGVjdGlvbnM6IHNlbGVjdGlvbnMsXHJcbiAgICAgIGRlY29zOiB0aGlzLl9pb25lLmRlY29Ob2RlcyxcclxuICAgICAgYXNzZXRVcmw6IHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFydGljbGUuYXNzZXRVcmwsXHJcbiAgICAgIGNkblVybDogdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYXJ0aWNsZS5jb250ZW50RGVsaXZlcnlVcmwsXHJcbiAgICAgIHNjaGVtYTogdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYXJ0aWNsZS5kaXN0U2NoZW1hIHx8ICdVUF9EQkEnLFxyXG4gICAgICBvcHRpb25zOiBvcHRpb25zXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXREYXRhRm9yUm9vbVJlbmRlcihzaXplOiBhbnkpOiBhbnkge1xyXG4gICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XHJcbiAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICB3aWR0aDogc2l6ZS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiBzaXplLmhlaWdodCxcclxuICAgICAgbWF4X3NhbXBsZXM6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5uZXdSZW5kZXJQYXJhbWV0ZXJzLml0ZXJhdGlvbnMsXHJcbiAgICAgIGNhbWVyYU9wdGlvbnM6IHtcclxuICAgICAgICBmb3Y6IHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLmZvdixcclxuICAgICAgICBtYXRyaXg6IEFycmF5LmZyb20odGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLmVsZW1lbnRzKVxyXG4gICAgICB9LFxyXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnM6IHtcclxuICAgICAgICBoZHJpOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy5oZHJpLFxyXG4gICAgICAgIGhkcmlJbnRlbnNpdHk6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5uZXdSZW5kZXJQYXJhbWV0ZXJzLmhkcmlJbnRlbnNpdHlcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIGFzc2V0VXJsOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoLFxyXG4gICAgICBjZG5Vcmw6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy50aHJlZURBc3NldFBhdGgsXHJcbiAgICAgIHNjaGVtYTogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNjaGVtYSxcclxuICAgICAgb3B0aW9uczogb3B0aW9uc1xyXG4gICAgfTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBiaW5hcnkgPSAnJztcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmJ5dGVMZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiB3aW5kb3cuYnRvYShiaW5hcnkpO1xyXG4gIH1cclxufVxyXG4iXX0=
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LXJlbmRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yZW5kZXIvc2VydmljZS9uZXctcmVuZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLGVBQWUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQUMsS0FBSyxFQUFXLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFjM0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUtqRSxNQUFNLE9BQU8sZ0JBQWdCO0lBYTNCLFlBQ1MsY0FBaUMsRUFDaEMsZ0JBQThDLEVBQzlDLHNCQUE2QyxFQUM3QyxjQUE2QixFQUM3QixhQUEyQixFQUMzQixLQUFvQyxFQUNwQyxxQkFBMkQsRUFDM0Qsc0JBQTZDLEVBQzdDLGFBQTJCLEVBQzNCLGtCQUFxQyxFQUNyQyxpQkFBMEMsRUFDMUMsWUFBeUIsRUFDekIsYUFBMkIsRUFDM0IscUJBQTJDLEVBQzNDLGFBQTJCO1FBZDVCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQThCO1FBQzlDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDN0MsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsVUFBSyxH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Z0I7a0hBQWhCLGdCQUFnQixjQUZmLE1BQU07NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTZXJ2aWNlfSBmcm9tICdAbWlnZW5pdXMvcmVhbGl0eXNlcnZlci1jbGllbnQnO1xyXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtTY2VuZX0gZnJvbSAndGhyZWUvc3JjL3NjZW5lcy9TY2VuZSc7XHJcbmltcG9ydCB7TGlnaHQsIE9iamVjdDNEfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7R0xURkV4cG9ydGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vZXhwb3J0ZXJzL0dMVEZFeHBvcnRlcic7XHJcbmltcG9ydCB7UmVuZGVyUXVldWVJdGVtfSBmcm9tICcuLi9tb2RlbC9yZW5kZXItcXVldWUtaXRlbSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7QnVpbGRGdXJuaXR1cmVTZXJ2aWNlfSBmcm9tICcuLi8uLi90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci9zZXJ2aWNlL2J1aWxkLWZ1cm5pdHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDYW1lcmFTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9jYW1lcmEuc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7VGhyZWVkc2VsZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci9zZXJ2aWNlL3RocmVlZHNlbGVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RvYXN0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Jvb21TZXJ2aWNlfSBmcm9tICcuLi8uLi9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29yU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvZmxvb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7TG9hZEZ1cm5pdHVyZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvbG9hZC1mdXJuaXR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7UmVuZGVyU3RhdHVzfSBmcm9tICcuLi9lbnVtL3JlbmRlci1zdGF0dXMnO1xyXG5pbXBvcnQge1V0aWxzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5ld1JlbmRlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgcmVuZGVySW1hZ2VDaGFuZ2VkOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xyXG4gIHB1YmxpYyByZW5kZXJVcGRhdGVJbWFnZUNoYW5nZWQ6IEJlaGF2aW9yU3ViamVjdDx7IGltYWdlOiBzdHJpbmcsIHByb2dyZXNzOiBudW1iZXIsIGZpbmlzaGVkOiBib29sZWFuIH0+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyByZW5kZXJSb29tSW1hZ2VDaGFuZ2VkOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xyXG5cclxuICBwdWJsaWMgc2VydmljZTogU2VydmljZTtcclxuICBwdWJsaWMgc3RhbmRBbG9uZUNhbWVyYU1hdHJpeDogbnVtYmVyW107XHJcbiAgcHVibGljIGN1cnJlbnRRdWV1ZVJlbmRlckl0ZW06IFJlbmRlclF1ZXVlSXRlbSA9IG5ldyBSZW5kZXJRdWV1ZUl0ZW0oKTtcclxuICBwdWJsaWMgcmVuZGVyZWRSb29tSW1hZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBtZXNzYWdlU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9idWlsZEZ1cm5pdHVyZVNlcnZpY2U6IEJ1aWxkRnVybml0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NhbWVyYVNlcnZpY2U6IENhbWVyYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2lvbmU6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW9uZUNvbm5lY3RvckFkYXB0ZXI6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RocmVlZFNlbGVjdG9yU2VydmljZTogVGhyZWVkc2VsZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlQnVzU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9nb29nbGVUYWdNYW5hZ2VyOiBHb29nbGVUYWdNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Jvb21TZXJ2aWNlOiBSb29tU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29yU2VydmljZTogRmxvb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbG9hZEZ1cm5pdHVyZVNlcnZpY2U6IExvYWRGdXJuaXR1cmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdXRpbHNTZXJ2aWNlOiBVdGlsc1NlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuQmxlbmRlclJlbmRlckZpbGVSZWFkeSwgKGZpbGUpID0+IHRoaXMucHJvY2VzUmVuZGVyRmlsZShmaWxlKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJvY2VzUmVuZGVyRmlsZShmaWxlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVySW1hZ2VDaGFuZ2VkLm5leHQoZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9yY2VSZW5kZXJJbWFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2dldE5ld1JlbmRlckltYWdlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlckltYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZ2V0TmV3UmVuZGVySW1hZ2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByZW5kZXJSb29tKHNpemU6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgc2NlbmVEYXRhOiBhbnkgPSBhd2FpdCB0aGlzLl9leHBvcnRUb0dsYigpO1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2dldERhdGFGb3JSb29tUmVuZGVyKHNpemUpO1xyXG4gICAgZGF0YS5maWxlcyA9IHtcclxuICAgICAgZ2xiRGF0YTogdGhpcy5fYXJyYXlCdWZmZXJUb0Jhc2U2NChzY2VuZURhdGEpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5faGFuZGxlV2ViU29ja2V0Um9vbVJlbmRlcihkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2V4cG9ydFRvR2xiKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAvLyBUaGUgZ3JvdW5kIHBsYW5lIGxvb2tzIG9kZCBpbiByZW5kZXJzLlxyXG4gICAgLy8gVGhlIGh1ZC1yaW5nIGFuZCBodWQtY2lyY2xlIGFyZSB0aGUgd2Fsa3Rocm91Z2ggbW9kZSBtYXJrZXIsXHJcbiAgICAvLyB3aGljaCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcmVuZGVyZWQuXHJcbiAgICBjb25zdCBlbGVtZW50c1RvUmVtb3ZlID0gWydncm91bmQtcGxhbmUnLCAnaHVkLXJpbmcnLCAnaHVkLWNpcmNsZSddO1xyXG5cclxuICAgIGxldCBzY2VuZTogU2NlbmU7XHJcbiAgICB0cnkge1xyXG4gICAgICBzY2VuZSA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5jbG9uZSgpO1xyXG5cclxuICAgICAgc2NlbmUuY2hpbGRyZW4uZm9yRWFjaChjID0+IHtcclxuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIExpZ2h0KSB7XHJcbiAgICAgICAgICBzY2VuZS5yZW1vdmUoYyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGVsZW1lbnRzVG9SZW1vdmUuZm9yRWFjaChlbGVtZW50TmFtZSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPYmplY3Q6IE9iamVjdDNEID0gc2NlbmUuZ2V0T2JqZWN0QnlOYW1lKGVsZW1lbnROYW1lKTtcclxuICAgICAgICBzY2VuZS5yZW1vdmUoc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICB0cnM6IGZhbHNlLFxyXG4gICAgICAgIG9ubHlWaXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHRydW5jYXRlRHJhd1JhbmdlOiB0cnVlLFxyXG4gICAgICAgIGJpbmFyeTogdHJ1ZSxcclxuICAgICAgICBmb3JjZUluZGljZXM6IGZhbHNlLFxyXG4gICAgICAgIGZvcmNlUG93ZXJPZlR3b1RleHR1cmVzOiBmYWxzZSxcclxuICAgICAgICAvLyBtYXhUZXh0dXJlU2l6ZTogNTAwLFxyXG4gICAgICAgIGVtYmVkSW1hZ2VzOiB0cnVlLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgZXhwb3J0ZXI6IEdMVEZFeHBvcnRlciA9IG5ldyBHTFRGRXhwb3J0ZXIoKTtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgIGV4cG9ydGVyLnBhcnNlKHNjZW5lLCBhc3luYyAoZXhwb3J0ZWRTY2VuZTogQXJyYXlCdWZmZXIpID0+IHtcclxuICAgICAgICAgIHJlc29sdmUoZXhwb3J0ZWRTY2VuZSk7XHJcbiAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgIH0sIG9wdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhyb3cgKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZ2V0TmV3UmVuZGVySW1hZ2UoZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5ibGVuZGVyUmVuZGVyU2VydmljZSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5fZ2V0RGF0YUZvclJlbmRlcihmb3JjZSk7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUFqYXhCbGVuZGVyUmVuZGVyKGRhdGEpO1xyXG4gICAgICAvLyB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2hvd0xvYWRpbmdJbmRpY2F0b3IsIHt0aXRsZTogJ1JlbmRlcmluZy4uLid9KTtcclxuICAgICAgLy8gY29uc3QgcmVuZGVySW5wdXQgPSB7XHJcbiAgICAgIC8vICAgJ2hlaWdodCc6IDgwMCxcclxuICAgICAgLy8gICAnd2lkdGgnOiAxMjAwLFxyXG4gICAgICAvLyAgICdzY2VuZUFzc2V0SWQnOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MucHJvZHVjdFJlbmRlclNjZW5lQXNzZXRJZFxyXG4gICAgICAvLyB9O1xyXG4gICAgICAvLyBhd2FpdCB0aGlzLl91dGlsc1NlcnZpY2UucHJlcFJvb21Gb3JSZW5kZXIodHJ1ZSwgcmVuZGVySW5wdXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2dldERhdGFGb3JSZW5kZXIoZm9yY2UpO1xyXG4gICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlUmVuZGVyV2Vic29ja2V0KSB7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlV2ViU29ja2V0UmVuZGVyKGRhdGEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2hhbmRsZUFqYXhSZW5kZXIoZGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUFqYXhCbGVuZGVyUmVuZGVyKGRhdGE6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXhpb3Moe1xyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICB9LFxyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXHJcbiAgICAgIHVybDogYCR7dGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm5ld1JlbmRlclBhcmFtZXRlcnMuaG9zdH06JHt0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy5wb3J0fS9nZXRCbGVuZGVyUmVuZGVyRnJvbURhdGFgLFxyXG4gICAgICByZXNwb25zZVR5cGU6ICdqc29uJ1xyXG4gICAgfSk7XHJcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgIC8vIGNvbnN0IGltYWdlID0gYGRhdGE6JHtyZXN1bHQuZGF0YS5maWxlVHlwZX07YmFzZTY0LCR7cmVzdWx0LmRhdGEuaW1hZ2V9YDtcclxuICAgICAgLy8gdGhpcy5fc2hvd1ByZXZpZXdJbWFnZShyZXN1bHQuZGF0YS5pbWFnZSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGltYWdlKTtcclxuICAgICAgdGhpcy5yZW5kZXJJbWFnZUNoYW5nZWQubmV4dChyZXN1bHQuZGF0YS5pbWFnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVBamF4UmVuZGVyKGRhdGE6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXhpb3Moe1xyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICB9LFxyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXHJcbiAgICAgIHVybDogYCR7dGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm5ld1JlbmRlclBhcmFtZXRlcnMuaG9zdH06JHt0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy5wb3J0fS9nZXRSZW5kZXJGcm9tRGF0YWAsXHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nXHJcbiAgICB9KTtcclxuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgLy8gY29uc3QgaW1hZ2UgPSBgZGF0YToke3Jlc3VsdC5kYXRhLmZpbGVUeXBlfTtiYXNlNjQsJHtyZXN1bHQuZGF0YS5pbWFnZX1gO1xyXG4gICAgICAvLyB0aGlzLl9zaG93UHJldmlld0ltYWdlKHJlc3VsdC5kYXRhLmltYWdlKTtcclxuICAgICAgLy8gY29uc29sZS5sb2coaW1hZ2UpO1xyXG4gICAgICB0aGlzLnJlbmRlckltYWdlQ2hhbmdlZC5uZXh0KHJlc3VsdC5kYXRhLmltYWdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVdlYlNvY2tldFJlbmRlcihkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHdlYlNvY2tldENvbm5lY3Rpb246IHN0cmluZyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5uZXdSZW5kZXJQYXJhbWV0ZXJzLndlYnNvY2tldDtcclxuICAgIGNvbnN0IHdlYlNvY2tldCA9IG5ldyBXZWJTb2NrZXQod2ViU29ja2V0Q29ubmVjdGlvbik7XHJcbiAgICB3ZWJTb2NrZXQub25vcGVuID0gKCkgPT4ge1xyXG4gICAgICB3ZWJTb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB9O1xyXG4gICAgd2ViU29ja2V0Lm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBgZGF0YToke3Jlc3VsdC5maWxlVHlwZX07YmFzZTY0LCR7cmVzdWx0LmltYWdlfWA7XHJcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSByZXN1bHQucmVuZGVyZWQ7XHJcbiAgICAgICAgY29uc3QgZmluaXNoZWQgPSByZXN1bHQuZmluaXNoZWQ7XHJcbiAgICAgICAgLy8gdGhpcy5fc2hvd1ByZXZpZXdJbWFnZShpbWFnZSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVzdWx0LnJlbmRlcmVkKTtcclxuICAgICAgICB0aGlzLnJlbmRlclVwZGF0ZUltYWdlQ2hhbmdlZC5uZXh0KHtpbWFnZTogaW1hZ2UsIHByb2dyZXNzOiBwcm9ncmVzcywgZmluaXNoZWQ6IGZpbmlzaGVkfSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5maW5pc2hlZCkge1xyXG4gICAgICAgICAgd2ViU29ja2V0LmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlV2ViU29ja2V0Um9vbVJlbmRlcihkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHdlYlNvY2tldENvbm5lY3Rpb246IHN0cmluZyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5uZXdSZW5kZXJQYXJhbWV0ZXJzLndlYnNvY2tldDtcclxuICAgIGNvbnN0IHdlYlNvY2tldCA9IG5ldyBXZWJTb2NrZXQod2ViU29ja2V0Q29ubmVjdGlvbik7XHJcbiAgICB3ZWJTb2NrZXQub25vcGVuID0gKCkgPT4ge1xyXG4gICAgICB3ZWJTb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB9O1xyXG4gICAgd2ViU29ja2V0Lm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBgZGF0YToke3Jlc3VsdC5maWxlVHlwZX07YmFzZTY0LCR7cmVzdWx0LmltYWdlfWA7XHJcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSByZXN1bHQucmVuZGVyZWQ7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnJlbmRlclByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJSb29tSW1hZ2VDaGFuZ2VkLm5leHQoaW1hZ2UpO1xyXG4gICAgICAgIGlmIChyZXN1bHQuZmluaXNoZWQpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZWRSb29tSW1hZ2VzLnB1c2goaW1hZ2UpO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnJlbmRlclN0YXR1cyA9IFJlbmRlclN0YXR1cy5Jc1N1Y2Nlc3M7XHJcbiAgICAgICAgICB3ZWJTb2NrZXQuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG93UHJldmlld0ltYWdlKHNyYzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgaW1nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZXZpZXdfaW1nJyk7XHJcbiAgICBpZiAoIWltZykge1xyXG4gICAgICBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgICAgaW1nLmlkID0gJ3ByZXZpZXdfaW1nJztcclxuICAgICAgZG9jdW1lbnQuYm9keS5wcmVwZW5kKGltZyk7XHJcbiAgICAgIGltZy5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgIGltZy5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICAgIGltZy5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgICAvLyBpbWcuc3R5bGUud2lkdGggPSAnODAwcHgnO1xyXG4gICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJzYwMHB4JztcclxuICAgICAgaW1nLnN0eWxlLnpJbmRleCA9ICcxMCc7XHJcbiAgICB9XHJcbiAgICAoaW1nIGFzIGFueSkuc3JjID0gc3JjO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0RGF0YUZvclJlbmRlcihmb3JjZTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKHRydWUpO1xyXG4gICAgY29uc3QgY2FtTWF0cml4OiBudW1iZXJbXSA9IEFycmF5LmZyb20odGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEubWF0cml4V29ybGQuZWxlbWVudHMpO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgZm9yY2U6IGZvcmNlLFxyXG4gICAgICB3aWR0aDogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm5ld1JlbmRlclBhcmFtZXRlcnMuaW1hZ2VXaWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy5pbWFnZUhlaWdodCxcclxuICAgICAgc2NlbmVBc3NldElkOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MucHJvZHVjdFJlbmRlclNjZW5lQXNzZXRJZCxcclxuICAgICAgbWF4X3NhbXBsZXM6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5uZXdSZW5kZXJQYXJhbWV0ZXJzLml0ZXJhdGlvbnMsXHJcbiAgICAgIGNhbWVyYU9wdGlvbnM6IHtcclxuICAgICAgICBmb3Y6IHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLmZvdixcclxuICAgICAgICBtYXRyaXg6IGNhbU1hdHJpeFxyXG4gICAgICB9LFxyXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnM6IHtcclxuICAgICAgICBoZHJpOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy5oZHJpLFxyXG4gICAgICAgIGhkcmlJbnRlbnNpdHk6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5uZXdSZW5kZXJQYXJhbWV0ZXJzLmhkcmlJbnRlbnNpdHlcclxuICAgICAgfSxcclxuICAgICAgb2JqZWN0T3B0aW9uczoge1xyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICB4OiB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuY3VycmVudEN1c3RvbUZsb29yR3JvdXAucG9zaXRpb24ueCxcclxuICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICB6OiB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuY3VycmVudEN1c3RvbUZsb29yR3JvdXAucG9zaXRpb24uelxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcm90YXRpb246IHtcclxuICAgICAgICAgIHg6IHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5yb3RhdGlvbi54LFxyXG4gICAgICAgICAgeTogdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmN1cnJlbnRDdXN0b21GbG9vckdyb3VwLnJvdGF0aW9uLnksXHJcbiAgICAgICAgICB6OiB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuY3VycmVudEN1c3RvbUZsb29yR3JvdXAucm90YXRpb24uelxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbnMgPSB0aGlzLl9pb25lLnNlbGVjdGlvbnMubWFwKHMgPT4gT2JqZWN0LmFzc2lnbih7fSwgcykpO1xyXG4gICAgc2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBzLmltYWdlRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgcy5pbWFnZURhdGFMYXN0QW5zd2VyID0gdW5kZWZpbmVkO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICBzZWxlY3Rpb25zOiBzZWxlY3Rpb25zLFxyXG4gICAgICBkZWNvczogdGhpcy5faW9uZS5kZWNvTm9kZXMsXHJcbiAgICAgIGFzc2V0VXJsOiB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5hcnRpY2xlLmFzc2V0VXJsLFxyXG4gICAgICBjZG5Vcmw6IHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFydGljbGUuY29udGVudERlbGl2ZXJ5VXJsLFxyXG4gICAgICBzY2hlbWE6IHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFydGljbGUuZGlzdFNjaGVtYSB8fCAnVVBfREJBJyxcclxuICAgICAgb3B0aW9uczogb3B0aW9uc1xyXG4gICAgfTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0RGF0YUZvclJvb21SZW5kZXIoc2l6ZTogYW55KTogYW55IHtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKHRydWUpO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgd2lkdGg6IHNpemUud2lkdGgsXHJcbiAgICAgIGhlaWdodDogc2l6ZS5oZWlnaHQsXHJcbiAgICAgIG1heF9zYW1wbGVzOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy5pdGVyYXRpb25zLFxyXG4gICAgICBjYW1lcmFPcHRpb25zOiB7XHJcbiAgICAgICAgZm92OiB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5mb3YsXHJcbiAgICAgICAgbWF0cml4OiBBcnJheS5mcm9tKHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5lbGVtZW50cylcclxuICAgICAgfSxcclxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zOiB7XHJcbiAgICAgICAgaGRyaTogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm5ld1JlbmRlclBhcmFtZXRlcnMuaGRyaSxcclxuICAgICAgICBoZHJpSW50ZW5zaXR5OiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy5oZHJpSW50ZW5zaXR5XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICBhc3NldFVybDogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmFzc2V0UGF0aCxcclxuICAgICAgY2RuVXJsOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoLFxyXG4gICAgICBzY2hlbWE6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zY2hlbWEsXHJcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FycmF5QnVmZmVyVG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgYmluYXJ5ID0gJyc7XHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBjb25zdCBsZW4gPSBieXRlcy5ieXRlTGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2luZG93LmJ0b2EoYmluYXJ5KTtcclxuICB9XHJcbn1cclxuIl19