@openziti/ziti-console-lib 0.12.9 → 0.12.11
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/assets/html/index.htm +51 -8
- package/assets/styles/global.scss +1 -0
- package/assets/svgs/identity-marker.svg +8 -0
- package/assets/svgs/router-marker.svg +7 -0
- package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +18 -5
- package/esm2022/lib/features/data-table/data-table.component.mjs +5 -3
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +13 -3
- package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +3 -1
- package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +35 -13
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +4 -4
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +51 -12
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +16 -5
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +3 -1
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +4 -2
- package/esm2022/lib/features/projectable-forms/session/session-form.component.mjs +3 -3
- package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +2 -2
- package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +3 -3
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +6 -1
- package/esm2022/lib/pages/identities/identities-page.component.mjs +3 -9
- package/esm2022/lib/pages/identities/identities-page.service.mjs +50 -1
- package/esm2022/lib/pages/services/services-page.component.mjs +2 -13
- package/esm2022/lib/pages/services/services-page.service.mjs +35 -2
- package/esm2022/lib/pages/terminators/terminators-page.component.mjs +7 -5
- package/esm2022/lib/services/ziti-controller-data.service.mjs +4 -4
- package/esm2022/lib/services/ziti-data.service.mjs +1 -1
- package/esm2022/lib/shared/list-page-component.class.mjs +4 -1
- package/esm2022/lib/shared/list-page-service.class.mjs +5 -2
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/openziti-ziti-console-lib.mjs +255 -77
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts +2 -6
- package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts.map +1 -1
- package/lib/features/data-table/data-table.component.d.ts +1 -0
- package/lib/features/data-table/data-table.component.d.ts.map +1 -1
- package/lib/features/preview-list/preview-list.component.d.ts +3 -1
- package/lib/features/preview-list/preview-list.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts +1 -0
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts +9 -3
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +1 -5
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.component.d.ts +0 -2
- package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.service.d.ts +3 -0
- package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
- package/lib/pages/services/services-page.component.d.ts +0 -3
- package/lib/pages/services/services-page.component.d.ts.map +1 -1
- package/lib/pages/services/services-page.service.d.ts +2 -0
- package/lib/pages/services/services-page.service.d.ts.map +1 -1
- package/lib/services/ziti-controller-data.service.d.ts +1 -1
- package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
- package/lib/services/ziti-data.service.d.ts +1 -1
- package/lib/services/ziti-data.service.d.ts.map +1 -1
- package/lib/shared/list-page-component.class.d.ts.map +1 -1
- package/lib/shared/list-page-service.class.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { Injectable, Inject, InjectionToken } from "@angular/core";
|
|
17
|
-
import { isEmpty, isString, keys, some, defer, cloneDeep, filter } from 'lodash';
|
|
17
|
+
import { isEmpty, isString, keys, map, some, defer, cloneDeep, filter, debounce } from 'lodash';
|
|
18
18
|
import { ZITI_DATA_SERVICE } from "../../../services/ziti-data.service";
|
|
19
19
|
import { GrowlerModel } from "../../messaging/growler.model";
|
|
20
20
|
import { SETTINGS_SERVICE } from "../../../services/settings.service";
|
|
@@ -83,10 +83,12 @@ class ServiceFormService {
|
|
|
83
83
|
this.associatedTerminatorNames = [];
|
|
84
84
|
this.associatedTerminatorsMap = {};
|
|
85
85
|
this.associatedTerminatorsTotal = 0;
|
|
86
|
+
this.associatedTerminatorsFilter = '';
|
|
86
87
|
this.associatedServicePolicies = [];
|
|
87
88
|
this.associatedServicePolicyNames = [];
|
|
88
89
|
this.associatedServicePoliciesMap = {};
|
|
89
90
|
this.associatedServicePoliciesTotal = 0;
|
|
91
|
+
this.associatedServicePoliciesFilter = '';
|
|
90
92
|
this.associatedConfigsLoading = false;
|
|
91
93
|
this.associatedServicePoliciesLoading = false;
|
|
92
94
|
this.associatedTerminatorsLoading = false;
|
|
@@ -105,6 +107,8 @@ class ServiceFormService {
|
|
|
105
107
|
'var(--formSubGroup)'
|
|
106
108
|
];
|
|
107
109
|
this.subscription = new Subscription();
|
|
110
|
+
this.getAssociatedServicePoliciesDebounced = debounce(this.getAssociatedServicePolicies.bind(this), 300);
|
|
111
|
+
this.getAssociatedTerminatorsDebounced = debounce(this.getAssociatedTerminators.bind(this), 300);
|
|
108
112
|
this._apiData = {};
|
|
109
113
|
}
|
|
110
114
|
resetFormData() {
|
|
@@ -148,11 +152,24 @@ class ServiceFormService {
|
|
|
148
152
|
throw resp;
|
|
149
153
|
});
|
|
150
154
|
}
|
|
151
|
-
getAssociatedServicePolicies() {
|
|
155
|
+
getAssociatedServicePolicies(nameFilter) {
|
|
152
156
|
const paging = this.zitiService.DEFAULT_PAGING;
|
|
153
157
|
paging.total = 5;
|
|
154
158
|
this.associatedServicePoliciesLoading = true;
|
|
155
|
-
|
|
159
|
+
const filters = [];
|
|
160
|
+
if (!isEmpty(nameFilter)) {
|
|
161
|
+
paging.noSearch = false;
|
|
162
|
+
filters.push({
|
|
163
|
+
columnId: 'name',
|
|
164
|
+
value: nameFilter,
|
|
165
|
+
label: nameFilter,
|
|
166
|
+
filterName: 'Service Policy Name',
|
|
167
|
+
type: 'TEXTINPUT',
|
|
168
|
+
verb: 'icontains'
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
this.associatedServicePoliciesFilter = nameFilter;
|
|
172
|
+
this.zitiService.getSubdata('services', this.formData.id, 'service-policies', paging, undefined, filters).then((result) => {
|
|
156
173
|
this.associatedServicePolicies = result.data;
|
|
157
174
|
this.associatedServicePoliciesTotal = result.meta?.pagination.totalCount || 0;
|
|
158
175
|
this.associatedServicePolicyNames = this.associatedServicePolicies.map((policy) => {
|
|
@@ -162,8 +179,8 @@ class ServiceFormService {
|
|
|
162
179
|
});
|
|
163
180
|
if (this.associatedServicePoliciesTotal > 5) {
|
|
164
181
|
let roleAttributes = cloneDeep(this.formData.roleAttributes);
|
|
165
|
-
roleAttributes =
|
|
166
|
-
return '%23' + attribute;
|
|
182
|
+
roleAttributes = map(roleAttributes, (attribute) => {
|
|
183
|
+
return ('%23' + attribute);
|
|
167
184
|
});
|
|
168
185
|
roleAttributes.push('%40' + this.formData.id);
|
|
169
186
|
let urlParam = '';
|
|
@@ -182,7 +199,7 @@ class ServiceFormService {
|
|
|
182
199
|
};
|
|
183
200
|
localStorage.setItem('search_filters', JSON.stringify([searchFilter]));
|
|
184
201
|
this.associatedServicePolicies.push({
|
|
185
|
-
name: '
|
|
202
|
+
name: 'view all results ',
|
|
186
203
|
href: '/service-policies?serviceRoles=' + urlParam,
|
|
187
204
|
linkClass: 'preview-more-results',
|
|
188
205
|
//iconClass: 'icon-open',
|
|
@@ -193,12 +210,28 @@ class ServiceFormService {
|
|
|
193
210
|
this.associatedServicePoliciesLoading = false;
|
|
194
211
|
});
|
|
195
212
|
}
|
|
196
|
-
getAssociatedTerminators() {
|
|
213
|
+
getAssociatedTerminators(nameFilter) {
|
|
197
214
|
this.associatedTerminatorsLoading = true;
|
|
198
|
-
this.
|
|
215
|
+
this.associatedTerminatorsFilter = nameFilter;
|
|
216
|
+
const paging = this.zitiService.DEFAULT_PAGING;
|
|
217
|
+
paging.total = 5;
|
|
218
|
+
paging.sort = 'createdAt';
|
|
219
|
+
const filters = [];
|
|
220
|
+
if (!isEmpty(nameFilter)) {
|
|
221
|
+
paging.noSearch = false;
|
|
222
|
+
filters.push({
|
|
223
|
+
columnId: 'service.name',
|
|
224
|
+
value: nameFilter,
|
|
225
|
+
label: nameFilter,
|
|
226
|
+
filterName: 'Service Name',
|
|
227
|
+
type: 'TEXTINPUT',
|
|
228
|
+
verb: 'icontains'
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
this.zitiService.getSubdata('services', this.formData.id, 'terminators', paging, undefined, filters).then((result) => {
|
|
199
232
|
this.associatedTerminators = result.data;
|
|
200
233
|
this.associatedTerminatorsTotal = result.meta?.pagination.totalCount || 0;
|
|
201
|
-
this.associatedTerminatorNames = this.associatedTerminators
|
|
234
|
+
this.associatedTerminatorNames = map(this.associatedTerminators, (terminator) => {
|
|
202
235
|
this.associatedTerminatorsMap[terminator.id] = terminator.binding + ': ' + terminator.address;
|
|
203
236
|
terminator.name = terminator.router.name + ': ' + terminator.address;
|
|
204
237
|
terminator.href = '/terminators/' + terminator.id;
|
|
@@ -215,7 +248,7 @@ class ServiceFormService {
|
|
|
215
248
|
};
|
|
216
249
|
localStorage.setItem('search_filters', JSON.stringify([searchFilter]));
|
|
217
250
|
this.associatedTerminators.push({
|
|
218
|
-
name: '
|
|
251
|
+
name: 'view all results ',
|
|
219
252
|
href: '/terminators?service=' + this.formData.id,
|
|
220
253
|
linkClass: 'preview-more-results',
|
|
221
254
|
//iconClass: 'icon-open',
|
|
@@ -285,7 +318,7 @@ class ServiceFormService {
|
|
|
285
318
|
this.routers = result.data;
|
|
286
319
|
});
|
|
287
320
|
}
|
|
288
|
-
getAssociatedConfigs() {
|
|
321
|
+
getAssociatedConfigs(nameFilter) {
|
|
289
322
|
this.associatedConfigsLoading = true;
|
|
290
323
|
this.zitiService.getSubdata('services', this.formData.id, 'configs').then((result) => {
|
|
291
324
|
this.associatedConfigs = result.data;
|
|
@@ -503,6 +536,12 @@ class ServiceFormService {
|
|
|
503
536
|
}
|
|
504
537
|
return isEmpty(this.configErrors);
|
|
505
538
|
}
|
|
539
|
+
get showServicePoliciesFilter() {
|
|
540
|
+
return !isEmpty(this.associatedServicePoliciesFilter) || this.associatedServicePoliciesTotal > 5;
|
|
541
|
+
}
|
|
542
|
+
get showTerminatorsFilter() {
|
|
543
|
+
return !isEmpty(this.associatedTerminatorsFilter) || this.associatedTerminatorsTotal > 5;
|
|
544
|
+
}
|
|
506
545
|
set apiData(data) {
|
|
507
546
|
this._apiData = data;
|
|
508
547
|
}
|
|
@@ -550,4 +589,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
550
589
|
type: Inject,
|
|
551
590
|
args: [SERVICE_EXTENSION_SERVICE]
|
|
552
591
|
}] }, { type: i2.SchemaService }, { type: i3.ValidationService }, { type: i4.Router }]; } });
|
|
553
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvc2VydmljZS9zZXJ2aWNlLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFpQyxNQUFNLFFBQVEsQ0FBQztBQUMvRyxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFFdkYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFLbEMsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQU0sMkJBQTJCLENBQUMsQ0FBQztBQUU5RixNQUdhLGtCQUFrQjtJQStFM0IsWUFDcUMsZUFBZ0MsRUFDOUIsV0FBNEIsRUFDdkQsY0FBOEIsRUFDSSxVQUE0QixFQUM5RCxTQUF3QixFQUN4QixpQkFBb0MsRUFDcEMsTUFBYztRQU5XLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDdkQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0ksZUFBVSxHQUFWLFVBQVUs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QUMsRUFBRTtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsR0FBRSxLQUFLO1FBQ3hCLE1BQU0sY0FBYyxHQUFHLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDM0M7UUFDRCxPQUFPLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBbmpCUSxrQkFBa0Isa0JBZ0ZmLGdCQUFnQixhQUNoQixpQkFBaUIsMkNBRWpCLHlCQUF5QjttSEFuRjVCLGtCQUFrQixjQUZmLE1BQU07O1NBRVQsa0JBQWtCOzRGQUFsQixrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFpRlEsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUN2QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBRXhCLE1BQU07MkJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3QsIEluamVjdGlvblRva2VufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtpc0VtcHR5LCBpc1N0cmluZywga2V5cywgc29tZSwgZGVmZXIsIGNsb25lRGVlcCwgZmlsdGVyLCBmb3JFYWNoLCBpc05pbCwgaXNCb29sZWFuLCBzZXR9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuaW1wb3J0IHtTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL3NlcnZpY2VcIjtcbmltcG9ydCB7U2NoZW1hU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3NjaGVtYS5zZXJ2aWNlXCI7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Q29uZmlnRWRpdG9yQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vY29uZmlnLWVkaXRvci9jb25maWctZWRpdG9yLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtWYWxpZGF0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcblxuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfRVhURU5TSU9OX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRScpO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlcnZpY2VGb3JtU2VydmljZSB7XG5cbiAgICBwYWdpbmcgPSB7XG4gICAgICAgIGZpbHRlcjogXCJcIixcbiAgICAgICAgbm9TZWFyY2g6IHRydWUsXG4gICAgICAgIG9yZGVyOiBcImFzY1wiLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICBzZWFyY2hPbjogXCJuYW1lXCIsXG4gICAgICAgIHNvcnQ6IFwibmFtZVwiLFxuICAgICAgICB0b3RhbDogMTAwXG4gICAgfVxuXG4gICAgZm9ybURhdGE6IGFueSA9IHt9O1xuICAgIHNlbGVjdGVkQ29uZmlnOiBhbnkgPSB7fTtcbiAgICBjb25maWdEYXRhOiBhbnk7XG4gICAgc2VsZWN0ZWRDb25maWdJZDogYW55ID0gJyc7XG4gICAgY29uZmlnczogYW55ID0gW107XG4gICAgY29uZmlnVHlwZXM6IGFueSA9IFtdO1xuICAgIGZpbHRlcmVkQ29uZmlnczogYW55ID0gW107XG4gICAgY29uZmlnc0xvYWRpbmcgPSBmYWxzZTtcbiAgICBzaG93Q2ZnUHJldmlld09wdGlvbiA9IGZhbHNlO1xuICAgIHNlbGVjdGVkQ29uZmlnTmFtZTogYW55ID0gJyc7XG4gICAgc2VsZWN0ZWRDb25maWdUeXBlSWQ6IGFueSA9ICcnO1xuICAgIHNlbGVjdGVkQ29uZmlnVHlwZTogYW55ID0ge307XG4gICAgYWRkZWRDb25maWdzOiBhbnkgPSBbXTtcbiAgICBhZGRlZFRlcm1pbmF0b3JOYW1lczogYW55ID0gW107XG4gICAgYWRkZWRUZXJtaW5hdG9yczogYW55ID0gW107XG4gICAgY29uZmlnSnNvblZpZXcgPSBmYWxzZTtcbiAgICBoaWRlQ29uZmlnSlNPTiA9IGZhbHNlO1xuICAgIGNvbmZpZ0Vycm9yczogYW55ID0ge307XG4gICAgdGVybWluYXRvckVycm9yczogYW55ID0ge307XG4gICAgbmV3Q29uZmlnTmFtZTogc3RyaW5nID0gJyc7XG4gICAgdGVybWluYXRvckhvc3Q6IHN0cmluZyA9ICcnO1xuICAgIHRlcm1pbmF0b3JQb3J0OiBzdHJpbmcgPSAnJztcbiAgICBzZWxlY3RlZFNjaGVtYTogYW55ID0ge307XG4gICAgaXRlbXM6IGFueSA9IFtdO1xuICAgIHJvdXRlcnM6IGFueSA9IFtdO1xuICAgIGNvbmZpZ0RhdGFMYWJlbCA9ICdDb25maWd1cmF0aW9uIEZvcm0nO1xuICAgIGF0dGFjaExhYmVsID0gJ0NyZWF0ZSBhbmQgQXR0YWNoJztcbiAgICBlcnJvcnM6IGFueSA9IHt9O1xuICAgIHNlbGVjdGVkUm91dGVySWQ6IHN0cmluZyA9ICcnO1xuICAgIHNlbGVjdGVkUm91dGVyOiBhbnk7XG4gICAgc2VsZWN0ZWRCaW5kaW5nSWQ6IHN0cmluZyA9ICcnO1xuICAgIHRlcm1pbmF0b3JQcm90b2NvbCA9ICd1ZHAnO1xuICAgIHNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuICAgIGFzc29jaWF0ZWRDb25maWdzOiBhbnkgPSBbXTtcbiAgICBhc3NvY2lhdGVkQ29uZmlnc01hcDogYW55ID0ge307XG4gICAgYXNzb2NpYXRlZFRlcm1pbmF0b3JzOiBhbnkgPSBbXTtcbiAgICBhc3NvY2lhdGVkVGVybWluYXRvck5hbWVzOiBhbnkgPSBbXTtcbiAgICBhc3NvY2lhdGVkVGVybWluYXRvcnNNYXA6IGFueSA9IHt9O1xuICAgIGFzc29jaWF0ZWRUZXJtaW5hdG9yc1RvdGFsID0gMDtcbiAgICBhc3NvY2lhdGVkU2VydmljZVBvbGljaWVzOiBhbnkgPSBbXTtcbiAgICBhc3NvY2lhdGVkU2VydmljZVBvbGljeU5hbWVzOiBhbnkgPSBbXTtcbiAgICBhc3NvY2lhdGVkU2VydmljZVBvbGljaWVzTWFwOiBhbnkgPSB7fTtcbiAgICBhc3NvY2lhdGVkU2VydmljZVBvbGljaWVzVG90YWwgPSAwO1xuICAgIGFzc29jaWF0ZWRDb25maWdzTG9hZGluZyA9IGZhbHNlO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNMb2FkaW5nID0gZmFsc2U7XG4gICAgYXNzb2NpYXRlZFRlcm1pbmF0b3JzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zID0ge1xuICAgICAgICBmaWx0ZXJUeXBlOiAnVEVYVElOUFVUJyxcbiAgICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZVxuICAgIH07XG5cbiAgICBsQ29sb3JBcnJheSA9IFtcbiAgICAgICAgJ3doaXRlJyxcbiAgICAgICAgJ3doaXRlJyxcbiAgICAgICAgJ3doaXRlJyxcbiAgICBdXG5cbiAgICBiQ29sb3JBcnJheSA9IFtcbiAgICAgICAgJ3ZhcigtLWZvcm1CYXNlKScsXG4gICAgICAgICd2YXIoLS1mb3JtR3JvdXApJyxcbiAgICAgICAgJ3ZhcigtLWZvcm1TdWJHcm91cCknXG4gICAgXVxuXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBjb25maWdFZGl0b3I6IENvbmZpZ0VkaXRvckNvbXBvbmVudDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIHByaXZhdGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRSlwcml2YXRlIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2NoZW1hU3ZjOiBTY2hlbWFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICAgICkge31cblxuICAgIHJlc2V0Rm9ybURhdGEoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdOYW1lID0gJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQgPSAnJztcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcCA9IHt9O1xuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlncyA9IFtdO1xuICAgICAgICB0aGlzLmVycm9ycyA9IHt9O1xuICAgICAgICB0aGlzLm5ld0NvbmZpZ05hbWUgPSAnJztcbiAgICB9XG5cbiAgICBzYXZlKGZvcm1EYXRhKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaXNVcGRhdGUgPSAhaXNFbXB0eShmb3JtRGF0YS5pZCk7XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHRoaXMuZ2V0U2VydmljZURhdGFNb2RlbChmb3JtRGF0YSwgaXNVcGRhdGUpO1xuICAgICAgICBsZXQgcHJvbTtcbiAgICAgICAgaWYgKGlzVXBkYXRlKSB7XG4gICAgICAgICAgICBwcm9tID0gdGhpcy56aXRpU2VydmljZS5wYXRjaCgnc2VydmljZXMnLCBkYXRhLCBmb3JtRGF0YS5pZCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9tID0gdGhpcy56aXRpU2VydmljZS5wb3N0KCdzZXJ2aWNlcycsIGRhdGEsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb20udGhlbihhc3luYyAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaXNVcGRhdGUgPyBmb3JtRGF0YS5pZCA6IChyZXN1bHQ/LmRhdGE/LmlkIHx8IHJlc3VsdD8uaWQpO1xuICAgICAgICAgICAgbGV0IHN2YyA9IGF3YWl0IHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnc2VydmljZXMnLCBpZCwgJycpLnRoZW4oKHN2Y0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ZjRGF0YS5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHRTZXJ2aWNlLmZvcm1EYXRhU2F2ZWQoc3ZjKS50aGVuKChmb3JtU2F2ZWRSZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZm9ybVNhdmVkUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdmM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgIGBTZXJ2aWNlcyAke2lzVXBkYXRlID8gJ1VwZGF0ZWQnIDogJ0NyZWF0ZWQnfWAsXG4gICAgICAgICAgICAgICAgICAgIGBTdWNjZXNzZnVsbHkgJHtpc1VwZGF0ZSA/ICd1cGRhdGVkJyA6ICdjcmVhdGVkJ30gU2VydmljZTogJHtmb3JtRGF0YS5uYW1lfWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmM7XG4gICAgICAgICAgICB9KS5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLmNhdGNoKChyZXNwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLnppdGlTZXJ2aWNlLmdldEVycm9yTWVzc2FnZShyZXNwKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgYEVycm9yICR7aXNVcGRhdGUgPyAnVXBkYXRpbmcnIDogJ0NyZWF0aW5nJ30gU2VydmljZWAsXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICB0aHJvdyByZXNwO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldEFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXMoKSB7XG4gICAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMueml0aVNlcnZpY2UuREVGQVVMVF9QQUdJTkc7XG4gICAgICAgIHBhZ2luZy50b3RhbCA9IDU7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgdGhpcy5mb3JtRGF0YS5pZCwgJ3NlcnZpY2UtcG9saWNpZXMnLCBwYWdpbmcpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc1RvdGFsID0gcmVzdWx0Lm1ldGE/LnBhZ2luYXRpb24udG90YWxDb3VudCB8fCAwO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljeU5hbWVzID0gdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzLm1hcCgocG9saWN5KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzTWFwW3BvbGljeS5uYW1lXSA9IHBvbGljeTtcbiAgICAgICAgICAgICAgICBwb2xpY3kuaHJlZiA9ICcvc2VydmljZS1wb2xpY2llcy8nICsgcG9saWN5LmlkO1xuICAgICAgICAgICAgICAgIHJldHVybiBwb2xpY3kubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc1RvdGFsID4gNSkge1xuICAgICAgICAgICAgICAgIGxldCByb2xlQXR0cmlidXRlcyA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhLnJvbGVBdHRyaWJ1dGVzKTtcblxuICAgICAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzID0gcm9sZUF0dHJpYnV0ZXMubWFwKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICclMjMnICsgYXR0cmlidXRlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzLnB1c2goJyU0MCcgKyB0aGlzLmZvcm1EYXRhLmlkKTtcbiAgICAgICAgICAgICAgICBsZXQgdXJsUGFyYW0gPSAnJztcbiAgICAgICAgICAgICAgICByb2xlQXR0cmlidXRlcy5mb3JFYWNoKChwYXJhbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsUGFyYW0gKz0gJywnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHVybFBhcmFtICs9IHBhcmFtXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoRmlsdGVyID0ge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5JZDogJ3NlcnZpY2VSb2xlcycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByb2xlQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdAJyArIHRoaXMuZm9ybURhdGEubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZTogJ1NlcnZpY2UgQXR0cmlidXRlcycsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBVFRSSUJVVEUnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VhcmNoX2ZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeShbc2VhcmNoRmlsdGVyXSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Nob3cgbW9yZSByZXN1bHRzLi4uJyxcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogJy9zZXJ2aWNlLXBvbGljaWVzP3NlcnZpY2VSb2xlcz0nICsgdXJsUGFyYW0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmtDbGFzczogJ3ByZXZpZXctbW9yZS1yZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgLy9pY29uQ2xhc3M6ICdpY29uLW9wZW4nLFxuICAgICAgICAgICAgICAgICAgICBza2lwU29ydDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZFRlcm1pbmF0b3JzKCkge1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgdGhpcy5mb3JtRGF0YS5pZCwgJ3Rlcm1pbmF0b3JzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFRlcm1pbmF0b3JzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc1RvdGFsID0gcmVzdWx0Lm1ldGE/LnBhZ2luYXRpb24udG90YWxDb3VudCB8fCAwO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvck5hbWVzID0gdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnMubWFwKCh0ZXJtaW5hdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnNNYXBbdGVybWluYXRvci5pZF0gPSB0ZXJtaW5hdG9yLmJpbmRpbmcgKyAnOiAgICAgICcgKyB0ZXJtaW5hdG9yLmFkZHJlc3M7XG4gICAgICAgICAgICAgICAgdGVybWluYXRvci5uYW1lID0gdGVybWluYXRvci5yb3V0ZXIubmFtZSArICc6ICAgICAgICcgKyB0ZXJtaW5hdG9yLmFkZHJlc3M7XG4gICAgICAgICAgICAgICAgdGVybWluYXRvci5ocmVmID0gJy90ZXJtaW5hdG9ycy8nICsgdGVybWluYXRvci5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVybWluYXRvci5iaW5kaW5nICsgJzogICAgICAnICsgdGVybWluYXRvci5hZGRyZXNzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnNUb3RhbCA+IDUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hGaWx0ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbklkOiAnc2VydmljZScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1EYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5mb3JtRGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lOiAnU2VydmljZScsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdURVhUSU5QVVQnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnPSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWFyY2hfZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KFtzZWFyY2hGaWx0ZXJdKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzaG93IG1vcmUgcmVzdWx0cy4uLicsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6ICcvdGVybWluYXRvcnM/c2VydmljZT0nICsgdGhpcy5mb3JtRGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGlua0NsYXNzOiAncHJldmlldy1tb3JlLXJlc3VsdHMnLFxuICAgICAgICAgICAgICAgICAgICAvL2ljb25DbGFzczogJ2ljb24tb3BlbicsXG4gICAgICAgICAgICAgICAgICAgIHNraXBTb3J0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXZpZXdDb25maWcoY29uZmlnTmFtZSwgcm91dGVyKSB7XG4gICAgICAgIHRoaXMuc2hvd0NmZ1ByZXZpZXdPcHRpb24gPSB0cnVlO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENvbmZpZyA9IHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NNYXBbY29uZmlnTmFtZV07XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbJy9jb25maWdzLycgKyBzZWxlY3RlZENvbmZpZy5pZF0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldmlld1BvbGljeShwb2xpY3lOYW1lLCByb3V0ZXIpIHtcbiAgICAgICAgdGhpcy5zaG93Q2ZnUHJldmlld09wdGlvbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUG9saWN5ID0gdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzTWFwW3BvbGljeU5hbWVdO1xuICAgICAgICByb3V0ZXIubmF2aWdhdGUoWycvc2VydmljZS1wb2xpY2llcy8nICsgc2VsZWN0ZWRQb2xpY3kuaWRdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByZXZpZXdUZXJtaW5hdG9yKHBvbGljeU5hbWUsIHJvdXRlcikge1xuICAgICAgICB0aGlzLnNob3dDZmdQcmV2aWV3T3B0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZXJtaW5hdG9yID0gdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnNNYXBbcG9saWN5TmFtZV07XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbJy90ZXJtaW5hdG9ycy8nICsgc2VsZWN0ZWRUZXJtaW5hdG9yLmlkXSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhZGRUZXJtaW5hdG9ycyhzZXJ2aWNlSWQpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hZGRlZFRlcm1pbmF0b3JzLmZvckVhY2goKHRlcm1pbmF0b3IpID0+IHtcbiAgICAgICAgICAgIHRlcm1pbmF0b3Iuc2VydmljZSA9IHNlcnZpY2VJZFxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnppdGlTZXJ2aWNlLnBvc3QoJ3Rlcm1pbmF0b3JzJywgdGVybWluYXRvcikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRTZXJ2aWNlRGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSkge1xuICAgICAgICBjb25zdCBzYXZlTW9kZWwgPSBuZXcgU2VydmljZSgpO1xuICAgICAgICBjb25zdCBtb2RlbFByb3BlcnRpZXMgPSBrZXlzKHNhdmVNb2RlbCk7XG4gICAgICAgIG1vZGVsUHJvcGVydGllcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2gocHJvcCkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHNhdmVNb2RlbFtwcm9wXSA9IGZvcm1EYXRhW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNhdmVNb2RlbDtcbiAgICB9XG5cbiAgICBnZXRDb25maWdUeXBlcygpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXQoJ2NvbmZpZy10eXBlcycsIHRoaXMucGFnaW5nLCBbXSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnVHlwZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0Q29uZmlncyhmaWx0ZXJzID0gW10sIHBhZ2UgPSAxKSB7XG4gICAgICAgIHRoaXMuY29uZmlnc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBwYWdpbmcgPSBjbG9uZURlZXAodGhpcy5wYWdpbmcpO1xuICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwYWdpbmcubm9TZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQoJ2NvbmZpZ3MnLCBwYWdpbmcsIGZpbHRlcnMpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3MgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnVHlwZUNoYW5nZWQoKTtcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3NMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFJvdXRlcnMoKSB7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdlZGdlLXJvdXRlcnMnLCB0aGlzLnBhZ2luZywgW10pLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlcnMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZENvbmZpZ3MoKSB7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIHRoaXMuZm9ybURhdGEuaWQsICdjb25maWdzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3MgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NNYXAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gdGhpcy5hc3NvY2lhdGVkQ29uZmlncy5tYXAoKGNmZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NNYXBbY2ZnLm5hbWVdID0gY2ZnO1xuICAgICAgICAgICAgICAgIGNmZy5ocmVmID0gJy9jb25maWdzLycgKyBjZmcuaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNmZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZUNvbmZpZyhjb25maWdEYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLnBvc3QoJ2NvbmZpZ3MnLCBjb25maWdEYXRhLCB0cnVlKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pLmNhdGNoKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICAgIGlmIChpc1N0cmluZyhyZXNwb25zZT8uZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgbXNnID0gcmVzcG9uc2U/LmVycm9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtc2cgPSByZXNwb25zZT8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICBgRXJyb3IgQ3JlYXRpbmcgTmV3IENvbmZpZ2AsXG4gICAgICAgICAgICAgICAgbXNnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ1R5cGVDaGFuZ2VkKHJlc2V0RGF0YT8pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbmZpZ3MgPSB0aGlzLmNvbmZpZ3MuZmlsdGVyKChjb25maWcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcuY29uZmlnVHlwZUlkID09PSB0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FkZCBhIE5ldyBDb25maWcnLFxuICAgICAgICAgICAgICAgIGlkOiAnYWRkLW5ldydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbmZpZ3MgPSBbLi4uZGVmYXVsdE9wdGlvbnMsIC4uLnRoaXMuZmlsdGVyZWRDb25maWdzXTtcbiAgICAgICAgdGhpcy5jb25maWdUeXBlcy5mb3JFYWNoKChjb25maWdUeXBlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9PT0gY29uZmlnVHlwZS5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlID0gY29uZmlnVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgIT09ICdwcmV2aWV3Jykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ0lkID0gIWlzRW1wdHkodGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCkgPyAnYWRkLW5ldycgOiAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbmZpZ0NoYW5nZWQocmVzZXREYXRhKTtcbiAgICB9XG5cbiAgICB1cGRhdGVkQWRkZWRDb25maWdzKCkge1xuICAgICAgICB0aGlzLmFkZGVkQ29uZmlncyA9IFtdO1xuICAgICAgICB0aGlzLmNvbmZpZ3MuZm9yRWFjaCgoYXZhaWxhYmxlQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjZmdFeGlzdHMgPSBzb21lKHRoaXMuZm9ybURhdGEuY29uZmlncywgY29uZmlnSWQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhdmFpbGFibGVDb25maWcuaWQgPT0gY29uZmlnSWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjZmdFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVDb25maWcuaHJlZiA9ICcvY29uZmlncy8nICsgYXZhaWxhYmxlQ29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzLnB1c2goYXZhaWxhYmxlQ29uZmlnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncyA9IFsuLi50aGlzLmFkZGVkQ29uZmlnc107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgdG9nZ2xlSlNPTlZpZXcoKSB7XG4gICAgICAgIHRoaXMuY29uZmlnSnNvblZpZXcgPSAhdGhpcy5jb25maWdKc29uVmlldztcbiAgICAgICAgdGhpcy5jb25maWdEYXRhTGFiZWwgPSB0aGlzLmNvbmZpZ0pzb25WaWV3ID8gJ0pTT04gQ29uZmlndXJhdGlvbicgOiAnQ29uZmlndXJhdGlvbiBGb3JtJztcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnSnNvblZpZXcpIHtcbiAgICAgICAgICAgIC8vdGhpcy5jb25maWdTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBhdHRhY2hDb25maWcoYWRkZWRDb25maWdJZCkge1xuICAgICAgICBsZXQgY29uZmlnSWQ7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPT09ICdhZGQtbmV3Jykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlQ29uZmlnKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdDb25maWc6IGFueSA9IHtcbiAgICAgICAgICAgICAgICBjb25maWdUeXBlSWQ6IHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQsXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb25maWdEYXRhLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmV3Q29uZmlnTmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3Q29uZmlnLmRhdGEgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnJlZGVmaW5lT2JqZWN0KG5ld0NvbmZpZy5kYXRhKTtcbiAgICAgICAgICAgIGNvbmZpZ0lkID0gYXdhaXQgdGhpcy5jcmVhdGVDb25maWcobmV3Q29uZmlnKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ZnID0gcmVzdWx0Py5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuaWQgPSByZXN1bHQ/LmlkID8gcmVzdWx0LmlkIDogcmVzdWx0Py5kYXRhPy5pZDtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmhyZWYgPSAnL2NvbmZpZ3MvJyArIG5ld0NvbmZpZy5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcFtuZXdDb25maWcubmFtZV0gPSB7ZGF0YTogbmV3Q29uZmlnLmRhdGEsIG5hbWU6IG5ld0NvbmZpZy5uYW1lLCBjb25maWdUeXBlSWQ6IG5ld0NvbmZpZy5jb25maWdUeXBlSWR9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3Q29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JGaWVsZCA9IHJlc3VsdD8uZXJyb3I/LmVycm9yPy5jYXVzZT8uZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eShlcnJvckZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdFcnJvcnNbZXJyb3JGaWVsZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlc3VsdD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBFcnJvciBDcmVhdGluZyBDb25maWdgLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KGNvbmZpZ0lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5jb25maWdzLnB1c2goY29uZmlnSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzLnB1c2gobmV3Q29uZmlnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncyA9IFsuLi50aGlzLmFkZGVkQ29uZmlnc107XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb25maWdzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgYE5ldyBDb25maWcgQXR0YWNoZWRgLFxuICAgICAgICAgICAgICAgICAgICBgTmV3IENvbmZpZyAke3RoaXMubmV3Q29uZmlnTmFtZX0gaGFzIGJlZW4gY3JlYXRlZCBhbmQgYXR0YWNoZWQgdG8gdGhlIHNlcnZpY2VgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0NvbmZpZ05hbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ0lkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdFZGl0b3I/LmdldENvbmZpZ0RhdGFGcm9tRm9ybSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjb25maWdBZGRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5jb25maWdzLmZvckVhY2goKGNvbmZpZ0lkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ0lkID09PSBhZGRlZENvbmZpZ0lkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ0FkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghY29uZmlnQWRkZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3Q29uZmlnO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlncy5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5pZCA9PT0gYWRkZWRDb25maWdJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuaHJlZiA9ICcvY29uZmlncy8nICsgbmV3Q29uZmlnLmlkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncy5wdXNoKG5ld0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gWy4uLnRoaXMuYWRkZWRDb25maWdzXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5jb25maWdzLnB1c2goYWRkZWRDb25maWdJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAgICAgICAnSW5mbycsXG4gICAgICAgICAgICAgICAgICAgIGBDb25maWcgQWxyZWFkeSBBdHRhY2hlZGAsXG4gICAgICAgICAgICAgICAgICAgICdDb25maWcgaGFzIGFscmVhZHkgYmVlbiBhdHRhY2hlZCB0byB0aGlzIHNlcnZpY2UnLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUNvbmZpZyhjb25maWdUb1JlbW92ZSkge1xuICAgICAgICBpZiAoY29uZmlnVG9SZW1vdmUuaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbmZpZ3MgPSBmaWx0ZXIodGhpcy5mb3JtRGF0YS5jb25maWdzLCBjb25maWdJZCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ0lkICE9PSBjb25maWdUb1JlbW92ZS5pZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbmV3Q29uZmlnSXRlbXMgPSBmaWx0ZXIodGhpcy5hZGRlZENvbmZpZ3MsIChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLm5hbWUgIT09IGNvbmZpZ1RvUmVtb3ZlLm5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncyA9IG5ld0NvbmZpZ3M7XG4gICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncyA9IG5ld0NvbmZpZ0l0ZW1zO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gJ3ByZXZpZXcnICYmIGNvbmZpZ1RvUmVtb3ZlLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRDb25maWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ0lkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY29uZmlnQ2hhbmdlZChyZXNldERhdGEgPSB0cnVlKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZENvbmZpZzogYW55ID0ge307XG4gICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IHJlc2V0RGF0YSA/IHVuZGVmaW5lZCA6IHRoaXMuY29uZmlnRGF0YTtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIGxldCBhdHRhY2hMYWJlbCA9ICdBdHRhY2ggdG8gU2VydmljZSc7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPT09ICdwcmV2aWV3Jykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNjaGVtYSA9IGF3YWl0IHRoaXMueml0aVNlcnZpY2Uuc2NoZW1hKHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlLnNjaGVtYSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkID09PSAnYWRkLW5ldycpIHtcbiAgICAgICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTY2hlbWEgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLnNjaGVtYSh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZS5zY2hlbWEpO1xuICAgICAgICAgICAgYXR0YWNoTGFiZWwgPSAnQ3JlYXRlIGFuZCBBdHRhY2gnO1xuICAgICAgICAgICAgLy90aGlzLmNyZWF0ZUZvcm0oZHluYW1pY0Zvcm0pO1xuICAgICAgICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCkge1xuICAgICAgICAgICAgYXR0YWNoTGFiZWwgPSAnQXR0YWNoIHRvIFNlcnZpY2UnO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZENvbmZpZ3MuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gY29uZmlnLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGF0YSA9IHNlbGVjdGVkQ29uZmlnPy5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkICE9PSAncHJldmlldycpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb25maWdEYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEgPSBjbG9uZURlZXAoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy90aGlzLnVwZGF0ZUNvbmZpZ0RhdGEoKTtcbiAgICAgICAgdGhpcy5hdHRhY2hMYWJlbCA9IGF0dGFjaExhYmVsO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgICB0aGlzLmVycm9ycyA9IHt9O1xuICAgICAgICBpZiAoaXNFbXB0eSh0aGlzLmZvcm1EYXRhLm5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yc1snbmFtZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNFbXB0eSh0aGlzLmVycm9ycyk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVDb25maWcoKSB7XG4gICAgICAgIHRoaXMuY29uZmlnRXJyb3JzID0ge307XG4gICAgICAgIHRoaXMuY29uZmlnRWRpdG9yPy52YWxpZGF0ZUNvbmZpZyh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZT8uc2NoZW1hLCB0cnVlKTtcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5uZXdDb25maWdOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWdFcnJvcnNbJ25hbWUnXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodGhpcy5jb25maWdFcnJvcnMpO1xuICAgIH1cblxuICAgIF9hcGlEYXRhID0ge307XG4gICAgc2V0IGFwaURhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLl9hcGlEYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBnZXQgYXBpRGF0YSgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtRGF0YT8ubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzOiB0aGlzLmZvcm1EYXRhPy5yb2xlQXR0cmlidXRlcyB8fCBbXSxcbiAgICAgICAgICAgIGNvbmZpZ3M6IHRoaXMuZm9ybURhdGE/LmNvbmZpZ3MgfHwgW10sXG4gICAgICAgICAgICBlbmNyeXB0aW9uUmVxdWlyZWQ6IHRoaXMuZm9ybURhdGE/LmVuY3J5cHRpb25SZXF1aXJlZCxcbiAgICAgICAgICAgIHRlcm1pbmF0b3JTdHJhdGVneTogdGhpcy5mb3JtRGF0YT8udGVybWluYXRvclN0cmF0ZWd5IHx8ICcnLFxuICAgICAgICAgICAgdGFnczogdGhpcy5mb3JtRGF0YT8udGFncyB8fCB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIG9wZW5UZXJtaW5hdG9yRWRpdEZvcm0oaWQpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd0ZXJtaW5hdG9yLycgKyBpZF0pXG4gICAgfVxuXG4gICAgc29ydChzb3J0QnksIG9yZGVyaW5nPSAnYXNjJykge1xuICAgICAgICBjb25zdCB0ZXJtaW5hdG9yU29ydCA9IHtzb3J0QnksIG9yZGVyaW5nfTtcbiAgICAgICAgdGhpcy5nZXRBc3NvY2lhdGVkVGVybWluYXRvcnMoKTtcbiAgICB9XG5cbiAgICBoYXNTZWxlY3RlZFRleHQoKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0ZXh0ID0gd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ/Lmxlbmd0aCA+IDA7XG4gICAgfVxufVxuIl19
|
|
592
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvc2VydmljZS9zZXJ2aWNlLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBa0MsUUFBUSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzlILE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUV2RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLG9DQUFvQyxDQUFDO0FBRXJGLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQUtsQyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLGNBQWMsQ0FBTSwyQkFBMkIsQ0FBQyxDQUFDO0FBRTlGLE1BR2Esa0JBQWtCO0lBb0YzQixZQUNxQyxlQUFnQyxFQUM5QixXQUE0QixFQUN2RCxjQUE4QixFQUNJLFVBQTRCLEVBQzlELFNBQXdCLEVBQ3hCLGlCQUFvQyxFQUNwQyxNQUFjO1FBTlcsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUN2RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7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eUJBQXlCO21IQXhGNUIsa0JBQWtCLGNBRmYsTUFBTTs7U0FFVCxrQkFBa0I7NEZBQWxCLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQXNGUSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ3ZCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFFeEIsTUFBTTsyQkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge0luamVjdGFibGUsIEluamVjdCwgSW5qZWN0aW9uVG9rZW59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge2lzRW1wdHksIGlzU3RyaW5nLCBrZXlzLCBtYXAsIHNvbWUsIGRlZmVyLCBjbG9uZURlZXAsIGZpbHRlciwgZm9yRWFjaCwgaXNOaWwsIGlzQm9vbGVhbiwgc2V0LCBkZWJvdW5jZX0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7WklUSV9EQVRBX1NFUlZJQ0UsIFppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge0V4dGVuc2lvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9leHRlbmRhYmxlL2V4dGVuc2lvbnMtbm9vcC5zZXJ2aWNlXCI7XG5pbXBvcnQge1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvc2VydmljZVwiO1xuaW1wb3J0IHtTY2hlbWFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvc2NoZW1hLnNlcnZpY2VcIjtcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtDb25maWdFZGl0b3JDb21wb25lbnR9IGZyb20gXCIuLi8uLi9jb25maWctZWRpdG9yL2NvbmZpZy1lZGl0b3IuY29tcG9uZW50XCI7XG5pbXBvcnQge1ZhbGlkYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuXG5leHBvcnQgY29uc3QgU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnk+KCdTRVJWSUNFX0VYVEVOU0lPTl9TRVJWSUNFJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VydmljZUZvcm1TZXJ2aWNlIHtcblxuICAgIHBhZ2luZyA9IHtcbiAgICAgICAgZmlsdGVyOiBcIlwiLFxuICAgICAgICBub1NlYXJjaDogdHJ1ZSxcbiAgICAgICAgb3JkZXI6IFwiYXNjXCIsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHNlYXJjaE9uOiBcIm5hbWVcIixcbiAgICAgICAgc29ydDogXCJuYW1lXCIsXG4gICAgICAgIHRvdGFsOiAxMDBcbiAgICB9XG5cbiAgICBmb3JtRGF0YTogYW55ID0ge307XG4gICAgc2VsZWN0ZWRDb25maWc6IGFueSA9IHt9O1xuICAgIGNvbmZpZ0RhdGE6IGFueTtcbiAgICBzZWxlY3RlZENvbmZpZ0lkOiBhbnkgPSAnJztcbiAgICBjb25maWdzOiBhbnkgPSBbXTtcbiAgICBjb25maWdUeXBlczogYW55ID0gW107XG4gICAgZmlsdGVyZWRDb25maWdzOiBhbnkgPSBbXTtcbiAgICBjb25maWdzTG9hZGluZyA9IGZhbHNlO1xuICAgIHNob3dDZmdQcmV2aWV3T3B0aW9uID0gZmFsc2U7XG4gICAgc2VsZWN0ZWRDb25maWdOYW1lOiBhbnkgPSAnJztcbiAgICBzZWxlY3RlZENvbmZpZ1R5cGVJZDogYW55ID0gJyc7XG4gICAgc2VsZWN0ZWRDb25maWdUeXBlOiBhbnkgPSB7fTtcbiAgICBhZGRlZENvbmZpZ3M6IGFueSA9IFtdO1xuICAgIGFkZGVkVGVybWluYXRvck5hbWVzOiBhbnkgPSBbXTtcbiAgICBhZGRlZFRlcm1pbmF0b3JzOiBhbnkgPSBbXTtcbiAgICBjb25maWdKc29uVmlldyA9IGZhbHNlO1xuICAgIGhpZGVDb25maWdKU09OID0gZmFsc2U7XG4gICAgY29uZmlnRXJyb3JzOiBhbnkgPSB7fTtcbiAgICB0ZXJtaW5hdG9yRXJyb3JzOiBhbnkgPSB7fTtcbiAgICBuZXdDb25maWdOYW1lOiBzdHJpbmcgPSAnJztcbiAgICB0ZXJtaW5hdG9ySG9zdDogc3RyaW5nID0gJyc7XG4gICAgdGVybWluYXRvclBvcnQ6IHN0cmluZyA9ICcnO1xuICAgIHNlbGVjdGVkU2NoZW1hOiBhbnkgPSB7fTtcbiAgICBpdGVtczogYW55ID0gW107XG4gICAgcm91dGVyczogYW55ID0gW107XG4gICAgY29uZmlnRGF0YUxhYmVsID0gJ0NvbmZpZ3VyYXRpb24gRm9ybSc7XG4gICAgYXR0YWNoTGFiZWwgPSAnQ3JlYXRlIGFuZCBBdHRhY2gnO1xuICAgIGVycm9yczogYW55ID0ge307XG4gICAgc2VsZWN0ZWRSb3V0ZXJJZDogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWRSb3V0ZXI6IGFueTtcbiAgICBzZWxlY3RlZEJpbmRpbmdJZDogc3RyaW5nID0gJyc7XG4gICAgdGVybWluYXRvclByb3RvY29sID0gJ3VkcCc7XG4gICAgc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgYXNzb2NpYXRlZENvbmZpZ3M6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRDb25maWdzTWFwOiBhbnkgPSB7fTtcbiAgICBhc3NvY2lhdGVkVGVybWluYXRvcnM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRUZXJtaW5hdG9yTmFtZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRUZXJtaW5hdG9yc01hcDogYW55ID0ge307XG4gICAgYXNzb2NpYXRlZFRlcm1pbmF0b3JzVG90YWwgPSAwO1xuICAgIGFzc29jaWF0ZWRUZXJtaW5hdG9yc0ZpbHRlciA9ICcnO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWN5TmFtZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNNYXA6IGFueSA9IHt9O1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNUb3RhbCA9IDA7XG4gICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc0ZpbHRlciA9ICcnO1xuICAgIGFzc29jaWF0ZWRDb25maWdzTG9hZGluZyA9IGZhbHNlO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNMb2FkaW5nID0gZmFsc2U7XG4gICAgYXNzb2NpYXRlZFRlcm1pbmF0b3JzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zID0ge1xuICAgICAgICBmaWx0ZXJUeXBlOiAnVEVYVElOUFVUJyxcbiAgICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZVxuICAgIH07XG5cbiAgICBsQ29sb3JBcnJheSA9IFtcbiAgICAgICAgJ3doaXRlJyxcbiAgICAgICAgJ3doaXRlJyxcbiAgICAgICAgJ3doaXRlJyxcbiAgICBdXG5cbiAgICBiQ29sb3JBcnJheSA9IFtcbiAgICAgICAgJ3ZhcigtLWZvcm1CYXNlKScsXG4gICAgICAgICd2YXIoLS1mb3JtR3JvdXApJyxcbiAgICAgICAgJ3ZhcigtLWZvcm1TdWJHcm91cCknXG4gICAgXVxuXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBjb25maWdFZGl0b3I6IENvbmZpZ0VkaXRvckNvbXBvbmVudDtcbiAgICBnZXRBc3NvY2lhdGVkU2VydmljZVBvbGljaWVzRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy5nZXRBc3NvY2lhdGVkU2VydmljZVBvbGljaWVzLmJpbmQodGhpcyksIDMwMCk7XG4gICAgZ2V0QXNzb2NpYXRlZFRlcm1pbmF0b3JzRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy5nZXRBc3NvY2lhdGVkVGVybWluYXRvcnMuYmluZCh0aGlzKSwgMzAwKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJpdmF0ZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGdyb3dsZXJTZXJ2aWNlOiBHcm93bGVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChTRVJWSUNFX0VYVEVOU0lPTl9TRVJWSUNFKXByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzY2hlbWFTdmM6IFNjaGVtYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7fVxuXG4gICAgcmVzZXRGb3JtRGF0YSgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ05hbWUgPSAnJztcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRDb25maWdzTWFwID0ge307XG4gICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRDb25maWdzID0gW107XG4gICAgICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgICAgIHRoaXMubmV3Q29uZmlnTmFtZSA9ICcnO1xuICAgIH1cblxuICAgIHNhdmUoZm9ybURhdGEpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBpc1VwZGF0ZSA9ICFpc0VtcHR5KGZvcm1EYXRhLmlkKTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5nZXRTZXJ2aWNlRGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSk7XG4gICAgICAgIGxldCBwcm9tO1xuICAgICAgICBpZiAoaXNVcGRhdGUpIHtcbiAgICAgICAgICAgIHByb20gPSB0aGlzLnppdGlTZXJ2aWNlLnBhdGNoKCdzZXJ2aWNlcycsIGRhdGEsIGZvcm1EYXRhLmlkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb20gPSB0aGlzLnppdGlTZXJ2aWNlLnBvc3QoJ3NlcnZpY2VzJywgZGF0YSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvbS50aGVuKGFzeW5jIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBpc1VwZGF0ZSA/IGZvcm1EYXRhLmlkIDogKHJlc3VsdD8uZGF0YT8uaWQgfHwgcmVzdWx0Py5pZCk7XG4gICAgICAgICAgICBsZXQgc3ZjID0gYXdhaXQgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIGlkLCAnJykudGhlbigoc3ZjRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmNEYXRhLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dFNlcnZpY2UuZm9ybURhdGFTYXZlZChzdmMpLnRoZW4oKGZvcm1TYXZlZFJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtU2F2ZWRSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN2YztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgYFNlcnZpY2VzICR7aXNVcGRhdGUgPyAnVXBkYXRlZCcgOiAnQ3JlYXRlZCd9YCxcbiAgICAgICAgICAgICAgICAgICAgYFN1Y2Nlc3NmdWxseSAke2lzVXBkYXRlID8gJ3VwZGF0ZWQnIDogJ2NyZWF0ZWQnfSBTZXJ2aWNlOiAke2Zvcm1EYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN2YztcbiAgICAgICAgICAgIH0pLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3ApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMueml0aVNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHJlc3ApO1xuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICBgRXJyb3IgJHtpc1VwZGF0ZSA/ICdVcGRhdGluZycgOiAnQ3JlYXRpbmcnfSBTZXJ2aWNlYCxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgIHRocm93IHJlc3A7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcyhuYW1lRmlsdGVyPykge1xuICAgICAgICBjb25zdCBwYWdpbmcgPSB0aGlzLnppdGlTZXJ2aWNlLkRFRkFVTFRfUEFHSU5HO1xuICAgICAgICBwYWdpbmcudG90YWwgPSA1O1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmlsdGVyczogYW55W10gPSBbXTtcbiAgICAgICAgaWYgKCFpc0VtcHR5KG5hbWVGaWx0ZXIpKSB7XG4gICAgICAgICAgICBwYWdpbmcubm9TZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29sdW1uSWQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmFtZUZpbHRlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogbmFtZUZpbHRlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lOiAnU2VydmljZSBQb2xpY3kgTmFtZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICAgICAgICAgICAgdmVyYjogJ2ljb250YWlucydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc0ZpbHRlciA9IG5hbWVGaWx0ZXI7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnc2VydmljZXMnLCB0aGlzLmZvcm1EYXRhLmlkLCAnc2VydmljZS1wb2xpY2llcycsIHBhZ2luZywgdW5kZWZpbmVkLCBmaWx0ZXJzKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNUb3RhbCA9IHJlc3VsdC5tZXRhPy5wYWdpbmF0aW9uLnRvdGFsQ291bnQgfHwgMDtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY3lOYW1lcyA9IHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcy5tYXAoKHBvbGljeSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc01hcFtwb2xpY3kubmFtZV0gPSBwb2xpY3k7XG4gICAgICAgICAgICAgICAgcG9saWN5LmhyZWYgPSAnL3NlcnZpY2UtcG9saWNpZXMvJyArIHBvbGljeS5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9saWN5Lm5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNUb3RhbCA+IDUpIHtcbiAgICAgICAgICAgICAgICBsZXQgcm9sZUF0dHJpYnV0ZXMgPSBjbG9uZURlZXAodGhpcy5mb3JtRGF0YS5yb2xlQXR0cmlidXRlcyk7XG5cbiAgICAgICAgICAgICAgICByb2xlQXR0cmlidXRlcyA9IG1hcChyb2xlQXR0cmlidXRlcywgKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCclMjMnICsgYXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByb2xlQXR0cmlidXRlcy5wdXNoKCclNDAnICsgdGhpcy5mb3JtRGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgbGV0IHVybFBhcmFtID0gJyc7XG4gICAgICAgICAgICAgICAgcm9sZUF0dHJpYnV0ZXMuZm9yRWFjaCgocGFyYW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybFBhcmFtICs9ICcsJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbSArPSBwYXJhbVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaEZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSWQ6ICdzZXJ2aWNlUm9sZXMnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcm9sZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQCcgKyB0aGlzLmZvcm1EYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlck5hbWU6ICdTZXJ2aWNlIEF0dHJpYnV0ZXMnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQVRUUklCVVRFJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NlYXJjaF9maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkoW3NlYXJjaEZpbHRlcl0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICd2aWV3IGFsbCByZXN1bHRzICcsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6ICcvc2VydmljZS1wb2xpY2llcz9zZXJ2aWNlUm9sZXM9JyArIHVybFBhcmFtLFxuICAgICAgICAgICAgICAgICAgICBsaW5rQ2xhc3M6ICdwcmV2aWV3LW1vcmUtcmVzdWx0cycsXG4gICAgICAgICAgICAgICAgICAgIC8vaWNvbkNsYXNzOiAnaWNvbi1vcGVuJyxcbiAgICAgICAgICAgICAgICAgICAgc2tpcFNvcnQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFzc29jaWF0ZWRUZXJtaW5hdG9ycyhuYW1lRmlsdGVyPykge1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc0ZpbHRlciA9IG5hbWVGaWx0ZXI7XG4gICAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMueml0aVNlcnZpY2UuREVGQVVMVF9QQUdJTkc7XG4gICAgICAgIHBhZ2luZy50b3RhbCA9IDU7XG4gICAgICAgIHBhZ2luZy5zb3J0ID0gJ2NyZWF0ZWRBdCc7XG4gICAgICAgIGNvbnN0IGZpbHRlcnM6IGFueVtdID0gW107XG4gICAgICAgIGlmICghaXNFbXB0eShuYW1lRmlsdGVyKSkge1xuICAgICAgICAgICAgcGFnaW5nLm5vU2VhcmNoID0gZmFsc2U7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbHVtbklkOiAnc2VydmljZS5uYW1lJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmFtZUZpbHRlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogbmFtZUZpbHRlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lOiAnU2VydmljZSBOYW1lJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVEVYVElOUFVUJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnaWNvbnRhaW5zJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIHRoaXMuZm9ybURhdGEuaWQsICd0ZXJtaW5hdG9ycycsIHBhZ2luZywgdW5kZWZpbmVkLCBmaWx0ZXJzKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFRlcm1pbmF0b3JzVG90YWwgPSByZXN1bHQubWV0YT8ucGFnaW5hdGlvbi50b3RhbENvdW50IHx8IDA7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yTmFtZXMgPSBtYXAodGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnMsICh0ZXJtaW5hdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnNNYXBbdGVybWluYXRvci5pZF0gPSB0ZXJtaW5hdG9yLmJpbmRpbmcgKyAnOiAgICAgICcgKyB0ZXJtaW5hdG9yLmFkZHJlc3M7XG4gICAgICAgICAgICAgICAgdGVybWluYXRvci5uYW1lID0gdGVybWluYXRvci5yb3V0ZXIubmFtZSArICc6ICAgICAgICcgKyB0ZXJtaW5hdG9yLmFkZHJlc3M7XG4gICAgICAgICAgICAgICAgdGVybWluYXRvci5ocmVmID0gJy90ZXJtaW5hdG9ycy8nICsgdGVybWluYXRvci5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVybWluYXRvci5iaW5kaW5nICsgJzogICAgICAnICsgdGVybWluYXRvci5hZGRyZXNzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnNUb3RhbCA+IDUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hGaWx0ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbklkOiAnc2VydmljZScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1EYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5mb3JtRGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lOiAnU2VydmljZScsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdURVhUSU5QVVQnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnPSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWFyY2hfZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KFtzZWFyY2hGaWx0ZXJdKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICd2aWV3IGFsbCByZXN1bHRzICcsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6ICcvdGVybWluYXRvcnM/c2VydmljZT0nICsgdGhpcy5mb3JtRGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGlua0NsYXNzOiAncHJldmlldy1tb3JlLXJlc3VsdHMnLFxuICAgICAgICAgICAgICAgICAgICAvL2ljb25DbGFzczogJ2ljb24tb3BlbicsXG4gICAgICAgICAgICAgICAgICAgIHNraXBTb3J0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXZpZXdDb25maWcoY29uZmlnTmFtZSwgcm91dGVyKSB7XG4gICAgICAgIHRoaXMuc2hvd0NmZ1ByZXZpZXdPcHRpb24gPSB0cnVlO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENvbmZpZyA9IHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NNYXBbY29uZmlnTmFtZV07XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbJy9jb25maWdzLycgKyBzZWxlY3RlZENvbmZpZy5pZF0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldmlld1BvbGljeShwb2xpY3lOYW1lLCByb3V0ZXIpIHtcbiAgICAgICAgdGhpcy5zaG93Q2ZnUHJldmlld09wdGlvbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUG9saWN5ID0gdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzTWFwW3BvbGljeU5hbWVdO1xuICAgICAgICByb3V0ZXIubmF2aWdhdGUoWycvc2VydmljZS1wb2xpY2llcy8nICsgc2VsZWN0ZWRQb2xpY3kuaWRdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByZXZpZXdUZXJtaW5hdG9yKHBvbGljeU5hbWUsIHJvdXRlcikge1xuICAgICAgICB0aGlzLnNob3dDZmdQcmV2aWV3T3B0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZXJtaW5hdG9yID0gdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnNNYXBbcG9saWN5TmFtZV07XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbJy90ZXJtaW5hdG9ycy8nICsgc2VsZWN0ZWRUZXJtaW5hdG9yLmlkXSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhZGRUZXJtaW5hdG9ycyhzZXJ2aWNlSWQpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hZGRlZFRlcm1pbmF0b3JzLmZvckVhY2goKHRlcm1pbmF0b3IpID0+IHtcbiAgICAgICAgICAgIHRlcm1pbmF0b3Iuc2VydmljZSA9IHNlcnZpY2VJZFxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnppdGlTZXJ2aWNlLnBvc3QoJ3Rlcm1pbmF0b3JzJywgdGVybWluYXRvcikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRTZXJ2aWNlRGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSkge1xuICAgICAgICBjb25zdCBzYXZlTW9kZWwgPSBuZXcgU2VydmljZSgpO1xuICAgICAgICBjb25zdCBtb2RlbFByb3BlcnRpZXMgPSBrZXlzKHNhdmVNb2RlbCk7XG4gICAgICAgIG1vZGVsUHJvcGVydGllcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2gocHJvcCkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHNhdmVNb2RlbFtwcm9wXSA9IGZvcm1EYXRhW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNhdmVNb2RlbDtcbiAgICB9XG5cbiAgICBnZXRDb25maWdUeXBlcygpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXQoJ2NvbmZpZy10eXBlcycsIHRoaXMucGFnaW5nLCBbXSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnVHlwZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0Q29uZmlncyhmaWx0ZXJzID0gW10sIHBhZ2UgPSAxKSB7XG4gICAgICAgIHRoaXMuY29uZmlnc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBwYWdpbmcgPSBjbG9uZURlZXAodGhpcy5wYWdpbmcpO1xuICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwYWdpbmcubm9TZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQoJ2NvbmZpZ3MnLCBwYWdpbmcsIGZpbHRlcnMpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3MgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnVHlwZUNoYW5nZWQoKTtcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3NMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFJvdXRlcnMoKSB7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdlZGdlLXJvdXRlcnMnLCB0aGlzLnBhZ2luZywgW10pLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlcnMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZENvbmZpZ3MobmFtZUZpbHRlcj8pIHtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgdGhpcy5mb3JtRGF0YS5pZCwgJ2NvbmZpZ3MnKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlncyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSB0aGlzLmFzc29jaWF0ZWRDb25maWdzLm1hcCgoY2ZnKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcFtjZmcubmFtZV0gPSBjZmc7XG4gICAgICAgICAgICAgICAgY2ZnLmhyZWYgPSAnL2NvbmZpZ3MvJyArIGNmZy5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2ZnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29uZmlnKGNvbmZpZ0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucG9zdCgnY29uZmlncycsIGNvbmZpZ0RhdGEsIHRydWUpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBsZXQgbXNnO1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKHJlc3BvbnNlPy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBtc2cgPSByZXNwb25zZT8uZXJyb3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1zZyA9IHJlc3BvbnNlPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5yZWFzb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgIGBFcnJvciBDcmVhdGluZyBOZXcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlnVHlwZUNoYW5nZWQocmVzZXREYXRhPykge1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29uZmlncyA9IHRoaXMuY29uZmlncy5maWx0ZXIoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5jb25maWdUeXBlSWQgPT09IHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQWRkIGEgTmV3IENvbmZpZycsXG4gICAgICAgICAgICAgICAgaWQ6ICdhZGQtbmV3J1xuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29uZmlncyA9IFsuLi5kZWZhdWx0T3B0aW9ucywgLi4udGhpcy5maWx0ZXJlZENvbmZpZ3NdO1xuICAgICAgICB0aGlzLmNvbmZpZ1R5cGVzLmZvckVhY2goKGNvbmZpZ1R5cGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkID09PSBjb25maWdUeXBlLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGUgPSBjb25maWdUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCAhPT0gJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPSAhaXNFbXB0eSh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkKSA/ICdhZGQtbmV3JyA6ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZChyZXNldERhdGEpO1xuICAgIH1cblxuICAgIHVwZGF0ZWRBZGRlZENvbmZpZ3MoKSB7XG4gICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gW107XG4gICAgICAgIHRoaXMuY29uZmlncy5mb3JFYWNoKChhdmFpbGFibGVDb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNmZ0V4aXN0cyA9IHNvbWUodGhpcy5mb3JtRGF0YS5jb25maWdzLCBjb25maWdJZCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUNvbmZpZy5pZCA9PSBjb25maWdJZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNmZ0V4aXN0cykge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUNvbmZpZy5ocmVmID0gJy9jb25maWdzLycgKyBhdmFpbGFibGVDb25maWcuaWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MucHVzaChhdmFpbGFibGVDb25maWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gWy4uLnRoaXMuYWRkZWRDb25maWdzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB0b2dnbGVKU09OVmlldygpIHtcbiAgICAgICAgdGhpcy5jb25maWdKc29uVmlldyA9ICF0aGlzLmNvbmZpZ0pzb25WaWV3O1xuICAgICAgICB0aGlzLmNvbmZpZ0RhdGFMYWJlbCA9IHRoaXMuY29uZmlnSnNvblZpZXcgPyAnSlNPTiBDb25maWd1cmF0aW9uJyA6ICdDb25maWd1cmF0aW9uIEZvcm0nO1xuICAgICAgICBpZiAodGhpcy5jb25maWdKc29uVmlldykge1xuICAgICAgICAgICAgLy90aGlzLmNvbmZpZ1N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGF0dGFjaENvbmZpZyhhZGRlZENvbmZpZ0lkKSB7XG4gICAgICAgIGxldCBjb25maWdJZDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gJ2FkZC1uZXcnKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVDb25maWcoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbmZpZzogYW55ID0ge1xuICAgICAgICAgICAgICAgIGNvbmZpZ1R5cGVJZDogdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbmZpZ0RhdGEsXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uZXdDb25maWdOYW1lXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdDb25maWcuZGF0YSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucmVkZWZpbmVPYmplY3QobmV3Q29uZmlnLmRhdGEpO1xuICAgICAgICAgICAgY29uZmlnSWQgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbmZpZyhuZXdDb25maWcpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZmcgPSByZXN1bHQ/LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5pZCA9IHJlc3VsdD8uaWQgPyByZXN1bHQuaWQgOiByZXN1bHQ/LmRhdGE/LmlkO1xuICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuaHJlZiA9ICcvY29uZmlncy8nICsgbmV3Q29uZmlnLmlkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRDb25maWdzTWFwW25ld0NvbmZpZy5uYW1lXSA9IHtkYXRhOiBuZXdDb25maWcuZGF0YSwgbmFtZTogbmV3Q29uZmlnLm5hbWUsIGNvbmZpZ1R5cGVJZDogbmV3Q29uZmlnLmNvbmZpZ1R5cGVJZH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdDb25maWcuaWQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvckZpZWxkID0gcmVzdWx0Py5lcnJvcj8uZXJyb3I/LmNhdXNlPy5maWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5KGVycm9yRmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0Vycm9yc1tlcnJvckZpZWxkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gcmVzdWx0Py5lcnJvcj8uZXJyb3I/LmNhdXNlPy5yZWFzb247XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgYEVycm9yIENyZWF0aW5nIENvbmZpZ2AsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkoY29uZmlnSWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmNvbmZpZ3MucHVzaChjb25maWdJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MucHVzaChuZXdDb25maWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gWy4uLnRoaXMuYWRkZWRDb25maWdzXTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldENvbmZpZ3MoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICBgTmV3IENvbmZpZyBBdHRhY2hlZGAsXG4gICAgICAgICAgICAgICAgICAgIGBOZXcgQ29uZmlnICR7dGhpcy5uZXdDb25maWdOYW1lfSBoYXMgYmVlbiBjcmVhdGVkIGFuZCBhdHRhY2hlZCB0byB0aGUgc2VydmljZWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMubmV3Q29uZmlnTmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0VkaXRvcj8uZ2V0Q29uZmlnRGF0YUZyb21Gb3JtKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNvbmZpZ0FkZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmNvbmZpZ3MuZm9yRWFjaCgoY29uZmlnSWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnSWQgPT09IGFkZGVkQ29uZmlnSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnQWRkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjb25maWdBZGRlZCkge1xuICAgICAgICAgICAgICAgIGxldCBuZXdDb25maWc7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdzLmZvckVhY2goKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmlkID09PSBhZGRlZENvbmZpZ0lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcgPSBjb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobmV3Q29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5ocmVmID0gJy9jb25maWdzLycgKyBuZXdDb25maWcuaWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzLnB1c2gobmV3Q29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSBbLi4udGhpcy5hZGRlZENvbmZpZ3NdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmNvbmZpZ3MucHVzaChhZGRlZENvbmZpZ0lkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ0lkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAnd2FybmluZycsXG4gICAgICAgICAgICAgICAgICAgICdJbmZvJyxcbiAgICAgICAgICAgICAgICAgICAgYENvbmZpZyBBbHJlYWR5IEF0dGFjaGVkYCxcbiAgICAgICAgICAgICAgICAgICAgJ0NvbmZpZyBoYXMgYWxyZWFkeSBiZWVuIGF0dGFjaGVkIHRvIHRoaXMgc2VydmljZScsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlQ29uZmlnKGNvbmZpZ1RvUmVtb3ZlKSB7XG4gICAgICAgIGlmIChjb25maWdUb1JlbW92ZS5pZCkge1xuICAgICAgICAgICAgY29uc3QgbmV3Q29uZmlncyA9IGZpbHRlcih0aGlzLmZvcm1EYXRhLmNvbmZpZ3MsIGNvbmZpZ0lkID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnSWQgIT09IGNvbmZpZ1RvUmVtb3ZlLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBuZXdDb25maWdJdGVtcyA9IGZpbHRlcih0aGlzLmFkZGVkQ29uZmlncywgKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcubmFtZSAhPT0gY29uZmlnVG9SZW1vdmUubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5jb25maWdzID0gbmV3Q29uZmlncztcbiAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gbmV3Q29uZmlnSXRlbXM7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkID09PSAncHJldmlldycgJiYgY29uZmlnVG9SZW1vdmUubmFtZSA9PT0gdGhpcy5zZWxlY3RlZENvbmZpZ05hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjb25maWdDaGFuZ2VkKHJlc2V0RGF0YSA9IHRydWUpIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ29uZmlnOiBhbnkgPSB7fTtcbiAgICAgICAgdGhpcy5jb25maWdEYXRhID0gcmVzZXREYXRhID8gdW5kZWZpbmVkIDogdGhpcy5jb25maWdEYXRhO1xuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgbGV0IGF0dGFjaExhYmVsID0gJ0F0dGFjaCB0byBTZXJ2aWNlJztcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2NoZW1hID0gYXdhaXQgdGhpcy56aXRpU2VydmljZS5zY2hlbWEodGhpcy5zZWxlY3RlZENvbmZpZ1R5cGUuc2NoZW1hKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPT09ICdhZGQtbmV3Jykge1xuICAgICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNjaGVtYSA9IGF3YWl0IHRoaXMueml0aVNlcnZpY2Uuc2NoZW1hKHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlLnNjaGVtYSk7XG4gICAgICAgICAgICBhdHRhY2hMYWJlbCA9ICdDcmVhdGUgYW5kIEF0dGFjaCc7XG4gICAgICAgICAgICAvL3RoaXMuY3JlYXRlRm9ybShkeW5hbWljRm9ybSk7XG4gICAgICAgICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkKSB7XG4gICAgICAgICAgICBhdHRhY2hMYWJlbCA9ICdBdHRhY2ggdG8gU2VydmljZSc7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkQ29uZmlncy5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkID09PSBjb25maWcuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSBjb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhID0gc2VsZWN0ZWRDb25maWc/LmRhdGEgfHwge307XG4gICAgICAgICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgIT09ICdwcmV2aWV3Jykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IGNsb25lRGVlcChkYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL3RoaXMudXBkYXRlQ29uZmlnRGF0YSgpO1xuICAgICAgICB0aGlzLmF0dGFjaExhYmVsID0gYXR0YWNoTGFiZWw7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoKSB7XG4gICAgICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgICAgIGlmIChpc0VtcHR5KHRoaXMuZm9ybURhdGEubmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzWyduYW1lJ10gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0VtcHR5KHRoaXMuZXJyb3JzKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUNvbmZpZygpIHtcbiAgICAgICAgdGhpcy5jb25maWdFcnJvcnMgPSB7fTtcbiAgICAgICAgdGhpcy5jb25maWdFZGl0b3I/LnZhbGlkYXRlQ29uZmlnKHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlPy5zY2hlbWEsIHRydWUpO1xuICAgICAgICBpZiAoaXNFbXB0eSh0aGlzLm5ld0NvbmZpZ05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ0Vycm9yc1snbmFtZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNFbXB0eSh0aGlzLmNvbmZpZ0Vycm9ycyk7XG4gICAgfVxuXG4gICAgZ2V0IHNob3dTZXJ2aWNlUG9saWNpZXNGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiAhaXNFbXB0eSh0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNGaWx0ZXIpIHx8IHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc1RvdGFsID4gNTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd1Rlcm1pbmF0b3JzRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gIWlzRW1wdHkodGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnNGaWx0ZXIpIHx8IHRoaXMuYXNzb2NpYXRlZFRlcm1pbmF0b3JzVG90YWwgPiA1O1xuICAgIH1cblxuICAgIF9hcGlEYXRhID0ge307XG4gICAgc2V0IGFwaURhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLl9hcGlEYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBnZXQgYXBpRGF0YSgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtRGF0YT8ubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzOiB0aGlzLmZvcm1EYXRhPy5yb2xlQXR0cmlidXRlcyB8fCBbXSxcbiAgICAgICAgICAgIGNvbmZpZ3M6IHRoaXMuZm9ybURhdGE/LmNvbmZpZ3MgfHwgW10sXG4gICAgICAgICAgICBlbmNyeXB0aW9uUmVxdWlyZWQ6IHRoaXMuZm9ybURhdGE/LmVuY3J5cHRpb25SZXF1aXJlZCxcbiAgICAgICAgICAgIHRlcm1pbmF0b3JTdHJhdGVneTogdGhpcy5mb3JtRGF0YT8udGVybWluYXRvclN0cmF0ZWd5IHx8ICcnLFxuICAgICAgICAgICAgdGFnczogdGhpcy5mb3JtRGF0YT8udGFncyB8fCB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIG9wZW5UZXJtaW5hdG9yRWRpdEZvcm0oaWQpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd0ZXJtaW5hdG9yLycgKyBpZF0pXG4gICAgfVxuXG4gICAgc29ydChzb3J0QnksIG9yZGVyaW5nPSAnYXNjJykge1xuICAgICAgICBjb25zdCB0ZXJtaW5hdG9yU29ydCA9IHtzb3J0QnksIG9yZGVyaW5nfTtcbiAgICAgICAgdGhpcy5nZXRBc3NvY2lhdGVkVGVybWluYXRvcnMoKTtcbiAgICB9XG5cbiAgICBoYXNTZWxlY3RlZFRleHQoKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0ZXh0ID0gd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ/Lmxlbmd0aCA+IDA7XG4gICAgfVxufVxuIl19
|