@smartbit4all/ng-client 1.0.19 → 1.0.21

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 (251) hide show
  1. package/README.md +386 -386
  2. package/esm2020/lib/session/api/api/api.mjs +4 -4
  3. package/esm2020/lib/session/api/api/session.service.mjs +306 -306
  4. package/esm2020/lib/session/api/configuration.mjs +91 -91
  5. package/esm2020/lib/session/api/encoder.mjs +19 -19
  6. package/esm2020/lib/session/api/index.mjs +3 -3
  7. package/esm2020/lib/session/api/model/accountInfo.mjs +13 -13
  8. package/esm2020/lib/session/api/model/apiError.mjs +13 -13
  9. package/esm2020/lib/session/api/model/authenticationProviderData.mjs +13 -13
  10. package/esm2020/lib/session/api/model/getAuthenticationProvidersResponse.mjs +2 -2
  11. package/esm2020/lib/session/api/model/models.mjs +9 -9
  12. package/esm2020/lib/session/api/model/refreshSessionRequest.mjs +13 -13
  13. package/esm2020/lib/session/api/model/session.mjs +2 -2
  14. package/esm2020/lib/session/api/model/sessionInfoData.mjs +2 -2
  15. package/esm2020/lib/session/api/model/userActivityLog.mjs +13 -13
  16. package/esm2020/lib/session/api/param.mjs +2 -2
  17. package/esm2020/lib/session/api/variables.mjs +9 -9
  18. package/esm2020/lib/session/cookie-service/smart-cookie.service.mjs +225 -225
  19. package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.mjs +90 -90
  20. package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.mjs +43 -43
  21. package/esm2020/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.mjs +40 -40
  22. package/esm2020/lib/session/dev-tool/smart-dev-tool.interceptor.mjs +52 -52
  23. package/esm2020/lib/session/dev-tool/smart-dev-tool.service.mjs +161 -161
  24. package/esm2020/lib/session/projects.mjs +12 -12
  25. package/esm2020/lib/session/smart-error-catching.interceptor.mjs +71 -71
  26. package/esm2020/lib/session/smart-header-maintainer.interceptor.mjs +36 -36
  27. package/esm2020/lib/session/smart-session-handler.service.mjs +6 -6
  28. package/esm2020/lib/session/smart-session.module.mjs +74 -74
  29. package/esm2020/lib/session/smart-session.service.mjs +204 -204
  30. package/esm2020/lib/session/smart-timer/smart-session-timer.component.mjs +35 -35
  31. package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +51 -51
  32. package/esm2020/lib/smart-client/projects.mjs +6 -6
  33. package/esm2020/lib/smart-client/smart-authentication.service.mjs +15 -15
  34. package/esm2020/lib/smart-client/smart-component-api-client.mjs +150 -149
  35. package/esm2020/lib/smart-client/smart.component.mjs +30 -30
  36. package/esm2020/lib/smart-client/smart.service.mjs +30 -30
  37. package/esm2020/lib/smart-client/smart.subject.mjs +21 -21
  38. package/esm2020/lib/smart-ng-client.module.mjs +20 -20
  39. package/esm2020/lib/smart-ng-client.service.mjs +19 -19
  40. package/esm2020/lib/view-context/api/api/api.mjs +4 -4
  41. package/esm2020/lib/view-context/api/api/view.service.mjs +647 -647
  42. package/esm2020/lib/view-context/api/api.module.mjs +40 -40
  43. package/esm2020/lib/view-context/api/configuration.mjs +91 -91
  44. package/esm2020/lib/view-context/api/encoder.mjs +19 -19
  45. package/esm2020/lib/view-context/api/index.mjs +7 -7
  46. package/esm2020/lib/view-context/api/model/closeResult.mjs +17 -17
  47. package/esm2020/lib/view-context/api/model/componentConstraint.mjs +2 -2
  48. package/esm2020/lib/view-context/api/model/componentModel.mjs +2 -2
  49. package/esm2020/lib/view-context/api/model/componentModelChange.mjs +13 -13
  50. package/esm2020/lib/view-context/api/model/messageData.mjs +2 -2
  51. package/esm2020/lib/view-context/api/model/messageOption.mjs +2 -2
  52. package/esm2020/lib/view-context/api/model/messageOptionType.mjs +17 -17
  53. package/esm2020/lib/view-context/api/model/messageResult.mjs +2 -2
  54. package/esm2020/lib/view-context/api/model/messageType.mjs +18 -18
  55. package/esm2020/lib/view-context/api/model/models.mjs +33 -33
  56. package/esm2020/lib/view-context/api/model/openPendingData.mjs +2 -2
  57. package/esm2020/lib/view-context/api/model/smartLinkData.mjs +2 -2
  58. package/esm2020/lib/view-context/api/model/uiAction.mjs +2 -2
  59. package/esm2020/lib/view-context/api/model/uiActionButtonDescriptor.mjs +13 -13
  60. package/esm2020/lib/view-context/api/model/uiActionButtonIconPos.mjs +16 -16
  61. package/esm2020/lib/view-context/api/model/uiActionButtonType.mjs +21 -21
  62. package/esm2020/lib/view-context/api/model/uiActionDescriptor.mjs +2 -2
  63. package/esm2020/lib/view-context/api/model/uiActionDialogDescriptor.mjs +2 -2
  64. package/esm2020/lib/view-context/api/model/uiActionFeedbackType.mjs +16 -16
  65. package/esm2020/lib/view-context/api/model/uiActionInputType.mjs +18 -18
  66. package/esm2020/lib/view-context/api/model/uiActionRequest.mjs +13 -13
  67. package/esm2020/lib/view-context/api/model/valueSet.mjs +2 -2
  68. package/esm2020/lib/view-context/api/model/view.mjs +2 -2
  69. package/esm2020/lib/view-context/api/model/viewApiError.mjs +13 -13
  70. package/esm2020/lib/view-context/api/model/viewConstraint.mjs +2 -2
  71. package/esm2020/lib/view-context/api/model/viewContext.mjs +2 -2
  72. package/esm2020/lib/view-context/api/model/viewContextChange.mjs +2 -2
  73. package/esm2020/lib/view-context/api/model/viewContextData.mjs +2 -2
  74. package/esm2020/lib/view-context/api/model/viewContextUpdate.mjs +2 -2
  75. package/esm2020/lib/view-context/api/model/viewData.mjs +2 -2
  76. package/esm2020/lib/view-context/api/model/viewState.mjs +21 -21
  77. package/esm2020/lib/view-context/api/model/viewStateUpdate.mjs +2 -2
  78. package/esm2020/lib/view-context/api/model/viewType.mjs +17 -17
  79. package/esm2020/lib/view-context/api/param.mjs +2 -2
  80. package/esm2020/lib/view-context/api/variables.mjs +9 -9
  81. package/esm2020/lib/view-context/message-dialog/message-dialog.component.mjs +63 -63
  82. package/esm2020/lib/view-context/projects.mjs +17 -17
  83. package/esm2020/lib/view-context/property-definition-data.mjs +2 -2
  84. package/esm2020/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +30 -30
  85. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +53 -53
  86. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +47 -47
  87. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +119 -119
  88. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +51 -51
  89. package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +85 -85
  90. package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +110 -110
  91. package/esm2020/lib/view-context/smart-ui-action/ui-action.model.mjs +7 -7
  92. package/esm2020/lib/view-context/smart-ui-action/ui-action.service.mjs +148 -148
  93. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +24 -24
  94. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +44 -44
  95. package/esm2020/lib/view-context/smart-view-context.interceptor.mjs +28 -28
  96. package/esm2020/lib/view-context/smart-view-context.model.mjs +2 -2
  97. package/esm2020/lib/view-context/smart-view-context.module.mjs +84 -84
  98. package/esm2020/lib/view-context/smart-view-context.service.mjs +356 -340
  99. package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +33 -33
  100. package/esm2020/lib/view-context/value-api/api/api.mjs +4 -4
  101. package/esm2020/lib/view-context/value-api/api/value.service.mjs +138 -138
  102. package/esm2020/lib/view-context/value-api/api.module.mjs +40 -40
  103. package/esm2020/lib/view-context/value-api/configuration.mjs +91 -91
  104. package/esm2020/lib/view-context/value-api/encoder.mjs +19 -19
  105. package/esm2020/lib/view-context/value-api/index.mjs +7 -7
  106. package/esm2020/lib/view-context/value-api/model/models.mjs +9 -9
  107. package/esm2020/lib/view-context/value-api/model/value.mjs +13 -13
  108. package/esm2020/lib/view-context/value-api/model/valueSetData.mjs +13 -13
  109. package/esm2020/lib/view-context/value-api/model/valueSetDefinition.mjs +2 -2
  110. package/esm2020/lib/view-context/value-api/model/valueSetDefinitionData.mjs +2 -2
  111. package/esm2020/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +23 -23
  112. package/esm2020/lib/view-context/value-api/model/valueSetExpression.mjs +2 -2
  113. package/esm2020/lib/view-context/value-api/model/valueSetOperand.mjs +2 -2
  114. package/esm2020/lib/view-context/value-api/model/valueSetOperation.mjs +18 -18
  115. package/esm2020/lib/view-context/value-api/param.mjs +2 -2
  116. package/esm2020/lib/view-context/value-api/variables.mjs +9 -9
  117. package/esm2020/projects.mjs +9 -9
  118. package/esm2020/smartbit4all-ng-client.mjs +4 -4
  119. package/fesm2015/smartbit4all-ng-client.mjs +3813 -3796
  120. package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
  121. package/fesm2020/smartbit4all-ng-client.mjs +3792 -3775
  122. package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
  123. package/lib/session/api/api/api.d.ts +3 -3
  124. package/lib/session/api/api/session.service.d.ts +107 -107
  125. package/lib/session/api/configuration.d.ts +104 -104
  126. package/lib/session/api/encoder.d.ts +11 -11
  127. package/lib/session/api/index.d.ts +2 -2
  128. package/lib/session/api/model/accountInfo.d.ts +22 -22
  129. package/lib/session/api/model/apiError.d.ts +15 -15
  130. package/lib/session/api/model/authenticationProviderData.d.ts +17 -17
  131. package/lib/session/api/model/getAuthenticationProvidersResponse.d.ts +15 -15
  132. package/lib/session/api/model/models.d.ts +8 -8
  133. package/lib/session/api/model/refreshSessionRequest.d.ts +14 -14
  134. package/lib/session/api/model/session.d.ts +32 -32
  135. package/lib/session/api/model/sessionInfoData.d.ts +22 -22
  136. package/lib/session/api/model/userActivityLog.d.ts +33 -33
  137. package/lib/session/api/param.d.ts +37 -37
  138. package/lib/session/api/variables.d.ts +8 -8
  139. package/lib/session/cookie-service/smart-cookie.service.d.ts +129 -129
  140. package/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.d.ts +28 -28
  141. package/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.d.ts +18 -18
  142. package/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.d.ts +15 -15
  143. package/lib/session/dev-tool/smart-dev-tool.interceptor.d.ts +18 -18
  144. package/lib/session/dev-tool/smart-dev-tool.service.d.ts +55 -55
  145. package/lib/session/projects.d.ts +8 -8
  146. package/lib/session/smart-error-catching.interceptor.d.ts +13 -13
  147. package/lib/session/smart-header-maintainer.interceptor.d.ts +11 -11
  148. package/lib/session/smart-session-handler.service.d.ts +11 -11
  149. package/lib/session/smart-session.module.d.ts +15 -15
  150. package/lib/session/smart-session.service.d.ts +50 -50
  151. package/lib/session/smart-timer/smart-session-timer.component.d.ts +14 -14
  152. package/lib/session/smart-timer/smart-session-timer.service.d.ts +21 -21
  153. package/lib/smart-client/projects.d.ts +5 -5
  154. package/lib/smart-client/smart-authentication.service.d.ts +12 -12
  155. package/lib/smart-client/smart-component-api-client.d.ts +48 -48
  156. package/lib/smart-client/smart.component.d.ts +11 -11
  157. package/lib/smart-client/smart.service.d.ts +11 -11
  158. package/lib/smart-client/smart.subject.d.ts +6 -6
  159. package/lib/smart-ng-client.module.d.ts +8 -8
  160. package/lib/smart-ng-client.service.d.ts +10 -10
  161. package/lib/view-context/api/api/api.d.ts +3 -3
  162. package/lib/view-context/api/api/view.service.d.ts +246 -246
  163. package/lib/view-context/api/api.module.d.ts +11 -11
  164. package/lib/view-context/api/configuration.d.ts +104 -104
  165. package/lib/view-context/api/encoder.d.ts +11 -11
  166. package/lib/view-context/api/index.d.ts +6 -6
  167. package/lib/view-context/api/model/closeResult.d.ts +17 -17
  168. package/lib/view-context/api/model/componentConstraint.d.ts +25 -25
  169. package/lib/view-context/api/model/componentModel.d.ts +37 -37
  170. package/lib/view-context/api/model/componentModelChange.d.ts +19 -19
  171. package/lib/view-context/api/model/messageData.d.ts +29 -29
  172. package/lib/view-context/api/model/messageOption.d.ts +20 -20
  173. package/lib/view-context/api/model/messageOptionType.d.ts +17 -17
  174. package/lib/view-context/api/model/messageResult.d.ts +16 -16
  175. package/lib/view-context/api/model/messageType.d.ts +18 -18
  176. package/lib/view-context/api/model/models.d.ts +32 -32
  177. package/lib/view-context/api/model/openPendingData.d.ts +22 -22
  178. package/lib/view-context/api/model/smartLinkData.d.ts +21 -21
  179. package/lib/view-context/api/model/uiAction.d.ts +29 -29
  180. package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +18 -18
  181. package/lib/view-context/api/model/uiActionButtonIconPos.d.ts +19 -19
  182. package/lib/view-context/api/model/uiActionButtonType.d.ts +24 -24
  183. package/lib/view-context/api/model/uiActionDescriptor.d.ts +34 -34
  184. package/lib/view-context/api/model/uiActionDialogDescriptor.d.ts +23 -23
  185. package/lib/view-context/api/model/uiActionFeedbackType.d.ts +19 -19
  186. package/lib/view-context/api/model/uiActionInputType.d.ts +18 -18
  187. package/lib/view-context/api/model/uiActionRequest.d.ts +28 -28
  188. package/lib/view-context/api/model/valueSet.d.ts +20 -20
  189. package/lib/view-context/api/model/view.d.ts +47 -47
  190. package/lib/view-context/api/model/viewApiError.d.ts +18 -18
  191. package/lib/view-context/api/model/viewConstraint.d.ts +18 -18
  192. package/lib/view-context/api/model/viewContext.d.ts +22 -22
  193. package/lib/view-context/api/model/viewContextChange.d.ts +20 -20
  194. package/lib/view-context/api/model/viewContextData.d.ts +19 -19
  195. package/lib/view-context/api/model/viewContextUpdate.d.ts +22 -22
  196. package/lib/view-context/api/model/viewData.d.ts +27 -27
  197. package/lib/view-context/api/model/viewState.d.ts +21 -21
  198. package/lib/view-context/api/model/viewStateUpdate.d.ts +24 -24
  199. package/lib/view-context/api/model/viewType.d.ts +17 -17
  200. package/lib/view-context/api/param.d.ts +37 -37
  201. package/lib/view-context/api/variables.d.ts +8 -8
  202. package/lib/view-context/message-dialog/message-dialog.component.d.ts +17 -17
  203. package/lib/view-context/projects.d.ts +13 -13
  204. package/lib/view-context/property-definition-data.d.ts +5 -5
  205. package/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.d.ts +13 -13
  206. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.d.ts +25 -25
  207. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +18 -18
  208. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +29 -29
  209. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +25 -25
  210. package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +24 -24
  211. package/lib/view-context/smart-ui-action/ui-action.descriptor.service.d.ts +21 -21
  212. package/lib/view-context/smart-ui-action/ui-action.model.d.ts +32 -32
  213. package/lib/view-context/smart-ui-action/ui-action.service.d.ts +31 -31
  214. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.d.ts +13 -13
  215. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +17 -17
  216. package/lib/view-context/smart-view-context.interceptor.d.ts +13 -13
  217. package/lib/view-context/smart-view-context.model.d.ts +30 -30
  218. package/lib/view-context/smart-view-context.module.d.ts +20 -20
  219. package/lib/view-context/smart-view-context.service.d.ts +70 -70
  220. package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +14 -14
  221. package/lib/view-context/value-api/api/api.d.ts +3 -3
  222. package/lib/view-context/value-api/api/value.service.d.ts +35 -35
  223. package/lib/view-context/value-api/api.module.d.ts +11 -11
  224. package/lib/view-context/value-api/configuration.d.ts +104 -104
  225. package/lib/view-context/value-api/encoder.d.ts +11 -11
  226. package/lib/view-context/value-api/index.d.ts +6 -6
  227. package/lib/view-context/value-api/model/models.d.ts +8 -8
  228. package/lib/view-context/value-api/model/value.d.ts +29 -29
  229. package/lib/view-context/value-api/model/valueSetData.d.ts +41 -41
  230. package/lib/view-context/value-api/model/valueSetDefinition.d.ts +16 -16
  231. package/lib/view-context/value-api/model/valueSetDefinitionData.d.ts +55 -55
  232. package/lib/view-context/value-api/model/valueSetDefinitionKind.d.ts +23 -23
  233. package/lib/view-context/value-api/model/valueSetExpression.d.ts +20 -20
  234. package/lib/view-context/value-api/model/valueSetOperand.d.ts +25 -25
  235. package/lib/view-context/value-api/model/valueSetOperation.d.ts +18 -18
  236. package/lib/view-context/value-api/param.d.ts +37 -37
  237. package/lib/view-context/value-api/variables.d.ts +8 -8
  238. package/package.json +1 -1
  239. package/projects.d.ts +5 -5
  240. package/schematics/collection.json +11 -11
  241. package/schematics/smart-component/index.ts +26 -26
  242. package/schematics/smart-component/schema.json +20 -20
  243. package/schematics/smart-component/smart-component.schema.ts +4 -4
  244. package/schematics/smart-component/templates/__name@dasherize__.component.html.template +2 -2
  245. package/schematics/smart-component/templates/__name@dasherize__.component.ts.template +26 -26
  246. package/smartbit4all-ng-client-1.0.21.tgz +0 -0
  247. package/smartbit4all-ng-client.d.ts +5 -5
  248. package/src/lib/session/api/README.md +226 -226
  249. package/src/lib/view-context/api/README.md +226 -226
  250. package/src/lib/view-context/value-api/README.md +226 -226
  251. package/smartbit4all-ng-client-1.0.19.tgz +0 -0
@@ -1,340 +1,356 @@
1
- import { Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { ViewState, ViewType, } from './api';
4
- import { MessageDialogComponent } from './message-dialog/message-dialog.component';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "./api";
7
- import * as i2 from "../session/smart-session.service";
8
- import * as i3 from "@smartbit4all/navigation";
9
- import * as i4 from "@smartbit4all/dialog";
10
- export class SmartViewContextService {
11
- constructor(view, session, navigation, dialog) {
12
- this.view = view;
13
- this.session = session;
14
- this.navigation = navigation;
15
- this.dialog = dialog;
16
- this.tabIdName = 'viewContextUuid';
17
- this.tabIdhttpHeaderName = 'viewContextUuid';
18
- this.viewHandlers = new Array();
19
- this.openedViewUuids = new Array();
20
- this.uuidOfPageHasBeenChanged = new Subject();
21
- this.viewContextHasBeenSynced = new Subject();
22
- this.openSmartLink = new Subject();
23
- this.isOpeningSmartLink = false;
24
- this.dialogRefs = [];
25
- this.smartApiClients = new Map();
26
- this.translateServiceChanged = new Subject();
27
- }
28
- set translateService(translateService) {
29
- this._translateService = translateService;
30
- this.translateServiceChanged.next();
31
- this.translateServiceChanged.complete();
32
- }
33
- get translateService() {
34
- if (this._translateService) {
35
- return this._translateService;
36
- }
37
- return undefined;
38
- }
39
- follow(uuid, detectChange) {
40
- this.smartApiClients.set(uuid, detectChange);
41
- }
42
- unfollow(uuid) {
43
- this.smartApiClients.delete(uuid);
44
- }
45
- setActionDescriptors(actionDescriptors) {
46
- this.actionDescriptors = actionDescriptors;
47
- }
48
- getActionDescriptors() {
49
- if (!this.actionDescriptors) {
50
- console.error('No action descriptors has been set to ViewContext.');
51
- }
52
- return this.actionDescriptors;
53
- }
54
- setViewHandlers(viewHandlers) {
55
- this.viewHandlers = viewHandlers;
56
- }
57
- setViewApiErrors(viewApiErrors) {
58
- this.smartViewContextApiErrors = viewApiErrors;
59
- }
60
- setMessageDialogName(messageDialogName) {
61
- this.messageDialogname = messageDialogName;
62
- this.viewHandlers.push({
63
- name: messageDialogName,
64
- component: MessageDialogComponent,
65
- });
66
- }
67
- setUpUrlForViewService() {
68
- this.view.configuration.basePath = this.url;
69
- }
70
- setUrl(url) {
71
- this.url = url + '/view';
72
- this.setUpUrlForViewService();
73
- }
74
- async getAndSyncViewContext(uuid) {
75
- if (!uuid) {
76
- uuid = this.getUuidOfPage(this.tabIdName);
77
- }
78
- await this.getViewContext(uuid).then(() => {
79
- this.syncView();
80
- });
81
- }
82
- async getViewContext(uuid) {
83
- this.viewContext = await this.view.getViewContext(uuid).toPromise();
84
- if (!this.viewContext) {
85
- throw new Error('ViewContext does not exist with the given uuid.');
86
- }
87
- return this.viewContext;
88
- }
89
- async getViewContextDataByPageName(pageName) {
90
- if (!this.viewContext) {
91
- let viewContextUuid = sessionStorage.getItem(this.tabIdName);
92
- if (!viewContextUuid) {
93
- throw new Error('View context is not initialized!');
94
- }
95
- await this.getViewContext(viewContextUuid);
96
- }
97
- let pageUuid = this.getUuidOfPage(pageName);
98
- let viewContextByPageName = this.viewContext?.views.find((view) => view.uuid === pageUuid);
99
- if (!viewContextByPageName) {
100
- throw new Error(`The ViewData of ${pageName} is not found!`);
101
- }
102
- return viewContextByPageName;
103
- }
104
- async updateViewContext(viewContextUpdate) {
105
- this.viewContext = await this.view.updateViewContext(viewContextUpdate).toPromise();
106
- return this.viewContext;
107
- }
108
- clearSessionStorage() {
109
- sessionStorage.clear();
110
- }
111
- setTabId(tabId) {
112
- sessionStorage.setItem(this.tabIdName, tabId);
113
- this.session.addHeaderParam({ headerName: this.tabIdhttpHeaderName, value: tabId });
114
- }
115
- async startViewContext() {
116
- this.clearSessionStorage();
117
- let newViewContext = await this.view.createViewContext().toPromise();
118
- if (!newViewContext) {
119
- throw new Error('No ViewContext was created');
120
- }
121
- this.viewContext = newViewContext;
122
- this.setTabId(newViewContext.uuid);
123
- return this.viewContext;
124
- }
125
- async initialize(uuid) {
126
- if (this.viewHandlers.length === 0) {
127
- throw new Error("There aren't any viewHandlers in SmartViewContextService! Provide some to use its functions.");
128
- }
129
- if (!this.messageDialogname) {
130
- throw new Error('The messageDialogName provided by the backend has not been set.');
131
- }
132
- if (uuid) {
133
- let subscription = this.session.headersUpdated.subscribe(async () => {
134
- subscription.unsubscribe();
135
- try {
136
- await this.getViewContext(uuid);
137
- this.setTabId(uuid);
138
- }
139
- catch (err) {
140
- await this.startViewContext();
141
- }
142
- });
143
- this.setTabId(uuid);
144
- }
145
- else {
146
- await this.startViewContext();
147
- }
148
- return this.viewContext;
149
- }
150
- openView(view) {
151
- let viewHandler = this.viewHandlers.find((handler) => handler.name === view.viewName);
152
- if (!viewHandler) {
153
- throw new Error(`SmartViewHandlerModel was not found by view name: ${view.viewName}`);
154
- }
155
- if (view.type === ViewType.Dialog) {
156
- if (!viewHandler.component) {
157
- throw new Error(`Component is undefined in SmartViewHandlerModel with name: ${view.viewName}`);
158
- }
159
- let dialogRef = this.dialog.openComponentAsDialog(viewHandler.component, viewHandler.name);
160
- if (view.viewName === this.messageDialogname) {
161
- if (view.message?.options && view.message.options.length) {
162
- dialogRef.disableClose = true;
163
- }
164
- }
165
- this.dialogRefs.push({
166
- uuid: view.uuid,
167
- dialogRef,
168
- });
169
- }
170
- else if (view.type === ViewType.Normal) {
171
- if (viewHandler.route === undefined) {
172
- throw new Error(`Route is undefined in SmartViewHandlerModel with name: ${view.viewName}`);
173
- }
174
- this.navigation.navigateTo(viewHandler.route.split('/'));
175
- }
176
- else {
177
- throw new Error('The type of the view and its viewHandler is not the same!');
178
- }
179
- view.state = ViewState.Opened;
180
- this.openedViewUuids.push(view.uuid);
181
- sessionStorage.setItem(view.viewName, view.uuid);
182
- this.uuidOfPageHasBeenChanged.next(view.viewName);
183
- this.updateViewContext({
184
- updates: [
185
- {
186
- state: ViewState.Opened,
187
- uuid: view.uuid,
188
- },
189
- ],
190
- uuid: this.viewContext?.uuid,
191
- });
192
- }
193
- closeView(view) {
194
- let viewHandler = this.viewHandlers.find((handler) => handler.name === view.viewName);
195
- if (!viewHandler) {
196
- throw new Error(`SmartViewHandlerModel was not found by view name: ${view.viewName}`);
197
- }
198
- if (view.type === ViewType.Dialog) {
199
- let dialogRef = this.dialogRefs.find((dialogRef) => dialogRef.uuid === view.uuid);
200
- if (dialogRef) {
201
- dialogRef.dialogRef.close();
202
- let index = this.dialogRefs.indexOf(dialogRef);
203
- this.dialogRefs.splice(index, 1);
204
- }
205
- else {
206
- throw new Error('DialogRef is not found by uuid.');
207
- }
208
- }
209
- else if (view.type === ViewType.Normal) {
210
- // TODO: close normal page???
211
- // this.navigation.navigateTo(viewHandler.route.split("/"));
212
- }
213
- else {
214
- throw new Error('The type of the view and its viewHandler is not the same!');
215
- }
216
- view.state = ViewState.Closed;
217
- this.openedViewUuids.slice(this.openedViewUuids.indexOf(view.uuid), 1);
218
- sessionStorage.removeItem(view.viewName);
219
- this.updateViewContext({
220
- updates: [
221
- {
222
- state: ViewState.Closed,
223
- uuid: view.uuid,
224
- },
225
- ],
226
- uuid: this.viewContext?.uuid,
227
- });
228
- }
229
- async restoreViews(uuid) {
230
- if (!this.viewContext) {
231
- await this.getViewContext(uuid);
232
- }
233
- this.viewContext.views.map((view) => {
234
- this.openView(view);
235
- });
236
- }
237
- syncView() {
238
- this.viewContext?.views.map((view) => {
239
- switch (view.state) {
240
- case ViewState.ToOpen:
241
- this.openView(view);
242
- break;
243
- case ViewState.ToClose:
244
- this.closeView(view);
245
- break;
246
- }
247
- });
248
- this.viewContextHasBeenSynced.next();
249
- }
250
- getUuidOfPage(pageName) {
251
- let uuid = sessionStorage.getItem(pageName);
252
- if (!uuid) {
253
- throw new Error(`The uuid of ${pageName} is not available.`);
254
- }
255
- return uuid;
256
- }
257
- async message(messageData, messageResult) {
258
- await this.view.message(messageData.viewUuid ?? '', messageData.uuid, messageResult).toPromise();
259
- await this.getAndSyncViewContext();
260
- }
261
- getSmartViewContextApiErrorByCode(code) {
262
- if (!this.smartViewContextApiErrors) {
263
- return {
264
- code,
265
- message: 'An error has occured.',
266
- buttonLabel: 'Ok',
267
- dialogTitle: 'Hiba',
268
- };
269
- }
270
- let apiErrorsWithCode = this.smartViewContextApiErrors.viewContextApiErrors.filter((apiError) => {
271
- return apiError.code === code;
272
- });
273
- if (!apiErrorsWithCode || (apiErrorsWithCode && !apiErrorsWithCode.length)) {
274
- console.error(`SmartViewContextApiError with code ${code} could not be found.`);
275
- return {
276
- code,
277
- message: 'An error has occured.',
278
- buttonLabel: 'Ok',
279
- dialogTitle: 'Hiba',
280
- };
281
- }
282
- return apiErrorsWithCode[0];
283
- }
284
- async getViewConstraint(uuid) {
285
- let viewConstraintResponse = await this.view.getViewConstraint(uuid).toPromise();
286
- if (!viewConstraintResponse)
287
- throw new Error('Could not get ViewConstraint with the given uuid.');
288
- return viewConstraintResponse;
289
- }
290
- async showPublishedView(channel, uuid) {
291
- await this.session.initialize();
292
- // TODO init view context automatically
293
- // await this.initialize();
294
- this.isOpeningSmartLink = true;
295
- this.openSmartLink.next();
296
- await this.openSmartLink.toPromise();
297
- await this.view.showPublishedView(channel, uuid).toPromise();
298
- await this.getAndSyncViewContext();
299
- this.isOpeningSmartLink = false;
300
- }
301
- async downloadResource(uuid, item) {
302
- return await this.view.downloadItem(uuid, item).toPromise();
303
- }
304
- async performAction(uuid, uiActionRequest) {
305
- return await this.handlePerformActionResponse(await this.view.performAction(uuid, uiActionRequest).toPromise());
306
- }
307
- async performWidgetAction(uuid, widgetId, nodeId, uiActionRequest) {
308
- return await this.handlePerformActionResponse(await this.view.performWidgetAction(uuid, widgetId, nodeId, uiActionRequest).toPromise());
309
- }
310
- async performWidgetMainAction(uuid, widgetId, uiActionRequest) {
311
- return await this.handlePerformActionResponse(await this.view.performWidgetMainAction(uuid, widgetId, uiActionRequest).toPromise());
312
- }
313
- async handlePerformActionResponse(viewContextChange) {
314
- this.viewContext = viewContextChange?.viewContext;
315
- this.syncView();
316
- if (viewContextChange?.changes) {
317
- this.handleChanges(viewContextChange.changes);
318
- }
319
- }
320
- handleChanges(changes) {
321
- changes.forEach((componentModelChange) => {
322
- let detectChange = this.smartApiClients.get(componentModelChange.uuid);
323
- if (detectChange) {
324
- detectChange.next(componentModelChange.value);
325
- }
326
- });
327
- }
328
- async load(uuid) {
329
- return await this.view.getComponentModel(uuid).toPromise();
330
- }
331
- }
332
- SmartViewContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartViewContextService, deps: [{ token: i1.ViewService }, { token: i2.SmartSessionService }, { token: i3.SmartNavigationService }, { token: i4.SmartdialogService }], target: i0.ɵɵFactoryTarget.Injectable });
333
- SmartViewContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartViewContextService, providedIn: 'root' });
334
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartViewContextService, decorators: [{
335
- type: Injectable,
336
- args: [{
337
- providedIn: 'root',
338
- }]
339
- }], ctorParameters: function () { return [{ type: i1.ViewService }, { type: i2.SmartSessionService }, { type: i3.SmartNavigationService }, { type: i4.SmartdialogService }]; } });
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFhTixTQUFTLEVBQ1QsUUFBUSxHQUNSLE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7OztBQVluRixNQUFNLE9BQU8sdUJBQXVCO0lBeUNuQyxZQUNTLElBQWlCLEVBQ2pCLE9BQTRCLEVBQzVCLFVBQWtDLEVBQ2xDLE1BQTBCO1FBSDFCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDNUIsZUFBVSxHQUFWLFVBQVUsQ0FBd0I7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUE1QzNCLGNBQVMsR0FBVyxpQkFBaUIsQ0FBQztRQUN0Qyx3QkFBbUIsR0FBVyxpQkFBaUIsQ0FBQztRQUloRCxpQkFBWSxHQUFpQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pELG9CQUFlLEdBQWtCLElBQUksS0FBSyxFQUFFLENBQUM7UUFFOUMsNkJBQXdCLEdBQW9CLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUQsNkJBQXdCLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFJeEQsa0JBQWEsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3Qyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFbkMsZUFBVSxHQUF5QixFQUFFLENBQUM7UUFNdkMsb0JBQWUsR0FBbUMsSUFBSSxHQUFHLEVBQUUs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QUMsSUFBWTtRQUM3QixPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM1RCxDQUFDOztxSEFyWlcsdUJBQXVCO3lIQUF2Qix1QkFBdUIsY0FGdkIsTUFBTTs0RkFFTix1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU21hcnRkaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQHNtYXJ0Yml0NGFsbC9kaWFsb2cnO1xuaW1wb3J0IHsgU21hcnROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJ0BzbWFydGJpdDRhbGwvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTbWFydFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbi9zbWFydC1zZXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU21hcnRTdWJqZWN0IH0gZnJvbSAnLi4vc21hcnQtY2xpZW50L3NtYXJ0LnN1YmplY3QnO1xuaW1wb3J0IHtcblx0Q29tcG9uZW50TW9kZWwsXG5cdENvbXBvbmVudE1vZGVsQ2hhbmdlLFxuXHRNZXNzYWdlRGF0YSxcblx0TWVzc2FnZVJlc3VsdCxcblx0VWlBY3Rpb25EZXNjcmlwdG9yLFxuXHRVaUFjdGlvblJlcXVlc3QsXG5cdFZpZXdDb25zdHJhaW50LFxuXHRWaWV3Q29udGV4dENoYW5nZSxcblx0Vmlld0NvbnRleHREYXRhLFxuXHRWaWV3Q29udGV4dFVwZGF0ZSxcblx0Vmlld0RhdGEsXG5cdFZpZXdTZXJ2aWNlLFxuXHRWaWV3U3RhdGUsXG5cdFZpZXdUeXBlLFxufSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBNZXNzYWdlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9tZXNzYWdlLWRpYWxvZy9tZXNzYWdlLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHtcblx0U21hcnRUcmFuc2xhdGVTZXJ2aWNlLFxuXHRTbWFydFZpZXdDb250ZXh0QXBpRXJyb3IsXG5cdFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMsXG5cdFNtYXJ0Vmlld0RpYWxvZ1JlZixcblx0U21hcnRWaWV3SGFuZGxlck1vZGVsLFxufSBmcm9tICcuL3NtYXJ0LXZpZXctY29udGV4dC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcblx0cHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTbWFydFZpZXdDb250ZXh0U2VydmljZSB7XG5cdHByaXZhdGUgdGFiSWROYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcblx0cHJpdmF0ZSB0YWJJZGh0dHBIZWFkZXJOYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcblx0cHVibGljIG1lc3NhZ2VEaWFsb2duYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgdXJsPzogc3RyaW5nO1xuXHRwcml2YXRlIHZpZXdDb250ZXh0PzogVmlld0NvbnRleHREYXRhO1xuXHRwcml2YXRlIHZpZXdIYW5kbGVyczogQXJyYXk8U21hcnRWaWV3SGFuZGxlck1vZGVsPiA9IG5ldyBBcnJheSgpO1xuXHRwcml2YXRlIG9wZW5lZFZpZXdVdWlkczogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheSgpO1xuXG5cdHB1YmxpYyB1dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XG5cdHB1YmxpYyB2aWV3Q29udGV4dEhhc0JlZW5TeW5jZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG5cdHB1YmxpYyBzbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzPzogU21hcnRWaWV3Q29udGV4dEFwaUVycm9ycztcblxuXHRwdWJsaWMgb3BlblNtYXJ0TGluazogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cdHB1YmxpYyBpc09wZW5pbmdTbWFydExpbms6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRwcml2YXRlIGRpYWxvZ1JlZnM6IFNtYXJ0Vmlld0RpYWxvZ1JlZltdID0gW107XG5cblx0cHJpdmF0ZSBhY3Rpb25EZXNjcmlwdG9ycz86IE1hcDxzdHJpbmcsIFVpQWN0aW9uRGVzY3JpcHRvcj47XG5cblx0cHVibGljIGNvbW1vbkZlZWRiYWNrVGV4dD86IHN0cmluZztcblxuXHRwdWJsaWMgc21hcnRBcGlDbGllbnRzOiBNYXA8c3RyaW5nLCBTbWFydFN1YmplY3Q8YW55Pj4gPSBuZXcgTWFwKCk7XG5cblx0cHVibGljIHNldCB0cmFuc2xhdGVTZXJ2aWNlKHRyYW5zbGF0ZVNlcnZpY2U6IFNtYXJ0VHJhbnNsYXRlU2VydmljZSB8IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xuXHRcdHRoaXMudHJhbnNsYXRlU2VydmljZUNoYW5nZWQubmV4dCgpO1xuXHRcdHRoaXMudHJhbnNsYXRlU2VydmljZUNoYW5nZWQuY29tcGxldGUoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdHJhbnNsYXRlU2VydmljZSgpOiBTbWFydFRyYW5zbGF0ZVNlcnZpY2UgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U/OiBTbWFydFRyYW5zbGF0ZVNlcnZpY2U7XG5cdHB1YmxpYyB0cmFuc2xhdGVTZXJ2aWNlQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSB2aWV3OiBWaWV3U2VydmljZSxcblx0XHRwcml2YXRlIHNlc3Npb246IFNtYXJ0U2Vzc2lvblNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBuYXZpZ2F0aW9uOiBTbWFydE5hdmlnYXRpb25TZXJ2aWNlLFxuXHRcdHByaXZhdGUgZGlhbG9nOiBTbWFydGRpYWxvZ1NlcnZpY2Vcblx0KSB7fVxuXG5cdHB1YmxpYyBmb2xsb3codXVpZDogc3RyaW5nLCBkZXRlY3RDaGFuZ2U6IFNtYXJ0U3ViamVjdDxhbnk+KTogdm9pZCB7XG5cdFx0dGhpcy5zbWFydEFwaUNsaWVudHMuc2V0KHV1aWQsIGRldGVjdENoYW5nZSk7XG5cdH1cblx0cHVibGljIHVuZm9sbG93KHV1aWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc21hcnRBcGlDbGllbnRzLmRlbGV0ZSh1dWlkKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRBY3Rpb25EZXNjcmlwdG9ycyhhY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPik6IHZvaWQge1xuXHRcdHRoaXMuYWN0aW9uRGVzY3JpcHRvcnMgPSBhY3Rpb25EZXNjcmlwdG9ycztcblx0fVxuXG5cdHB1YmxpYyBnZXRBY3Rpb25EZXNjcmlwdG9ycygpOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuYWN0aW9uRGVzY3JpcHRvcnMpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ05vIGFjdGlvbiBkZXNjcmlwdG9ycyBoYXMgYmVlbiBzZXQgdG8gVmlld0NvbnRleHQuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzO1xuXHR9XG5cblx0cHVibGljIHNldFZpZXdIYW5kbGVycyh2aWV3SGFuZGxlcnM6IEFycmF5PFNtYXJ0Vmlld0hhbmRsZXJNb2RlbD4pOiB2b2lkIHtcblx0XHR0aGlzLnZpZXdIYW5kbGVycyA9IHZpZXdIYW5kbGVycztcblx0fVxuXG5cdHB1YmxpYyBzZXRWaWV3QXBpRXJyb3JzKHZpZXdBcGlFcnJvcnM6IFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMpOiB2b2lkIHtcblx0XHR0aGlzLnNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMgPSB2aWV3QXBpRXJyb3JzO1xuXHR9XG5cblx0cHVibGljIHNldE1lc3NhZ2VEaWFsb2dOYW1lKG1lc3NhZ2VEaWFsb2dOYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm1lc3NhZ2VEaWFsb2duYW1lID0gbWVzc2FnZURpYWxvZ05hbWU7XG5cdFx0dGhpcy52aWV3SGFuZGxlcnMucHVzaCh7XG5cdFx0XHRuYW1lOiBtZXNzYWdlRGlhbG9nTmFtZSxcblx0XHRcdGNvbXBvbmVudDogTWVzc2FnZURpYWxvZ0NvbXBvbmVudCxcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0VXBVcmxGb3JWaWV3U2VydmljZSgpOiB2b2lkIHtcblx0XHR0aGlzLnZpZXcuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IHRoaXMudXJsO1xuXHR9XG5cblx0cHVibGljIHNldFVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMudXJsID0gdXJsICsgJy92aWV3Jztcblx0XHR0aGlzLnNldFVwVXJsRm9yVmlld1NlcnZpY2UoKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRBbmRTeW5jVmlld0NvbnRleHQodXVpZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdXVpZCkge1xuXHRcdFx0dXVpZCA9IHRoaXMuZ2V0VXVpZE9mUGFnZSh0aGlzLnRhYklkTmFtZSk7XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodXVpZCkudGhlbigoKSA9PiB7XG5cdFx0XHR0aGlzLnN5bmNWaWV3KCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZ2V0Vmlld0NvbnRleHQodXVpZDogc3RyaW5nKTogUHJvbWlzZTxWaWV3Q29udGV4dERhdGE+IHtcblx0XHR0aGlzLnZpZXdDb250ZXh0ID0gYXdhaXQgdGhpcy52aWV3LmdldFZpZXdDb250ZXh0KHV1aWQpLnRvUHJvbWlzZSgpO1xuXHRcdGlmICghdGhpcy52aWV3Q29udGV4dCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdWaWV3Q29udGV4dCBkb2VzIG5vdCBleGlzdCB3aXRoIHRoZSBnaXZlbiB1dWlkLicpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy52aWV3Q29udGV4dDtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRWaWV3Q29udGV4dERhdGFCeVBhZ2VOYW1lKHBhZ2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdEYXRhPiB7XG5cdFx0aWYgKCF0aGlzLnZpZXdDb250ZXh0KSB7XG5cdFx0XHRsZXQgdmlld0NvbnRleHRVdWlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnRhYklkTmFtZSk7XG5cdFx0XHRpZiAoIXZpZXdDb250ZXh0VXVpZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1ZpZXcgY29udGV4dCBpcyBub3QgaW5pdGlhbGl6ZWQhJyk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHZpZXdDb250ZXh0VXVpZCEpO1xuXHRcdH1cblx0XHRsZXQgcGFnZVV1aWQgPSB0aGlzLmdldFV1aWRPZlBhZ2UocGFnZU5hbWUpO1xuXG5cdFx0bGV0IHZpZXdDb250ZXh0QnlQYWdlTmFtZSA9IHRoaXMudmlld0NvbnRleHQ/LnZpZXdzLmZpbmQoKHZpZXcpID0+IHZpZXcudXVpZCA9PT0gcGFnZVV1aWQpO1xuXHRcdGlmICghdmlld0NvbnRleHRCeVBhZ2VOYW1lKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFRoZSBWaWV3RGF0YSBvZiAke3BhZ2VOYW1lfSBpcyBub3QgZm91bmQhYCk7XG5cdFx0fVxuXHRcdHJldHVybiB2aWV3Q29udGV4dEJ5UGFnZU5hbWU7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgdXBkYXRlVmlld0NvbnRleHQodmlld0NvbnRleHRVcGRhdGU6IFZpZXdDb250ZXh0VXBkYXRlKTogUHJvbWlzZTxWaWV3Q29udGV4dERhdGEgfCB1bmRlZmluZWQ+IHtcblx0XHR0aGlzLnZpZXdDb250ZXh0ID0gYXdhaXQgdGhpcy52aWV3LnVwZGF0ZVZpZXdDb250ZXh0KHZpZXdDb250ZXh0VXBkYXRlKS50b1Byb21pc2UoKTtcblxuXHRcdHJldHVybiB0aGlzLnZpZXdDb250ZXh0O1xuXHR9XG5cblx0cHJpdmF0ZSBjbGVhclNlc3Npb25TdG9yYWdlKCk6IHZvaWQge1xuXHRcdHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldFRhYklkKHRhYklkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMudGFiSWROYW1lLCB0YWJJZCk7XG5cdFx0dGhpcy5zZXNzaW9uLmFkZEhlYWRlclBhcmFtKHsgaGVhZGVyTmFtZTogdGhpcy50YWJJZGh0dHBIZWFkZXJOYW1lLCB2YWx1ZTogdGFiSWQgfSk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgc3RhcnRWaWV3Q29udGV4dCgpOiBQcm9taXNlPFZpZXdDb250ZXh0RGF0YT4ge1xuXHRcdHRoaXMuY2xlYXJTZXNzaW9uU3RvcmFnZSgpO1xuXG5cdFx0bGV0IG5ld1ZpZXdDb250ZXh0OiBWaWV3Q29udGV4dERhdGEgfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLnZpZXcuY3JlYXRlVmlld0NvbnRleHQoKS50b1Byb21pc2UoKTtcblx0XHRpZiAoIW5ld1ZpZXdDb250ZXh0KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIFZpZXdDb250ZXh0IHdhcyBjcmVhdGVkJyk7XG5cdFx0fVxuXHRcdHRoaXMudmlld0NvbnRleHQgPSBuZXdWaWV3Q29udGV4dDtcblxuXHRcdHRoaXMuc2V0VGFiSWQobmV3Vmlld0NvbnRleHQudXVpZCEpO1xuXG5cdFx0cmV0dXJuIHRoaXMudmlld0NvbnRleHQ7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZSh1dWlkPzogc3RyaW5nKTogUHJvbWlzZTxWaWV3Q29udGV4dERhdGE+IHtcblx0XHRpZiAodGhpcy52aWV3SGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFwiVGhlcmUgYXJlbid0IGFueSB2aWV3SGFuZGxlcnMgaW4gU21hcnRWaWV3Q29udGV4dFNlcnZpY2UhIFByb3ZpZGUgc29tZSB0byB1c2UgaXRzIGZ1bmN0aW9ucy5cIlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLm1lc3NhZ2VEaWFsb2duYW1lKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXNzYWdlRGlhbG9nTmFtZSBwcm92aWRlZCBieSB0aGUgYmFja2VuZCBoYXMgbm90IGJlZW4gc2V0LicpO1xuXHRcdH1cblx0XHRpZiAodXVpZCkge1xuXHRcdFx0bGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMuc2Vzc2lvbi5oZWFkZXJzVXBkYXRlZC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpO1xuXHRcdFx0XHRcdHRoaXMuc2V0VGFiSWQodXVpZCEpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnN0YXJ0Vmlld0NvbnRleHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnNldFRhYklkKHV1aWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhd2FpdCB0aGlzLnN0YXJ0Vmlld0NvbnRleHQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy52aWV3Q29udGV4dCE7XG5cdH1cblxuXHRwdWJsaWMgb3BlblZpZXcodmlldzogVmlld0RhdGEpOiB2b2lkIHtcblx0XHRsZXQgdmlld0hhbmRsZXI6IFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB8IHVuZGVmaW5lZCA9IHRoaXMudmlld0hhbmRsZXJzLmZpbmQoXG5cdFx0XHQoaGFuZGxlcikgPT4gaGFuZGxlci5uYW1lID09PSB2aWV3LnZpZXdOYW1lXG5cdFx0KTtcblxuXHRcdGlmICghdmlld0hhbmRsZXIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgU21hcnRWaWV3SGFuZGxlck1vZGVsIHdhcyBub3QgZm91bmQgYnkgdmlldyBuYW1lOiAke3ZpZXcudmlld05hbWV9YCk7XG5cdFx0fVxuXG5cdFx0aWYgKHZpZXcudHlwZSA9PT0gVmlld1R5cGUuRGlhbG9nKSB7XG5cdFx0XHRpZiAoIXZpZXdIYW5kbGVyLmNvbXBvbmVudCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCBpcyB1bmRlZmluZWQgaW4gU21hcnRWaWV3SGFuZGxlck1vZGVsIHdpdGggbmFtZTogJHt2aWV3LnZpZXdOYW1lfWApO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW5Db21wb25lbnRBc0RpYWxvZyh2aWV3SGFuZGxlci5jb21wb25lbnQsIHZpZXdIYW5kbGVyLm5hbWUpO1xuXHRcdFx0aWYgKHZpZXcudmlld05hbWUgPT09IHRoaXMubWVzc2FnZURpYWxvZ25hbWUpIHtcblx0XHRcdFx0aWYgKHZpZXcubWVzc2FnZT8ub3B0aW9ucyAmJiB2aWV3Lm1lc3NhZ2Uub3B0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRkaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5kaWFsb2dSZWZzLnB1c2goe1xuXHRcdFx0XHR1dWlkOiB2aWV3LnV1aWQsXG5cdFx0XHRcdGRpYWxvZ1JlZixcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5Ob3JtYWwpIHtcblx0XHRcdGlmICh2aWV3SGFuZGxlci5yb3V0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgUm91dGUgaXMgdW5kZWZpbmVkIGluIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3aXRoIG5hbWU6ICR7dmlldy52aWV3TmFtZX1gKTtcblx0XHRcdH1cblx0XHRcdHRoaXMubmF2aWdhdGlvbi5uYXZpZ2F0ZVRvKHZpZXdIYW5kbGVyLnJvdXRlLnNwbGl0KCcvJykpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0eXBlIG9mIHRoZSB2aWV3IGFuZCBpdHMgdmlld0hhbmRsZXIgaXMgbm90IHRoZSBzYW1lIScpO1xuXHRcdH1cblxuXHRcdHZpZXcuc3RhdGUgPSBWaWV3U3RhdGUuT3BlbmVkO1xuXG5cdFx0dGhpcy5vcGVuZWRWaWV3VXVpZHMucHVzaCh2aWV3LnV1aWQpO1xuXG5cdFx0c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh2aWV3LnZpZXdOYW1lLCB2aWV3LnV1aWQpO1xuXHRcdHRoaXMudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkLm5leHQodmlldy52aWV3TmFtZSk7XG5cblx0XHR0aGlzLnVwZGF0ZVZpZXdDb250ZXh0KHtcblx0XHRcdHVwZGF0ZXM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHN0YXRlOiBWaWV3U3RhdGUuT3BlbmVkLFxuXHRcdFx0XHRcdHV1aWQ6IHZpZXcudXVpZCxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0XHR1dWlkOiB0aGlzLnZpZXdDb250ZXh0Py51dWlkLFxuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIGNsb3NlVmlldyh2aWV3OiBWaWV3RGF0YSk6IHZvaWQge1xuXHRcdGxldCB2aWV3SGFuZGxlcjogU21hcnRWaWV3SGFuZGxlck1vZGVsIHwgdW5kZWZpbmVkID0gdGhpcy52aWV3SGFuZGxlcnMuZmluZChcblx0XHRcdChoYW5kbGVyKSA9PiBoYW5kbGVyLm5hbWUgPT09IHZpZXcudmlld05hbWVcblx0XHQpO1xuXG5cdFx0aWYgKCF2aWV3SGFuZGxlcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2FzIG5vdCBmb3VuZCBieSB2aWV3IG5hbWU6ICR7dmlldy52aWV3TmFtZX1gKTtcblx0XHR9XG5cblx0XHRpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5EaWFsb2cpIHtcblx0XHRcdGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1JlZnMuZmluZCgoZGlhbG9nUmVmOiBTbWFydFZpZXdEaWFsb2dSZWYpID0+IGRpYWxvZ1JlZi51dWlkID09PSB2aWV3LnV1aWQpO1xuXHRcdFx0aWYgKGRpYWxvZ1JlZikge1xuXHRcdFx0XHRkaWFsb2dSZWYuZGlhbG9nUmVmLmNsb3NlKCk7XG5cdFx0XHRcdGxldCBpbmRleCA9IHRoaXMuZGlhbG9nUmVmcy5pbmRleE9mKGRpYWxvZ1JlZik7XG5cdFx0XHRcdHRoaXMuZGlhbG9nUmVmcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdEaWFsb2dSZWYgaXMgbm90IGZvdW5kIGJ5IHV1aWQuJyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLk5vcm1hbCkge1xuXHRcdFx0Ly8gVE9ETzogY2xvc2Ugbm9ybWFsIHBhZ2U/Pz9cblx0XHRcdC8vIHRoaXMubmF2aWdhdGlvbi5uYXZpZ2F0ZVRvKHZpZXdIYW5kbGVyLnJvdXRlLnNwbGl0KFwiL1wiKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIHR5cGUgb2YgdGhlIHZpZXcgYW5kIGl0cyB2aWV3SGFuZGxlciBpcyBub3QgdGhlIHNhbWUhJyk7XG5cdFx0fVxuXG5cdFx0dmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5DbG9zZWQ7XG5cblx0XHR0aGlzLm9wZW5lZFZpZXdVdWlkcy5zbGljZSh0aGlzLm9wZW5lZFZpZXdVdWlkcy5pbmRleE9mKHZpZXcudXVpZCksIDEpO1xuXG5cdFx0c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh2aWV3LnZpZXdOYW1lKTtcblxuXHRcdHRoaXMudXBkYXRlVmlld0NvbnRleHQoe1xuXHRcdFx0dXBkYXRlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0c3RhdGU6IFZpZXdTdGF0ZS5DbG9zZWQsXG5cdFx0XHRcdFx0dXVpZDogdmlldy51dWlkLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHRcdHV1aWQ6IHRoaXMudmlld0NvbnRleHQ/LnV1aWQsXG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgcmVzdG9yZVZpZXdzKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy52aWV3Q29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh1dWlkKTtcblx0XHR9XG5cdFx0dGhpcy52aWV3Q29udGV4dCEudmlld3MubWFwKCh2aWV3OiBWaWV3RGF0YSkgPT4ge1xuXHRcdFx0dGhpcy5vcGVuVmlldyh2aWV3KTtcblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBzeW5jVmlldygpOiB2b2lkIHtcblx0XHR0aGlzLnZpZXdDb250ZXh0Py52aWV3cy5tYXAoKHZpZXc6IFZpZXdEYXRhKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKHZpZXcuc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSBWaWV3U3RhdGUuVG9PcGVuOlxuXHRcdFx0XHRcdHRoaXMub3BlblZpZXcodmlldyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVmlld1N0YXRlLlRvQ2xvc2U6XG5cdFx0XHRcdFx0dGhpcy5jbG9zZVZpZXcodmlldyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy52aWV3Q29udGV4dEhhc0JlZW5TeW5jZWQubmV4dCgpO1xuXHR9XG5cblx0cHVibGljIGdldFV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IHV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHBhZ2VOYW1lKTtcblx0XHRpZiAoIXV1aWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVGhlIHV1aWQgb2YgJHtwYWdlTmFtZX0gaXMgbm90IGF2YWlsYWJsZS5gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHV1aWQ7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgbWVzc2FnZShtZXNzYWdlRGF0YTogTWVzc2FnZURhdGEsIG1lc3NhZ2VSZXN1bHQ6IE1lc3NhZ2VSZXN1bHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCB0aGlzLnZpZXcubWVzc2FnZShtZXNzYWdlRGF0YS52aWV3VXVpZCA/PyAnJywgbWVzc2FnZURhdGEudXVpZCwgbWVzc2FnZVJlc3VsdCkudG9Qcm9taXNlKCk7XG5cdFx0YXdhaXQgdGhpcy5nZXRBbmRTeW5jVmlld0NvbnRleHQoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRTbWFydFZpZXdDb250ZXh0QXBpRXJyb3JCeUNvZGUoY29kZTogc3RyaW5nKTogU21hcnRWaWV3Q29udGV4dEFwaUVycm9yIHtcblx0XHRpZiAoIXRoaXMuc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29kZSxcblx0XHRcdFx0bWVzc2FnZTogJ0FuIGVycm9yIGhhcyBvY2N1cmVkLicsXG5cdFx0XHRcdGJ1dHRvbkxhYmVsOiAnT2snLFxuXHRcdFx0XHRkaWFsb2dUaXRsZTogJ0hpYmEnLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0bGV0IGFwaUVycm9yc1dpdGhDb2RlID0gdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzLnZpZXdDb250ZXh0QXBpRXJyb3JzLmZpbHRlcihcblx0XHRcdChhcGlFcnJvcjogU21hcnRWaWV3Q29udGV4dEFwaUVycm9yKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhcGlFcnJvci5jb2RlID09PSBjb2RlO1xuXHRcdFx0fVxuXHRcdCk7XG5cdFx0aWYgKCFhcGlFcnJvcnNXaXRoQ29kZSB8fCAoYXBpRXJyb3JzV2l0aENvZGUgJiYgIWFwaUVycm9yc1dpdGhDb2RlLmxlbmd0aCkpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvciB3aXRoIGNvZGUgJHtjb2RlfSBjb3VsZCBub3QgYmUgZm91bmQuYCk7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGNvZGUsXG5cdFx0XHRcdG1lc3NhZ2U6ICdBbiBlcnJvciBoYXMgb2NjdXJlZC4nLFxuXHRcdFx0XHRidXR0b25MYWJlbDogJ09rJyxcblx0XHRcdFx0ZGlhbG9nVGl0bGU6ICdIaWJhJyxcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiBhcGlFcnJvcnNXaXRoQ29kZVswXTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRWaWV3Q29uc3RyYWludCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdDb25zdHJhaW50PiB7XG5cdFx0bGV0IHZpZXdDb25zdHJhaW50UmVzcG9uc2UgPSBhd2FpdCB0aGlzLnZpZXcuZ2V0Vmlld0NvbnN0cmFpbnQodXVpZCkudG9Qcm9taXNlKCk7XG5cdFx0aWYgKCF2aWV3Q29uc3RyYWludFJlc3BvbnNlKSB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgVmlld0NvbnN0cmFpbnQgd2l0aCB0aGUgZ2l2ZW4gdXVpZC4nKTtcblx0XHRyZXR1cm4gdmlld0NvbnN0cmFpbnRSZXNwb25zZTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBzaG93UHVibGlzaGVkVmlldyhjaGFubmVsOiBzdHJpbmcsIHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuc2Vzc2lvbi5pbml0aWFsaXplKCk7XG5cdFx0Ly8gVE9ETyBpbml0IHZpZXcgY29udGV4dCBhdXRvbWF0aWNhbGx5XG5cdFx0Ly8gYXdhaXQgdGhpcy5pbml0aWFsaXplKCk7XG5cblx0XHR0aGlzLmlzT3BlbmluZ1NtYXJ0TGluayA9IHRydWU7XG5cdFx0dGhpcy5vcGVuU21hcnRMaW5rLm5leHQoKTtcblx0XHRhd2FpdCB0aGlzLm9wZW5TbWFydExpbmsudG9Qcm9taXNlKCk7XG5cblx0XHRhd2FpdCB0aGlzLnZpZXcuc2hvd1B1Ymxpc2hlZFZpZXcoY2hhbm5lbCwgdXVpZCkudG9Qcm9taXNlKCk7XG5cdFx0YXdhaXQgdGhpcy5nZXRBbmRTeW5jVmlld0NvbnRleHQoKTtcblx0XHR0aGlzLmlzT3BlbmluZ1NtYXJ0TGluayA9IGZhbHNlO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGRvd25sb2FkUmVzb3VyY2UodXVpZDogc3RyaW5nLCBpdGVtOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuXHRcdHJldHVybiBhd2FpdCB0aGlzLnZpZXcuZG93bmxvYWRJdGVtKHV1aWQsIGl0ZW0pLnRvUHJvbWlzZSgpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIHBlcmZvcm1BY3Rpb24odXVpZDogc3RyaW5nLCB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShhd2FpdCB0aGlzLnZpZXcucGVyZm9ybUFjdGlvbih1dWlkLCB1aUFjdGlvblJlcXVlc3QpLnRvUHJvbWlzZSgpKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBwZXJmb3JtV2lkZ2V0QWN0aW9uKFxuXHRcdHV1aWQ6IHN0cmluZyxcblx0XHR3aWRnZXRJZDogc3RyaW5nLFxuXHRcdG5vZGVJZDogc3RyaW5nLFxuXHRcdHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcblx0XHRcdGF3YWl0IHRoaXMudmlldy5wZXJmb3JtV2lkZ2V0QWN0aW9uKHV1aWQsIHdpZGdldElkLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdCkudG9Qcm9taXNlKClcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIHBlcmZvcm1XaWRnZXRNYWluQWN0aW9uKFxuXHRcdHV1aWQ6IHN0cmluZyxcblx0XHR3aWRnZXRJZDogc3RyaW5nLFxuXHRcdHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcblx0XHRcdGF3YWl0IHRoaXMudmlldy5wZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbih1dWlkLCB3aWRnZXRJZCwgdWlBY3Rpb25SZXF1ZXN0KS50b1Byb21pc2UoKVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZSh2aWV3Q29udGV4dENoYW5nZTogVmlld0NvbnRleHRDaGFuZ2UgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLnZpZXdDb250ZXh0ID0gdmlld0NvbnRleHRDaGFuZ2U/LnZpZXdDb250ZXh0O1xuXHRcdHRoaXMuc3luY1ZpZXcoKTtcblxuXHRcdGlmICh2aWV3Q29udGV4dENoYW5nZT8uY2hhbmdlcykge1xuXHRcdFx0dGhpcy5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlQ2hhbmdlcyhjaGFuZ2VzOiBBcnJheTxDb21wb25lbnRNb2RlbENoYW5nZT4pOiB2b2lkIHtcblx0XHRjaGFuZ2VzLmZvckVhY2goKGNvbXBvbmVudE1vZGVsQ2hhbmdlOiBDb21wb25lbnRNb2RlbENoYW5nZSkgPT4ge1xuXHRcdFx0bGV0IGRldGVjdENoYW5nZTogU21hcnRTdWJqZWN0PGFueT4gfCB1bmRlZmluZWQgPSB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5nZXQoY29tcG9uZW50TW9kZWxDaGFuZ2UudXVpZCk7XG5cdFx0XHRpZiAoZGV0ZWN0Q2hhbmdlKSB7XG5cdFx0XHRcdGRldGVjdENoYW5nZS5uZXh0KGNvbXBvbmVudE1vZGVsQ2hhbmdlLnZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBsb2FkKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Q29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gYXdhaXQgdGhpcy52aWV3LmdldENvbXBvbmVudE1vZGVsKHV1aWQpLnRvUHJvbWlzZSgpO1xuXHR9XG59XG4iXX0=
1
+ import { Injectable } from "@angular/core";
2
+ import { Subject } from "rxjs";
3
+ import { ViewState, ViewType, } from "./api";
4
+ import { MessageDialogComponent } from "./message-dialog/message-dialog.component";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./api";
7
+ import * as i2 from "../session/smart-session.service";
8
+ import * as i3 from "@smartbit4all/navigation";
9
+ import * as i4 from "@smartbit4all/dialog";
10
+ export class SmartViewContextService {
11
+ constructor(view, session, navigation, dialog) {
12
+ this.view = view;
13
+ this.session = session;
14
+ this.navigation = navigation;
15
+ this.dialog = dialog;
16
+ this.tabIdName = "viewContextUuid";
17
+ this.tabIdhttpHeaderName = "viewContextUuid";
18
+ this.viewHandlers = new Array();
19
+ this.openedViewUuids = new Array();
20
+ this.uuidOfPageHasBeenChanged = new Subject();
21
+ this.viewContextHasBeenSynced = new Subject();
22
+ this.openSmartLink = new Subject();
23
+ this.isOpeningSmartLink = false;
24
+ this.dialogRefs = [];
25
+ this.smartApiClients = new Map();
26
+ this.translateServiceChanged = new Subject();
27
+ }
28
+ set translateService(translateService) {
29
+ this._translateService = translateService;
30
+ this.translateServiceChanged.next();
31
+ this.translateServiceChanged.complete();
32
+ }
33
+ get translateService() {
34
+ if (this._translateService) {
35
+ return this._translateService;
36
+ }
37
+ return undefined;
38
+ }
39
+ follow(uuid, detectChange) {
40
+ this.smartApiClients.set(uuid, detectChange);
41
+ }
42
+ unfollow(uuid) {
43
+ this.smartApiClients.delete(uuid);
44
+ }
45
+ setActionDescriptors(actionDescriptors) {
46
+ this.actionDescriptors = actionDescriptors;
47
+ }
48
+ getActionDescriptors() {
49
+ if (!this.actionDescriptors) {
50
+ console.error("No action descriptors has been set to ViewContext.");
51
+ }
52
+ return this.actionDescriptors;
53
+ }
54
+ setViewHandlers(viewHandlers) {
55
+ this.viewHandlers = viewHandlers;
56
+ }
57
+ setViewApiErrors(viewApiErrors) {
58
+ this.smartViewContextApiErrors = viewApiErrors;
59
+ }
60
+ setMessageDialogName(messageDialogName) {
61
+ this.messageDialogname = messageDialogName;
62
+ this.viewHandlers.push({
63
+ name: messageDialogName,
64
+ component: MessageDialogComponent,
65
+ });
66
+ }
67
+ setUpUrlForViewService() {
68
+ this.view.configuration.basePath = this.url;
69
+ }
70
+ setUrl(url) {
71
+ this.url = url + "/view";
72
+ this.setUpUrlForViewService();
73
+ }
74
+ async getAndSyncViewContext(uuid) {
75
+ if (!uuid) {
76
+ uuid = this.getUuidOfPage(this.tabIdName);
77
+ }
78
+ await this.getViewContext(uuid).then(() => {
79
+ this.syncView();
80
+ });
81
+ }
82
+ async getViewContext(uuid) {
83
+ this.viewContext = await this.view.getViewContext(uuid).toPromise();
84
+ if (!this.viewContext) {
85
+ throw new Error("ViewContext does not exist with the given uuid.");
86
+ }
87
+ return this.viewContext;
88
+ }
89
+ async getViewContextDataByPageName(pageName) {
90
+ if (!this.viewContext) {
91
+ let viewContextUuid = sessionStorage.getItem(this.tabIdName);
92
+ if (!viewContextUuid) {
93
+ throw new Error("View context is not initialized!");
94
+ }
95
+ await this.getViewContext(viewContextUuid);
96
+ }
97
+ let pageUuid = this.getUuidOfPage(pageName);
98
+ let viewContextByPageName = this.viewContext?.views.find((view) => view.uuid === pageUuid);
99
+ if (!viewContextByPageName) {
100
+ throw new Error(`The ViewData of ${pageName} is not found!`);
101
+ }
102
+ return viewContextByPageName;
103
+ }
104
+ async updateViewContext(viewContextUpdate) {
105
+ this.viewContext = await this.view
106
+ .updateViewContext(viewContextUpdate)
107
+ .toPromise();
108
+ return this.viewContext;
109
+ }
110
+ clearSessionStorage() {
111
+ sessionStorage.clear();
112
+ }
113
+ setTabId(tabId) {
114
+ sessionStorage.setItem(this.tabIdName, tabId);
115
+ this.session.addHeaderParam({
116
+ headerName: this.tabIdhttpHeaderName,
117
+ value: tabId,
118
+ });
119
+ }
120
+ async startViewContext() {
121
+ this.clearSessionStorage();
122
+ let newViewContext = await this.view
123
+ .createViewContext()
124
+ .toPromise();
125
+ if (!newViewContext) {
126
+ throw new Error("No ViewContext was created");
127
+ }
128
+ this.viewContext = newViewContext;
129
+ this.setTabId(newViewContext.uuid);
130
+ return this.viewContext;
131
+ }
132
+ async initialize(uuid) {
133
+ if (this.viewHandlers.length === 0) {
134
+ throw new Error("There aren't any viewHandlers in SmartViewContextService! Provide some to use its functions.");
135
+ }
136
+ if (!this.messageDialogname) {
137
+ throw new Error("The messageDialogName provided by the backend has not been set.");
138
+ }
139
+ if (uuid) {
140
+ let subscription = this.session.headersUpdated.subscribe(async () => {
141
+ subscription.unsubscribe();
142
+ try {
143
+ await this.getViewContext(uuid);
144
+ this.setTabId(uuid);
145
+ }
146
+ catch (err) {
147
+ await this.startViewContext();
148
+ }
149
+ });
150
+ this.setTabId(uuid);
151
+ }
152
+ else {
153
+ await this.startViewContext();
154
+ }
155
+ return this.viewContext;
156
+ }
157
+ openView(view) {
158
+ let viewHandler = this.viewHandlers.find((handler) => handler.name === view.viewName);
159
+ if (!viewHandler) {
160
+ throw new Error(`SmartViewHandlerModel was not found by view name: ${view.viewName}`);
161
+ }
162
+ if (view.type === ViewType.Dialog) {
163
+ if (!viewHandler.component) {
164
+ throw new Error(`Component is undefined in SmartViewHandlerModel with name: ${view.viewName}`);
165
+ }
166
+ let dialogRef = this.dialog.openComponentAsDialog(viewHandler.component, viewHandler.name);
167
+ dialogRef.disableClose = true;
168
+ // if (view.viewName === this.messageDialogname) {
169
+ // if (view.message?.options && view.message.options.length) {
170
+ // }
171
+ // }
172
+ this.dialogRefs.push({
173
+ uuid: view.uuid,
174
+ dialogRef,
175
+ });
176
+ }
177
+ else if (view.type === ViewType.Normal) {
178
+ if (viewHandler.route === undefined) {
179
+ throw new Error(`Route is undefined in SmartViewHandlerModel with name: ${view.viewName}`);
180
+ }
181
+ this.navigation.navigateTo(viewHandler.route.split("/"));
182
+ }
183
+ else {
184
+ throw new Error("The type of the view and its viewHandler is not the same!");
185
+ }
186
+ view.state = ViewState.Opened;
187
+ this.openedViewUuids.push(view.uuid);
188
+ sessionStorage.setItem(view.viewName, view.uuid);
189
+ this.uuidOfPageHasBeenChanged.next(view.viewName);
190
+ this.updateViewContext({
191
+ updates: [
192
+ {
193
+ state: ViewState.Opened,
194
+ uuid: view.uuid,
195
+ },
196
+ ],
197
+ uuid: this.viewContext?.uuid,
198
+ });
199
+ }
200
+ closeView(view) {
201
+ let viewHandler = this.viewHandlers.find((handler) => handler.name === view.viewName);
202
+ if (!viewHandler) {
203
+ throw new Error(`SmartViewHandlerModel was not found by view name: ${view.viewName}`);
204
+ }
205
+ if (view.type === ViewType.Dialog) {
206
+ let dialogRef = this.dialogRefs.find((dialogRef) => dialogRef.uuid === view.uuid);
207
+ if (dialogRef) {
208
+ dialogRef.dialogRef.close();
209
+ let index = this.dialogRefs.indexOf(dialogRef);
210
+ this.dialogRefs.splice(index, 1);
211
+ }
212
+ else {
213
+ throw new Error("DialogRef is not found by uuid.");
214
+ }
215
+ }
216
+ else if (view.type === ViewType.Normal) {
217
+ // TODO: close normal page???
218
+ // this.navigation.navigateTo(viewHandler.route.split("/"));
219
+ }
220
+ else {
221
+ throw new Error("The type of the view and its viewHandler is not the same!");
222
+ }
223
+ view.state = ViewState.Closed;
224
+ this.openedViewUuids.slice(this.openedViewUuids.indexOf(view.uuid), 1);
225
+ sessionStorage.removeItem(view.viewName);
226
+ this.updateViewContext({
227
+ updates: [
228
+ {
229
+ state: ViewState.Closed,
230
+ uuid: view.uuid,
231
+ },
232
+ ],
233
+ uuid: this.viewContext?.uuid,
234
+ });
235
+ }
236
+ async restoreViews(uuid) {
237
+ if (!this.viewContext) {
238
+ await this.getViewContext(uuid);
239
+ }
240
+ this.viewContext.views.map((view) => {
241
+ this.openView(view);
242
+ });
243
+ }
244
+ syncView() {
245
+ this.viewContext?.views.map((view) => {
246
+ switch (view.state) {
247
+ case ViewState.ToOpen:
248
+ this.openView(view);
249
+ break;
250
+ case ViewState.ToClose:
251
+ this.closeView(view);
252
+ break;
253
+ }
254
+ });
255
+ this.viewContextHasBeenSynced.next();
256
+ }
257
+ getUuidOfPage(pageName) {
258
+ let uuid = sessionStorage.getItem(pageName);
259
+ if (!uuid) {
260
+ throw new Error(`The uuid of ${pageName} is not available.`);
261
+ }
262
+ return uuid;
263
+ }
264
+ async message(messageData, messageResult) {
265
+ await this.view
266
+ .message(messageData.viewUuid ?? "", messageData.uuid, messageResult)
267
+ .toPromise();
268
+ await this.getAndSyncViewContext();
269
+ }
270
+ getSmartViewContextApiErrorByCode(code) {
271
+ if (!this.smartViewContextApiErrors) {
272
+ return {
273
+ code,
274
+ message: "An error has occured.",
275
+ buttonLabel: "Ok",
276
+ dialogTitle: "Hiba",
277
+ };
278
+ }
279
+ let apiErrorsWithCode = this.smartViewContextApiErrors.viewContextApiErrors.filter((apiError) => {
280
+ return apiError.code === code;
281
+ });
282
+ if (!apiErrorsWithCode ||
283
+ (apiErrorsWithCode && !apiErrorsWithCode.length)) {
284
+ console.error(`SmartViewContextApiError with code ${code} could not be found.`);
285
+ return {
286
+ code,
287
+ message: "An error has occured.",
288
+ buttonLabel: "Ok",
289
+ dialogTitle: "Hiba",
290
+ };
291
+ }
292
+ return apiErrorsWithCode[0];
293
+ }
294
+ async getViewConstraint(uuid) {
295
+ let viewConstraintResponse = await this.view
296
+ .getViewConstraint(uuid)
297
+ .toPromise();
298
+ if (!viewConstraintResponse)
299
+ throw new Error("Could not get ViewConstraint with the given uuid.");
300
+ return viewConstraintResponse;
301
+ }
302
+ async showPublishedView(channel, uuid) {
303
+ await this.session.initialize();
304
+ // TODO init view context automatically
305
+ // await this.initialize();
306
+ this.isOpeningSmartLink = true;
307
+ this.openSmartLink.next();
308
+ await this.openSmartLink.toPromise();
309
+ await this.view.showPublishedView(channel, uuid).toPromise();
310
+ await this.getAndSyncViewContext();
311
+ this.isOpeningSmartLink = false;
312
+ }
313
+ async downloadResource(uuid, item) {
314
+ return await this.view.downloadItem(uuid, item).toPromise();
315
+ }
316
+ async performAction(uuid, uiActionRequest) {
317
+ return await this.handlePerformActionResponse(await this.view.performAction(uuid, uiActionRequest).toPromise());
318
+ }
319
+ async performWidgetAction(uuid, widgetId, nodeId, uiActionRequest) {
320
+ return await this.handlePerformActionResponse(await this.view
321
+ .performWidgetAction(uuid, widgetId, nodeId, uiActionRequest)
322
+ .toPromise());
323
+ }
324
+ async performWidgetMainAction(uuid, widgetId, uiActionRequest) {
325
+ return await this.handlePerformActionResponse(await this.view
326
+ .performWidgetMainAction(uuid, widgetId, uiActionRequest)
327
+ .toPromise());
328
+ }
329
+ async handlePerformActionResponse(viewContextChange) {
330
+ this.viewContext = viewContextChange?.viewContext;
331
+ this.syncView();
332
+ if (viewContextChange?.changes) {
333
+ this.handleChanges(viewContextChange.changes);
334
+ }
335
+ }
336
+ handleChanges(changes) {
337
+ changes.forEach((componentModelChange) => {
338
+ let detectChange = this.smartApiClients.get(componentModelChange.uuid);
339
+ if (detectChange) {
340
+ detectChange.next(componentModelChange.value);
341
+ }
342
+ });
343
+ }
344
+ async load(uuid) {
345
+ return await this.view.getComponentModel(uuid).toPromise();
346
+ }
347
+ }
348
+ SmartViewContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartViewContextService, deps: [{ token: i1.ViewService }, { token: i2.SmartSessionService }, { token: i3.SmartNavigationService }, { token: i4.SmartdialogService }], target: i0.ɵɵFactoryTarget.Injectable });
349
+ SmartViewContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartViewContextService, providedIn: "root" });
350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartViewContextService, decorators: [{
351
+ type: Injectable,
352
+ args: [{
353
+ providedIn: "root",
354
+ }]
355
+ }], ctorParameters: function () { return [{ type: i1.ViewService }, { type: i2.SmartSessionService }, { type: i3.SmartNavigationService }, { type: i4.SmartdialogService }]; } });
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFhTCxTQUFTLEVBQ1QsUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7OztBQVluRixNQUFNLE9BQU8sdUJBQXVCO0lBMkNsQyxZQUNVLElBQWlCLEVBQ2pCLE9BQTRCLEVBQzVCLFVBQWtDLEVBQ2xDLE1BQTBCO1FBSDFCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDNUIsZUFBVSxHQUFWLFVBQVUsQ0FBd0I7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUE5QzVCLGNBQVMsR0FBVyxpQkFBaUIsQ0FBQztRQUN0Qyx3QkFBbUIsR0FBVyxpQkFBaUIsQ0FBQztRQUloRCxpQkFBWSxHQUFpQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pELG9CQUFlLEdBQWtCLElBQUksS0FBSyxFQUFFLENBQUM7UUFFOUMsNkJBQXdCLEdBQW9CLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUQsNkJBQXdCLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFJeEQsa0JBQWEsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3Qyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFbkMsZUFBVSxHQUF5QixFQUFFLENBQUM7UUFNdkMsb0JBQWUsR0FBbUMsSUFBSSxHQUFHLEVBQUUs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LENBQUM7SUFDN0QsQ0FBQzs7cUhBcmRVLHVCQUF1Qjt5SEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07NEZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTbWFydGRpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiQHNtYXJ0Yml0NGFsbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgU21hcnROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCJAc21hcnRiaXQ0YWxsL25hdmlnYXRpb25cIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFNtYXJ0U2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2Vzc2lvbi9zbWFydC1zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU21hcnRTdWJqZWN0IH0gZnJvbSBcIi4uL3NtYXJ0LWNsaWVudC9zbWFydC5zdWJqZWN0XCI7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50TW9kZWwsXHJcbiAgQ29tcG9uZW50TW9kZWxDaGFuZ2UsXHJcbiAgTWVzc2FnZURhdGEsXHJcbiAgTWVzc2FnZVJlc3VsdCxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3IsXHJcbiAgVWlBY3Rpb25SZXF1ZXN0LFxyXG4gIFZpZXdDb25zdHJhaW50LFxyXG4gIFZpZXdDb250ZXh0Q2hhbmdlLFxyXG4gIFZpZXdDb250ZXh0RGF0YSxcclxuICBWaWV3Q29udGV4dFVwZGF0ZSxcclxuICBWaWV3RGF0YSxcclxuICBWaWV3U2VydmljZSxcclxuICBWaWV3U3RhdGUsXHJcbiAgVmlld1R5cGUsXHJcbn0gZnJvbSBcIi4vYXBpXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VEaWFsb2dDb21wb25lbnQgfSBmcm9tIFwiLi9tZXNzYWdlLWRpYWxvZy9tZXNzYWdlLWRpYWxvZy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtcclxuICBTbWFydFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgU21hcnRWaWV3Q29udGV4dEFwaUVycm9yLFxyXG4gIFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMsXHJcbiAgU21hcnRWaWV3RGlhbG9nUmVmLFxyXG4gIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCxcclxufSBmcm9tIFwiLi9zbWFydC12aWV3LWNvbnRleHQubW9kZWxcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlIHtcclxuICBwcml2YXRlIHRhYklkTmFtZTogc3RyaW5nID0gXCJ2aWV3Q29udGV4dFV1aWRcIjtcclxuICBwcml2YXRlIHRhYklkaHR0cEhlYWRlck5hbWU6IHN0cmluZyA9IFwidmlld0NvbnRleHRVdWlkXCI7XHJcbiAgcHVibGljIG1lc3NhZ2VEaWFsb2duYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSB1cmw/OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB2aWV3Q29udGV4dD86IFZpZXdDb250ZXh0RGF0YTtcclxuICBwcml2YXRlIHZpZXdIYW5kbGVyczogQXJyYXk8U21hcnRWaWV3SGFuZGxlck1vZGVsPiA9IG5ldyBBcnJheSgpO1xyXG4gIHByaXZhdGUgb3BlbmVkVmlld1V1aWRzOiBBcnJheTxzdHJpbmc+ID0gbmV3IEFycmF5KCk7XHJcblxyXG4gIHB1YmxpYyB1dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcHVibGljIHZpZXdDb250ZXh0SGFzQmVlblN5bmNlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHB1YmxpYyBzbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzPzogU21hcnRWaWV3Q29udGV4dEFwaUVycm9ycztcclxuXHJcbiAgcHVibGljIG9wZW5TbWFydExpbms6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHB1YmxpYyBpc09wZW5pbmdTbWFydExpbms6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBkaWFsb2dSZWZzOiBTbWFydFZpZXdEaWFsb2dSZWZbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGFjdGlvbkRlc2NyaXB0b3JzPzogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPjtcclxuXHJcbiAgcHVibGljIGNvbW1vbkZlZWRiYWNrVGV4dD86IHN0cmluZztcclxuXHJcbiAgcHVibGljIHNtYXJ0QXBpQ2xpZW50czogTWFwPHN0cmluZywgU21hcnRTdWJqZWN0PGFueT4+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBwdWJsaWMgc2V0IHRyYW5zbGF0ZVNlcnZpY2UoXHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlOiBTbWFydFRyYW5zbGF0ZVNlcnZpY2UgfCB1bmRlZmluZWRcclxuICApIHtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlQ2hhbmdlZC5uZXh0KCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRyYW5zbGF0ZVNlcnZpY2UoKTogU21hcnRUcmFuc2xhdGVTZXJ2aWNlIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U/OiBTbWFydFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHZpZXc6IFZpZXdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZXNzaW9uOiBTbWFydFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuYXZpZ2F0aW9uOiBTbWFydE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IFNtYXJ0ZGlhbG9nU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgcHVibGljIGZvbGxvdyh1dWlkOiBzdHJpbmcsIGRldGVjdENoYW5nZTogU21hcnRTdWJqZWN0PGFueT4pOiB2b2lkIHtcclxuICAgIHRoaXMuc21hcnRBcGlDbGllbnRzLnNldCh1dWlkLCBkZXRlY3RDaGFuZ2UpO1xyXG4gIH1cclxuICBwdWJsaWMgdW5mb2xsb3codXVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5kZWxldGUodXVpZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QWN0aW9uRGVzY3JpcHRvcnMoXHJcbiAgICBhY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPlxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5hY3Rpb25EZXNjcmlwdG9ycyA9IGFjdGlvbkRlc2NyaXB0b3JzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFjdGlvbkRlc2NyaXB0b3JzKCk6IE1hcDxzdHJpbmcsIFVpQWN0aW9uRGVzY3JpcHRvcj4gfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCF0aGlzLmFjdGlvbkRlc2NyaXB0b3JzKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJObyBhY3Rpb24gZGVzY3JpcHRvcnMgaGFzIGJlZW4gc2V0IHRvIFZpZXdDb250ZXh0LlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpZXdIYW5kbGVycyh2aWV3SGFuZGxlcnM6IEFycmF5PFNtYXJ0Vmlld0hhbmRsZXJNb2RlbD4pOiB2b2lkIHtcclxuICAgIHRoaXMudmlld0hhbmRsZXJzID0gdmlld0hhbmRsZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpZXdBcGlFcnJvcnModmlld0FwaUVycm9yczogU21hcnRWaWV3Q29udGV4dEFwaUVycm9ycyk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzID0gdmlld0FwaUVycm9ycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNZXNzYWdlRGlhbG9nTmFtZShtZXNzYWdlRGlhbG9nTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lc3NhZ2VEaWFsb2duYW1lID0gbWVzc2FnZURpYWxvZ05hbWU7XHJcbiAgICB0aGlzLnZpZXdIYW5kbGVycy5wdXNoKHtcclxuICAgICAgbmFtZTogbWVzc2FnZURpYWxvZ05hbWUsXHJcbiAgICAgIGNvbXBvbmVudDogTWVzc2FnZURpYWxvZ0NvbXBvbmVudCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcFVybEZvclZpZXdTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3LmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSB0aGlzLnVybDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudXJsID0gdXJsICsgXCIvdmlld1wiO1xyXG4gICAgdGhpcy5zZXRVcFVybEZvclZpZXdTZXJ2aWNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QW5kU3luY1ZpZXdDb250ZXh0KHV1aWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdXVpZCkge1xyXG4gICAgICB1dWlkID0gdGhpcy5nZXRVdWlkT2ZQYWdlKHRoaXMudGFiSWROYW1lKTtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodXVpZCkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3luY1ZpZXcoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFZpZXdDb250ZXh0KHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhPiB7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gYXdhaXQgdGhpcy52aWV3LmdldFZpZXdDb250ZXh0KHV1aWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKCF0aGlzLnZpZXdDb250ZXh0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlZpZXdDb250ZXh0IGRvZXMgbm90IGV4aXN0IHdpdGggdGhlIGdpdmVuIHV1aWQuXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Vmlld0NvbnRleHREYXRhQnlQYWdlTmFtZShcclxuICAgIHBhZ2VOYW1lOiBzdHJpbmdcclxuICApOiBQcm9taXNlPFZpZXdEYXRhPiB7XHJcbiAgICBpZiAoIXRoaXMudmlld0NvbnRleHQpIHtcclxuICAgICAgbGV0IHZpZXdDb250ZXh0VXVpZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy50YWJJZE5hbWUpO1xyXG4gICAgICBpZiAoIXZpZXdDb250ZXh0VXVpZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZpZXcgY29udGV4dCBpcyBub3QgaW5pdGlhbGl6ZWQhXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodmlld0NvbnRleHRVdWlkISk7XHJcbiAgICB9XHJcbiAgICBsZXQgcGFnZVV1aWQgPSB0aGlzLmdldFV1aWRPZlBhZ2UocGFnZU5hbWUpO1xyXG5cclxuICAgIGxldCB2aWV3Q29udGV4dEJ5UGFnZU5hbWUgPSB0aGlzLnZpZXdDb250ZXh0Py52aWV3cy5maW5kKFxyXG4gICAgICAodmlldykgPT4gdmlldy51dWlkID09PSBwYWdlVXVpZFxyXG4gICAgKTtcclxuICAgIGlmICghdmlld0NvbnRleHRCeVBhZ2VOYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFZpZXdEYXRhIG9mICR7cGFnZU5hbWV9IGlzIG5vdCBmb3VuZCFgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2aWV3Q29udGV4dEJ5UGFnZU5hbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBkYXRlVmlld0NvbnRleHQoXHJcbiAgICB2aWV3Q29udGV4dFVwZGF0ZTogVmlld0NvbnRleHRVcGRhdGVcclxuICApOiBQcm9taXNlPFZpZXdDb250ZXh0RGF0YSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAudXBkYXRlVmlld0NvbnRleHQodmlld0NvbnRleHRVcGRhdGUpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTZXNzaW9uU3RvcmFnZSgpOiB2b2lkIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRhYklkKHRhYklkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy50YWJJZE5hbWUsIHRhYklkKTtcclxuICAgIHRoaXMuc2Vzc2lvbi5hZGRIZWFkZXJQYXJhbSh7XHJcbiAgICAgIGhlYWRlck5hbWU6IHRoaXMudGFiSWRodHRwSGVhZGVyTmFtZSxcclxuICAgICAgdmFsdWU6IHRhYklkLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc3RhcnRWaWV3Q29udGV4dCgpOiBQcm9taXNlPFZpZXdDb250ZXh0RGF0YT4ge1xyXG4gICAgdGhpcy5jbGVhclNlc3Npb25TdG9yYWdlKCk7XHJcblxyXG4gICAgbGV0IG5ld1ZpZXdDb250ZXh0OiBWaWV3Q29udGV4dERhdGEgfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLnZpZXdcclxuICAgICAgLmNyZWF0ZVZpZXdDb250ZXh0KClcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKCFuZXdWaWV3Q29udGV4dCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBWaWV3Q29udGV4dCB3YXMgY3JlYXRlZFwiKTtcclxuICAgIH1cclxuICAgIHRoaXMudmlld0NvbnRleHQgPSBuZXdWaWV3Q29udGV4dDtcclxuXHJcbiAgICB0aGlzLnNldFRhYklkKG5ld1ZpZXdDb250ZXh0LnV1aWQhKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKHV1aWQ/OiBzdHJpbmcpOiBQcm9taXNlPFZpZXdDb250ZXh0RGF0YT4ge1xyXG4gICAgaWYgKHRoaXMudmlld0hhbmRsZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgXCJUaGVyZSBhcmVuJ3QgYW55IHZpZXdIYW5kbGVycyBpbiBTbWFydFZpZXdDb250ZXh0U2VydmljZSEgUHJvdmlkZSBzb21lIHRvIHVzZSBpdHMgZnVuY3Rpb25zLlwiXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMubWVzc2FnZURpYWxvZ25hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIFwiVGhlIG1lc3NhZ2VEaWFsb2dOYW1lIHByb3ZpZGVkIGJ5IHRoZSBiYWNrZW5kIGhhcyBub3QgYmVlbiBzZXQuXCJcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh1dWlkKSB7XHJcbiAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB0aGlzLnNlc3Npb24uaGVhZGVyc1VwZGF0ZWQuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcclxuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh1dWlkKTtcclxuICAgICAgICAgIHRoaXMuc2V0VGFiSWQodXVpZCEpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zZXRUYWJJZCh1dWlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRWaWV3Q29udGV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0ITtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuVmlldyh2aWV3OiBWaWV3RGF0YSk6IHZvaWQge1xyXG4gICAgbGV0IHZpZXdIYW5kbGVyOiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgfCB1bmRlZmluZWQgPSB0aGlzLnZpZXdIYW5kbGVycy5maW5kKFxyXG4gICAgICAoaGFuZGxlcikgPT4gaGFuZGxlci5uYW1lID09PSB2aWV3LnZpZXdOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghdmlld0hhbmRsZXIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2FzIG5vdCBmb3VuZCBieSB2aWV3IG5hbWU6ICR7dmlldy52aWV3TmFtZX1gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZpZXcudHlwZSA9PT0gVmlld1R5cGUuRGlhbG9nKSB7XHJcbiAgICAgIGlmICghdmlld0hhbmRsZXIuY29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYENvbXBvbmVudCBpcyB1bmRlZmluZWQgaW4gU21hcnRWaWV3SGFuZGxlck1vZGVsIHdpdGggbmFtZTogJHt2aWV3LnZpZXdOYW1lfWBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuQ29tcG9uZW50QXNEaWFsb2coXHJcbiAgICAgICAgdmlld0hhbmRsZXIuY29tcG9uZW50LFxyXG4gICAgICAgIHZpZXdIYW5kbGVyLm5hbWVcclxuICAgICAgKTtcclxuICAgICAgZGlhbG9nUmVmLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgIC8vIGlmICh2aWV3LnZpZXdOYW1lID09PSB0aGlzLm1lc3NhZ2VEaWFsb2duYW1lKSB7XHJcbiAgICAgIC8vICAgaWYgKHZpZXcubWVzc2FnZT8ub3B0aW9ucyAmJiB2aWV3Lm1lc3NhZ2Uub3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5kaWFsb2dSZWZzLnB1c2goe1xyXG4gICAgICAgIHV1aWQ6IHZpZXcudXVpZCxcclxuICAgICAgICBkaWFsb2dSZWYsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLk5vcm1hbCkge1xyXG4gICAgICBpZiAodmlld0hhbmRsZXIucm91dGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBSb3V0ZSBpcyB1bmRlZmluZWQgaW4gU21hcnRWaWV3SGFuZGxlck1vZGVsIHdpdGggbmFtZTogJHt2aWV3LnZpZXdOYW1lfWBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubmF2aWdhdGlvbi5uYXZpZ2F0ZVRvKHZpZXdIYW5kbGVyLnJvdXRlLnNwbGl0KFwiL1wiKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgXCJUaGUgdHlwZSBvZiB0aGUgdmlldyBhbmQgaXRzIHZpZXdIYW5kbGVyIGlzIG5vdCB0aGUgc2FtZSFcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXcuc3RhdGUgPSBWaWV3U3RhdGUuT3BlbmVkO1xyXG5cclxuICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnB1c2godmlldy51dWlkKTtcclxuXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHZpZXcudmlld05hbWUsIHZpZXcudXVpZCk7XHJcbiAgICB0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZC5uZXh0KHZpZXcudmlld05hbWUpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVmlld0NvbnRleHQoe1xyXG4gICAgICB1cGRhdGVzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgc3RhdGU6IFZpZXdTdGF0ZS5PcGVuZWQsXHJcbiAgICAgICAgICB1dWlkOiB2aWV3LnV1aWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgICAgdXVpZDogdGhpcy52aWV3Q29udGV4dD8udXVpZCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlVmlldyh2aWV3OiBWaWV3RGF0YSk6IHZvaWQge1xyXG4gICAgbGV0IHZpZXdIYW5kbGVyOiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgfCB1bmRlZmluZWQgPSB0aGlzLnZpZXdIYW5kbGVycy5maW5kKFxyXG4gICAgICAoaGFuZGxlcikgPT4gaGFuZGxlci5uYW1lID09PSB2aWV3LnZpZXdOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghdmlld0hhbmRsZXIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2FzIG5vdCBmb3VuZCBieSB2aWV3IG5hbWU6ICR7dmlldy52aWV3TmFtZX1gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZpZXcudHlwZSA9PT0gVmlld1R5cGUuRGlhbG9nKSB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1JlZnMuZmluZChcclxuICAgICAgICAoZGlhbG9nUmVmOiBTbWFydFZpZXdEaWFsb2dSZWYpID0+IGRpYWxvZ1JlZi51dWlkID09PSB2aWV3LnV1aWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKGRpYWxvZ1JlZikge1xyXG4gICAgICAgIGRpYWxvZ1JlZi5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmRpYWxvZ1JlZnMuaW5kZXhPZihkaWFsb2dSZWYpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpYWxvZ1JlZiBpcyBub3QgZm91bmQgYnkgdXVpZC5cIik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5Ob3JtYWwpIHtcclxuICAgICAgLy8gVE9ETzogY2xvc2Ugbm9ybWFsIHBhZ2U/Pz9cclxuICAgICAgLy8gdGhpcy5uYXZpZ2F0aW9uLm5hdmlnYXRlVG8odmlld0hhbmRsZXIucm91dGUuc3BsaXQoXCIvXCIpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBcIlRoZSB0eXBlIG9mIHRoZSB2aWV3IGFuZCBpdHMgdmlld0hhbmRsZXIgaXMgbm90IHRoZSBzYW1lIVwiXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5DbG9zZWQ7XHJcblxyXG4gICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMuc2xpY2UodGhpcy5vcGVuZWRWaWV3VXVpZHMuaW5kZXhPZih2aWV3LnV1aWQpLCAxKTtcclxuXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHZpZXcudmlld05hbWUpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVmlld0NvbnRleHQoe1xyXG4gICAgICB1cGRhdGVzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgc3RhdGU6IFZpZXdTdGF0ZS5DbG9zZWQsXHJcbiAgICAgICAgICB1dWlkOiB2aWV3LnV1aWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgICAgdXVpZDogdGhpcy52aWV3Q29udGV4dD8udXVpZCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlc3RvcmVWaWV3cyh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy52aWV3Q29udGV4dCkge1xyXG4gICAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3Q29udGV4dCEudmlld3MubWFwKCh2aWV3OiBWaWV3RGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLm9wZW5WaWV3KHZpZXcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3luY1ZpZXcoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0Py52aWV3cy5tYXAoKHZpZXc6IFZpZXdEYXRhKSA9PiB7XHJcbiAgICAgIHN3aXRjaCAodmlldy5zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgVmlld1N0YXRlLlRvT3BlbjpcclxuICAgICAgICAgIHRoaXMub3BlblZpZXcodmlldyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFZpZXdTdGF0ZS5Ub0Nsb3NlOlxyXG4gICAgICAgICAgdGhpcy5jbG9zZVZpZXcodmlldyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0SGFzQmVlblN5bmNlZC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VXVpZE9mUGFnZShwYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB1dWlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShwYWdlTmFtZSk7XHJcbiAgICBpZiAoIXV1aWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdXVpZCBvZiAke3BhZ2VOYW1lfSBpcyBub3QgYXZhaWxhYmxlLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHV1aWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbWVzc2FnZShcclxuICAgIG1lc3NhZ2VEYXRhOiBNZXNzYWdlRGF0YSxcclxuICAgIG1lc3NhZ2VSZXN1bHQ6IE1lc3NhZ2VSZXN1bHRcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAubWVzc2FnZShtZXNzYWdlRGF0YS52aWV3VXVpZCA/PyBcIlwiLCBtZXNzYWdlRGF0YS51dWlkLCBtZXNzYWdlUmVzdWx0KVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICBhd2FpdCB0aGlzLmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvckJ5Q29kZShcclxuICAgIGNvZGU6IHN0cmluZ1xyXG4gICk6IFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvciB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNvZGUsXHJcbiAgICAgICAgbWVzc2FnZTogXCJBbiBlcnJvciBoYXMgb2NjdXJlZC5cIixcclxuICAgICAgICBidXR0b25MYWJlbDogXCJPa1wiLFxyXG4gICAgICAgIGRpYWxvZ1RpdGxlOiBcIkhpYmFcIixcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBhcGlFcnJvcnNXaXRoQ29kZSA9XHJcbiAgICAgIHRoaXMuc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycy52aWV3Q29udGV4dEFwaUVycm9ycy5maWx0ZXIoXHJcbiAgICAgICAgKGFwaUVycm9yOiBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3IpID0+IHtcclxuICAgICAgICAgIHJldHVybiBhcGlFcnJvci5jb2RlID09PSBjb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIGlmIChcclxuICAgICAgIWFwaUVycm9yc1dpdGhDb2RlIHx8XHJcbiAgICAgIChhcGlFcnJvcnNXaXRoQ29kZSAmJiAhYXBpRXJyb3JzV2l0aENvZGUubGVuZ3RoKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgYFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvciB3aXRoIGNvZGUgJHtjb2RlfSBjb3VsZCBub3QgYmUgZm91bmQuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb2RlLFxyXG4gICAgICAgIG1lc3NhZ2U6IFwiQW4gZXJyb3IgaGFzIG9jY3VyZWQuXCIsXHJcbiAgICAgICAgYnV0dG9uTGFiZWw6IFwiT2tcIixcclxuICAgICAgICBkaWFsb2dUaXRsZTogXCJIaWJhXCIsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXBpRXJyb3JzV2l0aENvZGVbMF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Vmlld0NvbnN0cmFpbnQodXVpZDogc3RyaW5nKTogUHJvbWlzZTxWaWV3Q29uc3RyYWludD4ge1xyXG4gICAgbGV0IHZpZXdDb25zdHJhaW50UmVzcG9uc2UgPSBhd2FpdCB0aGlzLnZpZXdcclxuICAgICAgLmdldFZpZXdDb25zdHJhaW50KHV1aWQpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIGlmICghdmlld0NvbnN0cmFpbnRSZXNwb25zZSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGdldCBWaWV3Q29uc3RyYWludCB3aXRoIHRoZSBnaXZlbiB1dWlkLlwiKTtcclxuICAgIHJldHVybiB2aWV3Q29uc3RyYWludFJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNob3dQdWJsaXNoZWRWaWV3KGNoYW5uZWw6IHN0cmluZywgdXVpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLnNlc3Npb24uaW5pdGlhbGl6ZSgpO1xyXG4gICAgLy8gVE9ETyBpbml0IHZpZXcgY29udGV4dCBhdXRvbWF0aWNhbGx5XHJcbiAgICAvLyBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICB0aGlzLmlzT3BlbmluZ1NtYXJ0TGluayA9IHRydWU7XHJcbiAgICB0aGlzLm9wZW5TbWFydExpbmsubmV4dCgpO1xyXG4gICAgYXdhaXQgdGhpcy5vcGVuU21hcnRMaW5rLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMudmlldy5zaG93UHVibGlzaGVkVmlldyhjaGFubmVsLCB1dWlkKS50b1Byb21pc2UoKTtcclxuICAgIGF3YWl0IHRoaXMuZ2V0QW5kU3luY1ZpZXdDb250ZXh0KCk7XHJcbiAgICB0aGlzLmlzT3BlbmluZ1NtYXJ0TGluayA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRvd25sb2FkUmVzb3VyY2UodXVpZDogc3RyaW5nLCBpdGVtOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudmlldy5kb3dubG9hZEl0ZW0odXVpZCwgaXRlbSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybUFjdGlvbihcclxuICAgIHV1aWQ6IHN0cmluZyxcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlldy5wZXJmb3JtQWN0aW9uKHV1aWQsIHVpQWN0aW9uUmVxdWVzdCkudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVdpZGdldEFjdGlvbihcclxuICAgIHV1aWQ6IHN0cmluZyxcclxuICAgIHdpZGdldElkOiBzdHJpbmcsXHJcbiAgICBub2RlSWQ6IHN0cmluZyxcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC5wZXJmb3JtV2lkZ2V0QWN0aW9uKHV1aWQsIHdpZGdldElkLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdClcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVdpZGdldE1haW5BY3Rpb24oXHJcbiAgICB1dWlkOiBzdHJpbmcsXHJcbiAgICB3aWRnZXRJZDogc3RyaW5nLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy52aWV3XHJcbiAgICAgICAgLnBlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHV1aWQsIHdpZGdldElkLCB1aUFjdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgIHZpZXdDb250ZXh0Q2hhbmdlOiBWaWV3Q29udGV4dENoYW5nZSB8IHVuZGVmaW5lZFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IHZpZXdDb250ZXh0Q2hhbmdlPy52aWV3Q29udGV4dDtcclxuICAgIHRoaXMuc3luY1ZpZXcoKTtcclxuXHJcbiAgICBpZiAodmlld0NvbnRleHRDaGFuZ2U/LmNoYW5nZXMpIHtcclxuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VzKGNoYW5nZXM6IEFycmF5PENvbXBvbmVudE1vZGVsQ2hhbmdlPik6IHZvaWQge1xyXG4gICAgY2hhbmdlcy5mb3JFYWNoKChjb21wb25lbnRNb2RlbENoYW5nZTogQ29tcG9uZW50TW9kZWxDaGFuZ2UpID0+IHtcclxuICAgICAgbGV0IGRldGVjdENoYW5nZTogU21hcnRTdWJqZWN0PGFueT4gfCB1bmRlZmluZWQgPVxyXG4gICAgICAgIHRoaXMuc21hcnRBcGlDbGllbnRzLmdldChjb21wb25lbnRNb2RlbENoYW5nZS51dWlkKTtcclxuICAgICAgaWYgKGRldGVjdENoYW5nZSkge1xyXG4gICAgICAgIGRldGVjdENoYW5nZS5uZXh0KGNvbXBvbmVudE1vZGVsQ2hhbmdlLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy52aWV3LmdldENvbXBvbmVudE1vZGVsKHV1aWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=