@mediusinc/mng-commons 0.2.17 → 0.2.20
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/i18n/en.json +7 -5
- package/assets/i18n/sl.json +23 -21
- package/esm2020/lib/api/services/crud-api.abstract.service.mjs +22 -17
- package/esm2020/lib/components/action/action.component.mjs +50 -23
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +239 -0
- package/esm2020/lib/components/action/index.mjs +2 -2
- package/esm2020/lib/components/action/models/action-execution.model.mjs +3 -3
- package/esm2020/lib/components/action/route/action-route.component.mjs +19 -38
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +9 -6
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +56 -4
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +179 -0
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +28 -9
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +12 -9
- package/esm2020/lib/components/form/formly/fields/index.mjs +2 -1
- package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +4 -3
- package/esm2020/lib/components/form/models/form-editor.event.mjs +28 -1
- package/esm2020/lib/components/layout/main-layout.component.mjs +1 -1
- package/esm2020/lib/components/layout/topbar.component.mjs +1 -1
- package/esm2020/lib/components/tableview/table/table.component.mjs +37 -12
- package/esm2020/lib/components/tableview/tableview.component.mjs +28 -21
- package/esm2020/lib/config/formly.config.mjs +7 -2
- package/esm2020/lib/config/models/mng-config.model.mjs +1 -1
- package/esm2020/lib/data-providers/table.data-provider.mjs +17 -2
- package/esm2020/lib/descriptors/action.descriptor.mjs +146 -2
- package/esm2020/lib/descriptors/editor.descriptor.interface.mjs +2 -0
- package/esm2020/lib/descriptors/editor.descriptor.mjs +122 -27
- package/esm2020/lib/directives/component.directive.mjs +8 -3
- package/esm2020/lib/mng-commons.module.mjs +21 -11
- package/esm2020/lib/models/error.model.mjs +2 -0
- package/esm2020/lib/models/index.mjs +3 -1
- package/esm2020/lib/models/view-container.model.mjs +2 -0
- package/esm2020/lib/services/action-executor.service.mjs +343 -0
- package/esm2020/lib/services/error-mapper.service.mjs +14 -0
- package/esm2020/lib/services/index.mjs +4 -2
- package/esm2020/lib/services/tokens/default-setting.token.mjs +3 -0
- package/esm2020/lib/services/tokens/index.mjs +2 -1
- package/esm2020/lib/services/view-container.component.service.mjs +35 -0
- package/esm2020/lib/utils/editor-formly.util.mjs +14 -3
- package/esm2020/lib/utils/i18n.util.mjs +29 -1
- package/esm2020/lib/utils/toast.util.mjs +18 -14
- package/esm2020/public-api.mjs +1 -2
- package/fesm2015/mediusinc-mng-commons.mjs +1818 -994
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +1805 -998
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/api/services/crud-api.abstract.service.d.ts +9 -8
- package/lib/components/action/action.component.d.ts +16 -9
- package/lib/components/action/editor/action-editor.component.d.ts +59 -0
- package/lib/components/action/index.d.ts +1 -1
- package/lib/components/action/models/action-execution.model.d.ts +3 -3
- package/lib/components/action/route/action-route.component.d.ts +5 -6
- package/lib/components/form/editor/form-editor.component.d.ts +7 -2
- package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +45 -0
- package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +2 -0
- package/lib/components/form/formly/fields/index.d.ts +1 -0
- package/lib/components/form/models/form-editor.event.d.ts +32 -0
- package/lib/components/tableview/table/table.component.d.ts +14 -6
- package/lib/components/tableview/tableview.component.d.ts +9 -7
- package/lib/data-providers/table.data-provider.d.ts +9 -1
- package/lib/descriptors/action.descriptor.d.ts +71 -16
- package/lib/descriptors/editor.descriptor.d.ts +59 -18
- package/lib/descriptors/editor.descriptor.interface.d.ts +9 -0
- package/lib/directives/component.directive.d.ts +5 -4
- package/lib/mng-commons.module.d.ts +55 -54
- package/lib/models/error.model.d.ts +12 -0
- package/lib/models/index.d.ts +2 -0
- package/lib/models/view-container.model.d.ts +6 -0
- package/lib/services/{action.service.d.ts → action-executor.service.d.ts} +25 -18
- package/lib/services/error-mapper.service.d.ts +7 -0
- package/lib/services/index.d.ts +3 -1
- package/lib/services/tokens/default-setting.token.d.ts +2 -0
- package/lib/services/tokens/index.d.ts +1 -0
- package/lib/services/view-container.component.service.d.ts +22 -0
- package/lib/utils/i18n.util.d.ts +3 -0
- package/lib/utils/toast.util.d.ts +5 -4
- package/package.json +1 -1
- package/public-api.d.ts +0 -1
- package/scss/mng-overrides/_layout_forms.scss +2 -0
- package/scss/mng-overrides/_mixins.scss +7 -0
- package/scss/mng-overrides/_theme_button.scss +57 -0
- package/scss/mng-overrides/_theme_dropdown.scss +17 -0
- package/scss/mng-overrides/_theme_styles.scss +2 -0
- package/scss/mng-overrides/_theme_toolbar.scss +5 -0
- package/scss/theme/default/_mng-variables-theme-dark.scss +3 -0
- package/scss/theme/default/_mng-variables-theme-light.scss +3 -0
- package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +0 -151
- package/esm2020/lib/components/tableview/services/index.mjs +0 -2
- package/esm2020/lib/components/tableview/services/tableview.component.service.mjs +0 -21
- package/esm2020/lib/services/action.service.mjs +0 -273
- package/lib/components/action/dialog/action-dialog.component.d.ts +0 -47
- package/lib/components/tableview/services/index.d.ts +0 -1
- package/lib/components/tableview/services/tableview.component.service.d.ts +0 -14
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { of, throwError } from 'rxjs';
|
|
2
|
+
import { DataProvider, EditorDataProvider } from '../data-providers';
|
|
2
3
|
import { TypeUtil } from '../utils';
|
|
3
4
|
export class ActionDescriptor {
|
|
4
5
|
constructor(model, actionName, parentType, parentProperty) {
|
|
@@ -8,6 +9,7 @@ export class ActionDescriptor {
|
|
|
8
9
|
this._level = ActionLevelEnum.Default;
|
|
9
10
|
this._routeUrl = null;
|
|
10
11
|
this._className = '';
|
|
12
|
+
this._size = ActionDescriptor.SizeEnum.Normal;
|
|
11
13
|
this._hasRunConfirmation = false;
|
|
12
14
|
this._hasRunNotificationSuccess = true;
|
|
13
15
|
this._hasRunNotificationError = true;
|
|
@@ -59,6 +61,12 @@ export class ActionDescriptor {
|
|
|
59
61
|
get tooltip() {
|
|
60
62
|
return this._tooltip;
|
|
61
63
|
}
|
|
64
|
+
get dataProvider() {
|
|
65
|
+
return this._dataProvider;
|
|
66
|
+
}
|
|
67
|
+
get hasRunFunction() {
|
|
68
|
+
return typeof this._runFunction === 'function';
|
|
69
|
+
}
|
|
62
70
|
get runFunction() {
|
|
63
71
|
if (!this._runFunction) {
|
|
64
72
|
throw new Error('Run function is not defined and cannot be invoked');
|
|
@@ -77,6 +85,21 @@ export class ActionDescriptor {
|
|
|
77
85
|
get className() {
|
|
78
86
|
return this._className;
|
|
79
87
|
}
|
|
88
|
+
get size() {
|
|
89
|
+
return this._size;
|
|
90
|
+
}
|
|
91
|
+
get isSizeExtraSmall() {
|
|
92
|
+
return this._size === ActionDescriptor.SizeEnum.ExtraSmall;
|
|
93
|
+
}
|
|
94
|
+
get isSizeSmall() {
|
|
95
|
+
return this._size === ActionDescriptor.SizeEnum.Small;
|
|
96
|
+
}
|
|
97
|
+
get isSizeLarge() {
|
|
98
|
+
return this._size === ActionDescriptor.SizeEnum.Large;
|
|
99
|
+
}
|
|
100
|
+
get isSizeExtraLarge() {
|
|
101
|
+
return this._size === ActionDescriptor.SizeEnum.ExtraLarge;
|
|
102
|
+
}
|
|
80
103
|
get hasRunConfirmation() {
|
|
81
104
|
return this._hasRunConfirmation;
|
|
82
105
|
}
|
|
@@ -113,6 +136,14 @@ export class ActionDescriptor {
|
|
|
113
136
|
get runNotificationErrorMessage() {
|
|
114
137
|
return this._runNotificationErrorMessage;
|
|
115
138
|
}
|
|
139
|
+
withDataProvider(dataProvider) {
|
|
140
|
+
this._dataProvider = dataProvider;
|
|
141
|
+
return this;
|
|
142
|
+
}
|
|
143
|
+
withServiceType(serviceType) {
|
|
144
|
+
this._dataProvider = new DataProvider(this._model.type, serviceType);
|
|
145
|
+
return this;
|
|
146
|
+
}
|
|
116
147
|
withRunFunction(fn) {
|
|
117
148
|
this._runFunction = fn;
|
|
118
149
|
return this;
|
|
@@ -161,6 +192,10 @@ export class ActionDescriptor {
|
|
|
161
192
|
this._className = className;
|
|
162
193
|
return this;
|
|
163
194
|
}
|
|
195
|
+
withSize(size = ActionDescriptor.SizeEnum.Normal) {
|
|
196
|
+
this._size = size;
|
|
197
|
+
return this;
|
|
198
|
+
}
|
|
164
199
|
withPosition(position) {
|
|
165
200
|
this._position = position;
|
|
166
201
|
return this;
|
|
@@ -185,13 +220,25 @@ export class ActionDescriptor {
|
|
|
185
220
|
this._runNotificationErrorMessage = message;
|
|
186
221
|
}
|
|
187
222
|
}
|
|
223
|
+
(function (ActionDescriptor) {
|
|
224
|
+
let SizeEnum;
|
|
225
|
+
(function (SizeEnum) {
|
|
226
|
+
SizeEnum[SizeEnum["ExtraSmall"] = 0] = "ExtraSmall";
|
|
227
|
+
SizeEnum[SizeEnum["Small"] = 1] = "Small";
|
|
228
|
+
SizeEnum[SizeEnum["Normal"] = 2] = "Normal";
|
|
229
|
+
SizeEnum[SizeEnum["Large"] = 3] = "Large";
|
|
230
|
+
SizeEnum[SizeEnum["ExtraLarge"] = 4] = "ExtraLarge";
|
|
231
|
+
})(SizeEnum = ActionDescriptor.SizeEnum || (ActionDescriptor.SizeEnum = {}));
|
|
232
|
+
})(ActionDescriptor || (ActionDescriptor = {}));
|
|
188
233
|
export class ActionEditorDescriptor extends ActionDescriptor {
|
|
189
234
|
constructor(editorDescriptor, actionName, parentType, parentProperty) {
|
|
190
235
|
super(editorDescriptor.model, actionName, parentType, parentProperty);
|
|
236
|
+
this._editorActions = [];
|
|
191
237
|
this._editorTitle = undefined;
|
|
192
238
|
this._hasFetchNotificationSuccess = false;
|
|
193
239
|
this._type = ActionTypeEnum.Editor;
|
|
194
240
|
this._editorDescriptor = editorDescriptor;
|
|
241
|
+
this._editorActions.push(new ActionEditorSubmitDescriptor(this), new ActionEditorSubmitDescriptor(this, ActionEditorSubmitDescriptor.TypeEnum.Cancel));
|
|
195
242
|
}
|
|
196
243
|
get editorTitle() {
|
|
197
244
|
return this._editorTitle;
|
|
@@ -208,6 +255,9 @@ export class ActionEditorDescriptor extends ActionDescriptor {
|
|
|
208
255
|
get fetchNotificationSuccessMessage() {
|
|
209
256
|
return this._fetchNotificationSuccessMessage;
|
|
210
257
|
}
|
|
258
|
+
get dataProvider() {
|
|
259
|
+
return this._dataProvider;
|
|
260
|
+
}
|
|
211
261
|
get runFunction() {
|
|
212
262
|
throw new Error('Run function cannot be used in editor action. Use submit function instead!');
|
|
213
263
|
}
|
|
@@ -223,10 +273,24 @@ export class ActionEditorDescriptor extends ActionDescriptor {
|
|
|
223
273
|
get submitFunction() {
|
|
224
274
|
return this._submitFunction;
|
|
225
275
|
}
|
|
276
|
+
get editorActions() {
|
|
277
|
+
return this._editorActions;
|
|
278
|
+
}
|
|
279
|
+
get editorComponent() {
|
|
280
|
+
return this._editorComponent;
|
|
281
|
+
}
|
|
226
282
|
withEditorTitle(title) {
|
|
227
283
|
this._editorTitle = title;
|
|
228
284
|
return this;
|
|
229
285
|
}
|
|
286
|
+
withDataProvider(dataProvider) {
|
|
287
|
+
this._dataProvider = dataProvider;
|
|
288
|
+
return this;
|
|
289
|
+
}
|
|
290
|
+
withServiceType(serviceType) {
|
|
291
|
+
this._dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
292
|
+
return this;
|
|
293
|
+
}
|
|
230
294
|
withRunFunction(fn) {
|
|
231
295
|
return this.withSubmitFunction(fn);
|
|
232
296
|
}
|
|
@@ -242,8 +306,35 @@ export class ActionEditorDescriptor extends ActionDescriptor {
|
|
|
242
306
|
this._hasFetchNotificationSuccess = hasNotification;
|
|
243
307
|
this._fetchNotificationSuccessTitle = title;
|
|
244
308
|
this._fetchNotificationSuccessMessage = message;
|
|
309
|
+
return this;
|
|
310
|
+
}
|
|
311
|
+
withEditorAction(action) {
|
|
312
|
+
this._editorActions.push(action);
|
|
313
|
+
return this;
|
|
314
|
+
}
|
|
315
|
+
withEditorComponent(editorComponent) {
|
|
316
|
+
this._editorComponent = editorComponent;
|
|
317
|
+
return this;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
export class ActionEditorSubmitDescriptor extends ActionDescriptor {
|
|
321
|
+
constructor(editorAction, submitType = ActionEditorSubmitDescriptor.TypeEnum.Submit) {
|
|
322
|
+
super(editorAction.model, submitType === ActionEditorSubmitDescriptor.TypeEnum.Submit ? 'submit' : 'cancel');
|
|
323
|
+
this._editorAction = editorAction;
|
|
324
|
+
this._submitType = submitType;
|
|
325
|
+
this._position = ActionPositionEnum.FooterRight;
|
|
326
|
+
}
|
|
327
|
+
get submitType() {
|
|
328
|
+
return this._submitType;
|
|
245
329
|
}
|
|
246
330
|
}
|
|
331
|
+
(function (ActionEditorSubmitDescriptor) {
|
|
332
|
+
let TypeEnum;
|
|
333
|
+
(function (TypeEnum) {
|
|
334
|
+
TypeEnum[TypeEnum["Submit"] = 0] = "Submit";
|
|
335
|
+
TypeEnum[TypeEnum["Cancel"] = 1] = "Cancel";
|
|
336
|
+
})(TypeEnum = ActionEditorSubmitDescriptor.TypeEnum || (ActionEditorSubmitDescriptor.TypeEnum = {}));
|
|
337
|
+
})(ActionEditorSubmitDescriptor || (ActionEditorSubmitDescriptor = {}));
|
|
247
338
|
export class ActionEditorDetailsDescriptor extends ActionEditorDescriptor {
|
|
248
339
|
constructor(editorDescriptor) {
|
|
249
340
|
super(editorDescriptor, 'details');
|
|
@@ -254,6 +345,17 @@ export class ActionEditorDetailsDescriptor extends ActionEditorDescriptor {
|
|
|
254
345
|
: throwError(new Error(`Data provider fetch function or item id ${ctx.data?.itemId} is missing.`)));
|
|
255
346
|
this.withClassName('mng-details-dynamic-dialog');
|
|
256
347
|
}
|
|
348
|
+
withServiceType(serviceType) {
|
|
349
|
+
return this.withServiceFetchFunction(serviceType);
|
|
350
|
+
}
|
|
351
|
+
withServiceFetchFunction(serviceType, fetchFn) {
|
|
352
|
+
const dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
353
|
+
if (fetchFn) {
|
|
354
|
+
dataProvider.withFetch(fetchFn);
|
|
355
|
+
}
|
|
356
|
+
this._dataProvider = dataProvider;
|
|
357
|
+
return this;
|
|
358
|
+
}
|
|
257
359
|
}
|
|
258
360
|
export class ActionEditorAddDescriptor extends ActionEditorDescriptor {
|
|
259
361
|
constructor(editorDescriptor) {
|
|
@@ -265,6 +367,20 @@ export class ActionEditorAddDescriptor extends ActionEditorDescriptor {
|
|
|
265
367
|
this.withIcon('pi pi-plus');
|
|
266
368
|
this.withClassName('mng-details-dynamic-dialog');
|
|
267
369
|
}
|
|
370
|
+
withServiceType(serviceType) {
|
|
371
|
+
return this.withServiceSubmitFunction(serviceType);
|
|
372
|
+
}
|
|
373
|
+
withServiceSubmitFunction(serviceType, createFn, fetchFn) {
|
|
374
|
+
const dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
375
|
+
if (createFn) {
|
|
376
|
+
dataProvider.withCreate(createFn);
|
|
377
|
+
}
|
|
378
|
+
if (fetchFn) {
|
|
379
|
+
dataProvider.withFetch(fetchFn);
|
|
380
|
+
}
|
|
381
|
+
this._dataProvider = dataProvider;
|
|
382
|
+
return this;
|
|
383
|
+
}
|
|
268
384
|
}
|
|
269
385
|
export class ActionEditorEditDescriptor extends ActionEditorDescriptor {
|
|
270
386
|
constructor(editorDescriptor) {
|
|
@@ -281,6 +397,20 @@ export class ActionEditorEditDescriptor extends ActionEditorDescriptor {
|
|
|
281
397
|
this.withIcon('pi pi-pencil');
|
|
282
398
|
this.withClassName('mng-details-dynamic-dialog');
|
|
283
399
|
}
|
|
400
|
+
withServiceType(serviceType) {
|
|
401
|
+
return this.withServiceSubmitFunction(serviceType);
|
|
402
|
+
}
|
|
403
|
+
withServiceSubmitFunction(serviceType, updateFn, fetchFn) {
|
|
404
|
+
const dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
405
|
+
if (updateFn) {
|
|
406
|
+
dataProvider.withUpdate(updateFn);
|
|
407
|
+
}
|
|
408
|
+
if (fetchFn) {
|
|
409
|
+
dataProvider.withFetch(fetchFn);
|
|
410
|
+
}
|
|
411
|
+
this._dataProvider = dataProvider;
|
|
412
|
+
return this;
|
|
413
|
+
}
|
|
284
414
|
}
|
|
285
415
|
export class ActionDeleteDescriptor extends ActionDescriptor {
|
|
286
416
|
constructor(model) {
|
|
@@ -297,6 +427,17 @@ export class ActionDeleteDescriptor extends ActionDescriptor {
|
|
|
297
427
|
this.withIcon('pi pi-trash');
|
|
298
428
|
this.withRunConfirmation(undefined);
|
|
299
429
|
}
|
|
430
|
+
withServiceType(serviceType) {
|
|
431
|
+
return this.withServiceDeleteFunction(serviceType);
|
|
432
|
+
}
|
|
433
|
+
withServiceDeleteFunction(serviceType, deleteFn) {
|
|
434
|
+
const dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
435
|
+
if (deleteFn) {
|
|
436
|
+
dataProvider.withDelete(deleteFn);
|
|
437
|
+
}
|
|
438
|
+
this._dataProvider = dataProvider;
|
|
439
|
+
return this;
|
|
440
|
+
}
|
|
300
441
|
}
|
|
301
442
|
export var ActionPositionEnum;
|
|
302
443
|
(function (ActionPositionEnum) {
|
|
@@ -305,6 +446,8 @@ export var ActionPositionEnum;
|
|
|
305
446
|
ActionPositionEnum[ActionPositionEnum["TableHeader"] = 2] = "TableHeader";
|
|
306
447
|
ActionPositionEnum[ActionPositionEnum["RowInline"] = 3] = "RowInline";
|
|
307
448
|
ActionPositionEnum[ActionPositionEnum["RowClick"] = 4] = "RowClick";
|
|
449
|
+
ActionPositionEnum[ActionPositionEnum["FooterLeft"] = 5] = "FooterLeft";
|
|
450
|
+
ActionPositionEnum[ActionPositionEnum["FooterRight"] = 6] = "FooterRight";
|
|
308
451
|
})(ActionPositionEnum || (ActionPositionEnum = {}));
|
|
309
452
|
export var ActionActivationTriggerEnum;
|
|
310
453
|
(function (ActionActivationTriggerEnum) {
|
|
@@ -314,7 +457,8 @@ export var ActionActivationTriggerEnum;
|
|
|
314
457
|
export var ActionTypeEnum;
|
|
315
458
|
(function (ActionTypeEnum) {
|
|
316
459
|
ActionTypeEnum[ActionTypeEnum["Direct"] = 0] = "Direct";
|
|
317
|
-
ActionTypeEnum[ActionTypeEnum["
|
|
460
|
+
ActionTypeEnum[ActionTypeEnum["Event"] = 1] = "Event";
|
|
461
|
+
ActionTypeEnum[ActionTypeEnum["Editor"] = 2] = "Editor"; // editor providing middle step for activation
|
|
318
462
|
})(ActionTypeEnum || (ActionTypeEnum = {}));
|
|
319
463
|
export var ActionLevelEnum;
|
|
320
464
|
(function (ActionLevelEnum) {
|
|
@@ -327,4 +471,4 @@ export var ActionLevelEnum;
|
|
|
327
471
|
ActionLevelEnum[ActionLevelEnum["Warning"] = 6] = "Warning";
|
|
328
472
|
ActionLevelEnum[ActionLevelEnum["Danger"] = 7] = "Danger";
|
|
329
473
|
})(ActionLevelEnum || (ActionLevelEnum = {}));
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2FjdGlvbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBS2hELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHbEMsTUFBTSxPQUFPLGdCQUFnQjtJQXVDekIsWUFBWSxLQUF5QixFQUFFLFVBQWtCLEVBQUUsVUFBMkIsRUFBRSxjQUF1QjtRQS9CckcsVUFBSyxHQUFtQixjQUFjLENBQUMsTUFBTSxDQUFDO1FBQzlDLHVCQUFrQixHQUFnQywyQkFBMkIsQ0FBQyxPQUFPLENBQUM7UUFDdEYsY0FBUyxHQUF1QixrQkFBa0IsQ0FBQyxZQUFZLENBQUM7UUFDaEUsV0FBTSxHQUFvQixlQUFlLENBQUMsT0FBTyxDQUFDO1FBRWxELGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBSWhDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFPbEIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBTzFCLCtCQUEwQixHQUFHLElBQUksQ0FBQztRQUlwQyw2QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFLcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFFOUIsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksY0FBYyxDQUFDLEVBQUU7WUFDeEUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsVUFBVSxLQUFLLGNBQWMsR0FBRyxDQUFDLENBQUM7U0FDbEg7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxD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QUM7UUFDNUcsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0o7QUFFRCxNQUFNLENBQU4sSUFBWSxrQkFNWDtBQU5ELFdBQVksa0JBQWtCO0lBQzFCLHlFQUFXLENBQUE7SUFDWCwyRUFBWSxDQUFBO0lBQ1oseUVBQVcsQ0FBQTtJQUNYLHFFQUFTLENBQUE7SUFDVCxtRUFBUSxDQUFBO0FBQ1osQ0FBQyxFQU5XLGtCQUFrQixLQUFsQixrQkFBa0IsUUFNN0I7QUFFRCxNQUFNLENBQU4sSUFBWSwyQkFHWDtBQUhELFdBQVksMkJBQTJCO0lBQ25DLG1GQUFPLENBQUE7SUFDUCxtRkFBTyxDQUFBLENBQUMsa0RBQWtEO0FBQzlELENBQUMsRUFIVywyQkFBMkIsS0FBM0IsMkJBQTJCLFFBR3RDO0FBRUQsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN0Qix1REFBTSxDQUFBO0lBQ04sdURBQU0sQ0FBQSxDQUFDLDhDQUE4QztBQUN6RCxDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQVNYO0FBVEQsV0FBWSxlQUFlO0lBQ3ZCLDJEQUFPLENBQUE7SUFDUCwyREFBTyxDQUFBO0lBQ1AsK0RBQVMsQ0FBQTtJQUNULHFEQUFJLENBQUE7SUFDSixxREFBSSxDQUFBO0lBQ0osMkRBQU8sQ0FBQTtJQUNQLDJEQUFPLENBQUE7SUFDUCx5REFBTSxDQUFBO0FBQ1YsQ0FBQyxFQVRXLGVBQWUsS0FBZixlQUFlLFFBUzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7QWN0aW9uRXhlY0NvbnRleHR9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uL21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXIsIElFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7Q2xhc3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1R5cGVVdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge0VkaXRvckRlc2NyaXB0b3IsIE1vZGVsRGVzY3JpcHRvcn0gZnJvbSAnLi8nO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcGFyZW50VHlwZT86IENsYXNzVHlwZTxhbnk+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcGFyZW50VHlwZU5hbWU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wYXJlbnRQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXk6IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfdHlwZTogQWN0aW9uVHlwZUVudW0gPSBBY3Rpb25UeXBlRW51bS5EaXJlY3Q7XG4gICAgcHJvdGVjdGVkIF9hY3RpdmF0aW9uVHJpZ2dlcjogQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtID0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uQ2xpY2s7XG4gICAgcHJvdGVjdGVkIF9wb3NpdGlvbjogQWN0aW9uUG9zaXRpb25FbnVtID0gQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodDtcbiAgICBwcm90ZWN0ZWQgX2xldmVsOiBBY3Rpb25MZXZlbEVudW0gPSBBY3Rpb25MZXZlbEVudW0uRGVmYXVsdDtcblxuICAgIHByb3RlY3RlZCBfcm91dGVVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJvdGVjdGVkIF90aXRsZT86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvdGVjdGVkIF9pY29uPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJvdGVjdGVkIF90b29sdGlwPzogc3RyaW5nIHwgbnVsbDtcblxuICAgIHByb3RlY3RlZCBfcnVuRnVuY3Rpb24/OiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD47XG4gICAgcHJvdGVjdGVkIF9pc1Zpc2libGVGdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSURhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2lzRW5hYmxlZEZ1bmN0aW9uPzogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgcHJpdmF0ZSBfaGFzUnVuQ29uZmlybWF0aW9uID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcnVuQ29uZmlybWF0aW9uSWNvbj86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Db25maXJtYXRpb25UaXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Db25maXJtYXRpb25NZXNzYWdlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9oYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9oYXNSdW5Ob3RpZmljYXRpb25FcnJvciA9IHRydWU7XG4gICAgcHJpdmF0ZSBfcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+LCBhY3Rpb25OYW1lOiBzdHJpbmcsIHBhcmVudFR5cGU/OiBDbGFzc1R5cGU8YW55PiwgcGFyZW50UHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fYWN0aW9uTmFtZSA9IGFjdGlvbk5hbWU7XG5cbiAgICAgICAgaWYgKChwYXJlbnRUeXBlICYmICFwYXJlbnRQcm9wZXJ0eSkgfHwgKCFwYXJlbnRQcm9wZXJ0eSAmJiBwYXJlbnRQcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZSBib3RoIHRoZSBwYXJlbnQgdHlwZSBhbmQgcGFyZW50IHByb3BlcnR5IG9yIG5vbmU6ICR7cGFyZW50VHlwZX0sICR7cGFyZW50UHJvcGVydHl9LmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BhcmVudFR5cGUgPSBwYXJlbnRUeXBlO1xuICAgICAgICB0aGlzLl9wYXJlbnRUeXBlTmFtZSA9IHBhcmVudFR5cGUgPyBUeXBlVXRpbC5maW5kVHlwZU5hbWUocGFyZW50VHlwZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3BhcmVudFByb3BlcnR5ID0gcGFyZW50UHJvcGVydHk7XG5cbiAgICAgICAgdGhpcy5faTE4bk1vZGVsQWN0aW9uQmFzZUtleSA9IHRoaXMuX3BhcmVudFR5cGVOYW1lXG4gICAgICAgICAgICA/IGAke3RoaXMuX3BhcmVudFR5cGVOYW1lfS5hY3Rpb25zLiR7dGhpcy5fcGFyZW50UHJvcGVydHl9XyR7YWN0aW9uTmFtZX1gXG4gICAgICAgICAgICA6IGAke3RoaXMuX21vZGVsLnR5cGVOYW1lfS5hY3Rpb25zLiR7YWN0aW9uTmFtZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudFR5cGVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50VHlwZU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaTE4bk1vZGVsQWN0aW9uQmFzZUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2YXRpb25UcmlnZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZhdGlvblRyaWdnZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvdXRlVXJsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVVcmw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ljb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0b29sdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9vbHRpcDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJ1bkZ1bmN0aW9uKCk6IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSURhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGlmICghdGhpcy5fcnVuRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUnVuIGZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkIGFuZCBjYW5ub3QgYmUgaW52b2tlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5GdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzVmlzaWJsZUZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0VuYWJsZWRGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRW5hYmxlZEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbk5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgZ2V0IGhhc1J1bkNvbmZpcm1hdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1J1bkNvbmZpcm1hdGlvbjtcbiAgICB9XG5cbiAgICBnZXQgcnVuQ29uZmlybWF0aW9uSWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkljb247XG4gICAgfVxuXG4gICAgZ2V0IHJ1bkNvbmZpcm1hdGlvblRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uVGl0bGU7XG4gICAgfVxuXG4gICAgZ2V0IHJ1bkNvbmZpcm1hdGlvbk1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25NZXNzYWdlO1xuICAgIH1cblxuICAgIGdldCBydW5Db25maXJtYXRpb25BY2NlcHRUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlO1xuICAgIH1cblxuICAgIGdldCBydW5Db25maXJtYXRpb25SZWplY3RUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlO1xuICAgIH1cblxuICAgIGdldCBoYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzUnVuTm90aWZpY2F0aW9uU3VjY2VzcztcbiAgICB9XG5cbiAgICBnZXQgcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlO1xuICAgIH1cblxuICAgIGdldCBydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlO1xuICAgIH1cblxuICAgIGdldCBoYXNSdW5Ob3RpZmljYXRpb25FcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvbkVycm9yO1xuICAgIH1cblxuICAgIGdldCBydW5Ob3RpZmljYXRpb25FcnJvclRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZTtcbiAgICB9XG5cbiAgICBnZXQgcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUnVuRnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3J1bkZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXNWaXNpYmxlRnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzVmlzaWJsZUZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXNFbmFibGVkRnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzRW5hYmxlZEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm91dGVUcmlnZ2VyKHJvdXRlVXJsOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGlvblRyaWdnZXIgPSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZTtcbiAgICAgICAgdGhpcy5fcm91dGVVcmwgPSByb3V0ZVVybDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMZXZlbChsZXZlbDogQWN0aW9uTGV2ZWxFbnVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlcyBkZWZhdWx0IHRpdGxlIGtleSB3aXRoIG1vZGVsIGFjdGlvbiBrZXkgKCR7bW9kZWwudHlwZU5hbWV9LmFjdGlvbnMuJHthY3Rpb25OYW1lfSkuIE5vdCByZWxldmFudCBpZiBwYXJlbnRUeXBlIG5hbWUgaXMgcHJvdmlkZWQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhNb2RlbFRpdGxlKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IGAke3RoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXl9LnRpdGxlYDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGVzIGRlZmF1bHQgdGl0bGUga2V5ICgke2FjdGlvbk5hbWV9LnRpdGxlKS4gSWYgbnVsbCwgbm8gdGl0bGUgd2lsbCBiZSBzaG93bi5cbiAgICAgKiBAcGFyYW0gdGl0bGUgVGl0bGUgaTE4biBrZXkgb3IgdGl0bGUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEljb24oaWNvbjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ljb24gPSBpY29uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRvb2x0aXAodG9vbHRpcDogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRvb2x0aXA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQb3NpdGlvbihwb3NpdGlvbjogQWN0aW9uUG9zaXRpb25FbnVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUnVuQ29uZmlybWF0aW9uKGljb24gPSAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLCB0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgYWNjZXB0VGl0bGU/OiBzdHJpbmcsIHJlamVjdFRpdGxlPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc1J1bkNvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkljb24gPSBpY29uO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25UaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25NZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUgPSBhY2NlcHRUaXRsZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUgPSByZWplY3RUaXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5Ob3RpZmljYXRpb25TdWNjZXNzKHRpdGxlPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBoYXNOb3RpZmljYXRpb24gPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MgPSBoYXNOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5Ob3RpZmljYXRpb25FcnJvcih0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgaGFzTm90aWZpY2F0aW9uID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9oYXNSdW5Ob3RpZmljYXRpb25FcnJvciA9IGhhc05vdGlmaWNhdGlvbjtcbiAgICAgICAgdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+O1xuXG4gICAgcHJvdGVjdGVkIF9lZGl0b3JUaXRsZT86IHN0cmluZyA9IHVuZGVmaW5lZDtcblxuICAgIHByaXZhdGUgX2hhc0ZldGNoTm90aWZpY2F0aW9uU3VjY2VzcyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2ZldGNoRnVuY3Rpb24/OiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD47XG4gICAgcHJvdGVjdGVkIF9zdWJtaXRGdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxUPjtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvckRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD4sIGFjdGlvbk5hbWU6IHN0cmluZywgcGFyZW50VHlwZT86IENsYXNzVHlwZTxhbnk+LCBwYXJlbnRQcm9wZXJ0eT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLm1vZGVsLCBhY3Rpb25OYW1lLCBwYXJlbnRUeXBlLCBwYXJlbnRQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX3R5cGUgPSBBY3Rpb25UeXBlRW51bS5FZGl0b3I7XG4gICAgICAgIHRoaXMuX2VkaXRvckRlc2NyaXB0b3IgPSBlZGl0b3JEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JUaXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckRlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIGdldCBoYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgZ2V0IGZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzVGl0bGU7XG4gICAgfVxuXG4gICAgZ2V0IGZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcnVuRnVuY3Rpb24oKTogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW4gZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgaW4gZWRpdG9yIGFjdGlvbi4gVXNlIHN1Ym1pdCBmdW5jdGlvbiBpbnN0ZWFkIScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmV0Y2hGdW5jdGlvbigpOiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBpZiAoIXRoaXMuX2ZldGNoRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBjdHggPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmV0Y2ggZnVuY3Rpb24gaXMgbm90IHByb3ZpZGVkIGZvciBmdW5jdGlvbiAke3RoaXMuX2FjdGlvbk5hbWV9LCB1c2luZyBkZWZhdWx0IGFuZCByZXR1cm5pbmcgY29udGV4dCBpdGVtYCwgY3R4LmRhdGE/Lml0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHguZGF0YT8uaXRlbSA/IGN0eC5kYXRhLml0ZW0gOiAoe30gYXMgVCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN1Ym1pdEZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0RnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0b3JUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2VkaXRvclRpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoUnVuRnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTdWJtaXRGdW5jdGlvbihmbiBhcyAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+PikgPT4gT2JzZXJ2YWJsZTxUPik7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGZXRjaEZ1bmN0aW9uPFM+KGZuOiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+PikgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9mZXRjaEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU3VibWl0RnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3N1Ym1pdEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmV0Y2hOb3RpZmljYXRpb25FcnJvcih0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgaGFzTm90aWZpY2F0aW9uID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MgPSBoYXNOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckRldGFpbHNEZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCAnZGV0YWlscycpO1xuICAgICAgICB0aGlzLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2spO1xuICAgICAgICB0aGlzLndpdGhSb3V0ZVRyaWdnZXIoJzppdGVtSWQnKTtcbiAgICAgICAgdGhpcy53aXRoRmV0Y2hGdW5jdGlvbihjdHggPT5cbiAgICAgICAgICAgIGN0eC5kYXRhUHJvdmlkZXI/LmZldGNoICYmIGN0eC5kYXRhPy5pdGVtSWRcbiAgICAgICAgICAgICAgICA/IGN0eC5kYXRhUHJvdmlkZXIuZmV0Y2goY3R4LmRhdGE/Lml0ZW1JZCwgY3R4LnNlcnZpY2VJbnN0YW5jZSlcbiAgICAgICAgICAgICAgICA6IHRocm93RXJyb3IobmV3IEVycm9yKGBEYXRhIHByb3ZpZGVyIGZldGNoIGZ1bmN0aW9uIG9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfSBpcyBtaXNzaW5nLmApKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLndpdGhDbGFzc05hbWUoJ21uZy1kZXRhaWxzLWR5bmFtaWMtZGlhbG9nJyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRvckRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yRGVzY3JpcHRvciwgJ2FkZCcpO1xuICAgICAgICB0aGlzLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQpO1xuICAgICAgICB0aGlzLndpdGhSb3V0ZVRyaWdnZXIoJ2FkZCcpO1xuICAgICAgICB0aGlzLndpdGhTdWJtaXRGdW5jdGlvbihjdHggPT5cbiAgICAgICAgICAgIGN0eC5kYXRhUHJvdmlkZXI/LmNyZWF0ZSA/IGN0eC5kYXRhUHJvdmlkZXIuY3JlYXRlKGN0eC5kYXRhPy5pdGVtLCBjdHguc2VydmljZUluc3RhbmNlKSA6IHRocm93RXJyb3IobmV3IEVycm9yKGBEYXRhIHByb3ZpZGVyIGNyZWF0ZSBmdW5jdGlvbiBpcyBtaXNzaW5nLmApKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLndpdGhMZXZlbChBY3Rpb25MZXZlbEVudW0uU3VjY2Vzcyk7XG4gICAgICAgIHRoaXMud2l0aEljb24oJ3BpIHBpLXBsdXMnKTtcbiAgICAgICAgdGhpcy53aXRoQ2xhc3NOYW1lKCdtbmctZGV0YWlscy1keW5hbWljLWRpYWxvZycpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCAnZWRpdCcpO1xuICAgICAgICB0aGlzLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lKTtcbiAgICAgICAgdGhpcy53aXRoVGl0bGUobnVsbCk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignOml0ZW1JZC9lZGl0Jyk7XG4gICAgICAgIHRoaXMud2l0aEZldGNoRnVuY3Rpb24oY3R4ID0+XG4gICAgICAgICAgICBjdHguZGF0YVByb3ZpZGVyPy5mZXRjaCAmJiBjdHguZGF0YT8uaXRlbUlkXG4gICAgICAgICAgICAgICAgPyBjdHguZGF0YVByb3ZpZGVyLmZldGNoKGN0eC5kYXRhLml0ZW1JZCwgY3R4LnNlcnZpY2VJbnN0YW5jZSlcbiAgICAgICAgICAgICAgICA6IHRocm93RXJyb3IobmV3IEVycm9yKGBEYXRhIHByb3ZpZGVyIGZldGNoIGZ1bmN0aW9uIG9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfSBpcyBtaXNzaW5nLmApKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLndpdGhTdWJtaXRGdW5jdGlvbihjdHggPT5cbiAgICAgICAgICAgIGN0eC5kYXRhUHJvdmlkZXI/LnVwZGF0ZSAmJiBjdHguZGF0YT8uaXRlbUlkXG4gICAgICAgICAgICAgICAgPyBjdHguZGF0YVByb3ZpZGVyLnVwZGF0ZShjdHguZGF0YS5pdGVtSWQsIGN0eC5kYXRhPy5pdGVtLCBjdHguc2VydmljZUluc3RhbmNlKVxuICAgICAgICAgICAgICAgIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoYERhdGEgcHJvdmlkZXIgdXBkYXRlIGZ1bmN0aW9uIG9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfSBpcyBtaXNzaW5nLmApKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLndpdGhJY29uKCdwaSBwaS1wZW5jaWwnKTtcbiAgICAgICAgdGhpcy53aXRoQ2xhc3NOYW1lKCdtbmctZGV0YWlscy1keW5hbWljLWRpYWxvZycpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKG1vZGVsLCAnZGVsZXRlJyk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUpO1xuICAgICAgICB0aGlzLndpdGhUaXRsZShudWxsKTtcbiAgICAgICAgdGhpcy53aXRoUnVuRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckRhdGFQcm92aWRlciA9IGN0eC5kYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgICAgICAgICAgcmV0dXJuIGVkaXRvckRhdGFQcm92aWRlcj8uZGVsZXRlICYmIGN0eC5kYXRhPy5pdGVtSWRcbiAgICAgICAgICAgICAgICA/IGVkaXRvckRhdGFQcm92aWRlci5kZWxldGUoY3R4LmRhdGEuaXRlbUlkLCBjdHguZGF0YS5pdGVtLCBjdHguc2VydmljZUluc3RhbmNlKVxuICAgICAgICAgICAgICAgIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoYERhdGEgcHJvdmlkZXIgZGVsZXRlIGZ1bmN0aW9uIG9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfSBpcyBtaXNzaW5nLmApKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMud2l0aExldmVsKEFjdGlvbkxldmVsRW51bS5EYW5nZXIpO1xuICAgICAgICB0aGlzLndpdGhJY29uKCdwaSBwaS10cmFzaCcpO1xuICAgICAgICB0aGlzLndpdGhSdW5Db25maXJtYXRpb24odW5kZWZpbmVkKTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvblBvc2l0aW9uRW51bSB7XG4gICAgVG9vbGJhckxlZnQsXG4gICAgVG9vbGJhclJpZ2h0LFxuICAgIFRhYmxlSGVhZGVyLFxuICAgIFJvd0lubGluZSxcbiAgICBSb3dDbGlja1xufVxuXG5leHBvcnQgZW51bSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0ge1xuICAgIE9uQ2xpY2ssIC8vIGFjdGlvbiBpcyB0cmlnZ2VyZWQgZm9yIGFjdGl2YXRpb24gb24gY2xpY2tcbiAgICBPblJvdXRlIC8vIGFjdGlvbiBpcyB0cmlnZ2VyZWQgZm9yIGFjdGl2YXRpb24gYnkgcm91dGUgdXJsXG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvblR5cGVFbnVtIHtcbiAgICBEaXJlY3QsIC8vIGFjdGlvbiBpcyBkaXJlY3RseSBhY3RpdmF0ZWQgYW5kIGV4ZWN1dGVkXG4gICAgRWRpdG9yIC8vIGVkaXRvciBwcm92aWRpbmcgbWlkZGxlIHN0ZXAgZm9yIGFjdGl2YXRpb25cbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uTGV2ZWxFbnVtIHtcbiAgICBEZWZhdWx0LFxuICAgIFByaW1hcnksXG4gICAgU2Vjb25kYXJ5LFxuICAgIEluZm8sXG4gICAgSGVscCxcbiAgICBTdWNjZXNzLFxuICAgIFdhcm5pbmcsXG4gICAgRGFuZ2VyXG59XG4iXX0=
|
|
474
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2FjdGlvbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR2hELE9BQU8sRUFBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQXFDLE1BQU0sbUJBQW1CLENBQUM7QUFFdkcsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUdsQyxNQUFNLE9BQU8sZ0JBQWdCO0lBeUN6QixZQUFZLEtBQXlCLEVBQUUsVUFBa0IsRUFBRSxVQUEyQixFQUFFLGNBQXVCO1FBakNyRyxVQUFLLEdBQW1CLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDOUMsdUJBQWtCLEdBQWdDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQztRQUN0RixjQUFTLEdBQXVCLGtCQUFrQixDQUFDLFlBQVksQ0FBQztRQUNoRSxXQUFNLEdBQW9CLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFFbEQsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFJaEMsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixVQUFLLEdBQThCLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFRdEUsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBTzFCLCtCQUEwQixHQUFHLElBQUksQ0FBQztRQUlwQyw2QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFLcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFFOUIsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksY0FBYyxDQUFDLEVBQUU7WUFDeEUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsVUFB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QUFBO0lBQ1AsbUZBQU8sQ0FBQSxDQUFDLGtEQUFrRDtBQUM5RCxDQUFDLEVBSFcsMkJBQTJCLEtBQTNCLDJCQUEyQixRQUd0QztBQUVELE1BQU0sQ0FBTixJQUFZLGNBSVg7QUFKRCxXQUFZLGNBQWM7SUFDdEIsdURBQU0sQ0FBQTtJQUNOLHFEQUFLLENBQUE7SUFDTCx1REFBTSxDQUFBLENBQUMsOENBQThDO0FBQ3pELENBQUMsRUFKVyxjQUFjLEtBQWQsY0FBYyxRQUl6QjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBU1g7QUFURCxXQUFZLGVBQWU7SUFDdkIsMkRBQU8sQ0FBQTtJQUNQLDJEQUFPLENBQUE7SUFDUCwrREFBUyxDQUFBO0lBQ1QscURBQUksQ0FBQTtJQUNKLHFEQUFJLENBQUE7SUFDSiwyREFBTyxDQUFBO0lBQ1AsMkRBQU8sQ0FBQTtJQUNQLHlEQUFNLENBQUE7QUFDVixDQUFDLEVBVFcsZUFBZSxLQUFmLGVBQWUsUUFTMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtBY3Rpb25FeGVjQ29udGV4dH0gZnJvbSAnLi4vY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmltcG9ydCB7RGF0YVByb3ZpZGVyLCBFZGl0b3JEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXIsIElFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7Q2xhc3NUeXBlLCBJZFR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7VHlwZVV0aWx9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7RWRpdG9yRGVzY3JpcHRvciwgTW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLyc7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9hY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wYXJlbnRUeXBlPzogQ2xhc3NUeXBlPGFueT47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wYXJlbnRUeXBlTmFtZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3BhcmVudFByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfaTE4bk1vZGVsQWN0aW9uQmFzZUtleTogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF90eXBlOiBBY3Rpb25UeXBlRW51bSA9IEFjdGlvblR5cGVFbnVtLkRpcmVjdDtcbiAgICBwcm90ZWN0ZWQgX2FjdGl2YXRpb25UcmlnZ2VyOiBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0gPSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25DbGljaztcbiAgICBwcm90ZWN0ZWQgX3Bvc2l0aW9uOiBBY3Rpb25Qb3NpdGlvbkVudW0gPSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0O1xuICAgIHByb3RlY3RlZCBfbGV2ZWw6IEFjdGlvbkxldmVsRW51bSA9IEFjdGlvbkxldmVsRW51bS5EZWZhdWx0O1xuXG4gICAgcHJvdGVjdGVkIF9yb3V0ZVVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgX3RpdGxlPzogc3RyaW5nIHwgbnVsbDtcbiAgICBwcm90ZWN0ZWQgX2ljb24/OiBzdHJpbmcgfCBudWxsO1xuICAgIHByb3RlY3RlZCBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJvdGVjdGVkIF9zaXplOiBBY3Rpb25EZXNjcmlwdG9yLlNpemVFbnVtID0gQWN0aW9uRGVzY3JpcHRvci5TaXplRW51bS5Ob3JtYWw7XG4gICAgcHJvdGVjdGVkIF90b29sdGlwPzogc3RyaW5nIHwgbnVsbDtcblxuICAgIHByb3RlY3RlZCBfZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgIHByb3RlY3RlZCBfcnVuRnVuY3Rpb24/OiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD47XG4gICAgcHJvdGVjdGVkIF9pc1Zpc2libGVGdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSURhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2lzRW5hYmxlZEZ1bmN0aW9uPzogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgcHJpdmF0ZSBfaGFzUnVuQ29uZmlybWF0aW9uID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcnVuQ29uZmlybWF0aW9uSWNvbj86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Db25maXJtYXRpb25UaXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Db25maXJtYXRpb25NZXNzYWdlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9oYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9oYXNSdW5Ob3RpZmljYXRpb25FcnJvciA9IHRydWU7XG4gICAgcHJpdmF0ZSBfcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+LCBhY3Rpb25OYW1lOiBzdHJpbmcsIHBhcmVudFR5cGU/OiBDbGFzc1R5cGU8YW55PiwgcGFyZW50UHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fYWN0aW9uTmFtZSA9IGFjdGlvbk5hbWU7XG5cbiAgICAgICAgaWYgKChwYXJlbnRUeXBlICYmICFwYXJlbnRQcm9wZXJ0eSkgfHwgKCFwYXJlbnRQcm9wZXJ0eSAmJiBwYXJlbnRQcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZSBib3RoIHRoZSBwYXJlbnQgdHlwZSBhbmQgcGFyZW50IHByb3BlcnR5IG9yIG5vbmU6ICR7cGFyZW50VHlwZX0sICR7cGFyZW50UHJvcGVydHl9LmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BhcmVudFR5cGUgPSBwYXJlbnRUeXBlO1xuICAgICAgICB0aGlzLl9wYXJlbnRUeXBlTmFtZSA9IHBhcmVudFR5cGUgPyBUeXBlVXRpbC5maW5kVHlwZU5hbWUocGFyZW50VHlwZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3BhcmVudFByb3BlcnR5ID0gcGFyZW50UHJvcGVydHk7XG5cbiAgICAgICAgdGhpcy5faTE4bk1vZGVsQWN0aW9uQmFzZUtleSA9IHRoaXMuX3BhcmVudFR5cGVOYW1lXG4gICAgICAgICAgICA/IGAke3RoaXMuX3BhcmVudFR5cGVOYW1lfS5hY3Rpb25zLiR7dGhpcy5fcGFyZW50UHJvcGVydHl9XyR7YWN0aW9uTmFtZX1gXG4gICAgICAgICAgICA6IGAke3RoaXMuX21vZGVsLnR5cGVOYW1lfS5hY3Rpb25zLiR7YWN0aW9uTmFtZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudFR5cGVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50VHlwZU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaTE4bk1vZGVsQWN0aW9uQmFzZUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2YXRpb25UcmlnZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZhdGlvblRyaWdnZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvdXRlVXJsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVVcmw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ljb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0b29sdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9vbHRpcDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1J1bkZ1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3J1bkZ1bmN0aW9uID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuRnVuY3Rpb24oKTogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9ydW5GdW5jdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW4gZnVuY3Rpb24gaXMgbm90IGRlZmluZWQgYW5kIGNhbm5vdCBiZSBpbnZva2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlRnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Zpc2libGVGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzRW5hYmxlZEZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNFbmFibGVkRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3Rpb25OYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTaXplRXh0cmFTbWFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IEFjdGlvbkRlc2NyaXB0b3IuU2l6ZUVudW0uRXh0cmFTbWFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZVNtYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA9PT0gQWN0aW9uRGVzY3JpcHRvci5TaXplRW51bS5TbWFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZUxhcmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA9PT0gQWN0aW9uRGVzY3JpcHRvci5TaXplRW51bS5MYXJnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZUV4dHJhTGFyZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplID09PSBBY3Rpb25EZXNjcmlwdG9yLlNpemVFbnVtLkV4dHJhTGFyZ2U7XG4gICAgfVxuXG4gICAgZ2V0IGhhc1J1bkNvbmZpcm1hdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1J1bkNvbmZpcm1hdGlvbjtcbiAgICB9XG5cbiAgICBnZXQgcnVuQ29uZmlybWF0aW9uSWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkljb247XG4gICAgfVxuXG4gICAgZ2V0IHJ1bkNvbmZpcm1hdGlvblRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uVGl0bGU7XG4gICAgfVxuXG4gICAgZ2V0IHJ1bkNvbmZpcm1hdGlvbk1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25NZXNzYWdlO1xuICAgIH1cblxuICAgIGdldCBydW5Db25maXJtYXRpb25BY2NlcHRUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlO1xuICAgIH1cblxuICAgIGdldCBydW5Db25maXJtYXRpb25SZWplY3RUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlO1xuICAgIH1cblxuICAgIGdldCBoYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzUnVuTm90aWZpY2F0aW9uU3VjY2VzcztcbiAgICB9XG5cbiAgICBnZXQgcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlO1xuICAgIH1cblxuICAgIGdldCBydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlO1xuICAgIH1cblxuICAgIGdldCBoYXNSdW5Ob3RpZmljYXRpb25FcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvbkVycm9yO1xuICAgIH1cblxuICAgIGdldCBydW5Ob3RpZmljYXRpb25FcnJvclRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZTtcbiAgICB9XG5cbiAgICBnZXQgcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcjogSURhdGFQcm92aWRlcjxULCBhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXJ2aWNlVHlwZTxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBuZXcgRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5GdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcnVuRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJc1Zpc2libGVGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNWaXNpYmxlRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJc0VuYWJsZWRGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNFbmFibGVkRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3V0ZVRyaWdnZXIocm91dGVVcmw6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9hY3RpdmF0aW9uVHJpZ2dlciA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlO1xuICAgICAgICB0aGlzLl9yb3V0ZVVybCA9IHJvdXRlVXJsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExldmVsKGxldmVsOiBBY3Rpb25MZXZlbEVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGVzIGRlZmF1bHQgdGl0bGUga2V5IHdpdGggbW9kZWwgYWN0aW9uIGtleSAoJHttb2RlbC50eXBlTmFtZX0uYWN0aW9ucy4ke2FjdGlvbk5hbWV9KS4gTm90IHJlbGV2YW50IGlmIHBhcmVudFR5cGUgbmFtZSBpcyBwcm92aWRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1vZGVsVGl0bGUoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gYCR7dGhpcy5faTE4bk1vZGVsQWN0aW9uQmFzZUtleX0udGl0bGVgO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCB0aXRsZSBrZXkgKCR7YWN0aW9uTmFtZX0udGl0bGUpLiBJZiBudWxsLCBubyB0aXRsZSB3aWxsIGJlIHNob3duLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBpMThuIGtleSBvciB0aXRsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSWNvbihpY29uOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ljb24gPSBpY29uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRvb2x0aXAodG9vbHRpcDogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRvb2x0aXA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTaXplKHNpemU6IEFjdGlvbkRlc2NyaXB0b3IuU2l6ZUVudW0gPSBBY3Rpb25EZXNjcmlwdG9yLlNpemVFbnVtLk5vcm1hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQb3NpdGlvbihwb3NpdGlvbjogQWN0aW9uUG9zaXRpb25FbnVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUnVuQ29uZmlybWF0aW9uKGljb24gPSAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLCB0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgYWNjZXB0VGl0bGU/OiBzdHJpbmcsIHJlamVjdFRpdGxlPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc1J1bkNvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkljb24gPSBpY29uO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25UaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25NZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUgPSBhY2NlcHRUaXRsZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUgPSByZWplY3RUaXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5Ob3RpZmljYXRpb25TdWNjZXNzKHRpdGxlPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBoYXNOb3RpZmljYXRpb24gPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MgPSBoYXNOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5Ob3RpZmljYXRpb25FcnJvcih0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgaGFzTm90aWZpY2F0aW9uID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9oYXNSdW5Ob3RpZmljYXRpb25FcnJvciA9IGhhc05vdGlmaWNhdGlvbjtcbiAgICAgICAgdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb25EZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBTaXplRW51bSB7XG4gICAgICAgIEV4dHJhU21hbGwsXG4gICAgICAgIFNtYWxsLFxuICAgICAgICBOb3JtYWwsXG4gICAgICAgIExhcmdlLFxuICAgICAgICBFeHRyYUxhcmdlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvckRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWRpdG9yQWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG5cbiAgICBwcm90ZWN0ZWQgX2VkaXRvclRpdGxlPzogc3RyaW5nIHwgbnVsbCA9IHVuZGVmaW5lZDtcblxuICAgIHByb3RlY3RlZCBfaGFzRmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2RhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICBwcm90ZWN0ZWQgX2ZldGNoRnVuY3Rpb24/OiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD47XG4gICAgcHJvdGVjdGVkIF9zdWJtaXRGdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxUPjtcblxuICAgIHByb3RlY3RlZCBfZWRpdG9yQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPiwgYWN0aW9uTmFtZTogc3RyaW5nLCBwYXJlbnRUeXBlPzogQ2xhc3NUeXBlPGFueT4sIHBhcmVudFByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvckRlc2NyaXB0b3IubW9kZWwsIGFjdGlvbk5hbWUsIHBhcmVudFR5cGUsIHBhcmVudFByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fdHlwZSA9IEFjdGlvblR5cGVFbnVtLkVkaXRvcjtcbiAgICAgICAgdGhpcy5fZWRpdG9yRGVzY3JpcHRvciA9IGVkaXRvckRlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2VkaXRvckFjdGlvbnMucHVzaChuZXcgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcih0aGlzKSwgbmV3IEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IodGhpcywgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvci5UeXBlRW51bS5DYW5jZWwpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvclRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yVGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBnZXQgaGFzRmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzRmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzO1xuICAgIH1cblxuICAgIGdldCBmZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlO1xuICAgIH1cblxuICAgIGdldCBmZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGRhdGFQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHJ1bkZ1bmN0aW9uKCk6IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSURhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUnVuIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIGluIGVkaXRvciBhY3Rpb24uIFVzZSBzdWJtaXQgZnVuY3Rpb24gaW5zdGVhZCEnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZldGNoRnVuY3Rpb24oKTogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9mZXRjaEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZldGNoIGZ1bmN0aW9uIGlzIG5vdCBwcm92aWRlZCBmb3IgZnVuY3Rpb24gJHt0aGlzLl9hY3Rpb25OYW1lfSwgdXNpbmcgZGVmYXVsdCBhbmQgcmV0dXJuaW5nIGNvbnRleHQgaXRlbWAsIGN0eC5kYXRhPy5pdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoY3R4LmRhdGE/Lml0ZW0gPyBjdHguZGF0YS5pdGVtIDogKHt9IGFzIFQpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdWJtaXRGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yQWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvckFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0b3JUaXRsZSh0aXRsZTogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9lZGl0b3JUaXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbC50eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoUnVuRnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTdWJtaXRGdW5jdGlvbihmbiBhcyAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+PikgPT4gT2JzZXJ2YWJsZTxUPik7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGZXRjaEZ1bmN0aW9uPFM+KGZuOiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+PikgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9mZXRjaEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU3VibWl0RnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3N1Ym1pdEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmV0Y2hOb3RpZmljYXRpb25FcnJvcih0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgaGFzTm90aWZpY2F0aW9uID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MgPSBoYXNOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEVkaXRvckFjdGlvbihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdG9yQWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRWRpdG9yQ29tcG9uZW50KGVkaXRvckNvbXBvbmVudDogVHlwZTxhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2VkaXRvckNvbXBvbmVudCA9IGVkaXRvckNvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvckFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdWJtaXRUeXBlOiBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yLlR5cGVFbnVtO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yQWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LCBzdWJtaXRUeXBlID0gQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvci5UeXBlRW51bS5TdWJtaXQpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yQWN0aW9uLm1vZGVsLCBzdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yLlR5cGVFbnVtLlN1Ym1pdCA/ICdzdWJtaXQnIDogJ2NhbmNlbCcpO1xuICAgICAgICB0aGlzLl9lZGl0b3JBY3Rpb24gPSBlZGl0b3JBY3Rpb247XG4gICAgICAgIHRoaXMuX3N1Ym1pdFR5cGUgPSBzdWJtaXRUeXBlO1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJSaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN1Ym1pdFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRUeXBlO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIFN1Ym1pdCxcbiAgICAgICAgQ2FuY2VsXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRGV0YWlsc0Rlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvckRlc2NyaXB0b3IsICdkZXRhaWxzJyk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dDbGljayk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignOml0ZW1JZCcpO1xuICAgICAgICB0aGlzLndpdGhGZXRjaEZ1bmN0aW9uKGN0eCA9PlxuICAgICAgICAgICAgY3R4LmRhdGFQcm92aWRlcj8uZmV0Y2ggJiYgY3R4LmRhdGE/Lml0ZW1JZFxuICAgICAgICAgICAgICAgID8gY3R4LmRhdGFQcm92aWRlci5mZXRjaChjdHguZGF0YT8uaXRlbUlkLCBjdHguc2VydmljZUluc3RhbmNlKVxuICAgICAgICAgICAgICAgIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoYERhdGEgcHJvdmlkZXIgZmV0Y2ggZnVuY3Rpb24gb3IgaXRlbSBpZCAke2N0eC5kYXRhPy5pdGVtSWR9IGlzIG1pc3NpbmcuYCkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMud2l0aENsYXNzTmFtZSgnbW5nLWRldGFpbHMtZHluYW1pYy1kaWFsb2cnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFNlcnZpY2VUeXBlPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTZXJ2aWNlRmV0Y2hGdW5jdGlvbihzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXJ2aWNlRmV0Y2hGdW5jdGlvbjxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPiwgZmV0Y2hGbj86IChpZDogSWRUeXBlLCBzZXJ2aWNlPzogUykgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgRWRpdG9yRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgaWYgKGZldGNoRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoRmV0Y2goZmV0Y2hGbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JBZGREZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCAnYWRkJyk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignYWRkJyk7XG4gICAgICAgIHRoaXMud2l0aFN1Ym1pdEZ1bmN0aW9uKGN0eCA9PlxuICAgICAgICAgICAgY3R4LmRhdGFQcm92aWRlcj8uY3JlYXRlID8gY3R4LmRhdGFQcm92aWRlci5jcmVhdGUoY3R4LmRhdGE/Lml0ZW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoYERhdGEgcHJvdmlkZXIgY3JlYXRlIGZ1bmN0aW9uIGlzIG1pc3NpbmcuYCkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMud2l0aExldmVsKEFjdGlvbkxldmVsRW51bS5TdWNjZXNzKTtcbiAgICAgICAgdGhpcy53aXRoSWNvbigncGkgcGktcGx1cycpO1xuICAgICAgICB0aGlzLndpdGhDbGFzc05hbWUoJ21uZy1kZXRhaWxzLWR5bmFtaWMtZGlhbG9nJyk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhTZXJ2aWNlVHlwZTxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoU2VydmljZVN1Ym1pdEZ1bmN0aW9uKHNlcnZpY2VUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNlcnZpY2VTdWJtaXRGdW5jdGlvbjxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPiwgY3JlYXRlRm4/OiAoaXRlbT86IFQsIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPFQ+LCBmZXRjaEZuPzogKGlkOiBJZFR5cGUsIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBFZGl0b3JEYXRhUHJvdmlkZXIodGhpcy5fbW9kZWwudHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICBpZiAoY3JlYXRlRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoQ3JlYXRlKGNyZWF0ZUZuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmV0Y2hGbikge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhGZXRjaChmZXRjaEZuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCAnZWRpdCcpO1xuICAgICAgICB0aGlzLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lKTtcbiAgICAgICAgdGhpcy53aXRoVGl0bGUobnVsbCk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignOml0ZW1JZC9lZGl0Jyk7XG4gICAgICAgIHRoaXMud2l0aEZldGNoRnVuY3Rpb24oY3R4ID0+XG4gICAgICAgICAgICBjdHguZGF0YVByb3ZpZGVyPy5mZXRjaCAmJiBjdHguZGF0YT8uaXRlbUlkXG4gICAgICAgICAgICAgICAgPyBjdHguZGF0YVByb3ZpZGVyLmZldGNoKGN0eC5kYXRhLml0ZW1JZCwgY3R4LnNlcnZpY2VJbnN0YW5jZSlcbiAgICAgICAgICAgICAgICA6IHRocm93RXJyb3IobmV3IEVycm9yKGBEYXRhIHByb3ZpZGVyIGZldGNoIGZ1bmN0aW9uIG9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfSBpcyBtaXNzaW5nLmApKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLndpdGhTdWJtaXRGdW5jdGlvbihjdHggPT5cbiAgICAgICAgICAgIGN0eC5kYXRhUHJvdmlkZXI/LnVwZGF0ZSAmJiBjdHguZGF0YT8uaXRlbUlkXG4gICAgICAgICAgICAgICAgPyBjdHguZGF0YVByb3ZpZGVyLnVwZGF0ZShjdHguZGF0YS5pdGVtSWQsIGN0eC5kYXRhPy5pdGVtLCBjdHguc2VydmljZUluc3RhbmNlKVxuICAgICAgICAgICAgICAgIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoYERhdGEgcHJvdmlkZXIgdXBkYXRlIGZ1bmN0aW9uIG9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfSBpcyBtaXNzaW5nLmApKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLndpdGhJY29uKCdwaSBwaS1wZW5jaWwnKTtcbiAgICAgICAgdGhpcy53aXRoQ2xhc3NOYW1lKCdtbmctZGV0YWlscy1keW5hbWljLWRpYWxvZycpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNlcnZpY2VTdWJtaXRGdW5jdGlvbihzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXJ2aWNlU3VibWl0RnVuY3Rpb248Uz4oXG4gICAgICAgIHNlcnZpY2VUeXBlOiBUeXBlPFM+LFxuICAgICAgICB1cGRhdGVGbj86IChpZDogSWRUeXBlLCBpdGVtPzogVCwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD4sXG4gICAgICAgIGZldGNoRm4/OiAoaWQ6IElkVHlwZSwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbC50eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgICAgIGlmICh1cGRhdGVGbikge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhVcGRhdGUodXBkYXRlRm4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmZXRjaEZuKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aEZldGNoKGZldGNoRm4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRGVsZXRlRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIGNvbnN0cnVjdG9yKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIobW9kZWwsICdkZWxldGUnKTtcbiAgICAgICAgdGhpcy53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlJvd0lubGluZSk7XG4gICAgICAgIHRoaXMud2l0aFRpdGxlKG51bGwpO1xuICAgICAgICB0aGlzLndpdGhSdW5GdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yRGF0YVByb3ZpZGVyID0gY3R4LmRhdGFQcm92aWRlciBhcyBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIGFueT47XG4gICAgICAgICAgICByZXR1cm4gZWRpdG9yRGF0YVByb3ZpZGVyPy5kZWxldGUgJiYgY3R4LmRhdGE/Lml0ZW1JZFxuICAgICAgICAgICAgICAgID8gZWRpdG9yRGF0YVByb3ZpZGVyLmRlbGV0ZShjdHguZGF0YS5pdGVtSWQsIGN0eC5kYXRhLml0ZW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgOiB0aHJvd0Vycm9yKG5ldyBFcnJvcihgRGF0YSBwcm92aWRlciBkZWxldGUgZnVuY3Rpb24gb3IgaXRlbSBpZCAke2N0eC5kYXRhPy5pdGVtSWR9IGlzIG1pc3NpbmcuYCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy53aXRoTGV2ZWwoQWN0aW9uTGV2ZWxFbnVtLkRhbmdlcik7XG4gICAgICAgIHRoaXMud2l0aEljb24oJ3BpIHBpLXRyYXNoJyk7XG4gICAgICAgIHRoaXMud2l0aFJ1bkNvbmZpcm1hdGlvbih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNlcnZpY2VEZWxldGVGdW5jdGlvbihzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXJ2aWNlRGVsZXRlRnVuY3Rpb248Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4sIGRlbGV0ZUZuPzogKGlkOiBJZFR5cGUsIGl0ZW0/OiBULCBzZXJ2aWNlPzogUykgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgRWRpdG9yRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgaWYgKGRlbGV0ZUZuKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aERlbGV0ZShkZWxldGVGbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvblBvc2l0aW9uRW51bSB7XG4gICAgVG9vbGJhckxlZnQsXG4gICAgVG9vbGJhclJpZ2h0LFxuICAgIFRhYmxlSGVhZGVyLFxuICAgIFJvd0lubGluZSxcbiAgICBSb3dDbGljayxcbiAgICBGb290ZXJMZWZ0LFxuICAgIEZvb3RlclJpZ2h0XG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSB7XG4gICAgT25DbGljaywgLy8gYWN0aW9uIGlzIHRyaWdnZXJlZCBmb3IgYWN0aXZhdGlvbiBvbiBjbGlja1xuICAgIE9uUm91dGUgLy8gYWN0aW9uIGlzIHRyaWdnZXJlZCBmb3IgYWN0aXZhdGlvbiBieSByb3V0ZSB1cmxcbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uVHlwZUVudW0ge1xuICAgIERpcmVjdCwgLy8gYWN0aW9uIGlzIGRpcmVjdGx5IGFjdGl2YXRlZCBhbmQgZXhlY3V0ZWRcbiAgICBFdmVudCwgLy8gYWN0aW9uIGlzIGV4ZWN1dGVkIGJ5IG91dHB1dHRpbmcgZXZlbnQsIG5vIGFkZGl0aW9uYWwgYWN0aXZhdGlvbiBpcyBkb25lXG4gICAgRWRpdG9yIC8vIGVkaXRvciBwcm92aWRpbmcgbWlkZGxlIHN0ZXAgZm9yIGFjdGl2YXRpb25cbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uTGV2ZWxFbnVtIHtcbiAgICBEZWZhdWx0LFxuICAgIFByaW1hcnksXG4gICAgU2Vjb25kYXJ5LFxuICAgIEluZm8sXG4gICAgSGVscCxcbiAgICBTdWNjZXNzLFxuICAgIFdhcm5pbmcsXG4gICAgRGFuZ2VyXG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmRlc2NyaXB0b3IuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXNjcmlwdG9ycy9lZGl0b3IuZGVzY3JpcHRvci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkQ29uZmlnIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRMb29rdXBDb25maWcgZXh0ZW5kcyBGaWVsZENvbmZpZyB7XG4gICAgdGFibGU/OiB7XG4gICAgICAgIGNhcHRpb25Db21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgICAgIGNvbHVtbkFjdGlvbkNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgICB9O1xufVxuIl19
|