@valtimo/connector-management 4.15.2-next-main.8
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/README.md +24 -0
- package/bundles/valtimo-connector-management.umd.js +2087 -0
- package/bundles/valtimo-connector-management.umd.js.map +1 -0
- package/bundles/valtimo-connector-management.umd.min.js +16 -0
- package/bundles/valtimo-connector-management.umd.min.js.map +1 -0
- package/esm2015/lib/components/add-connector/add-connector.component.js +79 -0
- package/esm2015/lib/components/connector-link-extension/connector-link-extension.component.js +95 -0
- package/esm2015/lib/components/connector-link-extension-modal/connector-link-extension-modal.component.js +136 -0
- package/esm2015/lib/components/connector-management/connector-management.component.js +95 -0
- package/esm2015/lib/components/connector-modal/connector-modal.component.js +58 -0
- package/esm2015/lib/components/edit-connector-form/edit-connector-form.component.js +42 -0
- package/esm2015/lib/components/edit-connector-properties/edit-connector-properties.component.js +140 -0
- package/esm2015/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.component.js +177 -0
- package/esm2015/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.form.js +494 -0
- package/esm2015/lib/components/modify-connector/modify-connector.component.js +73 -0
- package/esm2015/lib/components/multi-value-connector-property/multi-value-connector-property.component.js +92 -0
- package/esm2015/lib/connector-management-routing.js +44 -0
- package/esm2015/lib/connector-management.module.js +76 -0
- package/esm2015/lib/extension/connector-management.extension.init.js +39 -0
- package/esm2015/lib/services/connector-management/connector-management.service.js +60 -0
- package/esm2015/lib/services/connector-management-state/connector-management-state.service.js +83 -0
- package/esm2015/lib/services/object-api-sync/object-api-sync.service.js +51 -0
- package/esm2015/public-api.js +32 -0
- package/esm2015/valtimo-connector-management.js +8 -0
- package/fesm2015/valtimo-connector-management.js +1771 -0
- package/fesm2015/valtimo-connector-management.js.map +1 -0
- package/lib/components/add-connector/add-connector.component.d.ts +26 -0
- package/lib/components/connector-link-extension/connector-link-extension.component.d.ts +25 -0
- package/lib/components/connector-link-extension-modal/connector-link-extension-modal.component.d.ts +40 -0
- package/lib/components/connector-management/connector-management.component.d.ts +28 -0
- package/lib/components/connector-modal/connector-modal.component.d.ts +16 -0
- package/lib/components/edit-connector-form/edit-connector-form.component.d.ts +15 -0
- package/lib/components/edit-connector-properties/edit-connector-properties.component.d.ts +35 -0
- package/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.component.d.ts +43 -0
- package/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.form.d.ts +215 -0
- package/lib/components/modify-connector/modify-connector.component.d.ts +19 -0
- package/lib/components/multi-value-connector-property/multi-value-connector-property.component.d.ts +26 -0
- package/lib/connector-management-routing.d.ts +2 -0
- package/lib/connector-management.module.d.ts +2 -0
- package/lib/extension/connector-management.extension.init.d.ts +2 -0
- package/lib/services/connector-management/connector-management.service.d.ts +17 -0
- package/lib/services/connector-management-state/connector-management-state.service.d.ts +26 -0
- package/lib/services/object-api-sync/object-api-sync.service.d.ts +14 -0
- package/package.json +19 -0
- package/public-api.d.ts +13 -0
- package/valtimo-connector-management.d.ts +7 -0
- package/valtimo-connector-management.metadata.json +1 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015-2021 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 } from '@angular/core';
|
|
17
|
+
import { editProductAanvragenConnectorForm } from './edit-product-aanvragen-connector.form';
|
|
18
|
+
import { FormTranslationService, FormMappingService } from '@valtimo/form';
|
|
19
|
+
import { DocumentService } from '@valtimo/document';
|
|
20
|
+
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
|
|
21
|
+
import { cloneDeep } from 'lodash';
|
|
22
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
23
|
+
import { map } from 'rxjs/operators';
|
|
24
|
+
export class EditProductAanvragenConnectorComponent {
|
|
25
|
+
constructor(formTranslationService, formMappingService, documentService, translateService) {
|
|
26
|
+
this.formTranslationService = formTranslationService;
|
|
27
|
+
this.formMappingService = formMappingService;
|
|
28
|
+
this.documentService = documentService;
|
|
29
|
+
this.translateService = translateService;
|
|
30
|
+
this.showDeleteButton = false;
|
|
31
|
+
this.propertiesSave = new EventEmitter();
|
|
32
|
+
this.connectorDelete = new EventEmitter();
|
|
33
|
+
this.formRefresh$ = new Subject();
|
|
34
|
+
this.formDefinition$ = new BehaviorSubject(undefined);
|
|
35
|
+
this.translatedFormDefinition$ = this.formDefinition$.pipe(map((definition) => this.formTranslationService.translateForm(definition)));
|
|
36
|
+
this.caseDefinitionId$ = new BehaviorSubject('');
|
|
37
|
+
this.options = {
|
|
38
|
+
disableAlerts: true
|
|
39
|
+
};
|
|
40
|
+
this.mapCaseDefinitionKeyComponent = (component) => {
|
|
41
|
+
var _a;
|
|
42
|
+
if (component.key === 'caseDefinitionKey') {
|
|
43
|
+
const definitionOptions = (_a = this.documentDefinitions) === null || _a === void 0 ? void 0 : _a.content.map((definition) => ({ label: definition.id.name, value: definition.id.name }));
|
|
44
|
+
return Object.assign(Object.assign({}, component), { disabled: false, data: { values: definitionOptions } });
|
|
45
|
+
}
|
|
46
|
+
return component;
|
|
47
|
+
};
|
|
48
|
+
this.mapProcessDefinitionKeyComponent = (component) => {
|
|
49
|
+
var _a;
|
|
50
|
+
if (component.key === 'processDefinitionKey') {
|
|
51
|
+
const processOptions = this.processDocumentDefinitions.map((definition) => ({ label: definition.processName, value: definition.id.processDefinitionKey }));
|
|
52
|
+
if (((_a = this.processDocumentDefinitions) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
53
|
+
return Object.assign(Object.assign({}, component), { disabled: false, data: { values: processOptions } });
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
return Object.assign(Object.assign({}, component), { disabled: true, data: { values: [] } });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return component;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
ngOnInit() {
|
|
63
|
+
this.openFormDefinitionSubscription();
|
|
64
|
+
this.formDefinition$.next(editProductAanvragenConnectorForm);
|
|
65
|
+
this.loadDocumentDefinitions();
|
|
66
|
+
}
|
|
67
|
+
ngOnDestroy() {
|
|
68
|
+
var _a, _b;
|
|
69
|
+
(_a = this.formDefinitionSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
70
|
+
(_b = this.translateSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
|
|
71
|
+
}
|
|
72
|
+
onChange(object) {
|
|
73
|
+
var _a;
|
|
74
|
+
const caseDefinitionKeyValue = (_a = object === null || object === void 0 ? void 0 : object.data) === null || _a === void 0 ? void 0 : _a.caseDefinitionKey;
|
|
75
|
+
const currentCaseDefinitionId = this.caseDefinitionId$.getValue();
|
|
76
|
+
if (caseDefinitionKeyValue && caseDefinitionKeyValue !== currentCaseDefinitionId) {
|
|
77
|
+
this.documentService.findProcessDocumentDefinitions(caseDefinitionKeyValue).subscribe((processDocumentDefinitions) => {
|
|
78
|
+
this.processDocumentDefinitions = processDocumentDefinitions;
|
|
79
|
+
const definitionWithProcessDefinitionKeyValues = this.formMappingService.mapComponents(this.formDefinition$.getValue(), this.mapProcessDefinitionKeyComponent);
|
|
80
|
+
this.formDefinition$.next(definitionWithProcessDefinitionKeyValues);
|
|
81
|
+
this.caseDefinitionId$.next(caseDefinitionKeyValue);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
onSubmit(event) {
|
|
86
|
+
const submission = event.data;
|
|
87
|
+
const properties = cloneDeep(this.properties);
|
|
88
|
+
properties.objectsApiProperties.objectsApi.url = submission.objectsApiUrl;
|
|
89
|
+
properties.objectsApiProperties.objectsApi.token = submission.objectsApiToken;
|
|
90
|
+
properties.objectsApiProperties.objectsTypeApi.url = submission.objectTypesApiUrl;
|
|
91
|
+
properties.objectsApiProperties.objectsTypeApi.token = submission.objectTypesApiToken;
|
|
92
|
+
properties.objectsApiProperties.objectType.name = submission.objectTypeName;
|
|
93
|
+
properties.objectsApiProperties.objectType.title = submission.objectTypeTitle;
|
|
94
|
+
properties.objectsApiProperties.objectType.url = submission.objectTypeUrl;
|
|
95
|
+
properties.objectsApiProperties.objectType.typeVersion = submission.objectTypeVersion;
|
|
96
|
+
properties.openNotificatieProperties.baseUrl = submission.openNotificationsBaseUrl;
|
|
97
|
+
properties.openNotificatieProperties.clientId = submission.openNotificationsClientId;
|
|
98
|
+
properties.openNotificatieProperties.secret = submission.openNotificationsSecret;
|
|
99
|
+
properties.openNotificatieProperties.callbackBaseUrl = submission.openNotificationsCallbackBaseUrl;
|
|
100
|
+
properties.aanvragerRolTypeUrl = submission.applicantRoleTypeUrl;
|
|
101
|
+
properties.typeMapping = [
|
|
102
|
+
{
|
|
103
|
+
productAanvraagType: submission.productAanvraagType,
|
|
104
|
+
caseDefinitionKey: submission.caseDefinitionKey,
|
|
105
|
+
processDefinitionKey: submission.processDefinitionKey
|
|
106
|
+
}
|
|
107
|
+
];
|
|
108
|
+
this.propertiesSave.emit({ properties, name: submission.connectorName });
|
|
109
|
+
}
|
|
110
|
+
onDelete() {
|
|
111
|
+
this.connectorDelete.emit();
|
|
112
|
+
}
|
|
113
|
+
openFormDefinitionSubscription() {
|
|
114
|
+
this.formDefinitionSubscription = combineLatest([this.formDefinition$, this.translateService.stream('key')])
|
|
115
|
+
.subscribe(([form]) => {
|
|
116
|
+
const translatedForm = this.formTranslationService.translateForm(form);
|
|
117
|
+
this.refreshForm({ form: translatedForm });
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
prefillForm() {
|
|
121
|
+
const properties = cloneDeep(this.properties);
|
|
122
|
+
const submission = {};
|
|
123
|
+
submission.objectsApiUrl = properties.objectsApiProperties.objectsApi.url;
|
|
124
|
+
submission.objectsApiToken = properties.objectsApiProperties.objectsApi.token;
|
|
125
|
+
submission.objectTypesApiUrl = properties.objectsApiProperties.objectsTypeApi.url;
|
|
126
|
+
submission.objectTypesApiToken = properties.objectsApiProperties.objectsTypeApi.token;
|
|
127
|
+
submission.objectTypeName = properties.objectsApiProperties.objectType.name;
|
|
128
|
+
submission.objectTypeTitle = properties.objectsApiProperties.objectType.title;
|
|
129
|
+
submission.objectTypeUrl = properties.objectsApiProperties.objectType.url;
|
|
130
|
+
submission.objectTypeVersion = properties.objectsApiProperties.objectType.typeVersion;
|
|
131
|
+
submission.openNotificationsBaseUrl = properties.openNotificatieProperties.baseUrl;
|
|
132
|
+
submission.openNotificationsClientId = properties.openNotificatieProperties.clientId;
|
|
133
|
+
submission.openNotificationsSecret = properties.openNotificatieProperties.secret;
|
|
134
|
+
submission.openNotificationsCallbackBaseUrl = properties.openNotificatieProperties.callbackBaseUrl;
|
|
135
|
+
submission.applicantRoleTypeUrl = properties.aanvragerRolTypeUrl;
|
|
136
|
+
submission.productAanvraagType = properties.typeMapping[0].productAanvraagType;
|
|
137
|
+
submission.caseDefinitionKey = properties.typeMapping[0].caseDefinitionKey;
|
|
138
|
+
submission.processDefinitionKey = properties.typeMapping[0].processDefinitionKey;
|
|
139
|
+
submission.connectorName = this.defaultName;
|
|
140
|
+
this.refreshForm({ submission: { data: submission } });
|
|
141
|
+
}
|
|
142
|
+
refreshForm(refreshValue) {
|
|
143
|
+
this.formRefresh$.next(refreshValue);
|
|
144
|
+
}
|
|
145
|
+
loadDocumentDefinitions() {
|
|
146
|
+
this.documentService.getAllDefinitions().subscribe((definitions) => {
|
|
147
|
+
var _a;
|
|
148
|
+
this.documentDefinitions = definitions;
|
|
149
|
+
const definitionWithCaseDefinitionKeyValues = this.formMappingService.mapComponents(this.formDefinition$.getValue(), this.mapCaseDefinitionKeyComponent);
|
|
150
|
+
this.formDefinition$.next(definitionWithCaseDefinitionKeyValues);
|
|
151
|
+
if ((_a = this.properties) === null || _a === void 0 ? void 0 : _a.aanvragerRolTypeUrl) {
|
|
152
|
+
this.prefillForm();
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
EditProductAanvragenConnectorComponent.decorators = [
|
|
158
|
+
{ type: Component, args: [{
|
|
159
|
+
selector: 'valtimo-edit-product-aanvragen-connector',
|
|
160
|
+
template: "<!--\n ~ Copyright 2015-2021 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<div\n *ngIf=\"translatedFormDefinition$ | async as definition\"\n class=\"edit-product-request\"\n [ngClass]=\"{'has-delete': showDeleteButton}\"\n>\n <valtimo-form-io\n [form]=\"definition\"\n [formRefresh$]=\"formRefresh$\"\n [useFormRefresh]=\"true\"\n [options]=\"options\"\n (change)=\"onChange($event)\"\n (submit)=\"onSubmit($event)\"\n >\n </valtimo-form-io>\n\n <button *ngIf=\"showDeleteButton\" class=\"btn btn-danger btn-space\" (click)=\"onDelete()\">\n <i class=\"icon mdi mdi-delete mr-1\"></i>\n {{'connectorManagement.remove' | translate}}\n </button>\n</div>\n\n",
|
|
161
|
+
styles: ["/*!\n * Copyright 2015-2021 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 */.edit-product-request ::ng-deep .btn-wizard-nav-cancel{display:none}.edit-product-request ::ng-deep .list-inline{display:flex;flex-direction:row;justify-content:flex-end}.edit-product-request.has-delete ::ng-deep .list-inline{margin-bottom:-30px}.edit-product-request .btn-danger{position:relative}"]
|
|
162
|
+
},] }
|
|
163
|
+
];
|
|
164
|
+
EditProductAanvragenConnectorComponent.ctorParameters = () => [
|
|
165
|
+
{ type: FormTranslationService },
|
|
166
|
+
{ type: FormMappingService },
|
|
167
|
+
{ type: DocumentService },
|
|
168
|
+
{ type: TranslateService }
|
|
169
|
+
];
|
|
170
|
+
EditProductAanvragenConnectorComponent.propDecorators = {
|
|
171
|
+
properties: [{ type: Input }],
|
|
172
|
+
defaultName: [{ type: Input }],
|
|
173
|
+
showDeleteButton: [{ type: Input }],
|
|
174
|
+
propertiesSave: [{ type: Output }],
|
|
175
|
+
connectorDelete: [{ type: Output }]
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb25uZWN0b3ItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IvZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUFDLHNCQUFzQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFJM0UsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFPbkMsTUFBTSxPQUFPLHNDQUFzQztJQXdCakQsWUFDbUIsc0JBQThDLEVBQzlDLGtCQUFzQyxFQUN0QyxlQUFnQyxFQUNoQyxnQkFBa0M7UUFIbEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JB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QkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUU3RyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBRWpFLFVBQUksSUFBSSxDQUFDLFVBQVUsMENBQUUsbUJBQW1CLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNwQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBdExGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMENBQTBDO2dCQUNwRCxpd0NBQWdFOzthQUVqRTs7O1lBZk8sc0JBQXNCO1lBQUUsa0JBQWtCO1lBQzFDLGVBQWU7WUFPZixnQkFBZ0I7Ozt5QkFTckIsS0FBSzswQkFDTCxLQUFLOytCQUNMLEtBQUs7NkJBRUwsTUFBTTs4QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjEgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtlZGl0UHJvZHVjdEFhbnZyYWdlbkNvbm5lY3RvckZvcm19IGZyb20gJy4vZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuZm9ybSc7XG5pbXBvcnQge0Zvcm1UcmFuc2xhdGlvblNlcnZpY2UsIEZvcm1NYXBwaW5nU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vZm9ybSc7XG5pbXBvcnQge0RvY3VtZW50U2VydmljZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtFeHRlbmRlZENvbXBvbmVudFNjaGVtYX0gZnJvbSAnZm9ybWlvanMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0RvY3VtZW50RGVmaW5pdGlvbnMsIFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24sIENvbm5lY3RvclByb3BlcnRpZXN9IGZyb20gJ0B2YWx0aW1vL2NvbnRyYWN0JztcbmltcG9ydCB7Rm9ybWlvRm9ybSwgRm9ybWlvUmVmcmVzaFZhbHVlfSBmcm9tICdhbmd1bGFyLWZvcm1pbyc7XG5pbXBvcnQge0Zvcm1pb09wdGlvbnN9IGZyb20gJ2FuZ3VsYXItZm9ybWlvL2Zvcm1pby5jb21tb24nO1xuaW1wb3J0IHtjbG9uZURlZXB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1lZGl0LXByb2R1Y3QtYWFudnJhZ2VuLWNvbm5lY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LXByb2R1Y3QtYWFudnJhZ2VuLWNvbm5lY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQtcHJvZHVjdC1hYW52cmFnZW4tY29ubmVjdG9yLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRWRpdFByb2R1Y3RBYW52cmFnZW5Db25uZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHByb3BlcnRpZXM6IENvbm5lY3RvclByb3BlcnRpZXM7XG4gIEBJbnB1dCgpIGRlZmF1bHROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93RGVsZXRlQnV0dG9uID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHByb3BlcnRpZXNTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx7cHJvcGVydGllczogQ29ubmVjdG9yUHJvcGVydGllcywgbmFtZTogc3RyaW5nfT4oKTtcbiAgQE91dHB1dCgpIGNvbm5lY3RvckRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGZvcm1SZWZyZXNoJCA9IG5ldyBTdWJqZWN0PEZvcm1pb1JlZnJlc2hWYWx1ZT4oKTtcbiAgZm9ybURlZmluaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtaW9Gb3JtPih1bmRlZmluZWQpO1xuICB0cmFuc2xhdGVkRm9ybURlZmluaXRpb24kID0gdGhpcy5mb3JtRGVmaW5pdGlvbiQucGlwZShcbiAgICBtYXAoKGRlZmluaXRpb24pID0+IHRoaXMuZm9ybVRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVGb3JtKGRlZmluaXRpb24pKVxuICApO1xuICBjYXNlRGVmaW5pdGlvbklkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIGRvY3VtZW50RGVmaW5pdGlvbnM6IERvY3VtZW50RGVmaW5pdGlvbnM7XG4gIHByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zOiBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uW107XG5cbiAgcmVhZG9ubHkgb3B0aW9uczogRm9ybWlvT3B0aW9ucyA9IHtcbiAgICBkaXNhYmxlQWxlcnRzOiB0cnVlXG4gIH07XG5cbiAgcHJpdmF0ZSBmb3JtRGVmaW5pdGlvblN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtVHJhbnNsYXRpb25TZXJ2aWNlOiBGb3JtVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybU1hcHBpbmdTZXJ2aWNlOiBGb3JtTWFwcGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5Gb3JtRGVmaW5pdGlvblN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuZm9ybURlZmluaXRpb24kLm5leHQoZWRpdFByb2R1Y3RBYW52cmFnZW5Db25uZWN0b3JGb3JtKTtcbiAgICB0aGlzLmxvYWREb2N1bWVudERlZmluaXRpb25zKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1EZWZpbml0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudHJhbnNsYXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb25DaGFuZ2Uob2JqZWN0OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBjYXNlRGVmaW5pdGlvbktleVZhbHVlID0gb2JqZWN0Py5kYXRhPy5jYXNlRGVmaW5pdGlvbktleTtcbiAgICBjb25zdCBjdXJyZW50Q2FzZURlZmluaXRpb25JZCA9IHRoaXMuY2FzZURlZmluaXRpb25JZCQuZ2V0VmFsdWUoKTtcblxuICAgIGlmIChjYXNlRGVmaW5pdGlvbktleVZhbHVlICYmIGNhc2VEZWZpbml0aW9uS2V5VmFsdWUgIT09IGN1cnJlbnRDYXNlRGVmaW5pdGlvbklkKSB7XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5maW5kUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMoY2FzZURlZmluaXRpb25LZXlWYWx1ZSkuc3Vic2NyaWJlKChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zID0gcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnM7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb25XaXRoUHJvY2Vzc0RlZmluaXRpb25LZXlWYWx1ZXMgPVxuICAgICAgICAgIHRoaXMuZm9ybU1hcHBpbmdTZXJ2aWNlLm1hcENvbXBvbmVudHModGhpcy5mb3JtRGVmaW5pdGlvbiQuZ2V0VmFsdWUoKSwgdGhpcy5tYXBQcm9jZXNzRGVmaW5pdGlvbktleUNvbXBvbmVudCk7XG5cbiAgICAgICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChkZWZpbml0aW9uV2l0aFByb2Nlc3NEZWZpbml0aW9uS2V5VmFsdWVzKTtcbiAgICAgICAgdGhpcy5jYXNlRGVmaW5pdGlvbklkJC5uZXh0KGNhc2VEZWZpbml0aW9uS2V5VmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25TdWJtaXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHN1Ym1pc3Npb24gPSBldmVudC5kYXRhO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBjbG9uZURlZXAodGhpcy5wcm9wZXJ0aWVzKTtcblxuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0c0FwaS51cmwgPSBzdWJtaXNzaW9uLm9iamVjdHNBcGlVcmw7XG4gICAgcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RzQXBpLnRva2VuID0gc3VibWlzc2lvbi5vYmplY3RzQXBpVG9rZW47XG4gICAgcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RzVHlwZUFwaS51cmwgPSBzdWJtaXNzaW9uLm9iamVjdFR5cGVzQXBpVXJsO1xuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0c1R5cGVBcGkudG9rZW4gPSBzdWJtaXNzaW9uLm9iamVjdFR5cGVzQXBpVG9rZW47XG5cbiAgICBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdFR5cGUubmFtZSA9IHN1Ym1pc3Npb24ub2JqZWN0VHlwZU5hbWU7XG4gICAgcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RUeXBlLnRpdGxlID0gc3VibWlzc2lvbi5vYmplY3RUeXBlVGl0bGU7XG4gICAgcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RUeXBlLnVybCA9IHN1Ym1pc3Npb24ub2JqZWN0VHlwZVVybDtcbiAgICBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdFR5cGUudHlwZVZlcnNpb24gPSBzdWJtaXNzaW9uLm9iamVjdFR5cGVWZXJzaW9uO1xuXG4gICAgcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmJhc2VVcmwgPSBzdWJtaXNzaW9uLm9wZW5Ob3RpZmljYXRpb25zQmFzZVVybDtcbiAgICBwcm9wZXJ0aWVzLm9wZW5Ob3RpZmljYXRpZVByb3BlcnRpZXMuY2xpZW50SWQgPSBzdWJtaXNzaW9uLm9wZW5Ob3RpZmljYXRpb25zQ2xpZW50SWQ7XG4gICAgcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLnNlY3JldCA9IHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNTZWNyZXQ7XG4gICAgcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmNhbGxiYWNrQmFzZVVybCA9IHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNDYWxsYmFja0Jhc2VVcmw7XG5cbiAgICBwcm9wZXJ0aWVzLmFhbnZyYWdlclJvbFR5cGVVcmwgPSBzdWJtaXNzaW9uLmFwcGxpY2FudFJvbGVUeXBlVXJsO1xuXG4gICAgcHJvcGVydGllcy50eXBlTWFwcGluZyA9IFtcbiAgICAgIHtcbiAgICAgICAgcHJvZHVjdEFhbnZyYWFnVHlwZTogc3VibWlzc2lvbi5wcm9kdWN0QWFudnJhYWdUeXBlLFxuICAgICAgICBjYXNlRGVmaW5pdGlvbktleTogc3VibWlzc2lvbi5jYXNlRGVmaW5pdGlvbktleSxcbiAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXk6IHN1Ym1pc3Npb24ucHJvY2Vzc0RlZmluaXRpb25LZXlcbiAgICAgIH1cbiAgICBdO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzU2F2ZS5lbWl0KHtwcm9wZXJ0aWVzLCBuYW1lOiBzdWJtaXNzaW9uLmNvbm5lY3Rvck5hbWV9KTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY29ubmVjdG9yRGVsZXRlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkZvcm1EZWZpbml0aW9uU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybURlZmluaXRpb25TdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZvcm1EZWZpbml0aW9uJCwgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyldKVxuICAgICAgLnN1YnNjcmliZSgoW2Zvcm1dKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRGb3JtID0gdGhpcy5mb3JtVHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUZvcm0oZm9ybSk7XG4gICAgICAgIHRoaXMucmVmcmVzaEZvcm0oe2Zvcm06IHRyYW5zbGF0ZWRGb3JtfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlZmlsbEZvcm0oKTogdm9pZCB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IGNsb25lRGVlcCh0aGlzLnByb3BlcnRpZXMpO1xuICAgIGNvbnN0IHN1Ym1pc3Npb246IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cbiAgICBzdWJtaXNzaW9uLm9iamVjdHNBcGlVcmwgPSBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNBcGkudXJsO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0c0FwaVRva2VuID0gcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RzQXBpLnRva2VuO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0VHlwZXNBcGlVcmwgPSBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNUeXBlQXBpLnVybDtcbiAgICBzdWJtaXNzaW9uLm9iamVjdFR5cGVzQXBpVG9rZW4gPSBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNUeXBlQXBpLnRva2VuO1xuXG4gICAgc3VibWlzc2lvbi5vYmplY3RUeXBlTmFtZSA9IHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS5uYW1lO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0VHlwZVRpdGxlID0gcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RUeXBlLnRpdGxlO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0VHlwZVVybCA9IHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS51cmw7XG4gICAgc3VibWlzc2lvbi5vYmplY3RUeXBlVmVyc2lvbiA9IHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS50eXBlVmVyc2lvbjtcblxuICAgIHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNCYXNlVXJsID0gcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmJhc2VVcmw7XG4gICAgc3VibWlzc2lvbi5vcGVuTm90aWZpY2F0aW9uc0NsaWVudElkID0gcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmNsaWVudElkO1xuICAgIHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNTZWNyZXQgPSBwcm9wZXJ0aWVzLm9wZW5Ob3RpZmljYXRpZVByb3BlcnRpZXMuc2VjcmV0O1xuICAgIHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNDYWxsYmFja0Jhc2VVcmwgPSBwcm9wZXJ0aWVzLm9wZW5Ob3RpZmljYXRpZVByb3BlcnRpZXMuY2FsbGJhY2tCYXNlVXJsO1xuXG4gICAgc3VibWlzc2lvbi5hcHBsaWNhbnRSb2xlVHlwZVVybCA9IHByb3BlcnRpZXMuYWFudnJhZ2VyUm9sVHlwZVVybDtcblxuICAgIHN1Ym1pc3Npb24ucHJvZHVjdEFhbnZyYWFnVHlwZSA9IHByb3BlcnRpZXMudHlwZU1hcHBpbmdbMF0ucHJvZHVjdEFhbnZyYWFnVHlwZTtcbiAgICBzdWJtaXNzaW9uLmNhc2VEZWZpbml0aW9uS2V5ID0gcHJvcGVydGllcy50eXBlTWFwcGluZ1swXS5jYXNlRGVmaW5pdGlvbktleTtcbiAgICBzdWJtaXNzaW9uLnByb2Nlc3NEZWZpbml0aW9uS2V5ID0gcHJvcGVydGllcy50eXBlTWFwcGluZ1swXS5wcm9jZXNzRGVmaW5pdGlvbktleTtcblxuICAgIHN1Ym1pc3Npb24uY29ubmVjdG9yTmFtZSA9IHRoaXMuZGVmYXVsdE5hbWU7XG5cbiAgICB0aGlzLnJlZnJlc2hGb3JtKHtzdWJtaXNzaW9uOiB7ZGF0YTogc3VibWlzc2lvbn19KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQ2FzZURlZmluaXRpb25LZXlDb21wb25lbnQgPSAoY29tcG9uZW50OiBFeHRlbmRlZENvbXBvbmVudFNjaGVtYSk6IEV4dGVuZGVkQ29tcG9uZW50U2NoZW1hID0+IHtcbiAgICBpZiAoY29tcG9uZW50LmtleSA9PT0gJ2Nhc2VEZWZpbml0aW9uS2V5Jykge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbk9wdGlvbnMgPSB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbnM/LmNvbnRlbnQubWFwKFxuICAgICAgICAoZGVmaW5pdGlvbikgPT4gKHtsYWJlbDogZGVmaW5pdGlvbi5pZC5uYW1lLCB2YWx1ZTogZGVmaW5pdGlvbi5pZC5uYW1lfSlcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7Li4uY29tcG9uZW50LCBkaXNhYmxlZDogZmFsc2UsIGRhdGE6IHt2YWx1ZXM6IGRlZmluaXRpb25PcHRpb25zfX07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxuXG4gIHByaXZhdGUgbWFwUHJvY2Vzc0RlZmluaXRpb25LZXlDb21wb25lbnQgPSAoY29tcG9uZW50OiBFeHRlbmRlZENvbXBvbmVudFNjaGVtYSk6IEV4dGVuZGVkQ29tcG9uZW50U2NoZW1hID0+IHtcbiAgICBpZiAoY29tcG9uZW50LmtleSA9PT0gJ3Byb2Nlc3NEZWZpbml0aW9uS2V5Jykge1xuICAgICAgY29uc3QgcHJvY2Vzc09wdGlvbnMgPSB0aGlzLnByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zLm1hcChcbiAgICAgICAgKGRlZmluaXRpb24pID0+ICh7bGFiZWw6IGRlZmluaXRpb24ucHJvY2Vzc05hbWUsIHZhbHVlOiBkZWZpbml0aW9uLmlkLnByb2Nlc3NEZWZpbml0aW9uS2V5fSlcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLnByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB7Li4uY29tcG9uZW50LCBkaXNhYmxlZDogZmFsc2UsIGRhdGE6IHt2YWx1ZXM6IHByb2Nlc3NPcHRpb25zfX07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gey4uLmNvbXBvbmVudCwgZGlzYWJsZWQ6IHRydWUsIGRhdGE6IHt2YWx1ZXM6IFtdfX07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaEZvcm0ocmVmcmVzaFZhbHVlOiBGb3JtaW9SZWZyZXNoVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1SZWZyZXNoJC5uZXh0KHJlZnJlc2hWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREb2N1bWVudERlZmluaXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldEFsbERlZmluaXRpb25zKCkuc3Vic2NyaWJlKChkZWZpbml0aW9ucykgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgICBjb25zdCBkZWZpbml0aW9uV2l0aENhc2VEZWZpbml0aW9uS2V5VmFsdWVzID1cbiAgICAgICAgdGhpcy5mb3JtTWFwcGluZ1NlcnZpY2UubWFwQ29tcG9uZW50cyh0aGlzLmZvcm1EZWZpbml0aW9uJC5nZXRWYWx1ZSgpLCB0aGlzLm1hcENhc2VEZWZpbml0aW9uS2V5Q29tcG9uZW50KTtcblxuICAgICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChkZWZpbml0aW9uV2l0aENhc2VEZWZpbml0aW9uS2V5VmFsdWVzKTtcblxuICAgICAgaWYgKHRoaXMucHJvcGVydGllcz8uYWFudnJhZ2VyUm9sVHlwZVVybCkge1xuICAgICAgICB0aGlzLnByZWZpbGxGb3JtKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|