@dignite-ng/expand.cms 3.0.0-rc.43 → 3.0.0-rc.47
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/esm2022/lib/cms.module.mjs +6 -2
- package/esm2022/lib/components/admin/entries/create-or-edit-entries.component.mjs +33 -3
- package/esm2022/lib/components/admin/entries/create.component.mjs +39 -8
- package/esm2022/lib/components/admin/entries/edit.component.mjs +55 -50
- package/esm2022/lib/components/admin/entries/entries.component.mjs +4 -3
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.mjs +7 -7
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.component.mjs +40 -7
- package/esm2022/lib/components/dynamic-form/matrix/matrix-control.component.mjs +50 -10
- package/esm2022/lib/components/dynamic-form/table/table-control.component.mjs +44 -9
- package/esm2022/lib/pipes/get-localized-entries-by-slug.pipe.mjs +43 -0
- package/esm2022/lib/proxy/dignite/cms/admin/dynamic-forms/form-admin.service.mjs +1 -1
- package/esm2022/lib/proxy/dignite/cms/admin/entries/entry-admin.service.mjs +6 -1
- package/esm2022/lib/proxy/dignite/cms/admin/fields/models.mjs +1 -1
- package/esm2022/lib/proxy/dignite/cms/fields/models.mjs +1 -1
- package/esm2022/lib/proxy/dignite/cms/sections/models.mjs +1 -1
- package/esm2022/lib/resolvers/page-default-toolbar-actions.mjs +3 -3
- package/fesm2022/dignite-ng-expand.cms.mjs +311 -90
- package/fesm2022/dignite-ng-expand.cms.mjs.map +1 -1
- package/lib/cms.module.d.ts +2 -1
- package/lib/components/admin/entries/create-or-edit-entries.component.d.ts +5 -0
- package/lib/components/admin/entries/create.component.d.ts +3 -0
- package/lib/components/admin/entries/edit.component.d.ts +1 -0
- package/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.d.ts +0 -6
- package/lib/components/admin/sections/entry-types/create-or-edit.component.d.ts +4 -0
- package/lib/components/dynamic-form/matrix/matrix-control.component.d.ts +4 -0
- package/lib/components/dynamic-form/table/table-control.component.d.ts +4 -0
- package/lib/pipes/get-localized-entries-by-slug.pipe.d.ts +10 -0
- package/lib/proxy/dignite/cms/admin/entries/entry-admin.service.d.ts +1 -0
- package/lib/proxy/dignite/cms/admin/fields/models.d.ts +2 -2
- package/lib/proxy/dignite/cms/fields/models.d.ts +1 -1
- package/lib/proxy/dignite/cms/sections/models.d.ts +2 -2
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ import { FormBuilder } from '@angular/forms';
|
|
|
9
9
|
import { ActivatedRoute } from '@angular/router';
|
|
10
10
|
// import { EntryAdminService } from '../../../proxy/admin/entries';
|
|
11
11
|
import { ECmsComponent } from '../../../enums';
|
|
12
|
-
import { UpdateListService } from '@dignite-ng/expand.core';
|
|
12
|
+
import { LocationBackService, UpdateListService } from '@dignite-ng/expand.core';
|
|
13
13
|
import { CreateOrUpdateEntryInputBase } from './create-or-update-entry-input-base';
|
|
14
14
|
import { ValidatorsService } from '@dignite-ng/expand.core';
|
|
15
15
|
import { finalize } from 'rxjs';
|
|
@@ -52,6 +52,54 @@ export class EditComponent {
|
|
|
52
52
|
this.entryInfo = '';
|
|
53
53
|
/**显示条目类型信息 */
|
|
54
54
|
this.showEntryTypeInfo = '';
|
|
55
|
+
// /**获取表单所有字段是否通过验证 */
|
|
56
|
+
// getFormValidationStatus(formEntity: FormGroup | FormArray): { [key: string]: any } {
|
|
57
|
+
// const validationStatus: { [key: string]: any } = {};
|
|
58
|
+
// // 递归遍历表单组和表单控件集合
|
|
59
|
+
// const traverseForm = (form: FormGroup | FormArray, prefix = '') => {
|
|
60
|
+
// if (form instanceof FormGroup) {
|
|
61
|
+
// Object.keys(form.controls).forEach(key => {
|
|
62
|
+
// const control = form.controls[key];
|
|
63
|
+
// // const displayName = key.charAt(0).toUpperCase() + key.slice(1);
|
|
64
|
+
// const displayName = key;
|
|
65
|
+
// const fullKey = prefix ? `${prefix}.${displayName}` : displayName;
|
|
66
|
+
// if (control instanceof FormControl) {
|
|
67
|
+
// validationStatus[fullKey] = control.valid;
|
|
68
|
+
// } else if (control instanceof FormArray) {
|
|
69
|
+
// traverseForm(control, fullKey);
|
|
70
|
+
// } else if (control instanceof FormGroup) {
|
|
71
|
+
// traverseForm(control, fullKey);
|
|
72
|
+
// }
|
|
73
|
+
// });
|
|
74
|
+
// } else if (form instanceof FormArray) {
|
|
75
|
+
// form.controls.forEach((control, index) => {
|
|
76
|
+
// const fullKey = prefix ? `${prefix}[${index}]` : `[${index}]`;
|
|
77
|
+
// if (control instanceof FormControl) {
|
|
78
|
+
// validationStatus[fullKey] = control.valid;
|
|
79
|
+
// } else if (control instanceof FormArray) {
|
|
80
|
+
// traverseForm(control, fullKey);
|
|
81
|
+
// } else if (control instanceof FormGroup) {
|
|
82
|
+
// traverseForm(control, fullKey);
|
|
83
|
+
// }
|
|
84
|
+
// });
|
|
85
|
+
// }
|
|
86
|
+
// };
|
|
87
|
+
// traverseForm(formEntity);
|
|
88
|
+
// return validationStatus;
|
|
89
|
+
// }
|
|
90
|
+
/**获取表单验证状态 */
|
|
91
|
+
// getFormValidationStatus(formEntity: FormGroup | FormArray): { [key: string]: any } {
|
|
92
|
+
// const validationStatus: { [key: string]: any } = {};
|
|
93
|
+
// const traverseForm = (form: FormGroup | FormArray, prefix = '') => {
|
|
94
|
+
// //检查form是否为FormGroup还是formArray,如果是FormGroup则继续遍历,如果是FormArray则遍历FormArray
|
|
95
|
+
// if (form instanceof FormGroup) {
|
|
96
|
+
// } else if (form instanceof FormArray) {
|
|
97
|
+
// }
|
|
98
|
+
// }
|
|
99
|
+
// traverseForm(formEntity);
|
|
100
|
+
// return validationStatus
|
|
101
|
+
// }
|
|
102
|
+
this._LocationBackService = inject(LocationBackService);
|
|
55
103
|
this.isSubmit = false;
|
|
56
104
|
this.draftValue = '';
|
|
57
105
|
}
|
|
@@ -120,6 +168,7 @@ export class EditComponent {
|
|
|
120
168
|
const displayName = key.charAt(0).toUpperCase() + key.slice(1);
|
|
121
169
|
info = `"${this._LocalizationService.instant(`${module}::${displayName}`)}" `;
|
|
122
170
|
}
|
|
171
|
+
console.log('info', info, input[key]);
|
|
123
172
|
info = info + this._LocalizationService.instant(`AbpValidation::ThisFieldIsNotValid.`);
|
|
124
173
|
//使用abp多语言提示
|
|
125
174
|
this.toaster.warn(info);
|
|
@@ -128,53 +177,6 @@ export class EditComponent {
|
|
|
128
177
|
}
|
|
129
178
|
return false;
|
|
130
179
|
}
|
|
131
|
-
// /**获取表单所有字段是否通过验证 */
|
|
132
|
-
// getFormValidationStatus(formEntity: FormGroup | FormArray): { [key: string]: any } {
|
|
133
|
-
// const validationStatus: { [key: string]: any } = {};
|
|
134
|
-
// // 递归遍历表单组和表单控件集合
|
|
135
|
-
// const traverseForm = (form: FormGroup | FormArray, prefix = '') => {
|
|
136
|
-
// if (form instanceof FormGroup) {
|
|
137
|
-
// Object.keys(form.controls).forEach(key => {
|
|
138
|
-
// const control = form.controls[key];
|
|
139
|
-
// // const displayName = key.charAt(0).toUpperCase() + key.slice(1);
|
|
140
|
-
// const displayName = key;
|
|
141
|
-
// const fullKey = prefix ? `${prefix}.${displayName}` : displayName;
|
|
142
|
-
// if (control instanceof FormControl) {
|
|
143
|
-
// validationStatus[fullKey] = control.valid;
|
|
144
|
-
// } else if (control instanceof FormArray) {
|
|
145
|
-
// traverseForm(control, fullKey);
|
|
146
|
-
// } else if (control instanceof FormGroup) {
|
|
147
|
-
// traverseForm(control, fullKey);
|
|
148
|
-
// }
|
|
149
|
-
// });
|
|
150
|
-
// } else if (form instanceof FormArray) {
|
|
151
|
-
// form.controls.forEach((control, index) => {
|
|
152
|
-
// const fullKey = prefix ? `${prefix}[${index}]` : `[${index}]`;
|
|
153
|
-
// if (control instanceof FormControl) {
|
|
154
|
-
// validationStatus[fullKey] = control.valid;
|
|
155
|
-
// } else if (control instanceof FormArray) {
|
|
156
|
-
// traverseForm(control, fullKey);
|
|
157
|
-
// } else if (control instanceof FormGroup) {
|
|
158
|
-
// traverseForm(control, fullKey);
|
|
159
|
-
// }
|
|
160
|
-
// });
|
|
161
|
-
// }
|
|
162
|
-
// };
|
|
163
|
-
// traverseForm(formEntity);
|
|
164
|
-
// return validationStatus;
|
|
165
|
-
// }
|
|
166
|
-
/**获取表单验证状态 */
|
|
167
|
-
// getFormValidationStatus(formEntity: FormGroup | FormArray): { [key: string]: any } {
|
|
168
|
-
// const validationStatus: { [key: string]: any } = {};
|
|
169
|
-
// const traverseForm = (form: FormGroup | FormArray, prefix = '') => {
|
|
170
|
-
// //检查form是否为FormGroup还是formArray,如果是FormGroup则继续遍历,如果是FormArray则遍历FormArray
|
|
171
|
-
// if (form instanceof FormGroup) {
|
|
172
|
-
// } else if (form instanceof FormArray) {
|
|
173
|
-
// }
|
|
174
|
-
// }
|
|
175
|
-
// traverseForm(formEntity);
|
|
176
|
-
// return validationStatus
|
|
177
|
-
// }
|
|
178
180
|
/**提交 */
|
|
179
181
|
save() {
|
|
180
182
|
this.cultureInput.enable();
|
|
@@ -204,7 +206,10 @@ export class EditComponent {
|
|
|
204
206
|
}))
|
|
205
207
|
.subscribe(res => {
|
|
206
208
|
this.toaster.success(this._LocalizationService.instant(`AbpUi::SavedSuccessfully`));
|
|
207
|
-
this.backTo(
|
|
209
|
+
this._LocationBackService.backTo({
|
|
210
|
+
url: `/cms/admin/entries`,
|
|
211
|
+
replenish: '/create'
|
|
212
|
+
});
|
|
208
213
|
this._updateListService.updateList();
|
|
209
214
|
});
|
|
210
215
|
}
|
|
@@ -241,4 +246,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
241
246
|
type: ViewChild,
|
|
242
247
|
args: ['submitclick', { static: true }]
|
|
243
248
|
}] } });
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2VudHJpZXMvZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2VudHJpZXMvZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsNERBQTREO0FBRTVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBYSxXQUFXLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUs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UUFBUSxFQUFFLGFBQWEsQ0FBQyxZQUFZO2FBQ3JDO1NBQ0Ysb0pDNUJILGlxQkFVQTs7MkZEb0JhLGFBQWE7a0JBWHpCLFNBQVM7K0JBQ0UsVUFBVSxhQUdUO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxxQkFBcUI7NEJBQzlCLFFBQVEsRUFBRSxhQUFhLENBQUMsWUFBWTt5QkFDckM7cUJBQ0Y7OEJBYzJDLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC91c2UtbGlmZWN5Y2xlLWludGVyZmFjZSAqL1xuXG5pbXBvcnQgeyBFWFRFTlNJT05TX0lERU5USUZJRVIgfSBmcm9tICdAYWJwL25nLmNvbXBvbmVudHMvZXh0ZW5zaWJsZSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xuaW1wb3J0IHsgRGF0ZVBpcGUsIExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbi8vIGltcG9ydCB7IEVudHJ5QWRtaW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJveHkvYWRtaW4vZW50cmllcyc7XG5pbXBvcnQgeyBFQ21zQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgVXBkYXRlTGlzdFNlcnZpY2UgfSBmcm9tICdAZGlnbml0ZS1uZy9leHBhbmQuY29yZSc7XG5pbXBvcnQgeyBDcmVhdGVPclVwZGF0ZUVudHJ5SW5wdXRCYXNlIH0gZnJvbSAnLi9jcmVhdGUtb3ItdXBkYXRlLWVudHJ5LWlucHV0LWJhc2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9yc1NlcnZpY2UgfSBmcm9tICdAZGlnbml0ZS1uZy9leHBhbmQuY29yZSc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW50cnlBZG1pblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wcm94eS9kaWduaXRlL2Ntcy9hZG1pbi9lbnRyaWVzJztcbmltcG9ydCB7IENsYXNzaWNFZGl0b3IsIEVzc2VudGlhbHMsIFBhcmFncmFwaCwgQm9sZCwgSXRhbGljIH0gZnJvbSAnY2tlZGl0b3I1JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY21zLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRVhURU5TSU9OU19JREVOVElGSUVSLFxuICAgICAgdXNlVmFsdWU6IEVDbXNDb21wb25lbnQuRW50cmllc19FZGl0LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcHJpdmF0ZSBfdXBkYXRlTGlzdFNlcnZpY2UgPSBpbmplY3QoVXBkYXRlTGlzdFNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ZXIgPSBpbmplY3QoVG9hc3RlclNlcnZpY2UpO1xuICBwdWJsaWMgX2xvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgX0VudHJ5QWRtaW5TZXJ2aWNlID0gaW5qZWN0KEVudHJ5QWRtaW5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfTG9jYWxpemF0aW9uU2VydmljZSA9IGluamVjdChMb2NhbGl6YXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfVmFsaWRhdG9yc1NlcnZpY2UgPSBpbmplY3QoVmFsaWRhdG9yc1NlcnZpY2UpO1xuICBwcml2YXRlIGRhdGVQaXBlID0gaW5qZWN0KERhdGVQaXBlKTtcblxuICAvKirojrflj5bmj5DkuqTmjInpkq7mm7/ouqvvvIznlKjkuo7nnJ/lrp7op6blj5HooajljZXmj5DkuqQgKi9cbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcblxuICAvKirooajljZXpqozor4HnirbmgIFcbiAgICoge1xuICAgKiAgdGl0bGU6dHJ1ZSxcbiAgICogfVxuICAgKi9cbiAgZm9ybVZhbGlkYXRpb246IGFueSA9ICcnO1xuICAvKirooajljZXlrp7kvZMgKi9cbiAgZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuICAvKiror63oqIAgKi9cbiAgY3VsdHVyZU5hbWU6IHN0cmluZyB8IGFueSA9ICcnO1xuICAvKirmnaHnm67nsbvlnotpZCAqL1xuICBlbnRyeVR5cGVJZDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKueJiOWdl2lkICovXG4gIHNlY3Rpb25JZDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKuadoeebrueJiOacrGlkICovXG4gIGVudHJ5VmVyc2lvbklkOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq5p2h55uuaWQgKi9cbiAgZW50cmllSWQ6IHN0cmluZyB8IGFueSA9ICcnO1xuICAvKirmnaHnm67kv6Hmga8gKi9cbiAgZW50cnlJbmZvOiBhbnkgPSAnJztcblxuICAvKirmmK/lkKbojYnnqL/mjqfku7YqL1xuICBnZXQgZHJhZnRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtRW50aXR5Py5nZXQoJ2RyYWZ0JykgYXMgRm9ybUNvbnRyb2w7XG4gIH1cbiAgLyoq6K+t6KiA5o6n5Lu2ICovXG4gIGdldCBjdWx0dXJlSW5wdXQoKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZvcm1FbnRpdHk/LmdldCgnY3VsdHVyZScpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXM7XG4gICAgdGhpcy5lbnRyaWVJZCA9IHBhcmFtcy5lbnRyaWVJZDtcbiAgICB0aGlzLmZvcm1FbnRpdHkgPSB0aGlzLmZiLmdyb3VwKG5ldyBDcmVhdGVPclVwZGF0ZUVudHJ5SW5wdXRCYXNlKCkpO1xuICAgIGF3YWl0IHRoaXMuZ2V0RW50cnlJbmZvKCk7XG4gICAgdGhpcy5jdWx0dXJlSW5wdXQucGF0Y2hWYWx1ZSh0aGlzLmN1bHR1cmVOYW1lKTtcbiAgfVxuICAvKirojrflj5bmnaHnm67kv6Hmga8gKi9cbiAgZ2V0RW50cnlJbmZvKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgdGhpcy5fRW50cnlBZG1pblNlcnZpY2UuZ2V0KHRoaXMuZW50cmllSWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLmN1bHR1cmVOYW1lID0gcmVzLmN1bHR1cmU7XG4gICAgICAgIHRoaXMuZW50cnlUeXBlSWQgPSByZXMuZW50cnlUeXBlSWQ7XG4gICAgICAgIHRoaXMuc2VjdGlvbklkID0gcmVzLnNlY3Rpb25JZDtcbiAgICAgICAgdGhpcy5lbnRyeUluZm8gPSByZXM7XG4gICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoq5pi+56S65p2h55uu57G75Z6L5L+h5oGvICovXG4gIHNob3dFbnRyeVR5cGVJbmZvOiBhbnkgPSAnJztcbiAgLyoq5Y+N6aaI5a2Q57qn6aG16Z2i5L+h5oGvICovXG4gIF9mZWVkYmFja0NoaWxkSW5mbyhldmVudCkge1xuICAgIHRoaXMuc2hvd0VudHJ5VHlwZUluZm8gPSBldmVudD8uc2hvd0VudHJ5VHlwZSB8fCAnJztcbiAgfVxuICAvLyAvKirlvZPov5Tlm57nu5PmnpzkuLp0cnVl5pe26KGo56S65pyq6YCa6L+H6aqM6K+BICovXG4gIGlzQ2hlY2tGb3JtQ21zKGlucHV0LCBtb2R1bGUpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnB1dCkge1xuICAgICAgaWYgKGlucHV0W2tleV0gPT09IGZhbHNlKSB7XG4gICAgICAgIGxldCBpbmZvID0gYGA7XG4gICAgICAgIC8v5qOA5p+la2V55Lit5piv5ZCm5ZCr5pyJRXh0cmFQcm9wZXJ0aWVzLlxuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdleHRyYVByb3BlcnRpZXMuJykpIHtcbiAgICAgICAgICBjb25zdCBhcnIgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICBjb25zdCBrZXlOYW1lID0gYXJyWzFdO1xuICAgICAgICAgIC8vIGlmIChrZXlOYW1lLmluY2x1ZGVzKCdbJykpIHtcbiAgICAgICAgICAvLyAgIC8v5L2/55So5q2j5YiZ5o+Q5Y+Wa2V5TmFtZeS4rVtd5Lit55qE5pWw5a2X5LiL5qCHLOW5tuS4lOi9rOWMluS4uuaVsOWtl+exu+Wei++8jOW5tuS4lOWOu+aOiWtleU5hbWXkuK3nmoRbKl1cbiAgICAgICAgICAvLyAgIGNvbnN0IGtleU5hbWVBcnIgPSBrZXlOYW1lLm1hdGNoKC9cXGQrL2cpO1xuICAgICAgICAgIC8vICAgY29uc3Qga2V5TmFtZUFyck51bSA9IGtleU5hbWVBcnIubWFwKGl0ZW0gPT4gTnVtYmVyKGl0ZW0pKTtcbiAgICAgICAgICAvLyAgIGNvbnN0IGtleU5hbWVBcnJOdW1TdHIgPSBrZXlOYW1lQXJyTnVtLmpvaW4oJy4nKTtcblxuICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAvL+WwhmtleU5hbWXnmoTpppblrZfmr43ovazkuLrlsI/lhplcbiAgICAgICAgICAgIGNvbnN0IGtleU5hbWVMb3dlciA9IGtleU5hbWU7XG4gICAgICAgICAgICAvLyBjb25zdCBrZXlOYW1lTG93ZXIgPSBrZXlOYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsga2V5TmFtZS5zbGljZSgxKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dFbnRyeVR5cGVJbmZvICYmIHRoaXMuc2hvd0VudHJ5VHlwZUluZm8uZmllbGRUYWJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuc2hvd0VudHJ5VHlwZUluZm8uZmllbGRUYWJzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiBpdGVtLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgaWYgKGVsLmZpZWxkLm5hbWUgPT0ga2V5TmFtZUxvd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluZm8gPSBgXCIke3RoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgJHttb2R1bGV9Ojoke2l0ZW0ubmFtZX3kuIvnmoQke2VsLmZpZWxkLmRpc3BsYXlOYW1lfeWtl+autWApfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGAke3RoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICBgJHttb2R1bGV9OjpUaGV7MX1GaWVsZFVuZGVyVGhlezB9VEFCYCxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgZWwuZmllbGQuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICl9YDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7XG4gICAgICAgICAgaW5mbyA9IGBcIiR7dGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGAke21vZHVsZX06OiR7ZGlzcGxheU5hbWV9YCl9XCIgYDtcbiAgICAgICAgfVxuICAgICAgICBpbmZvID0gaW5mbyArIHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkSXNOb3RWYWxpZC5gKTtcbiAgICAgICAgLy/kvb/nlKhhYnDlpJror63oqIDmj5DnpLpcbiAgICAgICAgdGhpcy50b2FzdGVyLndhcm4oaW5mbyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyAvKirojrflj5booajljZXmiYDmnInlrZfmrrXmmK/lkKbpgJrov4fpqozor4EgKi9cbiAgLy8gZ2V0Rm9ybVZhbGlkYXRpb25TdGF0dXMoZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgRm9ybUFycmF5KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gIC8vICAgY29uc3QgdmFsaWRhdGlvblN0YXR1czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIC8vICAgLy8g6YCS5b2S6YGN5Y6G6KGo5Y2V57uE5ZKM6KGo5Y2V5o6n5Lu26ZuG5ZCIXG4gIC8vICAgY29uc3QgdHJhdmVyc2VGb3JtID0gKGZvcm06IEZvcm1Hcm91cCB8IEZvcm1BcnJheSwgcHJlZml4ID0gJycpID0+IHtcbiAgLy8gICAgIGlmIChmb3JtIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gIC8vICAgICAgIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgLy8gICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybS5jb250cm9sc1trZXldO1xuICAvLyAgICAgICAgIC8vIGNvbnN0IGRpc3BsYXlOYW1lID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xuICAvLyAgICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0ga2V5O1xuICAvLyAgICAgICAgIGNvbnN0IGZ1bGxLZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9LiR7ZGlzcGxheU5hbWV9YCA6IGRpc3BsYXlOYW1lO1xuICAvLyAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgLy8gICAgICAgICAgIHZhbGlkYXRpb25TdGF0dXNbZnVsbEtleV0gPSBjb250cm9sLnZhbGlkO1xuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAvLyAgICAgICAgICAgdHJhdmVyc2VGb3JtKGNvbnRyb2wsIGZ1bGxLZXkpO1xuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAvLyAgICAgICAgICAgdHJhdmVyc2VGb3JtKGNvbnRyb2wsIGZ1bGxLZXkpO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICB9IGVsc2UgaWYgKGZvcm0gaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgLy8gICAgICAgZm9ybS5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleCkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IGZ1bGxLZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9WyR7aW5kZXh9XWAgOiBgWyR7aW5kZXh9XWA7XG4gIC8vICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAvLyAgICAgICAgICAgdmFsaWRhdGlvblN0YXR1c1tmdWxsS2V5XSA9IGNvbnRyb2wudmFsaWQ7XG4gIC8vICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gIC8vICAgICAgICAgICB0cmF2ZXJzZUZvcm0oY29udHJvbCwgZnVsbEtleSk7XG4gIC8vICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gIC8vICAgICAgICAgICB0cmF2ZXJzZUZvcm0oY29udHJvbCwgZnVsbEtleSk7XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgIH1cbiAgLy8gICB9O1xuXG4gIC8vICAgdHJhdmVyc2VGb3JtKGZvcm1FbnRpdHkpO1xuXG4gIC8vICAgcmV0dXJuIHZhbGlkYXRpb25TdGF0dXM7XG4gIC8vIH1cblxuICAvKirojrflj5booajljZXpqozor4HnirbmgIEgKi9cbiAgLy8gZ2V0Rm9ybVZhbGlkYXRpb25TdGF0dXMoZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgRm9ybUFycmF5KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gIC8vICAgY29uc3QgdmFsaWRhdGlvblN0YXR1czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIC8vICAgY29uc3QgdHJhdmVyc2VGb3JtID0gKGZvcm06IEZvcm1Hcm91cCB8IEZvcm1BcnJheSwgcHJlZml4ID0gJycpID0+IHtcbiAgLy8gICAgIC8v5qOA5p+lZm9ybeaYr+WQpuS4ukZvcm1Hcm91cOi/mOaYr2Zvcm1BcnJheSzlpoLmnpzmmK9Gb3JtR3JvdXDliJnnu6fnu63pgY3ljoYs5aaC5p6c5pivRm9ybUFycmF55YiZ6YGN5Y6GRm9ybUFycmF5XG4gIC8vICAgICBpZiAoZm9ybSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICBcbiAgLy8gICAgIH0gZWxzZSBpZiAoZm9ybSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICBcbiAgLy8gICAgIH0gXG5cbiAgLy8gICB9XG4gIC8vICAgdHJhdmVyc2VGb3JtKGZvcm1FbnRpdHkpO1xuICAvLyAgIHJldHVybiB2YWxpZGF0aW9uU3RhdHVzXG4gIC8vIH1cblxuICAvKirmj5DkuqQgKi9cbiAgc2F2ZSgpIHtcbiAgICB0aGlzLmN1bHR1cmVJbnB1dC5lbmFibGUoKTtcbiAgICB0aGlzLmRyYWZ0SW5wdXQucGF0Y2hWYWx1ZSh0aGlzLmRyYWZ0VmFsdWUgfHwgZmFsc2UpO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5mb3JtRW50aXR5Py52YWx1ZTtcbiAgICBpbnB1dC5jdWx0dXJlID0gdGhpcy5jdWx0dXJlTmFtZTtcbiAgICBpbnB1dC5wdWJsaXNoVGltZSA9IG5ldyBEYXRlKFxuICAgICAgbmV3IERhdGUoaW5wdXQucHVibGlzaFRpbWUpLmdldFRpbWUoKSArIDggKiA2MCAqIDYwICogMTAwMCxcbiAgICApLnRvSVNPU3RyaW5nKCk7XG4gICAgaW5wdXQuY29uY3VycmVuY3lTdGFtcCA9IHRoaXMuZW50cnlJbmZvLmNvbmN1cnJlbmN5U3RhbXA7XG4gICAgdGhpcy5mb3JtVmFsaWRhdGlvbiA9IHRoaXMuX1ZhbGlkYXRvcnNTZXJ2aWNlLmdldEZvcm1WYWxpZGF0aW9uU3RhdHVzKHRoaXMuZm9ybUVudGl0eSk7XG4gICAgLy8gaWYgKHRoaXMuX1ZhbGlkYXRvcnNTZXJ2aWNlLmlzQ2hlY2tGb3JtKHRoaXMuZm9ybVZhbGlkYXRpb24sICdDbXMnKSl7XG4gICAgLy8gICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgLy8gICByZXR1cm4gdGhpcy5jdWx0dXJlSW5wdXQuZGlzYWJsZSgpO1xuICAgIC8vIH1cblxuICAgIC8vIHRoaXMuZm9ybVZhbGlkYXRpb24gPSB0aGlzLmdldEZvcm1WYWxpZGF0aW9uU3RhdHVzKHRoaXMuZm9ybUVudGl0eSk7XG4gICAgaWYgKHRoaXMuaXNDaGVja0Zvcm1DbXModGhpcy5mb3JtVmFsaWRhdGlvbiwgJ0NtcycpKSB7XG4gICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5jdWx0dXJlSW5wdXQuZGlzYWJsZSgpO1xuICAgIH1cbiAgICAvLyB0aGlzLmZvcm1WYWxpZGF0aW9uID0gdGhpcy5nZXRGb3JtVmFsaWRhdGlvblN0YXR1cyh0aGlzLmZvcm1FbnRpdHkpO1xuICAgIC8vIHJldHVybiB0aGlzLmlzU3VibWl0PWZhbHNlO1xuICAgIGlmICghdGhpcy5mb3JtRW50aXR5LnZhbGlkKSByZXR1cm47XG4gICAgdGhpcy5fRW50cnlBZG1pblNlcnZpY2VcbiAgICAgIC51cGRhdGUodGhpcy5lbnRyeUluZm8uaWQsIGlucHV0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYEFicFVpOjpTYXZlZFN1Y2Nlc3NmdWxseWApKTtcbiAgICAgICAgdGhpcy5iYWNrVG8oKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGlzdFNlcnZpY2UudXBkYXRlTGlzdCgpO1xuICAgICAgfSk7XG4gIH1cbiAgaXNTdWJtaXQ6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcbiAgZHJhZnRWYWx1ZTogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKueCueWHu+aPkOS6pCAqL1xuICBjbGlja1N1Ym1pdCh0eXBlKSB7XG4gICAgaWYgKHRoaXMuaXNTdWJtaXQpIHJldHVybjtcbiAgICB0aGlzLmlzU3VibWl0ID0gdHJ1ZTtcbiAgICB0aGlzLmRyYWZ0VmFsdWUgPSB0eXBlO1xuICAgIHRoaXMuY3VsdHVyZUlucHV0LmVuYWJsZSgpO1xuICAgIHRoaXMuc3VibWl0Y2xpY2s/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWNrKCk7XG4gIH1cblxuICAvKirov5Tlm57kuIrkuIDpobUgKi9cbiAgYmFja1RvKCkge1xuICAgIHRoaXMuX2xvY2F0aW9uLmJhY2soKTtcbiAgfVxufVxuIiwiPGFicC1wYWdlIFt0aXRsZV09XCInQ21zOjpFZGl0J3wgYWJwTG9jYWxpemF0aW9uXCIgW3Rvb2xiYXJdPVwidHJ1ZVwiPlxuICAgIDxmb3JtIGNsYXNzPVwicm93IGctMyBuZWVkcy12YWxpZGF0aW9uXCJcbiAgICAgICAgW2NsYXNzXT1cInsnd2FzLXZhbGlkYXRlZCc6Zm9ybVZhbGlkYXRpb259XCIgIFtmb3JtR3JvdXBdPVwiZm9ybUVudGl0eVwiICAoc3VibWl0KT1cInNhdmUoKVwiID5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNzdWJtaXRjbGljaz48L2J1dHRvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1FbnRpdHkmJmVudHJ5SW5mb1wiPlxuICAgICAgICAgICAgICAgIDxjbXMtY3JlYXRlLW9yLWVkaXQtZW50cmllcyAgW3NlY3Rpb25JZF09XCJzZWN0aW9uSWRcIiBbZW50cnlUeXBlSWRdPVwiZW50cnlUeXBlSWRcIiBbaXNFZGl0XT1cInRydWVcIiBbc2VsZWN0XT1cImVudHJ5SW5mb1wiICAoZmVlZGJhY2tDaGlsZEluZm8pPVwiX2ZlZWRiYWNrQ2hpbGRJbmZvKCRldmVudClcIiAgW2VudGl0eV09XCJmb3JtRW50aXR5XCI+PC9jbXMtY3JlYXRlLW9yLWVkaXQtZW50cmllcz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgIDwvZm9ybT5cbjwvYWJwLXBhZ2U+XG4iXX0=
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2VudHJpZXMvZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2VudHJpZXMvZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsNERBQTREO0FBRTVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBYSxXQUFXLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUs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QUUsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsV0FBVztJQUNYLE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7OEdBck9VLGFBQWE7a0dBQWIsYUFBYSxtQ0FQYjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxxQkFBcUI7Z0JBQzlCLFFBQVEsRUFBRSxhQUFhLENBQUMsWUFBWTthQUNyQztTQUNGLG9KQzVCSCxpcUJBVUE7OzJGRG9CYSxhQUFhO2tCQVh6QixTQUFTOytCQUNFLFVBQVUsYUFHVDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixRQUFRLEVBQUUsYUFBYSxDQUFDLFlBQVk7eUJBQ3JDO3FCQUNGOzhCQWMyQyxXQUFXO3NCQUF0RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvdXNlLWxpZmVjeWNsZS1pbnRlcmZhY2UgKi9cblxuaW1wb3J0IHsgRVhURU5TSU9OU19JREVOVElGSUVSIH0gZnJvbSAnQGFicC9uZy5jb21wb25lbnRzL2V4dGVuc2libGUnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IERhdGVQaXBlLCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgaW5qZWN0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG4vLyBpbXBvcnQgeyBFbnRyeUFkbWluU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Byb3h5L2FkbWluL2VudHJpZXMnO1xuaW1wb3J0IHsgRUNtc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcbmltcG9ydCB7IExvY2F0aW9uQmFja1NlcnZpY2UsIFVwZGF0ZUxpc3RTZXJ2aWNlIH0gZnJvbSAnQGRpZ25pdGUtbmcvZXhwYW5kLmNvcmUnO1xuaW1wb3J0IHsgQ3JlYXRlT3JVcGRhdGVFbnRyeUlucHV0QmFzZSB9IGZyb20gJy4vY3JlYXRlLW9yLXVwZGF0ZS1lbnRyeS1pbnB1dC1iYXNlJztcbmltcG9ydCB7IFZhbGlkYXRvcnNTZXJ2aWNlIH0gZnJvbSAnQGRpZ25pdGUtbmcvZXhwYW5kLmNvcmUnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudHJ5QWRtaW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJveHkvZGlnbml0ZS9jbXMvYWRtaW4vZW50cmllcyc7XG5pbXBvcnQgeyBDbGFzc2ljRWRpdG9yLCBFc3NlbnRpYWxzLCBQYXJhZ3JhcGgsIEJvbGQsIEl0YWxpYyB9IGZyb20gJ2NrZWRpdG9yNSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Ntcy1lZGl0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVYVEVOU0lPTlNfSURFTlRJRklFUixcbiAgICAgIHVzZVZhbHVlOiBFQ21zQ29tcG9uZW50LkVudHJpZXNfRWRpdCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgX3VwZGF0ZUxpc3RTZXJ2aWNlID0gaW5qZWN0KFVwZGF0ZUxpc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdGVyID0gaW5qZWN0KFRvYXN0ZXJTZXJ2aWNlKTtcbiAgcHVibGljIF9sb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIF9FbnRyeUFkbWluU2VydmljZSA9IGluamVjdChFbnRyeUFkbWluU2VydmljZSk7XG4gIHByaXZhdGUgX0xvY2FsaXphdGlvblNlcnZpY2UgPSBpbmplY3QoTG9jYWxpemF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgX1ZhbGlkYXRvcnNTZXJ2aWNlID0gaW5qZWN0KFZhbGlkYXRvcnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkYXRlUGlwZSA9IGluamVjdChEYXRlUGlwZSk7XG5cbiAgLyoq6I635Y+W5o+Q5Lqk5oyJ6ZKu5pu/6Lqr77yM55So5LqO55yf5a6e6Kem5Y+R6KGo5Y2V5o+Q5LqkICovXG4gIEBWaWV3Q2hpbGQoJ3N1Ym1pdGNsaWNrJywgeyBzdGF0aWM6IHRydWUgfSkgc3VibWl0Y2xpY2s6IEVsZW1lbnRSZWY7XG5cbiAgLyoq6KGo5Y2V6aqM6K+B54q25oCBXG4gICAqIHtcbiAgICogIHRpdGxlOnRydWUsXG4gICAqIH1cbiAgICovXG4gIGZvcm1WYWxpZGF0aW9uOiBhbnkgPSAnJztcbiAgLyoq6KGo5Y2V5a6e5L2TICovXG4gIGZvcm1FbnRpdHk6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcbiAgLyoq6K+t6KiAICovXG4gIGN1bHR1cmVOYW1lOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq5p2h55uu57G75Z6LaWQgKi9cbiAgZW50cnlUeXBlSWQ6IHN0cmluZyB8IGFueSA9ICcnO1xuICAvKirniYjlnZdpZCAqL1xuICBzZWN0aW9uSWQ6IHN0cmluZyB8IGFueSA9ICcnO1xuICAvKirmnaHnm67niYjmnKxpZCAqL1xuICBlbnRyeVZlcnNpb25JZDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKuadoeebrmlkICovXG4gIGVudHJpZUlkOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq5p2h55uu5L+h5oGvICovXG4gIGVudHJ5SW5mbzogYW55ID0gJyc7XG5cbiAgLyoq5piv5ZCm6I2J56i/5o6n5Lu2Ki9cbiAgZ2V0IGRyYWZ0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUVudGl0eT8uZ2V0KCdkcmFmdCcpIGFzIEZvcm1Db250cm9sO1xuICB9XG4gIC8qKuivreiogOaOp+S7tiAqL1xuICBnZXQgY3VsdHVyZUlucHV0KCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtRW50aXR5Py5nZXQoJ2N1bHR1cmUnKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zO1xuICAgIHRoaXMuZW50cmllSWQgPSBwYXJhbXMuZW50cmllSWQ7XG4gICAgdGhpcy5mb3JtRW50aXR5ID0gdGhpcy5mYi5ncm91cChuZXcgQ3JlYXRlT3JVcGRhdGVFbnRyeUlucHV0QmFzZSgpKTtcbiAgICBhd2FpdCB0aGlzLmdldEVudHJ5SW5mbygpO1xuICAgIHRoaXMuY3VsdHVyZUlucHV0LnBhdGNoVmFsdWUodGhpcy5jdWx0dXJlTmFtZSk7XG4gIH1cbiAgLyoq6I635Y+W5p2h55uu5L+h5oGvICovXG4gIGdldEVudHJ5SW5mbygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcbiAgICAgIHRoaXMuX0VudHJ5QWRtaW5TZXJ2aWNlLmdldCh0aGlzLmVudHJpZUlkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy5jdWx0dXJlTmFtZSA9IHJlcy5jdWx0dXJlO1xuICAgICAgICB0aGlzLmVudHJ5VHlwZUlkID0gcmVzLmVudHJ5VHlwZUlkO1xuICAgICAgICB0aGlzLnNlY3Rpb25JZCA9IHJlcy5zZWN0aW9uSWQ7XG4gICAgICAgIHRoaXMuZW50cnlJbmZvID0gcmVzO1xuICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKuaYvuekuuadoeebruexu+Wei+S/oeaBryAqL1xuICBzaG93RW50cnlUeXBlSW5mbzogYW55ID0gJyc7XG4gIC8qKuWPjemmiOWtkOe6p+mhtemdouS/oeaBryAqL1xuICBfZmVlZGJhY2tDaGlsZEluZm8oZXZlbnQpIHtcbiAgICB0aGlzLnNob3dFbnRyeVR5cGVJbmZvID0gZXZlbnQ/LnNob3dFbnRyeVR5cGUgfHwgJyc7XG4gIH1cbiAgLy8gLyoq5b2T6L+U5Zue57uT5p6c5Li6dHJ1ZeaXtuihqOekuuacqumAmui/h+mqjOivgSAqL1xuICBpc0NoZWNrRm9ybUNtcyhpbnB1dCwgbW9kdWxlKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgIGlmIChpbnB1dFtrZXldID09PSBmYWxzZSkge1xuICAgICAgICBsZXQgaW5mbyA9IGBgO1xuICAgICAgICAvL+ajgOafpWtleeS4reaYr+WQpuWQq+aciUV4dHJhUHJvcGVydGllcy5cbiAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnZXh0cmFQcm9wZXJ0aWVzLicpKSB7XG4gICAgICAgICAgY29uc3QgYXJyID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgY29uc3Qga2V5TmFtZSA9IGFyclsxXTtcbiAgICAgICAgICAvLyBpZiAoa2V5TmFtZS5pbmNsdWRlcygnWycpKSB7XG4gICAgICAgICAgLy8gICAvL+S9v+eUqOato+WImeaPkOWPlmtleU5hbWXkuK1bXeS4reeahOaVsOWtl+S4i+aghyzlubbkuJTovazljJbkuLrmlbDlrZfnsbvlnovvvIzlubbkuJTljrvmjolrZXlOYW1l5Lit55qEWypdXG4gICAgICAgICAgLy8gICBjb25zdCBrZXlOYW1lQXJyID0ga2V5TmFtZS5tYXRjaCgvXFxkKy9nKTtcbiAgICAgICAgICAvLyAgIGNvbnN0IGtleU5hbWVBcnJOdW0gPSBrZXlOYW1lQXJyLm1hcChpdGVtID0+IE51bWJlcihpdGVtKSk7XG4gICAgICAgICAgLy8gICBjb25zdCBrZXlOYW1lQXJyTnVtU3RyID0ga2V5TmFtZUFyck51bS5qb2luKCcuJyk7XG5cbiAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgLy/lsIZrZXlOYW1l55qE6aaW5a2X5q+N6L2s5Li65bCP5YaZXG4gICAgICAgICAgICBjb25zdCBrZXlOYW1lTG93ZXIgPSBrZXlOYW1lO1xuICAgICAgICAgICAgLy8gY29uc3Qga2V5TmFtZUxvd2VyID0ga2V5TmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGtleU5hbWUuc2xpY2UoMSk7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93RW50cnlUeXBlSW5mbyAmJiB0aGlzLnNob3dFbnRyeVR5cGVJbmZvLmZpZWxkVGFicy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnNob3dFbnRyeVR5cGVJbmZvLmZpZWxkVGFicykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgaXRlbS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbC5maWVsZC5uYW1lID09IGtleU5hbWVMb3dlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmZvID0gYFwiJHt0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYCR7bW9kdWxlfTo6JHtpdGVtLm5hbWV95LiL55qEJHtlbC5maWVsZC5kaXNwbGF5TmFtZX3lrZfmrrVgKX1cImA7XG4gICAgICAgICAgICAgICAgICAgIGluZm8gPSBgJHt0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bW9kdWxlfTo6VGhlezF9RmllbGRVbmRlclRoZXswfVRBQmAsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGVsLmZpZWxkLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICApfWA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xuICAgICAgICAgIGluZm8gPSBgXCIke3RoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgJHttb2R1bGV9Ojoke2Rpc3BsYXlOYW1lfWApfVwiIGA7XG4gICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbmZvJywgaW5mbyxpbnB1dFtrZXldKTtcbiAgICAgICAgaW5mbyA9IGluZm8gKyB0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYEFicFZhbGlkYXRpb246OlRoaXNGaWVsZElzTm90VmFsaWQuYCk7XG4gICAgICAgIC8v5L2/55SoYWJw5aSa6K+t6KiA5o+Q56S6XG4gICAgICAgIHRoaXMudG9hc3Rlci53YXJuKGluZm8pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gLyoq6I635Y+W6KGo5Y2V5omA5pyJ5a2X5q615piv5ZCm6YCa6L+H6aqM6K+BICovXG4gIC8vIGdldEZvcm1WYWxpZGF0aW9uU3RhdHVzKGZvcm1FbnRpdHk6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAvLyAgIGNvbnN0IHZhbGlkYXRpb25TdGF0dXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAvLyAgIC8vIOmAkuW9kumBjeWOhuihqOWNlee7hOWSjOihqOWNleaOp+S7tumbhuWQiFxuICAvLyAgIGNvbnN0IHRyYXZlcnNlRm9ybSA9IChmb3JtOiBGb3JtR3JvdXAgfCBGb3JtQXJyYXksIHByZWZpeCA9ICcnKSA9PiB7XG4gIC8vICAgICBpZiAoZm9ybSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAvLyAgICAgICBPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XG4gIC8vICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm0uY29udHJvbHNba2V5XTtcbiAgLy8gICAgICAgICAvLyBjb25zdCBkaXNwbGF5TmFtZSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcbiAgLy8gICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGtleTtcbiAgLy8gICAgICAgICBjb25zdCBmdWxsS2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fS4ke2Rpc3BsYXlOYW1lfWAgOiBkaXNwbGF5TmFtZTtcbiAgLy8gICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XG4gIC8vICAgICAgICAgICB2YWxpZGF0aW9uU3RhdHVzW2Z1bGxLZXldID0gY29udHJvbC52YWxpZDtcbiAgLy8gICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgLy8gICAgICAgICAgIHRyYXZlcnNlRm9ybShjb250cm9sLCBmdWxsS2V5KTtcbiAgLy8gICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgLy8gICAgICAgICAgIHRyYXZlcnNlRm9ybShjb250cm9sLCBmdWxsS2V5KTtcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH0pO1xuICAvLyAgICAgfSBlbHNlIGlmIChmb3JtIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gIC8vICAgICAgIGZvcm0uY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCwgaW5kZXgpID0+IHtcbiAgLy8gICAgICAgICBjb25zdCBmdWxsS2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fVske2luZGV4fV1gIDogYFske2luZGV4fV1gO1xuICAvLyAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgLy8gICAgICAgICAgIHZhbGlkYXRpb25TdGF0dXNbZnVsbEtleV0gPSBjb250cm9sLnZhbGlkO1xuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAvLyAgICAgICAgICAgdHJhdmVyc2VGb3JtKGNvbnRyb2wsIGZ1bGxLZXkpO1xuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAvLyAgICAgICAgICAgdHJhdmVyc2VGb3JtKGNvbnRyb2wsIGZ1bGxLZXkpO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICB9XG4gIC8vICAgfTtcblxuICAvLyAgIHRyYXZlcnNlRm9ybShmb3JtRW50aXR5KTtcblxuICAvLyAgIHJldHVybiB2YWxpZGF0aW9uU3RhdHVzO1xuICAvLyB9XG5cbiAgLyoq6I635Y+W6KGo5Y2V6aqM6K+B54q25oCBICovXG4gIC8vIGdldEZvcm1WYWxpZGF0aW9uU3RhdHVzKGZvcm1FbnRpdHk6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAvLyAgIGNvbnN0IHZhbGlkYXRpb25TdGF0dXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAvLyAgIGNvbnN0IHRyYXZlcnNlRm9ybSA9IChmb3JtOiBGb3JtR3JvdXAgfCBGb3JtQXJyYXksIHByZWZpeCA9ICcnKSA9PiB7XG4gIC8vICAgICAvL+ajgOafpWZvcm3mmK/lkKbkuLpGb3JtR3JvdXDov5jmmK9mb3JtQXJyYXks5aaC5p6c5pivRm9ybUdyb3Vw5YiZ57un57ut6YGN5Y6GLOWmguaenOaYr0Zvcm1BcnJheeWImemBjeWOhkZvcm1BcnJheVxuICAvLyAgICAgaWYgKGZvcm0gaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgICAgXG4gIC8vICAgICB9IGVsc2UgaWYgKGZvcm0gaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgXG4gIC8vICAgICB9IFxuXG4gIC8vICAgfVxuICAvLyAgIHRyYXZlcnNlRm9ybShmb3JtRW50aXR5KTtcbiAgLy8gICByZXR1cm4gdmFsaWRhdGlvblN0YXR1c1xuICAvLyB9XG5wcml2YXRlIF9Mb2NhdGlvbkJhY2tTZXJ2aWNlPWluamVjdChMb2NhdGlvbkJhY2tTZXJ2aWNlKTtcbiAgLyoq5o+Q5LqkICovXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5jdWx0dXJlSW5wdXQuZW5hYmxlKCk7XG4gICAgdGhpcy5kcmFmdElucHV0LnBhdGNoVmFsdWUodGhpcy5kcmFmdFZhbHVlIHx8IGZhbHNlKTtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZm9ybUVudGl0eT8udmFsdWU7XG4gICAgaW5wdXQuY3VsdHVyZSA9IHRoaXMuY3VsdHVyZU5hbWU7XG4gICAgaW5wdXQucHVibGlzaFRpbWUgPSBuZXcgRGF0ZShcbiAgICAgIG5ldyBEYXRlKGlucHV0LnB1Ymxpc2hUaW1lKS5nZXRUaW1lKCkgKyA4ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgKS50b0lTT1N0cmluZygpO1xuICAgIGlucHV0LmNvbmN1cnJlbmN5U3RhbXAgPSB0aGlzLmVudHJ5SW5mby5jb25jdXJyZW5jeVN0YW1wO1xuICAgIHRoaXMuZm9ybVZhbGlkYXRpb24gPSB0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5nZXRGb3JtVmFsaWRhdGlvblN0YXR1cyh0aGlzLmZvcm1FbnRpdHkpO1xuICAgIC8vIGlmICh0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5pc0NoZWNrRm9ybSh0aGlzLmZvcm1WYWxpZGF0aW9uLCAnQ21zJykpe1xuICAgIC8vICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xuICAgIC8vICAgcmV0dXJuIHRoaXMuY3VsdHVyZUlucHV0LmRpc2FibGUoKTtcbiAgICAvLyB9XG5cbiAgICAvLyB0aGlzLmZvcm1WYWxpZGF0aW9uID0gdGhpcy5nZXRGb3JtVmFsaWRhdGlvblN0YXR1cyh0aGlzLmZvcm1FbnRpdHkpO1xuICAgIGlmICh0aGlzLmlzQ2hlY2tGb3JtQ21zKHRoaXMuZm9ybVZhbGlkYXRpb24sICdDbXMnKSkge1xuICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuY3VsdHVyZUlucHV0LmRpc2FibGUoKTtcbiAgICB9XG4gICAgLy8gdGhpcy5mb3JtVmFsaWRhdGlvbiA9IHRoaXMuZ2V0Rm9ybVZhbGlkYXRpb25TdGF0dXModGhpcy5mb3JtRW50aXR5KTtcbiAgICAvLyByZXR1cm4gdGhpcy5pc1N1Ym1pdD1mYWxzZTtcbiAgICBpZiAoIXRoaXMuZm9ybUVudGl0eS52YWxpZCkgcmV0dXJuO1xuICAgIHRoaXMuX0VudHJ5QWRtaW5TZXJ2aWNlXG4gICAgICAudXBkYXRlKHRoaXMuZW50cnlJbmZvLmlkLCBpbnB1dClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBBYnBVaTo6U2F2ZWRTdWNjZXNzZnVsbHlgKSk7XG4gICAgICAgIHRoaXMuX0xvY2F0aW9uQmFja1NlcnZpY2UuYmFja1RvKHtcbiAgICAgICAgICB1cmw6IGAvY21zL2FkbWluL2VudHJpZXNgLFxuICAgICAgICAgIHJlcGxlbmlzaDogJy9jcmVhdGUnIFxuICAgICAgICB9KVxuICAgICAgICB0aGlzLl91cGRhdGVMaXN0U2VydmljZS51cGRhdGVMaXN0KCk7XG4gICAgICB9KTtcbiAgfVxuICBpc1N1Ym1pdDogYm9vbGVhbiB8IGFueSA9IGZhbHNlO1xuICBkcmFmdFZhbHVlOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq54K55Ye75o+Q5LqkICovXG4gIGNsaWNrU3VibWl0KHR5cGUpIHtcbiAgICBpZiAodGhpcy5pc1N1Ym1pdCkgcmV0dXJuO1xuICAgIHRoaXMuaXNTdWJtaXQgPSB0cnVlO1xuICAgIHRoaXMuZHJhZnRWYWx1ZSA9IHR5cGU7XG4gICAgdGhpcy5jdWx0dXJlSW5wdXQuZW5hYmxlKCk7XG4gICAgdGhpcy5zdWJtaXRjbGljaz8ubmF0aXZlRWxlbWVudD8uY2xpY2soKTtcbiAgfVxuXG4gIC8qKui/lOWbnuS4iuS4gOmhtSAqL1xuICBiYWNrVG8oKSB7XG4gICAgdGhpcy5fbG9jYXRpb24uYmFjaygpO1xuICB9XG59XG4iLCI8YWJwLXBhZ2UgW3RpdGxlXT1cIidDbXM6OkVkaXQnfCBhYnBMb2NhbGl6YXRpb25cIiBbdG9vbGJhcl09XCJ0cnVlXCI+XG4gICAgPGZvcm0gY2xhc3M9XCJyb3cgZy0zIG5lZWRzLXZhbGlkYXRpb25cIlxuICAgICAgICBbY2xhc3NdPVwieyd3YXMtdmFsaWRhdGVkJzpmb3JtVmFsaWRhdGlvbn1cIiAgW2Zvcm1Hcm91cF09XCJmb3JtRW50aXR5XCIgIChzdWJtaXQpPVwic2F2ZSgpXCIgPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgI3N1Ym1pdGNsaWNrPjwvYnV0dG9uPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUVudGl0eSYmZW50cnlJbmZvXCI+XG4gICAgICAgICAgICAgICAgPGNtcy1jcmVhdGUtb3ItZWRpdC1lbnRyaWVzICBbc2VjdGlvbklkXT1cInNlY3Rpb25JZFwiIFtlbnRyeVR5cGVJZF09XCJlbnRyeVR5cGVJZFwiIFtpc0VkaXRdPVwidHJ1ZVwiIFtzZWxlY3RdPVwiZW50cnlJbmZvXCIgIChmZWVkYmFja0NoaWxkSW5mbyk9XCJfZmVlZGJhY2tDaGlsZEluZm8oJGV2ZW50KVwiICBbZW50aXR5XT1cImZvcm1FbnRpdHlcIj48L2Ntcy1jcmVhdGUtb3ItZWRpdC1lbnRyaWVzPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgPC9mb3JtPlxuPC9hYnAtcGFnZT5cbiJdfQ==
|