@colijnit/homedecorator 255.1.4 → 255.1.6

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 (89) hide show
  1. package/app/core/enum/message-type.enum.d.ts +3 -1
  2. package/app/core/interface/message-with-payload.interface.d.ts +6 -0
  3. package/app/core/model/homedecorator-settings-options.d.ts +2 -0
  4. package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
  5. package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
  6. package/app/core/service/homedecorator-connector.service.d.ts +5 -4
  7. package/app/core/service/homedecorator-settings.service.d.ts +2 -1
  8. package/app/core/service/presets.service.d.ts +3 -1
  9. package/app/homedecorator.component.d.ts +3 -1
  10. package/app/homedecorator.module.d.ts +2 -1
  11. package/app/plugins/core3d/service/floor-pattern.service.d.ts +1 -1
  12. package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +2 -1
  13. package/app/plugins/core3d/service/floor.service.d.ts +3 -1
  14. package/app/plugins/core3d/service/post-processing.service.d.ts +21 -7
  15. package/app/plugins/core3d/service/scene.service.d.ts +1 -1
  16. package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
  17. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +11 -2
  18. package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +185 -15
  19. package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
  20. package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
  21. package/app/plugins/render/render-dialog/render-dialog.component.scss +5 -5
  22. package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
  23. package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
  24. package/app/plugins/room-planner/components/settings/settings.component.d.ts +5 -1
  25. package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
  26. package/app/plugins/room-planner/room-planner/room-planner.component.scss +1 -0
  27. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +1 -3
  28. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
  29. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
  30. package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
  31. package/assets/icons/dash-button.svg +7 -0
  32. package/assets/icons/pen-ruler.svg +1 -0
  33. package/assets/icons/retry-button.svg +7 -0
  34. package/bundles/colijnit-homedecorator.umd.js +822 -601
  35. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  36. package/esm2015/app/app.version.js +3 -3
  37. package/esm2015/app/core/enum/message-type.enum.js +3 -1
  38. package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
  39. package/esm2015/app/core/model/homedecorator-settings-options.js +3 -1
  40. package/esm2015/app/core/service/3dm-api.js +4 -4
  41. package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
  42. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
  43. package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
  44. package/esm2015/app/core/service/homedecorator-settings.service.js +3 -2
  45. package/esm2015/app/core/service/presets.service.js +13 -5
  46. package/esm2015/app/core/utils/material.utils.js +3 -3
  47. package/esm2015/app/homedecorator.component.js +26 -19
  48. package/esm2015/app/homedecorator.module.js +8 -4
  49. package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +5 -5
  50. package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
  51. package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
  52. package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
  53. package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
  54. package/esm2015/app/plugins/core3d/items/factory.js +3 -2
  55. package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
  56. package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +24 -18
  57. package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +13 -8
  58. package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
  59. package/esm2015/app/plugins/core3d/service/light-presets.service.js +10 -8
  60. package/esm2015/app/plugins/core3d/service/lights.service.js +8 -1
  61. package/esm2015/app/plugins/core3d/service/outline.service.js +4 -6
  62. package/esm2015/app/plugins/core3d/service/post-processing.service.js +148 -51
  63. package/esm2015/app/plugins/core3d/service/scene-event.service.js +14 -7
  64. package/esm2015/app/plugins/core3d/service/scene.service.js +84 -74
  65. package/esm2015/app/plugins/core3d/service/ssr.service.js +2 -53
  66. package/esm2015/app/plugins/lite-selector/lite-selector/component/answers-slideout/answers-slideout.component.js +10 -5
  67. package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
  68. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +281 -166
  69. package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
  70. package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -2
  71. package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
  72. package/esm2015/app/plugins/render/service/new-render.service.js +4 -2
  73. package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
  74. package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
  75. package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +29 -15
  76. package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
  77. package/esm2015/app/plugins/room-planner/components/settings/settings.component.js +12 -5
  78. package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
  79. package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +691 -683
  80. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +43 -41
  81. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +1 -1
  82. package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
  83. package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
  84. package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
  85. package/esm2015/app/shared/loading-overlay/loading-overlay.component.js +4 -2
  86. package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
  87. package/fesm2015/colijnit-homedecorator.js +1656 -1322
  88. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  89. package/package.json +1 -1
@@ -1139,4 +1139,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
1139
1139
  }], selections: [{
1140
1140
  type: Input
1141
1141
  }] } });
1142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWVkc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFlLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFZLGFBQWEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFJakgsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDckYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBVyxRQUFRLEVBQUUsYUFBYSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbEYsT0FBTyxFQUFDLFVBQVUsRUFBaUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHdkcsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBc0NwRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFakUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzdELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBRXpGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDeEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUU5RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFaEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUN2RixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx5RUFBeUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJ0SCxNQUFNLE9BQU8sdUJBQXVCO0lBNkNsQyxZQUNTLGlCQUE0QyxFQUMzQyxPQUFrQixFQUNsQixXQUFvQyxFQUNwQyxLQUFvQyxFQUNwQyxXQUE4QixFQUM5QixxQkFBMkMsRUFDM0Msc0JBQTZDLEVBQzdDLG1CQUF1QyxFQUN2QyxrQkFBa0QsRUFDbEQsYUFBMkIsRUFDM0IsZUFBa0MsRUFDbEMsYUFBMkIsRUFDM0IsY0FBNkIsRUFDN0IsY0FBNkIsRUFDN0IsZUFBK0IsRUFDL0IsWUFBeUIsRUFDekIsZ0JBQThDLEVBQzlDLG9CQUF5QyxFQUN6QyxrQkFBcUMsRUFDckMsZ0JBQThDLEVBQzlDLGlCQUFtQyxFQUNuQyxhQUEyQixFQUMzQixpQkFBZ0QsRUFDaEQsVUFBcUIsRUFDckIsaUJBQTBDLEVBQzFDLGFBQTJCLEVBQzNCLGdCQUFpQyxFQUNqQyxZQUF5QixFQUN6QixnQkFBaUMsRUFDakMsZ0JBQWlDLEVBQ2pDLGlCQUFtQyxFQUNuQyxjQUE2QixFQUM3QixrQkFBcUMsRUFDckMscUJBQTJDLEVBQzNDLGdDQUFpRSxFQUNqRSxjQUE2QixFQUM3QixpQkFBbUMsRUFDbkMsd0JBQThEO1FBckMvRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQTJCO1FBQzNDLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFDbEIsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ3BDLFVBQUssR0FBTCxLQUFLLENBQStCO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBQzNDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDN0Msd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWdDO1FBQ2xELGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE4QjtRQUM5Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE4QjtRQUM5QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBK0I7UUFDaEQsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUNyQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXlCO1FBQzFDLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBQzNDLHFDQUFnQyxHQUFoQyxnQ0FBZ0MsQ0FBaUM7UUFDakUsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQXNDO1FBbEZ4RCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQVE5QywyQkFBc0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUd0RSxlQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUk3QixvQkFBZSxHQUFtQixFQUFFLENBQUM7UUFDckMsbUJBQWMsR0FBbUIsRUFBRSxDQUFDO1FBQ3BDLHdCQUFtQixHQUFtQixFQUFFLENBQUM7UUFDekMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBRW5DLDRCQUF1QixHQUFZLElBQUksT0FBTyxFQUFFLENBQUM7UUFFakQsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0IsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQU9oQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxzQkFBaUIsR0FBNkIsRUFBRSxDQUFDO1FBQ2pELHdCQUFtQixHQUE2QixFQUFFLENBQUM7UUFFbkQsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFDM0IsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBMkMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFtQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDMUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLCtCQUErQixFQUNwRSxDQUFDLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQWlGLEVBQUUsRUFBRSxDQUM1RyxJQUFJLENBQUMsc0NBQXNDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FDdkUsRUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxRQUFjLEVBQUUsRUFBRSxDQUN6RixJQUFJLENBQUMsc0NBQXNDLENBQUMsUUFBUSxDQUFDLENBQ3RELEVBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQ2pGLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQ3pELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNwSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQThCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUMxSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQThCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDdEgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUN0RSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDeEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLEVBQzVHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxFQUMzRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUN0RSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUN0RSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ3BGLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ2pGLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDcEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUNuRixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUN6RSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUMvRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ25GLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDbkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUM3RixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUN2RixJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBb0IsRUFBRSxFQUFFO1lBQzFFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQWUsRUFBRSxFQUFFO1lBQ2pFLElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDOUU7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFWSxpQkFBaUIsQ0FBQyxNQUFlOztZQUM1QyxLQUFJLHdDQUF3QyxNQUFNLEVBQUU7Z0JBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdkQsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDeEQ7aUJBQU07Z0JBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDMUI7UUFDSCxDQUFDO0tBQUE7SUFFWSxXQUFXLENBQUMsRUFBQyxTQUFTLEVBQUM7O1lBQ2xDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2QsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLFNBQVM7aUJBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMzQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxVQUFVLEdBQVksS0FBSyxDQUFDO2dCQUNoQyxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQzNGLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDNUIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQzVCLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3BCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDMUIsSUFBSSxDQUFDLFVBQVUsRUFBRTs0QkFDZixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzs0QkFDckMsVUFBVSxHQUFHLElBQUksQ0FBQzt5QkFDbkI7d0JBQ0QsRUFBRSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7d0JBQ3pCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDNUI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVMLE9BQU8sSUFBSSxDQUFDLGtDQUFrQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDcEUsQ0FBQztLQUFBO0lBRU0sVUFBVTtRQUNmLCtEQUErRDtJQUNqRSxDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQXdCO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3hCLE1BQU0sZUFBZSxHQUFRLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckYsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUU7b0JBQ3BELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM5QixDQUFDLEVBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQzthQUMvQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxvQkFBb0I7UUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUMvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMzSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO2dCQUMxRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzthQUM5QjtTQUNGO0lBQ0gsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVNLG9CQUFvQixDQUFDLFVBQW1CLEtBQUs7UUFDbEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU0sb0JBQW9CO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVNLHdCQUF3QixDQUFDLElBQWE7UUFDM0MsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDL0Q7WUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRWEsYUFBYSxDQUFDLEdBQVc7O1lBQ3JDLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNiLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQU8sV0FBb0IsRUFBRSxFQUFFO29CQUN4RSxJQUFJLFdBQVcsRUFBRTt3QkFDZixJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzFDO2dCQUNILENBQUMsQ0FBQSxDQUFDLEVBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDL0YsQ0FBQztnQkFDRixNQUFNLFFBQVEsR0FBK0I7b0JBQzNDLEVBQUUsRUFBRSxDQUFDO29CQUNMLFNBQVMsRUFBRSx1QkFBdUI7b0JBQ2xDLE9BQU8sRUFBRSxrQkFBa0I7b0JBQzNCLEtBQUssRUFBRSxFQUFFO29CQUNULEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7b0JBQ2hFLE1BQU0sRUFBRSxLQUFLO29CQUNiLElBQUksRUFBRSxDQUFBLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7d0JBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHNCQUFzQjt3QkFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUztvQkFDakQsS0FBSyxFQUFFLEdBQUcsRUFBRTt3QkFDWCxNQUFNLE1BQU0sR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFTLENBQUEsbUJBQW1CLENBQUM7d0JBQ25GLElBQUksTUFBTSxFQUFFOzRCQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs0QkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQ3RDO29CQUNILENBQUM7aUJBQ0YsQ0FBQztnQkFDRixNQUFNLFdBQVcsR0FBK0I7b0JBQzlDLEVBQUUsRUFBRSxDQUFDO29CQUNMLFNBQVMsRUFBRSx1QkFBdUI7b0JBQ2xDLE9BQU8sRUFBRSxrQkFBa0I7b0JBQzNCLEtBQUssRUFBRSxFQUFFO29CQUNULEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7b0JBQ2hFLE1BQU0sRUFBRSxLQUFLO29CQUNiLElBQUksRUFBRSxDQUFBLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7d0JBQzFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHNCQUFzQjt3QkFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUztvQkFDbEQsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0IsRUFBRTtpQkFDaEUsQ0FBQztnQkFDRixJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUM3RDtRQUNILENBQUM7S0FBQTtJQUNhLG1CQUFtQixDQUFDLFFBQW1COztZQUNuRCxJQUFJLFFBQVEsRUFBRTtnQkFDWixJQUFJLFlBQXFCLENBQUM7Z0JBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUU7b0JBQzlELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQ2hFLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7aUJBQ3RFO2dCQUNELElBQUksYUFBYSxDQUFDO2dCQUNsQixJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFO29CQUM1QyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN6QztxQkFBTTtvQkFDTCxNQUFNLE9BQU8sR0FBRzt3QkFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDdkMsQ0FBQztvQkFDRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2hDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDbkQ7Z0JBQ0QsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDeEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3hHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1SCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3RDLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUMvRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ3hDO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7SUFFTyxtQkFBbUIsQ0FBQyxXQUFvQjtRQUM5QyxNQUFNLFlBQVksR0FBaUMsRUFBRSxDQUFDO1FBQ3RELElBQUksY0FBMEMsQ0FBQztRQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxLQUFLLFdBQVcsRUFBRTtnQkFDckIsY0FBYyxHQUFHO29CQUNmLEVBQUUsRUFBRSxLQUFLO29CQUNULFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDdkMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJO29CQUNmLEtBQUssRUFBRSxRQUFRO29CQUNmLElBQUksRUFBRSxLQUFLO29CQUNYLE1BQU0sRUFBRSxDQUFDO29CQUNULEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRztvQkFDdkQsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO2lCQUNyRCxDQUFDO2dCQUNGLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDbkM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0saUJBQWlCLEdBQStCO1lBQ3BELEVBQUUsRUFBRSxFQUFFO1lBQ04sU0FBUyxFQUFFLHlCQUF5QjtZQUNwQyxPQUFPLEVBQUUsY0FBYztZQUN2QixLQUFLLEVBQUUsQ0FBQztZQUNSLEtBQUssRUFBRSxRQUFRO1lBQ2YsTUFBTSxFQUFFLFdBQVc7WUFDbkIsUUFBUSxFQUFFLFlBQVk7WUFDdEIsSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUc7U0FDbEUsQ0FBQztRQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFYSxzQkFBc0IsQ0FBQyxLQUFjOztZQUNqRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLENBQUM7S0FBQTtJQUVPLHFCQUFxQjtRQUMzQixNQUFNLHFCQUFxQixHQUErQjtZQUN4RCxFQUFFLEVBQUUsR0FBRztZQUNQLFNBQVMsRUFBRSwyQkFBMkI7WUFDdEMsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixLQUFLLEVBQUUsQ0FBQztZQUNSLEtBQUssRUFBRSxRQUFRO1lBQ2YsS0FBSyxFQUFFLGdCQUFnQjtZQUN2QixJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsK0JBQStCLEVBQUU7U0FDM0UsQ0FBQztRQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTywyQkFBMkI7UUFDakMsTUFBTSxvQkFBb0IsR0FBK0I7WUFDdkQsRUFBRSxFQUFFLEdBQUc7WUFDUCxTQUFTLEVBQUUsNEJBQTRCO1lBQ3ZDLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsS0FBSyxFQUFFLENBQUM7WUFDUixLQUFLLEVBQUUsUUFBUTtZQUNmLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1NBQzlDLENBQUM7UUFDRixJQUFJLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFO1lBQy9DLEtBQUssRUFBRSxPQUFPO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHlCQUF5QjtRQUMvQixNQUFNLE1BQU0sR0FBK0I7WUFDekMsRUFBRSxFQUFFLENBQUM7WUFDTCxTQUFTLEVBQUUsOEJBQThCO1lBQ3pDLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsS0FBSyxFQUFFLEVBQUU7WUFDVCxLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ3BFLE1BQU0sRUFBRSxJQUFJO1lBQ1osYUFBYSxFQUFFLG1CQUFtQjtZQUNsQyxJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDckYsQ0FBQztRQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBWTtRQUNuQyxNQUFNLGFBQWEsR0FBaUI7WUFDbEMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLFFBQVEsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25DLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFYSw4QkFBOEIsQ0FBQyxHQUFHOztZQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqRCxNQUFNLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsK0JBQStCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsWUFBWSxLQUFLLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUV0QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsNkNBQTZDO1lBQzNFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLENBQUMsNkNBQTZDO1lBQ3pFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDdkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtnQkFDN0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7YUFDOUI7WUFDRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFO2dCQUNqRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQzthQUNsQztZQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUN0RCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQzthQUNwQztZQUVELE1BQU0sTUFBTSxHQUEyQixNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEgsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNwRDtpQkFBTTtnQkFDTCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLGNBQWMsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQztpQkFDdEU7YUFDRjtRQUNILENBQUM7S0FBQTtJQUVhLDJCQUEyQixDQUFDLElBQVU7O1lBQ2xELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFO2dCQUM5RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0M7WUFBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLCtCQUErQixFQUFFO2dCQUM1RSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3RDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxTQUFTLENBQUM7WUFDOUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtnQkFDL0MsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsd0JBQXdCLEVBQUUsQ0FBQzthQUM3RDtZQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFO2dCQUMxRCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3JJO1lBRUQsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7WUFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsQ0FBQztLQUFBO0lBRU8sNEJBQTRCO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO0lBQ2pFLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzVELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN0RyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMzQjtTQUNGO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE9BQWE7UUFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQW1CLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQXdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNuRixJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxHQUFHLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO29CQUMzRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztpQkFDN0I7Z0JBQ0QsTUFBTSxjQUFjLEdBQVksR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNuSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtvQkFDekQsSUFBSSxjQUFjLEVBQUU7d0JBQ2xCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO3FCQUM3Qjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7cUJBQ3BCO2lCQUNGO2dCQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztvQkFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDVDtpQkFBTTtnQkFDTCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzthQUM5QjtTQUNGO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE1BQThCO1FBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQzVDLE1BQU0sSUFBSSxHQUFTLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDcEMsSUFBSSxJQUFJLENBQUMsZUFBZSxZQUFZLFVBQVUsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLHNCQUFzQixHQUFtQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQzthQUMzRTtZQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxJQUFJLENBQUMsNEJBQTRCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4RCxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzVDLE1BQU0sSUFBSSxHQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9ILE1BQU0sR0FBRyxHQUFZLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUNkLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hGO2FBQU07WUFDTCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsTUFBTSxTQUFTLEdBQWMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3JHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLElBQUksU0FBUyxFQUFFO1lBQ2xGLElBQUksT0FBTyxHQUFnQixJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFXLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQ25FLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDN0UsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTt3QkFDM0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7cUJBQzlCO2dCQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDTDtTQUNGO0lBQ0gsQ0FBQztJQUVhLG9CQUFvQjs7WUFDaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3RELE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDekU7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDbkM7WUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDeEQsTUFBTSxNQUFNLEdBQTJCLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUM1RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDMUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2lCQUNyRjtnQkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUNyQztZQUNELElBQ0UsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDckQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUN6RCxJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7YUFDNUI7UUFDSCxDQUFDO0tBQUE7SUFFTyxhQUFhLENBQUMsQ0FBQztRQUNyQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixNQUFNLFNBQVMsR0FBYyxXQUFXLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxTQUFTLEVBQUU7WUFDYiw0REFBNEQ7WUFDNUQsMERBQTBEO1lBQzFELDBEQUEwRDtZQUMxRCwwREFBMEQ7WUFDMUQsMERBQTBEO1lBQzFELDBEQUEwRDtZQUMxRCwwREFBMEQ7WUFDMUQsMERBQTBEO1lBQzFELCtCQUErQjtZQUMvQixtRUFBbUU7WUFDbkUsTUFBTTtZQUNOLElBQUk7WUFDSixNQUFNLEdBQUcsR0FBVyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1QixNQUFNLFNBQVMsR0FBUSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6SCxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUU7b0JBQ3BGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUU7d0JBQy9DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7b0JBQ3ZHLENBQUMsRUFDRCxTQUFTLENBQUMsQ0FBQyxDQUFDO2lCQUNmO2FBQ0Y7U0FDRjtRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO29CQUNkLE1BQU0sZUFBZSxHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2RSw2RUFBNkU7b0JBQzdFLElBQUksZUFBZSxFQUFFO3dCQUNuQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzt3QkFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFOzRCQUNwRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzt3QkFDOUIsQ0FBQyxFQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7cUJBQ2pDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxHQUFRLEVBQUUsU0FBaUI7UUFDckQsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxRQUFRLENBQUM7U0FDakI7YUFBTTtZQUNMLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDZCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ3hEO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtJQUNILENBQUM7SUFFTywwQkFBMEIsQ0FBQyxTQUFpQjtRQUNsRCxNQUFNLGlCQUFpQixHQUFhLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekQsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0I7UUFDekMsTUFBTSxhQUFhLEdBQVcsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlFLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNsRyxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQy9CLE1BQU0sTUFBTSxHQUFTLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDNUUsSUFBSSxNQUFNLEVBQUUsRUFBRSxzQkFBc0I7Z0JBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDbkQsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7cUJBQ25CO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxNQUFNLGVBQWUsR0FBbUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ2pGLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMxQixtQkFBbUI7Z0JBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUU7b0JBQ2hELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUNyRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNULENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8scUJBQXFCLENBQUMsU0FBb0IsRUFBRSxTQUFjLEVBQUUsTUFBZ0I7UUFDbEYsSUFBSSxLQUFjLENBQUM7UUFDbkIsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLENBQUMsRUFBRTtZQUM3QixLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDakQ7UUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEksSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDeEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FDekMsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLGlCQUFpQixLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25HLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxTQUFjLEVBQUUsTUFBZ0I7UUFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxTQUFjLEVBQUUsU0FBYztRQUN0RCxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sR0FBRyxHQUFXLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQy9DLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDtRQUNELE1BQU0sSUFBSSxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQy9DLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvQztRQUNELE1BQU0sSUFBSSxHQUFXLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7UUFDckQsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBRU8saUJBQWlCLENBQUMsTUFBb0I7UUFDNUMsTUFBTSxHQUFHLEdBQVksSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFZLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0UsTUFBTSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMxQixNQUFNLGFBQWEsR0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVPLHdCQUF3QixDQUFDLGFBQXdCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxXQUFtQjtRQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUNsRCxDQUFBOzs7OztXQUtFO0lBQ0wsQ0FBQztJQUVhLHNDQUFzQyxDQUFDLEdBQVcsRUFBRSxRQUFnRCxFQUFFLFFBQThDOztZQUNoSyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FDN0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUM3RCxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDdEMsS0FBSyxFQUNMLFFBQVEsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEYsTUFBTSxPQUFPLEdBQVksTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNFLE1BQU0sV0FBVyxHQUFnQjtnQkFDL0IsSUFBSSxFQUFFLEdBQUc7Z0JBQ1QsV0FBVyxFQUFFLENBQU8sR0FBRyxFQUFFLEVBQUUsZ0RBQUMsT0FBQSxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQSxHQUFBO2dCQUM5RSxJQUFJLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDOUMsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELENBQUM7S0FBQTtJQUVhLHNDQUFzQyxDQUFDLFFBQWM7O1lBQ2pFLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDNUMsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWM7Z0JBQ3RDLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BHLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVE7Z0JBQ2hDLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEUsQ0FBQztLQUFBO0lBRWEsOEJBQThCLENBQUMsRUFBWSxFQUFFLEdBQVksRUFBRSxHQUFVOztZQUNqRixNQUFNLFdBQVcscUJBQU8sRUFBRSxDQUFDLENBQUM7WUFDNUIsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFGLENBQUM7S0FBQTtJQUVPLHlCQUF5QixDQUMvQixHQUFZLEVBQUUsR0FBVyxFQUFFLFFBQWlELEVBQUUsYUFBc0IsS0FBSztRQUN6RyxNQUFNLEVBQUUsR0FBYTtZQUNuQixRQUFRLEVBQUUsR0FBRztZQUNiLGNBQWMsRUFBRSxHQUFHO1lBQ25CLGdCQUFnQixFQUFFLFFBQVE7U0FDM0IsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVhLCtCQUErQixDQUFDLFNBQWlCOztZQUM3RCxNQUFNLEdBQUcsR0FBVyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVCLE1BQU0sVUFBVSxHQUFTLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUNyRCxNQUFNLFdBQVcsR0FBVyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDdkQsTUFBTSxXQUFXLEdBQVcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDekcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO29CQUN6QyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7b0JBQ3pDLFVBQVUsQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQztpQkFDbEQ7YUFDRjtRQUNILENBQUM7S0FBQTtJQUVhLGtDQUFrQyxDQUFDLFNBQVM7O1lBQ3hELE1BQU0sZUFBZSxHQUFxQixFQUFFLENBQUM7WUFDN0MsTUFBTSxXQUFXLEdBQXdCLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDekcsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsS0FBSyxNQUFNLFdBQVcsSUFBSSxXQUFXLEVBQUU7b0JBQ3JDLElBQUksV0FBVyxDQUFDLGdCQUFnQixLQUFLLElBQUksRUFBRTt3QkFDekMsTUFBTSxZQUFZLEdBQW1CLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUN6SCxJQUFJLFlBQVksRUFBRTs0QkFDaEIsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzt5QkFDcEM7cUJBRUY7aUJBQ0Y7YUFDRjtZQUNELE1BQU0sR0FBRyxHQUFXLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDckMsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtvQkFDakcsTUFBTSxpQkFBaUIsR0FDckIsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbEcsSUFBSSxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFO3dCQUN4RCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssU0FBUyxFQUFFOzRCQUN4SSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFDeEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7eUJBQ3pEO3dCQUNELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7cUJBQzdFO3lCQUFNO3dCQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztxQkFDckM7aUJBQ0Y7Z0JBQ0QsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakQ7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekUsQ0FBQztLQUFBO0lBRWEsc0JBQXNCLENBQUMsSUFBUzs7WUFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQzFCLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN4QixlQUFlLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNwQixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ3BDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ25FLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQ3hCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQzdDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixRQUFRLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ3JDLG1CQUFtQixFQUFFLElBQUk7Z0JBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO2dCQUMvQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3ZDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7Z0JBQ3pDLHdCQUF3QixFQUFFLElBQUksQ0FBQyx3QkFBd0I7YUFDeEQsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUN0QyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxDQUFDO0tBQUE7SUFFYSw0QkFBNEIsQ0FDeEMsYUFBdUIsRUFDdkIsa0JBQTJCLEVBQzNCLDBCQUFtQyxFQUNuQyxVQUFtQixFQUNuQixVQUFtQixFQUNuQixXQUFvQixFQUNwQixrQkFBMkIsSUFBSTs7WUFFL0IsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUM3QyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQ3pHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNoRixLQUFLLEVBQ0wsYUFBYSxDQUFDLGdCQUFnQixJQUFJLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2xKLENBQUM7WUFFRixNQUFNLE1BQU0sR0FDVixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQzVDLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSwwQkFBMEIsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQztpQkFDbEcsS0FBSyxDQUFDLENBQUMsV0FBbUMsRUFBRSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLFdBQVcsS0FBSyxjQUFjLENBQUM7b0JBQ3JFLFdBQVcsQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRyxFQUFFLFVBQVU7b0JBQzVELFdBQVcsR0FBRyxJQUFJLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMvRixXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxXQUFXLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7aUJBQzdDO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxXQUFXLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7WUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUM5RCxJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLGdCQUFnQixFQUFFO29CQUNyRCxJQUFJLFVBQVUsRUFBRSxFQUFFLHlDQUF5Qzt3QkFDekQsTUFBTSxDQUFDLFFBQVEscUJBQU8sYUFBYSxDQUFDLENBQUM7d0JBQ3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3JDO3lCQUFNO3dCQUNMLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUM1RCxJQUFJLENBQUMsVUFBVSxFQUFFOzRCQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO2dDQUM3QixJQUFJLEVBQUU7b0NBQ0osSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPO29DQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztvQ0FDaEUsUUFBUSxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFDLENBQUM7aUNBQzVFOzZCQUNGLENBQUMsQ0FBQzs0QkFDSCxPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO3lCQUNwRzs2QkFBTTs0QkFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOzRCQUN0RCxPQUFPLE1BQU0sQ0FBQzt5QkFDZjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLGNBQWMsRUFBRTtvQkFDbkQsTUFBTSxDQUFDLFFBQVEscUJBQU8sYUFBYSxDQUFDLENBQUM7b0JBQ3JDLElBQUksVUFBVSxFQUFFLEVBQUUseUNBQXlDO3dCQUN6RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUN2Qzt5QkFBTTt3QkFDTCxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7cUJBQy9EO2lCQUNGO2dCQUNELElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsMEJBQTBCLEVBQUU7b0JBQy9ELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDBCQUEwQixFQUFFLE1BQU0sQ0FBQyxDQUFDO2lCQUNyRztnQkFDRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7b0JBQ3BCLElBQUksa0JBQWtCLEVBQUU7d0JBQ3RCLE1BQU0sZUFBZSxHQUFhLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNqSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLFlBQVksbUJBQW1CLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7NEJBQzdFLE1BQU0sQ0FBQyxTQUFpQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQzs0QkFDdkUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3lCQUN4Qzs2QkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLFlBQVksUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxZQUFZLG1CQUFtQixDQUFDLEVBQUU7NEJBQ3BHLE1BQU0sQ0FBQyxTQUFzQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQzt5QkFDN0Q7cUJBQ0Y7b0JBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxZQUFZLGNBQWMsSUFBSSxVQUFVLEVBQUU7d0JBQzVELE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7cUJBQzVEO29CQUNELElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsUUFBUSxFQUFFO3dCQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztxQkFDOUY7b0JBQ0QsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUU7d0JBQzNDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7NEJBQ2hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQzt5QkFDckY7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7eUJBQzNGO3FCQUNGO29CQUNELElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsa0JBQWtCLEVBQUU7d0JBQ3ZELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztxQkFDMUY7b0JBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0Y7WUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN6QztZQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3RDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVPLGVBQWUsQ0FBQyxNQUE4QjtRQUNwRCxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUE2QixFQUFFLFVBQW1CO1FBQ3JFLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2pDLFFBQVEsS0FBSyxDQUFDLFVBQVUsRUFBRTtnQkFDeEIsS0FBSyxVQUFVLENBQUMsZUFBZSxDQUFDO2dCQUNoQyxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hCLEtBQUssVUFBVSxDQUFDLHFCQUFxQixDQUFDO2dCQUN0QyxLQUFLLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQztnQkFDL0MsS0FBSyxVQUFVLENBQUMsWUFBWSxDQUFDO2dCQUM3QixLQUFLLFVBQVUsQ0FBQyxXQUFXLENBQUM7Z0JBQzVCLEtBQUssVUFBVSxDQUFDLDBCQUEwQjtvQkFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2pELElBQUksVUFBVSxFQUFFO3dCQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQztxQkFDcEU7b0JBQ0QsTUFBTTtnQkFDUjtvQkFDRSxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakQsSUFBSSxVQUFVLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztxQkFDOUY7YUFDSjtTQUNGO2FBQU07WUFDTCxJQUFJLFVBQVUsRUFBRTtnQkFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO2FBQzlGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRWEsMEJBQTBCLENBQUMscUJBQXFEOztZQUM1RixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLE9BQU87YUFDUjtZQUNELElBQUkscUJBQXFCLENBQUMsV0FBVyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsNEJBQTRCLENBQy9CLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdEU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUMzRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcscUJBQXFCLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDL0UsQ0FBQztLQUFBO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRTtZQUN6RCxRQUFRLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUNoQyxRQUFRLEVBQUUsS0FBSztZQUNmLFFBQVEsRUFBRSxHQUFHO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFvQjtRQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFYSxjQUFjLENBQUMsU0FBZTs7WUFDMUMsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDbkMsTUFBTSxNQUFNLEdBQVcsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDckgsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0YsSUFBSSxpQkFBb0MsQ0FBQztnQkFDekMsSUFBSSxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO29CQUNwRSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDN0c7Z0JBRUQsSUFBSSxJQUFJLEdBQUc7b0JBQ1QsV0FBVyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYztvQkFDOUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUTtvQkFDdEMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTTtpQkFDcEMsQ0FBQztnQkFDRixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFO29CQUNyRCxNQUFNLFlBQVksR0FBRzt3QkFDbkIsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJO3dCQUM5RCxtQkFBbUIsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHO3FCQUN0RSxDQUFDO29CQUNGLElBQUksbUNBQU8sSUFBSSxHQUFLLFlBQVksQ0FBQyxDQUFDO2lCQUNuQztnQkFDRCxJQUFJLGlCQUFpQixFQUFFO29CQUNyQixNQUFNLFdBQVcsR0FBRzt3QkFDbEIsU0FBUyxFQUFFLGlCQUFpQixDQUFDLE9BQU87d0JBQ3BDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLGNBQWM7d0JBQ2xELGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxhQUFhO3FCQUNqRCxDQUFDO29CQUNGLElBQUksbUNBQU8sSUFBSSxHQUFLLFdBQVcsQ0FBQyxDQUFDO2lCQUNsQztnQkFDRCxJQUFJLGlCQUFpQixFQUFFO29CQUNyQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7b0JBQ3hCLEtBQUssTUFBTSxRQUFRLElBQUksaUJBQWlCLEVBQUU7d0JBQ3hDLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTs0QkFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7eUJBQ3pDO3FCQUNGO29CQUNELE1BQU0sWUFBWSxHQUFHO3dCQUNuQixZQUFZLEVBQUUsWUFBWTtxQkFDM0IsQ0FBQztvQkFDRixJQUFJLG1DQUFPLElBQUksR0FBSyxZQUFZLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDMUU7UUFDSCxDQUFDO0tBQUE7O3FIQTVtQ1UsdUJBQXVCO3lHQUF2Qix1QkFBdUIsK29CQU12Qix1QkFBdUIsOERDaEdwQyxzMEZBaUVBLHk2RERnQmM7UUFDVixPQUFPLENBQUMsb0JBQW9CLEVBQUU7WUFDNUIsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztZQUN0QyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1lBQ25DLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQy9DLENBQUM7S0FDSCxDQUFBO3FEQUNnRDs0RkFFdEMsdUJBQXVCO2tCQWJuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFdBQVcsRUFBRSxpQ0FBaUM7b0JBQzlDLFNBQVMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO29CQUM5QyxVQUFVLEVBQUU7d0JBQ1YsT0FBTyxDQUFDLG9CQUFvQixFQUFFOzRCQUM1QixLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDOzRCQUN0QyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDOzRCQUNuQyxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQzt5QkFDL0MsQ0FBQztxQkFDSCxDQUFBO3FFQUNnRDtpQkFDbEQ7cTFDQUltRCxpQkFBaUI7c0JBQWxFLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUN1Qix3Q0FBd0M7c0JBQTlHLFNBQVM7dUJBQUMsMENBQTBDLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNGLG9DQUFvQztzQkFBdEcsU0FBUzt1QkFBQyxzQ0FBc0MsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSTFELHNCQUFzQjtzQkFINUIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O3NCQUVuRCxNQUFNO2dCQUlBLFVBQVU7c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29sb3IsIEV1bGVyLCBMaWdodCwgTWVzaCwgT2JqZWN0M0QsIFBsYW5lR2VvbWV0cnksIFNoYXBlLCBTaGFwZUdlb21ldHJ5LCBWZWN0b3IyLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHtBcnRpY2xlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2FydGljbGUnO1xyXG5pbXBvcnQge0ljb25OYW1lfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi1uYW1lLmVudW0nO1xyXG5pbXBvcnQge0VsZW1lbnRUb29sYmFyQ29tcG9uZW50fSBmcm9tICcuLi9lbGVtZW50LXRvb2xiYXIvZWxlbWVudC10b29sYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q3VzdG9tQnV0dG9ufSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL2N1c3RvbS1idXR0b24nO1xyXG5pbXBvcnQge0hhbGZFZGdlLCBXYWxsSXRlbSwgV2FsbEl0ZW1Hcm91cH0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL3dhbGwtb2JqZWN0cyc7XHJcbmltcG9ydCB7Q3VzdG9tTWVzaCwgQ3VzdG9tT2JqZWN0M0R9IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tb2JqZWN0cyc7XHJcbmltcG9ydCB7aXNJdGVtR3JvdXBUeXBlLCBpc1dhbGxJdGVtR3JvdXBUeXBlLCBpdGVtVHlwZUZyb21QbGFjZW1lbnR9IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9mYWN0b3J5JztcclxuaW1wb3J0IHtNZXRhZGF0YX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL21ldGFkYXRhJztcclxuaW1wb3J0IHtJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvaXRlbSc7XHJcbmltcG9ydCB7SXRlbUdyb3VwfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvaXRlbS1ncm91cCc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JHcm91cFJlc3VsdH0gZnJvbSAnLi4vLi4vY29yZTNkL21vZGVsL2N1c3RvbS1mbG9vci1ncm91cC1yZXN1bHQnO1xyXG5pbXBvcnQge1RleHR1cmV9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvdGV4dHVyZSc7XHJcbmltcG9ydCB7U2NyZWVuU2l6ZUFuYWx5c2lzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NjcmVlbi1zaXplLWFuYWx5c2lzL3NjcmVlbi1zaXplLWFuYWx5c2lzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvYWRGdXJuaXR1cmVTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2UvbG9hZC1mdXJuaXR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7QnVpbGRGdXJuaXR1cmVTZXJ2aWNlLCBDb25maWd1cmluZ01vZGVDaGFuZ2VJbnRlcmZhY2V9IGZyb20gJy4vc2VydmljZS9idWlsZC1mdXJuaXR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7SW50ZWdyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaW50ZWdyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge1RvYXN0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RpYWxvZy9zZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDYW1lcmFTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9jYW1lcmEuc2VydmljZSc7XHJcbmltcG9ydCB7UHJlc2V0c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lT3B0aW9uc1NlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLW9wdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7RGltZW5zaW9uc1NlcnZpY2V9IGZyb20gJy4vc2VydmljZS9kaW1lbnNpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vcnBsYW5TZXJ2aWNlfSBmcm9tICcuLi8uLi9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9mbG9vcnBsYW4uc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9mbG9vci5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtBclNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2FyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2dvb2dsZS10YWctbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtFcnJvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtSb3RhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3JvdGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Jvb21TZXJ2aWNlfSBmcm9tICcuLi8uLi9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FwcFN0YXRlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2FwcC1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcm9ncmVzc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9wcm9ncmVzcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtBbmltYXRpb25TZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2UvYW5pbWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Jlc2l6ZVNlcnZpY2V9IGZyb20gJy4vc2VydmljZS9yZXNpemUuc2VydmljZSc7XHJcbmltcG9ydCB7Q3VzdG9taXplclNlcnZpY2V9IGZyb20gJy4uLy4uL2xpdGUtc2VsZWN0b3IvbGl0ZS1zZWxlY3Rvci9zZXJ2aWNlL2N1c3RvbWl6ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7RHluYW1pY0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9keW5hbWljLWNhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtUaHJlZWRJblBob3RvSW5pdGlhbGl6ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi90aHJlZWQtaW4tcGhvdG8vc2VydmljZXMvdGhyZWVkLWluLXBob3RvLWluaXRpYWxpemVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlbmRlclNlcnZpY2V9IGZyb20gJy4uLy4uL3JlbmRlci9zZXJ2aWNlL3JlbmRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtOZXdSZW5kZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZW5kZXIvc2VydmljZS9uZXctcmVuZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7U2NyZWVuU2l6ZUluZm99IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zY3JlZW4tc2l6ZS1hbmFseXNpcy9zY3JlZW4tc2l6ZS1pbmZvJztcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9vYmplY3QudXRpbHMnO1xyXG5pbXBvcnQge01vZGVsRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWwtZGlhbG9nL21vZGVsLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1NjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlfSBmcm9tICcuLi8uLi9jb3JlM2QvaW50ZXJmYWNlL3NjZW5lLW9wdGlvbi1idXR0b24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtJY29uRW51bX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2ljb24uZW51bSc7XHJcbmltcG9ydCB7RGlhbG9nQ29uZmlnfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGlhbG9nL2ludGVyZmFjZS9kaWFsb2ctY29uZmlnLmludGVyZmFjZSc7XHJcbmltcG9ydCB7RGlhbG9nVHlwZX0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RpYWxvZy9lbnVtL2RpYWxvZy10eXBlLmVudW0nO1xyXG5pbXBvcnQge0Vycm9yTWVzc2FnZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC9lcnJvci1tZXNzYWdlJztcclxuaW1wb3J0IHtSZXN1bHRUeXBlfSBmcm9tICcuLi8uLi9jb3JlM2QvZW51bS9yZXN1bHQtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yRXh0ZXJuYWxTZXR0aW5nc0ludGVyZmFjZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9pbnRlcmZhY2UvaG9tZWRlY29yYXRvci1leHRlcm5hbC1zZXR0aW5ncy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1RvYXN0fSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RvYXN0JztcclxuaW1wb3J0IHtEcmFnZ2VkRGF0YX0gZnJvbSAnLi4vLi4vY29yZTNkL2ludGVyZmFjZS9kcmFnZ2VkLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtpc05pbGx9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvZnVuY3Rpb24vaXMtbmlsbC5mdW5jdGlvbic7XHJcbmltcG9ydCB7Q3VzdG9tV2FsbEZsb29ySXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS13YWxsLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0N1c3RvbVdhbGxJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLXdhbGwtaXRlbSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlckV2ZW50fSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vZ29vZ2xlLXRhZy1tYW5hZ2VyLWV2ZW50LmVudW0nO1xyXG5pbXBvcnQge0NhbWVyYVNldHRpbmdzRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY2FtZXJhLXNldHRpbmdzLWRpYWxvZy9jYW1lcmEtc2V0dGluZ3MtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7QXJ0aWNsZUNhdGVnb3J5fSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2FydGljbGUtY2F0ZWdvcnknO1xyXG5pbXBvcnQge0V4dGVybmFsU291cmNlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1zb3VyY2UuYm8nO1xyXG5pbXBvcnQge0NhdGFsb2dEZWZpbml0aW9ufSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9jYXRhbG9nLWRlZmluaXRpb24uYm8nO1xyXG5pbXBvcnQge0V4cG9ydFR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9leHBvcnQtdHlwZS5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnAtdGhyZWVkc2VsZWN0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90aHJlZWRzZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGhyZWVkc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdzaG93RWxlbWVudFRvb2xiYXInLCBbXHJcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeydvcGFjaXR5JzogJzAnfSkpLFxyXG4gICAgICBzdGF0ZSgnKicsIHN0eWxlKHsnb3BhY2l0eSc6ICcxJ30pKSxcclxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgYW5pbWF0ZSgnNTAwbXMgZWFzZScpKVxyXG4gICAgXSlcclxuICBdLyosXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gqL1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGhyZWVkc2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGljb25OYW1lOiB0eXBlb2YgSWNvbk5hbWUgPSBJY29uTmFtZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb25Nb2RlbHMnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0b29sYmFySWNvbk1vZGVsczogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RlZFRocmVlZE9iamVjdEN1c3RvbWl6YXRpb25TaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlbGVjdGVkVGhyZWVkT2JqZWN0Q3VzdG9taXphdGlvblNpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRUaHJlZWRPYmplY3RBbmltYXRpb25TaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlbGVjdGVkVGhyZWVkT2JqZWN0QW5pbWF0aW9uU2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKEVsZW1lbnRUb29sYmFyQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgY3VzdG9taXplQnV0dG9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgZWxlbWVudFRvb2xiYXI6IEVsZW1lbnRUb29sYmFyQ29tcG9uZW50O1xyXG5cclxuICBwdWJsaWMgZWRpdEVsZW1lbnRNZW51OiBDdXN0b21CdXR0b25bXSA9IFtdO1xyXG4gIHB1YmxpYyBlZGl0QWRkQnV0dG9uczogQ3VzdG9tQnV0dG9uW10gPSBbXTtcclxuICBwdWJsaWMgZWRpdEN1c3RvbWl6ZUJ1dHRvbjogQ3VzdG9tQnV0dG9uW10gPSBbXTtcclxuICBwdWJsaWMgcmVzaXplQnV0dG9uczogQ3VzdG9tQnV0dG9uW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHNlbGVjdGVkRWxlbWVudFBvc2l0aW9uOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgcHVibGljIHNob3dFbGVtZW50VG9vbGJhciA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93TGl0ZVNlbGVjdG9yID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTZWxlY3Rpb25zID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dBbnN3ZXJzID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dDdXN0b21pemVCdXR0b25zID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTd2FwQnV0dG9uID0gdHJ1ZTtcclxuICBwdWJsaWMgc3RhbmRBbG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG91bGRTaG93TGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYWN0aXZlTWV0YWRhdGE6IE1ldGFkYXRhO1xyXG4gIHB1YmxpYyBzZWxlY3Rpb25Ub0N1c3RvbWl6ZTogYW55O1xyXG4gIHB1YmxpYyBzZWxlY3RlZE9iamVjdDogSXRlbSB8IEl0ZW1Hcm91cDtcclxuICBwdWJsaWMgc2VsZWN0ZWRFbGVtZW50OiBNZXNoO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZEVsZW1lbnRPYmplY3Q6IEN1c3RvbU9iamVjdDNEO1xyXG4gIHByaXZhdGUgX3NrdUFscmVhZHlTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pdGVtc0Zyb21TY3JhdGNoOiBDdXN0b21GbG9vckdyb3VwUmVzdWx0W10gPSBbXTtcclxuICBwcml2YXRlIF9pdGVtc05lZWRVc2VySW5wdXQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHRbXSA9IFtdO1xyXG4gIHByaXZhdGUgX3N0YW5kYWxvbmVGbG9vcnM6IFRleHR1cmVbXTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2xvYWRpbmdGcm9tUHJlc2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY2FsbEJhY2tGbldoZW5CdWlsZEZpbmlzaGVkOiBGdW5jdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc2NyZWVuU2l6ZVNlcnZpY2U6IFNjcmVlblNpemVBbmFseXNpc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX2FwcFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaU9uZTogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlQnVzOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2xvYWRGdXJuaXR1cmVTZXJ2aWNlOiBMb2FkRnVybml0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2J1aWxkRnVybml0dXJlU2VydmljZTogQnVpbGRGdXJuaXR1cmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW50ZWdyYXRpb25TZXJ2aWNlOiBJbnRlZ3JhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWN0aW9uYXJ5U2VydmljZTogSG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHJlc2V0c1NlcnZpY2U6IFByZXNldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVPcHRpb25zU2VydmljZTogU2NlbmVPcHRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpbWVuc2lvbnNTZXJ2aWNlOiBEaW1lbnNpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FwcEV2ZW50U2VydmljZTogSG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29ycGxhblNlcnZpY2U6IEZsb29ycGxhblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vclNlcnZpY2U6IEZsb29yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2ljb25DYWNoZVNlcnZpY2U6IEhvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXJTZXJ2aWNlOiBBclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9nb29nbGVUYWdNYW5hZ2VyOiBHb29nbGVUYWdNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm90YXRpb25TZXJ2aWNlOiBSb3RhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yb29tU2VydmljZTogUm9vbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Byb2dyZXNzU2VydmljZTogUHJvZ3Jlc3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYW5pbWF0aW9uU2VydmljZTogQW5pbWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Jlc2l6ZVNlcnZpY2U6IFJlc2l6ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jdXN0b21pemVyU2VydmljZTogQ3VzdG9taXplclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9keW5hbWljQ2FtZXJhU2VydmljZTogRHluYW1pY0NhbWVyYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90aHJlZWRJblBob3RvSW5pdGlhbGl6ZXJTZXJ2aWNlOiBUaHJlZWRJblBob3RvSW5pdGlhbGl6ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcmVuZGVyU2VydmljZTogUmVuZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX25ld1JlbmRlclNlcnZpY2U6IE5ld1JlbmRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3JBZGFwdGVyU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5fcHJlc2V0c1NlcnZpY2UucmVnaXN0ZXIodGhpcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLmFuc3dlckNvdW50UmVjZWl2ZWQuc3Vic2NyaWJlKChhbnN3ZXJDb3VudDogbnVtYmVyKSA9PiB0aGlzLl9oYW5kbGVBbnN3ZXJDb3VudFJlY2VpdmVkKGFuc3dlckNvdW50KSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1UsXHJcbiAgICAgICAgKHtza3UsIHNldHRpbmdzLCBwb3NpdGlvbn06IHsgc2t1OiBzdHJpbmcsIHNldHRpbmdzOiBhbnksIHBvc2l0aW9uOiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6PzogbnVtYmVyIH0gfSkgPT5cclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUxvYWRJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1Uoc2t1LCBzZXR0aW5ncywgcG9zaXRpb24pXHJcbiAgICAgICksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkNvcHlJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1UsIChvcmlnaW5hbDogSXRlbSkgPT5cclxuICAgICAgICB0aGlzLl9oYW5kbGVDb3B5SU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVKG9yaWdpbmFsKVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuY29uZmlndXJlTW9kZUNoYW5nZWQuc3Vic2NyaWJlKGNvbmZpZ3VyaW5nTW9kZUNoYW5nZSA9PlxyXG4gICAgICAgIHRoaXMuX2hhbmRsZUNvbmZpZ3VyZU1vZGVDaGFuZ2UoY29uZmlndXJpbmdNb2RlQ2hhbmdlKSksXHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS50b2dnbGVTZWxlY3RlZEVsZW1lbnQuc3Vic2NyaWJlKChlbGVtZW50OiBNZXNoKSA9PiB0aGlzLl9zZWxlY3RlZEVsZW1lbnRUb2dnbGUoZWxlbWVudCkpLFxyXG4gICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuYnVpbGRGaW5pc2hlZC5zdWJzY3JpYmUoKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCkgPT4gdGhpcy5faGFuZGxlQnVpbGRGaW5pc2hlZChyZXN1bHQpKSxcclxuICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmFuc3dlclNlbGVjdGVkLnN1YnNjcmliZSgocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KSA9PiB0aGlzLl9hbnN3ZXJTZWxlY3RlZChyZXN1bHQpKSxcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm9uQWZ0ZXJSZW5kZXIuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2hhbmRsZVJlbmRlcigpKSxcclxuICAgICAgdGhpcy5fYXBwU2VydmljZS5za3VTZXQuc3Vic2NyaWJlKHNrdSA9PiB0aGlzLl9oYW5kbGVTa3VTZXQoc2t1KSksXHJcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hcnRpY2xlSW5mb1JlY2VpdmVkLnN1YnNjcmliZShpbmZvID0+IHRoaXMuX2hhbmRsZUluZm9DbGljayhpbmZvKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5VbmRlZmluZWRFcnJvck9jY3VyZWQsICgpID0+IHRoaXMuX2hhbmRsZVVuZGVmaW5lZEVycm9yT2NjdXJlZCgpKSxcclxuICAgICAgdGhpcy5fcHJlc2V0c1NlcnZpY2UuYWZ0ZXJMb2FkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9hZnRlckxvYWRGcm9tUHJlc2V0KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5VbmRvLCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5SZWRvLCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TdGFydFdpdGhFbXB0eVJvb20sICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlN0YXJ0V2l0aFByZXNldCwgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFJvb21Gcm9tUHJlc2V0LCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkUm9vbUZyb21DbG91ZCwgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTmV3Um9vbSwgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuUmVzZXRSb29tcGxhbiwgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFNjYWxlZERpYWdyYW0sICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX3ByZXNldHNTZXJ2aWNlLmJlZm9yZUxvYWQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5JdGVtU2VsZWN0ZWQsIChpdGVtKSA9PiB0aGlzLm9iamVjdFNlbGVjdGVkKGl0ZW0pKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkl0ZW1VbnNlbGVjdGVkLCAoKSA9PiB0aGlzLl9yZW1vdmVCdXR0b25zKCkpLFxyXG4gICAgICB0aGlzLnNjcmVlblNpemVTZXJ2aWNlLnNjcmVlblNpemVDaGFuZ2VkLnN1YnNjcmliZSgoaW5mbzogU2NyZWVuU2l6ZUluZm8pID0+IHtcclxuICAgICAgICB0aGlzLnNob3VsZFNob3dMYWJlbCA9IGluZm8uaXNQaG9uZVNpemU7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NMb2FkZWQuc3Vic2NyaWJlKChsb2FkZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAobG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dTd2FwQnV0dG9uID0gIXRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmluc3RhbnRSZXBsYWNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5fYWRkTW9kZWxEaWFsb2dUb29sYmFyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvcHlTY2VuZUluc3RhbmNlKHNhdmVBczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKC8qIXRoaXMuX3NldHRpbmdzU2VydmljZS5pc1ByaXZhdGUgJiYgKi9zYXZlQXMpIHtcclxuICAgICAgY29uc3QgZnVybml0dXJlID0gdGhpcy5faXRlbVNlcnZpY2UuZ2V0SU9uZUZ1cm5pdHVyZSgpO1xyXG4gICAgICByZXR1cm4gdGhpcy5faGFuZGxlQ29weUluc3RhbmNlRm9yRnVybml0dXJlKGZ1cm5pdHVyZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZE9iamVjdHMoe2Z1cm5pdHVyZX0pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKCFmdXJuaXR1cmUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9sb2FkaW5nRnJvbVByZXNldCA9IHRydWU7XHJcbiAgICBjb25zdCBpT05FT2JqZWN0c1RvTG9hZCA9IGZ1cm5pdHVyZS5maWx0ZXIobyA9PiB0aGlzLl9pc0lPTkVPYmplY3QobykpO1xyXG4gICAgZnVybml0dXJlXHJcbiAgICAgIC5maWx0ZXIoKG8pID0+IGlzSXRlbUdyb3VwVHlwZShvLml0ZW1fdHlwZSkpXHJcbiAgICAgIC5mb3JFYWNoKGcgPT4ge1xyXG4gICAgICAgIGxldCBncm91cEFkZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgaXRlbUdyb3VwID0gaXNXYWxsSXRlbUdyb3VwVHlwZShnLml0ZW1fdHlwZSkgPyBuZXcgV2FsbEl0ZW1Hcm91cCgpIDogbmV3IEl0ZW1Hcm91cCgpO1xyXG4gICAgICAgIGl0ZW1Hcm91cC5sb2NrZWQgPSBnLmxvY2tlZDtcclxuICAgICAgICBpdGVtR3JvdXAucG9zaXRpb24uc2V0KGcueHBvcywgZy55cG9zLCBnLnpwb3MpO1xyXG4gICAgICAgIGl0ZW1Hcm91cC5yb3RhdGlvbi5zZXQoMCwgZy5yb3RhdGlvbiwgMCk7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBnLmNoaWxkcmVuO1xyXG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goY2ggPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2lzSU9ORU9iamVjdChjaCkpIHtcclxuICAgICAgICAgICAgaWYgKCFncm91cEFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UuYWRkSXRlbShpdGVtR3JvdXApO1xyXG4gICAgICAgICAgICAgIGdyb3VwQWRkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNoLml0ZW1Hcm91cCA9IGl0ZW1Hcm91cDtcclxuICAgICAgICAgICAgaU9ORU9iamVjdHNUb0xvYWQucHVzaChjaCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVMb2FkSU9uZUZ1cm5pdHVyZUZyb21QcmVzZXQoaU9ORU9iamVjdHNUb0xvYWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE9iamVjdHMoKTogYW55IHtcclxuICAgIC8vIHJldHVybiB7ZnVybml0dXJlOiB0aGlzLnRocmVlU2VydmljZS5tb2RlbC5zYXZlRnVybml0dXJlKCl9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9iamVjdFNlbGVjdGVkKG9iamVjdDogSXRlbSB8IEl0ZW1Hcm91cCkge1xyXG4gICAgdGhpcy5fcmVtb3ZlQ3VzdG9tQnV0dG9ucygpO1xyXG4gICAgdGhpcy5zaG93Q3VzdG9taXplQnV0dG9ucyA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0ID0gb2JqZWN0O1xyXG4gICAgb2JqZWN0LnRyYXZlcnNlKChjaGlsZCkgPT4ge1xyXG4gICAgICBjb25zdCBjdXN0b21pemVCdXR0b246IGFueSA9IGNoaWxkLm5hbWUgJiYgY2hpbGQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ3BfJyk7XHJcbiAgICAgIGlmIChjdXN0b21pemVCdXR0b24pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvblRvQ3VzdG9taXplID0gY2hpbGQucGFyZW50O1xyXG4gICAgICAgIHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5wdXNoKG5ldyBDdXN0b21CdXR0b24oJycsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDdXN0b21pemVDbGljaygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uVG9DdXN0b21pemUpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9oYW5kbGVSZW5kZXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDdXN0b21pemVDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2N1c3RvbWl6ZXJTZXJ2aWNlLnNlbGVjdGVkT2JqZWN0ID0gdGhpcy5zZWxlY3Rpb25Ub0N1c3RvbWl6ZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2VsZWN0ZWRUaHJlZWRPYmplY3RDdXN0b21pemF0aW9uU2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3dhcEVsZW1lbnQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5yZXBsYWNlU2VsZWN0aW9uKE9iamVjdFV0aWxzLkdldFNlbGVjdGlvbkZyb21TZWxlY3RlZE9iamVjdCh0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpLCB0aGlzLmFjdGl2ZU1ldGFkYXRhKTtcclxuICAgICAgaWYgKCF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5pbnN0YW50UmVwbGFjZSkge1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0U2VsZWN0ZWRFbGVtZW50KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVFbGVtZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCkge1xyXG4gICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuZGVsZXRlU2VsZWN0aW9uKE9iamVjdFV0aWxzLkdldFNlbGVjdGlvbkZyb21TZWxlY3RlZE9iamVjdCh0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpLCB0aGlzLmFjdGl2ZU1ldGFkYXRhKTtcclxuICAgICAgdGhpcy5fcmVzZXRTZWxlY3RlZEVsZW1lbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxFbGVtZW50UmVwbGFjZShyZWJ1aWxkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jYW5jZWxBbnN3ZXIodGhpcy5hY3RpdmVNZXRhZGF0YSwgZmFsc2UsIHRydWUpO1xyXG4gICAgdGhpcy5fcmVzZXRTZWxlY3RlZEVsZW1lbnQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuQW5pbWF0aW9uU2lkZWJhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2VsZWN0ZWRUaHJlZWRPYmplY3RBbmltYXRpb25TaWRlYmFyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVTaG93Q2hhbmdlU2VsZWN0b3Ioc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKCFzaG93KSB7XHJcbiAgICAgIGlmICh0aGlzLnNob3dBbnN3ZXJzKSB7XHJcbiAgICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmNhbmNlbEFuc3dlcih0aGlzLmFjdGl2ZU1ldGFkYXRhKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuY2FuY2VsQ29uZmlndXJpbmdDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNb2RlbEVycm9yRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oTW9kZWxEaWFsb2dDb21wb25lbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYXJJdGVtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2l0ZW1zRnJvbVNjcmF0Y2gubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZVNrdVNldChza3U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHNrdSkge1xyXG4gICAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgICAgdGhpcy5faU9uZS5jb250cm9sbGVySW5pdGlhbGl6ZWQuc3Vic2NyaWJlKGFzeW5jIChpbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTdGFuZGFsb25lQ29uZmlndXJhdG9yKHNrdSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGhpcy5fYXBwU2VydmljZS5mbG9vclRleHR1cmVzTG9hZGVkLnN1YnNjcmliZSh0ZXh0dXJlcyA9PiB0aGlzLl9oYW5kbGVGbG9vcnNMb2FkZWQodGV4dHVyZXMpKSxcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgYXJCdXR0b246IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlID0ge1xyXG4gICAgICAgIGlkOiAyLFxyXG4gICAgICAgIGVsZW1lbnRJZDogJ3N0YW5kYWxvbmVfYXJfc2Vzc2lvbicsXHJcbiAgICAgICAgdG9vbHRpcDogJ1NUQVJUX0FSX1NFU1NJT04nLFxyXG4gICAgICAgIG9yZGVyOiAxMCxcclxuICAgICAgICBpbWFnZTogdGhpcy5faWNvbkNhY2hlU2VydmljZS5nZXRJY29uQXNCYXNlNjQoSWNvbkVudW0uQXJDaXJjbGUpLFxyXG4gICAgICAgIHRvZ2dsZTogZmFsc2UsXHJcbiAgICAgICAgc2hvdzogYXdhaXQgdGhpcy5fYXJTZXJ2aWNlLmFyU3VwcG9ydGVkKCkgJiZcclxuICAgICAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dTdGFuZGFsb25lQVJCdXR0b24gJiZcclxuICAgICAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmFyRW5hYmxlZCxcclxuICAgICAgICAgY2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG9iamVjdCA9ICh0aGlzLl9pdGVtU2VydmljZS5nZXRDb25maWd1cmFibGVzKClbMF0gYXMgYW55KS8qLmNsb25lVmlzaWJsZSgpKi87XHJcbiAgICAgICAgICBpZiAob2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5hck1vZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYWRkT2JqZWN0KG9iamVjdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBhcklPU0J1dHRvbjogU2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2UgPSB7XHJcbiAgICAgICAgaWQ6IDMsXHJcbiAgICAgICAgZWxlbWVudElkOiAnc3RhbmRhbG9uZV9hcl9zZXNzaW9uJyxcclxuICAgICAgICB0b29sdGlwOiAnU1RBUlRfQVJfU0VTU0lPTicsXHJcbiAgICAgICAgb3JkZXI6IDEwLFxyXG4gICAgICAgIGltYWdlOiB0aGlzLl9pY29uQ2FjaGVTZXJ2aWNlLmdldEljb25Bc0Jhc2U2NChJY29uRW51bS5BckNpcmNsZSksXHJcbiAgICAgICAgdG9nZ2xlOiBmYWxzZSxcclxuICAgICAgICBzaG93OiBhd2FpdCB0aGlzLl9hclNlcnZpY2UuYXJJT1NTdXBwb3J0ZWQoKSAmJlxyXG4gICAgICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd1N0YW5kYWxvbmVBUkJ1dHRvbiAmJlxyXG4gICAgICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuYXJFbmFibGVkLFxyXG4gICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuZG93bmxvYWRVRFNaZm9yQVJJT1MoKVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLl9zY2VuZU9wdGlvbnNTZXJ2aWNlLmFkZFNjZW5lT3B0aW9uQnV0dG9uKGFyQnV0dG9uKTtcclxuICAgICAgdGhpcy5fc2NlbmVPcHRpb25zU2VydmljZS5hZGRTY2VuZU9wdGlvbkJ1dHRvbihhcklPU0J1dHRvbik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUZsb29yc0xvYWRlZCh0ZXh0dXJlczogVGV4dHVyZVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGV4dHVyZXMpIHtcclxuICAgICAgbGV0IGRlZmF1bHRGbG9vcjogVGV4dHVyZTtcclxuICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVN0YW5kYWxvbmVGbG9vcnMpIHtcclxuICAgICAgICB0aGlzLl9zdGFuZGFsb25lRmxvb3JzID0gdGhpcy5fYXBwU2VydmljZS5nZXRGbG9vcnNTdGFuZGFsb25lKCk7XHJcbiAgICAgICAgZGVmYXVsdEZsb29yID0gdGhpcy5fc3RhbmRhbG9uZUZsb29ycy5maW5kKGYgPT4gZi5kZWZhdWx0U3RhbmRhbG9uZSk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGZsb29yR2VvbWV0cnk7XHJcbiAgICAgIGlmIChkZWZhdWx0Rmxvb3IgJiYgZGVmYXVsdEZsb29yLnNpbXBsZVBsYW5lKSB7XHJcbiAgICAgICAgZmxvb3JHZW9tZXRyeSA9IG5ldyBQbGFuZUdlb21ldHJ5KDYsIDYpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNvcm5lcnMgPSBbXHJcbiAgICAgICAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm5ld0Nvcm5lcigtMywgMyksXHJcbiAgICAgICAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm5ld0Nvcm5lcigtMywgLTMpLFxyXG4gICAgICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5uZXdDb3JuZXIoMywgLTMpLFxyXG4gICAgICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5uZXdDb3JuZXIoMywgMyksXHJcbiAgICAgICAgXTtcclxuICAgICAgICBjb25zdCBwb2ludHMgPSBjb3JuZXJzLm1hcChjb3JuZXIgPT4gbmV3IFZlY3RvcjIoY29ybmVyLngsIGNvcm5lci55KSk7XHJcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBuZXcgU2hhcGUocG9pbnRzKTtcclxuICAgICAgICBmbG9vckdlb21ldHJ5ID0gbmV3IFNoYXBlR2VvbWV0cnkoc2hhcGUpLmNlbnRlcigpO1xyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IHRoaXMuX2Zsb29yU2VydmljZS5nZW5lcmF0ZUZsb29yUGxhbmUoJ3doaXRlJywgZGVmYXVsdEZsb29yLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmxvb3JHZW9tZXRyeSk7XHJcbiAgICAgIHRoaXMuX2Zsb29yU2VydmljZS5nZXRGbG9vclBsYW5lKCkudmlzaWJsZSA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVN0YW5kYWxvbmVGbG9vcnM7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5iYWNrZ3JvdW5kID0gbmV3IENvbG9yKHBhcnNlSW50KHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zdGFuZGFsb25lU2NlbmVCYWNrZ3JvdW5kQ29sb3IsIDApKTtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuX3N0YW5kYWxvbmVGbG9vcnMgJiYgdGhpcy5fc3RhbmRhbG9uZUZsb29ycy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdGhpcy5fdXBzZXJ0Rmxvb3JCdXR0b25zKGRlZmF1bHRGbG9vcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Vwc2VydEZsb29yQnV0dG9ucyhhY3RpdmVGbG9vcjogVGV4dHVyZSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmxvb3JCdXR0b25zOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZVtdID0gW107XHJcbiAgICBsZXQgbmV3Rmxvb3JCdXR0b246IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlO1xyXG4gICAgdGhpcy5fc3RhbmRhbG9uZUZsb29ycy5mb3JFYWNoKChmLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoZiAhPT0gYWN0aXZlRmxvb3IpIHtcclxuICAgICAgICBuZXdGbG9vckJ1dHRvbiA9IHtcclxuICAgICAgICAgIGlkOiBpbmRleCxcclxuICAgICAgICAgIGVsZW1lbnRJZDogYHN0YW5kYWxvbmVfZmxvb3JfJHtmLm5hbWV9YCxcclxuICAgICAgICAgIHRvb2x0aXA6IGYubmFtZSxcclxuICAgICAgICAgIGNsYXNzOiAnY2lyY2xlJyxcclxuICAgICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgb2JqZWN0OiBmLFxyXG4gICAgICAgICAgaW1hZ2U6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGggKyBmLnVybCxcclxuICAgICAgICAgIGNsaWNrOiAoZmxvb3IpID0+IHRoaXMuX2NoYW5nZVN0YW5kYWxvbmVGbG9vcihmbG9vcilcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZsb29yQnV0dG9ucy5wdXNoKG5ld0Zsb29yQnV0dG9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBhY3RpdmVGbG9vckJ1dHRvbjogU2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2UgPSB7XHJcbiAgICAgIGlkOiAxMCxcclxuICAgICAgZWxlbWVudElkOiAnc3RhbmRhbG9uZV9jaGFuZ2VfZmxvb3InLFxyXG4gICAgICB0b29sdGlwOiAnQ0hBTkdFX0ZMT09SJyxcclxuICAgICAgb3JkZXI6IDgsXHJcbiAgICAgIGNsYXNzOiAnY2lyY2xlJyxcclxuICAgICAgb2JqZWN0OiBhY3RpdmVGbG9vcixcclxuICAgICAgY2hpbGRyZW46IGZsb29yQnV0dG9ucyxcclxuICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgaW1hZ2U6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGggKyBhY3RpdmVGbG9vci51cmxcclxuICAgIH07XHJcbiAgICB0aGlzLl9zY2VuZU9wdGlvbnNTZXJ2aWNlLnVwZGF0ZVNjZW5lT3B0aW9uQnV0dG9uKGFjdGl2ZUZsb29yQnV0dG9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2NoYW5nZVN0YW5kYWxvbmVGbG9vcihmbG9vcjogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5fZmxvb3JTZXJ2aWNlLnNldEZsb29yVGV4dHVyZShudWxsLCBmbG9vcik7XHJcbiAgICB0aGlzLl91cHNlcnRGbG9vckJ1dHRvbnMoZmxvb3IpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnVwZGF0ZVBhdGhUcmFjZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZURvd25sb2FkQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZG93bmxvYWQzRE1vZGVsQnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZSA9IHtcclxuICAgICAgaWQ6IDEwMCxcclxuICAgICAgZWxlbWVudElkOiAnc3RhbmRhbG9uZV9kb3dubG9hZF9tb2RlbCcsXHJcbiAgICAgIHRvb2x0aXA6ICdET1dOTE9BRF9NT0RFTCcsXHJcbiAgICAgIG9yZGVyOiAyLFxyXG4gICAgICBjbGFzczogJ2NpcmNsZScsXHJcbiAgICAgIGxhYmVsOiAnY2xvdWRfZG93bmxvYWQnLFxyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICBjbGljazogKCkgPT4gdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmRvd25sb2FkQ3VycmVudEN1c3RvbUZsb29yZ3JvdXAoKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UudXBkYXRlU2NlbmVPcHRpb25CdXR0b24oZG93bmxvYWQzRE1vZGVsQnV0dG9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUNhbWVyYVNldHRpbmdzQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2FtZXJhU2V0dGluZ3NCdXR0b246IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlID0ge1xyXG4gICAgICBpZDogMTEwLFxyXG4gICAgICBlbGVtZW50SWQ6ICdzdGFuZGFsb25lX2NhbWVyYV9zZXR0aW5ncycsXHJcbiAgICAgIHRvb2x0aXA6ICdDQU1FUkFfU0VUVElOR1MnLFxyXG4gICAgICBvcmRlcjogMSxcclxuICAgICAgY2xhc3M6ICdjaXJjbGUnLFxyXG4gICAgICBsYWJlbDogJ2NhbWVyYV9zZXR0aW5ncycsXHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLl9vcGVuQ2FtZXJhU2V0dGluZ3NEaWFsb2coKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UudXBkYXRlU2NlbmVPcHRpb25CdXR0b24oY2FtZXJhU2V0dGluZ3NCdXR0b24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3BlbkNhbWVyYVNldHRpbmdzRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oQ2FtZXJhU2V0dGluZ3NEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc2MDBweCdcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlTWVhc3VyZW1lbnRzQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgYnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZSA9IHtcclxuICAgICAgaWQ6IDEsXHJcbiAgICAgIGVsZW1lbnRJZDogJ3N0YW5kYWxvbmVfc2hvd19tZWFzdXJlbWVudHMnLFxyXG4gICAgICB0b29sdGlwOiAnU0hPV19NRUFTVVJFTUVOVFMnLFxyXG4gICAgICBvcmRlcjogMTEsXHJcbiAgICAgIGltYWdlOiB0aGlzLl9pY29uQ2FjaGVTZXJ2aWNlLmdldEljb25Bc0Jhc2U2NChJY29uRW51bS5NZWFzdXJlbWVudHMpLFxyXG4gICAgICB0b2dnbGU6IHRydWUsXHJcbiAgICAgIHRvb2x0aXBBY3RpdmU6ICdISURFX01FQVNVUkVNRU5UUycsXHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgIGNsaWNrOiAoKSA9PiB7IHRoaXMuX2RpbWVuc2lvbnNTZXJ2aWNlLmVuYWJsZWQgPSAhdGhpcy5fZGltZW5zaW9uc1NlcnZpY2UuZW5hYmxlZDsgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UuYWRkU2NlbmVPcHRpb25CdXR0b24oYnV0dG9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUluZm9DbGljayhpbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1lc3NhZ2VDb25maWc6IERpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgdHlwZTogRGlhbG9nVHlwZS5JbmZvLFxyXG4gICAgICBtZXNzYWdlczogW25ldyBFcnJvck1lc3NhZ2UoaW5mbyldXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fZGlhbG9nU2VydmljZS5zaG93RGlhbG9nKHtkYXRhOiBtZXNzYWdlQ29uZmlnfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlU3RhbmRhbG9uZUNvbmZpZ3VyYXRvcihza3UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAxLCA0KTtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLmxvb2tBdChuZXcgVmVjdG9yMygpKTtcclxuICAgIGF3YWl0IE9iamVjdFV0aWxzLkxvYWRIRFJJKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGggKyAnL2Fzc2V0cy9oZHJpL3N0ZF9lbnZfdjJfQi5oZHInLCB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XHJcbiAgICAgIGlmIChjIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUucmVtb3ZlKGMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5zdGFuZEFsb25lID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd0xpdGVTZWxlY3RvciA9IHRydWU7IC8vIGFsd2F5cyBzaG93IHRoZSBzZWxlY3Rpb25zIHdoZW4gc3RhbmRhbG9uZVxyXG4gICAgdGhpcy5zaG93U2VsZWN0aW9ucyA9IHRydWU7IC8vIGFsd2F5cyBzaG93IHRoZSBzZWxlY3Rpb25zIHdoZW4gc3RhbmRhbG9uZVxyXG4gICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uuc2hvdWxkTG9hZFNlbGVjdGlvbnMgPSB0cnVlO1xyXG4gICAgdGhpcy5fc2t1QWxyZWFkeVNldCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd0Rvd25sb2FkQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZURvd25sb2FkQnV0dG9uKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd01lYXN1cmVtZW50c0J1dHRvbikge1xyXG4gICAgICB0aGlzLl9jcmVhdGVNZWFzdXJlbWVudHNCdXR0b24oKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5kZXZlbG9wbWVudCkge1xyXG4gICAgICB0aGlzLl9jcmVhdGVDYW1lcmFTZXR0aW5nc0J1dHRvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCA9IGF3YWl0IHRoaXMuX2xvYWRJT25lRnVybml0dXJlRnJvbVNrdShuZXcgVmVjdG9yMygwLCAwLCAwKSwgc2t1LCB1bmRlZmluZWQsIHRydWUpO1xyXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZnVybml0dXJlKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUZpcnN0QnVpbGRTdGFuZGFsb25lKHJlc3VsdC5mdXJuaXR1cmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5lZWRzVXNlcklucHV0KSB7XHJcbiAgICAgICAgdGhpcy5fY2FsbEJhY2tGbldoZW5CdWlsZEZpbmlzaGVkID0gdGhpcy5faGFuZGxlRmlyc3RCdWlsZFN0YW5kYWxvbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUZpcnN0QnVpbGRTdGFuZGFsb25lKGl0ZW06IEl0ZW0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX2NhbWVyYVNlcnZpY2UubW92ZUNhbWVyYVRvRml0T2JqZWN0KGl0ZW0pO1xyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmNhbWVyYVBvc2l0aW9uRml4ZWQpIHtcclxuICAgICAgdGhpcy5fcm90YXRpb25TZXJ2aWNlLmVuYWJsZVJvdGF0aW9uRm9yKGl0ZW0pO1xyXG4gICAgfSBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuY2FtZXJhUG9zaXRpb25GaXhlZEFuZFNjcm9sbGJhcikge1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmRpc2FibGVSb3RhdGUoKTtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFab29tT3V0KCk7XHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuZGlzYWJsZVpvb20oKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9jYWxsQmFja0ZuV2hlbkJ1aWxkRmluaXNoZWQgPSB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmNhbWVyYUNvbmZpZykge1xyXG4gICAgICBhd2FpdCB0aGlzLl9keW5hbWljQ2FtZXJhU2VydmljZS5sb2FkQ3VzdG9tQ2FtZXJhU2V0dGluZ3MoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5lbmFibGUzREluUGhvdG8pIHtcclxuICAgICAgdGhpcy5fdGhyZWVkSW5QaG90b0luaXRpYWxpemVyU2VydmljZS5pbml0KG51bGwsIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLCB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUsIHRoaXMuX3NjZW5lU2VydmljZS5yZW5kZXJlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2F2ZSBjYW1lcmEgc2V0dGluZ3MgZm9yIHJlbmRlclxyXG4gICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XHJcbiAgICB0aGlzLl9uZXdSZW5kZXJTZXJ2aWNlLnN0YW5kQWxvbmVDYW1lcmFNYXRyaXggPSBBcnJheS5mcm9tKHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5lbGVtZW50cyk7XHJcbiAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2Uuc3RhbmRBbG9uZUZpcnN0QnVpbGRSZWFkeSA9IHRydWU7XHJcbiAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UucmVhZHlUb1JlbmRlci5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlVW5kZWZpbmVkRXJyb3JPY2N1cmVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93U2VsZWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93QW5zd2VycyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmNhbmNlbENvbmZpZ3VyaW5nQ3VycmVudEluc3RhbmNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVCdXR0b25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0QWRkQnV0dG9ucy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5lZGl0Q3VzdG9taXplQnV0dG9uLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLnJlc2l6ZUJ1dHRvbnMubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2V0U2VsZWN0ZWRFbGVtZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50UG9zaXRpb24oKTtcclxuICAgIHRoaXMuX3JlbW92ZUFsbEJ1dHRvbnMoKTtcclxuICAgIHRoaXMuc2hvd0VsZW1lbnRUb29sYmFyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVSZW5kZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0IHx8IHRoaXMuc2VsZWN0aW9uVG9DdXN0b21pemUpIHtcclxuICAgICAgdGhpcy5fcmVzZXRFbGVtZW50UG9zaXRpb24oKTtcclxuICAgICAgaWYgKHRoaXMuZWRpdEFkZEJ1dHRvbnMubGVuZ3RoIHx8IHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5sZW5ndGggPiAwIHx8IHRoaXMucmVzaXplQnV0dG9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3NpdGlvbkJ1dHRvbnMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFbGVtZW50VG9nZ2xlKGVsZW1lbnQ6IE1lc2gpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgIGNvbnN0IG9iajogQ3VzdG9tT2JqZWN0M0QgPSBlbGVtZW50ID8gZWxlbWVudC5wYXJlbnQgYXMgQ3VzdG9tT2JqZWN0M0QgOiB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0ICE9PSBvYmopIHtcclxuICAgICAgdGhpcy5zaG93RWxlbWVudFRvb2xiYXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0ID0gb2JqO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlRWxlbWVudE1lbnUoKTtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlQWRkQnV0dG9ucygpO1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5oYW5kbGVQYXJhbWV0cmljKSB7XHJcbiAgICAgICAgICB0aGlzLl9wcmVwYXJlT3RoZXJCdXR0b25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNob3VsZEJlSGlkZGVuOiBib29sZWFuID0gb2JqLnVzZXJEYXRhICYmIG9iai51c2VyRGF0YS5zZWxlY3Rpb24gJiYgb2JqLnVzZXJEYXRhLnNlbGVjdGlvbi5xdWVzdGlvbi5pbmRleE9mKCdbaGlkZGVuXScpID4gLTE7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmluc3RhbnRSZXBsYWNlKSB7XHJcbiAgICAgICAgICBpZiAoc2hvdWxkQmVIaWRkZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxFbGVtZW50UmVwbGFjZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zd2FwRWxlbWVudCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd0VsZW1lbnRUb29sYmFyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9yZXNldFNlbGVjdGVkRWxlbWVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVCdWlsZEZpbmlzaGVkKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IHZvaWQge1xyXG4gICAgdGhpcy5faXRlbVNlcnZpY2UuZ2xhc3NNYXRlcmlhbENoZWNrKHJlc3VsdC5mdXJuaXR1cmUpO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50ICYmIHJlc3VsdC5mdXJuaXR1cmUpIHtcclxuICAgICAgY29uc3QgaXRlbTogSXRlbSA9IHJlc3VsdC5mdXJuaXR1cmU7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEN1c3RvbU1lc2gpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QgPSA8Q3VzdG9tT2JqZWN0M0Q+dGhpcy5zZWxlY3RlZEVsZW1lbnQucGFyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3ByZXBhcmVBZGRCdXR0b25zKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fY2FsbEJhY2tGbldoZW5CdWlsZEZpbmlzaGVkICYmIHRoaXMuc3RhbmRBbG9uZSkge1xyXG4gICAgICB0aGlzLl9jYWxsQmFja0ZuV2hlbkJ1aWxkRmluaXNoZWQocmVzdWx0LmZ1cm5pdHVyZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldEVsZW1lbnRQb3NpdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudCAmJiAhdGhpcy5zdGFuZEFsb25lKSB7XHJcbiAgICAgIGNvbnN0IHlQb3M6IG51bWJlciA9ICgodGhpcy5zZWxlY3RlZEVsZW1lbnQuZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnkgLSB0aGlzLnNlbGVjdGVkRWxlbWVudC5nZW9tZXRyeS5ib3VuZGluZ0JveC5taW4ueSkgLyAyKTtcclxuICAgICAgY29uc3QgcG9zOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LmdldFdvcmxkUG9zaXRpb24ocG9zKTtcclxuICAgICAgcG9zLnkgKz0geVBvcztcclxuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRQb3NpdGlvbiA9IHRoaXMuX3NjZW5lU2VydmljZS5wb3NpdGlvbkluU2NlbmVUb1NjcmVlbihwb3MpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRQb3NpdGlvbiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZUFsbEJ1dHRvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVBZGRCdXR0b25zKCk7XHJcbiAgICB0aGlzLl9yZW1vdmVSZXNpemVCdXR0b25zKCk7XHJcbiAgICB0aGlzLl9yZW1vdmVDdXN0b21CdXR0b25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVDdXN0b21CdXR0b25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0Q3VzdG9taXplQnV0dG9uLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVBZGRCdXR0b25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0QWRkQnV0dG9ucy5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlUmVzaXplQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzaXplQnV0dG9ucy5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlRWRpdEl0ZW1zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0RWxlbWVudE1lbnUubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVFbGVtZW50TWVudSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JlbW92ZUVkaXRJdGVtcygpO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBPYmplY3RVdGlscy5HZXRTZWxlY3Rpb25Gcm9tU2VsZWN0ZWRPYmplY3QodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KTtcclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93RWRpdFBlbmNpbENvbmZpZ3VyYXRvciAmJiBzZWxlY3Rpb24pIHtcclxuICAgICAgbGV0IG9wdGlvbnM6IFNlbGVjdGlvbltdID0gdGhpcy5fZ2V0T3B0aW9uc0Zyb21TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKG8gPT4ge1xyXG4gICAgICAgIHJldHVybiBvLm5vZGVUeXBlID09PSAnT1BUJyAmJiB0aGlzLl9pT25lLmlzU2VsZWN0aW9uUHVibGlzaGVkKG8pO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBvcHRpb25zLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIHRoaXMuZWRpdEVsZW1lbnRNZW51LnB1c2gobmV3IEN1c3RvbUJ1dHRvbihvcHRpb25zW2ldLnF1ZXN0aW9uLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2Uuc2VsZWN0U2VsZWN0aW9uKG9wdGlvbnNbaV0sIHRoaXMuYWN0aXZlTWV0YWRhdGEpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5pbnN0YW50RWRpdE1lbnUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRTZWxlY3RlZEVsZW1lbnQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2FmdGVyTG9hZEZyb21QcmVzZXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9sb2FkaW5nRnJvbVByZXNldCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcHJvZ3Jlc3NTZXJ2aWNlLmZpbmlzaERvd25sb2FkcygpO1xyXG4gICAgaWYgKHRoaXMuX2l0ZW1zRnJvbVNjcmF0Y2gubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2l0ZW1zRnJvbVNjcmF0Y2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUoXHJcbiAgICAgICAgICB0aGlzLl9pdGVtc0Zyb21TY3JhdGNoW2ldLm1ldGFEYXRhLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5faXRlbXNGcm9tU2NyYXRjaC5sZW5ndGggPSAwO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2l0ZW1zTmVlZFVzZXJJbnB1dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5faXRlbXNOZWVkVXNlcklucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0ID0gYXdhaXQgdGhpcy5faGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKFxyXG4gICAgICAgICAgdGhpcy5faXRlbXNOZWVkVXNlcklucHV0W2ldLm1ldGFEYXRhLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYWRkVG9MaXN0KHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm9iamVjdExpc3QsIHJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5faXRlbXNOZWVkVXNlcklucHV0Lmxlbmd0aCA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm9iamVjdExpc3RGaXhlZC5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm9ic29sZXRlT2JqZWN0Q2FjaGUubGVuZ3RoID4gMCB8fFxyXG4gICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5ub3RGaXhlZE9iamVjdENhY2hlLmxlbmd0aCA+IDAgfHxcclxuICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uubm90TG9hZGVkLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZXRNb2RlbEVycm9yRGlhbG9nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0lPTkVPYmplY3Qobyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhby5pdGVtX3NjaGVtYSB8fCBvLmlvbmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlQWRkQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCk7XHJcbiAgICB0aGlzLl9yZW1vdmVBZGRCdXR0b25zKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgIC8vIGlmIChkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZmxhdF9yJyB8fFxyXG4gICAgICAvLyAgIGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdmbGF0X2wnIHx8XHJcbiAgICAgIC8vICAgZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZsYXRfZCcgfHxcclxuICAgICAgLy8gICBkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZmxhdF91JyB8fFxyXG4gICAgICAvLyAgIGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd2ZXJ0X3InIHx8XHJcbiAgICAgIC8vICAgZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlcnRfbCcgfHxcclxuICAgICAgLy8gICBkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAndmVydF9kJyB8fFxyXG4gICAgICAvLyAgIGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd2ZXJ0X3UnKSB7XHJcbiAgICAgIC8vICAgaWYgKGRlY29Ob2RlLmNvbm5lY3RvcnMpIHtcclxuICAgICAgLy8gICAgIGRlY29Ob2RlLmNvbm5lY3RvcnMuZm9yRWFjaChjID0+IGMubGlua2VkUmVwZWF0YWJsZXMgPSAnVCcpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgICBjb25zdCBsZW46IG51bWJlciA9IHNlbGVjdGlvbi5kZWNvTm9kZSA/IHNlbGVjdGlvbi5kZWNvTm9kZS5jb25uZWN0b3JzLmxlbmd0aCA6IDA7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjb25PYmplY3Q6IGFueSA9IHRoaXMuX2dldENvbm5lY3Rvck9iamVjdCh0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QsIHNlbGVjdGlvbi5kZWNvTm9kZS5jb25uZWN0b3JzW2ldLmNvbm5lY3Rvcik7XHJcbiAgICAgICAgaWYgKGNvbk9iamVjdCAmJiB0aGlzLl9jYW5TaG93QWRkQnV0dG9uKHNlbGVjdGlvbi5kZWNvTm9kZS5jb25uZWN0b3JzW2ldLCBjb25PYmplY3QpKSB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRBZGRCdXR0b25zLnB1c2gobmV3IEN1c3RvbUJ1dHRvbignJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFkZEJ1dHRvbkNsaWNrKHNlbGVjdGlvbiwgc2VsZWN0aW9uLmRlY29Ob2RlLmNvbm5lY3RvcnNbaV0sIHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbk9iamVjdCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS50cmF2ZXJzZSgoY2hpbGQpID0+IHtcclxuICAgICAgICBpZiAoY2hpbGQubmFtZSkge1xyXG4gICAgICAgICAgY29uc3QgY3VzdG9taXplQnV0dG9uOiBhbnkgPSBjaGlsZC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgncF8nKTtcclxuICAgICAgICAgIC8vIGNvbnN0IGN1c3RvbWl6ZU9wdGlvbjogYW55ID0gdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0LmdldE9iamVjdEJ5TmFtZSgpXHJcbiAgICAgICAgICBpZiAoY3VzdG9taXplQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uVG9DdXN0b21pemUgPSBjaGlsZC5wYXJlbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5wdXNoKG5ldyBDdXN0b21CdXR0b24oJycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ3VzdG9taXplQ2xpY2soKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRDb25uZWN0b3JPYmplY3Qob2JqOiBhbnksIGNvbm5lY3Rvcjogc3RyaW5nKTogYW55IHtcclxuICAgIGlmICghb2JqKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqRm91bmQgPSBvYmouZ2V0T2JqZWN0QnlOYW1lKGNvbm5lY3Rvcik7XHJcbiAgICBpZiAob2JqRm91bmQpIHtcclxuICAgICAgcmV0dXJuIG9iakZvdW5kO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKG9iai5wYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29ubmVjdG9yT2JqZWN0KG9iai5wYXJlbnQsIGNvbm5lY3Rvcik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldE9wcG9zaXRlQ29ubmVjdG9yUGFydHMoY29ubmVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29ubmVjdG9yUGFydHNBcnI6IHN0cmluZ1tdID0gY29ubmVjdG9yLnNwbGl0KCdfJyk7XHJcbiAgICBjb25uZWN0b3JQYXJ0c0Fyci5wb3AoKTsgLy8gcmVtb3ZlIG51bWJlclxyXG4gICAgY29uc3QgY29ubmVjdG9yVHlwZTogc3RyaW5nID0gY29ubmVjdG9yUGFydHNBcnJbY29ubmVjdG9yUGFydHNBcnIubGVuZ3RoIC0gMV07XHJcbiAgICBjb25uZWN0b3JQYXJ0c0Fycltjb25uZWN0b3JQYXJ0c0Fyci5sZW5ndGggLSAxXSA9IGNvbm5lY3RvclR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2YnID8gJ00nIDogJ0YnO1xyXG4gICAgcmV0dXJuIGNvbm5lY3RvclBhcnRzQXJyLmpvaW4oJ18nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVPdGhlckJ1dHRvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVSZXNpemVCdXR0b25zKCk7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudDogSXRlbSA9IE9iamVjdFV0aWxzLkdldFBhcmVudEl0ZW0odGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KTtcclxuICAgICAgaWYgKHBhcmVudCkgeyAvLyBoaWRlIGFsbCBjb25uZWN0b3JzXHJcbiAgICAgICAgcGFyZW50LnRyYXZlcnNlKG8gPT4ge1xyXG4gICAgICAgICAgaWYgKG8ubmFtZSAmJiBvLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjXycpKSB7XHJcbiAgICAgICAgICAgIG8udmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG90aGVyQ29ubmVjdG9yczogTWVzaFtdID0gPE1lc2hbXT50aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QuY2hpbGRyZW4uZmlsdGVyKFxyXG4gICAgICAgIGMgPT4gYyBpbnN0YW5jZW9mIE1lc2ggJiYgKGMubmFtZSAmJiAoYy5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnY19zY2FfJykgfHwgYy5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnY19yZXBfJykpKSk7XHJcbiAgICAgIG90aGVyQ29ubmVjdG9ycy5mb3JFYWNoKG8gPT4ge1xyXG4gICAgICAgIC8vIG8udmlzaWJsZSA9IHRydWVcclxuICAgICAgICB0aGlzLnJlc2l6ZUJ1dHRvbnMucHVzaChuZXcgQ3VzdG9tQnV0dG9uKCcnLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVSZXNpemVCdXR0b25DbGljayhvLm5hbWUsIHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCk7XHJcbiAgICAgICAgfSwgbykpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUFkZEJ1dHRvbkNsaWNrKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb25uZWN0b3I6IGFueSwgcGFyZW50OiBPYmplY3QzRCk6IHZvaWQge1xyXG4gICAgbGV0IGFmdGVyOiBib29sZWFuO1xyXG4gICAgaWYgKGNvbm5lY3Rvci5hZGRBZGp1c3QgPT09IDIpIHtcclxuICAgICAgYWZ0ZXIgPSBjb25uZWN0b3IuY29ubmVjdG9yLmluZGV4T2YoJ19NXycpID4gLTE7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuYmFzZUVsZW1lbnROb2RlSWQgPSBwYXJlbnQudXNlckRhdGEgJiYgcGFyZW50LnVzZXJEYXRhLnNlbGVjdGlvbiA/IHBhcmVudC51c2VyRGF0YS5zZWxlY3Rpb24ubm9kZUlkIDogMDtcclxuICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5hY3RpdmVDb25uZWN0b3IgPSBjb25uZWN0b3I7XHJcbiAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2Uuc2VsZWN0U2VsZWN0aW9uKFxyXG4gICAgICBzZWxlY3Rpb24sIHRoaXMuYWN0aXZlTWV0YWRhdGEsIGNvbm5lY3Rvci5saW5rZWRSZXBlYXRhYmxlcyAhPT0gJ1QnLCBhZnRlciwgY29ubmVjdG9yLmNvbm5lY3Rvcik7XHJcbiAgICB0aGlzLl9yZXNldFNlbGVjdGVkRWxlbWVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlUmVzaXplQnV0dG9uQ2xpY2soY29ubmVjdG9yOiBhbnksIHBhcmVudDogT2JqZWN0M0QpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNlcnZpY2UucmVzaXplRWxlbWVudChjb25uZWN0b3IsIHBhcmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYW5TaG93QWRkQnV0dG9uKGNvbm5lY3RvcjogYW55LCBjb25PYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICghY29uT2JqZWN0LmNvbm5lY3RlZCB8fCBjb25uZWN0b3IubGlua2VkUmVwZWF0YWJsZXMgPT09ICdUJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXBvc2l0aW9uQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5lZGl0QWRkQnV0dG9ucy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgdGhpcy5fcmVwb3NpdGlvbkJ1dHRvbih0aGlzLmVkaXRBZGRCdXR0b25zW2ldKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxlbnI6IG51bWJlciA9IHRoaXMucmVzaXplQnV0dG9ucy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCByOiBudW1iZXIgPSAwOyByIDwgbGVucjsgcisrKSB7XHJcbiAgICAgIHRoaXMuX3JlcG9zaXRpb25CdXR0b24odGhpcy5yZXNpemVCdXR0b25zW3JdKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxlbmM6IG51bWJlciA9IHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBjOiBudW1iZXIgPSAwOyBjIDwgbGVuYzsgYysrKSB7XHJcbiAgICAgIHRoaXMuX3JlcG9zaXRpb25CdXR0b24odGhpcy5lZGl0Q3VzdG9taXplQnV0dG9uW2NdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlcG9zaXRpb25CdXR0b24oYnV0dG9uOiBDdXN0b21CdXR0b24pOiB2b2lkIHtcclxuICAgIGNvbnN0IHBvczogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgYnV0dG9uLmRhdGEuZ2V0V29ybGRQb3NpdGlvbihwb3MpO1xyXG4gICAgY29uc3Qgc2NyZWVuUG9zOiBWZWN0b3IyID0gdGhpcy5fc2NlbmVTZXJ2aWNlLnBvc2l0aW9uSW5TY2VuZVRvU2NyZWVuKHBvcyk7XHJcbiAgICBidXR0b24ueFBvcyA9IHNjcmVlblBvcy54O1xyXG4gICAgYnV0dG9uLnlQb3MgPSBzY3JlZW5Qb3MueTtcclxuICAgIGNvbnN0IGRpc3RhbmNlVG9DYW06IG51bWJlciA9IHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnBvc2l0aW9uLmRpc3RhbmNlVG8ocG9zKTtcclxuICAgIGJ1dHRvbi5zaXplID0gKDQgLyBkaXN0YW5jZVRvQ2FtKSAqIDMwO1xyXG4gICAgYnV0dG9uLm9wYWNpdHkgPSBNYXRoLm1heCgwLjI1LCAxIC0gKE1hdGgubWF4KDcuMCwgKE1hdGgucm91bmQoZGlzdGFuY2VUb0NhbSAqIDEwKSAvIDEwKSkgLSA3KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRPcHRpb25zRnJvbVNlbGVjdGlvbihiYXNlU2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBTZWxlY3Rpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmdldE9wdGlvbnNGcm9tU2VsZWN0aW9uKGJhc2VTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQW5zd2VyQ291bnRSZWNlaXZlZChhbnN3ZXJDb3VudDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dBbnN3ZXJzID0gYW5zd2VyQ291bnQgPiAwO1xyXG4gICAgaWYgKHRoaXMuc2hvd0Fuc3dlcnMpIHtcclxuICAgICAgdGhpcy5zaG93TGl0ZVNlbGVjdG9yID0gIXRoaXMuX2xvYWRpbmdGcm9tUHJlc2V0O1xyXG4gICAgfS8qIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5faW5pdGlhbFN0YXJ0dXApIHtcclxuICAgICAgICAvLyB0aGlzLl9pT25lLmxvYWRTZWxlY3Rpb25zKCk7XHJcbiAgICAgICAgdGhpcy5faW5pdGlhbFN0YXJ0dXAgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSovXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVMb2FkSU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVKHNrdTogc3RyaW5nLCBzZXR0aW5nczogSG9tZWRlY29yYXRvckV4dGVybmFsU2V0dGluZ3NJbnRlcmZhY2UsIHBvc2l0aW9uOiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6PzogbnVtYmVyIH0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHRvYXN0ID0gbmV3IFRvYXN0KCk7XHJcbiAgICB0b2FzdC5tZXNzYWdlID0gJ01PREVMX0xPQURJTkcnO1xyXG4gICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3dUb2FzdCh0b2FzdCk7XHJcbiAgICBhd2FpdCB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5pbml0Q29ubmVjdG9yKFxyXG4gICAgICAgIHNldHRpbmdzID8gc2V0dGluZ3Muc2V0dGluZ3MgOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MsXHJcbiAgICAgICAgc2V0dGluZ3MgPyBzZXR0aW5ncy5uYW1lIDogdW5kZWZpbmVkLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgc2V0dGluZ3MgJiYgc2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2UgPyBzZXR0aW5ncy5leHRlcm5hbFNvdXJjZS5zb3VyY2VJZCA6IHVuZGVmaW5lZCk7XHJcbiAgICBjb25zdCBhcnRpY2xlOiBBcnRpY2xlID0gYXdhaXQgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UubG9hZEFydGljbGUoc2t1KTtcclxuICAgIGNvbnN0IGRyYWdnZWREYXRhOiBEcmFnZ2VkRGF0YSA9IHtcclxuICAgICAgbmFtZTogc2t1LFxyXG4gICAgICBjb25zdHJ1Y3RGbjogYXN5bmMgKHBvcykgPT4gdGhpcy5fbG9hZElPbmVGdXJuaXR1cmVGcm9tU2t1KHBvcywgc2t1LCBzZXR0aW5ncyksXHJcbiAgICAgIHR5cGU6IGl0ZW1UeXBlRnJvbVBsYWNlbWVudChhcnRpY2xlLnBsYWNlbWVudCksXHJcbiAgICAgIGlPbmU6IHRydWVcclxuICAgIH07XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuU2V0RHJhZywgZHJhZ2dlZERhdGEpO1xyXG4gICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLlN0YXJ0RHJhZywgcG9zaXRpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlQ29weUlPbmVGdXJuaXR1cmVJbnRvU2NlbmVCeVNLVShvcmlnaW5hbDogSXRlbSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdG9hc3QgPSBuZXcgVG9hc3QoKTtcclxuICAgIHRvYXN0Lm1lc3NhZ2UgPSAnTU9ERUxfTE9BRElORyc7XHJcbiAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvd1RvYXN0KHRvYXN0KTtcclxuICAgIG9yaWdpbmFsLm1ldGFkYXRhLmNvbnZlcnNpb25HVE1TZW5kID0gZmFsc2U7XHJcbiAgICBjb25zdCBkcmFnZ2VkRGF0YSA9IHtcclxuICAgICAgbmFtZTogb3JpZ2luYWwubWV0YWRhdGEuaXRlbUlkZW50aWZpZXIsXHJcbiAgICAgIGNvbnN0cnVjdEZuOiAocG9zKSA9PiB0aGlzLl9sb2FkSU9uZUZ1cm5pdHVyZUZyb21PcmlnaW5hbChvcmlnaW5hbC5tZXRhZGF0YSwgcG9zLCBvcmlnaW5hbC5yb3RhdGlvbiksXHJcbiAgICAgIHR5cGU6IG9yaWdpbmFsLm1ldGFkYXRhLml0ZW1UeXBlLFxyXG4gICAgICBpT25lOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLlNldERyYWcsIGRyYWdnZWREYXRhKTtcclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TdGFydERyYWcsIG9yaWdpbmFsLnBvc2l0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRJT25lRnVybml0dXJlRnJvbU9yaWdpbmFsKG1kOiBNZXRhZGF0YSwgcG9zOiBWZWN0b3IzLCByb3Q6IEV1bGVyKTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICBjb25zdCBuZXdNZXRhRGF0YSA9IHsuLi5tZH07XHJcbiAgICBuZXdNZXRhRGF0YS5yb3RhdGlvbiA9IG5ldyBFdWxlcigpLmNvcHkocm90KTtcclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUobmV3TWV0YURhdGEsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRJT25lRnVybml0dXJlRnJvbVNrdShcclxuICAgIHBvczogVmVjdG9yMywgc2t1OiBzdHJpbmcsIHNldHRpbmdzPzogSG9tZWRlY29yYXRvckV4dGVybmFsU2V0dGluZ3NJbnRlcmZhY2UsIHN0YW5kQWxvbmU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgY29uc3QgbWQ6IE1ldGFkYXRhID0ge1xyXG4gICAgICBwb3NpdGlvbjogcG9zLFxyXG4gICAgICBpdGVtSWRlbnRpZmllcjogc2t1LFxyXG4gICAgICBleHRlcm5hbFNldHRpbmdzOiBzZXR0aW5nc1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUobWQsIGZhbHNlLCB0cnVlLCBmYWxzZSwgc3RhbmRBbG9uZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlQ29weUluc3RhbmNlRm9yRnVybml0dXJlKGZ1cm5pdHVyZTogSXRlbVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IGZ1cm5pdHVyZS5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGN1c3RvbUl0ZW06IEl0ZW0gPSBmdXJuaXR1cmVbaV07XHJcbiAgICAgIGlmIChjdXN0b21JdGVtLm1ldGFkYXRhICYmIGN1c3RvbUl0ZW0ubWV0YWRhdGEuaXRlbUlkKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkSW5zdGFuY2U6IHN0cmluZyA9IGN1c3RvbUl0ZW0ubWV0YWRhdGEuaXRlbUlkO1xyXG4gICAgICAgIGNvbnN0IG5ld0luc3RhbmNlOiBzdHJpbmcgPSBhd2FpdCB0aGlzLl9pT25lLmNvcHlJbnN0YW5jZUFuZFNhdmVPcmlnaW5hbENvbmZpZ3VyYXRpb24ob2xkSW5zdGFuY2UsIG51bGwpO1xyXG4gICAgICAgIGN1c3RvbUl0ZW0ubWV0YWRhdGEuaXRlbUlkID0gbmV3SW5zdGFuY2U7XHJcbiAgICAgICAgY3VzdG9tSXRlbS51c2VyRGF0YS5pdGVtSWQgPSBuZXdJbnN0YW5jZTtcclxuICAgICAgICBjdXN0b21JdGVtLm1ldGFkYXRhLm9yaWdpbmFsSXRlbUlkID0gb2xkSW5zdGFuY2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUxvYWRJT25lRnVybml0dXJlRnJvbVByZXNldChmdXJuaXR1cmUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGV4dGVybmFsU291cmNlczogRXh0ZXJuYWxTb3VyY2VbXSA9IFtdO1xyXG4gICAgY29uc3QgY2F0YWxvZ0RhdGE6IENhdGFsb2dEZWZpbml0aW9uW10gPSBhd2FpdCB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5nZXRDYXRhbG9nRGVmaW5pdGlvbnNMaXN0KCk7XHJcbiAgICBpZiAoY2F0YWxvZ0RhdGEpIHtcclxuICAgICAgZm9yIChjb25zdCBjYXRhbG9nSXRlbSBvZiBjYXRhbG9nRGF0YSkge1xyXG4gICAgICAgIGlmIChjYXRhbG9nSXRlbS5leHRlcm5hbFNvdXJjZUlkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb25zdCBleHRlcm5hbERhdGE6IEV4dGVybmFsU291cmNlID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yQWRhcHRlclNlcnZpY2UuZ2V0RXh0ZXJuYWxTb3VyY2UoY2F0YWxvZ0l0ZW0uZXh0ZXJuYWxTb3VyY2VJZCk7XHJcbiAgICAgICAgICBpZiAoZXh0ZXJuYWxEYXRhKSB7XHJcbiAgICAgICAgICAgIGV4dGVybmFsU291cmNlcy5wdXNoKGV4dGVybmFsRGF0YSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBmdXJuaXR1cmUubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGlmIChmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncyAmJiBmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZUlkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBleHRlcm5hbFNvdXJjZU9iajogRXh0ZXJuYWxTb3VyY2UgPVxyXG4gICAgICAgICAgZXh0ZXJuYWxTb3VyY2VzLmZpbmQoc291cmNlID0+IHNvdXJjZS5zY2hlbWEgPT09IGZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzLnNldHRpbmdzLnNjaGVtYSk7XHJcbiAgICAgICAgaWYgKGV4dGVybmFsU291cmNlT2JqICYmIGV4dGVybmFsU291cmNlT2JqLnNjaGVtYSAhPT0gJycpIHtcclxuICAgICAgICAgIGlmIChmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5nc1sndXNlcm5hbWUnXSAhPT0gdW5kZWZpbmVkICYmIGZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzLnNldHRpbmdzWydwYXNzd29yZCddICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3NbJ3VzZXJuYW1lJ10gPSAnJztcclxuICAgICAgICAgICAgZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3NbJ3Bhc3N3b3JkJ10gPSAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzLmV4dGVybmFsU291cmNlSWQgPSBleHRlcm5hbFNvdXJjZU9iai5zb3VyY2VJZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3NvdXJjZSBub3QgYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRGdXJuaXR1cmVGcm9tSXRlbShmdXJuaXR1cmVbaV0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLlNob3VsZENvcHlGdXJuaXR1cmVGcm9tUHJlc2V0LCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRGdXJuaXR1cmVGcm9tSXRlbShpdGVtOiBhbnkpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoXHJcbiAgICAgIGl0ZW0ueHBvcywgaXRlbS55cG9zLCBpdGVtLnpwb3MpO1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB7XHJcbiAgICAgIGl0ZW1OYW1lOiBpdGVtLml0ZW1fbmFtZSxcclxuICAgICAgaXRlbURlc2NyaXB0aW9uOiBpdGVtLml0ZW1fZGVzY3JpcHRpb24sXHJcbiAgICAgIGl0ZW1JZDogaXRlbS5pdGVtX2lkLFxyXG4gICAgICBpdGVtSWRlbnRpZmllcjogaXRlbS5pdGVtX2lkZW50aWZpZXIsXHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogIWlzTmlsbChpdGVtLmNvbmZpZ3VyYWJsZSkgPyBpdGVtLmNvbmZpZ3VyYWJsZSA6IHRydWUsXHJcbiAgICAgIGlvbmU6IGl0ZW0uaW9uZSxcclxuICAgICAgc2NoZW1hOiBpdGVtLml0ZW1fc2NoZW1hLFxyXG4gICAgICByZXNpemFibGU6IGl0ZW0ucmVzaXphYmxlLFxyXG4gICAgICBlbGV2YXRpb246IGl0ZW0uZWxldmF0aW9uLFxyXG4gICAgICBlbGV2YXRpb25GaXhlZDogaXRlbS5lbGV2YXRpb25GaXhlZCxcclxuICAgICAgZWxldmF0aW9uQWRqdXN0YWJsZTogaXRlbS5lbGV2YXRpb25BZGp1c3RhYmxlLFxyXG4gICAgICBpdGVtVHlwZTogaXRlbS5pdGVtX3R5cGUsXHJcbiAgICAgIG1vZGVsVXJsOiBpdGVtLm1vZGVsX3VybCxcclxuICAgICAgdGV4dHVyZTogaXRlbS50ZXh0dXJlLFxyXG4gICAgICBwb3NpdGlvbjogcG9zaXRpb24sXHJcbiAgICAgIHJvdGF0aW9uOiBuZXcgRXVsZXIoMCwgaXRlbS5yb3RhdGlvbiwgMCksXHJcbiAgICAgIHNjYWxlOiBpdGVtLnNjYWxlLFxyXG4gICAgICBjZW50ZXJQaXZvdDogdHJ1ZSxcclxuICAgICAgaWdub3JlSW52aXNpYmxlOiBpdGVtLmlnbm9yZUludmlzaWJsZSxcclxuICAgICAgdXBkYXRlUGl2b3RPbkNyZWF0ZTogdHJ1ZSxcclxuICAgICAgb3BlbmluZzogaXRlbS5vcGVuaW5nLFxyXG4gICAgICBsb2NrZWQ6IGl0ZW0ubG9ja2VkLFxyXG4gICAgICBpdGVtR3JvdXA6IGl0ZW0uaXRlbUdyb3VwLFxyXG4gICAgICBkZWNvczogaXRlbS5kZWNvcyxcclxuICAgICAgc2VsZWN0aW9uczogaXRlbS5zZWxlY3Rpb25zLFxyXG4gICAgICBlbGVtZW50Q29uZmlndXJhdGlvbjogaXRlbS5lbGVtZW50Q29uZmlndXJhdGlvbixcclxuICAgICAgb25XYWxsOiBpdGVtLm9uV2FsbCxcclxuICAgICAgZXh0ZXJuYWxTZXR0aW5nczogaXRlbS5leHRlcm5hbFNldHRpbmdzLFxyXG4gICAgICBjb252ZXJzaW9uR1RNU2VuZDogaXRlbS5jb252ZXJzaW9uR1RNU2VuZCxcclxuICAgICAgY29udmVyc2lvblN1Ym1pdHRlZFByaWNlOiBpdGVtLmNvbnZlcnNpb25TdWJtaXR0ZWRQcmljZVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUoXHJcbiAgICAgIG1ldGFkYXRhLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKFxyXG4gICAgZnVybml0dXJlRGF0YTogTWV0YWRhdGEsXHJcbiAgICBzaG91bGRDb3B5SW5zdGFuY2U6IGJvb2xlYW4sXHJcbiAgICBsb29zZU9yaWdpbmFsQ29uZmlndXJhdGlvbjogYm9vbGVhbixcclxuICAgIGZyb21QcmVzZXQ6IGJvb2xlYW4sXHJcbiAgICBzdGFuZEFsb25lOiBib29sZWFuLFxyXG4gICAgZnJvbVNjcmF0Y2g6IGJvb2xlYW4sXHJcbiAgICBzaG93RXJyb3JEaWFsb2c6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgYXdhaXQgdGhpcy5fY29ubmVjdG9yQWRhcHRlclNlcnZpY2UuaW5pdENvbm5lY3RvcihcclxuICAgICAgICBmdXJuaXR1cmVEYXRhLmV4dGVybmFsU2V0dGluZ3MgPyBmdXJuaXR1cmVEYXRhLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3MgOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MsXHJcbiAgICAgICAgZnVybml0dXJlRGF0YS5leHRlcm5hbFNldHRpbmdzID8gZnVybml0dXJlRGF0YS5leHRlcm5hbFNldHRpbmdzLm5hbWUgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgZnVybml0dXJlRGF0YS5leHRlcm5hbFNldHRpbmdzICYmIGZ1cm5pdHVyZURhdGEuZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZSA/IGZ1cm5pdHVyZURhdGEuZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZS5zb3VyY2VJZCA6IG51bGxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0ID1cclxuICAgICAgYXdhaXQgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UubG9hZEZ1cm5pdHVyZShcclxuICAgICAgICBmdXJuaXR1cmVEYXRhLCBzaG91bGRDb3B5SW5zdGFuY2UsIGxvb3NlT3JpZ2luYWxDb25maWd1cmF0aW9uLCBzdGFuZEFsb25lLCBmcm9tU2NyYXRjaCwgZnJvbVByZXNldClcclxuICAgICAgICAuY2F0Y2goKGVycm9yUmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoKHR5cGVvZiBlcnJvclJlc3VsdCA9PT0gJ3N0cmluZycgJiYgZXJyb3JSZXN1bHQgPT09ICdFQ09OTkFCT1JURUQnKSB8fFxyXG4gICAgICAgICAgICBlcnJvclJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLlRpbWVvdXQgKSB7IC8vIHRpbWVvdXRcclxuICAgICAgICAgICAgZXJyb3JSZXN1bHQgPSBuZXcgQ3VzdG9tRmxvb3JHcm91cFJlc3VsdChmdXJuaXR1cmVEYXRhLml0ZW1JZGVudGlmaWVyLCBmdXJuaXR1cmVEYXRhLml0ZW1OYW1lKTtcclxuICAgICAgICAgICAgZXJyb3JSZXN1bHQuZXJyb3JNZXNzYWdlcy5wdXNoKG5ldyBFcnJvck1lc3NhZ2UoJ1RJTUVPVVQnKSk7XHJcbiAgICAgICAgICAgIGVycm9yUmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLlRpbWVvdXQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuRmluaXNoZWRJT25lRnVybml0dXJlQnVpbGQpO1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZXJyb3JSZXN1bHQsIHNob3dFcnJvckRpYWxvZyk7XHJcbiAgICAgICAgICByZXR1cm4gZXJyb3JSZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuRmluaXNoZWRJT25lRnVybml0dXJlQnVpbGQpO1xyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuQnVpbGRGcm9tU2NyYXRjaCkge1xyXG4gICAgICAgIGlmIChmcm9tUHJlc2V0KSB7IC8vIHN0YXJ0IGNvbmZpZ3VyaW5nIHdoZW4gbG9hZGluZyBpcyBkb25lXHJcbiAgICAgICAgICByZXN1bHQubWV0YURhdGEgPSB7Li4uZnVybml0dXJlRGF0YX07XHJcbiAgICAgICAgICB0aGlzLl9pdGVtc0Zyb21TY3JhdGNoLnB1c2gocmVzdWx0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZnVybml0dXJlRGF0YS5wb3NpdGlvbiA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0Q2VudGVyKCk7XHJcbiAgICAgICAgICBpZiAoIXN0YW5kQWxvbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nU2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBEaWFsb2dUeXBlLldhcm5pbmcsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KCdCVUlMRF9QUk9EVUNUX0ZST01fU0NSQVRDSCcpLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZXM6IFt7bWVzc2FnZTogdGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KCdNT0RFTF9IQVNfTk9fREVGQVVMVFMnKX1dXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUxvYWRBbmRCdWlsZEZ1cm5pdHVyZShmdXJuaXR1cmVEYXRhLCBmYWxzZSwgdHJ1ZSwgZnJvbVByZXNldCwgc3RhbmRBbG9uZSwgdHJ1ZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1ldGFkYXRhID0gcmVzdWx0ID8gcmVzdWx0Lm1ldGFEYXRhIDogbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5lZWRzVXNlcklucHV0KSB7XHJcbiAgICAgICAgcmVzdWx0Lm1ldGFEYXRhID0gey4uLmZ1cm5pdHVyZURhdGF9O1xyXG4gICAgICAgIGlmIChmcm9tUHJlc2V0KSB7IC8vIHN0YXJ0IGNvbmZpZ3VyaW5nIHdoZW4gbG9hZGluZyBpcyBkb25lXHJcbiAgICAgICAgICB0aGlzLl9pdGVtc05lZWRVc2VySW5wdXQucHVzaChyZXN1bHQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXN1bHQubWV0YURhdGEucG9zaXRpb24gPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldENlbnRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuRXh0ZXJuYWxTb3VyY2VOb3RBdmFpbGFibGUpIHtcclxuICAgICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5hZGRUb0xpc3QodGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuZXh0ZXJuYWxTb3VyY2VOb3RBdmFpbGFibGUsIHJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdC5mdXJuaXR1cmUpIHtcclxuICAgICAgICBpZiAoc2hvdWxkQ29weUluc3RhbmNlKSB7XHJcbiAgICAgICAgICBjb25zdCBjbG9zZXN0V2FsbEVkZ2U6IEhhbGZFZGdlID0gdGhpcy5fcm9vbVNlcnZpY2UuZ2V0Q2xvc2VzdFdhbGxFZGdlKHJlc3VsdC5mdXJuaXR1cmUucG9zaXRpb24ueCwgcmVzdWx0LmZ1cm5pdHVyZS5wb3NpdGlvbi56KTtcclxuICAgICAgICAgIGlmIChyZXN1bHQuZnVybml0dXJlIGluc3RhbmNlb2YgQ3VzdG9tV2FsbEZsb29ySXRlbSAmJiByZXN1bHQuZnVybml0dXJlLm9uV2FsbCkge1xyXG4gICAgICAgICAgICAocmVzdWx0LmZ1cm5pdHVyZSBhcyBDdXN0b21XYWxsRmxvb3JJdGVtKS5wbGFjZU9uRWRnZShjbG9zZXN0V2FsbEVkZ2UpO1xyXG4gICAgICAgICAgICByZXN1bHQuZnVybml0dXJlLm1vdmVGcm9tRmxvb3JUb1dhbGwoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmZ1cm5pdHVyZSBpbnN0YW5jZW9mIFdhbGxJdGVtICYmICEocmVzdWx0LmZ1cm5pdHVyZSBpbnN0YW5jZW9mIEN1c3RvbVdhbGxGbG9vckl0ZW0pKSB7XHJcbiAgICAgICAgICAgIChyZXN1bHQuZnVybml0dXJlIGFzIFdhbGxJdGVtKS5wbGFjZU9uRWRnZShjbG9zZXN0V2FsbEVkZ2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LmZ1cm5pdHVyZSBpbnN0YW5jZW9mIEN1c3RvbVdhbGxJdGVtICYmIHN0YW5kQWxvbmUpIHtcclxuICAgICAgICAgIHJlc3VsdC5mdXJuaXR1cmUucG9zaXRpb24ueSArPSByZXN1bHQuZnVybml0dXJlLmhhbGZTaXplLnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5PYnNvbGV0ZSkge1xyXG4gICAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYWRkVG9MaXN0KHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm9ic29sZXRlT2JqZWN0Q2FjaGUsIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5Mb2FkZWQpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQubWV0YURhdGEuY29uZmlndXJhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYmplY3RMaXN0LCByZXN1bHQpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYWRkVG9MaXN0KHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLnNpbXBsZU9iamVjdExpc3QsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQpIHtcclxuICAgICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYmplY3RMaXN0Rml4ZWQsIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9hZGRUb1NjZW5lR1RNKHJlc3VsdC5mdXJuaXR1cmUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWZyb21QcmVzZXQpIHtcclxuICAgICAgdGhpcy5fcHJvZ3Jlc3NTZXJ2aWNlLmZpbmlzaERvd25sb2FkcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmVNZXRhZGF0YSA9IHJlc3VsdCA/IHJlc3VsdC5tZXRhRGF0YSA6IG51bGw7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Fuc3dlclNlbGVjdGVkKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYWRkVG9MaXN0KHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm9iamVjdExpc3QsIHJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVFcnJvcihlcnJvcjogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCwgc2hvd0RpYWxvZzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGVycm9yLmluc3RhbmNlSWQgfHwgZXJyb3Iuc2t1KSB7XHJcbiAgICAgIHN3aXRjaCAoZXJyb3IucmVzdWx0VHlwZSkge1xyXG4gICAgICAgIGNhc2UgUmVzdWx0VHlwZS5BcnRpY2xlTm90Rm91bmQ6XHJcbiAgICAgICAgY2FzZSBSZXN1bHRUeXBlLlRpbWVvdXQ6XHJcbiAgICAgICAgY2FzZSBSZXN1bHRUeXBlLkNvbmZpZ3VyYXRpb25Ob3RGaXhlZDpcclxuICAgICAgICBjYXNlIFJlc3VsdFR5cGUuR2FtZW9iamVjdE5hbWVNaXNtYXRjaEluU291cmNlOlxyXG4gICAgICAgIGNhc2UgUmVzdWx0VHlwZS5Ob1NlbGVjdGlvbnM6XHJcbiAgICAgICAgY2FzZSBSZXN1bHRUeXBlLk5vRGVjb05vZGVzOlxyXG4gICAgICAgIGNhc2UgUmVzdWx0VHlwZS5FeHRlcm5hbFNvdXJjZU5vdEF2YWlsYWJsZTpcclxuICAgICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm5vdExvYWRlZC5wdXNoKGVycm9yKTtcclxuICAgICAgICAgIGlmIChzaG93RGlhbG9nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nob3dXYXJuaW5nKHt0aXRsZTogJ0VSUk9SJywgbWVzc2FnZXM6IGVycm9yLmVycm9yTWVzc2FnZXN9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5ub3RMb2FkZWQucHVzaChlcnJvcik7XHJcbiAgICAgICAgICBpZiAoc2hvd0RpYWxvZykge1xyXG4gICAgICAgICAgICB0aGlzLl9zaG93V2FybmluZyh7dGl0bGU6ICdFUlJPUicsIG1lc3NhZ2VzOiBbbmV3IEVycm9yTWVzc2FnZSgnRVJST1JfTE9BRElOR19GVVJOSVRVUkUnKV19KTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHNob3dEaWFsb2cpIHtcclxuICAgICAgICB0aGlzLl9zaG93V2FybmluZyh7dGl0bGU6ICdFUlJPUicsIG1lc3NhZ2VzOiBbbmV3IEVycm9yTWVzc2FnZSgnRVJST1JfTE9BRElOR19GVVJOSVRVUkUnKV19KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLlVuZGVmaW5lZEVycm9yT2NjdXJlZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVDb25maWd1cmVNb2RlQ2hhbmdlKGNvbmZpZ3VyaW5nTW9kZUNoYW5nZTogQ29uZmlndXJpbmdNb2RlQ2hhbmdlSW50ZXJmYWNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5zdGFuZEFsb25lKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChjb25maWd1cmluZ01vZGVDaGFuZ2UuY29uZmlndXJpbmcpIHtcclxuICAgICAgdGhpcy5faU9uZS5lbXB0eVNlbGVjdGlvbnMoKTtcclxuICAgICAgdGhpcy5fYXBwU3RhdGVTZXJ2aWNlLnVuZG9EaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2FwcFN0YXRlU2VydmljZS5yZWRvRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmFjdGl2ZU1ldGFkYXRhID0gY29uZmlndXJpbmdNb2RlQ2hhbmdlLm1ldGFkYXRhO1xyXG4gICAgICB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUoXHJcbiAgICAgICAgY29uZmlndXJpbmdNb2RlQ2hhbmdlLm1ldGFkYXRhLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYXBwU3RhdGVTZXJ2aWNlLnVuZG9EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9hcHBTdGF0ZVNlcnZpY2UucmVkb0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dBbnN3ZXJzID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTZWxlY3Rpb25zID0gY29uZmlndXJpbmdNb2RlQ2hhbmdlLmNvbmZpZ3VyaW5nIHx8IHRoaXMuc3RhbmRBbG9uZTtcclxuICAgIHRoaXMuc2hvd0xpdGVTZWxlY3RvciA9IGNvbmZpZ3VyaW5nTW9kZUNoYW5nZS5jb25maWd1cmluZyB8fCB0aGlzLnN0YW5kQWxvbmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZGRNb2RlbERpYWxvZ1Rvb2xiYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb25Nb2RlbHMsXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDgwMFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG93V2FybmluZyhjb25maWc6IERpYWxvZ0NvbmZpZykge1xyXG4gICAgdGhpcy5fZGlhbG9nU2VydmljZS5zaG93RGlhbG9nKHtkYXRhOiBjb25maWd9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2FkZFRvU2NlbmVHVE0oZnVybml0dXJlOiBJdGVtKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoZnVybml0dXJlICYmIGZ1cm5pdHVyZS5tZXRhZGF0YSkge1xyXG4gICAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoZnVybml0dXJlLm1ldGFkYXRhLml0ZW1JZGVudGlmaWVyKTtcclxuICAgICAgY29uc3QgYXJ0aWNsZUZ1bGxPYmplY3QgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xyXG4gICAgICBsZXQgYXJ0aWNsZUNhdGVnb3JpZXM6IEFydGljbGVDYXRlZ29yeVtdO1xyXG4gICAgICBpZiAoYXJ0aWNsZUZ1bGxPYmplY3QgJiYgYXJ0aWNsZUZ1bGxPYmplY3QucHVibGljYXRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGFydGljbGVDYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yQWRhcHRlclNlcnZpY2UuZ2V0QXJ0aWNsZUNhdGVnb3JpZXMoYXJ0aWNsZUZ1bGxPYmplY3QucHVibGljYXRpb24pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAnYXJ0aWNsZU5yJzogZnVybml0dXJlLm1ldGFkYXRhLml0ZW1JZGVudGlmaWVyLFxyXG4gICAgICAgICdwcm9kdWN0JzogZnVybml0dXJlLm1ldGFkYXRhLml0ZW1OYW1lLFxyXG4gICAgICAgICdzY2hlbWEnOiBmdXJuaXR1cmUubWV0YWRhdGEuc2NoZW1hXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChmdXJuaXR1cmUubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxEYXRhID0ge1xyXG4gICAgICAgICAgJ2V4dGVybmFsU291cmNlTmFtZSc6IGZ1cm5pdHVyZS5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzLm5hbWUsXHJcbiAgICAgICAgICAnZXh0ZXJuYWxTb3VyY2VVcmwnOiBmdXJuaXR1cmUubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncy51cmxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGRhdGEgPSB7Li4uZGF0YSwgLi4uZXh0ZXJuYWxEYXRhfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXJ0aWNsZUZ1bGxPYmplY3QpIHtcclxuICAgICAgICBjb25zdCBhcnRpY2xlRGF0YSA9IHtcclxuICAgICAgICAgICdicmFuZElkJzogYXJ0aWNsZUZ1bGxPYmplY3QuYnJhbmRJZCxcclxuICAgICAgICAgICdyZXRhaWxGb3JtdWxhcyc6IGFydGljbGVGdWxsT2JqZWN0LnJldGFpbEZvcm11bGFzLFxyXG4gICAgICAgICAgJ3R1cm5PdmVyR3JvdXAnOiBhcnRpY2xlRnVsbE9iamVjdC50dXJuT3Zlckdyb3VwXHJcbiAgICAgICAgfTtcclxuICAgICAgICBkYXRhID0gey4uLmRhdGEsIC4uLmFydGljbGVEYXRhfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXJ0aWNsZUNhdGVnb3JpZXMpIHtcclxuICAgICAgICBjb25zdCBjYXRlZ29yeUxpc3QgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGFydGljbGVDYXRlZ29yaWVzKSB7XHJcbiAgICAgICAgICBpZiAoY2F0ZWdvcnkuZGVzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgY2F0ZWdvcnlMaXN0LnB1c2goY2F0ZWdvcnkuZGVzY3JpcHRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjYXRlZ29yeURhdGEgPSB7XHJcbiAgICAgICAgICAnY2F0ZWdvcmllcyc6IGNhdGVnb3J5TGlzdFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZGF0YSA9IHsuLi5kYXRhLCAuLi5jYXRlZ29yeURhdGF9O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2dvb2dsZVRhZ01hbmFnZXIuc2VuZEV2ZW50KEdvb2dsZVRhZ01hbmFnZXJFdmVudC5BZGRUb1NjZW5lLCBkYXRhKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHJwLWxpdGUtc2VsZWN0b3IgKm5nSWY9XCIhc3RhbmRBbG9uZVwiIGNsYXNzPVwiZmxvYXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICBbKHNob3cpXT1cInNob3dMaXRlU2VsZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICBbbWV0YWRhdGFdPVwiYWN0aXZlTWV0YWRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd1NlbGVjdGlvbnNdPVwic2hvd1NlbGVjdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0Fuc3dlcnNdPVwic2hvd0Fuc3dlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAoc2hvd0NoYW5nZSk9XCJoYW5kbGVTaG93Q2hhbmdlU2VsZWN0b3IoJGV2ZW50KVwiXHJcbj48L3JwLWxpdGUtc2VsZWN0b3I+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93RWxlbWVudFRvb2xiYXJcIj5cclxuICA8cnAtZWxlbWVudC10b29sYmFyIGNsYXNzPVwicnAtZWxlbWVudC10b29sYmFyIGZsb2F0aW5nXCIgW2NsYXNzLmN1c3RvbV09XCJzdGFuZEFsb25lXCIgQHNob3dFbGVtZW50VG9vbGJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgW2VkaXRNZW51XT1cImVkaXRFbGVtZW50TWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd1N3YXBdPVwic2hvd1N3YXBCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dQb2ludGVyXT1cInNlbGVjdGVkRWxlbWVudFBvc2l0aW9uICE9PSB1bmRlZmluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKHN3YXBDbGlja2VkKT1cInN3YXBFbGVtZW50KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZUNsaWNrZWQpPVwiZGVsZXRlRWxlbWVudCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChhbmltYXRpb25DbGlja2VkKT1cIm9wZW5BbmltYXRpb25TaWRlYmFyKClcIlxyXG4gID48L3JwLWVsZW1lbnQtdG9vbGJhcj5cclxuICA8cnAtZWxlbWVudC1idXR0b25zIGNsYXNzPVwicnAtZWxlbWVudC1idXR0b25zIGZsb2F0aW5nXCIgQHNob3dFbGVtZW50VG9vbGJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRQb2ludGVyXT1cImVsZW1lbnRUb29sYmFyPy5lbGVtZW50UG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYWRkQnV0dG9uc109XCJlZGl0QWRkQnV0dG9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9taXplQnV0dG9uc109XCJlZGl0Q3VzdG9taXplQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtyZXNpemVCdXR0b25zXT1cInJlc2l6ZUJ1dHRvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRQb3NpdGlvbl09XCJzZWxlY3RlZEVsZW1lbnRQb3NpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY3VzdG9taXplQnV0dG9uQ2xpY2tlZCk9XCJoYW5kbGVDdXN0b21pemVDbGljaygpXCJcclxuICA+PC9ycC1lbGVtZW50LWJ1dHRvbnM+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDdXN0b21pemVCdXR0b25zXCI+XHJcbiAgPHJwLWVsZW1lbnQtYnV0dG9ucyBjbGFzcz1cInJwLWVsZW1lbnQtYnV0dG9ucyBmbG9hdGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZWxlbWVudFBvaW50ZXJdPVwiZWxlbWVudFRvb2xiYXI/LmVsZW1lbnRQb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21pemVCdXR0b25zXT1cImVkaXRDdXN0b21pemVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRQb3NpdGlvbl09XCJzZWxlY3RlZEVsZW1lbnRQb3NpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY3VzdG9taXplQnV0dG9uQ2xpY2tlZCk9XCJoYW5kbGVDdXN0b21pemVDbGljaygpXCJcclxuICA+PC9ycC1lbGVtZW50LWJ1dHRvbnM+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0b29sYmFySWNvbk1vZGVscz5cclxuICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICBtYXRJY29uPVwiZm9ybWF0X2xpc3RfYnVsbGV0ZWRcIlxyXG4gICAgdG9vbHRpcD1cInt7aWNvbk5hbWUuT2JqZWN0cyB8IGxvY2FsaXplfX1cIlxyXG4gICAgKG9uQ2xpY2spPVwic2V0TW9kZWxFcnJvckRpYWxvZygpXCJcclxuICAgIFtzaG93TGFiZWxdPVwic2hvdWxkU2hvd0xhYmVsXCJcclxuICA+PC9ycC10b29sYmFyLWljb24+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NlbGVjdGVkVGhyZWVkT2JqZWN0QW5pbWF0aW9uU2lkZWJhcj5cclxuICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiIFt0ZXh0Q29udGVudF09XCInQU5JTUFURScgfCBsb2NhbGl6ZVwiPjwvaDI+XHJcbiAgPC9oZWFkZXI+XHJcbiAgPHJwLWFuaW1hdGlvbj5cclxuXHJcbiAgPC9ycC1hbmltYXRpb24+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NlbGVjdGVkVGhyZWVkT2JqZWN0Q3VzdG9taXphdGlvblNpZGViYXI+XHJcbiAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwiJ0NVU1RPTUlaRScgfCBsb2NhbGl6ZVwiPjwvaDI+XHJcbiAgPC9oZWFkZXI+XHJcbiAgPHJwLWN1c3RvbWl6ZXJcclxuICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uVG9DdXN0b21pemVcIlxyXG4gID48L3JwLWN1c3RvbWl6ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48ZGl2IGNsYXNzPVwic2xpZGVyLWNvbnRhaW5lclwiPlxyXG4gIDxycC1lbGVtZW50LXNsaWRlciBjbGFzcz1cInJwLWVsZW1lbnQtc2xpZGVyXCI+PC9ycC1lbGVtZW50LXNsaWRlcj5cclxuPC9kaXY+XHJcbiJdfQ==
1142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWVkc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFlLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFZLGFBQWEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFJakgsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDckYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBVyxRQUFRLEVBQUUsYUFBYSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbEYsT0FBTyxFQUFDLFVBQVUsRUFBaUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7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LGlDQUFpQztvQkFDOUMsU0FBUyxFQUFFLENBQUMsaUNBQWlDLENBQUM7b0JBQzlDLFVBQVUsRUFBRTt3QkFDVixPQUFPLENBQUMsb0JBQW9CLEVBQUU7NEJBQzVCLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUMsU0FBUyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7NEJBQ3RDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUMsU0FBUyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7NEJBQ25DLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO3lCQUMvQyxDQUFDO3FCQUNILENBQUE7cUVBQ2dEO2lCQUNsRDtxMUNBSW1ELGlCQUFpQjtzQkFBbEUsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ3VCLHdDQUF3QztzQkFBOUcsU0FBUzt1QkFBQywwQ0FBMEMsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0Ysb0NBQW9DO3NCQUF0RyxTQUFTO3VCQUFDLHNDQUFzQyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJMUQsc0JBQXNCO3NCQUg1QixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7c0JBRW5ELE1BQU07Z0JBSUEsVUFBVTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb2xvciwgRXVsZXIsIExpZ2h0LCBNZXNoLCBPYmplY3QzRCwgUGxhbmVHZW9tZXRyeSwgU2hhcGUsIFNoYXBlR2VvbWV0cnksIFZlY3RvcjIsIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb24nO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQge0FydGljbGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZSc7XHJcbmltcG9ydCB7SWNvbk5hbWV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9pY29uLW5hbWUuZW51bSc7XHJcbmltcG9ydCB7RWxlbWVudFRvb2xiYXJDb21wb25lbnR9IGZyb20gJy4uL2VsZW1lbnQtdG9vbGJhci9lbGVtZW50LXRvb2xiYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtDdXN0b21CdXR0b259IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvY3VzdG9tLWJ1dHRvbic7XHJcbmltcG9ydCB7SGFsZkVkZ2UsIFdhbGxJdGVtLCBXYWxsSXRlbUdyb3VwfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1vYmplY3RzJztcclxuaW1wb3J0IHtDdXN0b21NZXNoLCBDdXN0b21PYmplY3QzRH0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1vYmplY3RzJztcclxuaW1wb3J0IHtpc0l0ZW1Hcm91cFR5cGUsIGlzV2FsbEl0ZW1Hcm91cFR5cGUsIGl0ZW1UeXBlRnJvbVBsYWNlbWVudH0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2ZhY3RvcnknO1xyXG5pbXBvcnQge01ldGFkYXRhfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvbWV0YWRhdGEnO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtR3JvdXB9IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtLWdyb3VwJztcclxuaW1wb3J0IHtDdXN0b21GbG9vckdyb3VwUmVzdWx0fSBmcm9tICcuLi8uLi9jb3JlM2QvbW9kZWwvY3VzdG9tLWZsb29yLWdyb3VwLXJlc3VsdCc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtTY3JlZW5TaXplQW5hbHlzaXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2NyZWVuLXNpemUtYW5hbHlzaXMvc2NyZWVuLXNpemUtYW5hbHlzaXMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7TG9hZEZ1cm5pdHVyZVNlcnZpY2V9IGZyb20gJy4vc2VydmljZS9sb2FkLWZ1cm5pdHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdWlsZEZ1cm5pdHVyZVNlcnZpY2UsIENvbmZpZ3VyaW5nTW9kZUNoYW5nZUludGVyZmFjZX0gZnJvbSAnLi9zZXJ2aWNlL2J1aWxkLWZ1cm5pdHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJbnRlZ3JhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9pbnRlZ3JhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yRGljdGlvbmFyeVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWRpY3Rpb25hcnkuc2VydmljZSc7XHJcbmltcG9ydCB7VG9hc3RTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGlhbG9nL3NlcnZpY2UvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVPcHRpb25zU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUtb3B0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHtEaW1lbnNpb25zU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlL2RpbWVuc2lvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29ycGxhblNlcnZpY2V9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL2Zsb29ycGxhbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1pY29uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FyU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvYXIuc2VydmljZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Vycm9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2Vycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JvdGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvcm90YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7Um9vbVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL3Jvb20uc2VydmljZSc7XHJcbmltcG9ydCB7QXBwU3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvYXBwLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Byb2dyZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3Byb2dyZXNzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FuaW1hdGlvblNlcnZpY2V9IGZyb20gJy4vc2VydmljZS9hbmltYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7UmVzaXplU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlL3Jlc2l6ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDdXN0b21pemVyU2VydmljZX0gZnJvbSAnLi4vLi4vbGl0ZS1zZWxlY3Rvci9saXRlLXNlbGVjdG9yL3NlcnZpY2UvY3VzdG9taXplci5zZXJ2aWNlJztcclxuaW1wb3J0IHtEeW5hbWljQ2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2R5bmFtaWMtY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RocmVlZEluUGhvdG9Jbml0aWFsaXplclNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZC1pbi1waG90by9zZXJ2aWNlcy90aHJlZWQtaW4tcGhvdG8taW5pdGlhbGl6ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7UmVuZGVyU2VydmljZX0gZnJvbSAnLi4vLi4vcmVuZGVyL3NlcnZpY2UvcmVuZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge05ld1JlbmRlclNlcnZpY2V9IGZyb20gJy4uLy4uL3JlbmRlci9zZXJ2aWNlL25ldy1yZW5kZXIuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtTY3JlZW5TaXplSW5mb30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NjcmVlbi1zaXplLWFuYWx5c2lzL3NjcmVlbi1zaXplLWluZm8nO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL29iamVjdC51dGlscyc7XHJcbmltcG9ydCB7TW9kZWxEaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbC1kaWFsb2cvbW9kZWwtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7U2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9pbnRlcmZhY2Uvc2NlbmUtb3B0aW9uLWJ1dHRvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtEaWFsb2dDb25maWd9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kaWFsb2cvaW50ZXJmYWNlL2RpYWxvZy1jb25maWcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtEaWFsb2dUeXBlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGlhbG9nL2VudW0vZGlhbG9nLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7RXJyb3JNZXNzYWdlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL2Vycm9yLW1lc3NhZ2UnO1xyXG5pbXBvcnQge1Jlc3VsdFR5cGV9IGZyb20gJy4uLy4uL2NvcmUzZC9lbnVtL3Jlc3VsdC10eXBlLmVudW0nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JFeHRlcm5hbFNldHRpbmdzSW50ZXJmYWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9ob21lZGVjb3JhdG9yLWV4dGVybmFsLXNldHRpbmdzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7VG9hc3R9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvdG9hc3QnO1xyXG5pbXBvcnQge0RyYWdnZWREYXRhfSBmcm9tICcuLi8uLi9jb3JlM2QvaW50ZXJmYWNlL2RyYWdnZWQtZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtDdXN0b21XYWxsRmxvb3JJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLXdhbGwtZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7Q3VzdG9tV2FsbEl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20td2FsbC1pdGVtJztcclxuaW1wb3J0IHtHb29nbGVUYWdNYW5hZ2VyRXZlbnR9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9nb29nbGUtdGFnLW1hbmFnZXItZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7Q2FtZXJhU2V0dGluZ3NEaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jYW1lcmEtc2V0dGluZ3MtZGlhbG9nL2NhbWVyYS1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtBcnRpY2xlQ2F0ZWdvcnl9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1jYXRlZ29yeSc7XHJcbmltcG9ydCB7RXh0ZXJuYWxTb3VyY2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLXNvdXJjZS5ibyc7XHJcbmltcG9ydCB7Q2F0YWxvZ0RlZmluaXRpb259IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2NhdGFsb2ctZGVmaW5pdGlvbi5ibyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JwLXRocmVlZHNlbGVjdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGhyZWVkc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RocmVlZHNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignc2hvd0VsZW1lbnRUb29sYmFyJywgW1xyXG4gICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsnb3BhY2l0eSc6ICcwJ30pKSxcclxuICAgICAgc3RhdGUoJyonLCBzdHlsZSh7J29wYWNpdHknOiAnMSd9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIGFuaW1hdGUoJzUwMG1zIGVhc2UnKSlcclxuICAgIF0pXHJcbiAgXS8qLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoKi9cclxufSlcclxuZXhwb3J0IGNsYXNzIFRocmVlZHNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHB1YmxpYyByZWFkb25seSBpY29uTmFtZTogdHlwZW9mIEljb25OYW1lID0gSWNvbk5hbWU7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uTW9kZWxzJywgeyBzdGF0aWM6IHRydWUgfSkgdG9vbGJhckljb25Nb2RlbHM6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRUaHJlZWRPYmplY3RDdXN0b21pemF0aW9uU2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBzZWxlY3RlZFRocmVlZE9iamVjdEN1c3RvbWl6YXRpb25TaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGVkVGhyZWVkT2JqZWN0QW5pbWF0aW9uU2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBzZWxlY3RlZFRocmVlZE9iamVjdEFuaW1hdGlvblNpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChFbGVtZW50VG9vbGJhckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGN1c3RvbWl6ZUJ1dHRvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2VsZWN0aW9uczogU2VsZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGVsZW1lbnRUb29sYmFyOiBFbGVtZW50VG9vbGJhckNvbXBvbmVudDtcclxuXHJcbiAgcHVibGljIGVkaXRFbGVtZW50TWVudTogQ3VzdG9tQnV0dG9uW10gPSBbXTtcclxuICBwdWJsaWMgZWRpdEFkZEJ1dHRvbnM6IEN1c3RvbUJ1dHRvbltdID0gW107XHJcbiAgcHVibGljIGVkaXRDdXN0b21pemVCdXR0b246IEN1c3RvbUJ1dHRvbltdID0gW107XHJcbiAgcHVibGljIHJlc2l6ZUJ1dHRvbnM6IEN1c3RvbUJ1dHRvbltdID0gW107XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RlZEVsZW1lbnRQb3NpdGlvbjogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gIHB1YmxpYyBzaG93RWxlbWVudFRvb2xiYXIgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0xpdGVTZWxlY3RvciA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93U2VsZWN0aW9ucyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93QW5zd2VycyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93Q3VzdG9taXplQnV0dG9ucyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93U3dhcEJ1dHRvbiA9IHRydWU7XHJcbiAgcHVibGljIHN0YW5kQWxvbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvdWxkU2hvd0xhYmVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFjdGl2ZU1ldGFkYXRhOiBNZXRhZGF0YTtcclxuICBwdWJsaWMgc2VsZWN0aW9uVG9DdXN0b21pemU6IGFueTtcclxuICBwdWJsaWMgc2VsZWN0ZWRPYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXA7XHJcbiAgcHVibGljIHNlbGVjdGVkRWxlbWVudDogTWVzaDtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFbGVtZW50T2JqZWN0OiBDdXN0b21PYmplY3QzRDtcclxuICBwcml2YXRlIF9za3VBbHJlYWR5U2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXRlbXNGcm9tU2NyYXRjaDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdFtdID0gW107XHJcbiAgcHJpdmF0ZSBfaXRlbXNOZWVkVXNlcklucHV0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0W10gPSBbXTtcclxuICBwcml2YXRlIF9zdGFuZGFsb25lRmxvb3JzOiBUZXh0dXJlW107XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9sb2FkaW5nRnJvbVByZXNldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NhbGxCYWNrRm5XaGVuQnVpbGRGaW5pc2hlZDogRnVuY3Rpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHNjcmVlblNpemVTZXJ2aWNlOiBTY3JlZW5TaXplQW5hbHlzaXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF9hcHBTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgX2lPbmU6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1czogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sb2FkRnVybml0dXJlU2VydmljZTogTG9hZEZ1cm5pdHVyZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9idWlsZEZ1cm5pdHVyZVNlcnZpY2U6IEJ1aWxkRnVybml0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2ludGVncmF0aW9uU2VydmljZTogSW50ZWdyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGljdGlvbmFyeVNlcnZpY2U6IEhvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ByZXNldHNTZXJ2aWNlOiBQcmVzZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lT3B0aW9uc1NlcnZpY2U6IFNjZW5lT3B0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaW1lbnNpb25zU2VydmljZTogRGltZW5zaW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vcnBsYW5TZXJ2aWNlOiBGbG9vcnBsYW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JTZXJ2aWNlOiBGbG9vclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pY29uQ2FjaGVTZXJ2aWNlOiBIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FyU2VydmljZTogQXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZ29vZ2xlVGFnTWFuYWdlcjogR29vZ2xlVGFnTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JvdGF0aW9uU2VydmljZTogUm90YXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yZXNpemVTZXJ2aWNlOiBSZXNpemVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY3VzdG9taXplclNlcnZpY2U6IEN1c3RvbWl6ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZHluYW1pY0NhbWVyYVNlcnZpY2U6IER5bmFtaWNDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdGhyZWVkSW5QaG90b0luaXRpYWxpemVyU2VydmljZTogVGhyZWVkSW5QaG90b0luaXRpYWxpemVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JlbmRlclNlcnZpY2U6IFJlbmRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9uZXdSZW5kZXJTZXJ2aWNlOiBOZXdSZW5kZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29ubmVjdG9yQWRhcHRlclNlcnZpY2U6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuX3ByZXNldHNTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hbnN3ZXJDb3VudFJlY2VpdmVkLnN1YnNjcmliZSgoYW5zd2VyQ291bnQ6IG51bWJlcikgPT4gdGhpcy5faGFuZGxlQW5zd2VyQ291bnRSZWNlaXZlZChhbnN3ZXJDb3VudCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkSU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVLFxyXG4gICAgICAgICh7c2t1LCBzZXR0aW5ncywgcG9zaXRpb259OiB7IHNrdTogc3RyaW5nLCBzZXR0aW5nczogYW55LCBwb3NpdGlvbjogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgej86IG51bWJlciB9IH0pID0+XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVMb2FkSU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVKHNrdSwgc2V0dGluZ3MsIHBvc2l0aW9uKVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Db3B5SU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVLCAob3JpZ2luYWw6IEl0ZW0pID0+XHJcbiAgICAgICAgdGhpcy5faGFuZGxlQ29weUlPbmVGdXJuaXR1cmVJbnRvU2NlbmVCeVNLVShvcmlnaW5hbClcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmNvbmZpZ3VyZU1vZGVDaGFuZ2VkLnN1YnNjcmliZShjb25maWd1cmluZ01vZGVDaGFuZ2UgPT5cclxuICAgICAgICB0aGlzLl9oYW5kbGVDb25maWd1cmVNb2RlQ2hhbmdlKGNvbmZpZ3VyaW5nTW9kZUNoYW5nZSkpLFxyXG4gICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UudG9nZ2xlU2VsZWN0ZWRFbGVtZW50LnN1YnNjcmliZSgoZWxlbWVudDogTWVzaCkgPT4gdGhpcy5fc2VsZWN0ZWRFbGVtZW50VG9nZ2xlKGVsZW1lbnQpKSxcclxuICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmJ1aWxkRmluaXNoZWQuc3Vic2NyaWJlKChyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpID0+IHRoaXMuX2hhbmRsZUJ1aWxkRmluaXNoZWQocmVzdWx0KSksXHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5hbnN3ZXJTZWxlY3RlZC5zdWJzY3JpYmUoKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCkgPT4gdGhpcy5fYW5zd2VyU2VsZWN0ZWQocmVzdWx0KSksXHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5vbkFmdGVyUmVuZGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9oYW5kbGVSZW5kZXIoKSksXHJcbiAgICAgIHRoaXMuX2FwcFNlcnZpY2Uuc2t1U2V0LnN1YnNjcmliZShza3UgPT4gdGhpcy5faGFuZGxlU2t1U2V0KHNrdSkpLFxyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuYXJ0aWNsZUluZm9SZWNlaXZlZC5zdWJzY3JpYmUoaW5mbyA9PiB0aGlzLl9oYW5kbGVJbmZvQ2xpY2soaW5mbykpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuVW5kZWZpbmVkRXJyb3JPY2N1cmVkLCAoKSA9PiB0aGlzLl9oYW5kbGVVbmRlZmluZWRFcnJvck9jY3VyZWQoKSksXHJcbiAgICAgIHRoaXMuX3ByZXNldHNTZXJ2aWNlLmFmdGVyTG9hZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fYWZ0ZXJMb2FkRnJvbVByZXNldCgpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuVW5kbywgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuUmVkbywgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU3RhcnRXaXRoRW1wdHlSb29tLCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TdGFydFdpdGhQcmVzZXQsICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRSb29tRnJvbVByZXNldCwgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFJvb21Gcm9tQ2xvdWQsICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLk5ld1Jvb20sICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlJlc2V0Um9vbXBsYW4sICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRTY2FsZWREaWFncmFtLCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9wcmVzZXRzU2VydmljZS5iZWZvcmVMb2FkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuSXRlbVNlbGVjdGVkLCAoaXRlbSkgPT4gdGhpcy5vYmplY3RTZWxlY3RlZChpdGVtKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5JdGVtVW5zZWxlY3RlZCwgKCkgPT4gdGhpcy5fcmVtb3ZlQnV0dG9ucygpKSxcclxuICAgICAgdGhpcy5zY3JlZW5TaXplU2VydmljZS5zY3JlZW5TaXplQ2hhbmdlZC5zdWJzY3JpYmUoKGluZm86IFNjcmVlblNpemVJbmZvKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG91bGRTaG93TGFiZWwgPSBpbmZvLmlzUGhvbmVTaXplO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzTG9hZGVkLnN1YnNjcmliZSgobG9hZGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93U3dhcEJ1dHRvbiA9ICF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5pbnN0YW50UmVwbGFjZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuX2FkZE1vZGVsRGlhbG9nVG9vbGJhcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb3B5U2NlbmVJbnN0YW5jZShzYXZlQXM6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICgvKiF0aGlzLl9zZXR0aW5nc1NlcnZpY2UuaXNQcml2YXRlICYmICovc2F2ZUFzKSB7XHJcbiAgICAgIGNvbnN0IGZ1cm5pdHVyZSA9IHRoaXMuX2l0ZW1TZXJ2aWNlLmdldElPbmVGdXJuaXR1cmUoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUNvcHlJbnN0YW5jZUZvckZ1cm5pdHVyZShmdXJuaXR1cmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWRPYmplY3RzKHtmdXJuaXR1cmV9KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICghZnVybml0dXJlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbG9hZGluZ0Zyb21QcmVzZXQgPSB0cnVlO1xyXG4gICAgY29uc3QgaU9ORU9iamVjdHNUb0xvYWQgPSBmdXJuaXR1cmUuZmlsdGVyKG8gPT4gdGhpcy5faXNJT05FT2JqZWN0KG8pKTtcclxuICAgIGZ1cm5pdHVyZVxyXG4gICAgICAuZmlsdGVyKChvKSA9PiBpc0l0ZW1Hcm91cFR5cGUoby5pdGVtX3R5cGUpKVxyXG4gICAgICAuZm9yRWFjaChnID0+IHtcclxuICAgICAgICBsZXQgZ3JvdXBBZGRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IGlzV2FsbEl0ZW1Hcm91cFR5cGUoZy5pdGVtX3R5cGUpID8gbmV3IFdhbGxJdGVtR3JvdXAoKSA6IG5ldyBJdGVtR3JvdXAoKTtcclxuICAgICAgICBpdGVtR3JvdXAubG9ja2VkID0gZy5sb2NrZWQ7XHJcbiAgICAgICAgaXRlbUdyb3VwLnBvc2l0aW9uLnNldChnLnhwb3MsIGcueXBvcywgZy56cG9zKTtcclxuICAgICAgICBpdGVtR3JvdXAucm90YXRpb24uc2V0KDAsIGcucm90YXRpb24sIDApO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZy5jaGlsZHJlbjtcclxuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGNoID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLl9pc0lPTkVPYmplY3QoY2gpKSB7XHJcbiAgICAgICAgICAgIGlmICghZ3JvdXBBZGRlZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEl0ZW0oaXRlbUdyb3VwKTtcclxuICAgICAgICAgICAgICBncm91cEFkZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjaC5pdGVtR3JvdXAgPSBpdGVtR3JvdXA7XHJcbiAgICAgICAgICAgIGlPTkVPYmplY3RzVG9Mb2FkLnB1c2goY2gpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlTG9hZElPbmVGdXJuaXR1cmVGcm9tUHJlc2V0KGlPTkVPYmplY3RzVG9Mb2FkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPYmplY3RzKCk6IGFueSB7XHJcbiAgICAvLyByZXR1cm4ge2Z1cm5pdHVyZTogdGhpcy50aHJlZVNlcnZpY2UubW9kZWwuc2F2ZUZ1cm5pdHVyZSgpfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvYmplY3RTZWxlY3RlZChvYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXApIHtcclxuICAgIHRoaXMuX3JlbW92ZUN1c3RvbUJ1dHRvbnMoKTtcclxuICAgIHRoaXMuc2hvd0N1c3RvbWl6ZUJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdCA9IG9iamVjdDtcclxuICAgIG9iamVjdC50cmF2ZXJzZSgoY2hpbGQpID0+IHtcclxuICAgICAgY29uc3QgY3VzdG9taXplQnV0dG9uOiBhbnkgPSBjaGlsZC5uYW1lICYmIGNoaWxkLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdwXycpO1xyXG4gICAgICBpZiAoY3VzdG9taXplQnV0dG9uKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Ub0N1c3RvbWl6ZSA9IGNoaWxkLnBhcmVudDtcclxuICAgICAgICB0aGlzLmVkaXRDdXN0b21pemVCdXR0b24ucHVzaChuZXcgQ3VzdG9tQnV0dG9uKCcnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ3VzdG9taXplQ2xpY2soKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvblRvQ3VzdG9taXplKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5faGFuZGxlUmVuZGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ3VzdG9taXplQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jdXN0b21pemVyU2VydmljZS5zZWxlY3RlZE9iamVjdCA9IHRoaXMuc2VsZWN0aW9uVG9DdXN0b21pemU7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLnNlbGVjdGVkVGhyZWVkT2JqZWN0Q3VzdG9taXphdGlvblNpZGViYXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN3YXBFbGVtZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCkge1xyXG4gICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UucmVwbGFjZVNlbGVjdGlvbihPYmplY3RVdGlscy5HZXRTZWxlY3Rpb25Gcm9tU2VsZWN0ZWRPYmplY3QodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KSwgdGhpcy5hY3RpdmVNZXRhZGF0YSk7XHJcbiAgICAgIGlmICghdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuaW5zdGFudFJlcGxhY2UpIHtcclxuICAgICAgICB0aGlzLl9yZXNldFNlbGVjdGVkRWxlbWVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlRWxlbWVudCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpIHtcclxuICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmRlbGV0ZVNlbGVjdGlvbihPYmplY3RVdGlscy5HZXRTZWxlY3Rpb25Gcm9tU2VsZWN0ZWRPYmplY3QodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KSwgdGhpcy5hY3RpdmVNZXRhZGF0YSk7XHJcbiAgICAgIHRoaXMuX3Jlc2V0U2VsZWN0ZWRFbGVtZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsRWxlbWVudFJlcGxhY2UocmVidWlsZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuY2FuY2VsQW5zd2VyKHRoaXMuYWN0aXZlTWV0YWRhdGEsIGZhbHNlLCB0cnVlKTtcclxuICAgIHRoaXMuX3Jlc2V0U2VsZWN0ZWRFbGVtZW50KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlbkFuaW1hdGlvblNpZGViYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLnNlbGVjdGVkVGhyZWVkT2JqZWN0QW5pbWF0aW9uU2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlU2hvd0NoYW5nZVNlbGVjdG9yKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICghc2hvdykge1xyXG4gICAgICBpZiAodGhpcy5zaG93QW5zd2Vycykge1xyXG4gICAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jYW5jZWxBbnN3ZXIodGhpcy5hY3RpdmVNZXRhZGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmNhbmNlbENvbmZpZ3VyaW5nQ3VycmVudEluc3RhbmNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TW9kZWxFcnJvckRpYWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKE1vZGVsRGlhbG9nQ29tcG9uZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFySXRlbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pdGVtc0Zyb21TY3JhdGNoLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVTa3VTZXQoc2t1OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChza3UpIHtcclxuICAgICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2lPbmUuY29udHJvbGxlckluaXRpYWxpemVkLnN1YnNjcmliZShhc3luYyAoaW5pdGlhbGl6ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChpbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlU3RhbmRhbG9uZUNvbmZpZ3VyYXRvcihza3UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRoaXMuX2FwcFNlcnZpY2UuZmxvb3JUZXh0dXJlc0xvYWRlZC5zdWJzY3JpYmUodGV4dHVyZXMgPT4gdGhpcy5faGFuZGxlRmxvb3JzTG9hZGVkKHRleHR1cmVzKSksXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGFyQnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZSA9IHtcclxuICAgICAgICBpZDogMixcclxuICAgICAgICBlbGVtZW50SWQ6ICdzdGFuZGFsb25lX2FyX3Nlc3Npb24nLFxyXG4gICAgICAgIHRvb2x0aXA6ICdTVEFSVF9BUl9TRVNTSU9OJyxcclxuICAgICAgICBvcmRlcjogMTAsXHJcbiAgICAgICAgaW1hZ2U6IHRoaXMuX2ljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbkFzQmFzZTY0KEljb25FbnVtLkFyQ2lyY2xlKSxcclxuICAgICAgICB0b2dnbGU6IGZhbHNlLFxyXG4gICAgICAgIHNob3c6IGF3YWl0IHRoaXMuX2FyU2VydmljZS5hclN1cHBvcnRlZCgpICYmXHJcbiAgICAgICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93U3RhbmRhbG9uZUFSQnV0dG9uICYmXHJcbiAgICAgICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5hckVuYWJsZWQsXHJcbiAgICAgICAgIGNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvYmplY3QgPSAodGhpcy5faXRlbVNlcnZpY2UuZ2V0Q29uZmlndXJhYmxlcygpWzBdIGFzIGFueSkvKi5jbG9uZVZpc2libGUoKSovO1xyXG4gICAgICAgICAgaWYgKG9iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYXJNb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFkZE9iamVjdChvYmplY3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3QgYXJJT1NCdXR0b246IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlID0ge1xyXG4gICAgICAgIGlkOiAzLFxyXG4gICAgICAgIGVsZW1lbnRJZDogJ3N0YW5kYWxvbmVfYXJfc2Vzc2lvbicsXHJcbiAgICAgICAgdG9vbHRpcDogJ1NUQVJUX0FSX1NFU1NJT04nLFxyXG4gICAgICAgIG9yZGVyOiAxMCxcclxuICAgICAgICBpbWFnZTogdGhpcy5faWNvbkNhY2hlU2VydmljZS5nZXRJY29uQXNCYXNlNjQoSWNvbkVudW0uQXJDaXJjbGUpLFxyXG4gICAgICAgIHRvZ2dsZTogZmFsc2UsXHJcbiAgICAgICAgc2hvdzogYXdhaXQgdGhpcy5fYXJTZXJ2aWNlLmFySU9TU3VwcG9ydGVkKCkgJiZcclxuICAgICAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dTdGFuZGFsb25lQVJCdXR0b24gJiZcclxuICAgICAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmFyRW5hYmxlZCxcclxuICAgICAgICBjbGljazogKCkgPT4gdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmRvd25sb2FkVURTWmZvckFSSU9TKClcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5fc2NlbmVPcHRpb25zU2VydmljZS5hZGRTY2VuZU9wdGlvbkJ1dHRvbihhckJ1dHRvbik7XHJcbiAgICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UuYWRkU2NlbmVPcHRpb25CdXR0b24oYXJJT1NCdXR0b24pO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVGbG9vcnNMb2FkZWQodGV4dHVyZXM6IFRleHR1cmVbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRleHR1cmVzKSB7XHJcbiAgICAgIGxldCBkZWZhdWx0Rmxvb3I6IFRleHR1cmU7XHJcbiAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VTdGFuZGFsb25lRmxvb3JzKSB7XHJcbiAgICAgICAgdGhpcy5fc3RhbmRhbG9uZUZsb29ycyA9IHRoaXMuX2FwcFNlcnZpY2UuZ2V0Rmxvb3JzU3RhbmRhbG9uZSgpO1xyXG4gICAgICAgIGRlZmF1bHRGbG9vciA9IHRoaXMuX3N0YW5kYWxvbmVGbG9vcnMuZmluZChmID0+IGYuZGVmYXVsdFN0YW5kYWxvbmUpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBmbG9vckdlb21ldHJ5O1xyXG4gICAgICBpZiAoZGVmYXVsdEZsb29yICYmIGRlZmF1bHRGbG9vci5zaW1wbGVQbGFuZSkge1xyXG4gICAgICAgIGZsb29yR2VvbWV0cnkgPSBuZXcgUGxhbmVHZW9tZXRyeSg2LCA2KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjb3JuZXJzID0gW1xyXG4gICAgICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5uZXdDb3JuZXIoLTMsIDMpLFxyXG4gICAgICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5uZXdDb3JuZXIoLTMsIC0zKSxcclxuICAgICAgICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubmV3Q29ybmVyKDMsIC0zKSxcclxuICAgICAgICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubmV3Q29ybmVyKDMsIDMpLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgcG9pbnRzID0gY29ybmVycy5tYXAoY29ybmVyID0+IG5ldyBWZWN0b3IyKGNvcm5lci54LCBjb3JuZXIueSkpO1xyXG4gICAgICAgIGNvbnN0IHNoYXBlID0gbmV3IFNoYXBlKHBvaW50cyk7XHJcbiAgICAgICAgZmxvb3JHZW9tZXRyeSA9IG5ldyBTaGFwZUdlb21ldHJ5KHNoYXBlKS5jZW50ZXIoKTtcclxuICAgICAgfVxyXG4gICAgICBhd2FpdCB0aGlzLl9mbG9vclNlcnZpY2UuZ2VuZXJhdGVGbG9vclBsYW5lKCd3aGl0ZScsIGRlZmF1bHRGbG9vciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZsb29yR2VvbWV0cnkpO1xyXG4gICAgICB0aGlzLl9mbG9vclNlcnZpY2UuZ2V0Rmxvb3JQbGFuZSgpLnZpc2libGUgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VTdGFuZGFsb25lRmxvb3JzO1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUuYmFja2dyb3VuZCA9IG5ldyBDb2xvcihwYXJzZUludCh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc3RhbmRhbG9uZVNjZW5lQmFja2dyb3VuZENvbG9yLCAwKSk7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLl9zdGFuZGFsb25lRmxvb3JzICYmIHRoaXMuX3N0YW5kYWxvbmVGbG9vcnMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHRoaXMuX3Vwc2VydEZsb29yQnV0dG9ucyhkZWZhdWx0Rmxvb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cHNlcnRGbG9vckJ1dHRvbnMoYWN0aXZlRmxvb3I6IFRleHR1cmUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsb29yQnV0dG9uczogU2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2VbXSA9IFtdO1xyXG4gICAgbGV0IG5ld0Zsb29yQnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZTtcclxuICAgIHRoaXMuX3N0YW5kYWxvbmVGbG9vcnMuZm9yRWFjaCgoZiwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGYgIT09IGFjdGl2ZUZsb29yKSB7XHJcbiAgICAgICAgbmV3Rmxvb3JCdXR0b24gPSB7XHJcbiAgICAgICAgICBpZDogaW5kZXgsXHJcbiAgICAgICAgICBlbGVtZW50SWQ6IGBzdGFuZGFsb25lX2Zsb29yXyR7Zi5uYW1lfWAsXHJcbiAgICAgICAgICB0b29sdGlwOiBmLm5hbWUsXHJcbiAgICAgICAgICBjbGFzczogJ2NpcmNsZScsXHJcbiAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgIG9iamVjdDogZixcclxuICAgICAgICAgIGltYWdlOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoICsgZi51cmwsXHJcbiAgICAgICAgICBjbGljazogKGZsb29yKSA9PiB0aGlzLl9jaGFuZ2VTdGFuZGFsb25lRmxvb3IoZmxvb3IpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmbG9vckJ1dHRvbnMucHVzaChuZXdGbG9vckJ1dHRvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgYWN0aXZlRmxvb3JCdXR0b246IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlID0ge1xyXG4gICAgICBpZDogMTAsXHJcbiAgICAgIGVsZW1lbnRJZDogJ3N0YW5kYWxvbmVfY2hhbmdlX2Zsb29yJyxcclxuICAgICAgdG9vbHRpcDogJ0NIQU5HRV9GTE9PUicsXHJcbiAgICAgIG9yZGVyOiA4LFxyXG4gICAgICBjbGFzczogJ2NpcmNsZScsXHJcbiAgICAgIG9iamVjdDogYWN0aXZlRmxvb3IsXHJcbiAgICAgIGNoaWxkcmVuOiBmbG9vckJ1dHRvbnMsXHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgIGltYWdlOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoICsgYWN0aXZlRmxvb3IudXJsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fc2NlbmVPcHRpb25zU2VydmljZS51cGRhdGVTY2VuZU9wdGlvbkJ1dHRvbihhY3RpdmVGbG9vckJ1dHRvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9jaGFuZ2VTdGFuZGFsb25lRmxvb3IoZmxvb3I6IFRleHR1cmUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX2Zsb29yU2VydmljZS5zZXRGbG9vclRleHR1cmUobnVsbCwgZmxvb3IpO1xyXG4gICAgdGhpcy5fdXBzZXJ0Rmxvb3JCdXR0b25zKGZsb29yKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVEb3dubG9hZEJ1dHRvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRvd25sb2FkM0RNb2RlbEJ1dHRvbjogU2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2UgPSB7XHJcbiAgICAgIGlkOiAxMDAsXHJcbiAgICAgIGVsZW1lbnRJZDogJ3N0YW5kYWxvbmVfZG93bmxvYWRfbW9kZWwnLFxyXG4gICAgICB0b29sdGlwOiAnRE9XTkxPQURfTU9ERUwnLFxyXG4gICAgICBvcmRlcjogMixcclxuICAgICAgY2xhc3M6ICdjaXJjbGUnLFxyXG4gICAgICBsYWJlbDogJ2Nsb3VkX2Rvd25sb2FkJyxcclxuICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgY2xpY2s6ICgpID0+IHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5kb3dubG9hZEN1cnJlbnRDdXN0b21GbG9vcmdyb3VwKClcclxuICAgIH07XHJcbiAgICB0aGlzLl9zY2VuZU9wdGlvbnNTZXJ2aWNlLnVwZGF0ZVNjZW5lT3B0aW9uQnV0dG9uKGRvd25sb2FkM0RNb2RlbEJ1dHRvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVDYW1lcmFTZXR0aW5nc0J1dHRvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNhbWVyYVNldHRpbmdzQnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZSA9IHtcclxuICAgICAgaWQ6IDExMCxcclxuICAgICAgZWxlbWVudElkOiAnc3RhbmRhbG9uZV9jYW1lcmFfc2V0dGluZ3MnLFxyXG4gICAgICB0b29sdGlwOiAnQ0FNRVJBX1NFVFRJTkdTJyxcclxuICAgICAgb3JkZXI6IDEsXHJcbiAgICAgIGNsYXNzOiAnY2lyY2xlJyxcclxuICAgICAgbGFiZWw6ICdjYW1lcmFfc2V0dGluZ3MnLFxyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICBjbGljazogKCkgPT4gdGhpcy5fb3BlbkNhbWVyYVNldHRpbmdzRGlhbG9nKClcclxuICAgIH07XHJcbiAgICB0aGlzLl9zY2VuZU9wdGlvbnNTZXJ2aWNlLnVwZGF0ZVNjZW5lT3B0aW9uQnV0dG9uKGNhbWVyYVNldHRpbmdzQnV0dG9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29wZW5DYW1lcmFTZXR0aW5nc0RpYWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKENhbWVyYVNldHRpbmdzRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnNjAwcHgnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZU1lYXN1cmVtZW50c0J1dHRvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJ1dHRvbjogU2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2UgPSB7XHJcbiAgICAgIGlkOiAxLFxyXG4gICAgICBlbGVtZW50SWQ6ICdzdGFuZGFsb25lX3Nob3dfbWVhc3VyZW1lbnRzJyxcclxuICAgICAgdG9vbHRpcDogJ1NIT1dfTUVBU1VSRU1FTlRTJyxcclxuICAgICAgb3JkZXI6IDExLFxyXG4gICAgICBpbWFnZTogdGhpcy5faWNvbkNhY2hlU2VydmljZS5nZXRJY29uQXNCYXNlNjQoSWNvbkVudW0uTWVhc3VyZW1lbnRzKSxcclxuICAgICAgdG9nZ2xlOiB0cnVlLFxyXG4gICAgICB0b29sdGlwQWN0aXZlOiAnSElERV9NRUFTVVJFTUVOVFMnLFxyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICBjbGljazogKCkgPT4geyB0aGlzLl9kaW1lbnNpb25zU2VydmljZS5lbmFibGVkID0gIXRoaXMuX2RpbWVuc2lvbnNTZXJ2aWNlLmVuYWJsZWQ7IH1cclxuICAgIH07XHJcbiAgICB0aGlzLl9zY2VuZU9wdGlvbnNTZXJ2aWNlLmFkZFNjZW5lT3B0aW9uQnV0dG9uKGJ1dHRvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVJbmZvQ2xpY2soaW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBtZXNzYWdlQ29uZmlnOiBEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgIHR5cGU6IERpYWxvZ1R5cGUuSW5mbyxcclxuICAgICAgbWVzc2FnZXM6IFtuZXcgRXJyb3JNZXNzYWdlKGluZm8pXVxyXG4gICAgfTtcclxuICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uuc2hvd0RpYWxvZyh7ZGF0YTogbWVzc2FnZUNvbmZpZ30pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcHJlcGFyZVN0YW5kYWxvbmVDb25maWd1cmF0b3Ioc2t1KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5wb3NpdGlvbi5zZXQoMCwgMSwgNCk7XHJcbiAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5sb29rQXQobmV3IFZlY3RvcjMoKSk7XHJcbiAgICBhd2FpdCBPYmplY3RVdGlscy5Mb2FkSERSSSh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoICsgJy9hc3NldHMvaGRyaS9zdGRfZW52X3YyX0IuaGRyJywgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBpZiAoYyBpbnN0YW5jZW9mIExpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLnJlbW92ZShjKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuc3RhbmRBbG9uZSA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dMaXRlU2VsZWN0b3IgPSB0cnVlOyAvLyBhbHdheXMgc2hvdyB0aGUgc2VsZWN0aW9ucyB3aGVuIHN0YW5kYWxvbmVcclxuICAgIHRoaXMuc2hvd1NlbGVjdGlvbnMgPSB0cnVlOyAvLyBhbHdheXMgc2hvdyB0aGUgc2VsZWN0aW9ucyB3aGVuIHN0YW5kYWxvbmVcclxuICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLnNob3VsZExvYWRTZWxlY3Rpb25zID0gdHJ1ZTtcclxuICAgIHRoaXMuX3NrdUFscmVhZHlTZXQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dEb3dubG9hZEJ1dHRvbikge1xyXG4gICAgICB0aGlzLl9jcmVhdGVEb3dubG9hZEJ1dHRvbigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dNZWFzdXJlbWVudHNCdXR0b24pIHtcclxuICAgICAgdGhpcy5fY3JlYXRlTWVhc3VyZW1lbnRzQnV0dG9uKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuZGV2ZWxvcG1lbnQpIHtcclxuICAgICAgdGhpcy5fY3JlYXRlQ2FtZXJhU2V0dGluZ3NCdXR0b24oKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQgPSBhd2FpdCB0aGlzLl9sb2FkSU9uZUZ1cm5pdHVyZUZyb21Ta3UobmV3IFZlY3RvcjMoMCwgMCwgMCksIHNrdSwgdW5kZWZpbmVkLCB0cnVlKTtcclxuICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmZ1cm5pdHVyZSkge1xyXG4gICAgICB0aGlzLl9oYW5kbGVGaXJzdEJ1aWxkU3RhbmRhbG9uZShyZXN1bHQuZnVybml0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5OZWVkc1VzZXJJbnB1dCkge1xyXG4gICAgICAgIHRoaXMuX2NhbGxCYWNrRm5XaGVuQnVpbGRGaW5pc2hlZCA9IHRoaXMuX2hhbmRsZUZpcnN0QnVpbGRTdGFuZGFsb25lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVGaXJzdEJ1aWxkU3RhbmRhbG9uZShpdGVtOiBJdGVtKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9jYW1lcmFTZXJ2aWNlLm1vdmVDYW1lcmFUb0ZpdE9iamVjdChpdGVtKTtcclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5jYW1lcmFQb3NpdGlvbkZpeGVkKSB7XHJcbiAgICAgIHRoaXMuX3JvdGF0aW9uU2VydmljZS5lbmFibGVSb3RhdGlvbkZvcihpdGVtKTtcclxuICAgIH0gaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmNhbWVyYVBvc2l0aW9uRml4ZWRBbmRTY3JvbGxiYXIpIHtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5kaXNhYmxlUm90YXRlKCk7XHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhWm9vbU91dCgpO1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmRpc2FibGVab29tKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5fY2FsbEJhY2tGbldoZW5CdWlsZEZpbmlzaGVkID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5jYW1lcmFDb25maWcpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fZHluYW1pY0NhbWVyYVNlcnZpY2UubG9hZEN1c3RvbUNhbWVyYVNldHRpbmdzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuZW5hYmxlM0RJblBob3RvKSB7XHJcbiAgICAgIHRoaXMuX3RocmVlZEluUGhvdG9Jbml0aWFsaXplclNlcnZpY2UuaW5pdChudWxsLCB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYSwgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLCB0aGlzLl9zY2VuZVNlcnZpY2UucmVuZGVyZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhdmUgY2FtZXJhIHNldHRpbmdzIGZvciByZW5kZXJcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKHRydWUpO1xyXG4gICAgdGhpcy5fbmV3UmVuZGVyU2VydmljZS5zdGFuZEFsb25lQ2FtZXJhTWF0cml4ID0gQXJyYXkuZnJvbSh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UuZWxlbWVudHMpO1xyXG4gICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLnN0YW5kQWxvbmVGaXJzdEJ1aWxkUmVhZHkgPSB0cnVlO1xyXG4gICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLnJlYWR5VG9SZW5kZXIubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVVuZGVmaW5lZEVycm9yT2NjdXJlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd1NlbGVjdGlvbnMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0Fuc3dlcnMgPSBmYWxzZTtcclxuICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jYW5jZWxDb25maWd1cmluZ0N1cnJlbnRJbnN0YW5jZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdEFkZEJ1dHRvbnMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5yZXNpemVCdXR0b25zLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldFNlbGVjdGVkRWxlbWVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudFBvc2l0aW9uKCk7XHJcbiAgICB0aGlzLl9yZW1vdmVBbGxCdXR0b25zKCk7XHJcbiAgICB0aGlzLnNob3dFbGVtZW50VG9vbGJhciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlUmVuZGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCB8fCB0aGlzLnNlbGVjdGlvblRvQ3VzdG9taXplKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0RWxlbWVudFBvc2l0aW9uKCk7XHJcbiAgICAgIGlmICh0aGlzLmVkaXRBZGRCdXR0b25zLmxlbmd0aCB8fCB0aGlzLmVkaXRDdXN0b21pemVCdXR0b24ubGVuZ3RoID4gMCB8fCB0aGlzLnJlc2l6ZUJ1dHRvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9zaXRpb25CdXR0b25zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkRWxlbWVudFRvZ2dsZShlbGVtZW50OiBNZXNoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICBjb25zdCBvYmo6IEN1c3RvbU9iamVjdDNEID0gZWxlbWVudCA/IGVsZW1lbnQucGFyZW50IGFzIEN1c3RvbU9iamVjdDNEIDogdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCAhPT0gb2JqKSB7XHJcbiAgICAgIHRoaXMuc2hvd0VsZW1lbnRUb29sYmFyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCA9IG9iajtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUVsZW1lbnRNZW51KCk7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUFkZEJ1dHRvbnMoKTtcclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuaGFuZGxlUGFyYW1ldHJpYykge1xyXG4gICAgICAgICAgdGhpcy5fcHJlcGFyZU90aGVyQnV0dG9ucygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaG91bGRCZUhpZGRlbjogYm9vbGVhbiA9IG9iai51c2VyRGF0YSAmJiBvYmoudXNlckRhdGEuc2VsZWN0aW9uICYmIG9iai51c2VyRGF0YS5zZWxlY3Rpb24ucXVlc3Rpb24uaW5kZXhPZignW2hpZGRlbl0nKSA+IC0xO1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5pbnN0YW50UmVwbGFjZSkge1xyXG4gICAgICAgICAgaWYgKHNob3VsZEJlSGlkZGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsRWxlbWVudFJlcGxhY2UoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3dhcEVsZW1lbnQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dFbGVtZW50VG9vbGJhciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICAgIH0sIDIwMCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRTZWxlY3RlZEVsZW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQnVpbGRGaW5pc2hlZChyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiB2b2lkIHtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmdsYXNzTWF0ZXJpYWxDaGVjayhyZXN1bHQuZnVybml0dXJlKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudCAmJiByZXN1bHQuZnVybml0dXJlKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW06IEl0ZW0gPSByZXN1bHQuZnVybml0dXJlO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBDdXN0b21NZXNoKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0ID0gPEN1c3RvbU9iamVjdDNEPnRoaXMuc2VsZWN0ZWRFbGVtZW50LnBhcmVudDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9wcmVwYXJlQWRkQnV0dG9ucygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2NhbGxCYWNrRm5XaGVuQnVpbGRGaW5pc2hlZCAmJiB0aGlzLnN0YW5kQWxvbmUpIHtcclxuICAgICAgdGhpcy5fY2FsbEJhY2tGbldoZW5CdWlsZEZpbmlzaGVkKHJlc3VsdC5mdXJuaXR1cmUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXRFbGVtZW50UG9zaXRpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQgJiYgIXRoaXMuc3RhbmRBbG9uZSkge1xyXG4gICAgICBjb25zdCB5UG9zOiBudW1iZXIgPSAoKHRoaXMuc2VsZWN0ZWRFbGVtZW50Lmdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC55IC0gdGhpcy5zZWxlY3RlZEVsZW1lbnQuZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnkpIC8gMik7XHJcbiAgICAgIGNvbnN0IHBvczogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5nZXRXb3JsZFBvc2l0aW9uKHBvcyk7XHJcbiAgICAgIHBvcy55ICs9IHlQb3M7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50UG9zaXRpb24gPSB0aGlzLl9zY2VuZVNlcnZpY2UucG9zaXRpb25JblNjZW5lVG9TY3JlZW4ocG9zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50UG9zaXRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVBbGxCdXR0b25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVtb3ZlQWRkQnV0dG9ucygpO1xyXG4gICAgdGhpcy5fcmVtb3ZlUmVzaXplQnV0dG9ucygpO1xyXG4gICAgdGhpcy5fcmVtb3ZlQ3VzdG9tQnV0dG9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQ3VzdG9tQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQWRkQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdEFkZEJ1dHRvbnMubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZVJlc2l6ZUJ1dHRvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZUJ1dHRvbnMubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZUVkaXRJdGVtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdEVsZW1lbnRNZW51Lmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlRWxlbWVudE1lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVFZGl0SXRlbXMoKTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCk7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd0VkaXRQZW5jaWxDb25maWd1cmF0b3IgJiYgc2VsZWN0aW9uKSB7XHJcbiAgICAgIGxldCBvcHRpb25zOiBTZWxlY3Rpb25bXSA9IHRoaXMuX2dldE9wdGlvbnNGcm9tU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihvID0+IHtcclxuICAgICAgICByZXR1cm4gby5ub2RlVHlwZSA9PT0gJ09QVCcgJiYgdGhpcy5faU9uZS5pc1NlbGVjdGlvblB1Ymxpc2hlZChvKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gb3B0aW9ucy5sZW5ndGg7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICB0aGlzLmVkaXRFbGVtZW50TWVudS5wdXNoKG5ldyBDdXN0b21CdXR0b24ob3B0aW9uc1tpXS5xdWVzdGlvbiwgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLnNlbGVjdFNlbGVjdGlvbihvcHRpb25zW2ldLCB0aGlzLmFjdGl2ZU1ldGFkYXRhKTtcclxuICAgICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuaW5zdGFudEVkaXRNZW51KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0U2VsZWN0ZWRFbGVtZW50KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9hZnRlckxvYWRGcm9tUHJlc2V0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fbG9hZGluZ0Zyb21QcmVzZXQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3Byb2dyZXNzU2VydmljZS5maW5pc2hEb3dubG9hZHMoKTtcclxuICAgIGlmICh0aGlzLl9pdGVtc0Zyb21TY3JhdGNoLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9pdGVtc0Zyb21TY3JhdGNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKFxyXG4gICAgICAgICAgdGhpcy5faXRlbXNGcm9tU2NyYXRjaFtpXS5tZXRhRGF0YSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2l0ZW1zRnJvbVNjcmF0Y2gubGVuZ3RoID0gMDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pdGVtc05lZWRVc2VySW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2l0ZW1zTmVlZFVzZXJJbnB1dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCA9IGF3YWl0IHRoaXMuX2hhbmRsZUxvYWRBbmRCdWlsZEZ1cm5pdHVyZShcclxuICAgICAgICAgIHRoaXMuX2l0ZW1zTmVlZFVzZXJJbnB1dFtpXS5tZXRhRGF0YSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYmplY3RMaXN0LCByZXN1bHQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2l0ZW1zTmVlZFVzZXJJbnB1dC5sZW5ndGggPSAwO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYmplY3RMaXN0Rml4ZWQubGVuZ3RoID4gMCB8fFxyXG4gICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYnNvbGV0ZU9iamVjdENhY2hlLmxlbmd0aCA+IDAgfHxcclxuICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uubm90Rml4ZWRPYmplY3RDYWNoZS5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm5vdExvYWRlZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2V0TW9kZWxFcnJvckRpYWxvZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNJT05FT2JqZWN0KG8pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIW8uaXRlbV9zY2hlbWEgfHwgby5pb25lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZUFkZEJ1dHRvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IE9iamVjdFV0aWxzLkdldFNlbGVjdGlvbkZyb21TZWxlY3RlZE9iamVjdCh0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpO1xyXG4gICAgdGhpcy5fcmVtb3ZlQWRkQnV0dG9ucygpO1xyXG4gICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAvLyBpZiAoZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZsYXRfcicgfHxcclxuICAgICAgLy8gICBkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZmxhdF9sJyB8fFxyXG4gICAgICAvLyAgIGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdmbGF0X2QnIHx8XHJcbiAgICAgIC8vICAgZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZsYXRfdScgfHxcclxuICAgICAgLy8gICBkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAndmVydF9yJyB8fFxyXG4gICAgICAvLyAgIGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd2ZXJ0X2wnIHx8XHJcbiAgICAgIC8vICAgZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlcnRfZCcgfHxcclxuICAgICAgLy8gICBkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAndmVydF91Jykge1xyXG4gICAgICAvLyAgIGlmIChkZWNvTm9kZS5jb25uZWN0b3JzKSB7XHJcbiAgICAgIC8vICAgICBkZWNvTm9kZS5jb25uZWN0b3JzLmZvckVhY2goYyA9PiBjLmxpbmtlZFJlcGVhdGFibGVzID0gJ1QnKTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBzZWxlY3Rpb24uZGVjb05vZGUgPyBzZWxlY3Rpb24uZGVjb05vZGUuY29ubmVjdG9ycy5sZW5ndGggOiAwO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29uT2JqZWN0OiBhbnkgPSB0aGlzLl9nZXRDb25uZWN0b3JPYmplY3QodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0LCBzZWxlY3Rpb24uZGVjb05vZGUuY29ubmVjdG9yc1tpXS5jb25uZWN0b3IpO1xyXG4gICAgICAgIGlmIChjb25PYmplY3QgJiYgdGhpcy5fY2FuU2hvd0FkZEJ1dHRvbihzZWxlY3Rpb24uZGVjb05vZGUuY29ubmVjdG9yc1tpXSwgY29uT2JqZWN0KSkge1xyXG4gICAgICAgICAgdGhpcy5lZGl0QWRkQnV0dG9ucy5wdXNoKG5ldyBDdXN0b21CdXR0b24oJycsICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVBZGRCdXR0b25DbGljayhzZWxlY3Rpb24sIHNlbGVjdGlvbi5kZWNvTm9kZS5jb25uZWN0b3JzW2ldLCB0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb25PYmplY3QpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudCkge1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUudHJhdmVyc2UoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgaWYgKGNoaWxkLm5hbWUpIHtcclxuICAgICAgICAgIGNvbnN0IGN1c3RvbWl6ZUJ1dHRvbjogYW55ID0gY2hpbGQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ3BfJyk7XHJcbiAgICAgICAgICAvLyBjb25zdCBjdXN0b21pemVPcHRpb246IGFueSA9IHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdC5nZXRPYmplY3RCeU5hbWUoKVxyXG4gICAgICAgICAgaWYgKGN1c3RvbWl6ZUJ1dHRvbikge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblRvQ3VzdG9taXplID0gY2hpbGQucGFyZW50O1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRDdXN0b21pemVCdXR0b24ucHVzaChuZXcgQ3VzdG9tQnV0dG9uKCcnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUN1c3RvbWl6ZUNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Q29ubmVjdG9yT2JqZWN0KG9iajogYW55LCBjb25uZWN0b3I6IHN0cmluZyk6IGFueSB7XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iakZvdW5kID0gb2JqLmdldE9iamVjdEJ5TmFtZShjb25uZWN0b3IpO1xyXG4gICAgaWYgKG9iakZvdW5kKSB7XHJcbiAgICAgIHJldHVybiBvYmpGb3VuZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChvYmoucGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbm5lY3Rvck9iamVjdChvYmoucGFyZW50LCBjb25uZWN0b3IpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRPcHBvc2l0ZUNvbm5lY3RvclBhcnRzKGNvbm5lY3Rvcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbm5lY3RvclBhcnRzQXJyOiBzdHJpbmdbXSA9IGNvbm5lY3Rvci5zcGxpdCgnXycpO1xyXG4gICAgY29ubmVjdG9yUGFydHNBcnIucG9wKCk7IC8vIHJlbW92ZSBudW1iZXJcclxuICAgIGNvbnN0IGNvbm5lY3RvclR5cGU6IHN0cmluZyA9IGNvbm5lY3RvclBhcnRzQXJyW2Nvbm5lY3RvclBhcnRzQXJyLmxlbmd0aCAtIDFdO1xyXG4gICAgY29ubmVjdG9yUGFydHNBcnJbY29ubmVjdG9yUGFydHNBcnIubGVuZ3RoIC0gMV0gPSBjb25uZWN0b3JUeXBlLnRvTG93ZXJDYXNlKCkgPT09ICdmJyA/ICdNJyA6ICdGJztcclxuICAgIHJldHVybiBjb25uZWN0b3JQYXJ0c0Fyci5qb2luKCdfJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlT3RoZXJCdXR0b25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVtb3ZlUmVzaXplQnV0dG9ucygpO1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCkge1xyXG4gICAgICBjb25zdCBwYXJlbnQ6IEl0ZW0gPSBPYmplY3RVdGlscy5HZXRQYXJlbnRJdGVtKHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCk7XHJcbiAgICAgIGlmIChwYXJlbnQpIHsgLy8gaGlkZSBhbGwgY29ubmVjdG9yc1xyXG4gICAgICAgIHBhcmVudC50cmF2ZXJzZShvID0+IHtcclxuICAgICAgICAgIGlmIChvLm5hbWUgJiYgby5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnY18nKSkge1xyXG4gICAgICAgICAgICBvLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBvdGhlckNvbm5lY3RvcnM6IE1lc2hbXSA9IDxNZXNoW10+dGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0LmNoaWxkcmVuLmZpbHRlcihcclxuICAgICAgICBjID0+IGMgaW5zdGFuY2VvZiBNZXNoICYmIChjLm5hbWUgJiYgKGMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2Nfc2NhXycpIHx8IGMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2NfcmVwXycpKSkpO1xyXG4gICAgICBvdGhlckNvbm5lY3RvcnMuZm9yRWFjaChvID0+IHtcclxuICAgICAgICAvLyBvLnZpc2libGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXNpemVCdXR0b25zLnB1c2gobmV3IEN1c3RvbUJ1dHRvbignJywgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlUmVzaXplQnV0dG9uQ2xpY2soby5uYW1lLCB0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpO1xyXG4gICAgICAgIH0sIG8pKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVBZGRCdXR0b25DbGljayhzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29ubmVjdG9yOiBhbnksIHBhcmVudDogT2JqZWN0M0QpOiB2b2lkIHtcclxuICAgIGxldCBhZnRlcjogYm9vbGVhbjtcclxuICAgIGlmIChjb25uZWN0b3IuYWRkQWRqdXN0ID09PSAyKSB7XHJcbiAgICAgIGFmdGVyID0gY29ubmVjdG9yLmNvbm5lY3Rvci5pbmRleE9mKCdfTV8nKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmJhc2VFbGVtZW50Tm9kZUlkID0gcGFyZW50LnVzZXJEYXRhICYmIHBhcmVudC51c2VyRGF0YS5zZWxlY3Rpb24gPyBwYXJlbnQudXNlckRhdGEuc2VsZWN0aW9uLm5vZGVJZCA6IDA7XHJcbiAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuYWN0aXZlQ29ubmVjdG9yID0gY29ubmVjdG9yO1xyXG4gICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLnNlbGVjdFNlbGVjdGlvbihcclxuICAgICAgc2VsZWN0aW9uLCB0aGlzLmFjdGl2ZU1ldGFkYXRhLCBjb25uZWN0b3IubGlua2VkUmVwZWF0YWJsZXMgIT09ICdUJywgYWZ0ZXIsIGNvbm5lY3Rvci5jb25uZWN0b3IpO1xyXG4gICAgdGhpcy5fcmVzZXRTZWxlY3RlZEVsZW1lbnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVJlc2l6ZUJ1dHRvbkNsaWNrKGNvbm5lY3RvcjogYW55LCBwYXJlbnQ6IE9iamVjdDNEKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZXNpemVTZXJ2aWNlLnJlc2l6ZUVsZW1lbnQoY29ubmVjdG9yLCBwYXJlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FuU2hvd0FkZEJ1dHRvbihjb25uZWN0b3I6IGFueSwgY29uT2JqZWN0OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoIWNvbk9iamVjdC5jb25uZWN0ZWQgfHwgY29ubmVjdG9yLmxpbmtlZFJlcGVhdGFibGVzID09PSAnVCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVwb3NpdGlvbkJ1dHRvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuZWRpdEFkZEJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIHRoaXMuX3JlcG9zaXRpb25CdXR0b24odGhpcy5lZGl0QWRkQnV0dG9uc1tpXSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsZW5yOiBudW1iZXIgPSB0aGlzLnJlc2l6ZUJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgcjogbnVtYmVyID0gMDsgciA8IGxlbnI7IHIrKykge1xyXG4gICAgICB0aGlzLl9yZXBvc2l0aW9uQnV0dG9uKHRoaXMucmVzaXplQnV0dG9uc1tyXSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsZW5jOiBudW1iZXIgPSB0aGlzLmVkaXRDdXN0b21pemVCdXR0b24ubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgYzogbnVtYmVyID0gMDsgYyA8IGxlbmM7IGMrKykge1xyXG4gICAgICB0aGlzLl9yZXBvc2l0aW9uQnV0dG9uKHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbltjXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXBvc2l0aW9uQnV0dG9uKGJ1dHRvbjogQ3VzdG9tQnV0dG9uKTogdm9pZCB7XHJcbiAgICBjb25zdCBwb3M6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgIGJ1dHRvbi5kYXRhLmdldFdvcmxkUG9zaXRpb24ocG9zKTtcclxuICAgIGNvbnN0IHNjcmVlblBvczogVmVjdG9yMiA9IHRoaXMuX3NjZW5lU2VydmljZS5wb3NpdGlvbkluU2NlbmVUb1NjcmVlbihwb3MpO1xyXG4gICAgYnV0dG9uLnhQb3MgPSBzY3JlZW5Qb3MueDtcclxuICAgIGJ1dHRvbi55UG9zID0gc2NyZWVuUG9zLnk7XHJcbiAgICBjb25zdCBkaXN0YW5jZVRvQ2FtOiBudW1iZXIgPSB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5wb3NpdGlvbi5kaXN0YW5jZVRvKHBvcyk7XHJcbiAgICBidXR0b24uc2l6ZSA9ICg0IC8gZGlzdGFuY2VUb0NhbSkgKiAzMDtcclxuICAgIGJ1dHRvbi5vcGFjaXR5ID0gTWF0aC5tYXgoMC4yNSwgMSAtIChNYXRoLm1heCg3LjAsIChNYXRoLnJvdW5kKGRpc3RhbmNlVG9DYW0gKiAxMCkgLyAxMCkpIC0gNykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0T3B0aW9uc0Zyb21TZWxlY3Rpb24oYmFzZVNlbGVjdGlvbjogU2VsZWN0aW9uKTogU2VsZWN0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5nZXRPcHRpb25zRnJvbVNlbGVjdGlvbihiYXNlU2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUFuc3dlckNvdW50UmVjZWl2ZWQoYW5zd2VyQ291bnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93QW5zd2VycyA9IGFuc3dlckNvdW50ID4gMDtcclxuICAgIGlmICh0aGlzLnNob3dBbnN3ZXJzKSB7XHJcbiAgICAgIHRoaXMuc2hvd0xpdGVTZWxlY3RvciA9ICF0aGlzLl9sb2FkaW5nRnJvbVByZXNldDtcclxuICAgIH0vKiBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX2luaXRpYWxTdGFydHVwKSB7XHJcbiAgICAgICAgLy8gdGhpcy5faU9uZS5sb2FkU2VsZWN0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuX2luaXRpYWxTdGFydHVwID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0qL1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlTG9hZElPbmVGdXJuaXR1cmVJbnRvU2NlbmVCeVNLVShza3U6IHN0cmluZywgc2V0dGluZ3M6IEhvbWVkZWNvcmF0b3JFeHRlcm5hbFNldHRpbmdzSW50ZXJmYWNlLCBwb3NpdGlvbjogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgej86IG51bWJlciB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0b2FzdCA9IG5ldyBUb2FzdCgpO1xyXG4gICAgdG9hc3QubWVzc2FnZSA9ICdNT0RFTF9MT0FESU5HJztcclxuICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93VG9hc3QodG9hc3QpO1xyXG4gICAgYXdhaXQgdGhpcy5fY29ubmVjdG9yQWRhcHRlclNlcnZpY2UuaW5pdENvbm5lY3RvcihcclxuICAgICAgICBzZXR0aW5ncyA/IHNldHRpbmdzLnNldHRpbmdzIDogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLFxyXG4gICAgICAgIHNldHRpbmdzID8gc2V0dGluZ3MubmFtZSA6IHVuZGVmaW5lZCxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIHNldHRpbmdzICYmIHNldHRpbmdzLmV4dGVybmFsU291cmNlID8gc2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2Uuc291cmNlSWQgOiB1bmRlZmluZWQpO1xyXG4gICAgY29uc3QgYXJ0aWNsZTogQXJ0aWNsZSA9IGF3YWl0IHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmxvYWRBcnRpY2xlKHNrdSk7XHJcbiAgICBjb25zdCBkcmFnZ2VkRGF0YTogRHJhZ2dlZERhdGEgPSB7XHJcbiAgICAgIG5hbWU6IHNrdSxcclxuICAgICAgY29uc3RydWN0Rm46IGFzeW5jIChwb3MpID0+IHRoaXMuX2xvYWRJT25lRnVybml0dXJlRnJvbVNrdShwb3MsIHNrdSwgc2V0dGluZ3MpLFxyXG4gICAgICB0eXBlOiBpdGVtVHlwZUZyb21QbGFjZW1lbnQoYXJ0aWNsZS5wbGFjZW1lbnQpLFxyXG4gICAgICBpT25lOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLlNldERyYWcsIGRyYWdnZWREYXRhKTtcclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TdGFydERyYWcsIHBvc2l0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUNvcHlJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1Uob3JpZ2luYWw6IEl0ZW0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHRvYXN0ID0gbmV3IFRvYXN0KCk7XHJcbiAgICB0b2FzdC5tZXNzYWdlID0gJ01PREVMX0xPQURJTkcnO1xyXG4gICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3dUb2FzdCh0b2FzdCk7XHJcbiAgICBvcmlnaW5hbC5tZXRhZGF0YS5jb252ZXJzaW9uR1RNU2VuZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgZHJhZ2dlZERhdGEgPSB7XHJcbiAgICAgIG5hbWU6IG9yaWdpbmFsLm1ldGFkYXRhLml0ZW1JZGVudGlmaWVyLFxyXG4gICAgICBjb25zdHJ1Y3RGbjogKHBvcykgPT4gdGhpcy5fbG9hZElPbmVGdXJuaXR1cmVGcm9tT3JpZ2luYWwob3JpZ2luYWwubWV0YWRhdGEsIHBvcywgb3JpZ2luYWwucm90YXRpb24pLFxyXG4gICAgICB0eXBlOiBvcmlnaW5hbC5tZXRhZGF0YS5pdGVtVHlwZSxcclxuICAgICAgaU9uZTogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TZXREcmFnLCBkcmFnZ2VkRGF0YSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuU3RhcnREcmFnLCBvcmlnaW5hbC5wb3NpdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkSU9uZUZ1cm5pdHVyZUZyb21PcmlnaW5hbChtZDogTWV0YWRhdGEsIHBvczogVmVjdG9yMywgcm90OiBFdWxlcik6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgY29uc3QgbmV3TWV0YURhdGEgPSB7Li4ubWR9O1xyXG4gICAgbmV3TWV0YURhdGEucm90YXRpb24gPSBuZXcgRXVsZXIoKS5jb3B5KHJvdCk7XHJcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKG5ld01ldGFEYXRhLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkSU9uZUZ1cm5pdHVyZUZyb21Ta3UoXHJcbiAgICBwb3M6IFZlY3RvcjMsIHNrdTogc3RyaW5nLCBzZXR0aW5ncz86IEhvbWVkZWNvcmF0b3JFeHRlcm5hbFNldHRpbmdzSW50ZXJmYWNlLCBzdGFuZEFsb25lOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIGNvbnN0IG1kOiBNZXRhZGF0YSA9IHtcclxuICAgICAgcG9zaXRpb246IHBvcyxcclxuICAgICAgaXRlbUlkZW50aWZpZXI6IHNrdSxcclxuICAgICAgZXh0ZXJuYWxTZXR0aW5nczogc2V0dGluZ3NcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKG1kLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHN0YW5kQWxvbmUsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUNvcHlJbnN0YW5jZUZvckZ1cm5pdHVyZShmdXJuaXR1cmU6IEl0ZW1bXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBmdXJuaXR1cmUubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBjb25zdCBjdXN0b21JdGVtOiBJdGVtID0gZnVybml0dXJlW2ldO1xyXG4gICAgICBpZiAoY3VzdG9tSXRlbS5tZXRhZGF0YSAmJiBjdXN0b21JdGVtLm1ldGFkYXRhLml0ZW1JZCkge1xyXG4gICAgICAgIGNvbnN0IG9sZEluc3RhbmNlOiBzdHJpbmcgPSBjdXN0b21JdGVtLm1ldGFkYXRhLml0ZW1JZDtcclxuICAgICAgICBjb25zdCBuZXdJbnN0YW5jZTogc3RyaW5nID0gYXdhaXQgdGhpcy5faU9uZS5jb3B5SW5zdGFuY2VBbmRTYXZlT3JpZ2luYWxDb25maWd1cmF0aW9uKG9sZEluc3RhbmNlLCBudWxsKTtcclxuICAgICAgICBjdXN0b21JdGVtLm1ldGFkYXRhLml0ZW1JZCA9IG5ld0luc3RhbmNlO1xyXG4gICAgICAgIGN1c3RvbUl0ZW0udXNlckRhdGEuaXRlbUlkID0gbmV3SW5zdGFuY2U7XHJcbiAgICAgICAgY3VzdG9tSXRlbS5tZXRhZGF0YS5vcmlnaW5hbEl0ZW1JZCA9IG9sZEluc3RhbmNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVMb2FkSU9uZUZ1cm5pdHVyZUZyb21QcmVzZXQoZnVybml0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBleHRlcm5hbFNvdXJjZXM6IEV4dGVybmFsU291cmNlW10gPSBbXTtcclxuICAgIGNvbnN0IGNhdGFsb2dEYXRhOiBDYXRhbG9nRGVmaW5pdGlvbltdID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yQWRhcHRlclNlcnZpY2UuZ2V0Q2F0YWxvZ0RlZmluaXRpb25zTGlzdCgpO1xyXG4gICAgaWYgKGNhdGFsb2dEYXRhKSB7XHJcbiAgICAgIGZvciAoY29uc3QgY2F0YWxvZ0l0ZW0gb2YgY2F0YWxvZ0RhdGEpIHtcclxuICAgICAgICBpZiAoY2F0YWxvZ0l0ZW0uZXh0ZXJuYWxTb3VyY2VJZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29uc3QgZXh0ZXJuYWxEYXRhOiBFeHRlcm5hbFNvdXJjZSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLmdldEV4dGVybmFsU291cmNlKGNhdGFsb2dJdGVtLmV4dGVybmFsU291cmNlSWQpO1xyXG4gICAgICAgICAgaWYgKGV4dGVybmFsRGF0YSkge1xyXG4gICAgICAgICAgICBleHRlcm5hbFNvdXJjZXMucHVzaChleHRlcm5hbERhdGEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gZnVybml0dXJlLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBpZiAoZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3MgJiYgZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2VJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxTb3VyY2VPYmo6IEV4dGVybmFsU291cmNlID1cclxuICAgICAgICAgIGV4dGVybmFsU291cmNlcy5maW5kKHNvdXJjZSA9PiBzb3VyY2Uuc2NoZW1hID09PSBmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncy5zY2hlbWEpO1xyXG4gICAgICAgIGlmIChleHRlcm5hbFNvdXJjZU9iaiAmJiBleHRlcm5hbFNvdXJjZU9iai5zY2hlbWEgIT09ICcnKSB7XHJcbiAgICAgICAgICBpZiAoZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3NbJ3VzZXJuYW1lJ10gIT09IHVuZGVmaW5lZCAmJiBmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5nc1sncGFzc3dvcmQnXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzLnNldHRpbmdzWyd1c2VybmFtZSddID0gJyc7XHJcbiAgICAgICAgICAgIGZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzLnNldHRpbmdzWydwYXNzd29yZCddID0gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZUlkID0gZXh0ZXJuYWxTb3VyY2VPYmouc291cmNlSWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdzb3VyY2Ugbm90IGF2YWlsYWJsZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBhd2FpdCB0aGlzLl9sb2FkRnVybml0dXJlRnJvbUl0ZW0oZnVybml0dXJlW2ldKTtcclxuICAgIH1cclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TaG91bGRDb3B5RnVybml0dXJlRnJvbVByZXNldCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkRnVybml0dXJlRnJvbUl0ZW0oaXRlbTogYW55KTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKFxyXG4gICAgICBpdGVtLnhwb3MsIGl0ZW0ueXBvcywgaXRlbS56cG9zKTtcclxuICAgIGNvbnN0IG1ldGFkYXRhID0ge1xyXG4gICAgICBpdGVtTmFtZTogaXRlbS5pdGVtX25hbWUsXHJcbiAgICAgIGl0ZW1EZXNjcmlwdGlvbjogaXRlbS5pdGVtX2Rlc2NyaXB0aW9uLFxyXG4gICAgICBpdGVtSWQ6IGl0ZW0uaXRlbV9pZCxcclxuICAgICAgaXRlbUlkZW50aWZpZXI6IGl0ZW0uaXRlbV9pZGVudGlmaWVyLFxyXG4gICAgICBjb25maWd1cmFibGU6ICFpc05pbGwoaXRlbS5jb25maWd1cmFibGUpID8gaXRlbS5jb25maWd1cmFibGUgOiB0cnVlLFxyXG4gICAgICBpb25lOiBpdGVtLmlvbmUsXHJcbiAgICAgIHNjaGVtYTogaXRlbS5pdGVtX3NjaGVtYSxcclxuICAgICAgcmVzaXphYmxlOiBpdGVtLnJlc2l6YWJsZSxcclxuICAgICAgZWxldmF0aW9uOiBpdGVtLmVsZXZhdGlvbixcclxuICAgICAgZWxldmF0aW9uRml4ZWQ6IGl0ZW0uZWxldmF0aW9uRml4ZWQsXHJcbiAgICAgIGVsZXZhdGlvbkFkanVzdGFibGU6IGl0ZW0uZWxldmF0aW9uQWRqdXN0YWJsZSxcclxuICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbV90eXBlLFxyXG4gICAgICBtb2RlbFVybDogaXRlbS5tb2RlbF91cmwsXHJcbiAgICAgIHRleHR1cmU6IGl0ZW0udGV4dHVyZSxcclxuICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxyXG4gICAgICByb3RhdGlvbjogbmV3IEV1bGVyKDAsIGl0ZW0ucm90YXRpb24sIDApLFxyXG4gICAgICBzY2FsZTogaXRlbS5zY2FsZSxcclxuICAgICAgY2VudGVyUGl2b3Q6IHRydWUsXHJcbiAgICAgIGlnbm9yZUludmlzaWJsZTogaXRlbS5pZ25vcmVJbnZpc2libGUsXHJcbiAgICAgIHVwZGF0ZVBpdm90T25DcmVhdGU6IHRydWUsXHJcbiAgICAgIG9wZW5pbmc6IGl0ZW0ub3BlbmluZyxcclxuICAgICAgbG9ja2VkOiBpdGVtLmxvY2tlZCxcclxuICAgICAgaXRlbUdyb3VwOiBpdGVtLml0ZW1Hcm91cCxcclxuICAgICAgZGVjb3M6IGl0ZW0uZGVjb3MsXHJcbiAgICAgIHNlbGVjdGlvbnM6IGl0ZW0uc2VsZWN0aW9ucyxcclxuICAgICAgZWxlbWVudENvbmZpZ3VyYXRpb246IGl0ZW0uZWxlbWVudENvbmZpZ3VyYXRpb24sXHJcbiAgICAgIG9uV2FsbDogaXRlbS5vbldhbGwsXHJcbiAgICAgIGV4dGVybmFsU2V0dGluZ3M6IGl0ZW0uZXh0ZXJuYWxTZXR0aW5ncyxcclxuICAgICAgY29udmVyc2lvbkdUTVNlbmQ6IGl0ZW0uY29udmVyc2lvbkdUTVNlbmQsXHJcbiAgICAgIGNvbnZlcnNpb25TdWJtaXR0ZWRQcmljZTogaXRlbS5jb252ZXJzaW9uU3VibWl0dGVkUHJpY2VcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKFxyXG4gICAgICBtZXRhZGF0YSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUxvYWRBbmRCdWlsZEZ1cm5pdHVyZShcclxuICAgIGZ1cm5pdHVyZURhdGE6IE1ldGFkYXRhLFxyXG4gICAgc2hvdWxkQ29weUluc3RhbmNlOiBib29sZWFuLFxyXG4gICAgbG9vc2VPcmlnaW5hbENvbmZpZ3VyYXRpb246IGJvb2xlYW4sXHJcbiAgICBmcm9tUHJlc2V0OiBib29sZWFuLFxyXG4gICAgc3RhbmRBbG9uZTogYm9vbGVhbixcclxuICAgIGZyb21TY3JhdGNoOiBib29sZWFuLFxyXG4gICAgc2hvd0Vycm9yRGlhbG9nOiBib29sZWFuID0gdHJ1ZSxcclxuICApOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLmluaXRDb25uZWN0b3IoXHJcbiAgICAgICAgZnVybml0dXJlRGF0YS5leHRlcm5hbFNldHRpbmdzID8gZnVybml0dXJlRGF0YS5leHRlcm5hbFNldHRpbmdzLnNldHRpbmdzIDogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLFxyXG4gICAgICAgIGZ1cm5pdHVyZURhdGEuZXh0ZXJuYWxTZXR0aW5ncyA/IGZ1cm5pdHVyZURhdGEuZXh0ZXJuYWxTZXR0aW5ncy5uYW1lIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZ1cm5pdHVyZURhdGEuZXh0ZXJuYWxTZXR0aW5ncyAmJiBmdXJuaXR1cmVEYXRhLmV4dGVybmFsU2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2UgPyBmdXJuaXR1cmVEYXRhLmV4dGVybmFsU2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2Uuc291cmNlSWQgOiBudWxsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCA9XHJcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmxvYWRGdXJuaXR1cmUoXHJcbiAgICAgICAgZnVybml0dXJlRGF0YSwgc2hvdWxkQ29weUluc3RhbmNlLCBsb29zZU9yaWdpbmFsQ29uZmlndXJhdGlvbiwgc3RhbmRBbG9uZSwgZnJvbVNjcmF0Y2gsIGZyb21QcmVzZXQpXHJcbiAgICAgICAgLmNhdGNoKChlcnJvclJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCh0eXBlb2YgZXJyb3JSZXN1bHQgPT09ICdzdHJpbmcnICYmIGVycm9yUmVzdWx0ID09PSAnRUNPTk5BQk9SVEVEJykgfHxcclxuICAgICAgICAgICAgZXJyb3JSZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5UaW1lb3V0ICkgeyAvLyB0aW1lb3V0XHJcbiAgICAgICAgICAgIGVycm9yUmVzdWx0ID0gbmV3IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQoZnVybml0dXJlRGF0YS5pdGVtSWRlbnRpZmllciwgZnVybml0dXJlRGF0YS5pdGVtTmFtZSk7XHJcbiAgICAgICAgICAgIGVycm9yUmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKCdUSU1FT1VUJykpO1xyXG4gICAgICAgICAgICBlcnJvclJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5UaW1lb3V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkZpbmlzaGVkSU9uZUZ1cm5pdHVyZUJ1aWxkKTtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGVycm9yUmVzdWx0LCBzaG93RXJyb3JEaWFsb2cpO1xyXG4gICAgICAgICAgcmV0dXJuIGVycm9yUmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkZpbmlzaGVkSU9uZUZ1cm5pdHVyZUJ1aWxkKTtcclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLkJ1aWxkRnJvbVNjcmF0Y2gpIHtcclxuICAgICAgICBpZiAoZnJvbVByZXNldCkgeyAvLyBzdGFydCBjb25maWd1cmluZyB3aGVuIGxvYWRpbmcgaXMgZG9uZVxyXG4gICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhID0gey4uLmZ1cm5pdHVyZURhdGF9O1xyXG4gICAgICAgICAgdGhpcy5faXRlbXNGcm9tU2NyYXRjaC5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZ1cm5pdHVyZURhdGEucG9zaXRpb24gPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldENlbnRlcigpO1xyXG4gICAgICAgICAgaWYgKCFzdGFuZEFsb25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uuc2hvd0RpYWxvZyh7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogRGlhbG9nVHlwZS5XYXJuaW5nLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldCgnQlVJTERfUFJPRFVDVF9GUk9NX1NDUkFUQ0gnKSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiBbe21lc3NhZ2U6IHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldCgnTU9ERUxfSEFTX05PX0RFRkFVTFRTJyl9XVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUoZnVybml0dXJlRGF0YSwgZmFsc2UsIHRydWUsIGZyb21QcmVzZXQsIHN0YW5kQWxvbmUsIHRydWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVNZXRhZGF0YSA9IHJlc3VsdCA/IHJlc3VsdC5tZXRhRGF0YSA6IG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5OZWVkc1VzZXJJbnB1dCkge1xyXG4gICAgICAgIHJlc3VsdC5tZXRhRGF0YSA9IHsuLi5mdXJuaXR1cmVEYXRhfTtcclxuICAgICAgICBpZiAoZnJvbVByZXNldCkgeyAvLyBzdGFydCBjb25maWd1cmluZyB3aGVuIGxvYWRpbmcgaXMgZG9uZVxyXG4gICAgICAgICAgdGhpcy5faXRlbXNOZWVkVXNlcklucHV0LnB1c2gocmVzdWx0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhLnBvc2l0aW9uID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRDZW50ZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLkV4dGVybmFsU291cmNlTm90QXZhaWxhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYWRkVG9MaXN0KHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmV4dGVybmFsU291cmNlTm90QXZhaWxhYmxlLCByZXN1bHQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHQuZnVybml0dXJlKSB7XHJcbiAgICAgICAgaWYgKHNob3VsZENvcHlJbnN0YW5jZSkge1xyXG4gICAgICAgICAgY29uc3QgY2xvc2VzdFdhbGxFZGdlOiBIYWxmRWRnZSA9IHRoaXMuX3Jvb21TZXJ2aWNlLmdldENsb3Nlc3RXYWxsRWRnZShyZXN1bHQuZnVybml0dXJlLnBvc2l0aW9uLngsIHJlc3VsdC5mdXJuaXR1cmUucG9zaXRpb24ueik7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LmZ1cm5pdHVyZSBpbnN0YW5jZW9mIEN1c3RvbVdhbGxGbG9vckl0ZW0gJiYgcmVzdWx0LmZ1cm5pdHVyZS5vbldhbGwpIHtcclxuICAgICAgICAgICAgKHJlc3VsdC5mdXJuaXR1cmUgYXMgQ3VzdG9tV2FsbEZsb29ySXRlbSkucGxhY2VPbkVkZ2UoY2xvc2VzdFdhbGxFZGdlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmZ1cm5pdHVyZS5tb3ZlRnJvbUZsb29yVG9XYWxsKCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5mdXJuaXR1cmUgaW5zdGFuY2VvZiBXYWxsSXRlbSAmJiAhKHJlc3VsdC5mdXJuaXR1cmUgaW5zdGFuY2VvZiBDdXN0b21XYWxsRmxvb3JJdGVtKSkge1xyXG4gICAgICAgICAgICAocmVzdWx0LmZ1cm5pdHVyZSBhcyBXYWxsSXRlbSkucGxhY2VPbkVkZ2UoY2xvc2VzdFdhbGxFZGdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5mdXJuaXR1cmUgaW5zdGFuY2VvZiBDdXN0b21XYWxsSXRlbSAmJiBzdGFuZEFsb25lKSB7XHJcbiAgICAgICAgICByZXN1bHQuZnVybml0dXJlLnBvc2l0aW9uLnkgKz0gcmVzdWx0LmZ1cm5pdHVyZS5oYWxmU2l6ZS55O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuT2Jzb2xldGUpIHtcclxuICAgICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYnNvbGV0ZU9iamVjdENhY2hlLCByZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuTG9hZGVkKSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0Lm1ldGFEYXRhLmNvbmZpZ3VyYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5hZGRUb0xpc3QodGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uub2JqZWN0TGlzdCwgcmVzdWx0KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5zaW1wbGVPYmplY3RMaXN0LCByZXN1bHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbkZpeGVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5hZGRUb0xpc3QodGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uub2JqZWN0TGlzdEZpeGVkLCByZXN1bHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fYWRkVG9TY2VuZUdUTShyZXN1bHQuZnVybml0dXJlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFmcm9tUHJlc2V0KSB7XHJcbiAgICAgIHRoaXMuX3Byb2dyZXNzU2VydmljZS5maW5pc2hEb3dubG9hZHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlTWV0YWRhdGEgPSByZXN1bHQgPyByZXN1bHQubWV0YURhdGEgOiBudWxsO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hbnN3ZXJTZWxlY3RlZChyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiB2b2lkIHtcclxuICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYmplY3RMaXN0LCByZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlRXJyb3IoZXJyb3I6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQsIHNob3dEaWFsb2c6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChlcnJvci5pbnN0YW5jZUlkIHx8IGVycm9yLnNrdSkge1xyXG4gICAgICBzd2l0Y2ggKGVycm9yLnJlc3VsdFR5cGUpIHtcclxuICAgICAgICBjYXNlIFJlc3VsdFR5cGUuQXJ0aWNsZU5vdEZvdW5kOlxyXG4gICAgICAgIGNhc2UgUmVzdWx0VHlwZS5UaW1lb3V0OlxyXG4gICAgICAgIGNhc2UgUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uTm90Rml4ZWQ6XHJcbiAgICAgICAgY2FzZSBSZXN1bHRUeXBlLkdhbWVvYmplY3ROYW1lTWlzbWF0Y2hJblNvdXJjZTpcclxuICAgICAgICBjYXNlIFJlc3VsdFR5cGUuTm9TZWxlY3Rpb25zOlxyXG4gICAgICAgIGNhc2UgUmVzdWx0VHlwZS5Ob0RlY29Ob2RlczpcclxuICAgICAgICBjYXNlIFJlc3VsdFR5cGUuRXh0ZXJuYWxTb3VyY2VOb3RBdmFpbGFibGU6XHJcbiAgICAgICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5ub3RMb2FkZWQucHVzaChlcnJvcik7XHJcbiAgICAgICAgICBpZiAoc2hvd0RpYWxvZykge1xyXG4gICAgICAgICAgICB0aGlzLl9zaG93V2FybmluZyh7dGl0bGU6ICdFUlJPUicsIG1lc3NhZ2VzOiBlcnJvci5lcnJvck1lc3NhZ2VzfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uubm90TG9hZGVkLnB1c2goZXJyb3IpO1xyXG4gICAgICAgICAgaWYgKHNob3dEaWFsb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2hvd1dhcm5pbmcoe3RpdGxlOiAnRVJST1InLCBtZXNzYWdlczogW25ldyBFcnJvck1lc3NhZ2UoJ0VSUk9SX0xPQURJTkdfRlVSTklUVVJFJyldfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzaG93RGlhbG9nKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd1dhcm5pbmcoe3RpdGxlOiAnRVJST1InLCBtZXNzYWdlczogW25ldyBFcnJvck1lc3NhZ2UoJ0VSUk9SX0xPQURJTkdfRlVSTklUVVJFJyldfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5VbmRlZmluZWRFcnJvck9jY3VyZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlQ29uZmlndXJlTW9kZUNoYW5nZShjb25maWd1cmluZ01vZGVDaGFuZ2U6IENvbmZpZ3VyaW5nTW9kZUNoYW5nZUludGVyZmFjZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuc3RhbmRBbG9uZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlndXJpbmdNb2RlQ2hhbmdlLmNvbmZpZ3VyaW5nKSB7XHJcbiAgICAgIHRoaXMuX2lPbmUuZW1wdHlTZWxlY3Rpb25zKCk7XHJcbiAgICAgIHRoaXMuX2FwcFN0YXRlU2VydmljZS51bmRvRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9hcHBTdGF0ZVNlcnZpY2UucmVkb0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hY3RpdmVNZXRhZGF0YSA9IGNvbmZpZ3VyaW5nTW9kZUNoYW5nZS5tZXRhZGF0YTtcclxuICAgICAgdGhpcy5faGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKFxyXG4gICAgICAgIGNvbmZpZ3VyaW5nTW9kZUNoYW5nZS5tZXRhZGF0YSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2FwcFN0YXRlU2VydmljZS51bmRvRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fYXBwU3RhdGVTZXJ2aWNlLnJlZG9EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93QW5zd2VycyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U2VsZWN0aW9ucyA9IGNvbmZpZ3VyaW5nTW9kZUNoYW5nZS5jb25maWd1cmluZyB8fCB0aGlzLnN0YW5kQWxvbmU7XHJcbiAgICB0aGlzLnNob3dMaXRlU2VsZWN0b3IgPSBjb25maWd1cmluZ01vZGVDaGFuZ2UuY29uZmlndXJpbmcgfHwgdGhpcy5zdGFuZEFsb25lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkTW9kZWxEaWFsb2dUb29sYmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJJY29uTW9kZWxzLFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiA4MDBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd1dhcm5pbmcoY29uZmlnOiBEaWFsb2dDb25maWcpIHtcclxuICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uuc2hvd0RpYWxvZyh7ZGF0YTogY29uZmlnfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9hZGRUb1NjZW5lR1RNKGZ1cm5pdHVyZTogSXRlbSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGZ1cm5pdHVyZSAmJiBmdXJuaXR1cmUubWV0YWRhdGEpIHtcclxuICAgICAgY29uc3QgZ29vZElkOiBudW1iZXIgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKGZ1cm5pdHVyZS5tZXRhZGF0YS5pdGVtSWRlbnRpZmllcik7XHJcbiAgICAgIGNvbnN0IGFydGljbGVGdWxsT2JqZWN0ID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yQWRhcHRlclNlcnZpY2UuZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoZ29vZElkKTtcclxuICAgICAgbGV0IGFydGljbGVDYXRlZ29yaWVzOiBBcnRpY2xlQ2F0ZWdvcnlbXTtcclxuICAgICAgaWYgKGFydGljbGVGdWxsT2JqZWN0ICYmIGFydGljbGVGdWxsT2JqZWN0LnB1YmxpY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhcnRpY2xlQ2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLmdldEFydGljbGVDYXRlZ29yaWVzKGFydGljbGVGdWxsT2JqZWN0LnB1YmxpY2F0aW9uKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgJ2FydGljbGVOcic6IGZ1cm5pdHVyZS5tZXRhZGF0YS5pdGVtSWRlbnRpZmllcixcclxuICAgICAgICAncHJvZHVjdCc6IGZ1cm5pdHVyZS5tZXRhZGF0YS5pdGVtTmFtZSxcclxuICAgICAgICAnc2NoZW1hJzogZnVybml0dXJlLm1ldGFkYXRhLnNjaGVtYVxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoZnVybml0dXJlLm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsRGF0YSA9IHtcclxuICAgICAgICAgICdleHRlcm5hbFNvdXJjZU5hbWUnOiBmdXJuaXR1cmUubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5uYW1lLFxyXG4gICAgICAgICAgJ2V4dGVybmFsU291cmNlVXJsJzogZnVybml0dXJlLm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3MudXJsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBkYXRhID0gey4uLmRhdGEsIC4uLmV4dGVybmFsRGF0YX07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFydGljbGVGdWxsT2JqZWN0KSB7XHJcbiAgICAgICAgY29uc3QgYXJ0aWNsZURhdGEgPSB7XHJcbiAgICAgICAgICAnYnJhbmRJZCc6IGFydGljbGVGdWxsT2JqZWN0LmJyYW5kSWQsXHJcbiAgICAgICAgICAncmV0YWlsRm9ybXVsYXMnOiBhcnRpY2xlRnVsbE9iamVjdC5yZXRhaWxGb3JtdWxhcyxcclxuICAgICAgICAgICd0dXJuT3Zlckdyb3VwJzogYXJ0aWNsZUZ1bGxPYmplY3QudHVybk92ZXJHcm91cFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZGF0YSA9IHsuLi5kYXRhLCAuLi5hcnRpY2xlRGF0YX07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFydGljbGVDYXRlZ29yaWVzKSB7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlMaXN0ID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBhcnRpY2xlQ2F0ZWdvcmllcykge1xyXG4gICAgICAgICAgaWYgKGNhdGVnb3J5LmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIGNhdGVnb3J5TGlzdC5wdXNoKGNhdGVnb3J5LmRlc2NyaXB0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlEYXRhID0ge1xyXG4gICAgICAgICAgJ2NhdGVnb3JpZXMnOiBjYXRlZ29yeUxpc3RcclxuICAgICAgICB9O1xyXG4gICAgICAgIGRhdGEgPSB7Li4uZGF0YSwgLi4uY2F0ZWdvcnlEYXRhfTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9nb29nbGVUYWdNYW5hZ2VyLnNlbmRFdmVudChHb29nbGVUYWdNYW5hZ2VyRXZlbnQuQWRkVG9TY2VuZSwgZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxycC1saXRlLXNlbGVjdG9yICpuZ0lmPVwiIXN0YW5kQWxvbmVcIiBjbGFzcz1cImZsb2F0aW5nXCJcclxuICAgICAgICAgICAgICAgICAgWyhzaG93KV09XCJzaG93TGl0ZVNlbGVjdG9yXCJcclxuICAgICAgICAgICAgICAgICAgW21ldGFkYXRhXT1cImFjdGl2ZU1ldGFkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25zXT1cInNob3dTZWxlY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dBbnN3ZXJzXT1cInNob3dBbnN3ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgKHNob3dDaGFuZ2UpPVwiaGFuZGxlU2hvd0NoYW5nZVNlbGVjdG9yKCRldmVudClcIlxyXG4+PC9ycC1saXRlLXNlbGVjdG9yPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0VsZW1lbnRUb29sYmFyXCI+XHJcbiAgPHJwLWVsZW1lbnQtdG9vbGJhciBjbGFzcz1cInJwLWVsZW1lbnQtdG9vbGJhciBmbG9hdGluZ1wiIFtjbGFzcy5jdXN0b21dPVwic3RhbmRBbG9uZVwiIEBzaG93RWxlbWVudFRvb2xiYXJcclxuICAgICAgICAgICAgICAgICAgICAgIFtlZGl0TWVudV09XCJlZGl0RWxlbWVudE1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dTd2FwXT1cInNob3dTd2FwQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93UG9pbnRlcl09XCJzZWxlY3RlZEVsZW1lbnRQb3NpdGlvbiAhPT0gdW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChzd2FwQ2xpY2tlZCk9XCJzd2FwRWxlbWVudCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVDbGlja2VkKT1cImRlbGV0ZUVsZW1lbnQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoYW5pbWF0aW9uQ2xpY2tlZCk9XCJvcGVuQW5pbWF0aW9uU2lkZWJhcigpXCJcclxuICA+PC9ycC1lbGVtZW50LXRvb2xiYXI+XHJcbiAgPHJwLWVsZW1lbnQtYnV0dG9ucyBjbGFzcz1cInJwLWVsZW1lbnQtYnV0dG9ucyBmbG9hdGluZ1wiIEBzaG93RWxlbWVudFRvb2xiYXJcclxuICAgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50UG9pbnRlcl09XCJlbGVtZW50VG9vbGJhcj8uZWxlbWVudFBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FkZEJ1dHRvbnNdPVwiZWRpdEFkZEJ1dHRvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbWl6ZUJ1dHRvbnNdPVwiZWRpdEN1c3RvbWl6ZUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVzaXplQnV0dG9uc109XCJyZXNpemVCdXR0b25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50UG9zaXRpb25dPVwic2VsZWN0ZWRFbGVtZW50UG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGN1c3RvbWl6ZUJ1dHRvbkNsaWNrZWQpPVwiaGFuZGxlQ3VzdG9taXplQ2xpY2soKVwiXHJcbiAgPjwvcnAtZWxlbWVudC1idXR0b25zPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q3VzdG9taXplQnV0dG9uc1wiPlxyXG4gIDxycC1lbGVtZW50LWJ1dHRvbnMgY2xhc3M9XCJycC1lbGVtZW50LWJ1dHRvbnMgZmxvYXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRQb2ludGVyXT1cImVsZW1lbnRUb29sYmFyPy5lbGVtZW50UG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9taXplQnV0dG9uc109XCJlZGl0Q3VzdG9taXplQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50UG9zaXRpb25dPVwic2VsZWN0ZWRFbGVtZW50UG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGN1c3RvbWl6ZUJ1dHRvbkNsaWNrZWQpPVwiaGFuZGxlQ3VzdG9taXplQ2xpY2soKVwiXHJcbiAgPjwvcnAtZWxlbWVudC1idXR0b25zPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdG9vbGJhckljb25Nb2RlbHM+XHJcbiAgPHJwLXRvb2xiYXItaWNvblxyXG4gICAgbWF0SWNvbj1cImZvcm1hdF9saXN0X2J1bGxldGVkXCJcclxuICAgIHRvb2x0aXA9XCJ7e2ljb25OYW1lLk9iamVjdHMgfCBsb2NhbGl6ZX19XCJcclxuICAgIChvbkNsaWNrKT1cInNldE1vZGVsRXJyb3JEaWFsb2coKVwiXHJcbiAgICBbc2hvd0xhYmVsXT1cInNob3VsZFNob3dMYWJlbFwiXHJcbiAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzZWxlY3RlZFRocmVlZE9iamVjdEFuaW1hdGlvblNpZGViYXI+XHJcbiAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwiJ0FOSU1BVEUnIHwgbG9jYWxpemVcIj48L2gyPlxyXG4gIDwvaGVhZGVyPlxyXG4gIDxycC1hbmltYXRpb24+XHJcblxyXG4gIDwvcnAtYW5pbWF0aW9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzZWxlY3RlZFRocmVlZE9iamVjdEN1c3RvbWl6YXRpb25TaWRlYmFyPlxyXG4gIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCIgW3RleHRDb250ZW50XT1cIidDVVNUT01JWkUnIHwgbG9jYWxpemVcIj48L2gyPlxyXG4gIDwvaGVhZGVyPlxyXG4gIDxycC1jdXN0b21pemVyXHJcbiAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblRvQ3VzdG9taXplXCJcclxuICA+PC9ycC1jdXN0b21pemVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIj5cclxuICA8cnAtZWxlbWVudC1zbGlkZXIgY2xhc3M9XCJycC1lbGVtZW50LXNsaWRlclwiPjwvcnAtZWxlbWVudC1zbGlkZXI+XHJcbjwvZGl2PlxyXG4iXX0=