@provoly/dashboard 0.14.11 → 0.14.13

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 (108) hide show
  1. package/admin/admin.module.d.ts +2 -1
  2. package/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.d.ts +1 -0
  3. package/admin/components/admin-classes/store/admin-class.actions.d.ts +11 -0
  4. package/admin/components/admin-classes/store/admin-class.effects.d.ts +5 -0
  5. package/admin/components/admin-classes/store/admin-class.reducer.d.ts +1 -0
  6. package/admin/components/admin-classes/store/admin-class.selectors.d.ts +1 -0
  7. package/admin/i18n/en.translations.d.ts +11 -0
  8. package/admin/i18n/fr.translations.d.ts +11 -0
  9. package/admin/store/admin.service.d.ts +1 -0
  10. package/esm2022/admin/admin.module.mjs +8 -4
  11. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +8 -4
  12. package/esm2022/admin/components/admin-classes/store/admin-class.actions.mjs +5 -2
  13. package/esm2022/admin/components/admin-classes/store/admin-class.effects.mjs +4 -1
  14. package/esm2022/admin/components/admin-classes/store/admin-class.reducer.mjs +6 -2
  15. package/esm2022/admin/components/admin-classes/store/admin-class.selectors.mjs +4 -2
  16. package/esm2022/admin/i18n/en.translations.mjs +12 -1
  17. package/esm2022/admin/i18n/fr.translations.mjs +12 -1
  18. package/esm2022/admin/store/admin.service.mjs +6 -1
  19. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +2 -1
  20. package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
  21. package/esm2022/lib/core/components/about/about.component.mjs +14 -9
  22. package/esm2022/lib/core/i18n/en.translations.mjs +3 -2
  23. package/esm2022/lib/core/i18n/fr.translations.mjs +3 -2
  24. package/esm2022/lib/core/model/widget-aggregated-chart-manifest.interface.mjs +2 -1
  25. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +2 -1
  26. package/esm2022/lib/core/public-api.mjs +4 -1
  27. package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +101 -0
  28. package/esm2022/lib/core/store/aggregation/base-aggregation.service.mjs +16 -0
  29. package/esm2022/lib/core/store/aggregation/frontend-aggregation.service.mjs +210 -0
  30. package/esm2022/lib/core/store/class/class.interface.mjs +1 -1
  31. package/esm2022/lib/core/store/config/config.service.mjs +13 -13
  32. package/esm2022/lib/core/store/config/versions.interface.mjs +1 -1
  33. package/esm2022/lib/core/store/context-menu/context-menu.actions.mjs +1 -1
  34. package/esm2022/lib/core/store/context-menu/context-menu.reducer.mjs +5 -3
  35. package/esm2022/lib/core/store/context-menu/context-menu.selectors.mjs +4 -2
  36. package/esm2022/lib/core/store/field/field.interface.mjs +1 -1
  37. package/esm2022/lib/dashboard/components/context-menu/context-menu.component.mjs +23 -17
  38. package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +1 -1
  39. package/esm2022/lib/dashboard/components/widgets/data-widget.component.mjs +1 -1
  40. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +4 -3
  41. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +5 -3
  42. package/esm2022/toolbox/components/save-view/save-view.component.mjs +5 -4
  43. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +8 -9
  44. package/esm2022/widgets/widget-aggregated-chart/public-api.mjs +1 -4
  45. package/esm2022/widgets/widget-aggregated-chart/widget-aggregated-chart.module.mjs +2 -3
  46. package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +2 -2
  47. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +3 -2
  48. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +2 -1
  49. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +94 -34
  50. package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +3 -2
  51. package/esm2022/widgets/widget-map/utils/xml-utils.class.mjs +3 -2
  52. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +47 -52
  53. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -2
  54. package/esm2022/widgets/widget-vega/i18n/en.translations.mjs +4 -2
  55. package/esm2022/widgets/widget-vega/i18n/fr.translations.mjs +4 -2
  56. package/fesm2022/provoly-dashboard-admin.mjs +55 -9
  57. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-dataset.mjs +2 -1
  59. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-toolbox.mjs +4 -3
  61. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +10 -313
  63. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  64. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +1 -1
  65. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs.map +1 -1
  66. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +2 -1
  67. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
  68. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +98 -36
  69. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  70. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +47 -52
  71. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  72. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +2 -1
  73. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  74. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +6 -2
  75. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
  76. package/fesm2022/provoly-dashboard.mjs +420 -99
  77. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  78. package/lib/core/components/about/about.component.d.ts +3 -1
  79. package/lib/core/i18n/en.translations.d.ts +1 -0
  80. package/lib/core/i18n/fr.translations.d.ts +1 -0
  81. package/lib/core/model/widget-aggregated-chart-manifest.interface.d.ts +2 -1
  82. package/lib/core/model/widget-map-manifest.interface.d.ts +1 -0
  83. package/lib/core/public-api.d.ts +3 -0
  84. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/backend-aggregation.service.d.ts +4 -1
  85. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/base-aggregation.service.d.ts +14 -1
  86. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/frontend-aggregation.service.d.ts +3 -2
  87. package/lib/core/store/class/class.interface.d.ts +1 -0
  88. package/lib/core/store/config/config.service.d.ts +2 -1
  89. package/lib/core/store/config/versions.interface.d.ts +3 -3
  90. package/lib/core/store/context-menu/context-menu.actions.d.ts +2 -0
  91. package/lib/core/store/context-menu/context-menu.reducer.d.ts +1 -0
  92. package/lib/core/store/context-menu/context-menu.selectors.d.ts +1 -0
  93. package/lib/core/store/field/field.interface.d.ts +1 -0
  94. package/lib/dashboard/components/context-menu/context-menu.component.d.ts +1 -0
  95. package/lib/dashboard/store/dashboard.selectors.d.ts +6 -1
  96. package/package.json +1 -1
  97. package/styles/base/_utils.scss +4 -0
  98. package/styles/components/_o-pry-admin-classes-customize.scss +6 -4
  99. package/toolbox/components/save-view/save-view.component.d.ts +2 -1
  100. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +1 -7
  101. package/widgets/widget-aggregated-chart/public-api.d.ts +0 -3
  102. package/widgets/widget-map/component/widget-map.component.d.ts +14 -3
  103. package/widgets/widget-table/component/widget-table.component.d.ts +6 -1
  104. package/widgets/widget-vega/i18n/en.translations.d.ts +2 -0
  105. package/widgets/widget-vega/i18n/fr.translations.d.ts +2 -0
  106. package/esm2022/widgets/widget-aggregated-chart/service/backend-aggregation.service.mjs +0 -96
  107. package/esm2022/widgets/widget-aggregated-chart/service/base-aggregation.service.mjs +0 -16
  108. package/esm2022/widgets/widget-aggregated-chart/service/frontend-aggregation.service.mjs +0 -206
@@ -19,7 +19,8 @@ export class InteractionManager {
19
19
  ? this.component.manifest.datasource[0]
20
20
  : this.component.manifest.datasource,
21
21
  from: 'map',
22
- coordinates: toLonLat(this.component.map.getCoordinateFromPixel(mapCoordinates), this.component.map.getView().getProjection()).reverse()
22
+ coordinates: toLonLat(this.component.map.getCoordinateFromPixel(mapCoordinates), this.component.map.getView().getProjection()).reverse(),
23
+ allowObjectCreation: false
23
24
  }));
24
25
  e.preventDefault();
25
26
  }
@@ -101,4 +102,4 @@ export class InteractionManager {
101
102
  });
102
103
  }
103
104
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb24tbWFuYWdlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi1tYW5hZ2VyLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQTRCLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHbkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFckUsTUFBTSxPQUFPLGtCQUFrQjtJQUEvQjtRQUdFLHlCQUFvQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQWNsRCxjQUFTLEdBQUc7WUFDVixXQUFXLEVBQUUsQ0FBQyxDQUFhLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssS0FBSyxFQUFFO29CQUNqRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM3RyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzNCLGtCQUFrQixDQUFDLElBQUksQ0FB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QyxNQUFNLENBQUM7WUFDcEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU07YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZXh0TWVudUFjdGlvbnMsIFRvb2x0aXBNb2RlIH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcEJyb3dzZXJFdmVudCwgT3ZlcmxheSB9IGZyb20gJ29sJztcbmltcG9ydCB7IFNjYWxlTGluZSB9IGZyb20gJ29sL2NvbnRyb2wnO1xuaW1wb3J0IHsgQ2lyY2xlLCBQb2ludCB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgdG9Mb25MYXQgfSBmcm9tICdvbC9wcm9qJztcbi8vIFRoaXMgaXMgbm90IGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuaW1wb3J0IHR5cGUgeyBXaWRnZXRNYXBDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQvd2lkZ2V0LW1hcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0aW9uSW50ZXJhY3Rpb24gfSBmcm9tICcuL3NlbGVjdGlvbi1pbnRlcmFjdGlvbi5jbGFzcyc7XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvbk1hbmFnZXIge1xuICBpbnRlcmFjdGlvblBvcHVwT3ZlcmxheT86IE92ZXJsYXk7XG4gIHNjYWxlQ29udHJvbD86IFNjYWxlTGluZTtcbiAgc2VsZWN0aW9uSW50ZXJhY3Rpb24gPSBuZXcgU2VsZWN0aW9uSW50ZXJhY3Rpb24oKTtcbiAgcHVibGljIHRvb2x0aXBFdmVudD86IE1hcEJyb3dzZXJFdmVudDxNb3VzZUV2ZW50PjtcbiAgcHJpdmF0ZSBjb21wb25lbnQhOiBXaWRnZXRNYXBDb21wb25lbnQ7XG5cbiAgaW5pdChjb21wb25lbnQ6IFdpZGdldE1hcENvbXBvbmVudCkge1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgIHRoaXMuYWRkQ29udGV4dE1lbnVJbnRlcmFjdGlvbigpO1xuICAgIHRoaXMuYWRkT3ZlcmxheU9uSW50ZXJhY3Rpb24oKTtcbiAgICB0aGlzLmFkZFNjYWxlQ29udHJvbCgpO1xuICAgIHRoaXMuYWRkVXBkYXRlWm9vbUFuZENlbnRlcigpO1xuICAgIHRoaXMuY29tcG9uZW50Lm1hcC5hZGRJbnRlcmFjdGlvbih0aGlzLnNlbGVjdGlvbkludGVyYWN0aW9uLmluaXQodGhpcy5jb21wb25lbnQuc3RvcmUpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHtcbiAgICBjb250ZXh0TWVudTogKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5tYW5pZmVzdC5jb250ZXh0TWVudSAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbWFwQ29vcmRpbmF0ZXMgPSB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0RXZlbnRQaXhlbChlKTtcbiAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5jb21wb25lbnQubWFwLmZvckVhY2hGZWF0dXJlQXRQaXhlbChtYXBDb29yZGluYXRlcywgKGZlYXR1cmU6IGFueSkgPT4gZmVhdHVyZS5nZXQoJ2lkJykpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBDb250ZXh0TWVudUFjdGlvbnMub3Blbih7XG4gICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICBjbGllbnRYOiBlLmNsaWVudFgsXG4gICAgICAgICAgICBjbGllbnRZOiBlLmNsaWVudFksXG4gICAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5jb21wb25lbnQubWFuaWZlc3QuZGF0YXNvdXJjZSlcbiAgICAgICAgICAgICAgPyB0aGlzLmNvbXBvbmVudC5tYW5pZmVzdC5kYXRhc291cmNlWzBdXG4gICAgICAgICAgICAgIDogdGhpcy5jb21wb25lbnQubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGZyb206ICdtYXAnLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRvTG9uTGF0KFxuICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0Q29vcmRpbmF0ZUZyb21QaXhlbChtYXBDb29yZGluYXRlcyksXG4gICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpXG4gICAgICAgICAgICApLnJldmVyc2UoKVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBvcHVwOiAoZXZlbnQ6IE1hcEJyb3dzZXJFdmVudDxNb3VzZUV2ZW50PikgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5jb21wb25lbnQubWFwLmdldEZlYXR1cmVzQXRQaXhlbChldmVudC5waXhlbCwgeyBoaXRUb2xlcmFuY2U6IDUgfSkgYXMgKFxuICAgICAgICB8IEZlYXR1cmU8Q2lyY2xlPlxuICAgICAgICB8IEZlYXR1cmU8UG9pbnQ+XG4gICAgICApW107XG4gICAgICBjb25zdCB2YWx1ZXNUb0Rpc3BsYXkgPSBbXG4gICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgdmFsdWVzXG4gICAgICAgICAgICAubWFwKCh2YWx1ZSkgPT4gdmFsdWUuZ2V0KCdpZCcpKVxuICAgICAgICAgICAgLmZpbHRlcigoaWQpID0+ICEhaWQpXG4gICAgICAgICAgICAubWFwKChpZCkgPT4gdmFsdWVzLmZpbmQoKHZhbHVlKSA9PiB2YWx1ZS5nZXQoJ2lkJykgPT09IGlkKSlcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgICAgICAgICBvQ2xhc3M6IHZhbHVlPy5nZXQoJ29DbGFzcycpLFxuICAgICAgICAgICAgICBjb29yZGluYXRlczogZXZlbnQuY29vcmRpbmF0ZSxcbiAgICAgICAgICAgICAgdmFsdWVzOiB2YWx1ZT8uZ2V0S2V5cygpLnJlZHVjZSgocCwgYykgPT4gKHsgLi4ucCwgW2NdOiB2YWx1ZS5nZXQoYykgfSksIHt9KVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIClcbiAgICAgIF07XG4gICAgICB0aGlzLmNvbXBvbmVudC5jbGFzc2ljRmVhdHVyZXMkLm5leHQodmFsdWVzVG9EaXNwbGF5KTtcbiAgICAgIGNvbnN0IHdtc0xheWVycyA9IHRoaXMuY29tcG9uZW50LmdldFdNU0xheWVycygpO1xuICAgICAgaWYgKHdtc0xheWVycykge1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5nZXRGZWF0dXJlRnJvbVNlcnZlcih3bXNMYXllcnMsIGV2ZW50LmNvb3JkaW5hdGUpO1xuICAgICAgfVxuICAgICAgdGhpcy50b29sdGlwRXZlbnQgPSBldmVudDtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBhZGRDb250ZXh0TWVudUludGVyYWN0aW9uKCkge1xuICAgIHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3cG9ydCgpLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgdGhpcy5saXN0ZW5lcnMuY29udGV4dE1lbnUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRPdmVybGF5T25JbnRlcmFjdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25Qb3B1cE92ZXJsYXkpIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25Qb3B1cE92ZXJsYXkgPSBuZXcgT3ZlcmxheSh7XG4gICAgICAgIGVsZW1lbnQ6IHRoaXMuY29tcG9uZW50LnBvcHVwLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIG9mZnNldDogWzksIDldXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC5hZGRPdmVybGF5KHRoaXMuaW50ZXJhY3Rpb25Qb3B1cE92ZXJsYXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb21wb25lbnQub3B0aW9uc0NvcHkudG9vbHRpcE1vZGUgIT09IFRvb2x0aXBNb2RlLk5PTkUpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC51bignc2luZ2xlY2xpY2snLCB0aGlzLmxpc3RlbmVycy5wb3B1cCk7XG4gICAgICB0aGlzLmNvbXBvbmVudC5tYXAub24oJ3NpbmdsZWNsaWNrJywgdGhpcy5saXN0ZW5lcnMucG9wdXApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkU2NhbGVDb250cm9sKCkge1xuICAgIGlmICghdGhpcy5zY2FsZUNvbnRyb2wpIHtcbiAgICAgIHRoaXMuc2NhbGVDb250cm9sID0gbmV3IFNjYWxlTGluZSh7XG4gICAgICAgIHVuaXRzOiAnbWV0cmljJyxcbiAgICAgICAgYmFyOiB0cnVlLFxuICAgICAgICBzdGVwczogNCxcbiAgICAgICAgdGV4dDogdHJ1ZSxcbiAgICAgICAgbWluV2lkdGg6IDE0MFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBvbmVudC5tYXAuYWRkQ29udHJvbCh0aGlzLnNjYWxlQ29udHJvbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRVcGRhdGVab29tQW5kQ2VudGVyKCkge1xuICAgIHRoaXMuY29tcG9uZW50Lm1hcC5vbignbW92ZWVuZCcsICgpID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm9wdGlvbnNDb3B5Lnpvb20gPSB7XG4gICAgICAgIHN0YXJ0OlxuICAgICAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3KCkuZ2V0Wm9vbSgpID8/XG4gICAgICAgICAgdGhpcy5jb21wb25lbnQub3B0aW9uc0NvcHkuem9vbT8uc3RhcnQgPz9cbiAgICAgICAgICB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0VmlldygpLmdldE1pblpvb20oKSxcbiAgICAgICAgbWluOiB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0VmlldygpLmdldE1pblpvb20oKSxcbiAgICAgICAgbWF4OiB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0VmlldygpLmdldE1heFpvb20oKVxuICAgICAgfTtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm9wdGlvbnNDb3B5LmNlbnRlciA9XG4gICAgICAgIHRvTG9uTGF0KHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3KCkuZ2V0Q2VudGVyKCkgPz8gWzAsIDBdKSA/PyB0aGlzLmNvbXBvbmVudC5vcHRpb25zQ29weS5jZW50ZXI7XG4gICAgICB0aGlzLmNvbXBvbmVudC56b29tQW5kQ2VudGVyJC5uZXh0KHtcbiAgICAgICAgem9vbTogdGhpcy5jb21wb25lbnQub3B0aW9uc0NvcHkuem9vbSxcbiAgICAgICAgY2VudGVyOiB0aGlzLmNvbXBvbmVudC5vcHRpb25zQ29weS5jZW50ZXJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb24tbWFuYWdlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi1tYW5hZ2VyLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQTRCLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHbkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFckUsTUFBTSxPQUFPLGtCQUFrQjtJQUEvQjtRQUdFLHlCQUFvQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQWNsRCxjQUFTLEdBQUc7WUFDVixXQUFXLEVBQUUsQ0FBQyxDQUFhLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssS0FBSyxFQUFFO29CQUNqRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM3RyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzNCLGtCQUFrQixDQUFDLElBQUksQ0FB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LENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDcEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU07YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZXh0TWVudUFjdGlvbnMsIFRvb2x0aXBNb2RlIH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcEJyb3dzZXJFdmVudCwgT3ZlcmxheSB9IGZyb20gJ29sJztcbmltcG9ydCB7IFNjYWxlTGluZSB9IGZyb20gJ29sL2NvbnRyb2wnO1xuaW1wb3J0IHsgQ2lyY2xlLCBQb2ludCB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgdG9Mb25MYXQgfSBmcm9tICdvbC9wcm9qJztcbi8vIFRoaXMgaXMgbm90IGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuaW1wb3J0IHR5cGUgeyBXaWRnZXRNYXBDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQvd2lkZ2V0LW1hcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0aW9uSW50ZXJhY3Rpb24gfSBmcm9tICcuL3NlbGVjdGlvbi1pbnRlcmFjdGlvbi5jbGFzcyc7XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvbk1hbmFnZXIge1xuICBpbnRlcmFjdGlvblBvcHVwT3ZlcmxheT86IE92ZXJsYXk7XG4gIHNjYWxlQ29udHJvbD86IFNjYWxlTGluZTtcbiAgc2VsZWN0aW9uSW50ZXJhY3Rpb24gPSBuZXcgU2VsZWN0aW9uSW50ZXJhY3Rpb24oKTtcbiAgcHVibGljIHRvb2x0aXBFdmVudD86IE1hcEJyb3dzZXJFdmVudDxNb3VzZUV2ZW50PjtcbiAgcHJpdmF0ZSBjb21wb25lbnQhOiBXaWRnZXRNYXBDb21wb25lbnQ7XG5cbiAgaW5pdChjb21wb25lbnQ6IFdpZGdldE1hcENvbXBvbmVudCkge1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgIHRoaXMuYWRkQ29udGV4dE1lbnVJbnRlcmFjdGlvbigpO1xuICAgIHRoaXMuYWRkT3ZlcmxheU9uSW50ZXJhY3Rpb24oKTtcbiAgICB0aGlzLmFkZFNjYWxlQ29udHJvbCgpO1xuICAgIHRoaXMuYWRkVXBkYXRlWm9vbUFuZENlbnRlcigpO1xuICAgIHRoaXMuY29tcG9uZW50Lm1hcC5hZGRJbnRlcmFjdGlvbih0aGlzLnNlbGVjdGlvbkludGVyYWN0aW9uLmluaXQodGhpcy5jb21wb25lbnQuc3RvcmUpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHtcbiAgICBjb250ZXh0TWVudTogKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5tYW5pZmVzdC5jb250ZXh0TWVudSAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbWFwQ29vcmRpbmF0ZXMgPSB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0RXZlbnRQaXhlbChlKTtcbiAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5jb21wb25lbnQubWFwLmZvckVhY2hGZWF0dXJlQXRQaXhlbChtYXBDb29yZGluYXRlcywgKGZlYXR1cmU6IGFueSkgPT4gZmVhdHVyZS5nZXQoJ2lkJykpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBDb250ZXh0TWVudUFjdGlvbnMub3Blbih7XG4gICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICBjbGllbnRYOiBlLmNsaWVudFgsXG4gICAgICAgICAgICBjbGllbnRZOiBlLmNsaWVudFksXG4gICAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5jb21wb25lbnQubWFuaWZlc3QuZGF0YXNvdXJjZSlcbiAgICAgICAgICAgICAgPyB0aGlzLmNvbXBvbmVudC5tYW5pZmVzdC5kYXRhc291cmNlWzBdXG4gICAgICAgICAgICAgIDogdGhpcy5jb21wb25lbnQubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGZyb206ICdtYXAnLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRvTG9uTGF0KFxuICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0Q29vcmRpbmF0ZUZyb21QaXhlbChtYXBDb29yZGluYXRlcyksXG4gICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpXG4gICAgICAgICAgICApLnJldmVyc2UoKSxcbiAgICAgICAgICAgIGFsbG93T2JqZWN0Q3JlYXRpb246IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcG9wdXA6IChldmVudDogTWFwQnJvd3NlckV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0RmVhdHVyZXNBdFBpeGVsKGV2ZW50LnBpeGVsLCB7IGhpdFRvbGVyYW5jZTogNSB9KSBhcyAoXG4gICAgICAgIHwgRmVhdHVyZTxDaXJjbGU+XG4gICAgICAgIHwgRmVhdHVyZTxQb2ludD5cbiAgICAgIClbXTtcbiAgICAgIGNvbnN0IHZhbHVlc1RvRGlzcGxheSA9IFtcbiAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICB2YWx1ZXNcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlKSA9PiB2YWx1ZS5nZXQoJ2lkJykpXG4gICAgICAgICAgICAuZmlsdGVyKChpZCkgPT4gISFpZClcbiAgICAgICAgICAgIC5tYXAoKGlkKSA9PiB2YWx1ZXMuZmluZCgodmFsdWUpID0+IHZhbHVlLmdldCgnaWQnKSA9PT0gaWQpKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICAgICAgICAgIG9DbGFzczogdmFsdWU/LmdldCgnb0NsYXNzJyksXG4gICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBldmVudC5jb29yZGluYXRlLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlPy5nZXRLZXlzKCkucmVkdWNlKChwLCBjKSA9PiAoeyAuLi5wLCBbY106IHZhbHVlLmdldChjKSB9KSwge30pXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgXTtcbiAgICAgIHRoaXMuY29tcG9uZW50LmNsYXNzaWNGZWF0dXJlcyQubmV4dCh2YWx1ZXNUb0Rpc3BsYXkpO1xuICAgICAgY29uc3Qgd21zTGF5ZXJzID0gdGhpcy5jb21wb25lbnQuZ2V0V01TTGF5ZXJzKCk7XG4gICAgICBpZiAod21zTGF5ZXJzKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50LmdldEZlYXR1cmVGcm9tU2VydmVyKHdtc0xheWVycywgZXZlbnQuY29vcmRpbmF0ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvb2x0aXBFdmVudCA9IGV2ZW50O1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGFkZENvbnRleHRNZW51SW50ZXJhY3Rpb24oKSB7XG4gICAgdGhpcy5jb21wb25lbnQubWFwLmdldFZpZXdwb3J0KCkuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCB0aGlzLmxpc3RlbmVycy5jb250ZXh0TWVudSk7XG4gIH1cblxuICBwcml2YXRlIGFkZE92ZXJsYXlPbkludGVyYWN0aW9uKCkge1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvblBvcHVwT3ZlcmxheSkge1xuICAgICAgdGhpcy5pbnRlcmFjdGlvblBvcHVwT3ZlcmxheSA9IG5ldyBPdmVybGF5KHtcbiAgICAgICAgZWxlbWVudDogdGhpcy5jb21wb25lbnQucG9wdXAubmF0aXZlRWxlbWVudCxcbiAgICAgICAgb2Zmc2V0OiBbOSwgOV1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb21wb25lbnQubWFwLmFkZE92ZXJsYXkodGhpcy5pbnRlcmFjdGlvblBvcHVwT3ZlcmxheSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbXBvbmVudC5vcHRpb25zQ29weS50b29sdGlwTW9kZSAhPT0gVG9vbHRpcE1vZGUuTk9ORSkge1xuICAgICAgdGhpcy5jb21wb25lbnQubWFwLnVuKCdzaW5nbGVjbGljaycsIHRoaXMubGlzdGVuZXJzLnBvcHVwKTtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC5vbignc2luZ2xlY2xpY2snLCB0aGlzLmxpc3RlbmVycy5wb3B1cCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRTY2FsZUNvbnRyb2woKSB7XG4gICAgaWYgKCF0aGlzLnNjYWxlQ29udHJvbCkge1xuICAgICAgdGhpcy5zY2FsZUNvbnRyb2wgPSBuZXcgU2NhbGVMaW5lKHtcbiAgICAgICAgdW5pdHM6ICdtZXRyaWMnLFxuICAgICAgICBiYXI6IHRydWUsXG4gICAgICAgIHN0ZXBzOiA0LFxuICAgICAgICB0ZXh0OiB0cnVlLFxuICAgICAgICBtaW5XaWR0aDogMTQwXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC5hZGRDb250cm9sKHRoaXMuc2NhbGVDb250cm9sKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZFVwZGF0ZVpvb21BbmRDZW50ZXIoKSB7XG4gICAgdGhpcy5jb21wb25lbnQubWFwLm9uKCdtb3ZlZW5kJywgKCkgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnQub3B0aW9uc0NvcHkuem9vbSA9IHtcbiAgICAgICAgc3RhcnQ6XG4gICAgICAgICAgdGhpcy5jb21wb25lbnQubWFwLmdldFZpZXcoKS5nZXRab29tKCkgPz9cbiAgICAgICAgICB0aGlzLmNvbXBvbmVudC5vcHRpb25zQ29weS56b29tPy5zdGFydCA/P1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3KCkuZ2V0TWluWm9vbSgpLFxuICAgICAgICBtaW46IHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3KCkuZ2V0TWluWm9vbSgpLFxuICAgICAgICBtYXg6IHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3KCkuZ2V0TWF4Wm9vbSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jb21wb25lbnQub3B0aW9uc0NvcHkuY2VudGVyID1cbiAgICAgICAgdG9Mb25MYXQodGhpcy5jb21wb25lbnQubWFwLmdldFZpZXcoKS5nZXRDZW50ZXIoKSA/PyBbMCwgMF0pID8/IHRoaXMuY29tcG9uZW50Lm9wdGlvbnNDb3B5LmNlbnRlcjtcbiAgICAgIHRoaXMuY29tcG9uZW50Lnpvb21BbmRDZW50ZXIkLm5leHQoe1xuICAgICAgICB6b29tOiB0aGlzLmNvbXBvbmVudC5vcHRpb25zQ29weS56b29tLFxuICAgICAgICBjZW50ZXI6IHRoaXMuY29tcG9uZW50Lm9wdGlvbnNDb3B5LmNlbnRlclxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { DEFAULT_PROJECTION } from '@provoly/dashboard';
1
2
  import { get as getProjection, transform } from 'ol/proj';
2
3
  export class XMLUtils {
3
4
  static find(childs, name) {
@@ -60,7 +61,7 @@ export class XMLUtils {
60
61
  if (boundingBox) {
61
62
  // @ts-ignore
62
63
  const attributes = boundingBox.attributes;
63
- const projBox = getProjection(attributes.CRS.textContent ?? 'CRS:84');
64
+ const projBox = getProjection(attributes.CRS.textContent ?? DEFAULT_PROJECTION);
64
65
  if (projBox) {
65
66
  return [
66
67
  transform([parseFloat(attributes.minx.textContent), parseFloat(attributes.miny.textContent)], projBox, map.getView().getProjection()),
@@ -72,4 +73,4 @@ export class XMLUtils {
72
73
  return null;
73
74
  }
74
75
  }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLXV0aWxzLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL3V0aWxzL3htbC11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxJQUFJLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFMUQsTUFBTSxPQUFPLFFBQVE7SUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUE2QixFQUFFLElBQVk7UUFDckQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtvQkFDMUIsT0FBTyxJQUFJLENBQUM7aUJBQ2I7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUE2QixFQUFFLElBQVk7UUFDeEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUE2QixFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUM3RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzNELElBQUksUUFBUSxFQUFFLFdBQVcsS0FBSyxLQUFLLEVBQUU7Z0JBQ25DLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLEdBQWE7UUFDdkQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDeEUsSUFBSSxhQUFhLEVBQUU7WUFDakIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNFLElBQUksWUFBWSxFQUFFO2dCQUNoQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzlELElBQUksS0FBSyxFQUFFO29CQUNULElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzVFLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7d0JBQ3ZDLHlFQUF5RTt3QkFDekUsYUFBYSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDdEY7b0JBQ0QsT0FBTyxhQUFhLENBQUM7aUJBQ3RCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBa0IsRUFBRSxHQUFRLEVBQUUsR0FBYztRQUNoRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakUsSUFBSSxhQUFhLEVBQUU7WUFDakIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNFLElBQUksV0FBVyxFQUFFO2dCQUNmLGFBQWE7Z0JBQ2IsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztnQkFDMUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLE9BQU8sRUFBRTtvQkFDWCxPQUFPO3dCQUNMLFNBQVMsQ0FDUCxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ2xGLE9BQU8sRUFDUCxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQzlCO3dCQUNELFNBQVMsQ0FDUCxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ2xGLE9BQU8sRUFDUCxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQzlCO3FCQUNGLENBQUM7aUJBQ0g7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXAgfSBmcm9tICdvbCc7XG5pbXBvcnQgeyBnZXQgYXMgZ2V0UHJvamVjdGlvbiwgdHJhbnNmb3JtIH0gZnJvbSAnb2wvcHJvaic7XG5cbmV4cG9ydCBjbGFzcyBYTUxVdGlscyB7XG4gIHN0YXRpYyBmaW5kKGNoaWxkczogTm9kZUxpc3RPZjxDaGlsZE5vZGU+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoISFjaGlsZHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZHNbaV07XG4gICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZmluZEFsbChjaGlsZHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZHNbaV07XG4gICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kV2l0aChjaGlsZHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiwgYXR0cmlidXRlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkc1tpXTtcbiAgICAgIGNvbnN0IGF0dHJOb2RlID0gWE1MVXRpbHMuZmluZChub2RlLmNoaWxkTm9kZXMsIGF0dHJpYnV0ZSk7XG4gICAgICBpZiAoYXR0ck5vZGU/LnRleHRDb250ZW50ID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0TWF0Y2hpbmdMYXllcihwYXJhbUxheWVyOiBzdHJpbmcsIGRvYzogRG9jdW1lbnQpIHtcbiAgICBjb25zdCBXTVNDYXBhYmlsaXR5ID0gWE1MVXRpbHMuZmluZChkb2MuY2hpbGROb2RlcywgJ1dNU19DYXBhYmlsaXRpZXMnKTtcbiAgICBpZiAoV01TQ2FwYWJpbGl0eSkge1xuICAgICAgY29uc3QgQ2FwYWJpbGl0aWVzID0gWE1MVXRpbHMuZmluZChXTVNDYXBhYmlsaXR5LmNoaWxkTm9kZXMsICdDYXBhYmlsaXR5Jyk7XG4gICAgICBpZiAoQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgIGNvbnN0IExheWVyID0gWE1MVXRpbHMuZmluZChDYXBhYmlsaXRpZXMuY2hpbGROb2RlcywgJ0xheWVyJyk7XG4gICAgICAgIGlmIChMYXllcikge1xuICAgICAgICAgIGxldCBtYXRjaGluZ0xheWVyID0gWE1MVXRpbHMuZmluZFdpdGgoTGF5ZXIuY2hpbGROb2RlcywgJ05hbWUnLCBwYXJhbUxheWVyKTtcbiAgICAgICAgICBjb25zdCBzcGxpdCA9IHBhcmFtTGF5ZXIuc3BsaXQoJzonKTtcbiAgICAgICAgICBpZiAoIW1hdGNoaW5nTGF5ZXIgJiYgc3BsaXQubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIC8vIFRyeSBhZ2Fpbiwgc3BsaXR0aW5nIG9uIFwiOlwiIGluIHRoZSBuYW1lIHRvIGlnbm9yZSBuYW1lc3BhY2UgaWYgcHJlc2VudFxuICAgICAgICAgICAgbWF0Y2hpbmdMYXllciA9IFhNTFV0aWxzLmZpbmRXaXRoKExheWVyLmNoaWxkTm9kZXMsICdOYW1lJywgc3BsaXRbc3BsaXQubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWF0Y2hpbmdMYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMYXllckV4dGVudChwYXJhbUxheWVyOiBzdHJpbmcsIG1hcDogTWFwLCBkb2M/OiBEb2N1bWVudCkge1xuICAgIGlmICghZG9jKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hpbmdMYXllciA9IFhNTFV0aWxzLmdldE1hdGNoaW5nTGF5ZXIocGFyYW1MYXllciwgZG9jKTtcbiAgICBpZiAobWF0Y2hpbmdMYXllcikge1xuICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSBYTUxVdGlscy5maW5kKG1hdGNoaW5nTGF5ZXIuY2hpbGROb2RlcywgJ0JvdW5kaW5nQm94Jyk7XG4gICAgICBpZiAoYm91bmRpbmdCb3gpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gYm91bmRpbmdCb3guYXR0cmlidXRlcztcbiAgICAgICAgY29uc3QgcHJvakJveCA9IGdldFByb2plY3Rpb24oYXR0cmlidXRlcy5DUlMudGV4dENvbnRlbnQgPz8gJ0NSUzo4NCcpO1xuICAgICAgICBpZiAocHJvakJveCkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0cmFuc2Zvcm0oXG4gICAgICAgICAgICAgIFtwYXJzZUZsb2F0KGF0dHJpYnV0ZXMubWlueC50ZXh0Q29udGVudCksIHBhcnNlRmxvYXQoYXR0cmlidXRlcy5taW55LnRleHRDb250ZW50KV0sXG4gICAgICAgICAgICAgIHByb2pCb3gsXG4gICAgICAgICAgICAgIG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNmb3JtKFxuICAgICAgICAgICAgICBbcGFyc2VGbG9hdChhdHRyaWJ1dGVzLm1heHgudGV4dENvbnRlbnQpLCBwYXJzZUZsb2F0KGF0dHJpYnV0ZXMubWF4eS50ZXh0Q29udGVudCldLFxuICAgICAgICAgICAgICBwcm9qQm94LFxuICAgICAgICAgICAgICBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLXV0aWxzLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL3V0aWxzL3htbC11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsR0FBRyxJQUFJLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFMUQsTUFBTSxPQUFPLFFBQVE7SUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUE2QixFQUFFLElBQVk7UUFDckQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtvQkFDMUIsT0FBTyxJQUFJLENBQUM7aUJBQ2I7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUE2QixFQUFFLElBQVk7UUFDeEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxD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QVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDbEYsT0FBTyxFQUNQLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FDOUI7cUJBQ0YsQ0FBQztpQkFDSDthQUNGO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFRkFVTFRfUFJPSkVDVElPTiB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBNYXAgfSBmcm9tICdvbCc7XG5pbXBvcnQgeyBnZXQgYXMgZ2V0UHJvamVjdGlvbiwgdHJhbnNmb3JtIH0gZnJvbSAnb2wvcHJvaic7XG5cbmV4cG9ydCBjbGFzcyBYTUxVdGlscyB7XG4gIHN0YXRpYyBmaW5kKGNoaWxkczogTm9kZUxpc3RPZjxDaGlsZE5vZGU+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoISFjaGlsZHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZHNbaV07XG4gICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZmluZEFsbChjaGlsZHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZHNbaV07XG4gICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kV2l0aChjaGlsZHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiwgYXR0cmlidXRlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkc1tpXTtcbiAgICAgIGNvbnN0IGF0dHJOb2RlID0gWE1MVXRpbHMuZmluZChub2RlLmNoaWxkTm9kZXMsIGF0dHJpYnV0ZSk7XG4gICAgICBpZiAoYXR0ck5vZGU/LnRleHRDb250ZW50ID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0TWF0Y2hpbmdMYXllcihwYXJhbUxheWVyOiBzdHJpbmcsIGRvYzogRG9jdW1lbnQpIHtcbiAgICBjb25zdCBXTVNDYXBhYmlsaXR5ID0gWE1MVXRpbHMuZmluZChkb2MuY2hpbGROb2RlcywgJ1dNU19DYXBhYmlsaXRpZXMnKTtcbiAgICBpZiAoV01TQ2FwYWJpbGl0eSkge1xuICAgICAgY29uc3QgQ2FwYWJpbGl0aWVzID0gWE1MVXRpbHMuZmluZChXTVNDYXBhYmlsaXR5LmNoaWxkTm9kZXMsICdDYXBhYmlsaXR5Jyk7XG4gICAgICBpZiAoQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgIGNvbnN0IExheWVyID0gWE1MVXRpbHMuZmluZChDYXBhYmlsaXRpZXMuY2hpbGROb2RlcywgJ0xheWVyJyk7XG4gICAgICAgIGlmIChMYXllcikge1xuICAgICAgICAgIGxldCBtYXRjaGluZ0xheWVyID0gWE1MVXRpbHMuZmluZFdpdGgoTGF5ZXIuY2hpbGROb2RlcywgJ05hbWUnLCBwYXJhbUxheWVyKTtcbiAgICAgICAgICBjb25zdCBzcGxpdCA9IHBhcmFtTGF5ZXIuc3BsaXQoJzonKTtcbiAgICAgICAgICBpZiAoIW1hdGNoaW5nTGF5ZXIgJiYgc3BsaXQubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIC8vIFRyeSBhZ2Fpbiwgc3BsaXR0aW5nIG9uIFwiOlwiIGluIHRoZSBuYW1lIHRvIGlnbm9yZSBuYW1lc3BhY2UgaWYgcHJlc2VudFxuICAgICAgICAgICAgbWF0Y2hpbmdMYXllciA9IFhNTFV0aWxzLmZpbmRXaXRoKExheWVyLmNoaWxkTm9kZXMsICdOYW1lJywgc3BsaXRbc3BsaXQubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWF0Y2hpbmdMYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMYXllckV4dGVudChwYXJhbUxheWVyOiBzdHJpbmcsIG1hcDogTWFwLCBkb2M/OiBEb2N1bWVudCkge1xuICAgIGlmICghZG9jKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hpbmdMYXllciA9IFhNTFV0aWxzLmdldE1hdGNoaW5nTGF5ZXIocGFyYW1MYXllciwgZG9jKTtcbiAgICBpZiAobWF0Y2hpbmdMYXllcikge1xuICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSBYTUxVdGlscy5maW5kKG1hdGNoaW5nTGF5ZXIuY2hpbGROb2RlcywgJ0JvdW5kaW5nQm94Jyk7XG4gICAgICBpZiAoYm91bmRpbmdCb3gpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gYm91bmRpbmdCb3guYXR0cmlidXRlcztcbiAgICAgICAgY29uc3QgcHJvakJveCA9IGdldFByb2plY3Rpb24oYXR0cmlidXRlcy5DUlMudGV4dENvbnRlbnQgPz8gREVGQVVMVF9QUk9KRUNUSU9OKTtcbiAgICAgICAgaWYgKHByb2pCb3gpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdHJhbnNmb3JtKFxuICAgICAgICAgICAgICBbcGFyc2VGbG9hdChhdHRyaWJ1dGVzLm1pbngudGV4dENvbnRlbnQpLCBwYXJzZUZsb2F0KGF0dHJpYnV0ZXMubWlueS50ZXh0Q29udGVudCldLFxuICAgICAgICAgICAgICBwcm9qQm94LFxuICAgICAgICAgICAgICBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybShcbiAgICAgICAgICAgICAgW3BhcnNlRmxvYXQoYXR0cmlidXRlcy5tYXh4LnRleHRDb250ZW50KSwgcGFyc2VGbG9hdChhdHRyaWJ1dGVzLm1heHkudGV4dENvbnRlbnQpXSxcbiAgICAgICAgICAgICAgcHJvakJveCxcbiAgICAgICAgICAgICAgbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
2
  import { baseItemProperties, ClassActions, ClassSelectors, ConfigSelectors, ContextMenuActions, ContextMenuSelectors, DashboardActions, DashboardSelectors, DataWidgetComponent, FieldSelectors, FieldType, ItemUtils, SearchSelectors, WIDGET_HEADER_HEIGHT } from '@provoly/dashboard';
3
3
  import equal from 'fast-deep-equal/es6';
4
- import { combineLatest, delay, take } from 'rxjs';
4
+ import { auditTime, BehaviorSubject, combineLatest, take } from 'rxjs';
5
5
  import { filter, map, tap, withLatestFrom } from 'rxjs/operators';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@ngrx/store";
@@ -26,14 +26,39 @@ export class WidgetTableComponent extends DataWidgetComponent {
26
26
  this.areAllSelected = false;
27
27
  this.allIds = [];
28
28
  this.contextMenuClickedId = '';
29
- this.options$ = this.manifest$.pipe(map((manifest) => manifest.options));
29
+ this._refresh$ = new BehaviorSubject(undefined);
30
+ this.classes$ = this.store.select(ClassSelectors.classes);
31
+ this.fields$ = combineLatest([this.resultSet$, this.classes$, this.store.select(FieldSelectors.fields)]).pipe(map(([resultSet, classes, fields]) => [
32
+ ...ItemUtils.getFieldsFromAvailabilityInResultSet(resultSet, classes, fields),
33
+ ...baseItemProperties.map((p) => ({ name: p, id: p }))
34
+ ]), map((fields) => fields.filter((field) => field.type !== FieldType.RAW)));
35
+ this.options$ = combineLatest([
36
+ this.manifest$.pipe(map((manifest) => manifest.options)),
37
+ this.resultSet$,
38
+ this.classes$,
39
+ this.fields$,
40
+ this.store.select(ConfigSelectors.tableDefaultAttributesDefinitions)
41
+ ]).pipe(map(([options, resultSet, classes, fields, defs]) => {
42
+ if (!options.columns || options.columns.length === 0) {
43
+ const attributes = ItemUtils.getAttributesFromRs(resultSet, classes, fields, defs);
44
+ const uniqueProps = [...new Set(attributes.map((attr) => attr.name))];
45
+ options.columns = uniqueProps.map((property) => ({
46
+ property: property,
47
+ label: property,
48
+ attributeId: attributes.find((attr) => attr.name === property)?.id
49
+ }));
50
+ }
51
+ return options;
52
+ }));
30
53
  this.subscriptions.add(this.options$.pipe(filter((opt) => !!opt)).subscribe((options) => {
31
54
  this.optionsCopy = { ...JSON.parse(JSON.stringify(options)) };
55
+ this.refresh();
32
56
  }));
33
57
  this.subscriptions.add(this.allItems$.subscribe((allObjects) => (this.allIds = allObjects.map((obj) => obj.id))));
34
58
  this.isLoading$ = combineLatest([store.select(SearchSelectors.searchLoading), this.datasourceIds$]).pipe(map(([searchLoading, datasourceIds]) => {
35
59
  return (searchLoading ?? []).filter((id) => (datasourceIds ?? []).includes(id))?.length > 0;
36
60
  }));
61
+ this.columns$ = this.options$.pipe(map((options) => options?.columns ?? []), tap(() => setTimeout(() => this.refresh(), 500)));
37
62
  this.isContextMenuOpened$ = this.store.select(ContextMenuSelectors.opened);
38
63
  this.subscriptions.add(this.resultSet$
39
64
  .pipe(filter((rs) => !!rs), map((rs) => Object.keys(rs.items)))
@@ -42,16 +67,11 @@ export class WidgetTableComponent extends DataWidgetComponent {
42
67
  if (!this.optionsCopy) {
43
68
  this.optionsCopy = {};
44
69
  }
45
- this.optionsCopy.columns = undefined;
70
+ delete this.optionsCopy.columns;
46
71
  this.emitManifest();
47
72
  }
48
73
  this.currentClasses = classes;
49
74
  }));
50
- this.classes$ = this.store.select(ClassSelectors.classes);
51
- this.fields$ = combineLatest([this.resultSet$, this.classes$, this.store.select(FieldSelectors.fields)]).pipe(map(([resultSet, classes, fields]) => [
52
- ...ItemUtils.getFieldsFromAvailabilityInResultSet(resultSet, classes, fields),
53
- ...baseItemProperties.map((p) => ({ name: p, id: p }))
54
- ]), map((fields) => fields.filter((field) => field.type !== FieldType.RAW)));
55
75
  this.selectedIds$ = this.store.select(DashboardSelectors.selectedItemIds);
56
76
  this.subscriptions.add(this.selectedIds$.subscribe((selectedIds) => this.selectedIds === selectedIds));
57
77
  this.store.dispatch(ClassActions.load());
@@ -59,35 +79,16 @@ export class WidgetTableComponent extends DataWidgetComponent {
59
79
  const sortedProps = [...props];
60
80
  sortedProps.sort((pA, pB) => pA.toLocaleLowerCase().localeCompare(pB.toLocaleLowerCase()));
61
81
  return sortedProps;
62
- }));
63
- this.columns$ = combineLatest([
64
- this.options$,
65
- this.resultSet$,
66
- this.fields$,
67
- this.classes$,
68
- this.store.select(ConfigSelectors.tableDefaultAttributesDefinitions)
69
- ]).pipe(map(([options, resultSet, fields, classes, defs]) => {
70
- if (!!options?.columns) {
71
- return options.columns;
72
- }
73
- // Make unique set of all columns
74
- const attributes = ItemUtils.getAttributesFromRs(resultSet, classes, fields, defs);
75
- const uniqueProps = [...new Set(attributes.map((attr) => attr.name))];
76
- return uniqueProps.map((property) => ({
77
- property: property,
78
- label: property,
79
- attributeId: attributes.find((attr) => attr.name === property)?.id
80
- }));
81
- }));
82
- this.subscriptions.add(this.columns$.subscribe((columns) => {
83
- this.optionsCopy = { columns: JSON.parse(JSON.stringify([...columns])) };
84
- }));
82
+ }), map((props) => props.map((prop) => ({ label: prop, property: prop }))), tap(() => setTimeout(() => this.refresh(), 500)));
85
83
  this.allSelected$ = combineLatest([this.selectedIds$, this.allItems$]).pipe(map(([selectedIds, allObjects]) => {
86
84
  const allIds = allObjects.map((object) => object.id);
87
85
  return !allIds.find((id) => !selectedIds.includes(id));
88
86
  }), tap((allSelected) => (this.areAllSelected = allSelected)));
89
87
  this.quickOrder$ = combineLatest([this.store.select(DashboardSelectors.quickOrder), this.datasourceIds$]).pipe(map(([order, nqs]) => (nqs.length === 1 ? order[nqs[0]] : undefined)));
90
- this.subscriptions.add(this.properties$.pipe(delay(10)).subscribe(() => this.cdr.detectChanges()));
88
+ this.subscriptions.add(this._refresh$.pipe(auditTime(200)).subscribe(() => this.cdr.detectChanges()));
89
+ }
90
+ refresh() {
91
+ this._refresh$.next();
91
92
  }
92
93
  emitManifest() {
93
94
  this.manifestModified.emit({
@@ -100,28 +101,23 @@ export class WidgetTableComponent extends DataWidgetComponent {
100
101
  this.optionsCopy = { columns: [] };
101
102
  }
102
103
  this.optionsCopy.columns?.push({ label: '', property: '' });
103
- setTimeout(() => {
104
- this.cdr.detectChanges();
105
- }, 100);
104
+ this.refresh();
106
105
  }
107
106
  changePropertyName($event, columnDef) {
108
107
  columnDef.property = $event;
109
- setTimeout(() => {
110
- this.cdr.detectChanges();
111
- }, 100);
108
+ this.refresh();
112
109
  }
113
110
  changeLabel($event, columnDef) {
114
111
  // @ts-ignore
115
- columnDef.label = $event.currentTarget.value;
116
- setTimeout(() => {
117
- this.cdr.detectChanges();
118
- }, 100);
112
+ const newLabel = $event.currentTarget.value;
113
+ if (columnDef.label !== newLabel) {
114
+ columnDef.label = newLabel;
115
+ this.refresh();
116
+ }
119
117
  }
120
118
  deleteColumn(i) {
121
119
  this.optionsCopy?.columns?.splice(i, 1);
122
- setTimeout(() => {
123
- this.cdr.detectChanges();
124
- }, 100);
120
+ this.refresh();
125
121
  }
126
122
  selection($event, item) {
127
123
  this.store.dispatch(DashboardActions.select({ id: item.id, cumulative: !$event.shiftKey }));
@@ -137,7 +133,8 @@ export class WidgetTableComponent extends DataWidgetComponent {
137
133
  clientX: $event.clientX,
138
134
  clientY: $event.clientY,
139
135
  resultSet: Array.isArray(this.manifest.datasource) ? this.manifest.datasource[0] : this.manifest.datasource,
140
- from: 'table'
136
+ from: 'table',
137
+ allowObjectCreation: false
141
138
  }));
142
139
  this.contextMenuClickedId = item.id;
143
140
  }
@@ -147,9 +144,7 @@ export class WidgetTableComponent extends DataWidgetComponent {
147
144
  const tmp = this.optionsCopy.columns[idxWith];
148
145
  this.optionsCopy.columns[idxWith] = this.optionsCopy.columns[idx];
149
146
  this.optionsCopy.columns[idx] = tmp;
150
- setTimeout(() => {
151
- this.cdr.detectChanges();
152
- }, 100);
147
+ this.refresh();
153
148
  }
154
149
  }
155
150
  selectAll($event) {
@@ -181,10 +176,10 @@ export class WidgetTableComponent extends DataWidgetComponent {
181
176
  return item.id;
182
177
  }
183
178
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetTableComponent, deps: [{ token: i1.Store }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
184
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetTableComponent, selector: "pry-widget-table", usesInheritance: true, ngImport: i0, template: "<pry-widget-table-css></pry-widget-table-css>\n<div class=\"o-widget o-widget--table\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-text -link-like\" (click)=\"addColumn()\">\n <pry-icon iconSvg=\"post_add\"></pry-icon>\n {{ '@pry.widget.table.addColumn' | i18n }}\n </button>\n </div>\n\n <div *ngFor=\"let columnDef of optionsCopy?.columns; let i = index\" class=\"o-settings__popup__content__fields\">\n <div class=\"o-settings__popup__content__fields__head\">\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"invertLayers(i, i - 1)\" *ngIf=\"i > 0\">\n <pry-icon iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"invertLayers(i, i + 1)\"\n *ngIf=\"i < (optionsCopy?.columns?.length ?? 0) - 1\"\n >\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields__content\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_property\">{{ '@pry.widget.table.property' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changePropertyName($event, columnDef)\"\n [itemsAsOption]=\"false\"\n [items]=\"properties$ | async\"\n [ngModel]=\"columnDef.property\"\n class=\"a-pry-select\"\n id=\"table_property\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_label\">{{ '@pry.widget.table.label' | i18n }}</label>\n <input\n id=\"table_label\"\n class=\"a-form-field\"\n type=\"text\"\n (input)=\"changeLabel($event, columnDef)\"\n [value]=\"columnDef.label\"\n />\n </div>\n </div>\n <button\n (click)=\"deleteColumn(i)\"\n aria-label=\"delete\"\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n data-func=\"delete\"\n >\n <pry-icon iconSvg=\"delete\" [width]=\"19\" [height]=\"19\"></pry-icon>\n <span>{{ '@pry.widget.table.deleteColumn' | i18n }}</span>\n </button>\n </div>\n </pry-settings>\n </pry-widget-header>\n\n <div class=\"a-table-wrapper\">\n <div class=\"a-table-loading\" *ngIf=\"isLoading$ | async; else noLoading\">\n <span class=\"a-table-loading__loader\"></span>\n </div>\n <ng-template #noLoading>\n <ng-container *ngIf=\"(allItems$ | async) ?? [] as allObjects\">\n <div class=\"no-result\" *ngIf=\"allObjects.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.table.empty' | i18n }}</span>\n </div>\n\n <ng-container *ngIf=\"(selectedIds$ | async) ?? [] as selectedIds\">\n <ng-container *ngIf=\"(columns$ | async) ?? [] as columns\">\n <table class=\"a-table\" [attr.aria-label]=\"'@pry.widget.table.description' | i18n\">\n <thead>\n <tr>\n <th *ngIf=\"allObjects?.length ?? 0 > 0\">\n <pry-checkbox [ngModel]=\"areAllSelected\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th *ngFor=\"let column of columns; let i = index\" resizable (click)=\"setOrder(column)\">\n <span>{{ column.label }}</span>\n <ng-container *ngIf=\"quickOrder$ | async as quickOrder\">\n <ng-container *ngIf=\"quickOrder.attribute === column.attributeId\">\n <pry-icon\n [iconSvg]=\"quickOrder.asc ? 'chevron_top' : 'chevron_bottom'\"\n [height]=\"12\"\n [width]=\"12\"\n ></pry-icon>\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let item of allObjects; trackBy: trackObjects\"\n [class.is-selected]=\"selectedIds.includes(item.id)\"\n [class.context-menu-selected]=\"contextMenuClickedId === item.id && (isContextMenuOpened$ | async)\"\n (contextmenu)=\"contextMenu($event, item)\"\n detachRow\n (selectedValue)=\"selection($event, item)\"\n >\n <td class=\"checkbox-wrapper\">\n <pry-checkbox [ngModel]=\"selectedIds.includes(item.id)\"></pry-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" class=\"u-ellipsis\">\n <ng-container *ngIf=\"column.property === 'metadata'\">\n <pry-metadata [item]=\"item\"></pry-metadata>\n </ng-container>\n <ng-container *ngIf=\"column.property === 'oClass'\">\n <p class=\"content-img\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n </p>\n </ng-container>\n <ng-container *ngIf=\"!['metadata', 'oClass'].includes(column.property)\">\n <pry-expand-value [value]=\"item | getValue : column.property | async\"></pry-expand-value>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered", "changeTitle"] }, { kind: "component", type: i4.MetadataComponent, selector: "pry-metadata", inputs: ["item"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.ResizableComponent, selector: "th[resizable]" }, { kind: "directive", type: i7.ResizableDirective, selector: "[resizable]", outputs: ["resizable"] }, { kind: "component", type: i8.PryWidgetTableCssComponent, selector: "pry-widget-table-css" }, { kind: "component", type: i9.ExpandValueComponent, selector: "pry-expand-value", inputs: ["value"] }, { kind: "directive", type: i10.DetachRowDirective, selector: "[detachRow]", outputs: ["selectedValue"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i4.TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }, { kind: "pipe", type: i11.GetValuePipe, name: "getValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
179
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetTableComponent, selector: "pry-widget-table", usesInheritance: true, ngImport: i0, template: "<pry-widget-table-css></pry-widget-table-css>\n<div class=\"o-widget o-widget--table\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-text -link-like\" (click)=\"addColumn()\">\n <pry-icon iconSvg=\"post_add\"></pry-icon>\n {{ '@pry.widget.table.addColumn' | i18n }}\n </button>\n </div>\n\n <div\n *ngFor=\"let columnDef of optionsCopy?.columns ?? []; let i = index\"\n class=\"o-settings__popup__content__fields\"\n >\n <div class=\"o-settings__popup__content__fields__head\">\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"invertLayers(i, i - 1)\" *ngIf=\"i > 0\">\n <pry-icon iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"invertLayers(i, i + 1)\"\n *ngIf=\"i < (optionsCopy?.columns?.length ?? 0) - 1\"\n >\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields__content\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_property\">{{ '@pry.widget.table.property' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changePropertyName($event, columnDef)\"\n [itemsAsOption]=\"true\"\n [items]=\"properties$ | async\"\n [ngModel]=\"columnDef.property\"\n bindLabel=\"label\"\n bindValue=\"property\"\n id=\"table_property\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_label\">{{ '@pry.widget.table.label' | i18n }}</label>\n <input\n id=\"table_label\"\n class=\"a-form-field\"\n type=\"text\"\n (input)=\"changeLabel($event, columnDef)\"\n [value]=\"columnDef.label\"\n />\n </div>\n </div>\n <button\n (click)=\"deleteColumn(i)\"\n aria-label=\"delete\"\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n data-func=\"delete\"\n >\n <pry-icon iconSvg=\"delete\" [width]=\"19\" [height]=\"19\"></pry-icon>\n <span>{{ '@pry.widget.table.deleteColumn' | i18n }}</span>\n </button>\n </div>\n </pry-settings>\n </pry-widget-header>\n\n <div class=\"a-table-wrapper\">\n <div class=\"a-table-loading\" *ngIf=\"isLoading$ | async; else noLoading\">\n <span class=\"a-table-loading__loader\"></span>\n </div>\n <ng-template #noLoading>\n <ng-container *ngIf=\"(allItems$ | async) ?? [] as allObjects\">\n <div class=\"no-result\" *ngIf=\"allObjects.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.table.empty' | i18n }}</span>\n </div>\n\n <ng-container *ngIf=\"(selectedIds$ | async) ?? [] as selectedIds\">\n <ng-container *ngIf=\"(columns$ | async) ?? [] as columns\">\n <table class=\"a-table\" [attr.aria-label]=\"'@pry.widget.table.description' | i18n\">\n <thead>\n <tr>\n <th *ngIf=\"allObjects?.length ?? 0 > 0\">\n <pry-checkbox [ngModel]=\"areAllSelected\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th *ngFor=\"let column of columns; let i = index\" resizable (click)=\"setOrder(column)\">\n <span>{{ column.label }}</span>\n <ng-container *ngIf=\"quickOrder$ | async as quickOrder\">\n <ng-container *ngIf=\"quickOrder.attribute === column.attributeId\">\n <pry-icon\n [iconSvg]=\"quickOrder.asc ? 'chevron_top' : 'chevron_bottom'\"\n [height]=\"12\"\n [width]=\"12\"\n ></pry-icon>\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let item of allObjects; trackBy: trackObjects\"\n [class.is-selected]=\"selectedIds.includes(item.id)\"\n [class.context-menu-selected]=\"contextMenuClickedId === item.id && (isContextMenuOpened$ | async)\"\n (contextmenu)=\"contextMenu($event, item)\"\n detachRow\n (selectedValue)=\"selection($event, item)\"\n >\n <td class=\"checkbox-wrapper\">\n <pry-checkbox [ngModel]=\"selectedIds.includes(item.id)\"></pry-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" class=\"u-ellipsis\">\n <ng-container *ngIf=\"column.property === 'metadata'\">\n <pry-metadata [item]=\"item\"></pry-metadata>\n </ng-container>\n <ng-container *ngIf=\"column.property === 'oClass'\">\n <p class=\"content-img\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n </p>\n </ng-container>\n <ng-container *ngIf=\"!['metadata', 'oClass'].includes(column.property)\">\n <pry-expand-value [value]=\"item | getValue : column.property | async\"></pry-expand-value>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered", "changeTitle"] }, { kind: "component", type: i4.MetadataComponent, selector: "pry-metadata", inputs: ["item"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.ResizableComponent, selector: "th[resizable]" }, { kind: "directive", type: i7.ResizableDirective, selector: "[resizable]", outputs: ["resizable"] }, { kind: "component", type: i8.PryWidgetTableCssComponent, selector: "pry-widget-table-css" }, { kind: "component", type: i9.ExpandValueComponent, selector: "pry-expand-value", inputs: ["value"] }, { kind: "directive", type: i10.DetachRowDirective, selector: "[detachRow]", outputs: ["selectedValue"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i4.TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }, { kind: "pipe", type: i11.GetValuePipe, name: "getValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
185
180
  }
186
181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetTableComponent, decorators: [{
187
182
  type: Component,
188
- args: [{ selector: 'pry-widget-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<pry-widget-table-css></pry-widget-table-css>\n<div class=\"o-widget o-widget--table\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-text -link-like\" (click)=\"addColumn()\">\n <pry-icon iconSvg=\"post_add\"></pry-icon>\n {{ '@pry.widget.table.addColumn' | i18n }}\n </button>\n </div>\n\n <div *ngFor=\"let columnDef of optionsCopy?.columns; let i = index\" class=\"o-settings__popup__content__fields\">\n <div class=\"o-settings__popup__content__fields__head\">\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"invertLayers(i, i - 1)\" *ngIf=\"i > 0\">\n <pry-icon iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"invertLayers(i, i + 1)\"\n *ngIf=\"i < (optionsCopy?.columns?.length ?? 0) - 1\"\n >\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields__content\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_property\">{{ '@pry.widget.table.property' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changePropertyName($event, columnDef)\"\n [itemsAsOption]=\"false\"\n [items]=\"properties$ | async\"\n [ngModel]=\"columnDef.property\"\n class=\"a-pry-select\"\n id=\"table_property\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_label\">{{ '@pry.widget.table.label' | i18n }}</label>\n <input\n id=\"table_label\"\n class=\"a-form-field\"\n type=\"text\"\n (input)=\"changeLabel($event, columnDef)\"\n [value]=\"columnDef.label\"\n />\n </div>\n </div>\n <button\n (click)=\"deleteColumn(i)\"\n aria-label=\"delete\"\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n data-func=\"delete\"\n >\n <pry-icon iconSvg=\"delete\" [width]=\"19\" [height]=\"19\"></pry-icon>\n <span>{{ '@pry.widget.table.deleteColumn' | i18n }}</span>\n </button>\n </div>\n </pry-settings>\n </pry-widget-header>\n\n <div class=\"a-table-wrapper\">\n <div class=\"a-table-loading\" *ngIf=\"isLoading$ | async; else noLoading\">\n <span class=\"a-table-loading__loader\"></span>\n </div>\n <ng-template #noLoading>\n <ng-container *ngIf=\"(allItems$ | async) ?? [] as allObjects\">\n <div class=\"no-result\" *ngIf=\"allObjects.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.table.empty' | i18n }}</span>\n </div>\n\n <ng-container *ngIf=\"(selectedIds$ | async) ?? [] as selectedIds\">\n <ng-container *ngIf=\"(columns$ | async) ?? [] as columns\">\n <table class=\"a-table\" [attr.aria-label]=\"'@pry.widget.table.description' | i18n\">\n <thead>\n <tr>\n <th *ngIf=\"allObjects?.length ?? 0 > 0\">\n <pry-checkbox [ngModel]=\"areAllSelected\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th *ngFor=\"let column of columns; let i = index\" resizable (click)=\"setOrder(column)\">\n <span>{{ column.label }}</span>\n <ng-container *ngIf=\"quickOrder$ | async as quickOrder\">\n <ng-container *ngIf=\"quickOrder.attribute === column.attributeId\">\n <pry-icon\n [iconSvg]=\"quickOrder.asc ? 'chevron_top' : 'chevron_bottom'\"\n [height]=\"12\"\n [width]=\"12\"\n ></pry-icon>\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let item of allObjects; trackBy: trackObjects\"\n [class.is-selected]=\"selectedIds.includes(item.id)\"\n [class.context-menu-selected]=\"contextMenuClickedId === item.id && (isContextMenuOpened$ | async)\"\n (contextmenu)=\"contextMenu($event, item)\"\n detachRow\n (selectedValue)=\"selection($event, item)\"\n >\n <td class=\"checkbox-wrapper\">\n <pry-checkbox [ngModel]=\"selectedIds.includes(item.id)\"></pry-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" class=\"u-ellipsis\">\n <ng-container *ngIf=\"column.property === 'metadata'\">\n <pry-metadata [item]=\"item\"></pry-metadata>\n </ng-container>\n <ng-container *ngIf=\"column.property === 'oClass'\">\n <p class=\"content-img\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n </p>\n </ng-container>\n <ng-container *ngIf=\"!['metadata', 'oClass'].includes(column.property)\">\n <pry-expand-value [value]=\"item | getValue : column.property | async\"></pry-expand-value>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n</div>\n" }]
183
+ args: [{ selector: 'pry-widget-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<pry-widget-table-css></pry-widget-table-css>\n<div class=\"o-widget o-widget--table\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-text -link-like\" (click)=\"addColumn()\">\n <pry-icon iconSvg=\"post_add\"></pry-icon>\n {{ '@pry.widget.table.addColumn' | i18n }}\n </button>\n </div>\n\n <div\n *ngFor=\"let columnDef of optionsCopy?.columns ?? []; let i = index\"\n class=\"o-settings__popup__content__fields\"\n >\n <div class=\"o-settings__popup__content__fields__head\">\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"invertLayers(i, i - 1)\" *ngIf=\"i > 0\">\n <pry-icon iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"invertLayers(i, i + 1)\"\n *ngIf=\"i < (optionsCopy?.columns?.length ?? 0) - 1\"\n >\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields__content\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_property\">{{ '@pry.widget.table.property' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changePropertyName($event, columnDef)\"\n [itemsAsOption]=\"true\"\n [items]=\"properties$ | async\"\n [ngModel]=\"columnDef.property\"\n bindLabel=\"label\"\n bindValue=\"property\"\n id=\"table_property\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_label\">{{ '@pry.widget.table.label' | i18n }}</label>\n <input\n id=\"table_label\"\n class=\"a-form-field\"\n type=\"text\"\n (input)=\"changeLabel($event, columnDef)\"\n [value]=\"columnDef.label\"\n />\n </div>\n </div>\n <button\n (click)=\"deleteColumn(i)\"\n aria-label=\"delete\"\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n data-func=\"delete\"\n >\n <pry-icon iconSvg=\"delete\" [width]=\"19\" [height]=\"19\"></pry-icon>\n <span>{{ '@pry.widget.table.deleteColumn' | i18n }}</span>\n </button>\n </div>\n </pry-settings>\n </pry-widget-header>\n\n <div class=\"a-table-wrapper\">\n <div class=\"a-table-loading\" *ngIf=\"isLoading$ | async; else noLoading\">\n <span class=\"a-table-loading__loader\"></span>\n </div>\n <ng-template #noLoading>\n <ng-container *ngIf=\"(allItems$ | async) ?? [] as allObjects\">\n <div class=\"no-result\" *ngIf=\"allObjects.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.table.empty' | i18n }}</span>\n </div>\n\n <ng-container *ngIf=\"(selectedIds$ | async) ?? [] as selectedIds\">\n <ng-container *ngIf=\"(columns$ | async) ?? [] as columns\">\n <table class=\"a-table\" [attr.aria-label]=\"'@pry.widget.table.description' | i18n\">\n <thead>\n <tr>\n <th *ngIf=\"allObjects?.length ?? 0 > 0\">\n <pry-checkbox [ngModel]=\"areAllSelected\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th *ngFor=\"let column of columns; let i = index\" resizable (click)=\"setOrder(column)\">\n <span>{{ column.label }}</span>\n <ng-container *ngIf=\"quickOrder$ | async as quickOrder\">\n <ng-container *ngIf=\"quickOrder.attribute === column.attributeId\">\n <pry-icon\n [iconSvg]=\"quickOrder.asc ? 'chevron_top' : 'chevron_bottom'\"\n [height]=\"12\"\n [width]=\"12\"\n ></pry-icon>\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let item of allObjects; trackBy: trackObjects\"\n [class.is-selected]=\"selectedIds.includes(item.id)\"\n [class.context-menu-selected]=\"contextMenuClickedId === item.id && (isContextMenuOpened$ | async)\"\n (contextmenu)=\"contextMenu($event, item)\"\n detachRow\n (selectedValue)=\"selection($event, item)\"\n >\n <td class=\"checkbox-wrapper\">\n <pry-checkbox [ngModel]=\"selectedIds.includes(item.id)\"></pry-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" class=\"u-ellipsis\">\n <ng-container *ngIf=\"column.property === 'metadata'\">\n <pry-metadata [item]=\"item\"></pry-metadata>\n </ng-container>\n <ng-container *ngIf=\"column.property === 'oClass'\">\n <p class=\"content-img\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n </p>\n </ng-container>\n <ng-container *ngIf=\"!['metadata', 'oClass'].includes(column.property)\">\n <pry-expand-value [value]=\"item | getValue : column.property | async\"></pry-expand-value>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n</div>\n" }]
189
184
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; } });
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LXRhYmxlL2NvbXBvbmVudC93aWRnZXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdGFibGUvY29tcG9uZW50L3dpZGdldC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQ0wsa0JBQWtCLEVBRWxCLFlBQVksRUFDWixjQUFjLEVBRWQsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBR1QsZUFBZSxFQUVmLG9CQUFvQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sS0FBSyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPbEUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLG1CQUFtQjtJQW9CM0QsWUFBWSxLQUFpQixFQUFFLEVBQWMsRUFBVSxHQUFzQjtRQUMzRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRG9DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBZDdFLFVBQUssR0FBRyxL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QixTQUFTLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFO2dCQUNuQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO2FBQ3pDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQXdCLEVBQUUsV0FBb0M7UUFDOUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDaEUsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sV0FBVyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzdGLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYSxFQUFFLElBQVU7UUFDcEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7OEdBL09VLG9CQUFvQjtrR0FBcEIsb0JBQW9CLCtFQ2xDakMscWtPQWlLQTs7MkZEL0hhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IsbUJBRVgsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIGJhc2VJdGVtUHJvcGVydGllcyxcbiAgQ2xhc3MsXG4gIENsYXNzQWN0aW9ucyxcbiAgQ2xhc3NTZWxlY3RvcnMsXG4gIENvbHVtbkRlZmluaXRpb24sXG4gIENvbmZpZ1NlbGVjdG9ycyxcbiAgQ29udGV4dE1lbnVBY3Rpb25zLFxuICBDb250ZXh0TWVudVNlbGVjdG9ycyxcbiAgRGFzaGJvYXJkQWN0aW9ucyxcbiAgRGFzaGJvYXJkU2VsZWN0b3JzLFxuICBEYXRhV2lkZ2V0Q29tcG9uZW50LFxuICBGaWVsZCxcbiAgRmllbGRTZWxlY3RvcnMsXG4gIEZpZWxkVHlwZSxcbiAgSXRlbSxcbiAgSXRlbVV0aWxzLFxuICBPcmRlclZhbHVlLFxuICBSZXN1bHRPcmRlcixcbiAgU2VhcmNoU2VsZWN0b3JzLFxuICBUYWJsZVdpZGdldE9wdGlvbnMsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hUXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkZWxheSwgT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0VGFibGVDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IHtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8VGFibGVXaWRnZXRPcHRpb25zPjtcbiAgY29sdW1ucyQ6IE9ic2VydmFibGU8Q29sdW1uRGVmaW5pdGlvbltdPjtcbiAgb3B0aW9uc0NvcHk/OiBUYWJsZVdpZGdldE9wdGlvbnM7XG4gIGZpZWxkcyQ6IE9ic2VydmFibGU8RmllbGRbXT47XG4gIHNlbGVjdGVkSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIEFycmF5ID0gQXJyYXk7XG4gIGN1cnJlbnRDbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZElkczogc3RyaW5nW10gPSBbXTtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcbiAgcHJpdmF0ZSBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgcHJvcGVydGllcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhbGxTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGFyZUFsbFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGFsbElkczogc3RyaW5nW10gPSBbXTtcbiAgY29udGV4dE1lbnVDbGlja2VkSWQ6IHN0cmluZyA9ICcnO1xuICBpc0NvbnRleHRNZW51T3BlbmVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcXVpY2tPcmRlciQ6IE9ic2VydmFibGU8UmVzdWx0T3JkZXIgfCB1bmRlZmluZWQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN0b3JlOiBTdG9yZTxhbnk+LCBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiBtYW5pZmVzdC5vcHRpb25zIGFzIFRhYmxlV2lkZ2V0T3B0aW9ucykpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHsgLi4uKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpIGFzIFRhYmxlV2lkZ2V0T3B0aW9ucykgfTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hbGxJdGVtcyQuc3Vic2NyaWJlKChhbGxPYmplY3RzKSA9PiAodGhpcy5hbGxJZHMgPSBhbGxPYmplY3RzLm1hcCgob2JqKSA9PiBvYmouaWQpKSkpO1xuXG4gICAgdGhpcy5pc0xvYWRpbmckID0gY29tYmluZUxhdGVzdChbc3RvcmUuc2VsZWN0KFNlYXJjaFNlbGVjdG9ycy5zZWFyY2hMb2FkaW5nKSwgdGhpcy5kYXRhc291cmNlSWRzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzZWFyY2hMb2FkaW5nLCBkYXRhc291cmNlSWRzXSkgPT4ge1xuICAgICAgICByZXR1cm4gKHNlYXJjaExvYWRpbmcgPz8gW10pLmZpbHRlcigoaWQpID0+IChkYXRhc291cmNlSWRzID8/IFtdKS5pbmNsdWRlcyhpZCkpPy5sZW5ndGggPiAwO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5pc0NvbnRleHRNZW51T3BlbmVkJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENvbnRleHRNZW51U2VsZWN0b3JzLm9wZW5lZCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5yZXN1bHRTZXQkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigocnMpID0+ICEhcnMpLFxuICAgICAgICAgIG1hcCgocnMpID0+IE9iamVjdC5rZXlzKHJzLml0ZW1zKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChjbGFzc2VzKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudENsYXNzZXMubGVuZ3RoID4gMCAmJiAhZXF1YWwodGhpcy5jdXJyZW50Q2xhc3NlcywgY2xhc3NlcykpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zQ29weSkge1xuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmVtaXRNYW5pZmVzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRDbGFzc2VzID0gY2xhc3NlcztcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuXG4gICAgdGhpcy5maWVsZHMkID0gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRTZXQkLCB0aGlzLmNsYXNzZXMkLCB0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkc10pID0+XG4gICAgICAgICAgW1xuICAgICAgICAgICAgLi4uSXRlbVV0aWxzLmdldEZpZWxkc0Zyb21BdmFpbGFiaWxpdHlJblJlc3VsdFNldChyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcyksXG4gICAgICAgICAgICAuLi5iYXNlSXRlbVByb3BlcnRpZXMubWFwKChwKSA9PiAoeyBuYW1lOiBwLCBpZDogcCB9IGFzIEZpZWxkKSlcbiAgICAgICAgICBdIGFzIEZpZWxkW11cbiAgICAgICksXG4gICAgICBtYXAoKGZpZWxkcykgPT4gZmllbGRzLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcpKVxuICAgICk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnNlbGVjdGVkSWRzJC5zdWJzY3JpYmUoKHNlbGVjdGVkSWRzKSA9PiB0aGlzLnNlbGVjdGVkSWRzID09PSBzZWxlY3RlZElkcykpO1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDbGFzc0FjdGlvbnMubG9hZCgpKTtcblxuICAgIHRoaXMucHJvcGVydGllcyQgPSB0aGlzLnJlc3VsdFNldCQucGlwZShcbiAgICAgIG1hcCgocnMpID0+IFsuLi5JdGVtVXRpbHMuZ2V0QXR0cmlidXRlc0Zyb21BdmFpbGFiaWxpdHlJblJlc3VsdFNldChycyldKSxcbiAgICAgIG1hcCgocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3Qgc29ydGVkUHJvcHMgPSBbLi4ucHJvcHNdO1xuICAgICAgICBzb3J0ZWRQcm9wcy5zb3J0KChwQSwgcEIpID0+IHBBLnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShwQi50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XG4gICAgICAgIHJldHVybiBzb3J0ZWRQcm9wcztcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuY29sdW1ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLnRhYmxlRGVmYXVsdEF0dHJpYnV0ZXNEZWZpbml0aW9ucylcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgcmVzdWx0U2V0LCBmaWVsZHMsIGNsYXNzZXMsIGRlZnNdKSA9PiB7XG4gICAgICAgIGlmICghIW9wdGlvbnM/LmNvbHVtbnMpIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9ucy5jb2x1bW5zO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSB1bmlxdWUgc2V0IG9mIGFsbCBjb2x1bW5zXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlc0Zyb21ScyhyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcywgZGVmcyk7XG4gICAgICAgIGNvbnN0IHVuaXF1ZVByb3BzID0gWy4uLm5ldyBTZXQoYXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGF0dHIubmFtZSkpXTtcblxuICAgICAgICByZXR1cm4gdW5pcXVlUHJvcHMubWFwKChwcm9wZXJ0eSkgPT4gKHtcbiAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgICAgICAgbGFiZWw6IHByb3BlcnR5LFxuICAgICAgICAgIGF0dHJpYnV0ZUlkOiBhdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gcHJvcGVydHkpPy5pZFxuICAgICAgICB9KSkgYXMgQ29sdW1uRGVmaW5pdGlvbltdO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuY29sdW1ucyQuc3Vic2NyaWJlKChjb2x1bW5zKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkgPSB7IGNvbHVtbnM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoWy4uLmNvbHVtbnNdKSkgfTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWxsU2VsZWN0ZWQkID0gY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3RlZElkcyQsIHRoaXMuYWxsSXRlbXMkXSkucGlwZShcbiAgICAgIG1hcCgoW3NlbGVjdGVkSWRzLCBhbGxPYmplY3RzXSkgPT4ge1xuICAgICAgICBjb25zdCBhbGxJZHMgPSBhbGxPYmplY3RzLm1hcCgob2JqZWN0KSA9PiBvYmplY3QuaWQpO1xuICAgICAgICByZXR1cm4gIWFsbElkcy5maW5kKChpZCkgPT4gIXNlbGVjdGVkSWRzLmluY2x1ZGVzKGlkKSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoYWxsU2VsZWN0ZWQpID0+ICh0aGlzLmFyZUFsbFNlbGVjdGVkID0gYWxsU2VsZWN0ZWQpKVxuICAgICk7XG5cbiAgICB0aGlzLnF1aWNrT3JkZXIkID0gY29tYmluZUxhdGVzdChbdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnF1aWNrT3JkZXIpLCB0aGlzLmRhdGFzb3VyY2VJZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW29yZGVyLCBucXNdKSA9PiAobnFzLmxlbmd0aCA9PT0gMSA/IG9yZGVyW25xc1swXV0gOiB1bmRlZmluZWQpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucHJvcGVydGllcyQucGlwZShkZWxheSgxMCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpKTtcbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkQ29sdW1uKCkge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weT8uY29sdW1ucykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHsgY29sdW1uczogW10gfTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zPy5wdXNoKHsgbGFiZWw6ICcnLCBwcm9wZXJ0eTogJycgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNoYW5nZVByb3BlcnR5TmFtZSgkZXZlbnQ6IGFueSwgY29sdW1uRGVmOiBDb2x1bW5EZWZpbml0aW9uKSB7XG4gICAgY29sdW1uRGVmLnByb3BlcnR5ID0gJGV2ZW50O1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBjaGFuZ2VMYWJlbCgkZXZlbnQ6IEV2ZW50LCBjb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb24pIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29sdW1uRGVmLmxhYmVsID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGRlbGV0ZUNvbHVtbihpOiBudW1iZXIpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5Py5jb2x1bW5zPy5zcGxpY2UoaSwgMSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHNlbGVjdGlvbigkZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEl0ZW0pIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0KHsgaWQ6IGl0ZW0uaWQsIGN1bXVsYXRpdmU6ICEkZXZlbnQuc2hpZnRLZXkgfSkpO1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGNvbnRleHRNZW51KCRldmVudDogTW91c2VFdmVudCwgaXRlbTogSXRlbSkge1xuICAgIGlmICh0aGlzLm1hbmlmZXN0LmNvbnRleHRNZW51ICE9PSBmYWxzZSkge1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICBDb250ZXh0TWVudUFjdGlvbnMub3Blbih7XG4gICAgICAgICAgaXRlbUlkOiBpdGVtLmlkLFxuICAgICAgICAgIGNsaWVudFg6ICRldmVudC5jbGllbnRYLFxuICAgICAgICAgIGNsaWVudFk6ICRldmVudC5jbGllbnRZLFxuICAgICAgICAgIHJlc3VsdFNldDogQXJyYXkuaXNBcnJheSh0aGlzLm1hbmlmZXN0LmRhdGFzb3VyY2UpID8gdGhpcy5tYW5pZmVzdC5kYXRhc291cmNlWzBdIDogdGhpcy5tYW5pZmVzdC5kYXRhc291cmNlLFxuICAgICAgICAgIGZyb206ICd0YWJsZSdcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbnRleHRNZW51Q2xpY2tlZElkID0gaXRlbS5pZDtcbiAgICB9XG4gIH1cblxuICBpbnZlcnRMYXllcnMoaWR4OiBudW1iZXIsIGlkeFdpdGg6IG51bWJlcikge1xuICAgIGlmICghIXRoaXMub3B0aW9uc0NvcHkgJiYgISF0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IHRtcCA9IHRoaXMub3B0aW9uc0NvcHkuY29sdW1uc1tpZHhXaXRoXTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuY29sdW1uc1tpZHhXaXRoXSA9IHRoaXMub3B0aW9uc0NvcHkuY29sdW1uc1tpZHhdO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zW2lkeF0gPSB0bXA7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RBbGwoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0TWFueSh7IGlkczogdGhpcy5hbGxJZHMgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0TWFueSh7IGlkczogW10gfSkpO1xuICAgIH1cbiAgfVxuXG4gIHNldE9yZGVyKGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbikge1xuICAgIHRoaXMuZGF0YXNvdXJjZUlkcyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBmaWx0ZXIoKG5xcykgPT4gbnFzLmxlbmd0aCA9PT0gMSksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMucXVpY2tPcmRlciQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbbnFzLCBhY3R1YWxPcmRlcl0pID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnF1aWNrT3JkZXIoe1xuICAgICAgICAgICAgZGF0YXNvdXJjZUlkOiBucXNbMF0sXG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGNvbHVtbi5hdHRyaWJ1dGVJZCA/PyAnJyxcbiAgICAgICAgICAgIGFzYzogdGhpcy5uZXh0T3JkZXIoY29sdW1uLCBhY3R1YWxPcmRlcilcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG5leHRPcmRlcihjb2x1bW46IENvbHVtbkRlZmluaXRpb24sIGFjdHVhbE9yZGVyOiBSZXN1bHRPcmRlciB8IHVuZGVmaW5lZCk6IE9yZGVyVmFsdWUge1xuICAgIGlmICghYWN0dWFsT3JkZXIgfHwgYWN0dWFsT3JkZXIuYXR0cmlidXRlICE9PSBjb2x1bW4uYXR0cmlidXRlSWQpIHtcbiAgICAgIHJldHVybiAnYXNjJztcbiAgICB9XG4gICAgcmV0dXJuIGFjdHVhbE9yZGVyLmFzYyA9PT0gJ2FzYycgPyAnZGVzYycgOiBhY3R1YWxPcmRlci5hc2MgPT09ICdkZXNjJyA/IHVuZGVmaW5lZCA6ICdhc2MnO1xuICB9XG5cbiAgdHJhY2tPYmplY3RzKGluZGV4OiBudW1iZXIsIGl0ZW06IEl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5pZDtcbiAgfVxufVxuIiwiPHByeS13aWRnZXQtdGFibGUtY3NzPjwvcHJ5LXdpZGdldC10YWJsZS1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLXRhYmxlXCI+XG4gIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgICNoZWFkZXJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICA+XG4gICAgPHByeS1zZXR0aW5nc1xuICAgICAgKHNhdmVUcmlnZ2VyZWQpPVwiZW1pdE1hbmlmZXN0KClcIlxuICAgICAgKGNoYW5nZVRpdGxlKT1cImNoYW5nZVdpZGdldFRpdGxlKCRldmVudClcIlxuICAgICAgW2hlYWRlclByZXNlbnRdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgW29wZW4kXT1cIm9wZW4kXCJcbiAgICAgIGNsYXNzPVwiby1zZXR0aW5nc1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19hY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tdGV4dCAtbGluay1saWtlXCIgKGNsaWNrKT1cImFkZENvbHVtbigpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJwb3N0X2FkZFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmFkZENvbHVtbicgfCBpMThuIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbkRlZiBvZiBvcHRpb25zQ29weT8uY29sdW1uczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc19faGVhZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cImludmVydExheWVycyhpLCBpIC0gMSlcIiAqbmdJZj1cImkgPiAwXCI+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmxlY2hlX2hhdXRcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkuYWN0aW9uLm1vdmVVcCcgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW52ZXJ0TGF5ZXJzKGksIGkgKyAxKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaSA8IChvcHRpb25zQ29weT8uY29sdW1ucz8ubGVuZ3RoID8/IDApIC0gMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmxlY2hlX2Jhc1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS5hY3Rpb24ubW92ZURvd24nIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc19fY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJ0YWJsZV9wcm9wZXJ0eVwiPnt7ICdAcHJ5LndpZGdldC50YWJsZS5wcm9wZXJ0eScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVByb3BlcnR5TmFtZSgkZXZlbnQsIGNvbHVtbkRlZilcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJwcm9wZXJ0aWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY29sdW1uRGVmLnByb3BlcnR5XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICBpZD1cInRhYmxlX3Byb3BlcnR5XCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidGFibGVfbGFiZWxcIj57eyAnQHByeS53aWRnZXQudGFibGUubGFiZWwnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJ0YWJsZV9sYWJlbFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlTGFiZWwoJGV2ZW50LCBjb2x1bW5EZWYpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbHVtbkRlZi5sYWJlbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb2x1bW4oaSlcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJkZWxldGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tdGV4dCAtbGluay1saWtlXCJcbiAgICAgICAgICBkYXRhLWZ1bmM9XCJkZWxldGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJkZWxldGVcIiBbd2lkdGhdPVwiMTlcIiBbaGVpZ2h0XT1cIjE5XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQudGFibGUuZGVsZXRlQ29sdW1uJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9wcnktc2V0dGluZ3M+XG4gIDwvcHJ5LXdpZGdldC1oZWFkZXI+XG5cbiAgPGRpdiBjbGFzcz1cImEtdGFibGUtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJhLXRhYmxlLWxvYWRpbmdcIiAqbmdJZj1cImlzTG9hZGluZyQgfCBhc3luYzsgZWxzZSBub0xvYWRpbmdcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYS10YWJsZS1sb2FkaW5nX19sb2FkZXJcIj48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNub0xvYWRpbmc+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGFsbEl0ZW1zJCB8IGFzeW5jKSA/PyBbXSBhcyBhbGxPYmplY3RzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuby1yZXN1bHRcIiAqbmdJZj1cImFsbE9iamVjdHMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmVtcHR5JyB8IGkxOG4gfX1cIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmVtcHR5JyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoc2VsZWN0ZWRJZHMkIHwgYXN5bmMpID8/IFtdIGFzIHNlbGVjdGVkSWRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjb2x1bW5zJCB8IGFzeW5jKSA/PyBbXSBhcyBjb2x1bW5zXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJhLXRhYmxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQHByeS53aWRnZXQudGFibGUuZGVzY3JpcHRpb24nIHwgaTE4blwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiYWxsT2JqZWN0cz8ubGVuZ3RoID8/IDAgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggW25nTW9kZWxdPVwiYXJlQWxsU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50KVwiPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCBpID0gaW5kZXhcIiByZXNpemFibGUgKGNsaWNrKT1cInNldE9yZGVyKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVpY2tPcmRlciQgfCBhc3luYyBhcyBxdWlja09yZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrT3JkZXIuYXR0cmlidXRlID09PSBjb2x1bW4uYXR0cmlidXRlSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvblN2Z109XCJxdWlja09yZGVyLmFzYyA/ICdjaGV2cm9uX3RvcCcgOiAnY2hldnJvbl9ib3R0b20nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFsbE9iamVjdHM7IHRyYWNrQnk6IHRyYWNrT2JqZWN0c1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRJZHMuaW5jbHVkZXMoaXRlbS5pZClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvbnRleHQtbWVudS1zZWxlY3RlZF09XCJjb250ZXh0TWVudUNsaWNrZWRJZCA9PT0gaXRlbS5pZCAmJiAoaXNDb250ZXh0TWVudU9wZW5lZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgZGV0YWNoUm93XG4gICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRWYWx1ZSk9XCJzZWxlY3Rpb24oJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2hlY2tib3gtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IFtuZ01vZGVsXT1cInNlbGVjdGVkSWRzLmluY2x1ZGVzKGl0ZW0uaWQpXCI+PC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIGNsYXNzPVwidS1lbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnByb3BlcnR5ID09PSAnbWV0YWRhdGEnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHByeS1tZXRhZGF0YSBbaXRlbV09XCJpdGVtXCI+PC9wcnktbWV0YWRhdGE+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnByb3BlcnR5ID09PSAnb0NsYXNzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29udGVudC1pbWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIyNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIyNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbSB8IHRyYW5zbGF0ZUl0ZW1Ub1N5bWJvbCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJpdGVtLm9DbGFzcyB8IHRyYW5zbGF0ZUlkIDogeyB0eXBlOiAnY2xhc3MnLCBvdXRwdXQ6ICduYW1lJyB9IHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIVsnbWV0YWRhdGEnLCAnb0NsYXNzJ10uaW5jbHVkZXMoY29sdW1uLnByb3BlcnR5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwcnktZXhwYW5kLXZhbHVlIFt2YWx1ZV09XCJpdGVtIHwgZ2V0VmFsdWUgOiBjb2x1bW4ucHJvcGVydHkgfCBhc3luY1wiPjwvcHJ5LWV4cGFuZC12YWx1ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LXRhYmxlL2NvbXBvbmVudC93aWRnZXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdGFibGUvY29tcG9uZW50L3dpZGdldC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQ0wsa0JBQWtCLEVBRWxCLFlBQVksRUFDWixjQUFjLEVBRWQsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBR1QsZUFBZSxFQUVmLG9CQUFvQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sS0FBSyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBT2xFLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxtQkFBbUI7SUFvQjNELFlBQVksS0FBaUIsRUFBRSxFQUFjLEVBQVUsR0FBc0I7UUFDM0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQURvQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWQ3RSxV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QUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO2dCQUMxQixZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRTtnQkFDbkMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQzthQUN6QyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFNBQVMsQ0FBQyxNQUF3QixFQUFFLFdBQW9DO1FBQzlFLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQ2hFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLFdBQVcsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWEsRUFBRSxJQUFVO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDOzhHQTVPVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwrRUNsQ2pDLDZxT0FzS0E7OzJGRHBJYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUVYLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBiYXNlSXRlbVByb3BlcnRpZXMsXG4gIENsYXNzLFxuICBDbGFzc0FjdGlvbnMsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBDb2x1bW5EZWZpbml0aW9uLFxuICBDb25maWdTZWxlY3RvcnMsXG4gIENvbnRleHRNZW51QWN0aW9ucyxcbiAgQ29udGV4dE1lbnVTZWxlY3RvcnMsXG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEl0ZW0sXG4gIEl0ZW1VdGlscyxcbiAgT3JkZXJWYWx1ZSxcbiAgUmVzdWx0T3JkZXIsXG4gIFNlYXJjaFNlbGVjdG9ycyxcbiAgVGFibGVXaWRnZXRPcHRpb25zLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCB7XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPFRhYmxlV2lkZ2V0T3B0aW9ucz47XG4gIGNvbHVtbnMkOiBPYnNlcnZhYmxlPENvbHVtbkRlZmluaXRpb25bXT47XG4gIG9wdGlvbnNDb3B5PzogVGFibGVXaWRnZXRPcHRpb25zO1xuICBmaWVsZHMkOiBPYnNlcnZhYmxlPEZpZWxkW10+O1xuICBzZWxlY3RlZElkcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBBcnJheSA9IEFycmF5O1xuICBjdXJyZW50Q2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdID0gW107XG4gIFdJREdFVF9IRUFERVJfSEVJR0hUID0gV0lER0VUX0hFQURFUl9IRUlHSFQ7XG4gIHByaXZhdGUgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIHByb3BlcnRpZXMkOiBPYnNlcnZhYmxlPHsgbGFiZWw6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9W10+O1xuICBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhbGxTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGFyZUFsbFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGFsbElkczogc3RyaW5nW10gPSBbXTtcbiAgY29udGV4dE1lbnVDbGlja2VkSWQ6IHN0cmluZyA9ICcnO1xuICBpc0NvbnRleHRNZW51T3BlbmVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcXVpY2tPcmRlciQ6IE9ic2VydmFibGU8UmVzdWx0T3JkZXIgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIF9yZWZyZXNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4odW5kZWZpbmVkKTtcbiAgY29uc3RydWN0b3Ioc3RvcmU6IFN0b3JlPGFueT4sIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuXG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuXG4gICAgdGhpcy5maWVsZHMkID0gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRTZXQkLCB0aGlzLmNsYXNzZXMkLCB0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkc10pID0+XG4gICAgICAgICAgW1xuICAgICAgICAgICAgLi4uSXRlbVV0aWxzLmdldEZpZWxkc0Zyb21BdmFpbGFiaWxpdHlJblJlc3VsdFNldChyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcyksXG4gICAgICAgICAgICAuLi5iYXNlSXRlbVByb3BlcnRpZXMubWFwKChwKSA9PiAoeyBuYW1lOiBwLCBpZDogcCB9IGFzIEZpZWxkKSlcbiAgICAgICAgICBdIGFzIEZpZWxkW11cbiAgICAgICksXG4gICAgICBtYXAoKGZpZWxkcykgPT4gZmllbGRzLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcpKVxuICAgICk7XG5cbiAgICB0aGlzLm9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm1hbmlmZXN0JC5waXBlKG1hcCgobWFuaWZlc3QpID0+IG1hbmlmZXN0Lm9wdGlvbnMgYXMgVGFibGVXaWRnZXRPcHRpb25zKSksXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLnRhYmxlRGVmYXVsdEF0dHJpYnV0ZXNEZWZpbml0aW9ucylcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMsIGRlZnNdKSA9PiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb2x1bW5zIHx8IG9wdGlvbnMuY29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gSXRlbVV0aWxzLmdldEF0dHJpYnV0ZXNGcm9tUnMocmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMsIGRlZnMpO1xuICAgICAgICAgIGNvbnN0IHVuaXF1ZVByb3BzID0gWy4uLm5ldyBTZXQoYXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGF0dHIubmFtZSkpXTtcblxuICAgICAgICAgIG9wdGlvbnMuY29sdW1ucyA9IHVuaXF1ZVByb3BzLm1hcCgocHJvcGVydHkpID0+ICh7XG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgICAgICAgICBsYWJlbDogcHJvcGVydHksXG4gICAgICAgICAgICBhdHRyaWJ1dGVJZDogYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLm5hbWUgPT09IHByb3BlcnR5KT8uaWRcbiAgICAgICAgICB9KSkgYXMgQ29sdW1uRGVmaW5pdGlvbltdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHsgLi4uKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpIGFzIFRhYmxlV2lkZ2V0T3B0aW9ucykgfTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWxsSXRlbXMkLnN1YnNjcmliZSgoYWxsT2JqZWN0cykgPT4gKHRoaXMuYWxsSWRzID0gYWxsT2JqZWN0cy5tYXAoKG9iaikgPT4gb2JqLmlkKSkpKTtcblxuICAgIHRoaXMuaXNMb2FkaW5nJCA9IGNvbWJpbmVMYXRlc3QoW3N0b3JlLnNlbGVjdChTZWFyY2hTZWxlY3RvcnMuc2VhcmNoTG9hZGluZyksIHRoaXMuZGF0YXNvdXJjZUlkcyRdKS5waXBlKFxuICAgICAgbWFwKChbc2VhcmNoTG9hZGluZywgZGF0YXNvdXJjZUlkc10pID0+IHtcbiAgICAgICAgcmV0dXJuIChzZWFyY2hMb2FkaW5nID8/IFtdKS5maWx0ZXIoKGlkKSA9PiAoZGF0YXNvdXJjZUlkcyA/PyBbXSkuaW5jbHVkZXMoaWQpKT8ubGVuZ3RoID4gMDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuY29sdW1ucyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+IG9wdGlvbnM/LmNvbHVtbnMgPz8gW10pLFxuICAgICAgdGFwKCgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIDUwMCkpXG4gICAgKTtcblxuICAgIHRoaXMuaXNDb250ZXh0TWVudU9wZW5lZCQgPSB0aGlzLnN0b3JlLnNlbGVjdChDb250ZXh0TWVudVNlbGVjdG9ycy5vcGVuZWQpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucmVzdWx0U2V0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJzKSA9PiAhIXJzKSxcbiAgICAgICAgICBtYXAoKHJzKSA9PiBPYmplY3Qua2V5cyhycy5pdGVtcykpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoY2xhc3NlcykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDbGFzc2VzLmxlbmd0aCA+IDAgJiYgIWVxdWFsKHRoaXMuY3VycmVudENsYXNzZXMsIGNsYXNzZXMpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuY29sdW1ucztcbiAgICAgICAgICAgIHRoaXMuZW1pdE1hbmlmZXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VycmVudENsYXNzZXMgPSBjbGFzc2VzO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnNlbGVjdGVkSWRzJC5zdWJzY3JpYmUoKHNlbGVjdGVkSWRzKSA9PiB0aGlzLnNlbGVjdGVkSWRzID09PSBzZWxlY3RlZElkcykpO1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDbGFzc0FjdGlvbnMubG9hZCgpKTtcblxuICAgIHRoaXMucHJvcGVydGllcyQgPSB0aGlzLnJlc3VsdFNldCQucGlwZShcbiAgICAgIG1hcCgocnMpID0+IFsuLi5JdGVtVXRpbHMuZ2V0QXR0cmlidXRlc0Zyb21BdmFpbGFiaWxpdHlJblJlc3VsdFNldChycyldKSxcbiAgICAgIG1hcCgocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3Qgc29ydGVkUHJvcHMgPSBbLi4ucHJvcHNdO1xuICAgICAgICBzb3J0ZWRQcm9wcy5zb3J0KChwQSwgcEIpID0+IHBBLnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShwQi50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XG4gICAgICAgIHJldHVybiBzb3J0ZWRQcm9wcztcbiAgICAgIH0pLFxuICAgICAgbWFwKChwcm9wcykgPT4gcHJvcHMubWFwKChwcm9wKSA9PiAoeyBsYWJlbDogcHJvcCwgcHJvcGVydHk6IHByb3AgfSkpKSxcbiAgICAgIHRhcCgoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVmcmVzaCgpLCA1MDApKVxuICAgICk7XG5cbiAgICB0aGlzLmFsbFNlbGVjdGVkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc2VsZWN0ZWRJZHMkLCB0aGlzLmFsbEl0ZW1zJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzZWxlY3RlZElkcywgYWxsT2JqZWN0c10pID0+IHtcbiAgICAgICAgY29uc3QgYWxsSWRzID0gYWxsT2JqZWN0cy5tYXAoKG9iamVjdCkgPT4gb2JqZWN0LmlkKTtcbiAgICAgICAgcmV0dXJuICFhbGxJZHMuZmluZCgoaWQpID0+ICFzZWxlY3RlZElkcy5pbmNsdWRlcyhpZCkpO1xuICAgICAgfSksXG4gICAgICB0YXAoKGFsbFNlbGVjdGVkKSA9PiAodGhpcy5hcmVBbGxTZWxlY3RlZCA9IGFsbFNlbGVjdGVkKSlcbiAgICApO1xuXG4gICAgdGhpcy5xdWlja09yZGVyJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5xdWlja09yZGVyKSwgdGhpcy5kYXRhc291cmNlSWRzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcmRlciwgbnFzXSkgPT4gKG5xcy5sZW5ndGggPT09IDEgPyBvcmRlcltucXNbMF1dIDogdW5kZWZpbmVkKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9yZWZyZXNoJC5waXBlKGF1ZGl0VGltZSgyMDApKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKSk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMuX3JlZnJlc2gkLm5leHQoKTtcbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkQ29sdW1uKCkge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weT8uY29sdW1ucykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHsgY29sdW1uczogW10gfTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zPy5wdXNoKHsgbGFiZWw6ICcnLCBwcm9wZXJ0eTogJycgfSk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBjaGFuZ2VQcm9wZXJ0eU5hbWUoJGV2ZW50OiBhbnksIGNvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbikge1xuICAgIGNvbHVtbkRlZi5wcm9wZXJ0eSA9ICRldmVudDtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGNoYW5nZUxhYmVsKCRldmVudDogRXZlbnQsIGNvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbikge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBuZXdMYWJlbCA9ICRldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgIGlmIChjb2x1bW5EZWYubGFiZWwgIT09IG5ld0xhYmVsKSB7XG4gICAgICBjb2x1bW5EZWYubGFiZWwgPSBuZXdMYWJlbDtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUNvbHVtbihpOiBudW1iZXIpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5Py5jb2x1bW5zPy5zcGxpY2UoaSwgMSk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBzZWxlY3Rpb24oJGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBJdGVtKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdCh7IGlkOiBpdGVtLmlkLCBjdW11bGF0aXZlOiAhJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBjb250ZXh0TWVudSgkZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEl0ZW0pIHtcbiAgICBpZiAodGhpcy5tYW5pZmVzdC5jb250ZXh0TWVudSAhPT0gZmFsc2UpIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgQ29udGV4dE1lbnVBY3Rpb25zLm9wZW4oe1xuICAgICAgICAgIGl0ZW1JZDogaXRlbS5pZCxcbiAgICAgICAgICBjbGllbnRYOiAkZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICBjbGllbnRZOiAkZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5tYW5pZmVzdC5kYXRhc291cmNlKSA/IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZVswXSA6IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICBmcm9tOiAndGFibGUnLFxuICAgICAgICAgIGFsbG93T2JqZWN0Q3JlYXRpb246IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb250ZXh0TWVudUNsaWNrZWRJZCA9IGl0ZW0uaWQ7XG4gICAgfVxuICB9XG5cbiAgaW52ZXJ0TGF5ZXJzKGlkeDogbnVtYmVyLCBpZHhXaXRoOiBudW1iZXIpIHtcbiAgICBpZiAoISF0aGlzLm9wdGlvbnNDb3B5ICYmICEhdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zKSB7XG4gICAgICBjb25zdCB0bXAgPSB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4V2l0aF07XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4V2l0aF0gPSB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4XTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuY29sdW1uc1tpZHhdID0gdG1wO1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWxsKCRldmVudDogYW55KSB7XG4gICAgaWYgKCRldmVudCkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdE1hbnkoeyBpZHM6IHRoaXMuYWxsSWRzIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdE1hbnkoeyBpZHM6IFtdIH0pKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcmRlcihjb2x1bW46IENvbHVtbkRlZmluaXRpb24pIHtcbiAgICB0aGlzLmRhdGFzb3VyY2VJZHMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgZmlsdGVyKChucXMpID0+IG5xcy5sZW5ndGggPT09IDEpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnF1aWNrT3JkZXIkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW25xcywgYWN0dWFsT3JkZXJdKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5xdWlja09yZGVyKHtcbiAgICAgICAgICAgIGRhdGFzb3VyY2VJZDogbnFzWzBdLFxuICAgICAgICAgICAgYXR0cmlidXRlOiBjb2x1bW4uYXR0cmlidXRlSWQgPz8gJycsXG4gICAgICAgICAgICBhc2M6IHRoaXMubmV4dE9yZGVyKGNvbHVtbiwgYWN0dWFsT3JkZXIpXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0T3JkZXIoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uLCBhY3R1YWxPcmRlcjogUmVzdWx0T3JkZXIgfCB1bmRlZmluZWQpOiBPcmRlclZhbHVlIHtcbiAgICBpZiAoIWFjdHVhbE9yZGVyIHx8IGFjdHVhbE9yZGVyLmF0dHJpYnV0ZSAhPT0gY29sdW1uLmF0dHJpYnV0ZUlkKSB7XG4gICAgICByZXR1cm4gJ2FzYyc7XG4gICAgfVxuICAgIHJldHVybiBhY3R1YWxPcmRlci5hc2MgPT09ICdhc2MnID8gJ2Rlc2MnIDogYWN0dWFsT3JkZXIuYXNjID09PSAnZGVzYycgPyB1bmRlZmluZWQgOiAnYXNjJztcbiAgfVxuXG4gIHRyYWNrT2JqZWN0cyhpbmRleDogbnVtYmVyLCBpdGVtOiBJdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LXRhYmxlLWNzcz48L3ByeS13aWRnZXQtdGFibGUtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS10YWJsZVwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAjaGVhZGVyXG4gICAgW2hlYWRlck9wdGlvbnNdPVwiKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8/IHt9XCJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiIChjbGljayk9XCJhZGRDb2x1bW4oKVwiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwicG9zdF9hZGRcIj48L3ByeS1pY29uPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC50YWJsZS5hZGRDb2x1bW4nIHwgaTE4biB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW5EZWYgb2Ygb3B0aW9uc0NvcHk/LmNvbHVtbnMgPz8gW107IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc19faGVhZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cImludmVydExheWVycyhpLCBpIC0gMSlcIiAqbmdJZj1cImkgPiAwXCI+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmxlY2hlX2hhdXRcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkuYWN0aW9uLm1vdmVVcCcgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW52ZXJ0TGF5ZXJzKGksIGkgKyAxKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaSA8IChvcHRpb25zQ29weT8uY29sdW1ucz8ubGVuZ3RoID8/IDApIC0gMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmxlY2hlX2Jhc1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS5hY3Rpb24ubW92ZURvd24nIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc19fY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJ0YWJsZV9wcm9wZXJ0eVwiPnt7ICdAcHJ5LndpZGdldC50YWJsZS5wcm9wZXJ0eScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVByb3BlcnR5TmFtZSgkZXZlbnQsIGNvbHVtbkRlZilcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cInByb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjb2x1bW5EZWYucHJvcGVydHlcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cInByb3BlcnR5XCJcbiAgICAgICAgICAgICAgaWQ9XCJ0YWJsZV9wcm9wZXJ0eVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidGFibGVfbGFiZWxcIj57eyAnQHByeS53aWRnZXQudGFibGUubGFiZWwnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJ0YWJsZV9sYWJlbFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlTGFiZWwoJGV2ZW50LCBjb2x1bW5EZWYpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbHVtbkRlZi5sYWJlbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb2x1bW4oaSlcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJkZWxldGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tdGV4dCAtbGluay1saWtlXCJcbiAgICAgICAgICBkYXRhLWZ1bmM9XCJkZWxldGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJkZWxldGVcIiBbd2lkdGhdPVwiMTlcIiBbaGVpZ2h0XT1cIjE5XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQudGFibGUuZGVsZXRlQ29sdW1uJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9wcnktc2V0dGluZ3M+XG4gIDwvcHJ5LXdpZGdldC1oZWFkZXI+XG5cbiAgPGRpdiBjbGFzcz1cImEtdGFibGUtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJhLXRhYmxlLWxvYWRpbmdcIiAqbmdJZj1cImlzTG9hZGluZyQgfCBhc3luYzsgZWxzZSBub0xvYWRpbmdcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYS10YWJsZS1sb2FkaW5nX19sb2FkZXJcIj48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNub0xvYWRpbmc+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGFsbEl0ZW1zJCB8IGFzeW5jKSA/PyBbXSBhcyBhbGxPYmplY3RzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuby1yZXN1bHRcIiAqbmdJZj1cImFsbE9iamVjdHMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmVtcHR5JyB8IGkxOG4gfX1cIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmVtcHR5JyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoc2VsZWN0ZWRJZHMkIHwgYXN5bmMpID8/IFtdIGFzIHNlbGVjdGVkSWRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjb2x1bW5zJCB8IGFzeW5jKSA/PyBbXSBhcyBjb2x1bW5zXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJhLXRhYmxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQHByeS53aWRnZXQudGFibGUuZGVzY3JpcHRpb24nIHwgaTE4blwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiYWxsT2JqZWN0cz8ubGVuZ3RoID8/IDAgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggW25nTW9kZWxdPVwiYXJlQWxsU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50KVwiPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCBpID0gaW5kZXhcIiByZXNpemFibGUgKGNsaWNrKT1cInNldE9yZGVyKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVpY2tPcmRlciQgfCBhc3luYyBhcyBxdWlja09yZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrT3JkZXIuYXR0cmlidXRlID09PSBjb2x1bW4uYXR0cmlidXRlSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvblN2Z109XCJxdWlja09yZGVyLmFzYyA/ICdjaGV2cm9uX3RvcCcgOiAnY2hldnJvbl9ib3R0b20nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFsbE9iamVjdHM7IHRyYWNrQnk6IHRyYWNrT2JqZWN0c1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRJZHMuaW5jbHVkZXMoaXRlbS5pZClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvbnRleHQtbWVudS1zZWxlY3RlZF09XCJjb250ZXh0TWVudUNsaWNrZWRJZCA9PT0gaXRlbS5pZCAmJiAoaXNDb250ZXh0TWVudU9wZW5lZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgZGV0YWNoUm93XG4gICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRWYWx1ZSk9XCJzZWxlY3Rpb24oJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2hlY2tib3gtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IFtuZ01vZGVsXT1cInNlbGVjdGVkSWRzLmluY2x1ZGVzKGl0ZW0uaWQpXCI+PC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIGNsYXNzPVwidS1lbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnByb3BlcnR5ID09PSAnbWV0YWRhdGEnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHByeS1tZXRhZGF0YSBbaXRlbV09XCJpdGVtXCI+PC9wcnktbWV0YWRhdGE+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnByb3BlcnR5ID09PSAnb0NsYXNzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29udGVudC1pbWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIyNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIyNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbSB8IHRyYW5zbGF0ZUl0ZW1Ub1N5bWJvbCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJpdGVtLm9DbGFzcyB8IHRyYW5zbGF0ZUlkIDogeyB0eXBlOiAnY2xhc3MnLCBvdXRwdXQ6ICduYW1lJyB9IHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIVsnbWV0YWRhdGEnLCAnb0NsYXNzJ10uaW5jbHVkZXMoY29sdW1uLnByb3BlcnR5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwcnktZXhwYW5kLXZhbHVlIFt2YWx1ZV09XCJpdGVtIHwgZ2V0VmFsdWUgOiBjb2x1bW4ucHJvcGVydHkgfCBhc3luY1wiPjwvcHJ5LWV4cGFuZC12YWx1ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=