@loxia/mst-viewer 8.1.3-202512131923 → 8.1.3-202512151220

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 (257) hide show
  1. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs +52 -41
  2. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs.map +1 -1
  3. package/fesm2022/loxia-mst-viewer.mjs +541 -534
  4. package/fesm2022/loxia-mst-viewer.mjs.map +1 -1
  5. package/index.d.ts +1079 -3
  6. package/package.json +6 -10
  7. package/src/generated/openapi/index.d.ts +825 -6
  8. package/tailwind.scss +1 -5
  9. package/esm2022/generated/openapi/api/api.mjs +0 -23
  10. package/esm2022/generated/openapi/api/appConfigController.service.mjs +0 -140
  11. package/esm2022/generated/openapi/api/appConfigController.serviceInterface.mjs +0 -2
  12. package/esm2022/generated/openapi/api/bewegingController.service.mjs +0 -155
  13. package/esm2022/generated/openapi/api/bewegingController.serviceInterface.mjs +0 -2
  14. package/esm2022/generated/openapi/api/class0BuildProperties.service.mjs +0 -140
  15. package/esm2022/generated/openapi/api/class0BuildProperties.serviceInterface.mjs +0 -2
  16. package/esm2022/generated/openapi/api/connectorController.service.mjs +0 -146
  17. package/esm2022/generated/openapi/api/connectorController.serviceInterface.mjs +0 -2
  18. package/esm2022/generated/openapi/api/logController.service.mjs +0 -150
  19. package/esm2022/generated/openapi/api/logController.serviceInterface.mjs +0 -2
  20. package/esm2022/generated/openapi/api/p21Controller.service.mjs +0 -236
  21. package/esm2022/generated/openapi/api/p21Controller.serviceInterface.mjs +0 -2
  22. package/esm2022/generated/openapi/api/sbController.service.mjs +0 -203
  23. package/esm2022/generated/openapi/api/sbController.serviceInterface.mjs +0 -2
  24. package/esm2022/generated/openapi/api.module.mjs +0 -40
  25. package/esm2022/generated/openapi/configuration.mjs +0 -99
  26. package/esm2022/generated/openapi/encoder.mjs +0 -19
  27. package/esm2022/generated/openapi/index.mjs +0 -7
  28. package/esm2022/generated/openapi/model/actieDto.mjs +0 -13
  29. package/esm2022/generated/openapi/model/algemeneRitDto.mjs +0 -13
  30. package/esm2022/generated/openapi/model/bewegingDto.mjs +0 -2
  31. package/esm2022/generated/openapi/model/frontendKeycloakConfig.mjs +0 -13
  32. package/esm2022/generated/openapi/model/frontendProperties.mjs +0 -2
  33. package/esm2022/generated/openapi/model/logDto.mjs +0 -2
  34. package/esm2022/generated/openapi/model/models.mjs +0 -9
  35. package/esm2022/generated/openapi/model/ritRequestDto.mjs +0 -2
  36. package/esm2022/generated/openapi/model/signaleringsbeeldDto.mjs +0 -13
  37. package/esm2022/generated/openapi/param.mjs +0 -2
  38. package/esm2022/generated/openapi/variables.mjs +0 -9
  39. package/esm2022/generated.version.mjs +0 -2
  40. package/esm2022/lib/atomic-components/message/index.mjs +0 -4
  41. package/esm2022/lib/atomic-components/message/message.component.mjs +0 -34
  42. package/esm2022/lib/atomic-components/message/message.mjs +0 -8
  43. package/esm2022/lib/atomic-components/message/severity.enum.mjs +0 -9
  44. package/esm2022/lib/atomic-components/messages/messages.component.mjs +0 -20
  45. package/esm2022/lib/atomic-components/overlay/overlay.component.mjs +0 -11
  46. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.component.mjs +0 -11
  47. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.entity.mjs +0 -11
  48. package/esm2022/lib/atomic-components/services/messages.service.mjs +0 -27
  49. package/esm2022/lib/components/carousel-controls/carousel-controls.component.mjs +0 -39
  50. package/esm2022/lib/components/mstviewer/mstviewer.component.mjs +0 -116
  51. package/esm2022/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +0 -273
  52. package/esm2022/lib/components/ritdelen-view/ritdelen-view.component.mjs +0 -103
  53. package/esm2022/lib/components/rpe/rpe.component.mjs +0 -37
  54. package/esm2022/lib/components/svg-visualisatie/svg-visualisatie.component.mjs +0 -274
  55. package/esm2022/lib/components/viewer-controls/viewer-controls.component.mjs +0 -55
  56. package/esm2022/lib/model/alternatief-rit-deel.mjs +0 -7
  57. package/esm2022/lib/model/km-range.mjs +0 -39
  58. package/esm2022/lib/model/melding-event.mjs +0 -7
  59. package/esm2022/lib/model/nieuwe-route.mjs +0 -10
  60. package/esm2022/lib/model/ongeplande-actie.mjs +0 -7
  61. package/esm2022/lib/model/rijwegplan-rijweg-dwang-combinatie.mjs +0 -24
  62. package/esm2022/lib/model/ritdeel.mjs +0 -205
  63. package/esm2022/lib/model/sein-op-ritdeel.mjs +0 -7
  64. package/esm2022/lib/model/wissel-kant-code.mjs +0 -7
  65. package/esm2022/lib/mst-viewer.module.mjs +0 -144
  66. package/esm2022/lib/optimo.mjs +0 -9
  67. package/esm2022/lib/resources/mstlogging.resource.mjs +0 -25
  68. package/esm2022/lib/resources/signaleringsbeeldinfo.resource.mjs +0 -45
  69. package/esm2022/lib/services/base-rest.service.mjs +0 -28
  70. package/esm2022/lib/services/beweging-utils.service.mjs +0 -139
  71. package/esm2022/lib/services/beweging-verrijker.service.mjs +0 -30
  72. package/esm2022/lib/services/connector.service.mjs +0 -30
  73. package/esm2022/lib/services/debug.service.mjs +0 -59
  74. package/esm2022/lib/services/editor.service.mjs +0 -50
  75. package/esm2022/lib/services/print-beweging.service.mjs +0 -69
  76. package/esm2022/lib/services/rit-lezer.service.mjs +0 -104
  77. package/esm2022/lib/services/signalerings-beeld-manager.service.mjs +0 -92
  78. package/esm2022/lib/services/viewer-control.service.mjs +0 -106
  79. package/esm2022/lib/state/actions/actions.mjs +0 -127
  80. package/esm2022/lib/state/actions/ritdelen.actions.mjs +0 -45
  81. package/esm2022/lib/state/effect/bepaal-ongeplande-acties.effect.mjs +0 -79
  82. package/esm2022/lib/state/effect/bepaal-sb-infos.effect.mjs +0 -67
  83. package/esm2022/lib/state/effect/beweging-invoegen.effect.mjs +0 -73
  84. package/esm2022/lib/state/effect/delete-ongeplande-actie.effect.mjs +0 -39
  85. package/esm2022/lib/state/effect/focus-effect.mjs +0 -36
  86. package/esm2022/lib/state/effect/laad-route-files.effect.mjs +0 -64
  87. package/esm2022/lib/state/effect/laad-signaleringsbeelden.effect.mjs +0 -361
  88. package/esm2022/lib/state/effect/rit-goedkeuren.effect.mjs +0 -23
  89. package/esm2022/lib/state/effect/ritdelen.effect.mjs +0 -113
  90. package/esm2022/lib/state/effect/svg-view.effect.mjs +0 -48
  91. package/esm2022/lib/state/mst-editor-state.mjs +0 -86
  92. package/esm2022/lib/state/reducer/rit-delen.reducer.mjs +0 -62
  93. package/esm2022/lib/util/actie-helper.mjs +0 -441
  94. package/esm2022/lib/util/actie-popover-bepaler.mjs +0 -90
  95. package/esm2022/lib/util/date.service.mjs +0 -17
  96. package/esm2022/lib/util/logging-helper.mjs +0 -48
  97. package/esm2022/lib/util/melding-builder.mjs +0 -13
  98. package/esm2022/lib/util/message-builder.mjs +0 -32
  99. package/esm2022/lib/util/multi-map.mjs +0 -75
  100. package/esm2022/lib/util/utils.mjs +0 -35
  101. package/esm2022/lib/util/zone-util.mjs +0 -33
  102. package/esm2022/loxia-mst-viewer.mjs +0 -5
  103. package/esm2022/public-api.mjs +0 -9
  104. package/esm2022/src/generated/openapi/api/api.mjs +0 -23
  105. package/esm2022/src/generated/openapi/api/appConfigController.service.mjs +0 -140
  106. package/esm2022/src/generated/openapi/api/appConfigController.serviceInterface.mjs +0 -2
  107. package/esm2022/src/generated/openapi/api/bewegingController.service.mjs +0 -155
  108. package/esm2022/src/generated/openapi/api/bewegingController.serviceInterface.mjs +0 -2
  109. package/esm2022/src/generated/openapi/api/class0BuildProperties.service.mjs +0 -140
  110. package/esm2022/src/generated/openapi/api/class0BuildProperties.serviceInterface.mjs +0 -2
  111. package/esm2022/src/generated/openapi/api/connectorController.service.mjs +0 -146
  112. package/esm2022/src/generated/openapi/api/connectorController.serviceInterface.mjs +0 -2
  113. package/esm2022/src/generated/openapi/api/logController.service.mjs +0 -150
  114. package/esm2022/src/generated/openapi/api/logController.serviceInterface.mjs +0 -2
  115. package/esm2022/src/generated/openapi/api/p21Controller.service.mjs +0 -236
  116. package/esm2022/src/generated/openapi/api/p21Controller.serviceInterface.mjs +0 -2
  117. package/esm2022/src/generated/openapi/api/sbController.service.mjs +0 -203
  118. package/esm2022/src/generated/openapi/api/sbController.serviceInterface.mjs +0 -2
  119. package/esm2022/src/generated/openapi/api.module.mjs +0 -40
  120. package/esm2022/src/generated/openapi/configuration.mjs +0 -99
  121. package/esm2022/src/generated/openapi/encoder.mjs +0 -19
  122. package/esm2022/src/generated/openapi/index.mjs +0 -7
  123. package/esm2022/src/generated/openapi/loxia-mst-viewer-src-generated-openapi.mjs +0 -5
  124. package/esm2022/src/generated/openapi/model/actieDto.mjs +0 -13
  125. package/esm2022/src/generated/openapi/model/algemeneRitDto.mjs +0 -13
  126. package/esm2022/src/generated/openapi/model/bewegingDto.mjs +0 -2
  127. package/esm2022/src/generated/openapi/model/frontendKeycloakConfig.mjs +0 -13
  128. package/esm2022/src/generated/openapi/model/frontendProperties.mjs +0 -2
  129. package/esm2022/src/generated/openapi/model/logDto.mjs +0 -2
  130. package/esm2022/src/generated/openapi/model/models.mjs +0 -9
  131. package/esm2022/src/generated/openapi/model/ritRequestDto.mjs +0 -2
  132. package/esm2022/src/generated/openapi/model/signaleringsbeeldDto.mjs +0 -13
  133. package/esm2022/src/generated/openapi/param.mjs +0 -2
  134. package/esm2022/src/generated/openapi/variables.mjs +0 -9
  135. package/generated/openapi/api/api.d.ts +0 -22
  136. package/generated/openapi/api/appConfigController.service.d.ts +0 -38
  137. package/generated/openapi/api/appConfigController.serviceInterface.d.ts +0 -24
  138. package/generated/openapi/api/bewegingController.service.d.ts +0 -40
  139. package/generated/openapi/api/bewegingController.serviceInterface.d.ts +0 -27
  140. package/generated/openapi/api/class0BuildProperties.service.d.ts +0 -36
  141. package/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +0 -23
  142. package/generated/openapi/api/connectorController.service.d.ts +0 -38
  143. package/generated/openapi/api/connectorController.serviceInterface.d.ts +0 -25
  144. package/generated/openapi/api/logController.service.d.ts +0 -38
  145. package/generated/openapi/api/logController.serviceInterface.d.ts +0 -25
  146. package/generated/openapi/api/p21Controller.service.d.ts +0 -62
  147. package/generated/openapi/api/p21Controller.serviceInterface.d.ts +0 -30
  148. package/generated/openapi/api/sbController.service.d.ts +0 -60
  149. package/generated/openapi/api/sbController.serviceInterface.d.ts +0 -32
  150. package/generated/openapi/api.module.d.ts +0 -11
  151. package/generated/openapi/configuration.d.ts +0 -104
  152. package/generated/openapi/encoder.d.ts +0 -11
  153. package/generated/openapi/index.d.ts +0 -6
  154. package/generated/openapi/model/actieDto.d.ts +0 -35
  155. package/generated/openapi/model/algemeneRitDto.d.ts +0 -20
  156. package/generated/openapi/model/bewegingDto.d.ts +0 -37
  157. package/generated/openapi/model/frontendKeycloakConfig.d.ts +0 -16
  158. package/generated/openapi/model/frontendProperties.d.ts +0 -15
  159. package/generated/openapi/model/logDto.d.ts +0 -22
  160. package/generated/openapi/model/models.d.ts +0 -8
  161. package/generated/openapi/model/ritRequestDto.d.ts +0 -17
  162. package/generated/openapi/model/signaleringsbeeldDto.d.ts +0 -16
  163. package/generated/openapi/param.d.ts +0 -37
  164. package/generated/openapi/variables.d.ts +0 -8
  165. package/generated.version.d.ts +0 -1
  166. package/lib/atomic-components/message/index.d.ts +0 -3
  167. package/lib/atomic-components/message/message.component.d.ts +0 -12
  168. package/lib/atomic-components/message/message.d.ts +0 -7
  169. package/lib/atomic-components/message/severity.enum.d.ts +0 -7
  170. package/lib/atomic-components/messages/messages.component.d.ts +0 -9
  171. package/lib/atomic-components/overlay/overlay.component.d.ts +0 -5
  172. package/lib/atomic-components/progress-indicator/progress-indicator.component.d.ts +0 -5
  173. package/lib/atomic-components/progress-indicator/progress-indicator.entity.d.ts +0 -6
  174. package/lib/atomic-components/services/messages.service.d.ts +0 -12
  175. package/lib/components/carousel-controls/carousel-controls.component.d.ts +0 -19
  176. package/lib/components/mstviewer/mstviewer.component.d.ts +0 -39
  177. package/lib/components/ritdelen-lijst/ritdelen-lijst.component.d.ts +0 -72
  178. package/lib/components/ritdelen-view/ritdelen-view.component.d.ts +0 -33
  179. package/lib/components/rpe/rpe.component.d.ts +0 -11
  180. package/lib/components/svg-visualisatie/svg-visualisatie.component.d.ts +0 -55
  181. package/lib/components/viewer-controls/viewer-controls.component.d.ts +0 -26
  182. package/lib/model/alternatief-rit-deel.d.ts +0 -7
  183. package/lib/model/km-range.d.ts +0 -13
  184. package/lib/model/melding-event.d.ts +0 -5
  185. package/lib/model/nieuwe-route.d.ts +0 -8
  186. package/lib/model/ongeplande-actie.d.ts +0 -6
  187. package/lib/model/rijwegplan-rijweg-dwang-combinatie.d.ts +0 -12
  188. package/lib/model/ritdeel.d.ts +0 -62
  189. package/lib/model/sein-op-ritdeel.d.ts +0 -7
  190. package/lib/model/wissel-kant-code.d.ts +0 -5
  191. package/lib/mst-viewer.module.d.ts +0 -34
  192. package/lib/optimo.d.ts +0 -69
  193. package/lib/resources/mstlogging.resource.d.ts +0 -15
  194. package/lib/resources/signaleringsbeeldinfo.resource.d.ts +0 -21
  195. package/lib/services/base-rest.service.d.ts +0 -16
  196. package/lib/services/beweging-utils.service.d.ts +0 -25
  197. package/lib/services/beweging-verrijker.service.d.ts +0 -11
  198. package/lib/services/connector.service.d.ts +0 -10
  199. package/lib/services/debug.service.d.ts +0 -15
  200. package/lib/services/editor.service.d.ts +0 -23
  201. package/lib/services/print-beweging.service.d.ts +0 -16
  202. package/lib/services/rit-lezer.service.d.ts +0 -22
  203. package/lib/services/signalerings-beeld-manager.service.d.ts +0 -29
  204. package/lib/services/viewer-control.service.d.ts +0 -30
  205. package/lib/state/actions/actions.d.ts +0 -268
  206. package/lib/state/actions/ritdelen.actions.d.ts +0 -97
  207. package/lib/state/effect/bepaal-ongeplande-acties.effect.d.ts +0 -24
  208. package/lib/state/effect/bepaal-sb-infos.effect.d.ts +0 -23
  209. package/lib/state/effect/beweging-invoegen.effect.d.ts +0 -17
  210. package/lib/state/effect/delete-ongeplande-actie.effect.d.ts +0 -15
  211. package/lib/state/effect/focus-effect.d.ts +0 -17
  212. package/lib/state/effect/laad-route-files.effect.d.ts +0 -27
  213. package/lib/state/effect/laad-signaleringsbeelden.effect.d.ts +0 -58
  214. package/lib/state/effect/rit-goedkeuren.effect.d.ts +0 -17
  215. package/lib/state/effect/ritdelen.effect.d.ts +0 -33
  216. package/lib/state/effect/svg-view.effect.d.ts +0 -17
  217. package/lib/state/mst-editor-state.d.ts +0 -69
  218. package/lib/state/reducer/rit-delen.reducer.d.ts +0 -4
  219. package/lib/util/actie-helper.d.ts +0 -117
  220. package/lib/util/actie-popover-bepaler.d.ts +0 -14
  221. package/lib/util/date.service.d.ts +0 -6
  222. package/lib/util/logging-helper.d.ts +0 -14
  223. package/lib/util/melding-builder.d.ts +0 -8
  224. package/lib/util/message-builder.d.ts +0 -13
  225. package/lib/util/multi-map.d.ts +0 -39
  226. package/lib/util/utils.d.ts +0 -3
  227. package/lib/util/zone-util.d.ts +0 -11
  228. package/public-api.d.ts +0 -5
  229. package/src/generated/openapi/api/api.d.ts +0 -22
  230. package/src/generated/openapi/api/appConfigController.service.d.ts +0 -38
  231. package/src/generated/openapi/api/appConfigController.serviceInterface.d.ts +0 -24
  232. package/src/generated/openapi/api/bewegingController.service.d.ts +0 -40
  233. package/src/generated/openapi/api/bewegingController.serviceInterface.d.ts +0 -27
  234. package/src/generated/openapi/api/class0BuildProperties.service.d.ts +0 -36
  235. package/src/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +0 -23
  236. package/src/generated/openapi/api/connectorController.service.d.ts +0 -38
  237. package/src/generated/openapi/api/connectorController.serviceInterface.d.ts +0 -25
  238. package/src/generated/openapi/api/logController.service.d.ts +0 -38
  239. package/src/generated/openapi/api/logController.serviceInterface.d.ts +0 -25
  240. package/src/generated/openapi/api/p21Controller.service.d.ts +0 -62
  241. package/src/generated/openapi/api/p21Controller.serviceInterface.d.ts +0 -30
  242. package/src/generated/openapi/api/sbController.service.d.ts +0 -60
  243. package/src/generated/openapi/api/sbController.serviceInterface.d.ts +0 -32
  244. package/src/generated/openapi/api.module.d.ts +0 -11
  245. package/src/generated/openapi/configuration.d.ts +0 -104
  246. package/src/generated/openapi/encoder.d.ts +0 -11
  247. package/src/generated/openapi/model/actieDto.d.ts +0 -35
  248. package/src/generated/openapi/model/algemeneRitDto.d.ts +0 -20
  249. package/src/generated/openapi/model/bewegingDto.d.ts +0 -37
  250. package/src/generated/openapi/model/frontendKeycloakConfig.d.ts +0 -16
  251. package/src/generated/openapi/model/frontendProperties.d.ts +0 -15
  252. package/src/generated/openapi/model/logDto.d.ts +0 -22
  253. package/src/generated/openapi/model/models.d.ts +0 -8
  254. package/src/generated/openapi/model/ritRequestDto.d.ts +0 -17
  255. package/src/generated/openapi/model/signaleringsbeeldDto.d.ts +0 -16
  256. package/src/generated/openapi/param.d.ts +0 -37
  257. package/src/generated/openapi/variables.d.ts +0 -8
@@ -1,361 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { ImxViewerComponent, Point, SvgInfo } from '@loxia/imx-viewer';
3
- import { createEffect, ofType } from '@ngrx/effects';
4
- import { of, throwError } from 'rxjs';
5
- import { catchError, map, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';
6
- import { RitdeelZichtbaarheid } from '../../model/ritdeel';
7
- import { MessageBuilder } from '../../util/message-builder';
8
- import Utils from '../../util/utils';
9
- import * as MstActions from '../actions/actions';
10
- import { SetSignaleringsbeeldInfoDtos, SetVisibleSignaleringsbeeldInfoDtos } from '../actions/actions';
11
- import * as RitdelenActions from '../actions/ritdelen.actions';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@ngrx/effects";
14
- import * as i2 from "@ngrx/store";
15
- import * as i3 from "../../services/signalerings-beeld-manager.service";
16
- import * as i4 from "../../services/editor.service";
17
- import * as i5 from "../../resources/signaleringsbeeldinfo.resource";
18
- import * as i6 from "../../services/connector.service";
19
- import * as i7 from "../../atomic-components/services/messages.service";
20
- export class LaadSignaleringsbeeldenEffect {
21
- constructor(actions$, store, signaleringsBeeldManagerService, editorService, sbiResource, connectorService, messagesService) {
22
- this.actions$ = actions$;
23
- this.store = store;
24
- this.signaleringsBeeldManagerService = signaleringsBeeldManagerService;
25
- this.editorService = editorService;
26
- this.sbiResource = sbiResource;
27
- this.connectorService = connectorService;
28
- this.messagesService = messagesService;
29
- this.SVG_PIXEL_RUIMTE = 30;
30
- this.verwerkRitdelen$ = createEffect(() => this.actions$.pipe(ofType(RitdelenActions.setRitDelen, RitdelenActions.navigeer, RitdelenActions.navigeerVanaf), withLatestFrom(this.store), map(([actie, storeState]) => {
31
- this.store.dispatch(MstActions.SetOngeplandeActiesBepaald(false));
32
- this.verwerkRitdelen(actie, storeState);
33
- })), { dispatch: false });
34
- this.laadEnVerwerkSignaleringsbeeldInfo$ = createEffect(() => this.actions$.pipe(ofType(MstActions.laadEnVerwerkSignaleringsbeeldInfo), withLatestFrom(this.store), switchMap(([actie, storeState]) => this.handleSignaleringsbeeldInfo({ actie, storeState }))), { dispatch: false });
35
- this.navigeerBuitenRit$ = createEffect(() => this.actions$.pipe(ofType(MstActions.navigeerBuitenRit), withLatestFrom(this.store), switchMap(([actie, storeState]) => of({
36
- rand: this.signaleringsBeeldManagerService.getTopologyElementByPuic(actie.randPuic),
37
- randPuic: actie.randPuic,
38
- storeState
39
- }).pipe(switchMap(this.getOtherRand.bind(this)), switchMap(this.loadRouteFilesAndSignaleringsbeeldInfo.bind(this)), switchMap(this.loadSignaleringsbeelden.bind(this)), map(this.processSvgsAndUpdateRitdelen.bind(this))))), { dispatch: false });
40
- }
41
- handleSignaleringsbeeldInfo({ actie, storeState }) {
42
- return this.sbiResource.laadSignaleringsbeeldInfo(storeState.iaVersie.versie, actie.pplgs).pipe(take(1), tap((dtos) => this.processResponse({ dtos, storeState, actie })), catchError((err) => {
43
- this.messagesService.showMessage(MessageBuilder.nietGevondenSBI(err));
44
- return throwError(() => err);
45
- }));
46
- }
47
- processResponse({ dtos, storeState, actie }) {
48
- if (dtos && dtos.filter(dto => dto.metVisualisatie).length > 12) {
49
- this.messagesService.showMessage(MessageBuilder.meerDan12BladenGevonden(dtos.length));
50
- }
51
- this.store.dispatch(SetSignaleringsbeeldInfoDtos(dtos, storeState.iaVersie, actie.rit, actie.paginationSize, actie.ritGewijzigdToegestaan));
52
- this.store.dispatch(SetVisibleSignaleringsbeeldInfoDtos(dtos));
53
- }
54
- getOtherRand({ rand, randPuic, storeState }) {
55
- return this.connectorService.getOtherRand(randPuic).pipe(map(otherPplg => ({ otherPplg, rand, storeState })));
56
- }
57
- loadRouteFilesAndSignaleringsbeeldInfo({ otherPplg, rand, storeState }) {
58
- this.editorService.laadRouteFiles(storeState.iaVersie.versie, [rand.getPPLG(), otherPplg]);
59
- return this.sbiResource.laadSignaleringsbeeldInfo(storeState.iaVersie.versie, [rand.getPPLG(), otherPplg]).pipe(map(dtos => ({ dtos, storeState })));
60
- }
61
- loadSignaleringsbeelden({ dtos, storeState }) {
62
- return this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, dtos).pipe(map(svgDataUrls => ({ svgDataUrls, ritDelen: storeState.ritDelen, dtos })));
63
- }
64
- processSvgsAndUpdateRitdelen({ svgDataUrls, ritDelen, dtos }) {
65
- this.verwerkSvgs(svgDataUrls);
66
- const nieuweRitdelen = this.updateRitdelen(ritDelen, dtos);
67
- this.store.dispatch(MstActions.UpdateVisibleSignaleringsbeeldInfoDtos(dtos));
68
- this.store.dispatch(RitdelenActions.updateRitDelen(nieuweRitdelen));
69
- }
70
- verwerkRitdelen(actie, storeState) {
71
- const isInit = actie.type === RitdelenActions.SET_RIT_DELEN;
72
- const ritDelen = isInit ? actie.ritDelen : storeState.ritDelen;
73
- const storeDtos = storeState.signaleringsbeeldInfoDtos;
74
- this.navigeer(ritDelen, actie, storeDtos);
75
- const visibleRitDelen = ritDelen.filter(n => n.isZichtbaarBinnenWindow());
76
- const visibleRitPplgs = visibleRitDelen.map(r => r.getPplg()).filter(this.distinct);
77
- const visibleDtos = this.bepaalZichtbareDtos(visibleRitPplgs, storeDtos);
78
- const loadingDtos = this.bepaalToLoadDtos(visibleDtos, ritDelen, visibleRitDelen, visibleRitPplgs, storeState);
79
- this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, loadingDtos).pipe(tap(svgDataUrls => {
80
- this.verwerkSvgs(svgDataUrls);
81
- this.updateState(ritDelen, visibleDtos, storeState, visibleRitPplgs, loadingDtos, isInit, storeDtos);
82
- }), catchError(err => {
83
- this.messagesService.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
84
- throw err;
85
- })).subscribe();
86
- }
87
- updateState(ritDelen, visibleDtos, storeState, visibleRitPplgs, loadingDtos, isInit, storeDtos) {
88
- setTimeout(() => {
89
- const nieuweRitdelen = this.updateRitdelen(ritDelen, visibleDtos);
90
- this.debugLog(storeState.debug, visibleRitPplgs, loadingDtos);
91
- if (!isInit) {
92
- this.store.dispatch(MstActions.UpdateSignaleringsbeeldInfoDtos(storeDtos));
93
- this.store.dispatch(MstActions.UpdateVisibleSignaleringsbeeldInfoDtos(loadingDtos));
94
- }
95
- this.store.dispatch(RitdelenActions.updateRitDelen(nieuweRitdelen));
96
- }, 0);
97
- }
98
- verwerkSvgs(svgDataUrls) {
99
- this.store.dispatch(MstActions.SetSvgInfos(this.bepaalSvgInfos(svgDataUrls)));
100
- }
101
- bepaalSvgInfos(svgDataUrls) {
102
- let nextCoords = new Point(0, 0);
103
- const infos = [];
104
- svgDataUrls.forEach(svgDataUrl => {
105
- if (svgDataUrl) {
106
- const decoded = atob(svgDataUrl.substring('data:image/svg+xml;base64,'.length));
107
- infos.push(new SvgInfo('data:image/svg+xml,' + decoded, nextCoords));
108
- nextCoords = new Point(nextCoords.x + ImxViewerComponent.getXCoordinate(decoded) + this.SVG_PIXEL_RUIMTE, 0);
109
- }
110
- });
111
- return infos;
112
- }
113
- bepaalToLoadDtos(visibleDtos, ritDelen, visibleRitDelen, visibleRitPplgs, storeState) {
114
- const loadingDtos = [...visibleDtos];
115
- const firstIdx = ritDelen.indexOf(visibleRitDelen[0]) - 1;
116
- this.addPrevNonVisibleDto(firstIdx, ritDelen, loadingDtos, visibleRitPplgs, storeState.signaleringsbeeldInfoDtos);
117
- const lastIdx = ritDelen.indexOf(visibleRitDelen[visibleRitDelen.length - 1]) + 1;
118
- this.addNextNonVisibleDto(lastIdx, ritDelen, loadingDtos, visibleRitPplgs, storeState.signaleringsbeeldInfoDtos);
119
- return loadingDtos;
120
- }
121
- bepaalZichtbareDtos(visibleRitPplgs, dtos) {
122
- const visibleDtos = [];
123
- visibleRitPplgs.forEach(pplg => {
124
- dtos.filter(dto => dto.pplgs?.includes(pplg)).forEach(dto => {
125
- if (!visibleDtos.includes(dto)) {
126
- visibleDtos.push(dto);
127
- }
128
- });
129
- });
130
- visibleDtos.forEach(dto => dto.metVisualisatie = true);
131
- dtos.filter(d => !visibleDtos.includes(d)).forEach(d => d.metVisualisatie = false);
132
- return visibleDtos;
133
- }
134
- distinct(value, index, values) {
135
- return values.indexOf(value) === index;
136
- }
137
- addPrevNonVisibleDto(firstIdx, ritdelen, loadingDtos, visibleRitPplgs, allDtos) {
138
- if (firstIdx >= 0) {
139
- const pplg = ritdelen[firstIdx].getPplg();
140
- const ritdeelDtos = allDtos.filter(dto => dto.pplgs?.includes(pplg)).filter(dto => !loadingDtos.includes(dto));
141
- if (!visibleRitPplgs.includes(pplg) && ritdeelDtos.length > 0) {
142
- ritdeelDtos.filter(d => !loadingDtos.includes(d)).forEach(d => {
143
- d.metVisualisatie = false;
144
- loadingDtos.push(d);
145
- });
146
- }
147
- else {
148
- this.addPrevNonVisibleDto(firstIdx - 1, ritdelen, loadingDtos, visibleRitPplgs, allDtos);
149
- }
150
- }
151
- }
152
- addNextNonVisibleDto(lastIdx, ritdelen, loadingDtos, visibleRitPplgs, allDtos) {
153
- if (lastIdx <= ritdelen.length - 1) {
154
- const pplg = ritdelen[lastIdx].getPplg();
155
- const ritdeelDtos = allDtos.filter(dto => dto.pplgs?.includes(pplg)).filter(dto => !loadingDtos.includes(dto));
156
- if (!visibleRitPplgs.includes(pplg) && ritdeelDtos.length > 0) {
157
- ritdeelDtos.filter(d => !loadingDtos.includes(d)).forEach(d => {
158
- d.metVisualisatie = false;
159
- loadingDtos.push(d);
160
- });
161
- }
162
- else {
163
- this.addNextNonVisibleDto(lastIdx + 1, ritdelen, loadingDtos, visibleRitPplgs, allDtos);
164
- }
165
- }
166
- }
167
- debugLog(debug, visibleRitPplgs, loadingDtos) {
168
- if (debug) {
169
- console.log('RIT PPLGs: ' + visibleRitPplgs);
170
- loadingDtos.forEach(dto => {
171
- let str = '\nDTO-bladNaam: ' + dto.bladNaam;
172
- str += '\nDTO-PPLGs : ' + dto.pplgs;
173
- str += '\nVisible : ' + dto.metVisualisatie;
174
- console.log(str);
175
- });
176
- }
177
- }
178
- // acties: Navigeer|NavigeerVanaf|SetRitDelen
179
- navigeer(ritDelen, actie, storeDtos) {
180
- // alle ritdelen krijgen zichtbaarheidBuitenPaginatie => false
181
- if (actie.type === RitdelenActions.SET_RIT_DELEN) {
182
- this.bepaalZichtbaarheidRechts(0, ritDelen, actie.paginationSize, storeDtos);
183
- }
184
- else if (actie.type === RitdelenActions.NAVIGEER) {
185
- const isLinks = actie.stapSize < 0;
186
- const startIndex = this.bepaalStartIndex(ritDelen);
187
- const endIndex = this.bepaalEndIndex(ritDelen);
188
- const navigerenMogelijk = !(startIndex === 0 && isLinks || endIndex === ritDelen.length - 1 && !isLinks);
189
- if (navigerenMogelijk) {
190
- if (isLinks) {
191
- this.bepaalZichtbaarheidLinks(startIndex, ritDelen, actie.paginationSize, storeDtos);
192
- }
193
- else {
194
- this.bepaalZichtbaarheidRechts(endIndex, ritDelen, actie.paginationSize, storeDtos);
195
- }
196
- }
197
- }
198
- else if (actie.type === RitdelenActions.NAVIGEER_VANAF) {
199
- const idx = ritDelen.indexOf(actie.ritdeel);
200
- this.bepaalZichtbaarheidRechts(idx, ritDelen, actie.paginationSize, storeDtos);
201
- }
202
- }
203
- updateRitdelen(ritdelen, visibleDtos) {
204
- const visibleIndices = [];
205
- for (let i = 0; i < ritdelen.length; i++) {
206
- if (ritdelen[i].isZichtbaarBinnenWindow()) {
207
- visibleIndices.push(i);
208
- }
209
- }
210
- const min = Math.min(...visibleIndices);
211
- const max = Math.max(...visibleIndices);
212
- for (let i = 0; i < ritdelen.length; i++) {
213
- const rd = ritdelen[i];
214
- if (rd.isZichtbaarBinnenWindow()) {
215
- rd.bepaalTopologieElementen(this.signaleringsBeeldManagerService);
216
- if (rd.getTopologieElementen().length > 0) {
217
- ritdelen[i] = rd.isNietBeschikbaar() ? rd.copyMetZichtbaarheid(RitdeelZichtbaarheid.ZICHTBAAR) : rd;
218
- }
219
- else {
220
- ritdelen[i] = this.maakOnzichtbaar(rd);
221
- }
222
- }
223
- }
224
- this.updateZichtbaarheidAangrenzendeRitdelen(min, max, ritdelen, visibleDtos);
225
- return this.updateZichtbaarheidBuitenWindow(ritdelen, visibleDtos);
226
- }
227
- updateZichtbaarheidBuitenWindow(nieuweRitdelen, visibleDtos) {
228
- for (let i = 0; i < nieuweRitdelen.length; i++) {
229
- const rd = nieuweRitdelen[i];
230
- if (!rd.isZichtbaar() && this.bevatGevisualiseerdePplg(visibleDtos, rd.getPplg())) {
231
- rd.bepaalTopologieElementen(this.signaleringsBeeldManagerService);
232
- if (rd.getTopologieElementen().length > 0 && this.isEersteLaatstePuicZichtbaar(rd.getTopologieElementen())) {
233
- nieuweRitdelen[i] = rd.isNietBeschikbaar() ? rd.copyMetZichtbaarheidEnPaginatie(RitdeelZichtbaarheid.ZICHTBAAR, true) :
234
- rd.copyMetZichtbaarheidBuitenPaginatie(true);
235
- }
236
- }
237
- }
238
- return nieuweRitdelen;
239
- }
240
- updateZichtbaarheidAangrenzendeRitdelen(min, max, nieuweRitdelen, visibleDtos) {
241
- let i = min - 1;
242
- while (i >= 0) {
243
- i = this.updateZichtbaarHeid(i, 0, visibleDtos, nieuweRitdelen) - 1;
244
- }
245
- i = max + 1;
246
- while (i < nieuweRitdelen.length) {
247
- i = this.updateZichtbaarHeid(i, nieuweRitdelen.length, visibleDtos, nieuweRitdelen) + 1;
248
- }
249
- }
250
- updateZichtbaarHeid(i, end, visibleDtos, nieuweRitdelen) {
251
- const rd = nieuweRitdelen[i];
252
- if (this.bevatGevisualiseerdePplg(visibleDtos, rd.getPplg())) {
253
- i = this.updateZichtbaarheidAangrenzendeRitdeel(rd, nieuweRitdelen, i, end);
254
- }
255
- else {
256
- i = end;
257
- }
258
- return i;
259
- }
260
- isEersteLaatstePuicZichtbaar(topoElementen) {
261
- return !!document.getElementById('p' + topoElementen[0].getPuic()) ||
262
- !!document.getElementById('p' + topoElementen[topoElementen.length - 1].getPuic());
263
- }
264
- updateZichtbaarheidAangrenzendeRitdeel(rd, nieuweRitdelen, i, end) {
265
- rd.bepaalTopologieElementen(this.signaleringsBeeldManagerService);
266
- if (rd.getTopologieElementen().length > 0 && this.isEersteLaatstePuicZichtbaar(rd.getTopologieElementen())) {
267
- nieuweRitdelen[i] = rd.isNietBeschikbaar() ? rd.copyMetZichtbaarheid(RitdeelZichtbaarheid.ZICHTBAAR) : rd;
268
- }
269
- else {
270
- return end;
271
- }
272
- return i;
273
- }
274
- bevatGevisualiseerdePplg(visibleDtos, pplg) {
275
- for (const dto of visibleDtos) {
276
- if (dto.pplgs) {
277
- for (const dtopplg of dto.pplgs) {
278
- if (dtopplg === pplg) {
279
- return true;
280
- }
281
- }
282
- }
283
- }
284
- return false;
285
- }
286
- maakOnzichtbaar(rd) {
287
- return rd.isZichtbaar() || rd.isOnzichtbaarDoorGebruiker() ?
288
- rd.copyMetZichtbaarheidEnPaginatie(RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_SYSTEEM, false) :
289
- rd.copyMetZichtbaarheidBuitenPaginatie(false);
290
- }
291
- bepaalZichtbaarheidRechts(idx, items, paginationSize, dtos) {
292
- const pplgsWindow = [];
293
- const dtosWindow = [];
294
- for (let i = 0; i < items.length; i++) {
295
- const rd = items[i];
296
- if (i >= idx && this.valtBinnenPaginatieWindow(pplgsWindow, paginationSize, dtosWindow)) {
297
- this.setZichtbaar(rd, pplgsWindow, dtos, dtosWindow, items, i);
298
- }
299
- else {
300
- items[i] = rd.isZichtbaar() || rd.isOnzichtbaarDoorGebruiker() ?
301
- rd.copyMetZichtbaarheidEnPaginatie(RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_SYSTEEM, false) :
302
- rd.copyMetZichtbaarheidBuitenPaginatie(false);
303
- }
304
- }
305
- }
306
- bepaalZichtbaarheidLinks(idx, items, paginationSize, dtos) {
307
- const pplgsWindow = [];
308
- const dtosWindow = [];
309
- for (let i = items.length - 1; i >= 0; i--) {
310
- const rd = items[i];
311
- if (i <= idx && this.valtBinnenPaginatieWindow(pplgsWindow, paginationSize, dtosWindow)) {
312
- this.setZichtbaar(rd, pplgsWindow, dtos, dtosWindow, items, i);
313
- }
314
- else {
315
- items[i] = rd.isZichtbaar() || rd.isOnzichtbaarDoorGebruiker() ?
316
- rd.copyMetZichtbaarheidEnPaginatie(RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_SYSTEEM, false) :
317
- rd.copyMetZichtbaarheidBuitenPaginatie(false);
318
- }
319
- }
320
- }
321
- valtBinnenPaginatieWindow(pplgsWindow, paginationSize, dtosWindow) {
322
- return pplgsWindow.length < paginationSize || dtosWindow.length < paginationSize;
323
- }
324
- setZichtbaar(rd, pplgsWindow, dtos, dtosWindow, items, i) {
325
- const itemPplg = rd.getPplg();
326
- if (!pplgsWindow.includes(itemPplg)) {
327
- pplgsWindow.push(itemPplg);
328
- }
329
- const pplgDtos = [];
330
- dtos.filter(dto => dto.pplgs?.includes(itemPplg)).forEach(dto => {
331
- if (!pplgDtos.includes(dto)) {
332
- pplgDtos.push(dto);
333
- }
334
- });
335
- pplgDtos.filter(d => !dtosWindow.includes(d)).forEach(d => dtosWindow.push(d));
336
- items[i] = !rd.isZichtbaar() ? rd.copyMetZichtbaarheidEnPaginatie(RitdeelZichtbaarheid.ZICHTBAAR, false) :
337
- rd.copyMetZichtbaarheidBuitenPaginatie(false);
338
- }
339
- bepaalStartIndex(ritDelen) {
340
- for (let i = 0; i < ritDelen.length; i++) {
341
- if (ritDelen[i].isBinnenWindow()) {
342
- return i;
343
- }
344
- }
345
- return -1;
346
- }
347
- bepaalEndIndex(ritDelen) {
348
- for (let i = ritDelen.length - 1; i >= 0; i--) {
349
- if (ritDelen[i].isBinnenWindow()) {
350
- return i;
351
- }
352
- }
353
- return -1;
354
- }
355
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LaadSignaleringsbeeldenEffect, deps: [{ token: i1.Actions }, { token: i2.Store }, { token: i3.SignaleringsBeeldManagerService }, { token: i4.EditorService }, { token: i5.SignaleringsbeeldInfoResource }, { token: i6.ConnectorService }, { token: i7.MessagesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
356
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LaadSignaleringsbeeldenEffect }); }
357
- }
358
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LaadSignaleringsbeeldenEffect, decorators: [{
359
- type: Injectable
360
- }], ctorParameters: () => [{ type: i1.Actions }, { type: i2.Store }, { type: i3.SignaleringsBeeldManagerService }, { type: i4.EditorService }, { type: i5.SignaleringsbeeldInfoResource }, { type: i6.ConnectorService }, { type: i7.MessagesService }] });
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFhZC1zaWduYWxlcmluZ3NiZWVsZGVuLmVmZmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21zdC12aWV3ZXIvc3JjL2xpYi9zdGF0ZS9lZmZlY3QvbGFhZC1zaWduYWxlcmluZ3NiZWVsZGVuLmVmZmVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkUsT0FBTyxFQUFXLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkYsT0FBTyxFQUFXLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFNcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxVQUFVLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLG1DQUFtQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkcsT0FBTyxLQUFLLGVBQWUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7O0FBd0MvRCxNQUFNLE9BQU8sNkJBQTZCO0lBSXRDLFlBQTZCLFFBQWlCLEVBQ2pCLEtBQTRCLEVBQzVCLCtCQUFnRSxFQUNoRSxhQUE0QixFQUM1QixXQUEwQyxFQUMxQyxnQkFBa0MsRUFDbEMsZUFBZ0M7UUFOaEMsYUFBUSxHQUFSLFFB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TyxDQUFDLENBQUMsQ0FBQztJQUNkLENBQUM7OEdBaGFRLDZCQUE2QjtrSEFBN0IsNkJBQTZCOzsyRkFBN0IsNkJBQTZCO2tCQUR6QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW14Vmlld2VyQ29tcG9uZW50LCBQb2ludCwgU3ZnSW5mbyB9IGZyb20gJ0Bsb3hpYS9pbXgtdmlld2VyJztcbmltcG9ydCB7IHNiYmxhZCB9IGZyb20gJ0Bsb3hpYS9yaWp3ZWdlbic7XG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZXNzYWdlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9hdG9taWMtY29tcG9uZW50cy9zZXJ2aWNlcy9tZXNzYWdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFJpdGRlZWwsIFJpdGRlZWxaaWNodGJhYXJoZWlkIH0gZnJvbSAnLi4vLi4vbW9kZWwvcml0ZGVlbCc7XG5pbXBvcnQgeyBJbmZyYU1vZGVsIH0gZnJvbSAnLi4vLi4vb3B0aW1vJztcbmltcG9ydCB7IFNpZ25hbGVyaW5nc2JlZWxkSW5mb1Jlc291cmNlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3NpZ25hbGVyaW5nc2JlZWxkaW5mby5yZXNvdXJjZSc7XG5pbXBvcnQgeyBDb25uZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29ubmVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFNpZ25hbGVyaW5nc0JlZWxkTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaWduYWxlcmluZ3MtYmVlbGQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1lc3NhZ2VCdWlsZGVyIH0gZnJvbSAnLi4vLi4vdXRpbC9tZXNzYWdlLWJ1aWxkZXInO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL3V0aWwvdXRpbHMnO1xuaW1wb3J0ICogYXMgTXN0QWN0aW9ucyBmcm9tICcuLi9hY3Rpb25zL2FjdGlvbnMnO1xuaW1wb3J0IHsgU2V0U2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvcywgU2V0VmlzaWJsZVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MgfSBmcm9tICcuLi9hY3Rpb25zL2FjdGlvbnMnO1xuaW1wb3J0ICogYXMgUml0ZGVsZW5BY3Rpb25zIGZyb20gJy4uL2FjdGlvbnMvcml0ZGVsZW4uYWN0aW9ucyc7XG5pbXBvcnQgeyBNc3RFZGl0b3JTdGF0ZSB9IGZyb20gJy4uL21zdC1lZGl0b3Itc3RhdGUnO1xuaW1wb3J0IFRvcG9sb2d5RWxlbWVudCA9IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnQ7XG5pbXBvcnQge1NpZ25hbGVyaW5nc2JlZWxkRHRvfSBmcm9tIFwiLi4vLi4vLi4vZ2VuZXJhdGVkL29wZW5hcGlcIjtcblxuaW50ZXJmYWNlIE90aGVyUmFuZElucHV0IHtcbiAgICByYW5kOiBUb3BvbG9neUVsZW1lbnQ7XG4gICAgcmFuZFB1aWM6IHN0cmluZztcbiAgICBzdG9yZVN0YXRlOiBNc3RFZGl0b3JTdGF0ZTtcbn1cblxuaW50ZXJmYWNlIE90aGVyUmFuZFJlc3VsdCB7XG4gICAgb3RoZXJQcGxnOiBzdHJpbmc7XG4gICAgcmFuZDogVG9wb2xvZ3lFbGVtZW50O1xuICAgIHN0b3JlU3RhdGU6IE1zdEVkaXRvclN0YXRlO1xufVxuXG5pbnRlcmZhY2UgQWN0aWVBbmRTdGF0ZUlucHV0IHtcbiAgICBhY3RpZTogUmV0dXJuVHlwZTx0eXBlb2YgTXN0QWN0aW9ucy5sYWFkRW5WZXJ3ZXJrU2lnbmFsZXJpbmdzYmVlbGRJbmZvPjtcbiAgICBzdG9yZVN0YXRlOiBNc3RFZGl0b3JTdGF0ZTtcbn1cblxuaW50ZXJmYWNlIER0b3NBbmRTdGF0ZSB7XG4gICAgZHRvczogU2lnbmFsZXJpbmdzYmVlbGREdG9bXTtcbiAgICBzdG9yZVN0YXRlOiBNc3RFZGl0b3JTdGF0ZTtcbn1cblxuaW50ZXJmYWNlIFNiUmVzdWx0IHtcbiAgICBzdmdEYXRhVXJsczogc3RyaW5nW107XG4gICAgcml0RGVsZW46IFJpdGRlZWxbXTtcbiAgICBkdG9zOiBTaWduYWxlcmluZ3NiZWVsZER0b1tdO1xufVxuXG5pbnRlcmZhY2UgU2lnbmFsZXJpbmdzYmVlbGRJbmZvSW5wdXQge1xuICAgIGR0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW107XG4gICAgYWN0aWU6IGFueTtcbiAgICBzdG9yZVN0YXRlOiBNc3RFZGl0b3JTdGF0ZTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExhYWRTaWduYWxlcmluZ3NiZWVsZGVuRWZmZWN0IHtcblxuICAgIHByaXZhdGUgU1ZHX1BJWEVMX1JVSU1URSA9IDMwO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhY3Rpb25zJDogQWN0aW9ucyxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBTdG9yZTxNc3RFZGl0b3JTdGF0ZT4sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlOiBTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNiaVJlc291cmNlOiBTaWduYWxlcmluZ3NiZWVsZEluZm9SZXNvdXJjZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3RvclNlcnZpY2U6IENvbm5lY3RvclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlc1NlcnZpY2U6IE1lc3NhZ2VzU2VydmljZSkge1xuICAgIH1cblxuICAgIHZlcndlcmtSaXRkZWxlbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoUml0ZGVsZW5BY3Rpb25zLnNldFJpdERlbGVuLCBSaXRkZWxlbkFjdGlvbnMubmF2aWdlZXIsIFJpdGRlbGVuQWN0aW9ucy5uYXZpZ2VlclZhbmFmKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdG9yZSksXG4gICAgICAgIG1hcCgoW2FjdGllLCBzdG9yZVN0YXRlXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChNc3RBY3Rpb25zLlNldE9uZ2VwbGFuZGVBY3RpZXNCZXBhYWxkKGZhbHNlKSk7XG4gICAgICAgICAgICB0aGlzLnZlcndlcmtSaXRkZWxlbihhY3RpZSwgc3RvcmVTdGF0ZSk7XG4gICAgICAgIH0pKSwgeyBkaXNwYXRjaDogZmFsc2UgfVxuICAgICk7XG5cbiAgICBsYWFkRW5WZXJ3ZXJrU2lnbmFsZXJpbmdzYmVlbGRJbmZvJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICAgIG9mVHlwZShNc3RBY3Rpb25zLmxhYWRFblZlcndlcmtTaWduYWxlcmluZ3NiZWVsZEluZm8pLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlKSxcbiAgICAgICAgc3dpdGNoTWFwKChbYWN0aWUsIHN0b3JlU3RhdGVdKSA9PiB0aGlzLmhhbmRsZVNpZ25hbGVyaW5nc2JlZWxkSW5mbyh7YWN0aWUsIHN0b3JlU3RhdGV9KSlcbiAgICApLCB7IGRpc3BhdGNoOiBmYWxzZSB9KTtcblxuICAgIHByaXZhdGUgaGFuZGxlU2lnbmFsZXJpbmdzYmVlbGRJbmZvKHthY3RpZSwgc3RvcmVTdGF0ZX0gOiBBY3RpZUFuZFN0YXRlSW5wdXQpOiAgT2JzZXJ2YWJsZTxTaWduYWxlcmluZ3NiZWVsZER0b1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNiaVJlc291cmNlLmxhYWRTaWduYWxlcmluZ3NiZWVsZEluZm8oc3RvcmVTdGF0ZS5pYVZlcnNpZS52ZXJzaWUsIGFjdGllLnBwbGdzKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHRhcCgoZHRvcykgPT4gdGhpcy5wcm9jZXNzUmVzcG9uc2Uoe2R0b3MsIHN0b3JlU3RhdGUsIGFjdGllfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlc1NlcnZpY2Uuc2hvd01lc3NhZ2UoTWVzc2FnZUJ1aWxkZXIubmlldEdldm9uZGVuU0JJKGVycikpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1Jlc3BvbnNlKHsgZHRvcywgc3RvcmVTdGF0ZSwgYWN0aWUgfTogU2lnbmFsZXJpbmdzYmVlbGRJbmZvSW5wdXQpOiB2b2lkICB7XG4gICAgICAgIGlmIChkdG9zICYmIGR0b3MuZmlsdGVyKGR0byA9PiBkdG8ubWV0VmlzdWFsaXNhdGllKS5sZW5ndGggPiAxMikge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlc1NlcnZpY2Uuc2hvd01lc3NhZ2UoTWVzc2FnZUJ1aWxkZXIubWVlckRhbjEyQmxhZGVuR2V2b25kZW4oZHRvcy5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldFNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MoZHRvcywgc3RvcmVTdGF0ZS5pYVZlcnNpZSwgYWN0aWUucml0LCBhY3RpZS5wYWdpbmF0aW9uU2l6ZSwgYWN0aWUucml0R2V3aWp6aWdkVG9lZ2VzdGFhbikpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldFZpc2libGVTaWduYWxlcmluZ3NiZWVsZEluZm9EdG9zKGR0b3MpKTtcbiAgICB9XG5cbiAgICBuYXZpZ2VlckJ1aXRlblJpdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoTXN0QWN0aW9ucy5uYXZpZ2VlckJ1aXRlblJpdCksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUpLFxuICAgICAgICBzd2l0Y2hNYXAoKFthY3RpZSwgc3RvcmVTdGF0ZV0pID0+XG4gICAgICAgICAgICBvZih7XG4gICAgICAgICAgICAgICAgcmFuZDogdGhpcy5zaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlLmdldFRvcG9sb2d5RWxlbWVudEJ5UHVpYyhhY3RpZS5yYW5kUHVpYyksXG4gICAgICAgICAgICAgICAgcmFuZFB1aWM6IGFjdGllLnJhbmRQdWljLFxuICAgICAgICAgICAgICAgIHN0b3JlU3RhdGVcbiAgICAgICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHRoaXMuZ2V0T3RoZXJSYW5kLmJpbmQodGhpcykpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCh0aGlzLmxvYWRSb3V0ZUZpbGVzQW5kU2lnbmFsZXJpbmdzYmVlbGRJbmZvLmJpbmQodGhpcykpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCh0aGlzLmxvYWRTaWduYWxlcmluZ3NiZWVsZGVuLmJpbmQodGhpcykpLFxuICAgICAgICAgICAgICAgIG1hcCh0aGlzLnByb2Nlc3NTdmdzQW5kVXBkYXRlUml0ZGVsZW4uYmluZCh0aGlzKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICksIHsgZGlzcGF0Y2g6IGZhbHNlIH0pO1xuXG4gICAgcHJpdmF0ZSBnZXRPdGhlclJhbmQoeyByYW5kLCByYW5kUHVpYywgc3RvcmVTdGF0ZX06IE90aGVyUmFuZElucHV0KTogT2JzZXJ2YWJsZTxPdGhlclJhbmRSZXN1bHQ+ICB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RvclNlcnZpY2UuZ2V0T3RoZXJSYW5kKHJhbmRQdWljKS5waXBlKFxuICAgICAgICAgICAgbWFwKG90aGVyUHBsZyA9PiAoeyBvdGhlclBwbGcsIHJhbmQsIHN0b3JlU3RhdGUgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkUm91dGVGaWxlc0FuZFNpZ25hbGVyaW5nc2JlZWxkSW5mbyh7IG90aGVyUHBsZywgcmFuZCwgc3RvcmVTdGF0ZSB9OiBPdGhlclJhbmRSZXN1bHQpOiBPYnNlcnZhYmxlPER0b3NBbmRTdGF0ZT4ge1xuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UubGFhZFJvdXRlRmlsZXMoc3RvcmVTdGF0ZS5pYVZlcnNpZS52ZXJzaWUsIFtyYW5kLmdldFBQTEcoKSwgb3RoZXJQcGxnXSk7XG4gICAgICAgIHJldHVybiB0aGlzLnNiaVJlc291cmNlLmxhYWRTaWduYWxlcmluZ3NiZWVsZEluZm8oc3RvcmVTdGF0ZS5pYVZlcnNpZS52ZXJzaWUsIFtyYW5kLmdldFBQTEcoKSwgb3RoZXJQcGxnXSkucGlwZShcbiAgICAgICAgICAgIG1hcChkdG9zID0+ICh7IGR0b3MsIHN0b3JlU3RhdGUgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkU2lnbmFsZXJpbmdzYmVlbGRlbih7IGR0b3MsIHN0b3JlU3RhdGUgfTogRHRvc0FuZFN0YXRlKTogT2JzZXJ2YWJsZTxTYlJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmxhYWRTaWduYWxlcmluZ3NiZWVsZGVuKHN0b3JlU3RhdGUuaWFWZXJzaWUudmVyc2llLCBkdG9zKS5waXBlKFxuICAgICAgICAgICAgbWFwKHN2Z0RhdGFVcmxzID0+ICh7IHN2Z0RhdGFVcmxzLCByaXREZWxlbjogc3RvcmVTdGF0ZS5yaXREZWxlbiwgZHRvcyB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NTdmdzQW5kVXBkYXRlUml0ZGVsZW4oeyBzdmdEYXRhVXJscywgcml0RGVsZW4sIGR0b3MgfTogU2JSZXN1bHQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52ZXJ3ZXJrU3ZncyhzdmdEYXRhVXJscyk7XG4gICAgICAgIGNvbnN0IG5pZXV3ZVJpdGRlbGVuID0gdGhpcy51cGRhdGVSaXRkZWxlbihyaXREZWxlbiwgZHRvcyk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goTXN0QWN0aW9ucy5VcGRhdGVWaXNpYmxlU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvcyhkdG9zKSk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUml0ZGVsZW5BY3Rpb25zLnVwZGF0ZVJpdERlbGVuKG5pZXV3ZVJpdGRlbGVuKSk7XG4gICAgfVxuXG4gICAgdmVyd2Vya1JpdGRlbGVuKGFjdGllOiBhbnksIHN0b3JlU3RhdGU6IE1zdEVkaXRvclN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzSW5pdCA9IGFjdGllLnR5cGUgPT09IFJpdGRlbGVuQWN0aW9ucy5TRVRfUklUX0RFTEVOO1xuICAgICAgICBjb25zdCByaXREZWxlbjogUml0ZGVlbFtdID0gaXNJbml0ID8gYWN0aWUucml0RGVsZW4gOiBzdG9yZVN0YXRlLnJpdERlbGVuO1xuICAgICAgICBjb25zdCBzdG9yZUR0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10gPSBzdG9yZVN0YXRlLnNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3M7XG5cbiAgICAgICAgdGhpcy5uYXZpZ2VlcihyaXREZWxlbiwgYWN0aWUsIHN0b3JlRHRvcyk7XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZVJpdERlbGVuID0gcml0RGVsZW4uZmlsdGVyKG4gPT4gbi5pc1ppY2h0YmFhckJpbm5lbldpbmRvdygpKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZVJpdFBwbGdzOiBzdHJpbmdbXSA9IHZpc2libGVSaXREZWxlbi5tYXAociA9PiByLmdldFBwbGcoKSkuZmlsdGVyKHRoaXMuZGlzdGluY3QpO1xuXG4gICAgICAgIGNvbnN0IHZpc2libGVEdG9zID0gdGhpcy5iZXBhYWxaaWNodGJhcmVEdG9zKHZpc2libGVSaXRQcGxncywgc3RvcmVEdG9zKTtcbiAgICAgICAgY29uc3QgbG9hZGluZ0R0b3MgPSB0aGlzLmJlcGFhbFRvTG9hZER0b3ModmlzaWJsZUR0b3MsIHJpdERlbGVuLCB2aXNpYmxlUml0RGVsZW4sIHZpc2libGVSaXRQcGxncywgc3RvcmVTdGF0ZSk7XG5cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmxhYWRTaWduYWxlcmluZ3NiZWVsZGVuKHN0b3JlU3RhdGUuaWFWZXJzaWUudmVyc2llLCBsb2FkaW5nRHRvcykucGlwZShcbiAgICAgICAgICAgIHRhcChzdmdEYXRhVXJscyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJ3ZXJrU3ZncyhzdmdEYXRhVXJscyk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShyaXREZWxlbiwgdmlzaWJsZUR0b3MsIHN0b3JlU3RhdGUsIHZpc2libGVSaXRQcGxncywgbG9hZGluZ0R0b3MsIGlzSW5pdCwgc3RvcmVEdG9zKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXNTZXJ2aWNlLnNob3dNZXNzYWdlKE1lc3NhZ2VCdWlsZGVyLnJ3cERhdGFOaWV0R2V2b25kZW4oVXRpbHMuZ2V0VmFsaWRFcm9yck1lc3NhZ2UoZXJyKSkpO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTdGF0ZShyaXREZWxlbjogUml0ZGVlbFtdLCB2aXNpYmxlRHRvczogU2lnbmFsZXJpbmdzYmVlbGREdG9bXSwgc3RvcmVTdGF0ZTogTXN0RWRpdG9yU3RhdGUsIHZpc2libGVSaXRQcGxnczogc3RyaW5nW10sIGxvYWRpbmdEdG9zOiBhbnlbXSwgaXNJbml0OiBib29sZWFuLCBzdG9yZUR0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10pOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuaWV1d2VSaXRkZWxlbiA9IHRoaXMudXBkYXRlUml0ZGVsZW4ocml0RGVsZW4sIHZpc2libGVEdG9zKTtcbiAgICAgICAgICAgIHRoaXMuZGVidWdMb2coc3RvcmVTdGF0ZS5kZWJ1ZywgdmlzaWJsZVJpdFBwbGdzLCBsb2FkaW5nRHRvcyk7XG5cbiAgICAgICAgICAgIGlmICghaXNJbml0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChNc3RBY3Rpb25zLlVwZGF0ZVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3Moc3RvcmVEdG9zKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChNc3RBY3Rpb25zLlVwZGF0ZVZpc2libGVTaWduYWxlcmluZ3NiZWVsZEluZm9EdG9zKGxvYWRpbmdEdG9zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFJpdGRlbGVuQWN0aW9ucy51cGRhdGVSaXREZWxlbihuaWV1d2VSaXRkZWxlbikpO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZlcndlcmtTdmdzKHN2Z0RhdGFVcmxzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKE1zdEFjdGlvbnMuU2V0U3ZnSW5mb3ModGhpcy5iZXBhYWxTdmdJbmZvcyhzdmdEYXRhVXJscykpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbFN2Z0luZm9zKHN2Z0RhdGFVcmxzOiBzdHJpbmdbXSk6IFN2Z0luZm9bXSB7XG4gICAgICAgIGxldCBuZXh0Q29vcmRzID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICBjb25zdCBpbmZvczogU3ZnSW5mb1tdID0gW107XG4gICAgICAgIHN2Z0RhdGFVcmxzLmZvckVhY2goc3ZnRGF0YVVybCA9PiB7XG4gICAgICAgICAgICBpZiAoc3ZnRGF0YVVybCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSBhdG9iKHN2Z0RhdGFVcmwuc3Vic3RyaW5nKCdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgaW5mb3MucHVzaChuZXcgU3ZnSW5mbygnZGF0YTppbWFnZS9zdmcreG1sLCcgKyBkZWNvZGVkLCBuZXh0Q29vcmRzKSk7XG4gICAgICAgICAgICAgICAgbmV4dENvb3JkcyA9IG5ldyBQb2ludChuZXh0Q29vcmRzLnggKyBJbXhWaWV3ZXJDb21wb25lbnQuZ2V0WENvb3JkaW5hdGUoZGVjb2RlZCkgKyB0aGlzLlNWR19QSVhFTF9SVUlNVEUsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGluZm9zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsVG9Mb2FkRHRvcyh2aXNpYmxlRHRvczogU2lnbmFsZXJpbmdzYmVlbGREdG9bXSwgcml0RGVsZW46IFJpdGRlZWxbXSwgdmlzaWJsZVJpdERlbGVuOiBSaXRkZWVsW10sIHZpc2libGVSaXRQcGxnczogc3RyaW5nW10sIHN0b3JlU3RhdGU6IE1zdEVkaXRvclN0YXRlKTogU2lnbmFsZXJpbmdzYmVlbGREdG9bXSB7XG4gICAgICAgIGNvbnN0IGxvYWRpbmdEdG9zOiBTaWduYWxlcmluZ3NiZWVsZER0b1tdID0gWy4uLnZpc2libGVEdG9zXTtcbiAgICAgICAgY29uc3QgZmlyc3RJZHggPSByaXREZWxlbi5pbmRleE9mKHZpc2libGVSaXREZWxlblswXSkgLSAxO1xuICAgICAgICB0aGlzLmFkZFByZXZOb25WaXNpYmxlRHRvKGZpcnN0SWR4LCByaXREZWxlbiwgbG9hZGluZ0R0b3MsIHZpc2libGVSaXRQcGxncywgc3RvcmVTdGF0ZS5zaWduYWxlcmluZ3NiZWVsZEluZm9EdG9zKTtcbiAgICAgICAgY29uc3QgbGFzdElkeCA9IHJpdERlbGVuLmluZGV4T2YodmlzaWJsZVJpdERlbGVuW3Zpc2libGVSaXREZWxlbi5sZW5ndGggLSAxXSkgKyAxO1xuICAgICAgICB0aGlzLmFkZE5leHROb25WaXNpYmxlRHRvKGxhc3RJZHgsIHJpdERlbGVuLCBsb2FkaW5nRHRvcywgdmlzaWJsZVJpdFBwbGdzLCBzdG9yZVN0YXRlLnNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MpO1xuICAgICAgICByZXR1cm4gbG9hZGluZ0R0b3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZXBhYWxaaWNodGJhcmVEdG9zKHZpc2libGVSaXRQcGxnczogc3RyaW5nW10sIGR0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10pOiBTaWduYWxlcmluZ3NiZWVsZER0b1tdIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUR0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10gPSBbXTtcbiAgICAgICAgdmlzaWJsZVJpdFBwbGdzLmZvckVhY2gocHBsZyA9PiB7XG4gICAgICAgICAgICBkdG9zLmZpbHRlcihkdG8gPT4gZHRvLnBwbGdzPy5pbmNsdWRlcyhwcGxnKSkuZm9yRWFjaChkdG8gPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdmlzaWJsZUR0b3MuaW5jbHVkZXMoZHRvKSkge1xuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlRHRvcy5wdXNoKGR0byk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB2aXNpYmxlRHRvcy5mb3JFYWNoKGR0byA9PiBkdG8ubWV0VmlzdWFsaXNhdGllID0gdHJ1ZSk7XG4gICAgICAgIGR0b3MuZmlsdGVyKGQgPT4gIXZpc2libGVEdG9zLmluY2x1ZGVzKGQpKS5mb3JFYWNoKGQgPT4gZC5tZXRWaXN1YWxpc2F0aWUgPSBmYWxzZSk7XG4gICAgICAgIHJldHVybiB2aXNpYmxlRHRvcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc3RpbmN0KHZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIHZhbHVlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRQcmV2Tm9uVmlzaWJsZUR0byhmaXJzdElkeDogbnVtYmVyLCByaXRkZWxlbjogUml0ZGVlbFtdLCBsb2FkaW5nRHRvczogU2lnbmFsZXJpbmdzYmVlbGREdG9bXSwgdmlzaWJsZVJpdFBwbGdzOiBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbER0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpcnN0SWR4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBwbGcgPSByaXRkZWxlbltmaXJzdElkeF0uZ2V0UHBsZygpO1xuICAgICAgICAgICAgY29uc3Qgcml0ZGVlbER0b3MgPSBhbGxEdG9zLmZpbHRlcihkdG8gPT4gZHRvLnBwbGdzPy5pbmNsdWRlcyhwcGxnKSkuZmlsdGVyKGR0byA9PiAhbG9hZGluZ0R0b3MuaW5jbHVkZXMoZHRvKSk7XG5cbiAgICAgICAgICAgIGlmICghdmlzaWJsZVJpdFBwbGdzLmluY2x1ZGVzKHBwbGcpICYmIHJpdGRlZWxEdG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByaXRkZWVsRHRvcy5maWx0ZXIoZCA9PiAhbG9hZGluZ0R0b3MuaW5jbHVkZXMoZCkpLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGQubWV0VmlzdWFsaXNhdGllID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdEdG9zLnB1c2goZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJldk5vblZpc2libGVEdG8oZmlyc3RJZHggLSAxLCByaXRkZWxlbiwgbG9hZGluZ0R0b3MsIHZpc2libGVSaXRQcGxncywgYWxsRHRvcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE5leHROb25WaXNpYmxlRHRvKGxhc3RJZHg6IG51bWJlciwgcml0ZGVsZW46IFJpdGRlZWxbXSwgbG9hZGluZ0R0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10sIHZpc2libGVSaXRQcGxnczogc3RyaW5nW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxEdG9zOiBTaWduYWxlcmluZ3NiZWVsZER0b1tdKTogdm9pZCB7XG4gICAgICAgIGlmIChsYXN0SWR4IDw9IHJpdGRlbGVuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHBwbGcgPSByaXRkZWxlbltsYXN0SWR4XS5nZXRQcGxnKCk7XG4gICAgICAgICAgICBjb25zdCByaXRkZWVsRHRvcyA9IGFsbER0b3MuZmlsdGVyKGR0byA9PiBkdG8ucHBsZ3M/LmluY2x1ZGVzKHBwbGcpKS5maWx0ZXIoZHRvID0+ICFsb2FkaW5nRHRvcy5pbmNsdWRlcyhkdG8pKTtcblxuICAgICAgICAgICAgaWYgKCF2aXNpYmxlUml0UHBsZ3MuaW5jbHVkZXMocHBsZykgJiYgcml0ZGVlbER0b3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJpdGRlZWxEdG9zLmZpbHRlcihkID0+ICFsb2FkaW5nRHRvcy5pbmNsdWRlcyhkKSkuZm9yRWFjaChkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZC5tZXRWaXN1YWxpc2F0aWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ0R0b3MucHVzaChkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGROZXh0Tm9uVmlzaWJsZUR0byhsYXN0SWR4ICsgMSwgcml0ZGVsZW4sIGxvYWRpbmdEdG9zLCB2aXNpYmxlUml0UHBsZ3MsIGFsbER0b3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWJ1Z0xvZyhkZWJ1ZzogYm9vbGVhbiwgdmlzaWJsZVJpdFBwbGdzOiBzdHJpbmdbXSwgbG9hZGluZ0R0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUklUIFBQTEdzOiAnICsgdmlzaWJsZVJpdFBwbGdzKTtcbiAgICAgICAgICAgIGxvYWRpbmdEdG9zLmZvckVhY2goZHRvID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgc3RyID0gJ1xcbkRUTy1ibGFkTmFhbTogJyArIGR0by5ibGFkTmFhbTtcbiAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcbkRUTy1QUExHcyAgIDogJyArIGR0by5wcGxncztcbiAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcblZpc2libGUgICAgIDogJyArIGR0by5tZXRWaXN1YWxpc2F0aWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWN0aWVzOiBOYXZpZ2VlcnxOYXZpZ2VlclZhbmFmfFNldFJpdERlbGVuXG4gICAgcHJpdmF0ZSBuYXZpZ2VlcihyaXREZWxlbjogUml0ZGVlbFtdLCBhY3RpZToge1xuICAgICAgICBwYWdpbmF0aW9uU2l6ZTogbnVtYmVyO1xuICAgICAgICBzdGFwU2l6ZTogbnVtYmVyO1xuICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgIHJpdGRlZWw6IFJpdGRlZWxcbiAgICB9LCBzdG9yZUR0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10pOiB2b2lkIHtcbiAgICAgICAgLy8gYWxsZSByaXRkZWxlbiBrcmlqZ2VuIHppY2h0YmFhcmhlaWRCdWl0ZW5QYWdpbmF0aWUgPT4gZmFsc2VcbiAgICAgICAgaWYgKGFjdGllLnR5cGUgPT09IFJpdGRlbGVuQWN0aW9ucy5TRVRfUklUX0RFTEVOKSB7XG4gICAgICAgICAgICB0aGlzLmJlcGFhbFppY2h0YmFhcmhlaWRSZWNodHMoMCwgcml0RGVsZW4sIGFjdGllLnBhZ2luYXRpb25TaXplLCBzdG9yZUR0b3MpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGllLnR5cGUgPT09IFJpdGRlbGVuQWN0aW9ucy5OQVZJR0VFUikge1xuICAgICAgICAgICAgY29uc3QgaXNMaW5rcyA9IGFjdGllLnN0YXBTaXplIDwgMDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLmJlcGFhbFN0YXJ0SW5kZXgocml0RGVsZW4pO1xuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLmJlcGFhbEVuZEluZGV4KHJpdERlbGVuKTtcbiAgICAgICAgICAgIGNvbnN0IG5hdmlnZXJlbk1vZ2VsaWprID0gIShzdGFydEluZGV4ID09PSAwICYmIGlzTGlua3MgfHwgZW5kSW5kZXggPT09IHJpdERlbGVuLmxlbmd0aCAtIDEgJiYgIWlzTGlua3MpO1xuICAgICAgICAgICAgaWYgKG5hdmlnZXJlbk1vZ2VsaWprKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTGlua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZXBhYWxaaWNodGJhYXJoZWlkTGlua3Moc3RhcnRJbmRleCwgcml0RGVsZW4sIGFjdGllLnBhZ2luYXRpb25TaXplLCBzdG9yZUR0b3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmVwYWFsWmljaHRiYWFyaGVpZFJlY2h0cyhlbmRJbmRleCwgcml0RGVsZW4sIGFjdGllLnBhZ2luYXRpb25TaXplLCBzdG9yZUR0b3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhY3RpZS50eXBlID09PSBSaXRkZWxlbkFjdGlvbnMuTkFWSUdFRVJfVkFOQUYpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IHJpdERlbGVuLmluZGV4T2YoYWN0aWUucml0ZGVlbCk7XG4gICAgICAgICAgICB0aGlzLmJlcGFhbFppY2h0YmFhcmhlaWRSZWNodHMoaWR4LCByaXREZWxlbiwgYWN0aWUucGFnaW5hdGlvblNpemUsIHN0b3JlRHRvcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVJpdGRlbGVuKHJpdGRlbGVuOiBSaXRkZWVsW10sIHZpc2libGVEdG9zOiBTaWduYWxlcmluZ3NiZWVsZER0b1tdKTogUml0ZGVlbFtdIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUluZGljZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaXRkZWxlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJpdGRlbGVuW2ldLmlzWmljaHRiYWFyQmlubmVuV2luZG93KCkpIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlSW5kaWNlcy5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLnZpc2libGVJbmRpY2VzKTtcbiAgICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4udmlzaWJsZUluZGljZXMpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcml0ZGVsZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJkID0gcml0ZGVsZW5baV07XG5cbiAgICAgICAgICAgIGlmIChyZC5pc1ppY2h0YmFhckJpbm5lbldpbmRvdygpKSB7XG4gICAgICAgICAgICAgICAgcmQuYmVwYWFsVG9wb2xvZ2llRWxlbWVudGVuKHRoaXMuc2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJkLmdldFRvcG9sb2dpZUVsZW1lbnRlbigpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcml0ZGVsZW5baV0gPSByZC5pc05pZXRCZXNjaGlrYmFhcigpID8gcmQuY29weU1ldFppY2h0YmFhcmhlaWQoUml0ZGVlbFppY2h0YmFhcmhlaWQuWklDSFRCQUFSKSA6IHJkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJpdGRlbGVuW2ldID0gdGhpcy5tYWFrT256aWNodGJhYXIocmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlWmljaHRiYWFyaGVpZEFhbmdyZW56ZW5kZVJpdGRlbGVuKG1pbiwgbWF4LCByaXRkZWxlbiwgdmlzaWJsZUR0b3MpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVppY2h0YmFhcmhlaWRCdWl0ZW5XaW5kb3cocml0ZGVsZW4sIHZpc2libGVEdG9zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVppY2h0YmFhcmhlaWRCdWl0ZW5XaW5kb3cobmlldXdlUml0ZGVsZW46IFJpdGRlZWxbXSwgdmlzaWJsZUR0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10pOiBSaXRkZWVsW10ge1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmlldXdlUml0ZGVsZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJkID0gbmlldXdlUml0ZGVsZW5baV07XG5cbiAgICAgICAgICAgIGlmICghcmQuaXNaaWNodGJhYXIoKSAmJiB0aGlzLmJldmF0R2V2aXN1YWxpc2VlcmRlUHBsZyh2aXNpYmxlRHRvcywgcmQuZ2V0UHBsZygpKSkge1xuICAgICAgICAgICAgICAgIHJkLmJlcGFhbFRvcG9sb2dpZUVsZW1lbnRlbih0aGlzLnNpZ25hbGVyaW5nc0JlZWxkTWFuYWdlclNlcnZpY2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZC5nZXRUb3BvbG9naWVFbGVtZW50ZW4oKS5sZW5ndGggPiAwICYmIHRoaXMuaXNFZXJzdGVMYWF0c3RlUHVpY1ppY2h0YmFhcihyZC5nZXRUb3BvbG9naWVFbGVtZW50ZW4oKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmlldXdlUml0ZGVsZW5baV0gPSByZC5pc05pZXRCZXNjaGlrYmFhcigpID8gcmQuY29weU1ldFppY2h0YmFhcmhlaWRFblBhZ2luYXRpZShSaXRkZWVsWmljaHRiYWFyaGVpZC5aSUNIVEJBQVIsIHRydWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJkLmNvcHlNZXRaaWNodGJhYXJoZWlkQnVpdGVuUGFnaW5hdGllKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmlldXdlUml0ZGVsZW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVaaWNodGJhYXJoZWlkQWFuZ3JlbnplbmRlUml0ZGVsZW4obWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBuaWV1d2VSaXRkZWxlbjogUml0ZGVlbFtdLCB2aXNpYmxlRHRvczogU2lnbmFsZXJpbmdzYmVlbGREdG9bXSk6IHZvaWQge1xuICAgICAgICBsZXQgaSA9IG1pbiAtIDE7XG4gICAgICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgICAgICAgIGkgPSB0aGlzLnVwZGF0ZVppY2h0YmFhckhlaWQoaSwgMCwgdmlzaWJsZUR0b3MsIG5pZXV3ZVJpdGRlbGVuKSAtIDE7XG4gICAgICAgIH1cblxuICAgICAgICBpID0gbWF4ICsgMTtcbiAgICAgICAgd2hpbGUgKGkgPCBuaWV1d2VSaXRkZWxlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGkgPSB0aGlzLnVwZGF0ZVppY2h0YmFhckhlaWQoaSwgbmlldXdlUml0ZGVsZW4ubGVuZ3RoLCB2aXNpYmxlRHRvcywgbmlldXdlUml0ZGVsZW4pICsgMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlWmljaHRiYWFySGVpZChpOiBudW1iZXIsIGVuZDogbnVtYmVyLCB2aXNpYmxlRHRvczogU2lnbmFsZXJpbmdzYmVlbGREdG9bXSwgbmlldXdlUml0ZGVsZW46IFJpdGRlZWxbXSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJkID0gbmlldXdlUml0ZGVsZW5baV07XG4gICAgICAgIGlmICh0aGlzLmJldmF0R2V2aXN1YWxpc2VlcmRlUHBsZyh2aXNpYmxlRHRvcywgcmQuZ2V0UHBsZygpKSkge1xuICAgICAgICAgICAgaSA9IHRoaXMudXBkYXRlWmljaHRiYWFyaGVpZEFhbmdyZW56ZW5kZVJpdGRlZWwocmQsIG5pZXV3ZVJpdGRlbGVuLCBpLCBlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaSA9IGVuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRWVyc3RlTGFhdHN0ZVB1aWNaaWNodGJhYXIodG9wb0VsZW1lbnRlbjogVG9wb2xvZ3lFbGVtZW50W10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3AnICsgdG9wb0VsZW1lbnRlblswXS5nZXRQdWljKCkpIHx8XG4gICAgICAgICAgICAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwJyArIHRvcG9FbGVtZW50ZW5bdG9wb0VsZW1lbnRlbi5sZW5ndGggLSAxXS5nZXRQdWljKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlWmljaHRiYWFyaGVpZEFhbmdyZW56ZW5kZVJpdGRlZWwocmQ6IFJpdGRlZWwsIG5pZXV3ZVJpdGRlbGVuOiBSaXRkZWVsW10sIGk6IG51bWJlciwgZW5kOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZC5iZXBhYWxUb3BvbG9naWVFbGVtZW50ZW4odGhpcy5zaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlKTtcbiAgICAgICAgaWYgKHJkLmdldFRvcG9sb2dpZUVsZW1lbnRlbigpLmxlbmd0aCA+IDAgJiYgdGhpcy5pc0VlcnN0ZUxhYXRzdGVQdWljWmljaHRiYWFyKHJkLmdldFRvcG9sb2dpZUVsZW1lbnRlbigpKSkge1xuICAgICAgICAgICAgbmlldXdlUml0ZGVsZW5baV0gPSByZC5pc05pZXRCZXNjaGlrYmFhcigpID8gcmQuY29weU1ldFppY2h0YmFhcmhlaWQoUml0ZGVlbFppY2h0YmFhcmhlaWQuWklDSFRCQUFSKSA6IHJkO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZW5kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmV2YXRHZXZpc3VhbGlzZWVyZGVQcGxnKHZpc2libGVEdG9zOiBTaWduYWxlcmluZ3NiZWVsZER0b1tdLCBwcGxnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBkdG8gb2YgdmlzaWJsZUR0b3MpIHtcbiAgICAgICAgICAgIGlmIChkdG8ucHBsZ3MpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGR0b3BwbGcgb2YgZHRvLnBwbGdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkdG9wcGxnID09PSBwcGxnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWFrT256aWNodGJhYXIocmQ6IFJpdGRlZWwpOiBSaXRkZWVsIHtcbiAgICAgICAgcmV0dXJuIHJkLmlzWmljaHRiYWFyKCkgfHwgcmQuaXNPbnppY2h0YmFhckRvb3JHZWJydWlrZXIoKSA/XG4gICAgICAgICAgICByZC5jb3B5TWV0WmljaHRiYWFyaGVpZEVuUGFnaW5hdGllKFJpdGRlZWxaaWNodGJhYXJoZWlkLk9OWklDSFRCQUFSX0RPT1JfU1lTVEVFTSwgZmFsc2UpIDpcbiAgICAgICAgICAgIHJkLmNvcHlNZXRaaWNodGJhYXJoZWlkQnVpdGVuUGFnaW5hdGllKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbFppY2h0YmFhcmhlaWRSZWNodHMoaWR4OiBudW1iZXIsIGl0ZW1zOiBSaXRkZWVsW10sIHBhZ2luYXRpb25TaXplOiBudW1iZXIsIGR0b3M6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHBsZ3NXaW5kb3c6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGR0b3NXaW5kb3c6IFNpZ25hbGVyaW5nc2JlZWxkRHRvW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmQgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGlmIChpID49IGlkeCAmJiB0aGlzLnZhbHRCaW5uZW5QYWdpbmF0aWVXaW5kb3cocHBsZ3NXaW5kb3csIHBhZ2luYXRpb25TaXplLCBkdG9zV2luZG93KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0WmljaHRiYWFyKHJkLCBwcGxnc1dpbmRvdywgZHRvcywgZHRvc1dpbmRvdywgaXRlbXMsIGkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtc1tpXSA9IHJkLmlzWmljaHRiYWFyKCkgfHwgcmQuaXNPbnppY2h0YmFhckRvb3JHZWJydWlrZXIoKSA/XG4gICAgICAgICAgICAgICAgICAgIHJkLmNvcHlNZXRaaWNodGJhYXJoZWlkRW5QYWdpbmF0aWUoUml0ZGVlbFppY2h0YmFhcmhlaWQuT05aSUNIVEJBQVJfRE9PUl9TWVNURUVNLCBmYWxzZSkgOlxuICAgICAgICAgICAgICAgICAgICByZC5jb3B5TWV0WmljaHRiYWFyaGVpZEJ1aXRlblBhZ2luYXRpZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbFppY2h0YmFhcmhlaWRMaW5rcyhpZHg6IG51bWJlciwgaXRlbXM6IFJpdGRlZWxbXSwgcGFnaW5hdGlvblNpemU6IG51bWJlciwgZHRvczogU2lnbmFsZXJpbmdzYmVlbGREdG9bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcGxnc1dpbmRvdzogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgZHRvc1dpbmRvdzogU2lnbmFsZXJpbmdzYmVlbGREdG9bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJkID0gaXRlbXNbaV07XG4gICAgICAgICAgICBpZiAoaSA8PSBpZHggJiYgdGhpcy52YWx0QmlubmVuUGFnaW5hdGllV2luZG93KHBwbGdzV2luZG93LCBwYWdpbmF0aW9uU2l6ZSwgZHRvc1dpbmRvdykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFppY2h0YmFhcihyZCwgcHBsZ3NXaW5kb3csIGR0b3MsIGR0b3NXaW5kb3csIGl0ZW1zLCBpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbXNbaV0gPSByZC5pc1ppY2h0YmFhcigpIHx8IHJkLmlzT256aWNodGJhYXJEb29yR2VicnVpa2VyKCkgP1xuICAgICAgICAgICAgICAgICAgICByZC5jb3B5TWV0WmljaHRiYWFyaGVpZEVuUGFnaW5hdGllKFJpdGRlZWxaaWNodGJhYXJoZWlkLk9OWklDSFRCQUFSX0RPT1JfU1lTVEVFTSwgZmFsc2UpIDpcbiAgICAgICAgICAgICAgICAgICAgcmQuY29weU1ldFppY2h0YmFhcmhlaWRCdWl0ZW5QYWdpbmF0aWUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWx0QmlubmVuUGFnaW5hdGllV2luZG93KHBwbGdzV2luZG93OiBzdHJpbmdbXSwgcGFnaW5hdGlvblNpemU6IG51bWJlciwgZHRvc1dpbmRvdzogU2lnbmFsZXJpbmdzYmVlbGREdG9bXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcHBsZ3NXaW5kb3cubGVuZ3RoIDwgcGFnaW5hdGlvblNpemUgfHwgZHRvc1dpbmRvdy5sZW5ndGggPCBwYWdpbmF0aW9uU2l6ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFppY2h0YmFhcihyZDogUml0ZGVlbCwgcHBsZ3NXaW5kb3c6IHN0cmluZ1tdLCBkdG9zOiBTaWduYWxlcmluZ3NiZWVsZER0b1tdLCBkdG9zV2luZG93OiBTaWduYWxlcmluZ3NiZWVsZER0b1tdLCBpdGVtczogUml0ZGVlbFtdLCBpOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbVBwbGcgPSByZC5nZXRQcGxnKCk7XG4gICAgICAgIGlmICghcHBsZ3NXaW5kb3cuaW5jbHVkZXMoaXRlbVBwbGcpKSB7XG4gICAgICAgICAgICBwcGxnc1dpbmRvdy5wdXNoKGl0ZW1QcGxnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBwbGdEdG9zOiBTaWduYWxlcmluZ3NiZWVsZER0b1tdID0gW107XG4gICAgICAgIGR0b3MuZmlsdGVyKGR0byA9PiBkdG8ucHBsZ3M/LmluY2x1ZGVzKGl0ZW1QcGxnKSkuZm9yRWFjaChkdG8gPT4ge1xuICAgICAgICAgICAgaWYgKCFwcGxnRHRvcy5pbmNsdWRlcyhkdG8pKSB7XG4gICAgICAgICAgICAgICAgcHBsZ0R0b3MucHVzaChkdG8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwcGxnRHRvcy5maWx0ZXIoZCA9PiAhZHRvc1dpbmRvdy5pbmNsdWRlcyhkKSkuZm9yRWFjaChkID0+IGR0b3NXaW5kb3cucHVzaChkKSk7XG5cbiAgICAgICAgaXRlbXNbaV0gPSAhcmQuaXNaaWNodGJhYXIoKSA/IHJkLmNvcHlNZXRaaWNodGJhYXJoZWlkRW5QYWdpbmF0aWUoUml0ZGVlbFppY2h0YmFhcmhlaWQuWklDSFRCQUFSLCBmYWxzZSkgOlxuICAgICAgICAgICAgcmQuY29weU1ldFppY2h0YmFhcmhlaWRCdWl0ZW5QYWdpbmF0aWUoZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsU3RhcnRJbmRleChyaXREZWxlbjogUml0ZGVlbFtdKTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaXREZWxlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJpdERlbGVuW2ldLmlzQmlubmVuV2luZG93KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZXBhYWxFbmRJbmRleChyaXREZWxlbjogUml0ZGVlbFtdKTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJpdERlbGVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAocml0RGVsZW5baV0uaXNCaW5uZW5XaW5kb3coKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG59XG4iXX0=
@@ -1,23 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { createEffect, ofType } from '@ngrx/effects';
3
- import { from } from 'rxjs';
4
- import { map, switchMap, withLatestFrom } from 'rxjs/operators';
5
- import { KeurAlleActiesGoed, UpdateRit } from '../actions/actions';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@ngrx/effects";
8
- import * as i2 from "@ngrx/store";
9
- import * as i3 from "../../services/beweging-verrijker.service";
10
- export class RitGoedkeurenEffect {
11
- constructor(actions$, store, bewegingVerrijker) {
12
- this.actions$ = actions$;
13
- this.store = store;
14
- this.bewegingVerrijker = bewegingVerrijker;
15
- this.keurAllesGoed$ = createEffect(() => this.actions$.pipe(ofType(KeurAlleActiesGoed), withLatestFrom(this.store), switchMap(([action, _store]) => from(this.bewegingVerrijker.getBewegingen(action.bewegingen, action.ongeplandeActies))), map((bewegingen) => UpdateRit(bewegingen))));
16
- }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RitGoedkeurenEffect, deps: [{ token: i1.Actions }, { token: i2.Store }, { token: i3.BewegingVerrijkerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
18
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RitGoedkeurenEffect }); }
19
- }
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RitGoedkeurenEffect, decorators: [{
21
- type: Injectable
22
- }], ctorParameters: () => [{ type: i1.Actions }, { type: i2.Store }, { type: i3.BewegingVerrijkerService }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicml0LWdvZWRrZXVyZW4uZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3N0YXRlL2VmZmVjdC9yaXQtZ29lZGtldXJlbi5lZmZlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVcsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFJbkUsTUFBTSxPQUFPLG1CQUFtQjtJQUU1QixZQUFvQixRQUFpQixFQUNqQixLQUE0QixFQUM1QixpQkFBMkM7UUFGM0MsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTBCO1FBRy9ELG1CQUFjLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNsRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsRUFDMUIsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDMUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQ3pGLEVBQ0QsR0FBRyxDQUFDLENBQUMsVUFBc0IsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQ3pELENBQUMsQ0FBQztJQVRILENBQUM7OEdBTFEsbUJBQW1CO2tIQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCZXdlZ2luZyB9IGZyb20gJy4uLy4uL29wdGltbyc7XG5pbXBvcnQgeyBCZXdlZ2luZ1ZlcnJpamtlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iZXdlZ2luZy12ZXJyaWprZXIuc2VydmljZSc7XG5pbXBvcnQgeyBLZXVyQWxsZUFjdGllc0dvZWQsIFVwZGF0ZVJpdCB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9ucyc7XG5pbXBvcnQgeyBNc3RFZGl0b3JTdGF0ZSB9IGZyb20gJy4uL21zdC1lZGl0b3Itc3RhdGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUml0R29lZGtldXJlbkVmZmVjdCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGlvbnMkOiBBY3Rpb25zLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPE1zdEVkaXRvclN0YXRlPixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJld2VnaW5nVmVycmlqa2VyOiBCZXdlZ2luZ1ZlcnJpamtlclNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBrZXVyQWxsZXNHb2VkJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICAgIG9mVHlwZShLZXVyQWxsZUFjdGllc0dvZWQpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlKSxcbiAgICAgICAgc3dpdGNoTWFwKChbYWN0aW9uLCBfc3RvcmVdKSA9PlxuICAgICAgICAgICAgZnJvbSh0aGlzLmJld2VnaW5nVmVycmlqa2VyLmdldEJld2VnaW5nZW4oYWN0aW9uLmJld2VnaW5nZW4sIGFjdGlvbi5vbmdlcGxhbmRlQWN0aWVzKSksXG4gICAgICAgICksXG4gICAgICAgIG1hcCgoYmV3ZWdpbmdlbjogQmV3ZWdpbmdbXSkgPT4gVXBkYXRlUml0KGJld2VnaW5nZW4pKVxuICAgICkpO1xufVxuIl19