@decaf-ts/for-angular 0.0.17 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.json +3 -73
- package/assets/i18n/pt.json +5 -74
- package/components/crud-field/crud-field.component.d.ts +12 -3
- package/components/crud-form/crud-form.component.d.ts +36 -14
- package/components/empty-state/empty-state.component.d.ts +9 -10
- package/components/fieldset/fieldset.component.d.ts +9 -0
- package/components/filter/filter.component.d.ts +11 -2
- package/engine/NgxBaseComponent.d.ts +39 -39
- package/engine/NgxCrudFormField.d.ts +2 -1
- package/engine/NgxRenderingEngine.d.ts +44 -16
- package/engine/interfaces.d.ts +10 -0
- package/engine/types.d.ts +8 -0
- package/esm2022/components/crud-field/crud-field.component.mjs +23 -3
- package/esm2022/components/crud-form/crud-form.component.mjs +33 -18
- package/esm2022/components/empty-state/empty-state.component.mjs +11 -10
- package/esm2022/components/fieldset/fieldset.component.mjs +7 -4
- package/esm2022/components/filter/filter.component.mjs +16 -6
- package/esm2022/components/layout/layout.component.mjs +3 -3
- package/esm2022/components/list-item/list-item.component.mjs +4 -4
- package/esm2022/components/pagination/pagination.component.mjs +6 -6
- package/esm2022/engine/NgxBaseComponent.mjs +48 -53
- package/esm2022/engine/NgxCrudFormField.mjs +1 -1
- package/esm2022/engine/NgxRenderingEngine.mjs +20 -4
- package/esm2022/engine/interfaces.mjs +1 -1
- package/esm2022/engine/types.mjs +1 -1
- package/esm2022/helpers/utils.mjs +49 -32
- package/esm2022/i18n/Loader.mjs +82 -0
- package/fesm2022/decaf-ts-for-angular.mjs +288 -134
- package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
- package/helpers/utils.d.ts +42 -17
- package/i18n/Loader.d.ts +48 -0
- package/package.json +10 -1
|
@@ -75,6 +75,30 @@ let CrudFormComponent = class CrudFormComponent {
|
|
|
75
75
|
* @memberOf CrudFormComponent
|
|
76
76
|
*/
|
|
77
77
|
this.uid = generateRandomValue(12);
|
|
78
|
+
/**
|
|
79
|
+
* @description Unique identifier for the current record instance.
|
|
80
|
+
* @summary This property holds a unique string value that identifies the specific record being managed by the form.
|
|
81
|
+
* It is automatically generated if not provided, ensuring each form instance has a distinct identifier.
|
|
82
|
+
* The uid is used for tracking, referencing, and emitting events related to the current record, and may be used
|
|
83
|
+
* in conjunction with the primary key for CRUD operations.
|
|
84
|
+
*
|
|
85
|
+
* @type {string}
|
|
86
|
+
* @default Randomly generated 12-character string
|
|
87
|
+
* @memberOf CrudFormComponent
|
|
88
|
+
*/
|
|
89
|
+
this.allowClear = true;
|
|
90
|
+
/**
|
|
91
|
+
* @description Reference to CRUD operation constants for template usage.
|
|
92
|
+
* @summary Exposes the OperationKeys enum to the component template, enabling
|
|
93
|
+
* conditional rendering and behavior based on operation types. This protected
|
|
94
|
+
* readonly property ensures that template logic can access operation constants
|
|
95
|
+
* while maintaining encapsulation and preventing accidental modification.
|
|
96
|
+
*
|
|
97
|
+
* @protected
|
|
98
|
+
* @readonly
|
|
99
|
+
* @memberOf CrudFormComponent
|
|
100
|
+
*/
|
|
101
|
+
this.OperationKeys = OperationKeys;
|
|
78
102
|
/**
|
|
79
103
|
* @description Event emitter for form submission events.
|
|
80
104
|
* @summary Emits CrudFormEvent objects when the form is submitted, providing
|
|
@@ -96,19 +120,6 @@ let CrudFormComponent = class CrudFormComponent {
|
|
|
96
120
|
* @memberOf CrudFormComponent
|
|
97
121
|
*/
|
|
98
122
|
this.location = inject(Location);
|
|
99
|
-
/**
|
|
100
|
-
* @description Reference to CRUD operation constants for template usage.
|
|
101
|
-
* @summary Exposes the OperationKeys enum to the component template, enabling
|
|
102
|
-
* conditional rendering and behavior based on operation types. This protected
|
|
103
|
-
* readonly property ensures that template logic can access operation constants
|
|
104
|
-
* while maintaining encapsulation and preventing accidental modification.
|
|
105
|
-
*
|
|
106
|
-
* @type {CrudOperations}
|
|
107
|
-
* @protected
|
|
108
|
-
* @readonly
|
|
109
|
-
* @memberOf CrudFormComponent
|
|
110
|
-
*/
|
|
111
|
-
this.OperationKeys = OperationKeys;
|
|
112
123
|
}
|
|
113
124
|
// ngAfterViewInit() {
|
|
114
125
|
// if (![OperationKeys.READ, OperationKeys.DELETE].includes(this.operation))
|
|
@@ -179,7 +190,7 @@ let CrudFormComponent = class CrudFormComponent {
|
|
|
179
190
|
* @memberOf CrudFormComponent
|
|
180
191
|
*/
|
|
181
192
|
handleReset() {
|
|
182
|
-
if (![OperationKeys.DELETE, OperationKeys.READ].includes(this.operation))
|
|
193
|
+
if (![OperationKeys.DELETE, OperationKeys.READ].includes(this.operation) && this.allowClear)
|
|
183
194
|
return NgxFormService.reset(this.formGroup);
|
|
184
195
|
this.location.back();
|
|
185
196
|
}
|
|
@@ -195,13 +206,13 @@ let CrudFormComponent = class CrudFormComponent {
|
|
|
195
206
|
*/
|
|
196
207
|
handleDelete() {
|
|
197
208
|
this.submitEvent.emit({
|
|
198
|
-
data: this.
|
|
209
|
+
data: this.modelId,
|
|
199
210
|
component: 'CrudFormComponent',
|
|
200
211
|
name: EventConstants.SUBMIT,
|
|
201
212
|
});
|
|
202
213
|
}
|
|
203
214
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CrudFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
204
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CrudFormComponent, isStandalone: true, selector: "ngx-decaf-crud-form", inputs: { model: "model", updateOn: "updateOn", target: "target", method: "method", options: "options", action: "action", operation: "operation", handlers: "handlers", formGroup: "formGroup", childOf: "childOf", rendererId: "rendererId", uid: "uid" }, outputs: { submitEvent: "submitEvent" }, host: { properties: { "attr.id": "uid" } }, viewQueries: [{ propertyName: "component", first: true, predicate: ["reactiveForm"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n
|
|
215
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CrudFormComponent, isStandalone: true, selector: "ngx-decaf-crud-form", inputs: { model: "model", modelId: "modelId", updateOn: "updateOn", target: "target", method: "method", options: "options", action: "action", operation: "operation", handlers: "handlers", formGroup: "formGroup", childOf: "childOf", rendererId: "rendererId", uid: "uid", allowClear: "allowClear" }, outputs: { submitEvent: "submitEvent" }, host: { properties: { "attr.id": "uid" } }, viewQueries: [{ propertyName: "component", first: true, predicate: ["reactiveForm"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n @if(!action) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n Back\n </ion-button>\n </div>\n }\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" [id]=\"uid\">\n @if(operation === OperationKeys.READ && modelId) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ [OperationKeys.DELETE, OperationKeys.READ, OperationKeys.UPDATE].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: [".dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 991px){.dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 990px){.dcf-buttons-container.dcf-flex div{width:100%}.dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}form{padding:2rem 1rem}\n"], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
205
216
|
};
|
|
206
217
|
CrudFormComponent = __decorate([
|
|
207
218
|
Dynamic()
|
|
@@ -209,9 +220,11 @@ CrudFormComponent = __decorate([
|
|
|
209
220
|
export { CrudFormComponent };
|
|
210
221
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CrudFormComponent, decorators: [{
|
|
211
222
|
type: Component,
|
|
212
|
-
args: [{ standalone: true, selector: 'ngx-decaf-crud-form', imports: [ForAngularModule, IonIcon], host: { '[attr.id]': 'uid' }, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n
|
|
223
|
+
args: [{ standalone: true, selector: 'ngx-decaf-crud-form', imports: [ForAngularModule, IonIcon], host: { '[attr.id]': 'uid' }, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n @if(!action) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n Back\n </ion-button>\n </div>\n }\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" [id]=\"uid\">\n @if(operation === OperationKeys.READ && modelId) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ [OperationKeys.DELETE, OperationKeys.READ, OperationKeys.UPDATE].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: [".dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 991px){.dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 990px){.dcf-buttons-container.dcf-flex div{width:100%}.dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}form{padding:2rem 1rem}\n"] }]
|
|
213
224
|
}], propDecorators: { model: [{
|
|
214
225
|
type: Input
|
|
226
|
+
}], modelId: [{
|
|
227
|
+
type: Input
|
|
215
228
|
}], updateOn: [{
|
|
216
229
|
type: Input
|
|
217
230
|
}], component: [{
|
|
@@ -238,7 +251,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
238
251
|
type: Input
|
|
239
252
|
}], uid: [{
|
|
240
253
|
type: Input
|
|
254
|
+
}], allowClear: [{
|
|
255
|
+
type: Input
|
|
241
256
|
}], submitEvent: [{
|
|
242
257
|
type: Output
|
|
243
258
|
}] } });
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixPQUFPLEVBQUUsY0FBYyxFQUErRCxNQUFNLGNBQWMsQ0FBQztBQUVuSSxPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3BELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUdwRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQVVJLElBQU0saUJBQWlCLEdBQXZCLE1BQU0saUJBQWlCO0lBQXZCO1FBYUw7Ozs7Ozs7OztXQVNHO1FBRUgsYUFBUSxHQUFvQixRQUFRLENBQUM7UUFjckM7Ozs7Ozs7OztXQVNHO1FBRUgsV0FBTSxHQUFtQixPQUFPLENBQUM7UUFFakM7Ozs7Ozs7OztXQVNHO1FBRUgsV0FBTSxHQUE2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Z0IsRUFBRSxPQUFPLENBQUMsUUFDOUIsRUFBQyxXQUFXLEVBQUUsS0FBSyxFQUFDOzhCQWExQixLQUFLO3NCQURKLEtBQUs7Z0JBY04sUUFBUTtzQkFEUCxLQUFLO2dCQWFOLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBYzlELE1BQU07c0JBREwsS0FBSztnQkFjTixNQUFNO3NCQURMLEtBQUs7Z0JBYU4sT0FBTztzQkFETixLQUFLO2dCQWFOLE1BQU07c0JBREwsS0FBSztnQkFjTixTQUFTO3NCQURSLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQWF6QixRQUFRO3NCQURQLEtBQUs7Z0JBYU4sU0FBUztzQkFEUixLQUFLO2dCQVdOLE9BQU87c0JBRE4sS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBWU4sR0FBRztzQkFERixLQUFLO2dCQWNOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZvcm1FbGVtZW50IH0gZnJvbSAnLi4vLi4vZW5naW5lL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTmd4Rm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4Rm9ybVNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZEZvcm1FdmVudCwgRHluYW1pYywgRXZlbnRDb25zdGFudHMsIEZpZWxkVXBkYXRlTW9kZSwgSGFuZGxlckxpa2UsIEhUTUxGb3JtVGFyZ2V0LCBSZW5kZXJlZE1vZGVsIH0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IENydWRGb3JtT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbnMsIE9wZXJhdGlvbktleXMgfSBmcm9tICdAZGVjYWYtdHMvZGItZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBEZWZhdWx0Rm9ybVJlYWN0aXZlT3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEZvckFuZ3VsYXJNb2R1bGUsIGdldExvZ2dlciB9IGZyb20gJy4uLy4uL2Zvci1hbmd1bGFyLm1vZHVsZSc7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAZGVjYWYtdHMvbG9nZ2luZyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbVZhbHVlIH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5cblxuLyoqXG4gKiBAY29tcG9uZW50IENydWRGb3JtQ29tcG9uZW50XG4gKiBAZXhhbXBsZSA8bmd4LWRlY2FmLWNydWQtZm9ybVxuICogICBhY3Rpb249XCJjcmVhdGVcIlxuICogICBvcGVyYXRpb249XCJjcmVhdGVcIlxuICogICBmb3JtR3JvdXA9XCJmb3JtR3JvdXBcIlxuICogICByZW5kZXJlcklkPVwicmVuZGVyZXJJZFwiXG4gKiAgIHN1Ym1pdEV2ZW50PVwic3VibWl0RXZlbnRcIlxuICogICB0YXJnZXQ9XCJfc2VsZlwiXG4gKiAgIG1ldGhvZD1cImV2ZW50XCI+XG4gKiA8L25neC1kZWNhZi1jcnVkLWZvcm0+XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIChjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgZGVsZXRlKVxuICogQHBhcmFtIHtDcnVkT3BlcmF0aW9uc30gb3BlcmF0aW9uIC0gVGhlIENSVUQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZCAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Rm9ybUdyb3VwfSBmb3JtR3JvdXAgLSBUaGUgZm9ybSBncm91cFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbmRlcmVySWQgLSBUaGUgcmVuZGVyZXIgaWRcbiAqIEBwYXJhbSB7U3VibWl0RXZlbnR9IHN1Ym1pdEV2ZW50IC0gVGhlIHN1Ym1pdCBldmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIFRoZSB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgLSBUaGUgbWV0aG9kXG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ25neC1kZWNhZi1jcnVkLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3J1ZC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtGb3JBbmd1bGFyTW9kdWxlLCBJb25JY29uXSxcbiAgaG9zdDogeydbYXR0ci5pZF0nOiAndWlkJ30sXG59KVxuZXhwb3J0IGNsYXNzIENydWRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBJRm9ybUVsZW1lbnQsIE9uRGVzdHJveSwgUmVuZGVyZWRNb2RlbCB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvc2l0b3J5IG1vZGVsIGZvciBkYXRhIG9wZXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFRoZSBkYXRhIG1vZGVsIHJlcG9zaXRvcnkgdGhhdCB0aGlzIGNvbXBvbmVudCB3aWxsIHVzZSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICAgKiBUaGlzIHByb3ZpZGVzIGEgY29ubmVjdGlvbiB0byB0aGUgZGF0YSBsYXllciBmb3IgcmV0cmlldmluZyBhbmQgbWFuaXB1bGF0aW5nIGRhdGEuXG4gICAqXG4gICAqIEB0eXBlIHtNb2RlbHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG1vZGVsITogTW9kZWwgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGaWVsZCB1cGRhdGUgdHJpZ2dlciBtb2RlIGZvciBmb3JtIHZhbGlkYXRpb24uXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgd2hlbiBmb3JtIGZpZWxkIHZhbGlkYXRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZC4gT3B0aW9ucyBpbmNsdWRlXG4gICAqICdjaGFuZ2UnLCAnYmx1cicsIG9yICdzdWJtaXQnLiBUaGlzIGFmZmVjdHMgdGhlIHVzZXIgZXhwZXJpZW5jZSBieSBjb250cm9sbGluZ1xuICAgKiB3aGVuIHZhbGlkYXRpb24gZmVlZGJhY2sgaXMgc2hvd24gdG8gdGhlIHVzZXIgZHVyaW5nIGZvcm0gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEB0eXBlIHtGaWVsZFVwZGF0ZU1vZGV9XG4gICAqIEBkZWZhdWx0ICdjaGFuZ2UnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdXBkYXRlT246IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSByZWFjdGl2ZSBmb3JtIERPTSBlbGVtZW50LlxuICAgKiBAc3VtbWFyeSBWaWV3Q2hpbGQgcmVmZXJlbmNlIHRoYXQgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgZm9ybSdzIERPTSBlbGVtZW50LlxuICAgKiBUaGlzIGVuYWJsZXMgcHJvZ3JhbW1hdGljIG1hbmlwdWxhdGlvbiBvZiB0aGUgZm9ybSBlbGVtZW50IGFuZCBhY2Nlc3MgdG8gbmF0aXZlXG4gICAqIEhUTUwgZm9ybSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIHdoZW4gbmVlZGVkLlxuICAgKlxuICAgKiBAdHlwZSB7RWxlbWVudFJlZn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBAVmlld0NoaWxkKCdyZWFjdGl2ZUZvcm0nLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY29tcG9uZW50ITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZvcm0gc3VibWlzc2lvbiB0YXJnZXQgc3BlY2lmaWNhdGlvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoZXJlIHRvIGRpc3BsYXkgdGhlIHJlc3BvbnNlIGFmdGVyIGZvcm0gc3VibWlzc2lvbiwgc2ltaWxhclxuICAgKiB0byB0aGUgSFRNTCBmb3JtIHRhcmdldCBhdHRyaWJ1dGUuIE9wdGlvbnMgaW5jbHVkZSAnX3NlbGYnLCAnX2JsYW5rJywgJ19wYXJlbnQnLFxuICAgKiAnX3RvcCcsIG9yIGEgbmFtZWQgZnJhbWUuIENvbnRyb2xzIHRoZSBicm93c2VyIGJlaGF2aW9yIGZvciBmb3JtIHJlc3BvbnNlcy5cbiAgICpcbiAgICogQHR5cGUge0hUTUxGb3JtVGFyZ2V0fVxuICAgKiBAZGVmYXVsdCAnX3NlbGYnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGFyZ2V0OiBIVE1MRm9ybVRhcmdldCA9ICdfc2VsZic7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIVFRQIG1ldGhvZCBvciBzdWJtaXNzaW9uIHN0cmF0ZWd5IGZvciB0aGUgZm9ybS5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyBob3cgdGhlIGZvcm0gc2hvdWxkIGJlIHN1Ym1pdHRlZC4gJ2dldCcgYW5kICdwb3N0JyBjb3JyZXNwb25kXG4gICAqIHRvIHN0YW5kYXJkIEhUVFAgbWV0aG9kcyBmb3IgdHJhZGl0aW9uYWwgZm9ybSBzdWJtaXNzaW9uLCB3aGlsZSAnZXZlbnQnIHVzZXNcbiAgICogQW5ndWxhciBldmVudC1kcml2ZW4gc3VibWlzc2lvbiBmb3Igc2luZ2xlLXBhZ2UgYXBwbGljYXRpb24gd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAdHlwZSB7J2dldCcgfCAncG9zdCcgfCAnZXZlbnQnfVxuICAgKiBAZGVmYXVsdCAnZXZlbnQnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgbWV0aG9kOiAnZ2V0JyB8ICdwb3N0JyB8ICdldmVudCcgPSAnZXZlbnQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ1JVRCBmb3JtIGJlaGF2aW9yLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdGhhdCBjb250cm9sIGZvcm0gcmVuZGVyaW5nLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgYmVoYXZpb3IuIFRoZXNlIG9wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIGRlZmF1bHQgc2V0dGluZ3NcbiAgICogZHVyaW5nIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbiB0byBjdXN0b21pemUgdGhlIGZvcm0ncyBmdW5jdGlvbmFsaXR5LlxuICAgKlxuICAgKiBAdHlwZSB7Q3J1ZEZvcm1PcHRpb25zfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG9wdGlvbnMhOiBDcnVkRm9ybU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBPcHRpb25hbCBhY3Rpb24gaWRlbnRpZmllciBmb3IgZm9ybSBzdWJtaXNzaW9uIGNvbnRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyBhIGN1c3RvbSBhY3Rpb24gbmFtZSB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHN1Ym1pdCBldmVudC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBkZWZhdWx0cyB0byB0aGUgc3RhbmRhcmQgc3VibWl0IGV2ZW50IGNvbnN0YW50LiBVc2VkIHRvXG4gICAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IHR5cGVzIG9mIGZvcm0gc3VibWlzc2lvbnMgd2l0aGluIHRoZSBzYW1lIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBhY3Rpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY3VycmVudCBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBvcGVyYXRpb24gdGhpcyBmb3JtIGlzIGhhbmRsaW5nIChDUkVBVEUsIFJFQUQsIFVQREFURSwgREVMRVRFKS5cbiAgICogVGhpcyBpcyBhIHJlcXVpcmVkIGlucHV0IHRoYXQgZGV0ZXJtaW5lcyBmb3JtIGJlaGF2aW9yLCB2YWxpZGF0aW9uIHJ1bGVzLCBhbmQgYXZhaWxhYmxlIGFjdGlvbnMuXG4gICAqIFRoZSBvcGVyYXRpb24gYWZmZWN0cyBmb3JtIHN0YXRlLCBidXR0b24gdmlzaWJpbGl0eSwgYW5kIHN1Ym1pc3Npb24gbG9naWMuXG4gICAqXG4gICAqIEB0eXBlIHtDcnVkT3BlcmF0aW9uc31cbiAgICogQHJlcXVpcmVkXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3BlcmF0aW9uITogQ3J1ZE9wZXJhdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXN0b20gZXZlbnQgaGFuZGxlcnMgZm9yIGZvcm0gYWN0aW9ucy5cbiAgICogQHN1bW1hcnkgQSByZWNvcmQgb2YgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMga2V5ZWQgYnkgZXZlbnQgbmFtZXMgdGhhdCBjYW4gYmVcbiAgICogdHJpZ2dlcmVkIGR1cmluZyBmb3JtIG9wZXJhdGlvbnMuIFRoZXNlIGhhbmRsZXJzIHByb3ZpZGUgZXh0ZW5zaWJpbGl0eSBmb3JcbiAgICogY3VzdG9tIGJ1c2luZXNzIGxvZ2ljIGFuZCBjYW4gYmUgaW52b2tlZCBmb3IgdmFyaW91cyBmb3JtIGV2ZW50cyBhbmQgYWN0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge0hhbmRsZXJMaWtlfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGhhbmRsZXJzITogSGFuZGxlckxpa2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIHJlYWN0aXZlIEZvcm1Hcm91cCBmb3IgZm9ybSBzdGF0ZSBtYW5hZ2VtZW50LlxuICAgKiBAc3VtbWFyeSBUaGUgRm9ybUdyb3VwIGluc3RhbmNlIHRoYXQgbWFuYWdlcyBhbGwgZm9ybSBjb250cm9scywgdmFsaWRhdGlvbixcbiAgICogYW5kIGZvcm0gc3RhdGUuIFRoaXMgaXMgdGhlIG1haW4gaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgZm9ybSB2YWx1ZXMgYW5kXG4gICAqIGNvbnRyb2xsaW5nIGZvcm0gYmVoYXZpb3IuIE1heSBiZSB1bmRlZmluZWQgZm9yIHJlYWQtb25seSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7Rm9ybUdyb3VwIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhdGggdG8gdGhlIHBhcmVudCBGb3JtR3JvdXAsIGlmIG5lc3RlZC5cbiAgICogQHN1bW1hcnkgRnVsbCBkb3QtZGVsaW1pdGVkIHBhdGggb2YgdGhlIHBhcmVudCBGb3JtR3JvdXAuIFNldCBvbmx5IHdoZW4gaXMgcGFydCBvZiBhIG5lc3RlZCBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgY2hpbGRPZj86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZm9ybSByZW5kZXJlci5cbiAgICogQHN1bW1hcnkgQSB1bmlxdWUgc3RyaW5nIGlkZW50aWZpZXIgdXNlZCB0byByZWdpc3RlciBhbmQgbWFuYWdlIHRoaXMgZm9ybVxuICAgKiBpbnN0YW5jZSB3aXRoaW4gdGhlIE5neEZvcm1TZXJ2aWNlLiBUaGlzIElEIGlzIGFsc28gdXNlZCBhcyB0aGUgSFRNTCBpZFxuICAgKiBhdHRyaWJ1dGUgZm9yIHRoZSBmb3JtIGVsZW1lbnQsIGVuYWJsaW5nIERPTSBxdWVyaWVzIGFuZCBmb3JtIG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcmVuZGVyZXJJZCE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQuXG4gICAqIEBzdW1tYXJ5IEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZCBiZWluZyBkaXNwbGF5ZWQgb3IgbWFuaXB1bGF0ZWQuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJpbWFyeSBrZXkgZm9yIG9wZXJhdGlvbnMgb24gc3BlY2lmaWMgcmVjb3Jkcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IG51bWJlcn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB1aWQ6IHN0cmluZyA9IGdlbmVyYXRlUmFuZG9tVmFsdWUoMTIpO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBmb3JtIHN1Ym1pc3Npb24gZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBDcnVkRm9ybUV2ZW50IG9iamVjdHMgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQsIHByb3ZpZGluZ1xuICAgKiBmb3JtIGRhdGEsIGNvbXBvbmVudCBpbmZvcm1hdGlvbiwgYW5kIGFueSBhc3NvY2lhdGVkIGhhbmRsZXJzIHRvIHBhcmVudFxuICAgKiBjb21wb25lbnRzLiBUaGlzIGVuYWJsZXMgZGVjb3VwbGVkIGhhbmRsaW5nIG9mIGZvcm0gc3VibWlzc2lvbiBsb2dpYy5cbiAgICpcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxDcnVkRm9ybUV2ZW50Pn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgc3VibWl0RXZlbnQ6IEV2ZW50RW1pdHRlcjxDcnVkRm9ybUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q3J1ZEZvcm1FdmVudD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ2dlciBpbnN0YW5jZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgbG9nZ2luZyBjYXBhYmlsaXRpZXMgZm9yIHRoZSBjb21wb25lbnQsIGFsbG93aW5nIGZvciBjb25zaXN0ZW50XG4gICAqIGFuZCBzdHJ1Y3R1cmVkIGxvZ2dpbmcgb2YgaW5mb3JtYXRpb24sIHdhcm5pbmdzLCBhbmQgZXJyb3JzLiBUaGlzIGxvZ2dlciBpcyBpbml0aWFsaXplZFxuICAgKiBpbiB0aGUgbmdPbkluaXQgbWV0aG9kIHVzaW5nIHRoZSBnZXRMb2dnZXIgZnVuY3Rpb24gZnJvbSB0aGUgRm9yQW5ndWxhck1vZHVsZS5cbiAgICpcbiAgICogVGhlIGxvZ2dlciBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvbXBvbmVudCB0byByZWNvcmQgaW1wb3J0YW50IGV2ZW50cywgZGVidWcgaW5mb3JtYXRpb24sXG4gICAqIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJdCBoZWxwcyBpbiBtb25pdG9yaW5nIHRoZSBjb21wb25lbnQncyBiZWhhdmlvciwgdHJhY2tpbmcgdGhlIGZsb3dcbiAgICogb2Ygb3BlcmF0aW9ucywgYW5kIGZhY2lsaXRhdGluZyBlYXNpZXIgZGVidWdnaW5nIGFuZCBtYWludGVuYW5jZS5cbiAgICpcbiAgICogQHR5cGUge0xvZ2dlcn1cbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvZ2dlciE6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgTG9jYXRpb24gc2VydmljZS5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYnJvd3NlcidzIFVSTCBhbmQgaGlzdG9yeS5cbiAgICogVGhpcyBzZXJ2aWNlIGlzIHVzZWQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGJyb3dzZXIncyBoaXN0b3J5IEFQSSwgYWxsb3dpbmdcbiAgICogZm9yIGJhY2sgbmF2aWdhdGlvbiBhbmQgVVJMIG1hbmlwdWxhdGlvbiBvdXRzaWRlIG9mIEFuZ3VsYXIncyByb3V0ZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtMb2NhdGlvbn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG5cbiAgLy8gbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGlmICghW09wZXJhdGlvbktleXMuUkVBRCwgT3BlcmF0aW9uS2V5cy5ERUxFVEVdLmluY2x1ZGVzKHRoaXMub3BlcmF0aW9uKSlcbiAgICAvLyAgIE5neEZvcm1TZXJ2aWNlLmZvcm1BZnRlclZpZXdJbml0KHRoaXMsIHRoaXMucmVuZGVyZXJJZCk7XG4gIC8vIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBpbml0aWFsaXphdGlvbiBsaWZlY3ljbGUgbWV0aG9kLlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGJ5IHNldHRpbmcgdXAgdGhlIGxvZ2dlciwgY29uZmlndXJpbmcgZm9ybSBzdGF0ZVxuICAgKiBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHR5cGUsIGFuZCBtZXJnaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIFJFQUQgYW5kIERFTEVURVxuICAgKiBvcGVyYXRpb25zLCB0aGUgZm9ybUdyb3VwIGlzIHNldCB0byB1bmRlZmluZWQgc2luY2UgdGhlc2Ugb3BlcmF0aW9ucyBkb24ndCByZXF1aXJlXG4gICAqIGZvcm0gaW5wdXQuIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbWVyZ2VkIHdpdGggZGVmYXVsdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmxvZ2dlcilcbiAgICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKHRoaXMpO1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5SRUFEIHx8IHRoaXMub3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLkRFTEVURSlcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zIHx8IHt9LFxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IGNsZWFudXAgbGlmZWN5Y2xlIG1ldGhvZC5cbiAgICogQHN1bW1hcnkgUGVyZm9ybXMgY2xlYW51cCBvcGVyYXRpb25zIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXG4gICAqIFVucmVnaXN0ZXJzIHRoZSBGb3JtR3JvdXAgZnJvbSB0aGUgTmd4Rm9ybVNlcnZpY2UgdG8gcHJldmVudCBtZW1vcnkgbGVha3NcbiAgICogYW5kIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgY2xlYW51cC5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKVxuICAgICAgTmd4Rm9ybVNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmZvcm1Hcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZm9ybSBzdWJtaXNzaW9uIHdpdGggdmFsaWRhdGlvbiBhbmQgZXZlbnQgZW1pc3Npb24uXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBmb3JtIHN1Ym1pc3Npb24gYnkgZmlyc3QgcHJldmVudGluZyBkZWZhdWx0IGJyb3dzZXIgYmVoYXZpb3IsXG4gICAqIHRoZW4gdmFsaWRhdGluZyBhbGwgZm9ybSBmaWVsZHMgdXNpbmcgTmd4Rm9ybVNlcnZpY2UuIElmIHZhbGlkYXRpb24gcGFzc2VzLFxuICAgKiBleHRyYWN0cyBmb3JtIGRhdGEgYW5kIGVtaXRzIGEgc3VibWl0RXZlbnQgd2l0aCB0aGUgZGF0YSwgY29tcG9uZW50IGluZm9ybWF0aW9uLFxuICAgKiBhbmQgYW55IGFzc29jaWF0ZWQgaGFuZGxlcnMuIFJldHVybnMgZmFsc2UgaWYgdmFsaWRhdGlvbiBmYWlscy5cbiAgICpcbiAgICogQHBhcmFtIHtTdWJtaXRFdmVudH0gZXZlbnQgLSBUaGUgYnJvd3NlcidzIG5hdGl2ZSBmb3JtIHN1Ym1pdCBldmVudFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuIHwgdm9pZD59IFJldHVybnMgZmFsc2UgaWYgdmFsaWRhdGlvbiBmYWlscywgdm9pZCBpZiBzdWNjZXNzZnVsXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgc3VibWl0KGV2ZW50OiBTdWJtaXRFdmVudCk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmICghTmd4Rm9ybVNlcnZpY2UudmFsaWRhdGVGaWVsZHModGhpcy5mb3JtR3JvdXAgYXMgRm9ybUdyb3VwKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBkYXRhID0gTmd4Rm9ybVNlcnZpY2UuZ2V0Rm9ybURhdGEodGhpcy5mb3JtR3JvdXAgYXMgRm9ybUdyb3VwKTtcbiAgICB0aGlzLnN1Ym1pdEV2ZW50LmVtaXQoe1xuICAgICAgZGF0YSxcbiAgICAgIGNvbXBvbmVudDogJ0NydWRGb3JtQ29tcG9uZW50JyxcbiAgICAgIG5hbWU6IHRoaXMuYWN0aW9uIHx8IEV2ZW50Q29uc3RhbnRzLlNVQk1JVCxcbiAgICAgIGhhbmRsZXJzOiB0aGlzLmhhbmRsZXJzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGZvcm0gcmVzZXQgb3IgbmF2aWdhdGlvbiBiYWNrIGZ1bmN0aW9uYWxpdHkuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGRpZmZlcmVudCByZXNldCBiZWhhdmlvciBiYXNlZCBvbiB0aGUgY3VycmVudCBvcGVyYXRpb24uXG4gICAqIEZvciBDUkVBVEUgYW5kIFVQREFURSBvcGVyYXRpb25zLCByZXNldHMgdGhlIGZvcm0gdG8gaXRzIGluaXRpYWwgc3RhdGUuXG4gICAqIEZvciBSRUFEIGFuZCBERUxFVEUgb3BlcmF0aW9ucywgbmF2aWdhdGVzIGJhY2sgaW4gdGhlIGJyb3dzZXIgaGlzdG9yeVxuICAgKiBzaW5jZSB0aGVzZSBvcGVyYXRpb25zIGRvbid0IGhhdmUgbW9kaWZpYWJsZSBmb3JtIGRhdGEgdG8gcmVzZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIGhhbmRsZVJlc2V0KCk6IHZvaWQge1xuICAgIGlmKCFbT3BlcmF0aW9uS2V5cy5ERUxFVEUsIE9wZXJhdGlvbktleXMuUkVBRF0uaW5jbHVkZXModGhpcy5vcGVyYXRpb24pKVxuICAgICAgcmV0dXJuIE5neEZvcm1TZXJ2aWNlLnJlc2V0KHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCk7XG4gICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZGVsZXRlIG9wZXJhdGlvbnMgYnkgZW1pdHRpbmcgZGVsZXRlIGV2ZW50cy5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIGRlbGV0ZSByZXF1ZXN0cyBieSBlbWl0dGluZyBhIHN1Ym1pdCBldmVudCB3aXRoIHRoZVxuICAgKiByZWNvcmQncyB1bmlxdWUgaWRlbnRpZmllciBhcyBkYXRhLiBUaGlzIGFsbG93cyBwYXJlbnQgY29tcG9uZW50cyB0b1xuICAgKiBoYW5kbGUgdGhlIGFjdHVhbCBkZWxldGlvbiBsb2dpYyB3aGlsZSBtYWludGFpbmluZyBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLlxuICAgKiBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIHVpZCBhbmQgc3RhbmRhcmQgY29tcG9uZW50IGlkZW50aWZpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVEZWxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXRFdmVudC5lbWl0KHtcbiAgICAgIGRhdGE6IHRoaXMudWlkLFxuICAgICAgY29tcG9uZW50OiAnQ3J1ZEZvcm1Db21wb25lbnQnLFxuICAgICAgbmFtZTogRXZlbnRDb25zdGFudHMuU1VCTUlULFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gQ1JVRCBvcGVyYXRpb24gY29uc3RhbnRzIGZvciB0ZW1wbGF0ZSB1c2FnZS5cbiAgICogQHN1bW1hcnkgRXhwb3NlcyB0aGUgT3BlcmF0aW9uS2V5cyBlbnVtIHRvIHRoZSBjb21wb25lbnQgdGVtcGxhdGUsIGVuYWJsaW5nXG4gICAqIGNvbmRpdGlvbmFsIHJlbmRlcmluZyBhbmQgYmVoYXZpb3IgYmFzZWQgb24gb3BlcmF0aW9uIHR5cGVzLiBUaGlzIHByb3RlY3RlZFxuICAgKiByZWFkb25seSBwcm9wZXJ0eSBlbnN1cmVzIHRoYXQgdGVtcGxhdGUgbG9naWMgY2FuIGFjY2VzcyBvcGVyYXRpb24gY29uc3RhbnRzXG4gICAqIHdoaWxlIG1haW50YWluaW5nIGVuY2Fwc3VsYXRpb24gYW5kIHByZXZlbnRpbmcgYWNjaWRlbnRhbCBtb2RpZmljYXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtDcnVkT3BlcmF0aW9uc31cbiAgICogQHByb3RlY3RlZFxuICAgKiBAcmVhZG9ubHlcbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgT3BlcmF0aW9uS2V5cyA9IE9wZXJhdGlvbktleXM7XG59XG4iLCJAaWYob3BlcmF0aW9uICE9PSAncmVhZCcgJiYgb3BlcmF0aW9uICE9PSAnZGVsZXRlJykge1xuICA8Zm9ybSAjcmVhY3RpdmVGb3JtIFtpZF09XCJyZW5kZXJlcklkXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAoc3VibWl0KT1cInN1Ym1pdCgkZXZlbnQpXCIgbm92YWxpZGF0ZSBbdGFyZ2V0XT1cInRhcmdldFwiPlxuICAgIDxuZy1jb250ZW50ICNmb3JtQ29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImRjZi1idXR0b25zLWNvbnRhaW5lciBkY2YtZ3JpZCBkY2YtZ3JpZC1jb2xsYXBzZSBkY2YtZmxleCBkY2YtZmxleC1sZWZ0XCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IGFjdGlvbiA/IGFjdGlvbiA6IG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudGV4dH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyKSB7XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiaGFuZGxlUmVzZXQoKVwiPlxuICAgICAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uICBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB7eyBbJ2NyZWF0ZScsICd1cGRhdGUnXS5pbmNsdWRlcyhvcGVyYXRpb24pID8gJ0JhY2snIDogb3B0aW9ucy5idXR0b25zLmNsZWFyPy50ZXh0fX1cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG59IEBlbHNlIHtcbiAgPGRpdiBbY2xhc3NdPVwiJ2RjZi1idXR0b25zLWNvbnRhaW5lciBkY2YtZ3JpZCBkY2YtZ3JpZC1jb2xsYXBzZSBkY2YtZmxleCBkY2YtZmxleC1sZWZ0ICcgKyBvcGVyYXRpb25cIiBbaWRdPVwidWlkXCI+XG5cbiAgICBAaWYob3BlcmF0aW9uID09PSAnZGVsZXRlJyAmJiB1aWQpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZURlbGV0ZSgpXCJcbiAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgRGVsZXRlXG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgfVxuICAgIEBpZihvcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuQ1JFQVRFIHx8IG9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5VUERBVEUpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3tvcHRpb25zLmJ1dHRvbnMuc3VibWl0LnRleHR9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyKSB7XG4gICAgICA8ZGl2PlxuICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJoYW5kbGVSZXNldCgpXCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uICBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgWydkZWxldGUnLCAncmVhZCcsICd1cGRhdGUnXS5pbmNsdWRlcyhvcGVyYXRpb24pID8gJ0JhY2snIDogb3B0aW9ucy5idXR0b25zLmNsZWFyPy50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICB9XG4gIDwvZGl2PlxufVxuXG4iXX0=
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixPQUFPLEVBQUUsY0FBYyxFQUErRCxNQUFNLGNBQWMsQ0FBQztBQUVuSSxPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3BELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUdwRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQStESSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFpQjtJQUF2QjtRQTJCTDs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQWNyQzs7Ozs7Ozs7O1dBU0c7UUFFSCxXQUFNLEdBQW1CLE9BQU8sQ0FBQztRQUVqQzs7Ozs7Ozs7O1dBU0c7UUFFSCxXQUFNLEdB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QXFWN0I7OzRGQXJWWSxpQkFBaUI7a0JBN0Q3QixTQUFTO2lDQUNJLElBQUksWUFDTixxQkFBcUIsV0FHdEIsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsUUFDOUIsRUFBQyxXQUFXLEVBQUUsS0FBSyxFQUFDOzhCQWtFMUIsS0FBSztzQkFESixLQUFLO2dCQWVOLE9BQU87c0JBRE4sS0FBSztnQkFjTixRQUFRO3NCQURQLEtBQUs7Z0JBYU4sU0FBUztzQkFEUixTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFjOUQsTUFBTTtzQkFETCxLQUFLO2dCQWNOLE1BQU07c0JBREwsS0FBSztnQkFhTixPQUFPO3NCQUROLEtBQUs7Z0JBYU4sTUFBTTtzQkFETCxLQUFLO2dCQWNOLFNBQVM7c0JBRFIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBYXpCLFFBQVE7c0JBRFAsS0FBSztnQkFhTixTQUFTO3NCQURSLEtBQUs7Z0JBV04sT0FBTztzQkFETixLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFZTixHQUFHO3NCQURGLEtBQUs7Z0JBZ0JOLFVBQVU7c0JBRFQsS0FBSztnQkEyQk4sV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJRm9ybUVsZW1lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hGb3JtU2VydmljZSc7XG5pbXBvcnQgeyBDcnVkRm9ybUV2ZW50LCBEeW5hbWljLCBFdmVudENvbnN0YW50cywgRmllbGRVcGRhdGVNb2RlLCBIYW5kbGVyTGlrZSwgSFRNTEZvcm1UYXJnZXQsIFJlbmRlcmVkTW9kZWwgfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHsgQ3J1ZEZvcm1PcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucywgT3BlcmF0aW9uS2V5cyB9IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7IERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSwgZ2V0TG9nZ2VyIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJ0BkZWNhZi10cy9sb2dnaW5nJztcbmltcG9ydCB7IGdlbmVyYXRlUmFuZG9tVmFsdWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcblxuXG4vKipcbiAqIEBjb21wb25lbnQgQ3J1ZEZvcm1Db21wb25lbnRcbiAqIEBleGFtcGxlIDxuZ3gtZGVjYWYtY3J1ZC1mb3JtXG4gKiAgIGFjdGlvbj1cImNyZWF0ZVwiXG4gKiAgIG9wZXJhdGlvbj1cImNyZWF0ZVwiXG4gKiAgIGZvcm1Hcm91cD1cImZvcm1Hcm91cFwiXG4gKiAgIHJlbmRlcmVySWQ9XCJyZW5kZXJlcklkXCJcbiAqICAgc3VibWl0RXZlbnQ9XCJzdWJtaXRFdmVudFwiXG4gKiAgIHRhcmdldD1cIl9zZWxmXCJcbiAqICAgbWV0aG9kPVwiZXZlbnRcIj5cbiAqIDwvbmd4LWRlY2FmLWNydWQtZm9ybT5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIC0gVGhlIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpXG4gKiBAcGFyYW0ge0NydWRPcGVyYXRpb25zfSBvcGVyYXRpb24gLSBUaGUgQ1JVRCBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkIChjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgZGVsZXRlKVxuICogQHBhcmFtIHtGb3JtR3JvdXB9IGZvcm1Hcm91cCAtIFRoZSBmb3JtIGdyb3VwXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVuZGVyZXJJZCAtIFRoZSByZW5kZXJlciBpZFxuICogQHBhcmFtIHtTdWJtaXRFdmVudH0gc3VibWl0RXZlbnQgLSBUaGUgc3VibWl0IGV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gVGhlIHRhcmdldFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCAtIFRoZSBtZXRob2RcbiAqL1xuQER5bmFtaWMoKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnbmd4LWRlY2FmLWNydWQtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcnVkLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcnVkLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW0ZvckFuZ3VsYXJNb2R1bGUsIElvbkljb25dLFxuICBob3N0OiB7J1thdHRyLmlkXSc6ICd1aWQnfSxcbn0pXG4vKipcbiAqIEBjbGFzcyBDcnVkRm9ybUNvbXBvbmVudFxuICogQGltcGxlbWVudHMgT25Jbml0LCBJRm9ybUVsZW1lbnQsIE9uRGVzdHJveSwgUmVuZGVyZWRNb2RlbFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBDcnVkRm9ybUNvbXBvbmVudGAgaXMgYW4gQW5ndWxhciBjb21wb25lbnQgZGVzaWduZWQgdG8gcHJvdmlkZSBhIGZsZXhpYmxlIGFuZCBleHRlbnNpYmxlIGZvcm0gaW50ZXJmYWNlIGZvciBwZXJmb3JtaW5nIENSVUQgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUpIG9wZXJhdGlvbnMgb24gYSBkYXRhIG1vZGVsLiBJdCBpbnRlZ3JhdGVzIHdpdGggQW5ndWxhcidzIHJlYWN0aXZlIGZvcm1zIGFuZCBzdXBwb3J0cyBhZHZhbmNlZCBjb25maWd1cmF0aW9uLCB2YWxpZGF0aW9uLCBhbmQgZXZlbnQgaGFuZGxpbmcgZm9yIGEgd2lkZSByYW5nZSBvZiB1c2UgY2FzZXMuXG4gKlxuICogQHN1bW1hcnlcbiAqIC0gU3VwcG9ydHMgZHluYW1pYyBmb3JtIHJlbmRlcmluZyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZGF0YSBtb2RlbCBhbmQgb3BlcmF0aW9uIHR5cGUuXG4gKiAtIEhhbmRsZXMgZm9ybSB2YWxpZGF0aW9uLCBzdWJtaXNzaW9uLCBhbmQgcmVzZXQgbG9naWMgd2l0aCBjdXN0b21pemFibGUgYmVoYXZpb3IuXG4gKiAtIEVtaXRzIHN0cnVjdHVyZWQgZXZlbnRzIGZvciBmb3JtIGFjdGlvbnMsIGVuYWJsaW5nIGRlY291cGxlZCBidXNpbmVzcyBsb2dpYy5cbiAqIC0gSW50ZWdyYXRlcyB3aXRoIGV4dGVybmFsIHNlcnZpY2VzIGZvciBsb2dnaW5nLCBmb3JtIG1hbmFnZW1lbnQsIGFuZCBuYXZpZ2F0aW9uLlxuICogLSBQcm92aWRlcyBleHRlbnNpdmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBmb3JtIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW9yLlxuICpcbiAqIEBpbnB1dHNcbiAqIC0gYG1vZGVsYDogVGhlIHJlcG9zaXRvcnkgbW9kZWwgZm9yIGRhdGEgb3BlcmF0aW9ucy5cbiAqIC0gYG1vZGVsSWRgOiBUaGUgcHJpbWFyeSBkYXRhIG1vZGVsIGluc3RhbmNlIGZvciBDUlVEIG9wZXJhdGlvbnMuXG4gKiAtIGB1cGRhdGVPbmA6IERldGVybWluZXMgd2hlbiBmb3JtIGZpZWxkIHZhbGlkYXRpb24gaXMgdHJpZ2dlcmVkIChgY2hhbmdlYCwgYGJsdXJgLCBvciBgc3VibWl0YCkuXG4gKiAtIGBjb21wb25lbnRgOiBSZWZlcmVuY2UgdG8gdGhlIHJlYWN0aXZlIGZvcm0gRE9NIGVsZW1lbnQuXG4gKiAtIGB0YXJnZXRgOiBTcGVjaWZpZXMgdGhlIGZvcm0gc3VibWlzc2lvbiB0YXJnZXQgKGUuZy4sIGBfc2VsZmAsIGBfYmxhbmtgKS5cbiAqIC0gYG1ldGhvZGA6IERlZmluZXMgdGhlIGZvcm0gc3VibWlzc2lvbiBzdHJhdGVneSAoYGdldGAsIGBwb3N0YCwgb3IgYGV2ZW50YCkuXG4gKiAtIGBvcHRpb25zYDogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBmb3JtIGJlaGF2aW9yIGFuZCByZW5kZXJpbmcuXG4gKiAtIGBhY3Rpb25gOiBPcHRpb25hbCBjdXN0b20gYWN0aW9uIGlkZW50aWZpZXIgZm9yIHN1Ym1pc3Npb24gY29udGV4dC5cbiAqIC0gYG9wZXJhdGlvbmA6IFRoZSBjdXJyZW50IENSVUQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZCAocmVxdWlyZWQpLlxuICogLSBgaGFuZGxlcnNgOiBDdXN0b20gZXZlbnQgaGFuZGxlcnMgZm9yIGZvcm0gYWN0aW9ucy5cbiAqIC0gYGZvcm1Hcm91cGA6IEFuZ3VsYXIgRm9ybUdyb3VwIGZvciBmb3JtIHN0YXRlIG1hbmFnZW1lbnQuXG4gKiAtIGBjaGlsZE9mYDogUGF0aCB0byB0aGUgcGFyZW50IEZvcm1Hcm91cCBpZiBuZXN0ZWQuXG4gKiAtIGByZW5kZXJlcklkYDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBmb3JtIHJlbmRlcmVyLlxuICogLSBgdWlkYDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZC5cbiAqIC0gYGFsbG93Q2xlYXJgOiBFbmFibGVzIG9yIGRpc2FibGVzIGZvcm0gY2xlYXJpbmcgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAb3V0cHV0c1xuICogLSBgc3VibWl0RXZlbnRgOiBFbWl0cyBgQ3J1ZEZvcm1FdmVudGAgb2JqZWN0cyBvbiBmb3JtIHN1Ym1pc3Npb24uXG4gKlxuICogQHByb3RlY3RlZFxuICogLSBgT3BlcmF0aW9uS2V5c2A6IFJlZmVyZW5jZSB0byBDUlVEIG9wZXJhdGlvbiBjb25zdGFudHMgZm9yIHRlbXBsYXRlIHVzYWdlLlxuICpcbiAqIEBwcml2YXRlXG4gKiAtIGBsb2dnZXJgOiBMb2dnZXIgaW5zdGFuY2UgZm9yIHN0cnVjdHVyZWQgbG9nZ2luZy5cbiAqIC0gYGxvY2F0aW9uYDogQW5ndWxhciBMb2NhdGlvbiBzZXJ2aWNlIGZvciBuYXZpZ2F0aW9uLlxuICpcbiAqIEBsaWZlY3ljbGVcbiAqIC0gYG5nT25Jbml0YDogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCwgY29uZmlndXJlcyBsb2dnZXIsIG1lcmdlcyBvcHRpb25zLCBhbmQgc2V0cyBmb3JtIHN0YXRlIGJhc2VkIG9uIG9wZXJhdGlvbi5cbiAqIC0gYG5nT25EZXN0cm95YDogQ2xlYW5zIHVwIHJlc291cmNlcyBhbmQgdW5yZWdpc3RlcnMgdGhlIEZvcm1Hcm91cC5cbiAqXG4gKiBAbWV0aG9kc1xuICogLSBgc3VibWl0KGV2ZW50OiBTdWJtaXRFdmVudClgOiBIYW5kbGVzIGZvcm0gc3VibWlzc2lvbiwgdmFsaWRhdGlvbiwgYW5kIGV2ZW50IGVtaXNzaW9uLlxuICogLSBgaGFuZGxlUmVzZXQoKWA6IFJlc2V0cyB0aGUgZm9ybSBvciBuYXZpZ2F0ZXMgYmFjayBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uLlxuICogLSBgaGFuZGxlRGVsZXRlKClgOiBFbWl0cyBhIGRlbGV0ZSBldmVudCBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkLlxuICpcbiAqIEB1c2FnZVxuICogVXNlIHRoaXMgY29tcG9uZW50IHdpdGhpbiBBbmd1bGFyIHRlbXBsYXRlcyB0byBwcm92aWRlIGEgcm9idXN0IENSVUQgZm9ybSBpbnRlcmZhY2UuIENvbmZpZ3VyZSBpbnB1dHMgdG8gbWF0Y2ggeW91ciBkYXRhIG1vZGVsIGFuZCBkZXNpcmVkIGJlaGF2aW9yLCBhbmQgaGFuZGxlIG91dHB1dCBldmVudHMgdG8gaW1wbGVtZW50IGN1c3RvbSBidXNpbmVzcyBsb2dpYy5cbiAqL1xuZXhwb3J0IGNsYXNzIENydWRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBJRm9ybUVsZW1lbnQsIE9uRGVzdHJveSwgUmVuZGVyZWRNb2RlbCB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvc2l0b3J5IG1vZGVsIGZvciBkYXRhIG9wZXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFRoZSBkYXRhIG1vZGVsIHJlcG9zaXRvcnkgdGhhdCB0aGlzIGNvbXBvbmVudCB3aWxsIHVzZSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICAgKiBUaGlzIHByb3ZpZGVzIGEgY29ubmVjdGlvbiB0byB0aGUgZGF0YSBsYXllciBmb3IgcmV0cmlldmluZyBhbmQgbWFuaXB1bGF0aW5nIGRhdGEuXG4gICAqXG4gICAqIEB0eXBlIHtNb2RlbHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG1vZGVsITogTW9kZWwgfCB1bmRlZmluZWQ7XG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBwcmltYXJ5IGRhdGEgbW9kZWwgdXNlZCBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBUaGlzIGlucHV0IHByb3ZpZGVzIHRoZSBtYWluIE1vZGVsIGluc3RhbmNlIHRoYXQgdGhlIGZvcm0gaW50ZXJhY3RzIHdpdGggZm9yXG4gICAqIGNyZWF0aW5nLCByZWFkaW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgcmVjb3Jkcy4gSXQgc2VydmVzIGFzIHRoZSBzb3VyY2Ugb2Ygc2NoZW1hXG4gICAqIGFuZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciB0aGUgZm9ybSBmaWVsZHMsIGFuZCBpcyByZXF1aXJlZCBmb3IgbW9zdCBvcGVyYXRpb25zIGV4Y2VwdFxuICAgKiBmb3IgY2VydGFpbiByZWFkIG9yIGRlbGV0ZSBzY2VuYXJpb3MuXG4gICAqXG4gICAqIEB0eXBlIHtNb2RlbCB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBtb2RlbElkITogTW9kZWwgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGaWVsZCB1cGRhdGUgdHJpZ2dlciBtb2RlIGZvciBmb3JtIHZhbGlkYXRpb24uXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgd2hlbiBmb3JtIGZpZWxkIHZhbGlkYXRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZC4gT3B0aW9ucyBpbmNsdWRlXG4gICAqICdjaGFuZ2UnLCAnYmx1cicsIG9yICdzdWJtaXQnLiBUaGlzIGFmZmVjdHMgdGhlIHVzZXIgZXhwZXJpZW5jZSBieSBjb250cm9sbGluZ1xuICAgKiB3aGVuIHZhbGlkYXRpb24gZmVlZGJhY2sgaXMgc2hvd24gdG8gdGhlIHVzZXIgZHVyaW5nIGZvcm0gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEB0eXBlIHtGaWVsZFVwZGF0ZU1vZGV9XG4gICAqIEBkZWZhdWx0ICdjaGFuZ2UnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdXBkYXRlT246IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSByZWFjdGl2ZSBmb3JtIERPTSBlbGVtZW50LlxuICAgKiBAc3VtbWFyeSBWaWV3Q2hpbGQgcmVmZXJlbmNlIHRoYXQgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgZm9ybSdzIERPTSBlbGVtZW50LlxuICAgKiBUaGlzIGVuYWJsZXMgcHJvZ3JhbW1hdGljIG1hbmlwdWxhdGlvbiBvZiB0aGUgZm9ybSBlbGVtZW50IGFuZCBhY2Nlc3MgdG8gbmF0aXZlXG4gICAqIEhUTUwgZm9ybSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIHdoZW4gbmVlZGVkLlxuICAgKlxuICAgKiBAdHlwZSB7RWxlbWVudFJlZn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBAVmlld0NoaWxkKCdyZWFjdGl2ZUZvcm0nLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY29tcG9uZW50ITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZvcm0gc3VibWlzc2lvbiB0YXJnZXQgc3BlY2lmaWNhdGlvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoZXJlIHRvIGRpc3BsYXkgdGhlIHJlc3BvbnNlIGFmdGVyIGZvcm0gc3VibWlzc2lvbiwgc2ltaWxhclxuICAgKiB0byB0aGUgSFRNTCBmb3JtIHRhcmdldCBhdHRyaWJ1dGUuIE9wdGlvbnMgaW5jbHVkZSAnX3NlbGYnLCAnX2JsYW5rJywgJ19wYXJlbnQnLFxuICAgKiAnX3RvcCcsIG9yIGEgbmFtZWQgZnJhbWUuIENvbnRyb2xzIHRoZSBicm93c2VyIGJlaGF2aW9yIGZvciBmb3JtIHJlc3BvbnNlcy5cbiAgICpcbiAgICogQHR5cGUge0hUTUxGb3JtVGFyZ2V0fVxuICAgKiBAZGVmYXVsdCAnX3NlbGYnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGFyZ2V0OiBIVE1MRm9ybVRhcmdldCA9ICdfc2VsZic7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIVFRQIG1ldGhvZCBvciBzdWJtaXNzaW9uIHN0cmF0ZWd5IGZvciB0aGUgZm9ybS5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyBob3cgdGhlIGZvcm0gc2hvdWxkIGJlIHN1Ym1pdHRlZC4gJ2dldCcgYW5kICdwb3N0JyBjb3JyZXNwb25kXG4gICAqIHRvIHN0YW5kYXJkIEhUVFAgbWV0aG9kcyBmb3IgdHJhZGl0aW9uYWwgZm9ybSBzdWJtaXNzaW9uLCB3aGlsZSAnZXZlbnQnIHVzZXNcbiAgICogQW5ndWxhciBldmVudC1kcml2ZW4gc3VibWlzc2lvbiBmb3Igc2luZ2xlLXBhZ2UgYXBwbGljYXRpb24gd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAdHlwZSB7J2dldCcgfCAncG9zdCcgfCAnZXZlbnQnfVxuICAgKiBAZGVmYXVsdCAnZXZlbnQnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgbWV0aG9kOiAnZ2V0JyB8ICdwb3N0JyB8ICdldmVudCcgPSAnZXZlbnQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ1JVRCBmb3JtIGJlaGF2aW9yLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdGhhdCBjb250cm9sIGZvcm0gcmVuZGVyaW5nLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgYmVoYXZpb3IuIFRoZXNlIG9wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIGRlZmF1bHQgc2V0dGluZ3NcbiAgICogZHVyaW5nIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbiB0byBjdXN0b21pemUgdGhlIGZvcm0ncyBmdW5jdGlvbmFsaXR5LlxuICAgKlxuICAgKiBAdHlwZSB7Q3J1ZEZvcm1PcHRpb25zfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG9wdGlvbnMhOiBDcnVkRm9ybU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBPcHRpb25hbCBhY3Rpb24gaWRlbnRpZmllciBmb3IgZm9ybSBzdWJtaXNzaW9uIGNvbnRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyBhIGN1c3RvbSBhY3Rpb24gbmFtZSB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHN1Ym1pdCBldmVudC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBkZWZhdWx0cyB0byB0aGUgc3RhbmRhcmQgc3VibWl0IGV2ZW50IGNvbnN0YW50LiBVc2VkIHRvXG4gICAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IHR5cGVzIG9mIGZvcm0gc3VibWlzc2lvbnMgd2l0aGluIHRoZSBzYW1lIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBhY3Rpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY3VycmVudCBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBvcGVyYXRpb24gdGhpcyBmb3JtIGlzIGhhbmRsaW5nIChDUkVBVEUsIFJFQUQsIFVQREFURSwgREVMRVRFKS5cbiAgICogVGhpcyBpcyBhIHJlcXVpcmVkIGlucHV0IHRoYXQgZGV0ZXJtaW5lcyBmb3JtIGJlaGF2aW9yLCB2YWxpZGF0aW9uIHJ1bGVzLCBhbmQgYXZhaWxhYmxlIGFjdGlvbnMuXG4gICAqIFRoZSBvcGVyYXRpb24gYWZmZWN0cyBmb3JtIHN0YXRlLCBidXR0b24gdmlzaWJpbGl0eSwgYW5kIHN1Ym1pc3Npb24gbG9naWMuXG4gICAqXG4gICAqIEB0eXBlIHtDcnVkT3BlcmF0aW9uc31cbiAgICogQHJlcXVpcmVkXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3BlcmF0aW9uITogQ3J1ZE9wZXJhdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXN0b20gZXZlbnQgaGFuZGxlcnMgZm9yIGZvcm0gYWN0aW9ucy5cbiAgICogQHN1bW1hcnkgQSByZWNvcmQgb2YgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMga2V5ZWQgYnkgZXZlbnQgbmFtZXMgdGhhdCBjYW4gYmVcbiAgICogdHJpZ2dlcmVkIGR1cmluZyBmb3JtIG9wZXJhdGlvbnMuIFRoZXNlIGhhbmRsZXJzIHByb3ZpZGUgZXh0ZW5zaWJpbGl0eSBmb3JcbiAgICogY3VzdG9tIGJ1c2luZXNzIGxvZ2ljIGFuZCBjYW4gYmUgaW52b2tlZCBmb3IgdmFyaW91cyBmb3JtIGV2ZW50cyBhbmQgYWN0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge0hhbmRsZXJMaWtlfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGhhbmRsZXJzITogSGFuZGxlckxpa2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIHJlYWN0aXZlIEZvcm1Hcm91cCBmb3IgZm9ybSBzdGF0ZSBtYW5hZ2VtZW50LlxuICAgKiBAc3VtbWFyeSBUaGUgRm9ybUdyb3VwIGluc3RhbmNlIHRoYXQgbWFuYWdlcyBhbGwgZm9ybSBjb250cm9scywgdmFsaWRhdGlvbixcbiAgICogYW5kIGZvcm0gc3RhdGUuIFRoaXMgaXMgdGhlIG1haW4gaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgZm9ybSB2YWx1ZXMgYW5kXG4gICAqIGNvbnRyb2xsaW5nIGZvcm0gYmVoYXZpb3IuIE1heSBiZSB1bmRlZmluZWQgZm9yIHJlYWQtb25seSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7Rm9ybUdyb3VwIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhdGggdG8gdGhlIHBhcmVudCBGb3JtR3JvdXAsIGlmIG5lc3RlZC5cbiAgICogQHN1bW1hcnkgRnVsbCBkb3QtZGVsaW1pdGVkIHBhdGggb2YgdGhlIHBhcmVudCBGb3JtR3JvdXAuIFNldCBvbmx5IHdoZW4gaXMgcGFydCBvZiBhIG5lc3RlZCBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgY2hpbGRPZj86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZm9ybSByZW5kZXJlci5cbiAgICogQHN1bW1hcnkgQSB1bmlxdWUgc3RyaW5nIGlkZW50aWZpZXIgdXNlZCB0byByZWdpc3RlciBhbmQgbWFuYWdlIHRoaXMgZm9ybVxuICAgKiBpbnN0YW5jZSB3aXRoaW4gdGhlIE5neEZvcm1TZXJ2aWNlLiBUaGlzIElEIGlzIGFsc28gdXNlZCBhcyB0aGUgSFRNTCBpZFxuICAgKiBhdHRyaWJ1dGUgZm9yIHRoZSBmb3JtIGVsZW1lbnQsIGVuYWJsaW5nIERPTSBxdWVyaWVzIGFuZCBmb3JtIG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcmVuZGVyZXJJZCE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQuXG4gICAqIEBzdW1tYXJ5IEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZCBiZWluZyBkaXNwbGF5ZWQgb3IgbWFuaXB1bGF0ZWQuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJpbWFyeSBrZXkgZm9yIG9wZXJhdGlvbnMgb24gc3BlY2lmaWMgcmVjb3Jkcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IG51bWJlcn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB1aWQ6IHN0cmluZyA9IGdlbmVyYXRlUmFuZG9tVmFsdWUoMTIpO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkIGluc3RhbmNlLlxuICAgKiBAc3VtbWFyeSBUaGlzIHByb3BlcnR5IGhvbGRzIGEgdW5pcXVlIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHNwZWNpZmljIHJlY29yZCBiZWluZyBtYW5hZ2VkIGJ5IHRoZSBmb3JtLlxuICAgKiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQsIGVuc3VyaW5nIGVhY2ggZm9ybSBpbnN0YW5jZSBoYXMgYSBkaXN0aW5jdCBpZGVudGlmaWVyLlxuICAgKiBUaGUgdWlkIGlzIHVzZWQgZm9yIHRyYWNraW5nLCByZWZlcmVuY2luZywgYW5kIGVtaXR0aW5nIGV2ZW50cyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHJlY29yZCwgYW5kIG1heSBiZSB1c2VkXG4gICAqIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByaW1hcnkga2V5IGZvciBDUlVEIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IFJhbmRvbWx5IGdlbmVyYXRlZCAxMi1jaGFyYWN0ZXIgc3RyaW5nXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYWxsb3dDbGVhcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gQ1JVRCBvcGVyYXRpb24gY29uc3RhbnRzIGZvciB0ZW1wbGF0ZSB1c2FnZS5cbiAgICogQHN1bW1hcnkgRXhwb3NlcyB0aGUgT3BlcmF0aW9uS2V5cyBlbnVtIHRvIHRoZSBjb21wb25lbnQgdGVtcGxhdGUsIGVuYWJsaW5nXG4gICAqIGNvbmRpdGlvbmFsIHJlbmRlcmluZyBhbmQgYmVoYXZpb3IgYmFzZWQgb24gb3BlcmF0aW9uIHR5cGVzLiBUaGlzIHByb3RlY3RlZFxuICAgKiByZWFkb25seSBwcm9wZXJ0eSBlbnN1cmVzIHRoYXQgdGVtcGxhdGUgbG9naWMgY2FuIGFjY2VzcyBvcGVyYXRpb24gY29uc3RhbnRzXG4gICAqIHdoaWxlIG1haW50YWluaW5nIGVuY2Fwc3VsYXRpb24gYW5kIHByZXZlbnRpbmcgYWNjaWRlbnRhbCBtb2RpZmljYXRpb24uXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHJlYWRvbmx5XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IE9wZXJhdGlvbktleXMgPSBPcGVyYXRpb25LZXlzO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBmb3JtIHN1Ym1pc3Npb24gZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBDcnVkRm9ybUV2ZW50IG9iamVjdHMgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQsIHByb3ZpZGluZ1xuICAgKiBmb3JtIGRhdGEsIGNvbXBvbmVudCBpbmZvcm1hdGlvbiwgYW5kIGFueSBhc3NvY2lhdGVkIGhhbmRsZXJzIHRvIHBhcmVudFxuICAgKiBjb21wb25lbnRzLiBUaGlzIGVuYWJsZXMgZGVjb3VwbGVkIGhhbmRsaW5nIG9mIGZvcm0gc3VibWlzc2lvbiBsb2dpYy5cbiAgICpcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxDcnVkRm9ybUV2ZW50Pn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgc3VibWl0RXZlbnQ6IEV2ZW50RW1pdHRlcjxDcnVkRm9ybUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q3J1ZEZvcm1FdmVudD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ2dlciBpbnN0YW5jZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgbG9nZ2luZyBjYXBhYmlsaXRpZXMgZm9yIHRoZSBjb21wb25lbnQsIGFsbG93aW5nIGZvciBjb25zaXN0ZW50XG4gICAqIGFuZCBzdHJ1Y3R1cmVkIGxvZ2dpbmcgb2YgaW5mb3JtYXRpb24sIHdhcm5pbmdzLCBhbmQgZXJyb3JzLiBUaGlzIGxvZ2dlciBpcyBpbml0aWFsaXplZFxuICAgKiBpbiB0aGUgbmdPbkluaXQgbWV0aG9kIHVzaW5nIHRoZSBnZXRMb2dnZXIgZnVuY3Rpb24gZnJvbSB0aGUgRm9yQW5ndWxhck1vZHVsZS5cbiAgICpcbiAgICogVGhlIGxvZ2dlciBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvbXBvbmVudCB0byByZWNvcmQgaW1wb3J0YW50IGV2ZW50cywgZGVidWcgaW5mb3JtYXRpb24sXG4gICAqIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJdCBoZWxwcyBpbiBtb25pdG9yaW5nIHRoZSBjb21wb25lbnQncyBiZWhhdmlvciwgdHJhY2tpbmcgdGhlIGZsb3dcbiAgICogb2Ygb3BlcmF0aW9ucywgYW5kIGZhY2lsaXRhdGluZyBlYXNpZXIgZGVidWdnaW5nIGFuZCBtYWludGVuYW5jZS5cbiAgICpcbiAgICogQHR5cGUge0xvZ2dlcn1cbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvZ2dlciE6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgTG9jYXRpb24gc2VydmljZS5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYnJvd3NlcidzIFVSTCBhbmQgaGlzdG9yeS5cbiAgICogVGhpcyBzZXJ2aWNlIGlzIHVzZWQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGJyb3dzZXIncyBoaXN0b3J5IEFQSSwgYWxsb3dpbmdcbiAgICogZm9yIGJhY2sgbmF2aWdhdGlvbiBhbmQgVVJMIG1hbmlwdWxhdGlvbiBvdXRzaWRlIG9mIEFuZ3VsYXIncyByb3V0ZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtMb2NhdGlvbn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG5cbiAgLy8gbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGlmICghW09wZXJhdGlvbktleXMuUkVBRCwgT3BlcmF0aW9uS2V5cy5ERUxFVEVdLmluY2x1ZGVzKHRoaXMub3BlcmF0aW9uKSlcbiAgICAvLyAgIE5neEZvcm1TZXJ2aWNlLmZvcm1BZnRlclZpZXdJbml0KHRoaXMsIHRoaXMucmVuZGVyZXJJZCk7XG4gIC8vIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBpbml0aWFsaXphdGlvbiBsaWZlY3ljbGUgbWV0aG9kLlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGJ5IHNldHRpbmcgdXAgdGhlIGxvZ2dlciwgY29uZmlndXJpbmcgZm9ybSBzdGF0ZVxuICAgKiBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHR5cGUsIGFuZCBtZXJnaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIFJFQUQgYW5kIERFTEVURVxuICAgKiBvcGVyYXRpb25zLCB0aGUgZm9ybUdyb3VwIGlzIHNldCB0byB1bmRlZmluZWQgc2luY2UgdGhlc2Ugb3BlcmF0aW9ucyBkb24ndCByZXF1aXJlXG4gICAqIGZvcm0gaW5wdXQuIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbWVyZ2VkIHdpdGggZGVmYXVsdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmxvZ2dlcilcbiAgICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKHRoaXMpO1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5SRUFEIHx8IHRoaXMub3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLkRFTEVURSlcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zIHx8IHt9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBjbGVhbnVwIGxpZmVjeWNsZSBtZXRob2QuXG4gICAqIEBzdW1tYXJ5IFBlcmZvcm1zIGNsZWFudXAgb3BlcmF0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKiBVbnJlZ2lzdGVycyB0aGUgRm9ybUdyb3VwIGZyb20gdGhlIE5neEZvcm1TZXJ2aWNlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAqIGFuZCBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGNsZWFudXAuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cClcbiAgICAgIE5neEZvcm1TZXJ2aWNlLnVucmVnaXN0ZXIodGhpcy5mb3JtR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGZvcm0gc3VibWlzc2lvbiB3aXRoIHZhbGlkYXRpb24gYW5kIGV2ZW50IGVtaXNzaW9uLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgZm9ybSBzdWJtaXNzaW9uIGJ5IGZpcnN0IHByZXZlbnRpbmcgZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yLFxuICAgKiB0aGVuIHZhbGlkYXRpbmcgYWxsIGZvcm0gZmllbGRzIHVzaW5nIE5neEZvcm1TZXJ2aWNlLiBJZiB2YWxpZGF0aW9uIHBhc3NlcyxcbiAgICogZXh0cmFjdHMgZm9ybSBkYXRhIGFuZCBlbWl0cyBhIHN1Ym1pdEV2ZW50IHdpdGggdGhlIGRhdGEsIGNvbXBvbmVudCBpbmZvcm1hdGlvbixcbiAgICogYW5kIGFueSBhc3NvY2lhdGVkIGhhbmRsZXJzLiBSZXR1cm5zIGZhbHNlIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7U3VibWl0RXZlbnR9IGV2ZW50IC0gVGhlIGJyb3dzZXIncyBuYXRpdmUgZm9ybSBzdWJtaXQgZXZlbnRcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbiB8IHZvaWQ+fSBSZXR1cm5zIGZhbHNlIGlmIHZhbGlkYXRpb24gZmFpbHMsIHZvaWQgaWYgc3VjY2Vzc2Z1bFxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIGFzeW5jIHN1Ym1pdChldmVudDogU3VibWl0RXZlbnQpOiBQcm9taXNlPGJvb2xlYW4gfCB2b2lkPiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIU5neEZvcm1TZXJ2aWNlLnZhbGlkYXRlRmllbGRzKHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZGF0YSA9IE5neEZvcm1TZXJ2aWNlLmdldEZvcm1EYXRhKHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCk7XG4gICAgdGhpcy5zdWJtaXRFdmVudC5lbWl0KHtcbiAgICAgIGRhdGEsXG4gICAgICBjb21wb25lbnQ6ICdDcnVkRm9ybUNvbXBvbmVudCcsXG4gICAgICBuYW1lOiB0aGlzLmFjdGlvbiB8fCBFdmVudENvbnN0YW50cy5TVUJNSVQsXG4gICAgICBoYW5kbGVyczogdGhpcy5oYW5kbGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBmb3JtIHJlc2V0IG9yIG5hdmlnYXRpb24gYmFjayBmdW5jdGlvbmFsaXR5LlxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBkaWZmZXJlbnQgcmVzZXQgYmVoYXZpb3IgYmFzZWQgb24gdGhlIGN1cnJlbnQgb3BlcmF0aW9uLlxuICAgKiBGb3IgQ1JFQVRFIGFuZCBVUERBVEUgb3BlcmF0aW9ucywgcmVzZXRzIHRoZSBmb3JtIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuICAgKiBGb3IgUkVBRCBhbmQgREVMRVRFIG9wZXJhdGlvbnMsIG5hdmlnYXRlcyBiYWNrIGluIHRoZSBicm93c2VyIGhpc3RvcnlcbiAgICogc2luY2UgdGhlc2Ugb3BlcmF0aW9ucyBkb24ndCBoYXZlIG1vZGlmaWFibGUgZm9ybSBkYXRhIHRvIHJlc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVSZXNldCgpOiB2b2lkIHtcbiAgICBpZighW09wZXJhdGlvbktleXMuREVMRVRFLCBPcGVyYXRpb25LZXlzLlJFQURdLmluY2x1ZGVzKHRoaXMub3BlcmF0aW9uKSAmJiB0aGlzLmFsbG93Q2xlYXIpXG4gICAgICByZXR1cm4gTmd4Rm9ybVNlcnZpY2UucmVzZXQodGhpcy5mb3JtR3JvdXAgYXMgRm9ybUdyb3VwKTtcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBkZWxldGUgb3BlcmF0aW9ucyBieSBlbWl0dGluZyBkZWxldGUgZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgZGVsZXRlIHJlcXVlc3RzIGJ5IGVtaXR0aW5nIGEgc3VibWl0IGV2ZW50IHdpdGggdGhlXG4gICAqIHJlY29yZCdzIHVuaXF1ZSBpZGVudGlmaWVyIGFzIGRhdGEuIFRoaXMgYWxsb3dzIHBhcmVudCBjb21wb25lbnRzIHRvXG4gICAqIGhhbmRsZSB0aGUgYWN0dWFsIGRlbGV0aW9uIGxvZ2ljIHdoaWxlIG1haW50YWluaW5nIHNlcGFyYXRpb24gb2YgY29uY2VybnMuXG4gICAqIFRoZSBldmVudCBpbmNsdWRlcyB0aGUgdWlkIGFuZCBzdGFuZGFyZCBjb21wb25lbnQgaWRlbnRpZmljYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIGhhbmRsZURlbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Ym1pdEV2ZW50LmVtaXQoe1xuICAgICAgZGF0YTogdGhpcy5tb2RlbElkLFxuICAgICAgY29tcG9uZW50OiAnQ3J1ZEZvcm1Db21wb25lbnQnLFxuICAgICAgbmFtZTogRXZlbnRDb25zdGFudHMuU1VCTUlULFxuICAgIH0pO1xuICB9XG5cbn1cbiIsIkBpZihvcGVyYXRpb24gIT09ICdyZWFkJyAmJiBvcGVyYXRpb24gIT09ICdkZWxldGUnKSB7XG4gIDxmb3JtICNyZWFjdGl2ZUZvcm0gW2lkXT1cInJlbmRlcmVySWRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChzdWJtaXQpPVwic3VibWl0KCRldmVudClcIiBub3ZhbGlkYXRlIFt0YXJnZXRdPVwidGFyZ2V0XCI+XG4gICAgPG5nLWNvbnRlbnQgI2Zvcm1Db250ZW50PjwvbmctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiZGNmLWJ1dHRvbnMtY29udGFpbmVyIGRjZi1ncmlkIGRjZi1ncmlkLWNvbGxhcHNlIGRjZi1mbGV4IGRjZi1mbGV4LWxlZnRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgYWN0aW9uID8gYWN0aW9uIDogb3B0aW9ucy5idXR0b25zLnN1Ym1pdC50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYoIWFjdGlvbikge1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJoYW5kbGVSZXNldCgpXCI+XG4gICAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvbiAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBCYWNrXG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxufSBAZWxzZSB7XG4gIDxkaXYgW2NsYXNzXT1cIidkY2YtYnV0dG9ucy1jb250YWluZXIgZGNmLWdyaWQgZGNmLWdyaWQtY29sbGFwc2UgZGNmLWZsZXggZGNmLWZsZXgtbGVmdCAnICsgb3BlcmF0aW9uXCIgW2lkXT1cInVpZFwiPlxuICAgIEBpZihvcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuUkVBRCAmJiBtb2RlbElkKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVEZWxldGUoKVwiXG4gICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIERlbGV0ZVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgIH1cbiAgICBAaWYob3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLkNSRUFURSB8fCBvcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuVVBEQVRFKSB7XG5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3tvcHRpb25zLmJ1dHRvbnMuc3VibWl0LnRleHR9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyKSB7XG4gICAgICA8ZGl2PlxuICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJoYW5kbGVSZXNldCgpXCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uICBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgW09wZXJhdGlvbktleXMuREVMRVRFLCBPcGVyYXRpb25LZXlzLlJFQUQsIE9wZXJhdGlvbktleXMuVVBEQVRFXS5pbmNsdWRlcyhvcGVyYXRpb24pID8gJ0JhY2snIDogb3B0aW9ucy5idXR0b25zLmNsZWFyPy50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICB9XG4gIDwvZGl2PlxufVxuXG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { Component, inject, Input } from '@angular/core';
|
|
3
|
-
import { IonCard, IonCardContent, IonIcon, IonTitle
|
|
3
|
+
import { IonCard, IonCardContent, IonIcon, IonTitle } from '@ionic/angular/standalone';
|
|
4
4
|
import * as allIcons from 'ionicons/icons';
|
|
5
5
|
import { addIcons } from 'ionicons';
|
|
6
6
|
import { ForAngularModule } from '../../for-angular.module';
|
|
@@ -9,6 +9,7 @@ import { stringToBoolean } from '../../helpers';
|
|
|
9
9
|
import { NgxBaseComponent } from '../../engine/NgxBaseComponent';
|
|
10
10
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
11
11
|
import { TranslateService } from '@ngx-translate/core';
|
|
12
|
+
import { Router } from '@angular/router';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
import * as i1 from "@ionic/angular/standalone";
|
|
14
15
|
import * as i2 from "@angular/common";
|
|
@@ -30,14 +31,14 @@ import * as i2 from "@angular/common";
|
|
|
30
31
|
* +StringOrBoolean showIcon
|
|
31
32
|
* +string icon
|
|
32
33
|
* +string iconSize
|
|
33
|
-
* +
|
|
34
|
+
* +string iconColor
|
|
34
35
|
* +string|Function buttonLink
|
|
35
36
|
* +string buttonText
|
|
36
37
|
* +string buttonFill
|
|
37
|
-
* +
|
|
38
|
+
* +string buttonColor
|
|
38
39
|
* +string buttonSize
|
|
39
40
|
* +string searchValue
|
|
40
|
-
* -
|
|
41
|
+
* -Router Router
|
|
41
42
|
* +ngOnInit()
|
|
42
43
|
* +handleClick()
|
|
43
44
|
* }
|
|
@@ -159,7 +160,7 @@ let EmptyStateComponent = class EmptyStateComponent extends NgxBaseComponent {
|
|
|
159
160
|
* @summary Specifies the color for the button using Ionic's color system.
|
|
160
161
|
* This allows the button to match the application's color scheme.
|
|
161
162
|
*
|
|
162
|
-
* @type {
|
|
163
|
+
* @type {string}
|
|
163
164
|
* @default 'primary'
|
|
164
165
|
* @memberOf EmptyStateComponent
|
|
165
166
|
*/
|
|
@@ -180,10 +181,10 @@ let EmptyStateComponent = class EmptyStateComponent extends NgxBaseComponent {
|
|
|
180
181
|
* This service is used when the buttonLink is a string URL to navigate to that location.
|
|
181
182
|
*
|
|
182
183
|
* @private
|
|
183
|
-
* @type {
|
|
184
|
+
* @type {Router}
|
|
184
185
|
* @memberOf EmptyStateComponent
|
|
185
186
|
*/
|
|
186
|
-
this.
|
|
187
|
+
this.router = inject(Router);
|
|
187
188
|
this.sanitizer = inject(DomSanitizer);
|
|
188
189
|
this.translate = inject(TranslateService);
|
|
189
190
|
addIcons(allIcons);
|
|
@@ -242,7 +243,7 @@ let EmptyStateComponent = class EmptyStateComponent extends NgxBaseComponent {
|
|
|
242
243
|
* sequenceDiagram
|
|
243
244
|
* participant U as User
|
|
244
245
|
* participant E as EmptyStateComponent
|
|
245
|
-
* participant N as
|
|
246
|
+
* participant N as Router
|
|
246
247
|
*
|
|
247
248
|
* U->>E: Click action button
|
|
248
249
|
* E->>E: handleClick()
|
|
@@ -269,7 +270,7 @@ let EmptyStateComponent = class EmptyStateComponent extends NgxBaseComponent {
|
|
|
269
270
|
return false;
|
|
270
271
|
if (fn instanceof Function)
|
|
271
272
|
return fn();
|
|
272
|
-
|
|
273
|
+
this.router.navigate([fn]);
|
|
273
274
|
}
|
|
274
275
|
/**
|
|
275
276
|
* @description Generates a localized and sanitized subtitle for search results.
|
|
@@ -345,4 +346,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
345
346
|
}], searchValue: [{
|
|
346
347
|
type: Input
|
|
347
348
|
}] } });
|
|
348
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLE9BQU8sRUFDUCxRQUFRLEVBQ1IsYUFBYSxFQUNkLE1BQ0ksMkJBQTJCLENBQUM7QUFDakMsT0FBTyxLQUFLLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQW1CLE1BQU0sY0FBYyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBSXZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBZ0JJLElBQU0sbUJBQW1CLEdBQXpCLE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBa012RDs7Ozs7OztPQU9HO0lBQ0g7UUFDRSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQXpNL0I7Ozs7Ozs7OztXQVNH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LGthRDRCSSxnQkFBZ0IsNlhBQ2hCLE9BQU8seUxBQ1AsY0FBYywrRUFFZCxPQUFPOztBQUlFLG1CQUFtQjtJQWYvQixPQUFPLEVBQUU7O0dBZUcsbUJBQW1CLENBb1UvQjs7NEZBcFVZLG1CQUFtQjtrQkFkL0IsU0FBUzsrQkFDRSx1QkFBdUIsY0FHckIsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIsT0FBTzt3QkFDUCxjQUFjO3dCQUNkLFFBQVE7d0JBQ1IsT0FBTztxQkFDUjt3REFnQkQsS0FBSztzQkFESixLQUFLO2dCQWNOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixRQUFRO3NCQURQLEtBQUs7Z0JBY04sYUFBYTtzQkFEWixLQUFLO2dCQWNOLFFBQVE7c0JBRFAsS0FBSztnQkFjTixJQUFJO3NCQURILEtBQUs7Z0JBYU4sUUFBUTtzQkFEUCxLQUFLO2dCQWFOLFNBQVM7c0JBRFIsS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQWNOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixXQUFXO3NCQURWLEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFdBQVc7c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0ICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sb3IsIFByZWRlZmluZWRDb2xvcnMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQge1xuICBJb25DYXJkLFxuICBJb25DYXJkQ29udGVudCxcbiAgSW9uSWNvbixcbiAgSW9uVGl0bGUsXG4gIE5hdkNvbnRyb2xsZXJcbn1cbmZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0ICogYXMgYWxsSWNvbnMgZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IER5bmFtaWMsIFN0cmluZ09yQm9vbGVhbiB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBzdHJpbmdUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGdW5jdGlvbkxpa2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvdHlwZXMnO1xuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBmb3IgZGlzcGxheWluZyBlbXB0eSBzdGF0ZSBtZXNzYWdlcyB3aXRoIG9wdGlvbmFsIGFjdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIHN0YW5kYXJkaXplZCB3YXkgdG8gZGlzcGxheSBlbXB0eSBzdGF0ZSBtZXNzYWdlc1xuICogd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZSBvciB3aGVuIGEgdXNlciBuZWVkcyB0byB0YWtlIGFuIGFjdGlvbiB0byBwb3B1bGF0ZSBjb250ZW50LlxuICogSXQgaW5jbHVkZXMgY3VzdG9taXphYmxlIHRpdGxlLCBzdWJ0aXRsZSwgaWNvbiwgYW5kIGFjdGlvbiBidXR0b24gZWxlbWVudHMgdGhhdCBjYW4gYmVcbiAqIHN0eWxlZCBhbmQgY29uZmlndXJlZCB0aHJvdWdoIGlucHV0IHByb3BlcnRpZXMuIFRoZSBjb21wb25lbnQgc3VwcG9ydHMgbG9jYWxpemF0aW9uXG4gKiBhbmQgY2FuIHRyaWdnZXIgbmF2aWdhdGlvbiBvciBjdXN0b20gYWN0aW9ucyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAbWVybWFpZFxuICogY2xhc3NEaWFncmFtXG4gKiAgIGNsYXNzIEVtcHR5U3RhdGVDb21wb25lbnQge1xuICogICAgICtzdHJpbmcgdGl0bGVcbiAqICAgICArc3RyaW5nIHRpdGxlQ29sb3JcbiAqICAgICArc3RyaW5nIHN1YnRpdGxlXG4gKiAgICAgK3N0cmluZyBzdWJ0aXRsZUNvbG9yXG4gKiAgICAgK1N0cmluZ09yQm9vbGVhbiBzaG93SWNvblxuICogICAgICtzdHJpbmcgaWNvblxuICogICAgICtzdHJpbmcgaWNvblNpemVcbiAqICAgICArUHJlZGVmaW5lZENvbG9ycyBpY29uQ29sb3JcbiAqICAgICArc3RyaW5nfEZ1bmN0aW9uIGJ1dHRvbkxpbmtcbiAqICAgICArc3RyaW5nIGJ1dHRvblRleHRcbiAqICAgICArc3RyaW5nIGJ1dHRvbkZpbGxcbiAqICAgICArQ29sb3IgYnV0dG9uQ29sb3JcbiAqICAgICArc3RyaW5nIGJ1dHRvblNpemVcbiAqICAgICArc3RyaW5nIHNlYXJjaFZhbHVlXG4gKiAgICAgLU5hdkNvbnRyb2xsZXIgbmF2Q29udHJvbGxlclxuICogICAgICtuZ09uSW5pdCgpXG4gKiAgICAgK2hhbmRsZUNsaWNrKClcbiAqICAgfVxuICogICBFbXB0eVN0YXRlQ29tcG9uZW50IC0tfD4gTmd4QmFzZUNvbXBvbmVudFxuICogICBFbXB0eVN0YXRlQ29tcG9uZW50IC0tfD4gT25Jbml0XG4gKlxuICogQGV4dGVuZHMge05neEJhc2VDb21wb25lbnR9XG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxuICovXG5ARHluYW1pYygpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtZW1wdHktc3RhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZW1wdHktc3RhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbXB0eS1zdGF0ZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9yQW5ndWxhck1vZHVsZSxcbiAgICBJb25DYXJkLFxuICAgIElvbkNhcmRDb250ZW50LFxuICAgIElvblRpdGxlLFxuICAgIElvbkljb25cbiAgXVxuXG59KVxuZXhwb3J0IGNsYXNzIEVtcHR5U3RhdGVDb21wb25lbnQgZXh0ZW5kcyBOZ3hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtYWluIHRpdGxlIGRpc3BsYXllZCBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgcHJpbWFyeSBtZXNzYWdlIHRvIHNob3cgaW4gdGhlIGVtcHR5IHN0YXRlIGNvbXBvbmVudC5cbiAgICogVGhpcyB0ZXh0IGlzIHR5cGljYWxseSB1c2VkIHRvIGluZm9ybSB0aGUgdXNlciBhYm91dCB3aHkgdGhleSdyZSBzZWVpbmcgYW4gZW1wdHkgdmlldy5cbiAgICogSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIHRoaXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGUgbG9jYWxpemF0aW9uIHN5c3RlbS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgXCJ0aXRsZVwiXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB0aXRsZTogc3RyaW5nID0gXCJ0aXRsZVwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSB0aXRsZSB0ZXh0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgdGl0bGUgdGV4dCB1c2luZyB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgY29ycmVzcG9uZCB0byBhIGNvbG9yIHZhcmlhYmxlIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgdGhlbWUuXG4gICAqIFRoZSBjb21wb25lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWZpeCB0aGlzIHdpdGggXCJjb2xvci1cIiB0byBjcmVhdGUgdGhlIENTUyBjbGFzcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2dyYXktNidcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlQ29sb3IgPSAnZ3JheS02JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzZWNvbmRhcnkgbWVzc2FnZSBkaXNwbGF5ZWQgaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBhZGRpdGlvbmFsIGNvbnRleHQgb3IgaW5zdHJ1Y3Rpb25zIGJlbG93IHRoZSBtYWluIHRpdGxlLlxuICAgKiBUaGlzIHRleHQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZ3VpZGUgdGhlIHVzZXIgb24gd2hhdCBhY3Rpb25zIHRoZXkgY2FuIHRha2UuXG4gICAqIElmIHRyYW5zbGF0YWJsZSBpcyB0cnVlLCB0aGlzIHdpbGwgYmUgcHJvY2Vzc2VkIHRocm91Z2ggdGhlIGxvY2FsaXphdGlvbiBzeXN0ZW0uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzdWJ0aXRsZTogc3RyaW5nID0gXCJcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjb2xvciBvZiB0aGUgc3VidGl0bGUgdGV4dC5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBjb2xvciBmb3IgdGhlIHN1YnRpdGxlIHRleHQgdXNpbmcgdGhlIGFwcGxpY2F0aW9uJ3MgY29sb3Igc3lzdGVtLlxuICAgKiBUaGUgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSBjb2xvciB2YXJpYWJsZSBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbidzIHRoZW1lLlxuICAgKiBUaGUgY29tcG9uZW50IHdpbGwgYXV0b21hdGljYWxseSBwcmVmaXggdGhpcyB3aXRoIFwiY29sb3ItXCIgdG8gY3JlYXRlIHRoZSBDU1MgY2xhc3MuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdncmF5LTQnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzdWJ0aXRsZUNvbG9yOiBzdHJpbmcgPSAnZ3JheS00JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIHdoZXRoZXIgdGhlIGljb24gaXMgZGlzcGxheWVkLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIGlmIHRoZSB2aXN1YWwgaWNvbiBzaG91bGQgYmUgc2hvd24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBUaGlzIGNhbiBiZSBwcm92aWRlZCBhcyBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAqIEljb25zIGhlbHAgdmlzdWFsbHkgY29tbXVuaWNhdGUgdGhlIGVtcHR5IHN0YXRlIGNvbnRleHQgdG8gdXNlcnMuXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmdPckJvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNob3dJY29uOiBTdHJpbmdPckJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG5hbWUgb2YgdGhlIGljb24gdG8gZGlzcGxheS5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoaWNoIGljb24gdG8gc2hvdyB3aGVuIHNob3dJY29uIGlzIHRydWUuXG4gICAqIFRoZSBjb21wb25lbnQgdXNlcyB0aGUgaWNvbiBzeXN0ZW0gZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24sXG4gICAqIGFuZCB0aGlzIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIGFuIGF2YWlsYWJsZSBpY29uIG5hbWUuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IFwidGktaW5mby1zcXVhcmUtcm91bmRlZFwiXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBpY29uOiBzdHJpbmcgPSBcInRpLWluZm8tc3F1YXJlLXJvdW5kZWRcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaXplIG9mIHRoZSBkaXNwbGF5ZWQgaWNvbi5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGljb24gc2hvd24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBDYW4gYmUgZWl0aGVyICdsYXJnZScgb3IgJ3NtYWxsJyB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgbGF5b3V0IG5lZWRzLlxuICAgKlxuICAgKiBAdHlwZSB7J2xhcmdlJyB8ICdzbWFsbCcgfCB1bmRlZmluZWR9XG4gICAqIEBkZWZhdWx0ICdsYXJnZSdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb25TaXplPzogJ2xhcmdlJyB8ICdzbWFsbCcgPSAnbGFyZ2UnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBkaXNwbGF5ZWQgaWNvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBjb2xvciBmb3IgdGhlIGljb24gdXNpbmcgSW9uaWMncyBwcmVkZWZpbmVkIGNvbG9yIHN5c3RlbS5cbiAgICogVGhpcyBhbGxvd3MgdGhlIGljb24gdG8gbWF0Y2ggdGhlIGFwcGxpY2F0aW9uJ3MgY29sb3Igc2NoZW1lLlxuICAgKlxuICAgKiBAdHlwZSB7UHJlZGVmaW5lZENvbG9ycyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb25Db2xvcj86IFByZWRlZmluZWRDb2xvcnMgPSAnbWVkaXVtJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCBvciBhY3Rpb24gZm9yIHRoZSBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGVyZSB0aGUgYnV0dG9uIHNob3VsZCBuYXZpZ2F0ZSB0byB3aGVuIGNsaWNrZWQgb3Igd2hhdCBmdW5jdGlvblxuICAgKiBpdCBzaG91bGQgZXhlY3V0ZS4gVGhpcyBjYW4gYmUgZWl0aGVyIGEgVVJMIHN0cmluZyBvciBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBuYXZpZ2F0aW9uLlxuICAgKiBXaGVuIG5vdCBwcm92aWRlZCwgdGhlIGJ1dHRvbiB3aWxsIG5vdCBwZXJmb3JtIGFueSBhY3Rpb24uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBGdW5jdGlvbkxpa2UgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25MaW5rPzogc3RyaW5nIHwgRnVuY3Rpb25MaWtlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHRleHQgZGlzcGxheWVkIG9uIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGxhYmVsIGZvciB0aGUgYWN0aW9uIGJ1dHRvbiBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIElmIHRyYW5zbGF0YWJsZSBpcyB0cnVlLCB0aGlzIHdpbGwgYmUgcHJvY2Vzc2VkIHRocm91Z2ggdGhlIGxvY2FsaXphdGlvbiBzeXN0ZW0uXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGJ1dHRvbiB3aWxsIG5vdCBkaXNwbGF5IGFueSB0ZXh0LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBmaWxsIHN0eWxlIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgdmlzdWFsIHN0eWxlIG9mIHRoZSBidXR0b24gdXNpbmcgSW9uaWMncyBidXR0b24gZmlsbCBvcHRpb25zLlxuICAgKiAnc29saWQnIGNyZWF0ZXMgYSBidXR0b24gd2l0aCBhIHNvbGlkIGJhY2tncm91bmQsICdvdXRsaW5lJyBjcmVhdGVzIGEgYnV0dG9uIHdpdGhcbiAgICoganVzdCBhIGJvcmRlciwgYW5kICdjbGVhcicgY3JlYXRlcyBhIGJ1dHRvbiB3aXRoIG5vIGJhY2tncm91bmQgb3IgYm9yZGVyLlxuICAgKlxuICAgKiBAdHlwZSB7J2NsZWFyJyB8ICdzb2xpZCcgfCAnb3V0bGluZSd9XG4gICAqIEBkZWZhdWx0ICdzb2xpZCdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkZpbGw6ICdjbGVhcicgfCAnc29saWQnIHwgJ291dGxpbmUnID0gICdzb2xpZCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSBidXR0b24gdXNpbmcgSW9uaWMncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoaXMgYWxsb3dzIHRoZSBidXR0b24gdG8gbWF0Y2ggdGhlIGFwcGxpY2F0aW9uJ3MgY29sb3Igc2NoZW1lLlxuICAgKlxuICAgKiBAdHlwZSB7Q29sb3J9XG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uQ29sb3I6IENvbG9yID0gICdwcmltYXJ5JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaXplIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgYnV0dG9uIHNob3duIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQ2FuIGJlICdsYXJnZScsICdzbWFsbCcsIG9yICdkZWZhdWx0JyB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgbGF5b3V0IG5lZWRzLlxuICAgKlxuICAgKiBAdHlwZSB7J2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCd9XG4gICAqIEBkZWZhdWx0ICdkZWZhdWx0J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uU2l6ZTogJ2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCcgPSAgJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlYXJjaCB2YWx1ZSB0aGF0IHJlc3VsdGVkIGluIG5vIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFdoZW4gdGhlIGVtcHR5IHN0YXRlIGlzIHNob3duIGR1ZSB0byBhIHNlYXJjaCB3aXRoIG5vIHJlc3VsdHMsXG4gICAqIHRoaXMgcHJvcGVydHkgY2FuIGhvbGQgdGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWQuIFRoaXMgY2FuIGJlIGRpc3BsYXllZFxuICAgKiBpbiB0aGUgZW1wdHkgc3RhdGUgbWVzc2FnZSB0byBwcm92aWRlIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hWYWx1ZSE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNlcnZpY2UgZm9yIGhhbmRsaW5nIG5hdmlnYXRpb24gb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIG5hdmlnYXRpbmcgYmV0d2VlbiByb3V0ZXMuXG4gICAqIFRoaXMgc2VydmljZSBpcyB1c2VkIHdoZW4gdGhlIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcgVVJMIHRvIG5hdmlnYXRlIHRvIHRoYXQgbG9jYXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtOYXZDb250cm9sbGVyfVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBuYXZDb250cm9sbGVyOiBOYXZDb250cm9sbGVyID0gaW5qZWN0KE5hdkNvbnRyb2xsZXIpO1xuXG4gIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcblxuICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBzZWFyY2hTdWJ0aXRsZSE6IFNhZmVIdG1sXG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRW1wdHlTdGF0ZUNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgRW1wdHlTdGF0ZUNvbXBvbmVudCBieSBjYWxsaW5nIHRoZSBwYXJlbnQgY2xhc3MgY29uc3RydWN0b3JcbiAgICogd2l0aCB0aGUgY29tcG9uZW50IG5hbWUgZm9yIGxvZ2dpbmcgYW5kIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzLiBUaGlzIGNvbXBvbmVudCBwcm92aWRlc1xuICAgKiBhIHN0YW5kYXJkaXplZCB3YXkgdG8gZGlzcGxheSBlbXB0eSBzdGF0ZSBtZXNzYWdlcyB3aXRoIG9wdGlvbmFsIGljb25zIGFuZCBhY3Rpb24gYnV0dG9ucy5cbiAgICpcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRW1wdHlTdGF0ZUNvbXBvbmVudFwiKTtcbiAgICBhZGRJY29ucyhhbGxJY29ucyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYWZ0ZXIgQW5ndWxhciBmaXJzdCBkaXNwbGF5cyB0aGUgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBTZXRzIHVwIHRoZSBjb21wb25lbnQgYnkgcHJvY2Vzc2luZyBib29sZWFuIGlucHV0cywgYXBwbHlpbmcgbG9jYWxpemF0aW9uIHRvIHRleHRcbiAgICogZWxlbWVudHMgaWYgdHJhbnNsYXRpb24gaXMgZW5hYmxlZCwgYW5kIGZvcm1hdHRpbmcgQ1NTIGNsYXNzZXMgZm9yIHRpdGxlIGFuZCBzdWJ0aXRsZSBjb2xvcnMuXG4gICAqIFRoaXMgbWV0aG9kIHByZXBhcmVzIHRoZSBjb21wb25lbnQgZm9yIHVzZXIgaW50ZXJhY3Rpb24gYnkgZW5zdXJpbmcgYWxsIHByb3BlcnRpZXMgYXJlXG4gICAqIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBsb2NhbGl6ZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBFIGFzIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICpcbiAgICogICBBLT4+RTogbmdPbkluaXQoKVxuICAgKiAgIEUtPj5FOiBQcm9jZXNzIHRyYW5zbGF0YWJsZSBmbGFnXG4gICAqICAgRS0+PkU6IFByb2Nlc3Mgc2hvd0ljb24gZmxhZ1xuICAgKiAgIEUtPj5FOiBHZXQgbG9jYWxlIHNldHRpbmdzXG4gICAqICAgYWx0IHRyYW5zbGF0YWJsZSBpcyB0cnVlXG4gICAqICAgICBFLT4+RTogTG9jYWxpemUgdGl0bGVcbiAgICogICAgIEUtPj5FOiBMb2NhbGl6ZSBzdWJ0aXRsZVxuICAgKiAgICAgRS0+PkU6IExvY2FsaXplIGJ1dHRvblRleHRcbiAgICogICBlbmRcbiAgICogICBFLT4+RTogRm9ybWF0IHRpdGxlIENTUyBjbGFzc1xuICAgKiAgIEUtPj5FOiBGb3JtYXQgc3VidGl0bGUgQ1NTIGNsYXNzXG4gICAqXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnBhcnNlUHJvcHModGhpcyk7XG4gICAgdGhpcy50cmFuc2xhdGFibGUgPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy50cmFuc2xhdGFibGUpO1xuICAgIHRoaXMuc2hvd0ljb24gPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy5zaG93SWNvbik7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLmdldExvY2FsZSh0aGlzLnRyYW5zbGF0YWJsZSk7XG5cbiAgICAvLyBpZih0aGlzLnRyYW5zbGF0YWJsZSkge1xuICAgIC8vICAgdGhpcy50aXRsZSA9IGdlbmVyYXRlTG9jYWxlRnJvbVN0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy50aXRsZSk7XG4gICAgLy8gICB0aGlzLnN1YnRpdGxlID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLnN1YnRpdGxlKTtcbiAgICAvLyAgIHRoaXMuYnV0dG9uVGV4dCA9IGdlbmVyYXRlTG9jYWxlRnJvbVN0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy5idXR0b25UZXh0KTtcbiAgICAvLyB9XG5cbiAgICB0aGlzLnRpdGxlQ29sb3IgPSBgZGNmLXRpdGxlIGNvbG9yLSR7dGhpcy50aXRsZUNvbG9yfWA7XG4gICAgdGhpcy5zdWJ0aXRsZUNvbG9yID0gYGRjZi1zdWJ0aXRsZSBjb2xvci0ke3RoaXMudGl0bGVDb2xvcn1gO1xuXG4gICAgaWYodGhpcy5zZWFyY2hWYWx1ZSAmJiB0aGlzLnRyYW5zbGF0YWJsZSlcbiAgICAgIHRoaXMuc2VhcmNoU3VidGl0bGUgPSBhd2FpdCB0aGlzLmdldFNlYXJjaFN1YnRpdGxlKHRoaXMuc3VidGl0bGUgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBjbGljayBldmVudHMgb24gdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgYWN0aW9uIGJ1dHRvbiBpbiB0aGUgZW1wdHkgc3RhdGVcbiAgICogY29tcG9uZW50LiBJdCBzdXBwb3J0cyB0aHJlZSBuYXZpZ2F0aW9uIHBhdHRlcm5zOiAxKSBubyBhY3Rpb24gd2hlbiBidXR0b25MaW5rIGlzIG5vdCBwcm92aWRlZCxcbiAgICogMikgY3VzdG9tIGZ1bmN0aW9uIGV4ZWN1dGlvbiB3aGVuIGJ1dHRvbkxpbmsgaXMgYSBmdW5jdGlvbiwgYW5kIDMpIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpYyBVUkxcbiAgICogd2hlbiBidXR0b25MaW5rIGlzIGEgc3RyaW5nLiBUaGlzIGZsZXhpYmlsaXR5IGFsbG93cyB0aGUgZW1wdHkgc3RhdGUgdG8gdHJpZ2dlciB2YXJpb3VzIGFjdGlvbnNcbiAgICogYmFzZWQgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB1c2VkLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBFIGFzIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBOIGFzIE5hdkNvbnRyb2xsZXJcbiAgICpcbiAgICogICBVLT4+RTogQ2xpY2sgYWN0aW9uIGJ1dHRvblxuICAgKiAgIEUtPj5FOiBoYW5kbGVDbGljaygpXG4gICAqICAgYWx0IGJ1dHRvbkxpbmsgaXMgbm90IHByb3ZpZGVkXG4gICAqICAgICBFLS0+PlU6IFJldHVybiBmYWxzZSAobm8gYWN0aW9uKVxuICAgKiAgIGVsc2UgYnV0dG9uTGluayBpcyBhIGZ1bmN0aW9uXG4gICAqICAgICBFLT4+RTogRXhlY3V0ZSBidXR0b25MaW5rIGZ1bmN0aW9uXG4gICAqICAgICBFLS0+PlU6IFJldHVybiBmdW5jdGlvbiByZXN1bHRcbiAgICogICBlbHNlIGJ1dHRvbkxpbmsgaXMgYSBVUkwgc3RyaW5nXG4gICAqICAgICBFLT4+TjogbmF2aWdhdGVGb3J3YXJkKGJ1dHRvbkxpbmspXG4gICAqICAgICBOLS0+PkU6IFJldHVybiBuYXZpZ2F0aW9uIHJlc3VsdFxuICAgKiAgICAgRS0tPj5VOiBSZXR1cm4gbmF2aWdhdGlvbiByZXN1bHRcbiAgICogICBlbmRcbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4+fVxuICAgKiAgIC0gZmFsc2UgaWYgbm8gYWN0aW9uIGlzIHRha2VuXG4gICAqICAgLSBUaGUgcmVzdWx0IG9mIHRoZSBidXR0b25MaW5rIGZ1bmN0aW9uIGlmIGl0J3MgYSBmdW5jdGlvblxuICAgKiAgIC0gQSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgbmF2aWdhdGlvbiByZXN1bHQgaWYgYnV0dG9uTGluayBpcyBhIFVSTFxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlQ2xpY2soKTogYm9vbGVhbiB8IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBmbiA9IHRoaXMuYnV0dG9uTGluaztcbiAgICBpZighZm4pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYoZm4gaW5zdGFuY2VvZiBGdW5jdGlvbilcbiAgICAgIHJldHVybiBmbigpO1xuICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKGZuIGFzIHN0cmluZyk7XG4gIH1cblxuXG4gLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBsb2NhbGl6ZWQgYW5kIHNhbml0aXplZCBzdWJ0aXRsZSBmb3Igc2VhcmNoIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgY29udGVudCBzdHJpbmcsIHR5cGljYWxseSB0aGUgc3VidGl0bGUsIGFuZCBwcm9jZXNzZXMgaXRcbiAgICogdGhyb3VnaCB0aGUgdHJhbnNsYXRpb24gc2VydmljZS4gSXQgcmVwbGFjZXMgYSBwbGFjZWhvbGRlciAoJ3ZhbHVlMCcpIHdpdGggdGhlIGFjdHVhbFxuICAgKiBzZWFyY2ggdmFsdWUsIHRoZW4gc2FuaXRpemVzIHRoZSByZXN1bHQgdG8gc2FmZWx5IHVzZSBhcyBIVE1MLiBUaGlzIGlzIHBhcnRpY3VsYXJseVxuICAgKiB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgZHluYW1pYywgbG9jYWxpemVkIG1lc3NhZ2VzIGluIHRoZSBlbXB0eSBzdGF0ZSB3aGVuIGEgc2VhcmNoXG4gICAqIHlpZWxkcyBubyByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IHN0cmluZyB0byBiZSB0cmFuc2xhdGVkIGFuZCBwcm9jZXNzZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxTYWZlSHRtbD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgc2FuaXRpemVkIEhUTUwgc3RyaW5nXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgVHJhbnNsYXRlU2VydmljZVxuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgRG9tU2FuaXRpemVyXG4gICAqXG4gICAqICAgRS0+PlQ6IGluc3RhbnQoY29udGVudCwgeyd2YWx1ZTAnOiBzZWFyY2hWYWx1ZX0pXG4gICAqICAgVC0tPj5FOiBSZXR1cm4gdHJhbnNsYXRlZCBzdHJpbmdcbiAgICogICBFLT4+UzogYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodHJhbnNsYXRlZFN0cmluZylcbiAgICogICBTLS0+PkU6IFJldHVybiBzYW5pdGl6ZWQgU2FmZUh0bWxcbiAgICpcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIGdldFNlYXJjaFN1YnRpdGxlKGNvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8U2FmZUh0bWw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGNvbnRlbnQsIHsndmFsdWUwJzogdGhpcy5zZWFyY2hWYWx1ZX0pO1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChyZXN1bHQpO1xuICB9XG59XG4iLCJcbjxpb24tY2FyZCBbaWRdPVwidWlkXCIgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCI+XG4gIDxpb24tY2FyZC1jb250ZW50PlxuICAgIEBpZihpY29uICYmIHNob3dJY29uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLWljb24tY29udGFpbmVyXCI+XG4gICAgICAgIDxpb24taWNvblxuICAgICAgICAgIG5hbWU9XCJhbGVydC1jaXJjbGUtb3V0bGluZVwiXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYodGl0bGUpIHtcbiAgICAgIDxoNSBbY2xhc3NdPVwidGl0bGVDb2xvclwiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2g1PlxuICAgIH1cbiAgICBAaWYoc3VidGl0bGUpIHtcbiAgICAgIEBpZighc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgPHAgW2NsYXNzXT1cInN1YnRpdGxlQ29sb3JcIiBbaW5uZXJIVE1MXT1cInN1YnRpdGxlXCI+PC9wPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxwIFtjbGFzc109XCJzdWJ0aXRsZUNvbG9yXCIgW2lubmVySFRNTF09XCJzZWFyY2hTdWJ0aXRsZVwiPjwvcD5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmKGJ1dHRvbkxpbmsgJiYgYnV0dG9uVGV4dCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBbc2l6ZV09XCJidXR0b25TaXplXCJcbiAgICAgICAgICBbZmlsbF09XCJidXR0b25GaWxsXCJcbiAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uQ29sb3JcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljaygpXCI+XG4gICAgICAgICAge3sgIGJ1dHRvblRleHQgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG48L2lvbi1jYXJkPlxuIl19
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLE9BQU8sRUFDUCxRQUFRLEVBQ1QsTUFDSSwyQkFBMkIsQ0FBQztBQUNqQyxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBbUIsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBR3pDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBZ0JJLElBQU0sbUJBQW1CLEdBQXpCLE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBa012RDs7Ozs7OztPQU9HO0lBQ0g7UUFDRSxLQUFLLENBQUMscUJB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QkFBbUI7bUdBQW5CLG1CQUFtQixzY0N0RWhDLDQ1QkFtQ0Esa2FEMkJJLGdCQUFnQiw2WEFDaEIsT0FBTyx5TEFDUCxjQUFjLCtFQUVkLE9BQU87O0FBSUUsbUJBQW1CO0lBZi9CLE9BQU8sRUFBRTs7R0FlRyxtQkFBbUIsQ0FvVS9COzs0RkFwVVksbUJBQW1CO2tCQWQvQixTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLFdBQ1A7d0JBQ1AsZ0JBQWdCO3dCQUNoQixPQUFPO3dCQUNQLGNBQWM7d0JBQ2QsUUFBUTt3QkFDUixPQUFPO3FCQUNSO3dEQWdCRCxLQUFLO3NCQURKLEtBQUs7Z0JBY04sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFFBQVE7c0JBRFAsS0FBSztnQkFjTixhQUFhO3NCQURaLEtBQUs7Z0JBY04sUUFBUTtzQkFEUCxLQUFLO2dCQWNOLElBQUk7c0JBREgsS0FBSztnQkFhTixRQUFRO3NCQURQLEtBQUs7Z0JBYU4sU0FBUztzQkFEUixLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBY04sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFdBQVc7c0JBRFYsS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sV0FBVztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQgIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJb25DYXJkLFxuICBJb25DYXJkQ29udGVudCxcbiAgSW9uSWNvbixcbiAgSW9uVGl0bGVcbn1cbmZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0ICogYXMgYWxsSWNvbnMgZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IER5bmFtaWMsIFN0cmluZ09yQm9vbGVhbiB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBzdHJpbmdUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGdW5jdGlvbkxpa2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvdHlwZXMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgZW1wdHkgc3RhdGUgbWVzc2FnZXMgd2l0aCBvcHRpb25hbCBhY3Rpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIGRpc3BsYXkgZW1wdHkgc3RhdGUgbWVzc2FnZXNcbiAqIHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUgb3Igd2hlbiBhIHVzZXIgbmVlZHMgdG8gdGFrZSBhbiBhY3Rpb24gdG8gcG9wdWxhdGUgY29udGVudC5cbiAqIEl0IGluY2x1ZGVzIGN1c3RvbWl6YWJsZSB0aXRsZSwgc3VidGl0bGUsIGljb24sIGFuZCBhY3Rpb24gYnV0dG9uIGVsZW1lbnRzIHRoYXQgY2FuIGJlXG4gKiBzdHlsZWQgYW5kIGNvbmZpZ3VyZWQgdGhyb3VnaCBpbnB1dCBwcm9wZXJ0aWVzLiBUaGUgY29tcG9uZW50IHN1cHBvcnRzIGxvY2FsaXphdGlvblxuICogYW5kIGNhbiB0cmlnZ2VyIG5hdmlnYXRpb24gb3IgY3VzdG9tIGFjdGlvbnMgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQG1lcm1haWRcbiAqIGNsYXNzRGlhZ3JhbVxuICogICBjbGFzcyBFbXB0eVN0YXRlQ29tcG9uZW50IHtcbiAqICAgICArc3RyaW5nIHRpdGxlXG4gKiAgICAgK3N0cmluZyB0aXRsZUNvbG9yXG4gKiAgICAgK3N0cmluZyBzdWJ0aXRsZVxuICogICAgICtzdHJpbmcgc3VidGl0bGVDb2xvclxuICogICAgICtTdHJpbmdPckJvb2xlYW4gc2hvd0ljb25cbiAqICAgICArc3RyaW5nIGljb25cbiAqICAgICArc3RyaW5nIGljb25TaXplXG4gKiAgICAgK3N0cmluZyBpY29uQ29sb3JcbiAqICAgICArc3RyaW5nfEZ1bmN0aW9uIGJ1dHRvbkxpbmtcbiAqICAgICArc3RyaW5nIGJ1dHRvblRleHRcbiAqICAgICArc3RyaW5nIGJ1dHRvbkZpbGxcbiAqICAgICArc3RyaW5nIGJ1dHRvbkNvbG9yXG4gKiAgICAgK3N0cmluZyBidXR0b25TaXplXG4gKiAgICAgK3N0cmluZyBzZWFyY2hWYWx1ZVxuICogICAgIC1Sb3V0ZXIgUm91dGVyXG4gKiAgICAgK25nT25Jbml0KClcbiAqICAgICAraGFuZGxlQ2xpY2soKVxuICogICB9XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBOZ3hCYXNlQ29tcG9uZW50XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBPbkluaXRcbiAqXG4gKiBAZXh0ZW5kcyB7Tmd4QmFzZUNvbXBvbmVudH1cbiAqIEBpbXBsZW1lbnRzIHtPbkluaXR9XG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kZWNhZi1lbXB0eS1zdGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3JBbmd1bGFyTW9kdWxlLFxuICAgIElvbkNhcmQsXG4gICAgSW9uQ2FyZENvbnRlbnQsXG4gICAgSW9uVGl0bGUsXG4gICAgSW9uSWNvblxuICBdXG5cbn0pXG5leHBvcnQgY2xhc3MgRW1wdHlTdGF0ZUNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1haW4gdGl0bGUgZGlzcGxheWVkIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBwcmltYXJ5IG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGUgZW1wdHkgc3RhdGUgY29tcG9uZW50LlxuICAgKiBUaGlzIHRleHQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gaW5mb3JtIHRoZSB1c2VyIGFib3V0IHdoeSB0aGV5J3JlIHNlZWluZyBhbiBlbXB0eSB2aWV3LlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcInRpdGxlXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlOiBzdHJpbmcgPSBcInRpdGxlXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIHRpdGxlIHRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSB0aXRsZSB0ZXh0IHVzaW5nIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHN5c3RlbS5cbiAgICogVGhlIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgY29sb3IgdmFyaWFibGUgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24ncyB0aGVtZS5cbiAgICogVGhlIGNvbXBvbmVudCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlZml4IHRoaXMgd2l0aCBcImNvbG9yLVwiIHRvIGNyZWF0ZSB0aGUgQ1NTIGNsYXNzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnZ3JheS02J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGl0bGVDb2xvciA9ICdncmF5LTYnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlY29uZGFyeSBtZXNzYWdlIGRpc3BsYXllZCBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFkZGl0aW9uYWwgY29udGV4dCBvciBpbnN0cnVjdGlvbnMgYmVsb3cgdGhlIG1haW4gdGl0bGUuXG4gICAqIFRoaXMgdGV4dCBpcyB0eXBpY2FsbHkgdXNlZCB0byBndWlkZSB0aGUgdXNlciBvbiB3aGF0IGFjdGlvbnMgdGhleSBjYW4gdGFrZS5cbiAgICogSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIHRoaXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGUgbG9jYWxpemF0aW9uIHN5c3RlbS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlOiBzdHJpbmcgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBzdWJ0aXRsZSB0ZXh0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgc3VidGl0bGUgdGV4dCB1c2luZyB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgY29ycmVzcG9uZCB0byBhIGNvbG9yIHZhcmlhYmxlIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgdGhlbWUuXG4gICAqIFRoZSBjb21wb25lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWZpeCB0aGlzIHdpdGggXCJjb2xvci1cIiB0byBjcmVhdGUgdGhlIENTUyBjbGFzcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2dyYXktNCdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlQ29sb3I6IHN0cmluZyA9ICdncmF5LTQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgaWNvbiBpcyBkaXNwbGF5ZWQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgaWYgdGhlIHZpc3VhbCBpY29uIHNob3VsZCBiZSBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIFRoaXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEgYm9vbGVhbiBvciBhIHN0cmluZyB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgYm9vbGVhbi5cbiAgICogSWNvbnMgaGVscCB2aXN1YWxseSBjb21tdW5pY2F0ZSB0aGUgZW1wdHkgc3RhdGUgY29udGV4dCB0byB1c2Vycy5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2hvd0ljb246IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgaWNvbiB0byBkaXNwbGF5LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hpY2ggaWNvbiB0byBzaG93IHdoZW4gc2hvd0ljb24gaXMgdHJ1ZS5cbiAgICogVGhlIGNvbXBvbmVudCB1c2VzIHRoZSBpY29uIHN5c3RlbSBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbixcbiAgICogYW5kIHRoaXMgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYW4gYXZhaWxhYmxlIGljb24gbmFtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgXCJ0aS1pbmZvLXNxdWFyZS1yb3VuZGVkXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb246IHN0cmluZyA9IFwidGktaW5mby1zcXVhcmUtcm91bmRlZFwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpemUgb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgaWNvbiBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIENhbiBiZSBlaXRoZXIgJ2xhcmdlJyBvciAnc21hbGwnIHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCBsYXlvdXQgbmVlZHMuXG4gICAqXG4gICAqIEB0eXBlIHsnbGFyZ2UnIHwgJ3NtYWxsJyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgJ2xhcmdlJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvblNpemU/OiAnbGFyZ2UnIHwgJ3NtYWxsJyA9ICdsYXJnZSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgaWNvbiB1c2luZyBJb25pYydzIHByZWRlZmluZWQgY29sb3Igc3lzdGVtLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgaWNvbiB0byBtYXRjaCB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzY2hlbWUuXG4gICAqXG4gICAqIEB0eXBlIHtQcmVkZWZpbmVkQ29sb3JzIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvbkNvbG9yPzogc3RyaW5nID0gJ21lZGl1bSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgb3IgYWN0aW9uIGZvciB0aGUgYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hlcmUgdGhlIGJ1dHRvbiBzaG91bGQgbmF2aWdhdGUgdG8gd2hlbiBjbGlja2VkIG9yIHdoYXQgZnVuY3Rpb25cbiAgICogaXQgc2hvdWxkIGV4ZWN1dGUuIFRoaXMgY2FuIGJlIGVpdGhlciBhIFVSTCBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgbmF2aWdhdGlvbi5cbiAgICogV2hlbiBub3QgcHJvdmlkZWQsIHRoZSBidXR0b24gd2lsbCBub3QgcGVyZm9ybSBhbnkgYWN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgRnVuY3Rpb25MaWtlIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uTGluaz86IHN0cmluZyB8IEZ1bmN0aW9uTGlrZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB0ZXh0IGRpc3BsYXllZCBvbiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBsYWJlbCBmb3IgdGhlIGFjdGlvbiBidXR0b24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBidXR0b24gd2lsbCBub3QgZGlzcGxheSBhbnkgdGV4dC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZmlsbCBzdHlsZSBvZiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgYnV0dG9uIHVzaW5nIElvbmljJ3MgYnV0dG9uIGZpbGwgb3B0aW9ucy5cbiAgICogJ3NvbGlkJyBjcmVhdGVzIGEgYnV0dG9uIHdpdGggYSBzb2xpZCBiYWNrZ3JvdW5kLCAnb3V0bGluZScgY3JlYXRlcyBhIGJ1dHRvbiB3aXRoXG4gICAqIGp1c3QgYSBib3JkZXIsIGFuZCAnY2xlYXInIGNyZWF0ZXMgYSBidXR0b24gd2l0aCBubyBiYWNrZ3JvdW5kIG9yIGJvcmRlci5cbiAgICpcbiAgICogQHR5cGUgeydjbGVhcicgfCAnc29saWQnIHwgJ291dGxpbmUnfVxuICAgKiBAZGVmYXVsdCAnc29saWQnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25GaWxsOiAnY2xlYXInIHwgJ3NvbGlkJyB8ICdvdXRsaW5lJyA9ICAnc29saWQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgYnV0dG9uIHVzaW5nIElvbmljJ3MgY29sb3Igc3lzdGVtLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgYnV0dG9uIHRvIG1hdGNoIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHNjaGVtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25Db2xvcjogc3RyaW5nID0gICdwcmltYXJ5JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaXplIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgYnV0dG9uIHNob3duIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQ2FuIGJlICdsYXJnZScsICdzbWFsbCcsIG9yICdkZWZhdWx0JyB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgbGF5b3V0IG5lZWRzLlxuICAgKlxuICAgKiBAdHlwZSB7J2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCd9XG4gICAqIEBkZWZhdWx0ICdkZWZhdWx0J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uU2l6ZTogJ2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCcgPSAgJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlYXJjaCB2YWx1ZSB0aGF0IHJlc3VsdGVkIGluIG5vIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFdoZW4gdGhlIGVtcHR5IHN0YXRlIGlzIHNob3duIGR1ZSB0byBhIHNlYXJjaCB3aXRoIG5vIHJlc3VsdHMsXG4gICAqIHRoaXMgcHJvcGVydHkgY2FuIGhvbGQgdGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWQuIFRoaXMgY2FuIGJlIGRpc3BsYXllZFxuICAgKiBpbiB0aGUgZW1wdHkgc3RhdGUgbWVzc2FnZSB0byBwcm92aWRlIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hWYWx1ZSE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNlcnZpY2UgZm9yIGhhbmRsaW5nIG5hdmlnYXRpb24gb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIG5hdmlnYXRpbmcgYmV0d2VlbiByb3V0ZXMuXG4gICAqIFRoaXMgc2VydmljZSBpcyB1c2VkIHdoZW4gdGhlIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcgVVJMIHRvIG5hdmlnYXRlIHRvIHRoYXQgbG9jYXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSb3V0ZXJ9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIHJvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIHNlYXJjaFN1YnRpdGxlITogU2FmZUh0bWxcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBFbXB0eVN0YXRlQ29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBFbXB0eVN0YXRlQ29tcG9uZW50IGJ5IGNhbGxpbmcgdGhlIHBhcmVudCBjbGFzcyBjb25zdHJ1Y3RvclxuICAgKiB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBmb3IgbG9nZ2luZyBhbmQgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzXG4gICAqIGEgc3RhbmRhcmRpemVkIHdheSB0byBkaXNwbGF5IGVtcHR5IHN0YXRlIG1lc3NhZ2VzIHdpdGggb3B0aW9uYWwgaWNvbnMgYW5kIGFjdGlvbiBidXR0b25zLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFbXB0eVN0YXRlQ29tcG9uZW50XCIpO1xuICAgIGFkZEljb25zKGFsbEljb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhZnRlciBBbmd1bGFyIGZpcnN0IGRpc3BsYXlzIHRoZSBkYXRhLWJvdW5kIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIGNvbXBvbmVudCBieSBwcm9jZXNzaW5nIGJvb2xlYW4gaW5wdXRzLCBhcHBseWluZyBsb2NhbGl6YXRpb24gdG8gdGV4dFxuICAgKiBlbGVtZW50cyBpZiB0cmFuc2xhdGlvbiBpcyBlbmFibGVkLCBhbmQgZm9ybWF0dGluZyBDU1MgY2xhc3NlcyBmb3IgdGl0bGUgYW5kIHN1YnRpdGxlIGNvbG9ycy5cbiAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgdGhlIGNvbXBvbmVudCBmb3IgdXNlciBpbnRlcmFjdGlvbiBieSBlbnN1cmluZyBhbGwgcHJvcGVydGllcyBhcmVcbiAgICogcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIGxvY2FsaXplZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKlxuICAgKiAgIEEtPj5FOiBuZ09uSW5pdCgpXG4gICAqICAgRS0+PkU6IFByb2Nlc3MgdHJhbnNsYXRhYmxlIGZsYWdcbiAgICogICBFLT4+RTogUHJvY2VzcyBzaG93SWNvbiBmbGFnXG4gICAqICAgRS0+PkU6IEdldCBsb2NhbGUgc2V0dGluZ3NcbiAgICogICBhbHQgdHJhbnNsYXRhYmxlIGlzIHRydWVcbiAgICogICAgIEUtPj5FOiBMb2NhbGl6ZSB0aXRsZVxuICAgKiAgICAgRS0+PkU6IExvY2FsaXplIHN1YnRpdGxlXG4gICAqICAgICBFLT4+RTogTG9jYWxpemUgYnV0dG9uVGV4dFxuICAgKiAgIGVuZFxuICAgKiAgIEUtPj5FOiBGb3JtYXQgdGl0bGUgQ1NTIGNsYXNzXG4gICAqICAgRS0+PkU6IEZvcm1hdCBzdWJ0aXRsZSBDU1MgY2xhc3NcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucGFyc2VQcm9wcyh0aGlzKTtcbiAgICB0aGlzLnRyYW5zbGF0YWJsZSA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnRyYW5zbGF0YWJsZSk7XG4gICAgdGhpcy5zaG93SWNvbiA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnNob3dJY29uKTtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKHRoaXMudHJhbnNsYXRhYmxlKTtcblxuICAgIC8vIGlmKHRoaXMudHJhbnNsYXRhYmxlKSB7XG4gICAgLy8gICB0aGlzLnRpdGxlID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLnRpdGxlKTtcbiAgICAvLyAgIHRoaXMuc3VidGl0bGUgPSBnZW5lcmF0ZUxvY2FsZUZyb21TdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMuc3VidGl0bGUpO1xuICAgIC8vICAgdGhpcy5idXR0b25UZXh0ID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLmJ1dHRvblRleHQpO1xuICAgIC8vIH1cblxuICAgIHRoaXMudGl0bGVDb2xvciA9IGBkY2YtdGl0bGUgY29sb3ItJHt0aGlzLnRpdGxlQ29sb3J9YDtcbiAgICB0aGlzLnN1YnRpdGxlQ29sb3IgPSBgZGNmLXN1YnRpdGxlIGNvbG9yLSR7dGhpcy50aXRsZUNvbG9yfWA7XG5cbiAgICBpZih0aGlzLnNlYXJjaFZhbHVlICYmIHRoaXMudHJhbnNsYXRhYmxlKVxuICAgICAgdGhpcy5zZWFyY2hTdWJ0aXRsZSA9IGF3YWl0IHRoaXMuZ2V0U2VhcmNoU3VidGl0bGUodGhpcy5zdWJ0aXRsZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBhY3Rpb24gYnV0dG9uIGluIHRoZSBlbXB0eSBzdGF0ZVxuICAgKiBjb21wb25lbnQuIEl0IHN1cHBvcnRzIHRocmVlIG5hdmlnYXRpb24gcGF0dGVybnM6IDEpIG5vIGFjdGlvbiB3aGVuIGJ1dHRvbkxpbmsgaXMgbm90IHByb3ZpZGVkLFxuICAgKiAyKSBjdXN0b20gZnVuY3Rpb24gZXhlY3V0aW9uIHdoZW4gYnV0dG9uTGluayBpcyBhIGZ1bmN0aW9uLCBhbmQgMykgbmF2aWdhdGlvbiB0byBhIHNwZWNpZmljIFVSTFxuICAgKiB3aGVuIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcuIFRoaXMgZmxleGliaWxpdHkgYWxsb3dzIHRoZSBlbXB0eSBzdGF0ZSB0byB0cmlnZ2VyIHZhcmlvdXMgYWN0aW9uc1xuICAgKiBiYXNlZCBvbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IE4gYXMgUm91dGVyXG4gICAqXG4gICAqICAgVS0+PkU6IENsaWNrIGFjdGlvbiBidXR0b25cbiAgICogICBFLT4+RTogaGFuZGxlQ2xpY2soKVxuICAgKiAgIGFsdCBidXR0b25MaW5rIGlzIG5vdCBwcm92aWRlZFxuICAgKiAgICAgRS0tPj5VOiBSZXR1cm4gZmFsc2UgKG5vIGFjdGlvbilcbiAgICogICBlbHNlIGJ1dHRvbkxpbmsgaXMgYSBmdW5jdGlvblxuICAgKiAgICAgRS0+PkU6IEV4ZWN1dGUgYnV0dG9uTGluayBmdW5jdGlvblxuICAgKiAgICAgRS0tPj5VOiBSZXR1cm4gZnVuY3Rpb24gcmVzdWx0XG4gICAqICAgZWxzZSBidXR0b25MaW5rIGlzIGEgVVJMIHN0cmluZ1xuICAgKiAgICAgRS0+Pk46IG5hdmlnYXRlRm9yd2FyZChidXR0b25MaW5rKVxuICAgKiAgICAgTi0tPj5FOiBSZXR1cm4gbmF2aWdhdGlvbiByZXN1bHRcbiAgICogICAgIEUtLT4+VTogUmV0dXJuIG5hdmlnYXRpb24gcmVzdWx0XG4gICAqICAgZW5kXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuPn1cbiAgICogICAtIGZhbHNlIGlmIG5vIGFjdGlvbiBpcyB0YWtlblxuICAgKiAgIC0gVGhlIHJlc3VsdCBvZiB0aGUgYnV0dG9uTGluayBmdW5jdGlvbiBpZiBpdCdzIGEgZnVuY3Rpb25cbiAgICogICAtIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIG5hdmlnYXRpb24gcmVzdWx0IGlmIGJ1dHRvbkxpbmsgaXMgYSBVUkxcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZUNsaWNrKCk6IGJvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZm4gPSB0aGlzLmJ1dHRvbkxpbms7XG4gICAgaWYoIWZuKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmKGZuIGluc3RhbmNlb2YgRnVuY3Rpb24pXG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZm4gYXMgc3RyaW5nXSk7XG4gIH1cblxuXG4gLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBsb2NhbGl6ZWQgYW5kIHNhbml0aXplZCBzdWJ0aXRsZSBmb3Igc2VhcmNoIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgY29udGVudCBzdHJpbmcsIHR5cGljYWxseSB0aGUgc3VidGl0bGUsIGFuZCBwcm9jZXNzZXMgaXRcbiAgICogdGhyb3VnaCB0aGUgdHJhbnNsYXRpb24gc2VydmljZS4gSXQgcmVwbGFjZXMgYSBwbGFjZWhvbGRlciAoJ3ZhbHVlMCcpIHdpdGggdGhlIGFjdHVhbFxuICAgKiBzZWFyY2ggdmFsdWUsIHRoZW4gc2FuaXRpemVzIHRoZSByZXN1bHQgdG8gc2FmZWx5IHVzZSBhcyBIVE1MLiBUaGlzIGlzIHBhcnRpY3VsYXJseVxuICAgKiB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgZHluYW1pYywgbG9jYWxpemVkIG1lc3NhZ2VzIGluIHRoZSBlbXB0eSBzdGF0ZSB3aGVuIGEgc2VhcmNoXG4gICAqIHlpZWxkcyBubyByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IHN0cmluZyB0byBiZSB0cmFuc2xhdGVkIGFuZCBwcm9jZXNzZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxTYWZlSHRtbD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgc2FuaXRpemVkIEhUTUwgc3RyaW5nXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgVHJhbnNsYXRlU2VydmljZVxuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgRG9tU2FuaXRpemVyXG4gICAqXG4gICAqICAgRS0+PlQ6IGluc3RhbnQoY29udGVudCwgeyd2YWx1ZTAnOiBzZWFyY2hWYWx1ZX0pXG4gICAqICAgVC0tPj5FOiBSZXR1cm4gdHJhbnNsYXRlZCBzdHJpbmdcbiAgICogICBFLT4+UzogYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodHJhbnNsYXRlZFN0cmluZylcbiAgICogICBTLS0+PkU6IFJldHVybiBzYW5pdGl6ZWQgU2FmZUh0bWxcbiAgICpcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIGdldFNlYXJjaFN1YnRpdGxlKGNvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8U2FmZUh0bWw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGNvbnRlbnQsIHsndmFsdWUwJzogdGhpcy5zZWFyY2hWYWx1ZX0pO1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChyZXN1bHQpO1xuICB9XG59XG4iLCJcbjxpb24tY2FyZCBbaWRdPVwidWlkXCIgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCI+XG4gIDxpb24tY2FyZC1jb250ZW50PlxuICAgIEBpZihpY29uICYmIHNob3dJY29uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLWljb24tY29udGFpbmVyXCI+XG4gICAgICAgIDxpb24taWNvblxuICAgICAgICAgIG5hbWU9XCJhbGVydC1jaXJjbGUtb3V0bGluZVwiXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYodGl0bGUpIHtcbiAgICAgIDxoNSBbY2xhc3NdPVwidGl0bGVDb2xvclwiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2g1PlxuICAgIH1cbiAgICBAaWYoc3VidGl0bGUpIHtcbiAgICAgIEBpZighc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgPHAgW2NsYXNzXT1cInN1YnRpdGxlQ29sb3JcIiBbaW5uZXJIVE1MXT1cInN1YnRpdGxlXCI+PC9wPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxwIFtjbGFzc109XCJzdWJ0aXRsZUNvbG9yXCIgW2lubmVySFRNTF09XCJzZWFyY2hTdWJ0aXRsZVwiPjwvcD5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmKGJ1dHRvbkxpbmsgJiYgYnV0dG9uVGV4dCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBbc2l6ZV09XCJidXR0b25TaXplXCJcbiAgICAgICAgICBbZmlsbF09XCJidXR0b25GaWxsXCJcbiAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uQ29sb3JcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljaygpXCI+XG4gICAgICAgICAge3sgIGJ1dHRvblRleHQgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG48L2lvbi1jYXJkPlxuIl19
|