@colijnit/homedecorator 255.1.2 → 255.1.4

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 +2 -2
  3. package/app/core/service/homedecorator-connector.service.d.ts +2 -2
  4. package/app/core/service/utils.service.d.ts +1 -0
  5. package/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.scss +2 -4
  6. package/app/plugins/core3d/items/floor-plane-item.d.ts +8 -1
  7. package/app/plugins/core3d/items/metadata.d.ts +2 -0
  8. package/app/plugins/core3d/service/ar.service.d.ts +1 -0
  9. package/app/plugins/core3d/service/floor-pattern.service.d.ts +26 -0
  10. package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +25 -0
  11. package/app/plugins/core3d/service/outline.service.d.ts +1 -2
  12. package/app/plugins/core3d/service/post-processing.service.d.ts +6 -0
  13. package/app/plugins/core3d/service/scene.service.d.ts +4 -1
  14. package/app/plugins/core3d/service/ssr.service.d.ts +19 -0
  15. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +40 -3
  16. package/app/plugins/render/service/new-render.service.d.ts +1 -0
  17. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +10 -1
  18. package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +1 -0
  19. package/app/plugins/toolbar/toolbar.module.d.ts +2 -1
  20. package/app/shared/pdf-export/pdf-export.component.d.ts +20 -0
  21. package/app/shared/pdf-export/pdf-export.component.scss +19 -0
  22. package/app/shared/pdf-export/pdf-export.module.d.ts +11 -0
  23. package/assets/icons/xmark_regular.svg +1 -0
  24. package/bundles/colijnit-homedecorator.umd.js +1406 -295
  25. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  26. package/esm2015/app/app.version.js +4 -4
  27. package/esm2015/app/core/model/homedecorator-settings-options.js +2 -1
  28. package/esm2015/app/core/model/light-preset.js +11 -7
  29. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +6 -8
  30. package/esm2015/app/core/service/homedecorator-connector.service.js +7 -5
  31. package/esm2015/app/core/service/utils.service.js +16 -1
  32. package/esm2015/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.js +2 -2
  33. package/esm2015/app/plugins/core3d/components/scene-options/scene-options.component.js +63 -3
  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 +104 -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 +339 -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/room-planner/room-planner/room-planner.component.js +2 -2
  50. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +135 -5
  51. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +35 -9
  52. package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +9 -25
  53. package/esm2015/app/plugins/toolbar/toolbar.module.js +8 -4
  54. package/esm2015/app/shared/pdf-export/pdf-export.component.js +86 -0
  55. package/esm2015/app/shared/pdf-export/pdf-export.module.js +38 -0
  56. package/fesm2015/colijnit-homedecorator.js +1385 -295
  57. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  58. package/package.json +3 -3
@@ -1,9 +1,9 @@
1
1
  // IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT!
2
2
  /* tslint:disable */
3
3
  export const VersionInfo = {
4
- "application": "Homedecorator",
5
- "appVersion": "252.0.1",
6
- "revision": "44fb58ea"
4
+ application: "Homedecorator",
5
+ appVersion: "255.1.2",
6
+ revision: "111849"
7
7
  };
8
8
  /* tslint:enable */
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9hcHAudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnRUFBZ0U7QUFDaEUsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixhQUFhLEVBQUUsZUFBZTtJQUM5QixZQUFZLEVBQUUsU0FBUztJQUN2QixVQUFVLEVBQUUsVUFBVTtDQUN2QixDQUFDO0FBQ0YsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSU1QT1JUQU5UOiBUSElTIEZJTEUgSVMgQVVUTyBHRU5FUkFURUQhIERPIE5PVCBNQU5VQUxMWSBFRElUIVxyXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xyXG5leHBvcnQgY29uc3QgVmVyc2lvbkluZm8gPSB7XHJcbiAgXCJhcHBsaWNhdGlvblwiOiBcIkhvbWVkZWNvcmF0b3JcIixcclxuICBcImFwcFZlcnNpb25cIjogXCIyNTIuMC4xXCIsXHJcbiAgXCJyZXZpc2lvblwiOiBcIjQ0ZmI1OGVhXCJcclxufTtcclxuLyogdHNsaW50OmVuYWJsZSAqL1xyXG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9hcHAudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnRUFBZ0U7QUFDaEUsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUMzQixXQUFXLEVBQUUsZUFBZTtJQUMxQixVQUFVLEVBQUUsU0FBUztJQUNyQixRQUFRLEVBQUUsUUFBUTtDQUNuQixDQUFBO0FBQ0QsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSU1QT1JUQU5UOiBUSElTIEZJTEUgSVMgQVVUTyBHRU5FUkFURUQhIERPIE5PVCBNQU5VQUxMWSBFRElUIVxuLyogdHNsaW50OmRpc2FibGUgKi9cbmV4cG9ydCBjb25zdCBWZXJzaW9uSW5mbyA9IHtcbmFwcGxpY2F0aW9uOiBcIkhvbWVkZWNvcmF0b3JcIixcbiAgYXBwVmVyc2lvbjogXCIyNTUuMS4yXCIsXG4gIHJldmlzaW9uOiBcIjExMTg0OVwiXG59XG4vKiB0c2xpbnQ6ZW5hYmxlICovXG4iXX0=
@@ -43,7 +43,8 @@ export class HomedecoratorSettingsOptions {
43
43
  this.useRenderWebsocket = false;
44
44
  this.productRenderSceneAssetId = 'scene_studio_eevee';
45
45
  this.pathTracer = false;
46
+ this.ssrEnabled = false;
46
47
  this.maxRenderSamples = 100;
47
48
  }
48
49
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1zZXR0aW5ncy1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9tb2RlbC9ob21lZGVjb3JhdG9yLXNldHRpbmdzLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLDRCQUE0QjtJQUF6QztRQUNTLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5Qix5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1Qiw2QkFBd0IsR0FBWSxLQUFLLENBQUM7UUFDMUMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLDJCQUFzQixHQUFZLElBQUksQ0FBQztRQUN2Qyx5QkFBb0IsR0FBWSxJQUFJLENBQUMsQ0FBQyxvQkFBb0I7UUFDMUQseUJBQW9CLEdBQVksSUFBSSxDQUFDLENBQUMsYUFBYTtRQUNuRCx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBQ3hDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4Qyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsb0NBQStCLEdBQVksS0FBSyxDQUFDO1FBQ2pELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVsQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUNyQywyQkFBc0IsR0FBWSxJQUFJLENBQUM7UUFDdkMsK0JBQTBCLEdBQVksSUFBSSxDQUFDO1FBQzNDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0Qyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLGtEQUE2QyxHQUFZLEtBQUssQ0FBQztRQUMvRCxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5Qix1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMsOEJBQXlCLEdBQVcsb0JBQW9CLENBQUM7UUFDekQsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixxQkFBZ0IsR0FBVyxHQUFHLENBQUM7SUFDeEMsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEhvbWVkZWNvcmF0b3JTZXR0aW5nc09wdGlvbnMge1xyXG4gIHB1YmxpYyBzaG93U3RvY2tTdGF0dXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvdzNEV2F0ZXJtYXJrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dab29tQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dUYWdGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0FzQ29uZmlndXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkZXZlbG9wbWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbmxpbmVBbnN3ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dBckJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93Q2FwdGlvbkFkZEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnN0YW50UmVwbGFjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBib3R0b21BbnN3ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIG9ubHlUaHJlZUQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1JlbmRlckNvbm5lY3Rpb25JbmZvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGZvcmNlQWRqdXN0YWJsZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1Jvb21Eb3dubG9hZEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIHNob3dSb29tUmVuZGVyQnV0dG9uOiBib29sZWFuID0gdHJ1ZTsgLy8gM0RNIHJlbmRlciBidXR0b25cclxuICBwdWJsaWMgc2hvd093bkNhdGFsb2dCdXR0b246IGJvb2xlYW4gPSB0cnVlOyAvLyBIREggb3B0aW9uXHJcbiAgcHVibGljIHNob3dEb3dubG9hZEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93T25seUhvbWVEZWNvRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dNZWFzdXJlbWVudHNCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY2FtZXJhUG9zaXRpb25GaXhlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYW1lcmFQb3NpdGlvbkZpeGVkQW5kU2Nyb2xsYmFyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGhhbmRsZVBhcmFtZXRyaWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGFyRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93U3RhbmRhbG9uZUFSQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHZyRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBxdWFsaXR5U2V0dGluZ3NFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHhyRGVidWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdXNlU3RhbmRhbG9uZUZsb29yczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VTdGFuZGFsb25lSGlnaExpZ2h0OiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2hvd0VkaXRQZW5jaWxDb25maWd1cmF0b3I6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBpbnN0YW50RWRpdE1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYW5pbWF0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgY3VzdG9taXphdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdXNlUGxhY2VtZW50U25hcHBpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdXNlVmFyaWF0aW9uT25QYXJ0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dGb3JtRGlhbG9nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2hvd09ubHlMYXN0QW5zd2VyRGVzY3JpcHRpb25HZW5lcmljU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGVuYWJsZTNESW5QaG90bzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VOZXdSZW5kZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdXNlUmVuZGVyV2Vic29ja2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHByb2R1Y3RSZW5kZXJTY2VuZUFzc2V0SWQ6IHN0cmluZyA9ICdzY2VuZV9zdHVkaW9fZWV2ZWUnO1xyXG4gIHB1YmxpYyBwYXRoVHJhY2VyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIG1heFJlbmRlclNhbXBsZXM6IG51bWJlciA9IDEwMDtcclxufVxyXG4iXX0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1zZXR0aW5ncy1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9tb2RlbC9ob21lZGVjb3JhdG9yLXNldHRpbmdzLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLDRCQUE0QjtJQUF6QztRQUNTLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5Qix5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1Qiw2QkFBd0IsR0FBWSxLQUFLLENBQUM7UUFDMUMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLDJCQUFzQixHQUFZLElBQUksQ0FBQztRQUN2Qyx5QkFBb0IsR0FBWSxJQUFJLENBQUMsQ0FBQyxvQkFBb0I7UUFDMUQseUJBQW9CLEdBQVksSUFBSSxDQUFDLENBQUMsYUFBYTtRQUNuRCx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBQ3hDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4Qyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsb0NBQStCLEdBQVksS0FBSyxDQUFDO1FBQ2pELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVsQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUNyQywyQkFBc0IsR0FBWSxJQUFJLENBQUM7UUFDdkMsK0JBQTBCLEdBQVksSUFBSSxDQUFDO1FBQzNDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0Qyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLGtEQUE2QyxHQUFZLEtBQUssQ0FBQztRQUMvRCxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5Qix1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMsOEJBQXlCLEdBQVcsb0JBQW9CLENBQUM7UUFDekQsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLHFCQUFnQixHQUFXLEdBQUcsQ0FBQztJQUN4QyxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSG9tZWRlY29yYXRvclNldHRpbmdzT3B0aW9ucyB7XHJcbiAgcHVibGljIHNob3dTdG9ja1N0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93M0RXYXRlcm1hcms6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1pvb21CdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1RhZ0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93QXNDb25maWd1cmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRldmVsb3BtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlubGluZUFuc3dlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0FyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dDYXB0aW9uQWRkQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGluc3RhbnRSZXBsYWNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJvdHRvbUFuc3dlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgb25seVRocmVlRDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93UmVuZGVyQ29ubmVjdGlvbkluZm86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZm9yY2VBZGp1c3RhYmxlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93Um9vbURvd25sb2FkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2hvd1Jvb21SZW5kZXJCdXR0b246IGJvb2xlYW4gPSB0cnVlOyAvLyAzRE0gcmVuZGVyIGJ1dHRvblxyXG4gIHB1YmxpYyBzaG93T3duQ2F0YWxvZ0J1dHRvbjogYm9vbGVhbiA9IHRydWU7IC8vIEhESCBvcHRpb25cclxuICBwdWJsaWMgc2hvd0Rvd25sb2FkQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dPbmx5SG9tZURlY29GaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd01lYXN1cmVtZW50c0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYW1lcmFQb3NpdGlvbkZpeGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNhbWVyYVBvc2l0aW9uRml4ZWRBbmRTY3JvbGxiYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaGFuZGxlUGFyYW1ldHJpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgYXJFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTdGFuZGFsb25lQVJCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdnJFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHF1YWxpdHlTZXR0aW5nc0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgeHJEZWJ1ZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VTdGFuZGFsb25lRmxvb3JzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHVzZVN0YW5kYWxvbmVIaWdoTGlnaHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBzaG93RWRpdFBlbmNpbENvbmZpZ3VyYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGluc3RhbnRFZGl0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhbmltYXRpb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBjdXN0b21pemF0aW9uRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VQbGFjZW1lbnRTbmFwcGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VWYXJpYXRpb25PblBhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0Zvcm1EaWFsb2c6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBzaG93T25seUxhc3RBbnN3ZXJEZXNjcmlwdGlvbkdlbmVyaWNTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZW5hYmxlM0RJblBob3RvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHVzZU5ld1JlbmRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VSZW5kZXJXZWJzb2NrZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcHJvZHVjdFJlbmRlclNjZW5lQXNzZXRJZDogc3RyaW5nID0gJ3NjZW5lX3N0dWRpb19lZXZlZSc7XHJcbiAgcHVibGljIHBhdGhUcmFjZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3NyRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBtYXhSZW5kZXJTYW1wbGVzOiBudW1iZXIgPSAxMDA7XHJcbn1cclxuIl19
@@ -35,12 +35,16 @@ export class LightPreset {
35
35
  model.standalone = modelInterface.standalone;
36
36
  model.group = modelInterface.group;
37
37
  model.navigatorType = modelInterface.navigatorType;
38
- model.shadowMapType = modelInterface.shadowMapType ?
39
- Array.from(shadowMapTypesMap.entries()).find((key, value) => key[1] === modelInterface.shadowMapType)[0] :
40
- ShadowMapLocalType.PCFSoftShadowMap;
41
- model.outputEncoding = modelInterface.outputEncoding ?
42
- Array.from(outputEncodingMap.entries()).find((key, value) => key[1] === modelInterface.outputEncoding)[0] :
43
- OutputEncoding.SRGBColorSpace;
38
+ if (Array.from(shadowMapTypesMap.entries()).find((key, value) => key[1] === modelInterface.shadowMapType)) {
39
+ model.shadowMapType = modelInterface.shadowMapType ?
40
+ Array.from(shadowMapTypesMap.entries()).find((key, value) => key[1] === modelInterface.shadowMapType)[0] :
41
+ ShadowMapLocalType.PCFSoftShadowMap;
42
+ }
43
+ if (Array.from(outputEncodingMap.entries()).find((key, value) => key[1] === modelInterface.outputEncoding)) {
44
+ model.outputEncoding = modelInterface.outputEncoding ?
45
+ Array.from(outputEncodingMap.entries()).find((key, value) => key[1] === modelInterface.outputEncoding)[0] :
46
+ OutputEncoding.SRGBColorSpace;
47
+ }
44
48
  model.shadowRadius = modelInterface.shadowRadius;
45
49
  model.toneMappingExposure = modelInterface.toneMappingExposure ? modelInterface.toneMappingExposure : 1;
46
50
  model.physicallyCorrectLights = modelInterface.physicallyCorrectLights ? modelInterface.physicallyCorrectLights : false;
@@ -56,4 +60,4 @@ export class LightPreset {
56
60
  return s4() + s4() + s4();
57
61
  }
58
62
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHQtcHJlc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9tb2RlbC9saWdodC1wcmVzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUNMLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsWUFBWSxFQUNaLGdCQUFnQixFQUFpQixjQUFjLEVBQy9DLFlBQVksRUFDYixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUc1RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFJbkQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQTJDLElBQUksR0FBRyxDQUFDO0lBQy9FLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQztJQUNuRCxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7SUFDL0MsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztJQUN2RCxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7Q0FDaEQsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQW9DLElBQUksR0FBRyxDQUFDO0lBQ3hFLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDO0lBQzNELENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUM7Q0FDaEQsQ0FBQyxDQUFDO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFldEI7UUFiTyxTQUFJLEdBQVcsVUFBVSxDQUFDO1FBRTFCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUU1QixrQkFBYSxHQUF1QixrQkFBa0IsQ0FB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bnRlbnQiOlsiaW1wb3J0IHtTaGFkb3dNYXBMb2NhbFR5cGV9IGZyb20gJy4uL2VudW0vc2hhZG93LW1hcC10eXBlLmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIEJhc2ljU2hhZG93TWFwLFxyXG4gIExpbmVhclNSR0JDb2xvclNwYWNlLFxyXG4gIFBDRlNoYWRvd01hcCxcclxuICBQQ0ZTb2Z0U2hhZG93TWFwLCBTaGFkb3dNYXBUeXBlLCBTUkdCQ29sb3JTcGFjZSxcclxuICBWU01TaGFkb3dNYXBcclxufSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7T3V0cHV0RW5jb2Rpbmd9IGZyb20gJy4uL2VudW0vb3V0cHV0LWVuY29kaW5nLmVudW0nO1xyXG5pbXBvcnQge05hdmlnYXRvclR5cGV9IGZyb20gJy4uLy4uL3NoYXJlZC9zY3JlZW4tc2l6ZS1hbmFseXNpcy9uYXZpZ2F0b3ItdHlwZS5lbnVtJztcclxuaW1wb3J0IHtMaWdodFByZXNldEludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlL2xpZ2h0LXByZXNldC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0xpZ2h0UHJvcGVydGllc30gZnJvbSAnLi9saWdodC1wcm9wZXJ0aWVzJztcclxuaW1wb3J0IHtDb2xvclNwYWNlfSBmcm9tICd0aHJlZS9zcmMvY29uc3RhbnRzJztcclxuXHJcblxyXG5leHBvcnQgY29uc3Qgc2hhZG93TWFwVHlwZXNNYXA6IE1hcDxTaGFkb3dNYXBMb2NhbFR5cGUsIFNoYWRvd01hcFR5cGU+ID0gbmV3IE1hcChbXHJcbiAgW1NoYWRvd01hcExvY2FsVHlwZS5CYXNpY1NoYWRvd01hcCwgQmFzaWNTaGFkb3dNYXBdLFxyXG4gIFtTaGFkb3dNYXBMb2NhbFR5cGUuUENGU2hhZG93TWFwLCBQQ0ZTaGFkb3dNYXBdLFxyXG4gIFtTaGFkb3dNYXBMb2NhbFR5cGUuUENGU29mdFNoYWRvd01hcCwgUENGU29mdFNoYWRvd01hcF0sXHJcbiAgW1NoYWRvd01hcExvY2FsVHlwZS5WU01TaGFkb3dNYXAsIFZTTVNoYWRvd01hcF1cclxuXSk7XHJcblxyXG5leHBvcnQgY29uc3Qgb3V0cHV0RW5jb2RpbmdNYXA6IE1hcDxPdXRwdXRFbmNvZGluZywgQ29sb3JTcGFjZT4gPSBuZXcgTWFwKFtcclxuICBbT3V0cHV0RW5jb2RpbmcuTGluZWFyU1JHQkNvbG9yU3BhY2UsIExpbmVhclNSR0JDb2xvclNwYWNlXSxcclxuICBbT3V0cHV0RW5jb2RpbmcuU1JHQkNvbG9yU3BhY2UsIFNSR0JDb2xvclNwYWNlXVxyXG5dKTtcclxuXHJcbmV4cG9ydCBjbGFzcyBMaWdodFByZXNldCB7XHJcbiAgcHVibGljIGlkOiBzdHJpbmc7XHJcbiAgcHVibGljIG5hbWU6IHN0cmluZyA9ICduYWFtbG9vcyc7XHJcbiAgcHVibGljIG5hdmlnYXRvclR5cGU6IE5hdmlnYXRvclR5cGU7XHJcbiAgcHVibGljIGRlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3RhbmRhbG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBncm91cDogc3RyaW5nO1xyXG4gIHB1YmxpYyBzaGFkb3dNYXBUeXBlOiBTaGFkb3dNYXBMb2NhbFR5cGUgPSBTaGFkb3dNYXBMb2NhbFR5cGUuUENGU29mdFNoYWRvd01hcDtcclxuICBwdWJsaWMgb3V0cHV0RW5jb2Rpbmc6IE91dHB1dEVuY29kaW5nID0gT3V0cHV0RW5jb2RpbmcuTGluZWFyU1JHQkNvbG9yU3BhY2U7XHJcbiAgcHVibGljIHNoYWRvd1JhZGl1czogbnVtYmVyO1xyXG4gIHB1YmxpYyB0b25lTWFwcGluZ0V4cG9zdXJlOiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsaWdodHM6IExpZ2h0UHJvcGVydGllc1tdID0gW107XHJcbiAgcHVibGljIGRpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pZCA9IHRoaXMuX2dlbmVyYXRlVW5pcXVlSWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgQ3JlYXRlTW9kZWxGcm9tSW50ZXJmYWNlKG1vZGVsSW50ZXJmYWNlOiBMaWdodFByZXNldEludGVyZmFjZSk6IExpZ2h0UHJlc2V0IHtcclxuICAgIGNvbnN0IG1vZGVsOiBMaWdodFByZXNldCA9IG5ldyBMaWdodFByZXNldCgpO1xyXG4gICAgaWYgKG1vZGVsSW50ZXJmYWNlLmlkKSB7XHJcbiAgICAgIG1vZGVsLmlkID0gbW9kZWxJbnRlcmZhY2UuaWQ7XHJcbiAgICB9XHJcbiAgICBtb2RlbC5uYW1lID0gbW9kZWxJbnRlcmZhY2UubmFtZTtcclxuICAgIG1vZGVsLmRlZmF1bHQgPSBtb2RlbEludGVyZmFjZS5kZWZhdWx0O1xyXG4gICAgbW9kZWwuc3RhbmRhbG9uZSA9IG1vZGVsSW50ZXJmYWNlLnN0YW5kYWxvbmU7XHJcbiAgICBtb2RlbC5ncm91cCA9IG1vZGVsSW50ZXJmYWNlLmdyb3VwO1xyXG4gICAgbW9kZWwubmF2aWdhdG9yVHlwZSA9IG1vZGVsSW50ZXJmYWNlLm5hdmlnYXRvclR5cGU7XHJcbiAgICBtb2RlbC5zaGFkb3dNYXBUeXBlID0gbW9kZWxJbnRlcmZhY2Uuc2hhZG93TWFwVHlwZSA/XHJcbiAgICAgIEFycmF5LmZyb20oc2hhZG93TWFwVHlwZXNNYXAuZW50cmllcygpKS5maW5kKChrZXksIHZhbHVlKSA9PiBrZXlbMV0gPT09IG1vZGVsSW50ZXJmYWNlLnNoYWRvd01hcFR5cGUpWzBdIDpcclxuICAgICAgU2hhZG93TWFwTG9jYWxUeXBlLlBDRlNvZnRTaGFkb3dNYXA7XHJcbiAgICBtb2RlbC5vdXRwdXRFbmNvZGluZyA9IG1vZGVsSW50ZXJmYWNlLm91dHB1dEVuY29kaW5nID9cclxuICAgICAgQXJyYXkuZnJvbShvdXRwdXRFbmNvZGluZ01hcC5lbnRyaWVzKCkpLmZpbmQoKGtleSwgdmFsdWUpID0+IGtleVsxXSA9PT0gbW9kZWxJbnRlcmZhY2Uub3V0cHV0RW5jb2RpbmcpWzBdIDpcclxuICAgICAgT3V0cHV0RW5jb2RpbmcuU1JHQkNvbG9yU3BhY2U7XHJcbiAgICBtb2RlbC5zaGFkb3dSYWRpdXMgPSBtb2RlbEludGVyZmFjZS5zaGFkb3dSYWRpdXM7XHJcbiAgICBtb2RlbC50b25lTWFwcGluZ0V4cG9zdXJlID0gbW9kZWxJbnRlcmZhY2UudG9uZU1hcHBpbmdFeHBvc3VyZSA/IG1vZGVsSW50ZXJmYWNlLnRvbmVNYXBwaW5nRXhwb3N1cmUgOiAxO1xyXG4gICAgbW9kZWwucGh5c2ljYWxseUNvcnJlY3RMaWdodHMgPSBtb2RlbEludGVyZmFjZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyA/IG1vZGVsSW50ZXJmYWNlLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzIDogZmFsc2U7XHJcbiAgICBtb2RlbEludGVyZmFjZS5saWdodHMuZm9yRWFjaCgobGlnaHQ6IExpZ2h0UHJvcGVydGllcykgPT4gbW9kZWwubGlnaHRzLnB1c2goTGlnaHRQcm9wZXJ0aWVzLkNyZWF0ZU5ldyhsaWdodCkpKTtcclxuICAgIHJldHVybiBtb2RlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dlbmVyYXRlVW5pcXVlSWQoKTogc3RyaW5nIHtcclxuICAgIGZ1bmN0aW9uIHM0KCkge1xyXG4gICAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcclxuICAgICAgICAudG9TdHJpbmcoMTYpXHJcbiAgICAgICAgLnN1YnN0cmluZygxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gczQoKSArIHM0KCkgKyBzNCgpO1xyXG4gIH1cclxufVxyXG4iXX0=
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHQtcHJlc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9tb2RlbC9saWdodC1wcmVzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUNMLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsWUFBWSxFQUNaLGdCQUFnQixFQUFpQixjQUFjLEVBQy9DLFlBQVksRUFDYixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUc1RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFJbkQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQTJDLElBQUksR0FBRyxDQUFDO0lBQy9FLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQztJQUNuRCxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7SUFDL0MsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztJQUN2RCxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7Q0FDaEQsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQW9DLElBQUksR0FBRyxDQUFDO0lBQ3hFLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDO0lBQzNELENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUM7Q0FDaEQsQ0FBQyxDQUFDO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFldEI7UUFiTyxTQUFJLEdBQVcsVUFBVSxDQUFDO1FBRTFCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUU1QixrQkFBYSxHQUF1QixrQkFBa0IsQ0FB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U0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsU0FBUyxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztpQkFDN0MsUUFBUSxDQUFDLEVBQUUsQ0FBQztpQkFDWixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTaGFkb3dNYXBMb2NhbFR5cGV9IGZyb20gJy4uL2VudW0vc2hhZG93LW1hcC10eXBlLmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIEJhc2ljU2hhZG93TWFwLFxyXG4gIExpbmVhclNSR0JDb2xvclNwYWNlLFxyXG4gIFBDRlNoYWRvd01hcCxcclxuICBQQ0ZTb2Z0U2hhZG93TWFwLCBTaGFkb3dNYXBUeXBlLCBTUkdCQ29sb3JTcGFjZSxcclxuICBWU01TaGFkb3dNYXBcclxufSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7T3V0cHV0RW5jb2Rpbmd9IGZyb20gJy4uL2VudW0vb3V0cHV0LWVuY29kaW5nLmVudW0nO1xyXG5pbXBvcnQge05hdmlnYXRvclR5cGV9IGZyb20gJy4uLy4uL3NoYXJlZC9zY3JlZW4tc2l6ZS1hbmFseXNpcy9uYXZpZ2F0b3ItdHlwZS5lbnVtJztcclxuaW1wb3J0IHtMaWdodFByZXNldEludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlL2xpZ2h0LXByZXNldC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0xpZ2h0UHJvcGVydGllc30gZnJvbSAnLi9saWdodC1wcm9wZXJ0aWVzJztcclxuaW1wb3J0IHtDb2xvclNwYWNlfSBmcm9tICd0aHJlZS9zcmMvY29uc3RhbnRzJztcclxuXHJcblxyXG5leHBvcnQgY29uc3Qgc2hhZG93TWFwVHlwZXNNYXA6IE1hcDxTaGFkb3dNYXBMb2NhbFR5cGUsIFNoYWRvd01hcFR5cGU+ID0gbmV3IE1hcChbXHJcbiAgW1NoYWRvd01hcExvY2FsVHlwZS5CYXNpY1NoYWRvd01hcCwgQmFzaWNTaGFkb3dNYXBdLFxyXG4gIFtTaGFkb3dNYXBMb2NhbFR5cGUuUENGU2hhZG93TWFwLCBQQ0ZTaGFkb3dNYXBdLFxyXG4gIFtTaGFkb3dNYXBMb2NhbFR5cGUuUENGU29mdFNoYWRvd01hcCwgUENGU29mdFNoYWRvd01hcF0sXHJcbiAgW1NoYWRvd01hcExvY2FsVHlwZS5WU01TaGFkb3dNYXAsIFZTTVNoYWRvd01hcF1cclxuXSk7XHJcblxyXG5leHBvcnQgY29uc3Qgb3V0cHV0RW5jb2RpbmdNYXA6IE1hcDxPdXRwdXRFbmNvZGluZywgQ29sb3JTcGFjZT4gPSBuZXcgTWFwKFtcclxuICBbT3V0cHV0RW5jb2RpbmcuTGluZWFyU1JHQkNvbG9yU3BhY2UsIExpbmVhclNSR0JDb2xvclNwYWNlXSxcclxuICBbT3V0cHV0RW5jb2RpbmcuU1JHQkNvbG9yU3BhY2UsIFNSR0JDb2xvclNwYWNlXVxyXG5dKTtcclxuXHJcbmV4cG9ydCBjbGFzcyBMaWdodFByZXNldCB7XHJcbiAgcHVibGljIGlkOiBzdHJpbmc7XHJcbiAgcHVibGljIG5hbWU6IHN0cmluZyA9ICduYWFtbG9vcyc7XHJcbiAgcHVibGljIG5hdmlnYXRvclR5cGU6IE5hdmlnYXRvclR5cGU7XHJcbiAgcHVibGljIGRlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3RhbmRhbG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBncm91cDogc3RyaW5nO1xyXG4gIHB1YmxpYyBzaGFkb3dNYXBUeXBlOiBTaGFkb3dNYXBMb2NhbFR5cGUgPSBTaGFkb3dNYXBMb2NhbFR5cGUuUENGU29mdFNoYWRvd01hcDtcclxuICBwdWJsaWMgb3V0cHV0RW5jb2Rpbmc6IE91dHB1dEVuY29kaW5nID0gT3V0cHV0RW5jb2RpbmcuTGluZWFyU1JHQkNvbG9yU3BhY2U7XHJcbiAgcHVibGljIHNoYWRvd1JhZGl1czogbnVtYmVyO1xyXG4gIHB1YmxpYyB0b25lTWFwcGluZ0V4cG9zdXJlOiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsaWdodHM6IExpZ2h0UHJvcGVydGllc1tdID0gW107XHJcbiAgcHVibGljIGRpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pZCA9IHRoaXMuX2dlbmVyYXRlVW5pcXVlSWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgQ3JlYXRlTW9kZWxGcm9tSW50ZXJmYWNlKG1vZGVsSW50ZXJmYWNlOiBMaWdodFByZXNldEludGVyZmFjZSk6IExpZ2h0UHJlc2V0IHtcclxuICAgIGNvbnN0IG1vZGVsOiBMaWdodFByZXNldCA9IG5ldyBMaWdodFByZXNldCgpO1xyXG4gICAgaWYgKG1vZGVsSW50ZXJmYWNlLmlkKSB7XHJcbiAgICAgIG1vZGVsLmlkID0gbW9kZWxJbnRlcmZhY2UuaWQ7XHJcbiAgICB9XHJcbiAgICBtb2RlbC5uYW1lID0gbW9kZWxJbnRlcmZhY2UubmFtZTtcclxuICAgIG1vZGVsLmRlZmF1bHQgPSBtb2RlbEludGVyZmFjZS5kZWZhdWx0O1xyXG4gICAgbW9kZWwuc3RhbmRhbG9uZSA9IG1vZGVsSW50ZXJmYWNlLnN0YW5kYWxvbmU7XHJcbiAgICBtb2RlbC5ncm91cCA9IG1vZGVsSW50ZXJmYWNlLmdyb3VwO1xyXG4gICAgbW9kZWwubmF2aWdhdG9yVHlwZSA9IG1vZGVsSW50ZXJmYWNlLm5hdmlnYXRvclR5cGU7XHJcbiAgICBpZiAoQXJyYXkuZnJvbShzaGFkb3dNYXBUeXBlc01hcC5lbnRyaWVzKCkpLmZpbmQoKGtleSwgdmFsdWUpID0+IGtleVsxXSA9PT0gbW9kZWxJbnRlcmZhY2Uuc2hhZG93TWFwVHlwZSkpIHtcclxuICAgICAgbW9kZWwuc2hhZG93TWFwVHlwZSA9IG1vZGVsSW50ZXJmYWNlLnNoYWRvd01hcFR5cGUgP1xyXG4gICAgICAgIEFycmF5LmZyb20oc2hhZG93TWFwVHlwZXNNYXAuZW50cmllcygpKS5maW5kKChrZXksIHZhbHVlKSA9PiBrZXlbMV0gPT09IG1vZGVsSW50ZXJmYWNlLnNoYWRvd01hcFR5cGUpWzBdIDpcclxuICAgICAgICBTaGFkb3dNYXBMb2NhbFR5cGUuUENGU29mdFNoYWRvd01hcDtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5mcm9tKG91dHB1dEVuY29kaW5nTWFwLmVudHJpZXMoKSkuZmluZCgoa2V5LCB2YWx1ZSkgPT4ga2V5WzFdID09PSBtb2RlbEludGVyZmFjZS5vdXRwdXRFbmNvZGluZykpIHtcclxuICAgICAgbW9kZWwub3V0cHV0RW5jb2RpbmcgPSBtb2RlbEludGVyZmFjZS5vdXRwdXRFbmNvZGluZyA/XHJcbiAgICAgICAgQXJyYXkuZnJvbShvdXRwdXRFbmNvZGluZ01hcC5lbnRyaWVzKCkpLmZpbmQoKGtleSwgdmFsdWUpID0+IGtleVsxXSA9PT0gbW9kZWxJbnRlcmZhY2Uub3V0cHV0RW5jb2RpbmcpWzBdIDpcclxuICAgICAgICBPdXRwdXRFbmNvZGluZy5TUkdCQ29sb3JTcGFjZTtcclxuICAgIH1cclxuICAgIG1vZGVsLnNoYWRvd1JhZGl1cyA9IG1vZGVsSW50ZXJmYWNlLnNoYWRvd1JhZGl1cztcclxuICAgIG1vZGVsLnRvbmVNYXBwaW5nRXhwb3N1cmUgPSBtb2RlbEludGVyZmFjZS50b25lTWFwcGluZ0V4cG9zdXJlID8gbW9kZWxJbnRlcmZhY2UudG9uZU1hcHBpbmdFeHBvc3VyZSA6IDE7XHJcbiAgICBtb2RlbC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyA9IG1vZGVsSW50ZXJmYWNlLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzID8gbW9kZWxJbnRlcmZhY2UucGh5c2ljYWxseUNvcnJlY3RMaWdodHMgOiBmYWxzZTtcclxuICAgIG1vZGVsSW50ZXJmYWNlLmxpZ2h0cy5mb3JFYWNoKChsaWdodDogTGlnaHRQcm9wZXJ0aWVzKSA9PiBtb2RlbC5saWdodHMucHVzaChMaWdodFByb3BlcnRpZXMuQ3JlYXRlTmV3KGxpZ2h0KSkpO1xyXG4gICAgcmV0dXJuIG1vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVVbmlxdWVJZCgpOiBzdHJpbmcge1xyXG4gICAgZnVuY3Rpb24gczQoKSB7XHJcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKVxyXG4gICAgICAgIC50b1N0cmluZygxNilcclxuICAgICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzNCgpICsgczQoKSArIHM0KCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -261,8 +261,8 @@ export class HomedecoratorConnectorAdapterService {
261
261
  return [];
262
262
  });
263
263
  }
264
- getJsonConfiguredArticles(goodId, goodType, quantity, showLoader = true, instanceId, configuratorStatistics) {
265
- return this.articleApi.getJsonArticleFlatTree(goodId, goodType, quantity, showLoader, instanceId, configuratorStatistics);
264
+ getJsonConfiguredArticles(goodId, goodType, quantity, externalSource = false, showLoader = true, instanceId, configuratorStatistics) {
265
+ return this.articleApi.getJsonArticleFlatTree(goodId, goodType, quantity, externalSource, showLoader, instanceId, configuratorStatistics);
266
266
  }
267
267
  // public getJsonMatchTableArticles(): Promise<void> {
268
268
  // return this.connector.getJsonMatchTableArticles();
@@ -344,9 +344,7 @@ export class HomedecoratorConnectorAdapterService {
344
344
  }
345
345
  store3DModelCDN(filename, fileContents) {
346
346
  return __awaiter(this, void 0, void 0, function* () {
347
- // convert ArrayBuffer to Int8Array so the middletier understand it
348
- const int8Array = new Int8Array(fileContents);
349
- const response = yield this.mainApi.uploadModelToCDN(filename, int8Array);
347
+ const response = yield this.mainApi.uploadModelToCDN(filename, fileContents);
350
348
  if (response && response.validationResult && response.validationResult.success) {
351
349
  return response.resultObject;
352
350
  }
@@ -357,7 +355,7 @@ export class HomedecoratorConnectorAdapterService {
357
355
  }
358
356
  getCatalogDefinitionsList() {
359
357
  return __awaiter(this, void 0, void 0, function* () {
360
- const response = yield this._articleApi.getCatalogDefinitions().catch(e => {
358
+ const response = yield this.articleApi.getCatalogDefinitions().catch(e => {
361
359
  return new DataServiceResponseData();
362
360
  });
363
361
  if (response && response.validationResult && response.validationResult.success) {
@@ -373,7 +371,7 @@ export class HomedecoratorConnectorAdapterService {
373
371
  if (!externalSourceId) {
374
372
  return null;
375
373
  }
376
- const response = yield this._articleApi.getExternalSource(externalSourceId);
374
+ const response = yield this.articleApi.getExternalSource(externalSourceId);
377
375
  if (response && response.validationResult && response.validationResult.success) {
378
376
  if (response.resultObject) {
379
377
  return this._boFactory.makeWithRawBackendData(ExternalSource, response.resultObject);
@@ -451,4 +449,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
451
449
  providedIn: 'root'
452
450
  }]
453
451
  }], ctorParameters: function () { return [{ type: i1.HomedecoratorAppEventService }]; } });
454
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBRTFFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUMvRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDdEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUd0RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHdkQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDbEYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDcEcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBRTNFLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBRTFHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHdEQUF3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QUksQ0FBQyxFQUFFO1lBQzlDLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7a0lBblpVLG9DQUFvQztzSUFBcEMsb0NBQW9DLGNBRm5DLE1BQU07NEZBRVAsb0NBQW9DO2tCQUhoRCxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge0Fuc3dlcn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXInO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb24nO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3F1ZXN0aW9uJztcclxuaW1wb3J0IHtBbnN3ZXJQcmljZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXItcHJpY2UnO1xyXG5pbXBvcnQge0FydGljbGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZSc7XHJcbmltcG9ydCB7RGVjb05vZGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlJztcclxuaW1wb3J0IHtTa2lwQnV0dG9uSW5mb30gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9za2lwLWJ1dHRvbi1pbmZvJztcclxuaW1wb3J0IHtDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvY29uZmlndXJhdG9yLXN0YXRpc3RpY3MtZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge09wdGlvbnN9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL29wdGlvbnMnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRvcn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaSc7XHJcbmltcG9ydCB7SW50ZXJuYWxQYXJhbX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS9pbnRlcm5hbC1wYXJhbS5lbnVtJztcclxuaW1wb3J0IHtRdWVzdGlvbkFuZEFuc3dlcnN9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvcXVlc3Rpb24tYW5kLWFuc3dlcnMnO1xyXG5pbXBvcnQge01haW5BcGl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpJztcclxuaW1wb3J0IHtEYXRhU2VydmljZVJlc3BvbnNlRGF0YX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvZGF0YS1zZXJ2aWNlLXJlc3BvbnNlLWRhdGEnO1xyXG5pbXBvcnQge0FydGljbGVzfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9hcnRpY2xlcyc7XHJcbmltcG9ydCB7QXJ0aWNsZVRleHR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS10ZXh0LmJvJztcclxuaW1wb3J0IHtCdXNpbmVzc09iamVjdEZhY3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3NlcnZpY2UvYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnknO1xyXG5pbXBvcnQge0ltYWdlVXRpbHN9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3V0aWxzL2ltYWdlLXV0aWxzJztcclxuaW1wb3J0IHtFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLWNhdGFsb2ctc3RhcnR1cC1pbmZvLXJlcXVlc3QnO1xyXG5pbXBvcnQge0V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mbyc7XHJcbmltcG9ydCB7TG9naW5SZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvbG9naW4tcmVzcG9uc2UnO1xyXG5pbXBvcnQge0NhdGFsb2dEZWZpbml0aW9ufSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9jYXRhbG9nLWRlZmluaXRpb24uYm8nO1xyXG5pbXBvcnQge0V4dGVybmFsU291cmNlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1zb3VyY2UuYm8nO1xyXG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZ1bGwtb2JqZWN0JztcclxuaW1wb3J0IHtBcnRpY2xlQ2F0ZWdvcnl9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1jYXRlZ29yeSc7XHJcbmltcG9ydCB7QXJ0aWNsZUZsYXR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZmxhdC5ibyc7XHJcbmltcG9ydCB7VXNlclJvbGVUeXBlfSBmcm9tICcuLi9lbnVtL3VzZXItcm9sZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxDb25uZWN0b3Ige1xyXG4gIHB1YmxpYyBsb2dpblJlc3BvbnNlOiBMb2dpblJlc3BvbnNlO1xyXG4gIHB1YmxpYyBjb25uZWN0b3I6IENvbm5lY3RvcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3Ige1xyXG4gIGNvbm5lY3Rvcj86IENvbmZpZ3VyYXRvcjtcclxuICBhcnRpY2xlQXBpPzogQXJ0aWNsZXM7XHJcbiAgbWFpbkFwaT86IE1haW5BcGk7XHJcbn1cclxuXHJcbi8vIFNvbGUgcmVzcG9uc2liaWxpdHkgaXMgc2ltcGx5IHRvIHdyYXAgYXJvdW5kIGEgY29saWpuLkNvbm5lY3RvciB0byBjcmVhdGUgYSBzdGFibGUgaW5uZXIgaW50ZXJmYWNlIHRvIHRoZSBsaWJyYXJ5IGluIGEgMToxIG1ldGhvZCB3YXkuXHJcbi8vIE9ubHkgdG8gYmUgdXNlZCBieSB0aGUgSU9uZUNvbnRyb2xsZXJTZXJ2aWNlLlxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2Uge1xyXG4gIHB1YmxpYyByZWFkb25seSBxdWVzdGlvblJlY2VpdmVkOiBTdWJqZWN0PFF1ZXN0aW9uPiA9IG5ldyBTdWJqZWN0PFF1ZXN0aW9uPigpO1xyXG4gIHB1YmxpYyByZWFkb25seSBzaG93TG9hZGVyOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvblJlc2V0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfcHVibGljYXRpb25Db2RlRm9yVXNlclJvbGU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPihbXHJcbiAgICBbVXNlclJvbGVUeXBlLkN1c3RvbWVyLCAxNl0sXHJcbiAgICBbVXNlclJvbGVUeXBlLkVtcGxveWVlLCAxXVxyXG4gIF0pO1xyXG5cclxuICBwdWJsaWMgZ2V0IGNvbm5lY3RvcigpOiBDb25maWd1cmF0b3Ige1xyXG4gICAgaWYgKCF0aGlzLmV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3JzW3RoaXMuZXh0ZXJuYWxTb3VyY2VdLmNvbm5lY3Rvci5jb25uZWN0b3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFydGljbGVBcGkoKTogQXJ0aWNsZXMge1xyXG4gICAgaWYgKCF0aGlzLmV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9hcnRpY2xlQXBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yc1t0aGlzLmV4dGVybmFsU291cmNlXS5jb25uZWN0b3IuYXJ0aWNsZUFwaTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWFpbkFwaSgpOiBNYWluQXBpIHtcclxuICAgIGlmICghdGhpcy5leHRlcm5hbFNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbWFpbkFwaTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RvcnNbdGhpcy5leHRlcm5hbFNvdXJjZV0uY29ubmVjdG9yLm1haW5BcGk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29ubmVjdG9yczogRXh0ZXJuYWxDb25uZWN0b3IgPSBuZXcgRXh0ZXJuYWxDb25uZWN0b3IoKTtcclxuICBwdWJsaWMgZXh0ZXJuYWxTb3VyY2U6IHN0cmluZztcclxuICBwdWJsaWMgbG9naW5SZXNwb25zZTogTG9naW5SZXNwb25zZTtcclxuICBwcml2YXRlIF9jb25uZWN0b3I/OiBDb25maWd1cmF0b3I7XHJcbiAgcHJpdmF0ZSBfYXJ0aWNsZUFwaTogQXJ0aWNsZXM7XHJcbiAgcHJpdmF0ZSBfbWFpbkFwaTogTWFpbkFwaTtcclxuICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0Q29ubmVjdG9yKG9wdGlvbnM6IE9wdGlvbnMsIGV4dGVybmFsU291cmNlPzogc3RyaW5nLCBmb3JjZVJlbG9hZD86IGJvb2xlYW4sIGV4dGVybmFsU291cmNlSWQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChleHRlcm5hbFNvdXJjZSA9PT0gdW5kZWZpbmVkIHx8IGV4dGVybmFsU291cmNlID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IHJlbmV3Q29ubmVjdG9yOiBib29sZWFuID0gKHRoaXMuX2Nvbm5lY3RvciA/IHRoaXMuX2Nvbm5lY3Rvci51cmwgIT09IG9wdGlvbnMudXJsIDogZmFsc2UpIHx8IGZvcmNlUmVsb2FkO1xyXG4gICAgICBpZiAoIXRoaXMuX2Nvbm5lY3RvciB8fCByZW5ld0Nvbm5lY3Rvcikge1xyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3RvciA9IG5ldyBDb25maWd1cmF0b3Iob3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5sb2dpblJlc3BvbnNlID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmNvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLl9jb25uZWN0b3Iuc2hvd0xvYWRlci5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5zaG93TG9hZGVyLm5leHQodmFsdWUpKTtcclxuICAgICAgICB0aGlzLl9jb25uZWN0b3IuY29ubmVjdGlvblJlc2V0SW5hY3Rpdml0eS5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5jb25uZWN0aW9uUmVzZXQubmV4dCgpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuX2FydGljbGVBcGkgfHwgcmVuZXdDb25uZWN0b3IpIHtcclxuICAgICAgICB0aGlzLl9hcnRpY2xlQXBpID0gbmV3IEFydGljbGVzKG9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fbWFpbkFwaSB8fCByZW5ld0Nvbm5lY3Rvcikge1xyXG4gICAgICAgIHRoaXMuX21haW5BcGkgPSBuZXcgTWFpbkFwaShvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmV4dGVybmFsU291cmNlID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmNvbm5lY3RvcnMuaGFzT3duUHJvcGVydHkoZXh0ZXJuYWxTb3VyY2UpKSB7XHJcbiAgICAgICAgaWYgKGV4dGVybmFsU291cmNlSWQgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IGV4dGVybmFsU291cmNlRGF0YTogRXh0ZXJuYWxTb3VyY2UgPSBhd2FpdCB0aGlzLmdldEV4dGVybmFsU291cmNlKGV4dGVybmFsU291cmNlSWQpO1xyXG4gICAgICAgICAgaWYgKGV4dGVybmFsU291cmNlRGF0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZXh0ZXJuYWxTb3VyY2VEYXRhLnBhc3N3b3JkICE9PSB1bmRlZmluZWQgJiYgZXh0ZXJuYWxTb3VyY2VEYXRhLnVzZXJuYW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICBvcHRpb25zLnBhc3N3b3JkID0gZXh0ZXJuYWxTb3VyY2VEYXRhLnBhc3N3b3JkO1xyXG4gICAgICAgICAgICAgIG9wdGlvbnMudXNlcm5hbWUgPSBleHRlcm5hbFNvdXJjZURhdGEudXNlcm5hbWU7XHJcbiAgICAgICAgICAgICAgb3B0aW9ucy51c2VMb2dpbkVuY3J5cHRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsTWFpbkFwaTogTWFpbkFwaSA9IG5ldyBNYWluQXBpKG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsVmVyc2lvbjogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCBleHRlcm5hbE1haW5BcGkuZ2V0UHVibGljUGFyYW1zKCtvcHRpb25zLnNjaGVtYSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChleHRlcm5hbFZlcnNpb24gJiYgZXh0ZXJuYWxWZXJzaW9uWydjYXRhbG9nU2V0dGluZ3MnXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjb25zdCBjYXRhbG9nU2V0dGluZ3MgPSBKU09OLnBhcnNlKGV4dGVybmFsVmVyc2lvblsnY2F0YWxvZ1NldHRpbmdzJ10pO1xyXG4gICAgICAgICAgb3B0aW9ucy52ZXJzaW9uID0gY2F0YWxvZ1NldHRpbmdzLnZlcnNpb247XHJcbiAgICAgICAgICBjb25zdCBleHRlcm5hbENvbmZpZ3VyYXRvcjogQ29uZmlndXJhdG9yID0gbmV3IENvbmZpZ3VyYXRvcihvcHRpb25zKTtcclxuICAgICAgICAgIGNvbnN0IGxvZ2luUmVzcG9uc2U6IExvZ2luUmVzcG9uc2UgPSBhd2FpdCBleHRlcm5hbENvbmZpZ3VyYXRvci5jb25uZWN0KCkuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGxvZ2luUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxBcnRpY2xlQXBpOiBBcnRpY2xlcyA9IG5ldyBBcnRpY2xlcyhvcHRpb25zKTtcclxuICAgICAgICAgICAgZXh0ZXJuYWxDb25maWd1cmF0b3Iuc2hvd0xvYWRlci5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5zaG93TG9hZGVyLm5leHQodmFsdWUpKTtcclxuICAgICAgICAgICAgZXh0ZXJuYWxDb25maWd1cmF0b3IuY29ubmVjdGlvblJlc2V0SW5hY3Rpdml0eS5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5jb25uZWN0aW9uUmVzZXQubmV4dCgpKTtcclxuICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25uZWN0b3I6IEV4dGVybmFsQ29ubmVjdG9yID0gbmV3IEV4dGVybmFsQ29ubmVjdG9yKCk7XHJcbiAgICAgICAgICAgIGV4dGVybmFsQ29ubmVjdG9yLmxvZ2luUmVzcG9uc2UgPSBsb2dpblJlc3BvbnNlO1xyXG4gICAgICAgICAgICBleHRlcm5hbENvbm5lY3Rvci5jb25uZWN0b3IgPSB7Y29ubmVjdG9yOiBleHRlcm5hbENvbmZpZ3VyYXRvciwgbWFpbkFwaTogZXh0ZXJuYWxNYWluQXBpLCBhcnRpY2xlQXBpOiBleHRlcm5hbEFydGljbGVBcGl9O1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RvcnNbZXh0ZXJuYWxTb3VyY2VdID0gZXh0ZXJuYWxDb25uZWN0b3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxTb3VyY2UgPSBleHRlcm5hbFNvdXJjZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dPdXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rvci5sb2dPdXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQdWJsaWNhdGlvbkNvZGVCYXNlZE9uTG9naW4oKTogbnVtYmVyIHtcclxuICAgIGxldCByb2w6IHN0cmluZztcclxuICAgIGlmICh0aGlzLmV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbm5lY3RvcnMuaGFzT3duUHJvcGVydHkodGhpcy5leHRlcm5hbFNvdXJjZSkpIHtcclxuICAgICAgICBjb25zdCBleHRlcm5hbENvbm5lY3RvciA9IHRoaXMuY29ubmVjdG9yc1t0aGlzLmV4dGVybmFsU291cmNlXTtcclxuICAgICAgICBpZiAoZXh0ZXJuYWxDb25uZWN0b3IgJiYgZXh0ZXJuYWxDb25uZWN0b3IubG9naW5SZXNwb25zZSkge1xyXG4gICAgICAgICAgcm9sID0gZXh0ZXJuYWxDb25uZWN0b3IubG9naW5SZXNwb25zZS5yb2w7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5sb2dpblJlc3BvbnNlKSB7XHJcbiAgICAgICAgcm9sID0gdGhpcy5sb2dpblJlc3BvbnNlLnJvbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJvbCkge1xyXG4gICAgICBjb25zdCBwdWJDb2RlOiBudW1iZXIgPSB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGVGb3JSb2xlKHJvbCk7XHJcbiAgICAgIGlmIChwdWJDb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHB1YkNvZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFdlYlZpZXdTdGFydHVwSW5mbyhyZXF1ZXN0OiBFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3QpOiBQcm9taXNlPEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvPiB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0V2Vidmlld1N0YXJ0dXBJbmZvKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mbywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZElkRnJvbUFydGljbGVOcihza3U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0R29vZElkRnJvbUFydGljbGVOcihza3UpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0Tm9kZUluc3RhbmNlKGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5pbml0Tm9kZUluc3RhbmNlKGdvb2RJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlQ29ubmVjdGlvbihpbnN0YW5jZUlkOiBzdHJpbmcsIG9sZENvbm5lY3Rpb246IHN0cmluZywgbmV3Q29ubmVjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNoYW5nZUNvbm5lY3Rpb24oaW5zdGFuY2VJZCwgb2xkQ29ubmVjdGlvbiwgbmV3Q29ubmVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29weUluc3RhbmNlKGluc3RhbmNlSWQ6IHN0cmluZywgc2hvdWxkU2F2ZUN1cnJlbnRJbnN0YW5jZUlkOiBib29sZWFuKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNvcHlJbnN0YW5jZShpbnN0YW5jZUlkLCBzaG91bGRTYXZlQ3VycmVudEluc3RhbmNlSWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNhdmVDb25maWd1cmF0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGF3YWl0IHRoaXMuY29ubmVjdG9yLnNhdmVDb25maWd1cmF0aW9ucygpLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgLy8gc2F2ZSBleHRlcm5hbCBzb3VyY2VzXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbm5lY3RvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuY29ubmVjdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yID0gdGhpcy5jb25uZWN0b3JzW2tleV0uY29ubmVjdG9yLmNvbm5lY3RvcjtcclxuICAgICAgICBhd2FpdCBjb25uZWN0b3Iuc2F2ZUNvbmZpZ3VyYXRpb25zKCkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBAcmV0dXJucyBUaGUgaW5pdGlhbCBhcnRpY2xlXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGUoc2t1OiBzdHJpbmcsIGJyYW5jaDogc3RyaW5nKTogUHJvbWlzZTxBcnRpY2xlPiB7XHJcbiAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuZ2V0R29vZElkRnJvbUFydGljbGVOcihza3UpO1xyXG4gICAgaWYgKGdvb2RJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBcnRpY2xlUXVpY2tTZWwoZ29vZElkLCBicmFuY2gpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZVF1aWNrU2VsKGdvb2RJZDogbnVtYmVyLCBicmFuY2g6IHN0cmluZyk6IFByb21pc2U8QXJ0aWNsZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQXBpLmdldEFydGljbGVRdWlja1NlbChnb29kSWQsIGJyYW5jaCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGUsIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5vQXJ0aWNsZVswXSkgYXMgQXJ0aWNsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGxvYWRTZWxlY3Rpb25zKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5jb25uZWN0b3IuZ2V0U2VsZWN0aW9ucygpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHVibGljIGdldFF1ZXN0aW9uQW5kQW5zd2VycygpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuY29ubmVjdG9yLmdldFF1ZXN0aW9uQW5kQW5zd2VycygpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGdldFF1ZXN0aW9uQW5kQW5zd2Vyc0FzeW5jKCk6IFByb21pc2U8UXVlc3Rpb25BbmRBbnN3ZXJzPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VsZWN0aW9uc0FzeW5jKCk6IFByb21pc2U8U2VsZWN0aW9uW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFNlbGVjdGlvbnMoKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoU2VsZWN0aW9uLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKSBhcyBTZWxlY3Rpb25bXTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZWNvc0FzeW5jKCk6IFByb21pc2U8RGVjb05vZGVbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVjb3MoKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoRGVjb05vZGUsIHJlc3BvbnNlLnJlc3VsdE9iamVjdHMpIGFzIERlY29Ob2RlW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QW5zd2VyUHJpY2VzKCk6IFByb21pc2U8QW5zd2VyUHJpY2VbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0QW5zd2Vyc1ByaWNlcygpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShBbnN3ZXJQcmljZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cykgYXMgQW5zd2VyUHJpY2VbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRKc29uQ29uZmlndXJlZEFydGljbGVzKGdvb2RJZDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RUeXBlOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUlkPzogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3M/OiBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXJ0aWNsZUFwaS5nZXRKc29uQXJ0aWNsZUZsYXRUcmVlKGdvb2RJZCwgZ29vZFR5cGUsIHF1YW50aXR5LCBzaG93TG9hZGVyLCBpbnN0YW5jZUlkLCBjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBnZXRKc29uTWF0Y2hUYWJsZUFydGljbGVzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEpzb25NYXRjaFRhYmxlQXJ0aWNsZXMoKTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRJbnN0YW5jZVRvQ29uZmlndXJlKGlkOiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICBpZiAoaWQgIT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnNldEluc3RhbmNlVG9Db25maWd1cmUoaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNlbGVjdEFuc3dlcihhbnN3ZXI6IEFuc3dlciwgdXNlcklucHV0Pzogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnNlbGVjdEFuc3dlcihhbnN3ZXIsIGZhbHNlLCB1c2VySW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEFuc3dlcihnZXRBbnN3ZXJzQW5kUXVlc3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNhbmNlbEFuc3dlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFNlbGVjdGlvbihcclxuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uLCBmb3JjZUJhY2tUb05vZGU/OiBib29sZWFuLCBhZnRlcj86IGJvb2xlYW4sIGNvbm5lY3Rvcj86IHN0cmluZyk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uLCBmYWxzZSwgZm9yY2VCYWNrVG9Ob2RlLCBhZnRlciwgY29ubmVjdG9yKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVwbGFjZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbik6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5yZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW1hZ2VGb3JBbnN3ZXJPclNlbGVjdGlvbihcclxuICAgIGFuc3dlck9yU2VsZWN0aW9uOiBBbnN3ZXIgfCBTZWxlY3Rpb24sIHB1YmxpY2F0aW9uOiBudW1iZXIsIHRodW1iTmFpbDogYm9vbGVhbiA9IHRydWUsIHNob3dMb2FkZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRTaW5nbGVJbWFnZShhbnN3ZXJPclNlbGVjdGlvbi5ub2RlSWQsIHB1YmxpY2F0aW9uLCB0cnVlLCB0aHVtYk5haWwpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICBpZiAocmVzcG9uc2UucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSBudWxsICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gJycpIHtcclxuICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXRGaXhlZEltYWdlRmlsZXBhdGhVcmwocmVzcG9uc2UucmVzdWx0T2JqZWN0LmZpbGVQYXRoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXREb2NCb2R5V2l0aE1pbWVUeXBlRGVmaW5pdGlvbihyZXNwb25zZS5yZXN1bHRPYmplY3QuZmlsZU5hbWUsXHJcbiAgICAgICAgICB0aHVtYk5haWwgPyByZXNwb25zZS5yZXN1bHRPYmplY3QudGh1bWJuYWlsQm9keSA6IHJlc3BvbnNlLnJlc3VsdE9iamVjdC5kb2N1bWVudEJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2tpcEJ1dHRvbkltYWdlQW5kVGV4dChnb29kSWQ/OiBudW1iZXIpOiBQcm9taXNlPFNraXBCdXR0b25JbmZvPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTa2lwQnV0dG9uSW1hZ2VBbmRUZXh0KGdvb2RJZCwgZmFsc2UpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShTa2lwQnV0dG9uSW5mbywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBTa2lwQnV0dG9uSW5mbztcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE1vb2RJbWFnZUZvckFuc3dlclNlbGVjdGlvbihhbnN3ZXJPclNlbGVjdGlvbjogQW5zd2VyIHwgU2VsZWN0aW9uLCB0aHVtYk5haWw6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEltYWdlRm9yQW5zd2VyT3JTZWxlY3Rpb24oYW5zd2VyT3JTZWxlY3Rpb24sIDMyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBbnN3ZXJJbmZvKGFuc3dlcjogQW5zd2VyKTogUHJvbWlzZTxBcnRpY2xlVGV4dFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRBbnN3ZXJUZXh0cyhhbnN3ZXIubm9kZUlkLCBmYWxzZSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEFydGljbGVUZXh0LCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIEFydGljbGVUZXh0W107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW50ZXJuYWxQYXJhbWV0ZXIocGFyYW1ldGVyOiBJbnRlcm5hbFBhcmFtKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkFwaS5nZXRJbnRlcm5hbFBhcmFtZXRlclZhbHVlKHBhcmFtZXRlcik7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdG9yZTNETW9kZWxDRE4oZmlsZW5hbWU6IHN0cmluZywgZmlsZUNvbnRlbnRzOiBBcnJheUJ1ZmZlcik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAvLyBjb252ZXJ0IEFycmF5QnVmZmVyIHRvIEludDhBcnJheSBzbyB0aGUgbWlkZGxldGllciB1bmRlcnN0YW5kIGl0XHJcbiAgICBjb25zdCBpbnQ4QXJyYXk6IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoZmlsZUNvbnRlbnRzKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkFwaS51cGxvYWRNb2RlbFRvQ0ROKGZpbGVuYW1lLCBpbnQ4QXJyYXkpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q2F0YWxvZ0RlZmluaXRpb25zTGlzdCgpOiBQcm9taXNlPENhdGFsb2dEZWZpbml0aW9uW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2FydGljbGVBcGkuZ2V0Q2F0YWxvZ0RlZmluaXRpb25zKCkuY2F0Y2goZSA9PiB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0YVNlcnZpY2VSZXNwb25zZURhdGEoKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShDYXRhbG9nRGVmaW5pdGlvbiwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cykgYXMgQ2F0YWxvZ0RlZmluaXRpb25bXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEV4dGVybmFsU291cmNlKGV4dGVybmFsU291cmNlSWQ6IG51bWJlcik6IFByb21pc2U8RXh0ZXJuYWxTb3VyY2U+IHtcclxuICAgIGlmICghZXh0ZXJuYWxTb3VyY2VJZCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2FydGljbGVBcGkuZ2V0RXh0ZXJuYWxTb3VyY2UoZXh0ZXJuYWxTb3VyY2VJZCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShFeHRlcm5hbFNvdXJjZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBFeHRlcm5hbFNvdXJjZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihyZXNwb25zZSAmJiByZXNwb25zZS5tZXNzYWdlID8gcmVzcG9uc2UubWVzc2FnZSA6ICdFcnJvciByZXRyaWV2aW5nIGV4dGVybmFsIHNvdXJjZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEFydGljbGVGdWxsT2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVDYXRlZ29yaWVzKHB1YmxpY2F0aW9uQ29kZTogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlQ2F0ZWdvcnlbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRBcnRpY2xlQ2F0ZWdvcmllcyhwdWJsaWNhdGlvbkNvZGUpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEFydGljbGVDYXRlZ29yeSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgQXJ0aWNsZUNhdGVnb3J5W107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlRmxhdChza3U6IHN0cmluZyk6IFByb21pc2U8QXJ0aWNsZUZsYXQ+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0QXJ0aWNsZUZsYXQoc2t1KTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBcnRpY2xlRmxhdCwgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBBcnRpY2xlRmxhdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBhc3luYyBhZGRUb0NhcnQoZ29vZElkOiBudW1iZXIsIGdvb2RUeXBlOiBHb29kVHlwZSwgaW5zdGFuY2VJZDogbnVtYmVyLCBzZXNzaW9uSWQ6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciA9IDEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAvLyAgIGNvbnN0IGpzb246IHN0cmluZyA9IGF3YWl0IHRoaXMuX2dldEpTT05Gcm9tQXJ0aWNsZU9iamVjdChnb29kSWQsIGdvb2RUeXBlLCBpbnN0YW5jZUlkLCBzZXNzaW9uSWQsIHF1YW50aXR5KTtcclxuICAvLyAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hZGRUb0NhcnQubmV4dCh7YXJ0aWNsZToganNvbiwgcXVhbnRpdHk6IDF9KTtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyBwcml2YXRlIGFzeW5jIF9nZXRKU09ORnJvbUFydGljbGVPYmplY3QoZ29vZElkOiBudW1iZXIsIGdvb2RUeXBlOiBHb29kVHlwZSwgaW5zdGFuY2VJZDogbnVtYmVyLCBzZXNzaW9uSWQ6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciA9IDEpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gIC8vICAgY29uc3QgY29uZmlndXJhdG9yU3RhdGlzdGljcyA9IG5ldyBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnQoKTtcclxuICAvLyAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MudXNlclR5cGUgPSAnSG9tZWRlY29yYXRvcic7XHJcbiAgLy8gICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLnRyYW5zYWN0aW9uVHlwZSA9ICdTYWxlcyc7XHJcbiAgLy8gICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLmFjdGlvbkRvbWFpbiA9ICdIb21lZGVjb3JhdG9yJztcclxuICAvLyAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3Muc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xyXG4gIC8vICAgY29uZmlndXJhdG9yU3RhdGlzdGljcy53ZWJIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgLy8gICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLmJ1bmRsZUhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAvLyAgIHJldHVybiBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0SnNvbkFydGljbGVGbGF0VHJlZShnb29kSWQsIGdvb2RUeXBlLCBxdWFudGl0eSwgdHJ1ZSwgaW5zdGFuY2VJZCwgY29uZmlndXJhdG9yU3RhdGlzdGljcyk7XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIF9nZXRQdWJsaWNhdGlvbkNvZGVGb3JSb2xlKHJvbGU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5fcHVibGljYXRpb25Db2RlRm9yVXNlclJvbGUuaGFzKHJvbGUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9wdWJsaWNhdGlvbkNvZGVGb3JVc2VyUm9sZS5nZXQocm9sZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIl19
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBRTFFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUMvRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDdEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUd0RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHdkQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDbEYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDcEcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBRTNFLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBRTFHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHdEQUF3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QUEyQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7a0lBbFpVLG9DQUFvQztzSUFBcEMsb0NBQW9DLGNBRm5DLE1BQU07NEZBRVAsb0NBQW9DO2tCQUhoRCxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge0Fuc3dlcn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXInO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb24nO1xyXG5pbXBvcnQge1F1ZXN0aW9ufSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3F1ZXN0aW9uJztcclxuaW1wb3J0IHtBbnN3ZXJQcmljZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXItcHJpY2UnO1xyXG5pbXBvcnQge0FydGljbGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZSc7XHJcbmltcG9ydCB7RGVjb05vZGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlJztcclxuaW1wb3J0IHtTa2lwQnV0dG9uSW5mb30gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9za2lwLWJ1dHRvbi1pbmZvJztcclxuaW1wb3J0IHtDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvY29uZmlndXJhdG9yLXN0YXRpc3RpY3MtZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge09wdGlvbnN9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL29wdGlvbnMnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRvcn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaSc7XHJcbmltcG9ydCB7SW50ZXJuYWxQYXJhbX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS9pbnRlcm5hbC1wYXJhbS5lbnVtJztcclxuaW1wb3J0IHtRdWVzdGlvbkFuZEFuc3dlcnN9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvcXVlc3Rpb24tYW5kLWFuc3dlcnMnO1xyXG5pbXBvcnQge01haW5BcGl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpJztcclxuaW1wb3J0IHtEYXRhU2VydmljZVJlc3BvbnNlRGF0YX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvZGF0YS1zZXJ2aWNlLXJlc3BvbnNlLWRhdGEnO1xyXG5pbXBvcnQge0FydGljbGVzfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9hcnRpY2xlcyc7XHJcbmltcG9ydCB7QXJ0aWNsZVRleHR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS10ZXh0LmJvJztcclxuaW1wb3J0IHtCdXNpbmVzc09iamVjdEZhY3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3NlcnZpY2UvYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnknO1xyXG5pbXBvcnQge0ltYWdlVXRpbHN9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3V0aWxzL2ltYWdlLXV0aWxzJztcclxuaW1wb3J0IHtFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLWNhdGFsb2ctc3RhcnR1cC1pbmZvLXJlcXVlc3QnO1xyXG5pbXBvcnQge0V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mbyc7XHJcbmltcG9ydCB7TG9naW5SZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvbG9naW4tcmVzcG9uc2UnO1xyXG5pbXBvcnQge0NhdGFsb2dEZWZpbml0aW9ufSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9jYXRhbG9nLWRlZmluaXRpb24uYm8nO1xyXG5pbXBvcnQge0V4dGVybmFsU291cmNlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1zb3VyY2UuYm8nO1xyXG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZ1bGwtb2JqZWN0JztcclxuaW1wb3J0IHtBcnRpY2xlQ2F0ZWdvcnl9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1jYXRlZ29yeSc7XHJcbmltcG9ydCB7QXJ0aWNsZUZsYXR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZmxhdC5ibyc7XHJcbmltcG9ydCB7VXNlclJvbGVUeXBlfSBmcm9tICcuLi9lbnVtL3VzZXItcm9sZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxDb25uZWN0b3Ige1xyXG4gIHB1YmxpYyBsb2dpblJlc3BvbnNlOiBMb2dpblJlc3BvbnNlO1xyXG4gIHB1YmxpYyBjb25uZWN0b3I6IENvbm5lY3RvcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3Ige1xyXG4gIGNvbm5lY3Rvcj86IENvbmZpZ3VyYXRvcjtcclxuICBhcnRpY2xlQXBpPzogQXJ0aWNsZXM7XHJcbiAgbWFpbkFwaT86IE1haW5BcGk7XHJcbn1cclxuXHJcbi8vIFNvbGUgcmVzcG9uc2liaWxpdHkgaXMgc2ltcGx5IHRvIHdyYXAgYXJvdW5kIGEgY29saWpuLkNvbm5lY3RvciB0byBjcmVhdGUgYSBzdGFibGUgaW5uZXIgaW50ZXJmYWNlIHRvIHRoZSBsaWJyYXJ5IGluIGEgMToxIG1ldGhvZCB3YXkuXHJcbi8vIE9ubHkgdG8gYmUgdXNlZCBieSB0aGUgSU9uZUNvbnRyb2xsZXJTZXJ2aWNlLlxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2Uge1xyXG4gIHB1YmxpYyByZWFkb25seSBxdWVzdGlvblJlY2VpdmVkOiBTdWJqZWN0PFF1ZXN0aW9uPiA9IG5ldyBTdWJqZWN0PFF1ZXN0aW9uPigpO1xyXG4gIHB1YmxpYyByZWFkb25seSBzaG93TG9hZGVyOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvblJlc2V0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfcHVibGljYXRpb25Db2RlRm9yVXNlclJvbGU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPihbXHJcbiAgICBbVXNlclJvbGVUeXBlLkN1c3RvbWVyLCAxNl0sXHJcbiAgICBbVXNlclJvbGVUeXBlLkVtcGxveWVlLCAxXVxyXG4gIF0pO1xyXG5cclxuICBwdWJsaWMgZ2V0IGNvbm5lY3RvcigpOiBDb25maWd1cmF0b3Ige1xyXG4gICAgaWYgKCF0aGlzLmV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3JzW3RoaXMuZXh0ZXJuYWxTb3VyY2VdLmNvbm5lY3Rvci5jb25uZWN0b3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFydGljbGVBcGkoKTogQXJ0aWNsZXMge1xyXG4gICAgaWYgKCF0aGlzLmV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9hcnRpY2xlQXBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yc1t0aGlzLmV4dGVybmFsU291cmNlXS5jb25uZWN0b3IuYXJ0aWNsZUFwaTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWFpbkFwaSgpOiBNYWluQXBpIHtcclxuICAgIGlmICghdGhpcy5leHRlcm5hbFNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbWFpbkFwaTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RvcnNbdGhpcy5leHRlcm5hbFNvdXJjZV0uY29ubmVjdG9yLm1haW5BcGk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29ubmVjdG9yczogRXh0ZXJuYWxDb25uZWN0b3IgPSBuZXcgRXh0ZXJuYWxDb25uZWN0b3IoKTtcclxuICBwdWJsaWMgZXh0ZXJuYWxTb3VyY2U6IHN0cmluZztcclxuICBwdWJsaWMgbG9naW5SZXNwb25zZTogTG9naW5SZXNwb25zZTtcclxuICBwcml2YXRlIF9jb25uZWN0b3I/OiBDb25maWd1cmF0b3I7XHJcbiAgcHJpdmF0ZSBfYXJ0aWNsZUFwaTogQXJ0aWNsZXM7XHJcbiAgcHJpdmF0ZSBfbWFpbkFwaTogTWFpbkFwaTtcclxuICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0Q29ubmVjdG9yKG9wdGlvbnM6IE9wdGlvbnMsIGV4dGVybmFsU291cmNlPzogc3RyaW5nLCBmb3JjZVJlbG9hZD86IGJvb2xlYW4sIGV4dGVybmFsU291cmNlSWQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChleHRlcm5hbFNvdXJjZSA9PT0gdW5kZWZpbmVkIHx8IGV4dGVybmFsU291cmNlID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IHJlbmV3Q29ubmVjdG9yOiBib29sZWFuID0gKHRoaXMuX2Nvbm5lY3RvciA/IHRoaXMuX2Nvbm5lY3Rvci51cmwgIT09IG9wdGlvbnMudXJsIDogZmFsc2UpIHx8IGZvcmNlUmVsb2FkO1xyXG4gICAgICBpZiAoIXRoaXMuX2Nvbm5lY3RvciB8fCByZW5ld0Nvbm5lY3Rvcikge1xyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3RvciA9IG5ldyBDb25maWd1cmF0b3Iob3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5sb2dpblJlc3BvbnNlID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmNvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLl9jb25uZWN0b3Iuc2hvd0xvYWRlci5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5zaG93TG9hZGVyLm5leHQodmFsdWUpKTtcclxuICAgICAgICB0aGlzLl9jb25uZWN0b3IuY29ubmVjdGlvblJlc2V0SW5hY3Rpdml0eS5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5jb25uZWN0aW9uUmVzZXQubmV4dCgpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuX2FydGljbGVBcGkgfHwgcmVuZXdDb25uZWN0b3IpIHtcclxuICAgICAgICB0aGlzLl9hcnRpY2xlQXBpID0gbmV3IEFydGljbGVzKG9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fbWFpbkFwaSB8fCByZW5ld0Nvbm5lY3Rvcikge1xyXG4gICAgICAgIHRoaXMuX21haW5BcGkgPSBuZXcgTWFpbkFwaShvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmV4dGVybmFsU291cmNlID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmNvbm5lY3RvcnMuaGFzT3duUHJvcGVydHkoZXh0ZXJuYWxTb3VyY2UpKSB7XHJcbiAgICAgICAgaWYgKGV4dGVybmFsU291cmNlSWQgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IGV4dGVybmFsU291cmNlRGF0YTogRXh0ZXJuYWxTb3VyY2UgPSBhd2FpdCB0aGlzLmdldEV4dGVybmFsU291cmNlKGV4dGVybmFsU291cmNlSWQpO1xyXG4gICAgICAgICAgaWYgKGV4dGVybmFsU291cmNlRGF0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZXh0ZXJuYWxTb3VyY2VEYXRhLnBhc3N3b3JkICE9PSB1bmRlZmluZWQgJiYgZXh0ZXJuYWxTb3VyY2VEYXRhLnVzZXJuYW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICBvcHRpb25zLnBhc3N3b3JkID0gZXh0ZXJuYWxTb3VyY2VEYXRhLnBhc3N3b3JkO1xyXG4gICAgICAgICAgICAgIG9wdGlvbnMudXNlcm5hbWUgPSBleHRlcm5hbFNvdXJjZURhdGEudXNlcm5hbWU7XHJcbiAgICAgICAgICAgICAgb3B0aW9ucy51c2VMb2dpbkVuY3J5cHRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsTWFpbkFwaTogTWFpbkFwaSA9IG5ldyBNYWluQXBpKG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsVmVyc2lvbjogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCBleHRlcm5hbE1haW5BcGkuZ2V0UHVibGljUGFyYW1zKCtvcHRpb25zLnNjaGVtYSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChleHRlcm5hbFZlcnNpb24gJiYgZXh0ZXJuYWxWZXJzaW9uWydjYXRhbG9nU2V0dGluZ3MnXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjb25zdCBjYXRhbG9nU2V0dGluZ3MgPSBKU09OLnBhcnNlKGV4dGVybmFsVmVyc2lvblsnY2F0YWxvZ1NldHRpbmdzJ10pO1xyXG4gICAgICAgICAgb3B0aW9ucy52ZXJzaW9uID0gY2F0YWxvZ1NldHRpbmdzLnZlcnNpb247XHJcbiAgICAgICAgICBjb25zdCBleHRlcm5hbENvbmZpZ3VyYXRvcjogQ29uZmlndXJhdG9yID0gbmV3IENvbmZpZ3VyYXRvcihvcHRpb25zKTtcclxuICAgICAgICAgIGNvbnN0IGxvZ2luUmVzcG9uc2U6IExvZ2luUmVzcG9uc2UgPSBhd2FpdCBleHRlcm5hbENvbmZpZ3VyYXRvci5jb25uZWN0KCkuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGxvZ2luUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxBcnRpY2xlQXBpOiBBcnRpY2xlcyA9IG5ldyBBcnRpY2xlcyhvcHRpb25zKTtcclxuICAgICAgICAgICAgZXh0ZXJuYWxDb25maWd1cmF0b3Iuc2hvd0xvYWRlci5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5zaG93TG9hZGVyLm5leHQodmFsdWUpKTtcclxuICAgICAgICAgICAgZXh0ZXJuYWxDb25maWd1cmF0b3IuY29ubmVjdGlvblJlc2V0SW5hY3Rpdml0eS5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5jb25uZWN0aW9uUmVzZXQubmV4dCgpKTtcclxuICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25uZWN0b3I6IEV4dGVybmFsQ29ubmVjdG9yID0gbmV3IEV4dGVybmFsQ29ubmVjdG9yKCk7XHJcbiAgICAgICAgICAgIGV4dGVybmFsQ29ubmVjdG9yLmxvZ2luUmVzcG9uc2UgPSBsb2dpblJlc3BvbnNlO1xyXG4gICAgICAgICAgICBleHRlcm5hbENvbm5lY3Rvci5jb25uZWN0b3IgPSB7Y29ubmVjdG9yOiBleHRlcm5hbENvbmZpZ3VyYXRvciwgbWFpbkFwaTogZXh0ZXJuYWxNYWluQXBpLCBhcnRpY2xlQXBpOiBleHRlcm5hbEFydGljbGVBcGl9O1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RvcnNbZXh0ZXJuYWxTb3VyY2VdID0gZXh0ZXJuYWxDb25uZWN0b3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxTb3VyY2UgPSBleHRlcm5hbFNvdXJjZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dPdXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rvci5sb2dPdXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQdWJsaWNhdGlvbkNvZGVCYXNlZE9uTG9naW4oKTogbnVtYmVyIHtcclxuICAgIGxldCByb2w6IHN0cmluZztcclxuICAgIGlmICh0aGlzLmV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbm5lY3RvcnMuaGFzT3duUHJvcGVydHkodGhpcy5leHRlcm5hbFNvdXJjZSkpIHtcclxuICAgICAgICBjb25zdCBleHRlcm5hbENvbm5lY3RvciA9IHRoaXMuY29ubmVjdG9yc1t0aGlzLmV4dGVybmFsU291cmNlXTtcclxuICAgICAgICBpZiAoZXh0ZXJuYWxDb25uZWN0b3IgJiYgZXh0ZXJuYWxDb25uZWN0b3IubG9naW5SZXNwb25zZSkge1xyXG4gICAgICAgICAgcm9sID0gZXh0ZXJuYWxDb25uZWN0b3IubG9naW5SZXNwb25zZS5yb2w7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5sb2dpblJlc3BvbnNlKSB7XHJcbiAgICAgICAgcm9sID0gdGhpcy5sb2dpblJlc3BvbnNlLnJvbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJvbCkge1xyXG4gICAgICBjb25zdCBwdWJDb2RlOiBudW1iZXIgPSB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGVGb3JSb2xlKHJvbCk7XHJcbiAgICAgIGlmIChwdWJDb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHB1YkNvZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFdlYlZpZXdTdGFydHVwSW5mbyhyZXF1ZXN0OiBFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mb1JlcXVlc3QpOiBQcm9taXNlPEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvPiB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0V2Vidmlld1N0YXJ0dXBJbmZvKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mbywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZElkRnJvbUFydGljbGVOcihza3U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0R29vZElkRnJvbUFydGljbGVOcihza3UpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0Tm9kZUluc3RhbmNlKGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5pbml0Tm9kZUluc3RhbmNlKGdvb2RJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlQ29ubmVjdGlvbihpbnN0YW5jZUlkOiBzdHJpbmcsIG9sZENvbm5lY3Rpb246IHN0cmluZywgbmV3Q29ubmVjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNoYW5nZUNvbm5lY3Rpb24oaW5zdGFuY2VJZCwgb2xkQ29ubmVjdGlvbiwgbmV3Q29ubmVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29weUluc3RhbmNlKGluc3RhbmNlSWQ6IHN0cmluZywgc2hvdWxkU2F2ZUN1cnJlbnRJbnN0YW5jZUlkOiBib29sZWFuKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNvcHlJbnN0YW5jZShpbnN0YW5jZUlkLCBzaG91bGRTYXZlQ3VycmVudEluc3RhbmNlSWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNhdmVDb25maWd1cmF0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGF3YWl0IHRoaXMuY29ubmVjdG9yLnNhdmVDb25maWd1cmF0aW9ucygpLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgLy8gc2F2ZSBleHRlcm5hbCBzb3VyY2VzXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbm5lY3RvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuY29ubmVjdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yID0gdGhpcy5jb25uZWN0b3JzW2tleV0uY29ubmVjdG9yLmNvbm5lY3RvcjtcclxuICAgICAgICBhd2FpdCBjb25uZWN0b3Iuc2F2ZUNvbmZpZ3VyYXRpb25zKCkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBAcmV0dXJucyBUaGUgaW5pdGlhbCBhcnRpY2xlXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGUoc2t1OiBzdHJpbmcsIGJyYW5jaDogc3RyaW5nKTogUHJvbWlzZTxBcnRpY2xlPiB7XHJcbiAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuZ2V0R29vZElkRnJvbUFydGljbGVOcihza3UpO1xyXG4gICAgaWYgKGdvb2RJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBcnRpY2xlUXVpY2tTZWwoZ29vZElkLCBicmFuY2gpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZVF1aWNrU2VsKGdvb2RJZDogbnVtYmVyLCBicmFuY2g6IHN0cmluZyk6IFByb21pc2U8QXJ0aWNsZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQXBpLmdldEFydGljbGVRdWlja1NlbChnb29kSWQsIGJyYW5jaCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGUsIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5vQXJ0aWNsZVswXSkgYXMgQXJ0aWNsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGxvYWRTZWxlY3Rpb25zKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5jb25uZWN0b3IuZ2V0U2VsZWN0aW9ucygpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHVibGljIGdldFF1ZXN0aW9uQW5kQW5zd2VycygpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuY29ubmVjdG9yLmdldFF1ZXN0aW9uQW5kQW5zd2VycygpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGdldFF1ZXN0aW9uQW5kQW5zd2Vyc0FzeW5jKCk6IFByb21pc2U8UXVlc3Rpb25BbmRBbnN3ZXJzPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VsZWN0aW9uc0FzeW5jKCk6IFByb21pc2U8U2VsZWN0aW9uW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFNlbGVjdGlvbnMoKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoU2VsZWN0aW9uLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKSBhcyBTZWxlY3Rpb25bXTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZWNvc0FzeW5jKCk6IFByb21pc2U8RGVjb05vZGVbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVjb3MoKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoRGVjb05vZGUsIHJlc3BvbnNlLnJlc3VsdE9iamVjdHMpIGFzIERlY29Ob2RlW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QW5zd2VyUHJpY2VzKCk6IFByb21pc2U8QW5zd2VyUHJpY2VbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0QW5zd2Vyc1ByaWNlcygpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShBbnN3ZXJQcmljZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cykgYXMgQW5zd2VyUHJpY2VbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRKc29uQ29uZmlndXJlZEFydGljbGVzKGdvb2RJZDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RUeXBlOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFNvdXJjZTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dMb2FkZXI6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlSWQ/OiBudW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdG9yU3RhdGlzdGljcz86IENvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hcnRpY2xlQXBpLmdldEpzb25BcnRpY2xlRmxhdFRyZWUoZ29vZElkLCBnb29kVHlwZSwgcXVhbnRpdHksIGV4dGVybmFsU291cmNlLCBzaG93TG9hZGVyLCBpbnN0YW5jZUlkLCBjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBnZXRKc29uTWF0Y2hUYWJsZUFydGljbGVzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEpzb25NYXRjaFRhYmxlQXJ0aWNsZXMoKTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRJbnN0YW5jZVRvQ29uZmlndXJlKGlkOiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICBpZiAoaWQgIT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnNldEluc3RhbmNlVG9Db25maWd1cmUoaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNlbGVjdEFuc3dlcihhbnN3ZXI6IEFuc3dlciwgdXNlcklucHV0Pzogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnNlbGVjdEFuc3dlcihhbnN3ZXIsIGZhbHNlLCB1c2VySW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEFuc3dlcihnZXRBbnN3ZXJzQW5kUXVlc3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNhbmNlbEFuc3dlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFNlbGVjdGlvbihcclxuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uLCBmb3JjZUJhY2tUb05vZGU/OiBib29sZWFuLCBhZnRlcj86IGJvb2xlYW4sIGNvbm5lY3Rvcj86IHN0cmluZyk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uLCBmYWxzZSwgZm9yY2VCYWNrVG9Ob2RlLCBhZnRlciwgY29ubmVjdG9yKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVwbGFjZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbik6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5yZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW1hZ2VGb3JBbnN3ZXJPclNlbGVjdGlvbihcclxuICAgIGFuc3dlck9yU2VsZWN0aW9uOiBBbnN3ZXIgfCBTZWxlY3Rpb24sIHB1YmxpY2F0aW9uOiBudW1iZXIsIHRodW1iTmFpbDogYm9vbGVhbiA9IHRydWUsIHNob3dMb2FkZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRTaW5nbGVJbWFnZShhbnN3ZXJPclNlbGVjdGlvbi5ub2RlSWQsIHB1YmxpY2F0aW9uLCB0cnVlLCB0aHVtYk5haWwpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICBpZiAocmVzcG9uc2UucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSBudWxsICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gJycpIHtcclxuICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXRGaXhlZEltYWdlRmlsZXBhdGhVcmwocmVzcG9uc2UucmVzdWx0T2JqZWN0LmZpbGVQYXRoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXREb2NCb2R5V2l0aE1pbWVUeXBlRGVmaW5pdGlvbihyZXNwb25zZS5yZXN1bHRPYmplY3QuZmlsZU5hbWUsXHJcbiAgICAgICAgICB0aHVtYk5haWwgPyByZXNwb25zZS5yZXN1bHRPYmplY3QudGh1bWJuYWlsQm9keSA6IHJlc3BvbnNlLnJlc3VsdE9iamVjdC5kb2N1bWVudEJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2tpcEJ1dHRvbkltYWdlQW5kVGV4dChnb29kSWQ/OiBudW1iZXIpOiBQcm9taXNlPFNraXBCdXR0b25JbmZvPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTa2lwQnV0dG9uSW1hZ2VBbmRUZXh0KGdvb2RJZCwgZmFsc2UpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShTa2lwQnV0dG9uSW5mbywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBTa2lwQnV0dG9uSW5mbztcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE1vb2RJbWFnZUZvckFuc3dlclNlbGVjdGlvbihhbnN3ZXJPclNlbGVjdGlvbjogQW5zd2VyIHwgU2VsZWN0aW9uLCB0aHVtYk5haWw6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEltYWdlRm9yQW5zd2VyT3JTZWxlY3Rpb24oYW5zd2VyT3JTZWxlY3Rpb24sIDMyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBbnN3ZXJJbmZvKGFuc3dlcjogQW5zd2VyKTogUHJvbWlzZTxBcnRpY2xlVGV4dFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRBbnN3ZXJUZXh0cyhhbnN3ZXIubm9kZUlkLCBmYWxzZSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEFydGljbGVUZXh0LCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIEFydGljbGVUZXh0W107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW50ZXJuYWxQYXJhbWV0ZXIocGFyYW1ldGVyOiBJbnRlcm5hbFBhcmFtKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkFwaS5nZXRJbnRlcm5hbFBhcmFtZXRlclZhbHVlKHBhcmFtZXRlcik7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdG9yZTNETW9kZWxDRE4oZmlsZW5hbWU6IHN0cmluZywgZmlsZUNvbnRlbnRzOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5tYWluQXBpLnVwbG9hZE1vZGVsVG9DRE4oZmlsZW5hbWUsIGZpbGVDb250ZW50cyk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDYXRhbG9nRGVmaW5pdGlvbnNMaXN0KCk6IFByb21pc2U8Q2F0YWxvZ0RlZmluaXRpb25bXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQXBpLmdldENhdGFsb2dEZWZpbml0aW9ucygpLmNhdGNoKGUgPT4ge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKCk7XHJcbiAgICB9KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQ2F0YWxvZ0RlZmluaXRpb24sIHJlc3BvbnNlLnJlc3VsdE9iamVjdHMpIGFzIENhdGFsb2dEZWZpbml0aW9uW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlLnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRFeHRlcm5hbFNvdXJjZShleHRlcm5hbFNvdXJjZUlkOiBudW1iZXIpOiBQcm9taXNlPEV4dGVybmFsU291cmNlPiB7XHJcbiAgICBpZiAoIWV4dGVybmFsU291cmNlSWQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0RXh0ZXJuYWxTb3VyY2UoZXh0ZXJuYWxTb3VyY2VJZCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShFeHRlcm5hbFNvdXJjZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBFeHRlcm5hbFNvdXJjZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihyZXNwb25zZSAmJiByZXNwb25zZS5tZXNzYWdlID8gcmVzcG9uc2UubWVzc2FnZSA6ICdFcnJvciByZXRyaWV2aW5nIGV4dGVybmFsIHNvdXJjZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEFydGljbGVGdWxsT2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVDYXRlZ29yaWVzKHB1YmxpY2F0aW9uQ29kZTogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlQ2F0ZWdvcnlbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUFwaS5nZXRBcnRpY2xlQ2F0ZWdvcmllcyhwdWJsaWNhdGlvbkNvZGUpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEFydGljbGVDYXRlZ29yeSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgQXJ0aWNsZUNhdGVnb3J5W107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlRmxhdChza3U6IHN0cmluZyk6IFByb21pc2U8QXJ0aWNsZUZsYXQ+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0QXJ0aWNsZUZsYXQoc2t1KTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBcnRpY2xlRmxhdCwgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBBcnRpY2xlRmxhdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBhc3luYyBhZGRUb0NhcnQoZ29vZElkOiBudW1iZXIsIGdvb2RUeXBlOiBHb29kVHlwZSwgaW5zdGFuY2VJZDogbnVtYmVyLCBzZXNzaW9uSWQ6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciA9IDEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAvLyAgIGNvbnN0IGpzb246IHN0cmluZyA9IGF3YWl0IHRoaXMuX2dldEpTT05Gcm9tQXJ0aWNsZU9iamVjdChnb29kSWQsIGdvb2RUeXBlLCBpbnN0YW5jZUlkLCBzZXNzaW9uSWQsIHF1YW50aXR5KTtcclxuICAvLyAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hZGRUb0NhcnQubmV4dCh7YXJ0aWNsZToganNvbiwgcXVhbnRpdHk6IDF9KTtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyBwcml2YXRlIGFzeW5jIF9nZXRKU09ORnJvbUFydGljbGVPYmplY3QoZ29vZElkOiBudW1iZXIsIGdvb2RUeXBlOiBHb29kVHlwZSwgaW5zdGFuY2VJZDogbnVtYmVyLCBzZXNzaW9uSWQ6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciA9IDEpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gIC8vICAgY29uc3QgY29uZmlndXJhdG9yU3RhdGlzdGljcyA9IG5ldyBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnQoKTtcclxuICAvLyAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MudXNlclR5cGUgPSAnSG9tZWRlY29yYXRvcic7XHJcbiAgLy8gICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLnRyYW5zYWN0aW9uVHlwZSA9ICdTYWxlcyc7XHJcbiAgLy8gICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLmFjdGlvbkRvbWFpbiA9ICdIb21lZGVjb3JhdG9yJztcclxuICAvLyAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3Muc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xyXG4gIC8vICAgY29uZmlndXJhdG9yU3RhdGlzdGljcy53ZWJIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgLy8gICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLmJ1bmRsZUhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAvLyAgIHJldHVybiBhd2FpdCB0aGlzLmFydGljbGVBcGkuZ2V0SnNvbkFydGljbGVGbGF0VHJlZShnb29kSWQsIGdvb2RUeXBlLCBxdWFudGl0eSwgdHJ1ZSwgaW5zdGFuY2VJZCwgY29uZmlndXJhdG9yU3RhdGlzdGljcyk7XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIF9nZXRQdWJsaWNhdGlvbkNvZGVGb3JSb2xlKHJvbGU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5fcHVibGljYXRpb25Db2RlRm9yVXNlclJvbGUuaGFzKHJvbGUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9wdWJsaWNhdGlvbkNvZGVGb3JVc2VyUm9sZS5nZXQocm9sZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIl19