@valtimo/zgw 12.14.1 → 13.0.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.
- package/fesm2022/valtimo-zgw.mjs +696 -1166
- package/fesm2022/valtimo-zgw.mjs.map +1 -1
- package/lib/components/case-management-zgw/case-management-zgw.component.d.ts +35 -0
- package/lib/components/case-management-zgw/case-management-zgw.component.d.ts.map +1 -0
- package/lib/components/case-management-zgw-general/case-management-zgw-general.component.d.ts +6 -0
- package/lib/components/case-management-zgw-general/case-management-zgw-general.component.d.ts.map +1 -0
- package/lib/components/index.d.ts +1 -1
- package/lib/components/index.d.ts.map +1 -1
- package/lib/models/{dossier-management-zgw.model.d.ts → case-management-zgw.model.d.ts} +3 -2
- package/lib/models/case-management-zgw.model.d.ts.map +1 -0
- package/lib/models/index.d.ts +1 -1
- package/lib/models/index.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.d.ts +6 -4
- package/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts +19 -17
- package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.d.ts +2 -1
- package/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/{documenten-api-link-upload-process/dossier-management-link-process.component.d.ts → documenten-api-link-process/case-management-link-process.component.d.ts} +15 -9
- package/lib/modules/documenten-api/components/documenten-api-link-process/case-management-link-process.component.d.ts.map +1 -0
- package/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts +5 -3
- package/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.d.ts +2 -2
- package/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.d.ts +5 -6
- package/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/documenten-api-upload-field-model/documenten-api-upload-field-modal.component.d.ts +6 -3
- package/lib/modules/documenten-api/components/documenten-api-upload-field-model/documenten-api-upload-field-modal.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/documenten-api-upload-fields/documenten-api-upload-fields.component.d.ts +8 -6
- package/lib/modules/documenten-api/components/documenten-api-upload-fields/documenten-api-upload-fields.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/documenten-api-version/documenten-api-version.component.d.ts +1 -1
- package/lib/modules/documenten-api/components/documenten-api-version/documenten-api-version.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/components/index.d.ts +1 -1
- package/lib/modules/documenten-api/components/index.d.ts.map +1 -1
- package/lib/modules/documenten-api/formio/documenten-api-uploader/documenten-api-uploader.component.d.ts +7 -9
- package/lib/modules/documenten-api/formio/documenten-api-uploader/documenten-api-uploader.component.d.ts.map +1 -1
- package/lib/modules/documenten-api/services/documenten-api-column.service.d.ts +2 -2
- package/lib/modules/documenten-api/services/documenten-api-column.service.d.ts.map +1 -1
- package/lib/modules/documenten-api/services/documenten-api-document.service.d.ts +1 -1
- package/lib/modules/documenten-api/services/documenten-api-link-process.service.d.ts +4 -4
- package/lib/modules/documenten-api/services/documenten-api-link-process.service.d.ts.map +1 -1
- package/lib/modules/documenten-api/services/documenten-api-tag.service.d.ts +1 -1
- package/lib/modules/documenten-api/services/documenten-api-version.service.d.ts +2 -2
- package/lib/modules/documenten-api/services/documenten-api-version.service.d.ts.map +1 -1
- package/lib/modules/index.d.ts +0 -2
- package/lib/modules/index.d.ts.map +1 -1
- package/lib/modules/objecten-api/components/object-type/object-type.component.d.ts +3 -3
- package/lib/modules/objecten-api/components/object-type/object-type.component.d.ts.map +1 -1
- package/lib/modules/objecten-api/components/zaakobjecten/zaakobjecten.component.d.ts +3 -3
- package/lib/modules/objecten-api/components/zaakobjecten/zaakobjecten.component.d.ts.map +1 -1
- package/lib/modules/objecten-api/services/zaakobjecten.service.d.ts +1 -1
- package/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.d.ts +14 -7
- package/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.d.ts.map +1 -1
- package/lib/modules/zaakdetails/services/document-objecten-api-sync.service.d.ts +4 -6
- package/lib/modules/zaakdetails/services/document-objecten-api-sync.service.d.ts.map +1 -1
- package/lib/modules/zaken-api/components/zaken-api-zaaktype-link/zaken-api-zaaktype-link.component.d.ts +20 -21
- package/lib/modules/zaken-api/components/zaken-api-zaaktype-link/zaken-api-zaaktype-link.component.d.ts.map +1 -1
- package/lib/modules/zaken-api/models/zaken-api-zaaktype-link.model.d.ts.map +1 -1
- package/lib/modules/zaken-api/services/zaken-api-zaaktype-link.service.d.ts +1 -1
- package/lib/services/{dossier-management-zgw.service.d.ts → case-management-zgw.service.d.ts} +4 -4
- package/lib/services/case-management-zgw.service.d.ts.map +1 -0
- package/lib/services/index.d.ts +1 -1
- package/lib/services/index.d.ts.map +1 -1
- package/lib/zgw.module.d.ts +1 -2
- package/lib/zgw.module.d.ts.map +1 -1
- package/package.json +7 -9
- package/public_api.d.ts +0 -2
- package/public_api.d.ts.map +1 -1
- package/esm2022/lib/components/dossier-management-zgw/dossier-management-zgw.component.mjs +0 -91
- package/esm2022/lib/components/index.mjs +0 -17
- package/esm2022/lib/models/dossier-management-zgw.model.mjs +0 -23
- package/esm2022/lib/models/index.mjs +0 -17
- package/esm2022/lib/modules/contactmomenten/components/contact-moments/contact-moments.component.mjs +0 -89
- package/esm2022/lib/modules/contactmomenten/components/index.mjs +0 -17
- package/esm2022/lib/modules/contactmomenten/index.mjs +0 -19
- package/esm2022/lib/modules/contactmomenten/models/contact-moment.model.mjs +0 -17
- package/esm2022/lib/modules/contactmomenten/models/index.mjs +0 -17
- package/esm2022/lib/modules/contactmomenten/services/contact-moment.service.mjs +0 -43
- package/esm2022/lib/modules/contactmomenten/services/index.mjs +0 -17
- package/esm2022/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.mjs +0 -175
- package/esm2022/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.mjs +0 -142
- package/esm2022/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.mjs +0 -443
- package/esm2022/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.mjs +0 -174
- package/esm2022/lib/modules/documenten-api/components/documenten-api-link-upload-process/dossier-management-link-process.component.mjs +0 -100
- package/esm2022/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +0 -541
- package/esm2022/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.mjs +0 -116
- package/esm2022/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.mjs +0 -162
- package/esm2022/lib/modules/documenten-api/components/documenten-api-upload-field-model/documenten-api-upload-field-modal.component.mjs +0 -183
- package/esm2022/lib/modules/documenten-api/components/documenten-api-upload-fields/documenten-api-upload-fields.component.mjs +0 -118
- package/esm2022/lib/modules/documenten-api/components/documenten-api-version/documenten-api-version.component.mjs +0 -43
- package/esm2022/lib/modules/documenten-api/components/index.mjs +0 -27
- package/esm2022/lib/modules/documenten-api/formio/documenten-api-uploader/documenten-api-uploader-edit-form.mjs +0 -554
- package/esm2022/lib/modules/documenten-api/formio/documenten-api-uploader/documenten-api-uploader.component.mjs +0 -256
- package/esm2022/lib/modules/documenten-api/formio/documenten-api-uploader/documenten-api-uploader.formio.mjs +0 -46
- package/esm2022/lib/modules/documenten-api/formio/documenten-api-uploader/index.mjs +0 -19
- package/esm2022/lib/modules/documenten-api/formio/index.mjs +0 -17
- package/esm2022/lib/modules/documenten-api/index.mjs +0 -20
- package/esm2022/lib/modules/documenten-api/models/configured-column.model.mjs +0 -27
- package/esm2022/lib/modules/documenten-api/models/documenten-api-column-modal.model.mjs +0 -17
- package/esm2022/lib/modules/documenten-api/models/documenten-api-filter.model.mjs +0 -17
- package/esm2022/lib/modules/documenten-api/models/documenten-api-link-process.model.mjs +0 -17
- package/esm2022/lib/modules/documenten-api/models/documenten-api-metadata.model.mjs +0 -34
- package/esm2022/lib/modules/documenten-api/models/documenten-api-tag.model.mjs +0 -17
- package/esm2022/lib/modules/documenten-api/models/documenten-api-upload-field.model.mjs +0 -33
- package/esm2022/lib/modules/documenten-api/models/documenten-api-version.model.mjs +0 -17
- package/esm2022/lib/modules/documenten-api/models/documenten-api.model.mjs +0 -37
- package/esm2022/lib/modules/documenten-api/models/index.mjs +0 -23
- package/esm2022/lib/modules/documenten-api/services/documenten-api-column.service.mjs +0 -38
- package/esm2022/lib/modules/documenten-api/services/documenten-api-document.service.mjs +0 -58
- package/esm2022/lib/modules/documenten-api/services/documenten-api-link-process.service.mjs +0 -51
- package/esm2022/lib/modules/documenten-api/services/documenten-api-tag.service.mjs +0 -36
- package/esm2022/lib/modules/documenten-api/services/documenten-api-version.service.mjs +0 -50
- package/esm2022/lib/modules/documenten-api/services/index.mjs +0 -21
- package/esm2022/lib/modules/haalcentraal-brp/components/cases-list/cases-list.component.mjs +0 -56
- package/esm2022/lib/modules/haalcentraal-brp/components/customer-list/customer-list.component.mjs +0 -133
- package/esm2022/lib/modules/haalcentraal-brp/customer-routing.module.mjs +0 -51
- package/esm2022/lib/modules/haalcentraal-brp/customer.module.mjs +0 -76
- package/esm2022/lib/modules/haalcentraal-brp/index.mjs +0 -19
- package/esm2022/lib/modules/haalcentraal-brp/models/case.mjs +0 -17
- package/esm2022/lib/modules/haalcentraal-brp/models/customer.mjs +0 -17
- package/esm2022/lib/modules/haalcentraal-brp/models/index.mjs +0 -18
- package/esm2022/lib/modules/haalcentraal-brp/services/customer.service.mjs +0 -43
- package/esm2022/lib/modules/haalcentraal-brp/services/index.mjs +0 -17
- package/esm2022/lib/modules/index.mjs +0 -22
- package/esm2022/lib/modules/objecten-api/components/index.mjs +0 -18
- package/esm2022/lib/modules/objecten-api/components/object-type/object-type.component.mjs +0 -122
- package/esm2022/lib/modules/objecten-api/components/zaakobjecten/zaakobjecten.component.mjs +0 -125
- package/esm2022/lib/modules/objecten-api/index.mjs +0 -19
- package/esm2022/lib/modules/objecten-api/models/index.mjs +0 -17
- package/esm2022/lib/modules/objecten-api/models/zaakobjecten.model.mjs +0 -17
- package/esm2022/lib/modules/objecten-api/services/index.mjs +0 -17
- package/esm2022/lib/modules/objecten-api/services/zaakobjecten.service.mjs +0 -44
- package/esm2022/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.mjs +0 -127
- package/esm2022/lib/modules/zaakdetails/components/index.mjs +0 -17
- package/esm2022/lib/modules/zaakdetails/index.mjs +0 -19
- package/esm2022/lib/modules/zaakdetails/models/document-objecten-api-sync.model.mjs +0 -2
- package/esm2022/lib/modules/zaakdetails/models/index.mjs +0 -17
- package/esm2022/lib/modules/zaakdetails/services/document-objecten-api-sync.service.mjs +0 -51
- package/esm2022/lib/modules/zaakdetails/services/index.mjs +0 -17
- package/esm2022/lib/modules/zaken-api/components/index.mjs +0 -17
- package/esm2022/lib/modules/zaken-api/components/zaken-api-zaaktype-link/zaken-api-zaaktype-link.component.mjs +0 -183
- package/esm2022/lib/modules/zaken-api/index.mjs +0 -19
- package/esm2022/lib/modules/zaken-api/models/index.mjs +0 -17
- package/esm2022/lib/modules/zaken-api/models/zaken-api-zaaktype-link.model.mjs +0 -2
- package/esm2022/lib/modules/zaken-api/services/index.mjs +0 -17
- package/esm2022/lib/modules/zaken-api/services/zaken-api-zaaktype-link.service.mjs +0 -39
- package/esm2022/lib/services/dossier-management-zgw.service.mjs +0 -43
- package/esm2022/lib/services/index.mjs +0 -17
- package/esm2022/lib/zgw.module.mjs +0 -123
- package/esm2022/public_api.mjs +0 -27
- package/esm2022/valtimo-zgw.mjs +0 -5
- package/lib/components/dossier-management-zgw/dossier-management-zgw.component.d.ts +0 -24
- package/lib/components/dossier-management-zgw/dossier-management-zgw.component.d.ts.map +0 -1
- package/lib/models/dossier-management-zgw.model.d.ts.map +0 -1
- package/lib/modules/contactmomenten/components/contact-moments/contact-moments.component.d.ts +0 -29
- package/lib/modules/contactmomenten/components/contact-moments/contact-moments.component.d.ts.map +0 -1
- package/lib/modules/contactmomenten/components/index.d.ts +0 -2
- package/lib/modules/contactmomenten/components/index.d.ts.map +0 -1
- package/lib/modules/contactmomenten/index.d.ts +0 -4
- package/lib/modules/contactmomenten/index.d.ts.map +0 -1
- package/lib/modules/contactmomenten/models/contact-moment.model.d.ts +0 -14
- package/lib/modules/contactmomenten/models/contact-moment.model.d.ts.map +0 -1
- package/lib/modules/contactmomenten/models/index.d.ts +0 -2
- package/lib/modules/contactmomenten/models/index.d.ts.map +0 -1
- package/lib/modules/contactmomenten/services/contact-moment.service.d.ts +0 -18
- package/lib/modules/contactmomenten/services/contact-moment.service.d.ts.map +0 -1
- package/lib/modules/contactmomenten/services/index.d.ts +0 -2
- package/lib/modules/contactmomenten/services/index.d.ts.map +0 -1
- package/lib/modules/documenten-api/components/documenten-api-link-upload-process/dossier-management-link-process.component.d.ts.map +0 -1
- package/lib/modules/haalcentraal-brp/components/cases-list/cases-list.component.d.ts +0 -20
- package/lib/modules/haalcentraal-brp/components/cases-list/cases-list.component.d.ts.map +0 -1
- package/lib/modules/haalcentraal-brp/components/customer-list/customer-list.component.d.ts +0 -39
- package/lib/modules/haalcentraal-brp/components/customer-list/customer-list.component.d.ts.map +0 -1
- package/lib/modules/haalcentraal-brp/customer-routing.module.d.ts +0 -9
- package/lib/modules/haalcentraal-brp/customer-routing.module.d.ts.map +0 -1
- package/lib/modules/haalcentraal-brp/customer.module.d.ts +0 -17
- package/lib/modules/haalcentraal-brp/customer.module.d.ts.map +0 -1
- package/lib/modules/haalcentraal-brp/index.d.ts +0 -4
- package/lib/modules/haalcentraal-brp/index.d.ts.map +0 -1
- package/lib/modules/haalcentraal-brp/models/case.d.ts +0 -8
- package/lib/modules/haalcentraal-brp/models/case.d.ts.map +0 -1
- package/lib/modules/haalcentraal-brp/models/customer.d.ts +0 -22
- package/lib/modules/haalcentraal-brp/models/customer.d.ts.map +0 -1
- package/lib/modules/haalcentraal-brp/models/index.d.ts +0 -3
- package/lib/modules/haalcentraal-brp/models/index.d.ts.map +0 -1
- package/lib/modules/haalcentraal-brp/services/customer.service.d.ts +0 -18
- package/lib/modules/haalcentraal-brp/services/customer.service.d.ts.map +0 -1
- package/lib/modules/haalcentraal-brp/services/index.d.ts +0 -2
- package/lib/modules/haalcentraal-brp/services/index.d.ts.map +0 -1
- package/lib/services/dossier-management-zgw.service.d.ts.map +0 -1
|
@@ -1,541 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2015-2024 Ritense BV, the Netherlands.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
17
|
-
import { BehaviorSubject, combineLatest, filter, from, map, of, startWith, Subject, Subscription, switchMap, take, } from 'rxjs';
|
|
18
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
19
|
-
import { tap } from 'rxjs/operators';
|
|
20
|
-
import { CommonModule } from '@angular/common';
|
|
21
|
-
import { ReactiveFormsModule, Validators, } from '@angular/forms';
|
|
22
|
-
import { InputLabelModule, InputModule, SelectModule, VModalModule, } from '@valtimo/components';
|
|
23
|
-
import { ButtonModule, ComboBoxModule, DatePickerModule, DropdownModule, IconModule, InputModule as CarbonInputModule, LayerModule, ModalModule, RadioModule, TagModule, TooltipModule, } from 'carbon-components-angular';
|
|
24
|
-
import moment from 'moment';
|
|
25
|
-
import * as i0 from "@angular/core";
|
|
26
|
-
import * as i1 from "@angular/router";
|
|
27
|
-
import * as i2 from "@valtimo/document";
|
|
28
|
-
import * as i3 from "../../services/documenten-api-tag.service";
|
|
29
|
-
import * as i4 from "@angular/forms";
|
|
30
|
-
import * as i5 from "keycloak-angular";
|
|
31
|
-
import * as i6 from "@valtimo/components";
|
|
32
|
-
import * as i7 from "@ngx-translate/core";
|
|
33
|
-
import * as i8 from "../../services";
|
|
34
|
-
import * as i9 from "carbon-components-angular";
|
|
35
|
-
import * as i10 from "@angular/common";
|
|
36
|
-
export class DocumentenApiMetadataModalComponent {
|
|
37
|
-
set disableAuthor(value) {
|
|
38
|
-
if (value) {
|
|
39
|
-
this.auteur.disable();
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
this.auteur.enable();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
set disableConfidentialityLevel(value) {
|
|
46
|
-
if (value) {
|
|
47
|
-
this.confidentialityLevelFormControl.disable();
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
this.confidentialityLevelFormControl.enable();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
set disableDescription(value) {
|
|
54
|
-
if (value) {
|
|
55
|
-
this.beschrijving.disable();
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
this.beschrijving.enable();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
set disableDocumentTitle(value) {
|
|
62
|
-
if (value) {
|
|
63
|
-
this.titel.disable();
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
this.titel.enable();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
set disableDocumentType(value) {
|
|
70
|
-
if (value) {
|
|
71
|
-
this.informatieobjecttypeFormControl.disable();
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
this.informatieobjecttypeFormControl.enable();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
set disableFilename(value) {
|
|
78
|
-
if (value) {
|
|
79
|
-
this.bestandsnaam.disable();
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
this.bestandsnaam.enable();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
set disableLanguage(value) {
|
|
86
|
-
if (value) {
|
|
87
|
-
this.languageFormControl.disable();
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
this.languageFormControl.enable();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
set disableStatus(value) {
|
|
94
|
-
if (value) {
|
|
95
|
-
this.statusFormControl.disable();
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
this.statusFormControl.enable();
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
set disableCreationDate(value) {
|
|
102
|
-
if (value) {
|
|
103
|
-
this.creatiedatum.disable();
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
this.creatiedatum.enable();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
set open(value) {
|
|
110
|
-
this.open$.next(value);
|
|
111
|
-
if (value) {
|
|
112
|
-
this.modalService.openModal(this.metadataModal);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
this.modalService.closeModal();
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
get confidentialityLevelFormControl() {
|
|
119
|
-
return this.documentenApiMetadataForm.get('vertrouwelijkheidaanduiding');
|
|
120
|
-
}
|
|
121
|
-
get confidentialityLevelDisabled$() {
|
|
122
|
-
return this.confidentialityLevelFormControl.valueChanges.pipe(startWith(null), map(() => this.confidentialityLevelFormControl.disabled));
|
|
123
|
-
}
|
|
124
|
-
get informatieobjecttypeFormControl() {
|
|
125
|
-
return this.documentenApiMetadataForm.get('informatieobjecttype');
|
|
126
|
-
}
|
|
127
|
-
get informatieobjecttypeDisabled$() {
|
|
128
|
-
return this.informatieobjecttypeFormControl.valueChanges.pipe(startWith(null), map(() => this.informatieobjecttypeFormControl.disabled));
|
|
129
|
-
}
|
|
130
|
-
get languageFormControl() {
|
|
131
|
-
return this.documentenApiMetadataForm.get('taal');
|
|
132
|
-
}
|
|
133
|
-
get languageDisabled$() {
|
|
134
|
-
return this.languageFormControl.valueChanges.pipe(startWith(null), map(() => this.languageFormControl.disabled));
|
|
135
|
-
}
|
|
136
|
-
get statusFormControl() {
|
|
137
|
-
return this.documentenApiMetadataForm.get('status');
|
|
138
|
-
}
|
|
139
|
-
get statusDisabled$() {
|
|
140
|
-
return this.statusFormControl.valueChanges.pipe(startWith(null), map(() => this.informatieobjecttypeFormControl.disabled));
|
|
141
|
-
}
|
|
142
|
-
get tagFormControl() {
|
|
143
|
-
return this.documentenApiMetadataForm.get('trefwoorden');
|
|
144
|
-
}
|
|
145
|
-
get creatiedatum() {
|
|
146
|
-
return this.documentenApiMetadataForm.get('creatiedatum');
|
|
147
|
-
}
|
|
148
|
-
get titel() {
|
|
149
|
-
return this.documentenApiMetadataForm.get('titel');
|
|
150
|
-
}
|
|
151
|
-
get beschrijving() {
|
|
152
|
-
return this.documentenApiMetadataForm.get('beschrijving');
|
|
153
|
-
}
|
|
154
|
-
get auteur() {
|
|
155
|
-
return this.documentenApiMetadataForm.get('auteur');
|
|
156
|
-
}
|
|
157
|
-
get bestandsnaam() {
|
|
158
|
-
return this.documentenApiMetadataForm.get('bestandsnaam');
|
|
159
|
-
}
|
|
160
|
-
constructor(route, documentService, documentenApiTagService, fb, keycloakService, modalService, translateService, valtimoModalService, documentenApiVersionService) {
|
|
161
|
-
this.route = route;
|
|
162
|
-
this.documentService = documentService;
|
|
163
|
-
this.documentenApiTagService = documentenApiTagService;
|
|
164
|
-
this.fb = fb;
|
|
165
|
-
this.keycloakService = keycloakService;
|
|
166
|
-
this.modalService = modalService;
|
|
167
|
-
this.translateService = translateService;
|
|
168
|
-
this.valtimoModalService = valtimoModalService;
|
|
169
|
-
this.documentenApiVersionService = documentenApiVersionService;
|
|
170
|
-
this.hideFields = [];
|
|
171
|
-
this.defaultValues = {};
|
|
172
|
-
this.supportsTrefwoorden = false;
|
|
173
|
-
this.open$ = new BehaviorSubject(false);
|
|
174
|
-
this.metadata = new EventEmitter();
|
|
175
|
-
this.modalClose = new EventEmitter();
|
|
176
|
-
this.filenameExtension = '';
|
|
177
|
-
this.documentenApiMetadataForm = this.fb.group({
|
|
178
|
-
bestandsnaam: this.fb.control(''),
|
|
179
|
-
titel: this.fb.control('', Validators.required),
|
|
180
|
-
auteur: this.fb.control('', Validators.required),
|
|
181
|
-
beschrijving: this.fb.control(''),
|
|
182
|
-
taal: this.fb.control('', Validators.required),
|
|
183
|
-
informatieobjecttype: this.fb.control('', Validators.required),
|
|
184
|
-
status: this.fb.control(''),
|
|
185
|
-
vertrouwelijkheidaanduiding: this.fb.control(''),
|
|
186
|
-
creatiedatum: this.fb.control('', Validators.required),
|
|
187
|
-
ontvangstdatum: this.fb.control(''),
|
|
188
|
-
verzenddatum: this.fb.control(''),
|
|
189
|
-
trefwoorden: this.fb.control([]),
|
|
190
|
-
});
|
|
191
|
-
this.editDisabled$ = new BehaviorSubject(false);
|
|
192
|
-
this.CONFIDENTIALITY_LEVELS = [
|
|
193
|
-
'openbaar',
|
|
194
|
-
'beperkt_openbaar',
|
|
195
|
-
'intern',
|
|
196
|
-
'zaakvertrouwelijk',
|
|
197
|
-
'vertrouwelijk',
|
|
198
|
-
'confidentieel',
|
|
199
|
-
'geheim',
|
|
200
|
-
'zeer_geheim',
|
|
201
|
-
];
|
|
202
|
-
this.confidentialityLevelItems$ = combineLatest([
|
|
203
|
-
this.confidentialityLevelFormControl.valueChanges.pipe(startWith(this.confidentialityLevelFormControl.value)),
|
|
204
|
-
this.translateService.stream('key'),
|
|
205
|
-
]).pipe(map(([currentConfidentialityLevel]) => this.CONFIDENTIALITY_LEVELS.map(confidentialityLevel => ({
|
|
206
|
-
id: confidentialityLevel,
|
|
207
|
-
content: this.translateService.instant(`document.${confidentialityLevel}`),
|
|
208
|
-
selected: currentConfidentialityLevel === confidentialityLevel,
|
|
209
|
-
}))));
|
|
210
|
-
this.ADDITONAL_DOCUMENT_DATE_OPTIONS = [
|
|
211
|
-
{
|
|
212
|
-
value: 'neither',
|
|
213
|
-
translationKey: 'document.noAdditionalDate',
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
value: 'sent',
|
|
217
|
-
translationKey: 'document.sendDate',
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
value: 'received',
|
|
221
|
-
translationKey: 'document.receiptDate',
|
|
222
|
-
},
|
|
223
|
-
];
|
|
224
|
-
this.clearStatusSelection$ = new Subject();
|
|
225
|
-
this.additionalDocumentDate$ = new BehaviorSubject('neither');
|
|
226
|
-
this.STATUSES = [
|
|
227
|
-
'in_bewerking',
|
|
228
|
-
'ter_vaststelling',
|
|
229
|
-
'definitief',
|
|
230
|
-
'gearchiveerd',
|
|
231
|
-
];
|
|
232
|
-
this.RECEIPT_STATUSES = ['definitief', 'gearchiveerd'];
|
|
233
|
-
this.formData$ = new BehaviorSubject(null);
|
|
234
|
-
this.statusItems$ = combineLatest([
|
|
235
|
-
this.additionalDocumentDate$,
|
|
236
|
-
this.statusFormControl.valueChanges.pipe(startWith(this.statusFormControl.value)),
|
|
237
|
-
this.translateService.stream('key'),
|
|
238
|
-
]).pipe(tap(([additionalDocumentDate, currentStatus]) => {
|
|
239
|
-
this.formData$
|
|
240
|
-
.pipe(filter(formData => !!formData), take(1))
|
|
241
|
-
.subscribe(formData => {
|
|
242
|
-
if (additionalDocumentDate === 'received' &&
|
|
243
|
-
(formData.status === 'in_bewerking' || formData.status === 'ter_vaststelling')) {
|
|
244
|
-
this.clearStatusSelection$.next(null);
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
}), map(([additionalDocumentDate, currentStatus]) => (additionalDocumentDate === 'received' ? this.RECEIPT_STATUSES : this.STATUSES).map(status => ({
|
|
248
|
-
id: status,
|
|
249
|
-
content: this.translateService.instant(`document.${status}`),
|
|
250
|
-
selected: currentStatus === status,
|
|
251
|
-
}))));
|
|
252
|
-
this.tagItems$ = combineLatest([
|
|
253
|
-
this.valtimoModalService.documentDefinitionName$,
|
|
254
|
-
this.tagFormControl.valueChanges.pipe(startWith(this.tagFormControl.value)),
|
|
255
|
-
]).pipe(filter(([documentDefinitionName]) => !!documentDefinitionName), switchMap(([documentDefinitionName, tagFormControlValue]) => combineLatest([
|
|
256
|
-
this.documentenApiTagService.getTags(documentDefinitionName),
|
|
257
|
-
of(tagFormControlValue),
|
|
258
|
-
])), map(([tags, tagFormControlValue]) => tags.map(tag => ({
|
|
259
|
-
id: tag.value,
|
|
260
|
-
content: tag.value,
|
|
261
|
-
selected: !!tagFormControlValue ? tagFormControlValue.includes(tag.value) : false,
|
|
262
|
-
}))));
|
|
263
|
-
this.LANGUAGES = ['nld', 'eng', 'deu'];
|
|
264
|
-
this.languageItems$ = combineLatest([
|
|
265
|
-
this.languageFormControl.valueChanges.pipe(startWith(this.languageFormControl.value)),
|
|
266
|
-
this.translateService.stream('key'),
|
|
267
|
-
]).pipe(map(([currentLanguage]) => {
|
|
268
|
-
return this.LANGUAGES.map((language) => ({
|
|
269
|
-
content: this.translateService.instant(`document.${language}`),
|
|
270
|
-
id: language,
|
|
271
|
-
selected: currentLanguage === language,
|
|
272
|
-
}));
|
|
273
|
-
}));
|
|
274
|
-
this.documentTypeItems$ = combineLatest([
|
|
275
|
-
this.valtimoModalService.documentDefinitionName$,
|
|
276
|
-
this.informatieobjecttypeFormControl.valueChanges.pipe(startWith(this.informatieobjecttypeFormControl.value)),
|
|
277
|
-
]).pipe(switchMap(([documentDefinitionName, informatieobjecttypeValue]) => combineLatest([
|
|
278
|
-
this.documentService.getDocumentTypes(documentDefinitionName),
|
|
279
|
-
of(informatieobjecttypeValue),
|
|
280
|
-
])), map(([documentTypes, informatieobjecttypeValue]) => documentTypes.map((type) => ({
|
|
281
|
-
id: type.url,
|
|
282
|
-
content: type.name,
|
|
283
|
-
selected: informatieobjecttypeValue === type.url,
|
|
284
|
-
}))));
|
|
285
|
-
this.userEmail$ = from(this.keycloakService.loadUserProfile()).pipe(map(userProfile => userProfile?.email || ''));
|
|
286
|
-
this._supportedDocumentenApiFeatures$ = this.valtimoModalService.documentDefinitionName$.pipe(switchMap(documentDefinitionName => this.documentenApiVersionService.getSupportedApiFeatures(documentDefinitionName)));
|
|
287
|
-
this._subscriptions = new Subscription();
|
|
288
|
-
}
|
|
289
|
-
ngOnInit() {
|
|
290
|
-
this.openFileSubscription();
|
|
291
|
-
this.openDisabledSubscription();
|
|
292
|
-
this.openFilenameSubscription();
|
|
293
|
-
this.openDocumentDefinitionSubscription();
|
|
294
|
-
}
|
|
295
|
-
ngOnDestroy() {
|
|
296
|
-
this._subscriptions.unsubscribe();
|
|
297
|
-
this._fileSubscription?.unsubscribe();
|
|
298
|
-
this._fileNameAndAuthorSubscription?.unsubscribe();
|
|
299
|
-
this.editDisabled$.next(false);
|
|
300
|
-
}
|
|
301
|
-
languageSelected(event) {
|
|
302
|
-
if (event.item.id) {
|
|
303
|
-
this.documentenApiMetadataForm.patchValue({
|
|
304
|
-
taal: event.item.id,
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
tagsSelected(event) {
|
|
309
|
-
this.tagFormControl.patchValue(event.filter(tag => tag.selected).map(tag => tag.id));
|
|
310
|
-
}
|
|
311
|
-
confidentialityLevelSelected(event) {
|
|
312
|
-
if (event.id) {
|
|
313
|
-
this.documentenApiMetadataForm.patchValue({
|
|
314
|
-
vertrouwelijkheidaanduiding: event.id,
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
statusSelected(event) {
|
|
319
|
-
if (event.id) {
|
|
320
|
-
this.documentenApiMetadataForm.patchValue({
|
|
321
|
-
status: event.id,
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
informatieobjecttypeSelected(event) {
|
|
326
|
-
if (event.item.id) {
|
|
327
|
-
this.documentenApiMetadataForm.patchValue({
|
|
328
|
-
informatieobjecttype: event.item.id,
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
prefillForm(file) {
|
|
333
|
-
this.prefillFilenameAndAuthor();
|
|
334
|
-
if (file) {
|
|
335
|
-
const { beschrijving, taal, informatieobjecttype, status, vertrouwelijkheidaanduiding, ontvangstdatum, verzenddatum, trefwoorden, } = file;
|
|
336
|
-
if (verzenddatum)
|
|
337
|
-
this.additionalDocumentDate$.next('sent');
|
|
338
|
-
else if (ontvangstdatum)
|
|
339
|
-
this.additionalDocumentDate$.next('received');
|
|
340
|
-
else
|
|
341
|
-
this.additionalDocumentDate$.next('neither');
|
|
342
|
-
const prefillStatus = status || this.defaultValues.status;
|
|
343
|
-
const validPrefillStatus = this.STATUSES.includes(prefillStatus) ? prefillStatus : '';
|
|
344
|
-
this.documentenApiMetadataForm.patchValue({
|
|
345
|
-
beschrijving: beschrijving || this.defaultValues.beschrijving,
|
|
346
|
-
taal: taal || this.defaultValues.taal,
|
|
347
|
-
informatieobjecttype: informatieobjecttype || this.defaultValues.informatieobjecttype,
|
|
348
|
-
status: validPrefillStatus,
|
|
349
|
-
vertrouwelijkheidaanduiding: vertrouwelijkheidaanduiding || this.defaultValues.vertrouwelijkheidaanduiding,
|
|
350
|
-
ontvangstdatum: ontvangstdatum ? new Date(ontvangstdatum) : null,
|
|
351
|
-
verzenddatum: verzenddatum ? new Date(verzenddatum) : null,
|
|
352
|
-
trefwoorden: trefwoorden || this.defaultValues.trefwoorden,
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
save() {
|
|
357
|
-
this.formatDate('creatiedatum');
|
|
358
|
-
this.formatDate('verzenddatum');
|
|
359
|
-
this.formatDate('ontvangstdatum');
|
|
360
|
-
const rawValue = this.documentenApiMetadataForm.getRawValue();
|
|
361
|
-
const mappedRawValue = Object.keys(rawValue).reduce((acc, currentKey) => rawValue[currentKey] !== undefined ? { ...acc, [currentKey]: rawValue[currentKey] } : acc, {});
|
|
362
|
-
if (this.documentenApiMetadataForm.valid)
|
|
363
|
-
this.metadata.emit(mappedRawValue);
|
|
364
|
-
this.closeModal();
|
|
365
|
-
}
|
|
366
|
-
closeModal() {
|
|
367
|
-
this.modalService.closeModal(() => {
|
|
368
|
-
this.additionalDocumentDate$.next('neither');
|
|
369
|
-
this.modalClose.emit();
|
|
370
|
-
this.clearForm();
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
clearForm() {
|
|
374
|
-
this.documentenApiMetadataForm.reset();
|
|
375
|
-
}
|
|
376
|
-
prefillFilenameAndAuthor() {
|
|
377
|
-
this._fileNameAndAuthorSubscription?.unsubscribe();
|
|
378
|
-
this._fileNameAndAuthorSubscription = combineLatest([this.file$, this.userEmail$])
|
|
379
|
-
.pipe(tap(([file, userEmail]) => {
|
|
380
|
-
const filename = file?.bestandsnaam || this.defaultValues.bestandsnaam || file?.name;
|
|
381
|
-
this.filenameExtension = filename?.split('.')?.pop() || '';
|
|
382
|
-
if (this.filenameExtension.length === filename?.length) {
|
|
383
|
-
this.filenameExtension = '';
|
|
384
|
-
}
|
|
385
|
-
this.documentenApiMetadataForm.patchValue({
|
|
386
|
-
bestandsnaam: filename,
|
|
387
|
-
auteur: file?.auteur || this.defaultValues.auteur || userEmail,
|
|
388
|
-
creatiedatum: file?.creatiedatum || new Date(Date.now()),
|
|
389
|
-
titel: file?.titel ||
|
|
390
|
-
this.defaultValues.titel ||
|
|
391
|
-
this.filenameToTitle(file?.name || this.defaultValues.bestandsnaam),
|
|
392
|
-
});
|
|
393
|
-
if (this.areAllFieldsHidden()) {
|
|
394
|
-
this.save();
|
|
395
|
-
}
|
|
396
|
-
}))
|
|
397
|
-
.subscribe();
|
|
398
|
-
}
|
|
399
|
-
filenameToTitle(filename) {
|
|
400
|
-
if (!filename) {
|
|
401
|
-
return null;
|
|
402
|
-
}
|
|
403
|
-
filename = filename.replace(/\.[^/.]+$/, '').replace(/[^a-zA-Z0-9]+/g, ' ');
|
|
404
|
-
return filename.charAt(0).toUpperCase() + filename.slice(1);
|
|
405
|
-
}
|
|
406
|
-
formatDate(controlName) {
|
|
407
|
-
const control = this.documentenApiMetadataForm.controls[controlName];
|
|
408
|
-
if (control.value) {
|
|
409
|
-
this.documentenApiMetadataForm.patchValue({
|
|
410
|
-
[controlName]: this.toFormattedDate(control.value),
|
|
411
|
-
});
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
toFormattedDate(date) {
|
|
415
|
-
return moment(new Date(date)).format('YYYY-MM-DD');
|
|
416
|
-
}
|
|
417
|
-
openFileSubscription() {
|
|
418
|
-
this._fileSubscription?.unsubscribe();
|
|
419
|
-
if (this.file$) {
|
|
420
|
-
this._fileSubscription = combineLatest([
|
|
421
|
-
this.file$,
|
|
422
|
-
this._supportedDocumentenApiFeatures$,
|
|
423
|
-
]).subscribe(([file, support]) => {
|
|
424
|
-
if (file) {
|
|
425
|
-
this.prefillForm(file);
|
|
426
|
-
this.editDisabled$.next(!support.supportsUpdatingDefinitiveDocument &&
|
|
427
|
-
file.status === 'definitief' &&
|
|
428
|
-
this.isEditMode);
|
|
429
|
-
}
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
openDisabledSubscription() {
|
|
434
|
-
this._subscriptions.add(this.disabled$?.subscribe(disabled => {
|
|
435
|
-
if (disabled) {
|
|
436
|
-
this.documentenApiMetadataForm.disable();
|
|
437
|
-
}
|
|
438
|
-
else {
|
|
439
|
-
this.documentenApiMetadataForm.enable();
|
|
440
|
-
}
|
|
441
|
-
}));
|
|
442
|
-
}
|
|
443
|
-
openFilenameSubscription() {
|
|
444
|
-
this._subscriptions.add(this.bestandsnaam.valueChanges.subscribe(bestandsnaam => {
|
|
445
|
-
if (bestandsnaam && this.filenameExtension) {
|
|
446
|
-
let correctBestandsnaam = bestandsnaam.replace(/\.[^/.]+$/, '') + '.' + this.filenameExtension;
|
|
447
|
-
if (correctBestandsnaam != bestandsnaam) {
|
|
448
|
-
this.documentenApiMetadataForm.patchValue({
|
|
449
|
-
bestandsnaam: correctBestandsnaam,
|
|
450
|
-
});
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
}));
|
|
454
|
-
}
|
|
455
|
-
openDocumentDefinitionSubscription() {
|
|
456
|
-
this._subscriptions.add(combineLatest([this.route?.params || of(null), this.route?.firstChild?.params || of(null)])
|
|
457
|
-
.pipe(map(([params, firstChildParams]) => (params?.documentDefinitionName || firstChildParams?.documentDefinitionName)), filter(documentDefinitionName => !!documentDefinitionName))
|
|
458
|
-
.subscribe(documentDefinitionName => this.valtimoModalService.setDocumentDefinitionName(documentDefinitionName)));
|
|
459
|
-
}
|
|
460
|
-
setAdditionalDate(value) {
|
|
461
|
-
this.additionalDocumentDate$.next(value);
|
|
462
|
-
}
|
|
463
|
-
areAllFieldsHidden() {
|
|
464
|
-
return (this.hideFields.includes('aanvullendeDatum') &&
|
|
465
|
-
this.hideFields.includes('auteur') &&
|
|
466
|
-
this.hideFields.includes('vertrouwelijkheidaanduiding') &&
|
|
467
|
-
this.hideFields.includes('creatiedatum') &&
|
|
468
|
-
this.hideFields.includes('beschrijving') &&
|
|
469
|
-
this.hideFields.includes('titel') &&
|
|
470
|
-
this.hideFields.includes('informatieobjecttype') &&
|
|
471
|
-
this.hideFields.includes('bestandsnaam') &&
|
|
472
|
-
this.hideFields.includes('taal') &&
|
|
473
|
-
this.hideFields.includes('status') &&
|
|
474
|
-
this.hideFields.includes('trefwoorden'));
|
|
475
|
-
}
|
|
476
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentenApiMetadataModalComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.DocumentService }, { token: i3.DocumentenApiTagService }, { token: i4.FormBuilder }, { token: i5.KeycloakService }, { token: i6.ModalService }, { token: i7.TranslateService }, { token: i6.ValtimoModalService }, { token: i8.DocumentenApiVersionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
477
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DocumentenApiMetadataModalComponent, isStandalone: true, selector: "valtimo-documenten-api-metadata-modal", inputs: { disabled$: "disabled$", file$: "file$", hideFields: "hideFields", defaultValues: "defaultValues", disableAuthor: "disableAuthor", disableConfidentialityLevel: "disableConfidentialityLevel", disableDescription: "disableDescription", disableDocumentTitle: "disableDocumentTitle", disableDocumentType: "disableDocumentType", disableFilename: "disableFilename", disableLanguage: "disableLanguage", disableStatus: "disableStatus", supportsTrefwoorden: "supportsTrefwoorden", disableCreationDate: "disableCreationDate", isEditMode: "isEditMode", open: "open" }, outputs: { metadata: "metadata", modalClose: "modalClose" }, viewQueries: [{ propertyName: "metadataModal", first: true, predicate: ["metadataModal"], 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 #metadataModal\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n editDisabled: editDisabled$ | async,\n languageItems: languageItems$ | async,\n confidentialityLevelItems: confidentialityLevelItems$ | async,\n documentTypeItems: documentTypeItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async,\n open: open$ | async,\n additionalDate: additionalDocumentDate$ | async,\n } as obs\"\n [maxWidthPx]=\"1280\"\n (closeEvent)=\"closeModal()\"\n [cdsLayer]=\"1\"\n>\n <div role=\"header\">\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 </div>\n\n <div role=\"content\">\n @if (obs.open) {\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n }\n </div>\n\n <div role=\"footer\" class=\"metadata-modal-footer\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.editDisabled\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <form [formGroup]=\"documentenApiMetadataForm\">\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n @if (!hideFields.includes('bestandsnaam')) {\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]=\"defaultValues.bestandsnaam\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('auteur')) {\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]=\"defaultValues.auteur\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('taal')) {\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 [disabled]=\"obs.disabled || (languageDisabled$ | async)\"\n [appendInline]=\"true\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n @if (!hideFields.includes('vertrouwelijkheidaanduiding')) {\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-combo-box\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n id=\"vertrouwelijkheidaanduiding\"\n [appendInline]=\"true\"\n [disabled]=\"obs.disabled || (confidentialityLevelDisabled$ | async)\"\n (selected)=\"confidentialityLevelSelected($event)\"\n (clear)=\"confidentialityLevelFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.confidentialityLevelItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('informatieobjecttype')) {\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 || (informatieobjecttypeDisabled$ | async)\"\n id=\"informatieobjecttype\"\n [appendInline]=\"true\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\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]=\"obs.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 }\n @if (supportsTrefwoorden && !hideFields.includes('trefwoorden')) {\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 [appendInline]=\"true\"\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 @if (!hideFields.includes('titel')) {\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\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 }\n @if (!hideFields.includes('beschrijving')) {\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"false\"\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 }\n @if (!hideFields.includes('creatiedatum')) {\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 [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 }\n @if (!hideFields.includes('status')) {\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-combo-box\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || (statusDisabled$ | async)\"\n id=\"status\"\n [appendInline]=\"true\"\n (selected)=\"statusSelected($event)\"\n (clear)=\"statusFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'received'\"\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=\"obs.additionalDate === 'sent'\"\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 }\n </div>\n </div>\n </form>\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%}.metadata-modal-footer{display:flex;justify-content:flex-end}.metadata-modal-footer button{width: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", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "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", "hideLabel", "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: "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: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.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", "templateContext"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: VModalModule }, { kind: "component", type: i6.VModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter", "parentId"], outputs: ["closeEvent"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i9.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }] }); }
|
|
478
|
-
}
|
|
479
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentenApiMetadataModalComponent, decorators: [{
|
|
480
|
-
type: Component,
|
|
481
|
-
args: [{ selector: 'valtimo-documenten-api-metadata-modal', standalone: true, imports: [
|
|
482
|
-
ButtonModule,
|
|
483
|
-
CarbonInputModule,
|
|
484
|
-
ComboBoxModule,
|
|
485
|
-
CommonModule,
|
|
486
|
-
DatePickerModule,
|
|
487
|
-
DropdownModule,
|
|
488
|
-
IconModule,
|
|
489
|
-
InputLabelModule,
|
|
490
|
-
InputModule,
|
|
491
|
-
ModalModule,
|
|
492
|
-
RadioModule,
|
|
493
|
-
ReactiveFormsModule,
|
|
494
|
-
SelectModule,
|
|
495
|
-
TagModule,
|
|
496
|
-
TooltipModule,
|
|
497
|
-
TranslateModule,
|
|
498
|
-
VModalModule,
|
|
499
|
-
LayerModule,
|
|
500
|
-
], 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 #metadataModal\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n editDisabled: editDisabled$ | async,\n languageItems: languageItems$ | async,\n confidentialityLevelItems: confidentialityLevelItems$ | async,\n documentTypeItems: documentTypeItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async,\n open: open$ | async,\n additionalDate: additionalDocumentDate$ | async,\n } as obs\"\n [maxWidthPx]=\"1280\"\n (closeEvent)=\"closeModal()\"\n [cdsLayer]=\"1\"\n>\n <div role=\"header\">\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 </div>\n\n <div role=\"content\">\n @if (obs.open) {\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n }\n </div>\n\n <div role=\"footer\" class=\"metadata-modal-footer\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.editDisabled\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <form [formGroup]=\"documentenApiMetadataForm\">\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n @if (!hideFields.includes('bestandsnaam')) {\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]=\"defaultValues.bestandsnaam\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('auteur')) {\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]=\"defaultValues.auteur\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('taal')) {\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 [disabled]=\"obs.disabled || (languageDisabled$ | async)\"\n [appendInline]=\"true\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n @if (!hideFields.includes('vertrouwelijkheidaanduiding')) {\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-combo-box\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n id=\"vertrouwelijkheidaanduiding\"\n [appendInline]=\"true\"\n [disabled]=\"obs.disabled || (confidentialityLevelDisabled$ | async)\"\n (selected)=\"confidentialityLevelSelected($event)\"\n (clear)=\"confidentialityLevelFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.confidentialityLevelItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('informatieobjecttype')) {\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 || (informatieobjecttypeDisabled$ | async)\"\n id=\"informatieobjecttype\"\n [appendInline]=\"true\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\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]=\"obs.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 }\n @if (supportsTrefwoorden && !hideFields.includes('trefwoorden')) {\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 [appendInline]=\"true\"\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 @if (!hideFields.includes('titel')) {\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\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 }\n @if (!hideFields.includes('beschrijving')) {\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"false\"\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 }\n @if (!hideFields.includes('creatiedatum')) {\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 [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 }\n @if (!hideFields.includes('status')) {\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-combo-box\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || (statusDisabled$ | async)\"\n id=\"status\"\n [appendInline]=\"true\"\n (selected)=\"statusSelected($event)\"\n (clear)=\"statusFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'received'\"\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=\"obs.additionalDate === 'sent'\"\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 }\n </div>\n </div>\n </form>\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%}.metadata-modal-footer{display:flex;justify-content:flex-end}.metadata-modal-footer button{width: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"] }]
|
|
501
|
-
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.DocumentService }, { type: i3.DocumentenApiTagService }, { type: i4.FormBuilder }, { type: i5.KeycloakService }, { type: i6.ModalService }, { type: i7.TranslateService }, { type: i6.ValtimoModalService }, { type: i8.DocumentenApiVersionService }], propDecorators: { metadataModal: [{
|
|
502
|
-
type: ViewChild,
|
|
503
|
-
args: ['metadataModal']
|
|
504
|
-
}], disabled$: [{
|
|
505
|
-
type: Input
|
|
506
|
-
}], file$: [{
|
|
507
|
-
type: Input
|
|
508
|
-
}], hideFields: [{
|
|
509
|
-
type: Input
|
|
510
|
-
}], defaultValues: [{
|
|
511
|
-
type: Input
|
|
512
|
-
}], disableAuthor: [{
|
|
513
|
-
type: Input
|
|
514
|
-
}], disableConfidentialityLevel: [{
|
|
515
|
-
type: Input
|
|
516
|
-
}], disableDescription: [{
|
|
517
|
-
type: Input
|
|
518
|
-
}], disableDocumentTitle: [{
|
|
519
|
-
type: Input
|
|
520
|
-
}], disableDocumentType: [{
|
|
521
|
-
type: Input
|
|
522
|
-
}], disableFilename: [{
|
|
523
|
-
type: Input
|
|
524
|
-
}], disableLanguage: [{
|
|
525
|
-
type: Input
|
|
526
|
-
}], disableStatus: [{
|
|
527
|
-
type: Input
|
|
528
|
-
}], supportsTrefwoorden: [{
|
|
529
|
-
type: Input
|
|
530
|
-
}], disableCreationDate: [{
|
|
531
|
-
type: Input
|
|
532
|
-
}], isEditMode: [{
|
|
533
|
-
type: Input
|
|
534
|
-
}], open: [{
|
|
535
|
-
type: Input
|
|
536
|
-
}], metadata: [{
|
|
537
|
-
type: Output
|
|
538
|
-
}], modalClose: [{
|
|
539
|
-
type: Output
|
|
540
|
-
}] } });
|
|
541
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFVbkcsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxPQUFPLEVBQ1AsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBSXRFLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUlMLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsZ0JBQWdC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QkFBQyxlQUFlO2dCQUVqQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ08sYUFBYTtzQkFBekIsS0FBSztnQkFPTywyQkFBMkI7c0JBQXZDLEtBQUs7Z0JBT08sa0JBQWtCO3NCQUE5QixLQUFLO2dCQU9PLG9CQUFvQjtzQkFBaEMsS0FBSztnQkFPTyxtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBT08sZUFBZTtzQkFBM0IsS0FBSztnQkFPTyxlQUFlO3NCQUEzQixLQUFLO2dCQU9PLGFBQWE7c0JBQXpCLEtBQUs7Z0JBT0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNPLG1CQUFtQjtzQkFBL0IsS0FBSztnQkFPRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlPLElBQUk7c0JBQWhCLEtBQUs7Z0JBVUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEFkZGl0aW9uYWxEb2N1bWVudERhdGUsXG4gIENvbmZpZGVudGlhbGl0eUxldmVsLFxuICBEb2N1bWVudGVuQXBpTWV0YWRhdGEsXG4gIERvY3VtZW50TGFuZ3VhZ2UsXG4gIERvY3VtZW50U3RhdHVzLFxuICBTdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3RhcnRXaXRoLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtEb2N1bWVudFNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7S2V5Y2xvYWtTZXJ2aWNlfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcbmltcG9ydCB7dGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Hcm91cCxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgSW5wdXRMYWJlbE1vZHVsZSxcbiAgSW5wdXRNb2R1bGUsXG4gIE1vZGFsU2VydmljZSxcbiAgU2VsZWN0TW9kdWxlLFxuICBWYWx0aW1vTW9kYWxTZXJ2aWNlLFxuICBWTW9kYWxDb21wb25lbnQsXG4gIFZNb2RhbE1vZHVsZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbk1vZHVsZSxcbiAgQ29tYm9Cb3hNb2R1bGUsXG4gIERhdGVQaWNrZXJNb2R1bGUsXG4gIERyb3Bkb3duTW9kdWxlLFxuICBJY29uTW9kdWxlLFxuICBJbnB1dE1vZHVsZSBhcyBDYXJib25JbnB1dE1vZHVsZSxcbiAgTGF5ZXJNb2R1bGUsXG4gIExpc3RJdGVtLFxuICBNb2RhbE1vZHVsZSxcbiAgUmFkaW9Nb2R1bGUsXG4gIFRhZ01vZHVsZSxcbiAgVG9vbHRpcE1vZHVsZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlUYWdTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb2N1bWVudGVuLWFwaS10YWcuc2VydmljZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZERlZmF1bHRWYWx1ZXN9IGZyb20gJy4uLy4uL21vZGVscy9kb2N1bWVudGVuLWFwaS11cGxvYWQtZmllbGQubW9kZWwnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgQ2FyYm9uSW5wdXRNb2R1bGUsXG4gICAgQ29tYm9Cb3hNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIERhdGVQaWNrZXJNb2R1bGUsXG4gICAgRHJvcGRvd25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBJbnB1dExhYmVsTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIE1vZGFsTW9kdWxlLFxuICAgIFJhZGlvTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgU2VsZWN0TW9kdWxlLFxuICAgIFRhZ01vZHVsZSxcbiAgICBUb29sdGlwTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBWTW9kYWxNb2R1bGUsXG4gICAgTGF5ZXJNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdtZXRhZGF0YU1vZGFsJykgbWV0YWRhdGFNb2RhbDogVk1vZGFsQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIEBJbnB1dCgpIGZpbGUkITogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIEBJbnB1dCgpIGhpZGVGaWVsZHM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgQElucHV0KCkgZGVmYXVsdFZhbHVlczogRG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkRGVmYXVsdFZhbHVlcyA9IHt9O1xuICBASW5wdXQoKSBzZXQgZGlzYWJsZUF1dGhvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hdXRldXIuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmF1dGV1ci5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVDb25maWRlbnRpYWxpdHlMZXZlbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZURlc2NyaXB0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJlc2NocmlqdmluZy5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmVzY2hyaWp2aW5nLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZURvY3VtZW50VGl0bGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMudGl0ZWwuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRpdGVsLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZURvY3VtZW50VHlwZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZUZpbGVuYW1lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJlc3RhbmRzbmFhbS5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmVzdGFuZHNuYWFtLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZUxhbmd1YWdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlU3RhdHVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnN0YXR1c0Zvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0dXNGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc3VwcG9ydHNUcmVmd29vcmRlbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgZGlzYWJsZUNyZWF0aW9uRGF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jcmVhdGllZGF0dW0uZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyZWF0aWVkYXR1bS5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgaXNFZGl0TW9kZTogYm9vbGVhbjtcblxuICBwdWJsaWMgcmVhZG9ubHkgb3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBASW5wdXQoKSBzZXQgb3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMub3BlbiQubmV4dCh2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5Nb2RhbCh0aGlzLm1ldGFkYXRhTW9kYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5jbG9zZU1vZGFsKCk7XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIG1ldGFkYXRhOiBFdmVudEVtaXR0ZXI8RG9jdW1lbnRlbkFwaU1ldGFkYXRhPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG1vZGFsQ2xvc2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgZmlsZW5hbWVFeHRlbnNpb246IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybTogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgYmVzdGFuZHNuYWFtOiB0aGlzLmZiLmNvbnRyb2woJycpLFxuICAgIHRpdGVsOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGF1dGV1cjogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBiZXNjaHJpanZpbmc6IHRoaXMuZmIuY29udHJvbCgnJyksXG4gICAgdGFhbDogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBpbmZvcm1hdGllb2JqZWN0dHlwZTogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBzdGF0dXM6IHRoaXMuZmIuY29udHJvbCgnJyksXG4gICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nOiB0aGlzLmZiLmNvbnRyb2woJycpLFxuICAgIGNyZWF0aWVkYXR1bTogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBvbnR2YW5nc3RkYXR1bTogdGhpcy5mYi5jb250cm9sKCcnKSxcbiAgICB2ZXJ6ZW5kZGF0dW06IHRoaXMuZmIuY29udHJvbCgnJyksXG4gICAgdHJlZndvb3JkZW46IHRoaXMuZmIuY29udHJvbChbXSksXG4gIH0pO1xuXG4gIHB1YmxpYyBnZXQgY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3ZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZycpO1xuICB9XG4gIHB1YmxpYyBnZXQgY29uZmlkZW50aWFsaXR5TGV2ZWxEaXNhYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2wuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ2luZm9ybWF0aWVvYmplY3R0eXBlJyk7XG4gIH1cbiAgcHVibGljIGdldCBpbmZvcm1hdGllb2JqZWN0dHlwZURpc2FibGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKCgpID0+IHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgndGFhbCcpO1xuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZURpc2FibGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKCgpID0+IHRoaXMubGFuZ3VhZ2VGb3JtQ29udHJvbC5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGF0dXNGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3N0YXR1cycpO1xuICB9XG4gIHB1YmxpYyBnZXQgc3RhdHVzRGlzYWJsZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKCgpID0+IHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWdGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgndHJlZndvb3JkZW4nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3JlYXRpZWRhdHVtKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgnY3JlYXRpZWRhdHVtJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRpdGVsKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgndGl0ZWwnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYmVzY2hyaWp2aW5nKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgnYmVzY2hyaWp2aW5nJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF1dGV1cigpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ2F1dGV1cicpO1xuICB9XG5cbiAgcHVibGljIGdldCBiZXN0YW5kc25hYW0oKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCdiZXN0YW5kc25hYW0nKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBlZGl0RGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IENPTkZJREVOVElBTElUWV9MRVZFTFM6IEFycmF5PENvbmZpZGVudGlhbGl0eUxldmVsPiA9IFtcbiAgICAnb3BlbmJhYXInLFxuICAgICdiZXBlcmt0X29wZW5iYWFyJyxcbiAgICAnaW50ZXJuJyxcbiAgICAnemFha3ZlcnRyb3V3ZWxpamsnLFxuICAgICd2ZXJ0cm91d2VsaWprJyxcbiAgICAnY29uZmlkZW50aWVlbCcsXG4gICAgJ2dlaGVpbScsXG4gICAgJ3plZXJfZ2VoZWltJyxcbiAgXTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZGVudGlhbGl0eUxldmVsSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgodGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLnZhbHVlKVxuICAgICksXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbY3VycmVudENvbmZpZGVudGlhbGl0eUxldmVsXSkgPT5cbiAgICAgIHRoaXMuQ09ORklERU5USUFMSVRZX0xFVkVMUy5tYXAoY29uZmlkZW50aWFsaXR5TGV2ZWwgPT4gKHtcbiAgICAgICAgaWQ6IGNvbmZpZGVudGlhbGl0eUxldmVsLFxuICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZG9jdW1lbnQuJHtjb25maWRlbnRpYWxpdHlMZXZlbH1gKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGN1cnJlbnRDb25maWRlbnRpYWxpdHlMZXZlbCA9PT0gY29uZmlkZW50aWFsaXR5TGV2ZWwsXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IEFERElUT05BTF9ET0NVTUVOVF9EQVRFX09QVElPTlM6IEFycmF5PHtcbiAgICB2YWx1ZTogQWRkaXRpb25hbERvY3VtZW50RGF0ZTtcbiAgICB0cmFuc2xhdGlvbktleTogc3RyaW5nO1xuICB9PiA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogJ25laXRoZXInLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdkb2N1bWVudC5ub0FkZGl0aW9uYWxEYXRlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnc2VudCcsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2RvY3VtZW50LnNlbmREYXRlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAncmVjZWl2ZWQnLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdkb2N1bWVudC5yZWNlaXB0RGF0ZScsXG4gICAgfSxcbiAgXTtcbiAgcHVibGljIHJlYWRvbmx5IGNsZWFyU3RhdHVzU2VsZWN0aW9uJCA9IG5ldyBTdWJqZWN0PG51bGw+KCk7XG4gIHB1YmxpYyByZWFkb25seSBhZGRpdGlvbmFsRG9jdW1lbnREYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWRkaXRpb25hbERvY3VtZW50RGF0ZT4oJ25laXRoZXInKTtcbiAgcHVibGljIHJlYWRvbmx5IFNUQVRVU0VTOiBBcnJheTxEb2N1bWVudFN0YXR1cz4gPSBbXG4gICAgJ2luX2Jld2Vya2luZycsXG4gICAgJ3Rlcl92YXN0c3RlbGxpbmcnLFxuICAgICdkZWZpbml0aWVmJyxcbiAgICAnZ2VhcmNoaXZlZXJkJyxcbiAgXTtcbiAgcHVibGljIHJlYWRvbmx5IFJFQ0VJUFRfU1RBVFVTRVM6IEFycmF5PERvY3VtZW50U3RhdHVzPiA9IFsnZGVmaW5pdGllZicsICdnZWFyY2hpdmVlcmQnXTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1EYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9jdW1lbnRlbkFwaU1ldGFkYXRhPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0l0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJCxcbiAgICB0aGlzLnN0YXR1c0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnN0YXR1c0Zvcm1Db250cm9sLnZhbHVlKSksXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgdGFwKChbYWRkaXRpb25hbERvY3VtZW50RGF0ZSwgY3VycmVudFN0YXR1c10pID0+IHtcbiAgICAgIHRoaXMuZm9ybURhdGEkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcihmb3JtRGF0YSA9PiAhIWZvcm1EYXRhKSxcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShmb3JtRGF0YSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYWRkaXRpb25hbERvY3VtZW50RGF0ZSA9PT0gJ3JlY2VpdmVkJyAmJlxuICAgICAgICAgICAgKGZvcm1EYXRhLnN0YXR1cyA9PT0gJ2luX2Jld2Vya2luZycgfHwgZm9ybURhdGEuc3RhdHVzID09PSAndGVyX3Zhc3RzdGVsbGluZycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU3RhdHVzU2VsZWN0aW9uJC5uZXh0KG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSksXG4gICAgbWFwKChbYWRkaXRpb25hbERvY3VtZW50RGF0ZSwgY3VycmVudFN0YXR1c10pID0+XG4gICAgICAoYWRkaXRpb25hbERvY3VtZW50RGF0ZSA9PT0gJ3JlY2VpdmVkJyA/IHRoaXMuUkVDRUlQVF9TVEFUVVNFUyA6IHRoaXMuU1RBVFVTRVMpLm1hcChcbiAgICAgICAgc3RhdHVzID0+ICh7XG4gICAgICAgICAgaWQ6IHN0YXR1cyxcbiAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZG9jdW1lbnQuJHtzdGF0dXN9YCksXG4gICAgICAgICAgc2VsZWN0ZWQ6IGN1cnJlbnRTdGF0dXMgPT09IHN0YXR1cyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhZ0l0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy52YWx0aW1vTW9kYWxTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgIHRoaXMudGFnRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMudGFnRm9ybUNvbnRyb2wudmFsdWUpKSxcbiAgXSkucGlwZShcbiAgICBmaWx0ZXIoKFtkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT4gISFkb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lLCB0YWdGb3JtQ29udHJvbFZhbHVlXSkgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlUYWdTZXJ2aWNlLmdldFRhZ3MoZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICAgIG9mKHRhZ0Zvcm1Db250cm9sVmFsdWUpLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW3RhZ3MsIHRhZ0Zvcm1Db250cm9sVmFsdWVdKSA9PlxuICAgICAgdGFncy5tYXAodGFnID0+ICh7XG4gICAgICAgIGlkOiB0YWcudmFsdWUsXG4gICAgICAgIGNvbnRlbnQ6IHRhZy52YWx1ZSxcbiAgICAgICAgc2VsZWN0ZWQ6ICEhdGFnRm9ybUNvbnRyb2xWYWx1ZSA/IHRhZ0Zvcm1Db250cm9sVmFsdWUuaW5jbHVkZXModGFnLnZhbHVlKSA6IGZhbHNlLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBMQU5HVUFHRVM6IEFycmF5PERvY3VtZW50TGFuZ3VhZ2U+ID0gWydubGQnLCAnZW5nJywgJ2RldSddO1xuICBwdWJsaWMgbGFuZ3VhZ2VJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMubGFuZ3VhZ2VGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5sYW5ndWFnZUZvcm1Db250cm9sLnZhbHVlKSksXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbY3VycmVudExhbmd1YWdlXSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuTEFOR1VBR0VTLm1hcChcbiAgICAgICAgKGxhbmd1YWdlOiBhbnkpID0+XG4gICAgICAgICAgKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBkb2N1bWVudC4ke2xhbmd1YWdlfWApLFxuICAgICAgICAgICAgaWQ6IGxhbmd1YWdlLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGN1cnJlbnRMYW5ndWFnZSA9PT0gbGFuZ3VhZ2UsXG4gICAgICAgICAgfSkgYXMgTGlzdEl0ZW1cbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnRUeXBlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnZhbHRpbW9Nb2RhbFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC52YWx1ZSlcbiAgICApLFxuICBdKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGluZm9ybWF0aWVvYmplY3R0eXBlVmFsdWVdKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50VHlwZXMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICAgIG9mKGluZm9ybWF0aWVvYmplY3R0eXBlVmFsdWUpLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW2RvY3VtZW50VHlwZXMsIGluZm9ybWF0aWVvYmplY3R0eXBlVmFsdWVdKSA9PlxuICAgICAgZG9jdW1lbnRUeXBlcy5tYXAoKHR5cGU6IGFueSkgPT4gKHtcbiAgICAgICAgaWQ6IHR5cGUudXJsLFxuICAgICAgICBjb250ZW50OiB0eXBlLm5hbWUsXG4gICAgICAgIHNlbGVjdGVkOiBpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlID09PSB0eXBlLnVybCxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXJFbWFpbCQgPSBmcm9tKHRoaXMua2V5Y2xvYWtTZXJ2aWNlLmxvYWRVc2VyUHJvZmlsZSgpKS5waXBlKFxuICAgIG1hcCh1c2VyUHJvZmlsZSA9PiB1c2VyUHJvZmlsZT8uZW1haWwgfHwgJycpXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJDogT2JzZXJ2YWJsZTxTdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXM+ID1cbiAgICB0aGlzLnZhbHRpbW9Nb2RhbFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlLmdldFN1cHBvcnRlZEFwaUZlYXR1cmVzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICApXG4gICAgKTtcblxuICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9maWxlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9maWxlTmFtZUFuZEF1dGhvclN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRlbkFwaVRhZ1NlcnZpY2U6IERvY3VtZW50ZW5BcGlUYWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5Y2xvYWtTZXJ2aWNlOiBLZXljbG9ha1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWx0aW1vTW9kYWxTZXJ2aWNlOiBWYWx0aW1vTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlOiBEb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5GaWxlU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5vcGVuRGlzYWJsZWRTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5GaWxlbmFtZVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlbkRvY3VtZW50RGVmaW5pdGlvblN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9maWxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2ZpbGVOYW1lQW5kQXV0aG9yU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZWRpdERpc2FibGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBsYW5ndWFnZVNlbGVjdGVkKGV2ZW50OiB7aXRlbToge2lkOiBzdHJpbmd9fSkge1xuICAgIGlmIChldmVudC5pdGVtLmlkKSB7XG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHRhYWw6IGV2ZW50Lml0ZW0uaWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdGFnc1NlbGVjdGVkKGV2ZW50OiBBcnJheTxMaXN0SXRlbT4pIHtcbiAgICB0aGlzLnRhZ0Zvcm1Db250cm9sLnBhdGNoVmFsdWUoZXZlbnQuZmlsdGVyKHRhZyA9PiB0YWcuc2VsZWN0ZWQpLm1hcCh0YWcgPT4gdGFnLmlkKSk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlkZW50aWFsaXR5TGV2ZWxTZWxlY3RlZChldmVudDoge2lkOiBzdHJpbmd9KSB7XG4gICAgaWYgKGV2ZW50LmlkKSB7XG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZzogZXZlbnQuaWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdHVzU2VsZWN0ZWQoZXZlbnQ6IHtpZDogc3RyaW5nfSkge1xuICAgIGlmIChldmVudC5pZCkge1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBzdGF0dXM6IGV2ZW50LmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluZm9ybWF0aWVvYmplY3R0eXBlU2VsZWN0ZWQoZXZlbnQ6IHtpdGVtOiB7aWQ6IHN0cmluZ319KSB7XG4gICAgaWYgKGV2ZW50Lml0ZW0uaWQpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgaW5mb3JtYXRpZW9iamVjdHR5cGU6IGV2ZW50Lml0ZW0uaWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJlZmlsbEZvcm0oZmlsZSkge1xuICAgIHRoaXMucHJlZmlsbEZpbGVuYW1lQW5kQXV0aG9yKCk7XG5cbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBiZXNjaHJpanZpbmcsXG4gICAgICAgIHRhYWwsXG4gICAgICAgIGluZm9ybWF0aWVvYmplY3R0eXBlLFxuICAgICAgICBzdGF0dXMsXG4gICAgICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZyxcbiAgICAgICAgb250dmFuZ3N0ZGF0dW0sXG4gICAgICAgIHZlcnplbmRkYXR1bSxcbiAgICAgICAgdHJlZndvb3JkZW4sXG4gICAgICB9ID0gZmlsZTtcblxuICAgICAgaWYgKHZlcnplbmRkYXR1bSkgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCdzZW50Jyk7XG4gICAgICBlbHNlIGlmIChvbnR2YW5nc3RkYXR1bSkgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCdyZWNlaXZlZCcpO1xuICAgICAgZWxzZSB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLm5leHQoJ25laXRoZXInKTtcblxuICAgICAgY29uc3QgcHJlZmlsbFN0YXR1cyA9IHN0YXR1cyB8fCB0aGlzLmRlZmF1bHRWYWx1ZXMuc3RhdHVzO1xuICAgICAgY29uc3QgdmFsaWRQcmVmaWxsU3RhdHVzID0gdGhpcy5TVEFUVVNFUy5pbmNsdWRlcyhwcmVmaWxsU3RhdHVzKSA/IHByZWZpbGxTdGF0dXMgOiAnJztcblxuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBiZXNjaHJpanZpbmc6IGJlc2NocmlqdmluZyB8fCB0aGlzLmRlZmF1bHRWYWx1ZXMuYmVzY2hyaWp2aW5nLFxuICAgICAgICB0YWFsOiB0YWFsIHx8IHRoaXMuZGVmYXVsdFZhbHVlcy50YWFsLFxuICAgICAgICBpbmZvcm1hdGllb2JqZWN0dHlwZTogaW5mb3JtYXRpZW9iamVjdHR5cGUgfHwgdGhpcy5kZWZhdWx0VmFsdWVzLmluZm9ybWF0aWVvYmplY3R0eXBlLFxuICAgICAgICBzdGF0dXM6IHZhbGlkUHJlZmlsbFN0YXR1cyxcbiAgICAgICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nOlxuICAgICAgICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZyB8fCB0aGlzLmRlZmF1bHRWYWx1ZXMudmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nLFxuICAgICAgICBvbnR2YW5nc3RkYXR1bTogb250dmFuZ3N0ZGF0dW0gPyBuZXcgRGF0ZShvbnR2YW5nc3RkYXR1bSkgOiBudWxsLFxuICAgICAgICB2ZXJ6ZW5kZGF0dW06IHZlcnplbmRkYXR1bSA/IG5ldyBEYXRlKHZlcnplbmRkYXR1bSkgOiBudWxsLFxuICAgICAgICB0cmVmd29vcmRlbjogdHJlZndvb3JkZW4gfHwgdGhpcy5kZWZhdWx0VmFsdWVzLnRyZWZ3b29yZGVuLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtYXREYXRlKCdjcmVhdGllZGF0dW0nKTtcbiAgICB0aGlzLmZvcm1hdERhdGUoJ3ZlcnplbmRkYXR1bScpO1xuICAgIHRoaXMuZm9ybWF0RGF0ZSgnb250dmFuZ3N0ZGF0dW0nKTtcblxuICAgIGNvbnN0IHJhd1ZhbHVlID0gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgY29uc3QgbWFwcGVkUmF3VmFsdWUgPSBPYmplY3Qua2V5cyhyYXdWYWx1ZSkucmVkdWNlKFxuICAgICAgKGFjYywgY3VycmVudEtleSkgPT5cbiAgICAgICAgcmF3VmFsdWVbY3VycmVudEtleV0gIT09IHVuZGVmaW5lZCA/IHsuLi5hY2MsIFtjdXJyZW50S2V5XTogcmF3VmFsdWVbY3VycmVudEtleV19IDogYWNjLFxuICAgICAge31cbiAgICApIGFzIERvY3VtZW50ZW5BcGlNZXRhZGF0YTtcblxuICAgIGlmICh0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0udmFsaWQpIHRoaXMubWV0YWRhdGEuZW1pdChtYXBwZWRSYXdWYWx1ZSk7XG5cbiAgICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmNsb3NlTW9kYWwoKCkgPT4ge1xuICAgICAgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCduZWl0aGVyJyk7XG4gICAgICB0aGlzLm1vZGFsQ2xvc2UuZW1pdCgpO1xuICAgICAgdGhpcy5jbGVhckZvcm0oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5yZXNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVmaWxsRmlsZW5hbWVBbmRBdXRob3IoKSB7XG4gICAgdGhpcy5fZmlsZU5hbWVBbmRBdXRob3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fZmlsZU5hbWVBbmRBdXRob3JTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbGUkLCB0aGlzLnVzZXJFbWFpbCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoW2ZpbGUsIHVzZXJFbWFpbF0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGZpbGU/LmJlc3RhbmRzbmFhbSB8fCB0aGlzLmRlZmF1bHRWYWx1ZXMuYmVzdGFuZHNuYWFtIHx8IGZpbGU/Lm5hbWU7XG4gICAgICAgICAgdGhpcy5maWxlbmFtZUV4dGVuc2lvbiA9IGZpbGVuYW1lPy5zcGxpdCgnLicpPy5wb3AoKSB8fCAnJztcbiAgICAgICAgICBpZiAodGhpcy5maWxlbmFtZUV4dGVuc2lvbi5sZW5ndGggPT09IGZpbGVuYW1lPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZW5hbWVFeHRlbnNpb24gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgYmVzdGFuZHNuYWFtOiBmaWxlbmFtZSxcbiAgICAgICAgICAgIGF1dGV1cjogZmlsZT8uYXV0ZXVyIHx8IHRoaXMuZGVmYXVsdFZhbHVlcy5hdXRldXIgfHwgdXNlckVtYWlsLFxuICAgICAgICAgICAgY3JlYXRpZWRhdHVtOiBmaWxlPy5jcmVhdGllZGF0dW0gfHwgbmV3IERhdGUoRGF0ZS5ub3coKSksXG4gICAgICAgICAgICB0aXRlbDpcbiAgICAgICAgICAgICAgZmlsZT8udGl0ZWwgfHxcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzLnRpdGVsIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsZW5hbWVUb1RpdGxlKGZpbGU/Lm5hbWUgfHwgdGhpcy5kZWZhdWx0VmFsdWVzLmJlc3RhbmRzbmFhbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHRoaXMuYXJlQWxsRmllbGRzSGlkZGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsZW5hbWVUb1RpdGxlKGZpbGVuYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKCFmaWxlbmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJyAnKTtcbiAgICByZXR1cm4gZmlsZW5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBmaWxlbmFtZS5zbGljZSgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShjb250cm9sTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5jb250cm9sc1tjb250cm9sTmFtZV07XG4gICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgW2NvbnRyb2xOYW1lXTogdGhpcy50b0Zvcm1hdHRlZERhdGUoY29udHJvbC52YWx1ZSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvRm9ybWF0dGVkRGF0ZShkYXRlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlsZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9maWxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICh0aGlzLmZpbGUkKSB7XG4gICAgICB0aGlzLl9maWxlU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZmlsZSQsXG4gICAgICAgIHRoaXMuX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQsXG4gICAgICBdKS5zdWJzY3JpYmUoKFtmaWxlLCBzdXBwb3J0XSkgPT4ge1xuICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgIHRoaXMucHJlZmlsbEZvcm0oZmlsZSk7XG4gICAgICAgICAgdGhpcy5lZGl0RGlzYWJsZWQkLm5leHQoXG4gICAgICAgICAgICAhc3VwcG9ydC5zdXBwb3J0c1VwZGF0aW5nRGVmaW5pdGl2ZURvY3VtZW50ICYmXG4gICAgICAgICAgICAgIGZpbGUuc3RhdHVzID09PSAnZGVmaW5pdGllZicgJiZcbiAgICAgICAgICAgICAgdGhpcy5pc0VkaXRNb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5EaXNhYmxlZFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZGlzYWJsZWQkPy5zdWJzY3JpYmUoZGlzYWJsZWQgPT4ge1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlsZW5hbWVTdWJzY3JpcHRpb24oKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmJlc3RhbmRzbmFhbS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGJlc3RhbmRzbmFhbSA9PiB7XG4gICAgICAgIGlmIChiZXN0YW5kc25hYW0gJiYgdGhpcy5maWxlbmFtZUV4dGVuc2lvbikge1xuICAgICAgICAgIGxldCBjb3JyZWN0QmVzdGFuZHNuYWFtID1cbiAgICAgICAgICAgIGJlc3RhbmRzbmFhbS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpICsgJy4nICsgdGhpcy5maWxlbmFtZUV4dGVuc2lvbjtcbiAgICAgICAgICBpZiAoY29ycmVjdEJlc3RhbmRzbmFhbSAhPSBiZXN0YW5kc25hYW0pIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgYmVzdGFuZHNuYWFtOiBjb3JyZWN0QmVzdGFuZHNuYWFtLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Eb2N1bWVudERlZmluaXRpb25TdWJzY3JpcHRpb24oKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnJvdXRlPy5wYXJhbXMgfHwgb2YobnVsbCksIHRoaXMucm91dGU/LmZpcnN0Q2hpbGQ/LnBhcmFtcyB8fCBvZihudWxsKV0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChcbiAgICAgICAgICAgIChbcGFyYW1zLCBmaXJzdENoaWxkUGFyYW1zXSkgPT5cbiAgICAgICAgICAgICAgKHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fCBmaXJzdENoaWxkUGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSBhcyBzdHJpbmdcbiAgICAgICAgICApLFxuICAgICAgICAgIGZpbHRlcihkb2N1bWVudERlZmluaXRpb25OYW1lID0+ICEhZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgICB0aGlzLnZhbHRpbW9Nb2RhbFNlcnZpY2Uuc2V0RG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWRkaXRpb25hbERhdGUodmFsdWU6IEFkZGl0aW9uYWxEb2N1bWVudERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcmVBbGxGaWVsZHNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygnYWFudnVsbGVuZGVEYXR1bScpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ2F1dGV1cicpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ3ZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZycpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ2NyZWF0aWVkYXR1bScpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ2Jlc2NocmlqdmluZycpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ3RpdGVsJykgJiZcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygnaW5mb3JtYXRpZW9iamVjdHR5cGUnKSAmJlxuICAgICAgdGhpcy5oaWRlRmllbGRzLmluY2x1ZGVzKCdiZXN0YW5kc25hYW0nKSAmJlxuICAgICAgdGhpcy5oaWRlRmllbGRzLmluY2x1ZGVzKCd0YWFsJykgJiZcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygnc3RhdHVzJykgJiZcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygndHJlZndvb3JkZW4nKVxuICAgICk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPHYtbW9kYWxcbiAgI21ldGFkYXRhTW9kYWxcbiAgKm5nSWY9XCJ7XG4gICAgZmlsZTogZmlsZSQgfCBhc3luYyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQkIHwgYXN5bmMsXG4gICAgZWRpdERpc2FibGVkOiBlZGl0RGlzYWJsZWQkIHwgYXN5bmMsXG4gICAgbGFuZ3VhZ2VJdGVtczogbGFuZ3VhZ2VJdGVtcyQgfCBhc3luYyxcbiAgICBjb25maWRlbnRpYWxpdHlMZXZlbEl0ZW1zOiBjb25maWRlbnRpYWxpdHlMZXZlbEl0ZW1zJCB8IGFzeW5jLFxuICAgIGRvY3VtZW50VHlwZUl0ZW1zOiBkb2N1bWVudFR5cGVJdGVtcyQgfCBhc3luYyxcbiAgICBzdGF0dXNJdGVtczogc3RhdHVzSXRlbXMkIHwgYXN5bmMsXG4gICAgdGFnSXRlbXM6IHRhZ0l0ZW1zJCB8IGFzeW5jLFxuICAgIHVzZXJFbWFpbDogdXNlckVtYWlsJCB8IGFzeW5jLFxuICAgIG9wZW46IG9wZW4kIHwgYXN5bmMsXG4gICAgYWRkaXRpb25hbERhdGU6IGFkZGl0aW9uYWxEb2N1bWVudERhdGUkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbiAgW21heFdpZHRoUHhdPVwiMTI4MFwiXG4gIChjbG9zZUV2ZW50KT1cImNsb3NlTW9kYWwoKVwiXG4gIFtjZHNMYXllcl09XCIxXCJcbj5cbiAgPGRpdiByb2xlPVwiaGVhZGVyXCI+XG4gICAgQGlmIChpc0VkaXRNb2RlKSB7XG4gICAgICA8aDMgY2RzTW9kYWxIZWFkZXJIZWFkaW5nPlxuICAgICAgICB7eyAnZG9jdW1lbnQuZWRpdE1ldGFkYXRhJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9oMz5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7ICdkb2N1bWVudC5maWxsSW5NZXRhZGF0YScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvaDM+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IHJvbGU9XCJjb250ZW50XCI+XG4gICAgQGlmIChvYnMub3Blbikge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1ldGFkYXRhRm9ybTsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdiByb2xlPVwiZm9vdGVyXCIgY2xhc3M9XCJtZXRhZGF0YS1tb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNkc0J1dHRvbj1cImdob3N0XCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIj5cbiAgICAgIHt7ICdkb2N1bWVudC5jYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAhZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS52YWxpZCB8fCBvYnMuZWRpdERpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgID5cbiAgICAgIHt7ICdkb2N1bWVudC5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdi1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNtZXRhZGF0YUZvcm0gbGV0LW9icz1cIm9ic1wiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtbnMtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtblwiPlxuICAgICAgICBAaWYgKCFoaWRlRmllbGRzLmluY2x1ZGVzKCdiZXN0YW5kc25hYW0nKSkge1xuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbCBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5maWxlbmFtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5maWxlbmFtZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImRlZmF1bHRWYWx1ZXMuYmVzdGFuZHNuYWFtXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5maWxlbmFtZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBpZD1cImJlc3RhbmRzbmFhbVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJlc3RhbmRzbmFhbVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnYXV0ZXVyJykpIHtcbiAgICAgICAgICA8Y2RzLXRleHQtbGFiZWwgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuYXV0aG9yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmF1dGhvclRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImRlZmF1bHRWYWx1ZXMuYXV0ZXVyXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5hdXRob3JQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgaWQ9XCJhdXRldXJcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhdXRldXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWhpZGVGaWVsZHMuaW5jbHVkZXMoJ3RhYWwnKSkge1xuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5sYW5ndWFnZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5sYW5ndWFnZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IChsYW5ndWFnZURpc2FibGVkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQubGFuZ3VhZ2VQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBpZD1cImxhbmd1YWdlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImxhbmd1YWdlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwib2JzLmxhbmd1YWdlSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygndmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nJykpIHtcbiAgICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmNvbmZpZGVudGlhbGl0eUxldmVsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmNvbmZpZGVudGlhbGl0eUxldmVsVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1jb21iby1ib3hcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5jb25maWRlbnRpYWxpdHlQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBpZD1cInZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZ1wiXG4gICAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgKGNvbmZpZGVudGlhbGl0eUxldmVsRGlzYWJsZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNvbmZpZGVudGlhbGl0eUxldmVsU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGVhcik9XCJjb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMuY29uZmlkZW50aWFsaXR5TGV2ZWxJdGVtcyB8fCBbXVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgICA8L2Nkcy1jb21iby1ib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnaW5mb3JtYXRpZW9iamVjdHR5cGUnKSkge1xuICAgICAgICAgIDxjZHMtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tLWxlZnQnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDwvY2RzLWxhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLWRyb3Bkb3duXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IChpbmZvcm1hdGllb2JqZWN0dHlwZURpc2FibGVkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgIGlkPVwiaW5mb3JtYXRpZW9iamVjdHR5cGVcIlxuICAgICAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiaW5mb3JtYXRpZW9iamVjdHR5cGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMuZG9jdW1lbnRUeXBlSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnYWFudnVsbGVuZGVEYXR1bScpKSB7XG4gICAgICAgICAgPGNkcy10ZXh0LWxhYmVsIG5hbWU9XCInYWRkaXRpb25hbERhdGUnXCI+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuYWRkaXRpb25hbERhdGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuYWRkaXRpb25hbERhdGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tLWxlZnQnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgPGNkcy1yYWRpby1ncm91cCBbb3JpZW50YXRpb25dPVwiJ2hvcml6b250YWwnXCIgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLXJhZGlvXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgQURESVRPTkFMX0RPQ1VNRU5UX0RBVEVfT1BUSU9OU1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJvYnMuYWRkaXRpb25hbERhdGUgPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEFkZGl0aW9uYWxEYXRlKG9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICBuYW1lPVwicmFkaW8taW5saW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLnRyYW5zbGF0aW9uS2V5IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Nkcy1yYWRpbz5cbiAgICAgICAgICA8L2Nkcy1yYWRpby1ncm91cD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHN1cHBvcnRzVHJlZndvb3JkZW4gJiYgIWhpZGVGaWVsZHMuaW5jbHVkZXMoJ3RyZWZ3b29yZGVuJykpIHtcbiAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQudGFncycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC50YWdzVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLWNvbWJvLWJveFxuICAgICAgICAgICAgICBbdHlwZV09XCInbXVsdGknXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC50YWdzUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCBvYnMudGFnSXRlbXM/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJ0YWdzU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMudGFnSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtY29tYm8tYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhdGEtZm9ybS1jb2x1bW5cIj5cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygndGl0ZWwnKSkge1xuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5pbnB1dFRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuaW5wdXRUaXRsZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIlxuICAgICAgICAgICAgICBpZD1cInRpdGVsXCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0ZWxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5pbnB1dFRpdGxlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFoaWRlRmllbGRzLmluY2x1ZGVzKCdiZXNjaHJpanZpbmcnKSkge1xuICAgICAgICAgIDxjZHMtdGV4dGFyZWEtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuaW5wdXREZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmlucHV0RGVzY3JpcHRpb25QbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcm93c109XCI1XCJcbiAgICAgICAgICAgICAgY2RzVGV4dEFyZWFcbiAgICAgICAgICAgICAgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWRlc2NyaXB0aW9uLWlucHV0IGRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIlxuICAgICAgICAgICAgICBpZD1cImJlc2NocmlqdmluZ1wiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJlc2NocmlqdmluZ1wiXG4gICAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5pbnB1dERlc2NyaXB0aW9uVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtdGV4dGFyZWEtbGFiZWw+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnY3JlYXRpZWRhdHVtJykpIHtcbiAgICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmNyZWF0aW9uRGF0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5jcmVhdGlvbkRhdGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICAgIDxjZHMtZGF0ZS1waWNrZXJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0RELU1NLVlZWVknXCJcbiAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZC1tLVknXCJcbiAgICAgICAgICAgICAgICBpZD1cImNyZWF0aWVkYXR1bVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JlYXRpZWRhdHVtXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Nkcy1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvY2RzLWxhYmVsPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWhpZGVGaWVsZHMuaW5jbHVkZXMoJ3N0YXR1cycpKSB7XG4gICAgICAgICAgPGNkcy1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5zdGF0dXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuc3RhdHVzVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICAgIDxjZHMtY29tYm8tYm94XG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuc3RhdHVzUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAoc3RhdHVzRGlzYWJsZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgaWQ9XCJzdGF0dXNcIlxuICAgICAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwic3RhdHVzU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGVhcik9XCJzdGF0dXNGb3JtQ29udHJvbC5zZXRWYWx1ZShudWxsKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwib2JzLnN0YXR1c0l0ZW1zIHx8IFtdXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgICAgIDwvY2RzLWNvbWJvLWJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFoaWRlRmllbGRzLmluY2x1ZGVzKCdhYW52dWxsZW5kZURhdHVtJykpIHtcbiAgICAgICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAqbmdJZj1cIm9icy5hZGRpdGlvbmFsRGF0ZSA9PT0gJ3JlY2VpdmVkJ1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0RELU1NLVlZWVknXCJcbiAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkLW0tWSdcIlxuICAgICAgICAgICAgaWQ9XCJvbnR2YW5nc3RkYXR1bVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvbnR2YW5nc3RkYXR1bVwiXG4gICAgICAgICAgPjwvY2RzLWRhdGUtcGlja2VyPlxuICAgICAgICAgIDxjZHMtZGF0ZS1waWNrZXJcbiAgICAgICAgICAgICpuZ0lmPVwib2JzLmFkZGl0aW9uYWxEYXRlID09PSAnc2VudCdcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidkb2N1bWVudC5hZGRpdGlvbmFsRGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidERC1NTS1ZWVlZJ1wiXG4gICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZC1tLVknXCJcbiAgICAgICAgICAgIGlkPVwidmVyemVuZGRhdHVtXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZlcnplbmRkYXR1bVwiXG4gICAgICAgICAgPjwvY2RzLWRhdGUtcGlja2VyPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|