@lifeready/core 1.0.2 → 1.0.4

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 (225) hide show
  1. package/README.md +62 -62
  2. package/bundles/lifeready-core.umd.js +15445 -15445
  3. package/bundles/lifeready-core.umd.js.map +1 -1
  4. package/bundles/lifeready-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/_common/ast.js +40 -40
  6. package/esm2015/lib/_common/deferred-promise.js +24 -24
  7. package/esm2015/lib/_common/exceptions.js +157 -157
  8. package/esm2015/lib/_common/queries.gql.js +190 -190
  9. package/esm2015/lib/_common/run-outside-angular.js +79 -79
  10. package/esm2015/lib/_common/types.js +1 -1
  11. package/esm2015/lib/_common/utils.js +44 -44
  12. package/esm2015/lib/api/contact-card.gql.js +79 -79
  13. package/esm2015/lib/api/contact-card.service.js +154 -154
  14. package/esm2015/lib/api/contact-card2.gql.js +60 -60
  15. package/esm2015/lib/api/contact-card2.service.js +103 -103
  16. package/esm2015/lib/api/file.service.js +74 -74
  17. package/esm2015/lib/api/item2.gql.js +110 -110
  18. package/esm2015/lib/api/item2.service.js +311 -311
  19. package/esm2015/lib/api/key-exchange.gql.js +188 -188
  20. package/esm2015/lib/api/key-exchange.service.js +442 -442
  21. package/esm2015/lib/api/key-exchange.types.js +18 -18
  22. package/esm2015/lib/api/key-exchange2.gql.js +171 -171
  23. package/esm2015/lib/api/key-exchange2.service.js +479 -479
  24. package/esm2015/lib/api/lock.gql.js +40 -40
  25. package/esm2015/lib/api/lock.service.js +64 -64
  26. package/esm2015/lib/api/lr-apollo.service.js +46 -46
  27. package/esm2015/lib/api/lr-graphql/index.js +6 -6
  28. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -155
  29. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -213
  30. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -51
  31. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -48
  32. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -18
  33. package/esm2015/lib/api/message.service.js +138 -138
  34. package/esm2015/lib/api/persist.service.js +181 -181
  35. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -93
  36. package/esm2015/lib/api/query-processor/index.js +3 -3
  37. package/esm2015/lib/api/query-processor/query-processor.service.js +192 -192
  38. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -109
  39. package/esm2015/lib/api/shared-contact-card.service.js +119 -119
  40. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -41
  41. package/esm2015/lib/api/shared-contact-card2.service.js +117 -117
  42. package/esm2015/lib/api/time.service.js +146 -146
  43. package/esm2015/lib/api/types/graphql.types.js +7 -7
  44. package/esm2015/lib/api/types/index.js +3 -3
  45. package/esm2015/lib/api/types/lr-graphql.types.js +71 -71
  46. package/esm2015/lib/auth/auth.config.js +57 -57
  47. package/esm2015/lib/auth/auth.gql.js +48 -48
  48. package/esm2015/lib/auth/auth.types.js +27 -27
  49. package/esm2015/lib/auth/idle.service.js +168 -168
  50. package/esm2015/lib/auth/idle.types.js +7 -7
  51. package/esm2015/lib/auth/lbop.service.js +355 -355
  52. package/esm2015/lib/auth/life-ready-auth.service.js +500 -500
  53. package/esm2015/lib/auth/password.service.js +320 -320
  54. package/esm2015/lib/auth/register.service.js +172 -172
  55. package/esm2015/lib/auth/two-factor.service.js +74 -74
  56. package/esm2015/lib/category/category-meta.service.js +99 -99
  57. package/esm2015/lib/category/category.gql.js +406 -406
  58. package/esm2015/lib/category/category.service.js +390 -390
  59. package/esm2015/lib/category/category.types.js +29 -29
  60. package/esm2015/lib/cryptography/cryptography.types.js +11 -11
  61. package/esm2015/lib/cryptography/encryption.service.js +189 -189
  62. package/esm2015/lib/cryptography/key-factory.service.js +237 -237
  63. package/esm2015/lib/cryptography/key-graph.service.js +280 -280
  64. package/esm2015/lib/cryptography/key-meta.service.js +200 -200
  65. package/esm2015/lib/cryptography/key.service.js +124 -124
  66. package/esm2015/lib/cryptography/slip39.service.js +169 -169
  67. package/esm2015/lib/cryptography/web-crypto.service.js +29 -29
  68. package/esm2015/lib/life-ready.config.js +84 -84
  69. package/esm2015/lib/life-ready.module.js +74 -74
  70. package/esm2015/lib/plan/plan.gql.js +123 -123
  71. package/esm2015/lib/plan/plan.service.js +149 -149
  72. package/esm2015/lib/plan/plan.types.js +11 -11
  73. package/esm2015/lib/record/record-attachment.service.js +101 -101
  74. package/esm2015/lib/record/record.gql.js +179 -179
  75. package/esm2015/lib/record/record.service.js +206 -206
  76. package/esm2015/lib/record/record.types.js +15 -15
  77. package/esm2015/lib/record-type/record-type.service.js +75 -75
  78. package/esm2015/lib/record-type/record-type.types.js +28 -28
  79. package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +105 -105
  80. package/esm2015/lib/scenario/approvals/scenario-approval.types.js +1 -1
  81. package/esm2015/lib/scenario/approvals/scenario-approver.service.js +300 -300
  82. package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +52 -52
  83. package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +97 -97
  84. package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +1 -1
  85. package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +150 -150
  86. package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +229 -229
  87. package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +1 -1
  88. package/esm2015/lib/scenario/scenario-setup.service.js +269 -269
  89. package/esm2015/lib/scenario/scenario.gql.js +368 -368
  90. package/esm2015/lib/scenario/scenario.service.js +611 -611
  91. package/esm2015/lib/scenario/scenario.types.js +64 -64
  92. package/esm2015/lib/search/search.gql.js +62 -62
  93. package/esm2015/lib/search/search.service.js +156 -156
  94. package/esm2015/lib/search/search.types.js +6 -6
  95. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +112 -112
  96. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -129
  97. package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -4
  98. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +232 -232
  99. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +299 -299
  100. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -148
  101. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -326
  102. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -41
  103. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -87
  104. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -215
  105. package/esm2015/lib/users/profile-details.service.js +214 -214
  106. package/esm2015/lib/users/profile.gql.js +97 -97
  107. package/esm2015/lib/users/profile.service.js +169 -169
  108. package/esm2015/lib/users/profile.types.js +34 -34
  109. package/esm2015/lib/users/user.gql.js +60 -60
  110. package/esm2015/lib/users/user.service.js +79 -79
  111. package/esm2015/lib/users/user.types.js +5 -5
  112. package/esm2015/lifeready-core.js +10 -10
  113. package/esm2015/public-api.js +81 -81
  114. package/fesm2015/lifeready-core.js +13088 -13088
  115. package/fesm2015/lifeready-core.js.map +1 -1
  116. package/lib/_common/ast.d.ts +11 -11
  117. package/lib/_common/deferred-promise.d.ts +12 -12
  118. package/lib/_common/exceptions.d.ts +109 -109
  119. package/lib/_common/queries.gql.d.ts +10 -10
  120. package/lib/_common/run-outside-angular.d.ts +14 -14
  121. package/lib/_common/types.d.ts +10 -10
  122. package/lib/_common/utils.d.ts +3 -3
  123. package/lib/api/contact-card.gql.d.ts +7 -7
  124. package/lib/api/contact-card.service.d.ts +52 -52
  125. package/lib/api/contact-card2.gql.d.ts +34 -34
  126. package/lib/api/contact-card2.service.d.ts +49 -49
  127. package/lib/api/file.service.d.ts +18 -18
  128. package/lib/api/item2.gql.d.ts +96 -96
  129. package/lib/api/item2.service.d.ts +177 -177
  130. package/lib/api/key-exchange.gql.d.ts +9 -9
  131. package/lib/api/key-exchange.service.d.ts +39 -39
  132. package/lib/api/key-exchange.types.d.ts +196 -196
  133. package/lib/api/key-exchange2.gql.d.ts +125 -125
  134. package/lib/api/key-exchange2.service.d.ts +187 -187
  135. package/lib/api/lock.gql.d.ts +27 -27
  136. package/lib/api/lock.service.d.ts +25 -25
  137. package/lib/api/lr-apollo.service.d.ts +15 -15
  138. package/lib/api/lr-graphql/index.d.ts +5 -5
  139. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -60
  140. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +27 -27
  141. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -28
  142. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -8
  143. package/lib/api/lr-graphql/lr.service.d.ts +9 -9
  144. package/lib/api/message.service.d.ts +58 -58
  145. package/lib/api/persist.service.d.ts +31 -31
  146. package/lib/api/query-processor/common-processors.service.d.ts +36 -36
  147. package/lib/api/query-processor/index.d.ts +2 -2
  148. package/lib/api/query-processor/query-processor.service.d.ts +18 -18
  149. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -15
  150. package/lib/api/shared-contact-card.service.d.ts +33 -33
  151. package/lib/api/shared-contact-card2.gql.d.ts +36 -36
  152. package/lib/api/shared-contact-card2.service.d.ts +45 -45
  153. package/lib/api/time.service.d.ts +16 -16
  154. package/lib/api/types/graphql.types.d.ts +29 -29
  155. package/lib/api/types/index.d.ts +2 -2
  156. package/lib/api/types/lr-graphql.types.d.ts +385 -385
  157. package/lib/auth/auth.config.d.ts +5 -5
  158. package/lib/auth/auth.gql.d.ts +15 -15
  159. package/lib/auth/auth.types.d.ts +66 -66
  160. package/lib/auth/idle.service.d.ts +40 -40
  161. package/lib/auth/idle.types.d.ts +10 -10
  162. package/lib/auth/lbop.service.d.ts +91 -91
  163. package/lib/auth/life-ready-auth.service.d.ts +59 -59
  164. package/lib/auth/password.service.d.ts +78 -78
  165. package/lib/auth/register.service.d.ts +25 -25
  166. package/lib/auth/two-factor.service.d.ts +15 -15
  167. package/lib/category/category-meta.service.d.ts +23 -23
  168. package/lib/category/category.gql.d.ts +45 -45
  169. package/lib/category/category.service.d.ts +67 -67
  170. package/lib/category/category.types.d.ts +79 -79
  171. package/lib/cryptography/cryptography.types.d.ts +83 -83
  172. package/lib/cryptography/encryption.service.d.ts +41 -41
  173. package/lib/cryptography/key-factory.service.d.ts +38 -38
  174. package/lib/cryptography/key-graph.service.d.ts +33 -33
  175. package/lib/cryptography/key-meta.service.d.ts +44 -44
  176. package/lib/cryptography/key.service.d.ts +36 -36
  177. package/lib/cryptography/slip39.service.d.ts +43 -43
  178. package/lib/cryptography/web-crypto.service.d.ts +5 -5
  179. package/lib/life-ready.config.d.ts +14 -14
  180. package/lib/life-ready.module.d.ts +5 -5
  181. package/lib/plan/plan.gql.d.ts +11 -11
  182. package/lib/plan/plan.service.d.ts +33 -33
  183. package/lib/plan/plan.types.d.ts +31 -31
  184. package/lib/record/record-attachment.service.d.ts +16 -16
  185. package/lib/record/record.gql.d.ts +14 -14
  186. package/lib/record/record.service.d.ts +25 -25
  187. package/lib/record/record.types.d.ts +57 -57
  188. package/lib/record-type/record-type.service.d.ts +11 -11
  189. package/lib/record-type/record-type.types.d.ts +50 -50
  190. package/lib/scenario/approvals/scenario-approval.gql.d.ts +7 -7
  191. package/lib/scenario/approvals/scenario-approval.types.d.ts +63 -63
  192. package/lib/scenario/approvals/scenario-approver.service.d.ts +32 -32
  193. package/lib/scenario/claimants/scenario-claimant.gql.d.ts +5 -5
  194. package/lib/scenario/claimants/scenario-claimant.service.d.ts +17 -17
  195. package/lib/scenario/claimants/scenario-claimant.types.d.ts +18 -18
  196. package/lib/scenario/receivers/scenario-receiver.gql.d.ts +8 -8
  197. package/lib/scenario/receivers/scenario-receiver.service.d.ts +30 -30
  198. package/lib/scenario/receivers/scenario-receiver.types.d.ts +54 -54
  199. package/lib/scenario/scenario-setup.service.d.ts +22 -22
  200. package/lib/scenario/scenario.gql.d.ts +34 -34
  201. package/lib/scenario/scenario.service.d.ts +58 -58
  202. package/lib/scenario/scenario.types.d.ts +217 -217
  203. package/lib/search/search.gql.d.ts +1 -1
  204. package/lib/search/search.service.d.ts +25 -25
  205. package/lib/search/search.types.d.ts +20 -20
  206. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -20
  207. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -35
  208. package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -3
  209. package/lib/trusted-parties/tp-password-reset.gql.d.ts +218 -218
  210. package/lib/trusted-parties/tp-password-reset.service.d.ts +130 -130
  211. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -9
  212. package/lib/trusted-parties/trusted-party.service.d.ts +44 -44
  213. package/lib/trusted-parties/trusted-party.types.d.ts +102 -102
  214. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -79
  215. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -114
  216. package/lib/users/profile-details.service.d.ts +21 -21
  217. package/lib/users/profile.gql.d.ts +11 -11
  218. package/lib/users/profile.service.d.ts +35 -35
  219. package/lib/users/profile.types.d.ts +96 -96
  220. package/lib/users/user.gql.d.ts +9 -9
  221. package/lib/users/user.service.d.ts +12 -12
  222. package/lib/users/user.types.d.ts +23 -23
  223. package/lifeready-core.d.ts +9 -9
  224. package/package.json +1 -1
  225. package/public-api.d.ts +77 -77
@@ -1,269 +1,269 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { ScenarioApproverService } from './approvals/scenario-approver.service';
4
- import { ScenarioClaimantService } from './claimants/scenario-claimant.service';
5
- import { ScenarioReceiverService } from './receivers/scenario-receiver.service';
6
- import { ScenarioService } from './scenario.service';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "./scenario.service";
9
- import * as i2 from "./claimants/scenario-claimant.service";
10
- import * as i3 from "./approvals/scenario-approver.service";
11
- import * as i4 from "./receivers/scenario-receiver.service";
12
- export class ScenarioSetupService {
13
- constructor(scenarioService, scenarioClaimantService, scenarioApproverService, scenarioReceiverService) {
14
- this.scenarioService = scenarioService;
15
- this.scenarioClaimantService = scenarioClaimantService;
16
- this.scenarioApproverService = scenarioApproverService;
17
- this.scenarioReceiverService = scenarioReceiverService;
18
- }
19
- setupScenario(newScenario) {
20
- return __awaiter(this, void 0, void 0, function* () {
21
- const scenarioId = yield this.scenarioService.createScenario({
22
- plainSubjectCipherData: {
23
- event: newScenario.event,
24
- name: newScenario.name,
25
- },
26
- });
27
- try {
28
- yield Promise.all(newScenario.claimants.map((x) => this.updateClaimant(scenarioId, newScenario.event, x)));
29
- const scenario = yield this.scenarioService.getScenario(scenarioId);
30
- if (newScenario.approvalGroups.length) {
31
- const approvalGroups = {
32
- scenarioId,
33
- keyId: scenario.keyId,
34
- event: scenario.event,
35
- singleReject: false,
36
- quorum: 1,
37
- plainAssemblyCipherData: null,
38
- approvalGroups: newScenario.approvalGroups.map((x) => ({
39
- quorum: x.quorum,
40
- singleReject: x.singleReject,
41
- plainSubAssemblyCipherData: { name: x.name },
42
- approvers: x.approvers.map((y) => ({
43
- trustedPartyId: y.trustedPartyId,
44
- trustedPartySharedKeyId: y.trustedPartySharedKeyId,
45
- plainSharedCipherData: {
46
- message: y.message,
47
- event: newScenario.event,
48
- },
49
- })),
50
- })),
51
- };
52
- scenario.assemblyKeyId = yield this.scenarioApproverService.createScenarioApproverAssembly(approvalGroups);
53
- }
54
- yield Promise.all(newScenario.receivers.map((x) => this.updateReceiver(scenarioId, scenario.assemblyKeyId, newScenario.event, x)));
55
- }
56
- catch (e) {
57
- return { scenarioId, error: e };
58
- }
59
- return { scenarioId };
60
- });
61
- }
62
- updateScenario(updateScenario) {
63
- return __awaiter(this, void 0, void 0, function* () {
64
- const params = {
65
- scenarioId: updateScenario.scenarioId,
66
- keyId: updateScenario.keyId,
67
- plainSubjectCipherData: {
68
- event: updateScenario.event,
69
- name: updateScenario.name,
70
- },
71
- };
72
- yield this.scenarioService.updateScenario(params);
73
- yield Promise.all(updateScenario.claimants.map((x) => this.updateClaimant(updateScenario.scenarioId, updateScenario.event, x)));
74
- yield Promise.all(updateScenario.deletedClaimantIds.map((x) => this.scenarioClaimantService.deleteClaimant(x)));
75
- const assemblyKeyId = yield this.updateApprovalGroups(updateScenario);
76
- yield Promise.all(updateScenario.receivers.map((x) => this.updateReceiver(updateScenario.scenarioId, assemblyKeyId, updateScenario.event, x)));
77
- yield Promise.all(updateScenario.deletedReceiverIds.map((x) => this.scenarioReceiverService.deleteReceiver(x)));
78
- });
79
- }
80
- updateClaimant(scenarioId, event, claimant) {
81
- return __awaiter(this, void 0, void 0, function* () {
82
- if (claimant.claimantId) {
83
- yield this.scenarioClaimantService.updateClaimant({
84
- id: claimant.claimantId,
85
- keyId: claimant.keyId,
86
- plainSharedCipherData: { message: claimant.message, event },
87
- });
88
- }
89
- else {
90
- yield this.scenarioClaimantService.addClaimant({
91
- scenarioId,
92
- trustedPartyId: claimant.trustedPartyId,
93
- trustedPartySharedKeyId: claimant.trustedPartySharedKeyId,
94
- plainSharedCipherData: { message: claimant.message, event },
95
- });
96
- }
97
- });
98
- }
99
- updateApprovalGroups(updateScenario) {
100
- return __awaiter(this, void 0, void 0, function* () {
101
- if (updateScenario.assemblyKeyId) {
102
- if (updateScenario.approvalGroups.length) {
103
- const approvalGroups = {
104
- scenarioId: updateScenario.scenarioId,
105
- assemblyKeyId: updateScenario.assemblyKeyId,
106
- singleReject: false,
107
- quorum: 1,
108
- approvalGroups: updateScenario.approvalGroups.map((x) => ({
109
- subAssemblyId: x.subAssemblyId,
110
- quorum: x.quorum,
111
- singleReject: x.singleReject,
112
- plainSubAssemblyCipherData: { name: x.name },
113
- approvers: x.approvers.map((y) => ({
114
- approverId: y.approverId,
115
- keyId: y.keyId,
116
- trustedPartyId: y.trustedPartyId,
117
- trustedPartySharedKeyId: y.trustedPartySharedKeyId,
118
- plainSharedCipherData: {
119
- message: y.message,
120
- event: updateScenario.event,
121
- },
122
- })),
123
- deletedApproverIds: x.deletedApproverIds,
124
- })),
125
- deletedGroupIds: updateScenario.deletedGroupIds,
126
- };
127
- yield this.scenarioApproverService.updateScenarioApproverAssembly(approvalGroups);
128
- return updateScenario.assemblyKeyId;
129
- }
130
- else {
131
- const { receivers } = yield this.scenarioService.getScenario(updateScenario.scenarioId);
132
- yield this.scenarioApproverService.deleteScenarioApproverAssembly(updateScenario.scenarioId, updateScenario.event, receivers);
133
- return null;
134
- }
135
- // update or delete
136
- }
137
- else if (updateScenario.approvalGroups.length) {
138
- const { receivers } = yield this.scenarioService.getScenario(updateScenario.scenarioId);
139
- const approvalGroups = {
140
- scenarioId: updateScenario.scenarioId,
141
- keyId: updateScenario.keyId,
142
- event: updateScenario.event,
143
- singleReject: false,
144
- quorum: 1,
145
- approvalGroups: updateScenario.approvalGroups.map((x) => ({
146
- quorum: x.quorum,
147
- singleReject: x.singleReject,
148
- plainSubAssemblyCipherData: { name: x.name },
149
- approvers: x.approvers.map((y) => ({
150
- trustedPartyId: y.trustedPartyId,
151
- trustedPartySharedKeyId: y.trustedPartySharedKeyId,
152
- plainSharedCipherData: {
153
- message: y.message,
154
- event: updateScenario.event,
155
- },
156
- })),
157
- })),
158
- receivers,
159
- };
160
- return yield this.scenarioApproverService.createScenarioApproverAssembly(approvalGroups);
161
- }
162
- return null;
163
- });
164
- }
165
- updateReceiver(scenarioId, assemblyKeyId, event, receiver) {
166
- return __awaiter(this, void 0, void 0, function* () {
167
- let receiverId = receiver.receiverId;
168
- // Currently deleting all receivers below assembly logic.
169
- if (receiverId) {
170
- yield this.scenarioReceiverService.updateReceiver({
171
- id: receiver.receiverId,
172
- keyId: receiver.keyId,
173
- plainSharedCipherData: { message: receiver.message, event },
174
- });
175
- }
176
- else {
177
- const newReceiver = {
178
- scenarioId,
179
- trustedPartyId: receiver.trustedPartyId,
180
- trustedPartySharedKeyId: receiver.trustedPartySharedKeyId,
181
- plainSharedCipherData: { message: receiver.message, event },
182
- };
183
- receiverId = yield this.scenarioReceiverService.addReceiver(newReceiver);
184
- }
185
- const loadedReceiver = yield this.scenarioReceiverService.getReceiver(receiverId);
186
- yield this.updateReceiverItems(scenarioId, assemblyKeyId, loadedReceiver, receiver.permissions);
187
- });
188
- }
189
- updateReceiverItems(scenarioId, assemblyKeyId, receiver, permissions) {
190
- return __awaiter(this, void 0, void 0, function* () {
191
- permissions = permissions || {};
192
- permissions.categories = permissions.categories || [];
193
- permissions.records = permissions.records || [];
194
- yield Promise.all(permissions.categories
195
- .filter((x) => !receiver.categories.some((y) => y.category.id === x.categoryId))
196
- .map((x) => __awaiter(this, void 0, void 0, function* () {
197
- const params = {
198
- scenarioId,
199
- assemblyKeyId,
200
- receiverId: receiver.id,
201
- receiverKeyId: receiver.keyId,
202
- accessRole: x.accessLevel,
203
- categoryId: x.categoryId,
204
- };
205
- yield this.scenarioReceiverService.addReceiverCategory(params);
206
- })));
207
- yield Promise.all(permissions.records
208
- .filter((x) => !receiver.records.some((y) => y.record.id === x.recordId))
209
- .map((x) => __awaiter(this, void 0, void 0, function* () {
210
- const params = {
211
- scenarioId,
212
- assemblyKeyId,
213
- receiverId: receiver.id,
214
- receiverKeyId: receiver.keyId,
215
- accessRole: x.accessLevel,
216
- recordId: x.recordId,
217
- };
218
- yield this.scenarioReceiverService.addReceiverRecord(params);
219
- })));
220
- yield Promise.all(permissions.categories
221
- .map((x) => ({
222
- accessLevel: x.accessLevel,
223
- category: receiver.categories.find((y) => y.category.id === x.categoryId),
224
- }))
225
- .filter((x) => x.category)
226
- .map((x) => __awaiter(this, void 0, void 0, function* () {
227
- const params = {
228
- id: x.category.id,
229
- keyId: x.category.keyId,
230
- accessRole: x.accessLevel,
231
- };
232
- yield this.scenarioReceiverService.updateReceiverItem(params);
233
- })));
234
- yield Promise.all(permissions.records
235
- .map((x) => ({
236
- accessLevel: x.accessLevel,
237
- record: receiver.records.find((y) => y.record.id === x.recordId),
238
- }))
239
- .filter((x) => x.record)
240
- .map((x) => __awaiter(this, void 0, void 0, function* () {
241
- const params = {
242
- id: x.record.id,
243
- keyId: x.record.keyId,
244
- accessRole: x.accessLevel,
245
- };
246
- yield this.scenarioReceiverService.updateReceiverItem(params);
247
- })));
248
- yield Promise.all(receiver.categories
249
- .filter((x) => !permissions.categories.some((y) => y.categoryId === x.category.id))
250
- .map((x) => this.scenarioReceiverService.deleteReceiverItem(x.id)));
251
- yield Promise.all(receiver.records
252
- .filter((x) => !permissions.records.some((y) => y.recordId === x.record.id))
253
- .map((x) => this.scenarioReceiverService.deleteReceiverItem(x.id)));
254
- });
255
- }
256
- }
257
- ScenarioSetupService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ScenarioSetupService_Factory() { return new ScenarioSetupService(i0.ɵɵinject(i1.ScenarioService), i0.ɵɵinject(i2.ScenarioClaimantService), i0.ɵɵinject(i3.ScenarioApproverService), i0.ɵɵinject(i4.ScenarioReceiverService)); }, token: ScenarioSetupService, providedIn: "root" });
258
- ScenarioSetupService.decorators = [
259
- { type: Injectable, args: [{
260
- providedIn: 'root',
261
- },] }
262
- ];
263
- ScenarioSetupService.ctorParameters = () => [
264
- { type: ScenarioService },
265
- { type: ScenarioClaimantService },
266
- { type: ScenarioApproverService },
267
- { type: ScenarioReceiverService }
268
- ];
269
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8tc2V0dXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvc2NlbmFyaW8vc2NlbmFyaW8tc2V0dXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0zQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUtoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7OztBQVdyRCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQ1UsZUFBZ0MsRUFDaEMsdUJBQWdELEVBQ2hELHVCQUFnRCxFQUNoRCx1QkFBZ0Q7UUFIaEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO0lBQ3ZELENBQUM7SUFFUyxhQUFhLENBQ3hCLFdBQXdCOztZQUV4QixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDO2dCQUMzRCxzQkFBc0IsRUFBRTtvQkFDdEIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLO29CQUN4QixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7aUJBQ3ZCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsSUFBSTtnQkFDRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUN0RCxDQUNGLENBQUM7Z0JBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtvQkFDckMsTUFBTSxjQUFjLEdBQWlDO3dCQUNuRCxVQUFVO3dCQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSzt3QkFDckIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO3dCQUNyQixZQUFZLEVBQUUsS0FBSzt3QkFDbkIsTUFBTSxFQUFFLENBQUM7d0JBQ1QsdUJBQXVCLEVBQUUsSUFBSTt3QkFFN0IsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUNyRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07NEJBQ2hCLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTs0QkFDNUIsMEJBQTBCLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRTs0QkFDNUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dDQUNqQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLGNBQWM7Z0NBQ2hDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyx1QkFBdUI7Z0NBQ2xELHFCQUFxQixFQUFFO29DQUNyQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87b0NBQ2xCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztpQ0FDekI7NkJBQ0YsQ0FBQyxDQUFDO3lCQUNKLENBQUMsQ0FBQztxQkFDSixDQUFDO29CQUNGLFFBQVEsQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsOEJBQThCLENBQ3hGLGNBQWMsQ0FDZixDQUFDO2lCQUNIO2dCQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzlCLElBQUksQ0FBQyxjQUFjLENBQ2pCLFVBQVUsRUFDVixRQUFRLENBQUMsYUFBYSxFQUN0QixXQUFXLENBQUMsS0FBSyxFQUNqQixDQUFDLENBQ0YsQ0FDRixDQUNGLENBQUM7YUFDSDtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ2pDO1lBQ0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLENBQUM7S0FBQTtJQUVZLGNBQWMsQ0FBQyxjQUE4Qjs7WUFDeEQsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVO2dCQUNyQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7Z0JBQzNCLHNCQUFzQixFQUFFO29CQUN0QixLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7b0JBQzNCLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtpQkFDMUI7YUFDRixDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVsRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FDeEUsQ0FDRixDQUFDO1lBQ0YsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUMxQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUMvQyxDQUNGLENBQUM7WUFFRixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUV0RSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNqQyxJQUFJLENBQUMsY0FBYyxDQUNqQixjQUFjLENBQUMsVUFBVSxFQUN6QixhQUFhLEVBQ2IsY0FBYyxDQUFDLEtBQUssRUFDcEIsQ0FBQyxDQUNGLENBQ0YsQ0FDRixDQUFDO1lBQ0YsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUMxQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUMvQyxDQUNGLENBQUM7UUFDSixDQUFDO0tBQUE7SUFFYSxjQUFjLENBQzFCLFVBQWtCLEVBQ2xCLEtBQWEsRUFDYixRQUFpQzs7WUFFakMsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO2dCQUN2QixNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7b0JBQ2hELEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVTtvQkFDdkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNyQixxQkFBcUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtpQkFDNUQsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDO29CQUM3QyxVQUFVO29CQUNWLGNBQWMsRUFBRSxRQUFRLENBQUMsY0FBYztvQkFDdkMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLHVCQUF1QjtvQkFDekQscUJBQXFCLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7aUJBQzVELENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQztLQUFBO0lBRWEsb0JBQW9CLENBQ2hDLGNBQThCOztZQUU5QixJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUU7Z0JBQ2hDLElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3hDLE1BQU0sY0FBYyxHQUFpQzt3QkFDbkQsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVO3dCQUNyQyxhQUFhLEVBQUUsY0FBYyxDQUFDLGFBQWE7d0JBRTNDLFlBQVksRUFBRSxLQUFLO3dCQUNuQixNQUFNLEVBQUUsQ0FBQzt3QkFFVCxjQUFjLEVBQUUsY0FBYyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7NEJBQ3hELGFBQWEsRUFBRSxDQUFDLENBQUMsYUFBYTs0QkFDOUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNOzRCQUNoQixZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7NEJBQzVCLDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7NEJBQzVDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQ0FDakMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO2dDQUN4QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7Z0NBQ2QsY0FBYyxFQUFFLENBQUMsQ0FBQyxjQUFjO2dDQUNoQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsdUJBQXVCO2dDQUNsRCxxQkFBcUIsRUFBRTtvQ0FDckIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO29DQUNsQixLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7aUNBQzVCOzZCQUNGLENBQUMsQ0FBQzs0QkFDSCxrQkFBa0IsRUFBRSxDQUFDLENBQUMsa0JBQWtCO3lCQUN6QyxDQUFDLENBQUM7d0JBQ0gsZUFBZSxFQUFFLGNBQWMsQ0FBQyxlQUFlO3FCQUNoRCxDQUFDO29CQUNGLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLDhCQUE4QixDQUMvRCxjQUFjLENBQ2YsQ0FBQztvQkFDRixPQUFPLGNBQWMsQ0FBQyxhQUFhLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNMLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUMxRCxjQUFjLENBQUMsVUFBVSxDQUMxQixDQUFDO29CQUNGLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLDhCQUE4QixDQUMvRCxjQUFjLENBQUMsVUFBVSxFQUN6QixjQUFjLENBQUMsS0FBSyxFQUNwQixTQUFTLENBQ1YsQ0FBQztvQkFDRixPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxtQkFBbUI7YUFDcEI7aUJBQU0sSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtnQkFDL0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQzFELGNBQWMsQ0FBQyxVQUFVLENBQzFCLENBQUM7Z0JBRUYsTUFBTSxjQUFjLEdBQWlDO29CQUNuRCxVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVU7b0JBQ3JDLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSztvQkFDM0IsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLO29CQUMzQixZQUFZLEVBQUUsS0FBSztvQkFDbkIsTUFBTSxFQUFFLENBQUM7b0JBQ1QsY0FBYyxFQUFFLGNBQWMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUN4RCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07d0JBQ2hCLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTt3QkFDNUIsMEJBQTBCLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRTt3QkFDNUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUNqQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLGNBQWM7NEJBQ2hDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyx1QkFBdUI7NEJBQ2xELHFCQUFxQixFQUFFO2dDQUNyQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87Z0NBQ2xCLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSzs2QkFDNUI7eUJBQ0YsQ0FBQyxDQUFDO3FCQUNKLENBQUMsQ0FBQztvQkFDSCxTQUFTO2lCQUNWLENBQUM7Z0JBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyw4QkFBOEIsQ0FDdEUsY0FBYyxDQUNmLENBQUM7YUFDSDtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUFBO0lBRWEsY0FBYyxDQUMxQixVQUFrQixFQUNsQixhQUFxQixFQUNyQixLQUFhLEVBQ2IsUUFBaUM7O1lBRWpDLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFFckMseURBQXlEO1lBQ3pELElBQUksVUFBVSxFQUFFO2dCQUNkLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQztvQkFDaEQsRUFBRSxFQUFFLFFBQVEsQ0FBQyxVQUFVO29CQUN2QixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7b0JBQ3JCLHFCQUFxQixFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO2lCQUM1RCxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxNQUFNLFdBQVcsR0FBRztvQkFDbEIsVUFBVTtvQkFDVixjQUFjLEVBQUUsUUFBUSxDQUFDLGNBQWM7b0JBQ3ZDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyx1QkFBdUI7b0JBQ3pELHFCQUFxQixFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO2lCQUM1RCxDQUFDO2dCQUNGLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDMUU7WUFDRCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQ25FLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQzVCLFVBQVUsRUFDVixhQUFhLEVBQ2IsY0FBYyxFQUNkLFFBQVEsQ0FBQyxXQUFXLENBQ3JCLENBQUM7UUFDSixDQUFDO0tBQUE7SUFFYSxtQkFBbUIsQ0FDL0IsVUFBa0IsRUFDbEIsYUFBcUIsRUFDckIsUUFBa0IsRUFDbEIsV0FBZ0M7O1lBRWhDLFdBQVcsR0FBRyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ2hDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDdEQsV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUVoRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsV0FBVyxDQUFDLFVBQVU7aUJBQ25CLE1BQU0sQ0FDTCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUNuRTtpQkFDQSxHQUFHLENBQUMsQ0FBTyxDQUFDLEVBQUUsRUFBRTtnQkFDZixNQUFNLE1BQU0sR0FBRztvQkFDYixVQUFVO29CQUNWLGFBQWE7b0JBQ2IsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFO29CQUN2QixhQUFhLEVBQUUsUUFBUSxDQUFDLEtBQUs7b0JBQzdCLFVBQVUsRUFBRSxDQUFDLENBQUMsV0FBVztvQkFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO2lCQUN6QixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLENBQUMsQ0FBQSxDQUFDLENBQ0wsQ0FBQztZQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixXQUFXLENBQUMsT0FBTztpQkFDaEIsTUFBTSxDQUNMLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQ2pFO2lCQUNBLEdBQUcsQ0FBQyxDQUFPLENBQUMsRUFBRSxFQUFFO2dCQUNmLE1BQU0sTUFBTSxHQUFHO29CQUNiLFVBQVU7b0JBQ1YsYUFBYTtvQkFDYixVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7b0JBQ3ZCLGFBQWEsRUFBRSxRQUFRLENBQUMsS0FBSztvQkFDN0IsVUFBVSxFQUFFLENBQUMsQ0FBQyxXQUFXO29CQUN6QixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7aUJBQ3JCLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0QsQ0FBQyxDQUFBLENBQUMsQ0FDTCxDQUFDO1lBRUYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFdBQVcsQ0FBQyxVQUFVO2lCQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ1gsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO2dCQUMxQixRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUN0QzthQUNGLENBQUMsQ0FBQztpQkFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7aUJBQ3pCLEdBQUcsQ0FBQyxDQUFPLENBQUMsRUFBRSxFQUFFO2dCQUNmLE1BQU0sTUFBTSxHQUFvQztvQkFDOUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDakIsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSztvQkFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxXQUFXO2lCQUMxQixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQSxDQUFDLENBQ0wsQ0FBQztZQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixXQUFXLENBQUMsT0FBTztpQkFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNYLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVztnQkFDMUIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDO2FBQ2pFLENBQUMsQ0FBQztpQkFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7aUJBQ3ZCLEdBQUcsQ0FBQyxDQUFPLENBQUMsRUFBRSxFQUFFO2dCQUNmLE1BQU0sTUFBTSxHQUFvQztvQkFDOUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDZixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLO29CQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFdBQVc7aUJBQzFCLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEUsQ0FBQyxDQUFBLENBQUMsQ0FDTCxDQUFDO1lBRUYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFFBQVEsQ0FBQyxVQUFVO2lCQUNoQixNQUFNLENBQ0wsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FDdEU7aUJBQ0EsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3JFLENBQUM7WUFDRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsUUFBUSxDQUFDLE9BQU87aUJBQ2IsTUFBTSxDQUNMLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQ3BFO2lCQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNyRSxDQUFDO1FBQ0osQ0FBQztLQUFBOzs7O1lBelZGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBVlEsZUFBZTtZQU5mLHVCQUF1QjtZQUR2Qix1QkFBdUI7WUFFdkIsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTHJFeGNlcHRpb24gfSBmcm9tICcuLy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcmVwYXJlZFBlcm1pc3Npb25zIH0gZnJvbSAnLi8uLi9hcGkva2V5LWV4Y2hhbmdlLnR5cGVzJztcbmltcG9ydCB7XG4gIENyZWF0ZVNjZW5hcmlvQXBwcm92YWxHcm91cHMsXG4gIFVwZGF0ZVNjZW5hcmlvQXBwcm92YWxHcm91cHMsXG59IGZyb20gJy4vYXBwcm92YWxzL3NjZW5hcmlvLWFwcHJvdmFsLnR5cGVzJztcbmltcG9ydCB7IFNjZW5hcmlvQXBwcm92ZXJTZXJ2aWNlIH0gZnJvbSAnLi9hcHByb3ZhbHMvc2NlbmFyaW8tYXBwcm92ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTY2VuYXJpb0NsYWltYW50U2VydmljZSB9IGZyb20gJy4vY2xhaW1hbnRzL3NjZW5hcmlvLWNsYWltYW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NlbmFyaW9SZWNlaXZlclNlcnZpY2UgfSBmcm9tICcuL3JlY2VpdmVycy9zY2VuYXJpby1yZWNlaXZlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFJlY2VpdmVyLFxuICBVcGRhdGVTY2VuYXJpb1JlY2VpdmVySXRlbUlucHV0LFxufSBmcm9tICcuL3JlY2VpdmVycy9zY2VuYXJpby1yZWNlaXZlci50eXBlcyc7XG5pbXBvcnQgeyBTY2VuYXJpb1NlcnZpY2UgfSBmcm9tICcuL3NjZW5hcmlvLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgTmV3U2NlbmFyaW8sXG4gIFVwZGF0ZWRTY2VuYXJpb0NsYWltYW50LFxuICBVcGRhdGVkU2NlbmFyaW9SZWNlaXZlcixcbiAgVXBkYXRlU2NlbmFyaW8sXG59IGZyb20gJy4vc2NlbmFyaW8udHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NlbmFyaW9TZXR1cFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNjZW5hcmlvU2VydmljZTogU2NlbmFyaW9TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2NlbmFyaW9DbGFpbWFudFNlcnZpY2U6IFNjZW5hcmlvQ2xhaW1hbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2NlbmFyaW9BcHByb3ZlclNlcnZpY2U6IFNjZW5hcmlvQXBwcm92ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2NlbmFyaW9SZWNlaXZlclNlcnZpY2U6IFNjZW5hcmlvUmVjZWl2ZXJTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgYXN5bmMgc2V0dXBTY2VuYXJpbyhcbiAgICBuZXdTY2VuYXJpbzogTmV3U2NlbmFyaW9cbiAgKTogUHJvbWlzZTx7IHNjZW5hcmlvSWQ6IHN0cmluZzsgZXJyb3I/OiBMckV4Y2VwdGlvbiB9PiB7XG4gICAgY29uc3Qgc2NlbmFyaW9JZCA9IGF3YWl0IHRoaXMuc2NlbmFyaW9TZXJ2aWNlLmNyZWF0ZVNjZW5hcmlvKHtcbiAgICAgIHBsYWluU3ViamVjdENpcGhlckRhdGE6IHtcbiAgICAgICAgZXZlbnQ6IG5ld1NjZW5hcmlvLmV2ZW50LFxuICAgICAgICBuYW1lOiBuZXdTY2VuYXJpby5uYW1lLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgbmV3U2NlbmFyaW8uY2xhaW1hbnRzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnVwZGF0ZUNsYWltYW50KHNjZW5hcmlvSWQsIG5ld1NjZW5hcmlvLmV2ZW50LCB4KVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzY2VuYXJpbyA9IGF3YWl0IHRoaXMuc2NlbmFyaW9TZXJ2aWNlLmdldFNjZW5hcmlvKHNjZW5hcmlvSWQpO1xuICAgICAgaWYgKG5ld1NjZW5hcmlvLmFwcHJvdmFsR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhcHByb3ZhbEdyb3VwczogQ3JlYXRlU2NlbmFyaW9BcHByb3ZhbEdyb3VwcyA9IHtcbiAgICAgICAgICBzY2VuYXJpb0lkLFxuICAgICAgICAgIGtleUlkOiBzY2VuYXJpby5rZXlJZCxcbiAgICAgICAgICBldmVudDogc2NlbmFyaW8uZXZlbnQsXG4gICAgICAgICAgc2luZ2xlUmVqZWN0OiBmYWxzZSxcbiAgICAgICAgICBxdW9ydW06IDEsXG4gICAgICAgICAgcGxhaW5Bc3NlbWJseUNpcGhlckRhdGE6IG51bGwsXG5cbiAgICAgICAgICBhcHByb3ZhbEdyb3VwczogbmV3U2NlbmFyaW8uYXBwcm92YWxHcm91cHMubWFwKCh4KSA9PiAoe1xuICAgICAgICAgICAgcXVvcnVtOiB4LnF1b3J1bSxcbiAgICAgICAgICAgIHNpbmdsZVJlamVjdDogeC5zaW5nbGVSZWplY3QsXG4gICAgICAgICAgICBwbGFpblN1YkFzc2VtYmx5Q2lwaGVyRGF0YTogeyBuYW1lOiB4Lm5hbWUgfSxcbiAgICAgICAgICAgIGFwcHJvdmVyczogeC5hcHByb3ZlcnMubWFwKCh5KSA9PiAoe1xuICAgICAgICAgICAgICB0cnVzdGVkUGFydHlJZDogeS50cnVzdGVkUGFydHlJZCxcbiAgICAgICAgICAgICAgdHJ1c3RlZFBhcnR5U2hhcmVkS2V5SWQ6IHkudHJ1c3RlZFBhcnR5U2hhcmVkS2V5SWQsXG4gICAgICAgICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YToge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHkubWVzc2FnZSxcbiAgICAgICAgICAgICAgICBldmVudDogbmV3U2NlbmFyaW8uZXZlbnQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9O1xuICAgICAgICBzY2VuYXJpby5hc3NlbWJseUtleUlkID0gYXdhaXQgdGhpcy5zY2VuYXJpb0FwcHJvdmVyU2VydmljZS5jcmVhdGVTY2VuYXJpb0FwcHJvdmVyQXNzZW1ibHkoXG4gICAgICAgICAgYXBwcm92YWxHcm91cHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBuZXdTY2VuYXJpby5yZWNlaXZlcnMubWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMudXBkYXRlUmVjZWl2ZXIoXG4gICAgICAgICAgICBzY2VuYXJpb0lkLFxuICAgICAgICAgICAgc2NlbmFyaW8uYXNzZW1ibHlLZXlJZCxcbiAgICAgICAgICAgIG5ld1NjZW5hcmlvLmV2ZW50LFxuICAgICAgICAgICAgeFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4geyBzY2VuYXJpb0lkLCBlcnJvcjogZSB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzY2VuYXJpb0lkIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlU2NlbmFyaW8odXBkYXRlU2NlbmFyaW86IFVwZGF0ZVNjZW5hcmlvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgc2NlbmFyaW9JZDogdXBkYXRlU2NlbmFyaW8uc2NlbmFyaW9JZCxcbiAgICAgIGtleUlkOiB1cGRhdGVTY2VuYXJpby5rZXlJZCxcbiAgICAgIHBsYWluU3ViamVjdENpcGhlckRhdGE6IHtcbiAgICAgICAgZXZlbnQ6IHVwZGF0ZVNjZW5hcmlvLmV2ZW50LFxuICAgICAgICBuYW1lOiB1cGRhdGVTY2VuYXJpby5uYW1lLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9TZXJ2aWNlLnVwZGF0ZVNjZW5hcmlvKHBhcmFtcyk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHVwZGF0ZVNjZW5hcmlvLmNsYWltYW50cy5tYXAoKHgpID0+XG4gICAgICAgIHRoaXMudXBkYXRlQ2xhaW1hbnQodXBkYXRlU2NlbmFyaW8uc2NlbmFyaW9JZCwgdXBkYXRlU2NlbmFyaW8uZXZlbnQsIHgpXG4gICAgICApXG4gICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHVwZGF0ZVNjZW5hcmlvLmRlbGV0ZWRDbGFpbWFudElkcy5tYXAoKHgpID0+XG4gICAgICAgIHRoaXMuc2NlbmFyaW9DbGFpbWFudFNlcnZpY2UuZGVsZXRlQ2xhaW1hbnQoeClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgYXNzZW1ibHlLZXlJZCA9IGF3YWl0IHRoaXMudXBkYXRlQXBwcm92YWxHcm91cHModXBkYXRlU2NlbmFyaW8pO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB1cGRhdGVTY2VuYXJpby5yZWNlaXZlcnMubWFwKCh4KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZVJlY2VpdmVyKFxuICAgICAgICAgIHVwZGF0ZVNjZW5hcmlvLnNjZW5hcmlvSWQsXG4gICAgICAgICAgYXNzZW1ibHlLZXlJZCxcbiAgICAgICAgICB1cGRhdGVTY2VuYXJpby5ldmVudCxcbiAgICAgICAgICB4XG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdXBkYXRlU2NlbmFyaW8uZGVsZXRlZFJlY2VpdmVySWRzLm1hcCgoeCkgPT5cbiAgICAgICAgdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS5kZWxldGVSZWNlaXZlcih4KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNsYWltYW50KFxuICAgIHNjZW5hcmlvSWQ6IHN0cmluZyxcbiAgICBldmVudDogc3RyaW5nLFxuICAgIGNsYWltYW50OiBVcGRhdGVkU2NlbmFyaW9DbGFpbWFudFxuICApIHtcbiAgICBpZiAoY2xhaW1hbnQuY2xhaW1hbnRJZCkge1xuICAgICAgYXdhaXQgdGhpcy5zY2VuYXJpb0NsYWltYW50U2VydmljZS51cGRhdGVDbGFpbWFudCh7XG4gICAgICAgIGlkOiBjbGFpbWFudC5jbGFpbWFudElkLFxuICAgICAgICBrZXlJZDogY2xhaW1hbnQua2V5SWQsXG4gICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YTogeyBtZXNzYWdlOiBjbGFpbWFudC5tZXNzYWdlLCBldmVudCB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9DbGFpbWFudFNlcnZpY2UuYWRkQ2xhaW1hbnQoe1xuICAgICAgICBzY2VuYXJpb0lkLFxuICAgICAgICB0cnVzdGVkUGFydHlJZDogY2xhaW1hbnQudHJ1c3RlZFBhcnR5SWQsXG4gICAgICAgIHRydXN0ZWRQYXJ0eVNoYXJlZEtleUlkOiBjbGFpbWFudC50cnVzdGVkUGFydHlTaGFyZWRLZXlJZCxcbiAgICAgICAgcGxhaW5TaGFyZWRDaXBoZXJEYXRhOiB7IG1lc3NhZ2U6IGNsYWltYW50Lm1lc3NhZ2UsIGV2ZW50IH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUFwcHJvdmFsR3JvdXBzKFxuICAgIHVwZGF0ZVNjZW5hcmlvOiBVcGRhdGVTY2VuYXJpb1xuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICh1cGRhdGVTY2VuYXJpby5hc3NlbWJseUtleUlkKSB7XG4gICAgICBpZiAodXBkYXRlU2NlbmFyaW8uYXBwcm92YWxHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGFwcHJvdmFsR3JvdXBzOiBVcGRhdGVTY2VuYXJpb0FwcHJvdmFsR3JvdXBzID0ge1xuICAgICAgICAgIHNjZW5hcmlvSWQ6IHVwZGF0ZVNjZW5hcmlvLnNjZW5hcmlvSWQsXG4gICAgICAgICAgYXNzZW1ibHlLZXlJZDogdXBkYXRlU2NlbmFyaW8uYXNzZW1ibHlLZXlJZCxcblxuICAgICAgICAgIHNpbmdsZVJlamVjdDogZmFsc2UsXG4gICAgICAgICAgcXVvcnVtOiAxLFxuXG4gICAgICAgICAgYXBwcm92YWxHcm91cHM6IHVwZGF0ZVNjZW5hcmlvLmFwcHJvdmFsR3JvdXBzLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgICAgIHN1YkFzc2VtYmx5SWQ6IHguc3ViQXNzZW1ibHlJZCxcbiAgICAgICAgICAgIHF1b3J1bTogeC5xdW9ydW0sXG4gICAgICAgICAgICBzaW5nbGVSZWplY3Q6IHguc2luZ2xlUmVqZWN0LFxuICAgICAgICAgICAgcGxhaW5TdWJBc3NlbWJseUNpcGhlckRhdGE6IHsgbmFtZTogeC5uYW1lIH0sXG4gICAgICAgICAgICBhcHByb3ZlcnM6IHguYXBwcm92ZXJzLm1hcCgoeSkgPT4gKHtcbiAgICAgICAgICAgICAgYXBwcm92ZXJJZDogeS5hcHByb3ZlcklkLFxuICAgICAgICAgICAgICBrZXlJZDogeS5rZXlJZCxcbiAgICAgICAgICAgICAgdHJ1c3RlZFBhcnR5SWQ6IHkudHJ1c3RlZFBhcnR5SWQsXG4gICAgICAgICAgICAgIHRydXN0ZWRQYXJ0eVNoYXJlZEtleUlkOiB5LnRydXN0ZWRQYXJ0eVNoYXJlZEtleUlkLFxuICAgICAgICAgICAgICBwbGFpblNoYXJlZENpcGhlckRhdGE6IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB5Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHVwZGF0ZVNjZW5hcmlvLmV2ZW50LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgZGVsZXRlZEFwcHJvdmVySWRzOiB4LmRlbGV0ZWRBcHByb3ZlcklkcyxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgZGVsZXRlZEdyb3VwSWRzOiB1cGRhdGVTY2VuYXJpby5kZWxldGVkR3JvdXBJZHMsXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9BcHByb3ZlclNlcnZpY2UudXBkYXRlU2NlbmFyaW9BcHByb3ZlckFzc2VtYmx5KFxuICAgICAgICAgIGFwcHJvdmFsR3JvdXBzXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1cGRhdGVTY2VuYXJpby5hc3NlbWJseUtleUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyByZWNlaXZlcnMgfSA9IGF3YWl0IHRoaXMuc2NlbmFyaW9TZXJ2aWNlLmdldFNjZW5hcmlvKFxuICAgICAgICAgIHVwZGF0ZVNjZW5hcmlvLnNjZW5hcmlvSWRcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zY2VuYXJpb0FwcHJvdmVyU2VydmljZS5kZWxldGVTY2VuYXJpb0FwcHJvdmVyQXNzZW1ibHkoXG4gICAgICAgICAgdXBkYXRlU2NlbmFyaW8uc2NlbmFyaW9JZCxcbiAgICAgICAgICB1cGRhdGVTY2VuYXJpby5ldmVudCxcbiAgICAgICAgICByZWNlaXZlcnNcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyB1cGRhdGUgb3IgZGVsZXRlXG4gICAgfSBlbHNlIGlmICh1cGRhdGVTY2VuYXJpby5hcHByb3ZhbEdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHsgcmVjZWl2ZXJzIH0gPSBhd2FpdCB0aGlzLnNjZW5hcmlvU2VydmljZS5nZXRTY2VuYXJpbyhcbiAgICAgICAgdXBkYXRlU2NlbmFyaW8uc2NlbmFyaW9JZFxuICAgICAgKTtcblxuICAgICAgY29uc3QgYXBwcm92YWxHcm91cHM6IENyZWF0ZVNjZW5hcmlvQXBwcm92YWxHcm91cHMgPSB7XG4gICAgICAgIHNjZW5hcmlvSWQ6IHVwZGF0ZVNjZW5hcmlvLnNjZW5hcmlvSWQsXG4gICAgICAgIGtleUlkOiB1cGRhdGVTY2VuYXJpby5rZXlJZCxcbiAgICAgICAgZXZlbnQ6IHVwZGF0ZVNjZW5hcmlvLmV2ZW50LFxuICAgICAgICBzaW5nbGVSZWplY3Q6IGZhbHNlLFxuICAgICAgICBxdW9ydW06IDEsXG4gICAgICAgIGFwcHJvdmFsR3JvdXBzOiB1cGRhdGVTY2VuYXJpby5hcHByb3ZhbEdyb3Vwcy5tYXAoKHgpID0+ICh7XG4gICAgICAgICAgcXVvcnVtOiB4LnF1b3J1bSxcbiAgICAgICAgICBzaW5nbGVSZWplY3Q6IHguc2luZ2xlUmVqZWN0LFxuICAgICAgICAgIHBsYWluU3ViQXNzZW1ibHlDaXBoZXJEYXRhOiB7IG5hbWU6IHgubmFtZSB9LFxuICAgICAgICAgIGFwcHJvdmVyczogeC5hcHByb3ZlcnMubWFwKCh5KSA9PiAoe1xuICAgICAgICAgICAgdHJ1c3RlZFBhcnR5SWQ6IHkudHJ1c3RlZFBhcnR5SWQsXG4gICAgICAgICAgICB0cnVzdGVkUGFydHlTaGFyZWRLZXlJZDogeS50cnVzdGVkUGFydHlTaGFyZWRLZXlJZCxcbiAgICAgICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YToge1xuICAgICAgICAgICAgICBtZXNzYWdlOiB5Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgIGV2ZW50OiB1cGRhdGVTY2VuYXJpby5ldmVudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSksXG4gICAgICAgIHJlY2VpdmVycyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zY2VuYXJpb0FwcHJvdmVyU2VydmljZS5jcmVhdGVTY2VuYXJpb0FwcHJvdmVyQXNzZW1ibHkoXG4gICAgICAgIGFwcHJvdmFsR3JvdXBzXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUmVjZWl2ZXIoXG4gICAgc2NlbmFyaW9JZDogc3RyaW5nLFxuICAgIGFzc2VtYmx5S2V5SWQ6IHN0cmluZyxcbiAgICBldmVudDogc3RyaW5nLFxuICAgIHJlY2VpdmVyOiBVcGRhdGVkU2NlbmFyaW9SZWNlaXZlclxuICApIHtcbiAgICBsZXQgcmVjZWl2ZXJJZCA9IHJlY2VpdmVyLnJlY2VpdmVySWQ7XG5cbiAgICAvLyBDdXJyZW50bHkgZGVsZXRpbmcgYWxsIHJlY2VpdmVycyBiZWxvdyBhc3NlbWJseSBsb2dpYy5cbiAgICBpZiAocmVjZWl2ZXJJZCkge1xuICAgICAgYXdhaXQgdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS51cGRhdGVSZWNlaXZlcih7XG4gICAgICAgIGlkOiByZWNlaXZlci5yZWNlaXZlcklkLFxuICAgICAgICBrZXlJZDogcmVjZWl2ZXIua2V5SWQsXG4gICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YTogeyBtZXNzYWdlOiByZWNlaXZlci5tZXNzYWdlLCBldmVudCB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1JlY2VpdmVyID0ge1xuICAgICAgICBzY2VuYXJpb0lkLFxuICAgICAgICB0cnVzdGVkUGFydHlJZDogcmVjZWl2ZXIudHJ1c3RlZFBhcnR5SWQsXG4gICAgICAgIHRydXN0ZWRQYXJ0eVNoYXJlZEtleUlkOiByZWNlaXZlci50cnVzdGVkUGFydHlTaGFyZWRLZXlJZCxcbiAgICAgICAgcGxhaW5TaGFyZWRDaXBoZXJEYXRhOiB7IG1lc3NhZ2U6IHJlY2VpdmVyLm1lc3NhZ2UsIGV2ZW50IH0sXG4gICAgICB9O1xuICAgICAgcmVjZWl2ZXJJZCA9IGF3YWl0IHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UuYWRkUmVjZWl2ZXIobmV3UmVjZWl2ZXIpO1xuICAgIH1cbiAgICBjb25zdCBsb2FkZWRSZWNlaXZlciA9IGF3YWl0IHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UuZ2V0UmVjZWl2ZXIoXG4gICAgICByZWNlaXZlcklkXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJlY2VpdmVySXRlbXMoXG4gICAgICBzY2VuYXJpb0lkLFxuICAgICAgYXNzZW1ibHlLZXlJZCxcbiAgICAgIGxvYWRlZFJlY2VpdmVyLFxuICAgICAgcmVjZWl2ZXIucGVybWlzc2lvbnNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVSZWNlaXZlckl0ZW1zKFxuICAgIHNjZW5hcmlvSWQ6IHN0cmluZyxcbiAgICBhc3NlbWJseUtleUlkOiBzdHJpbmcsXG4gICAgcmVjZWl2ZXI6IFJlY2VpdmVyLFxuICAgIHBlcm1pc3Npb25zOiBQcmVwYXJlZFBlcm1pc3Npb25zXG4gICkge1xuICAgIHBlcm1pc3Npb25zID0gcGVybWlzc2lvbnMgfHwge307XG4gICAgcGVybWlzc2lvbnMuY2F0ZWdvcmllcyA9IHBlcm1pc3Npb25zLmNhdGVnb3JpZXMgfHwgW107XG4gICAgcGVybWlzc2lvbnMucmVjb3JkcyA9IHBlcm1pc3Npb25zLnJlY29yZHMgfHwgW107XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHBlcm1pc3Npb25zLmNhdGVnb3JpZXNcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICFyZWNlaXZlci5jYXRlZ29yaWVzLnNvbWUoKHkpID0+IHkuY2F0ZWdvcnkuaWQgPT09IHguY2F0ZWdvcnlJZClcbiAgICAgICAgKVxuICAgICAgICAubWFwKGFzeW5jICh4KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgc2NlbmFyaW9JZCxcbiAgICAgICAgICAgIGFzc2VtYmx5S2V5SWQsXG4gICAgICAgICAgICByZWNlaXZlcklkOiByZWNlaXZlci5pZCxcbiAgICAgICAgICAgIHJlY2VpdmVyS2V5SWQ6IHJlY2VpdmVyLmtleUlkLFxuICAgICAgICAgICAgYWNjZXNzUm9sZTogeC5hY2Nlc3NMZXZlbCxcbiAgICAgICAgICAgIGNhdGVnb3J5SWQ6IHguY2F0ZWdvcnlJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UuYWRkUmVjZWl2ZXJDYXRlZ29yeShwYXJhbXMpO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwZXJtaXNzaW9ucy5yZWNvcmRzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKHgpID0+ICFyZWNlaXZlci5yZWNvcmRzLnNvbWUoKHkpID0+IHkucmVjb3JkLmlkID09PSB4LnJlY29yZElkKVxuICAgICAgICApXG4gICAgICAgIC5tYXAoYXN5bmMgKHgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICBzY2VuYXJpb0lkLFxuICAgICAgICAgICAgYXNzZW1ibHlLZXlJZCxcbiAgICAgICAgICAgIHJlY2VpdmVySWQ6IHJlY2VpdmVyLmlkLFxuICAgICAgICAgICAgcmVjZWl2ZXJLZXlJZDogcmVjZWl2ZXIua2V5SWQsXG4gICAgICAgICAgICBhY2Nlc3NSb2xlOiB4LmFjY2Vzc0xldmVsLFxuICAgICAgICAgICAgcmVjb3JkSWQ6IHgucmVjb3JkSWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNjZW5hcmlvUmVjZWl2ZXJTZXJ2aWNlLmFkZFJlY2VpdmVyUmVjb3JkKHBhcmFtcyk7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcGVybWlzc2lvbnMuY2F0ZWdvcmllc1xuICAgICAgICAubWFwKCh4KSA9PiAoe1xuICAgICAgICAgIGFjY2Vzc0xldmVsOiB4LmFjY2Vzc0xldmVsLFxuICAgICAgICAgIGNhdGVnb3J5OiByZWNlaXZlci5jYXRlZ29yaWVzLmZpbmQoXG4gICAgICAgICAgICAoeSkgPT4geS5jYXRlZ29yeS5pZCA9PT0geC5jYXRlZ29yeUlkXG4gICAgICAgICAgKSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguY2F0ZWdvcnkpXG4gICAgICAgIC5tYXAoYXN5bmMgKHgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJhbXM6IFVwZGF0ZVNjZW5hcmlvUmVjZWl2ZXJJdGVtSW5wdXQgPSB7XG4gICAgICAgICAgICBpZDogeC5jYXRlZ29yeS5pZCxcbiAgICAgICAgICAgIGtleUlkOiB4LmNhdGVnb3J5LmtleUlkLFxuICAgICAgICAgICAgYWNjZXNzUm9sZTogeC5hY2Nlc3NMZXZlbCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UudXBkYXRlUmVjZWl2ZXJJdGVtKHBhcmFtcyk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHBlcm1pc3Npb25zLnJlY29yZHNcbiAgICAgICAgLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgICBhY2Nlc3NMZXZlbDogeC5hY2Nlc3NMZXZlbCxcbiAgICAgICAgICByZWNvcmQ6IHJlY2VpdmVyLnJlY29yZHMuZmluZCgoeSkgPT4geS5yZWNvcmQuaWQgPT09IHgucmVjb3JkSWQpLFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcigoeCkgPT4geC5yZWNvcmQpXG4gICAgICAgIC5tYXAoYXN5bmMgKHgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJhbXM6IFVwZGF0ZVNjZW5hcmlvUmVjZWl2ZXJJdGVtSW5wdXQgPSB7XG4gICAgICAgICAgICBpZDogeC5yZWNvcmQuaWQsXG4gICAgICAgICAgICBrZXlJZDogeC5yZWNvcmQua2V5SWQsXG4gICAgICAgICAgICBhY2Nlc3NSb2xlOiB4LmFjY2Vzc0xldmVsLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS51cGRhdGVSZWNlaXZlckl0ZW0ocGFyYW1zKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICByZWNlaXZlci5jYXRlZ29yaWVzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICAhcGVybWlzc2lvbnMuY2F0ZWdvcmllcy5zb21lKCh5KSA9PiB5LmNhdGVnb3J5SWQgPT09IHguY2F0ZWdvcnkuaWQpXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoeCkgPT4gdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS5kZWxldGVSZWNlaXZlckl0ZW0oeC5pZCkpXG4gICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJlY2VpdmVyLnJlY29yZHNcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoeCkgPT4gIXBlcm1pc3Npb25zLnJlY29yZHMuc29tZSgoeSkgPT4geS5yZWNvcmRJZCA9PT0geC5yZWNvcmQuaWQpXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoeCkgPT4gdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS5kZWxldGVSZWNlaXZlckl0ZW0oeC5pZCkpXG4gICAgKTtcbiAgfVxufVxuIl19
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { ScenarioApproverService } from './approvals/scenario-approver.service';
4
+ import { ScenarioClaimantService } from './claimants/scenario-claimant.service';
5
+ import { ScenarioReceiverService } from './receivers/scenario-receiver.service';
6
+ import { ScenarioService } from './scenario.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./scenario.service";
9
+ import * as i2 from "./claimants/scenario-claimant.service";
10
+ import * as i3 from "./approvals/scenario-approver.service";
11
+ import * as i4 from "./receivers/scenario-receiver.service";
12
+ export class ScenarioSetupService {
13
+ constructor(scenarioService, scenarioClaimantService, scenarioApproverService, scenarioReceiverService) {
14
+ this.scenarioService = scenarioService;
15
+ this.scenarioClaimantService = scenarioClaimantService;
16
+ this.scenarioApproverService = scenarioApproverService;
17
+ this.scenarioReceiverService = scenarioReceiverService;
18
+ }
19
+ setupScenario(newScenario) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const scenarioId = yield this.scenarioService.createScenario({
22
+ plainSubjectCipherData: {
23
+ event: newScenario.event,
24
+ name: newScenario.name,
25
+ },
26
+ });
27
+ try {
28
+ yield Promise.all(newScenario.claimants.map((x) => this.updateClaimant(scenarioId, newScenario.event, x)));
29
+ const scenario = yield this.scenarioService.getScenario(scenarioId);
30
+ if (newScenario.approvalGroups.length) {
31
+ const approvalGroups = {
32
+ scenarioId,
33
+ keyId: scenario.keyId,
34
+ event: scenario.event,
35
+ singleReject: false,
36
+ quorum: 1,
37
+ plainAssemblyCipherData: null,
38
+ approvalGroups: newScenario.approvalGroups.map((x) => ({
39
+ quorum: x.quorum,
40
+ singleReject: x.singleReject,
41
+ plainSubAssemblyCipherData: { name: x.name },
42
+ approvers: x.approvers.map((y) => ({
43
+ trustedPartyId: y.trustedPartyId,
44
+ trustedPartySharedKeyId: y.trustedPartySharedKeyId,
45
+ plainSharedCipherData: {
46
+ message: y.message,
47
+ event: newScenario.event,
48
+ },
49
+ })),
50
+ })),
51
+ };
52
+ scenario.assemblyKeyId = yield this.scenarioApproverService.createScenarioApproverAssembly(approvalGroups);
53
+ }
54
+ yield Promise.all(newScenario.receivers.map((x) => this.updateReceiver(scenarioId, scenario.assemblyKeyId, newScenario.event, x)));
55
+ }
56
+ catch (e) {
57
+ return { scenarioId, error: e };
58
+ }
59
+ return { scenarioId };
60
+ });
61
+ }
62
+ updateScenario(updateScenario) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const params = {
65
+ scenarioId: updateScenario.scenarioId,
66
+ keyId: updateScenario.keyId,
67
+ plainSubjectCipherData: {
68
+ event: updateScenario.event,
69
+ name: updateScenario.name,
70
+ },
71
+ };
72
+ yield this.scenarioService.updateScenario(params);
73
+ yield Promise.all(updateScenario.claimants.map((x) => this.updateClaimant(updateScenario.scenarioId, updateScenario.event, x)));
74
+ yield Promise.all(updateScenario.deletedClaimantIds.map((x) => this.scenarioClaimantService.deleteClaimant(x)));
75
+ const assemblyKeyId = yield this.updateApprovalGroups(updateScenario);
76
+ yield Promise.all(updateScenario.receivers.map((x) => this.updateReceiver(updateScenario.scenarioId, assemblyKeyId, updateScenario.event, x)));
77
+ yield Promise.all(updateScenario.deletedReceiverIds.map((x) => this.scenarioReceiverService.deleteReceiver(x)));
78
+ });
79
+ }
80
+ updateClaimant(scenarioId, event, claimant) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ if (claimant.claimantId) {
83
+ yield this.scenarioClaimantService.updateClaimant({
84
+ id: claimant.claimantId,
85
+ keyId: claimant.keyId,
86
+ plainSharedCipherData: { message: claimant.message, event },
87
+ });
88
+ }
89
+ else {
90
+ yield this.scenarioClaimantService.addClaimant({
91
+ scenarioId,
92
+ trustedPartyId: claimant.trustedPartyId,
93
+ trustedPartySharedKeyId: claimant.trustedPartySharedKeyId,
94
+ plainSharedCipherData: { message: claimant.message, event },
95
+ });
96
+ }
97
+ });
98
+ }
99
+ updateApprovalGroups(updateScenario) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ if (updateScenario.assemblyKeyId) {
102
+ if (updateScenario.approvalGroups.length) {
103
+ const approvalGroups = {
104
+ scenarioId: updateScenario.scenarioId,
105
+ assemblyKeyId: updateScenario.assemblyKeyId,
106
+ singleReject: false,
107
+ quorum: 1,
108
+ approvalGroups: updateScenario.approvalGroups.map((x) => ({
109
+ subAssemblyId: x.subAssemblyId,
110
+ quorum: x.quorum,
111
+ singleReject: x.singleReject,
112
+ plainSubAssemblyCipherData: { name: x.name },
113
+ approvers: x.approvers.map((y) => ({
114
+ approverId: y.approverId,
115
+ keyId: y.keyId,
116
+ trustedPartyId: y.trustedPartyId,
117
+ trustedPartySharedKeyId: y.trustedPartySharedKeyId,
118
+ plainSharedCipherData: {
119
+ message: y.message,
120
+ event: updateScenario.event,
121
+ },
122
+ })),
123
+ deletedApproverIds: x.deletedApproverIds,
124
+ })),
125
+ deletedGroupIds: updateScenario.deletedGroupIds,
126
+ };
127
+ yield this.scenarioApproverService.updateScenarioApproverAssembly(approvalGroups);
128
+ return updateScenario.assemblyKeyId;
129
+ }
130
+ else {
131
+ const { receivers } = yield this.scenarioService.getScenario(updateScenario.scenarioId);
132
+ yield this.scenarioApproverService.deleteScenarioApproverAssembly(updateScenario.scenarioId, updateScenario.event, receivers);
133
+ return null;
134
+ }
135
+ // update or delete
136
+ }
137
+ else if (updateScenario.approvalGroups.length) {
138
+ const { receivers } = yield this.scenarioService.getScenario(updateScenario.scenarioId);
139
+ const approvalGroups = {
140
+ scenarioId: updateScenario.scenarioId,
141
+ keyId: updateScenario.keyId,
142
+ event: updateScenario.event,
143
+ singleReject: false,
144
+ quorum: 1,
145
+ approvalGroups: updateScenario.approvalGroups.map((x) => ({
146
+ quorum: x.quorum,
147
+ singleReject: x.singleReject,
148
+ plainSubAssemblyCipherData: { name: x.name },
149
+ approvers: x.approvers.map((y) => ({
150
+ trustedPartyId: y.trustedPartyId,
151
+ trustedPartySharedKeyId: y.trustedPartySharedKeyId,
152
+ plainSharedCipherData: {
153
+ message: y.message,
154
+ event: updateScenario.event,
155
+ },
156
+ })),
157
+ })),
158
+ receivers,
159
+ };
160
+ return yield this.scenarioApproverService.createScenarioApproverAssembly(approvalGroups);
161
+ }
162
+ return null;
163
+ });
164
+ }
165
+ updateReceiver(scenarioId, assemblyKeyId, event, receiver) {
166
+ return __awaiter(this, void 0, void 0, function* () {
167
+ let receiverId = receiver.receiverId;
168
+ // Currently deleting all receivers below assembly logic.
169
+ if (receiverId) {
170
+ yield this.scenarioReceiverService.updateReceiver({
171
+ id: receiver.receiverId,
172
+ keyId: receiver.keyId,
173
+ plainSharedCipherData: { message: receiver.message, event },
174
+ });
175
+ }
176
+ else {
177
+ const newReceiver = {
178
+ scenarioId,
179
+ trustedPartyId: receiver.trustedPartyId,
180
+ trustedPartySharedKeyId: receiver.trustedPartySharedKeyId,
181
+ plainSharedCipherData: { message: receiver.message, event },
182
+ };
183
+ receiverId = yield this.scenarioReceiverService.addReceiver(newReceiver);
184
+ }
185
+ const loadedReceiver = yield this.scenarioReceiverService.getReceiver(receiverId);
186
+ yield this.updateReceiverItems(scenarioId, assemblyKeyId, loadedReceiver, receiver.permissions);
187
+ });
188
+ }
189
+ updateReceiverItems(scenarioId, assemblyKeyId, receiver, permissions) {
190
+ return __awaiter(this, void 0, void 0, function* () {
191
+ permissions = permissions || {};
192
+ permissions.categories = permissions.categories || [];
193
+ permissions.records = permissions.records || [];
194
+ yield Promise.all(permissions.categories
195
+ .filter((x) => !receiver.categories.some((y) => y.category.id === x.categoryId))
196
+ .map((x) => __awaiter(this, void 0, void 0, function* () {
197
+ const params = {
198
+ scenarioId,
199
+ assemblyKeyId,
200
+ receiverId: receiver.id,
201
+ receiverKeyId: receiver.keyId,
202
+ accessRole: x.accessLevel,
203
+ categoryId: x.categoryId,
204
+ };
205
+ yield this.scenarioReceiverService.addReceiverCategory(params);
206
+ })));
207
+ yield Promise.all(permissions.records
208
+ .filter((x) => !receiver.records.some((y) => y.record.id === x.recordId))
209
+ .map((x) => __awaiter(this, void 0, void 0, function* () {
210
+ const params = {
211
+ scenarioId,
212
+ assemblyKeyId,
213
+ receiverId: receiver.id,
214
+ receiverKeyId: receiver.keyId,
215
+ accessRole: x.accessLevel,
216
+ recordId: x.recordId,
217
+ };
218
+ yield this.scenarioReceiverService.addReceiverRecord(params);
219
+ })));
220
+ yield Promise.all(permissions.categories
221
+ .map((x) => ({
222
+ accessLevel: x.accessLevel,
223
+ category: receiver.categories.find((y) => y.category.id === x.categoryId),
224
+ }))
225
+ .filter((x) => x.category)
226
+ .map((x) => __awaiter(this, void 0, void 0, function* () {
227
+ const params = {
228
+ id: x.category.id,
229
+ keyId: x.category.keyId,
230
+ accessRole: x.accessLevel,
231
+ };
232
+ yield this.scenarioReceiverService.updateReceiverItem(params);
233
+ })));
234
+ yield Promise.all(permissions.records
235
+ .map((x) => ({
236
+ accessLevel: x.accessLevel,
237
+ record: receiver.records.find((y) => y.record.id === x.recordId),
238
+ }))
239
+ .filter((x) => x.record)
240
+ .map((x) => __awaiter(this, void 0, void 0, function* () {
241
+ const params = {
242
+ id: x.record.id,
243
+ keyId: x.record.keyId,
244
+ accessRole: x.accessLevel,
245
+ };
246
+ yield this.scenarioReceiverService.updateReceiverItem(params);
247
+ })));
248
+ yield Promise.all(receiver.categories
249
+ .filter((x) => !permissions.categories.some((y) => y.categoryId === x.category.id))
250
+ .map((x) => this.scenarioReceiverService.deleteReceiverItem(x.id)));
251
+ yield Promise.all(receiver.records
252
+ .filter((x) => !permissions.records.some((y) => y.recordId === x.record.id))
253
+ .map((x) => this.scenarioReceiverService.deleteReceiverItem(x.id)));
254
+ });
255
+ }
256
+ }
257
+ ScenarioSetupService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ScenarioSetupService_Factory() { return new ScenarioSetupService(i0.ɵɵinject(i1.ScenarioService), i0.ɵɵinject(i2.ScenarioClaimantService), i0.ɵɵinject(i3.ScenarioApproverService), i0.ɵɵinject(i4.ScenarioReceiverService)); }, token: ScenarioSetupService, providedIn: "root" });
258
+ ScenarioSetupService.decorators = [
259
+ { type: Injectable, args: [{
260
+ providedIn: 'root',
261
+ },] }
262
+ ];
263
+ ScenarioSetupService.ctorParameters = () => [
264
+ { type: ScenarioService },
265
+ { type: ScenarioClaimantService },
266
+ { type: ScenarioApproverService },
267
+ { type: ScenarioReceiverService }
268
+ ];
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8tc2V0dXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9uZXdyZXBvL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zY2VuYXJpby9zY2VuYXJpby1zZXR1cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBS2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBV3JELE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsWUFDVSxlQUFnQyxFQUNoQyx1QkFBZ0QsRUFDaEQsdUJBQWdELEVBQ2hELHVCQUFnRDtRQUhoRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7SUFDdkQsQ0FBQztJQUVTLGFBQWEsQ0FDeEIsV0FBd0I7O1lBRXhCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUM7Z0JBQzNELHNCQUFzQixFQUFFO29CQUN0QixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7b0JBQ3hCLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtpQkFDdkI7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJO2dCQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFF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QyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUN0RTtpQkFDQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDckUsQ0FBQztZQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixRQUFRLENBQUMsT0FBTztpQkFDYixNQUFNLENBQ0wsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FDcEU7aUJBQ0EsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3JFLENBQUM7UUFDSixDQUFDO0tBQUE7Ozs7WUF6VkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFWUSxlQUFlO1lBTmYsdUJBQXVCO1lBRHZCLHVCQUF1QjtZQUV2Qix1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMckV4Y2VwdGlvbiB9IGZyb20gJy4vLi4vX2NvbW1vbi9leGNlcHRpb25zJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcmVwYXJlZFBlcm1pc3Npb25zIH0gZnJvbSAnLi8uLi9hcGkva2V5LWV4Y2hhbmdlLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBDcmVhdGVTY2VuYXJpb0FwcHJvdmFsR3JvdXBzLFxyXG4gIFVwZGF0ZVNjZW5hcmlvQXBwcm92YWxHcm91cHMsXHJcbn0gZnJvbSAnLi9hcHByb3ZhbHMvc2NlbmFyaW8tYXBwcm92YWwudHlwZXMnO1xyXG5pbXBvcnQgeyBTY2VuYXJpb0FwcHJvdmVyU2VydmljZSB9IGZyb20gJy4vYXBwcm92YWxzL3NjZW5hcmlvLWFwcHJvdmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTY2VuYXJpb0NsYWltYW50U2VydmljZSB9IGZyb20gJy4vY2xhaW1hbnRzL3NjZW5hcmlvLWNsYWltYW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTY2VuYXJpb1JlY2VpdmVyU2VydmljZSB9IGZyb20gJy4vcmVjZWl2ZXJzL3NjZW5hcmlvLXJlY2VpdmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFJlY2VpdmVyLFxyXG4gIFVwZGF0ZVNjZW5hcmlvUmVjZWl2ZXJJdGVtSW5wdXQsXHJcbn0gZnJvbSAnLi9yZWNlaXZlcnMvc2NlbmFyaW8tcmVjZWl2ZXIudHlwZXMnO1xyXG5pbXBvcnQgeyBTY2VuYXJpb1NlcnZpY2UgfSBmcm9tICcuL3NjZW5hcmlvLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIE5ld1NjZW5hcmlvLFxyXG4gIFVwZGF0ZWRTY2VuYXJpb0NsYWltYW50LFxyXG4gIFVwZGF0ZWRTY2VuYXJpb1JlY2VpdmVyLFxyXG4gIFVwZGF0ZVNjZW5hcmlvLFxyXG59IGZyb20gJy4vc2NlbmFyaW8udHlwZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjZW5hcmlvU2V0dXBTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2NlbmFyaW9TZXJ2aWNlOiBTY2VuYXJpb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNjZW5hcmlvQ2xhaW1hbnRTZXJ2aWNlOiBTY2VuYXJpb0NsYWltYW50U2VydmljZSxcclxuICAgIHByaXZhdGUgc2NlbmFyaW9BcHByb3ZlclNlcnZpY2U6IFNjZW5hcmlvQXBwcm92ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzY2VuYXJpb1JlY2VpdmVyU2VydmljZTogU2NlbmFyaW9SZWNlaXZlclNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXR1cFNjZW5hcmlvKFxyXG4gICAgbmV3U2NlbmFyaW86IE5ld1NjZW5hcmlvXHJcbiAgKTogUHJvbWlzZTx7IHNjZW5hcmlvSWQ6IHN0cmluZzsgZXJyb3I/OiBMckV4Y2VwdGlvbiB9PiB7XHJcbiAgICBjb25zdCBzY2VuYXJpb0lkID0gYXdhaXQgdGhpcy5zY2VuYXJpb1NlcnZpY2UuY3JlYXRlU2NlbmFyaW8oe1xyXG4gICAgICBwbGFpblN1YmplY3RDaXBoZXJEYXRhOiB7XHJcbiAgICAgICAgZXZlbnQ6IG5ld1NjZW5hcmlvLmV2ZW50LFxyXG4gICAgICAgIG5hbWU6IG5ld1NjZW5hcmlvLm5hbWUsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBuZXdTY2VuYXJpby5jbGFpbWFudHMubWFwKCh4KSA9PlxyXG4gICAgICAgICAgdGhpcy51cGRhdGVDbGFpbWFudChzY2VuYXJpb0lkLCBuZXdTY2VuYXJpby5ldmVudCwgeClcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBzY2VuYXJpbyA9IGF3YWl0IHRoaXMuc2NlbmFyaW9TZXJ2aWNlLmdldFNjZW5hcmlvKHNjZW5hcmlvSWQpO1xyXG4gICAgICBpZiAobmV3U2NlbmFyaW8uYXBwcm92YWxHcm91cHMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwcm92YWxHcm91cHM6IENyZWF0ZVNjZW5hcmlvQXBwcm92YWxHcm91cHMgPSB7XHJcbiAgICAgICAgICBzY2VuYXJpb0lkLFxyXG4gICAgICAgICAga2V5SWQ6IHNjZW5hcmlvLmtleUlkLFxyXG4gICAgICAgICAgZXZlbnQ6IHNjZW5hcmlvLmV2ZW50LFxyXG4gICAgICAgICAgc2luZ2xlUmVqZWN0OiBmYWxzZSxcclxuICAgICAgICAgIHF1b3J1bTogMSxcclxuICAgICAgICAgIHBsYWluQXNzZW1ibHlDaXBoZXJEYXRhOiBudWxsLFxyXG5cclxuICAgICAgICAgIGFwcHJvdmFsR3JvdXBzOiBuZXdTY2VuYXJpby5hcHByb3ZhbEdyb3Vwcy5tYXAoKHgpID0+ICh7XHJcbiAgICAgICAgICAgIHF1b3J1bTogeC5xdW9ydW0sXHJcbiAgICAgICAgICAgIHNpbmdsZVJlamVjdDogeC5zaW5nbGVSZWplY3QsXHJcbiAgICAgICAgICAgIHBsYWluU3ViQXNzZW1ibHlDaXBoZXJEYXRhOiB7IG5hbWU6IHgubmFtZSB9LFxyXG4gICAgICAgICAgICBhcHByb3ZlcnM6IHguYXBwcm92ZXJzLm1hcCgoeSkgPT4gKHtcclxuICAgICAgICAgICAgICB0cnVzdGVkUGFydHlJZDogeS50cnVzdGVkUGFydHlJZCxcclxuICAgICAgICAgICAgICB0cnVzdGVkUGFydHlTaGFyZWRLZXlJZDogeS50cnVzdGVkUGFydHlTaGFyZWRLZXlJZCxcclxuICAgICAgICAgICAgICBwbGFpblNoYXJlZENpcGhlckRhdGE6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHkubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBuZXdTY2VuYXJpby5ldmVudCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICB9KSksXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzY2VuYXJpby5hc3NlbWJseUtleUlkID0gYXdhaXQgdGhpcy5zY2VuYXJpb0FwcHJvdmVyU2VydmljZS5jcmVhdGVTY2VuYXJpb0FwcHJvdmVyQXNzZW1ibHkoXHJcbiAgICAgICAgICBhcHByb3ZhbEdyb3Vwc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgbmV3U2NlbmFyaW8ucmVjZWl2ZXJzLm1hcCgoeCkgPT5cclxuICAgICAgICAgIHRoaXMudXBkYXRlUmVjZWl2ZXIoXHJcbiAgICAgICAgICAgIHNjZW5hcmlvSWQsXHJcbiAgICAgICAgICAgIHNjZW5hcmlvLmFzc2VtYmx5S2V5SWQsXHJcbiAgICAgICAgICAgIG5ld1NjZW5hcmlvLmV2ZW50LFxyXG4gICAgICAgICAgICB4XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICByZXR1cm4geyBzY2VuYXJpb0lkLCBlcnJvcjogZSB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgc2NlbmFyaW9JZCB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZVNjZW5hcmlvKHVwZGF0ZVNjZW5hcmlvOiBVcGRhdGVTY2VuYXJpbyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICBzY2VuYXJpb0lkOiB1cGRhdGVTY2VuYXJpby5zY2VuYXJpb0lkLFxyXG4gICAgICBrZXlJZDogdXBkYXRlU2NlbmFyaW8ua2V5SWQsXHJcbiAgICAgIHBsYWluU3ViamVjdENpcGhlckRhdGE6IHtcclxuICAgICAgICBldmVudDogdXBkYXRlU2NlbmFyaW8uZXZlbnQsXHJcbiAgICAgICAgbmFtZTogdXBkYXRlU2NlbmFyaW8ubmFtZSxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICBhd2FpdCB0aGlzLnNjZW5hcmlvU2VydmljZS51cGRhdGVTY2VuYXJpbyhwYXJhbXMpO1xyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICB1cGRhdGVTY2VuYXJpby5jbGFpbWFudHMubWFwKCh4KSA9PlxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2xhaW1hbnQodXBkYXRlU2NlbmFyaW8uc2NlbmFyaW9JZCwgdXBkYXRlU2NlbmFyaW8uZXZlbnQsIHgpXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgdXBkYXRlU2NlbmFyaW8uZGVsZXRlZENsYWltYW50SWRzLm1hcCgoeCkgPT5cclxuICAgICAgICB0aGlzLnNjZW5hcmlvQ2xhaW1hbnRTZXJ2aWNlLmRlbGV0ZUNsYWltYW50KHgpXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYXNzZW1ibHlLZXlJZCA9IGF3YWl0IHRoaXMudXBkYXRlQXBwcm92YWxHcm91cHModXBkYXRlU2NlbmFyaW8pO1xyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICB1cGRhdGVTY2VuYXJpby5yZWNlaXZlcnMubWFwKCh4KSA9PlxyXG4gICAgICAgIHRoaXMudXBkYXRlUmVjZWl2ZXIoXHJcbiAgICAgICAgICB1cGRhdGVTY2VuYXJpby5zY2VuYXJpb0lkLFxyXG4gICAgICAgICAgYXNzZW1ibHlLZXlJZCxcclxuICAgICAgICAgIHVwZGF0ZVNjZW5hcmlvLmV2ZW50LFxyXG4gICAgICAgICAgeFxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICB1cGRhdGVTY2VuYXJpby5kZWxldGVkUmVjZWl2ZXJJZHMubWFwKCh4KSA9PlxyXG4gICAgICAgIHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UuZGVsZXRlUmVjZWl2ZXIoeClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQ2xhaW1hbnQoXHJcbiAgICBzY2VuYXJpb0lkOiBzdHJpbmcsXHJcbiAgICBldmVudDogc3RyaW5nLFxyXG4gICAgY2xhaW1hbnQ6IFVwZGF0ZWRTY2VuYXJpb0NsYWltYW50XHJcbiAgKSB7XHJcbiAgICBpZiAoY2xhaW1hbnQuY2xhaW1hbnRJZCkge1xyXG4gICAgICBhd2FpdCB0aGlzLnNjZW5hcmlvQ2xhaW1hbnRTZXJ2aWNlLnVwZGF0ZUNsYWltYW50KHtcclxuICAgICAgICBpZDogY2xhaW1hbnQuY2xhaW1hbnRJZCxcclxuICAgICAgICBrZXlJZDogY2xhaW1hbnQua2V5SWQsXHJcbiAgICAgICAgcGxhaW5TaGFyZWRDaXBoZXJEYXRhOiB7IG1lc3NhZ2U6IGNsYWltYW50Lm1lc3NhZ2UsIGV2ZW50IH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy5zY2VuYXJpb0NsYWltYW50U2VydmljZS5hZGRDbGFpbWFudCh7XHJcbiAgICAgICAgc2NlbmFyaW9JZCxcclxuICAgICAgICB0cnVzdGVkUGFydHlJZDogY2xhaW1hbnQudHJ1c3RlZFBhcnR5SWQsXHJcbiAgICAgICAgdHJ1c3RlZFBhcnR5U2hhcmVkS2V5SWQ6IGNsYWltYW50LnRydXN0ZWRQYXJ0eVNoYXJlZEtleUlkLFxyXG4gICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YTogeyBtZXNzYWdlOiBjbGFpbWFudC5tZXNzYWdlLCBldmVudCB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQXBwcm92YWxHcm91cHMoXHJcbiAgICB1cGRhdGVTY2VuYXJpbzogVXBkYXRlU2NlbmFyaW9cclxuICApOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgaWYgKHVwZGF0ZVNjZW5hcmlvLmFzc2VtYmx5S2V5SWQpIHtcclxuICAgICAgaWYgKHVwZGF0ZVNjZW5hcmlvLmFwcHJvdmFsR3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGFwcHJvdmFsR3JvdXBzOiBVcGRhdGVTY2VuYXJpb0FwcHJvdmFsR3JvdXBzID0ge1xyXG4gICAgICAgICAgc2NlbmFyaW9JZDogdXBkYXRlU2NlbmFyaW8uc2NlbmFyaW9JZCxcclxuICAgICAgICAgIGFzc2VtYmx5S2V5SWQ6IHVwZGF0ZVNjZW5hcmlvLmFzc2VtYmx5S2V5SWQsXHJcblxyXG4gICAgICAgICAgc2luZ2xlUmVqZWN0OiBmYWxzZSxcclxuICAgICAgICAgIHF1b3J1bTogMSxcclxuXHJcbiAgICAgICAgICBhcHByb3ZhbEdyb3VwczogdXBkYXRlU2NlbmFyaW8uYXBwcm92YWxHcm91cHMubWFwKCh4KSA9PiAoe1xyXG4gICAgICAgICAgICBzdWJBc3NlbWJseUlkOiB4LnN1YkFzc2VtYmx5SWQsXHJcbiAgICAgICAgICAgIHF1b3J1bTogeC5xdW9ydW0sXHJcbiAgICAgICAgICAgIHNpbmdsZVJlamVjdDogeC5zaW5nbGVSZWplY3QsXHJcbiAgICAgICAgICAgIHBsYWluU3ViQXNzZW1ibHlDaXBoZXJEYXRhOiB7IG5hbWU6IHgubmFtZSB9LFxyXG4gICAgICAgICAgICBhcHByb3ZlcnM6IHguYXBwcm92ZXJzLm1hcCgoeSkgPT4gKHtcclxuICAgICAgICAgICAgICBhcHByb3ZlcklkOiB5LmFwcHJvdmVySWQsXHJcbiAgICAgICAgICAgICAga2V5SWQ6IHkua2V5SWQsXHJcbiAgICAgICAgICAgICAgdHJ1c3RlZFBhcnR5SWQ6IHkudHJ1c3RlZFBhcnR5SWQsXHJcbiAgICAgICAgICAgICAgdHJ1c3RlZFBhcnR5U2hhcmVkS2V5SWQ6IHkudHJ1c3RlZFBhcnR5U2hhcmVkS2V5SWQsXHJcbiAgICAgICAgICAgICAgcGxhaW5TaGFyZWRDaXBoZXJEYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB5Lm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICBldmVudDogdXBkYXRlU2NlbmFyaW8uZXZlbnQsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBkZWxldGVkQXBwcm92ZXJJZHM6IHguZGVsZXRlZEFwcHJvdmVySWRzLFxyXG4gICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgZGVsZXRlZEdyb3VwSWRzOiB1cGRhdGVTY2VuYXJpby5kZWxldGVkR3JvdXBJZHMsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNjZW5hcmlvQXBwcm92ZXJTZXJ2aWNlLnVwZGF0ZVNjZW5hcmlvQXBwcm92ZXJBc3NlbWJseShcclxuICAgICAgICAgIGFwcHJvdmFsR3JvdXBzXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdXBkYXRlU2NlbmFyaW8uYXNzZW1ibHlLZXlJZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB7IHJlY2VpdmVycyB9ID0gYXdhaXQgdGhpcy5zY2VuYXJpb1NlcnZpY2UuZ2V0U2NlbmFyaW8oXHJcbiAgICAgICAgICB1cGRhdGVTY2VuYXJpby5zY2VuYXJpb0lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNjZW5hcmlvQXBwcm92ZXJTZXJ2aWNlLmRlbGV0ZVNjZW5hcmlvQXBwcm92ZXJBc3NlbWJseShcclxuICAgICAgICAgIHVwZGF0ZVNjZW5hcmlvLnNjZW5hcmlvSWQsXHJcbiAgICAgICAgICB1cGRhdGVTY2VuYXJpby5ldmVudCxcclxuICAgICAgICAgIHJlY2VpdmVyc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdXBkYXRlIG9yIGRlbGV0ZVxyXG4gICAgfSBlbHNlIGlmICh1cGRhdGVTY2VuYXJpby5hcHByb3ZhbEdyb3Vwcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgeyByZWNlaXZlcnMgfSA9IGF3YWl0IHRoaXMuc2NlbmFyaW9TZXJ2aWNlLmdldFNjZW5hcmlvKFxyXG4gICAgICAgIHVwZGF0ZVNjZW5hcmlvLnNjZW5hcmlvSWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGFwcHJvdmFsR3JvdXBzOiBDcmVhdGVTY2VuYXJpb0FwcHJvdmFsR3JvdXBzID0ge1xyXG4gICAgICAgIHNjZW5hcmlvSWQ6IHVwZGF0ZVNjZW5hcmlvLnNjZW5hcmlvSWQsXHJcbiAgICAgICAga2V5SWQ6IHVwZGF0ZVNjZW5hcmlvLmtleUlkLFxyXG4gICAgICAgIGV2ZW50OiB1cGRhdGVTY2VuYXJpby5ldmVudCxcclxuICAgICAgICBzaW5nbGVSZWplY3Q6IGZhbHNlLFxyXG4gICAgICAgIHF1b3J1bTogMSxcclxuICAgICAgICBhcHByb3ZhbEdyb3VwczogdXBkYXRlU2NlbmFyaW8uYXBwcm92YWxHcm91cHMubWFwKCh4KSA9PiAoe1xyXG4gICAgICAgICAgcXVvcnVtOiB4LnF1b3J1bSxcclxuICAgICAgICAgIHNpbmdsZVJlamVjdDogeC5zaW5nbGVSZWplY3QsXHJcbiAgICAgICAgICBwbGFpblN1YkFzc2VtYmx5Q2lwaGVyRGF0YTogeyBuYW1lOiB4Lm5hbWUgfSxcclxuICAgICAgICAgIGFwcHJvdmVyczogeC5hcHByb3ZlcnMubWFwKCh5KSA9PiAoe1xyXG4gICAgICAgICAgICB0cnVzdGVkUGFydHlJZDogeS50cnVzdGVkUGFydHlJZCxcclxuICAgICAgICAgICAgdHJ1c3RlZFBhcnR5U2hhcmVkS2V5SWQ6IHkudHJ1c3RlZFBhcnR5U2hhcmVkS2V5SWQsXHJcbiAgICAgICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YToge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHkubWVzc2FnZSxcclxuICAgICAgICAgICAgICBldmVudDogdXBkYXRlU2NlbmFyaW8uZXZlbnQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KSksXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHJlY2VpdmVycyxcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2NlbmFyaW9BcHByb3ZlclNlcnZpY2UuY3JlYXRlU2NlbmFyaW9BcHByb3ZlckFzc2VtYmx5KFxyXG4gICAgICAgIGFwcHJvdmFsR3JvdXBzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUmVjZWl2ZXIoXHJcbiAgICBzY2VuYXJpb0lkOiBzdHJpbmcsXHJcbiAgICBhc3NlbWJseUtleUlkOiBzdHJpbmcsXHJcbiAgICBldmVudDogc3RyaW5nLFxyXG4gICAgcmVjZWl2ZXI6IFVwZGF0ZWRTY2VuYXJpb1JlY2VpdmVyXHJcbiAgKSB7XHJcbiAgICBsZXQgcmVjZWl2ZXJJZCA9IHJlY2VpdmVyLnJlY2VpdmVySWQ7XHJcblxyXG4gICAgLy8gQ3VycmVudGx5IGRlbGV0aW5nIGFsbCByZWNlaXZlcnMgYmVsb3cgYXNzZW1ibHkgbG9naWMuXHJcbiAgICBpZiAocmVjZWl2ZXJJZCkge1xyXG4gICAgICBhd2FpdCB0aGlzLnNjZW5hcmlvUmVjZWl2ZXJTZXJ2aWNlLnVwZGF0ZVJlY2VpdmVyKHtcclxuICAgICAgICBpZDogcmVjZWl2ZXIucmVjZWl2ZXJJZCxcclxuICAgICAgICBrZXlJZDogcmVjZWl2ZXIua2V5SWQsXHJcbiAgICAgICAgcGxhaW5TaGFyZWRDaXBoZXJEYXRhOiB7IG1lc3NhZ2U6IHJlY2VpdmVyLm1lc3NhZ2UsIGV2ZW50IH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbmV3UmVjZWl2ZXIgPSB7XHJcbiAgICAgICAgc2NlbmFyaW9JZCxcclxuICAgICAgICB0cnVzdGVkUGFydHlJZDogcmVjZWl2ZXIudHJ1c3RlZFBhcnR5SWQsXHJcbiAgICAgICAgdHJ1c3RlZFBhcnR5U2hhcmVkS2V5SWQ6IHJlY2VpdmVyLnRydXN0ZWRQYXJ0eVNoYXJlZEtleUlkLFxyXG4gICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YTogeyBtZXNzYWdlOiByZWNlaXZlci5tZXNzYWdlLCBldmVudCB9LFxyXG4gICAgICB9O1xyXG4gICAgICByZWNlaXZlcklkID0gYXdhaXQgdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS5hZGRSZWNlaXZlcihuZXdSZWNlaXZlcik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsb2FkZWRSZWNlaXZlciA9IGF3YWl0IHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UuZ2V0UmVjZWl2ZXIoXHJcbiAgICAgIHJlY2VpdmVySWRcclxuICAgICk7XHJcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJlY2VpdmVySXRlbXMoXHJcbiAgICAgIHNjZW5hcmlvSWQsXHJcbiAgICAgIGFzc2VtYmx5S2V5SWQsXHJcbiAgICAgIGxvYWRlZFJlY2VpdmVyLFxyXG4gICAgICByZWNlaXZlci5wZXJtaXNzaW9uc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUmVjZWl2ZXJJdGVtcyhcclxuICAgIHNjZW5hcmlvSWQ6IHN0cmluZyxcclxuICAgIGFzc2VtYmx5S2V5SWQ6IHN0cmluZyxcclxuICAgIHJlY2VpdmVyOiBSZWNlaXZlcixcclxuICAgIHBlcm1pc3Npb25zOiBQcmVwYXJlZFBlcm1pc3Npb25zXHJcbiAgKSB7XHJcbiAgICBwZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zIHx8IHt9O1xyXG4gICAgcGVybWlzc2lvbnMuY2F0ZWdvcmllcyA9IHBlcm1pc3Npb25zLmNhdGVnb3JpZXMgfHwgW107XHJcbiAgICBwZXJtaXNzaW9ucy5yZWNvcmRzID0gcGVybWlzc2lvbnMucmVjb3JkcyB8fCBbXTtcclxuXHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgcGVybWlzc2lvbnMuY2F0ZWdvcmllc1xyXG4gICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT5cclxuICAgICAgICAgICAgIXJlY2VpdmVyLmNhdGVnb3JpZXMuc29tZSgoeSkgPT4geS5jYXRlZ29yeS5pZCA9PT0geC5jYXRlZ29yeUlkKVxyXG4gICAgICAgIClcclxuICAgICAgICAubWFwKGFzeW5jICh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHNjZW5hcmlvSWQsXHJcbiAgICAgICAgICAgIGFzc2VtYmx5S2V5SWQsXHJcbiAgICAgICAgICAgIHJlY2VpdmVySWQ6IHJlY2VpdmVyLmlkLFxyXG4gICAgICAgICAgICByZWNlaXZlcktleUlkOiByZWNlaXZlci5rZXlJZCxcclxuICAgICAgICAgICAgYWNjZXNzUm9sZTogeC5hY2Nlc3NMZXZlbCxcclxuICAgICAgICAgICAgY2F0ZWdvcnlJZDogeC5jYXRlZ29yeUlkLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UuYWRkUmVjZWl2ZXJDYXRlZ29yeShwYXJhbXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHBlcm1pc3Npb25zLnJlY29yZHNcclxuICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+ICFyZWNlaXZlci5yZWNvcmRzLnNvbWUoKHkpID0+IHkucmVjb3JkLmlkID09PSB4LnJlY29yZElkKVxyXG4gICAgICAgIClcclxuICAgICAgICAubWFwKGFzeW5jICh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHNjZW5hcmlvSWQsXHJcbiAgICAgICAgICAgIGFzc2VtYmx5S2V5SWQsXHJcbiAgICAgICAgICAgIHJlY2VpdmVySWQ6IHJlY2VpdmVyLmlkLFxyXG4gICAgICAgICAgICByZWNlaXZlcktleUlkOiByZWNlaXZlci5rZXlJZCxcclxuICAgICAgICAgICAgYWNjZXNzUm9sZTogeC5hY2Nlc3NMZXZlbCxcclxuICAgICAgICAgICAgcmVjb3JkSWQ6IHgucmVjb3JkSWQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS5hZGRSZWNlaXZlclJlY29yZChwYXJhbXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBwZXJtaXNzaW9ucy5jYXRlZ29yaWVzXHJcbiAgICAgICAgLm1hcCgoeCkgPT4gKHtcclxuICAgICAgICAgIGFjY2Vzc0xldmVsOiB4LmFjY2Vzc0xldmVsLFxyXG4gICAgICAgICAgY2F0ZWdvcnk6IHJlY2VpdmVyLmNhdGVnb3JpZXMuZmluZChcclxuICAgICAgICAgICAgKHkpID0+IHkuY2F0ZWdvcnkuaWQgPT09IHguY2F0ZWdvcnlJZFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICB9KSlcclxuICAgICAgICAuZmlsdGVyKCh4KSA9PiB4LmNhdGVnb3J5KVxyXG4gICAgICAgIC5tYXAoYXN5bmMgKHgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHBhcmFtczogVXBkYXRlU2NlbmFyaW9SZWNlaXZlckl0ZW1JbnB1dCA9IHtcclxuICAgICAgICAgICAgaWQ6IHguY2F0ZWdvcnkuaWQsXHJcbiAgICAgICAgICAgIGtleUlkOiB4LmNhdGVnb3J5LmtleUlkLFxyXG4gICAgICAgICAgICBhY2Nlc3NSb2xlOiB4LmFjY2Vzc0xldmVsLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UudXBkYXRlUmVjZWl2ZXJJdGVtKHBhcmFtcyk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgcGVybWlzc2lvbnMucmVjb3Jkc1xyXG4gICAgICAgIC5tYXAoKHgpID0+ICh7XHJcbiAgICAgICAgICBhY2Nlc3NMZXZlbDogeC5hY2Nlc3NMZXZlbCxcclxuICAgICAgICAgIHJlY29yZDogcmVjZWl2ZXIucmVjb3Jkcy5maW5kKCh5KSA9PiB5LnJlY29yZC5pZCA9PT0geC5yZWNvcmRJZCksXHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLmZpbHRlcigoeCkgPT4geC5yZWNvcmQpXHJcbiAgICAgICAgLm1hcChhc3luYyAoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcGFyYW1zOiBVcGRhdGVTY2VuYXJpb1JlY2VpdmVySXRlbUlucHV0ID0ge1xyXG4gICAgICAgICAgICBpZDogeC5yZWNvcmQuaWQsXHJcbiAgICAgICAgICAgIGtleUlkOiB4LnJlY29yZC5rZXlJZCxcclxuICAgICAgICAgICAgYWNjZXNzUm9sZTogeC5hY2Nlc3NMZXZlbCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNjZW5hcmlvUmVjZWl2ZXJTZXJ2aWNlLnVwZGF0ZVJlY2VpdmVySXRlbShwYXJhbXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICByZWNlaXZlci5jYXRlZ29yaWVzXHJcbiAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PlxyXG4gICAgICAgICAgICAhcGVybWlzc2lvbnMuY2F0ZWdvcmllcy5zb21lKCh5KSA9PiB5LmNhdGVnb3J5SWQgPT09IHguY2F0ZWdvcnkuaWQpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5tYXAoKHgpID0+IHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UuZGVsZXRlUmVjZWl2ZXJJdGVtKHguaWQpKVxyXG4gICAgKTtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICByZWNlaXZlci5yZWNvcmRzXHJcbiAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiAhcGVybWlzc2lvbnMucmVjb3Jkcy5zb21lKCh5KSA9PiB5LnJlY29yZElkID09PSB4LnJlY29yZC5pZClcclxuICAgICAgICApXHJcbiAgICAgICAgLm1hcCgoeCkgPT4gdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS5kZWxldGVSZWNlaXZlckl0ZW0oeC5pZCkpXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=