@mediusinc/mng-commons 5.4.0 → 5.5.0-rc.1
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/core/descriptors/table.descriptor.d.ts +4 -2
- package/core/directives/rerender.directive.d.ts +9 -0
- package/core/helpers/route.d.ts +25 -25
- package/core/index.d.ts +2 -0
- package/core/models/version.model.d.ts +16 -4
- package/core/reactivity/effect.d.ts +16 -0
- package/esm2022/core/components/notification/notification-wrapper.component.mjs +4 -4
- package/esm2022/core/components/pages/error/error.page.component.mjs +4 -4
- package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +4 -4
- package/esm2022/core/data-list/data-list-params-helpers.mjs +18 -3
- package/esm2022/core/descriptors/table.descriptor.mjs +1 -1
- package/esm2022/core/directives/component.directive.mjs +4 -4
- package/esm2022/core/directives/rerender.directive.mjs +25 -0
- package/esm2022/core/directives/template.directive.mjs +4 -4
- package/esm2022/core/index.mjs +4 -1
- package/esm2022/core/models/version.model.mjs +1 -1
- package/esm2022/core/pipes/boolean.pipe.mjs +6 -6
- package/esm2022/core/pipes/class-map.pipe.mjs +4 -4
- package/esm2022/core/pipes/enum.pipe.mjs +4 -4
- package/esm2022/core/pipes/enumerate-async.pipe.mjs +4 -4
- package/esm2022/core/pipes/enumerate.pipe.mjs +4 -4
- package/esm2022/core/pipes/getter.pipe.mjs +5 -5
- package/esm2022/core/pipes/i18n-property.pipe.mjs +4 -4
- package/esm2022/core/pipes/json-path.pipe.mjs +4 -4
- package/esm2022/core/pipes/parametrize.pipe.mjs +4 -4
- package/esm2022/core/pipes/template.pipe.mjs +4 -4
- package/esm2022/core/reactivity/effect.mjs +22 -0
- package/esm2022/core/security/permission.service.mjs +4 -4
- package/esm2022/core/services/commons-init.service.mjs +4 -4
- package/esm2022/core/services/commons-router.service.mjs +4 -4
- package/esm2022/core/services/commons-storage.service.mjs +4 -4
- package/esm2022/core/services/commons.service.mjs +8 -8
- package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +32 -25
- package/esm2022/filter/descriptors/filter.descriptor.mjs +53 -1
- package/esm2022/form/components/autocomplete/autocomplete.component.mjs +4 -4
- package/esm2022/form/components/date-range/date-range.component.mjs +4 -4
- package/esm2022/form/components/dropdown/dropdown.component.mjs +4 -4
- package/esm2022/form/components/number-range/number-range.component.mjs +4 -4
- package/esm2022/form/directives/input-trim.directive.mjs +4 -4
- package/esm2022/table/api/descriptors/sort.descriptor.mjs +2 -2
- package/esm2022/table/api/descriptors/table.descriptor.mjs +31 -7
- package/esm2022/table/components/column-filter/column-filter.component.mjs +33 -40
- package/esm2022/table/components/column-value/column-value.component.mjs +6 -6
- package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +7 -7
- package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +28 -35
- package/esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.mjs +44 -45
- package/esm2022/table/components/table/table.component.mjs +114 -430
- package/esm2022/table/helpers/filters.mjs +9 -25
- package/esm2022/table/helpers/table.mjs +24 -0
- package/esm2022/table/index.mjs +2 -2
- package/esm2022/table/models/column-preferences.model.mjs +1 -1
- package/esm2022/table/models/filter.model.mjs +1 -1
- package/esm2022/table/pipes/filter-value.pipe.mjs +4 -4
- package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +4 -4
- package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +4 -4
- package/esm2022/table/services/table-data.service.mjs +194 -0
- package/esm2022/table/services/table-metadata.service.mjs +136 -0
- package/esm2022/table/services/table-preferences.service.mjs +142 -0
- package/esm2022/tableview/action/components/action/action.component.mjs +6 -7
- package/esm2022/tableview/action/components/editor/action-editor.component.mjs +4 -4
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +69 -46
- package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +4 -4
- package/esm2022/tableview/action/components/route/action-route.component.mjs +5 -6
- package/esm2022/tableview/action/components/table/action-table.component.mjs +6 -6
- package/esm2022/tableview/action/helpers/action-execution.mjs +25 -0
- package/esm2022/tableview/action/models/execution/action-instance.model.mjs +2 -3
- package/esm2022/tableview/action/services/action-executor.service.mjs +12 -79
- package/esm2022/tableview/action/services/component-action-executor.service.mjs +4 -4
- package/esm2022/tableview/action/services/data-provider-executor.service.mjs +4 -4
- package/esm2022/tableview/action/services/navigation.service.mjs +4 -4
- package/esm2022/tableview/action/services/root-action-executor.service.mjs +4 -4
- package/esm2022/tableview/action/services/view-container.service.mjs +4 -4
- package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +13 -1
- package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +67 -10
- package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +2 -2
- package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +17 -1
- package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +32 -7
- package/esm2022/tableview/api/action/models/execution/action-instance-state.model.mjs +2 -2
- package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +2 -1
- package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +4 -4
- package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +13 -5
- package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +3 -2
- package/esm2022/tableview/api/tableview/helpers/tableview-descriptor-helpers.mjs +2 -2
- package/esm2022/tableview/editor/components/editor/auto-save-status/auto-save-status.component.mjs +4 -4
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +31 -38
- package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +7 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +7 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +7 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +5 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +5 -6
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +5 -6
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +6 -7
- package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-type.abstract.component.mjs +6 -5
- package/esm2022/tableview/editor/components/formly/pipes/formly-field-label.pipe.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +4 -4
- package/esm2022/tableview/editor/helpers/editor-autosave.mjs +2 -2
- package/esm2022/tableview/editor/services/form-editor.service.mjs +4 -4
- package/esm2022/tableview/index.mjs +1 -2
- package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +4 -4
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +4 -4
- package/fesm2022/mediusinc-mng-commons-core.mjs +130 -71
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-filter.mjs +83 -24
- package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +15 -15
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +31 -7
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs +704 -606
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +146 -26
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +260 -317
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/filter/descriptors/filter-lookup.descriptor.d.ts +17 -20
- package/filter/descriptors/filter.descriptor.d.ts +32 -2
- package/form/components/date-range/date-range.component.d.ts +3 -3
- package/form/components/number-range/number-range.component.d.ts +2 -2
- package/package.json +4 -4
- package/table/api/descriptors/column.descriptor.d.ts +1 -1
- package/table/api/descriptors/sort.descriptor.d.ts +2 -2
- package/table/api/descriptors/table.descriptor.d.ts +20 -6
- package/table/components/column-filter/column-filter.component.d.ts +8 -14
- package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +5 -5
- package/table/components/filter/filter-form/filter-form.component.d.ts +10 -19
- package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +11 -13
- package/table/components/table/table.component.d.ts +20 -64
- package/table/helpers/filters.d.ts +4 -7
- package/table/helpers/table.d.ts +6 -0
- package/table/index.d.ts +1 -1
- package/table/models/column-preferences.model.d.ts +2 -2
- package/table/models/filter.model.d.ts +14 -2
- package/table/services/table-data.service.d.ts +36 -0
- package/table/services/table-metadata.service.d.ts +31 -0
- package/table/services/table-preferences.service.d.ts +25 -0
- package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +4 -7
- package/tableview/action/components/localization/data-language-dropdown.component.d.ts +1 -1
- package/tableview/action/helpers/action-execution.d.ts +7 -0
- package/tableview/action/models/execution/action-instance.model.d.ts +1 -2
- package/tableview/action/services/action-executor.service.d.ts +1 -2
- package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +1 -0
- package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +12 -4
- package/tableview/api/action/descriptors/action-link.descriptor.d.ts +1 -0
- package/tableview/api/action/descriptors/action.descriptor.d.ts +5 -3
- package/tableview/api/action/models/execution/action-instance-state.model.d.ts +1 -1
- package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +4 -10
- package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +1 -1
- package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +6 -4
- package/tableview/editor/components/editor/form-editor.component.d.ts +3 -2
- package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +1 -1
- package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +2 -1
- package/tableview/index.d.ts +0 -1
- package/version-info.json +6 -6
- package/esm2022/table/services/data-list.service.mjs +0 -29
- package/esm2022/tableview/action/models/execution/action-instance-state.model.mjs +0 -32
- package/table/services/data-list.service.d.ts +0 -19
- package/tableview/action/models/execution/action-instance-state.model.d.ts +0 -30
|
@@ -180,6 +180,11 @@ export class FilterDescriptor {
|
|
|
180
180
|
* @param value Value for default filter.
|
|
181
181
|
* @param matchMode Match mode for default filter.
|
|
182
182
|
*/
|
|
183
|
+
/**
|
|
184
|
+
* Sets default filter value for filter.
|
|
185
|
+
*
|
|
186
|
+
* @deprecated Use {withDefaultFilterValue} instead.
|
|
187
|
+
*/
|
|
183
188
|
withDefaultFilter(value, matchMode) {
|
|
184
189
|
this._hasDefaultValue = true;
|
|
185
190
|
this._defaultValue = value;
|
|
@@ -187,6 +192,41 @@ export class FilterDescriptor {
|
|
|
187
192
|
this.validateDefaultFilter(value, matchMode);
|
|
188
193
|
return this;
|
|
189
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Sets the default value for a filter with the specified match mode.
|
|
197
|
+
*
|
|
198
|
+
* @param {FilterMatchModeType} matchMode - The match mode of the filter.
|
|
199
|
+
* @param {FilterModel | FilterModel[]} [value] - The default value(s) for the filter. Type of value differs based on match mode and filter model.
|
|
200
|
+
*/
|
|
201
|
+
withDefaultValue(matchMode, value) {
|
|
202
|
+
return this.withDefaultValueUnsafe(matchMode, value);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Sets the default value for a filter with the specified match mode.
|
|
206
|
+
*
|
|
207
|
+
* This function is UNSAFE!
|
|
208
|
+
*
|
|
209
|
+
* @param {FilterMatchModeType} matchMode - The match mode of the filter.
|
|
210
|
+
* @param {FilterModel | FilterModel[]} [value] - The default value(s) for the filter. Type of value differs based on match mode and filter model.
|
|
211
|
+
*/
|
|
212
|
+
withDefaultValueUnsafe(matchMode, value) {
|
|
213
|
+
this._hasDefaultValue = true;
|
|
214
|
+
this._defaultValue = value;
|
|
215
|
+
this._defaultMatchMode = matchMode;
|
|
216
|
+
if (matchMode) {
|
|
217
|
+
this.validateDefaultFilter(value, matchMode);
|
|
218
|
+
}
|
|
219
|
+
return this;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Turns of the default value and match mode for filter.
|
|
223
|
+
*/
|
|
224
|
+
withoutDefaultValue() {
|
|
225
|
+
this._hasDefaultValue = false;
|
|
226
|
+
this._defaultValue = undefined;
|
|
227
|
+
this._defaultMatchMode = undefined;
|
|
228
|
+
return this;
|
|
229
|
+
}
|
|
190
230
|
validateDefaultFilter(value, matchMode) {
|
|
191
231
|
if (matchMode === 'between' && value != null && (!Array.isArray(value) || value.filter(v => v != null).length !== 2)) {
|
|
192
232
|
throw new CommonsInternalError(`Default value for filter match mode ${matchMode} must provide exactly 2 values in array`);
|
|
@@ -342,6 +382,18 @@ export class FilterDescriptor {
|
|
|
342
382
|
this._matchModes = matchModes;
|
|
343
383
|
return this;
|
|
344
384
|
}
|
|
385
|
+
/**
|
|
386
|
+
* Sets default match mode for this filter. If non provided, the default is applied. If custom match modes are provided, it will be validated against it.
|
|
387
|
+
*
|
|
388
|
+
* @param matchMode Match mode option.
|
|
389
|
+
*/
|
|
390
|
+
withDefaultMatchMode(matchMode) {
|
|
391
|
+
if (matchMode != null && Array.isArray(this._matchModes) && !this._matchModes.includes(matchMode)) {
|
|
392
|
+
throw new CommonsInternalError(`Filter match mode ${matchMode} cannot be set for property ${this._property}, because custom match modes do not include it.`);
|
|
393
|
+
}
|
|
394
|
+
this._defaultMatchMode = matchMode;
|
|
395
|
+
return this;
|
|
396
|
+
}
|
|
345
397
|
/**
|
|
346
398
|
* Filter title. If non provided, the defaults are applied.
|
|
347
399
|
*
|
|
@@ -388,4 +440,4 @@ export class FilterDescriptor {
|
|
|
388
440
|
descriptor._dropdownClassName = this._dropdownClassName;
|
|
389
441
|
}
|
|
390
442
|
}
|
|
391
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9maWx0ZXIvc3JjL2Rlc2NyaXB0b3JzL2ZpbHRlci5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxvQkFBb0IsRUFBdUUsYUFBYSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFHckosT0FBTyxFQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBa0M3RSxNQUFNLE9BQU8sZ0JBQWdCO0lBMkN6QixZQUFZLFFBQWdCO1FBdkNsQixnQkFBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFHOUMsZ0JBQWdCO1FBQ04scUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBYXpCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQVcxQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsb0JBQWUsR0FBa0IsSUFBSSxDQUFDO1FBSXRDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV6Qix1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFHOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBVyxZ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LENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3BELFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDcEQsVUFBVSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUNwRSxVQUFVLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQzVELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3IsIEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSwgSUZpbHRlckRlc2NyaXB0b3IsIElMb29rdXBEYXRhUHJvdmlkZXIsIExvZ2dlclNlcnZpY2V9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0lucHV0VHJpbVR5cGUsIExvb2t1cERhdGFQcm92aWRlckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuXG5pbXBvcnQge0ZpbHRlckRpc3BsYXlUeXBlRW51bSwgRmlsdGVyVHlwZUVudW19IGZyb20gJy4uL21vZGVscy9maWx0ZXIubW9kZWwnO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJEYXRlUGlja2VyRGlzcGxheU9wdHNUeXBlID0ge1xuICAgIGFwcGx5RnJvbURpc3BsYXlGb3JtYXQ/OiBib29sZWFuO1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBzaG93VGltZT86IGJvb2xlYW47XG4gICAgc2hvd1NlY29uZHM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRGF0ZVZhbHVlT3B0c1R5cGUgPSB7XG4gICAgdXRjPzogYm9vbGVhbjtcbiAgICBub1RpbWU/OiBib29sZWFuO1xuICAgIG5vVGltZVpvbmU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRGF0ZU9wdHNUeXBlID0gRmlsdGVyRGF0ZVZhbHVlT3B0c1R5cGUgJlxuICAgIEZpbHRlckRhdGVQaWNrZXJEaXNwbGF5T3B0c1R5cGUgJiB7XG4gICAgICAgIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmc7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyTnVtYmVyRnJhY3Rpb25PcHRzVHlwZSA9IHtcbiAgICBtaW5GcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbiAgICBtYXhGcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckxvY2FsZU9wdHNUeXBlID0ge1xuICAgIGxvY2FsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlck51bWJlck9wdHNUeXBlID0gRmlsdGVyTnVtYmVyRnJhY3Rpb25PcHRzVHlwZSAmXG4gICAgRmlsdGVyTG9jYWxlT3B0c1R5cGUgJiB7XG4gICAgICAgIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmc7XG4gICAgfTtcblxuZXhwb3J0IGNsYXNzIEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+IGltcGxlbWVudHMgSUZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9zaG93T25Db2x1bW4/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2ZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9kaXNwbGF5VHlwZT86IEZpbHRlckRpc3BsYXlUeXBlRW51bTtcblxuICAgIC8vIGRlZmF1bHQgdmFsdWVcbiAgICBwcm90ZWN0ZWQgX2hhc0RlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfZGVmYXVsdE1hdGNoTW9kZT86IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZTtcbiAgICBwcm90ZWN0ZWQgX2RlZmF1bHRWYWx1ZT86IEZpbHRlck1vZGVsIHwgRmlsdGVyTW9kZWxbXTtcbiAgICBwcm90ZWN0ZWQgX21hdGNoTW9kZXM/OiBzdHJpbmdbXTtcblxuICAgIC8vIHZhbHVlIGRpc3BsYXlcbiAgICBwcml2YXRlIF9kaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2Rpc3BsYXlGb3JtYXRBcHBseVRvRmllbGQ/OiBib29sZWFuO1xuICAgIHByaXZhdGUgX2xvY2FsZT86IHN0cmluZztcblxuICAgIC8vIG51bWJlciBmaWx0ZXIgZmllbGQgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByb3RlY3RlZCBfbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX251bWJlclVzZUdyb3VwaW5nID0gdHJ1ZTtcblxuICAgIC8vIGRhdGUgZmlsdGVyIGZpZWxkIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaWNrZXJGb3JtYXQ/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9kYXRlUGlja2VyU2hvd1RpbWU/OiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpY2tlclNob3dTZWNvbmRzPzogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX2RhdGVWYWx1ZU5vVGltZT86IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIF9kYXRlVmFsdWVOb1RpbWV6b25lPzogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX2RhdGVWYWx1ZVV0Yz86IGJvb2xlYW47XG5cbiAgICBwcm90ZWN0ZWQgX3BsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJvdGVjdGVkIF9jb2x1bW5DbGFzc05hbWUgPSAnJztcbiAgICBwcm90ZWN0ZWQgX2NvbHVtbldpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcm90ZWN0ZWQgX2NvbHVtbk1pbldpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcm90ZWN0ZWQgX2lucHV0VHJpbT86IElucHV0VHJpbVR5cGU7XG4gICAgcHJvdGVjdGVkIF90aXRsZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfaXNHZW5lcmljRmlsdGVyID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF92YWx1ZVN1Z2dlc3Rpb25Qcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8c3RyaW5nLCBhbnksIGFueSwgJ2ZpZWxkJz47XG4gICAgcHJvdGVjdGVkIF9kcm9wZG93bkNsYXNzTmFtZSA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLl9zaG93T25Db2x1bW4gPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2hvd09uQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd09uQ29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzcGxheVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0RlZmF1bHRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0RlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRNYXRjaE1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0TWF0Y2hNb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWF0Y2hNb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hdGNoTW9kZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNwbGF5Rm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlGb3JtYXRBcHBseVRvRmllbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlck1heEZyYWN0aW9uRGlnaXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJVc2VHcm91cGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlclVzZUdyb3VwaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlckZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyU2hvd1RpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyU2hvd1NlY29uZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyU2hvd1NlY29uZHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlVmFsdWVVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVmFsdWVVdGM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlVmFsdWVOb1RpbWV6b25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVZhbHVlTm9UaW1lem9uZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVWYWx1ZU5vVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVWYWx1ZU5vVGltZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5DbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5DbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5XaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbldpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uTWluV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5NaW5XaWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRyaW1PcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dFRyaW07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzR2VuZXJpY0ZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzR2VuZXJpY0ZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdlbmVyaWNWYWx1ZVByb3ZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVTdWdnZXN0aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkcm9wZG93bkNsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJvcGRvd25DbGFzc05hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgZmlsdGVyIHRvIGdpdmVuIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVyVHlwZSBGaWx0ZXIgdHlwZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXNGaWx0ZXJUeXBlKGZpbHRlclR5cGU6IEZpbHRlclR5cGVFbnVtKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlclR5cGUgPSBmaWx0ZXJUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBmaWx0ZXIgYXMgYSBnZW5lcmljIGZpbHRlci4gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFzR2VuZXJpY0ZpbHRlcigpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNHZW5lcmljRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGZpbHRlciBhcyBkYXRlIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0cyBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICovXG4gICAgcHVibGljIGFzRGF0ZShvcHRzPzogRmlsdGVyRGF0ZU9wdHNUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5EYXRlO1xuICAgICAgICB0aGlzLndpdGhEaXNwbGF5Rm9ybWF0KG9wdHM/LmRpc3BsYXlGb3JtYXQpLndpdGhEYXRlUGlja2VyRGlzcGxheShvcHRzKS53aXRoRGF0ZVZhbHVlKG9wdHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgZmlsdGVyIGFzIG51bWJlciB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdHMgQWRkaXRpb25hbCBvcHRpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc051bWJlcihvcHRzPzogRmlsdGVyTnVtYmVyT3B0c1R5cGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy53aXRoRGlzcGxheUZvcm1hdChvcHRzPy5kaXNwbGF5Rm9ybWF0KS53aXRoTnVtYmVyRnJhY3Rpb25zKG9wdHM/Lm1pbkZyYWN0aW9uRGlnaXRzLCBvcHRzPy5tYXhGcmFjdGlvbkRpZ2l0cykud2l0aExvY2FsZShvcHRzPy5sb2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyBmaWx0ZXIgb24gY29sdW1uIGZvciBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBDb2x1bW4gcHJvcGVydHkgdG8gc2hvdyBmaWx0ZXIgb24uXG4gICAgICogQHBhcmFtIGRpc3BsYXlUeXBlIE9wdGlvbmFsIGRpc3BsYXkgdHlwZSBvdmVycmlkZS4gSWYgbm90IGNvbHVtbiwgdGhlIGZpbHRlciB3aWxsIG5vdCBiZSBzaG93biBvbiBjb2x1bW4uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhTaG93T25Db2x1bW4ocHJvcGVydHk6IGtleW9mIFRhYmxlTW9kZWwsIGRpc3BsYXlUeXBlOiBGaWx0ZXJEaXNwbGF5VHlwZUVudW0gfCB1bmRlZmluZWQgPSBGaWx0ZXJEaXNwbGF5VHlwZUVudW0uQ29sdW1uKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTaG93T25Db2x1bW5VbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBkaXNwbGF5VHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgZmlsdGVyIG9uIGNvbHVtbiBmb3IgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBDb2x1bW4gcHJvcGVydHkgdG8gc2hvdyBmaWx0ZXIgb24uXG4gICAgICogQHBhcmFtIGRpc3BsYXlUeXBlIE9wdGlvbmFsIGRpc3BsYXkgdHlwZSBvdmVycmlkZS4gSWYgbm90IGNvbHVtbiwgdGhlIGZpbHRlciB3aWxsIG5vdCBiZSBzaG93biBvbiBjb2x1bW4uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhTaG93T25Db2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZywgZGlzcGxheVR5cGU6IEZpbHRlckRpc3BsYXlUeXBlRW51bSB8IHVuZGVmaW5lZCA9IEZpbHRlckRpc3BsYXlUeXBlRW51bS5Db2x1bW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2hvd09uQ29sdW1uID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlUeXBlID0gZGlzcGxheVR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgZGlzcGxheSB0eXBlIG9mIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIERpc3BsYXkgdHlwZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERpc3BsYXlUeXBlKHR5cGU/OiBGaWx0ZXJEaXNwbGF5VHlwZUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheVR5cGUgPSB0eXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGRlZmF1bHQgZmlsdGVyIHZhbHVlIGZvciBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgZm9yIGRlZmF1bHQgZmlsdGVyLlxuICAgICAqIEBwYXJhbSBtYXRjaE1vZGUgTWF0Y2ggbW9kZSBmb3IgZGVmYXVsdCBmaWx0ZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEZWZhdWx0RmlsdGVyKHZhbHVlOiBGaWx0ZXJNb2RlbCB8IEZpbHRlck1vZGVsW10gfCB1bmRlZmluZWQsIG1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0RlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0TWF0Y2hNb2RlID0gbWF0Y2hNb2RlO1xuICAgICAgICB0aGlzLnZhbGlkYXRlRGVmYXVsdEZpbHRlcih2YWx1ZSwgbWF0Y2hNb2RlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlRGVmYXVsdEZpbHRlcih2YWx1ZTogRmlsdGVyTW9kZWwgfCBGaWx0ZXJNb2RlbFtdIHwgdW5kZWZpbmVkLCBtYXRjaE1vZGU6IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSkge1xuICAgICAgICBpZiAobWF0Y2hNb2RlID09PSAnYmV0d2VlbicgJiYgdmFsdWUgIT0gbnVsbCAmJiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmZpbHRlcih2ID0+IHYgIT0gbnVsbCkubGVuZ3RoICE9PSAyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBEZWZhdWx0IHZhbHVlIGZvciBmaWx0ZXIgbWF0Y2ggbW9kZSAke21hdGNoTW9kZX0gbXVzdCBwcm92aWRlIGV4YWN0bHkgMiB2YWx1ZXMgaW4gYXJyYXlgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKG1hdGNoTW9kZSA9PT0gJ2luJyB8fCBtYXRjaE1vZGUgPT09ICdub3RJbicpICYmIHZhbHVlICE9IG51bGwgJiYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5maWx0ZXIodiA9PiB2ICE9IG51bGwpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRGVmYXVsdCB2YWx1ZSBmb3IgZmlsdGVyIG1hdGNoIG1vZGUgJHttYXRjaE1vZGV9IG11c3QgYmUgYXJyYXkgYW5kIHByb3ZpZGUgYXQgbGVhc3QgMSBub24tbnVsbCB2YWx1ZWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaE1vZGUgPT09ICdleGlzdHMnIHx8IG1hdGNoTW9kZSA9PT0gJ2RvZXNOb3RFeGlzdCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaE1vZGUgJiYgdGhpcy5fbWF0Y2hNb2RlcyAmJiB0aGlzLl9tYXRjaE1vZGVzLmluZGV4T2YobWF0Y2hNb2RlKSA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRNYXRjaE1vZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBMb2dnZXJTZXJ2aWNlLmdldCgpLmRlYnVnKGBXQVJOSU5HOiBEZWZhdWx0IGZpbHRlciBtYXRjaCBtb2RlICcke21hdGNoTW9kZX0nIGNvdWxkIG5vdCBiZSBhc3NpZ25lZCBmb3IgcHJvcGVydHkgJHt0aGlzLl9wcm9wZXJ0eX0uYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGZvcm1hdCBmb3IgZGlzcGxheSBvZiBmaWx0ZXIgdmFsdWUgKGFwcGxpZXMgdG8gZGF0ZSBhbmQgbnVtYmVyKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IChBbmd1bGFyIGZvcm1hdHRpbmcgcnVsZXMgYXBwbHkpLlxuICAgICAqIEBwYXJhbSBhcHBseVRvRmllbGQgSWYgdGhlIGZvcm1hdCBzaG91bGQgYWxzbyBiZSBhcHBsaWVkIHRvIGZpZWxkIG9uIGZpbHRlciBlZGl0aW5nIGZvcm0uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEaXNwbGF5Rm9ybWF0KGZvcm1hdD86IHN0cmluZywgYXBwbHlUb0ZpZWxkPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkID0gYXBwbHlUb0ZpZWxkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGxvY2FsZSBmb3IgZmlsdGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxvY2FsZSBMb2NhbGUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhMb2NhbGUobG9jYWxlPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBmcmFjdGlvbiBmb3IgbnVtYmVyIGZpbHRlciBlZGl0aW5nIGZpZWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1pbiBNaW4gZnJhY3Rpb24gZGlnaXRzIChpLmUuIGRpZ2l0cyBhZnRlciBkZWNpbWFsKS5cbiAgICAgKiBAcGFyYW0gbWF4IE1heCBmcmFjdGlvbiBkaWdpdHMgKGkuZS4gZGlnaXRzIGFmdGVyIGRlY2ltYWwpLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTnVtYmVyRnJhY3Rpb25zKG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzID0gbWluO1xuICAgICAgICB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cyA9IG1heDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgbnVtYmVyIGdyb3VwaW5nIHNob3VsZCBiZSB1c2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZUdyb3VwaW5nIEVuYWJsZXMvZGlzYmFsZWQgdGhlIGZlYXR1cmUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhOdW1iZXJHcm91cGluZyh1c2VHcm91cGluZyA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyVXNlR3JvdXBpbmcgPSB1c2VHcm91cGluZztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGRhdGEgcHJvdmlkZXIgZm9yIGF1dG9jb21wbGV0ZSB0ZXh0IHN1Z2dlc3Rpb25zLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlRGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIgZm9yIGF1dG9jb21wbGV0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEdlbmVyaWNWYWx1ZVByb3ZpZGVyKHZhbHVlRGF0YVByb3ZpZGVyOiBMb29rdXBEYXRhUHJvdmlkZXJJbnN0PHN0cmluZywgYW55LCBhbnksICdmaWVsZCc+KTogdGhpcyB7XG4gICAgICAgIGlmICghKHRoaXMuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uU3RyaW5nIHx8IHRoaXMuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcignR2VuZXJpYyB2YWx1ZSBsb29rdXAgY2FuIG9ubHkgYmUgc2V0IGZvciB0aGUgc3RyaW5nIG9yIGxvb2t1cCBlbnVtIGZpbHRlciB0eXBlcy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ZhbHVlU3VnZ2VzdGlvblByb3ZpZGVyID0gdmFsdWVEYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSAke3dpdGhEYXRlUGlja2VyRGlzcGxheX0gaW5zdGVhZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERhdGVGb3JtYXQoZm9ybWF0Pzogc3RyaW5nLCBzaG93VGltZSA9IGZhbHNlLCBzaG93U2Vjb25kcyA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQgPSBmb3JtYXQ7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZSA9IHNob3dUaW1lO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyU2hvd1NlY29uZHMgPSBzaG93U2Vjb25kcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBkYXRlIHBpY2tlciBkaXNwbGF5IG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0cyBPcHRpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGF0ZVBpY2tlckRpc3BsYXkob3B0cz86IEZpbHRlckRhdGVQaWNrZXJEaXNwbGF5T3B0c1R5cGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdEFwcGx5VG9GaWVsZCA9IG9wdHM/LmFwcGx5RnJvbURpc3BsYXlGb3JtYXQ7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQgPSBvcHRzPy5mb3JtYXQ7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZSA9IG9wdHM/LnNob3dUaW1lO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyU2hvd1NlY29uZHMgPSBvcHRzPy5zaG93U2Vjb25kcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBmaWx0ZXIgZGF0ZSB2YWx1ZSBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0cyBPcHRpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGF0ZVZhbHVlKG9wdHM/OiBGaWx0ZXJEYXRlVmFsdWVPcHRzVHlwZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRlVmFsdWVVdGMgPSBvcHRzPy51dGM7XG4gICAgICAgIHRoaXMuX2RhdGVWYWx1ZU5vVGltZXpvbmUgPSBvcHRzPy5ub1RpbWVab25lO1xuICAgICAgICB0aGlzLl9kYXRlVmFsdWVOb1RpbWUgPSBvcHRzPy5ub1RpbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgcGxhY2Vob2xkZXIgZm9yIGZpbHRlciBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwbGFjZWhvbGRlciBUZXh0IGZvciBwbGFjZWhvbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBjbGFzcyBuYW1lIGZvciBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIENsYXNzIG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGNsYXNzIG5hbWUgZm9yIGNvbHVtbiBkaXNwbGF5IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIENsYXNzIG5hbWUgZm9yIGNvbHVtbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbkNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5DbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBjb2x1bW4gd2lkdGggZm9yIGNvbHVtbiBkaXNwbGF5IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGggUmVsYXRpdmUgd2lkdGggKGluIHBlcmNlbnRhZ2UpIG9mIHRhYmxlIHdpZHRoOlxuICAgICAqIEBwYXJhbSBtaW5XaWR0aFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uV2lkdGgod2lkdGg/OiBudW1iZXIsIG1pbldpZHRoPzogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtbldpZHRoID0gd2lkdGggPz8gbnVsbDtcbiAgICAgICAgdGhpcy5fY29sdW1uTWluV2lkdGggPSBtaW5XaWR0aCA/PyBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGlucHV0IHRyaW1taW5nIGZvciBmaWx0ZXIgdmFsdWUgZmllbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHJpbU9wdGlvbiBUcmltIHNldHRpbmcuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhJbnB1dFRyaW1taW5nKHRyaW1PcHRpb246IElucHV0VHJpbVR5cGUgPSAnYm90aCcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faW5wdXRUcmltID0gdHJpbU9wdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyByYW5nZSBvZiBtYXRjaCBtb2RlcyBmb3IgdGhpcyBmaWx0ZXIuIElmIG5vbiBwcm92aWRlZCwgdGhlIGRlZmF1bHRzIGFyZSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1hdGNoTW9kZXMgTWF0Y2ggbW9kZSBvcHRpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTWF0Y2hNb2RlcyhtYXRjaE1vZGVzPzogQXJyYXk8RmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9tYXRjaE1vZGVzID0gbWF0Y2hNb2RlcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIHRpdGxlLiBJZiBub24gcHJvdmlkZWQsIHRoZSBkZWZhdWx0cyBhcmUgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBmb3IgdGhlIGZpZWxkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERyb3Bkb3duQ2xhc3NOYW1lKGRyb3Bkb3duQ2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZHJvcGRvd25DbGFzc05hbWUgPSBkcm9wZG93bkNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIGN1cnJlbnQgZGVzY3JpcHRvciB0byBhIG5ldyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29weSgpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4odGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPikge1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJUeXBlID0gdGhpcy5fZmlsdGVyVHlwZTtcbiAgICAgICAgZGVzY3JpcHRvci5faGFzRGVmYXVsdFZhbHVlID0gdGhpcy5faGFzRGVmYXVsdFZhbHVlO1xuICAgICAgICBkZXNjcmlwdG9yLl9kZWZhdWx0VmFsdWUgPSB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RlZmF1bHRNYXRjaE1vZGUgPSB0aGlzLl9kZWZhdWx0TWF0Y2hNb2RlO1xuICAgICAgICBkZXNjcmlwdG9yLl9kaXNwbGF5Rm9ybWF0ID0gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICAgICAgZGVzY3JpcHRvci5fbG9jYWxlID0gdGhpcy5fbG9jYWxlO1xuICAgICAgICBkZXNjcmlwdG9yLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzO1xuICAgICAgICBkZXNjcmlwdG9yLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cyA9IHRoaXMuX251bWJlck1heEZyYWN0aW9uRGlnaXRzO1xuICAgICAgICBkZXNjcmlwdG9yLl9udW1iZXJVc2VHcm91cGluZyA9IHRoaXMuX251bWJlclVzZUdyb3VwaW5nO1xuICAgICAgICBkZXNjcmlwdG9yLl9kYXRlUGlja2VyRm9ybWF0ID0gdGhpcy5fZGF0ZVBpY2tlckZvcm1hdDtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0ZVBpY2tlclNob3dUaW1lID0gdGhpcy5fZGF0ZVBpY2tlclNob3dUaW1lO1xuICAgICAgICBkZXNjcmlwdG9yLl9kYXRlVmFsdWVVdGMgPSB0aGlzLl9kYXRlVmFsdWVVdGM7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RhdGVWYWx1ZU5vVGltZXpvbmUgPSB0aGlzLl9kYXRlVmFsdWVOb1RpbWV6b25lO1xuICAgICAgICBkZXNjcmlwdG9yLl9kYXRlVmFsdWVOb1RpbWUgPSB0aGlzLl9kYXRlVmFsdWVOb1RpbWU7XG4gICAgICAgIGRlc2NyaXB0b3IuX3BsYWNlaG9sZGVyID0gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1uV2lkdGggPSB0aGlzLl9jb2x1bW5XaWR0aDtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1uTWluV2lkdGggPSB0aGlzLl9jb2x1bW5NaW5XaWR0aDtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1uQ2xhc3NOYW1lID0gdGhpcy5fY29sdW1uQ2xhc3NOYW1lO1xuICAgICAgICBkZXNjcmlwdG9yLl9pc0dlbmVyaWNGaWx0ZXIgPSB0aGlzLl9pc0dlbmVyaWNGaWx0ZXI7XG4gICAgICAgIGRlc2NyaXB0b3IuX3ZhbHVlU3VnZ2VzdGlvblByb3ZpZGVyID0gdGhpcy5fdmFsdWVTdWdnZXN0aW9uUHJvdmlkZXI7XG4gICAgICAgIGRlc2NyaXB0b3IuX2Ryb3Bkb3duQ2xhc3NOYW1lID0gdGhpcy5fZHJvcGRvd25DbGFzc05hbWU7XG4gICAgfVxufVxuIl19
|
|
443
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9maWx0ZXIvc3JjL2Rlc2NyaXB0b3JzL2ZpbHRlci5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxvQkFBb0IsRUFBNEYsYUFBYSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFHMUssT0FBTyxFQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBa0M3RSxNQUFNLE9BQU8sZ0JBQWdCO0lBMkN6QixZQUFZLFFBQWdCO1FBdkNsQixnQkFBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFHOUMsZ0JBQWdCO1FBQ04scUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBYXpCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQVcxQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsb0JBQWUsR0FBa0IsSUFBSSxDQUFDO1FBSXRDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV6Qix1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFHOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBVyxZ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LFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDcEQsVUFBVSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNwRCxVQUFVLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1FBQ3BFLFVBQVUsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDNUQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25zSW50ZXJuYWxFcnJvciwgRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlLCBGaWx0ZXJNYXRjaE1vZGVUeXBlLCBJRmlsdGVyRGVzY3JpcHRvciwgSUxvb2t1cERhdGFQcm92aWRlciwgTG9nZ2VyU2VydmljZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7SW5wdXRUcmltVHlwZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtL2FwaSc7XG5cbmltcG9ydCB7RmlsdGVyRGlzcGxheVR5cGVFbnVtLCBGaWx0ZXJUeXBlRW51bX0gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckRhdGVQaWNrZXJEaXNwbGF5T3B0c1R5cGUgPSB7XG4gICAgYXBwbHlGcm9tRGlzcGxheUZvcm1hdD86IGJvb2xlYW47XG4gICAgZm9ybWF0Pzogc3RyaW5nO1xuICAgIHNob3dUaW1lPzogYm9vbGVhbjtcbiAgICBzaG93U2Vjb25kcz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJEYXRlVmFsdWVPcHRzVHlwZSA9IHtcbiAgICB1dGM/OiBib29sZWFuO1xuICAgIG5vVGltZT86IGJvb2xlYW47XG4gICAgbm9UaW1lWm9uZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJEYXRlT3B0c1R5cGUgPSBGaWx0ZXJEYXRlVmFsdWVPcHRzVHlwZSAmXG4gICAgRmlsdGVyRGF0ZVBpY2tlckRpc3BsYXlPcHRzVHlwZSAmIHtcbiAgICAgICAgZGlzcGxheUZvcm1hdD86IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJOdW1iZXJGcmFjdGlvbk9wdHNUeXBlID0ge1xuICAgIG1pbkZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIG1heEZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyTG9jYWxlT3B0c1R5cGUgPSB7XG4gICAgbG9jYWxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyTnVtYmVyT3B0c1R5cGUgPSBGaWx0ZXJOdW1iZXJGcmFjdGlvbk9wdHNUeXBlICZcbiAgICBGaWx0ZXJMb2NhbGVPcHRzVHlwZSAmIHtcbiAgICAgICAgZGlzcGxheUZvcm1hdD86IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4gaW1wbGVtZW50cyBJRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcHJvcGVydHk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3Nob3dPbkNvbHVtbj86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLlN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2Rpc3BsYXlUeXBlPzogRmlsdGVyRGlzcGxheVR5cGVFbnVtO1xuXG4gICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgIHByb3RlY3RlZCBfaGFzRGVmYXVsdFZhbHVlID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0TWF0Y2hNb2RlPzogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlO1xuICAgIHByb3RlY3RlZCBfZGVmYXVsdFZhbHVlPzogRmlsdGVyTW9kZWwgfCBGaWx0ZXJNb2RlbFtdO1xuICAgIHByb3RlY3RlZCBfbWF0Y2hNb2Rlcz86IHN0cmluZ1tdO1xuXG4gICAgLy8gdmFsdWUgZGlzcGxheVxuICAgIHByaXZhdGUgX2Rpc3BsYXlGb3JtYXQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZGlzcGxheUZvcm1hdEFwcGx5VG9GaWVsZD86IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfbG9jYWxlPzogc3RyaW5nO1xuXG4gICAgLy8gbnVtYmVyIGZpbHRlciBmaWVsZCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJvdGVjdGVkIF9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX251bWJlck1heEZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfbnVtYmVyVXNlR3JvdXBpbmcgPSB0cnVlO1xuXG4gICAgLy8gZGF0ZSBmaWx0ZXIgZmllbGQgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpY2tlckZvcm1hdD86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaWNrZXJTaG93VGltZT86IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIF9kYXRlUGlja2VyU2hvd1NlY29uZHM/OiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfZGF0ZVZhbHVlTm9UaW1lPzogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX2RhdGVWYWx1ZU5vVGltZXpvbmU/OiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfZGF0ZVZhbHVlVXRjPzogYm9vbGVhbjtcblxuICAgIHByb3RlY3RlZCBfcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcm90ZWN0ZWQgX2NvbHVtbkNsYXNzTmFtZSA9ICcnO1xuICAgIHByb3RlY3RlZCBfY29sdW1uV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByb3RlY3RlZCBfY29sdW1uTWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByb3RlY3RlZCBfaW5wdXRUcmltPzogSW5wdXRUcmltVHlwZTtcbiAgICBwcm90ZWN0ZWQgX3RpdGxlPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9pc0dlbmVyaWNGaWx0ZXIgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX3ZhbHVlU3VnZ2VzdGlvblByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxzdHJpbmcsIGFueSwgYW55LCAnZmllbGQnPjtcbiAgICBwcm90ZWN0ZWQgX2Ryb3Bkb3duQ2xhc3NOYW1lID0gJyc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMuX3Nob3dPbkNvbHVtbiA9IHByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVyVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzaG93T25Db2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93T25Db2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNwbGF5VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzRGVmYXVsdFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzRGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdE1hdGNoTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRNYXRjaE1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXRjaE1vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF0Y2hNb2RlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzcGxheUZvcm1hdEFwcGx5VG9GaWVsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlGb3JtYXRBcHBseVRvRmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNaW5GcmFjdGlvbkRpZ2l0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlclVzZUdyb3VwaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyVXNlR3JvdXBpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpY2tlckZvcm1hdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJTaG93VGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJTaG93U2Vjb25kcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJTaG93U2Vjb25kcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVWYWx1ZVV0YygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVWYWx1ZVV0YztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVWYWx1ZU5vVGltZXpvbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVmFsdWVOb1RpbWV6b25lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVZhbHVlTm9UaW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVZhbHVlTm9UaW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbldpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uV2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5NaW5XaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbk1pbldpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdHJpbU9wdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0VHJpbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNHZW5lcmljRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNHZW5lcmljRmlsdGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ2VuZXJpY1ZhbHVlUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZVN1Z2dlc3Rpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRyb3Bkb3duQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBmaWx0ZXIgdG8gZ2l2ZW4gdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWx0ZXJUeXBlIEZpbHRlciB0eXBlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc0ZpbHRlclR5cGUoZmlsdGVyVHlwZTogRmlsdGVyVHlwZUVudW0pIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyVHlwZSA9IGZpbHRlclR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlciBhcyBhIGdlbmVyaWMgZmlsdGVyLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYXNHZW5lcmljRmlsdGVyKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc0dlbmVyaWNGaWx0ZXIgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgZmlsdGVyIGFzIGRhdGUgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRzIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXNEYXRlKG9wdHM/OiBGaWx0ZXJEYXRlT3B0c1R5cGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkRhdGU7XG4gICAgICAgIHRoaXMud2l0aERpc3BsYXlGb3JtYXQob3B0cz8uZGlzcGxheUZvcm1hdCkud2l0aERhdGVQaWNrZXJEaXNwbGF5KG9wdHMpLndpdGhEYXRlVmFsdWUob3B0cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBmaWx0ZXIgYXMgbnVtYmVyIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0cyBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICovXG4gICAgcHVibGljIGFzTnVtYmVyKG9wdHM/OiBGaWx0ZXJOdW1iZXJPcHRzVHlwZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLndpdGhEaXNwbGF5Rm9ybWF0KG9wdHM/LmRpc3BsYXlGb3JtYXQpLndpdGhOdW1iZXJGcmFjdGlvbnMob3B0cz8ubWluRnJhY3Rpb25EaWdpdHMsIG9wdHM/Lm1heEZyYWN0aW9uRGlnaXRzKS53aXRoTG9jYWxlKG9wdHM/LmxvY2FsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIGZpbHRlciBvbiBjb2x1bW4gZm9yIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IENvbHVtbiBwcm9wZXJ0eSB0byBzaG93IGZpbHRlciBvbi5cbiAgICAgKiBAcGFyYW0gZGlzcGxheVR5cGUgT3B0aW9uYWwgZGlzcGxheSB0eXBlIG92ZXJyaWRlLiBJZiBub3QgY29sdW1uLCB0aGUgZmlsdGVyIHdpbGwgbm90IGJlIHNob3duIG9uIGNvbHVtbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFNob3dPbkNvbHVtbihwcm9wZXJ0eToga2V5b2YgVGFibGVNb2RlbCwgZGlzcGxheVR5cGU6IEZpbHRlckRpc3BsYXlUeXBlRW51bSB8IHVuZGVmaW5lZCA9IEZpbHRlckRpc3BsYXlUeXBlRW51bS5Db2x1bW4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNob3dPbkNvbHVtblVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGRpc3BsYXlUeXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyBmaWx0ZXIgb24gY29sdW1uIGZvciBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IENvbHVtbiBwcm9wZXJ0eSB0byBzaG93IGZpbHRlciBvbi5cbiAgICAgKiBAcGFyYW0gZGlzcGxheVR5cGUgT3B0aW9uYWwgZGlzcGxheSB0eXBlIG92ZXJyaWRlLiBJZiBub3QgY29sdW1uLCB0aGUgZmlsdGVyIHdpbGwgbm90IGJlIHNob3duIG9uIGNvbHVtbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFNob3dPbkNvbHVtblVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBkaXNwbGF5VHlwZTogRmlsdGVyRGlzcGxheVR5cGVFbnVtIHwgdW5kZWZpbmVkID0gRmlsdGVyRGlzcGxheVR5cGVFbnVtLkNvbHVtbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaG93T25Db2x1bW4gPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fZGlzcGxheVR5cGUgPSBkaXNwbGF5VHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBkaXNwbGF5IHR5cGUgb2YgZmlsdGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgRGlzcGxheSB0eXBlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGlzcGxheVR5cGUodHlwZT86IEZpbHRlckRpc3BsYXlUeXBlRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNwbGF5VHlwZSA9IHR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgZGVmYXVsdCBmaWx0ZXIgdmFsdWUgZm9yIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBmb3IgZGVmYXVsdCBmaWx0ZXIuXG4gICAgICogQHBhcmFtIG1hdGNoTW9kZSBNYXRjaCBtb2RlIGZvciBkZWZhdWx0IGZpbHRlci5cbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIFNldHMgZGVmYXVsdCBmaWx0ZXIgdmFsdWUgZm9yIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7d2l0aERlZmF1bHRGaWx0ZXJWYWx1ZX0gaW5zdGVhZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRGaWx0ZXIodmFsdWU6IEZpbHRlck1vZGVsIHwgRmlsdGVyTW9kZWxbXSB8IHVuZGVmaW5lZCwgbWF0Y2hNb2RlOiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRNYXRjaE1vZGUgPSBtYXRjaE1vZGU7XG4gICAgICAgIHRoaXMudmFsaWRhdGVEZWZhdWx0RmlsdGVyKHZhbHVlLCBtYXRjaE1vZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRWYWx1ZShtYXRjaE1vZGU6ICdleGlzdHMnIHwgJ2RvZXNOb3RFeGlzdCcpOiB0aGlzO1xuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFZhbHVlKG1hdGNoTW9kZTogJ2JldHdlZW4nLCB2YWx1ZTogW0ZpbHRlck1vZGVsLCBGaWx0ZXJNb2RlbF0pOiB0aGlzO1xuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFZhbHVlKG1hdGNoTW9kZTogJ2luJyB8ICdub3RJbicsIHZhbHVlOiBGaWx0ZXJNb2RlbFtdKTogdGhpcztcbiAgICBwdWJsaWMgd2l0aERlZmF1bHRWYWx1ZShcbiAgICAgICAgbWF0Y2hNb2RlOiAnbGVzc1RoYW4nIHwgJ2xlc3NUaGFuT3JFcXVhbFRvJyB8ICdncmVhdGVyVGhhbicgfCAnZ3JlYXRlclRoYW5PckVxdWFsVG8nLFxuICAgICAgICB2YWx1ZTogRmlsdGVyTW9kZWwgZXh0ZW5kcyBudW1iZXIgfCBEYXRlID8gRmlsdGVyTW9kZWwgOiBuZXZlclxuICAgICk6IHRoaXM7XG4gICAgcHVibGljIHdpdGhEZWZhdWx0VmFsdWUobWF0Y2hNb2RlOiAnY29udGFpbnMnIHwgJ25vdENvbnRhaW5zJyB8ICdzdGFydHNXaXRoJyB8ICdlbmRzV2l0aCcsIHZhbHVlOiBGaWx0ZXJNb2RlbCBleHRlbmRzIHN0cmluZyA/IEZpbHRlck1vZGVsIDogbmV2ZXIpOiB0aGlzO1xuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFZhbHVlKG1hdGNoTW9kZTogJ2VxdWFscycgfCAnbm90RXF1YWxzJywgdmFsdWU6IEZpbHRlck1vZGVsKTogdGhpcztcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGZpbHRlciB3aXRoIHRoZSBzcGVjaWZpZWQgbWF0Y2ggbW9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RmlsdGVyTWF0Y2hNb2RlVHlwZX0gbWF0Y2hNb2RlIC0gVGhlIG1hdGNoIG1vZGUgb2YgdGhlIGZpbHRlci5cbiAgICAgKiBAcGFyYW0ge0ZpbHRlck1vZGVsIHwgRmlsdGVyTW9kZWxbXX0gW3ZhbHVlXSAtIFRoZSBkZWZhdWx0IHZhbHVlKHMpIGZvciB0aGUgZmlsdGVyLiBUeXBlIG9mIHZhbHVlIGRpZmZlcnMgYmFzZWQgb24gbWF0Y2ggbW9kZSBhbmQgZmlsdGVyIG1vZGVsLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFZhbHVlKG1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlVHlwZSwgdmFsdWU/OiBGaWx0ZXJNb2RlbCB8IEZpbHRlck1vZGVsW10gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aERlZmF1bHRWYWx1ZVVuc2FmZShtYXRjaE1vZGUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGZpbHRlciB3aXRoIHRoZSBzcGVjaWZpZWQgbWF0Y2ggbW9kZS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHtGaWx0ZXJNYXRjaE1vZGVUeXBlfSBtYXRjaE1vZGUgLSBUaGUgbWF0Y2ggbW9kZSBvZiB0aGUgZmlsdGVyLlxuICAgICAqIEBwYXJhbSB7RmlsdGVyTW9kZWwgfCBGaWx0ZXJNb2RlbFtdfSBbdmFsdWVdIC0gVGhlIGRlZmF1bHQgdmFsdWUocykgZm9yIHRoZSBmaWx0ZXIuIFR5cGUgb2YgdmFsdWUgZGlmZmVycyBiYXNlZCBvbiBtYXRjaCBtb2RlIGFuZCBmaWx0ZXIgbW9kZWwuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEZWZhdWx0VmFsdWVVbnNhZmUobWF0Y2hNb2RlPzogc3RyaW5nLCB2YWx1ZT86IGFueSB8IGFueVtdIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0RlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0TWF0Y2hNb2RlID0gbWF0Y2hNb2RlO1xuICAgICAgICBpZiAobWF0Y2hNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlRGVmYXVsdEZpbHRlcih2YWx1ZSwgbWF0Y2hNb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUdXJucyBvZiB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQgbWF0Y2ggbW9kZSBmb3IgZmlsdGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRob3V0RGVmYXVsdFZhbHVlKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNEZWZhdWx0VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9kZWZhdWx0TWF0Y2hNb2RlID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGVEZWZhdWx0RmlsdGVyKHZhbHVlOiBGaWx0ZXJNb2RlbCB8IEZpbHRlck1vZGVsW10gfCB1bmRlZmluZWQsIG1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlKSB7XG4gICAgICAgIGlmIChtYXRjaE1vZGUgPT09ICdiZXR3ZWVuJyAmJiB2YWx1ZSAhPSBudWxsICYmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUuZmlsdGVyKHYgPT4gdiAhPSBudWxsKS5sZW5ndGggIT09IDIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYERlZmF1bHQgdmFsdWUgZm9yIGZpbHRlciBtYXRjaCBtb2RlICR7bWF0Y2hNb2RlfSBtdXN0IHByb3ZpZGUgZXhhY3RseSAyIHZhbHVlcyBpbiBhcnJheWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICgobWF0Y2hNb2RlID09PSAnaW4nIHx8IG1hdGNoTW9kZSA9PT0gJ25vdEluJykgJiYgdmFsdWUgIT0gbnVsbCAmJiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmZpbHRlcih2ID0+IHYgIT0gbnVsbCkubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBEZWZhdWx0IHZhbHVlIGZvciBmaWx0ZXIgbWF0Y2ggbW9kZSAke21hdGNoTW9kZX0gbXVzdCBiZSBhcnJheSBhbmQgcHJvdmlkZSBhdCBsZWFzdCAxIG5vbi1udWxsIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoTW9kZSA9PT0gJ2V4aXN0cycgfHwgbWF0Y2hNb2RlID09PSAnZG9lc05vdEV4aXN0Jykge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoTW9kZSAmJiB0aGlzLl9tYXRjaE1vZGVzICYmIHRoaXMuX21hdGNoTW9kZXMuaW5kZXhPZihtYXRjaE1vZGUpIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdE1hdGNoTW9kZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIExvZ2dlclNlcnZpY2UuZ2V0KCkuZGVidWcoYFdBUk5JTkc6IERlZmF1bHQgZmlsdGVyIG1hdGNoIG1vZGUgJyR7bWF0Y2hNb2RlfScgY291bGQgbm90IGJlIGFzc2lnbmVkIGZvciBwcm9wZXJ0eSAke3RoaXMuX3Byb3BlcnR5fS5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgZm9ybWF0IGZvciBkaXNwbGF5IG9mIGZpbHRlciB2YWx1ZSAoYXBwbGllcyB0byBkYXRlIGFuZCBudW1iZXIpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZvcm1hdCBGb3JtYXQgKEFuZ3VsYXIgZm9ybWF0dGluZyBydWxlcyBhcHBseSkuXG4gICAgICogQHBhcmFtIGFwcGx5VG9GaWVsZCBJZiB0aGUgZm9ybWF0IHNob3VsZCBhbHNvIGJlIGFwcGxpZWQgdG8gZmllbGQgb24gZmlsdGVyIGVkaXRpbmcgZm9ybS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERpc3BsYXlGb3JtYXQoZm9ybWF0Pzogc3RyaW5nLCBhcHBseVRvRmllbGQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPSBmb3JtYXQ7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXRBcHBseVRvRmllbGQgPSBhcHBseVRvRmllbGQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgbG9jYWxlIGZvciBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9jYWxlIExvY2FsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aExvY2FsZShsb2NhbGU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGZyYWN0aW9uIGZvciBudW1iZXIgZmlsdGVyIGVkaXRpbmcgZmllbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWluIE1pbiBmcmFjdGlvbiBkaWdpdHMgKGkuZS4gZGlnaXRzIGFmdGVyIGRlY2ltYWwpLlxuICAgICAqIEBwYXJhbSBtYXggTWF4IGZyYWN0aW9uIGRpZ2l0cyAoaS5lLiBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCkuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhOdW1iZXJGcmFjdGlvbnMobWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPSBtaW47XG4gICAgICAgIHRoaXMuX251bWJlck1heEZyYWN0aW9uRGlnaXRzID0gbWF4O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiBudW1iZXIgZ3JvdXBpbmcgc2hvdWxkIGJlIHVzZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlR3JvdXBpbmcgRW5hYmxlcy9kaXNiYWxlZCB0aGUgZmVhdHVyZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE51bWJlckdyb3VwaW5nKHVzZUdyb3VwaW5nID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9udW1iZXJVc2VHcm91cGluZyA9IHVzZUdyb3VwaW5nO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgZGF0YSBwcm92aWRlciBmb3IgYXV0b2NvbXBsZXRlIHRleHQgc3VnZ2VzdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWVEYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlciBmb3IgYXV0b2NvbXBsZXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoR2VuZXJpY1ZhbHVlUHJvdmlkZXIodmFsdWVEYXRhUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8c3RyaW5nLCBhbnksIGFueSwgJ2ZpZWxkJz4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCEodGhpcy5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5TdHJpbmcgfHwgdGhpcy5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdHZW5lcmljIHZhbHVlIGxvb2t1cCBjYW4gb25seSBiZSBzZXQgZm9yIHRoZSBzdHJpbmcgb3IgbG9va3VwIGVudW0gZmlsdGVyIHR5cGVzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdmFsdWVTdWdnZXN0aW9uUHJvdmlkZXIgPSB2YWx1ZURhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlICR7d2l0aERhdGVQaWNrZXJEaXNwbGF5fSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGF0ZUZvcm1hdChmb3JtYXQ/OiBzdHJpbmcsIHNob3dUaW1lID0gZmFsc2UsIHNob3dTZWNvbmRzID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlckZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlclNob3dUaW1lID0gc2hvd1RpbWU7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJTaG93U2Vjb25kcyA9IHNob3dTZWNvbmRzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGRhdGUgcGlja2VyIGRpc3BsYXkgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRzIE9wdGlvbnMuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEYXRlUGlja2VyRGlzcGxheShvcHRzPzogRmlsdGVyRGF0ZVBpY2tlckRpc3BsYXlPcHRzVHlwZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkID0gb3B0cz8uYXBwbHlGcm9tRGlzcGxheUZvcm1hdDtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlckZvcm1hdCA9IG9wdHM/LmZvcm1hdDtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlclNob3dUaW1lID0gb3B0cz8uc2hvd1RpbWU7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJTaG93U2Vjb25kcyA9IG9wdHM/LnNob3dTZWNvbmRzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGZpbHRlciBkYXRlIHZhbHVlIGZvcm1hdHRpbmcgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRzIE9wdGlvbnMuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEYXRlVmFsdWUob3B0cz86IEZpbHRlckRhdGVWYWx1ZU9wdHNUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGVWYWx1ZVV0YyA9IG9wdHM/LnV0YztcbiAgICAgICAgdGhpcy5fZGF0ZVZhbHVlTm9UaW1lem9uZSA9IG9wdHM/Lm5vVGltZVpvbmU7XG4gICAgICAgIHRoaXMuX2RhdGVWYWx1ZU5vVGltZSA9IG9wdHM/Lm5vVGltZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBwbGFjZWhvbGRlciBmb3IgZmlsdGVyIGZpZWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBsYWNlaG9sZGVyIFRleHQgZm9yIHBsYWNlaG9sZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoUGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGNsYXNzIG5hbWUgZm9yIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjbGFzc05hbWUgQ2xhc3MgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgY2xhc3MgbmFtZSBmb3IgY29sdW1uIGRpc3BsYXkgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjbGFzc05hbWUgQ2xhc3MgbmFtZSBmb3IgY29sdW1uLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtbkNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGNvbHVtbiB3aWR0aCBmb3IgY29sdW1uIGRpc3BsYXkgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCBSZWxhdGl2ZSB3aWR0aCAoaW4gcGVyY2VudGFnZSkgb2YgdGFibGUgd2lkdGg6XG4gICAgICogQHBhcmFtIG1pbldpZHRoXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5XaWR0aCh3aWR0aD86IG51bWJlciwgbWluV2lkdGg/OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uV2lkdGggPSB3aWR0aCA/PyBudWxsO1xuICAgICAgICB0aGlzLl9jb2x1bW5NaW5XaWR0aCA9IG1pbldpZHRoID8/IG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgaW5wdXQgdHJpbW1pbmcgZm9yIGZpbHRlciB2YWx1ZSBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0cmltT3B0aW9uIFRyaW0gc2V0dGluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aElucHV0VHJpbW1pbmcodHJpbU9wdGlvbjogSW5wdXRUcmltVHlwZSA9ICdib3RoJyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pbnB1dFRyaW0gPSB0cmltT3B0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHJhbmdlIG9mIG1hdGNoIG1vZGVzIGZvciB0aGlzIGZpbHRlci4gSWYgbm9uIHByb3ZpZGVkLCB0aGUgZGVmYXVsdHMgYXJlIGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWF0Y2hNb2RlcyBNYXRjaCBtb2RlIG9wdGlvbnMuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhNYXRjaE1vZGVzKG1hdGNoTW9kZXM/OiBBcnJheTxGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGU+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX21hdGNoTW9kZXMgPSBtYXRjaE1vZGVzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGRlZmF1bHQgbWF0Y2ggbW9kZSBmb3IgdGhpcyBmaWx0ZXIuIElmIG5vbiBwcm92aWRlZCwgdGhlIGRlZmF1bHQgaXMgYXBwbGllZC4gSWYgY3VzdG9tIG1hdGNoIG1vZGVzIGFyZSBwcm92aWRlZCwgaXQgd2lsbCBiZSB2YWxpZGF0ZWQgYWdhaW5zdCBpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXRjaE1vZGUgTWF0Y2ggbW9kZSBvcHRpb24uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEZWZhdWx0TWF0Y2hNb2RlKG1hdGNoTW9kZT86IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSk6IHRoaXMge1xuICAgICAgICBpZiAobWF0Y2hNb2RlICE9IG51bGwgJiYgQXJyYXkuaXNBcnJheSh0aGlzLl9tYXRjaE1vZGVzKSAmJiAhdGhpcy5fbWF0Y2hNb2Rlcy5pbmNsdWRlcyhtYXRjaE1vZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBtYXRjaCBtb2RlICR7bWF0Y2hNb2RlfSBjYW5ub3QgYmUgc2V0IGZvciBwcm9wZXJ0eSAke3RoaXMuX3Byb3BlcnR5fSwgYmVjYXVzZSBjdXN0b20gbWF0Y2ggbW9kZXMgZG8gbm90IGluY2x1ZGUgaXQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGVmYXVsdE1hdGNoTW9kZSA9IG1hdGNoTW9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIHRpdGxlLiBJZiBub24gcHJvdmlkZWQsIHRoZSBkZWZhdWx0cyBhcmUgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBmb3IgdGhlIGZpZWxkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERyb3Bkb3duQ2xhc3NOYW1lKGRyb3Bkb3duQ2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZHJvcGRvd25DbGFzc05hbWUgPSBkcm9wZG93bkNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIGN1cnJlbnQgZGVzY3JpcHRvciB0byBhIG5ldyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29weSgpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4odGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPikge1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJUeXBlID0gdGhpcy5fZmlsdGVyVHlwZTtcbiAgICAgICAgZGVzY3JpcHRvci5faGFzRGVmYXVsdFZhbHVlID0gdGhpcy5faGFzRGVmYXVsdFZhbHVlO1xuICAgICAgICBkZXNjcmlwdG9yLl9kZWZhdWx0VmFsdWUgPSB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RlZmF1bHRNYXRjaE1vZGUgPSB0aGlzLl9kZWZhdWx0TWF0Y2hNb2RlO1xuICAgICAgICBkZXNjcmlwdG9yLl9kaXNwbGF5Rm9ybWF0ID0gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICAgICAgZGVzY3JpcHRvci5fbG9jYWxlID0gdGhpcy5fbG9jYWxlO1xuICAgICAgICBkZXNjcmlwdG9yLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzO1xuICAgICAgICBkZXNjcmlwdG9yLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cyA9IHRoaXMuX251bWJlck1heEZyYWN0aW9uRGlnaXRzO1xuICAgICAgICBkZXNjcmlwdG9yLl9udW1iZXJVc2VHcm91cGluZyA9IHRoaXMuX251bWJlclVzZUdyb3VwaW5nO1xuICAgICAgICBkZXNjcmlwdG9yLl9kYXRlUGlja2VyRm9ybWF0ID0gdGhpcy5fZGF0ZVBpY2tlckZvcm1hdDtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0ZVBpY2tlclNob3dUaW1lID0gdGhpcy5fZGF0ZVBpY2tlclNob3dUaW1lO1xuICAgICAgICBkZXNjcmlwdG9yLl9kYXRlVmFsdWVVdGMgPSB0aGlzLl9kYXRlVmFsdWVVdGM7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RhdGVWYWx1ZU5vVGltZXpvbmUgPSB0aGlzLl9kYXRlVmFsdWVOb1RpbWV6b25lO1xuICAgICAgICBkZXNjcmlwdG9yLl9kYXRlVmFsdWVOb1RpbWUgPSB0aGlzLl9kYXRlVmFsdWVOb1RpbWU7XG4gICAgICAgIGRlc2NyaXB0b3IuX3BsYWNlaG9sZGVyID0gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1uV2lkdGggPSB0aGlzLl9jb2x1bW5XaWR0aDtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1uTWluV2lkdGggPSB0aGlzLl9jb2x1bW5NaW5XaWR0aDtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1uQ2xhc3NOYW1lID0gdGhpcy5fY29sdW1uQ2xhc3NOYW1lO1xuICAgICAgICBkZXNjcmlwdG9yLl9pc0dlbmVyaWNGaWx0ZXIgPSB0aGlzLl9pc0dlbmVyaWNGaWx0ZXI7XG4gICAgICAgIGRlc2NyaXB0b3IuX3ZhbHVlU3VnZ2VzdGlvblByb3ZpZGVyID0gdGhpcy5fdmFsdWVTdWdnZXN0aW9uUHJvdmlkZXI7XG4gICAgICAgIGRlc2NyaXB0b3IuX2Ryb3Bkb3duQ2xhc3NOYW1lID0gdGhpcy5fZHJvcGRvd25DbGFzc05hbWU7XG4gICAgfVxufVxuIl19
|
|
@@ -426,11 +426,11 @@ export class AutocompleteComponent {
|
|
|
426
426
|
return value;
|
|
427
427
|
}
|
|
428
428
|
}
|
|
429
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
430
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.
|
|
429
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
430
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.12", type: AutocompleteComponent, isStandalone: true, selector: "mng-autocomplete", inputs: { dataProvider: { classPropertyName: "dataProvider", publicName: "dataProvider", isSignal: true, isRequired: true, transformFunction: null }, optionsTrackProperty: { classPropertyName: "optionsTrackProperty", publicName: "optionsTrackProperty", isSignal: true, isRequired: false, transformFunction: null }, optionsValuePropertyInit: { classPropertyName: "optionsValuePropertyInit", publicName: "optionsValueProperty", isSignal: true, isRequired: false, transformFunction: null }, optionsLabelPropertyInit: { classPropertyName: "optionsLabelPropertyInit", publicName: "optionsLabelProperty", isSignal: true, isRequired: false, transformFunction: null }, optionsLabelTranslate: { classPropertyName: "optionsLabelTranslate", publicName: "optionsLabelTranslate", isSignal: true, isRequired: false, transformFunction: null }, inlineSearch: { classPropertyName: "inlineSearch", publicName: "inlineSearch", isSignal: true, isRequired: false, transformFunction: null }, openOnFocus: { classPropertyName: "openOnFocus", publicName: "openOnFocus", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, dropdownClassName: { classPropertyName: "dropdownClassName", publicName: "dropdownClassName", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, autoClear: { classPropertyName: "autoClear", publicName: "autoClear", isSignal: true, isRequired: false, transformFunction: null }, selectFirst: { classPropertyName: "selectFirst", publicName: "selectFirst", isSignal: true, isRequired: false, transformFunction: null }, searchTrim: { classPropertyName: "searchTrim", publicName: "searchTrim", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", blur: "blur" }, providers: [AUTOCOMPLETE_VALUE_ACCESSOR], viewQueries: [{ propertyName: "primeAutocomplete", first: true, predicate: AutoComplete, descendants: true, isSignal: true }], ngImport: i0, template: "<p-autoComplete\n [ngModel]=\"ngModelValue()\"\n [placeholder]=\"placeholder()\"\n [dropdown]=\"true\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [suggestions]=\"suggestions()\"\n [multiple]=\"multiselect()\"\n [showEmptyMessage]=\"true\"\n [emptyMessage]=\"'mngAutocomplete.noMatches' | translate\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [minLength]=\"openOnFocus() ? 0 : 1\"\n [showClear]=\"showClear()\"\n [forceSelection]=\"autoClear()\"\n [disabled]=\"disabled()\"\n [completeOnFocus]=\"openOnFocus()\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n (onUnselect)=\"onUnselect($event)\"\n (onFocus)=\"onFocus($event)\"\n (onBlur)=\"onBlur($event)\"\n (onClear)=\"onClear()\"\n (onShow)=\"onShow()\"\n (onHide)=\"onHide()\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n", dependencies: [{ kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i1.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
431
431
|
}
|
|
432
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
432
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
433
433
|
type: Component,
|
|
434
434
|
args: [{ standalone: true, selector: 'mng-autocomplete', providers: [AUTOCOMPLETE_VALUE_ACCESSOR], imports: [AutoCompleteModule, AsyncPipe, TranslateModule, FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-autoComplete\n [ngModel]=\"ngModelValue()\"\n [placeholder]=\"placeholder()\"\n [dropdown]=\"true\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [suggestions]=\"suggestions()\"\n [multiple]=\"multiselect()\"\n [showEmptyMessage]=\"true\"\n [emptyMessage]=\"'mngAutocomplete.noMatches' | translate\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [minLength]=\"openOnFocus() ? 0 : 1\"\n [showClear]=\"showClear()\"\n [forceSelection]=\"autoClear()\"\n [disabled]=\"disabled()\"\n [completeOnFocus]=\"openOnFocus()\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n (onUnselect)=\"onUnselect($event)\"\n (onFocus)=\"onFocus($event)\"\n (onBlur)=\"onBlur($event)\"\n (onClear)=\"onClear()\"\n (onShow)=\"onShow()\"\n (onHide)=\"onHide()\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n" }]
|
|
435
435
|
}], ctorParameters: () => [] });
|
|
436
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Zvcm0vc3JjL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9mb3JtL3NyYy9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFFVixRQUFRLEVBRVIsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUF1QixXQUFXLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRixPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBcUQsTUFBTSxzQkFBc0IsQ0FBQztBQUUxSCxPQUFPLEVBQWEsYUFBYSxFQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsRixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUNILG9CQUFvQixFQUVwQixlQUFlLEVBRWYsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNmLE1BQU0sNkJBQTZCLENBQUM7Ozs7O0FBR3JD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LENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ25DLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUMsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDOzhHQWhjUSxxQkFBcUI7a0dBQXJCLHFCQUFxQixvNkVBSm5CLENBQUMsMkJBQTJCLENBQUMsNkVBOEJGLFlBQVksZ0VDL0V0RCx1OUJBNEJBLDJDRHNCYyxrQkFBa0IsNnNDQUFhLGVBQWUsMkZBQUUsV0FBVzs7MkZBRzVELHFCQUFxQjtrQkFSakMsU0FBUztpQ0FDTSxJQUFJLFlBQ04sa0JBQWtCLGFBRWpCLENBQUMsMkJBQTJCLENBQUMsV0FDL0IsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQyxtQkFDckQsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFeGlzdGluZ1Byb3ZpZGVyLFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIHZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBdXRvQ29tcGxldGUsIEF1dG9Db21wbGV0ZU1vZHVsZSwgQXV0b0NvbXBsZXRlU2VsZWN0RXZlbnQsIEF1dG9Db21wbGV0ZVVuc2VsZWN0RXZlbnR9IGZyb20gJ3ByaW1lbmcvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7QXV0b0NvbXBsZXRlQ29tcGxldGVFdmVudH0gZnJvbSAncHJpbWVuZy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmludGVyZmFjZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YsIHN3aXRjaE1hcCwgdGFrZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIERhdGFMaXN0UGFyYW1zLFxuICAgIEZpbHRlck1hdGNoTW9kZSxcbiAgICBJTG9va3VwRGF0YVByb3ZpZGVyLFxuICAgIExvZ2dlclNlcnZpY2UsXG4gICAgZnJvbVN1YnNjcmliZUVycm9yLFxuICAgIGdldEVycm9yTG9nTGV2ZWwsXG4gICAgdG9PYnNlcnZhYmxlXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0lucHV0VHJpbVR5cGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuXG5leHBvcnQgY29uc3QgQVVUT0NPTVBMRVRFX1ZBTFVFX0FDQ0VTU09SOiBFeGlzdGluZ1Byb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEF1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYXV0b2NvbXBsZXRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtBVVRPQ09NUExFVEVfVkFMVUVfQUNDRVNTT1JdLFxuICAgIGltcG9ydHM6IFtBdXRvQ29tcGxldGVNb2R1bGUsIEFzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnQXV0b2NvbXBsZXRlQ29tcG9uZW50Jyk7XG5cbiAgICBwdWJsaWMgZGF0YVByb3ZpZGVyID0gaW5wdXQucmVxdWlyZWQ8SUxvb2t1cERhdGFQcm92aWRlcjxhbnksIGFueSwgYW55LCBhbnk+PigpO1xuICAgIHB1YmxpYyBvcHRpb25zVHJhY2tQcm9wZXJ0eSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgb3B0aW9uc1ZhbHVlUHJvcGVydHlJbml0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHthbGlhczogJ29wdGlvbnNWYWx1ZVByb3BlcnR5J30pO1xuICAgIHB1YmxpYyBvcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwge2FsaWFzOiAnb3B0aW9uc0xhYmVsUHJvcGVydHknfSk7XG4gICAgcHVibGljIG9wdGlvbnNMYWJlbFRyYW5zbGF0ZSA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIGlubGluZVNlYXJjaCA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIG9wZW5PbkZvY3VzID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgbXVsdGlzZWxlY3QgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgY2xhc3NOYW1lID0gaW5wdXQ8c3RyaW5nPigpO1xuICAgIHB1YmxpYyBkcm9wZG93bkNsYXNzTmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgc2hvd0NsZWFyID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgYXV0b0NsZWFyID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgc2VsZWN0Rmlyc3QgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pOyAvL29uIGV2ZXJ5IGlucHV0IGZpZWxkIGNoYW5nZSByZXR1cm4gZmlyc3QgZ2l2ZW4gdmFsdWUgKG9yIG51bGwpXG4gICAgcHVibGljIHNlYXJjaFRyaW0gPSBpbnB1dDxJbnB1dFRyaW1UeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBkaXNhYmxlZElucHV0ID0gaW5wdXQ8Ym9vbGVhbiwgdW5rbm93bj4oZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAnZGlzYWJsZWQnfSk7XG5cbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICAgIHB1YmxpYyBibHVyID0gb3V0cHV0PEV2ZW50PigpO1xuXG4gICAgcHJpdmF0ZSBwcmltZUF1dG9jb21wbGV0ZSA9IHZpZXdDaGlsZChBdXRvQ29tcGxldGUpO1xuXG4gICAgcHJpdmF0ZSBpc0luaXRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlclNlcnZpY2U6IGFueSA9IG51bGw7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByaXZhdGUgb25DaGFuZ2VGbjogYW55ID0gKCkgPT4ge307XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByaXZhdGUgb25Ub3VjaGVkRm46IGFueSA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBfdmFsdWU/OiBhbnkgfCBudWxsO1xuICAgIHByaXZhdGUgX3Jhd1ZhbHVlPzogYW55IHwgbnVsbDtcbiAgICBwdWJsaWMgbmdNb2RlbFZhbHVlID0gc2lnbmFsPHVuZGVmaW5lZCB8IG51bGwgfCBhbnk+KHVuZGVmaW5lZCk7XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHVibGljIGRpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fZGlzYWJsZWQoKSB8fCB0aGlzLmRpc2FibGVkSW5wdXQoKSk7XG5cbiAgICBwdWJsaWMgc3VnZ2VzdGlvbnMgPSBzaWduYWw8QXJyYXk8YW55Pj4oW10pO1xuICAgIHByaXZhdGUgaXNQYW5lbFNob3duID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIHVzZXJTZWxlY3RlZEl0ZW0/OiBhbnkgfCBhbnlbXTtcbiAgICBwcml2YXRlIHF1ZXJ5UmVzdWx0Q2FjaGVTdWJqZWN0PzogUmVwbGF5U3ViamVjdDxhbnk+O1xuXG4gICAgcHVibGljIG9wdGlvbnNMYWJlbFByb3BlcnR5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgLy8gc2V0dXAgdHJhbnNsYXRpb24gcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKX1faTE4bmA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpICYmICF0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0aXRsZV9pMThuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBJbnZhbGlkIHVzZSB3aXRoIHZhbHVlICgke3RoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHlJbml0KCl9KSBhbmQgbGFiZWwgKCR7dGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKX0pIHByb3BlcnR5IHNldHVwLmAsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0F1dG9jb21wbGV0ZUNvbXBvbmVudEVycm9yJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCk7XG4gICAgfSk7XG4gICAgcHVibGljIG9wdGlvbnNWYWx1ZVByb3BlcnR5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgLy8gc2V0dXAgdHJhbnNsYXRpb24gcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpICYmICF0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd2YWx1ZSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBJbnZhbGlkIHVzZSB3aXRoIHZhbHVlICgke3RoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHlJbml0KCl9KSBhbmQgbGFiZWwgKCR7dGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKX0pIHByb3BlcnR5IHNldHVwLmAsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0F1dG9jb21wbGV0ZUNvbXBvbmVudEVycm9yJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHlJbml0KCk7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuY29udmVydFZhbHVlV2l0aE9wdGlvbnNWYWx1ZVByb3BTZXR0aW5nKHRoaXMubmdNb2RlbFZhbHVlKCkpO1xuICAgICAgICAgICAgdGhpcy5fcmF3VmFsdWUgPSB0aGlzLm5nTW9kZWxWYWx1ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRJdGVtc0FuZERhdGFQcm92aWRlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEZpcnN0KCkgJiYgIXRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlYXJjaChldmVudD86IEF1dG9Db21wbGV0ZUNvbXBsZXRlRXZlbnQsIGlzSW5pdCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBjb25zdCBvcHRpb25zTGFiZWxQcm9wZXJ0eSA9IHRoaXMub3B0aW9uc0xhYmVsUHJvcGVydHkoKTtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnRyaW1WYWx1ZShldmVudD8ucXVlcnkpO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7XG4gICAgICAgICAgICBsaW1pdDogNTBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnNMYWJlbFByb3BlcnR5KSB7XG4gICAgICAgICAgICBwYXJhbXMuc29ydCA9IFt7cHJvcGVydHk6IG9wdGlvbnNMYWJlbFByb3BlcnR5fV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5Lmxlbmd0aCA+IDAgJiYgb3B0aW9uc0xhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzID0ge1xuICAgICAgICAgICAgICAgIFtvcHRpb25zTGFiZWxQcm9wZXJ0eV06IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5xdWVyeVJlc3VsdENhY2hlU3ViamVjdCB8fCAhdGhpcy5pbmxpbmVTZWFyY2goKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnF1ZXJ5UmVzdWx0Q2FjaGVTdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVJlc3VsdENhY2hlU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGFueT4oMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuZ2V0TG9va3VwKHBhcmFtcywgcXVlcnkpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSZXN1bHRDYWNoZVN1YmplY3Q/Lm5leHQoaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdWdnZXN0aW9uc0Zyb21JdGVtcyhpdGVtcywgcXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5pdCAmJiAhdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZpcnN0SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VnZ2VzdGlvbnNGcm9tSXRlbXMoW10sIHF1ZXJ5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBmcm9tU3Vic2NyaWJlRXJyb3IoZXJyLCAnQXV0b2NvbXBsZXRlQ29tcG9uZW50RXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coZXJyb3IsIGdldEVycm9yTG9nTGV2ZWwoZXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucXVlcnlSZXN1bHRDYWNoZVN1YmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeVJlc3VsdENhY2hlU3ViamVjdC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VnZ2VzdGlvbnNGcm9tSXRlbXMocmVzdWx0LCBxdWVyeSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0Rmlyc3RJdGVtKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0Rmlyc3QoKSB8fCB0aGlzLm11bHRpc2VsZWN0KCkpIHJldHVybjtcblxuICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMoKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgIXRoaXMudXNlclNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShzdWdnZXN0aW9uc1swXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudXNlclNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgLy8gaGFuZGxlcyB0aGUgY2FzZSBpZiB0aGUgdXNlciBwcm92aWRlcyBhbiBpbnB1dCBhbmQgZGUtZm9jdXNlcyB0aGUgaW5wdXQgZmllbGQgYmVmb3JlIHN1Z2dlc3Rpb25zIGFyZSBsb2FkZWQgb3IgaWYgdGhlcmUgYXJlIG5vIHN1Z2dlc3Rpb25zIGF0IGFsbFxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBieSB1c2VyIHdoZW4gc2VsZWN0aW5nIGFuIGl0ZW0gZnJvbSBhbiBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbiBsaXN0LlxuICAgICAqL1xuICAgIG9uU2VsZWN0KGV2ZW50OiBBdXRvQ29tcGxldGVTZWxlY3RFdmVudCkge1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QoKSAmJiBBcnJheS5pc0FycmF5KHRoaXMuX3Jhd1ZhbHVlKSAmJiB0aGlzLl9yYXdWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IFsuLi50aGlzLl9yYXdWYWx1ZSwgbmV3VmFsdWVdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubXVsdGlzZWxlY3QoKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBbbmV3VmFsdWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRWYWx1ZShuZXdWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJ5IHVzZXIgd2hlbiBzZWxlY3RpbmcgYW4gaXRlbSBmcm9tIGFuIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uIGxpc3QuXG4gICAgICovXG4gICAgb25VbnNlbGVjdChldmVudDogQXV0b0NvbXBsZXRlVW5zZWxlY3RFdmVudCkge1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCgpICYmIEFycmF5LmlzQXJyYXkodGhpcy5fcmF3VmFsdWUpICYmIHRoaXMuX3Jhd1ZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNtcFByb3AgPSB0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5KCkgPz8gdGhpcy5vcHRpb25zVHJhY2tQcm9wZXJ0eSgpO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLl9yYXdWYWx1ZS5maWx0ZXIoaSA9PiAoY21wUHJvcCA/IGlbY21wUHJvcF0gIT09IGV2ZW50LnZhbHVlW2NtcFByb3BdIDogaSAhPT0gZXZlbnQudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm11bHRpc2VsZWN0KCkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWYWx1ZShuZXdWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIG9uRm9jdXMoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjYWxscyB0aGUgc2VsZWN0Rmlyc3QgaXRlbSBhbnl0aW1lIHRoZSBpbnB1dCBmaWVsZCBnb2VzIG91dCBvZiBmb2N1cyBhbmQgaWYgdGhlIHN1Z2dlc3Rpb25zIHBhbmVsIGlzIG5vdCBkaXNwbGF5ZWQuXG4gICAgICovXG4gICAgb25CbHVyKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBpbnB1dFNlYXJjaFZhbCA9IHRoaXMucHJpbWVBdXRvY29tcGxldGUoKT8uaW5wdXRFTD8ubmF0aXZlRWxlbWVudD8udmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmF1dG9DbGVhcigpICYmIHRoaXMuX3ZhbHVlICE9IG51bGwgJiYgKGlucHV0U2VhcmNoVmFsID09IG51bGwgfHwgaW5wdXRTZWFyY2hWYWwgPT09ICcnKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVWYWx1ZUNoYW5nZShudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1BhbmVsU2hvd24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Rmlyc3RJdGVtKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICB0aGlzLmJsdXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgb25TaG93KCkge1xuICAgICAgICB0aGlzLmlzUGFuZWxTaG93biA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsbHMgdGhlIHNlbGVjdEZpcnN0IGl0ZW0gYW55dGltZSB0aGUgc3VnZ2VzdGlvbnMgcGFuZWwgaXMgY2xvc2VkIGFuZCBpbnB1dCBmaWVsZCBpc24ndCBmb2N1c2VkLlxuICAgICAqL1xuICAgIG9uSGlkZSgpIHtcbiAgICAgICAgdGhpcy5pc1BhbmVsU2hvd24gPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdEl0ZW0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2xlYXIoKSB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVDaGFuZ2UodGhpcy5tdWx0aXNlbGVjdCgpID8gW10gOiBudWxsKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fZGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJdGVtc0FuZERhdGFQcm92aWRlcigpO1xuXG4gICAgICAgIC8vIHdyaXRlIHZhbHVlIGltbWVkaWF0ZWx5IC0gaXQgaXMgaW1wb3J0YW50IHNvIHRoYXQgZmlyc3Qgc2VsZWN0IGlzIG5vdCB0cmlnZ2VyZWQhXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9uc1ZhbHVlUHJvcGVydHlJbml0ID0gdGhpcy5vcHRpb25zVmFsdWVQcm9wZXJ0eUluaXQoKTtcbiAgICAgICAgaWYgKG9wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdCAmJiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRJdGVtOiBhbnkgPSB7W29wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdF06IHZhbHVlfTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnNMYWJlbFByb3BlcnR5ID0gdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eSgpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnNMYWJlbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEl0ZW1bb3B0aW9uc0xhYmVsUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRJdGVtID0gdGhpcy5zdWdnZXN0aW9ucygpLmZpbmQoaSA9PiBpW29wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdF0gPT09IHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVGcm9tV3JpdGUobWF0Y2hlZEl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldExvb2t1cCh7XG4gICAgICAgICAgICAgICAgICAgIGxpbWl0OiA1MCxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUZyb21Xcml0ZShpdGVtc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgbG9va3VwIGRhdGEgcHJvdmlkZXJzIG5vdCB1c2luZyBxdWVyeSBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEl0ZW0gPSBpdGVtcy5maW5kKGkgPT4gaVtvcHRpb25zVmFsdWVQcm9wZXJ0eUluaXRdID09PSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUZyb21Xcml0ZShtYXRjaGVkSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlRnJvbVdyaXRlKGRlZmF1bHRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlRnJvbVdyaXRlKGRlZmF1bHRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlRnJvbVdyaXRlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SXRlbXNBbmREYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSB0aGlzLmRhdGFQcm92aWRlcigpO1xuICAgICAgICB0aGlzLmRhdGFQcm92aWRlclNlcnZpY2UgPSBkYXRhUHJvdmlkZXIuc2VydmljZVR5cGUgPyB0aGlzLmluamVjdG9yLmdldDxhbnk+KGRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSkgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuaXNJbml0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmFsdWVGcm9tV3JpdGUodmFsdWU6IGFueSB8IGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmkxOG5Qb3B1bGF0ZUl0ZW1zKFt2YWx1ZV0sIHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5pMThuR2V0SXRlbXNLZXlzKFt2YWx1ZV0pKSlbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubmdNb2RlbFZhbHVlKCkgPT0gbnVsbCAmJiB0aGlzLl9yYXdWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyB2YWx1ZSBtdXN0IGZpcnN0IGJlIHNldCB0byBzeW5jaHJvbmlzZSBzdGF0ZXMsIHRoZW4gaW4gbmV4dCBhc3luYyBjeWNsZSBzZXQgdG8gd2FudGVkIG51bGwgdmFsdWVcbiAgICAgICAgICAgIHRoaXMubmdNb2RlbFZhbHVlLnNldCh0aGlzLl9yYXdWYWx1ZSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWxWYWx1ZS5zZXQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5nTW9kZWxWYWx1ZS5zZXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMb29rdXAocGFyYW1zOiBEYXRhTGlzdFBhcmFtcywgcXVlcnk/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PGFueT4+IHtcbiAgICAgICAgcmV0dXJuIHRvT2JzZXJ2YWJsZSh0aGlzLmRhdGFQcm92aWRlcigpLmxvb2t1cChwYXJhbXMsIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSwgcXVlcnkpKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkSXRlbXMgPSB0aGlzLmkxOG5HZXRJdGVtc0tleXMoaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5zdHJlYW0odHJhbnNsYXRlZEl0ZW1zKS5waXBlKG1hcCh0cmFuc2xhdGlvbnMgPT4gdGhpcy5pMThuUG9wdWxhdGVJdGVtcyhpdGVtcywgdHJhbnNsYXRpb25zKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihpdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGkxOG5HZXRJdGVtc0tleXMoaXRlbXM6IEFycmF5PGFueT4pOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChcbiAgICAgICAgICAgIGl0ZW0gPT4gKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpID8gKGl0ZW1bdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKSBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZykgOiBpdGVtKSBhcyBzdHJpbmdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGkxOG5Qb3B1bGF0ZUl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+LCBpMThuTWFwOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVt0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpIGFzIGtleW9mIG9iamVjdF0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBpMThuTWFwW2xhYmVsXTtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5pdGVtLCBbdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eSgpIV06IHRyYW5zbGF0aW9ufTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5pdGVtfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBpMThuTWFwW2l0ZW1dO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5KCkhXTogdHJhbnNsYXRpb24gPz8gaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHkoKSFdOiBpdGVtXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdWdnZXN0aW9uc0Zyb21JdGVtcyhpdGVtczogQXJyYXk8YW55PiwgcXVlcnk/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5saW5lU2VhcmNoKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5TG93ZXJDYXNlID0gcXVlcnk/LnRvTG93ZXJDYXNlKCkgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gaXRlbXMuZmlsdGVyKGkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpdGVtTGFiZWwgPSBpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnNMYWJlbFByb3BlcnR5ID0gdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eSgpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zTGFiZWxQcm9wZXJ0eSAmJiB0eXBlb2YgaSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUxhYmVsID0gaVtvcHRpb25zTGFiZWxQcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtTGFiZWwgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnlMb3dlckNhc2UgPT0gbnVsbCB8fCAhcXVlcnlMb3dlckNhc2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1MYWJlbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUxhYmVsID0gaXRlbUxhYmVsLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtTGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHF1ZXJ5TG93ZXJDYXNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9ucy5zZXQoWy4uLmZpbHRlcmVkSXRlbXNdKTtcbiAgICAgICAgICAgIHRoaXMudXNlclNlbGVjdGVkSXRlbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMuc2V0KFsuLi5pdGVtc10pO1xuICAgICAgICAgICAgdGhpcy51c2VyU2VsZWN0ZWRJdGVtID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhbmQgc2V0cyBuZXcgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgUmVwcmVzZW50cyB0aGUgb2JqZWN0IHZhbHVlLlxuICAgICAqIEBwYXJhbSBmcm9tVXNlciBJZiBzZXQgdmFsdWUgaXMgdHJpZ2dlcmVkIGZyb20gdXNlci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBhbnkgfCBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsIGZyb21Vc2VyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGZyb21Vc2VyKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJTZWxlY3RlZEl0ZW0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmdNb2RlbFZhbHVlLnNldCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaW1WYWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zZWFyY2hUcmltKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU/LnRyaW1TdGFydCgpO1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU/LnRyaW1FbmQoKTtcbiAgICAgICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZT8udHJpbSgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9wYWdhdGVzIGZpbmFsIHZhbHVlIHRvIF92YWx1ZSwgb24gY2hhbmdlIGZuIGFuZCBvdXRwdXRzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJvcGFnYXRlVmFsdWVDaGFuZ2UodmFsdWU6IGFueSB8IGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuY29udmVydFZhbHVlV2l0aE9wdGlvbnNWYWx1ZVByb3BTZXR0aW5nKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fcmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRWYWx1ZVdpdGhPcHRpb25zVmFsdWVQcm9wU2V0dGluZyh2YWx1ZTogYW55IHwgYW55W10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNWYWx1ZVByb3BlcnR5ID0gdGhpcy5vcHRpb25zVmFsdWVQcm9wZXJ0eSgpO1xuICAgICAgICBpZiAoIW9wdGlvbnNWYWx1ZVByb3BlcnR5KSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QoKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW29wdGlvbnNWYWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVbb3B0aW9uc1ZhbHVlUHJvcGVydHldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHAtYXV0b0NvbXBsZXRlXG4gICAgW25nTW9kZWxdPVwibmdNb2RlbFZhbHVlKClcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCJcbiAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgW2RhdGFLZXldPVwib3B0aW9uc1RyYWNrUHJvcGVydHkoKVwiXG4gICAgW29wdGlvbkxhYmVsXT1cIm9wdGlvbnNMYWJlbFByb3BlcnR5KClcIlxuICAgIFtzdWdnZXN0aW9uc109XCJzdWdnZXN0aW9ucygpXCJcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlzZWxlY3QoKVwiXG4gICAgW3Nob3dFbXB0eU1lc3NhZ2VdPVwidHJ1ZVwiXG4gICAgW2VtcHR5TWVzc2FnZV09XCInbW5nQXV0b2NvbXBsZXRlLm5vTWF0Y2hlcycgfCB0cmFuc2xhdGVcIlxuICAgIFtzdHlsZUNsYXNzXT1cImNsYXNzTmFtZSgpXCJcbiAgICBbcGFuZWxTdHlsZUNsYXNzXT1cImRyb3Bkb3duQ2xhc3NOYW1lKClcIlxuICAgIFttaW5MZW5ndGhdPVwib3Blbk9uRm9jdXMoKSA/IDAgOiAxXCJcbiAgICBbc2hvd0NsZWFyXT1cInNob3dDbGVhcigpXCJcbiAgICBbZm9yY2VTZWxlY3Rpb25dPVwiYXV0b0NsZWFyKClcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICBbY29tcGxldGVPbkZvY3VzXT1cIm9wZW5PbkZvY3VzKClcIlxuICAgIChjb21wbGV0ZU1ldGhvZCk9XCJvblNlYXJjaCgkZXZlbnQpXCJcbiAgICAob25TZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgKG9uVW5zZWxlY3QpPVwib25VbnNlbGVjdCgkZXZlbnQpXCJcbiAgICAob25Gb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgIChvbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgIChvbkNsZWFyKT1cIm9uQ2xlYXIoKVwiXG4gICAgKG9uU2hvdyk9XCJvblNob3coKVwiXG4gICAgKG9uSGlkZSk9XCJvbkhpZGUoKVwiXG4gICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICBkcm9wZG93bk1vZGU9XCJjdXJyZW50XCI+XG48L3AtYXV0b0NvbXBsZXRlPlxuIl19
|
|
436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Zvcm0vc3JjL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9mb3JtL3NyYy9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFFVixRQUFRLEVBRVIsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUF1QixXQUFXLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRixPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBcUQsTUFBTSxzQkFBc0IsQ0FBQztBQUUxSCxPQUFPLEVBQWEsYUFBYSxFQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsRixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUNILG9CQUFvQixFQUVwQixlQUFlLEVBRWYsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNmLE1BQU0sNkJBQTZCLENBQUM7Ozs7O0FBR3JD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LENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ25DLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUMsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDOytHQWhjUSxxQkFBcUI7bUdBQXJCLHFCQUFxQixvNkVBSm5CLENBQUMsMkJBQTJCLENBQUMsNkVBOEJGLFlBQVksZ0VDL0V0RCx1OUJBNEJBLDJDRHNCYyxrQkFBa0IsNnNDQUFhLGVBQWUsMkZBQUUsV0FBVzs7NEZBRzVELHFCQUFxQjtrQkFSakMsU0FBUztpQ0FDTSxJQUFJLFlBQ04sa0JBQWtCLGFBRWpCLENBQUMsMkJBQTJCLENBQUMsV0FDL0IsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQyxtQkFDckQsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFeGlzdGluZ1Byb3ZpZGVyLFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIHZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBdXRvQ29tcGxldGUsIEF1dG9Db21wbGV0ZU1vZHVsZSwgQXV0b0NvbXBsZXRlU2VsZWN0RXZlbnQsIEF1dG9Db21wbGV0ZVVuc2VsZWN0RXZlbnR9IGZyb20gJ3ByaW1lbmcvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7QXV0b0NvbXBsZXRlQ29tcGxldGVFdmVudH0gZnJvbSAncHJpbWVuZy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmludGVyZmFjZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YsIHN3aXRjaE1hcCwgdGFrZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIERhdGFMaXN0UGFyYW1zLFxuICAgIEZpbHRlck1hdGNoTW9kZSxcbiAgICBJTG9va3VwRGF0YVByb3ZpZGVyLFxuICAgIExvZ2dlclNlcnZpY2UsXG4gICAgZnJvbVN1YnNjcmliZUVycm9yLFxuICAgIGdldEVycm9yTG9nTGV2ZWwsXG4gICAgdG9PYnNlcnZhYmxlXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0lucHV0VHJpbVR5cGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuXG5leHBvcnQgY29uc3QgQVVUT0NPTVBMRVRFX1ZBTFVFX0FDQ0VTU09SOiBFeGlzdGluZ1Byb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEF1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYXV0b2NvbXBsZXRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtBVVRPQ09NUExFVEVfVkFMVUVfQUNDRVNTT1JdLFxuICAgIGltcG9ydHM6IFtBdXRvQ29tcGxldGVNb2R1bGUsIEFzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnQXV0b2NvbXBsZXRlQ29tcG9uZW50Jyk7XG5cbiAgICBwdWJsaWMgZGF0YVByb3ZpZGVyID0gaW5wdXQucmVxdWlyZWQ8SUxvb2t1cERhdGFQcm92aWRlcjxhbnksIGFueSwgYW55LCBhbnk+PigpO1xuICAgIHB1YmxpYyBvcHRpb25zVHJhY2tQcm9wZXJ0eSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgb3B0aW9uc1ZhbHVlUHJvcGVydHlJbml0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHthbGlhczogJ29wdGlvbnNWYWx1ZVByb3BlcnR5J30pO1xuICAgIHB1YmxpYyBvcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwge2FsaWFzOiAnb3B0aW9uc0xhYmVsUHJvcGVydHknfSk7XG4gICAgcHVibGljIG9wdGlvbnNMYWJlbFRyYW5zbGF0ZSA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIGlubGluZVNlYXJjaCA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIG9wZW5PbkZvY3VzID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgbXVsdGlzZWxlY3QgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgY2xhc3NOYW1lID0gaW5wdXQ8c3RyaW5nPigpO1xuICAgIHB1YmxpYyBkcm9wZG93bkNsYXNzTmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgc2hvd0NsZWFyID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgYXV0b0NsZWFyID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgc2VsZWN0Rmlyc3QgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pOyAvL29uIGV2ZXJ5IGlucHV0IGZpZWxkIGNoYW5nZSByZXR1cm4gZmlyc3QgZ2l2ZW4gdmFsdWUgKG9yIG51bGwpXG4gICAgcHVibGljIHNlYXJjaFRyaW0gPSBpbnB1dDxJbnB1dFRyaW1UeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBkaXNhYmxlZElucHV0ID0gaW5wdXQ8Ym9vbGVhbiwgdW5rbm93bj4oZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAnZGlzYWJsZWQnfSk7XG5cbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICAgIHB1YmxpYyBibHVyID0gb3V0cHV0PEV2ZW50PigpO1xuXG4gICAgcHJpdmF0ZSBwcmltZUF1dG9jb21wbGV0ZSA9IHZpZXdDaGlsZChBdXRvQ29tcGxldGUpO1xuXG4gICAgcHJpdmF0ZSBpc0luaXRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlclNlcnZpY2U6IGFueSA9IG51bGw7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByaXZhdGUgb25DaGFuZ2VGbjogYW55ID0gKCkgPT4ge307XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByaXZhdGUgb25Ub3VjaGVkRm46IGFueSA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBfdmFsdWU/OiBhbnkgfCBudWxsO1xuICAgIHByaXZhdGUgX3Jhd1ZhbHVlPzogYW55IHwgbnVsbDtcbiAgICBwdWJsaWMgbmdNb2RlbFZhbHVlID0gc2lnbmFsPHVuZGVmaW5lZCB8IG51bGwgfCBhbnk+KHVuZGVmaW5lZCk7XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHVibGljIGRpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fZGlzYWJsZWQoKSB8fCB0aGlzLmRpc2FibGVkSW5wdXQoKSk7XG5cbiAgICBwdWJsaWMgc3VnZ2VzdGlvbnMgPSBzaWduYWw8QXJyYXk8YW55Pj4oW10pO1xuICAgIHByaXZhdGUgaXNQYW5lbFNob3duID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIHVzZXJTZWxlY3RlZEl0ZW0/OiBhbnkgfCBhbnlbXTtcbiAgICBwcml2YXRlIHF1ZXJ5UmVzdWx0Q2FjaGVTdWJqZWN0PzogUmVwbGF5U3ViamVjdDxhbnk+O1xuXG4gICAgcHVibGljIG9wdGlvbnNMYWJlbFByb3BlcnR5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgLy8gc2V0dXAgdHJhbnNsYXRpb24gcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKX1faTE4bmA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpICYmICF0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0aXRsZV9pMThuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBJbnZhbGlkIHVzZSB3aXRoIHZhbHVlICgke3RoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHlJbml0KCl9KSBhbmQgbGFiZWwgKCR7dGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKX0pIHByb3BlcnR5IHNldHVwLmAsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0F1dG9jb21wbGV0ZUNvbXBvbmVudEVycm9yJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCk7XG4gICAgfSk7XG4gICAgcHVibGljIG9wdGlvbnNWYWx1ZVByb3BlcnR5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgLy8gc2V0dXAgdHJhbnNsYXRpb24gcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpICYmICF0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd2YWx1ZSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBJbnZhbGlkIHVzZSB3aXRoIHZhbHVlICgke3RoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHlJbml0KCl9KSBhbmQgbGFiZWwgKCR7dGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKX0pIHByb3BlcnR5IHNldHVwLmAsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0F1dG9jb21wbGV0ZUNvbXBvbmVudEVycm9yJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHlJbml0KCk7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuY29udmVydFZhbHVlV2l0aE9wdGlvbnNWYWx1ZVByb3BTZXR0aW5nKHRoaXMubmdNb2RlbFZhbHVlKCkpO1xuICAgICAgICAgICAgdGhpcy5fcmF3VmFsdWUgPSB0aGlzLm5nTW9kZWxWYWx1ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRJdGVtc0FuZERhdGFQcm92aWRlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEZpcnN0KCkgJiYgIXRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlYXJjaChldmVudD86IEF1dG9Db21wbGV0ZUNvbXBsZXRlRXZlbnQsIGlzSW5pdCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBjb25zdCBvcHRpb25zTGFiZWxQcm9wZXJ0eSA9IHRoaXMub3B0aW9uc0xhYmVsUHJvcGVydHkoKTtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnRyaW1WYWx1ZShldmVudD8ucXVlcnkpO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7XG4gICAgICAgICAgICBsaW1pdDogNTBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnNMYWJlbFByb3BlcnR5KSB7XG4gICAgICAgICAgICBwYXJhbXMuc29ydCA9IFt7cHJvcGVydHk6IG9wdGlvbnNMYWJlbFByb3BlcnR5fV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5Lmxlbmd0aCA+IDAgJiYgb3B0aW9uc0xhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzID0ge1xuICAgICAgICAgICAgICAgIFtvcHRpb25zTGFiZWxQcm9wZXJ0eV06IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5xdWVyeVJlc3VsdENhY2hlU3ViamVjdCB8fCAhdGhpcy5pbmxpbmVTZWFyY2goKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnF1ZXJ5UmVzdWx0Q2FjaGVTdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVJlc3VsdENhY2hlU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGFueT4oMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuZ2V0TG9va3VwKHBhcmFtcywgcXVlcnkpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSZXN1bHRDYWNoZVN1YmplY3Q/Lm5leHQoaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdWdnZXN0aW9uc0Zyb21JdGVtcyhpdGVtcywgcXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5pdCAmJiAhdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZpcnN0SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VnZ2VzdGlvbnNGcm9tSXRlbXMoW10sIHF1ZXJ5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBmcm9tU3Vic2NyaWJlRXJyb3IoZXJyLCAnQXV0b2NvbXBsZXRlQ29tcG9uZW50RXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coZXJyb3IsIGdldEVycm9yTG9nTGV2ZWwoZXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucXVlcnlSZXN1bHRDYWNoZVN1YmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeVJlc3VsdENhY2hlU3ViamVjdC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VnZ2VzdGlvbnNGcm9tSXRlbXMocmVzdWx0LCBxdWVyeSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0Rmlyc3RJdGVtKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0Rmlyc3QoKSB8fCB0aGlzLm11bHRpc2VsZWN0KCkpIHJldHVybjtcblxuICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMoKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgIXRoaXMudXNlclNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShzdWdnZXN0aW9uc1swXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudXNlclNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgLy8gaGFuZGxlcyB0aGUgY2FzZSBpZiB0aGUgdXNlciBwcm92aWRlcyBhbiBpbnB1dCBhbmQgZGUtZm9jdXNlcyB0aGUgaW5wdXQgZmllbGQgYmVmb3JlIHN1Z2dlc3Rpb25zIGFyZSBsb2FkZWQgb3IgaWYgdGhlcmUgYXJlIG5vIHN1Z2dlc3Rpb25zIGF0IGFsbFxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBieSB1c2VyIHdoZW4gc2VsZWN0aW5nIGFuIGl0ZW0gZnJvbSBhbiBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbiBsaXN0LlxuICAgICAqL1xuICAgIG9uU2VsZWN0KGV2ZW50OiBBdXRvQ29tcGxldGVTZWxlY3RFdmVudCkge1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QoKSAmJiBBcnJheS5pc0FycmF5KHRoaXMuX3Jhd1ZhbHVlKSAmJiB0aGlzLl9yYXdWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IFsuLi50aGlzLl9yYXdWYWx1ZSwgbmV3VmFsdWVdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubXVsdGlzZWxlY3QoKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBbbmV3VmFsdWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRWYWx1ZShuZXdWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJ5IHVzZXIgd2hlbiBzZWxlY3RpbmcgYW4gaXRlbSBmcm9tIGFuIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uIGxpc3QuXG4gICAgICovXG4gICAgb25VbnNlbGVjdChldmVudDogQXV0b0NvbXBsZXRlVW5zZWxlY3RFdmVudCkge1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCgpICYmIEFycmF5LmlzQXJyYXkodGhpcy5fcmF3VmFsdWUpICYmIHRoaXMuX3Jhd1ZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNtcFByb3AgPSB0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5KCkgPz8gdGhpcy5vcHRpb25zVHJhY2tQcm9wZXJ0eSgpO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLl9yYXdWYWx1ZS5maWx0ZXIoaSA9PiAoY21wUHJvcCA/IGlbY21wUHJvcF0gIT09IGV2ZW50LnZhbHVlW2NtcFByb3BdIDogaSAhPT0gZXZlbnQudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm11bHRpc2VsZWN0KCkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWYWx1ZShuZXdWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIG9uRm9jdXMoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjYWxscyB0aGUgc2VsZWN0Rmlyc3QgaXRlbSBhbnl0aW1lIHRoZSBpbnB1dCBmaWVsZCBnb2VzIG91dCBvZiBmb2N1cyBhbmQgaWYgdGhlIHN1Z2dlc3Rpb25zIHBhbmVsIGlzIG5vdCBkaXNwbGF5ZWQuXG4gICAgICovXG4gICAgb25CbHVyKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBpbnB1dFNlYXJjaFZhbCA9IHRoaXMucHJpbWVBdXRvY29tcGxldGUoKT8uaW5wdXRFTD8ubmF0aXZlRWxlbWVudD8udmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmF1dG9DbGVhcigpICYmIHRoaXMuX3ZhbHVlICE9IG51bGwgJiYgKGlucHV0U2VhcmNoVmFsID09IG51bGwgfHwgaW5wdXRTZWFyY2hWYWwgPT09ICcnKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVWYWx1ZUNoYW5nZShudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1BhbmVsU2hvd24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Rmlyc3RJdGVtKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICB0aGlzLmJsdXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgb25TaG93KCkge1xuICAgICAgICB0aGlzLmlzUGFuZWxTaG93biA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsbHMgdGhlIHNlbGVjdEZpcnN0IGl0ZW0gYW55dGltZSB0aGUgc3VnZ2VzdGlvbnMgcGFuZWwgaXMgY2xvc2VkIGFuZCBpbnB1dCBmaWVsZCBpc24ndCBmb2N1c2VkLlxuICAgICAqL1xuICAgIG9uSGlkZSgpIHtcbiAgICAgICAgdGhpcy5pc1BhbmVsU2hvd24gPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdEl0ZW0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2xlYXIoKSB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVDaGFuZ2UodGhpcy5tdWx0aXNlbGVjdCgpID8gW10gOiBudWxsKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fZGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJdGVtc0FuZERhdGFQcm92aWRlcigpO1xuXG4gICAgICAgIC8vIHdyaXRlIHZhbHVlIGltbWVkaWF0ZWx5IC0gaXQgaXMgaW1wb3J0YW50IHNvIHRoYXQgZmlyc3Qgc2VsZWN0IGlzIG5vdCB0cmlnZ2VyZWQhXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9uc1ZhbHVlUHJvcGVydHlJbml0ID0gdGhpcy5vcHRpb25zVmFsdWVQcm9wZXJ0eUluaXQoKTtcbiAgICAgICAgaWYgKG9wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdCAmJiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRJdGVtOiBhbnkgPSB7W29wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdF06IHZhbHVlfTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnNMYWJlbFByb3BlcnR5ID0gdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eSgpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnNMYWJlbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEl0ZW1bb3B0aW9uc0xhYmVsUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRJdGVtID0gdGhpcy5zdWdnZXN0aW9ucygpLmZpbmQoaSA9PiBpW29wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdF0gPT09IHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVGcm9tV3JpdGUobWF0Y2hlZEl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldExvb2t1cCh7XG4gICAgICAgICAgICAgICAgICAgIGxpbWl0OiA1MCxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNWYWx1ZVByb3BlcnR5SW5pdF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUZyb21Xcml0ZShpdGVtc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgbG9va3VwIGRhdGEgcHJvdmlkZXJzIG5vdCB1c2luZyBxdWVyeSBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEl0ZW0gPSBpdGVtcy5maW5kKGkgPT4gaVtvcHRpb25zVmFsdWVQcm9wZXJ0eUluaXRdID09PSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUZyb21Xcml0ZShtYXRjaGVkSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlRnJvbVdyaXRlKGRlZmF1bHRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlRnJvbVdyaXRlKGRlZmF1bHRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlRnJvbVdyaXRlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SXRlbXNBbmREYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSB0aGlzLmRhdGFQcm92aWRlcigpO1xuICAgICAgICB0aGlzLmRhdGFQcm92aWRlclNlcnZpY2UgPSBkYXRhUHJvdmlkZXIuc2VydmljZVR5cGUgPyB0aGlzLmluamVjdG9yLmdldDxhbnk+KGRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSkgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuaXNJbml0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmFsdWVGcm9tV3JpdGUodmFsdWU6IGFueSB8IGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmkxOG5Qb3B1bGF0ZUl0ZW1zKFt2YWx1ZV0sIHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5pMThuR2V0SXRlbXNLZXlzKFt2YWx1ZV0pKSlbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubmdNb2RlbFZhbHVlKCkgPT0gbnVsbCAmJiB0aGlzLl9yYXdWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyB2YWx1ZSBtdXN0IGZpcnN0IGJlIHNldCB0byBzeW5jaHJvbmlzZSBzdGF0ZXMsIHRoZW4gaW4gbmV4dCBhc3luYyBjeWNsZSBzZXQgdG8gd2FudGVkIG51bGwgdmFsdWVcbiAgICAgICAgICAgIHRoaXMubmdNb2RlbFZhbHVlLnNldCh0aGlzLl9yYXdWYWx1ZSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWxWYWx1ZS5zZXQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5nTW9kZWxWYWx1ZS5zZXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMb29rdXAocGFyYW1zOiBEYXRhTGlzdFBhcmFtcywgcXVlcnk/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PGFueT4+IHtcbiAgICAgICAgcmV0dXJuIHRvT2JzZXJ2YWJsZSh0aGlzLmRhdGFQcm92aWRlcigpLmxvb2t1cChwYXJhbXMsIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSwgcXVlcnkpKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkSXRlbXMgPSB0aGlzLmkxOG5HZXRJdGVtc0tleXMoaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5zdHJlYW0odHJhbnNsYXRlZEl0ZW1zKS5waXBlKG1hcCh0cmFuc2xhdGlvbnMgPT4gdGhpcy5pMThuUG9wdWxhdGVJdGVtcyhpdGVtcywgdHJhbnNsYXRpb25zKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihpdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGkxOG5HZXRJdGVtc0tleXMoaXRlbXM6IEFycmF5PGFueT4pOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChcbiAgICAgICAgICAgIGl0ZW0gPT4gKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpID8gKGl0ZW1bdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKSBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZykgOiBpdGVtKSBhcyBzdHJpbmdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGkxOG5Qb3B1bGF0ZUl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+LCBpMThuTWFwOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVt0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpIGFzIGtleW9mIG9iamVjdF0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBpMThuTWFwW2xhYmVsXTtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5pdGVtLCBbdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eSgpIV06IHRyYW5zbGF0aW9ufTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5pdGVtfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBpMThuTWFwW2l0ZW1dO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5KCkhXTogdHJhbnNsYXRpb24gPz8gaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHkoKSFdOiBpdGVtXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdWdnZXN0aW9uc0Zyb21JdGVtcyhpdGVtczogQXJyYXk8YW55PiwgcXVlcnk/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5saW5lU2VhcmNoKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5TG93ZXJDYXNlID0gcXVlcnk/LnRvTG93ZXJDYXNlKCkgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gaXRlbXMuZmlsdGVyKGkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpdGVtTGFiZWwgPSBpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnNMYWJlbFByb3BlcnR5ID0gdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eSgpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zTGFiZWxQcm9wZXJ0eSAmJiB0eXBlb2YgaSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUxhYmVsID0gaVtvcHRpb25zTGFiZWxQcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtTGFiZWwgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnlMb3dlckNhc2UgPT0gbnVsbCB8fCAhcXVlcnlMb3dlckNhc2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1MYWJlbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUxhYmVsID0gaXRlbUxhYmVsLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtTGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHF1ZXJ5TG93ZXJDYXNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9ucy5zZXQoWy4uLmZpbHRlcmVkSXRlbXNdKTtcbiAgICAgICAgICAgIHRoaXMudXNlclNlbGVjdGVkSXRlbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMuc2V0KFsuLi5pdGVtc10pO1xuICAgICAgICAgICAgdGhpcy51c2VyU2VsZWN0ZWRJdGVtID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhbmQgc2V0cyBuZXcgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgUmVwcmVzZW50cyB0aGUgb2JqZWN0IHZhbHVlLlxuICAgICAqIEBwYXJhbSBmcm9tVXNlciBJZiBzZXQgdmFsdWUgaXMgdHJpZ2dlcmVkIGZyb20gdXNlci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBhbnkgfCBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsIGZyb21Vc2VyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGZyb21Vc2VyKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJTZWxlY3RlZEl0ZW0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmdNb2RlbFZhbHVlLnNldCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaW1WYWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zZWFyY2hUcmltKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU/LnRyaW1TdGFydCgpO1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU/LnRyaW1FbmQoKTtcbiAgICAgICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZT8udHJpbSgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9wYWdhdGVzIGZpbmFsIHZhbHVlIHRvIF92YWx1ZSwgb24gY2hhbmdlIGZuIGFuZCBvdXRwdXRzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJvcGFnYXRlVmFsdWVDaGFuZ2UodmFsdWU6IGFueSB8IGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuY29udmVydFZhbHVlV2l0aE9wdGlvbnNWYWx1ZVByb3BTZXR0aW5nKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fcmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRWYWx1ZVdpdGhPcHRpb25zVmFsdWVQcm9wU2V0dGluZyh2YWx1ZTogYW55IHwgYW55W10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNWYWx1ZVByb3BlcnR5ID0gdGhpcy5vcHRpb25zVmFsdWVQcm9wZXJ0eSgpO1xuICAgICAgICBpZiAoIW9wdGlvbnNWYWx1ZVByb3BlcnR5KSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QoKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW29wdGlvbnNWYWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVbb3B0aW9uc1ZhbHVlUHJvcGVydHldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHAtYXV0b0NvbXBsZXRlXG4gICAgW25nTW9kZWxdPVwibmdNb2RlbFZhbHVlKClcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCJcbiAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgW2RhdGFLZXldPVwib3B0aW9uc1RyYWNrUHJvcGVydHkoKVwiXG4gICAgW29wdGlvbkxhYmVsXT1cIm9wdGlvbnNMYWJlbFByb3BlcnR5KClcIlxuICAgIFtzdWdnZXN0aW9uc109XCJzdWdnZXN0aW9ucygpXCJcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlzZWxlY3QoKVwiXG4gICAgW3Nob3dFbXB0eU1lc3NhZ2VdPVwidHJ1ZVwiXG4gICAgW2VtcHR5TWVzc2FnZV09XCInbW5nQXV0b2NvbXBsZXRlLm5vTWF0Y2hlcycgfCB0cmFuc2xhdGVcIlxuICAgIFtzdHlsZUNsYXNzXT1cImNsYXNzTmFtZSgpXCJcbiAgICBbcGFuZWxTdHlsZUNsYXNzXT1cImRyb3Bkb3duQ2xhc3NOYW1lKClcIlxuICAgIFttaW5MZW5ndGhdPVwib3Blbk9uRm9jdXMoKSA/IDAgOiAxXCJcbiAgICBbc2hvd0NsZWFyXT1cInNob3dDbGVhcigpXCJcbiAgICBbZm9yY2VTZWxlY3Rpb25dPVwiYXV0b0NsZWFyKClcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICBbY29tcGxldGVPbkZvY3VzXT1cIm9wZW5PbkZvY3VzKClcIlxuICAgIChjb21wbGV0ZU1ldGhvZCk9XCJvblNlYXJjaCgkZXZlbnQpXCJcbiAgICAob25TZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgKG9uVW5zZWxlY3QpPVwib25VbnNlbGVjdCgkZXZlbnQpXCJcbiAgICAob25Gb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgIChvbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgIChvbkNsZWFyKT1cIm9uQ2xlYXIoKVwiXG4gICAgKG9uU2hvdyk9XCJvblNob3coKVwiXG4gICAgKG9uSGlkZSk9XCJvbkhpZGUoKVwiXG4gICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICBkcm9wZG93bk1vZGU9XCJjdXJyZW50XCI+XG48L3AtYXV0b0NvbXBsZXRlPlxuIl19
|