@ieeesa-npm/tenants 0.4.2 → 0.4.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 (138) hide show
  1. package/.eslintrc.json +31 -0
  2. package/ng-package.json +8 -0
  3. package/package.json +12 -25
  4. package/src/lib/assets/constants.json +454 -0
  5. package/src/lib/assets/tenant-validations.ts +18 -0
  6. package/src/lib/assets/tenants-mock.ts +1240 -0
  7. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.html +15 -0
  8. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.scss +44 -0
  9. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.spec.ts +574 -0
  10. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.ts +602 -0
  11. package/src/lib/components/create-modify-role/create-modify-role.component.html +15 -0
  12. package/src/lib/components/create-modify-role/create-modify-role.component.scss +83 -0
  13. package/src/lib/components/create-modify-role/create-modify-role.component.spec.ts +346 -0
  14. package/src/lib/components/create-modify-role/create-modify-role.component.ts +321 -0
  15. package/src/lib/components/create-tenant-application/create-tenant-application.component.html +18 -0
  16. package/src/lib/components/create-tenant-application/create-tenant-application.component.scss +73 -0
  17. package/src/lib/components/create-tenant-application/create-tenant-application.component.spec.ts +775 -0
  18. package/src/lib/components/create-tenant-application/create-tenant-application.component.ts +638 -0
  19. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.html +22 -0
  20. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.scss +79 -0
  21. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.spec.ts +716 -0
  22. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.ts +504 -0
  23. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.html +44 -0
  24. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.scss +16 -0
  25. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.spec.ts +115 -0
  26. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.ts +109 -0
  27. package/src/lib/components/view-tenant-details/view-tenant-details.component.html +195 -0
  28. package/src/lib/components/view-tenant-details/view-tenant-details.component.scss +163 -0
  29. package/src/lib/components/view-tenant-details/view-tenant-details.component.spec.ts +1221 -0
  30. package/src/lib/components/view-tenant-details/view-tenant-details.component.ts +876 -0
  31. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.html +10 -0
  32. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.scss +44 -0
  33. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.spec.ts +410 -0
  34. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.ts +219 -0
  35. package/src/lib/components/view-tenants-list/view-tenants-list.component.html +32 -0
  36. package/src/lib/components/view-tenants-list/view-tenants-list.component.scss +35 -0
  37. package/src/lib/components/view-tenants-list/view-tenants-list.component.spec.ts +464 -0
  38. package/src/lib/components/view-tenants-list/view-tenants-list.component.ts +388 -0
  39. package/src/lib/models/app-type-config.model.ts +14 -0
  40. package/src/lib/models/app-type.model.ts +5 -0
  41. package/src/lib/models/create-group-type-config.model.ts +18 -0
  42. package/src/lib/models/create-group-type.model.ts +46 -0
  43. package/src/lib/models/feature-permission-id.model.ts +6 -0
  44. package/src/lib/models/features.model.ts +15 -0
  45. package/src/lib/models/form-status.model.ts +5 -0
  46. package/src/lib/models/permission-type.model.ts +9 -0
  47. package/src/lib/models/role-menu-action.model.ts +5 -0
  48. package/src/lib/models/role-type.model.ts +34 -0
  49. package/src/lib/models/roles-and-permissions-table-type.model.ts +5 -0
  50. package/src/lib/models/roles-and-permissions.model.ts +113 -0
  51. package/src/lib/models/route-config.model.ts +4 -0
  52. package/src/lib/models/table-column-schema-view-tenant-list.model.ts +21 -0
  53. package/src/lib/models/tenant-function-type.model.ts +10 -0
  54. package/src/lib/models/tenant.model.ts +47 -0
  55. package/src/lib/models/tenants-permission.model.ts +9 -0
  56. package/src/lib/models/update-tenant-status.model.ts +12 -0
  57. package/src/lib/models/view-tenant-group-types.model.ts +34 -0
  58. package/src/lib/services/tenant-applications.service.spec.ts +1245 -0
  59. package/src/lib/services/tenant-applications.service.ts +798 -0
  60. package/src/lib/services/tenant-permissions-map.service.spec.ts +25 -0
  61. package/src/lib/services/tenant-permissions-map.service.ts +28 -0
  62. package/src/lib/services/tenant-permissions.service.spec.ts +62 -0
  63. package/src/lib/services/tenant-permissions.service.ts +49 -0
  64. package/src/lib/tenant-applications.component.html +0 -0
  65. package/src/lib/tenant-applications.component.scss +0 -0
  66. package/src/lib/tenant-applications.component.spec.ts +28 -0
  67. package/src/lib/tenant-applications.component.ts +12 -0
  68. package/src/lib/tenant-applications.module.ts +8 -0
  69. package/{public-api.d.ts → src/public-api.ts} +40 -30
  70. package/tsconfig.lib.json +14 -0
  71. package/tsconfig.lib.prod.json +10 -0
  72. package/tsconfig.spec.json +14 -0
  73. package/esm2022/ieeesa-npm-tenants.mjs +0 -5
  74. package/esm2022/lib/assets/constants.json +0 -390
  75. package/esm2022/lib/assets/tenant-validations.mjs +0 -13
  76. package/esm2022/lib/components/create-modify-role/create-modify-role.component.mjs +0 -280
  77. package/esm2022/lib/components/create-tenant-application/create-tenant-application.component.mjs +0 -512
  78. package/esm2022/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.mjs +0 -391
  79. package/esm2022/lib/components/tenant-basic-details/tenant-basic-details.component.mjs +0 -95
  80. package/esm2022/lib/components/view-tenant-details/view-tenant-details.component.mjs +0 -708
  81. package/esm2022/lib/components/view-tenant-group-types/view-tenant-group-types.component.mjs +0 -174
  82. package/esm2022/lib/components/view-tenants-list/view-tenants-list.component.mjs +0 -334
  83. package/esm2022/lib/models/app-type-config.model.mjs +0 -2
  84. package/esm2022/lib/models/app-type.model.mjs +0 -7
  85. package/esm2022/lib/models/feature-permission-id.model.mjs +0 -8
  86. package/esm2022/lib/models/features.model.mjs +0 -2
  87. package/esm2022/lib/models/form-status.model.mjs +0 -7
  88. package/esm2022/lib/models/permission-type.model.mjs +0 -12
  89. package/esm2022/lib/models/role-menu-action.model.mjs +0 -7
  90. package/esm2022/lib/models/role-type.model.mjs +0 -2
  91. package/esm2022/lib/models/roles-and-permissions-table-type.model.mjs +0 -7
  92. package/esm2022/lib/models/roles-and-permissions.model.mjs +0 -2
  93. package/esm2022/lib/models/route-config.model.mjs +0 -2
  94. package/esm2022/lib/models/table-column-schema-view-tenant-list.model.mjs +0 -16
  95. package/esm2022/lib/models/tenant-function-type.model.mjs +0 -10
  96. package/esm2022/lib/models/tenant.model.mjs +0 -2
  97. package/esm2022/lib/models/tenants-permission.model.mjs +0 -2
  98. package/esm2022/lib/models/update-tenant-status.model.mjs +0 -2
  99. package/esm2022/lib/models/view-tenant-group-types.model.mjs +0 -9
  100. package/esm2022/lib/services/tenant-applications.service.mjs +0 -542
  101. package/esm2022/lib/services/tenant-permissions-map.service.mjs +0 -36
  102. package/esm2022/lib/services/tenant-permissions.service.mjs +0 -38
  103. package/esm2022/lib/tenant-applications.component.mjs +0 -14
  104. package/esm2022/lib/tenant-applications.module.mjs +0 -16
  105. package/esm2022/public-api.mjs +0 -34
  106. package/fesm2022/ieeesa-npm-tenants.mjs +0 -3565
  107. package/fesm2022/ieeesa-npm-tenants.mjs.map +0 -1
  108. package/index.d.ts +0 -5
  109. package/lib/assets/tenant-validations.d.ts +0 -11
  110. package/lib/components/create-modify-role/create-modify-role.component.d.ts +0 -103
  111. package/lib/components/create-tenant-application/create-tenant-application.component.d.ts +0 -128
  112. package/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.d.ts +0 -106
  113. package/lib/components/tenant-basic-details/tenant-basic-details.component.d.ts +0 -408
  114. package/lib/components/view-tenant-details/view-tenant-details.component.d.ts +0 -216
  115. package/lib/components/view-tenant-group-types/view-tenant-group-types.component.d.ts +0 -58
  116. package/lib/components/view-tenants-list/view-tenants-list.component.d.ts +0 -134
  117. package/lib/models/app-type-config.model.d.ts +0 -14
  118. package/lib/models/app-type.model.d.ts +0 -4
  119. package/lib/models/feature-permission-id.model.d.ts +0 -4
  120. package/lib/models/features.model.d.ts +0 -15
  121. package/lib/models/form-status.model.d.ts +0 -4
  122. package/lib/models/permission-type.model.d.ts +0 -8
  123. package/lib/models/role-menu-action.model.d.ts +0 -4
  124. package/lib/models/role-type.model.d.ts +0 -27
  125. package/lib/models/roles-and-permissions-table-type.model.d.ts +0 -4
  126. package/lib/models/roles-and-permissions.model.d.ts +0 -119
  127. package/lib/models/route-config.model.d.ts +0 -4
  128. package/lib/models/table-column-schema-view-tenant-list.model.d.ts +0 -20
  129. package/lib/models/tenant-function-type.model.d.ts +0 -7
  130. package/lib/models/tenant.model.d.ts +0 -51
  131. package/lib/models/tenants-permission.model.d.ts +0 -9
  132. package/lib/models/update-tenant-status.model.d.ts +0 -14
  133. package/lib/models/view-tenant-group-types.model.d.ts +0 -27
  134. package/lib/services/tenant-applications.service.d.ts +0 -357
  135. package/lib/services/tenant-permissions-map.service.d.ts +0 -13
  136. package/lib/services/tenant-permissions.service.d.ts +0 -22
  137. package/lib/tenant-applications.component.d.ts +0 -5
  138. package/lib/tenant-applications.module.d.ts +0 -6
@@ -1,512 +0,0 @@
1
- import { Component, EventEmitter, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
2
- import { AlignType, FormControlType, AllowedFileTypes, DynamicFormComponent, } from '@ieeesa-npm/presentation';
3
- import { Subject, takeUntil } from 'rxjs';
4
- import * as screenTexts from '../../assets/constants.json';
5
- import { Validators } from '@angular/forms';
6
- import { TenantsValidationPatterns } from '../../assets/tenant-validations';
7
- import { CommonModule } from '@angular/common';
8
- import { FormStatus } from '../../models/form-status.model';
9
- import { validColorValidator } from 'ngx-colors';
10
- import { TenantFunctionType } from '../../models/tenant-function-type.model';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@ieeesa-npm/presentation";
13
- import * as i2 from "../../services/tenant-applications.service";
14
- import * as i3 from "@ieeesa-npm/shared";
15
- import * as i4 from "@angular/common";
16
- export class CreateTenantApplicationComponent {
17
- constructor(
18
- // eslint-disable-next-line no-unused-vars
19
- fileUploadService,
20
- // eslint-disable-next-line no-unused-vars
21
- tenantAppService,
22
- // eslint-disable-next-line no-unused-vars
23
- sharedService // eslint-disable-next-line no-empty-function
24
- ) {
25
- this.fileUploadService = fileUploadService;
26
- this.tenantAppService = tenantAppService;
27
- this.sharedService = sharedService;
28
- this.destroy$ = new Subject();
29
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
- this.constants = screenTexts;
31
- this.createTenantTexts = this.constants?.createTenant;
32
- this.leftButtonLabel = this.createTenantTexts?.label?.leftButtonLabel;
33
- this.rightButtonLabel = this.createTenantTexts?.label?.rightButtonLabel;
34
- this.colWidth = { xs: 12, xl: 12, sm: 12, md: 12, lg: 12 };
35
- this.actionButtonAlign = AlignType.LEFT;
36
- this.submitFormResponse = new EventEmitter();
37
- this.formCancel = new EventEmitter();
38
- this.allowedFileTypes = [
39
- AllowedFileTypes.JPG,
40
- AllowedFileTypes.PNG,
41
- AllowedFileTypes.SVG,
42
- ];
43
- this.isAppLogoModified = false;
44
- }
45
- ngOnInit() {
46
- this.tenantFunctionType = this.tenantAppService?.getTenantFunctionType();
47
- this.selectedTenantInfo =
48
- this.tenantAppService?.getSelectedTenantInformation();
49
- this.fileUploadService.setApiBaseUrl(this.tenantAppService?.apiBaseUrl);
50
- this.getFeatures();
51
- }
52
- /**
53
- * Gets the list of features and updates the form control.
54
- * @memberof CreateTenantApplicationComponent
55
- */
56
- getFeatures() {
57
- this.tenantAppService
58
- .getFeatures()
59
- .pipe(takeUntil(this.destroy$))
60
- .subscribe({
61
- next: (response) => {
62
- if (response?.status) {
63
- this.featuresOptions = this.tenantAppService.getFeatureOptions(response?.body);
64
- if (this.tenantFunctionType === TenantFunctionType.EDIT)
65
- this.featuresOptions?.forEach((option) => {
66
- if (this.selectedTenantInfo?.features?.some((feature) => feature?.featureId === option?.id)) {
67
- option.checked = true;
68
- }
69
- });
70
- this.getApplicationTypes();
71
- }
72
- },
73
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
74
- error: (error) => {
75
- this.sharedService.handleErrors(error, this.createTenantTexts?.errors);
76
- },
77
- });
78
- }
79
- /**
80
- * Gets the application/tenant types and updates the form control.
81
- * @memberof CreateTenantApplicationComponent
82
- */
83
- getApplicationTypes() {
84
- this.tenantAppService
85
- .getApplicationTypes()
86
- .pipe(takeUntil(this.destroy$))
87
- .subscribe({
88
- next: (response) => {
89
- if (response?.status) {
90
- this.appTypeOptions =
91
- this.tenantAppService.getApplicationTypeOptions(response?.body);
92
- if (this.tenantFunctionType === TenantFunctionType.EDIT) {
93
- this.appTypeOptions?.forEach((radioOption) => {
94
- if (radioOption?.id === this.selectedTenantInfo?.appType) {
95
- radioOption.checked = true;
96
- this.selectedAppTypeOption = radioOption;
97
- }
98
- else {
99
- radioOption.checked = false;
100
- }
101
- });
102
- }
103
- this.initializeCreateTenantFormGroup();
104
- }
105
- },
106
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
- error: (error) => {
108
- this.sharedService.handleErrors(error, this.createTenantTexts?.errors);
109
- },
110
- });
111
- }
112
- /**
113
- * Initialize the create tenant form group array.
114
- * @memberof CreateTenantApplicationComponent
115
- */
116
- initializeCreateTenantFormGroup() {
117
- this.createTenantFormGroup = {
118
- formGroup: [
119
- {
120
- legend: '',
121
- controls: [
122
- {
123
- type: FormControlType.INPUT,
124
- label: this.createTenantTexts?.label?.appTitle + '*',
125
- controlName: 'appTitle',
126
- value: this.tenantFunctionType === TenantFunctionType.EDIT
127
- ? this.selectedTenantInfo?.appTitle
128
- : '',
129
- validation: [
130
- Validators.required,
131
- Validators.maxLength(TenantsValidationPatterns.appTitleMaxLength),
132
- ],
133
- supportMessage: this.createTenantTexts?.supportText?.appTitle,
134
- requiredErrorMessage: this.createTenantTexts?.message?.error?.required,
135
- maxErrorMessage: this.createTenantTexts?.message?.error?.limit?.appTitleMaxChars,
136
- ariaLabel: this.createTenantTexts?.label?.ariaLabel?.appTitle,
137
- ariaDescribedById: this.createTenantTexts?.label?.ariaDescribedById?.appTitle,
138
- },
139
- {
140
- type: FormControlType.INPUT,
141
- label: `${this.createTenantTexts?.label?.appId}${this.tenantFunctionType === TenantFunctionType.EDIT ? '' : '*'}`,
142
- controlName: 'appId',
143
- value: this.tenantFunctionType === TenantFunctionType.EDIT
144
- ? this.selectedTenantInfo?.appId
145
- : '',
146
- validation: [
147
- Validators.required,
148
- Validators.maxLength(TenantsValidationPatterns.appIdMaxLength),
149
- Validators.pattern(TenantsValidationPatterns.alphaNumeric),
150
- ],
151
- disabled: this.tenantFunctionType === TenantFunctionType.EDIT,
152
- supportMessage: this.tenantFunctionType === TenantFunctionType.EDIT
153
- ? ''
154
- : this.createTenantTexts?.supportText?.appId,
155
- requiredErrorMessage: this.createTenantTexts?.message?.error?.required,
156
- maxErrorMessage: this.createTenantTexts?.message?.error?.limit?.appIdMaxChars,
157
- patternErrorMessage: this.createTenantTexts?.message?.error?.pattern?.appId,
158
- ariaLabel: this.createTenantTexts?.label?.ariaLabel?.appId,
159
- ariaDescribedById: this.createTenantTexts?.label?.ariaDescribedById?.appId,
160
- },
161
- {
162
- type: FormControlType?.FILE_UPLOAD,
163
- label: this.createTenantTexts?.label?.appLogo + '*',
164
- controlName: 'appLogo',
165
- requiredErrorMessage: this.createTenantTexts?.message?.error?.required,
166
- value: this.tenantFunctionType === TenantFunctionType.EDIT
167
- ? this.selectedTenantInfo?.appLogo
168
- : '',
169
- placeholder: '',
170
- isFileSelected: this.tenantFunctionType === TenantFunctionType.EDIT,
171
- supportMessage: this.createTenantTexts?.supportText?.appLogo,
172
- validation: [Validators.required],
173
- ariaLabel: this.createTenantTexts?.label?.ariaLabel?.appLogo,
174
- ariaDescribedById: this.createTenantTexts?.label?.ariaDescribedById?.appLogo,
175
- isMultiFileUpload: false,
176
- maxUploadFileSize: 2,
177
- maxFileSizeErrorMessage: this.createTenantTexts?.message?.error?.limit?.appLogoMaxSize,
178
- allowedFileTypeErrorMessage: this.createTenantTexts?.message?.error?.invalidFile,
179
- allowedFileTypes: this.allowedFileTypes,
180
- },
181
- {
182
- type: FormControlType.INPUT,
183
- label: this.createTenantTexts?.label?.appHeading + '*',
184
- controlName: 'appHeading',
185
- value: this.tenantFunctionType === TenantFunctionType.EDIT
186
- ? this.selectedTenantInfo?.appHeading
187
- : '',
188
- validation: [
189
- Validators.required,
190
- Validators.maxLength(TenantsValidationPatterns.appHeadingMaxLength),
191
- ],
192
- supportMessage: this.createTenantTexts?.supportText?.appHeading,
193
- requiredErrorMessage: this.createTenantTexts?.message?.error?.required,
194
- maxErrorMessage: this.createTenantTexts?.message?.error?.limit
195
- ?.appHeadingMaxChars,
196
- patternErrorMessage: this.createTenantTexts?.message?.error?.pattern?.email,
197
- ariaLabel: this.createTenantTexts?.label?.ariaLabel?.appHeading,
198
- ariaDescribedById: this.createTenantTexts?.label?.ariaDescribedById?.appHeading,
199
- },
200
- {
201
- type: FormControlType.TEXT_AREA,
202
- label: this.createTenantTexts?.label?.appDescription + '*',
203
- controlName: 'appDescription',
204
- value: this.tenantFunctionType === TenantFunctionType.EDIT
205
- ? this.selectedTenantInfo?.appDescription
206
- : '',
207
- validation: [
208
- Validators.required,
209
- Validators.maxLength(TenantsValidationPatterns.appDescriptionMaxLength),
210
- ],
211
- supportMessage: this.createTenantTexts?.supportText?.appDescription,
212
- requiredErrorMessage: this.createTenantTexts?.message?.error?.required,
213
- maxErrorMessage: this.createTenantTexts?.message?.error?.limit
214
- ?.appDescriptionMaxChars,
215
- maxCharCount: TenantsValidationPatterns.appDescriptionMaxLength,
216
- ariaLabel: this.createTenantTexts?.label?.ariaLabel?.appDescription,
217
- ariaDescribedById: this.createTenantTexts?.label?.ariaDescribedById
218
- ?.appDescription,
219
- ariaMultiline: true,
220
- isResize: true,
221
- },
222
- {
223
- type: FormControlType.COLOR_PICKER,
224
- label: this.createTenantTexts?.label?.appBgColor + '*',
225
- controlName: 'backgroundColor',
226
- value: '',
227
- defaultColor: this.tenantFunctionType === TenantFunctionType.EDIT
228
- ? this.selectedTenantInfo?.backgroundColor
229
- : '',
230
- placeholder: '',
231
- supportMessage: this.createTenantTexts?.supportText?.appBgColor,
232
- validation: [Validators.required, validColorValidator()],
233
- requiredErrorMessage: this.createTenantTexts?.message?.error?.required,
234
- invalidColorErrorMessage: this.createTenantTexts?.message?.error?.invalidColor,
235
- ariaLabel: this.createTenantTexts?.supportText?.appBgColor,
236
- ariaDescribedById: this.createTenantTexts?.supportText?.appBgColor,
237
- },
238
- {
239
- type: FormControlType.INPUT,
240
- label: this.createTenantTexts?.label?.appHelpLink + '*',
241
- controlName: 'appHelpLink',
242
- value: this.tenantFunctionType === TenantFunctionType.EDIT
243
- ? this.selectedTenantInfo?.appHelpLink
244
- : '',
245
- validation: [
246
- Validators.required,
247
- Validators.pattern(TenantsValidationPatterns.url),
248
- ],
249
- supportMessage: this.createTenantTexts?.supportText?.appHelpLink,
250
- requiredErrorMessage: this.createTenantTexts?.message?.error?.required,
251
- patternErrorMessage: this.createTenantTexts?.message?.error?.pattern?.appHelpLink,
252
- ariaLabel: this.createTenantTexts?.label?.ariaLabel?.appHelpLink,
253
- ariaDescribedById: this.createTenantTexts?.label?.ariaDescribedById?.appHelpLink,
254
- },
255
- {
256
- type: FormControlType.CHECKBOX,
257
- label: this.createTenantTexts?.label?.featuresList + '*',
258
- controlName: 'features',
259
- checkboxOptions: this.featuresOptions,
260
- minSelectionRequired: 1,
261
- ariaLabel: this.createTenantTexts?.label?.ariaLabel?.featuresList,
262
- ariaDescribedById: this.createTenantTexts?.label?.ariaDescribedById?.featuresList,
263
- supportMessage: this.createTenantTexts?.supportText?.featuresList,
264
- requiredErrorMessage: this.createTenantTexts?.message?.error?.required,
265
- validation: [Validators.required],
266
- },
267
- {
268
- type: FormControlType.INPUT,
269
- label: this.createTenantTexts?.label?.domainURL + '*',
270
- controlName: 'appDomainUrl',
271
- value: this.tenantFunctionType === TenantFunctionType.EDIT
272
- ? this.selectedTenantInfo?.appDomainUrl
273
- : '',
274
- validation: [
275
- Validators.required,
276
- Validators.pattern(TenantsValidationPatterns.url),
277
- ],
278
- supportMessage: this.createTenantTexts?.supportText?.domainURL,
279
- requiredErrorMessage: this.createTenantTexts?.message?.error?.required,
280
- patternErrorMessage: this.createTenantTexts?.message?.error?.pattern?.appDomainUrl,
281
- ariaLabel: this.createTenantTexts?.label?.ariaLabel?.domainURL,
282
- ariaDescribedById: this.createTenantTexts?.label?.ariaDescribedById?.domainURL,
283
- },
284
- {
285
- type: FormControlType.RADIO,
286
- label: `${this.createTenantTexts?.label?.appType}${this.tenantFunctionType === TenantFunctionType.EDIT ? '' : '*'}`,
287
- controlName: 'appType',
288
- value: this.tenantFunctionType === TenantFunctionType.EDIT
289
- ? this.selectedTenantInfo?.appType
290
- : '',
291
- disabled: this.tenantFunctionType === TenantFunctionType.EDIT,
292
- radioOptions: this.appTypeOptions,
293
- validation: [Validators.required],
294
- requiredErrorMessage: this.createTenantTexts?.message?.error?.required,
295
- ariaLabel: this.createTenantTexts?.label?.ariaLabel?.appType,
296
- ariaDescribedById: this.createTenantTexts?.label?.ariaDescribedById?.appType,
297
- },
298
- ],
299
- },
300
- ],
301
- };
302
- }
303
- /**
304
- * Creates Payload and gets presigned url for file upload on form submission.
305
- * @param {FormGroup[]} form
306
- * @memberof CreateTenantApplicationComponent
307
- */
308
- onCreateTenantFormSubmit(form) {
309
- form[0]?.markAllAsTouched();
310
- if (form[0].status === FormStatus.VALID) {
311
- this.createTenantPayload = this.getCreateTenantPayload(form[0].getRawValue());
312
- if (this.tenantFunctionType === TenantFunctionType.EDIT &&
313
- (!this.isAppLogoModified || !this.file)) {
314
- this.editTenant();
315
- }
316
- else if (this.file) {
317
- this.getFileUploadPresignedUrl(this.file, form[0]?.controls['appId']?.value);
318
- }
319
- else {
320
- this.createTenant();
321
- }
322
- }
323
- }
324
- /**
325
- * Creates a new tenant on form submission.
326
- * @memberof CreateTenantApplicationComponent
327
- */
328
- createTenant() {
329
- this.tenantAppService
330
- .createTenant(this.createTenantPayload)
331
- .pipe(takeUntil(this.destroy$))
332
- .subscribe({
333
- next: (response) => {
334
- if (response.status) {
335
- this.tenantAppService.setNewTenantInfo(this.createTenantPayload?.payload);
336
- this.submitFormResponse.emit(response);
337
- }
338
- },
339
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
340
- error: (error) => {
341
- this.sharedService.handleErrors(error, this.createTenantTexts?.errors);
342
- },
343
- });
344
- }
345
- /**
346
- * Updates the modified tenant information on form submission.
347
- * @memberof CreateTenantApplicationComponent
348
- */
349
- editTenant() {
350
- this.tenantAppService
351
- .editTenant(this.createTenantPayload)
352
- .pipe(takeUntil(this.destroy$))
353
- .subscribe({
354
- next: (response) => {
355
- if (response?.status) {
356
- this.updatedTenantBasicInfo = this.createTenantPayload?.payload;
357
- this.updatedTenantBasicInfo.features =
358
- this.tenantAppService.getFeaturesList(this.featuresOptions);
359
- this.tenantAppService.setSelectedTenantInformation(this.updatedTenantBasicInfo);
360
- this.submitFormResponse.emit(response);
361
- }
362
- },
363
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
364
- error: (error) => {
365
- this.sharedService.handleErrors(error, this.createTenantTexts?.errors);
366
- },
367
- });
368
- }
369
- /**
370
- * Constructs create tenant payload from the form data and returns.
371
- * @param {*} formData
372
- * @return {CreateTenantRequestPayload}
373
- * @memberof CreateTenantApplicationComponent
374
- */
375
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
376
- getCreateTenantPayload(formData) {
377
- const payload = {
378
- payload: {
379
- appTitle: formData?.appTitle,
380
- appId: formData?.appId,
381
- appHeading: formData?.appHeading,
382
- appDescription: formData?.appDescription,
383
- backgroundColor: formData?.backgroundColor,
384
- appLogo: formData?.appLogo,
385
- appDomainUrl: formData?.appDomainUrl,
386
- appHelpLink: formData?.appHelpLink,
387
- appType: this.selectedAppTypeOption?.id,
388
- features: this.tenantAppService.getFeatureIds(this.featuresOptions),
389
- },
390
- };
391
- return payload;
392
- }
393
- /**
394
- * Gets create tenant form group reference and disables default features.
395
- * @param {FormGroup[]} form
396
- * @memberof CreateTenantApplicationComponent
397
- */
398
- getCreateTenantFormGroupRef(form) {
399
- this.createTenantFormGroupRef = form[0];
400
- const featuresFormArray = this.createTenantFormGroupRef?.controls['features'];
401
- this.featuresOptions?.forEach((option, index) => {
402
- if (option?.disabled) {
403
- featuresFormArray?.at(index).disable();
404
- }
405
- });
406
- }
407
- /**
408
- * Updates createTenantFormGroupRef on add or edit tenant form change event.
409
- * @param {FormGroup[]} form
410
- * @memberof CreateTenantApplicationComponent
411
- */
412
- onCreateTenantFormChange(form) {
413
- this.createTenantFormGroupRef = form[0];
414
- this.isAppLogoModified =
415
- this.createTenantFormGroupRef?.controls['appLogo']?.dirty &&
416
- this.tenantFunctionType === TenantFunctionType.EDIT;
417
- }
418
- /**
419
- * Emits form cancel event.
420
- * @memberof CreateTenantApplicationComponent
421
- */
422
- onFormCancel() {
423
- this.formCancel.emit();
424
- }
425
- /**
426
- * Gets the selected file when the file is browsed and on formFileUpload event is triggered.
427
- * @param {File | FileList} file
428
- */
429
- onFormFileUpload(file) {
430
- this.file = file;
431
- }
432
- /**
433
- * Gets pre-signed URL to upload the selected file to AWS S3 bucket.
434
- * @param {File | FileList} file
435
- */
436
- getFileUploadPresignedUrl(file, appId) {
437
- this.fileUploadService
438
- .getFileUploadPresignedUrl(file, appId)
439
- .pipe(takeUntil(this.destroy$))
440
- .subscribe({
441
- next: (response) => {
442
- this.fileUploadPresignedUrl = response?.body;
443
- if (this.fileUploadPresignedUrl)
444
- this.uploadFileToS3(file);
445
- },
446
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-unused-vars, @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function, no-empty-function
447
- error: (error) => {
448
- this.sharedService.handleErrors(error, this.createTenantTexts?.errors);
449
- },
450
- });
451
- }
452
- /**
453
- * Uploads the file to AWS S3 bucket and submit the form data to API to create new tenant.
454
- * @param {File | FileList} file
455
- */
456
- uploadFileToS3(file) {
457
- this.fileUploadService
458
- .uploadFileToS3(this.fileUploadPresignedUrl, file)
459
- .pipe(takeUntil(this.destroy$))
460
- .subscribe({
461
- // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
462
- next: (response) => {
463
- this.fileUploadService.setFileUploadStatus(true);
464
- // eslint-disable-next-line no-unused-expressions
465
- this.tenantFunctionType === TenantFunctionType.EDIT
466
- ? this.editTenant()
467
- : this.createTenant();
468
- },
469
- // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
470
- error: (error) => {
471
- this.fileUploadService.setFileUploadStatus(false);
472
- this.sharedService.handleErrors(error, this.createTenantTexts?.errors);
473
- },
474
- });
475
- }
476
- /**
477
- * Triggers when the color picker values has been changed.
478
- * @param {string} color
479
- */
480
- onColorPickerChange(color) {
481
- this.selectedColor = color;
482
- }
483
- /**
484
- * Triggers when the radio option has been changed.
485
- * @param {RadioOption} radioOption
486
- */
487
- onRadioOptionSelected(radioOption) {
488
- this.selectedAppTypeOption = radioOption;
489
- }
490
- /**
491
- * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.
492
- * @memberof CreateTenantApplicationComponent
493
- */
494
- ngOnDestroy() {
495
- this.destroy$.next(true);
496
- this.destroy$.unsubscribe();
497
- }
498
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateTenantApplicationComponent, deps: [{ token: i1.FileUploadService }, { token: i2.TenantApplicationsService }, { token: i3.SharedService }], target: i0.ɵɵFactoryTarget.Component }); }
499
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CreateTenantApplicationComponent, isStandalone: true, selector: "ieeesa-create-tenant-application", outputs: { submitFormResponse: "submitFormResponse", formCancel: "formCancel" }, viewQueries: [{ propertyName: "dynamicFormComponent", first: true, predicate: DynamicFormComponent, descendants: true }], ngImport: i0, template: "<ieeesa-dynamic-form\r\n *ngIf=\"createTenantFormGroup\"\r\n class=\"ieeesa-create-tenant-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"createTenantFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onCreateTenantFormSubmit($event)\"\r\n (formChange)=\"onCreateTenantFormChange($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n (formGroupsReference)=\"getCreateTenantFormGroupRef($event)\"\r\n (formFileUpload)=\"onFormFileUpload($event)\"\r\n (formColorPickerChange)=\"onColorPickerChange($event)\"\r\n (formRadioOptionSelected)=\"onRadioOptionSelected($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-modal-dialog.ieeesa-create-tenant,.ieeesa-modal-dialog.ieeesa-edit-tenant{max-width:60vw!important}.ieeesa-modal-dialog.ieeesa-create-tenant .mat-mdc-dialog-container,.ieeesa-modal-dialog.ieeesa-edit-tenant .mat-mdc-dialog-container{box-shadow:none}.ieeesa-modal-dialog.ieeesa-create-tenant .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-edit-tenant .mat-mdc-dialog-surface{border-radius:0;margin:1em 0}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:.5em}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .mat-mdc-dialog-content{padding:1.5em 1em .75em!important}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal-title,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal-title{margin-left:15px!important}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__actions,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__actions{flex-direction:row-reverse;gap:.5em;padding:2em 1em .75em;margin-top:2em}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field{margin-bottom:1em;padding-top:0!important}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field__content,.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mdc-label,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field__content,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mdc-label{padding-left:0}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field__resize,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field__resize{resize:vertical}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field__content,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field__content{color:#1c1b1f}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mat-mdc-text-field-wrapper,.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mat-mdc-form-field-focus-overlay,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mat-mdc-text-field-wrapper,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mat-mdc-form-field-focus-overlay{background:#fff;padding:0;border:0}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mdc-line-ripple:before,.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mdc-line-ripple:after,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mdc-line-ripple:before,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mdc-line-ripple:after{border:0}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field:not(.app-description,.app-logo),.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field:not(.app-description,.app-logo){width:90%}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .mat-mdc-form-field-flex,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .mat-mdc-form-field-flex{width:62.5em}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .mat-mdc-form-field-subscript-wrapper,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .mat-mdc-form-field-subscript-wrapper{display:none}@media (max-width: 767px){.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field:not(.app-description,.app-logo),.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field:not(.app-description,.app-logo){width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DynamicFormComponent, selector: "ieeesa-dynamic-form", inputs: ["formGroups", "submitResponse", "searchResponse", "colWidth", "isLegendVisible", "rightButtonLabel", "leftButtonLabel", "isSubmitButtonDisabled", "isLeftButtonDisabled", "isLeftButtonNeeded", "actionButtonAlign"], 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 }); }
500
- }
501
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateTenantApplicationComponent, decorators: [{
502
- type: Component,
503
- args: [{ selector: 'ieeesa-create-tenant-application', standalone: true, imports: [CommonModule, DynamicFormComponent], encapsulation: ViewEncapsulation.None, template: "<ieeesa-dynamic-form\r\n *ngIf=\"createTenantFormGroup\"\r\n class=\"ieeesa-create-tenant-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"createTenantFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onCreateTenantFormSubmit($event)\"\r\n (formChange)=\"onCreateTenantFormChange($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n (formGroupsReference)=\"getCreateTenantFormGroupRef($event)\"\r\n (formFileUpload)=\"onFormFileUpload($event)\"\r\n (formColorPickerChange)=\"onColorPickerChange($event)\"\r\n (formRadioOptionSelected)=\"onRadioOptionSelected($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-modal-dialog.ieeesa-create-tenant,.ieeesa-modal-dialog.ieeesa-edit-tenant{max-width:60vw!important}.ieeesa-modal-dialog.ieeesa-create-tenant .mat-mdc-dialog-container,.ieeesa-modal-dialog.ieeesa-edit-tenant .mat-mdc-dialog-container{box-shadow:none}.ieeesa-modal-dialog.ieeesa-create-tenant .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-edit-tenant .mat-mdc-dialog-surface{border-radius:0;margin:1em 0}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:.5em}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .mat-mdc-dialog-content{padding:1.5em 1em .75em!important}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal-title,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal-title{margin-left:15px!important}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__actions,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__actions{flex-direction:row-reverse;gap:.5em;padding:2em 1em .75em;margin-top:2em}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field{margin-bottom:1em;padding-top:0!important}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field__content,.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mdc-label,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field__content,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mdc-label{padding-left:0}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field__resize,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-text-area-field__resize{resize:vertical}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field__content,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field__content{color:#1c1b1f}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mat-mdc-text-field-wrapper,.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mat-mdc-form-field-focus-overlay,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mat-mdc-text-field-wrapper,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mat-mdc-form-field-focus-overlay{background:#fff;padding:0;border:0}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mdc-line-ripple:before,.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mdc-line-ripple:after,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mdc-line-ripple:before,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field .ieeesa-input-field:has(.mdc-text-field--disabled) .mdc-line-ripple:after{border:0}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field:not(.app-description,.app-logo),.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field:not(.app-description,.app-logo){width:90%}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .mat-mdc-form-field-flex,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .mat-mdc-form-field-flex{width:62.5em}.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .mat-mdc-form-field-subscript-wrapper,.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .mat-mdc-form-field-subscript-wrapper{display:none}@media (max-width: 767px){.ieeesa-modal-dialog.ieeesa-create-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field:not(.app-description,.app-logo),.ieeesa-modal-dialog.ieeesa-edit-tenant .ieeesa-modal .ieeesa-dynamic-form__form-field:not(.app-description,.app-logo){width:100%}}\n"] }]
504
- }], ctorParameters: function () { return [{ type: i1.FileUploadService }, { type: i2.TenantApplicationsService }, { type: i3.SharedService }]; }, propDecorators: { dynamicFormComponent: [{
505
- type: ViewChild,
506
- args: [DynamicFormComponent]
507
- }], submitFormResponse: [{
508
- type: Output
509
- }], formCancel: [{
510
- type: Output
511
- }] } });
512
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRlbmFudC1hcHBsaWNhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW5hbnRzL3NyYy9saWIvY29tcG9uZW50cy9jcmVhdGUtdGVuYW50LWFwcGxpY2F0aW9uL2NyZWF0ZS10ZW5hbnQtYXBwbGljYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVuYW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3JlYXRlLXRlbmFudC1hcHBsaWNhdGlvbi9jcmVhdGUtdGVuYW50LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUdaLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxTQUFTLEVBR1QsZUFBZSxFQUNmLGdCQUFnQixFQUdoQixvQkFBb0IsR0FHckIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssV0FBVyxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBd0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFjakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7OztBQVU3RSxNQUFNLE9BQU8sZ0NBQWdDO0lB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T0FHRztJQUNILHFCQUFxQixDQUFDLFdBQXdCO1FBQzVDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxXQUFXLENBQUM7SUFDM0MsQ0FBQztJQUNEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7K0dBemtCVSxnQ0FBZ0M7bUdBQWhDLGdDQUFnQyxtT0FXaEMsb0JBQW9CLGdEQzlEakMseXlCQWtCQSwrd2FENEJZLFlBQVksbUlBQUUsb0JBQW9COzs0RkFLakMsZ0NBQWdDO2tCQVI1QyxTQUFTOytCQUNFLGtDQUFrQyxjQUNoQyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsaUJBRzlCLGlCQUFpQixDQUFDLElBQUk7NEtBY3JDLG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBRXJCLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBbGlnblR5cGUsXHJcbiAgQ2hlY2tib3hPcHRpb24sXHJcbiAgRm9ybUdyaWQsXHJcbiAgRm9ybUNvbnRyb2xUeXBlLFxyXG4gIEFsbG93ZWRGaWxlVHlwZXMsXHJcbiAgRmlsZVVwbG9hZFByZXNpZ25lZFVybCxcclxuICBSYWRpb09wdGlvbixcclxuICBEeW5hbWljRm9ybUNvbXBvbmVudCxcclxuICBGb3JtTW9kZWwsXHJcbiAgRmlsZVVwbG9hZFNlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vcHJlc2VudGF0aW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUZW5hbnRzVmFsaWRhdGlvblBhdHRlcm5zIH0gZnJvbSAnLi4vLi4vYXNzZXRzL3RlbmFudC12YWxpZGF0aW9ucyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1TdGF0dXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybS1zdGF0dXMubW9kZWwnO1xyXG5pbXBvcnQgeyB2YWxpZENvbG9yVmFsaWRhdG9yIH0gZnJvbSAnbmd4LWNvbG9ycyc7XHJcbmltcG9ydCB7IEZlYXR1cmVzLCBHZXRGZWF0dXJlc1Jlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZlYXR1cmVzLm1vZGVsJztcclxuaW1wb3J0IHsgVGVuYW50QXBwbGljYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbmFudC1hcHBsaWNhdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQXBwVHlwZUNvbmZpZyxcclxuICBHZXRBcHBUeXBlc1Jlc3BvbnNlLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9hcHAtdHlwZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENyZWF0ZVRlbmFudFJlcXVlc3RQYXlsb2FkLFxyXG4gIENyZWF0ZVRlbmFudFJlc3BvbnNlLFxyXG4gIE5ld1RlbmFudEluZm8sXHJcbiAgVGVuYW50QmFzaWNJbmZvLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy90ZW5hbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vc2hhcmVkJztcclxuaW1wb3J0IHsgVGVuYW50RnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RlbmFudC1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLWNyZWF0ZS10ZW5hbnQtYXBwbGljYXRpb24nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHluYW1pY0Zvcm1Db21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtdGVuYW50LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtdGVuYW50LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWF0ZVRlbmFudEFwcGxpY2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gc2NyZWVuVGV4dHM7XHJcbiAgY3JlYXRlVGVuYW50VGV4dHMgPSB0aGlzLmNvbnN0YW50cz8uY3JlYXRlVGVuYW50O1xyXG4gIGxlZnRCdXR0b25MYWJlbCA9IHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmxhYmVsPy5sZWZ0QnV0dG9uTGFiZWw7XHJcbiAgcmlnaHRCdXR0b25MYWJlbCA9IHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmxhYmVsPy5yaWdodEJ1dHRvbkxhYmVsO1xyXG4gIGNvbFdpZHRoOiBGb3JtR3JpZCA9IHsgeHM6IDEyLCB4bDogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIgfTtcclxuICBjcmVhdGVUZW5hbnRGb3JtR3JvdXAhOiBGb3JtTW9kZWw7XHJcbiAgYWN0aW9uQnV0dG9uQWxpZ24gPSBBbGlnblR5cGUuTEVGVDtcclxuICBjcmVhdGVUZW5hbnRGb3JtR3JvdXBSZWYhOiBGb3JtR3JvdXA7XHJcbiAgQFZpZXdDaGlsZChEeW5hbWljRm9ybUNvbXBvbmVudClcclxuICBkeW5hbWljRm9ybUNvbXBvbmVudCE6IER5bmFtaWNGb3JtQ29tcG9uZW50O1xyXG4gIEBPdXRwdXQoKSBzdWJtaXRGb3JtUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZvcm1DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgZmVhdHVyZXNPcHRpb25zITogQ2hlY2tib3hPcHRpb25bXTtcclxuICBhcHBUeXBlT3B0aW9ucyE6IFJhZGlvT3B0aW9uW107XHJcbiAgY3JlYXRlVGVuYW50UGF5bG9hZCE6IENyZWF0ZVRlbmFudFJlcXVlc3RQYXlsb2FkO1xyXG4gIGZpbGVVcGxvYWRQcmVzaWduZWRVcmwhOiBzdHJpbmc7XHJcbiAgZmlsZURvd25sb2FkUHJlc2lnbmVkVXJsITogc3RyaW5nO1xyXG4gIGZpbGUhOiBGaWxlIHwgRmlsZUxpc3Q7XHJcbiAgYWxsb3dlZEZpbGVUeXBlcyA9IFtcclxuICAgIEFsbG93ZWRGaWxlVHlwZXMuSlBHLFxyXG4gICAgQWxsb3dlZEZpbGVUeXBlcy5QTkcsXHJcbiAgICBBbGxvd2VkRmlsZVR5cGVzLlNWRyxcclxuICBdO1xyXG4gIHNlbGVjdGVkQ29sb3IhOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRBcHBUeXBlT3B0aW9uITogUmFkaW9PcHRpb247XHJcbiAgdGVuYW50RnVuY3Rpb25UeXBlITogVGVuYW50RnVuY3Rpb25UeXBlO1xyXG4gIHNlbGVjdGVkVGVuYW50SW5mbyE6IFRlbmFudEJhc2ljSW5mbyB8IHVuZGVmaW5lZDtcclxuICBpc0FwcExvZ29Nb2RpZmllZCA9IGZhbHNlO1xyXG4gIHVwZGF0ZWRUZW5hbnRCYXNpY0luZm8hOiBOZXdUZW5hbnRJbmZvO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZmlsZVVwbG9hZFNlcnZpY2U6IEZpbGVVcGxvYWRTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIHRlbmFudEFwcFNlcnZpY2U6IFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cclxuICApIHt9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRlbmFudEZ1bmN0aW9uVHlwZSA9IHRoaXMudGVuYW50QXBwU2VydmljZT8uZ2V0VGVuYW50RnVuY3Rpb25UeXBlKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGVuYW50SW5mbyA9XHJcbiAgICAgIHRoaXMudGVuYW50QXBwU2VydmljZT8uZ2V0U2VsZWN0ZWRUZW5hbnRJbmZvcm1hdGlvbigpO1xyXG4gICAgdGhpcy5maWxlVXBsb2FkU2VydmljZS5zZXRBcGlCYXNlVXJsKHRoaXMudGVuYW50QXBwU2VydmljZT8uYXBpQmFzZVVybCk7XHJcbiAgICB0aGlzLmdldEZlYXR1cmVzKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgZmVhdHVyZXMgYW5kIHVwZGF0ZXMgdGhlIGZvcm0gY29udHJvbC5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlVGVuYW50QXBwbGljYXRpb25Db21wb25lbnRcclxuICAgKi9cclxuICBnZXRGZWF0dXJlcygpOiB2b2lkIHtcclxuICAgIHRoaXMudGVuYW50QXBwU2VydmljZVxyXG4gICAgICAuZ2V0RmVhdHVyZXMoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZTogR2V0RmVhdHVyZXNSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlc09wdGlvbnMgPSB0aGlzLnRlbmFudEFwcFNlcnZpY2UuZ2V0RmVhdHVyZU9wdGlvbnMoXHJcbiAgICAgICAgICAgICAgcmVzcG9uc2U/LmJvZHkgYXMgRmVhdHVyZXNbXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50ZW5hbnRGdW5jdGlvblR5cGUgPT09IFRlbmFudEZ1bmN0aW9uVHlwZS5FRElUKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXNPcHRpb25zPy5mb3JFYWNoKChvcHRpb246IENoZWNrYm94T3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUZW5hbnRJbmZvPy5mZWF0dXJlcz8uc29tZShcclxuICAgICAgICAgICAgICAgICAgICAoZmVhdHVyZTogRmVhdHVyZXMpID0+IGZlYXR1cmU/LmZlYXR1cmVJZCA9PT0gb3B0aW9uPy5pZFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgb3B0aW9uLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmdldEFwcGxpY2F0aW9uVHlwZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaGFuZGxlRXJyb3JzKFxyXG4gICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8uZXJyb3JzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBhcHBsaWNhdGlvbi90ZW5hbnQgdHlwZXMgYW5kIHVwZGF0ZXMgdGhlIGZvcm0gY29udHJvbC5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlVGVuYW50QXBwbGljYXRpb25Db21wb25lbnRcclxuICAgKi9cclxuICBnZXRBcHBsaWNhdGlvblR5cGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy50ZW5hbnRBcHBTZXJ2aWNlXHJcbiAgICAgIC5nZXRBcHBsaWNhdGlvblR5cGVzKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IEdldEFwcFR5cGVzUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZT8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwVHlwZU9wdGlvbnMgPVxyXG4gICAgICAgICAgICAgIHRoaXMudGVuYW50QXBwU2VydmljZS5nZXRBcHBsaWNhdGlvblR5cGVPcHRpb25zKFxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U/LmJvZHkgYXMgQXBwVHlwZUNvbmZpZ1tdXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGVuYW50RnVuY3Rpb25UeXBlID09PSBUZW5hbnRGdW5jdGlvblR5cGUuRURJVCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXBwVHlwZU9wdGlvbnM/LmZvckVhY2goKHJhZGlvT3B0aW9uOiBSYWRpb09wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJhZGlvT3B0aW9uPy5pZCA9PT0gdGhpcy5zZWxlY3RlZFRlbmFudEluZm8/LmFwcFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgcmFkaW9PcHRpb24uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBcHBUeXBlT3B0aW9uID0gcmFkaW9PcHRpb247XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByYWRpb09wdGlvbi5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ3JlYXRlVGVuYW50Rm9ybUdyb3VwKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmhhbmRsZUVycm9ycyhcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmVycm9yc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgY3JlYXRlIHRlbmFudCBmb3JtIGdyb3VwIGFycmF5LlxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVUZW5hbnRBcHBsaWNhdGlvbkNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGluaXRpYWxpemVDcmVhdGVUZW5hbnRGb3JtR3JvdXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNyZWF0ZVRlbmFudEZvcm1Hcm91cCA9IHtcclxuICAgICAgZm9ybUdyb3VwOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVnZW5kOiAnJyxcclxuICAgICAgICAgIGNvbnRyb2xzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuSU5QVVQsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmxhYmVsPy5hcHBUaXRsZSArICcqJyxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2FwcFRpdGxlJyxcclxuICAgICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICAgIHRoaXMudGVuYW50RnVuY3Rpb25UeXBlID09PSBUZW5hbnRGdW5jdGlvblR5cGUuRURJVFxyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRUZW5hbnRJbmZvPy5hcHBUaXRsZVxyXG4gICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IFtcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aChcclxuICAgICAgICAgICAgICAgICAgVGVuYW50c1ZhbGlkYXRpb25QYXR0ZXJucy5hcHBUaXRsZU1heExlbmd0aFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOiB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5zdXBwb3J0VGV4dD8uYXBwVGl0bGUsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgbWF4RXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LmxpbWl0Py5hcHBUaXRsZU1heENoYXJzLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uYXBwVGl0bGUsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/LmFwcFRpdGxlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLklOUFVULFxyXG4gICAgICAgICAgICAgIGxhYmVsOiBgJHt0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5sYWJlbD8uYXBwSWR9JHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGVuYW50RnVuY3Rpb25UeXBlID09PSBUZW5hbnRGdW5jdGlvblR5cGUuRURJVCA/ICcnIDogJyonXHJcbiAgICAgICAgICAgICAgfWAsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdhcHBJZCcsXHJcbiAgICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbmFudEZ1bmN0aW9uVHlwZSA9PT0gVGVuYW50RnVuY3Rpb25UeXBlLkVESVRcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkVGVuYW50SW5mbz8uYXBwSWRcclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoVGVuYW50c1ZhbGlkYXRpb25QYXR0ZXJucy5hcHBJZE1heExlbmd0aCksXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oVGVuYW50c1ZhbGlkYXRpb25QYXR0ZXJucy5hbHBoYU51bWVyaWMpLFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMudGVuYW50RnVuY3Rpb25UeXBlID09PSBUZW5hbnRGdW5jdGlvblR5cGUuRURJVCxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMudGVuYW50RnVuY3Rpb25UeXBlID09PSBUZW5hbnRGdW5jdGlvblR5cGUuRURJVFxyXG4gICAgICAgICAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8uc3VwcG9ydFRleHQ/LmFwcElkLFxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIG1heEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5saW1pdD8uYXBwSWRNYXhDaGFycyxcclxuICAgICAgICAgICAgICBwYXR0ZXJuRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnBhdHRlcm4/LmFwcElkLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uYXBwSWQsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/LmFwcElkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlPy5GSUxFX1VQTE9BRCxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFwcExvZ28gKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdhcHBMb2dvJyxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICAgIHRoaXMudGVuYW50RnVuY3Rpb25UeXBlID09PSBUZW5hbnRGdW5jdGlvblR5cGUuRURJVFxyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRUZW5hbnRJbmZvPy5hcHBMb2dvXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxyXG4gICAgICAgICAgICAgIGlzRmlsZVNlbGVjdGVkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW5hbnRGdW5jdGlvblR5cGUgPT09IFRlbmFudEZ1bmN0aW9uVHlwZS5FRElULFxyXG4gICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOiB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5zdXBwb3J0VGV4dD8uYXBwTG9nbyxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5hcHBMb2dvLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5hcHBMb2dvLFxyXG4gICAgICAgICAgICAgIGlzTXVsdGlGaWxlVXBsb2FkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBtYXhVcGxvYWRGaWxlU2l6ZTogMixcclxuICAgICAgICAgICAgICBtYXhGaWxlU2l6ZUVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5saW1pdD8uYXBwTG9nb01heFNpemUsXHJcbiAgICAgICAgICAgICAgYWxsb3dlZEZpbGVUeXBlRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LmludmFsaWRGaWxlLFxyXG4gICAgICAgICAgICAgIGFsbG93ZWRGaWxlVHlwZXM6IHRoaXMuYWxsb3dlZEZpbGVUeXBlcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5JTlBVVCxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFwcEhlYWRpbmcgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdhcHBIZWFkaW5nJyxcclxuICAgICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICAgIHRoaXMudGVuYW50RnVuY3Rpb25UeXBlID09PSBUZW5hbnRGdW5jdGlvblR5cGUuRURJVFxyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRUZW5hbnRJbmZvPy5hcHBIZWFkaW5nXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKFxyXG4gICAgICAgICAgICAgICAgICBUZW5hbnRzVmFsaWRhdGlvblBhdHRlcm5zLmFwcEhlYWRpbmdNYXhMZW5ndGhcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8uc3VwcG9ydFRleHQ/LmFwcEhlYWRpbmcsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgbWF4RXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LmxpbWl0XHJcbiAgICAgICAgICAgICAgICAgID8uYXBwSGVhZGluZ01heENoYXJzLFxyXG4gICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucGF0dGVybj8uZW1haWwsXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5hcHBIZWFkaW5nLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5hcHBIZWFkaW5nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlRFWFRfQVJFQSxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFwcERlc2NyaXB0aW9uICsgJyonLFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnYXBwRGVzY3JpcHRpb24nLFxyXG4gICAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW5hbnRGdW5jdGlvblR5cGUgPT09IFRlbmFudEZ1bmN0aW9uVHlwZS5FRElUXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZFRlbmFudEluZm8/LmFwcERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKFxyXG4gICAgICAgICAgICAgICAgICBUZW5hbnRzVmFsaWRhdGlvblBhdHRlcm5zLmFwcERlc2NyaXB0aW9uTWF4TGVuZ3RoXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5zdXBwb3J0VGV4dD8uYXBwRGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgbWF4RXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LmxpbWl0XHJcbiAgICAgICAgICAgICAgICAgID8uYXBwRGVzY3JpcHRpb25NYXhDaGFycyxcclxuICAgICAgICAgICAgICBtYXhDaGFyQ291bnQ6IFRlbmFudHNWYWxpZGF0aW9uUGF0dGVybnMuYXBwRGVzY3JpcHRpb25NYXhMZW5ndGgsXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uYXBwRGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgPy5hcHBEZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICBhcmlhTXVsdGlsaW5lOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGlzUmVzaXplOiB0cnVlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLkNPTE9SX1BJQ0tFUixcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFwcEJnQ29sb3IgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdiYWNrZ3JvdW5kQ29sb3InLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiAnJyxcclxuICAgICAgICAgICAgICBkZWZhdWx0Q29sb3I6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbmFudEZ1bmN0aW9uVHlwZSA9PT0gVGVuYW50RnVuY3Rpb25UeXBlLkVESVRcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkVGVuYW50SW5mbz8uYmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxyXG4gICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOiB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5zdXBwb3J0VGV4dD8uYXBwQmdDb2xvcixcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdmFsaWRDb2xvclZhbGlkYXRvcigpXSxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICBpbnZhbGlkQ29sb3JFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5tZXNzYWdlPy5lcnJvcj8uaW52YWxpZENvbG9yLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8uc3VwcG9ydFRleHQ/LmFwcEJnQ29sb3IsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5zdXBwb3J0VGV4dD8uYXBwQmdDb2xvcixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5JTlBVVCxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFwcEhlbHBMaW5rICsgJyonLFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnYXBwSGVscExpbmsnLFxyXG4gICAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW5hbnRGdW5jdGlvblR5cGUgPT09IFRlbmFudEZ1bmN0aW9uVHlwZS5FRElUXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZFRlbmFudEluZm8/LmFwcEhlbHBMaW5rXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihUZW5hbnRzVmFsaWRhdGlvblBhdHRlcm5zLnVybCksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8uc3VwcG9ydFRleHQ/LmFwcEhlbHBMaW5rLFxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucGF0dGVybj8uYXBwSGVscExpbmssXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5hcHBIZWxwTGluayxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8uYXBwSGVscExpbmssXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuQ0hFQ0tCT1gsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmxhYmVsPy5mZWF0dXJlc0xpc3QgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdmZWF0dXJlcycsXHJcbiAgICAgICAgICAgICAgY2hlY2tib3hPcHRpb25zOiB0aGlzLmZlYXR1cmVzT3B0aW9ucyxcclxuICAgICAgICAgICAgICBtaW5TZWxlY3Rpb25SZXF1aXJlZDogMSxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmZlYXR1cmVzTGlzdCxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8uZmVhdHVyZXNMaXN0LFxyXG4gICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOiB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5zdXBwb3J0VGV4dD8uZmVhdHVyZXNMaXN0LFxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5JTlBVVCxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmRvbWFpblVSTCArICcqJyxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2FwcERvbWFpblVybCcsXHJcbiAgICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbmFudEZ1bmN0aW9uVHlwZSA9PT0gVGVuYW50RnVuY3Rpb25UeXBlLkVESVRcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkVGVuYW50SW5mbz8uYXBwRG9tYWluVXJsXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihUZW5hbnRzVmFsaWRhdGlvblBhdHRlcm5zLnVybCksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTogdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8uc3VwcG9ydFRleHQ/LmRvbWFpblVSTCxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICBwYXR0ZXJuRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnBhdHRlcm4/LmFwcERvbWFpblVybCxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmRvbWFpblVSTCxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8uZG9tYWluVVJMLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlJBRElPLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiBgJHt0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5sYWJlbD8uYXBwVHlwZX0ke1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW5hbnRGdW5jdGlvblR5cGUgPT09IFRlbmFudEZ1bmN0aW9uVHlwZS5FRElUID8gJycgOiAnKidcclxuICAgICAgICAgICAgICB9YCxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2FwcFR5cGUnLFxyXG4gICAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW5hbnRGdW5jdGlvblR5cGUgPT09IFRlbmFudEZ1bmN0aW9uVHlwZS5FRElUXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZFRlbmFudEluZm8/LmFwcFR5cGVcclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy50ZW5hbnRGdW5jdGlvblR5cGUgPT09IFRlbmFudEZ1bmN0aW9uVHlwZS5FRElULFxyXG4gICAgICAgICAgICAgIHJhZGlvT3B0aW9uczogdGhpcy5hcHBUeXBlT3B0aW9ucyxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5hcHBUeXBlLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW5hbnRUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5hcHBUeXBlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgUGF5bG9hZCBhbmQgZ2V0cyBwcmVzaWduZWQgdXJsIGZvciBmaWxlIHVwbG9hZCBvbiBmb3JtIHN1Ym1pc3Npb24uXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBDcmVhdGVUZW5hbnRBcHBsaWNhdGlvbkNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uQ3JlYXRlVGVuYW50Rm9ybVN1Ym1pdChmb3JtOiBGb3JtR3JvdXBbXSk6IHZvaWQge1xyXG4gICAgZm9ybVswXT8ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgaWYgKGZvcm1bMF0uc3RhdHVzID09PSBGb3JtU3RhdHVzLlZBTElEKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlVGVuYW50UGF5bG9hZCA9IHRoaXMuZ2V0Q3JlYXRlVGVuYW50UGF5bG9hZChcclxuICAgICAgICBmb3JtWzBdLmdldFJhd1ZhbHVlKClcclxuICAgICAgKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMudGVuYW50RnVuY3Rpb25UeXBlID09PSBUZW5hbnRGdW5jdGlvblR5cGUuRURJVCAmJlxyXG4gICAgICAgICghdGhpcy5pc0FwcExvZ29Nb2RpZmllZCB8fCAhdGhpcy5maWxlKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmVkaXRUZW5hbnQoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgICB0aGlzLmdldEZpbGVVcGxvYWRQcmVzaWduZWRVcmwoXHJcbiAgICAgICAgICB0aGlzLmZpbGUsXHJcbiAgICAgICAgICBmb3JtWzBdPy5jb250cm9sc1snYXBwSWQnXT8udmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlVGVuYW50KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBuZXcgdGVuYW50IG9uIGZvcm0gc3VibWlzc2lvbi5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlVGVuYW50QXBwbGljYXRpb25Db21wb25lbnRcclxuICAgKi9cclxuICBjcmVhdGVUZW5hbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRlbmFudEFwcFNlcnZpY2VcclxuICAgICAgLmNyZWF0ZVRlbmFudCh0aGlzLmNyZWF0ZVRlbmFudFBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBDcmVhdGVUZW5hbnRSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLnRlbmFudEFwcFNlcnZpY2Uuc2V0TmV3VGVuYW50SW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFBheWxvYWQ/LnBheWxvYWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zdWJtaXRGb3JtUmVzcG9uc2UuZW1pdChyZXNwb25zZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmhhbmRsZUVycm9ycyhcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmVycm9yc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgbW9kaWZpZWQgdGVuYW50IGluZm9ybWF0aW9uIG9uIGZvcm0gc3VibWlzc2lvbi5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlVGVuYW50QXBwbGljYXRpb25Db21wb25lbnRcclxuICAgKi9cclxuICBlZGl0VGVuYW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy50ZW5hbnRBcHBTZXJ2aWNlXHJcbiAgICAgIC5lZGl0VGVuYW50KHRoaXMuY3JlYXRlVGVuYW50UGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IENyZWF0ZVRlbmFudFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZWRUZW5hbnRCYXNpY0luZm8gPSB0aGlzLmNyZWF0ZVRlbmFudFBheWxvYWQ/LnBheWxvYWQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlZFRlbmFudEJhc2ljSW5mby5mZWF0dXJlcyA9XHJcbiAgICAgICAgICAgICAgdGhpcy50ZW5hbnRBcHBTZXJ2aWNlLmdldEZlYXR1cmVzTGlzdCh0aGlzLmZlYXR1cmVzT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHRoaXMudGVuYW50QXBwU2VydmljZS5zZXRTZWxlY3RlZFRlbmFudEluZm9ybWF0aW9uKFxyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlZFRlbmFudEJhc2ljSW5mbyBhcyBUZW5hbnRCYXNpY0luZm9cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zdWJtaXRGb3JtUmVzcG9uc2UuZW1pdChyZXNwb25zZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmhhbmRsZUVycm9ycyhcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmVycm9yc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0cyBjcmVhdGUgdGVuYW50IHBheWxvYWQgZnJvbSB0aGUgZm9ybSBkYXRhIGFuZCByZXR1cm5zLlxyXG4gICAqIEBwYXJhbSB7Kn0gZm9ybURhdGFcclxuICAgKiBAcmV0dXJuIHtDcmVhdGVUZW5hbnRSZXF1ZXN0UGF5bG9hZH1cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlVGVuYW50QXBwbGljYXRpb25Db21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldENyZWF0ZVRlbmFudFBheWxvYWQoZm9ybURhdGE6IGFueSk6IENyZWF0ZVRlbmFudFJlcXVlc3RQYXlsb2FkIHtcclxuICAgIGNvbnN0IHBheWxvYWQ6IENyZWF0ZVRlbmFudFJlcXVlc3RQYXlsb2FkID0ge1xyXG4gICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgYXBwVGl0bGU6IGZvcm1EYXRhPy5hcHBUaXRsZSxcclxuICAgICAgICBhcHBJZDogZm9ybURhdGE/LmFwcElkLFxyXG4gICAgICAgIGFwcEhlYWRpbmc6IGZvcm1EYXRhPy5hcHBIZWFkaW5nLFxyXG4gICAgICAgIGFwcERlc2NyaXB0aW9uOiBmb3JtRGF0YT8uYXBwRGVzY3JpcHRpb24sXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBmb3JtRGF0YT8uYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgIGFwcExvZ286IGZvcm1EYXRhPy5hcHBMb2dvLFxyXG4gICAgICAgIGFwcERvbWFpblVybDogZm9ybURhdGE/LmFwcERvbWFpblVybCxcclxuICAgICAgICBhcHBIZWxwTGluazogZm9ybURhdGE/LmFwcEhlbHBMaW5rLFxyXG4gICAgICAgIGFwcFR5cGU6IHRoaXMuc2VsZWN0ZWRBcHBUeXBlT3B0aW9uPy5pZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgZmVhdHVyZXM6IHRoaXMudGVuYW50QXBwU2VydmljZS5nZXRGZWF0dXJlSWRzKHRoaXMuZmVhdHVyZXNPcHRpb25zKSxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gcGF5bG9hZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgY3JlYXRlIHRlbmFudCBmb3JtIGdyb3VwIHJlZmVyZW5jZSBhbmQgZGlzYWJsZXMgZGVmYXVsdCBmZWF0dXJlcy5cclxuICAgKiBAcGFyYW0ge0Zvcm1Hcm91cFtdfSBmb3JtXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZVRlbmFudEFwcGxpY2F0aW9uQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Q3JlYXRlVGVuYW50Rm9ybUdyb3VwUmVmKGZvcm06IEZvcm1Hcm91cFtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmNyZWF0ZVRlbmFudEZvcm1Hcm91cFJlZiA9IGZvcm1bMF07XHJcbiAgICBjb25zdCBmZWF0dXJlc0Zvcm1BcnJheSA9IHRoaXMuY3JlYXRlVGVuYW50Rm9ybUdyb3VwUmVmPy5jb250cm9sc1tcclxuICAgICAgJ2ZlYXR1cmVzJ1xyXG4gICAgXSBhcyBGb3JtQXJyYXk7XHJcbiAgICB0aGlzLmZlYXR1cmVzT3B0aW9ucz8uZm9yRWFjaCgob3B0aW9uOiBDaGVja2JveE9wdGlvbiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAob3B0aW9uPy5kaXNhYmxlZCkge1xyXG4gICAgICAgIGZlYXR1cmVzRm9ybUFycmF5Py5hdChpbmRleCkuZGlzYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBjcmVhdGVUZW5hbnRGb3JtR3JvdXBSZWYgb24gYWRkIG9yIGVkaXQgdGVuYW50IGZvcm0gY2hhbmdlIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlVGVuYW50QXBwbGljYXRpb25Db21wb25lbnRcclxuICAgKi9cclxuICBvbkNyZWF0ZVRlbmFudEZvcm1DaGFuZ2UoZm9ybTogRm9ybUdyb3VwW10pOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlYXRlVGVuYW50Rm9ybUdyb3VwUmVmID0gZm9ybVswXTtcclxuICAgIHRoaXMuaXNBcHBMb2dvTW9kaWZpZWQgPVxyXG4gICAgICB0aGlzLmNyZWF0ZVRlbmFudEZvcm1Hcm91cFJlZj8uY29udHJvbHNbJ2FwcExvZ28nXT8uZGlydHkgJiZcclxuICAgICAgdGhpcy50ZW5hbnRGdW5jdGlvblR5cGUgPT09IFRlbmFudEZ1bmN0aW9uVHlwZS5FRElUO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFbWl0cyBmb3JtIGNhbmNlbCBldmVudC5cclxuICAgKiBAbWVtYmVyb2YgQ3JlYXRlVGVuYW50QXBwbGljYXRpb25Db21wb25lbnRcclxuICAgKi9cclxuICBvbkZvcm1DYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1DYW5jZWwuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgc2VsZWN0ZWQgZmlsZSB3aGVuIHRoZSBmaWxlIGlzIGJyb3dzZWQgYW5kIG9uIGZvcm1GaWxlVXBsb2FkIGV2ZW50IGlzIHRyaWdnZXJlZC5cclxuICAgKiBAcGFyYW0ge0ZpbGUgfCBGaWxlTGlzdH0gZmlsZVxyXG4gICAqL1xyXG4gIG9uRm9ybUZpbGVVcGxvYWQoZmlsZTogRmlsZSB8IEZpbGVMaXN0KTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGUgPSBmaWxlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHByZS1zaWduZWQgVVJMIHRvIHVwbG9hZCB0aGUgc2VsZWN0ZWQgZmlsZSB0byBBV1MgUzMgYnVja2V0LlxyXG4gICAqIEBwYXJhbSB7RmlsZSB8IEZpbGVMaXN0fSBmaWxlXHJcbiAgICovXHJcbiAgZ2V0RmlsZVVwbG9hZFByZXNpZ25lZFVybChmaWxlOiBGaWxlIHwgRmlsZUxpc3QsIGFwcElkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsZVVwbG9hZFNlcnZpY2VcclxuICAgICAgLmdldEZpbGVVcGxvYWRQcmVzaWduZWRVcmwoZmlsZSwgYXBwSWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBGaWxlVXBsb2FkUHJlc2lnbmVkVXJsKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRQcmVzaWduZWRVcmwgPSByZXNwb25zZT8uYm9keTtcclxuICAgICAgICAgIGlmICh0aGlzLmZpbGVVcGxvYWRQcmVzaWduZWRVcmwpIHRoaXMudXBsb2FkRmlsZVRvUzMoZmlsZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvblxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmhhbmRsZUVycm9ycyhcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVuYW50VGV4dHM/LmVycm9yc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVXBsb2FkcyB0aGUgZmlsZSB0byBBV1MgUzMgYnVja2V0IGFuZCBzdWJtaXQgdGhlIGZvcm0gZGF0YSB0byBBUEkgdG8gY3JlYXRlIG5ldyB0ZW5hbnQuXHJcbiAgICogQHBhcmFtIHtGaWxlIHwgRmlsZUxpc3R9IGZpbGVcclxuICAgKi9cclxuICB1cGxvYWRGaWxlVG9TMyhmaWxlOiBGaWxlIHwgRmlsZUxpc3QpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsZVVwbG9hZFNlcnZpY2VcclxuICAgICAgLnVwbG9hZEZpbGVUb1MzKHRoaXMuZmlsZVVwbG9hZFByZXNpZ25lZFVybCwgZmlsZSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRTZXJ2aWNlLnNldEZpbGVVcGxvYWRTdGF0dXModHJ1ZSk7XHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXHJcbiAgICAgICAgICB0aGlzLnRlbmFudEZ1bmN0aW9uVHlwZSA9PT0gVGVuYW50RnVuY3Rpb25UeXBlLkVESVRcclxuICAgICAgICAgICAgPyB0aGlzLmVkaXRUZW5hbnQoKVxyXG4gICAgICAgICAgICA6IHRoaXMuY3JlYXRlVGVuYW50KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWxlVXBsb2FkU2VydmljZS5zZXRGaWxlVXBsb2FkU3RhdHVzKGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5oYW5kbGVFcnJvcnMoXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRlbmFudFRleHRzPy5lcnJvcnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXJzIHdoZW4gdGhlIGNvbG9yIHBpY2tlciB2YWx1ZXMgaGFzIGJlZW4gY2hhbmdlZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICAgKi9cclxuICBvbkNvbG9yUGlja2VyQ2hhbmdlKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb2xvciA9IGNvbG9yO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBUcmlnZ2VycyB3aGVuIHRoZSByYWRpbyBvcHRpb24gaGFzIGJlZW4gY2hhbmdlZC5cclxuICAgKiBAcGFyYW0ge1JhZGlvT3B0aW9ufSByYWRpb09wdGlvblxyXG4gICAqL1xyXG4gIG9uUmFkaW9PcHRpb25TZWxlY3RlZChyYWRpb09wdGlvbjogUmFkaW9PcHRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRBcHBUeXBlT3B0aW9uID0gcmFkaW9PcHRpb247XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEltcGxlbWVudGF0aW9uIG9mIG5nT25EZXN0cm95IGxpZmVjeWNsZSBob29rIG1ldGhvZCB0byB1bnN1YnNjcmliZSB0aGUgb3BlbiBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbnMuXHJcbiAgICogQG1lbWJlcm9mIENyZWF0ZVRlbmFudEFwcGxpY2F0aW9uQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxpZWVlc2EtZHluYW1pYy1mb3JtXHJcbiAgKm5nSWY9XCJjcmVhdGVUZW5hbnRGb3JtR3JvdXBcIlxyXG4gIGNsYXNzPVwiaWVlZXNhLWNyZWF0ZS10ZW5hbnQtZm9ybVwiXHJcbiAgW2xlZnRCdXR0b25MYWJlbF09XCJsZWZ0QnV0dG9uTGFiZWxcIlxyXG4gIFtyaWdodEJ1dHRvbkxhYmVsXT1cInJpZ2h0QnV0dG9uTGFiZWxcIlxyXG4gIFtpc0xlZ2VuZFZpc2libGVdPVwiZmFsc2VcIlxyXG4gIFtjb2xXaWR0aF09XCJjb2xXaWR0aFwiXHJcbiAgW2FjdGlvbkJ1dHRvbkFsaWduXT1cImFjdGlvbkJ1dHRvbkFsaWduXCJcclxuICBbZm9ybUdyb3Vwc109XCJjcmVhdGVUZW5hbnRGb3JtR3JvdXBcIlxyXG4gIFtpc0xlZnRCdXR0b25OZWVkZWRdPVwidHJ1ZVwiXHJcbiAgKGZvcm1TdWJtaXQpPVwib25DcmVhdGVUZW5hbnRGb3JtU3VibWl0KCRldmVudClcIlxyXG4gIChmb3JtQ2hhbmdlKT1cIm9uQ3JlYXRlVGVuYW50Rm9ybUNoYW5nZSgkZXZlbnQpXCJcclxuICAoZm9ybUxlZnRCdXR0b25DbGlja2VkKT1cIm9uRm9ybUNhbmNlbCgpXCJcclxuICAoZm9ybUdyb3Vwc1JlZmVyZW5jZSk9XCJnZXRDcmVhdGVUZW5hbnRGb3JtR3JvdXBSZWYoJGV2ZW50KVwiXHJcbiAgKGZvcm1GaWxlVXBsb2FkKT1cIm9uRm9ybUZpbGVVcGxvYWQoJGV2ZW50KVwiXHJcbiAgKGZvcm1Db2xvclBpY2tlckNoYW5nZSk9XCJvbkNvbG9yUGlja2VyQ2hhbmdlKCRldmVudClcIlxyXG4gIChmb3JtUmFkaW9PcHRpb25TZWxlY3RlZCk9XCJvblJhZGlvT3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbj48L2llZWVzYS1keW5hbWljLWZvcm0+XHJcbiJdfQ==