@valtimo/zgw 12.0.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/esm2022/lib/components/dossier-management-zgw/dossier-management-zgw.component.mjs +61 -13
  2. package/esm2022/lib/models/dossier-management-zgw.model.mjs +5 -3
  3. package/esm2022/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.mjs +115 -242
  4. package/esm2022/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.mjs +57 -85
  5. package/esm2022/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.mjs +171 -100
  6. package/esm2022/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.mjs +174 -0
  7. package/esm2022/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +244 -106
  8. package/esm2022/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.mjs +115 -0
  9. package/esm2022/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.mjs +164 -0
  10. package/esm2022/lib/modules/documenten-api/components/index.mjs +5 -2
  11. package/esm2022/lib/modules/documenten-api/formio/documenten-api-uploader/documenten-api-uploader.component.mjs +3 -3
  12. package/esm2022/lib/modules/documenten-api/models/configured-column.model.mjs +12 -2
  13. package/esm2022/lib/modules/documenten-api/models/documenten-api-filter.model.mjs +17 -0
  14. package/esm2022/lib/modules/documenten-api/models/documenten-api-metadata.model.mjs +1 -1
  15. package/esm2022/lib/modules/documenten-api/models/documenten-api-tag.model.mjs +17 -0
  16. package/esm2022/lib/modules/documenten-api/models/documenten-api-version.model.mjs +1 -1
  17. package/esm2022/lib/modules/documenten-api/models/documenten-api.model.mjs +22 -2
  18. package/esm2022/lib/modules/documenten-api/models/index.mjs +2 -1
  19. package/esm2022/lib/modules/documenten-api/services/documenten-api-column.service.mjs +10 -9
  20. package/esm2022/lib/modules/documenten-api/services/documenten-api-document.service.mjs +10 -3
  21. package/esm2022/lib/modules/documenten-api/services/documenten-api-link-process.service.mjs +1 -16
  22. package/esm2022/lib/modules/documenten-api/services/documenten-api-tag.service.mjs +36 -0
  23. package/esm2022/lib/modules/documenten-api/services/documenten-api-version.service.mjs +4 -1
  24. package/esm2022/lib/modules/documenten-api/services/index.mjs +3 -2
  25. package/esm2022/lib/modules/objecten-api/components/zaakobjecten/zaakobjecten.component.mjs +2 -2
  26. package/esm2022/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.mjs +1 -1
  27. package/esm2022/lib/services/dossier-management-zgw.service.mjs +8 -4
  28. package/esm2022/lib/zgw.module.mjs +22 -5
  29. package/fesm2022/valtimo-zgw.mjs +1378 -781
  30. package/fesm2022/valtimo-zgw.mjs.map +1 -1
  31. package/lib/components/dossier-management-zgw/dossier-management-zgw.component.d.ts +16 -5
  32. package/lib/components/dossier-management-zgw/dossier-management-zgw.component.d.ts.map +1 -1
  33. package/lib/models/dossier-management-zgw.model.d.ts +12 -2
  34. package/lib/models/dossier-management-zgw.model.d.ts.map +1 -1
  35. package/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.d.ts +33 -63
  36. package/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.d.ts.map +1 -1
  37. package/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.d.ts +18 -20
  38. package/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.d.ts.map +1 -1
  39. package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts +38 -20
  40. package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts.map +1 -1
  41. package/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.d.ts +47 -0
  42. package/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.d.ts.map +1 -0
  43. package/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts +76 -39
  44. package/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
  45. package/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.d.ts +33 -0
  46. package/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.d.ts.map +1 -0
  47. package/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.d.ts +46 -0
  48. package/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.d.ts.map +1 -0
  49. package/lib/modules/documenten-api/components/index.d.ts +4 -1
  50. package/lib/modules/documenten-api/components/index.d.ts.map +1 -1
  51. package/lib/modules/documenten-api/models/configured-column.model.d.ts +8 -2
  52. package/lib/modules/documenten-api/models/configured-column.model.d.ts.map +1 -1
  53. package/lib/modules/documenten-api/models/documenten-api-filter.model.d.ts +10 -0
  54. package/lib/modules/documenten-api/models/documenten-api-filter.model.d.ts.map +1 -0
  55. package/lib/modules/documenten-api/models/documenten-api-metadata.model.d.ts +10 -9
  56. package/lib/modules/documenten-api/models/documenten-api-metadata.model.d.ts.map +1 -1
  57. package/lib/modules/documenten-api/models/documenten-api-tag.model.d.ts +5 -0
  58. package/lib/modules/documenten-api/models/documenten-api-tag.model.d.ts.map +1 -0
  59. package/lib/modules/documenten-api/models/documenten-api-version.model.d.ts +7 -1
  60. package/lib/modules/documenten-api/models/documenten-api-version.model.d.ts.map +1 -1
  61. package/lib/modules/documenten-api/models/documenten-api.model.d.ts +37 -12
  62. package/lib/modules/documenten-api/models/documenten-api.model.d.ts.map +1 -1
  63. package/lib/modules/documenten-api/models/index.d.ts +1 -0
  64. package/lib/modules/documenten-api/models/index.d.ts.map +1 -1
  65. package/lib/modules/documenten-api/services/documenten-api-column.service.d.ts +3 -2
  66. package/lib/modules/documenten-api/services/documenten-api-column.service.d.ts.map +1 -1
  67. package/lib/modules/documenten-api/services/documenten-api-document.service.d.ts +3 -2
  68. package/lib/modules/documenten-api/services/documenten-api-document.service.d.ts.map +1 -1
  69. package/lib/modules/documenten-api/services/documenten-api-link-process.service.d.ts.map +1 -1
  70. package/lib/modules/documenten-api/services/documenten-api-tag.service.d.ts +17 -0
  71. package/lib/modules/documenten-api/services/documenten-api-tag.service.d.ts.map +1 -0
  72. package/lib/modules/documenten-api/services/documenten-api-version.service.d.ts +2 -1
  73. package/lib/modules/documenten-api/services/documenten-api-version.service.d.ts.map +1 -1
  74. package/lib/modules/documenten-api/services/index.d.ts +2 -1
  75. package/lib/modules/documenten-api/services/index.d.ts.map +1 -1
  76. package/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.d.ts.map +1 -1
  77. package/lib/services/dossier-management-zgw.service.d.ts +2 -0
  78. package/lib/services/dossier-management-zgw.service.d.ts.map +1 -1
  79. package/lib/zgw.module.d.ts.map +1 -1
  80. package/package.json +1 -1
@@ -13,29 +13,71 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
17
- import { BehaviorSubject, combineLatest, filter, from, map, of, Subject, switchMap, take, } from 'rxjs';
16
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
17
+ import { BehaviorSubject, combineLatest, filter, from, map, of, startWith, Subject, Subscription, switchMap, take, } from 'rxjs';
18
18
  import { TranslateModule } from '@ngx-translate/core';
19
19
  import { tap } from 'rxjs/operators';
20
20
  import { CommonModule } from '@angular/common';
21
- import { ButtonModule, DatePickerModule, FormModule, InputLabelModule, InputModule, SelectModule, TitleModule, VModalModule, } from '@valtimo/components';
21
+ import { ReactiveFormsModule, Validators, } from '@angular/forms';
22
+ import { InputLabelModule, InputModule, SelectModule, } from '@valtimo/components';
23
+ import { ButtonModule, ComboBoxModule, DatePickerModule, DropdownModule, IconModule, InputModule as CarbonInputModule, ModalModule, RadioModule, TagModule, TooltipModule, } from 'carbon-components-angular';
22
24
  import * as i0 from "@angular/core";
23
- import * as i1 from "@valtimo/components";
24
- import * as i2 from "@ngx-translate/core";
25
- import * as i3 from "@angular/router";
26
- import * as i4 from "@valtimo/document";
27
- import * as i5 from "keycloak-angular";
28
- import * as i6 from "@angular/common";
25
+ import * as i1 from "@angular/router";
26
+ import * as i2 from "@valtimo/document";
27
+ import * as i3 from "../../services";
28
+ import * as i4 from "../../services/documenten-api-tag.service";
29
+ import * as i5 from "@angular/forms";
30
+ import * as i6 from "keycloak-angular";
31
+ import * as i7 from "@valtimo/components";
32
+ import * as i8 from "@ngx-translate/core";
33
+ import * as i9 from "carbon-components-angular";
34
+ import * as i10 from "@angular/common";
29
35
  export class DocumentenApiMetadataModalComponent {
30
- constructor(modalService, translateService, route, documentService, keycloakService, valtimoModalService) {
31
- this.modalService = modalService;
32
- this.translateService = translateService;
36
+ get confidentialityLevelFormControl() {
37
+ return this.documentenApiMetadataForm.get('vertrouwelijkheidaanduiding');
38
+ }
39
+ get informatieobjecttypeFormControl() {
40
+ return this.documentenApiMetadataForm.get('informatieobjecttype');
41
+ }
42
+ get languageFormControl() {
43
+ return this.documentenApiMetadataForm.get('taal');
44
+ }
45
+ get statusFormControl() {
46
+ return this.documentenApiMetadataForm.get('status');
47
+ }
48
+ get tagFormControl() {
49
+ return this.documentenApiMetadataForm.get('trefwoorden');
50
+ }
51
+ constructor(route, documentService, documentenApiDocumentService, documentenApiTagService, fb, keycloakService, modalService, translateService, valtimoModalService) {
33
52
  this.route = route;
34
53
  this.documentService = documentService;
54
+ this.documentenApiDocumentService = documentenApiDocumentService;
55
+ this.documentenApiTagService = documentenApiTagService;
56
+ this.fb = fb;
35
57
  this.keycloakService = keycloakService;
58
+ this.modalService = modalService;
59
+ this.translateService = translateService;
36
60
  this.valtimoModalService = valtimoModalService;
37
61
  this.documentTitle = '';
62
+ this.open = false;
63
+ this.supportsTrefwoorden = false;
38
64
  this.metadata = new EventEmitter();
65
+ this.modalClose = new EventEmitter();
66
+ this.documentenApiMetadataForm = this.fb.group({
67
+ bestandsnaam: this.fb.control('', Validators.required),
68
+ titel: this.fb.control('', Validators.required),
69
+ auteur: this.fb.control('', Validators.required),
70
+ beschrijving: this.fb.control('', Validators.required),
71
+ taal: this.fb.control('', Validators.required),
72
+ informatieobjecttype: this.fb.control('', Validators.required),
73
+ status: this.fb.control('', Validators.required),
74
+ vertrouwelijkheidaanduiding: this.fb.control('', Validators.required),
75
+ creatiedatum: this.fb.control('', Validators.required),
76
+ ontvangstdatum: this.fb.control(''),
77
+ verzenddatum: this.fb.control(''),
78
+ trefwoorden: this.fb.control([]),
79
+ });
80
+ this.isDefinitiveStatus$ = new BehaviorSubject(false);
39
81
  this.CONFIDENTIALITY_LEVELS = [
40
82
  'openbaar',
41
83
  'beperkt_openbaar',
@@ -46,11 +88,13 @@ export class DocumentenApiMetadataModalComponent {
46
88
  'geheim',
47
89
  'zeer_geheim',
48
90
  ];
49
- this.confidentialityLevelItems$ = this.translateService
50
- .stream('key')
51
- .pipe(map(() => this.CONFIDENTIALITY_LEVELS.map(confidentialityLevel => ({
91
+ this.confidentialityLevelItems$ = combineLatest([
92
+ this.confidentialityLevelFormControl.valueChanges.pipe(startWith(this.confidentialityLevelFormControl.value)),
93
+ this.translateService.stream('key'),
94
+ ]).pipe(map(([currentConfidentialityLevel]) => this.CONFIDENTIALITY_LEVELS.map(confidentialityLevel => ({
52
95
  id: confidentialityLevel,
53
- text: this.translateService.instant(`document.${confidentialityLevel}`),
96
+ content: this.translateService.instant(`document.${confidentialityLevel}`),
97
+ selected: currentConfidentialityLevel === confidentialityLevel,
54
98
  }))));
55
99
  this.ADDITONAL_DOCUMENT_DATE_OPTIONS = [
56
100
  {
@@ -78,156 +122,250 @@ export class DocumentenApiMetadataModalComponent {
78
122
  this.formData$ = new BehaviorSubject(null);
79
123
  this.statusItems$ = combineLatest([
80
124
  this.additionalDocumentDate$,
125
+ this.statusFormControl.valueChanges.pipe(startWith(this.statusFormControl.value)),
81
126
  this.translateService.stream('key'),
82
- ]).pipe(tap(([additionalDocumentDate]) => {
127
+ ]).pipe(tap(([additionalDocumentDate, currentStatus]) => {
83
128
  this.formData$.pipe(take(1)).subscribe(formData => {
84
129
  if (additionalDocumentDate === 'received' &&
85
130
  (formData.status === 'in_bewerking' || formData.status === 'ter_vaststelling')) {
86
131
  this.clearStatusSelection$.next(null);
87
132
  }
88
133
  });
89
- }), map(([additionalDocumentDate]) => (additionalDocumentDate === 'received' ? this.RECEIPT_STATUSES : this.STATUSES).map(status => ({
134
+ }), map(([additionalDocumentDate, currentStatus]) => (additionalDocumentDate === 'received' ? this.RECEIPT_STATUSES : this.STATUSES).map(status => ({
90
135
  id: status,
91
- text: this.translateService.instant(`document.${status}`),
136
+ content: this.translateService.instant(`document.${status}`),
137
+ selected: currentStatus === status,
92
138
  }))));
93
- this.LANGUAGES = ['nld', 'eng', 'deu'];
94
- this.languageItems$ = this.translateService.stream('key').pipe(map(() => this.LANGUAGES.map(language => ({
95
- id: language,
96
- text: this.translateService.instant(`document.${language}`),
139
+ this.documentDefinitionName$ = from(this.route.params.pipe(map(params => params?.documentDefinitionName)));
140
+ this.tagItems$ = combineLatest([
141
+ this.documentDefinitionName$,
142
+ this.tagFormControl.valueChanges.pipe(startWith(this.tagFormControl.value)),
143
+ ]).pipe(filter(([documentDefinitionName]) => !!documentDefinitionName), switchMap(([documentDefinitionName, tagFormControlValue]) => combineLatest([
144
+ this.documentenApiTagService.getTags(documentDefinitionName),
145
+ of(tagFormControlValue),
146
+ ])), map(([tags, tagFormControlValue]) => tags.map(tag => ({
147
+ id: tag.value,
148
+ content: tag.value,
149
+ selected: !!tagFormControlValue ? tagFormControlValue.includes(tag.value) : false,
97
150
  }))));
151
+ this.LANGUAGES = ['nld', 'eng', 'deu'];
152
+ this.languageItems$ = combineLatest([
153
+ this.languageFormControl.valueChanges.pipe(startWith(this.languageFormControl.value)),
154
+ this.translateService.stream('key'),
155
+ ]).pipe(map(([currentLanguage]) => {
156
+ return this.LANGUAGES.map((language) => ({
157
+ content: this.translateService.instant(`document.${language}`),
158
+ id: language,
159
+ selected: currentLanguage === language,
160
+ }));
161
+ }));
98
162
  this.documentTypeItems$ = combineLatest([
99
163
  this.route?.params || of(null),
100
164
  this.route?.firstChild?.params || of(null),
101
165
  this.valtimoModalService.documentDefinitionName$,
166
+ this.informatieobjecttypeFormControl.valueChanges.pipe(startWith(this.informatieobjecttypeFormControl.value)),
102
167
  ]).pipe(filter(([params, firstChildParams, documentDefinitionName]) => !!(params?.documentDefinitionName ||
103
168
  firstChildParams?.documentDefinitionName ||
104
- documentDefinitionName)), switchMap(([params, firstChildParams, documentDefinitionName]) => this.documentService.getDocumentTypes(params?.documentDefinitionName ||
105
- firstChildParams?.documentDefinitionName ||
106
- documentDefinitionName)), map(documentTypes => documentTypes.map(type => ({ id: type.url, text: type.name }))));
107
- this.showForm$ = this.modalService.modalVisible$;
108
- this.valid$ = new BehaviorSubject(false);
169
+ documentDefinitionName)), switchMap(([params, firstChildParams, documentDefinitionName, informatieobjecttypeValue]) => combineLatest([
170
+ this.documentService.getDocumentTypes(params?.documentDefinitionName ||
171
+ firstChildParams?.documentDefinitionName ||
172
+ documentDefinitionName),
173
+ of(informatieobjecttypeValue),
174
+ ])), map(([documentTypes, informatieobjecttypeValue]) => documentTypes.map((type) => ({
175
+ id: type.url,
176
+ content: type.name,
177
+ selected: informatieobjecttypeValue === type.url,
178
+ }))));
109
179
  this.userEmail$ = from(this.keycloakService.loadUserProfile()).pipe(map(userProfile => userProfile?.email || ''));
180
+ this.modalSize = 'lg';
181
+ this._subscriptions = new Subscription();
110
182
  }
111
183
  ngOnInit() {
112
- this.openShowSubscription();
113
- this.openHideSubscription();
184
+ this.openFileSubscription();
185
+ }
186
+ ngOnChanges() {
187
+ this.openFileSubscription();
114
188
  }
115
189
  ngOnDestroy() {
116
- this.showSubscription?.unsubscribe();
117
- this.hideSubscription?.unsubscribe();
190
+ this._subscriptions.unsubscribe();
191
+ this.isDefinitiveStatus$.next(false);
118
192
  }
119
- hide() {
120
- this.formData$.next(null);
121
- this.valid$.next(false);
122
- this.additionalDocumentDate$.next('neither');
123
- this.modalService.closeModal();
193
+ languageSelected(event) {
194
+ if (event.item.id) {
195
+ this.documentenApiMetadataForm.patchValue({
196
+ taal: event.item.id,
197
+ });
198
+ }
124
199
  }
125
- cancel() {
126
- this.hide();
200
+ tagsSelected(event) {
201
+ this.tagFormControl.patchValue(event.filter(tag => tag.selected).map(tag => tag.id));
202
+ }
203
+ confidentialityLevelSelected(event) {
204
+ if (event.item.id) {
205
+ this.documentenApiMetadataForm.patchValue({
206
+ vertrouwelijkheidaanduiding: event.item.id,
207
+ });
208
+ }
209
+ }
210
+ statusSelected(event) {
211
+ if (event.item.id) {
212
+ this.documentenApiMetadataForm.patchValue({
213
+ status: event.item.id,
214
+ });
215
+ }
216
+ }
217
+ informatieobjecttypeSelected(event) {
218
+ if (event.item.id) {
219
+ this.documentenApiMetadataForm.patchValue({
220
+ informatieobjecttype: event.item.id,
221
+ });
222
+ }
223
+ }
224
+ prefillForm(file) {
225
+ this.prefillFilenameAndAuthor();
226
+ if (file) {
227
+ const { bestandsnaam, titel, auteur, beschrijving, taal, informatieobjecttype, status, vertrouwelijkheidaanduiding, creatiedatum, ontvangstdatum, verzenddatum, trefwoorden, } = file;
228
+ if (verzenddatum)
229
+ this.additionalDocumentDate$.next('sent');
230
+ else if (ontvangstdatum)
231
+ this.additionalDocumentDate$.next('received');
232
+ else
233
+ this.additionalDocumentDate$.next('neither');
234
+ this.documentenApiMetadataForm.patchValue({
235
+ bestandsnaam,
236
+ titel,
237
+ auteur,
238
+ beschrijving,
239
+ taal,
240
+ informatieobjecttype,
241
+ status,
242
+ vertrouwelijkheidaanduiding,
243
+ creatiedatum,
244
+ ontvangstdatum,
245
+ verzenddatum,
246
+ trefwoorden,
247
+ });
248
+ }
127
249
  }
128
250
  save() {
129
- combineLatest([this.valid$, this.formData$])
130
- .pipe(take(1))
131
- .subscribe(([valid, formData]) => {
132
- if (valid) {
133
- this.metadata.emit(formData);
134
- }
135
- });
251
+ this.formatDate('creatiedatum');
252
+ this.formatDate('verzenddatum');
253
+ this.formatDate('ontvangstdatum');
254
+ if (this.documentenApiMetadataForm.valid)
255
+ this.metadata.emit(this.documentenApiMetadataForm.value);
256
+ this.closeModal();
136
257
  }
137
- formValueChange(data) {
138
- this.formData$.next(data);
139
- this.setValid(data);
258
+ closeModal() {
259
+ this.additionalDocumentDate$.next('neither');
260
+ this.modalClose.emit();
261
+ this.clearForm();
140
262
  }
141
- setAdditionalDate(value) {
142
- this.additionalDocumentDate$.next(value);
263
+ clearForm() {
264
+ this.documentenApiMetadataForm.reset();
143
265
  }
144
- setValid(data) {
145
- this.valid$.next(!!(data.filename &&
146
- data.title &&
147
- data.author &&
148
- data.creationDate &&
149
- data.status &&
150
- data.language &&
151
- data.informatieobjecttype &&
152
- data.description &&
153
- data.confidentialityLevel));
154
- }
155
- openShowSubscription() {
156
- this.showSubscription = this.show$.subscribe(() => {
157
- this.modalService.openModal(this.documentenApiMetadataModal);
158
- });
266
+ prefillFilenameAndAuthor() {
267
+ this._subscriptions.add(combineLatest([this.file$, this.userEmail$])
268
+ .pipe(tap(([file, userEmail]) => {
269
+ this.documentenApiMetadataForm.patchValue({
270
+ bestandsnaam: file?.name || file?.bestandsnaam,
271
+ auteur: userEmail,
272
+ });
273
+ }))
274
+ .subscribe());
159
275
  }
160
- openHideSubscription() {
161
- this.hideSubscription = this.hide$.subscribe(() => {
162
- this.hide();
163
- });
276
+ formatDate(controlName) {
277
+ const control = this.documentenApiMetadataForm.controls[controlName];
278
+ if (control.value) {
279
+ const date = new Date(control.value);
280
+ this.documentenApiMetadataForm.patchValue({
281
+ [controlName]: `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`,
282
+ });
283
+ }
284
+ }
285
+ openFileSubscription() {
286
+ this._fileSubscription?.unsubscribe();
287
+ if (this.file$) {
288
+ this._fileSubscription = this.file$.subscribe(file => {
289
+ if (file) {
290
+ this.prefillForm(file);
291
+ this.isDefinitiveStatus$.next(file.status === 'definitief' && this.isEditMode ? true : false);
292
+ }
293
+ });
294
+ }
164
295
  }
165
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DocumentenApiMetadataModalComponent, deps: [{ token: i1.ModalService }, { token: i2.TranslateService }, { token: i3.ActivatedRoute }, { token: i4.DocumentService }, { token: i5.KeycloakService }, { token: i1.ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component }); }
166
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DocumentenApiMetadataModalComponent, isStandalone: true, selector: "valtimo-documenten-api-metadata-modal", inputs: { show$: "show$", hide$: "hide$", disabled$: "disabled$", file$: "file$", documentTitle: "documentTitle", disableDocumentTitle: "disableDocumentTitle", filename: "filename", disableFilename: "disableFilename", author: "author", disableAuthor: "disableAuthor", status: "status", disableStatus: "disableStatus", language: "language", disableLanguage: "disableLanguage", documentType: "documentType", disableDocumentType: "disableDocumentType", description: "description", disableDescription: "disableDescription", confidentialityLevel: "confidentialityLevel", disableConfidentialityLevel: "disableConfidentialityLevel", trefwoorden: "trefwoorden", disableTrefwoorden: "disableTrefwoorden" }, outputs: { metadata: "metadata" }, viewQueries: [{ propertyName: "documentenApiMetadataModal", first: true, predicate: ["documentenApiMetadataModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #documentenApiMetadataModal\n (closeEvent)=\"hide()\"\n *ngIf=\"{file: file$ | async, disabled: disabled$ | async, valid: valid$ | async} as obs\"\n>\n <div role=\"header\">\n <div class=\"edit-configuration-title\">\n <v-title [center]=\"true\" [fullWidth]=\"true\" [margin]=\"false\" type=\"h2\">{{\n 'document.fillInMetadata' | translate\n }}</v-title>\n </div>\n </div>\n <div role=\"content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </div>\n <div role=\"footer\">\n <div class=\"buttons\">\n <v-button (clickEvent)=\"cancel()\" [disabled]=\"obs.disabled\" type=\"secondary\">{{\n 'document.cancel' | translate\n }}</v-button>\n <v-button\n (clickEvent)=\"save()\"\n [disabled]=\"obs.disabled || !obs.valid\"\n mdiIcon=\"upload\"\n type=\"success\"\n >{{ 'document.upload' | translate }}</v-button\n >\n </div>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container *ngIf=\"showForm$ | async\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"additionalDocumentDate$ | async as additionalDate\"\n >\n <v-input\n [defaultValue]=\"filename || obs.file?.name\"\n [disabled]=\"obs.disabled || disableFilename\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.filename' | translate\"\n [tooltip]=\"'document.filenameTooltip' | translate\"\n name=\"filename\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"documentTitle\"\n [disabled]=\"obs.disabled || disableDocumentTitle\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.inputTitle' | translate\"\n [tooltip]=\"'document.inputTitleTooltip' | translate\"\n [widthPx]=\"400\"\n name=\"title\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"author || (userEmail$ | async)\"\n [disabled]=\"obs.disabled || disableAuthor\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.author' | translate\"\n [tooltip]=\"'document.authorTooltip' | translate\"\n [widthPx]=\"300\"\n name=\"author\"\n >\n </v-input>\n <v-select\n *ngIf=\"languageItems$ | async as languageItems\"\n [defaultSelectionId]=\"language || languageItems[0].id\"\n [disabled]=\"obs.disabled || disableLanguage\"\n [items]=\"languageItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.language' | translate\"\n [tooltip]=\"'document.languageTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"language\"\n ></v-select>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <v-select\n [defaultSelectionId]=\"documentType\"\n [disabled]=\"obs.disabled || disableDocumentType\"\n [items]=\"obs.documentTypeItems\"\n [loading]=\"!obs.documentTypeItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.informatieobjecttype' | translate\"\n [tooltip]=\"'document.informatieobjecttypeTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"informatieobjecttype\"\n ></v-select>\n </ng-container>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.creationDate' | translate\"\n [tooltip]=\"'document.creationDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"creationDate\"\n ></v-date-picker>\n <ng-container\n *ngTemplateOutlet=\"additionalDatePicker; context: {additionalDate: additionalDate}\"\n ></ng-container>\n <v-date-picker\n *ngIf=\"additionalDate === 'received'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.receiptDate' | translate\"\n [tooltip]=\"'document.receiptDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"receiptDate\"\n ></v-date-picker>\n <v-date-picker\n *ngIf=\"additionalDate === 'sent'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.sendDate' | translate\"\n [tooltip]=\"'document.sendDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"sendDate\"\n ></v-date-picker>\n <v-select\n [defaultSelectionId]=\"status\"\n [disabled]=\"obs.disabled || disableStatus\"\n [items]=\"statusItems$ | async\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.status' | translate\"\n [tooltip]=\"'document.statusTooltip' | translate\"\n [widthInPx]=\"200\"\n [clearSelectionSubject$]=\"clearStatusSelection$\"\n name=\"status\"\n ></v-select>\n <v-input\n [defaultValue]=\"description\"\n [disabled]=\"obs.disabled || disableDescription\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [title]=\"'document.inputDescription' | translate\"\n [tooltip]=\"'document.inputDescriptionTooltip' | translate\"\n [required]=\"true\"\n name=\"description\"\n >\n </v-input>\n <v-select\n [defaultSelectionId]=\"confidentialityLevel\"\n [disabled]=\"obs.disabled || disableConfidentialityLevel\"\n [items]=\"confidentialityLevelItems$ | async\"\n [margin]=\"true\"\n [title]=\"'document.confidentialityLevel' | translate\"\n [tooltip]=\"'document.confidentialityLevelTooltip' | translate\"\n [widthInPx]=\"200\"\n [required]=\"true\"\n name=\"confidentialityLevel\"\n ></v-select>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #additionalDatePicker let-additionalDate=\"additionalDate\">\n <v-input-label\n [title]=\"'document.additionalDate' | translate\"\n [name]=\"'additionalDate'\"\n [tooltip]=\"'document.additionalDateTooltip' | translate\"\n [required]=\"true\"\n >\n </v-input-label>\n <div class=\"col-12 col-sm-8 col-lg-6 form-check mt-1 additional-date\">\n <label\n class=\"custom-control custom-radio custom-control-inline\"\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n (click)=\"setAdditionalDate(option.value)\"\n >\n <input\n class=\"custom-control-input\"\n type=\"radio\"\n name=\"radio-inline\"\n [checked]=\"additionalDate === option.value\"\n /><span class=\"custom-control-label\">{{ option.translationKey | translate }}</span>\n </label>\n </div>\n</ng-template>\n", styles: [".buttons{display:flex;flex-direction:row;width:100%;justify-content:space-between}.additional-date{padding:0;width:100%;max-width:100%;margin:0;margin-block-end:var(--v-input-margin)}.additional-date .custom-control{margin-bottom:0}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: VModalModule }, { kind: "component", type: i1.VModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter"], outputs: ["closeEvent"] }, { kind: "ngmodule", type: TitleModule }, { kind: "component", type: i1.TitleComponent, selector: "v-title", inputs: ["type", "margin", "fullWidth", "center"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "v-button", inputs: ["type", "mdiIcon", "disabled", "title", "titleTranslationKey"], outputs: ["clickEvent"] }, { kind: "ngmodule", type: FormModule }, { kind: "component", type: i1.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i1.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder"], outputs: ["valueChange"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i1.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline"], outputs: ["selectedChange"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i1.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime", "carbonTheme"], outputs: ["valueChange"] }, { kind: "ngmodule", type: InputLabelModule }, { kind: "component", type: i1.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }] }); }
296
+ setAdditionalDate(value) {
297
+ this.additionalDocumentDate$.next(value);
298
+ }
299
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DocumentenApiMetadataModalComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.DocumentService }, { token: i3.DocumentenApiDocumentService }, { token: i4.DocumentenApiTagService }, { token: i5.FormBuilder }, { token: i6.KeycloakService }, { token: i7.ModalService }, { token: i8.TranslateService }, { token: i7.ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component }); }
300
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: DocumentenApiMetadataModalComponent, isStandalone: true, selector: "valtimo-documenten-api-metadata-modal", inputs: { disabled$: "disabled$", file$: "file$", author: "author", confidentialityLevel: "confidentialityLevel", description: "description", disableAuthor: "disableAuthor", disableConfidentialityLevel: "disableConfidentialityLevel", disableDescription: "disableDescription", disableDocumentTitle: "disableDocumentTitle", disableDocumentType: "disableDocumentType", disableFilename: "disableFilename", disableLanguage: "disableLanguage", disableStatus: "disableStatus", documentTitle: "documentTitle", documentType: "documentType", disableTrefwoorden: "disableTrefwoorden", filename: "filename", isEditMode: "isEditMode", language: "language", open: "open", status: "status", supportsTrefwoorden: "supportsTrefwoorden" }, outputs: { metadata: "metadata", modalClose: "modalClose" }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n #documentenApiMetadataModal\n [open]=\"open\"\n [size]=\"modalSize\"\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n isDefinitiveStatus: isDefinitiveStatus$ | async,\n languageItems: languageItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async\n } as obs\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n @if (isEditMode) {\n <h3 cdsModalHeaderHeading>\n {{ 'document.editMetadata' | translate }}\n </h3>\n } @else {\n <h3 cdsModalHeaderHeading>\n {{ 'document.fillInMetadata' | translate }}\n </h3>\n }\n </cds-modal-header>\n <section cdsModalContent class=\"cds--modal-content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </section>\n <cds-modal-footer>\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.isDefinitiveStatus\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container>\n <form\n *ngIf=\"additionalDocumentDate$ | async as additionalDate\"\n [formGroup]=\"documentenApiMetadataForm\"\n >\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.filename' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.filenameTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"filename\"\n [disabled]=\"obs.disabled || disableFilename\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.author' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.authorTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"author\"\n [disabled]=\"obs.disabled || disableAuthor\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n <cds-text-label>\n {{ 'document.language' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.languageTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n *ngIf=\"obs.languageItems\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n [disabled]=\"obs.disabled || disableLanguage\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-label>\n {{ 'document.confidentialityLevel' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.confidentialityLevelTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n [disabled]=\"obs.disabled || disableConfidentialityLevel\"\n id=\"vertrouwelijkheidaanduiding\"\n (selected)=\"confidentialityLevelSelected($event)\"\n >\n <cds-dropdown-list [items]=\"confidentialityLevelItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <cds-label>\n {{ 'document.informatieobjecttype' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.informatieobjecttypeTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.informatieobjecttypePlaceholder' | translate\"\n [disabled]=\"obs.disabled || disableDocumentType\"\n id=\"informatieobjecttype\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n </ng-container>\n <cds-text-label name=\"'additionalDate'\">\n {{ 'document.additionalDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.additionalDateTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-radio-group [orientation]=\"'horizontal'\" class=\"documenten-metada-form-input\">\n <cds-radio\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n [value]=\"option.value\"\n [checked]=\"additionalDate === option.value\"\n [required]=\"true\"\n (click)=\"setAdditionalDate(option.value)\"\n name=\"radio-inline\"\n >\n {{ option.translationKey | translate }}\n </cds-radio>\n </cds-radio-group>\n @if (supportsTrefwoorden) {\n <cds-text-label>\n {{ 'document.tags' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.tagsTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [type]=\"'multi'\"\n [placeholder]=\"'document.tagsPlaceholder' | translate\"\n [disabled]=\"obs.disabled || obs.tagItems.length === 0\"\n (selected)=\"tagsSelected($event)\"\n >\n >\n <cds-dropdown-list [items]=\"obs.tagItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n </div>\n\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\n [disabled]=\"obs.disabled || disableDocumentTitle\"\n [placeholder]=\"'document.inputTitlePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n class=\"documenten-metada-form-input\"\n id=\"titel\"\n formControlName=\"titel\"\n />\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputTitleTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [disabled]=\"obs.disabled || disableDescription\"\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"true\"\n [rows]=\"5\"\n cdsTextArea\n class=\"documenten-metada-form-description-input documenten-metada-form-input\"\n id=\"beschrijving\"\n formControlName=\"beschrijving\"\n ></textarea>\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputDescriptionTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-textarea-label>\n <cds-label>\n {{ 'document.creationDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.creationDateTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <div class=\"documenten-metada-form-input\">\n <cds-date-picker\n [disabled]=\"obs.disabled\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"creatiedatum\"\n formControlName=\"creatiedatum\"\n >\n </cds-date-picker>\n </div>\n </cds-label>\n <cds-label>\n {{ 'document.status' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.statusTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || disableStatus\"\n id=\"status\"\n (selected)=\"statusSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-date-picker\n *ngIf=\"additionalDate === 'received'\"\n [disabled]=\"obs.disabled\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"ontvangstdatum\"\n formControlName=\"ontvangstdatum\"\n ></cds-date-picker>\n <cds-date-picker\n *ngIf=\"additionalDate === 'sent'\"\n [disabled]=\"obs.disabled\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"verzenddatum\"\n formControlName=\"verzenddatum\"\n ></cds-date-picker>\n </div>\n </div>\n </form>\n </ng-container>\n</ng-template>\n", styles: [".documenten-metadata-form-columns-container{display:flex;justify-content:space-between}.documenten-metadata-form-column{flex:1;margin-right:1rem}.documenten-metada-form-input{margin-bottom:18px!important;width:100%!important}.documenten-metada-form-description-input{width:100%}::ng-deep .cds--date-picker,::ng-deep .cds--date-picker-container,::ng-deep .cds--date-picker__input,::ng-deep .cds--date-picker-input__wrapper,::ng-deep .cds--date-picker-input__wrapper>span{width:100%}::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:100%}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i9.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonInputModule }, { kind: "component", type: i9.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i9.TextareaLabelComponent, selector: "cds-textarea-label, ibm-textarea-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textAreaTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i9.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i9.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i9.TextArea, selector: "[cdsTextArea], [ibmTextArea]", inputs: ["theme", "invalid", "skeleton"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i9.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "items", "type", "size", "itemValueKey", "label", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i9.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i9.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i9.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: InputLabelModule }, { kind: "ngmodule", type: InputModule }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i9.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i9.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i9.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i9.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i9.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: RadioModule }, { kind: "component", type: i9.Radio, selector: "cds-radio, ibm-radio", inputs: ["checked", "name", "disabled", "labelPlacement", "ariaLabelledby", "ariaLabel", "required", "value", "skeleton", "id"], outputs: ["change"] }, { kind: "component", type: i9.RadioGroup, selector: "cds-radio-group, ibm-radio-group", inputs: ["selected", "value", "name", "disabled", "skeleton", "orientation", "labelPlacement", "legend", "ariaLabel", "ariaLabelledby", "helperText", "invalid", "invalidText", "warn", "warnText"], outputs: ["change"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: SelectModule }, { kind: "ngmodule", type: TagModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "component", type: i9.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
167
301
  }
168
302
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DocumentenApiMetadataModalComponent, decorators: [{
169
303
  type: Component,
170
304
  args: [{ selector: 'valtimo-documenten-api-metadata-modal', standalone: true, imports: [
171
- CommonModule,
172
- TranslateModule,
173
- VModalModule,
174
- TitleModule,
175
305
  ButtonModule,
176
- TranslateModule,
177
- FormModule,
178
- InputModule,
179
- SelectModule,
306
+ CarbonInputModule,
307
+ ComboBoxModule,
308
+ CommonModule,
180
309
  DatePickerModule,
310
+ DropdownModule,
311
+ IconModule,
181
312
  InputLabelModule,
182
- ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #documentenApiMetadataModal\n (closeEvent)=\"hide()\"\n *ngIf=\"{file: file$ | async, disabled: disabled$ | async, valid: valid$ | async} as obs\"\n>\n <div role=\"header\">\n <div class=\"edit-configuration-title\">\n <v-title [center]=\"true\" [fullWidth]=\"true\" [margin]=\"false\" type=\"h2\">{{\n 'document.fillInMetadata' | translate\n }}</v-title>\n </div>\n </div>\n <div role=\"content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </div>\n <div role=\"footer\">\n <div class=\"buttons\">\n <v-button (clickEvent)=\"cancel()\" [disabled]=\"obs.disabled\" type=\"secondary\">{{\n 'document.cancel' | translate\n }}</v-button>\n <v-button\n (clickEvent)=\"save()\"\n [disabled]=\"obs.disabled || !obs.valid\"\n mdiIcon=\"upload\"\n type=\"success\"\n >{{ 'document.upload' | translate }}</v-button\n >\n </div>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container *ngIf=\"showForm$ | async\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"additionalDocumentDate$ | async as additionalDate\"\n >\n <v-input\n [defaultValue]=\"filename || obs.file?.name\"\n [disabled]=\"obs.disabled || disableFilename\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.filename' | translate\"\n [tooltip]=\"'document.filenameTooltip' | translate\"\n name=\"filename\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"documentTitle\"\n [disabled]=\"obs.disabled || disableDocumentTitle\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.inputTitle' | translate\"\n [tooltip]=\"'document.inputTitleTooltip' | translate\"\n [widthPx]=\"400\"\n name=\"title\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"author || (userEmail$ | async)\"\n [disabled]=\"obs.disabled || disableAuthor\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.author' | translate\"\n [tooltip]=\"'document.authorTooltip' | translate\"\n [widthPx]=\"300\"\n name=\"author\"\n >\n </v-input>\n <v-select\n *ngIf=\"languageItems$ | async as languageItems\"\n [defaultSelectionId]=\"language || languageItems[0].id\"\n [disabled]=\"obs.disabled || disableLanguage\"\n [items]=\"languageItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.language' | translate\"\n [tooltip]=\"'document.languageTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"language\"\n ></v-select>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <v-select\n [defaultSelectionId]=\"documentType\"\n [disabled]=\"obs.disabled || disableDocumentType\"\n [items]=\"obs.documentTypeItems\"\n [loading]=\"!obs.documentTypeItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.informatieobjecttype' | translate\"\n [tooltip]=\"'document.informatieobjecttypeTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"informatieobjecttype\"\n ></v-select>\n </ng-container>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.creationDate' | translate\"\n [tooltip]=\"'document.creationDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"creationDate\"\n ></v-date-picker>\n <ng-container\n *ngTemplateOutlet=\"additionalDatePicker; context: {additionalDate: additionalDate}\"\n ></ng-container>\n <v-date-picker\n *ngIf=\"additionalDate === 'received'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.receiptDate' | translate\"\n [tooltip]=\"'document.receiptDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"receiptDate\"\n ></v-date-picker>\n <v-date-picker\n *ngIf=\"additionalDate === 'sent'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.sendDate' | translate\"\n [tooltip]=\"'document.sendDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"sendDate\"\n ></v-date-picker>\n <v-select\n [defaultSelectionId]=\"status\"\n [disabled]=\"obs.disabled || disableStatus\"\n [items]=\"statusItems$ | async\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.status' | translate\"\n [tooltip]=\"'document.statusTooltip' | translate\"\n [widthInPx]=\"200\"\n [clearSelectionSubject$]=\"clearStatusSelection$\"\n name=\"status\"\n ></v-select>\n <v-input\n [defaultValue]=\"description\"\n [disabled]=\"obs.disabled || disableDescription\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [title]=\"'document.inputDescription' | translate\"\n [tooltip]=\"'document.inputDescriptionTooltip' | translate\"\n [required]=\"true\"\n name=\"description\"\n >\n </v-input>\n <v-select\n [defaultSelectionId]=\"confidentialityLevel\"\n [disabled]=\"obs.disabled || disableConfidentialityLevel\"\n [items]=\"confidentialityLevelItems$ | async\"\n [margin]=\"true\"\n [title]=\"'document.confidentialityLevel' | translate\"\n [tooltip]=\"'document.confidentialityLevelTooltip' | translate\"\n [widthInPx]=\"200\"\n [required]=\"true\"\n name=\"confidentialityLevel\"\n ></v-select>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #additionalDatePicker let-additionalDate=\"additionalDate\">\n <v-input-label\n [title]=\"'document.additionalDate' | translate\"\n [name]=\"'additionalDate'\"\n [tooltip]=\"'document.additionalDateTooltip' | translate\"\n [required]=\"true\"\n >\n </v-input-label>\n <div class=\"col-12 col-sm-8 col-lg-6 form-check mt-1 additional-date\">\n <label\n class=\"custom-control custom-radio custom-control-inline\"\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n (click)=\"setAdditionalDate(option.value)\"\n >\n <input\n class=\"custom-control-input\"\n type=\"radio\"\n name=\"radio-inline\"\n [checked]=\"additionalDate === option.value\"\n /><span class=\"custom-control-label\">{{ option.translationKey | translate }}</span>\n </label>\n </div>\n</ng-template>\n", styles: [".buttons{display:flex;flex-direction:row;width:100%;justify-content:space-between}.additional-date{padding:0;width:100%;max-width:100%;margin:0;margin-block-end:var(--v-input-margin)}.additional-date .custom-control{margin-bottom:0}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
183
- }], ctorParameters: () => [{ type: i1.ModalService }, { type: i2.TranslateService }, { type: i3.ActivatedRoute }, { type: i4.DocumentService }, { type: i5.KeycloakService }, { type: i1.ValtimoModalService }], propDecorators: { documentenApiMetadataModal: [{
184
- type: ViewChild,
185
- args: ['documentenApiMetadataModal']
186
- }], show$: [{
187
- type: Input
188
- }], hide$: [{
189
- type: Input
190
- }], disabled$: [{
313
+ InputModule,
314
+ ModalModule,
315
+ RadioModule,
316
+ ReactiveFormsModule,
317
+ SelectModule,
318
+ TagModule,
319
+ TooltipModule,
320
+ TranslateModule,
321
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n #documentenApiMetadataModal\n [open]=\"open\"\n [size]=\"modalSize\"\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n isDefinitiveStatus: isDefinitiveStatus$ | async,\n languageItems: languageItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async\n } as obs\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n @if (isEditMode) {\n <h3 cdsModalHeaderHeading>\n {{ 'document.editMetadata' | translate }}\n </h3>\n } @else {\n <h3 cdsModalHeaderHeading>\n {{ 'document.fillInMetadata' | translate }}\n </h3>\n }\n </cds-modal-header>\n <section cdsModalContent class=\"cds--modal-content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </section>\n <cds-modal-footer>\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.isDefinitiveStatus\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container>\n <form\n *ngIf=\"additionalDocumentDate$ | async as additionalDate\"\n [formGroup]=\"documentenApiMetadataForm\"\n >\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.filename' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.filenameTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"filename\"\n [disabled]=\"obs.disabled || disableFilename\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.author' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.authorTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"author\"\n [disabled]=\"obs.disabled || disableAuthor\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n <cds-text-label>\n {{ 'document.language' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.languageTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n *ngIf=\"obs.languageItems\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n [disabled]=\"obs.disabled || disableLanguage\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-label>\n {{ 'document.confidentialityLevel' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.confidentialityLevelTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n [disabled]=\"obs.disabled || disableConfidentialityLevel\"\n id=\"vertrouwelijkheidaanduiding\"\n (selected)=\"confidentialityLevelSelected($event)\"\n >\n <cds-dropdown-list [items]=\"confidentialityLevelItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <cds-label>\n {{ 'document.informatieobjecttype' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.informatieobjecttypeTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.informatieobjecttypePlaceholder' | translate\"\n [disabled]=\"obs.disabled || disableDocumentType\"\n id=\"informatieobjecttype\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n </ng-container>\n <cds-text-label name=\"'additionalDate'\">\n {{ 'document.additionalDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.additionalDateTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-radio-group [orientation]=\"'horizontal'\" class=\"documenten-metada-form-input\">\n <cds-radio\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n [value]=\"option.value\"\n [checked]=\"additionalDate === option.value\"\n [required]=\"true\"\n (click)=\"setAdditionalDate(option.value)\"\n name=\"radio-inline\"\n >\n {{ option.translationKey | translate }}\n </cds-radio>\n </cds-radio-group>\n @if (supportsTrefwoorden) {\n <cds-text-label>\n {{ 'document.tags' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.tagsTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [type]=\"'multi'\"\n [placeholder]=\"'document.tagsPlaceholder' | translate\"\n [disabled]=\"obs.disabled || obs.tagItems.length === 0\"\n (selected)=\"tagsSelected($event)\"\n >\n >\n <cds-dropdown-list [items]=\"obs.tagItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n </div>\n\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\n [disabled]=\"obs.disabled || disableDocumentTitle\"\n [placeholder]=\"'document.inputTitlePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n class=\"documenten-metada-form-input\"\n id=\"titel\"\n formControlName=\"titel\"\n />\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputTitleTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [disabled]=\"obs.disabled || disableDescription\"\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"true\"\n [rows]=\"5\"\n cdsTextArea\n class=\"documenten-metada-form-description-input documenten-metada-form-input\"\n id=\"beschrijving\"\n formControlName=\"beschrijving\"\n ></textarea>\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputDescriptionTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-textarea-label>\n <cds-label>\n {{ 'document.creationDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.creationDateTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <div class=\"documenten-metada-form-input\">\n <cds-date-picker\n [disabled]=\"obs.disabled\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"creatiedatum\"\n formControlName=\"creatiedatum\"\n >\n </cds-date-picker>\n </div>\n </cds-label>\n <cds-label>\n {{ 'document.status' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.statusTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || disableStatus\"\n id=\"status\"\n (selected)=\"statusSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-date-picker\n *ngIf=\"additionalDate === 'received'\"\n [disabled]=\"obs.disabled\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"ontvangstdatum\"\n formControlName=\"ontvangstdatum\"\n ></cds-date-picker>\n <cds-date-picker\n *ngIf=\"additionalDate === 'sent'\"\n [disabled]=\"obs.disabled\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"verzenddatum\"\n formControlName=\"verzenddatum\"\n ></cds-date-picker>\n </div>\n </div>\n </form>\n </ng-container>\n</ng-template>\n", styles: [".documenten-metadata-form-columns-container{display:flex;justify-content:space-between}.documenten-metadata-form-column{flex:1;margin-right:1rem}.documenten-metada-form-input{margin-bottom:18px!important;width:100%!important}.documenten-metada-form-description-input{width:100%}::ng-deep .cds--date-picker,::ng-deep .cds--date-picker-container,::ng-deep .cds--date-picker__input,::ng-deep .cds--date-picker-input__wrapper,::ng-deep .cds--date-picker-input__wrapper>span{width:100%}::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:100%}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
322
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.DocumentService }, { type: i3.DocumentenApiDocumentService }, { type: i4.DocumentenApiTagService }, { type: i5.FormBuilder }, { type: i6.KeycloakService }, { type: i7.ModalService }, { type: i8.TranslateService }, { type: i7.ValtimoModalService }], propDecorators: { disabled$: [{
191
323
  type: Input
192
324
  }], file$: [{
193
325
  type: Input
194
- }], documentTitle: [{
326
+ }], author: [{
195
327
  type: Input
196
- }], disableDocumentTitle: [{
328
+ }], confidentialityLevel: [{
197
329
  type: Input
198
- }], filename: [{
330
+ }], description: [{
199
331
  type: Input
200
- }], disableFilename: [{
332
+ }], disableAuthor: [{
201
333
  type: Input
202
- }], author: [{
334
+ }], disableConfidentialityLevel: [{
203
335
  type: Input
204
- }], disableAuthor: [{
336
+ }], disableDescription: [{
205
337
  type: Input
206
- }], status: [{
338
+ }], disableDocumentTitle: [{
207
339
  type: Input
208
- }], disableStatus: [{
340
+ }], disableDocumentType: [{
209
341
  type: Input
210
- }], language: [{
342
+ }], disableFilename: [{
211
343
  type: Input
212
344
  }], disableLanguage: [{
213
345
  type: Input
346
+ }], disableStatus: [{
347
+ type: Input
348
+ }], documentTitle: [{
349
+ type: Input
214
350
  }], documentType: [{
215
351
  type: Input
216
- }], disableDocumentType: [{
352
+ }], disableTrefwoorden: [{
217
353
  type: Input
218
- }], description: [{
354
+ }], filename: [{
219
355
  type: Input
220
- }], disableDescription: [{
356
+ }], isEditMode: [{
221
357
  type: Input
222
- }], confidentialityLevel: [{
358
+ }], language: [{
223
359
  type: Input
224
- }], disableConfidentialityLevel: [{
360
+ }], open: [{
225
361
  type: Input
226
- }], trefwoorden: [{
362
+ }], status: [{
227
363
  type: Input
228
- }], disableTrefwoorden: [{
364
+ }], supportsTrefwoorden: [{
229
365
  type: Input
230
366
  }], metadata: [{
231
367
  type: Output
368
+ }], modalClose: [{
369
+ type: Output
232
370
  }] } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFTbkcsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBRUgsRUFBRSxFQUNGLE9BQU8sRUFFUCxTQUFTLEVBQ1QsSUFBSSxHQUNMLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUl0RSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsV0FBVyxFQUdYLFlBQVksRUFDWixXQUFXLEVBR1gsWUFBWSxH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dkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEFkZGl0aW9uYWxEb2N1bWVudERhdGUsXG4gIENvbmZpZGVudGlhbGl0eUxldmVsLFxuICBEb2N1bWVudGVuQXBpTWV0YWRhdGEsXG4gIERvY3VtZW50TGFuZ3VhZ2UsXG4gIERvY3VtZW50U3RhdHVzLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmaWx0ZXIsXG4gIGZyb20sXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0RvY3VtZW50U2VydmljZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtLZXljbG9ha1NlcnZpY2V9IGZyb20gJ2tleWNsb2FrLWFuZ3VsYXInO1xuaW1wb3J0IHt0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQnV0dG9uTW9kdWxlLFxuICBEYXRlUGlja2VyTW9kdWxlLFxuICBGb3JtTW9kdWxlLFxuICBJbnB1dExhYmVsTW9kdWxlLFxuICBJbnB1dE1vZHVsZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBTZWxlY3RJdGVtLFxuICBTZWxlY3RNb2R1bGUsXG4gIFRpdGxlTW9kdWxlLFxuICBWYWx0aW1vTW9kYWxTZXJ2aWNlLFxuICBWTW9kYWxDb21wb25lbnQsXG4gIFZNb2RhbE1vZHVsZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBWTW9kYWxNb2R1bGUsXG4gICAgVGl0bGVNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBGb3JtTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIFNlbGVjdE1vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlLFxuICAgIElucHV0TGFiZWxNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdkb2N1bWVudGVuQXBpTWV0YWRhdGFNb2RhbCcpIGRvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsOiBWTW9kYWxDb21wb25lbnQ7XG5cbiAgQElucHV0KCkgc2hvdyQhOiBPYnNlcnZhYmxlPG51bGw+O1xuICBASW5wdXQoKSBoaWRlJCE6IE9ic2VydmFibGU8bnVsbD47XG4gIEBJbnB1dCgpIGRpc2FibGVkJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIEBJbnB1dCgpIGZpbGUkITogT2JzZXJ2YWJsZTxGaWxlPjtcblxuICBASW5wdXQoKSBkb2N1bWVudFRpdGxlID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVEb2N1bWVudFRpdGxlOiBib29sZWFuO1xuICBASW5wdXQoKSBmaWxlbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlRmlsZW5hbWU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGF1dGhvcjogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlQXV0aG9yOiBib29sZWFuO1xuICBASW5wdXQoKSBzdGF0dXM6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZVN0YXR1czogYm9vbGVhbjtcbiAgQElucHV0KCkgbGFuZ3VhZ2U6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZUxhbmd1YWdlOiBib29sZWFuO1xuICBASW5wdXQoKSBkb2N1bWVudFR5cGU6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZURvY3VtZW50VHlwZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZURlc2NyaXB0aW9uOiBib29sZWFuO1xuICBASW5wdXQoKSBjb25maWRlbnRpYWxpdHlMZXZlbDogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlQ29uZmlkZW50aWFsaXR5TGV2ZWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRyZWZ3b29yZGVuOiBib29sZWFuO1xuICBASW5wdXQoKSBkaXNhYmxlVHJlZndvb3JkZW46IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIG1ldGFkYXRhOiBFdmVudEVtaXR0ZXI8RG9jdW1lbnRlbkFwaU1ldGFkYXRhPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICByZWFkb25seSBDT05GSURFTlRJQUxJVFlfTEVWRUxTOiBBcnJheTxDb25maWRlbnRpYWxpdHlMZXZlbD4gPSBbXG4gICAgJ29wZW5iYWFyJyxcbiAgICAnYmVwZXJrdF9vcGVuYmFhcicsXG4gICAgJ2ludGVybicsXG4gICAgJ3phYWt2ZXJ0cm91d2VsaWprJyxcbiAgICAndmVydHJvdXdlbGlqaycsXG4gICAgJ2NvbmZpZGVudGllZWwnLFxuICAgICdnZWhlaW0nLFxuICAgICd6ZWVyX2dlaGVpbScsXG4gIF07XG4gIHJlYWRvbmx5IGNvbmZpZGVudGlhbGl0eUxldmVsSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEl0ZW0+PiA9IHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgIC5zdHJlYW0oJ2tleScpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKCkgPT5cbiAgICAgICAgdGhpcy5DT05GSURFTlRJQUxJVFlfTEVWRUxTLm1hcChjb25maWRlbnRpYWxpdHlMZXZlbCA9PiAoe1xuICAgICAgICAgIGlkOiBjb25maWRlbnRpYWxpdHlMZXZlbCxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZG9jdW1lbnQuJHtjb25maWRlbnRpYWxpdHlMZXZlbH1gKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcbiAgcmVhZG9ubHkgQURESVRPTkFMX0RPQ1VNRU5UX0RBVEVfT1BUSU9OUzogQXJyYXk8e1xuICAgIHZhbHVlOiBBZGRpdGlvbmFsRG9jdW1lbnREYXRlO1xuICAgIHRyYW5zbGF0aW9uS2V5OiBzdHJpbmc7XG4gIH0+ID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiAnbmVpdGhlcicsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2RvY3VtZW50Lm5vQWRkaXRpb25hbERhdGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdzZW50JyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZG9jdW1lbnQuc2VuZERhdGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdyZWNlaXZlZCcsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2RvY3VtZW50LnJlY2VpcHREYXRlJyxcbiAgICB9LFxuICBdO1xuICByZWFkb25seSBjbGVhclN0YXR1c1NlbGVjdGlvbiQgPSBuZXcgU3ViamVjdDxudWxsPigpO1xuICByZWFkb25seSBhZGRpdGlvbmFsRG9jdW1lbnREYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWRkaXRpb25hbERvY3VtZW50RGF0ZT4oJ25laXRoZXInKTtcbiAgcmVhZG9ubHkgU1RBVFVTRVM6IEFycmF5PERvY3VtZW50U3RhdHVzPiA9IFtcbiAgICAnaW5fYmV3ZXJraW5nJyxcbiAgICAndGVyX3Zhc3RzdGVsbGluZycsXG4gICAgJ2RlZmluaXRpZWYnLFxuICAgICdnZWFyY2hpdmVlcmQnLFxuICBdO1xuICByZWFkb25seSBSRUNFSVBUX1NUQVRVU0VTOiBBcnJheTxEb2N1bWVudFN0YXR1cz4gPSBbJ2RlZmluaXRpZWYnLCAnZ2VhcmNoaXZlZXJkJ107XG4gIHJlYWRvbmx5IGZvcm1EYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9jdW1lbnRlbkFwaU1ldGFkYXRhPihudWxsKTtcbiAgcmVhZG9ubHkgc3RhdHVzSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgdGFwKChbYWRkaXRpb25hbERvY3VtZW50RGF0ZV0pID0+IHtcbiAgICAgIHRoaXMuZm9ybURhdGEkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZvcm1EYXRhID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFkZGl0aW9uYWxEb2N1bWVudERhdGUgPT09ICdyZWNlaXZlZCcgJiZcbiAgICAgICAgICAoZm9ybURhdGEuc3RhdHVzID09PSAnaW5fYmV3ZXJraW5nJyB8fCBmb3JtRGF0YS5zdGF0dXMgPT09ICd0ZXJfdmFzdHN0ZWxsaW5nJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jbGVhclN0YXR1c1NlbGVjdGlvbiQubmV4dChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSksXG4gICAgbWFwKChbYWRkaXRpb25hbERvY3VtZW50RGF0ZV0pID0+XG4gICAgICAoYWRkaXRpb25hbERvY3VtZW50RGF0ZSA9PT0gJ3JlY2VpdmVkJyA/IHRoaXMuUkVDRUlQVF9TVEFUVVNFUyA6IHRoaXMuU1RBVFVTRVMpLm1hcChcbiAgICAgICAgc3RhdHVzID0+ICh7XG4gICAgICAgICAgaWQ6IHN0YXR1cyxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZG9jdW1lbnQuJHtzdGF0dXN9YCksXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKVxuICApO1xuICByZWFkb25seSBMQU5HVUFHRVM6IEFycmF5PERvY3VtZW50TGFuZ3VhZ2U+ID0gWydubGQnLCAnZW5nJywgJ2RldSddO1xuICByZWFkb25seSBsYW5ndWFnZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PlxuICAgICAgdGhpcy5MQU5HVUFHRVMubWFwKGxhbmd1YWdlID0+ICh7XG4gICAgICAgIGlkOiBsYW5ndWFnZSxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGRvY3VtZW50LiR7bGFuZ3VhZ2V9YCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG4gIHJlYWRvbmx5IGRvY3VtZW50VHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnJvdXRlPy5wYXJhbXMgfHwgb2YobnVsbCksXG4gICAgdGhpcy5yb3V0ZT8uZmlyc3RDaGlsZD8ucGFyYW1zIHx8IG9mKG51bGwpLFxuICAgIHRoaXMudmFsdGltb01vZGFsU2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgXSkucGlwZShcbiAgICBmaWx0ZXIoXG4gICAgICAoW3BhcmFtcywgZmlyc3RDaGlsZFBhcmFtcywgZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+XG4gICAgICAgICEhKFxuICAgICAgICAgIHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fFxuICAgICAgICAgIGZpcnN0Q2hpbGRQYXJhbXM/LmRvY3VtZW50RGVmaW5pdGlvbk5hbWUgfHxcbiAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lXG4gICAgICAgIClcbiAgICApLFxuICAgIHN3aXRjaE1hcCgoW3BhcmFtcywgZmlyc3RDaGlsZFBhcmFtcywgZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudFR5cGVzKFxuICAgICAgICBwYXJhbXM/LmRvY3VtZW50RGVmaW5pdGlvbk5hbWUgfHxcbiAgICAgICAgICBmaXJzdENoaWxkUGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lIHx8XG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZVxuICAgICAgKVxuICAgICksXG4gICAgbWFwKGRvY3VtZW50VHlwZXMgPT4gZG9jdW1lbnRUeXBlcy5tYXAodHlwZSA9PiAoe2lkOiB0eXBlLnVybCwgdGV4dDogdHlwZS5uYW1lfSkpKVxuICApO1xuICByZWFkb25seSBzaG93Rm9ybSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLm1vZGFsU2VydmljZS5tb2RhbFZpc2libGUkO1xuICByZWFkb25seSB2YWxpZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdXNlckVtYWlsJCA9IGZyb20odGhpcy5rZXljbG9ha1NlcnZpY2UubG9hZFVzZXJQcm9maWxlKCkpLnBpcGUoXG4gICAgbWFwKHVzZXJQcm9maWxlID0+IHVzZXJQcm9maWxlPy5lbWFpbCB8fCAnJylcbiAgKTtcblxuICBwcml2YXRlIHNob3dTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaGlkZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5Y2xvYWtTZXJ2aWNlOiBLZXljbG9ha1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWx0aW1vTW9kYWxTZXJ2aWNlOiBWYWx0aW1vTW9kYWxTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5TaG93U3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5vcGVuSGlkZVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zaG93U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaGlkZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGhpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtRGF0YSQubmV4dChudWxsKTtcbiAgICB0aGlzLnZhbGlkJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLm5leHQoJ25laXRoZXInKTtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5jbG9zZU1vZGFsKCk7XG4gIH1cblxuICBjYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5oaWRlKCk7XG4gIH1cblxuICBzYXZlKCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudmFsaWQkLCB0aGlzLmZvcm1EYXRhJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoW3ZhbGlkLCBmb3JtRGF0YV0pID0+IHtcbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5tZXRhZGF0YS5lbWl0KGZvcm1EYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBmb3JtVmFsdWVDaGFuZ2UoZGF0YTogRG9jdW1lbnRlbkFwaU1ldGFkYXRhKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtRGF0YSQubmV4dChkYXRhKTtcbiAgICB0aGlzLnNldFZhbGlkKGRhdGEpO1xuICB9XG5cbiAgc2V0QWRkaXRpb25hbERhdGUodmFsdWU6IEFkZGl0aW9uYWxEb2N1bWVudERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRWYWxpZChkYXRhOiBEb2N1bWVudGVuQXBpTWV0YWRhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkJC5uZXh0KFxuICAgICAgISEoXG4gICAgICAgIGRhdGEuZmlsZW5hbWUgJiZcbiAgICAgICAgZGF0YS50aXRsZSAmJlxuICAgICAgICBkYXRhLmF1dGhvciAmJlxuICAgICAgICBkYXRhLmNyZWF0aW9uRGF0ZSAmJlxuICAgICAgICBkYXRhLnN0YXR1cyAmJlxuICAgICAgICBkYXRhLmxhbmd1YWdlICYmXG4gICAgICAgIGRhdGEuaW5mb3JtYXRpZW9iamVjdHR5cGUgJiZcbiAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiAmJlxuICAgICAgICBkYXRhLmNvbmZpZGVudGlhbGl0eUxldmVsXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNob3dTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zaG93U3Vic2NyaXB0aW9uID0gdGhpcy5zaG93JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbk1vZGFsKHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhTW9kYWwpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuSGlkZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmhpZGVTdWJzY3JpcHRpb24gPSB0aGlzLmhpZGUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48di1tb2RhbFxuICAjZG9jdW1lbnRlbkFwaU1ldGFkYXRhTW9kYWxcbiAgKGNsb3NlRXZlbnQpPVwiaGlkZSgpXCJcbiAgKm5nSWY9XCJ7ZmlsZTogZmlsZSQgfCBhc3luYywgZGlzYWJsZWQ6IGRpc2FibGVkJCB8IGFzeW5jLCB2YWxpZDogdmFsaWQkIHwgYXN5bmN9IGFzIG9ic1wiXG4+XG4gIDxkaXYgcm9sZT1cImhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LWNvbmZpZ3VyYXRpb24tdGl0bGVcIj5cbiAgICAgIDx2LXRpdGxlIFtjZW50ZXJdPVwidHJ1ZVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIFttYXJnaW5dPVwiZmFsc2VcIiB0eXBlPVwiaDJcIj57e1xuICAgICAgICAnZG9jdW1lbnQuZmlsbEluTWV0YWRhdGEnIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvdi10aXRsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgcm9sZT1cImNvbnRlbnRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWV0YWRhdGFGb3JtOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2IHJvbGU9XCJmb290ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgPHYtYnV0dG9uIChjbGlja0V2ZW50KT1cImNhbmNlbCgpXCIgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiIHR5cGU9XCJzZWNvbmRhcnlcIj57e1xuICAgICAgICAnZG9jdW1lbnQuY2FuY2VsJyB8IHRyYW5zbGF0ZVxuICAgICAgfX08L3YtYnV0dG9uPlxuICAgICAgPHYtYnV0dG9uXG4gICAgICAgIChjbGlja0V2ZW50KT1cInNhdmUoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgIW9icy52YWxpZFwiXG4gICAgICAgIG1kaUljb249XCJ1cGxvYWRcIlxuICAgICAgICB0eXBlPVwic3VjY2Vzc1wiXG4gICAgICAgID57eyAnZG9jdW1lbnQudXBsb2FkJyB8IHRyYW5zbGF0ZSB9fTwvdi1idXR0b25cbiAgICAgID5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3YtbW9kYWw+XG5cbjxuZy10ZW1wbGF0ZSAjbWV0YWRhdGFGb3JtIGxldC1vYnM9XCJvYnNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dGb3JtJCB8IGFzeW5jXCI+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cImZvcm1WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwiYWRkaXRpb25hbERvY3VtZW50RGF0ZSQgfCBhc3luYyBhcyBhZGRpdGlvbmFsRGF0ZVwiXG4gICAgPlxuICAgICAgPHYtaW5wdXRcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJmaWxlbmFtZSB8fCBvYnMuZmlsZT8ubmFtZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgZGlzYWJsZUZpbGVuYW1lXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVdPVwiJ2RvY3VtZW50LmZpbGVuYW1lJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cIidkb2N1bWVudC5maWxlbmFtZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgbmFtZT1cImZpbGVuYW1lXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwiZG9jdW1lbnRUaXRsZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgZGlzYWJsZURvY3VtZW50VGl0bGVcIlxuICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFt0aXRsZV09XCInZG9jdW1lbnQuaW5wdXRUaXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCInZG9jdW1lbnQuaW5wdXRUaXRsZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3dpZHRoUHhdPVwiNDAwXCJcbiAgICAgICAgbmFtZT1cInRpdGxlXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwiYXV0aG9yIHx8ICh1c2VyRW1haWwkIHwgYXN5bmMpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCBkaXNhYmxlQXV0aG9yXCJcbiAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVdPVwiJ2RvY3VtZW50LmF1dGhvcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCInZG9jdW1lbnQuYXV0aG9yVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbd2lkdGhQeF09XCIzMDBcIlxuICAgICAgICBuYW1lPVwiYXV0aG9yXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDx2LXNlbGVjdFxuICAgICAgICAqbmdJZj1cImxhbmd1YWdlSXRlbXMkIHwgYXN5bmMgYXMgbGFuZ3VhZ2VJdGVtc1wiXG4gICAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRdPVwibGFuZ3VhZ2UgfHwgbGFuZ3VhZ2VJdGVtc1swXS5pZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgZGlzYWJsZUxhbmd1YWdlXCJcbiAgICAgICAgW2l0ZW1zXT1cImxhbmd1YWdlSXRlbXNcIlxuICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFt0aXRsZV09XCInZG9jdW1lbnQubGFuZ3VhZ2UnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3Rvb2x0aXBdPVwiJ2RvY3VtZW50Lmxhbmd1YWdlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICAgIG5hbWU9XCJsYW5ndWFnZVwiXG4gICAgICA+PC92LXNlbGVjdD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ7ZG9jdW1lbnRUeXBlSXRlbXM6IGRvY3VtZW50VHlwZUl0ZW1zJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgICAgICAgPHYtc2VsZWN0XG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJkb2N1bWVudFR5cGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgZGlzYWJsZURvY3VtZW50VHlwZVwiXG4gICAgICAgICAgW2l0ZW1zXT1cIm9icy5kb2N1bWVudFR5cGVJdGVtc1wiXG4gICAgICAgICAgW2xvYWRpbmddPVwiIW9icy5kb2N1bWVudFR5cGVJdGVtc1wiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidkb2N1bWVudC5pbmZvcm1hdGllb2JqZWN0dHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidkb2N1bWVudC5pbmZvcm1hdGllb2JqZWN0dHlwZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICAgICAgbmFtZT1cImluZm9ybWF0aWVvYmplY3R0eXBlXCJcbiAgICAgICAgPjwvdi1zZWxlY3Q+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWRhdGUtcGlja2VyXG4gICAgICAgIFtkZWZhdWx0RGF0ZUlzVG9kYXldPVwidHJ1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIlxuICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFt0aXRsZV09XCInZG9jdW1lbnQuY3JlYXRpb25EYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cIidkb2N1bWVudC5jcmVhdGlvbkRhdGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt3aWR0aFB4XT1cIjEwMFwiXG4gICAgICAgIG5hbWU9XCJjcmVhdGlvbkRhdGVcIlxuICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRpdGlvbmFsRGF0ZVBpY2tlcjsgY29udGV4dDoge2FkZGl0aW9uYWxEYXRlOiBhZGRpdGlvbmFsRGF0ZX1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgKm5nSWY9XCJhZGRpdGlvbmFsRGF0ZSA9PT0gJ3JlY2VpdmVkJ1wiXG4gICAgICAgIFtkZWZhdWx0RGF0ZUlzVG9kYXldPVwidHJ1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIlxuICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVdPVwiJ2RvY3VtZW50LnJlY2VpcHREYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cIidkb2N1bWVudC5yZWNlaXB0RGF0ZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3dpZHRoUHhdPVwiMTAwXCJcbiAgICAgICAgbmFtZT1cInJlY2VpcHREYXRlXCJcbiAgICAgID48L3YtZGF0ZS1waWNrZXI+XG4gICAgICA8di1kYXRlLXBpY2tlclxuICAgICAgICAqbmdJZj1cImFkZGl0aW9uYWxEYXRlID09PSAnc2VudCdcIlxuICAgICAgICBbZGVmYXVsdERhdGVJc1RvZGF5XT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkXCJcbiAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgW3RpdGxlXT1cIidkb2N1bWVudC5zZW5kRGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCInZG9jdW1lbnQuc2VuZERhdGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt3aWR0aFB4XT1cIjEwMFwiXG4gICAgICAgIG5hbWU9XCJzZW5kRGF0ZVwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgICAgPHYtc2VsZWN0XG4gICAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRdPVwic3RhdHVzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCBkaXNhYmxlU3RhdHVzXCJcbiAgICAgICAgW2l0ZW1zXT1cInN0YXR1c0l0ZW1zJCB8IGFzeW5jXCJcbiAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVdPVwiJ2RvY3VtZW50LnN0YXR1cycgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCInZG9jdW1lbnQuc3RhdHVzVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICAgIFtjbGVhclNlbGVjdGlvblN1YmplY3QkXT1cImNsZWFyU3RhdHVzU2VsZWN0aW9uJFwiXG4gICAgICAgIG5hbWU9XCJzdGF0dXNcIlxuICAgICAgPjwvdi1zZWxlY3Q+XG4gICAgICA8di1pbnB1dFxuICAgICAgICBbZGVmYXVsdFZhbHVlXT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCBkaXNhYmxlRGVzY3JpcHRpb25cIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVdPVwiJ2RvY3VtZW50LmlucHV0RGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3Rvb2x0aXBdPVwiJ2RvY3VtZW50LmlucHV0RGVzY3JpcHRpb25Ub29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDx2LXNlbGVjdFxuICAgICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cImNvbmZpZGVudGlhbGl0eUxldmVsXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCBkaXNhYmxlQ29uZmlkZW50aWFsaXR5TGV2ZWxcIlxuICAgICAgICBbaXRlbXNdPVwiY29uZmlkZW50aWFsaXR5TGV2ZWxJdGVtcyQgfCBhc3luY1wiXG4gICAgICAgIFttYXJnaW5dPVwidHJ1ZVwiXG4gICAgICAgIFt0aXRsZV09XCInZG9jdW1lbnQuY29uZmlkZW50aWFsaXR5TGV2ZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3Rvb2x0aXBdPVwiJ2RvY3VtZW50LmNvbmZpZGVudGlhbGl0eUxldmVsVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgbmFtZT1cImNvbmZpZGVudGlhbGl0eUxldmVsXCJcbiAgICAgID48L3Ytc2VsZWN0PlxuICAgIDwvdi1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWRkaXRpb25hbERhdGVQaWNrZXIgbGV0LWFkZGl0aW9uYWxEYXRlPVwiYWRkaXRpb25hbERhdGVcIj5cbiAgPHYtaW5wdXQtbGFiZWxcbiAgICBbdGl0bGVdPVwiJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgW25hbWVdPVwiJ2FkZGl0aW9uYWxEYXRlJ1wiXG4gICAgW3Rvb2x0aXBdPVwiJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgPlxuICA8L3YtaW5wdXQtbGFiZWw+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTggY29sLWxnLTYgZm9ybS1jaGVjayBtdC0xIGFkZGl0aW9uYWwtZGF0ZVwiPlxuICAgIDxsYWJlbFxuICAgICAgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tcmFkaW8gY3VzdG9tLWNvbnRyb2wtaW5saW5lXCJcbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgQURESVRPTkFMX0RPQ1VNRU5UX0RBVEVfT1BUSU9OU1wiXG4gICAgICAoY2xpY2spPVwic2V0QWRkaXRpb25hbERhdGUob3B0aW9uLnZhbHVlKVwiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBuYW1lPVwicmFkaW8taW5saW5lXCJcbiAgICAgICAgW2NoZWNrZWRdPVwiYWRkaXRpb25hbERhdGUgPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICAvPjxzcGFuIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIj57eyBvcHRpb24udHJhbnNsYXRpb25LZXkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
371
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVNuRyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sSUFBSSxFQUNKLEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULE9BQU8sRUFDUCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFJdEUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBSUwsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsV0FB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QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgQWRkaXRpb25hbERvY3VtZW50RGF0ZSxcbiAgQ29uZmlkZW50aWFsaXR5TGV2ZWwsXG4gIERvY3VtZW50ZW5BcGlNZXRhZGF0YSxcbiAgRG9jdW1lbnRMYW5ndWFnZSxcbiAgRG9jdW1lbnRTdGF0dXMsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3RhcnRXaXRoLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtEb2N1bWVudFNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7S2V5Y2xvYWtTZXJ2aWNlfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcbmltcG9ydCB7dGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Hcm91cCxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgSW5wdXRMYWJlbE1vZHVsZSxcbiAgSW5wdXRNb2R1bGUsXG4gIE1vZGFsU2VydmljZSxcbiAgU2VsZWN0TW9kdWxlLFxuICBWYWx0aW1vTW9kYWxTZXJ2aWNlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcblxuaW1wb3J0IHtcbiAgQnV0dG9uTW9kdWxlLFxuICBDb21ib0JveE1vZHVsZSxcbiAgRGF0ZVBpY2tlck1vZHVsZSxcbiAgRHJvcGRvd25Nb2R1bGUsXG4gIEljb25Nb2R1bGUsXG4gIElucHV0TW9kdWxlIGFzIENhcmJvbklucHV0TW9kdWxlLFxuICBMaXN0SXRlbSxcbiAgTW9kYWxNb2R1bGUsXG4gIFJhZGlvTW9kdWxlLFxuICBUYWdNb2R1bGUsXG4gIFRvb2x0aXBNb2R1bGUsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlUYWdTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb2N1bWVudGVuLWFwaS10YWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhcmJvbklucHV0TW9kdWxlLFxuICAgIENvbWJvQm94TW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgSW5wdXRMYWJlbE1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBNb2RhbE1vZHVsZSxcbiAgICBSYWRpb01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNlbGVjdE1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGRpc2FibGVkJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIEBJbnB1dCgpIGZpbGUkITogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIEBJbnB1dCgpIGF1dGhvcjogc3RyaW5nO1xuICBASW5wdXQoKSBjb25maWRlbnRpYWxpdHlMZXZlbDogc3RyaW5nO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlQXV0aG9yOiBib29sZWFuO1xuICBASW5wdXQoKSBkaXNhYmxlQ29uZmlkZW50aWFsaXR5TGV2ZWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpc2FibGVEZXNjcmlwdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgZGlzYWJsZURvY3VtZW50VGl0bGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpc2FibGVEb2N1bWVudFR5cGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpc2FibGVGaWxlbmFtZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZGlzYWJsZUxhbmd1YWdlOiBib29sZWFuO1xuICBASW5wdXQoKSBkaXNhYmxlU3RhdHVzOiBib29sZWFuO1xuICBASW5wdXQoKSBkb2N1bWVudFRpdGxlID0gJyc7XG4gIEBJbnB1dCgpIGRvY3VtZW50VHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlVHJlZndvb3JkZW46IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZpbGVuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRWRpdE1vZGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGxhbmd1YWdlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wZW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3RhdHVzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN1cHBvcnRzVHJlZndvb3JkZW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgbWV0YWRhdGE6IEV2ZW50RW1pdHRlcjxEb2N1bWVudGVuQXBpTWV0YWRhdGE+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbW9kYWxDbG9zZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyBkb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICBiZXN0YW5kc25hYW06IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgdGl0ZWw6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgYXV0ZXVyOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGJlc2NocmlqdmluZzogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICB0YWFsOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGluZm9ybWF0aWVvYmplY3R0eXBlOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIHN0YXR1czogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICB2ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmc6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgY3JlYXRpZWRhdHVtOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIG9udHZhbmdzdGRhdHVtOiB0aGlzLmZiLmNvbnRyb2woJycpLFxuICAgIHZlcnplbmRkYXR1bTogdGhpcy5mYi5jb250cm9sKCcnKSxcbiAgICB0cmVmd29vcmRlbjogdGhpcy5mYi5jb250cm9sKFtdKSxcbiAgfSk7XG5cbiAgcHVibGljIGdldCBjb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgndmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluZm9ybWF0aWVvYmplY3R0eXBlRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCdpbmZvcm1hdGllb2JqZWN0dHlwZScpO1xuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgndGFhbCcpO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGF0dXNGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3N0YXR1cycpO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWdGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgndHJlZndvb3JkZW4nKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBpc0RlZmluaXRpdmVTdGF0dXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IENPTkZJREVOVElBTElUWV9MRVZFTFM6IEFycmF5PENvbmZpZGVudGlhbGl0eUxldmVsPiA9IFtcbiAgICAnb3BlbmJhYXInLFxuICAgICdiZXBlcmt0X29wZW5iYWFyJyxcbiAgICAnaW50ZXJuJyxcbiAgICAnemFha3ZlcnRyb3V3ZWxpamsnLFxuICAgICd2ZXJ0cm91d2VsaWprJyxcbiAgICAnY29uZmlkZW50aWVlbCcsXG4gICAgJ2dlaGVpbScsXG4gICAgJ3plZXJfZ2VoZWltJyxcbiAgXTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZGVudGlhbGl0eUxldmVsSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgodGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLnZhbHVlKVxuICAgICksXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbY3VycmVudENvbmZpZGVudGlhbGl0eUxldmVsXSkgPT5cbiAgICAgIHRoaXMuQ09ORklERU5USUFMSVRZX0xFVkVMUy5tYXAoY29uZmlkZW50aWFsaXR5TGV2ZWwgPT4gKHtcbiAgICAgICAgaWQ6IGNvbmZpZGVudGlhbGl0eUxldmVsLFxuICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZG9jdW1lbnQuJHtjb25maWRlbnRpYWxpdHlMZXZlbH1gKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGN1cnJlbnRDb25maWRlbnRpYWxpdHlMZXZlbCA9PT0gY29uZmlkZW50aWFsaXR5TGV2ZWwsXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IEFERElUT05BTF9ET0NVTUVOVF9EQVRFX09QVElPTlM6IEFycmF5PHtcbiAgICB2YWx1ZTogQWRkaXRpb25hbERvY3VtZW50RGF0ZTtcbiAgICB0cmFuc2xhdGlvbktleTogc3RyaW5nO1xuICB9PiA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogJ25laXRoZXInLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdkb2N1bWVudC5ub0FkZGl0aW9uYWxEYXRlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnc2VudCcsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2RvY3VtZW50LnNlbmREYXRlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAncmVjZWl2ZWQnLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdkb2N1bWVudC5yZWNlaXB0RGF0ZScsXG4gICAgfSxcbiAgXTtcbiAgcHVibGljIHJlYWRvbmx5IGNsZWFyU3RhdHVzU2VsZWN0aW9uJCA9IG5ldyBTdWJqZWN0PG51bGw+KCk7XG4gIHB1YmxpYyByZWFkb25seSBhZGRpdGlvbmFsRG9jdW1lbnREYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWRkaXRpb25hbERvY3VtZW50RGF0ZT4oJ25laXRoZXInKTtcbiAgcHVibGljIHJlYWRvbmx5IFNUQVRVU0VTOiBBcnJheTxEb2N1bWVudFN0YXR1cz4gPSBbXG4gICAgJ2luX2Jld2Vya2luZycsXG4gICAgJ3Rlcl92YXN0c3RlbGxpbmcnLFxuICAgICdkZWZpbml0aWVmJyxcbiAgICAnZ2VhcmNoaXZlZXJkJyxcbiAgXTtcbiAgcHVibGljIHJlYWRvbmx5IFJFQ0VJUFRfU1RBVFVTRVM6IEFycmF5PERvY3VtZW50U3RhdHVzPiA9IFsnZGVmaW5pdGllZicsICdnZWFyY2hpdmVlcmQnXTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1EYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9jdW1lbnRlbkFwaU1ldGFkYXRhPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0l0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJCxcbiAgICB0aGlzLnN0YXR1c0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnN0YXR1c0Zvcm1Db250cm9sLnZhbHVlKSksXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgdGFwKChbYWRkaXRpb25hbERvY3VtZW50RGF0ZSwgY3VycmVudFN0YXR1c10pID0+IHtcbiAgICAgIHRoaXMuZm9ybURhdGEkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZvcm1EYXRhID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFkZGl0aW9uYWxEb2N1bWVudERhdGUgPT09ICdyZWNlaXZlZCcgJiZcbiAgICAgICAgICAoZm9ybURhdGEuc3RhdHVzID09PSAnaW5fYmV3ZXJraW5nJyB8fCBmb3JtRGF0YS5zdGF0dXMgPT09ICd0ZXJfdmFzdHN0ZWxsaW5nJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jbGVhclN0YXR1c1NlbGVjdGlvbiQubmV4dChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSksXG4gICAgbWFwKChbYWRkaXRpb25hbERvY3VtZW50RGF0ZSwgY3VycmVudFN0YXR1c10pID0+XG4gICAgICAoYWRkaXRpb25hbERvY3VtZW50RGF0ZSA9PT0gJ3JlY2VpdmVkJyA/IHRoaXMuUkVDRUlQVF9TVEFUVVNFUyA6IHRoaXMuU1RBVFVTRVMpLm1hcChcbiAgICAgICAgc3RhdHVzID0+ICh7XG4gICAgICAgICAgaWQ6IHN0YXR1cyxcbiAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZG9jdW1lbnQuJHtzdGF0dXN9YCksXG4gICAgICAgICAgc2VsZWN0ZWQ6IGN1cnJlbnRTdGF0dXMgPT09IHN0YXR1cyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSBmcm9tKFxuICAgIHRoaXMucm91dGUucGFyYW1zLnBpcGUobWFwKHBhcmFtcyA9PiBwYXJhbXM/LmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSB0YWdJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy50YWdGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy50YWdGb3JtQ29udHJvbC52YWx1ZSkpLFxuICBdKS5waXBlKFxuICAgIGZpbHRlcigoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdKSA9PiAhIWRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgIHN3aXRjaE1hcCgoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHRhZ0Zvcm1Db250cm9sVmFsdWVdKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaVRhZ1NlcnZpY2UuZ2V0VGFncyhkb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICAgICAgb2YodGFnRm9ybUNvbnRyb2xWYWx1ZSksXG4gICAgICBdKVxuICAgICksXG4gICAgbWFwKChbdGFncywgdGFnRm9ybUNvbnRyb2xWYWx1ZV0pID0+XG4gICAgICB0YWdzLm1hcCh0YWcgPT4gKHtcbiAgICAgICAgaWQ6IHRhZy52YWx1ZSxcbiAgICAgICAgY29udGVudDogdGFnLnZhbHVlLFxuICAgICAgICBzZWxlY3RlZDogISF0YWdGb3JtQ29udHJvbFZhbHVlID8gdGFnRm9ybUNvbnRyb2xWYWx1ZS5pbmNsdWRlcyh0YWcudmFsdWUpIDogZmFsc2UsXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IExBTkdVQUdFUzogQXJyYXk8RG9jdW1lbnRMYW5ndWFnZT4gPSBbJ25sZCcsICdlbmcnLCAnZGV1J107XG4gIHB1YmxpYyBsYW5ndWFnZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5sYW5ndWFnZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wudmFsdWUpKSxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtjdXJyZW50TGFuZ3VhZ2VdKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5MQU5HVUFHRVMubWFwKFxuICAgICAgICAobGFuZ3VhZ2U6IGFueSkgPT5cbiAgICAgICAgICAoe1xuICAgICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGRvY3VtZW50LiR7bGFuZ3VhZ2V9YCksXG4gICAgICAgICAgICBpZDogbGFuZ3VhZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogY3VycmVudExhbmd1YWdlID09PSBsYW5ndWFnZSxcbiAgICAgICAgICB9KSBhcyBMaXN0SXRlbVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudFR5cGVJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMucm91dGU/LnBhcmFtcyB8fCBvZihudWxsKSxcbiAgICB0aGlzLnJvdXRlPy5maXJzdENoaWxkPy5wYXJhbXMgfHwgb2YobnVsbCksXG4gICAgdGhpcy52YWx0aW1vTW9kYWxTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgIHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLmluZm9ybWF0aWVvYmplY3R0eXBlRm9ybUNvbnRyb2wudmFsdWUpXG4gICAgKSxcbiAgXSkucGlwZShcbiAgICBmaWx0ZXIoXG4gICAgICAoW3BhcmFtcywgZmlyc3RDaGlsZFBhcmFtcywgZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+XG4gICAgICAgICEhKFxuICAgICAgICAgIHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fFxuICAgICAgICAgIGZpcnN0Q2hpbGRQYXJhbXM/LmRvY3VtZW50RGVmaW5pdGlvbk5hbWUgfHxcbiAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lXG4gICAgICAgIClcbiAgICApLFxuICAgIHN3aXRjaE1hcCgoW3BhcmFtcywgZmlyc3RDaGlsZFBhcmFtcywgZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgaW5mb3JtYXRpZW9iamVjdHR5cGVWYWx1ZV0pID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRUeXBlcyhcbiAgICAgICAgICBwYXJhbXM/LmRvY3VtZW50RGVmaW5pdGlvbk5hbWUgfHxcbiAgICAgICAgICAgIGZpcnN0Q2hpbGRQYXJhbXM/LmRvY3VtZW50RGVmaW5pdGlvbk5hbWUgfHxcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVcbiAgICAgICAgKSxcbiAgICAgICAgb2YoaW5mb3JtYXRpZW9iamVjdHR5cGVWYWx1ZSksXG4gICAgICBdKVxuICAgICksXG4gICAgbWFwKChbZG9jdW1lbnRUeXBlcywgaW5mb3JtYXRpZW9iamVjdHR5cGVWYWx1ZV0pID0+XG4gICAgICBkb2N1bWVudFR5cGVzLm1hcCgodHlwZTogYW55KSA9PiAoe1xuICAgICAgICBpZDogdHlwZS51cmwsXG4gICAgICAgIGNvbnRlbnQ6IHR5cGUubmFtZSxcbiAgICAgICAgc2VsZWN0ZWQ6IGluZm9ybWF0aWVvYmplY3R0eXBlVmFsdWUgPT09IHR5cGUudXJsLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlckVtYWlsJCA9IGZyb20odGhpcy5rZXljbG9ha1NlcnZpY2UubG9hZFVzZXJQcm9maWxlKCkpLnBpcGUoXG4gICAgbWFwKHVzZXJQcm9maWxlID0+IHVzZXJQcm9maWxlPy5lbWFpbCB8fCAnJylcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2l6ZSA9ICdsZyc7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2ZpbGVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2U6IERvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudGVuQXBpVGFnU2VydmljZTogRG9jdW1lbnRlbkFwaVRhZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXljbG9ha1NlcnZpY2U6IEtleWNsb2FrU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZhbHRpbW9Nb2RhbFNlcnZpY2U6IFZhbHRpbW9Nb2RhbFNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5GaWxlU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuRmlsZVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmlzRGVmaW5pdGl2ZVN0YXR1cyQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgbGFuZ3VhZ2VTZWxlY3RlZChldmVudDoge2l0ZW06IHtpZDogc3RyaW5nfX0pIHtcbiAgICBpZiAoZXZlbnQuaXRlbS5pZCkge1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICB0YWFsOiBldmVudC5pdGVtLmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRhZ3NTZWxlY3RlZChldmVudDogQXJyYXk8TGlzdEl0ZW0+KSB7XG4gICAgdGhpcy50YWdGb3JtQ29udHJvbC5wYXRjaFZhbHVlKGV2ZW50LmZpbHRlcih0YWcgPT4gdGFnLnNlbGVjdGVkKS5tYXAodGFnID0+IHRhZy5pZCkpO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZGVudGlhbGl0eUxldmVsU2VsZWN0ZWQoZXZlbnQ6IHtpdGVtOiB7aWQ6IHN0cmluZ319KSB7XG4gICAgaWYgKGV2ZW50Lml0ZW0uaWQpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nOiBldmVudC5pdGVtLmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXR1c1NlbGVjdGVkKGV2ZW50OiB7aXRlbToge2lkOiBzdHJpbmd9fSkge1xuICAgIGlmIChldmVudC5pdGVtLmlkKSB7XG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHN0YXR1czogZXZlbnQuaXRlbS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbmZvcm1hdGllb2JqZWN0dHlwZVNlbGVjdGVkKGV2ZW50OiB7aXRlbToge2lkOiBzdHJpbmd9fSkge1xuICAgIGlmIChldmVudC5pdGVtLmlkKSB7XG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGluZm9ybWF0aWVvYmplY3R0eXBlOiBldmVudC5pdGVtLmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByZWZpbGxGb3JtKGZpbGUpIHtcbiAgICB0aGlzLnByZWZpbGxGaWxlbmFtZUFuZEF1dGhvcigpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGJlc3RhbmRzbmFhbSxcbiAgICAgICAgdGl0ZWwsXG4gICAgICAgIGF1dGV1cixcbiAgICAgICAgYmVzY2hyaWp2aW5nLFxuICAgICAgICB0YWFsLFxuICAgICAgICBpbmZvcm1hdGllb2JqZWN0dHlwZSxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICB2ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmcsXG4gICAgICAgIGNyZWF0aWVkYXR1bSxcbiAgICAgICAgb250dmFuZ3N0ZGF0dW0sXG4gICAgICAgIHZlcnplbmRkYXR1bSxcbiAgICAgICAgdHJlZndvb3JkZW4sXG4gICAgICB9ID0gZmlsZTtcblxuICAgICAgaWYgKHZlcnplbmRkYXR1bSkgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCdzZW50Jyk7XG4gICAgICBlbHNlIGlmIChvbnR2YW5nc3RkYXR1bSkgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCdyZWNlaXZlZCcpO1xuICAgICAgZWxzZSB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLm5leHQoJ25laXRoZXInKTtcblxuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBiZXN0YW5kc25hYW0sXG4gICAgICAgIHRpdGVsLFxuICAgICAgICBhdXRldXIsXG4gICAgICAgIGJlc2NocmlqdmluZyxcbiAgICAgICAgdGFhbCxcbiAgICAgICAgaW5mb3JtYXRpZW9iamVjdHR5cGUsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nLFxuICAgICAgICBjcmVhdGllZGF0dW0sXG4gICAgICAgIG9udHZhbmdzdGRhdHVtLFxuICAgICAgICB2ZXJ6ZW5kZGF0dW0sXG4gICAgICAgIHRyZWZ3b29yZGVuLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtYXREYXRlKCdjcmVhdGllZGF0dW0nKTtcbiAgICB0aGlzLmZvcm1hdERhdGUoJ3ZlcnplbmRkYXR1bScpO1xuICAgIHRoaXMuZm9ybWF0RGF0ZSgnb250dmFuZ3N0ZGF0dW0nKTtcblxuICAgIGlmICh0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0udmFsaWQpXG4gICAgICB0aGlzLm1ldGFkYXRhLmVtaXQodGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnZhbHVlKTtcblxuICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICB9XG5cbiAgcHVibGljIGNsb3NlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCduZWl0aGVyJyk7XG4gICAgdGhpcy5tb2RhbENsb3NlLmVtaXQoKTtcbiAgICB0aGlzLmNsZWFyRm9ybSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnJlc2V0KCk7XG4gIH1cblxuICBwcml2YXRlIHByZWZpbGxGaWxlbmFtZUFuZEF1dGhvcigpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZmlsZSQsIHRoaXMudXNlckVtYWlsJF0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoW2ZpbGUsIHVzZXJFbWFpbF0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgYmVzdGFuZHNuYWFtOiBmaWxlPy5uYW1lIHx8IGZpbGU/LmJlc3RhbmRzbmFhbSxcbiAgICAgICAgICAgICAgYXV0ZXVyOiB1c2VyRW1haWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGUoY29udHJvbE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uY29udHJvbHNbY29udHJvbE5hbWVdO1xuICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udHJvbC52YWx1ZSk7XG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIFtjb250cm9sTmFtZV06IGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHsoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfS0ke2RhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlsZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9maWxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICh0aGlzLmZpbGUkKSB7XG4gICAgICB0aGlzLl9maWxlU3Vic2NyaXB0aW9uID0gdGhpcy5maWxlJC5zdWJzY3JpYmUoZmlsZSA9PiB7XG4gICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRm9ybShmaWxlKTtcbiAgICAgICAgICB0aGlzLmlzRGVmaW5pdGl2ZVN0YXR1cyQubmV4dChcbiAgICAgICAgICAgIGZpbGUuc3RhdHVzID09PSAnZGVmaW5pdGllZicgJiYgdGhpcy5pc0VkaXRNb2RlID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRBZGRpdGlvbmFsRGF0ZSh2YWx1ZTogQWRkaXRpb25hbERvY3VtZW50RGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQubmV4dCh2YWx1ZSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPGNkcy1tb2RhbFxuICAjZG9jdW1lbnRlbkFwaU1ldGFkYXRhTW9kYWxcbiAgW29wZW5dPVwib3BlblwiXG4gIFtzaXplXT1cIm1vZGFsU2l6ZVwiXG4gICpuZ0lmPVwie1xuICAgIGZpbGU6IGZpbGUkIHwgYXN5bmMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkJCB8IGFzeW5jLFxuICAgIGlzRGVmaW5pdGl2ZVN0YXR1czogaXNEZWZpbml0aXZlU3RhdHVzJCB8IGFzeW5jLFxuICAgIGxhbmd1YWdlSXRlbXM6IGxhbmd1YWdlSXRlbXMkIHwgYXN5bmMsXG4gICAgc3RhdHVzSXRlbXM6IHN0YXR1c0l0ZW1zJCB8IGFzeW5jLFxuICAgIHRhZ0l0ZW1zOiB0YWdJdGVtcyQgfCBhc3luYyxcbiAgICB1c2VyRW1haWw6IHVzZXJFbWFpbCQgfCBhc3luY1xuICB9IGFzIG9ic1wiXG4+XG4gIDxjZHMtbW9kYWwtaGVhZGVyIFtzaG93Q2xvc2VCdXR0b25dPVwidHJ1ZVwiIChjbG9zZVNlbGVjdCk9XCJjbG9zZU1vZGFsKClcIj5cbiAgICBAaWYgKGlzRWRpdE1vZGUpIHtcbiAgICAgIDxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7ICdkb2N1bWVudC5lZGl0TWV0YWRhdGEnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2gzPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGgzIGNkc01vZGFsSGVhZGVySGVhZGluZz5cbiAgICAgICAge3sgJ2RvY3VtZW50LmZpbGxJbk1ldGFkYXRhJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9oMz5cbiAgICB9XG4gIDwvY2RzLW1vZGFsLWhlYWRlcj5cbiAgPHNlY3Rpb24gY2RzTW9kYWxDb250ZW50IGNsYXNzPVwiY2RzLS1tb2RhbC1jb250ZW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1ldGFkYXRhRm9ybTsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICA8L3NlY3Rpb24+XG4gIDxjZHMtbW9kYWwtZm9vdGVyPlxuICAgIDxidXR0b24gY2RzQnV0dG9uPVwiZ2hvc3RcIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCIgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiPlxuICAgICAge3sgJ2RvY3VtZW50LmNhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAhZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS52YWxpZCB8fCBvYnMuaXNEZWZpbml0aXZlU3RhdHVzXCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgID5cbiAgICAgIHt7ICdkb2N1bWVudC5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Nkcy1tb2RhbC1mb290ZXI+XG48L2Nkcy1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNtZXRhZGF0YUZvcm0gbGV0LW9icz1cIm9ic1wiPlxuICA8bmctY29udGFpbmVyPlxuICAgIDxmb3JtXG4gICAgICAqbmdJZj1cImFkZGl0aW9uYWxEb2N1bWVudERhdGUkIHwgYXN5bmMgYXMgYWRkaXRpb25hbERhdGVcIlxuICAgICAgW2Zvcm1Hcm91cF09XCJkb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtbnMtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYXRhLWZvcm0tY29sdW1uXCI+XG4gICAgICAgICAgPGNkcy10ZXh0LWxhYmVsIGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmZpbGVuYW1lJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmZpbGVuYW1lVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZmlsZW5hbWVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IGRpc2FibGVGaWxlbmFtZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuZmlsZW5hbWVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBpZD1cImJlc3RhbmRzbmFhbVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJlc3RhbmRzbmFhbVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgPGNkcy10ZXh0LWxhYmVsIGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmF1dGhvcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5hdXRob3JUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tLWxlZnQnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJhdXRob3JcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IGRpc2FibGVBdXRob3JcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmF1dGhvclBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICBpZD1cImF1dGV1clwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF1dGV1clwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50Lmxhbmd1YWdlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50Lmxhbmd1YWdlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLWRyb3Bkb3duXG4gICAgICAgICAgICAgICpuZ0lmPVwib2JzLmxhbmd1YWdlSXRlbXNcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50Lmxhbmd1YWdlUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCBkaXNhYmxlTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICBpZD1cImxhbmd1YWdlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImxhbmd1YWdlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwib2JzLmxhbmd1YWdlSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGNkcy1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5jb25maWRlbnRpYWxpdHlMZXZlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5jb25maWRlbnRpYWxpdHlMZXZlbFRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICAgIDxjZHMtZHJvcGRvd25cbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5jb25maWRlbnRpYWxpdHlQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IGRpc2FibGVDb25maWRlbnRpYWxpdHlMZXZlbFwiXG4gICAgICAgICAgICAgIGlkPVwidmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNvbmZpZGVudGlhbGl0eUxldmVsU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwiY29uZmlkZW50aWFsaXR5TGV2ZWxJdGVtcyQgfCBhc3luY1wiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwie2RvY3VtZW50VHlwZUl0ZW1zOiBkb2N1bWVudFR5cGVJdGVtcyQgfCBhc3luY30gYXMgb2JzXCI+XG4gICAgICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgICAgICB7eyAnZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICAgIDxjZHMtZHJvcGRvd25cbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmluZm9ybWF0aWVvYmplY3R0eXBlUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IGRpc2FibGVEb2N1bWVudFR5cGVcIlxuICAgICAgICAgICAgICAgIGlkPVwiaW5mb3JtYXRpZW9iamVjdHR5cGVcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJpbmZvcm1hdGllb2JqZWN0dHlwZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMuZG9jdW1lbnRUeXBlSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbCBuYW1lPVwiJ2FkZGl0aW9uYWxEYXRlJ1wiPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIDxjZHMtcmFkaW8tZ3JvdXAgW29yaWVudGF0aW9uXT1cIidob3Jpem9udGFsJ1wiIGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1yYWRpb1xuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIEFERElUT05BTF9ET0NVTUVOVF9EQVRFX09QVElPTlNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWRkaXRpb25hbERhdGUgPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEFkZGl0aW9uYWxEYXRlKG9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICBuYW1lPVwicmFkaW8taW5saW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLnRyYW5zbGF0aW9uS2V5IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Nkcy1yYWRpbz5cbiAgICAgICAgICA8L2Nkcy1yYWRpby1ncm91cD5cbiAgICAgICAgICBAaWYgKHN1cHBvcnRzVHJlZndvb3JkZW4pIHtcbiAgICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAge3sgJ2RvY3VtZW50LnRhZ3MnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQudGFnc1Rvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgICA8Y2RzLWNvbWJvLWJveFxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIidtdWx0aSdcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQudGFnc1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCBvYnMudGFnSXRlbXMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwidGFnc1NlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwib2JzLnRhZ0l0ZW1zIHx8IFtdXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgICAgICAgPC9jZHMtY29tYm8tYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtblwiPlxuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5pbnB1dFRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgZGlzYWJsZURvY3VtZW50VGl0bGVcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmlucHV0VGl0bGVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgaWQ9XCJ0aXRlbFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRpdGVsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuaW5wdXRUaXRsZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgPGNkcy10ZXh0YXJlYS1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5pbnB1dERlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgZGlzYWJsZURlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5pbnB1dERlc2NyaXB0aW9uUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICBbcm93c109XCI1XCJcbiAgICAgICAgICAgICAgY2RzVGV4dEFyZWFcbiAgICAgICAgICAgICAgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWRlc2NyaXB0aW9uLWlucHV0IGRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIlxuICAgICAgICAgICAgICBpZD1cImJlc2NocmlqdmluZ1wiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJlc2NocmlqdmluZ1wiXG4gICAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5pbnB1dERlc2NyaXB0aW9uVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtdGV4dGFyZWEtbGFiZWw+XG4gICAgICAgICAgPGNkcy1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5jcmVhdGlvbkRhdGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuY3JlYXRpb25EYXRlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidERC1NTS1ZWVlZJ1wiXG4gICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2QtbS1ZJ1wiXG4gICAgICAgICAgICAgICAgaWQ9XCJjcmVhdGllZGF0dW1cIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNyZWF0aWVkYXR1bVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9jZHMtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LnN0YXR1cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5zdGF0dXNUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LnN0YXR1c1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgZGlzYWJsZVN0YXR1c1wiXG4gICAgICAgICAgICAgIGlkPVwic3RhdHVzXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cInN0YXR1c1NlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cIm9icy5zdGF0dXNJdGVtcyB8fCBbXVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAqbmdJZj1cImFkZGl0aW9uYWxEYXRlID09PSAncmVjZWl2ZWQnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidkb2N1bWVudC5hZGRpdGlvbmFsRGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidERC1NTS1ZWVlZJ1wiXG4gICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZC1tLVknXCJcbiAgICAgICAgICAgIGlkPVwib250dmFuZ3N0ZGF0dW1cIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib250dmFuZ3N0ZGF0dW1cIlxuICAgICAgICAgID48L2Nkcy1kYXRlLXBpY2tlcj5cbiAgICAgICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAqbmdJZj1cImFkZGl0aW9uYWxEYXRlID09PSAnc2VudCdcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0RELU1NLVlZWVknXCJcbiAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkLW0tWSdcIlxuICAgICAgICAgICAgaWQ9XCJ2ZXJ6ZW5kZGF0dW1cIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmVyemVuZGRhdHVtXCJcbiAgICAgICAgICA+PC9jZHMtZGF0ZS1waWNrZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=