@ieeesa-npm/tenants 0.4.4 → 0.5.0

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 (142) hide show
  1. package/esm2022/ieeesa-npm-tenants.mjs +5 -0
  2. package/esm2022/lib/assets/constants.json +454 -0
  3. package/esm2022/lib/assets/tenant-validations.mjs +17 -0
  4. package/esm2022/lib/components/create-modify-group-type/create-modify-group-type.component.mjs +476 -0
  5. package/esm2022/lib/components/create-modify-role/create-modify-role.component.mjs +279 -0
  6. package/esm2022/lib/components/create-tenant-application/create-tenant-application.component.mjs +512 -0
  7. package/esm2022/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.mjs +391 -0
  8. package/esm2022/lib/components/tenant-basic-details/tenant-basic-details.component.mjs +94 -0
  9. package/esm2022/lib/components/view-tenant-details/view-tenant-details.component.mjs +733 -0
  10. package/esm2022/lib/components/view-tenant-group-types/view-tenant-group-types.component.mjs +194 -0
  11. package/esm2022/lib/components/view-tenants-list/view-tenants-list.component.mjs +335 -0
  12. package/esm2022/lib/models/app-type-config.model.mjs +2 -0
  13. package/esm2022/lib/models/app-type.model.mjs +7 -0
  14. package/esm2022/lib/models/create-group-type-config.model.mjs +22 -0
  15. package/esm2022/lib/models/create-group-type.model.mjs +2 -0
  16. package/esm2022/lib/models/feature-permission-id.model.mjs +8 -0
  17. package/esm2022/lib/models/features.model.mjs +2 -0
  18. package/esm2022/lib/models/permission-type.model.mjs +12 -0
  19. package/esm2022/lib/models/role-menu-action.model.mjs +7 -0
  20. package/esm2022/lib/models/role-type.model.mjs +2 -0
  21. package/esm2022/lib/models/roles-and-permissions-table-type.model.mjs +7 -0
  22. package/esm2022/lib/models/roles-and-permissions.model.mjs +2 -0
  23. package/esm2022/lib/models/route-config.model.mjs +2 -0
  24. package/esm2022/lib/models/table-column-schema-view-tenant-list.model.mjs +16 -0
  25. package/esm2022/lib/models/tenant-function-type.model.mjs +12 -0
  26. package/esm2022/lib/models/tenant.model.mjs +2 -0
  27. package/esm2022/lib/models/tenants-permission.model.mjs +2 -0
  28. package/esm2022/lib/models/update-tenant-status.model.mjs +2 -0
  29. package/esm2022/lib/models/view-tenant-group-types.model.mjs +11 -0
  30. package/esm2022/lib/services/tenant-applications.service.mjs +618 -0
  31. package/esm2022/lib/services/tenant-permissions-map.service.mjs +36 -0
  32. package/esm2022/lib/services/tenant-permissions.service.mjs +38 -0
  33. package/esm2022/lib/tenant-applications.component.mjs +14 -0
  34. package/esm2022/lib/tenant-applications.module.mjs +16 -0
  35. package/esm2022/public-api.mjs +36 -0
  36. package/fesm2022/ieeesa-npm-tenants.mjs +4233 -0
  37. package/fesm2022/ieeesa-npm-tenants.mjs.map +1 -0
  38. package/index.d.ts +5 -0
  39. package/lib/assets/tenant-validations.d.ts +15 -0
  40. package/lib/components/create-modify-group-type/create-modify-group-type.component.d.ts +129 -0
  41. package/lib/components/create-modify-role/create-modify-role.component.d.ts +103 -0
  42. package/lib/components/create-tenant-application/create-tenant-application.component.d.ts +128 -0
  43. package/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.d.ts +106 -0
  44. package/lib/components/tenant-basic-details/tenant-basic-details.component.d.ts +471 -0
  45. package/lib/components/view-tenant-details/view-tenant-details.component.d.ts +223 -0
  46. package/lib/components/view-tenant-group-types/view-tenant-group-types.component.d.ts +63 -0
  47. package/lib/components/view-tenants-list/view-tenants-list.component.d.ts +134 -0
  48. package/lib/models/app-type-config.model.d.ts +14 -0
  49. package/lib/models/app-type.model.d.ts +4 -0
  50. package/lib/models/create-group-type-config.model.d.ts +16 -0
  51. package/lib/models/create-group-type.model.d.ts +49 -0
  52. package/lib/models/feature-permission-id.model.d.ts +4 -0
  53. package/lib/models/features.model.d.ts +15 -0
  54. package/lib/models/permission-type.model.d.ts +8 -0
  55. package/lib/models/role-menu-action.model.d.ts +4 -0
  56. package/lib/models/role-type.model.d.ts +27 -0
  57. package/lib/models/roles-and-permissions-table-type.model.d.ts +4 -0
  58. package/lib/models/roles-and-permissions.model.d.ts +119 -0
  59. package/lib/models/route-config.model.d.ts +4 -0
  60. package/lib/models/table-column-schema-view-tenant-list.model.d.ts +20 -0
  61. package/lib/models/tenant-function-type.model.d.ts +9 -0
  62. package/lib/models/tenant.model.d.ts +51 -0
  63. package/lib/models/tenants-permission.model.d.ts +9 -0
  64. package/lib/models/update-tenant-status.model.d.ts +14 -0
  65. package/lib/models/view-tenant-group-types.model.d.ts +29 -0
  66. package/lib/services/tenant-applications.service.d.ts +399 -0
  67. package/lib/services/tenant-permissions-map.service.d.ts +13 -0
  68. package/lib/services/tenant-permissions.service.d.ts +22 -0
  69. package/lib/tenant-applications.component.d.ts +5 -0
  70. package/lib/tenant-applications.module.d.ts +6 -0
  71. package/package.json +25 -12
  72. package/{src/public-api.ts → public-api.d.ts} +32 -40
  73. package/.eslintrc.json +0 -31
  74. package/ng-package.json +0 -8
  75. package/src/lib/assets/constants.json +0 -454
  76. package/src/lib/assets/tenant-validations.ts +0 -18
  77. package/src/lib/assets/tenants-mock.ts +0 -1240
  78. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.html +0 -15
  79. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.scss +0 -44
  80. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.spec.ts +0 -574
  81. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.ts +0 -602
  82. package/src/lib/components/create-modify-role/create-modify-role.component.html +0 -15
  83. package/src/lib/components/create-modify-role/create-modify-role.component.scss +0 -83
  84. package/src/lib/components/create-modify-role/create-modify-role.component.spec.ts +0 -346
  85. package/src/lib/components/create-modify-role/create-modify-role.component.ts +0 -321
  86. package/src/lib/components/create-tenant-application/create-tenant-application.component.html +0 -18
  87. package/src/lib/components/create-tenant-application/create-tenant-application.component.scss +0 -73
  88. package/src/lib/components/create-tenant-application/create-tenant-application.component.spec.ts +0 -775
  89. package/src/lib/components/create-tenant-application/create-tenant-application.component.ts +0 -638
  90. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.html +0 -22
  91. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.scss +0 -79
  92. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.spec.ts +0 -716
  93. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.ts +0 -504
  94. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.html +0 -44
  95. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.scss +0 -16
  96. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.spec.ts +0 -115
  97. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.ts +0 -109
  98. package/src/lib/components/view-tenant-details/view-tenant-details.component.html +0 -195
  99. package/src/lib/components/view-tenant-details/view-tenant-details.component.scss +0 -163
  100. package/src/lib/components/view-tenant-details/view-tenant-details.component.spec.ts +0 -1221
  101. package/src/lib/components/view-tenant-details/view-tenant-details.component.ts +0 -876
  102. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.html +0 -10
  103. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.scss +0 -44
  104. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.spec.ts +0 -410
  105. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.ts +0 -219
  106. package/src/lib/components/view-tenants-list/view-tenants-list.component.html +0 -32
  107. package/src/lib/components/view-tenants-list/view-tenants-list.component.scss +0 -35
  108. package/src/lib/components/view-tenants-list/view-tenants-list.component.spec.ts +0 -464
  109. package/src/lib/components/view-tenants-list/view-tenants-list.component.ts +0 -388
  110. package/src/lib/models/app-type-config.model.ts +0 -14
  111. package/src/lib/models/app-type.model.ts +0 -5
  112. package/src/lib/models/create-group-type-config.model.ts +0 -18
  113. package/src/lib/models/create-group-type.model.ts +0 -46
  114. package/src/lib/models/feature-permission-id.model.ts +0 -6
  115. package/src/lib/models/features.model.ts +0 -15
  116. package/src/lib/models/form-status.model.ts +0 -5
  117. package/src/lib/models/permission-type.model.ts +0 -9
  118. package/src/lib/models/role-menu-action.model.ts +0 -5
  119. package/src/lib/models/role-type.model.ts +0 -34
  120. package/src/lib/models/roles-and-permissions-table-type.model.ts +0 -5
  121. package/src/lib/models/roles-and-permissions.model.ts +0 -113
  122. package/src/lib/models/route-config.model.ts +0 -4
  123. package/src/lib/models/table-column-schema-view-tenant-list.model.ts +0 -21
  124. package/src/lib/models/tenant-function-type.model.ts +0 -10
  125. package/src/lib/models/tenant.model.ts +0 -47
  126. package/src/lib/models/tenants-permission.model.ts +0 -9
  127. package/src/lib/models/update-tenant-status.model.ts +0 -12
  128. package/src/lib/models/view-tenant-group-types.model.ts +0 -34
  129. package/src/lib/services/tenant-applications.service.spec.ts +0 -1245
  130. package/src/lib/services/tenant-applications.service.ts +0 -798
  131. package/src/lib/services/tenant-permissions-map.service.spec.ts +0 -25
  132. package/src/lib/services/tenant-permissions-map.service.ts +0 -28
  133. package/src/lib/services/tenant-permissions.service.spec.ts +0 -62
  134. package/src/lib/services/tenant-permissions.service.ts +0 -49
  135. package/src/lib/tenant-applications.component.html +0 -0
  136. package/src/lib/tenant-applications.component.scss +0 -0
  137. package/src/lib/tenant-applications.component.spec.ts +0 -28
  138. package/src/lib/tenant-applications.component.ts +0 -12
  139. package/src/lib/tenant-applications.module.ts +0 -8
  140. package/tsconfig.lib.json +0 -14
  141. package/tsconfig.lib.prod.json +0 -10
  142. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,476 @@
1
+ import { Component, EventEmitter, Output, ViewChild, ViewContainerRef, ViewEncapsulation, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { Validators } from '@angular/forms';
4
+ import { Subject, takeUntil } from 'rxjs';
5
+ import { AlignType, FormControlType, CheckboxComponent, DynamicFormComponent, } from '@ieeesa-npm/presentation';
6
+ import { GroupRosterType, RoleType } from '@ieeesa-npm/groups';
7
+ import { AlertType, FormStatus } from '@ieeesa-npm/models';
8
+ import * as screenTexts from '../../assets/constants.json';
9
+ import { GroupTypeValidation } from '../../assets/tenant-validations';
10
+ import { Settings, RosterTypeLOVCode, } from '../../models/create-group-type-config.model';
11
+ import { TenantFunctionType } from '../../models/tenant-function-type.model';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "../../services/tenant-applications.service";
14
+ import * as i2 from "@ieeesa-npm/shared";
15
+ import * as i3 from "@angular/common";
16
+ /**
17
+ * CreateModifyGroupTypeComponent uses DynamicFormComponent to build create add group type form or edit group type form and implement the functionalities of submission of form and handling success and error scenarios.
18
+ * @class CreateModifyGroupTypeComponent
19
+ * @implements {OnInit}
20
+ * @implements {OnDestroy}
21
+ */
22
+ export class CreateModifyGroupTypeComponent {
23
+ constructor(
24
+ // eslint-disable-next-line no-unused-vars
25
+ tenantAppService,
26
+ // eslint-disable-next-line no-unused-vars
27
+ sharedService,
28
+ // eslint-disable-next-line no-unused-vars
29
+ renderer,
30
+ // eslint-disable-next-line no-unused-vars
31
+ elementRef,
32
+ // eslint-disable-next-line no-unused-vars
33
+ formUtilityService // eslint-disable-next-line no-empty-function,
34
+ ) {
35
+ this.tenantAppService = tenantAppService;
36
+ this.sharedService = sharedService;
37
+ this.renderer = renderer;
38
+ this.elementRef = elementRef;
39
+ this.formUtilityService = formUtilityService;
40
+ this.destroy$ = new Subject();
41
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
+ this.constants = screenTexts;
43
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
+ this.createGroupTypeScreenTexts = this.constants?.createGroupType;
45
+ this.leftButtonLabel = this.createGroupTypeScreenTexts?.label?.leftButtonLabel;
46
+ this.rightButtonLabel = this.createGroupTypeScreenTexts?.label?.rightButtonLabel;
47
+ this.colWidth = { xs: 12, xl: 12, sm: 12, md: 12, lg: 12 };
48
+ this.actionButtonAlign = AlignType.LEFT;
49
+ this.isRootGroupOptions = [
50
+ {
51
+ id: 1,
52
+ label: this.createGroupTypeScreenTexts?.isRootGroupOptions?.yes,
53
+ checked: false,
54
+ },
55
+ {
56
+ id: 2,
57
+ label: this.createGroupTypeScreenTexts?.isRootGroupOptions?.no,
58
+ checked: true,
59
+ },
60
+ ];
61
+ this.rosterTypeOptions = [];
62
+ this.settingOptions = [];
63
+ this.officerRolesOptions = [];
64
+ this.memberLevelOptions = [];
65
+ this.allowedSubGroupTypesOptions = [];
66
+ /**
67
+ * Event emitter for form submission response.
68
+ * @memberof CreateModifyGroupTypeComponent
69
+ */
70
+ this.submitFormResponse = new EventEmitter();
71
+ /**
72
+ * Event emitter for form cancel action.
73
+ * @memberof CreateModifyGroupTypeComponent
74
+ */
75
+ this.formCancel = new EventEmitter();
76
+ }
77
+ /**
78
+ * Sets appId, tenantFunctionType and calls getGroupTypes() & getRosterTypes() to get group and roster types.
79
+ * @memberof CreateModifyGroupTypeComponent
80
+ */
81
+ ngOnInit() {
82
+ this.appId = this.tenantAppService.getSelectedTenantInformation()
83
+ ?.appId;
84
+ this.tenantFunctionType = this.tenantAppService?.getTenantFunctionType();
85
+ this.selectedGroupTypeInfo =
86
+ this.tenantAppService?.getNewlyCreatedGroupTypeInfo();
87
+ this.getGroupTypes();
88
+ this.getRosterTypes();
89
+ }
90
+ /**
91
+ * Gets the list of roster types and updates the form control.
92
+ * @memberof CreateModifyGroupTypeComponent
93
+ */
94
+ getRosterTypes() {
95
+ this.tenantAppService
96
+ .getRosterType()
97
+ .pipe(takeUntil(this.destroy$))
98
+ .subscribe({
99
+ next: (response) => {
100
+ if (response?.status) {
101
+ this.getSettings();
102
+ const rosterTypeList = response.body;
103
+ rosterTypeList.map((rosterType) => this.rosterTypeOptions.push({
104
+ id: rosterType.lovId,
105
+ label: rosterType.lovDesc,
106
+ checked: rosterType.lovCode === RosterTypeLOVCode.INDIVIDUAL,
107
+ }));
108
+ }
109
+ },
110
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
+ error: (error) => {
112
+ this.sharedService.handleErrors(error, this.createGroupTypeScreenTexts.errors);
113
+ },
114
+ });
115
+ }
116
+ /**
117
+ * Gets the list of settings and updates the form control.
118
+ * @memberof CreateModifyGroupTypeComponent
119
+ */
120
+ getSettings() {
121
+ this.tenantAppService
122
+ .getGroupTypeSettings()
123
+ .pipe(takeUntil(this.destroy$))
124
+ .subscribe({
125
+ next: (response) => {
126
+ if (response.status) {
127
+ this.getRoles();
128
+ const settingsList = response.body;
129
+ settingsList.map((setting) => {
130
+ this.settingOptions.push({
131
+ id: setting.lovId,
132
+ name: setting.lovDesc,
133
+ checked: false,
134
+ disabled: false,
135
+ });
136
+ });
137
+ }
138
+ },
139
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
140
+ error: (error) => {
141
+ this.sharedService.handleErrors(error, this.createGroupTypeScreenTexts.errors);
142
+ },
143
+ });
144
+ }
145
+ /**
146
+ * Gets the list of roles and updates the form control.
147
+ * @memberof CreateModifyGroupTypeComponent
148
+ */
149
+ getRoles() {
150
+ this.tenantAppService
151
+ .getRoles(this.appId)
152
+ .pipe(takeUntil(this.destroy$))
153
+ .subscribe({
154
+ next: (response) => {
155
+ if (response?.status) {
156
+ const rolesList = response?.body;
157
+ rolesList.map((role) => {
158
+ if (role.roleTypeName === RoleType.OFFICER) {
159
+ this.officerRolesOptions.push({
160
+ id: role.roleId,
161
+ name: role.roleName,
162
+ checked: false,
163
+ disabled: false,
164
+ });
165
+ }
166
+ else if (role.roleTypeName === RoleType.MEMBER_LEVEL) {
167
+ this.memberLevelOptions.push({
168
+ id: role.roleId,
169
+ name: role.roleName,
170
+ checked: false,
171
+ disabled: false,
172
+ });
173
+ }
174
+ });
175
+ if (this.memberLevelOptions.length === 0 ||
176
+ this.officerRolesOptions.length === 0) {
177
+ this.sharedService.showAlertMessage(AlertType.ERROR, this.createGroupTypeScreenTexts.errors['3019']);
178
+ }
179
+ else {
180
+ this.initializeCreateGroupTypeFormGroup();
181
+ }
182
+ }
183
+ },
184
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
185
+ error: (error) => {
186
+ this.sharedService.handleErrors(error, this.createGroupTypeScreenTexts.errors);
187
+ },
188
+ });
189
+ }
190
+ /**
191
+ * Gets and filters non SYSTEM_USER group types, constructs allowed sub-group types options and form field config.
192
+ * @memberof CreateModifyGroupTypeComponent
193
+ */
194
+ getGroupTypes() {
195
+ this.groupTypeDetails = this.tenantAppService.getGroupTypeDetails();
196
+ this.groupTypeDetails?.body?.forEach((item) => {
197
+ if (item?.configFieldValue?.businessRule?.rosterType !==
198
+ GroupRosterType?.SYSTEM_USER) {
199
+ this.allowedSubGroupTypesOptions.push({
200
+ id: item?.configFieldId,
201
+ name: item?.configFieldValue?.name,
202
+ checked: false,
203
+ disabled: false,
204
+ });
205
+ }
206
+ });
207
+ this.allowedSubGroupTypesFieldConfig = {
208
+ type: FormControlType.CHECKBOX,
209
+ label: this.createGroupTypeScreenTexts?.label?.allowedSubGroupTypes,
210
+ controlName: 'allowedSubGroupTypes',
211
+ checkboxOptions: this.allowedSubGroupTypesOptions,
212
+ ariaLabel: this.createGroupTypeScreenTexts?.label?.ariaLabel?.allowedSubGroupTypes,
213
+ ariaDescribedById: this.createGroupTypeScreenTexts?.label?.ariaDescribedById
214
+ ?.allowedSubGroupTypes,
215
+ };
216
+ }
217
+ /**
218
+ * Initialize the create/edit group type form group array.
219
+ * @param {*} [formValue]
220
+ * @memberof CreateModifyGroupTypeComponent
221
+ */
222
+ initializeCreateGroupTypeFormGroup() {
223
+ this.createGroupTypeFormGroup = {
224
+ formGroup: [
225
+ {
226
+ legend: '',
227
+ controls: [
228
+ {
229
+ type: FormControlType?.INPUT,
230
+ label: this.createGroupTypeScreenTexts?.label?.groupType + '*',
231
+ controlName: 'groupType',
232
+ value: '',
233
+ validation: [
234
+ Validators.required,
235
+ Validators.maxLength(GroupTypeValidation.groupTypeMaxLength),
236
+ ],
237
+ supportMessage: this.createGroupTypeScreenTexts?.supportText?.groupType,
238
+ requiredErrorMessage: this.createGroupTypeScreenTexts?.message?.error?.required,
239
+ maxErrorMessage: this.createGroupTypeScreenTexts?.message?.error?.limit
240
+ ?.groupTypeMaxChars,
241
+ ariaLabel: this.createGroupTypeScreenTexts?.label?.ariaLabel?.groupType,
242
+ ariaDescribedById: this.createGroupTypeScreenTexts?.label?.ariaDescribedById
243
+ ?.groupType,
244
+ },
245
+ {
246
+ type: FormControlType?.TEXT_AREA,
247
+ label: this.createGroupTypeScreenTexts?.label?.description + '*',
248
+ controlName: 'description',
249
+ value: '',
250
+ validation: [
251
+ Validators.required,
252
+ Validators.maxLength(GroupTypeValidation.descriptionMaxLength),
253
+ ],
254
+ supportMessage: this.createGroupTypeScreenTexts?.supportText?.description,
255
+ requiredErrorMessage: this.createGroupTypeScreenTexts?.message?.error?.required,
256
+ maxCharCount: GroupTypeValidation.descriptionMaxLength,
257
+ maxErrorMessage: this.createGroupTypeScreenTexts?.message?.error?.limit
258
+ ?.descriptionMaxChars,
259
+ ariaLabel: this.createGroupTypeScreenTexts?.label?.ariaLabel?.description,
260
+ ariaDescribedById: this.createGroupTypeScreenTexts?.label?.ariaDescribedById
261
+ ?.description,
262
+ ariaMultiline: true,
263
+ isResize: true,
264
+ },
265
+ {
266
+ type: FormControlType.RADIO,
267
+ label: this.createGroupTypeScreenTexts?.label?.rosterType + '*',
268
+ controlName: 'rosterType',
269
+ value: this.tenantFunctionType === TenantFunctionType.EDIT_GROUP_TYPE
270
+ ? this.selectedGroupTypeInfo.configFieldValue.businessRule
271
+ .rosterType
272
+ : this.rosterTypeOptions[0].label,
273
+ disabled: this.tenantFunctionType === TenantFunctionType.EDIT_GROUP_TYPE,
274
+ radioOptions: this.rosterTypeOptions,
275
+ validation: [Validators.required],
276
+ requiredErrorMessage: this.createGroupTypeScreenTexts?.message?.error?.required,
277
+ ariaLabel: this.createGroupTypeScreenTexts?.label?.ariaLabel?.rosterType,
278
+ ariaDescribedById: this.createGroupTypeScreenTexts?.label?.ariaDescribedById
279
+ ?.rosterType,
280
+ },
281
+ {
282
+ type: FormControlType.CHECKBOX,
283
+ label: this.createGroupTypeScreenTexts?.label?.settings + '*',
284
+ controlName: 'settings',
285
+ checkboxOptions: this.settingOptions,
286
+ minSelectionRequired: 1,
287
+ ariaLabel: this.createGroupTypeScreenTexts?.label?.ariaLabel?.settings,
288
+ ariaDescribedById: this.createGroupTypeScreenTexts?.label?.ariaDescribedById
289
+ ?.settings,
290
+ requiredErrorMessage: this.createGroupTypeScreenTexts?.message?.error?.required,
291
+ validation: [Validators.required],
292
+ },
293
+ {
294
+ type: FormControlType.CHECKBOX,
295
+ label: this.createGroupTypeScreenTexts?.label?.appOfficerRoles + '*',
296
+ controlName: 'appOfficerRoles',
297
+ checkboxOptions: this.officerRolesOptions,
298
+ minSelectionRequired: 1,
299
+ ariaLabel: this.createGroupTypeScreenTexts?.label?.ariaLabel
300
+ ?.appOfficerRoles,
301
+ ariaDescribedById: this.createGroupTypeScreenTexts?.label?.ariaDescribedById
302
+ ?.appOfficerRoles,
303
+ requiredErrorMessage: this.createGroupTypeScreenTexts?.message?.error?.required,
304
+ validation: [Validators.required],
305
+ },
306
+ {
307
+ type: FormControlType.CHECKBOX,
308
+ label: this.createGroupTypeScreenTexts?.label?.appMemberLevel + '*',
309
+ controlName: 'appMemberLevel',
310
+ checkboxOptions: this.memberLevelOptions,
311
+ minSelectionRequired: 1,
312
+ ariaLabel: this.createGroupTypeScreenTexts?.label?.ariaLabel
313
+ ?.appMemberLevel,
314
+ ariaDescribedById: this.createGroupTypeScreenTexts?.label?.ariaDescribedById
315
+ ?.appMemberLevel,
316
+ requiredErrorMessage: this.createGroupTypeScreenTexts?.message?.error?.required,
317
+ validation: [Validators.required],
318
+ },
319
+ {
320
+ type: FormControlType.RADIO,
321
+ label: this.createGroupTypeScreenTexts?.label?.isRootGroup + '*',
322
+ controlName: 'isRootGroup',
323
+ value: this.tenantFunctionType === TenantFunctionType.EDIT_GROUP_TYPE
324
+ ? this.selectedGroupTypeInfo.configFieldValue.businessRule
325
+ .isRootGroup
326
+ ? this.isRootGroupOptions[0].label
327
+ : this.isRootGroupOptions[1].label
328
+ : this.isRootGroupOptions[1].label,
329
+ disabled: this.tenantFunctionType === TenantFunctionType.EDIT_GROUP_TYPE,
330
+ radioOptions: this.isRootGroupOptions,
331
+ validation: [Validators.required],
332
+ requiredErrorMessage: this.createGroupTypeScreenTexts?.message?.error?.required,
333
+ ariaLabel: this.createGroupTypeScreenTexts?.label?.ariaLabel?.isRootGroup,
334
+ ariaDescribedById: this.createGroupTypeScreenTexts?.label?.ariaDescribedById
335
+ ?.isRootGroup,
336
+ },
337
+ ],
338
+ },
339
+ ],
340
+ };
341
+ }
342
+ /**
343
+ * Add or removes allowed sub groups form control (checkbox group control and options) as when allow sub group selection and updates the form state.
344
+ * @param {*} selectedCheckbox
345
+ * @memberof CreateModifyGroupTypeComponent
346
+ */
347
+ onCheckboxSelectionChange(selectedCheckbox) {
348
+ if (selectedCheckbox.name === Settings.ALLOW_SUB_GROUPS) {
349
+ if (selectedCheckbox.checked) {
350
+ this.componentRef = this.formUtilityService.addFormControl(this.dynamicFormComponentViewRef, CheckboxComponent, this.createModifyGroupTypeFormGroupRef, this.allowedSubGroupTypesFieldConfig, this.renderer, this.elementRef, 'is-root-group', this.dynamicFormComponent);
351
+ }
352
+ else {
353
+ this.allowedSubGroupTypesOptions.forEach((allowedSubGroupTypes) => (allowedSubGroupTypes.checked = false));
354
+ this.formUtilityService.removeFormControl(this.createModifyGroupTypeFormGroupRef, this.allowedSubGroupTypesFieldConfig, this.componentRef, this.renderer, this.elementRef);
355
+ }
356
+ }
357
+ }
358
+ /**
359
+ * Sets create/modify group type reactive form group reference.
360
+ * @param {FormGroup[]} form -The form group array containing the form to be referenced.
361
+ * @memberof CreateModifyGroupTypeComponent
362
+ */
363
+ getCreateModifyGroupTypeFormGroupRef(form) {
364
+ this.createModifyGroupTypeFormGroupRef = form[0];
365
+ }
366
+ /**
367
+ * Find the provided setting name in setting option and return the boolean value.
368
+ * @param {string} settingName
369
+ * @return {*} {boolean}
370
+ * @memberof CreateModifyGroupTypeComponent
371
+ */
372
+ isSettingSelectedByName(settingName) {
373
+ return this.settingOptions.find((setting) => setting.name === settingName)?.checked;
374
+ }
375
+ /**
376
+ * Creates a new group type on form submission and the form is valid.
377
+ * @param {FormGroup[]} form
378
+ * @memberof CreateModifyGroupTypeComponent
379
+ */
380
+ onCreateModifyGroupTypeFormSubmit(form) {
381
+ form[0]?.markAllAsTouched();
382
+ if (form[0].status === FormStatus.VALID) {
383
+ const selectedGroupTypes = this.allowedSubGroupTypesOptions
384
+ .filter((subGroupType) => subGroupType.checked)
385
+ .map((selectedGroupType) => selectedGroupType.id);
386
+ const selectedRoles = [
387
+ ...this.memberLevelOptions.filter((memberLevel) => memberLevel.checked),
388
+ ...this.officerRolesOptions.filter((officerRole) => officerRole.checked),
389
+ ].map((selectedRole) => {
390
+ return {
391
+ roleId: selectedRole.id,
392
+ };
393
+ });
394
+ const configFieldValue = {
395
+ name: form[0].get('groupType')?.value,
396
+ description: form[0].get('description')?.value,
397
+ businessRule: {
398
+ rosterType: form[0].get('rosterType')?.value,
399
+ allowEdit: this.isSettingSelectedByName(Settings.ALLOW_EDIT),
400
+ allowRoster: this.isSettingSelectedByName(Settings.ALLOW_ROSTERS),
401
+ allowAlternateVoting: this.isSettingSelectedByName(Settings.ALLOW_ALTERNATE_VOTING),
402
+ allowDelete: this.isSettingSelectedByName(Settings.ALLOW_DELETE),
403
+ allowSubGroup: this.isSettingSelectedByName(Settings.ALLOW_SUB_GROUPS),
404
+ hasClassification: this.isSettingSelectedByName(Settings.HAS_CLASSIFICATION),
405
+ allowedGroupType: selectedGroupTypes,
406
+ isRootGroup: form[0].get('isRootGroup')?.value ===
407
+ this.isRootGroupOptions[0].label,
408
+ },
409
+ };
410
+ if (form[0].get('isRootGroup')?.value === this.isRootGroupOptions[0].label)
411
+ configFieldValue.hierarchy = 0;
412
+ const createGroupTypePayload = {
413
+ payload: {
414
+ appId: this.appId,
415
+ roles: selectedRoles,
416
+ configFieldName: 'group_type',
417
+ configFieldValue: JSON.stringify(configFieldValue),
418
+ },
419
+ };
420
+ this.tenantAppService
421
+ .createGroupType(createGroupTypePayload)
422
+ .pipe(takeUntil(this.destroy$))
423
+ .subscribe({
424
+ next: (response) => {
425
+ if (response.status) {
426
+ const { appId, roles, configFieldName } = createGroupTypePayload.payload;
427
+ const configFieldValue = JSON.parse(createGroupTypePayload.payload.configFieldValue);
428
+ this.tenantAppService.setNewlyCreatedGroupTypeInfo({
429
+ appId,
430
+ roles,
431
+ configFieldName,
432
+ configFieldValue,
433
+ });
434
+ this.submitFormResponse.emit(response);
435
+ }
436
+ },
437
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
438
+ error: (error) => {
439
+ this.sharedService.handleErrors(error, this.createGroupTypeScreenTexts.errors);
440
+ },
441
+ });
442
+ }
443
+ }
444
+ /**
445
+ * Emits form cancel event.
446
+ * @memberof CreateModifyGroupTypeComponent
447
+ */
448
+ onFormCancel() {
449
+ this.formCancel.emit();
450
+ }
451
+ /**
452
+ * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.
453
+ * @memberof CreateModifyGroupTypeComponent
454
+ */
455
+ ngOnDestroy() {
456
+ this.destroy$.next(true);
457
+ this.destroy$.unsubscribe();
458
+ }
459
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateModifyGroupTypeComponent, deps: [{ token: i1.TenantApplicationsService }, { token: i2.SharedService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.FormUtilityService }], target: i0.ɵɵFactoryTarget.Component }); }
460
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CreateModifyGroupTypeComponent, isStandalone: true, selector: "ieeesa-create-modify-group-type", outputs: { submitFormResponse: "submitFormResponse", formCancel: "formCancel" }, viewQueries: [{ propertyName: "dynamicFormComponent", first: true, predicate: DynamicFormComponent, descendants: true }, { propertyName: "dynamicFormComponentViewRef", first: true, predicate: DynamicFormComponent, descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<ieeesa-dynamic-form\r\n *ngIf=\"createGroupTypeFormGroup\"\r\n class=\"ieeesa-create-group-type-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"createGroupTypeFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onCreateModifyGroupTypeFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n (formGroupsReference)=\"getCreateModifyGroupTypeFormGroupRef($event)\"\r\n (formCheckboxSelection)=\"onCheckboxSelectionChange($event)\"\r\n></ieeesa-dynamic-form>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-create-modify-group-type{width:60vw!important}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .mat-mdc-dialog-container{box-shadow:none}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-modal .mat-mdc-dialog-content{padding:1em!important}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-modal .ieeesa-dynamic-form__actions{flex-direction:row-reverse;gap:.5em}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-modal .ieeesa-dynamic-form__form-field{margin-bottom:1em;padding-top:0!important}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field__resize{resize:vertical}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-input-field{width:50%}@media (max-width: 767px){.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-dynamic-form__form-field{width:100%}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-dynamic-form .ieeesa-input-field,.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-dynamic-form .mat-mdc-form-field-flex{width:100%!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DynamicFormComponent, selector: "ieeesa-dynamic-form", inputs: ["formGroups", "submitResponse", "searchResponse", "fileUploadStatus", "colWidth", "isLegendVisible", "rightButtonLabel", "leftButtonLabel", "isSubmitButtonDisabled", "isLeftButtonDisabled", "isLeftButtonNeeded", "isRightButtonNeeded", "actionButtonAlign", "fileDownloadAndDeleteConfig"], outputs: ["formSubmit", "formChange", "formInput", "formLeftButtonClicked", "formSearchApply", "formGroupsReference", "dropdownChange", "formCheckboxSelection", "formDateSelected", "formSelectSearch", "formControlChange", "formAutoCompleteSearch", "formAutoCompleteClearSearchValue", "autoCompleteOptionSelected", "formAfterContentInit", "formSelectedDateRange", "addFormGroup", "formTimeSelected", "supportTextLinkClick", "formSlideToggleChange", "formFileUpload", "dropdownOpenedChange", "formColorPickerChange", "formRadioOptionSelected", "ctaButtonClick", "formMultiSelectAutoCompleteSearch", "formMultiSelectAutoCompleteClearSearchValue", "multiSelectAutoCompleteOptionsSelected", "formRichTextEditorContentChange"], exportAs: ["dynamicForm"] }], encapsulation: i0.ViewEncapsulation.None }); }
461
+ }
462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateModifyGroupTypeComponent, decorators: [{
463
+ type: Component,
464
+ args: [{ selector: 'ieeesa-create-modify-group-type', standalone: true, imports: [CommonModule, DynamicFormComponent], encapsulation: ViewEncapsulation.None, template: "<ieeesa-dynamic-form\r\n *ngIf=\"createGroupTypeFormGroup\"\r\n class=\"ieeesa-create-group-type-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"createGroupTypeFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onCreateModifyGroupTypeFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n (formGroupsReference)=\"getCreateModifyGroupTypeFormGroupRef($event)\"\r\n (formCheckboxSelection)=\"onCheckboxSelectionChange($event)\"\r\n></ieeesa-dynamic-form>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-create-modify-group-type{width:60vw!important}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .mat-mdc-dialog-container{box-shadow:none}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-modal .mat-mdc-dialog-content{padding:1em!important}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-modal .ieeesa-dynamic-form__actions{flex-direction:row-reverse;gap:.5em}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-modal .ieeesa-dynamic-form__form-field{margin-bottom:1em;padding-top:0!important}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field__resize{resize:vertical}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-input-field{width:50%}@media (max-width: 767px){.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-dynamic-form__form-field{width:100%}.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-dynamic-form .ieeesa-input-field,.ieeesa-modal-dialog.ieeesa-create-modify-group-type .ieeesa-dynamic-form .mat-mdc-form-field-flex{width:100%!important}}\n"] }]
465
+ }], ctorParameters: function () { return [{ type: i1.TenantApplicationsService }, { type: i2.SharedService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i2.FormUtilityService }]; }, propDecorators: { dynamicFormComponent: [{
466
+ type: ViewChild,
467
+ args: [DynamicFormComponent]
468
+ }], dynamicFormComponentViewRef: [{
469
+ type: ViewChild,
470
+ args: [DynamicFormComponent, { read: ViewContainerRef }]
471
+ }], submitFormResponse: [{
472
+ type: Output
473
+ }], formCancel: [{
474
+ type: Output
475
+ }] } });
476
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vZGlmeS1ncm91cC10eXBlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbmFudHMvc3JjL2xpYi9jb21wb25lbnRzL2NyZWF0ZS1tb2RpZnktZ3JvdXAtdHlwZS9jcmVhdGUtbW9kaWZ5LWdyb3VwLXR5cGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVuYW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3JlYXRlLW1vZGlmeS1ncm91cC10eXBlL2NyZWF0ZS1tb2RpZnktZ3JvdXAtdHlwZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFHWixNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQ0wsU0FBUyxFQUdULGVBQWUsRUFJZixpQkFBaUIsRUFDakIsb0JBQW9CLEdBQ3JCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sS0FBSyxXQUFXLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsT0FBTyxFQUNMLFFBQVEsRUFDUixpQkFBaUIsR0FDbEIsTUFBTSw2Q0FB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SUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDOytHQXRoQlUsOEJBQThCO21HQUE5Qiw4QkFBOEIsa09Ba0M5QixvQkFBb0IsOEZBRXBCLG9CQUFvQiwyQkFBVSxnQkFBZ0IsNkJDckczRCxncUJBZUEsbzVURDZDWSxZQUFZLG1JQUFFLG9CQUFvQjs7NEZBS2pDLDhCQUE4QjtrQkFSMUMsU0FBUzsrQkFDRSxpQ0FBaUMsY0FDL0IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLGlCQUc5QixpQkFBaUIsQ0FBQyxJQUFJOzhOQXFDckMsb0JBQW9CO3NCQURuQixTQUFTO3VCQUFDLG9CQUFvQjtnQkFHL0IsMkJBQTJCO3NCQUQxQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQVFqRCxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBS0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UsIExPViwgRm9ybVV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vc2hhcmVkJztcclxuaW1wb3J0IHtcclxuICBBbGlnblR5cGUsXHJcbiAgQ2hlY2tib3hPcHRpb24sXHJcbiAgRmllbGRDb25maWcsXHJcbiAgRm9ybUNvbnRyb2xUeXBlLFxyXG4gIEZvcm1HcmlkLFxyXG4gIEZvcm1Nb2RlbCxcclxuICBSYWRpb09wdGlvbixcclxuICBDaGVja2JveENvbXBvbmVudCxcclxuICBEeW5hbWljRm9ybUNvbXBvbmVudCxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgeyBHcm91cFJvc3RlclR5cGUsIFJvbGVUeXBlIH0gZnJvbSAnQGllZWVzYS1ucG0vZ3JvdXBzJztcclxuaW1wb3J0IHsgQWxlcnRUeXBlLCBGb3JtU3RhdHVzIH0gZnJvbSAnQGllZWVzYS1ucG0vbW9kZWxzJztcclxuaW1wb3J0ICogYXMgc2NyZWVuVGV4dHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBUeXBlVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL2Fzc2V0cy90ZW5hbnQtdmFsaWRhdGlvbnMnO1xyXG5pbXBvcnQgeyBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVuYW50LWFwcGxpY2F0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTZXR0aW5ncyxcclxuICBSb3N0ZXJUeXBlTE9WQ29kZSxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvY3JlYXRlLWdyb3VwLXR5cGUtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gJy4uLy4uL21vZGVscy9yb2xlcy1hbmQtcGVybWlzc2lvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBUZW5hbnRGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGVuYW50LWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIFZpZXdHcm91cFR5cGVSZXNwb25zZSxcclxuICBWaWV3R3JvdXBUeXBlc0NvbmZpZ3VyYXRpb24sXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZpZXctdGVuYW50LWdyb3VwLXR5cGVzLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBDb25maWdGaWVsZFZhbHVlLFxyXG4gIENyZWF0ZUdyb3VwVHlwZVJlcXVlc3RQYXlsb2FkLFxyXG4gIENyZWF0ZUdyb3VwVHlwZVJlc3BvbnNlLFxyXG4gIENyZWF0ZWRPck1vZGlmaWVkR3JvdXBUeXBlSW5mbyxcclxuICBHZXRSb3N0ZXJUeXBlT3JTZXR0aW5nc1Jlc3BvbnNlLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9jcmVhdGUtZ3JvdXAtdHlwZS5tb2RlbCc7XHJcblxyXG4vKipcclxuICogQ3JlYXRlTW9kaWZ5R3JvdXBUeXBlQ29tcG9uZW50IHVzZXMgRHluYW1pY0Zvcm1Db21wb25lbnQgdG8gYnVpbGQgY3JlYXRlIGFkZCBncm91cCB0eXBlIGZvcm0gb3IgZWRpdCBncm91cCB0eXBlIGZvcm0gYW5kIGltcGxlbWVudCB0aGUgZnVuY3Rpb25hbGl0aWVzIG9mIHN1Ym1pc3Npb24gb2YgZm9ybSBhbmQgaGFuZGxpbmcgc3VjY2VzcyBhbmQgZXJyb3Igc2NlbmFyaW9zLlxyXG4gKiBAY2xhc3MgQ3JlYXRlTW9kaWZ5R3JvdXBUeXBlQ29tcG9uZW50XHJcbiAqIEBpbXBsZW1lbnRzIHtPbkluaXR9XHJcbiAqIEBpbXBsZW1lbnRzIHtPbkRlc3Ryb3l9XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2llZWVzYS1jcmVhdGUtbW9kaWZ5LWdyb3VwLXR5cGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHluYW1pY0Zvcm1Db21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtbW9kaWZ5LWdyb3VwLXR5cGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS1tb2RpZnktZ3JvdXAtdHlwZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVNb2RpZnlHcm91cFR5cGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29uc3RhbnRzOiBhbnkgPSBzY3JlZW5UZXh0cztcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzOiBhbnkgPSB0aGlzLmNvbnN0YW50cz8uY3JlYXRlR3JvdXBUeXBlO1xyXG4gIGxlZnRCdXR0b25MYWJlbCA9IHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmxhYmVsPy5sZWZ0QnV0dG9uTGFiZWw7XHJcbiAgcmlnaHRCdXR0b25MYWJlbCA9IHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmxhYmVsPy5yaWdodEJ1dHRvbkxhYmVsO1xyXG4gIGNvbFdpZHRoOiBGb3JtR3JpZCA9IHsgeHM6IDEyLCB4bDogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIgfTtcclxuICBjcmVhdGVHcm91cFR5cGVGb3JtR3JvdXAhOiBGb3JtTW9kZWw7XHJcbiAgY3JlYXRlTW9kaWZ5R3JvdXBUeXBlRm9ybUdyb3VwUmVmITogRm9ybUdyb3VwO1xyXG4gIGFjdGlvbkJ1dHRvbkFsaWduID0gQWxpZ25UeXBlLkxFRlQ7XHJcbiAgdGVuYW50RnVuY3Rpb25UeXBlITogVGVuYW50RnVuY3Rpb25UeXBlO1xyXG4gIGlzUm9vdEdyb3VwT3B0aW9ucyA9IFtcclxuICAgIHtcclxuICAgICAgaWQ6IDEsXHJcbiAgICAgIGxhYmVsOiB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5pc1Jvb3RHcm91cE9wdGlvbnM/LnllcyxcclxuICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogMixcclxuICAgICAgbGFiZWw6IHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmlzUm9vdEdyb3VwT3B0aW9ucz8ubm8sXHJcbiAgICAgIGNoZWNrZWQ6IHRydWUsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgcm9zdGVyVHlwZU9wdGlvbnM6IFJhZGlvT3B0aW9uW10gPSBbXTtcclxuICBzZXR0aW5nT3B0aW9uczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIG9mZmljZXJSb2xlc09wdGlvbnM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBtZW1iZXJMZXZlbE9wdGlvbnM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBhbGxvd2VkU3ViR3JvdXBUeXBlc09wdGlvbnM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBhbGxvd2VkU3ViR3JvdXBUeXBlc0ZpZWxkQ29uZmlnITogRmllbGRDb25maWc7XHJcbiAgYXBwSWQhOiBzdHJpbmc7XHJcbiAgZ3JvdXBUeXBlRGV0YWlscyE6IFZpZXdHcm91cFR5cGVSZXNwb25zZTtcclxuICBzZWxlY3RlZEdyb3VwVHlwZUluZm8hOiBDcmVhdGVkT3JNb2RpZmllZEdyb3VwVHlwZUluZm87XHJcbiAgQFZpZXdDaGlsZChEeW5hbWljRm9ybUNvbXBvbmVudClcclxuICBkeW5hbWljRm9ybUNvbXBvbmVudCE6IER5bmFtaWNGb3JtQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoRHluYW1pY0Zvcm1Db21wb25lbnQsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIGR5bmFtaWNGb3JtQ29tcG9uZW50Vmlld1JlZiE6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb21wb25lbnRSZWYhOiBDb21wb25lbnRSZWY8YW55PjtcclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVyIGZvciBmb3JtIHN1Ym1pc3Npb24gcmVzcG9uc2UuXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZU1vZGlmeUdyb3VwVHlwZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzdWJtaXRGb3JtUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlciBmb3IgZm9ybSBjYW5jZWwgYWN0aW9uLlxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVNb2RpZnlHcm91cFR5cGVDb21wb25lbnRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgZm9ybUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSB0ZW5hbnRBcHBTZXJ2aWNlOiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGZvcm1VdGlsaXR5U2VydmljZTogRm9ybVV0aWxpdHlTZXJ2aWNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvbixcclxuICApIHt9XHJcbiAgLyoqXHJcbiAgICogU2V0cyBhcHBJZCwgdGVuYW50RnVuY3Rpb25UeXBlIGFuZCBjYWxscyBnZXRHcm91cFR5cGVzKCkgJiBnZXRSb3N0ZXJUeXBlcygpIHRvIGdldCBncm91cCBhbmQgcm9zdGVyIHR5cGVzLlxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVNb2RpZnlHcm91cFR5cGVDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwSWQgPSB0aGlzLnRlbmFudEFwcFNlcnZpY2UuZ2V0U2VsZWN0ZWRUZW5hbnRJbmZvcm1hdGlvbigpXHJcbiAgICAgID8uYXBwSWQgYXMgc3RyaW5nO1xyXG4gICAgdGhpcy50ZW5hbnRGdW5jdGlvblR5cGUgPSB0aGlzLnRlbmFudEFwcFNlcnZpY2U/LmdldFRlbmFudEZ1bmN0aW9uVHlwZSgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwVHlwZUluZm8gPVxyXG4gICAgICB0aGlzLnRlbmFudEFwcFNlcnZpY2U/LmdldE5ld2x5Q3JlYXRlZEdyb3VwVHlwZUluZm8oKTtcclxuICAgIHRoaXMuZ2V0R3JvdXBUeXBlcygpO1xyXG4gICAgdGhpcy5nZXRSb3N0ZXJUeXBlcygpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHJvc3RlciB0eXBlcyBhbmQgdXBkYXRlcyB0aGUgZm9ybSBjb250cm9sLlxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVNb2RpZnlHcm91cFR5cGVDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRSb3N0ZXJUeXBlcygpOiB2b2lkIHtcclxuICAgIHRoaXMudGVuYW50QXBwU2VydmljZVxyXG4gICAgICAuZ2V0Um9zdGVyVHlwZSgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBHZXRSb3N0ZXJUeXBlT3JTZXR0aW5nc1Jlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLmdldFNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvc3RlclR5cGVMaXN0ID0gcmVzcG9uc2UuYm9keSBhcyBMT1ZbXTtcclxuICAgICAgICAgICAgcm9zdGVyVHlwZUxpc3QubWFwKChyb3N0ZXJUeXBlOiBMT1YpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5yb3N0ZXJUeXBlT3B0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiByb3N0ZXJUeXBlLmxvdklkLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHJvc3RlclR5cGUubG92RGVzYyxcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHJvc3RlclR5cGUubG92Q29kZSA9PT0gUm9zdGVyVHlwZUxPVkNvZGUuSU5ESVZJRFVBTCxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5oYW5kbGVFcnJvcnMoXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzLmVycm9yc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBzZXR0aW5ncyBhbmQgdXBkYXRlcyB0aGUgZm9ybSBjb250cm9sLlxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVNb2RpZnlHcm91cFR5cGVDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgIHRoaXMudGVuYW50QXBwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBUeXBlU2V0dGluZ3MoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZTogR2V0Um9zdGVyVHlwZU9yU2V0dGluZ3NSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLmdldFJvbGVzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzTGlzdCA9IHJlc3BvbnNlLmJvZHkgYXMgTE9WW107XHJcbiAgICAgICAgICAgIHNldHRpbmdzTGlzdC5tYXAoKHNldHRpbmc6IExPVikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0dGluZ09wdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogc2V0dGluZy5sb3ZJZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHNldHRpbmcubG92RGVzYyxcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaGFuZGxlRXJyb3JzKFxyXG4gICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cFR5cGVTY3JlZW5UZXh0cy5lcnJvcnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygcm9sZXMgYW5kIHVwZGF0ZXMgdGhlIGZvcm0gY29udHJvbC5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlTW9kaWZ5R3JvdXBUeXBlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Um9sZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRlbmFudEFwcFNlcnZpY2VcclxuICAgICAgLmdldFJvbGVzKHRoaXMuYXBwSWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnN0YXR1cykge1xyXG4gICAgICAgICAgICBjb25zdCByb2xlc0xpc3QgPSByZXNwb25zZT8uYm9keSBhcyBSb2xlW107XHJcbiAgICAgICAgICAgIHJvbGVzTGlzdC5tYXAoKHJvbGU6IFJvbGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocm9sZS5yb2xlVHlwZU5hbWUgPT09IFJvbGVUeXBlLk9GRklDRVIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2ZmaWNlclJvbGVzT3B0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgaWQ6IHJvbGUucm9sZUlkLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiByb2xlLnJvbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlLnJvbGVUeXBlTmFtZSA9PT0gUm9sZVR5cGUuTUVNQkVSX0xFVkVMKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbWJlckxldmVsT3B0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgaWQ6IHJvbGUucm9sZUlkLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiByb2xlLnJvbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRoaXMubWVtYmVyTGV2ZWxPcHRpb25zLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAgICAgICAgIHRoaXMub2ZmaWNlclJvbGVzT3B0aW9ucy5sZW5ndGggPT09IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICBBbGVydFR5cGUuRVJST1IsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzLmVycm9yc1snMzAxOSddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDcmVhdGVHcm91cFR5cGVGb3JtR3JvdXAoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5oYW5kbGVFcnJvcnMoXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzLmVycm9yc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgZmlsdGVycyBub24gU1lTVEVNX1VTRVIgZ3JvdXAgdHlwZXMsIGNvbnN0cnVjdHMgYWxsb3dlZCBzdWItZ3JvdXAgdHlwZXMgb3B0aW9ucyBhbmQgZm9ybSBmaWVsZCBjb25maWcuXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZU1vZGlmeUdyb3VwVHlwZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEdyb3VwVHlwZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwVHlwZURldGFpbHMgPSB0aGlzLnRlbmFudEFwcFNlcnZpY2UuZ2V0R3JvdXBUeXBlRGV0YWlscygpO1xyXG4gICAgdGhpcy5ncm91cFR5cGVEZXRhaWxzPy5ib2R5Py5mb3JFYWNoKFxyXG4gICAgICAoaXRlbTogVmlld0dyb3VwVHlwZXNDb25maWd1cmF0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaXRlbT8uY29uZmlnRmllbGRWYWx1ZT8uYnVzaW5lc3NSdWxlPy5yb3N0ZXJUeXBlICE9PVxyXG4gICAgICAgICAgR3JvdXBSb3N0ZXJUeXBlPy5TWVNURU1fVVNFUlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5hbGxvd2VkU3ViR3JvdXBUeXBlc09wdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIGlkOiBpdGVtPy5jb25maWdGaWVsZElkLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtPy5jb25maWdGaWVsZFZhbHVlPy5uYW1lLFxyXG4gICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5hbGxvd2VkU3ViR3JvdXBUeXBlc0ZpZWxkQ29uZmlnID0ge1xyXG4gICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuQ0hFQ0tCT1gsXHJcbiAgICAgIGxhYmVsOiB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uYWxsb3dlZFN1Ykdyb3VwVHlwZXMsXHJcbiAgICAgIGNvbnRyb2xOYW1lOiAnYWxsb3dlZFN1Ykdyb3VwVHlwZXMnLFxyXG4gICAgICBjaGVja2JveE9wdGlvbnM6IHRoaXMuYWxsb3dlZFN1Ykdyb3VwVHlwZXNPcHRpb25zLFxyXG4gICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgdGhpcy5jcmVhdGVHcm91cFR5cGVTY3JlZW5UZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uYWxsb3dlZFN1Ykdyb3VwVHlwZXMsXHJcbiAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgPy5hbGxvd2VkU3ViR3JvdXBUeXBlcyxcclxuICAgIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGNyZWF0ZS9lZGl0IGdyb3VwIHR5cGUgZm9ybSBncm91cCBhcnJheS5cclxuICAgKiBAcGFyYW0geyp9IFtmb3JtVmFsdWVdXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZU1vZGlmeUdyb3VwVHlwZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGluaXRpYWxpemVDcmVhdGVHcm91cFR5cGVGb3JtR3JvdXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZUZvcm1Hcm91cCA9IHtcclxuICAgICAgZm9ybUdyb3VwOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVnZW5kOiAnJyxcclxuICAgICAgICAgIGNvbnRyb2xzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGU/LklOUFVULFxyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uZ3JvdXBUeXBlICsgJyonLFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnZ3JvdXBUeXBlJyxcclxuICAgICAgICAgICAgICB2YWx1ZTogJycsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKEdyb3VwVHlwZVZhbGlkYXRpb24uZ3JvdXBUeXBlTWF4TGVuZ3RoKSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cFR5cGVTY3JlZW5UZXh0cz8uc3VwcG9ydFRleHQ/Lmdyb3VwVHlwZSxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICBtYXhFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5tZXNzYWdlPy5lcnJvcj8ubGltaXRcclxuICAgICAgICAgICAgICAgICAgPy5ncm91cFR5cGVNYXhDaGFycyxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5ncm91cFR5cGUsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgPy5ncm91cFR5cGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGU/LlRFWFRfQVJFQSxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jcmVhdGVHcm91cFR5cGVTY3JlZW5UZXh0cz8ubGFiZWw/LmRlc2NyaXB0aW9uICsgJyonLFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnZGVzY3JpcHRpb24nLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiAnJyxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoR3JvdXBUeXBlVmFsaWRhdGlvbi5kZXNjcmlwdGlvbk1heExlbmd0aCksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LnN1cHBvcnRUZXh0Py5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICBtYXhDaGFyQ291bnQ6IEdyb3VwVHlwZVZhbGlkYXRpb24uZGVzY3JpcHRpb25NYXhMZW5ndGgsXHJcbiAgICAgICAgICAgICAgbWF4RXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cFR5cGVTY3JlZW5UZXh0cz8ubWVzc2FnZT8uZXJyb3I/LmxpbWl0XHJcbiAgICAgICAgICAgICAgICAgID8uZGVzY3JpcHRpb25NYXhDaGFycyxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgICA/LmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICAgIGFyaWFNdWx0aWxpbmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgaXNSZXNpemU6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuUkFESU8sXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmxhYmVsPy5yb3N0ZXJUeXBlICsgJyonLFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAncm9zdGVyVHlwZScsXHJcbiAgICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbmFudEZ1bmN0aW9uVHlwZSA9PT0gVGVuYW50RnVuY3Rpb25UeXBlLkVESVRfR1JPVVBfVFlQRVxyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRHcm91cFR5cGVJbmZvLmNvbmZpZ0ZpZWxkVmFsdWUuYnVzaW5lc3NSdWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAucm9zdGVyVHlwZVxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMucm9zdGVyVHlwZU9wdGlvbnNbMF0ubGFiZWwsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbmFudEZ1bmN0aW9uVHlwZSA9PT0gVGVuYW50RnVuY3Rpb25UeXBlLkVESVRfR1JPVVBfVFlQRSxcclxuICAgICAgICAgICAgICByYWRpb09wdGlvbnM6IHRoaXMucm9zdGVyVHlwZU9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cFR5cGVTY3JlZW5UZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LnJvc3RlclR5cGUsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgPy5yb3N0ZXJUeXBlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLkNIRUNLQk9YLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uc2V0dGluZ3MgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdzZXR0aW5ncycsXHJcbiAgICAgICAgICAgICAgY2hlY2tib3hPcHRpb25zOiB0aGlzLnNldHRpbmdPcHRpb25zLFxyXG4gICAgICAgICAgICAgIG1pblNlbGVjdGlvblJlcXVpcmVkOiAxLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LnNldHRpbmdzLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cFR5cGVTY3JlZW5UZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICAgID8uc2V0dGluZ3MsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLkNIRUNLQk9YLFxyXG4gICAgICAgICAgICAgIGxhYmVsOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cFR5cGVTY3JlZW5UZXh0cz8ubGFiZWw/LmFwcE9mZmljZXJSb2xlcyArICcqJyxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2FwcE9mZmljZXJSb2xlcycsXHJcbiAgICAgICAgICAgICAgY2hlY2tib3hPcHRpb25zOiB0aGlzLm9mZmljZXJSb2xlc09wdGlvbnMsXHJcbiAgICAgICAgICAgICAgbWluU2VsZWN0aW9uUmVxdWlyZWQ6IDEsXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cFR5cGVTY3JlZW5UZXh0cz8ubGFiZWw/LmFyaWFMYWJlbFxyXG4gICAgICAgICAgICAgICAgICA/LmFwcE9mZmljZXJSb2xlcyxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgICA/LmFwcE9mZmljZXJSb2xlcyxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuQ0hFQ0tCT1gsXHJcbiAgICAgICAgICAgICAgbGFiZWw6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uYXBwTWVtYmVyTGV2ZWwgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdhcHBNZW1iZXJMZXZlbCcsXHJcbiAgICAgICAgICAgICAgY2hlY2tib3hPcHRpb25zOiB0aGlzLm1lbWJlckxldmVsT3B0aW9ucyxcclxuICAgICAgICAgICAgICBtaW5TZWxlY3Rpb25SZXF1aXJlZDogMSxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uYXJpYUxhYmVsXHJcbiAgICAgICAgICAgICAgICAgID8uYXBwTWVtYmVyTGV2ZWwsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgPy5hcHBNZW1iZXJMZXZlbCxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuUkFESU8sXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmxhYmVsPy5pc1Jvb3RHcm91cCArICcqJyxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2lzUm9vdEdyb3VwJyxcclxuICAgICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICAgIHRoaXMudGVuYW50RnVuY3Rpb25UeXBlID09PSBUZW5hbnRGdW5jdGlvblR5cGUuRURJVF9HUk9VUF9UWVBFXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEdyb3VwVHlwZUluZm8uY29uZmlnRmllbGRWYWx1ZS5idXNpbmVzc1J1bGVcclxuICAgICAgICAgICAgICAgICAgICAgIC5pc1Jvb3RHcm91cFxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5pc1Jvb3RHcm91cE9wdGlvbnNbMF0ubGFiZWxcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNSb290R3JvdXBPcHRpb25zWzFdLmxhYmVsXHJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5pc1Jvb3RHcm91cE9wdGlvbnNbMV0ubGFiZWwsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbmFudEZ1bmN0aW9uVHlwZSA9PT0gVGVuYW50RnVuY3Rpb25UeXBlLkVESVRfR1JPVVBfVFlQRSxcclxuICAgICAgICAgICAgICByYWRpb09wdGlvbnM6IHRoaXMuaXNSb290R3JvdXBPcHRpb25zLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwVHlwZVNjcmVlblRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5pc1Jvb3RHcm91cCxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgICA/LmlzUm9vdEdyb3VwLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQWRkIG9yIHJlbW92ZXMgYWxsb3dlZCBzdWIgZ3JvdXBzIGZvcm0gY29udHJvbCAoY2hlY2tib3ggZ3JvdXAgY29udHJvbCBhbmQgb3B0aW9ucykgYXMgd2hlbiBhbGxvdyBzdWIgZ3JvdXAgc2VsZWN0aW9uIGFuZCB1cGRhdGVzIHRoZSBmb3JtIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7Kn0gc2VsZWN0ZWRDaGVja2JveFxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVNb2RpZnlHcm91cFR5cGVDb21wb25lbnRcclxuICAgKi9cclxuICBvbkNoZWNrYm94U2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkQ2hlY2tib3g6IENoZWNrYm94T3B0aW9uKTogdm9pZCB7XHJcbiAgICBpZiAoc2VsZWN0ZWRDaGVja2JveC5uYW1lID09PSBTZXR0aW5ncy5BTExPV19TVUJfR1JPVVBTKSB7XHJcbiAgICAgIGlmIChzZWxlY3RlZENoZWNrYm94LmNoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuZm9ybVV0aWxpdHlTZXJ2aWNlLmFkZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgdGhpcy5keW5hbWljRm9ybUNvbXBvbmVudFZpZXdSZWYsXHJcbiAgICAgICAgICBDaGVja2JveENvbXBvbmVudCxcclxuICAgICAgICAgIHRoaXMuY3JlYXRlTW9kaWZ5R3JvdXBUeXBlRm9ybUdyb3VwUmVmLFxyXG4gICAgICAgICAgdGhpcy5hbGxvd2VkU3ViR3JvdXBUeXBlc0ZpZWxkQ29uZmlnLFxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlcixcclxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZixcclxuICAgICAgICAgICdpcy1yb290LWdyb3VwJyxcclxuICAgICAgICAgIHRoaXMuZHluYW1pY0Zvcm1Db21wb25lbnRcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWxsb3dlZFN1Ykdyb3VwVHlwZXNPcHRpb25zLmZvckVhY2goXHJcbiAgICAgICAgICAoYWxsb3dlZFN1Ykdyb3VwVHlwZXM6IENoZWNrYm94T3B0aW9uKSA9PlxyXG4gICAgICAgICAgICAoYWxsb3dlZFN1Ykdyb3VwVHlwZXMuY2hlY2tlZCA9IGZhbHNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5mb3JtVXRpbGl0eVNlcnZpY2UucmVtb3ZlRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZU1vZGlmeUdyb3VwVHlwZUZvcm1Hcm91cFJlZixcclxuICAgICAgICAgIHRoaXMuYWxsb3dlZFN1Ykdyb3VwVHlwZXNGaWVsZENvbmZpZyxcclxuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLFxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlcixcclxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyBjcmVhdGUvbW9kaWZ5IGdyb3VwIHR5cGUgcmVhY3RpdmUgZm9ybSBncm91cCByZWZlcmVuY2UuXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybSAtVGhlIGZvcm0gZ3JvdXAgYXJyYXkgY29udGFpbmluZyB0aGUgZm9ybSB0byBiZSByZWZlcmVuY2VkLlxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVNb2RpZnlHcm91cFR5cGVDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRDcmVhdGVNb2RpZnlHcm91cFR5cGVGb3JtR3JvdXBSZWYoZm9ybTogRm9ybUdyb3VwW10pOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlYXRlTW9kaWZ5R3JvdXBUeXBlRm9ybUdyb3VwUmVmID0gZm9ybVswXTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmluZCB0aGUgcHJvdmlkZWQgc2V0dGluZyBuYW1lIGluIHNldHRpbmcgb3B0aW9uIGFuZCByZXR1cm4gdGhlIGJvb2xlYW4gdmFsdWUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNldHRpbmdOYW1lXHJcbiAgICogQHJldHVybiB7Kn0gIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVNb2RpZnlHcm91cFR5cGVDb21wb25lbnRcclxuICAgKi9cclxuICBpc1NldHRpbmdTZWxlY3RlZEJ5TmFtZShzZXR0aW5nTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5nT3B0aW9ucy5maW5kKFxyXG4gICAgICAoc2V0dGluZzogQ2hlY2tib3hPcHRpb24pID0+IHNldHRpbmcubmFtZSA9PT0gc2V0dGluZ05hbWVcclxuICAgICk/LmNoZWNrZWQgYXMgYm9vbGVhbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG5ldyBncm91cCB0eXBlIG9uIGZvcm0gc3VibWlzc2lvbiBhbmQgdGhlIGZvcm0gaXMgdmFsaWQuXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVNb2RpZnlHcm91cFR5cGVDb21wb25lbnRcclxuICAgKi9cclxuICBvbkNyZWF0ZU1vZGlmeUdyb3VwVHlwZUZvcm1TdWJtaXQoZm9ybTogRm9ybUdyb3VwW10pOiB2b2lkIHtcclxuICAgIGZvcm1bMF0/Lm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIGlmIChmb3JtWzBdLnN0YXR1cyA9PT0gRm9ybVN0YXR1cy5WQUxJRCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEdyb3VwVHlwZXMgPSB0aGlzLmFsbG93ZWRTdWJHcm91cFR5cGVzT3B0aW9uc1xyXG4gICAgICAgIC5maWx0ZXIoKHN1Ykdyb3VwVHlwZTogQ2hlY2tib3hPcHRpb24pID0+IHN1Ykdyb3VwVHlwZS5jaGVja2VkKVxyXG4gICAgICAgIC5tYXAoXHJcbiAgICAgICAgICAoc2VsZWN0ZWRHcm91cFR5cGU6IENoZWNrYm94T3B0aW9uKSA9PiBzZWxlY3RlZEdyb3VwVHlwZS5pZCBhcyBzdHJpbmdcclxuICAgICAgICApO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZFJvbGVzID0gW1xyXG4gICAgICAgIC4uLnRoaXMubWVtYmVyTGV2ZWxPcHRpb25zLmZpbHRlcihcclxuICAgICAgICAgIChtZW1iZXJMZXZlbDogQ2hlY2tib3hPcHRpb24pID0+IG1lbWJlckxldmVsLmNoZWNrZWRcclxuICAgICAgICApLFxyXG4gICAgICAgIC4uLnRoaXMub2ZmaWNlclJvbGVzT3B0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAob2ZmaWNlclJvbGU6IENoZWNrYm94T3B0aW9uKSA9PiBvZmZpY2VyUm9sZS5jaGVja2VkXHJcbiAgICAgICAgKSxcclxuICAgICAgXS5tYXAoKHNlbGVjdGVkUm9sZTogQ2hlY2tib3hPcHRpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgcm9sZUlkOiBzZWxlY3RlZFJvbGUuaWQgYXMgc3RyaW5nLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBjb25maWdGaWVsZFZhbHVlOiBDb25maWdGaWVsZFZhbHVlID0ge1xyXG4gICAgICAgIG5hbWU6IGZvcm1bMF0uZ2V0KCdncm91cFR5cGUnKT8udmFsdWUsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1bMF0uZ2V0KCdkZXNjcmlwdGlvbicpPy52YWx1ZSxcclxuICAgICAgICBidXNpbmVzc1J1bGU6IHtcclxuICAgICAgICAgIHJvc3RlclR5cGU6IGZvcm1bMF0uZ2V0KCdyb3N0ZXJUeXBlJyk/LnZhbHVlLFxyXG4gICAgICAgICAgYWxsb3dFZGl0OiB0aGlzLmlzU2V0dGluZ1NlbGVjdGVkQnlOYW1lKFNldHRpbmdzLkFMTE9XX0VESVQpLFxyXG4gICAgICAgICAgYWxsb3dSb3N0ZXI6IHRoaXMuaXNTZXR0aW5nU2VsZWN0ZWRCeU5hbWUoU2V0dGluZ3MuQUxMT1dfUk9TVEVSUyksXHJcbiAgICAgICAgICBhbGxvd0FsdGVybmF0ZVZvdGluZzogdGhpcy5pc1NldHRpbmdTZWxlY3RlZEJ5TmFtZShcclxuICAgICAgICAgICAgU2V0dGluZ3MuQUxMT1dfQUxURVJOQVRFX1ZPVElOR1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFsbG93RGVsZXRlOiB0aGlzLmlzU2V0dGluZ1NlbGVjdGVkQnlOYW1lKFNldHRpbmdzLkFMTE9XX0RFTEVURSksXHJcbiAgICAgICAgICBhbGxvd1N1Ykdyb3VwOiB0aGlzLmlzU2V0dGluZ1NlbGVjdGVkQnlOYW1lKFxyXG4gICAgICAgICAgICBTZXR0aW5ncy5BTExPV19TVUJfR1JPVVBTXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgaGFzQ2xhc3NpZmljYXRpb246IHRoaXMuaXNTZXR0aW5nU2VsZWN0ZWRCeU5hbWUoXHJcbiAgICAgICAgICAgIFNldHRpbmdzLkhBU19DTEFTU0lGSUNBVElPTlxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFsbG93ZWRHcm91cFR5cGU6IHNlbGVjdGVkR3JvdXBUeXBlcyxcclxuICAgICAgICAgIGlzUm9vdEdyb3VwOlxyXG4gICAgICAgICAgICBmb3JtWzBdLmdldCgnaXNSb290R3JvdXAnKT8udmFsdWUgPT09XHJcbiAgICAgICAgICAgIHRoaXMuaXNSb290R3JvdXBPcHRpb25zWzBdLmxhYmVsLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBmb3JtWzBdLmdldCgnaXNSb290R3JvdXAnKT8udmFsdWUgPT09IHRoaXMuaXNSb290R3JvdXBPcHRpb25zWzBdLmxhYmVsXHJcbiAgICAgIClcclxuICAgICAgICBjb25maWdGaWVsZFZhbHVlLmhpZXJhcmNoeSA9IDA7XHJcbiAgICAgIGNvbnN0IGNyZWF0ZUdyb3VwVHlwZVBheWxvYWQ6IENyZWF0ZUdyb3VwVHlwZVJlcXVlc3RQYXlsb2FkID0ge1xyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgIGFwcElkOiB0aGlzLmFwcElkLFxyXG4gICAgICAgICAgcm9sZXM6IHNlbGVjdGVkUm9sZXMsXHJcbiAgICAgICAgICBjb25maWdGaWVsZE5hbWU6ICdncm91cF90eXBlJyxcclxuICAgICAgICAgIGNvbmZpZ0ZpZWxkVmFsdWU6IEpTT04uc3RyaW5naWZ5KGNvbmZpZ0ZpZWxkVmFsdWUpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMudGVuYW50QXBwU2VydmljZVxyXG4gICAgICAgIC5jcmVhdGVHcm91cFR5cGUoY3JlYXRlR3JvdXBUeXBlUGF5bG9hZClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IENyZWF0ZUdyb3VwVHlwZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICBjb25zdCB7IGFwcElkLCByb2xlcywgY29uZmlnRmllbGROYW1lIH0gPVxyXG4gICAgICAgICAgICAgICAgY3JlYXRlR3JvdXBUeXBlUGF5bG9hZC5wYXlsb2FkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0ZpZWxkVmFsdWUgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlR3JvdXBUeXBlUGF5bG9hZC5wYXlsb2FkLmNvbmZpZ0ZpZWxkVmFsdWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMudGVuYW50QXBwU2VydmljZS5zZXROZXdseUNyZWF0ZWRHcm91cFR5cGVJbmZvKHtcclxuICAgICAgICAgICAgICAgIGFwcElkLFxyXG4gICAgICAgICAgICAgICAgcm9sZXMsXHJcbiAgICAgICAgICAgICAgICBjb25maWdGaWVsZE5hbWUsXHJcbiAgICAgICAgICAgICAgICBjb25maWdGaWVsZFZhbHVlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3VibWl0Rm9ybVJlc3BvbnNlLmVtaXQocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaGFuZGxlRXJyb3JzKFxyXG4gICAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBUeXBlU2NyZWVuVGV4dHMuZXJyb3JzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBFbWl0cyBmb3JtIGNhbmNlbCBldmVudC5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlTW9kaWZ5R3JvdXBUeXBlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Gb3JtQ2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtQ2FuY2VsLmVtaXQoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW1wbGVtZW50YXRpb24gb2YgbmdPbkRlc3Ryb3kgbGlmZWN5Y2xlIGhvb2sgbWV0aG9kIHRvIHVuc3Vic2NyaWJlIHRoZSBvcGVuIG9ic2VydmFibGUgc3Vic2NyaXB0aW9ucy5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlTW9kaWZ5R3JvdXBUeXBlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxpZWVlc2EtZHluYW1pYy1mb3JtXHJcbiAgKm5nSWY9XCJjcmVhdGVHcm91cFR5cGVGb3JtR3JvdXBcIlxyXG4gIGNsYXNzPVwiaWVlZXNhLWNyZWF0ZS1ncm91cC10eXBlLWZvcm1cIlxyXG4gIFtsZWZ0QnV0dG9uTGFiZWxdPVwibGVmdEJ1dHRvbkxhYmVsXCJcclxuICBbcmlnaHRCdXR0b25MYWJlbF09XCJyaWdodEJ1dHRvbkxhYmVsXCJcclxuICBbaXNMZWdlbmRWaXNpYmxlXT1cImZhbHNlXCJcclxuICBbY29sV2lkdGhdPVwiY29sV2lkdGhcIlxyXG4gIFthY3Rpb25CdXR0b25BbGlnbl09XCJhY3Rpb25CdXR0b25BbGlnblwiXHJcbiAgW2Zvcm1Hcm91cHNdPVwiY3JlYXRlR3JvdXBUeXBlRm9ybUdyb3VwXCJcclxuICBbaXNMZWZ0QnV0dG9uTmVlZGVkXT1cInRydWVcIlxyXG4gIChmb3JtU3VibWl0KT1cIm9uQ3JlYXRlTW9kaWZ5R3JvdXBUeXBlRm9ybVN1Ym1pdCgkZXZlbnQpXCJcclxuICAoZm9ybUxlZnRCdXR0b25DbGlja2VkKT1cIm9uRm9ybUNhbmNlbCgpXCJcclxuICAoZm9ybUdyb3Vwc1JlZmVyZW5jZSk9XCJnZXRDcmVhdGVNb2RpZnlHcm91cFR5cGVGb3JtR3JvdXBSZWYoJGV2ZW50KVwiXHJcbiAgKGZvcm1DaGVja2JveFNlbGVjdGlvbik9XCJvbkNoZWNrYm94U2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4+PC9pZWVlc2EtZHluYW1pYy1mb3JtPlxyXG4iXX0=