@sunbird-cb/utils 1.0.2 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/bundles/sunbird-cb-utils.umd.js +5253 -4901
  2. package/bundles/sunbird-cb-utils.umd.js.map +1 -1
  3. package/bundles/sunbird-cb-utils.umd.min.js +15 -1
  4. package/bundles/sunbird-cb-utils.umd.min.js.map +1 -1
  5. package/esm2015/lib/components/image-crop/image-crop.component.js +194 -194
  6. package/esm2015/lib/components/image-crop/image-crop.module.js +26 -26
  7. package/esm2015/lib/constants/features.enum.js +554 -554
  8. package/esm2015/lib/constants/instances.enum.js +4 -4
  9. package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +86 -86
  10. package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +14 -14
  11. package/esm2015/lib/directives/default-thumbnail/default-thumbnail.directive.js +37 -37
  12. package/esm2015/lib/directives/default-thumbnail/default-thumbnail.module.js +14 -14
  13. package/esm2015/lib/directives/image-responsive/image-responsive.directive.js +91 -91
  14. package/esm2015/lib/directives/image-responsive/image-responsive.module.js +14 -14
  15. package/esm2015/lib/directives/in-view-port/in-view-port.directive.js +67 -67
  16. package/esm2015/lib/directives/in-view-port/in-view-port.module.js +14 -14
  17. package/esm2015/lib/directives/navigation/navigation.directive.js +38 -38
  18. package/esm2015/lib/directives/navigation/navigation.module.js +14 -14
  19. package/esm2015/lib/directives/permission/permission.directive.js +10 -10
  20. package/esm2015/lib/directives/permission/permission.module.js +14 -14
  21. package/esm2015/lib/helpers/functions/getStringifiedQueryParams.js +8 -8
  22. package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +98 -98
  23. package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +18 -18
  24. package/esm2015/lib/helpers/logout/logout.component.js +55 -55
  25. package/esm2015/lib/helpers/logout/logout.module.js +17 -17
  26. package/esm2015/lib/models/contentRating.model.js +12 -12
  27. package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +12 -12
  28. package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +58 -58
  29. package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +14 -14
  30. package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +32 -32
  31. package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +14 -14
  32. package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +42 -42
  33. package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +14 -14
  34. package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +59 -59
  35. package/esm2015/lib/pipes/pipe-filter/pipe-filter.module.js +14 -14
  36. package/esm2015/lib/pipes/pipe-filter/pipe-filter.pipe.js +15 -15
  37. package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +14 -14
  38. package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +29 -29
  39. package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +14 -14
  40. package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js +11 -11
  41. package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +14 -14
  42. package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +24 -24
  43. package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +14 -14
  44. package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +16 -16
  45. package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +14 -14
  46. package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +30 -30
  47. package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.module.js +14 -14
  48. package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +15 -15
  49. package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +14 -14
  50. package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +17 -17
  51. package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +14 -14
  52. package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js +15 -15
  53. package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +14 -14
  54. package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +34 -34
  55. package/esm2015/lib/resolvers/explore-detail.resolver.js +88 -88
  56. package/esm2015/lib/resolvers/marketing-offering.resolve.js +39 -39
  57. package/esm2015/lib/resolvers/page.constant.js +3 -3
  58. package/esm2015/lib/resolvers/page.model.js +46 -46
  59. package/esm2015/lib/resolvers/page.resolver.js +89 -89
  60. package/esm2015/lib/resolvers/resolver.model.js +5 -5
  61. package/esm2015/lib/services/auth-keycloak.service.js +225 -225
  62. package/esm2015/lib/services/auth-microsoft.service.js +195 -195
  63. package/esm2015/lib/services/card-content.model.js +30 -30
  64. package/esm2015/lib/services/configurations.model.js +508 -490
  65. package/esm2015/lib/services/configurations.service.js +103 -101
  66. package/esm2015/lib/services/content-strip-multiple.model.js +74 -74
  67. package/esm2015/lib/services/event.model.js +223 -154
  68. package/esm2015/lib/services/event.service.js +106 -39
  69. package/esm2015/lib/services/logger.service.js +54 -54
  70. package/esm2015/lib/services/ms-office.model.js +7 -7
  71. package/esm2015/lib/services/subapplication-respond.service.js +224 -224
  72. package/esm2015/lib/services/telemetry.service.js +414 -278
  73. package/esm2015/lib/services/user-preference.model.js +28 -28
  74. package/esm2015/lib/services/user-preference.service.js +89 -89
  75. package/esm2015/lib/services/utility.service.js +145 -100
  76. package/esm2015/lib/services/value.service.js +30 -30
  77. package/esm2015/lib/services/widget-content.model.js +341 -341
  78. package/esm2015/lib/services/widget-content.service.js +191 -191
  79. package/esm2015/lib/services/widget-resolver.model.js +56 -56
  80. package/esm2015/lib/services/widget-search.model.js +125 -125
  81. package/esm2015/public-api.js +66 -66
  82. package/esm2015/sunbird-cb-utils.js +8 -8
  83. package/esm5/lib/components/image-crop/image-crop.component.js +199 -199
  84. package/esm5/lib/components/image-crop/image-crop.module.js +30 -30
  85. package/esm5/lib/constants/features.enum.js +554 -554
  86. package/esm5/lib/constants/instances.enum.js +4 -4
  87. package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +104 -104
  88. package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +18 -18
  89. package/esm5/lib/directives/default-thumbnail/default-thumbnail.directive.js +39 -39
  90. package/esm5/lib/directives/default-thumbnail/default-thumbnail.module.js +18 -18
  91. package/esm5/lib/directives/image-responsive/image-responsive.directive.js +94 -94
  92. package/esm5/lib/directives/image-responsive/image-responsive.module.js +18 -18
  93. package/esm5/lib/directives/in-view-port/in-view-port.directive.js +72 -72
  94. package/esm5/lib/directives/in-view-port/in-view-port.module.js +18 -18
  95. package/esm5/lib/directives/navigation/navigation.directive.js +40 -40
  96. package/esm5/lib/directives/navigation/navigation.module.js +18 -18
  97. package/esm5/lib/directives/permission/permission.directive.js +13 -13
  98. package/esm5/lib/directives/permission/permission.module.js +18 -18
  99. package/esm5/lib/helpers/functions/getStringifiedQueryParams.js +8 -8
  100. package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +102 -102
  101. package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +22 -22
  102. package/esm5/lib/helpers/logout/logout.component.js +61 -61
  103. package/esm5/lib/helpers/logout/logout.module.js +21 -21
  104. package/esm5/lib/models/contentRating.model.js +12 -12
  105. package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +16 -16
  106. package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +62 -62
  107. package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +18 -18
  108. package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +36 -36
  109. package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +18 -18
  110. package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +44 -44
  111. package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +18 -18
  112. package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +63 -63
  113. package/esm5/lib/pipes/pipe-filter/pipe-filter.module.js +18 -18
  114. package/esm5/lib/pipes/pipe-filter/pipe-filter.pipe.js +19 -19
  115. package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +18 -18
  116. package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +37 -37
  117. package/esm5/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +18 -18
  118. package/esm5/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js +15 -15
  119. package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +18 -18
  120. package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +29 -29
  121. package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +18 -18
  122. package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +20 -20
  123. package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +18 -18
  124. package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +34 -34
  125. package/esm5/lib/pipes/pipe-order-by/pipe-order-by.module.js +18 -18
  126. package/esm5/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +17 -17
  127. package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +18 -18
  128. package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +33 -33
  129. package/esm5/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +18 -18
  130. package/esm5/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js +19 -19
  131. package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +18 -18
  132. package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +37 -37
  133. package/esm5/lib/resolvers/explore-detail.resolver.js +92 -92
  134. package/esm5/lib/resolvers/marketing-offering.resolve.js +42 -42
  135. package/esm5/lib/resolvers/page.constant.js +3 -3
  136. package/esm5/lib/resolvers/page.model.js +46 -46
  137. package/esm5/lib/resolvers/page.resolver.js +97 -97
  138. package/esm5/lib/resolvers/resolver.model.js +5 -5
  139. package/esm5/lib/services/auth-keycloak.service.js +293 -293
  140. package/esm5/lib/services/auth-microsoft.service.js +250 -250
  141. package/esm5/lib/services/card-content.model.js +30 -30
  142. package/esm5/lib/services/configurations.model.js +508 -490
  143. package/esm5/lib/services/configurations.service.js +105 -103
  144. package/esm5/lib/services/content-strip-multiple.model.js +74 -74
  145. package/esm5/lib/services/event.model.js +223 -154
  146. package/esm5/lib/services/event.service.js +108 -41
  147. package/esm5/lib/services/logger.service.js +72 -72
  148. package/esm5/lib/services/ms-office.model.js +7 -7
  149. package/esm5/lib/services/subapplication-respond.service.js +229 -229
  150. package/esm5/lib/services/telemetry.service.js +446 -296
  151. package/esm5/lib/services/user-preference.model.js +28 -28
  152. package/esm5/lib/services/user-preference.service.js +108 -108
  153. package/esm5/lib/services/utility.service.js +178 -128
  154. package/esm5/lib/services/value.service.js +32 -32
  155. package/esm5/lib/services/widget-content.model.js +341 -341
  156. package/esm5/lib/services/widget-content.service.js +213 -213
  157. package/esm5/lib/services/widget-resolver.model.js +56 -56
  158. package/esm5/lib/services/widget-search.model.js +125 -125
  159. package/esm5/public-api.js +66 -66
  160. package/esm5/sunbird-cb-utils.js +8 -8
  161. package/fesm2015/sunbird-cb-utils.js +4834 -4502
  162. package/fesm2015/sunbird-cb-utils.js.map +1 -1
  163. package/fesm5/sunbird-cb-utils.js +5250 -4899
  164. package/fesm5/sunbird-cb-utils.js.map +1 -1
  165. package/lib/components/image-crop/image-crop.component.d.ts +56 -56
  166. package/lib/components/image-crop/image-crop.module.d.ts +2 -2
  167. package/lib/constants/features.enum.d.ts +553 -553
  168. package/lib/constants/instances.enum.d.ts +3 -3
  169. package/lib/constants/misc.constants.d.ts +2 -2
  170. package/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.d.ts +18 -18
  171. package/lib/directives/class-change-on-scroll/class-change-on-scroll.module.d.ts +2 -2
  172. package/lib/directives/default-thumbnail/default-thumbnail.directive.d.ts +9 -9
  173. package/lib/directives/default-thumbnail/default-thumbnail.module.d.ts +2 -2
  174. package/lib/directives/image-responsive/image-responsive.directive.d.ts +17 -17
  175. package/lib/directives/image-responsive/image-responsive.module.d.ts +2 -2
  176. package/lib/directives/in-view-port/in-view-port.directive.d.ts +11 -11
  177. package/lib/directives/in-view-port/in-view-port.module.d.ts +2 -2
  178. package/lib/directives/navigation/navigation.directive.d.ts +9 -9
  179. package/lib/directives/navigation/navigation.module.d.ts +2 -2
  180. package/lib/directives/permission/permission.directive.d.ts +3 -3
  181. package/lib/directives/permission/permission.module.d.ts +2 -2
  182. package/lib/helpers/functions/getStringifiedQueryParams.d.ts +3 -3
  183. package/lib/helpers/horizontal-scroller/horizontal-scroller.component.d.ts +18 -18
  184. package/lib/helpers/horizontal-scroller/horizontal-scroller.module.d.ts +2 -2
  185. package/lib/helpers/logout/logout.component.d.ts +18 -18
  186. package/lib/helpers/logout/logout.module.d.ts +2 -2
  187. package/lib/models/contentRating.model.d.ts +9 -9
  188. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.d.ts +2 -2
  189. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.d.ts +10 -10
  190. package/lib/pipes/pipe-count-transform/pipe-count-transform.module.d.ts +2 -2
  191. package/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.d.ts +4 -4
  192. package/lib/pipes/pipe-date-concat/pipe-date-concat.module.d.ts +2 -2
  193. package/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.d.ts +13 -13
  194. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.d.ts +2 -2
  195. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts +5 -5
  196. package/lib/pipes/pipe-filter/pipe-filter.module.d.ts +2 -2
  197. package/lib/pipes/pipe-filter/pipe-filter.pipe.d.ts +4 -4
  198. package/lib/pipes/pipe-filter-search/pipe-filter-search.module.d.ts +2 -2
  199. package/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.d.ts +4 -4
  200. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.d.ts +2 -2
  201. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.d.ts +4 -4
  202. package/lib/pipes/pipe-limit-to/pipe-limit-to.module.d.ts +2 -2
  203. package/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.d.ts +4 -4
  204. package/lib/pipes/pipe-list-filter/pipe-list-filter.module.d.ts +2 -2
  205. package/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.d.ts +4 -4
  206. package/lib/pipes/pipe-name-transform/pipe-name-transform.module.d.ts +2 -2
  207. package/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.d.ts +10 -10
  208. package/lib/pipes/pipe-order-by/pipe-order-by.module.d.ts +2 -2
  209. package/lib/pipes/pipe-order-by/pipe-order-by.pipe.d.ts +9 -9
  210. package/lib/pipes/pipe-partial-content/pipe-partial-content.module.d.ts +2 -2
  211. package/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.d.ts +4 -4
  212. package/lib/pipes/pipe-relative-time/pipe-relative-time.module.d.ts +2 -2
  213. package/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.d.ts +4 -4
  214. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.d.ts +2 -2
  215. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.d.ts +7 -7
  216. package/lib/resolvers/explore-detail.resolver.d.ts +16 -16
  217. package/lib/resolvers/marketing-offering.resolve.d.ts +10 -10
  218. package/lib/resolvers/page.constant.d.ts +1 -1
  219. package/lib/resolvers/page.model.d.ts +40 -40
  220. package/lib/resolvers/page.resolver.d.ts +17 -17
  221. package/lib/resolvers/resolver.model.d.ts +4 -4
  222. package/lib/services/auth-keycloak.service.d.ts +27 -27
  223. package/lib/services/auth-microsoft.service.d.ts +30 -30
  224. package/lib/services/card-content.model.d.ts +29 -29
  225. package/lib/services/configurations.model.d.ts +487 -473
  226. package/lib/services/configurations.service.d.ts +49 -48
  227. package/lib/services/content-strip-multiple.model.d.ts +79 -79
  228. package/lib/services/event.model.d.ts +187 -129
  229. package/lib/services/event.service.d.ts +14 -8
  230. package/lib/services/logger.service.d.ts +15 -15
  231. package/lib/services/ms-office.model.d.ts +6 -6
  232. package/lib/services/subapplication-respond.service.d.ts +25 -25
  233. package/lib/services/telemetry.service.d.ts +40 -33
  234. package/lib/services/user-preference.model.d.ts +26 -26
  235. package/lib/services/user-preference.service.d.ts +11 -11
  236. package/lib/services/utility.service.d.ts +31 -23
  237. package/lib/services/value.service.d.ts +8 -8
  238. package/lib/services/widget-content.model.d.ts +314 -314
  239. package/lib/services/widget-content.service.d.ts +49 -49
  240. package/lib/services/widget-resolver.model.d.ts +48 -48
  241. package/lib/services/widget-search.model.d.ts +114 -114
  242. package/package.json +1 -1
  243. package/public-api.d.ts +66 -66
  244. package/sunbird-cb-utils.d.ts +8 -8
  245. package/sunbird-cb-utils.metadata.json +1 -1
@@ -1,230 +1,230 @@
1
- import * as tslib_1 from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { ActivatedRoute, Router } from '@angular/router';
4
- import { WidgetContentService } from './widget-content.service';
5
- import { AuthKeycloakService } from './auth-keycloak.service';
6
- import { ConfigurationsService } from './configurations.service';
7
- import { WsEvents } from './event.model';
8
- import { EventService } from './event.service';
9
- import { TelemetryService } from './telemetry.service';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "./configurations.service";
12
- import * as i2 from "./widget-content.service";
13
- import * as i3 from "./auth-keycloak.service";
14
- import * as i4 from "@angular/router";
15
- import * as i5 from "./event.service";
16
- import * as i6 from "./telemetry.service";
17
- var SubapplicationRespondService = (function () {
18
- function SubapplicationRespondService(configSvc, contentSvc, keyCloakSvc, activatedRoute, router, eventSvc, teleSvc) {
19
- var _this = this;
20
- this.configSvc = configSvc;
21
- this.contentSvc = contentSvc;
22
- this.keyCloakSvc = keyCloakSvc;
23
- this.activatedRoute = activatedRoute;
24
- this.router = router;
25
- this.eventSvc = eventSvc;
26
- this.teleSvc = teleSvc;
27
- this.subAppname = '';
28
- this.continueLearningData = null;
29
- this.loaded = false;
30
- this.changeContextrespond();
31
- this.configSvc.prefChangeNotifier.subscribe((function () {
32
- _this.changeContextrespond();
33
- }));
34
- }
35
- SubapplicationRespondService.prototype.loadedRespond = function (contentWindow, applicationName, id) {
36
- var _this = this;
37
- if (id && this.activatedRoute.snapshot.queryParams.viewMode && this.activatedRoute.snapshot.queryParams.viewMode === 'RESUME') {
38
- this.continueLearningData = null;
39
- this.contentSvc.fetchContentHistory(id).subscribe((function (data) {
40
- _this.continueLearningData = data.continueData;
41
- if (_this.configSvc && _this.configSvc.userProfile) {
42
- var firstName = _this.configSvc.userProfile.userName ?
43
- _this.configSvc.userProfile.userName.split(' ', 2)[0] : '';
44
- var lastName = _this.configSvc.userProfile.userName ?
45
- _this.configSvc.userProfile.userName.split(' ', 2)[1] : '';
46
- var viewMode = _this.activatedRoute.snapshot.queryParams.viewMode ?
47
- _this.activatedRoute.snapshot.queryParams.viewMode : '';
48
- var token = _this.keyCloakSvc.token;
49
- var response = {
50
- subApplicationName: applicationName,
51
- requestId: 'LOADED',
52
- parentContext: {
53
- domainName: window.location.host,
54
- url: _this.router.url,
55
- rootOrg: _this.configSvc.rootOrg,
56
- theme: _this.configSvc.activeThemeObject ? tslib_1.__assign({ name: _this.configSvc.activeThemeObject.themeName }, _this.configSvc.activeThemeObject.color) : '',
57
- fontSize: _this.configSvc.activeFontObject ? _this.configSvc.activeFontObject.baseFontSize : '14px',
58
- locale: (_this.configSvc.userPreference && _this.configSvc.userPreference.selectedLocale) || 'en',
59
- darkMode: _this.configSvc.isDarkMode,
60
- subApplicationStartMode: viewMode.toUpperCase(),
61
- user: {
62
- firstName: firstName,
63
- lastName: lastName,
64
- token: token,
65
- userId: _this.configSvc.userProfile.userId ? _this.configSvc.userProfile.userId : '',
66
- roles: _this.configSvc.userRoles ? Array.from(_this.configSvc.userRoles) : [],
67
- },
68
- heartbeatFrequency: '200',
69
- },
70
- data: _this.continueLearningData.data ? {
71
- continueLearning: _this.continueLearningData.data,
72
- } : null,
73
- };
74
- contentWindow.postMessage(response, '*');
75
- _this.contentWindowinfo = contentWindow;
76
- _this.loaded = true;
77
- _this.subAppname = applicationName;
78
- }
79
- }));
80
- }
81
- else {
82
- if (this.configSvc && this.configSvc.userProfile) {
83
- var firstName = this.configSvc.userProfile.userName ?
84
- this.configSvc.userProfile.userName.split(' ', 2)[0] : '';
85
- var lastName = this.configSvc.userProfile.userName ?
86
- this.configSvc.userProfile.userName.split(' ', 2)[1] : '';
87
- var viewMode = this.activatedRoute.snapshot.queryParams.viewMode ?
88
- this.activatedRoute.snapshot.queryParams.viewMode : '';
89
- var token = this.keyCloakSvc.token;
90
- var response = {
91
- subApplicationName: applicationName,
92
- requestId: 'LOADED',
93
- parentContext: {
94
- domainName: window.location.host,
95
- url: this.router.url,
96
- rootOrg: this.configSvc.rootOrg,
97
- theme: this.configSvc.activeThemeObject ? tslib_1.__assign({ name: this.configSvc.activeThemeObject.themeName }, this.configSvc.activeThemeObject.color) : '',
98
- fontSize: this.configSvc.activeFontObject ? this.configSvc.activeFontObject.baseFontSize : '14px',
99
- locale: (this.configSvc.userPreference && this.configSvc.userPreference.selectedLocale) || 'en',
100
- darkMode: this.configSvc.isDarkMode,
101
- subApplicationStartMode: viewMode.toUpperCase(),
102
- user: {
103
- firstName: firstName,
104
- lastName: lastName,
105
- token: token,
106
- userId: this.configSvc.userProfile.userId ? this.configSvc.userProfile.userId : '',
107
- roles: this.configSvc.userRoles ? Array.from(this.configSvc.userRoles) : [],
108
- },
109
- heartbeatFrequency: '200',
110
- },
111
- data: null,
112
- };
113
- contentWindow.postMessage(response, '*');
114
- this.contentWindowinfo = contentWindow;
115
- this.loaded = true;
116
- this.subAppname = applicationName;
117
- }
118
- }
119
- };
120
- SubapplicationRespondService.prototype.continueLearningRespond = function (id, continueLearning) {
121
- this.contentSvc.saveContinueLearning({
122
- contextPathId: id,
123
- resourceId: id,
124
- data: JSON.stringify({ timestamp: Date.now(), data: continueLearning }),
125
- dateAccessed: Date.now(),
126
- })
127
- .toPromise()
128
- .catch();
129
- };
130
- SubapplicationRespondService.prototype.telemetryEvents = function (tData) {
131
- if (tData) {
132
- switch (tData.eventId) {
133
- case 'INTERACT':
134
- this.eventSvc.dispatchEvent({
135
- eventType: WsEvents.WsEventType.Telemetry,
136
- eventLogLevel: WsEvents.WsEventLogLevel.Warn,
137
- data: tslib_1.__assign({}, tData.data, { eventSubType: WsEvents.EnumTelemetrySubType.Interact }),
138
- from: tData.subApplicationName,
139
- to: 'Telemetry',
140
- });
141
- break;
142
- case 'HEARTBEAT':
143
- this.eventSvc.dispatchEvent({
144
- eventType: WsEvents.WsEventType.Telemetry,
145
- eventLogLevel: WsEvents.WsEventLogLevel.Trace,
146
- data: tslib_1.__assign({}, tData.data, { eventSubType: WsEvents.EnumTelemetrySubType.HeartBeat }),
147
- from: tData.subApplicationName,
148
- to: 'Telemetry',
149
- });
150
- break;
151
- case 'IMPRESSION':
152
- this.teleSvc.externalImpression(tData.data);
153
- break;
154
- default:
155
- break;
156
- }
157
- }
158
- };
159
- SubapplicationRespondService.prototype.unsubscribeResponse = function () {
160
- this.subAppname = '';
161
- this.continueLearningData = null;
162
- this.contentWindowinfo = null;
163
- this.loaded = false;
164
- };
165
- SubapplicationRespondService.prototype.changeContextrespond = function () {
166
- if (this.loaded && this.contentWindowinfo && this.configSvc && this.configSvc.userProfile && this.subAppname) {
167
- var firstName = this.configSvc.userProfile.userName ?
168
- this.configSvc.userProfile.userName.split(' ', 2)[0] : '';
169
- var lastName = this.configSvc.userProfile.userName ?
170
- this.configSvc.userProfile.userName.split(' ', 2)[1] : '';
171
- var viewMode = this.activatedRoute.snapshot.queryParams.viewMode ?
172
- this.activatedRoute.snapshot.queryParams.viewMode : '';
173
- var token = this.keyCloakSvc.token;
174
- var response = {
175
- subApplicationName: this.subAppname,
176
- requestId: 'CONTEXT_CHANGE',
177
- parentContext: {
178
- domainName: window.location.host,
179
- url: this.router.url,
180
- rootOrg: this.configSvc.rootOrg,
181
- theme: this.configSvc.activeThemeObject ? tslib_1.__assign({ name: this.configSvc.activeThemeObject.themeName }, this.configSvc.activeThemeObject.color) : '',
182
- fontSize: this.configSvc.activeFontObject ? this.configSvc.activeFontObject.baseFontSize : '14px',
183
- locale: (this.configSvc.userPreference && this.configSvc.userPreference.selectedLocale) || 'en',
184
- darkMode: this.configSvc.isDarkMode,
185
- subApplicationStartMode: viewMode.toUpperCase(),
186
- user: {
187
- firstName: firstName,
188
- lastName: lastName,
189
- token: token,
190
- userId: this.configSvc.userProfile.userId ? this.configSvc.userProfile.userId : '',
191
- roles: this.configSvc.userRoles ? Array.from(this.configSvc.userRoles) : [],
192
- },
193
- heartbeatFrequency: '200',
194
- },
195
- };
196
- this.contentWindowinfo.postMessage(response, '*');
197
- }
198
- };
199
- SubapplicationRespondService.decorators = [
200
- { type: Injectable, args: [{
201
- providedIn: 'root',
202
- },] }
203
- ];
204
- SubapplicationRespondService.ctorParameters = function () { return [
205
- { type: ConfigurationsService },
206
- { type: WidgetContentService },
207
- { type: AuthKeycloakService },
208
- { type: ActivatedRoute },
209
- { type: Router },
210
- { type: EventService },
211
- { type: TelemetryService }
212
- ]; };
213
- /** @nocollapse */ SubapplicationRespondService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function SubapplicationRespondService_Factory() { return new SubapplicationRespondService(i0.ɵɵinject(i1.ConfigurationsService), i0.ɵɵinject(i2.WidgetContentService), i0.ɵɵinject(i3.AuthKeycloakService), i0.ɵɵinject(i4.ActivatedRoute), i0.ɵɵinject(i4.Router), i0.ɵɵinject(i5.EventService), i0.ɵɵinject(i6.TelemetryService)); }, token: SubapplicationRespondService, providedIn: "root" });
214
- return SubapplicationRespondService;
215
- }());
216
- export { SubapplicationRespondService };
217
- if (false) {
218
- SubapplicationRespondService.prototype.subAppname;
219
- SubapplicationRespondService.prototype.continueLearningData;
220
- SubapplicationRespondService.prototype.contentWindowinfo;
221
- SubapplicationRespondService.prototype.loaded;
222
- SubapplicationRespondService.prototype.configSvc;
223
- SubapplicationRespondService.prototype.contentSvc;
224
- SubapplicationRespondService.prototype.keyCloakSvc;
225
- SubapplicationRespondService.prototype.activatedRoute;
226
- SubapplicationRespondService.prototype.router;
227
- SubapplicationRespondService.prototype.eventSvc;
228
- SubapplicationRespondService.prototype.teleSvc;
229
- }
1
+ import * as tslib_1 from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { ActivatedRoute, Router } from '@angular/router';
4
+ import { WidgetContentService } from './widget-content.service';
5
+ import { AuthKeycloakService } from './auth-keycloak.service';
6
+ import { ConfigurationsService } from './configurations.service';
7
+ import { WsEvents } from './event.model';
8
+ import { EventService } from './event.service';
9
+ import { TelemetryService } from './telemetry.service';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "./configurations.service";
12
+ import * as i2 from "./widget-content.service";
13
+ import * as i3 from "./auth-keycloak.service";
14
+ import * as i4 from "@angular/router";
15
+ import * as i5 from "./event.service";
16
+ import * as i6 from "./telemetry.service";
17
+ var SubapplicationRespondService = (function () {
18
+ function SubapplicationRespondService(configSvc, contentSvc, keyCloakSvc, activatedRoute, router, eventSvc, teleSvc) {
19
+ var _this = this;
20
+ this.configSvc = configSvc;
21
+ this.contentSvc = contentSvc;
22
+ this.keyCloakSvc = keyCloakSvc;
23
+ this.activatedRoute = activatedRoute;
24
+ this.router = router;
25
+ this.eventSvc = eventSvc;
26
+ this.teleSvc = teleSvc;
27
+ this.subAppname = '';
28
+ this.continueLearningData = null;
29
+ this.loaded = false;
30
+ this.changeContextrespond();
31
+ this.configSvc.prefChangeNotifier.subscribe((function () {
32
+ _this.changeContextrespond();
33
+ }));
34
+ }
35
+ SubapplicationRespondService.prototype.loadedRespond = function (contentWindow, applicationName, id) {
36
+ var _this = this;
37
+ if (id && this.activatedRoute.snapshot.queryParams.viewMode && this.activatedRoute.snapshot.queryParams.viewMode === 'RESUME') {
38
+ this.continueLearningData = null;
39
+ this.contentSvc.fetchContentHistory(id).subscribe((function (data) {
40
+ _this.continueLearningData = data.continueData;
41
+ if (_this.configSvc && _this.configSvc.userProfile) {
42
+ var firstName = _this.configSvc.userProfile.userName ?
43
+ _this.configSvc.userProfile.userName.split(' ', 2)[0] : '';
44
+ var lastName = _this.configSvc.userProfile.userName ?
45
+ _this.configSvc.userProfile.userName.split(' ', 2)[1] : '';
46
+ var viewMode = _this.activatedRoute.snapshot.queryParams.viewMode ?
47
+ _this.activatedRoute.snapshot.queryParams.viewMode : '';
48
+ var token = _this.keyCloakSvc.token;
49
+ var response = {
50
+ subApplicationName: applicationName,
51
+ requestId: 'LOADED',
52
+ parentContext: {
53
+ domainName: window.location.host,
54
+ url: _this.router.url,
55
+ rootOrg: _this.configSvc.rootOrg,
56
+ theme: _this.configSvc.activeThemeObject ? tslib_1.__assign({ name: _this.configSvc.activeThemeObject.themeName }, _this.configSvc.activeThemeObject.color) : '',
57
+ fontSize: _this.configSvc.activeFontObject ? _this.configSvc.activeFontObject.baseFontSize : '14px',
58
+ locale: (_this.configSvc.userPreference && _this.configSvc.userPreference.selectedLocale) || 'en',
59
+ darkMode: _this.configSvc.isDarkMode,
60
+ subApplicationStartMode: viewMode.toUpperCase(),
61
+ user: {
62
+ firstName: firstName,
63
+ lastName: lastName,
64
+ token: token,
65
+ userId: _this.configSvc.userProfile.userId ? _this.configSvc.userProfile.userId : '',
66
+ roles: _this.configSvc.userRoles ? Array.from(_this.configSvc.userRoles) : [],
67
+ },
68
+ heartbeatFrequency: '200',
69
+ },
70
+ data: _this.continueLearningData.data ? {
71
+ continueLearning: _this.continueLearningData.data,
72
+ } : null,
73
+ };
74
+ contentWindow.postMessage(response, '*');
75
+ _this.contentWindowinfo = contentWindow;
76
+ _this.loaded = true;
77
+ _this.subAppname = applicationName;
78
+ }
79
+ }));
80
+ }
81
+ else {
82
+ if (this.configSvc && this.configSvc.userProfile) {
83
+ var firstName = this.configSvc.userProfile.userName ?
84
+ this.configSvc.userProfile.userName.split(' ', 2)[0] : '';
85
+ var lastName = this.configSvc.userProfile.userName ?
86
+ this.configSvc.userProfile.userName.split(' ', 2)[1] : '';
87
+ var viewMode = this.activatedRoute.snapshot.queryParams.viewMode ?
88
+ this.activatedRoute.snapshot.queryParams.viewMode : '';
89
+ var token = this.keyCloakSvc.token;
90
+ var response = {
91
+ subApplicationName: applicationName,
92
+ requestId: 'LOADED',
93
+ parentContext: {
94
+ domainName: window.location.host,
95
+ url: this.router.url,
96
+ rootOrg: this.configSvc.rootOrg,
97
+ theme: this.configSvc.activeThemeObject ? tslib_1.__assign({ name: this.configSvc.activeThemeObject.themeName }, this.configSvc.activeThemeObject.color) : '',
98
+ fontSize: this.configSvc.activeFontObject ? this.configSvc.activeFontObject.baseFontSize : '14px',
99
+ locale: (this.configSvc.userPreference && this.configSvc.userPreference.selectedLocale) || 'en',
100
+ darkMode: this.configSvc.isDarkMode,
101
+ subApplicationStartMode: viewMode.toUpperCase(),
102
+ user: {
103
+ firstName: firstName,
104
+ lastName: lastName,
105
+ token: token,
106
+ userId: this.configSvc.userProfile.userId ? this.configSvc.userProfile.userId : '',
107
+ roles: this.configSvc.userRoles ? Array.from(this.configSvc.userRoles) : [],
108
+ },
109
+ heartbeatFrequency: '200',
110
+ },
111
+ data: null,
112
+ };
113
+ contentWindow.postMessage(response, '*');
114
+ this.contentWindowinfo = contentWindow;
115
+ this.loaded = true;
116
+ this.subAppname = applicationName;
117
+ }
118
+ }
119
+ };
120
+ SubapplicationRespondService.prototype.continueLearningRespond = function (id, continueLearning) {
121
+ this.contentSvc.saveContinueLearning({
122
+ contextPathId: id,
123
+ resourceId: id,
124
+ data: JSON.stringify({ timestamp: Date.now(), data: continueLearning }),
125
+ dateAccessed: Date.now(),
126
+ })
127
+ .toPromise()
128
+ .catch();
129
+ };
130
+ SubapplicationRespondService.prototype.telemetryEvents = function (tData) {
131
+ if (tData) {
132
+ switch (tData.eventId) {
133
+ case 'INTERACT':
134
+ this.eventSvc.dispatchEvent({
135
+ eventType: WsEvents.WsEventType.Telemetry,
136
+ eventLogLevel: WsEvents.WsEventLogLevel.Warn,
137
+ data: tslib_1.__assign({}, tData.data, { eventSubType: WsEvents.EnumTelemetrySubType.Interact }),
138
+ from: tData.subApplicationName,
139
+ to: 'Telemetry',
140
+ });
141
+ break;
142
+ case 'HEARTBEAT':
143
+ this.eventSvc.dispatchEvent({
144
+ eventType: WsEvents.WsEventType.Telemetry,
145
+ eventLogLevel: WsEvents.WsEventLogLevel.Trace,
146
+ data: tslib_1.__assign({}, tData.data, { eventSubType: WsEvents.EnumTelemetrySubType.HeartBeat }),
147
+ from: tData.subApplicationName,
148
+ to: 'Telemetry',
149
+ });
150
+ break;
151
+ case 'IMPRESSION':
152
+ this.teleSvc.externalImpression(tData.data);
153
+ break;
154
+ default:
155
+ break;
156
+ }
157
+ }
158
+ };
159
+ SubapplicationRespondService.prototype.unsubscribeResponse = function () {
160
+ this.subAppname = '';
161
+ this.continueLearningData = null;
162
+ this.contentWindowinfo = null;
163
+ this.loaded = false;
164
+ };
165
+ SubapplicationRespondService.prototype.changeContextrespond = function () {
166
+ if (this.loaded && this.contentWindowinfo && this.configSvc && this.configSvc.userProfile && this.subAppname) {
167
+ var firstName = this.configSvc.userProfile.userName ?
168
+ this.configSvc.userProfile.userName.split(' ', 2)[0] : '';
169
+ var lastName = this.configSvc.userProfile.userName ?
170
+ this.configSvc.userProfile.userName.split(' ', 2)[1] : '';
171
+ var viewMode = this.activatedRoute.snapshot.queryParams.viewMode ?
172
+ this.activatedRoute.snapshot.queryParams.viewMode : '';
173
+ var token = this.keyCloakSvc.token;
174
+ var response = {
175
+ subApplicationName: this.subAppname,
176
+ requestId: 'CONTEXT_CHANGE',
177
+ parentContext: {
178
+ domainName: window.location.host,
179
+ url: this.router.url,
180
+ rootOrg: this.configSvc.rootOrg,
181
+ theme: this.configSvc.activeThemeObject ? tslib_1.__assign({ name: this.configSvc.activeThemeObject.themeName }, this.configSvc.activeThemeObject.color) : '',
182
+ fontSize: this.configSvc.activeFontObject ? this.configSvc.activeFontObject.baseFontSize : '14px',
183
+ locale: (this.configSvc.userPreference && this.configSvc.userPreference.selectedLocale) || 'en',
184
+ darkMode: this.configSvc.isDarkMode,
185
+ subApplicationStartMode: viewMode.toUpperCase(),
186
+ user: {
187
+ firstName: firstName,
188
+ lastName: lastName,
189
+ token: token,
190
+ userId: this.configSvc.userProfile.userId ? this.configSvc.userProfile.userId : '',
191
+ roles: this.configSvc.userRoles ? Array.from(this.configSvc.userRoles) : [],
192
+ },
193
+ heartbeatFrequency: '200',
194
+ },
195
+ };
196
+ this.contentWindowinfo.postMessage(response, '*');
197
+ }
198
+ };
199
+ SubapplicationRespondService.decorators = [
200
+ { type: Injectable, args: [{
201
+ providedIn: 'root',
202
+ },] }
203
+ ];
204
+ SubapplicationRespondService.ctorParameters = function () { return [
205
+ { type: ConfigurationsService },
206
+ { type: WidgetContentService },
207
+ { type: AuthKeycloakService },
208
+ { type: ActivatedRoute },
209
+ { type: Router },
210
+ { type: EventService },
211
+ { type: TelemetryService }
212
+ ]; };
213
+ /** @nocollapse */ SubapplicationRespondService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function SubapplicationRespondService_Factory() { return new SubapplicationRespondService(i0.ɵɵinject(i1.ConfigurationsService), i0.ɵɵinject(i2.WidgetContentService), i0.ɵɵinject(i3.AuthKeycloakService), i0.ɵɵinject(i4.ActivatedRoute), i0.ɵɵinject(i4.Router), i0.ɵɵinject(i5.EventService), i0.ɵɵinject(i6.TelemetryService)); }, token: SubapplicationRespondService, providedIn: "root" });
214
+ return SubapplicationRespondService;
215
+ }());
216
+ export { SubapplicationRespondService };
217
+ if (false) {
218
+ SubapplicationRespondService.prototype.subAppname;
219
+ SubapplicationRespondService.prototype.continueLearningData;
220
+ SubapplicationRespondService.prototype.contentWindowinfo;
221
+ SubapplicationRespondService.prototype.loaded;
222
+ SubapplicationRespondService.prototype.configSvc;
223
+ SubapplicationRespondService.prototype.contentSvc;
224
+ SubapplicationRespondService.prototype.keyCloakSvc;
225
+ SubapplicationRespondService.prototype.activatedRoute;
226
+ SubapplicationRespondService.prototype.router;
227
+ SubapplicationRespondService.prototype.eventSvc;
228
+ SubapplicationRespondService.prototype.teleSvc;
229
+ }
230
230
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViYXBwbGljYXRpb24tcmVzcG9uZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtY2IvdXRpbHMvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvc3ViYXBwbGljYXRpb24tcmVzcG9uZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDeEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUE7Ozs7Ozs7O0FBQ3REO0lBUUUsc0NBQ1UsU0FBZ0MsRUFDaEMsVUFBZ0MsRUFDaEMsV0FBZ0MsRUFDaEMsY0FBOEIsRUFDOUIsTUFBYyxFQUNkLFFBQXNCLEVBQ3RCLE9BQXlCO1FBUG5DLGlCQWFDO1FBWlMsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFDaEMsZUFBVSxHQUFWLFVBQVUsQ0FBc0I7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQXFCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQVhuQyxlQUFVLEdBQUcsRUFBRSxDQUFBO1FBQ2YseUJBQW9CLEdBQVEsSUFBSSxDQUFBO1FBRWhDLFdBQU0s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QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7cUJBQzVFO29CQUNELGtCQUFrQixFQUFFLEtBQUs7aUJBQzFCO2FBQ0Y7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQTtTQUNsRDtJQUNILENBQUM7O2dCQXpNRixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7Z0JBTlEscUJBQXFCO2dCQUZyQixvQkFBb0I7Z0JBQ3BCLG1CQUFtQjtnQkFGbkIsY0FBYztnQkFBRSxNQUFNO2dCQUt0QixZQUFZO2dCQUNaLGdCQUFnQjs7O3VDQVB6QjtDQWtOQyxBQTFNRCxJQTBNQztTQXZNWSw0QkFBNEI7O0lBQ3ZDLGtEQUFlO0lBQ2YsNERBQWdDO0lBQ2hDLHlEQUFzQjtJQUN0Qiw4Q0FBYztJQUVaLGlEQUF3QztJQUN4QyxrREFBd0M7SUFDeEMsbURBQXdDO0lBQ3hDLHNEQUFzQztJQUN0Qyw4Q0FBc0I7SUFDdEIsZ0RBQThCO0lBQzlCLCtDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xyXG5pbXBvcnQgeyBXaWRnZXRDb250ZW50U2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LWNvbnRlbnQuc2VydmljZSdcclxuaW1wb3J0IHsgQXV0aEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vYXV0aC1rZXljbG9hay5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb25zLnNlcnZpY2UnXHJcbmltcG9ydCB7IFdzRXZlbnRzIH0gZnJvbSAnLi9ldmVudC5tb2RlbCdcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9ldmVudC5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi90ZWxlbWV0cnkuc2VydmljZSdcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN1YmFwcGxpY2F0aW9uUmVzcG9uZFNlcnZpY2Uge1xyXG4gIHN1YkFwcG5hbWUgPSAnJ1xyXG4gIGNvbnRpbnVlTGVhcm5pbmdEYXRhOiBhbnkgPSBudWxsXHJcbiAgY29udGVudFdpbmRvd2luZm86IGFueVxyXG4gIGxvYWRlZCA9IGZhbHNlXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250ZW50U3ZjOiBXaWRnZXRDb250ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUga2V5Q2xvYWtTdmM6IEF1dGhLZXljbG9ha1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGV2ZW50U3ZjOiBFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRlbGVTdmM6IFRlbGVtZXRyeVNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNoYW5nZUNvbnRleHRyZXNwb25kKClcclxuICAgIHRoaXMuY29uZmlnU3ZjLnByZWZDaGFuZ2VOb3RpZmllci5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNoYW5nZUNvbnRleHRyZXNwb25kKClcclxuICAgIH0pXHJcbiAgfVxyXG4gIGxvYWRlZFJlc3BvbmQoY29udGVudFdpbmRvdzogYW55LCBhcHBsaWNhdGlvbk5hbWU6IHN0cmluZywgaWQ/OiBzdHJpbmcpIHtcclxuICAgIGlmIChpZCAmJiB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnZpZXdNb2RlICYmIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMudmlld01vZGUgPT09ICdSRVNVTUUnKSB7XHJcbiAgICAgIHRoaXMuY29udGludWVMZWFybmluZ0RhdGEgPSBudWxsXHJcbiAgICAgIHRoaXMuY29udGVudFN2Yy5mZXRjaENvbnRlbnRIaXN0b3J5KGlkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRpbnVlTGVhcm5pbmdEYXRhID0gZGF0YS5jb250aW51ZURhdGFcclxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1N2YyAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdE5hbWUgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VyTmFtZSA/XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlck5hbWUuc3BsaXQoJyAnLCAyKVswXSA6ICcnXHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3ROYW1lID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlck5hbWUgP1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJOYW1lLnNwbGl0KCcgJywgMilbMV0gOiAnJ1xyXG4gICAgICAgICAgICBjb25zdCB2aWV3TW9kZTogc3RyaW5nID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3TW9kZSA/XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3TW9kZSA6ICcnXHJcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5rZXlDbG9ha1N2Yy50b2tlblxyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICBzdWJBcHBsaWNhdGlvbk5hbWU6IGFwcGxpY2F0aW9uTmFtZSxcclxuICAgICAgICAgICAgICByZXF1ZXN0SWQ6ICdMT0FERUQnLFxyXG4gICAgICAgICAgICAgIHBhcmVudENvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIGRvbWFpbk5hbWU6IHdpbmRvdy5sb2NhdGlvbi5ob3N0LFxyXG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLnJvdXRlci51cmwsXHJcbiAgICAgICAgICAgICAgICByb290T3JnOiB0aGlzLmNvbmZpZ1N2Yy5yb290T3JnLFxyXG4gICAgICAgICAgICAgICAgdGhlbWU6IHRoaXMuY29uZmlnU3ZjLmFjdGl2ZVRoZW1lT2JqZWN0ID8ge1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVUaGVtZU9iamVjdC50aGVtZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnU3ZjLmFjdGl2ZVRoZW1lT2JqZWN0LmNvbG9yLFxyXG4gICAgICAgICAgICAgICAgfSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnU3ZjLmFjdGl2ZUZvbnRPYmplY3QgPyB0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVGb250T2JqZWN0LmJhc2VGb250U2l6ZSA6ICcxNHB4JyxcclxuICAgICAgICAgICAgICAgIGxvY2FsZTogKHRoaXMuY29uZmlnU3ZjLnVzZXJQcmVmZXJlbmNlICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcmVmZXJlbmNlLnNlbGVjdGVkTG9jYWxlKSB8fCAnZW4nLFxyXG4gICAgICAgICAgICAgICAgZGFya01vZGU6IHRoaXMuY29uZmlnU3ZjLmlzRGFya01vZGUsXHJcbiAgICAgICAgICAgICAgICBzdWJBcHBsaWNhdGlvblN0YXJ0TW9kZTogdmlld01vZGUudG9VcHBlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgIHVzZXI6IHtcclxuICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICBsYXN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgIHVzZXJJZDogdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkID8gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkIDogJycsXHJcbiAgICAgICAgICAgICAgICAgIHJvbGVzOiB0aGlzLmNvbmZpZ1N2Yy51c2VyUm9sZXMgPyBBcnJheS5mcm9tKHRoaXMuY29uZmlnU3ZjLnVzZXJSb2xlcykgOiBbXSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBoZWFydGJlYXRGcmVxdWVuY3k6ICcyMDAnLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb250aW51ZUxlYXJuaW5nRGF0YS5kYXRhID8ge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVMZWFybmluZzogdGhpcy5jb250aW51ZUxlYXJuaW5nRGF0YS5kYXRhLFxyXG4gICAgICAgICAgICAgIH0gOiBudWxsLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UocmVzcG9uc2UsICcqJylcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50V2luZG93aW5mbyA9IGNvbnRlbnRXaW5kb3dcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuc3ViQXBwbmFtZSA9IGFwcGxpY2F0aW9uTmFtZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5jb25maWdTdmMgJiYgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcclxuICAgICAgICBjb25zdCBmaXJzdE5hbWUgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VyTmFtZSA/XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VyTmFtZS5zcGxpdCgnICcsIDIpWzBdIDogJydcclxuICAgICAgICBjb25zdCBsYXN0TmFtZSA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJOYW1lID9cclxuICAgICAgICAgIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJOYW1lLnNwbGl0KCcgJywgMilbMV0gOiAnJ1xyXG4gICAgICAgIGNvbnN0IHZpZXdNb2RlOiBzdHJpbmcgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnZpZXdNb2RlID9cclxuICAgICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMudmlld01vZGUgOiAnJ1xyXG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5rZXlDbG9ha1N2Yy50b2tlblxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgc3ViQXBwbGljYXRpb25OYW1lOiBhcHBsaWNhdGlvbk5hbWUsXHJcbiAgICAgICAgICByZXF1ZXN0SWQ6ICdMT0FERUQnLFxyXG4gICAgICAgICAgcGFyZW50Q29udGV4dDoge1xyXG4gICAgICAgICAgICBkb21haW5OYW1lOiB3aW5kb3cubG9jYXRpb24uaG9zdCxcclxuICAgICAgICAgICAgdXJsOiB0aGlzLnJvdXRlci51cmwsXHJcbiAgICAgICAgICAgIHJvb3RPcmc6IHRoaXMuY29uZmlnU3ZjLnJvb3RPcmcsXHJcbiAgICAgICAgICAgIHRoZW1lOiB0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVUaGVtZU9iamVjdCA/IHtcclxuICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVUaGVtZU9iamVjdC50aGVtZU5hbWUsXHJcbiAgICAgICAgICAgICAgLi4udGhpcy5jb25maWdTdmMuYWN0aXZlVGhlbWVPYmplY3QuY29sb3IsXHJcbiAgICAgICAgICAgIH0gOiAnJyxcclxuICAgICAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnU3ZjLmFjdGl2ZUZvbnRPYmplY3QgPyB0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVGb250T2JqZWN0LmJhc2VGb250U2l6ZSA6ICcxNHB4JyxcclxuICAgICAgICAgICAgbG9jYWxlOiAodGhpcy5jb25maWdTdmMudXNlclByZWZlcmVuY2UgJiYgdGhpcy5jb25maWdTdmMudXNlclByZWZlcmVuY2Uuc2VsZWN0ZWRMb2NhbGUpIHx8ICdlbicsXHJcbiAgICAgICAgICAgIGRhcmtNb2RlOiB0aGlzLmNvbmZpZ1N2Yy5pc0RhcmtNb2RlLFxyXG4gICAgICAgICAgICBzdWJBcHBsaWNhdGlvblN0YXJ0TW9kZTogdmlld01vZGUudG9VcHBlckNhc2UoKSxcclxuICAgICAgICAgICAgdXNlcjoge1xyXG4gICAgICAgICAgICAgIGZpcnN0TmFtZSxcclxuICAgICAgICAgICAgICBsYXN0TmFtZSxcclxuICAgICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCA/IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCA6ICcnLFxyXG4gICAgICAgICAgICAgIHJvbGVzOiB0aGlzLmNvbmZpZ1N2Yy51c2VyUm9sZXMgPyBBcnJheS5mcm9tKHRoaXMuY29uZmlnU3ZjLnVzZXJSb2xlcykgOiBbXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaGVhcnRiZWF0RnJlcXVlbmN5OiAnMjAwJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgIH1cclxuICAgICAgICBjb250ZW50V2luZG93LnBvc3RNZXNzYWdlKHJlc3BvbnNlLCAnKicpXHJcbiAgICAgICAgdGhpcy5jb250ZW50V2luZG93aW5mbyA9IGNvbnRlbnRXaW5kb3dcclxuICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWVcclxuICAgICAgICB0aGlzLnN1YkFwcG5hbWUgPSBhcHBsaWNhdGlvbk5hbWVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBjb250aW51ZUxlYXJuaW5nUmVzcG9uZChpZDogc3RyaW5nLCBjb250aW51ZUxlYXJuaW5nOiBhbnkpIHtcclxuICAgIHRoaXMuY29udGVudFN2Yy5zYXZlQ29udGludWVMZWFybmluZyhcclxuICAgICAge1xyXG4gICAgICAgIGNvbnRleHRQYXRoSWQ6IGlkLFxyXG4gICAgICAgIHJlc291cmNlSWQ6IGlkLFxyXG4gICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgdGltZXN0YW1wOiBEYXRlLm5vdygpLCBkYXRhOiBjb250aW51ZUxlYXJuaW5nIH0pLFxyXG4gICAgICAgIGRhdGVBY2Nlc3NlZDogRGF0ZS5ub3coKSxcclxuICAgICAgfSxcclxuICAgIClcclxuICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgIC5jYXRjaCgpXHJcbiAgfVxyXG4gIHRlbGVtZXRyeUV2ZW50cyh0RGF0YTogYW55KSB7XHJcbiAgICBpZiAodERhdGEpIHtcclxuICAgICAgc3dpdGNoICh0RGF0YS5ldmVudElkKSB7XHJcbiAgICAgICAgY2FzZSAnSU5URVJBQ1QnOlxyXG4gICAgICAgICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KHtcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXHJcbiAgICAgICAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5XYXJuLFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgLi4udERhdGEuZGF0YSxcclxuICAgICAgICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkludGVyYWN0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmcm9tOiB0RGF0YS5zdWJBcHBsaWNhdGlvbk5hbWUsXHJcbiAgICAgICAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJ0hFQVJUQkVBVCc6XHJcbiAgICAgICAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoRXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlIZWFydEJlYXQ+KHtcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXHJcbiAgICAgICAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5UcmFjZSxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnREYXRhLmRhdGEsXHJcbiAgICAgICAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5IZWFydEJlYXQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZyb206IHREYXRhLnN1YkFwcGxpY2F0aW9uTmFtZSxcclxuICAgICAgICAgICAgdG86ICdUZWxlbWV0cnknLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnSU1QUkVTU0lPTic6XHJcbiAgICAgICAgICB0aGlzLnRlbGVTdmMuZXh0ZXJuYWxJbXByZXNzaW9uKHREYXRhLmRhdGEpXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVuc3Vic2NyaWJlUmVzcG9uc2UoKSB7XHJcbiAgICB0aGlzLnN1YkFwcG5hbWUgPSAnJ1xyXG4gICAgdGhpcy5jb250aW51ZUxlYXJuaW5nRGF0YSA9IG51bGxcclxuICAgIHRoaXMuY29udGVudFdpbmRvd2luZm8gPSBudWxsXHJcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlXHJcbiAgfVxyXG4gIGNoYW5nZUNvbnRleHRyZXNwb25kKCkge1xyXG4gICAgaWYgKHRoaXMubG9hZGVkICYmIHRoaXMuY29udGVudFdpbmRvd2luZm8gJiYgdGhpcy5jb25maWdTdmMgJiYgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUgJiYgdGhpcy5zdWJBcHBuYW1lKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0TmFtZSA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJOYW1lID9cclxuICAgICAgICB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VyTmFtZS5zcGxpdCgnICcsIDIpWzBdIDogJydcclxuICAgICAgY29uc3QgbGFzdE5hbWUgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VyTmFtZSA/XHJcbiAgICAgICAgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlck5hbWUuc3BsaXQoJyAnLCAyKVsxXSA6ICcnXHJcbiAgICAgIGNvbnN0IHZpZXdNb2RlOiBzdHJpbmcgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnZpZXdNb2RlID9cclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnZpZXdNb2RlIDogJydcclxuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmtleUNsb2FrU3ZjLnRva2VuXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xyXG4gICAgICAgIHN1YkFwcGxpY2F0aW9uTmFtZTogdGhpcy5zdWJBcHBuYW1lLFxyXG4gICAgICAgIHJlcXVlc3RJZDogJ0NPTlRFWFRfQ0hBTkdFJyxcclxuICAgICAgICBwYXJlbnRDb250ZXh0OiB7XHJcbiAgICAgICAgICBkb21haW5OYW1lOiB3aW5kb3cubG9jYXRpb24uaG9zdCxcclxuICAgICAgICAgIHVybDogdGhpcy5yb3V0ZXIudXJsLFxyXG4gICAgICAgICAgcm9vdE9yZzogdGhpcy5jb25maWdTdmMucm9vdE9yZyxcclxuICAgICAgICAgIHRoZW1lOiB0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVUaGVtZU9iamVjdCA/IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5jb25maWdTdmMuYWN0aXZlVGhlbWVPYmplY3QudGhlbWVOYW1lLFxyXG4gICAgICAgICAgICAuLi50aGlzLmNvbmZpZ1N2Yy5hY3RpdmVUaGVtZU9iamVjdC5jb2xvcixcclxuICAgICAgICAgIH0gOiAnJyxcclxuICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVGb250T2JqZWN0ID8gdGhpcy5jb25maWdTdmMuYWN0aXZlRm9udE9iamVjdC5iYXNlRm9udFNpemUgOiAnMTRweCcsXHJcbiAgICAgICAgICBsb2NhbGU6ICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJlZmVyZW5jZSAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJlZmVyZW5jZS5zZWxlY3RlZExvY2FsZSkgfHwgJ2VuJyxcclxuICAgICAgICAgIGRhcmtNb2RlOiB0aGlzLmNvbmZpZ1N2Yy5pc0RhcmtNb2RlLFxyXG4gICAgICAgICAgc3ViQXBwbGljYXRpb25TdGFydE1vZGU6IHZpZXdNb2RlLnRvVXBwZXJDYXNlKCksXHJcbiAgICAgICAgICB1c2VyOiB7XHJcbiAgICAgICAgICAgIGZpcnN0TmFtZSxcclxuICAgICAgICAgICAgbGFzdE5hbWUsXHJcbiAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCA/IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCA6ICcnLFxyXG4gICAgICAgICAgICByb2xlczogdGhpcy5jb25maWdTdmMudXNlclJvbGVzID8gQXJyYXkuZnJvbSh0aGlzLmNvbmZpZ1N2Yy51c2VyUm9sZXMpIDogW10sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaGVhcnRiZWF0RnJlcXVlbmN5OiAnMjAwJyxcclxuICAgICAgICB9LFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udGVudFdpbmRvd2luZm8ucG9zdE1lc3NhZ2UocmVzcG9uc2UsICcqJylcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19