@sumaris-net/ngx-components 18.22.12 → 18.22.14
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/doc/changelog.md +8 -1
- package/esm2022/public_api.mjs +2 -1
- package/esm2022/src/app/core/table/async-table.class.mjs +10 -7
- package/esm2022/src/app/core/table/table.class.mjs +10 -7
- package/esm2022/src/app/shared/observables.mjs +8 -4
- package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +36 -10
- package/esm2022/src/app/shared/services/startable-service.class.mjs +20 -9
- package/fesm2022/sumaris-net.ngx-components.mjs +74 -28
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/src/app/core/table/async-table.class.d.ts +3 -2
- package/src/app/core/table/table.class.d.ts +3 -2
- package/src/app/shared/observables.d.ts +2 -0
- package/src/app/shared/services/startable-observable-service.class.d.ts +16 -1
- package/src/app/shared/services/startable-service.class.d.ts +2 -1
- package/src/assets/manifest.json +1 -1
|
@@ -163,6 +163,15 @@ export class AppTable {
|
|
|
163
163
|
get untouched() {
|
|
164
164
|
return !this.touchedSubject.value;
|
|
165
165
|
}
|
|
166
|
+
get loading() {
|
|
167
|
+
return this.loadingSubject.value;
|
|
168
|
+
}
|
|
169
|
+
get loaded() {
|
|
170
|
+
return !this.loadingSubject.value;
|
|
171
|
+
}
|
|
172
|
+
get saving() {
|
|
173
|
+
return this.savingSubject.value;
|
|
174
|
+
}
|
|
166
175
|
disable(opts) {
|
|
167
176
|
if (this.sort)
|
|
168
177
|
this.sort.disabled = true;
|
|
@@ -292,12 +301,6 @@ export class AppTable {
|
|
|
292
301
|
this.readySubject.next(false);
|
|
293
302
|
}
|
|
294
303
|
}
|
|
295
|
-
get loading() {
|
|
296
|
-
return this.loadingSubject.value;
|
|
297
|
-
}
|
|
298
|
-
get loaded() {
|
|
299
|
-
return !this.loadingSubject.value;
|
|
300
|
-
}
|
|
301
304
|
enableSort() {
|
|
302
305
|
if (this.sort)
|
|
303
306
|
this.sort.disabled = false;
|
|
@@ -1899,4 +1902,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1899
1902
|
type: ViewChild,
|
|
1900
1903
|
args: [MatSort, { static: false }]
|
|
1901
1904
|
}] } });
|
|
1902
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSixPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLHdCQUF3QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSxNQUFNLENBQUM7QUFDM0csT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHL0ksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQVcsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQWMsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQThCLE1BQU0sb0JBQW9CLENBQUM7QUFDOUUs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QXNCO3NCQUEvQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBMkNNLFFBQVE7c0JBQXBCLEtBQUs7Z0JBZ0xPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBWWtDLEtBQUs7c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDTSxjQUFjO3NCQUF6RCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0gsSUFBSTtzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydGFibGUsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBFTVBUWSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgRW50aXRpZXNUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2UuY2xhc3MnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbHMsIElFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29sdW1uSXRlbSwgVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1zZWxlY3QtY29sdW1ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQgeyBBcHBGb3JtVXRpbHMsIENhblNhdmUsIElBcHBGb3JtLCBPblJlYWR5IH0gZnJvbSAnLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXIsXG4gIE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9ucyxcbiAgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9hdXRvY29tcGxldGUvbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmNvbmZpZyc7XG5pbXBvcnQgeyBDb21wbGV0YWJsZUV2ZW50LCBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyLCBlbWl0UHJvbWlzZUV2ZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2V2ZW50cyc7XG5pbXBvcnQge1xuICBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlLFxuICBnZXRQcm9wZXJ0eUJ5UGF0aCxcbiAgaXNFbXB0eUFycmF5LFxuICBpc05pbCxcbiAgaXNOb3RFbXB0eUFycmF5LFxuICBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLFxuICBzZXRQcm9wZXJ0eUJ5UGF0aCxcbiAgdG9Cb29sZWFuLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3IsIHdhaXRGb3JGYWxzZSwgV2FpdEZvck9wdGlvbnMsIHdhaXRGb3JUcnVlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IFNob3dUb2FzdE9wdGlvbnMsIFRvYXN0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgQWxlcnRzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FsZXJ0cyc7XG5pbXBvcnQgeyBDZGtDb2x1bW5EZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvdGFibGUnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBGb3JtRXJyb3JUcmFuc2xhdGVPcHRpb25zLCBGb3JtRXJyb3JUcmFuc2xhdG9yLCBJRm9ybVBhdGhUcmFuc2xhdG9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZhbGlkYXRvci9mb3JtLWVycm9yLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQ2VsbFZhbHVlQ2hhbmdlTGlzdGVuZXIsXG4gIERFRkFVTFRfUEFHRV9TSVpFLFxuICBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxuICBERUZBVUxUX1JFUVVJUkVEX0NPTFVNTlMsXG4gIFJFU0VSVkVEX0VORF9DT0xVTU5TLFxuICBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLFxuICBTYXZlQWN0aW9uVHlwZSxcbiAgU0VUVElOR1NfRElTUExBWV9DT0xVTU5TLFxuICBTRVRUSU5HU19QQUdFX1NJWkUsXG4gIFNFVFRJTkdTX1NPUlRFRF9DT0xVTU4sXG59IGZyb20gJy4vdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwVGFibGVVdGlscyB9IGZyb20gJy4vdGFibGUudXRpbHMnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgZ2V0Q29udHJvbEZyb21QYXRoIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwVGFibGU8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBGID0gYW55LCBJRCA9IG51bWJlcj5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgSUFwcEZvcm0sIENhblNhdmUsIElGb3JtUGF0aFRyYW5zbGF0b3JcbntcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3BlbmluZ1JvdyA9IGZhbHNlO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBfY2VsbFZhbHVlQ2hhbmdlc0RlZnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBDZWxsVmFsdWVDaGFuZ2VMaXN0ZW5lcjtcbiAgfSA9IHt9O1xuXG4gIHByb3RlY3RlZCBfZW5hYmxlZCA9IHRydWU7XG4gIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyOiBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXI7XG4gIHByb3RlY3RlZCBhbGxvd1Jvd0RldGFpbCA9IHRydWU7XG4gIHByb3RlY3RlZCByZWFkb25seSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBsb2NhdGlvbjogTG9jYXRpb247XG4gIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2U7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIGFsZXJ0Q3RybDogQWxlcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBwcmV2aW91c2x5RWRpdGVkUm93SWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGZvcm1FcnJvckFkYXB0ZXI6IEZvcm1FcnJvclRyYW5zbGF0b3I7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZXhjbHVkZXNDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXTtcbiAgdG90YWxSb3dDb3VudDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHZpc2libGVSb3dDb3VudDogbnVtYmVyO1xuICBlcnJvclRyYW5zbGF0ZU9wdGlvbnM6IEZvcm1FcnJvclRyYW5zbGF0ZU9wdGlvbnM7XG5cbiAgcmVhZG9ubHkgcmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgc2F2aW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB0b3VjaGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBkaXJ0eVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZXJyb3JTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG5cbiAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc2V0IGVycm9yKGVycm9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEVycm9yKGVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0IGVycm9yJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUYWJsZUVsZW1lbnQ8VD4+KHRydWUsIFtdKTtcbiAgcGVybWFuZW50U2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxUPiA9IG51bGw7XG4gIHBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgZWRpdGVkUm93OiBUYWJsZUVsZW1lbnQ8VD4gPSB1bmRlZmluZWQ7XG4gIGF1dG9jb21wbGV0ZUZpZWxkczogeyBba2V5OiBzdHJpbmddOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyB9O1xuICByZWFkb25seSBtb2JpbGU6IGJvb2xlYW47XG5cbiAgLy8gVGFibGUgb3B0aW9uc1xuICBASW5wdXQoKSBzZXR0aW5nc0lkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuO1xuICBASW5wdXQoKSBpMThuQ29sdW1uUHJlZml4ID0gJ0NPTU1PTi4nO1xuICBASW5wdXQoKSBpMThuQ29sdW1uU3VmZml4OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQElucHV0KCkgcmVhZE9ubHk6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlubGluZUVkaXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZvY3VzRmlyc3RDb2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlybUJlZm9yZURlbGV0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maXJtQmVmb3JlQ2FuY2VsID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVuZG9hYmxlRGVsZXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZURlbGV0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkga2VlcEVkaXRlZFJvd09uU2F2ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZVNvcnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNhdmVCZWZvcmVGaWx0ZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHByb3BhZ2F0ZVJvd0Vycm9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBlcm1hbmVudFNlbGVjdGlvbkFsbG93ZWQgPSBmYWxzZTsgLy8gQWxsb3cga2VlcCBzZWxlY3RlZCByb3dzIG92ZXIgcGFnZSBjaGFuZ2Ugb3Igc29ydCBjaGFuZ2VcbiAgQElucHV0KCkgb3BlblJvd1Rocm90dGxlVGltZSA9IDgwMDsgLy8gUHJldmVudCBkb3VibGUgY2xpY2sgLSBzZWUgaXNzdWUgc3VtYXJpcy1hcHAjODY0XG5cbiAgQElucHV0KCkgZGVmYXVsdFNvcnRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBkZWZhdWx0U29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcbiAgQElucHV0KCkgZGVmYXVsdFBhZ2VTaXplID0gREVGQVVMVF9QQUdFX1NJWkU7XG4gIEBJbnB1dCgpIGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TO1xuXG4gIC8vIEZvY3VzIG1hbmFnZXJcbiAgQElucHV0KCkgZm9jdXNDb2x1bW46IHN0cmluZztcblxuICBnZXQgZmlyc3RVc2VyQ29sdW1uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1tSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmxlbmd0aF07XG4gIH1cblxuICBnZXQgbGFzdFVzZXJDb2x1bW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW3RoaXMuZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggLSBSRVNFUlZFRF9FTkRfQ09MVU1OUy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICB0aGlzLnNldERhdGFzb3VyY2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRhdGFTb3VyY2UoKTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IEYpIHtcbiAgICB0aGlzLnNldEZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICBnZXQgZmlsdGVyKCk6IEYge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gIH1cblxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZyB8fCB0aGlzLnRvdGFsUm93Q291bnQgPT09IDA7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRFbnRpdGllcygpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbj8uc2VsZWN0ZWQgfHwgQXBwVGFibGVVdGlscy5nZXRFbnRpdGllcyh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25SZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbkNsaWNrUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbk9wZW5Sb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWxlbWVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uTmV3Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblN0YXJ0RWRpdGluZ1JvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Db25maXJtRWRpdENyZWF0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWxPckRlbGV0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVEZWxldGVSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7IHJvd3M6IFRhYmxlRWxlbWVudDxUPltdIH0+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbFJvd3MgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPGJvb2xlYW4sIHsgcm93czogVGFibGVFbGVtZW50PFQ+W10gfT4oKTtcbiAgQE91dHB1dCgpIG9uQmVmb3JlU2F2ZSA9IGNyZWF0ZVByb21pc2VFdmVudEVtaXR0ZXI8eyBjb25maXJtZWQ6IGJvb2xlYW47IHNhdmU6IGJvb2xlYW4gfSwgeyBhY3Rpb246IFNhdmVBY3Rpb25UeXBlOyB2YWxpZDogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgb25BZnRlckRlbGV0ZWRSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD5bXT4oKTtcbiAgQE91dHB1dCgpIG9uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25EaXJ0eSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy52YWxpZCA6IHRydWU7XG4gIH1cblxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyA/IHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8uaW52YWxpZCA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93ICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/LnBlbmRpbmcgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZFN1YmplY3QudmFsdWU7XG4gIH1cblxuICBkaXNhYmxlKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIC8vIEZJWE1FOiBuZWVkIHRvIGhpZGRlbiBidXR0b25zIChpbiBIVE1MKSwgZXRjLiB3aGVuIGRpc2FibGVkXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSAhPT0gIXRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIGlmICh2YWx1ZSkgdGhpcy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGVsc2UgdGhpcy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX2VuYWJsZWQ7XG4gIH1cblxuICBtYXJrQXNEaXJ0eShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5kaXJ0eVN1YmplY3QuY2xvc2VkICYmIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmRpcnR5U3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmRpcnR5U3ViamVjdC5jbG9zZWQgJiYgdGhpcy5kaXJ0eVN1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmRpcnR5U3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNVbnRvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBsZXQgbmVlZEVtaXRFdmVudCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLnRvdWNoZWRTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgbmVlZEVtaXRFdmVudCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpcnR5IHx8ICh0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5pZCAhPT0gdGhpcy5wcmV2aW91c2x5RWRpdGVkUm93SWQpKSB7XG4gICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgZWRpdGluZyByb3cgb25seSBpZiBlZGl0aW5nIGFuZCBpZiBpdCB3YXMgbm90IHByZXZpb3VzbHkgc2F2ZWRcbiAgICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgZWRpdGluZyByb3cgb25seSBpZiBlZGl0aW5nIGFuZCBpZiBpdCB3YXMgbm90IHByZXZpb3VzbHkgc2F2ZWRcbiAgICAgICAgaWYgKHRoaXMuZWRpdGVkUm93LmlkID09PSAtMSkge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kZWxldGUoLTEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jYW5jZWwodGhpcy5lZGl0ZWRSb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmVcbiAgICAgICAgdGhpcy5jaGVja0lmUm93UHJpc3RpbmUodGhpcy5lZGl0ZWRSb3csIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGVkUm93ID0gbnVsbDtcbiAgICAgIG5lZWRFbWl0RXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAobmVlZEVtaXRFdmVudCAmJiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBwcmVmZXIgdG8gdXNlIG1hcmtBbGxBc1RvdWNoZWQoKVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgbWFya0FzVG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGNvbnNvbGUud2FybignVE9ETzogUmVwbGFjZSB0aGlzIGNhbGwgYnkgbWFya0FsbEFzVG91Y2hlZCgpIC0gYmVjYXVzZSBvZiBjaGFuZ2VzIGluIG5neC1jb21wb25lbnRzID49IDAuMTYuMCcpO1xuICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FsbEFzVG91Y2hlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMudG91Y2hlZFN1YmplY3QuY2xvc2VkICYmIHRoaXMudG91Y2hlZFN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMudG91Y2hlZFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzU2F2aW5nKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zYXZpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IGZvY3VzIGNvbHVtblxuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zYXZpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnNhdmluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIG9wdHMpO1xuICB9XG5cbiAgbWFya0FzTG9hZGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgb3B0cyk7XG4gIH1cblxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMucmVhZHlTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnJlYWR5U3ViamVjdC52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5yZWFkeVN1YmplY3QubmV4dCh0cnVlKTtcblxuICAgICAgLy8gSWYgc3ViY2xhc3NlcyBpbXBsZW1lbnRzIE9uUmVhZHlcbiAgICAgIGlmICh0eXBlb2YgdGhpc1snbmdPblJlYWR5J10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgKHRoaXMgYXMgYW55IGFzIE9uUmVhZHkpLm5nT25SZWFkeSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc05vdFJlYWR5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5yZWFkeVN1YmplY3QuY2xvc2VkICYmIHRoaXMucmVhZHlTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5yZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWU7XG4gIH1cblxuICBnZXQgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGVuYWJsZVNvcnQoKSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBkaXNhYmxlU29ydCgpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRTtcbiAgfVxuXG4gIGdldCBwYWdlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSkgfHwgMDtcbiAgfVxuXG4gIGdldCBzb3J0QWN0aXZlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc29ydCAmJiB0aGlzLnNvcnQuYWN0aXZlO1xuICB9XG5cbiAgc2V0IHNvcnRBY3RpdmUoc29ydEJ5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB7XG4gICAgICB0aGlzLnNvcnQuYWN0aXZlID0gc29ydEJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSBzb3J0Qnk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNvcnREaXJlY3Rpb24oKTogU29ydERpcmVjdGlvbiB7XG4gICAgcmV0dXJuICh0aGlzLnNvcnQgJiYgdGhpcy5zb3J0LmRpcmVjdGlvbiAmJiAodGhpcy5zb3J0LmRpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycpKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXQgc29ydERpcmVjdGlvbih2YWx1ZTogU29ydERpcmVjdGlvbikge1xuICAgIGlmICh0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuc29ydC5kaXJlY3Rpb24gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvciB8fCB0aGlzLmNoaWxkUGFnaW5hdG9yO1xuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95U3ViamVjdD8uY2xvc2VkICE9PSBmYWxzZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZTogTWF0VGFibGU8VD47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hpbGRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogZmFsc2UgfSkgc29ydDogTWF0U29ydDtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBjb2x1bW5zOiBzdHJpbmdbXSxcbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U/OiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4sXG4gICAgcHJpdmF0ZSBfZmlsdGVyPzogRlxuICApIHtcbiAgICB0aGlzLmNkID0gaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICB0aGlzLnJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLnJvdXRlciA9IGluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIHRoaXMubmF2Q29udHJvbGxlciA9IGluamVjdG9yLmdldChOYXZDb250cm9sbGVyKTtcbiAgICB0aGlzLmxvY2F0aW9uID0gaW5qZWN0b3IuZ2V0KExvY2F0aW9uKTtcbiAgICB0aGlzLnNldHRpbmdzID0gaW5qZWN0b3IuZ2V0KExvY2FsU2V0dGluZ3NTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0ZSA9IGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLm1vZGFsQ3RybCA9IGluamVjdG9yLmdldChNb2RhbENvbnRyb2xsZXIpO1xuICAgIHRoaXMuYWxlcnRDdHJsID0gaW5qZWN0b3IuZ2V0KEFsZXJ0Q29udHJvbGxlcik7XG4gICAgdGhpcy50b2FzdENvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoVG9hc3RDb250cm9sbGVyKTtcbiAgICB0aGlzLmZvcm1FcnJvckFkYXB0ZXIgPSBpbmplY3Rvci5nZXQoRm9ybUVycm9yVHJhbnNsYXRvcik7XG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcblxuICAgIC8vIEF1dG9jb21wbGV0ZSBmaWVsZHNcbiAgICB0aGlzLl9hdXRvY29tcGxldGVDb25maWdIb2xkZXIgPSBuZXcgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyKHtcbiAgICAgIGdldFVzZXJBdHRyaWJ1dGVzOiAoYSwgYikgPT4gdGhpcy5zZXR0aW5ncy5nZXRGaWVsZERpc3BsYXlBdHRyaWJ1dGVzKGEsIGIpLFxuICAgIH0pO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzID0gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmZpZWxkcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgcmV0dXJuOyAvLyBJbml0IG9ubHkgb25jZVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHRoaXMucmVhZE9ubHkgPSB0b0Jvb2xlYW4odGhpcy5yZWFkT25seSwgdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVhZE9ubHkgfHwgZmFsc2UpOyAvLyByZWFkL3dyaXRlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSAhdGhpcy5yZWFkT25seSAmJiB0b0Jvb2xlYW4odGhpcy5pbmxpbmVFZGl0aW9uLCBmYWxzZSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVEZWxldGUgPSB0b0Jvb2xlYW4odGhpcy5zYXZlQmVmb3JlRGVsZXRlLCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVTb3J0ID0gdG9Cb29sZWFuKHRoaXMuc2F2ZUJlZm9yZVNvcnQsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMuc2F2ZUJlZm9yZUZpbHRlciA9IHRvQm9vbGVhbih0aGlzLnNhdmVCZWZvcmVGaWx0ZXIsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSA9IHRvQm9vbGVhbih0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsIHRoaXMuaW5saW5lRWRpdGlvbik7XG4gICAgdGhpcy5lcnJvclRyYW5zbGF0ZU9wdGlvbnMgPSB0aGlzLmVycm9yVHJhbnNsYXRlT3B0aW9ucyB8fCB7IHNlcGFyYXRvcjogJywgJywgcGF0aFRyYW5zbGF0b3I6IHRoaXMgfTsgLy8gQ2FuIGJlIG92ZXJyaWRlIGluIHN1YmNsYXNzZXMgY29uc3RydWN0b3JzXG5cbiAgICAvLyBDaGVjayBhc2sgdXNlciBjb25maXJtYXRpb24gaXMgcG9zc2libGVcbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICF0aGlzLmFsZXJ0Q3RybCkgdGhyb3cgRXJyb3IoXCJNaXNzaW5nICdhbGVydEN0cmwnIG9yICdpbmplY3RvcicgaW4gY29tcG9uZW50J3MgY29uc3RydWN0b3IuXCIpO1xuXG4gICAgLy8gRGVmaW5lZCB1bmlxdWUgaWQgZm9yIHNldHRpbmdzIGZvciB0aGUgcGFnZVxuICAgIHRoaXMuc2V0dGluZ3NJZCA9IHRoaXMuc2V0dGluZ3NJZCB8fCB0aGlzLmdlbmVyYXRlVGFibGVJZCgpO1xuXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5nZXREaXNwbGF5Q29sdW1ucygpO1xuXG4gICAgLy8gTG9hZCB0aGUgc29ydGVkIGNvbHVtbnMsIGZyb20gc2V0dGluZ3NcbiAgICB7XG4gICAgICBjb25zdCBzb3J0ZWRDb2x1bW4gPSB0aGlzLmdldFNvcnRlZENvbHVtbigpO1xuICAgICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gc29ydGVkQ29sdW1uLmlkO1xuICAgICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IHNvcnRlZENvbHVtbi5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSBlcnJvciB0byBldmVudCBlbWl0dGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmVycm9yU3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRXJyb3IuZW1pdCh2YWx1ZSkpKTtcblxuICAgIC8vIFByb3BhZ2F0ZSBkaXJ0eSB0byBldmVudCBlbWl0dGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmRpcnR5U3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRGlydHkuZW1pdCh2YWx1ZSkpKTtcblxuICAgIC8vIFByb3BhZ2F0ZSByb3cgZGlydHkgc3RhdGUgdG8gdGFibGVcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvd1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJvdykgPT4gcm93Py52YWxpZGF0b3IgJiYgdHJ1ZSksXG4gICAgICAgICAgbWVyZ2VNYXAoKHJvdykgPT5cbiAgICAgICAgICAgIHJvdy52YWxpZGF0b3IudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcigoKSA9PiByb3cudmFsaWRhdG9yLmRpcnR5KSxcbiAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAgICAgLy90YXAoKCkgPT4gY29uc29sZS5kZWJ1ZyhcIlByb3BhZ2F0ZSByb3cncyBkaXJ0eSB0byB0YWJsZS4uLlwiKSlcblxuICAgICAgICAgICAgICAvLyBTdG9wIGlmIG5leHQgYW5vdGhlciByb3csIG9yIGRlc3Ryb3lpbmdcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25TdGFydEVkaXRpbmdSb3cpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm1hcmtBc0RpcnR5KCkpXG4gICAgKTtcblxuICAgIC8vIENhbGwgZGF0YXNvdXJjZSByZWZyZXNoLCBvbiBlYWNoIHJlZnJlc2ggZXZlbnRzXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25SZWZyZXNoXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aDxhbnk+KCh0aGlzLmF1dG9Mb2FkID8ge30gOiAnc2tpcCcpIGFzIGFueSksXG4gICAgICAgICAgc3dpdGNoTWFwKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnc2tpcCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gU2tpcHBpbmcgZGF0YSBsb2FkOiBubyBkYXRhU291cmNlIGRlZmluZWQnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBDYWxsaW5nIGRhdGFTb3VyY2Uud2F0Y2hBbGwoKS4uLicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VcbiAgICAgICAgICAgICAgLndhdGNoQWxsKHRoaXMucGFnZU9mZnNldCwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zb3J0QWN0aXZlLCB0aGlzLnNvcnREaXJlY3Rpb24sIHRoaXMuX2ZpbHRlcilcbiAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25SZWZyZXNoKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7IC8vIENvbnRpbnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHRoaXMudXBkYXRlVmlldyhyZXMgYXMgTG9hZFJlc3VsdDxUPiB8IHVuZGVmaW5lZCkpXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBkYXRhU291cmNlIGxvYWRpbmcgZXZlbnRzXG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRoaXMubGlzdGVuRGF0YVNvdXJjZUxvYWRpbmcodGhpcy5fZGF0YVNvdXJjZSk7XG5cbiAgICAvLyBQZXJtYW5lbnQgc2VsZWN0aW9uIGJlaGF2aW9yXG4gICAgaWYgKHRoaXMucGVybWFuZW50U2VsZWN0aW9uQWxsb3dlZCkgdGhpcy5pbml0UGVybWFuZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gRGV0ZWN0IHdoZW4gcGFyZW50IG5nT25Jbml0KCkgbm90IGNhbGxcbiAgICBpZiAodGhpcy5kZWJ1ZyAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgJ2Rpc3BsYXllZENvbHVtbnMnLiBEaWQgeW91IGNhbGwgcGFyZW50IG5nT25Jbml0KCkgaW4gY29tcG9uZW50ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSA/YCk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgc29ydCBhbmQgcGFnaW5hdG9yIGV2ZW50c1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU0lnbm9yZWRQcm9taXNlRnJvbUNhbGxcbiAgICB0aGlzLmxpc3RlblNvcnRBbmRQYWdpbmF0aW9uRXZlbnRzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIC8vIFVuc3Vic2NyaWJlIGNvbHVtbiB2YWx1ZSBjaGFuZ2VzXG4gICAgT2JqZWN0LmtleXModGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnMpLmZvckVhY2goKGNvbCkgPT4gdGhpcy5zdG9wQ2VsbFZhbHVlQ2hhbmdlcyhjb2wsIHRydWUpKTtcbiAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmcyA9IHt9O1xuXG4gICAgdGhpcy5yZWFkeVN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zYXZpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lcnJvclN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpcnR5U3ViamVjdC51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uT3BlblJvdy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25OZXdSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25CZWZvcmVTYXZlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkFmdGVyRGVsZXRlZFJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU29ydC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EaXJ0eS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25FcnJvci51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhcbiAgICByZXM6IExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQsXG4gICAgb3B0cz86IHtcbiAgICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXJlcykgcmV0dXJuOyAvLyBTa2lwIChlLmcgZXJyb3IpXG4gICAgaWYgKHJlcyAmJiByZXMuZGF0YSkge1xuICAgICAgdGhpcy52aXNpYmxlUm93Q291bnQgPSByZXMuZGF0YS5sZW5ndGg7XG4gICAgICB0aGlzLnRvdGFsUm93Q291bnQgPSBpc05vdE5pbChyZXMudG90YWwpXG4gICAgICAgID8gcmVzLnRvdGFsXG4gICAgICAgIDogKCh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiAodGhpcy5wYWdpbmF0b3IucGFnZVNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkUpKSB8fCAwKSArIHRoaXMudmlzaWJsZVJvd0NvdW50O1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gJHtyZXMuZGF0YS5sZW5ndGh9IHJvd3MgbG9hZGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTk8gcm93cyBsb2FkZWQnKTtcbiAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IDA7XG4gICAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNVbnRvdWNoZWQoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERhdGFzb3VyY2UoZGF0YXNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRocm93IG5ldyBFcnJvcignW3RhYmxlXSBkYXRhU291cmNlIGFscmVhZHkgc2V0ICEnKTtcbiAgICBpZiAoZGF0YXNvdXJjZSAmJiB0aGlzLl9kYXRhU291cmNlICE9PSBkYXRhc291cmNlKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YXNvdXJjZTtcbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgdGhpcy5saXN0ZW5EYXRhU291cmNlTG9hZGluZyhkYXRhc291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXNldERhdGFTb3VyY2UoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IG51bGw7XG4gIH1cblxuICBhZGRDb2x1bW5EZWYoY29sdW1uOiBDZGtDb2x1bW5EZWYpIHtcbiAgICB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZihjb2x1bW4pO1xuICB9XG5cbiAgcmVtb3ZlQ29sdW1uRGVmKGNvbHVtbjogQ2RrQ29sdW1uRGVmKSB7XG4gICAgdGhpcy50YWJsZS5yZW1vdmVDb2x1bW5EZWYoY29sdW1uKTtcbiAgfVxuXG4gIHNldEZpbHRlcihmaWx0ZXI6IEYsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQ/OiBib29sZWFuIH0pIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7IGVtaXRFdmVudDogdHJ1ZSB9O1xuXG4gICAgLy8gUHJldmVudCBwZXJtYW5lbnQgc2VsZWN0aW9uIGNoYW5nZSBldmVudHNcbiAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSB0b0Jvb2xlYW4ob3B0cy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkLCB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQpO1xuXG4gICAgaWYgKHRoaXMuc2F2ZUJlZm9yZUZpbHRlcikge1xuICAgICAgLy8gaWYgYSBkaXJ0eSB0YWJsZSBpcyB0byBiZSBzYXZlZCBiZWZvcmUgZmlsdGVyXG4gICAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICAvLyBTYXZlXG4gICAgICAgIHRoaXMuc2F2ZUJlZm9yZUFjdGlvbignZmlsdGVyJykudGhlbigoc2F2ZWQpID0+IHtcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgb25seSBpZiB1c2VyIGRpZG4ndCBjYW5jZWwgdGhlIHNhdmUgb3IgdGhlIHNhdmUgaXMgb2tcbiAgICAgICAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYXBwbHkgZmlsdGVyIG9uIG5vbi1kaXJ0eSB0YWJsZVxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGZpbHRlciwgb3B0cyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFwcGx5IGZpbHRlciBkaXJlY3RseVxuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNvbmZpcm1BbmRBZGQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBmb2N1c0NvbHVtbj86IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICAvLyBJZiBwZW5kaW5nOiBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uLCB0aGVuIGxvb3BcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvciwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0IH0pXG4gICAgICAgICAgICAvLyBMb29wIGFmdGVyIHZhbGlkYXRpb24gY29tcGxldGVkXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1BbmRBZGQoZXZlbnQsIHJvdywgb3B0cykpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdvIGJhY2sgdG8gZm9jdXNDb2x1bW5cbiAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsob3B0cz8uZm9jdXNDb2x1bW4pKSB7XG4gICAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSBvcHRzLmZvY3VzQ29sdW1uO1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJvd1xuICAgIHJldHVybiB0aGlzLmFkZFJvdyhldmVudCwgdW5kZWZpbmVkIC8qIGluc2VydEF0OiB1c2UgZGVmYXVsdCAqLywgb3B0cyk7XG4gIH1cblxuICBjb25maXJtQW5kQmFja3dhcmQoZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nIH0pOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBwcmV2aW91c1JvdyA9IHRoaXMuZWRpdGVkUm93O1xuICAgIGNvbnN0IGZvY3VzQ29sdW1uID0gb3B0cz8uZm9jdXNDb2x1bW4gPz8gdGhpcy5sYXN0VXNlckNvbHVtbjtcblxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIERlbGV0aW5nIGVkaXRlZCByb3csIGlmIGVtcHR5IGFuZCBub3QgZGlydHlcbiAgICBpZiAocHJldmlvdXNSb3cpIHtcbiAgICAgIC8vIFByZXZpb3VzIHJvdyB3YXMgYSBuZXggcm93IEFORCBpbnZhbGlkOiBkZWxldGUgaXRcbiAgICAgIGlmIChwcmV2aW91c1Jvdy5pZCA9PT0gLTEgJiYgcHJldmlvdXNSb3cudmFsaWRhdG9yPy5pbnZhbGlkICYmICFwcmV2aW91c1Jvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCBwcmV2aW91c1Jvdyk7XG5cbiAgICAgICAgLy8gV2FpdCBkZWxldGlvbiBpcyBkb25lLCB0aGVuIGVkaXQgcHJldmlvdXMgcm93IChieSBpZCwgYmVjYXVzZSBvZiByZWxvYWRpbmcpXG4gICAgICAgIHRoaXMud2FpdElkbGUoKS50aGVuKCgpID0+IHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIHJvdy5pZCwgeyBmb2N1c0NvbHVtbiB9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjYW5ub3QgY29uZmlybSBwcmV2aW91cyByb3dcbiAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCBwcmV2aW91c1JvdykpIHtcbiAgICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAgIGlmIChwcmV2aW91c1Jvdy52YWxpZGF0b3I/LnBlbmRpbmcpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocHJldmlvdXNSb3cudmFsaWRhdG9yLCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QgfSlcbiAgICAgICAgICAgICAgLy8gV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiBhbmQgbG9vcFxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1BbmRCYWNrd2FyZChldmVudCwgcm93LCB7IGZvY3VzQ29sdW1uIH0pKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHbyBiYWNrIHRvIGZpcnN0IGNvbHVtblxuICAgICAgICB0aGlzLmZvY3VzQ29sdW1uID0gZm9jdXNDb2x1bW47XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVkaXQgcm93LCBmb2N1c2luZyBhdCB0aGUgZW5kXG4gICAgdGhpcy5lZGl0Um93KGV2ZW50LCByb3csIHsgZm9jdXNDb2x1bW4gfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25maXJtQW5kRm9yd2FyZChldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIHJvdz86IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmcgfSk6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBjb25zdCBmb2N1c0NvbHVtbiA9IG9wdHM/LmZvY3VzQ29sdW1uID8/IHRoaXMuZmlyc3RVc2VyQ29sdW1uO1xuXG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gSWYgbm90IGNvbmZpcm1lZFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHJvdy52YWxpZGF0b3IsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KVxuICAgICAgICAgICAgLy8gV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiBhbmQgbG9vcFxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25maXJtQW5kRm9yd2FyZChldmVudCwgcm93LCB7IGZvY3VzQ29sdW1uIH0pKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBHbyBiYWNrIHRvIGZpcnN0IGNvbHVtblxuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IGZvY3VzQ29sdW1uO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEVkaXQgbmV4dCByb3dcbiAgICBjb25zdCBuZXh0Um93SWQgPSByb3cuaWQgKyAxO1xuICAgIHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIG5leHRSb3dJZCwgeyBmb2N1c0NvbHVtbiB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm0gdGhlIGNyZWF0aW9uIG9mIHRoZSBnaXZlbiByb3csIG9yIGlmIG5vdCBzcGVjaWZpZWQgdGhlIGN1cnJlbnRseSBlZGl0ZWQgcm93XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBjb25maXJtRWRpdENyZWF0ZShldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5lZGl0aW5nKSByZXR1cm4gdHJ1ZTsgLy8gbm8gcm93IHRvIGNvbmZpcm1cblxuICAgIC8vIENvbmZpcm1hdGlvbiBlZGl0aW9uIG9yIGNyZWF0aW9uXG4gICAgLy8gVE9ETzogYWRkIGF3YWl0ID9cbiAgICBjb25zdCBjb25maXJtZWQgPSByb3cuY29uZmlybUVkaXRDcmVhdGUoKTtcblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIC8vIElmIGVkaXQgZmluaXNoZWQsIGZvcmdldCBlZGl0ZWQgcm93XG4gICAgICBpZiAocm93ID09PSB0aGlzLmVkaXRlZFJvdykge1xuICAgICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFyayB0YWJsZSBhcyBkaXJ0eSAoaWYgcm93IGlzIGRpcnR5KVxuICAgICAgaWYgKHJvdy5kaXJ0eSkge1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKiBiZWNhdXNlIG9mIHJlc2V0RXJyb3IoKSAqLyB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgZXJyb3JcbiAgICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgICAvLyBFbWl0IHRoZSBjb25maXJtIGV2ZW50XG4gICAgICB0aGlzLm9uQ29uZmlybUVkaXRDcmVhdGVSb3cubmV4dChyb3cpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICBpZiAocm93LnZhbGlkYXRvcikge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiB1c2luZyBhc3luYyBpc1ZhbGlkKCkgZnVuY3Rpb25cbiAgICAgIGlmIChyb3cudmFsaWRhdG9yLnBlbmRpbmcpIHtcbiAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvcilcbiAgICAgICAgICAvLyBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uIGFuZCBsb29wXG4gICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gTk9UIGNvbmZpcm1lZCA9IHJvdyBoYXMgZXJyb3JcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBDYW5ub3QgY29uZmlybSByb3csIGJlY2F1c2UgaW52YWxpZCcpO1xuICAgICAgICBBcHBGb3JtVXRpbHMubG9nRm9ybUVycm9ycyhyb3cudmFsaWRhdG9yLCAnW3RhYmxlXSAnKTtcbiAgICAgIH1cblxuICAgICAgLy8gZml4OiBtYXJrIGFsbCBjb250cm9scyBhcyB0b3VjaGVkIHRvIHNob3cgZXJyb3JzXG4gICAgICByb3cudmFsaWRhdG9yLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgLy8gQ29tcHV0ZSByb3cgZXJyb3IsIGFuZCBwcm9wYWdhdGUgdG8gdGFibGUncyBlcnJvclxuICAgICAgaWYgKHRoaXMucHJvcGFnYXRlUm93RXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmdldFJvd0Vycm9yKHJvdyk7XG4gICAgICAgIHRoaXMuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdCBjb25maXJtZWRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjYW5jZWxPckRlbGV0ZShldmVudDogRXZlbnQsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW47IGtlZXBFZGl0aW5nPzogYm9vbGVhbiB9KSB7XG4gICAgLy8gRGVsZXRlIG5ldyByb3dcbiAgICBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHJvdyk7XG4gICAgfVxuICAgIC8vIERlbGV0ZSBleGlzdGluZyAoYnV0IG5vdCBlZGl0aW5nKSByb3dcbiAgICBlbHNlIGlmICghcm93LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZGVsZXRlRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICAgIC8vIENhbmNlbCBleGlzdGluZyAoYW5kIGVkaXRpbmcpIHJvd1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRSb3coZXZlbnQ/OiBFdmVudCwgaW5zZXJ0QXQ/OiBudW1iZXIsIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nOyBlZGl0aW5nPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQXNraW5nIGZvciBuZXcgcm93Li4uJyk7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBVc2UgbW9kYWwgaWYgaW5saW5lIGVkaXRpb24gaXMgZGlzYWJsZWRcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikge1xuICAgICAgdGhpcy5vcGVuTmV3Um93RGV0YWlsKGV2ZW50KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gZmluaXNoIGVkaXRlZCByb3cgZmlyc3RcbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFkZCBuZXcgcm93XG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5hZGRSb3dUb1RhYmxlKGluc2VydEF0LCBvcHRzKTtcbiAgICByZXR1cm4gISFyb3c7XG4gIH1cblxuICBhc3luYyBzYXZlKG9wdHM/OiB7IGtlZXBFZGl0aW5nPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGtlZXBFZGl0aW5nOiB0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsXG4gICAgICAuLi5vcHRzLFxuICAgIH07XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5UQUJMRV9SRUFEX09OTFksIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9SRUFEX09OTFknIH07XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICAvLyBLZWVwIGVkaXRlZCByb3cgaWQgKHNob3VsZCBiZSBkb25lIEJFRk9SRSBjb25maXJtRWRpdENyZWF0ZSgpIClcbiAgICB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IG9wdHMua2VlcEVkaXRpbmdcbiAgICAgID8gKHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cuaWQgOiB1bmRlZmluZWQpIHx8IHRoaXMuc2luZ2xlU2VsZWN0ZWRSb3c/LmlkXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcmV2aW91c2x5RWRpdGVkUm93SWQgPSB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZDtcbiAgICBjb25zdCBwcmV2aW91c2x5RWRpdGVkRGF0YSA9IG9wdHMua2VlcEVkaXRpbmdcbiAgICAgID8gKGlzTm90TmlsKHByZXZpb3VzbHlFZGl0ZWRSb3dJZCkgJiYgdGhpcy5lZGl0ZWRSb3c/LmN1cnJlbnREYXRhKSB8fCB0aGlzLnNpbmdsZVNlbGVjdGVkUm93Py5jdXJyZW50RGF0YVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLlRBQkxFX0lOVkFMSURfUk9XX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfSU5WQUxJRF9ST1dfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBzYXZpbmdcbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENhbGxpbmcgc2VydmljZSBzYXZlKClcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIENhbGxpbmcgZGF0YVNvdXJjZS5zYXZlKCkuLi4nKTtcbiAgICAgIGNvbnN0IGlzT0sgPSBhd2FpdCB0aGlzLl9kYXRhU291cmNlLnNhdmUoKTtcblxuICAgICAgaWYgKGlzT0spIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgcmV0dXJuIGlzT0s7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcblxuICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyByb3dcbiAgICAgIGlmIChpc05vdE5pbChwcmV2aW91c2x5RWRpdGVkUm93SWQpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2VsZWN0Um93QnlJZE9yRGF0YShwcmV2aW91c2x5RWRpdGVkUm93SWQsIHByZXZpb3VzbHlFZGl0ZWREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYW5jZWwoZXZlbnQ/OiBFdmVudCwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pIHtcbiAgICAvLyBDaGVjayBjb25maXJtYXRpb25cbiAgICBpZiAoKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSAmJiB0aGlzLmRpcnR5ICYmICh0aGlzLmNvbmZpcm1CZWZvcmVDYW5jZWwgfHwgdGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZWQpKSB7XG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNhbkNhbmNlbFJvd3MoKS50aGVuKChjb25maXJtKSA9PiB7XG4gICAgICAgIC8vIElmIGNvbmZpcm1lZCwgbG9vcFxuICAgICAgICBpZiAoY29uZmlybSkgdGhpcy5jYW5jZWwobnVsbCwgeyBpbnRlcmFjdGl2ZTogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRSZWZyZXNoKCk7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVSb3coXG4gICAgZXZlbnQ/OiBFdmVudCxcbiAgICByb3c/OiBUYWJsZUVsZW1lbnQ8VD4sXG4gICAgb3B0cz86IHtcbiAgICAgIGluY2x1ZGVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuICAgICAgZXhjbHVkZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gICAgfVxuICApIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICByb3cgPSByb3cgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1JvdyA9IGF3YWl0IHRoaXMuYWRkUm93VG9UYWJsZShyb3cuaWQgKyAxKTtcbiAgICBpZiAoIW5ld1JvdykgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIG5ldyByb3cgdG8gdGFibGUnKTtcblxuICAgIGNvbnN0IHNvdXJjZSA9IHJvdy5jbG9uZURhdGEoKTtcbiAgICBsZXQgdGFyZ2V0OiBhbnk7XG5cbiAgICAvLyBDb3B5IGluY2x1ZGVkIHByb3BlcnRpZXMgb25seVxuICAgIGlmIChpc05vdEVtcHR5QXJyYXkob3B0cz8uaW5jbHVkZWRQcm9wZXJ0aWVzKSkge1xuICAgICAgdGFyZ2V0ID0ge307XG4gICAgICAvLyBDbG9uZSAoZGVlcCBjb3B5KVxuICAgICAgb3B0cy5pbmNsdWRlZFByb3BlcnRpZXMuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgICAgICBzZXRQcm9wZXJ0eUJ5UGF0aCh0YXJnZXQsIHBhdGgsIGdldFByb3BlcnR5QnlQYXRoKHNvdXJjZSwgcGF0aCkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBhbGwgcHJvcGVydGllc1xuICAgIGVsc2Uge1xuICAgICAgdGFyZ2V0ID0gc291cmNlO1xuXG4gICAgICAvLyBDbGVhbiBpZCBhbmQgdXBkYXRlRGF0ZVxuICAgICAgRW50aXR5VXRpbHMuY2xlYW5JZEFuZFVwZGF0ZURhdGUodGFyZ2V0LCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgZXhjbHVkZWQgcHJvcGVydGllcyAoZS5nLiByYW5rT3JkZXIsIGV0YylcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KG9wdHM/LmV4Y2x1ZGVkUHJvcGVydGllcykpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXdSb3cuY3VycmVudERhdGE7XG4gICAgICBvcHRzLmV4Y2x1ZGVkUHJvcGVydGllcy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgICAgIHNldFByb3BlcnR5QnlQYXRoKHRhcmdldCwgcGF0aCwgZ2V0UHJvcGVydHlCeVBhdGgobmV3RGF0YSwgcGF0aCkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Jvdy52YWxpZGF0b3IpIHtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZSh0YXJnZXQpO1xuICAgICAgbmV3Um93LnZhbGlkYXRvci5tYXJrQXNEaXJ0eSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3Um93LmN1cnJlbnREYXRhPy5mcm9tT2JqZWN0KSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YS5mcm9tT2JqZWN0KHRhcmdldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSb3cuY3VycmVudERhdGEgPSB0YXJnZXQ7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0XG4gICAgdGhpcy5jbGlja1Jvdyh1bmRlZmluZWQsIG5ld1Jvdyk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdpc0FsbFNlbGVjdGVkLiBsZW5ndGhzJywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoLCB0aGlzLnRvdGFsUm93Q291bnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJvd0NvdW50IHx8IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy52aXNpYmxlUm93Q291bnQ7XG4gIH1cblxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICBhc3luYyBtYXN0ZXJUb2dnbGUoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93cyA9IHRoaXMuX2RhdGFTb3VyY2UuZ2V0Um93cygpO1xuICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uKC4uLnJvd3MpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlbGVjdGlvbihldmVudDogRXZlbnQsIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IGF3YWl0IHRoaXMuZGVsZXRlUm93cyhldmVudCwgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQsIG9wdHMpO1xuICAgIGlmIChkZWxldGVDb3VudCA+IDApIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBvcHRzIFVzZSBpbnRlcmFjdGl2ZT1mYWxzZSB0byBhdm9pZCB1c2VyIGludGVyYWN0aW9uIChlLmcuIHVzZXIgY29uZmlybWF0aW9uKVxuICAgKiAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93KGV2ZW50OiBFdmVudCB8IG51bGwsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gYXdhaXQgdGhpcy5kZWxldGVSb3dzKGV2ZW50LCBbcm93XSwgb3B0cyk7XG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50ID09PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93c1xuICAgKiBAcGFyYW0gb3B0cyBVc2UgaW50ZXJhY3RpdmU9ZmFsc2UgdG8gYXZvaWQgdXNlciBpbnRlcmFjdGlvbiAoZS5nLiB1c2VyIGNvbmZpcm1hdGlvbilcbiAgICogICAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93cyhldmVudDogRXZlbnQgfCBudWxsLCByb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVEFCTEVfUkVBRF9PTkxZLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfUkVBRF9PTkxZJyB9O1xuICAgIH1cbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiAwOyAvLyBTS2lwXG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQgfHwgaXNFbXB0eUFycmF5KHJvd3MpKSByZXR1cm4gMDsgLy8gU2tpcCBpcyBkaXNhYmxlZCwgb3Igbm8gcm93cyB0byBkZWxldGVcblxuICAgIGlmICh0aGlzLmxvYWRpbmcgJiYgKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTa2lwIGRlbGV0ZVJvd3MoKSBiZWNhdXNlIHRhYmxlIGlzIGJ1c3kgKGxvYWRpbmcpLiBVc2Ugb3B0cy5pbnRlcmFjdGl2ZSA9IGZhbHNlIHRvIGZvcmNlIGRlbGV0aW9uJyk7XG4gICAgICByZXR1cm4gMDsgLy8gU2tpcCBpZiBsb2FkaW5nXG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRvIGtlZXAgbmV3bHkgY3JlYXRlZCByb3dcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmlkID09PSAtMSAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nICYmICFyb3dzLmluY2x1ZGVzKHRoaXMuZWRpdGVkUm93KSkge1xuICAgICAgY29uc3QgY29uZmlybWVkID0gdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpO1xuICAgICAgaWYgKCFjb25maXJtZWQpIHJldHVybiAwOyAvLyBDYW5ub3QgZGVsZXRlIChlLmcuIGVkaXRlZCByb3cgaXMgaW52YWxpZClcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjYW4gZGVsZXRlXG4gICAgY29uc3QgY2FuRGVsZXRlID0gYXdhaXQgdGhpcy5jYW5EZWxldGVSb3dzKHJvd3MsIG9wdHMpO1xuICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gMDsgLy8gQ2Fubm90IGRlbGV0ZVxuXG4gICAgLy8gUmV2ZXJzZSByb3cgb3JkZXIgKG9uIGEgY29weSlcbiAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCwgbmVlZCBiZWNhdXNlIHJvdy5kZWxldGUoKSBoYXMgYXN5bmMgZXhlY3V0aW9uXG4gICAgLy8gYW5kIGluZGV4IGNhY2hlIGlzIHVwZGF0ZWQgd2l0aCBhIGRlbGF5XG4gICAgbGV0IHRlbXBSb3dzID0gcm93cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IChhLmlkID4gYi5pZCA/IC0xIDogMSkpO1xuXG4gICAgY29uc3QgZGVsZXRlZFJvd3M6IFRhYmxlRWxlbWVudDxUPltdID0gW107XG5cbiAgICAvLyBJZiBkYXRhIG5lZWQgdG8gYmUgc2F2ZWQgZmlyc3RcbiAgICBpZiAodGhpcy5zYXZlQmVmb3JlRGVsZXRlKSB7XG4gICAgICAvLyBFeGNsdWRlIGludmFsaWQgcm93cyAoYmVjYXVzZSBvZiBzYXZlKCkgd2lsbCBmYWlsLCB3aGVuIGV4aXN0cyBzb21lIGludmFsaWQgcm93cylcbiAgICAgIHRlbXBSb3dzID0gdGVtcFJvd3MuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgLy8gRGVsZXRlIHRoZSByb3cgOlxuICAgICAgICAvLyAtIGlmIG5ld2x5IGNyZWF0ZWQgcm93IChpZCA9IC0xKSxcbiAgICAgICAgLy8gLSBvciBpZiBpbnZhbGlkIGFuZCBub3QgZWRpdGluZyAoPSBub3QgY2FuY2VsbGFibGUpXG4gICAgICAgIGlmIChyb3cuaWQgPT09IC0xIHx8ICghcm93LmVkaXRpbmcgJiYgcm93LmludmFsaWQpIC8qZG8gbm90IHVzZSAhdmFsaWQgYmVjYXVzZSBpZiByb3cgaXMgZGlzYWJsZWQsIGl0IHdpbGwgYmUgYWx3YXlzICF2YWxpZCAqLykge1xuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIERlbGV0ZSByb3cgIyR7cm93LmlkfWApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgICAgICAgcm93LmRlbGV0ZSgpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50LS07XG4gICAgICAgICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgICAgICAgZGVsZXRlZFJvd3MucHVzaChyb3cpO1xuICAgICAgICAgIGlmICh0aGlzLmVkaXRlZFJvdyA9PT0gcm93KSB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEV4Y2x1ZGUgZnJvbSB0aGUgbGlzdCB0byBkZWxldGUgdXNpbmcgdGhlIHNlcnZpY2VcbiAgICAgICAgfVxuICAgICAgICAvLyBDYW5jZWwgdGhlIHJvdyAoYW5kIG1hcmsgYXMgcHJpc3RpbmUpLCB3aGVuIG5vdCB2YWxpZCBidXQgaW4gZWRpdGlvblxuICAgICAgICBlbHNlIGlmIChyb3cuZWRpdGluZyAmJiAhcm93LnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcbiAgICAgICAgICByb3cuY2FuY2VsKCk7XG4gICAgICAgICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmUgKGlmIHBvc3NpYmxlKVxuICAgICAgICAgIHRoaXMuY2hlY2tJZlJvd1ByaXN0aW5lKHJvdywgeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSAvKmF2b2lkIHByb3BhZ2F0aW9uIHRvIHRhYmxlKi8gfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJvdy4gdGhlIHJvdyB3aWxsIGJlIGRlbGV0ZWQgYWZ0ZXIgdGhlIHNhdmVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEFwcGx5IHNhdmUsIG9ubHkgaWYgdGhlcmUgaXMgc3RpbGwgc29tZSByb3dzIHRvIGRlbGV0ZVxuICAgICAgLy8gV0FSTjogSWYgbm8gbW9yZSByb3dzIChlLmcuIGJlY2F1c2UgYWxsIGhhcyBiZWVuIGNhbmNlbGxlZCkgdGhlbiBjb250aW51ZSBhbnl3YXkgdG8gY2xlYXIgZWRpdGVkUm93IGFuZCBzZWxlY3Rpb24gKGlzc3VlIElNQUdJTkUtNjY5KVxuICAgICAgaWYgKGRlbGV0ZWRSb3dzLmxlbmd0aCB8fCB0ZW1wUm93cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gU2F2ZSBkYXRhIChlLmcuIHdoZW4gdXNpbmcgbWVtb3J5IHNlcnZpY2UpXG4gICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdkZWxldGUnKTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIC8vIFN0b3AgaWYgc2F2ZSBjYW5jZWxsZWQgb3Igc2F2ZSBmYWlsZWRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQXBwbHkgZGVsZXRpb24gb24gZGF0YXNvdXJjZVxuICAgICAgLy8gSWYgbm8gbW9yZSByb3dzIHRvIGRlbGV0ZSwgY29udGludWUgYW55d2F5IHRvIGNsZWFyIGVkaXRlZFJvdyBhbmQgc2VsZWN0aW9uIChpc3N1ZSBJTUFHSU5FLTY2OSlcbiAgICAgIGlmICh0ZW1wUm93cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gRGVsZXRlICR7dGVtcFJvd3MubGVuZ3RofSByb3dzLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuZGVsZXRlQWxsKHRlbXBSb3dzKTtcbiAgICAgIH1cblxuICAgICAgLy8gRE8gbm90IHVwZGF0ZSBtYW51YWxseSwgYmVjYXVzZSB3YXRjaEFMbCgpLnN1YnNjcmliZSgpIHdpbGwgdXBkYXRlIHRoaXMgY291bnRcbiAgICAgIC8vdGhpcy50b3RhbFJvd0NvdW50IC09IGRlbGV0ZUNvdW50O1xuICAgICAgLy90aGlzLnZpc2libGVSb3dDb3VudCAtPSBkZWxldGVDb3VudDtcblxuICAgICAgLy8gRGVzZWxlY3QgZGVsZXRlZCByb3dzXG4gICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdCguLi5yb3dzKTtcblxuICAgICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKm1hcmtGb3JDaGVjaygpIGlzIGNhbGxlZCBqdXN0IGFmdGVyKi8gfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICB0aGlzLm9uQWZ0ZXJEZWxldGVkUm93cy5uZXh0KHJvd3MpO1xuXG4gICAgICByZXR1cm4gcm93cy5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VsZWN0Um93QnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgaWYgKCFyb3cpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jbGlja1JvdyhudWxsLCByb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBzZWxlY3Qgcm93IGJ5IGRhdGEuIFdpbGwgdXNlIGVxdWFscygpIHRvIGZpbmQgc2FtZSByb3cncyBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBhc3luYyBzZWxlY3RSb3dCeURhdGEoZGF0YTogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMud2FpdElkbGUoKTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpLmZpbmQoKHJvdykgPT4gdGhpcy5lcXVhbHMocm93LmN1cnJlbnREYXRhLCBkYXRhKSk7XG4gICAgaWYgKCFyb3cpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jbGlja1JvdyhudWxsLCByb3cpO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0Um93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICAvLyAvIVxcIERPIE5PVCBwcmV2ZW50IGRlZmF1bHQsIG90aGVyd2lzZSB0aGUgY2hlY2tib3ggd2lsbCBub3QgYmUgdXBkYXRlZFxuICAgIC8vZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2VsZWN0aW9uLnRvZ2dsZShyb3cpO1xuICB9XG5cbiAgY2xpY2tSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIC8vIFdhaXQgd2hpbGUgbG9hZGluZywgYW5kIGxvb3BcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFdhaXRpbmcgYmVmb3JlIGFwcGx5IGNsaWNrUm93KCkgKGRhdGFzb3VyY2UgaXMgYnVzeSkuLi4nKTtcbiAgICAgIHRoaXMud2FpdElkbGUoeyB0aW1lb3V0OiAyMDAwIH0pLnRoZW4oKCkgPT4gdGhpcy5jbGlja1JvdyhldmVudCwgcm93KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ1t0YWJsZV0gRGV0ZWN0IGNsaWNrIG9uIHJvdycpO1xuXG4gICAgLy8gQ2FuY2VsbGVkIGJ5IGV2ZW50XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBjbGlja1JvdyBldmVudCBpcyBkZWZhdWx0UHJldmVudGVkJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBvbkNsaWNrUm93IGlmIG9ic2VydmVkXG4gICAgaWYgKHRoaXMub25DbGlja1Jvdy5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5vbkNsaWNrUm93Lm5leHQocm93KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE9wZW4gdGhlIGRldGFpbCBwYWdlIChpZiBub3QgaW5saW5lIGVkaXRpbmcpXG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHtcbiAgICAgIGlmICh0aGlzLl9vcGVuaW5nUm93KSByZXR1cm47IC8vIFByZXZlbnQgZG91YmxlIGNsaWNrXG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb3BlbmluZ1JvdyA9IHRydWU7IC8vIFByZXZlbnQgZG91YmxlIGNsaWNrXG4gICAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgICAgdGhpcy5vcGVuUm93KHJvdy5jdXJyZW50RGF0YS5pZCwgcm93KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignRmFpbGVkIHRvIG9wZW4gcm93JywgZXJyKSkgLy8gQ29udGludWVcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG5cbiAgICAgICAgICAvLyBQcmV2ZW50IGRvdWJsZSBjbGljayAodXNlIGFuIG9wZW4gdGhyb3R0bGUgdGltZSlcbiAgICAgICAgICBpZiAodGhpcy5vcGVuUm93VGhyb3R0bGVUaW1lID4gMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX29wZW5pbmdSb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIHRoaXMub3BlblJvd1Rocm90dGxlVGltZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX29wZW5pbmdSb3cgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBlZGl0aW5nIHJvd1xuICAgIHJldHVybiB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgeyBmb2N1c0NvbHVtbjogdW5kZWZpbmVkIC8qZm9yY2UgdG8gdXNlIHRoZSBjbGljayB0YXJnZXQqLyB9KTtcbiAgfVxuXG4gIG1vdmVSb3coaWQ6IG51bWJlciwgZGlyZWN0aW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UubW92ZShpZCwgZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHJlYWR5KG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB3YWl0Rm9yVHJ1ZSh0aGlzLnJlYWR5U3ViamVjdCwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0LCAuLi5vcHRzIH0pO1xuICB9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgcmV0dXJuIHdhaXRGb3JGYWxzZSh0aGlzLmxvYWRpbmdTdWJqZWN0LCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QsIC4uLm9wdHMgfSk7XG4gIH1cblxuICBhc3luYyBvcGVuU2VsZWN0Q29sdW1uc01vZGFsKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPGFueT4ge1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gQ29weSBjdXJyZW50IGNvbHVtbnMgKGRlZXAgY29weSlcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDdXJyZW50Q29sdW1ucygpO1xuXG4gICAgY29uc3QgaGFzVG9wTW9kYWwgPSAhIShhd2FpdCB0aGlzLm1vZGFsQ3RybC5nZXRUb3AoKSk7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBUYWJsZVNlbGVjdENvbHVtbnNDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczogeyBjb2x1bW5zIH0sXG4gICAgICBjc3NDbGFzczogaGFzVG9wTW9kYWwgJiYgJ3N0YWNrLW1vZGFsJyxcbiAgICB9KTtcblxuICAgIC8vIE9wZW4gdGhlIG1vZGFsXG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuXG4gICAgLy8gT24gZGlzbWlzc1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgbW9kYWwub25EaWREaXNtaXNzKCk7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47IC8vIENBTkNFTExFRFxuXG4gICAgLy8gQXBwbHkgY29sdW1uc1xuICAgIGNvbnN0IHVzZXJDb2x1bW5zID0gKGRhdGEgfHwgW10pLmZpbHRlcigoYykgPT4gYy5jYW5IaWRlID09PSBmYWxzZSB8fCBjLnZpc2libGUpLm1hcCgoYykgPT4gYy5uYW1lKSB8fCBbXTtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmNvbmNhdCh1c2VyQ29sdW1ucykuY29uY2F0KFJFU0VSVkVEX0VORF9DT0xVTU5TKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gVXBkYXRlIHVzZXIgc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModXNlckNvbHVtbnMsIFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyk7XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pOiBhbnkge1xuICAgIHJldHVybiByb3cuaWQ7XG4gIH1cblxuICBkb1JlZnJlc2goZXZlbnQ/OiBDb21wbGV0YWJsZUV2ZW50KSB7XG4gICAgdGhpcy5lbWl0UmVmcmVzaChldmVudCk7XG5cbiAgICAvLyBXaGVuIHRhcmdldCB3YWl0IGZvciBhIGNvbXBsZXRlIChlLmcuIElvblJlZnJlc2hlcilcbiAgICBpZiAoZXZlbnQ/LnRhcmdldCAmJiBldmVudC50YXJnZXQuY29tcGxldGUpIHtcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgICAgIGV2ZW50LnRhcmdldC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudENvbHVtbnMoKTogQ29sdW1uSXRlbVtdIHtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLnNsaWNlKFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoKS5maWx0ZXIoKG5hbWUpID0+IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKG5hbWUpID09PSAtMSk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1xuICAgICAgLmNvbmNhdChoaWRkZW5Db2x1bW5zKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gIVJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMobmFtZSkgJiYgIVJFU0VSVkVEX0VORF9DT0xVTU5TLmluY2x1ZGVzKG5hbWUpICYmICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhuYW1lKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxhYmVsOiB0aGlzLmdldEkxOG5Db2x1bW5OYW1lKG5hbWUpLFxuICAgICAgICB2aXNpYmxlOiB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZihuYW1lKSAhPT0gLTEsXG4gICAgICAgIGNhbkhpZGU6IHRoaXMuZ2V0UmVxdWlyZWRDb2x1bW5zKCkuaW5kZXhPZihuYW1lKSA9PT0gLTEsXG4gICAgICB9KSk7XG4gIH1cblxuICBlc2NhcGVFZGl0aW5nUm93KGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPikge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhcm93LmVkaXRpbmcpIHJldHVybjtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbYXBwLXRhYmxlXSBDYW5jZWwgdGhlIHJvdyAoa2V5ZG93bi5lc2NhcGUpJyk7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIC8vIEF2b2lkIHRvIGNhbmNlbCB0aGUgZWRpdG9yXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgbmV3IHJvdyAobm8gaWQpXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEpIHtcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yKSB7XG4gICAgICAgIC8vIElmIHBlbmRpbmc6IFdhaXQgZW5kIG9mIHZhbGlkYXRpb24sIHRoZW4gbG9vcFxuICAgICAgICBpZiAocm93LnBlbmRpbmcpIHtcbiAgICAgICAgICBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyhyb3cudmFsaWRhdG9yKS50aGVuKCgpID0+IHRoaXMuZXNjYXBlRWRpdGluZ1JvdyhldmVudCwgcm93KSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUm93IGlzIGludmFsaWQ6IGRlbGV0ZSB0aGUgcm93XG4gICAgICAgIGlmIChyb3cuaW52YWxpZCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCByb3cpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgcm93IGV4aXN0cyAoaGFzIGFuIGlkKVxuICAgIGVsc2Uge1xuICAgICAgLy8gQ2FsbCBjYW5jZWwgZnVuY3Rpb24gLFxuICAgICAgLy8gLSBpZiBjb25maXJtYXRpb24gd2lsbCBiZSBjYWxsZWQgYmVmb3JlXG4gICAgICAvLyAtIG9yIGlmIHJvdyBpcyBwcmlzdGluZSAobm90IGRpcnR5KVxuICAgICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCB8fCAhcm93LmRpcnR5KSB7XG4gICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgeyBrZWVwRWRpdGluZzogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCB0cnkgdG8gY29uZmlybSB0aGUgcm93XG4gICAgdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUZvcm1QYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcywgdG8gcmVzb2x2ZSBhbGwgZmllbGQgbmFtZVxuXG4gICAgLy8gVXNlIGNvbHVtbnMga2V5LCBoYXMgZGVmYXVsdCBuYW1lXG4gICAgY29uc3QgaTE4bkNvbHVtbktleSA9IHRoaXMuZ2V0STE4bkNvbHVtbk5hbWUocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlPy5pbnN0YW50KGkxOG5Db2x1bW5LZXkpIHx8IGkxOG5Db2x1bW5LZXk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJvdGVjdGVkIGVkaXRSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fZW5hYmxlZCB8fCAhdGhpcy5pbmxpbmVFZGl0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93ID09PSByb3cpIHJldHVybiB0cnVlOyAvLyBBbHJlYWR5IHRoZSBlZGl0ZWQgcm93XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjb25maXJtZWQgPSB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKCk7XG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghcm93LmVkaXRpbmcgJiYgIXRoaXMubG9hZGluZykge1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IG9wdHM/LmZvY3VzQ29sdW1uID8/IHRoaXMuZm9jdXNDb2x1bW47XG4gICAgICB0aGlzLl9kYXRhU291cmNlLnN0YXJ0RWRpdChyb3cpO1xuICAgIH1cbiAgICB0aGlzLmVkaXRlZFJvdyA9IHJvdztcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LmVtaXQocm93KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gc2VsZWN0IHJvdywgYnkgcm93LmlkLCBvciBieSBkYXRhLiBXSWxsIHVzZSBFbnRpdHlVdGlscy5lcXVhbHMoKVxuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHNlbGVjdFJvd0J5SWRPckRhdGEoaWQ6IG51bWJlciwgZGF0YT86IFQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAvLyBTZWxlY3QgYnkgcm93IGlkIChpZiBOT1QgYSBuZXcgcm93KVxuICAgICAgaWYgKGlzTm90TmlsKGlkKSB8fCBpZCAhPT0gLTEpIHtcbiAgICAgICAgZG9uZSA9IGF3YWl0IHRoaXMuc2VsZWN0Um93QnlJZChpZCk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTYXZlOiBDYW5ub3QgcmVzZWxlY3Qgcm93IGJ5IHJvdy5pZDogJywgaWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgYnkgZGF0YVxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgZG9uZSA9IGF3YWl0IHRoaXMuc2VsZWN0Um93QnlEYXRhKGRhdGEpO1xuICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnNvbGUud2FybignW2FwcC10YWJsZV0gU2F2ZTogQ2Fubm90IHJlc2VsZWN0IHJvdyBieSBkYXRhOiAnLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gTG9nLCBidXQgY29udGludWVcbiAgICAgIGNvbnNvbGUuZXJyb3IoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBzZWxlY3RlZCByb3cgaWYgdW5pcXVlIGluIHNlbGVjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBzaW5nbGVTZWxlY3RlZFJvdygpOiBUYWJsZUVsZW1lbnQ8VD4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZD8ubGVuZ3RoID09PSAxID8gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRbMF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2FuRGVsZXRlUm93cyhyb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBDaGVjayB1c2luZyBlbWl0dGVyXG4gICAgaWYgKHRoaXMub25CZWZvcmVEZWxldGVSb3dzLm9ic2VydmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjYW5EZWxldGUgPSBhd2FpdCBlbWl0UHJvbWlzZUV2ZW50KHRoaXMub25CZWZvcmVEZWxldGVSb3dzLCAnY2FuRGVsZXRlJywge1xuICAgICAgICAgIGRldGFpbDogeyByb3dzIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWNhbkRlbGV0ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBkZWxldGUgcm93cycsIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFza0RlbGV0ZUNvbmZpcm1hdGlvbihudWxsLCByb3dzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2FuQ2FuY2VsUm93cyhyb3dzPzogVGFibGVFbGVtZW50PFQ+W10sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gR2V0IGRpcnR5IHJvd3NcbiAgICByb3dzID0gcm93cyB8fCB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpLmZpbHRlcigocm93KSA9PiByb3cudmFsaWRhdG9yPy5kaXJ0eSk7XG5cbiAgICBpZiAoaXNFbXB0eUFycmF5KHJvd3MpKSByZXR1cm4gdHJ1ZTsgLy8gTm8gZGlydHk6IE9LXG5cbiAgICAvLyBDaGVjayB1c2luZyBlbWl0dGVyXG4gICAgaWYgKHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLm9ic2VydmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc0NhbmNlbCA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZUNhbmNlbFJvd3MsICdjYW5DYW5jZWwnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7IHJvd3MgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaXNDYW5jZWwpIHJldHVybiBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbFxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBjaGVja2luZyBpZiBjYW4gY2FuY2VsIHJvd3MnLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uXG4gICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCAmJiAoIW9wdHMgfHwgb3B0cy5pbnRlcmFjdGl2ZSAhPT0gZmFsc2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc2tDYW5jZWxDb25maXJtYXRpb24obnVsbCwgcm93cyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNhdmVCZWZvcmVBY3Rpb24oc2F2ZUFjdGlvbjogU2F2ZUFjdGlvblR5cGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuZGlydHkpIHtcbiAgICAgIC8vIENvbnRpbnVlIHdpdGhvdXQgc2F2ZVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHNhdmU6IGJvb2xlYW47XG4gICAgc3dpdGNoIChzYXZlQWN0aW9uKSB7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICBzYXZlID0gdGhpcy5zYXZlQmVmb3JlRGVsZXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAgIHNhdmUgPSB0aGlzLnNhdmVCZWZvcmVGaWx0ZXI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc29ydCc6XG4gICAgICAgIHNhdmUgPSB0aGlzLnNhdmVCZWZvcmVTb3J0O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHNhdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3JcbiAgICBsZXQgY29uZmlybWVkID0gdHJ1ZTtcblxuICAgIGlmIChzYXZlKSB7XG4gICAgICBpZiAodGhpcy5vbkJlZm9yZVNhdmUub2JzZXJ2ZWQpIHtcbiAgICAgICAgLy8gQXNrIGNvbmZpcm1hdGlvblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZVNhdmUsICdiZWZvcmVTYXZlJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IGFjdGlvbjogc2F2ZUFjdGlvbiwgdmFsaWQ6IHRoaXMudmFsaWQgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25maXJtZWQgPSByZXMuY29uZmlybWVkO1xuICAgICAgICAgIHNhdmUgPSByZXMuc2F2ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVyciA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBjaGVja2luZyBpZiBjYW4gZGVsZXRlIHJvd3MnLCBlcnIpO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIGlmIChzYXZlKSB7XG4gICAgICAgIC8vIFVzZXIgY29uZmlybWVkIHNhdmVcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmUoKTtcbiAgICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpOyAvLyBSZXN0b3JlIGRpcnR5IGZsYWdcbiAgICAgICAgcmV0dXJuIHNhdmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7IC8vIE5vIHNhdmUgYnV0IGNvbnRpbnVlIGFjdGlvblxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWwgdGhlIGFjdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSByb3cgZGV0YWlsIHZpZXcuIEJ5IGRlZmF1bHQsIHdpbGwgdG8gb3BlbiByb3cgZGV0YWlsIHBhZ2UuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMsIEJVVCBwcmVmZXIgdG8gc3Vic2NyaWJlIG9uIG9uT3BlblJvd1xuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb3BlblJvdyhpZDogSUQsIHJvdzogVGFibGVFbGVtZW50PFQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYWxsb3dSb3dEZXRhaWwpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnICYmIHRoaXMuZGlydHkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIE9wZW5pbmcgcm93IGRldGFpbHMsIGJ1dCB0YWJsZSBoYXMgdW5zYXZlZCBjaGFuZ2VzIScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vbk9wZW5Sb3cub2JzZXJ2ZWQpIHtcbiAgICAgICAgLy8gQ2xlYXIgc2VsZWN0aW9uIChiZWNhdXNlIG5leHQgcm91dGUgY2FuIGNoYW5nZSB0aGUgY3VycmVudCB0YWJsZSBjb250ZW50KVxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLm9uT3BlblJvdy5lbWl0KHJvdyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBJRCBkZWZpbmVkOiB1bmFibGUgdG8gb3BlbiBkZXRhaWxzXG4gICAgICBpZiAoaXNOaWwoaWQpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBPcGVuaW5nIHJvdyBkZXRhaWxzLCBidXQgZGF0YSBoYXMgbm8gaWQhJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgc2VsZWN0aW9uIChiZWNhdXNlIG5leHQgcm91dGUgY2FuIGNoYW5nZSB0aGUgY3VycmVudCB0YWJsZSBjb250ZW50KVxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcblxuICAgICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUZvcndhcmQoWycuJywgaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7fSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb3Blbk5ld1Jvd0RldGFpbChldmVudD86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5hbGxvd1Jvd0RldGFpbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMub25OZXdSb3cub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMub25OZXdSb3cuZW1pdChldmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDbGVhciBzZWxlY3Rpb24gKGJlY2F1c2UgbmV4dCByb3V0ZSBjYW4gY2hhbmdlIHRoZSBjdXJyZW50IHRhYmxlIGNvbnRlbnQpXG4gICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcblxuICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKFsnLicsICduZXcnXSwge1xuICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNhbiBiZSBvdmVycmlkZGVuIHRvIGFkZCBtb3JlIHJlcXVpcmVkIGNvbHVtbnNcbiAgcHJvdGVjdGVkIGdldFJlcXVpcmVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gREVGQVVMVF9SRVFVSVJFRF9DT0xVTU5TO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFVzZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlU2V0dGluZ3MoU0VUVElOR1NfRElTUExBWV9DT0xVTU5TKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTb3J0ZWRDb2x1bW4oKTogTWF0U29ydGFibGUge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBhZ2VTZXR0aW5ncyhTRVRUSU5HU19TT1JURURfQ09MVU1OKTtcbiAgICBjb25zdCBwYXJ0cyA9IGRhdGEgJiYgZGF0YS5zcGxpdCgnOicpO1xuICAgIGlmIChwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPT09IDIgJiYgdGhpcy5jb2x1bW5zLmluY2x1ZGVzKHBhcnRzWzBdKSkge1xuICAgICAgcmV0dXJuIHsgaWQ6IHBhcnRzWzBdLCBzdGFydDogcGFydHNbMV0gPT09ICdkZXNjJyA/ICdkZXNjJyA6ICdhc2MnLCBkaXNhYmxlQ2xlYXI6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmRlZmF1bHRTb3J0QnkpIHtcbiAgICAgIHJldHVybiB7IGlkOiB0aGlzLmRlZmF1bHRTb3J0QnksIHN0YXJ0OiB0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uIHx8ICdhc2MnLCBkaXNhYmxlQ2xlYXI6IGZhbHNlIH07XG4gICAgfVxuICAgIHJldHVybiB7IGlkOiAnaWQnLCBzdGFydDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2UgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5nZXRQYWdlU2V0dGluZ3M8bnVtYmVyPihTRVRUSU5HU19QQUdFX1NJWkUpO1xuICAgIHJldHVybiBwYWdlU2l6ZSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaXNwbGF5Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHVzZXJDb2x1bW5zID0gdGhpcy5nZXRVc2VyQ29sdW1ucygpO1xuXG4gICAgLy8gTm8gdXNlciBvdmVycmlkZVxuICAgIGlmICghdXNlckNvbHVtbnMpIHtcbiAgICAgIC8vIFJldHVybiBkZWZhdWx0LCB3aXRob3V0IGNvbHVtbnMgdG8gaGlkZVxuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpO1xuICAgIH1cblxuICAgIC8vIEdldCBmaXhlZCBzdGFydCBjb2x1bW5zXG4gICAgY29uc3QgZml4ZWRTdGFydENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjKSA9PiBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIFJlbW92ZSBlbmQgY29sdW1uc1xuICAgIGNvbnN0IGZpeGVkRW5kQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGMpID0+IFJFU0VSVkVEX0VORF9DT0xVTU5TLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIFJlbW92ZSBmaXhlZCBjb2x1bW5zIGZyb20gdXNlciBjb2x1bW5zXG4gICAgdXNlckNvbHVtbnMgPSB1c2VyQ29sdW1ucy5maWx0ZXIoKGMpID0+ICFmaXhlZFN0YXJ0Q29sdW1ucy5pbmNsdWRlcyhjKSAmJiAhZml4ZWRFbmRDb2x1bW5zLmluY2x1ZGVzKGMpICYmIHRoaXMuY29sdW1ucy5pbmNsdWRlcyhjKSk7XG5cbiAgICAvLyBBZGQgcmVxdWlyZWQgY29sdW1ucyBpZiBtaXNzaW5nXG4gICAgdXNlckNvbHVtbnMucHVzaChcbiAgICAgIC4uLnRoaXMuZ2V0UmVxdWlyZWRDb2x1bW5zKCkuZmlsdGVyKChjKSA9PiAhZml4ZWRTdGFydENvbHVtbnMuaW5jbHVkZXMoYykgJiYgIWZpeGVkRW5kQ29sdW1ucy5pbmNsdWRlcyhjKSAmJiAhdXNlckNvbHVtbnMuaW5jbHVkZXMoYykpXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICBmaXhlZFN0YXJ0Q29sdW1uc1xuICAgICAgICAuY29uY2F0KHVzZXJDb2x1bW5zKVxuICAgICAgICAuY29uY2F0KGZpeGVkRW5kQ29sdW1ucylcbiAgICAgICAgLy8gUmVtb3ZlIGNvbHVtbnMgdG8gaGlkZVxuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+ICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb21wdXRlIGRpc3BsYXkgY29sdW1uc1xuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlQ29sdW1ucygpIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmdldERpc3BsYXlDb2x1bW5zKCk7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmcpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJTdWJzY3JpcHRpb24oc3ViOiBTdWJzY3JpcHRpb24pIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHN1Yik7XG4gIH1cblxuICBwcm90ZWN0ZWQgdW5yZWdpc3RlclN1YnNjcmlwdGlvbihzdWI6IFN1YnNjcmlwdGlvbikge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5yZW1vdmUoc3ViKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlckF1dG9jb21wbGV0ZUZpZWxkPEUgPSBhbnksIEVGID0gYW55PihcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTWF0QXV0b2NvbXBsZXRlRmllbGRBZGRPcHRpb25zPEUsIEVGPlxuICApOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZzxFLCBFRj4ge1xuICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVDb25maWdIb2xkZXIuYWRkKGZpZWxkTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0STE4bkNvbHVtbk5hbWUoY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuICh0aGlzLmkxOG5Db2x1bW5QcmVmaXggfHwgJycpICsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZShjb2x1bW5OYW1lKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdlbmVyYXRlVGFibGVJZCgpIHtcbiAgICAvLyBub2luc3BlY3Rpb24gSlNOb25BU0NJSU5hbWVzXG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29uc3RydWN0b3JbJ8m1Y21wJ107XG4gICAgLy8gR2V0IGEgY29tcG9uZW50IHVuaXF1ZSBuYW1lIC0gU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMTE0NjgyL2hvdy10by1hY2Nlc3MtY29tcG9uZW50cy11bmlxdWUtZW5jYXBzdWxhdGlvbi1pZC1pbi1hbmd1bGFyLTlcbiAgICBjb25zdCBjb21wb25lbnRJZCA9IChtZXRhICYmIChtZXRhLnNlbGVjdG9ycz8uWzBdIHx8IG1ldGEuaWQpKSB8fCB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgY29uc3QgaWQgPVxuICAgICAgdGhpcy5sb2NhdGlvblxuICAgICAgICAucGF0aCh0cnVlKVxuICAgICAgICAucmVwbGFjZSgvWz9dLiokL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvXFwvXFxkKy9nLCAnX2lkJykgK1xuICAgICAgJ18nICtcbiAgICAgIGNvbXBvbmVudElkO1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gaWQgPSAnICsgaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRSb3dUb1RhYmxlKFxuICAgIGluc2VydEF0PzogbnVtYmVyLFxuICAgIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nOyBlZGl0aW5nPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9XG4gICk6IFByb21pc2U8VGFibGVFbGVtZW50PFQ+IHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gVHJ5IHRvIGZpbmlzaCBlZGl0ZWQgcm93IGZpcnN0XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBDYW5ub3QgYWRkIG5ldyByb3csIGJlY2F1c2UgdGhlIHByZXZpb3VzIGVkaXRlZCByb3cgY2Fubm90IGJlIGNvbmZpcm1lZCcpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlZGl0aW5nID0gdGhpcy5pbmxpbmVFZGl0aW9uICYmIG9wdHM/LmVkaXRpbmcgIT09IGZhbHNlOyAvLyB0cnVlIGJ5IGRlZmF1bHQsIGlmIGlubGluZUVkaXRpb25cblxuICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuY3JlYXRlTmV3KGluc2VydEF0LCB7IGVkaXRpbmcgfSk7XG4gICAgaWYgKCFyb3cpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgIC8vIFVwZGF0ZSBmb2N1c2VkIGNvbHVtblxuICAgICAgdGhpcy5mb2N1c0ZpcnN0Q29sdW1uID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSBvcHRzPy5mb2N1c0NvbHVtbiB8fCB0aGlzLmZpcnN0VXNlckNvbHVtbjtcblxuICAgICAgLy8gRW1pdCBzdGFydCBlZGl0aW5nIGV2ZW50XG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IHJvdztcbiAgICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3cuZW1pdChyb3cpO1xuICAgIH1cblxuICAgIHRoaXMudG90YWxSb3dDb3VudCsrO1xuICAgIHRoaXMudmlzaWJsZVJvd0NvdW50Kys7XG5cbiAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKm1hcmtGb3JDaGVjaygpIGlzIGNhbGxlZCBqdXN0IGFmdGVyKi8gfSk7XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJDZWxsVmFsdWVDaGFuZ2VzKG5hbWU6IHN0cmluZywgZm9ybVBhdGg/OiBzdHJpbmcsIGVtaXRJbml0aWFsVmFsdWU/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBmb3JtUGF0aCA9IGZvcm1QYXRoIHx8IG5hbWU7XG4gICAgZW1pdEluaXRpYWxWYWx1ZSA9IGVtaXRJbml0aWFsVmFsdWUgfHwgZmFsc2U7XG4gICAgbGV0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmIChkZWYgJiYgKGRlZi5mb3JtUGF0aCAhPT0gZm9ybVBhdGggfHwgZGVmLmVtaXRJbml0aWFsVmFsdWUgIT09IGVtaXRJbml0aWFsVmFsdWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkFscmVhZHkgcmVnaXN0ZXIgYSBjZWxsIHZhbHVlIGNoYW5nZSBmb3IgdGhpcyBuYW1lLCB3aXRoIGRpZmZlcmVudCAnZm9ybVBhdGgnIG9yICdlbWl0SW5pdGlhbFZhbHVlJy4gUGxlYXNlIHVzZSBzYW1lIGFyZ3VtZW50cy5cIik7XG4gICAgfVxuXG4gICAgLy8gTm90IGV4aXN0czogcmVnaXN0ZXIgbmV3IGRlZmluaXRpb25cbiAgICBpZiAoIWRlZikge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gTmV3IGxpc3RlbmVyIHske25hbWV9fSBmb3IgdmFsdWUgY2hhbmdlcyBvbiBwYXRoICR7Zm9ybVBhdGh9YCk7XG4gICAgICBkZWYgPSB7XG4gICAgICAgIHN1YmplY3Q6IG5ldyBTdWJqZWN0PGFueT4oKSxcbiAgICAgICAgc3Vic2NyaXB0aW9uOiBudWxsLFxuICAgICAgICBmb3JtUGF0aCxcbiAgICAgICAgZW1pdEluaXRpYWxWYWx1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXSA9IGRlZjtcblxuICAgICAgLy8gU3RhcnQgdGhlIGxpc3RlbmVyLCB3aGVuIGVkaXRpbmcgc3RhcnRzXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMub25TdGFydEVkaXRpbmdSb3cuc3Vic2NyaWJlKChyb3cpID0+IHRoaXMuc3RhcnRDZWxsVmFsdWVDaGFuZ2VzKG5hbWUsIHJvdykpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmLnN1YmplY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U2hvd0NvbHVtbihjb2x1bW5OYW1lOiBzdHJpbmcsIHNob3c6IGJvb2xlYW4sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uTmFtZSkgIT09IHNob3cpIHtcbiAgICAgIGlmICghc2hvdykge1xuICAgICAgICB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5wdXNoKGNvbHVtbk5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gY29sdW1uTmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWNvbXB1dGUgZGlzcGxheSBjb2x1bW5zXG4gICAgICBpZiAodGhpcy5kaXNwbGF5ZWRDb2x1bW5zICYmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uTmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhc2tEZWxldGVDb25maXJtYXRpb24oZXZlbnQ/OiBFdmVudCwgcm93cz86IFRhYmxlRWxlbWVudDxUPltdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMudW5kb2FibGVEZWxldGlvbikge1xuICAgICAgLy8gU3BlY2lhbCBtZXNzYWdlLCBmb3IgdW5kb2FibGUgZGVsZXRpb25cbiAgICAgIHJldHVybiBBbGVydHMuYXNrQ29uZmlybWF0aW9uKHJvd3M/Lmxlbmd0aCA9PT0gMSA/ICdDT05GSVJNLkRFTEVURV9ST1cnIDogJ0NPTkZJUk0uREVMRVRFX1JPV1MnLCB0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGV2ZW50KTtcbiAgICB9XG4gICAgLy8gSW1tZWRpYXRlIGRlbGV0aW9uIGFjdGlvblxuICAgIHJldHVybiBBbGVydHMuYXNrQWN0aW9uQ29uZmlybWF0aW9uKHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgdHJ1ZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFza0NhbmNlbENvbmZpcm1hdGlvbihldmVudD86IEV2ZW50LCByb3dzPzogVGFibGVFbGVtZW50PFQ+W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQWxlcnRzLmFza0NvbmZpcm1hdGlvbihyb3dzPy5sZW5ndGggPT09IDEgPyAnQ09ORklSTS5DQU5DRUxfUk9XJyA6ICdDT05GSVJNLkNBTkNFTF9ST1dTJywgdGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXNrUmVzdG9yZUNvbmZpcm1hdGlvbihldmVudD86IEV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCBmYWxzZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLnRvYXN0Q29udHJvbGxlcikgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB0b2FzdENvbnRyb2xsZXIgaW4gY29tcG9uZW50J3MgY29uc3RydWN0b3JcIik7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRFcnJvcihvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLnNldEVycm9yKHVuZGVmaW5lZCwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Um93RXJyb3Iocm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogRm9ybUVycm9yVHJhbnNsYXRlT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmICghcm93IHx8ICF0aGlzLmZvcm1FcnJvckFkYXB0ZXIpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gdGhpcy5mb3JtRXJyb3JBZGFwdGVyLnRyYW5zbGF0ZUZvcm1FcnJvcnMocm93LnZhbGlkYXRvciwge1xuICAgICAgLi4udGhpcy5lcnJvclRyYW5zbGF0ZU9wdGlvbnMsXG4gICAgICAuLi5vcHRzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEVycm9yKHZhbHVlOiBzdHJpbmcsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmVycm9yU3ViamVjdC52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIGRhdGEgZXF1YWxpdHkgKGRlZmF1bHQgYnkgaWQsIHVzaW5nIEVudGl0eVV0aWxzLmVxdWFscygpKVxuICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiB0byBhZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtIGQxXG4gICAqIEBwYXJhbSBkMlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZXF1YWxzKGQxOiBULCBkMjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBFbnRpdHlVdGlscy5lcXVhbHMoZDEsIGQyLCAnaWQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrUm93QXNEaXJ0eShyb3c/OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEVWZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmIChyb3cpIHJvdy52YWxpZGF0b3I/Lm1hcmtBc0RpcnR5KG9wdHMpO1xuICAgIHRoaXMubWFya0FzRGlydHkob3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGFnZVNldHRpbmdzPFQgPSBhbnk+KHByb3BlcnR5TmFtZT86IHN0cmluZyk6IFQge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncyh0aGlzLnNldHRpbmdzSWQsIHByb3BlcnR5TmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVBhZ2VTZXR0aW5ncyh2YWx1ZTogYW55LCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3Muc2F2ZVBhZ2VTZXR0aW5nKHRoaXMuc2V0dGluZ3NJZCwgdmFsdWUsIHByb3BlcnR5TmFtZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdFJlZnJlc2godmFsdWU/OiBhbnkpIHtcbiAgICAvLyBFbWl0IG9uUmVmcmVzaCBpZiBub3QgY2xvc2VkIChjYW4gaGFwcGVuIGlmIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgdG8gZWFybHkpXG4gICAgaWYgKCEhdGhpcy5vblJlZnJlc2ggJiYgIXRoaXMub25SZWZyZXNoLmNsb3NlZCkge1xuICAgICAgdGhpcy5vblJlZnJlc2guZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHBlcm1hbmVudCBzZWxlY3Rpb24gbW9kZWxcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRQZXJtYW5lbnRTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMucGVybWFuZW50U2VsZWN0aW9uKSB0aHJvdyBuZXcgRXJyb3IoJ2luaXRQZXJtYW5lbnRTZWxlY3Rpb24oKSBhbHJlYWR5IGNhbGxlZCEnKTtcblxuICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRydWUsIFtdKTtcblxuICAgIC8vIExpc3RlbiBzb3J0IGNoYW5nZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uU29ydC5zdWJzY3JpYmUoKCkgPT4gKHRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCA9IHRydWUpKSAvLyBwcmV2ZW50IHNlbGVjdGlvbiBjaGFuZ2Ugb24gc29ydFxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gZGF0YXNvdXJjZSB1cGRhdGVcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5kYXRhU291cmNlLnJvd3NTdWJqZWN0XG4gICAgICAgIC8vIHJlc3RvcmUgdGhlICdhZGRpbmcnIHNlbGVjdGlvbiAoZm9yIGV4YW1wbGUgYWZ0ZXIgYSBwYWdlIG9yIHNvcnQgY2hhbmdlKVxuICAgICAgICAuc3Vic2NyaWJlKChyb3dzKSA9PiB7XG4gICAgICAgICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkID0gdHJ1ZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGVybWFuZW50U2VsZWN0aW9uSWRzID0gKHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNlbGVjdGVkIHx8IFtdKS5tYXAoRW50aXR5VXRpbHMuZ2V0SWQpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uKC4uLnJvd3MuZmlsdGVyKChyb3cpID0+IHBlcm1hbmVudFNlbGVjdGlvbklkcy5pbmNsdWRlcyhBcHBUYWJsZVV0aWxzLmdldEVudGl0eUlkKHJvdykpKSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBzZWxlY3Rpb24gY2hhbmdlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNoYW5nZWQucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCkpLnN1YnNjcmliZSgoc2VsZWN0aW9uQ2hhbmdlKSA9PiB7XG4gICAgICAgIC8vIGFkZCB0byBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZS5hZGRlZC5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oXG4gICAgICAgICAgICAuLi4odGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pXG4gICAgICAgICAgICAgIC8vIEFkZCBuZXcgZWxlbWVudHNcbiAgICAgICAgICAgICAgLmNvbmNhdCguLi5BcHBUYWJsZVV0aWxzLmdldEVudGl0aWVzKHNlbGVjdGlvbkNoYW5nZS5hZGRlZCkuZmlsdGVyKEVudGl0eVV0aWxzLmhhc0lkKSlcbiAgICAgICAgICAgICAgLy8gQXZvaWQgZHVwbGljYXRlZCBlbnRpdGllcyAoTWFudGlzICM1NTM1MSlcbiAgICAgICAgICAgICAgLmZpbHRlcihFbnRpdHlVdGlscy5hcnJheURpc3RpbmN0RmlsdGVyRm4pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgZnJvbSBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHJlbW92ZWRJZHMgPSBBcHBUYWJsZVV0aWxzLmdldEVudGl0eUlkcyhzZWxlY3Rpb25DaGFuZ2UucmVtb3ZlZCk7XG4gICAgICAgICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFxuICAgICAgICAgICAgLi4uKHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNlbGVjdGVkIHx8IFtdKS5maWx0ZXIoKGVudGl0eSkgPT4gRW50aXR5VXRpbHMuaGFzSWQoZW50aXR5KSAmJiAhcmVtb3ZlZElkcy5pbmNsdWRlcyhlbnRpdHkuaWQpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0ZW5Tb3J0QW5kUGFnaW5hdGlvbkV2ZW50cygpIHtcbiAgICBpZiAoIXRoaXMudGFibGUpIHtcbiAgICAgIC8vIERFQlVHIG9ubHkgLS0gYWxlcnQgdXNlciB0aGF0IHRhYmxlIG5vdCBmb3VuZCBpbiB0ZW1wbGF0ZVxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgIXRoaXMudGFibGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW3RhYmxlXSBNaXNzaW5nIDxtYXQtdGFibGU+IGluIHRoZSBIVE1MIHRlbXBsYXRlIChhZnRlciB3YWl0aW5nIDUwMG1zKSEgQ29tcG9uZW50OiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKSxcbiAgICAgICAgICA1MDBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWFrZSBzdXJlIHRvIHdhaXQgdGhlIHRhYmxlXG4gICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+ICEhdGhpcy50YWJsZSwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0LCBzdG9wRXJyb3I6IGZhbHNlIC8qYXZvaWQgZXJyb3Igd2hlbiBkZXN0b3J5aW5nIHRoZSB0YWJsZSovIH0pO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gTGlzdGVuIHNvcnQgZXZlbnRzXG4gICAgICAgICh0aGlzLnNvcnQgJiZcbiAgICAgICAgICB0aGlzLnNvcnQuc29ydENoYW5nZS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLnNvcnQuZGlzYWJsZWQpLFxuICAgICAgICAgICAgbWVyZ2VNYXAoYXN5bmMgKCkgPT4gdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdzb3J0JykpLFxuICAgICAgICAgICAgZmlsdGVyKChyZXMpID0+IHJlcyA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAvLyBTYXZlIHNvcnQgaW4gc2V0dGluZ3NcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gW3RoaXMuc29ydC5hY3RpdmUsIHRoaXMuc29ydC5kaXJlY3Rpb24gfHwgJ2FzYyddLmpvaW4oJzonKTtcbiAgICAgICAgICAgICAgdGhpcy5zYXZlUGFnZVNldHRpbmdzKHZhbHVlLCBTRVRUSU5HU19TT1JURURfQ09MVU1OKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSkgfHxcbiAgICAgICAgICBFTVBUWSxcblxuICAgICAgICAvLyBMaXN0ZW4gcGFnaW5hdG9yIGV2ZW50c1xuICAgICAgICAodGhpcy5wYWdpbmF0b3IgJiZcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoXykgPT4gdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdzb3J0JykpLFxuICAgICAgICAgICAgZmlsdGVyKChzYXZlZCkgPT4gc2F2ZWQgPT09IHRydWUpLFxuICAgICAgICAgICAgLy8gU2F2ZSBwYWdlIHNpemUgaW4gc2V0dGluZ3NcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModGhpcy5wYWdpbmF0b3IucGFnZVNpemUsIFNFVFRJTkdTX1BBR0VfU0laRSkpXG4gICAgICAgICAgKSkgfHxcbiAgICAgICAgICBFTVBUWVxuICAgICAgKVxuICAgICAgICAvLyBSZWZyZXNoIG9uIGFueSBzb3J0IG9yIHBhZ2luYXRvciBldmVudHNcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLm9uU29ydC5lbWl0KHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmVtaXRSZWZyZXNoKHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gSWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgc29ydCBvcmRlciwgcmVzZXQgYmFjayB0byB0aGUgZmlyc3QgcGFnZS5cbiAgICBpZiAodGhpcy5zb3J0ICYmIHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuc29ydC5zb3J0Q2hhbmdlLnBpcGUoZmlsdGVyKCgpID0+ICF0aGlzLnNvcnQuZGlzYWJsZWQpKS5zdWJzY3JpYmUoKCkgPT4gKHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDApKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlZGl0Um93QnlJZChldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIGlkOiBudW1iZXIsIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nIH0pIHtcbiAgICBpZiAoaWQgPCAwKSByZXR1cm47XG4gICAgaWYgKGlkID49IHRoaXMudmlzaWJsZVJvd0NvdW50KSB7XG4gICAgICB0aGlzLmFkZFJvdyhldmVudCwgdW5kZWZpbmVkLCB7IC4uLm9wdHMsIGVkaXRpbmc6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuZGF0YVNvdXJjZS5nZXRSb3coaWQpO1xuICAgICAgdGhpcy5lZGl0Um93KGV2ZW50LCByb3csIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZGluZyh2YWx1ZTogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcblxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlTmV3Um93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICAvLyBNYWtlIHN1cmUgcm93IHdpbGwgYmUgY2FuY2VsbGVkLCBhbmQgTk9UIGRlbGV0ZWRcbiAgICBpZiAocm93LmlkICE9PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdSb3cgbXVzdCBoYXZlIGlkID0gLTEnKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIHRoaXMuZWRpdGVkUm93ID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCByb3dcbiAgICB0aGlzLl9kYXRhU291cmNlLmNhbmNlbE9yRGVsZXRlKHJvdyk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICB0aGlzLm9uQ2FuY2VsT3JEZWxldGVSb3cubmV4dChyb3cpO1xuICAgIHRoaXMudG90YWxSb3dDb3VudC0tO1xuICAgIHRoaXMudmlzaWJsZVJvd0NvdW50LS07XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUV4aXN0aW5nUm93KGV2ZW50OiBFdmVudCB8IG51bGwsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSkge1xuICAgIC8vIE1ha2Ugc3VyZSByb3cgd2lsbCBiZSBjYW5jZWxsZWQsIGFuZCBOT1QgZGVsZXRlZFxuICAgIGlmIChyb3cuaWQgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ1JvdyBtdXN0IGhhdmUgYW4gaWQnKTtcblxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIDA7IC8vIFNLaXBcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuZGVsZXRlUm93KG51bGwsIHJvdywgb3B0cyk7XG4gIH1cblxuICBwcml2YXRlIGNhbmNlbEV4aXN0aW5nUm93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsga2VlcEVkaXRpbmc/OiBib29sZWFuIH0pIHtcbiAgICAvLyBNYWtlIHN1cmUgcm93IHdpbGwgYmUgY2FuY2VsbGVkLCBhbmQgTk9UIGRlbGV0ZWRcbiAgICBpZiAocm93LmlkID09PSAtMSB8fCAhcm93LmVkaXRpbmcpIHRocm93IG5ldyBFcnJvcignUm93IGNhbm5vdCBiZSBjYW5jZWxpbmcsIGJ1dCBvbmx5IGRlbGV0aW5nJyk7XG5cbiAgICBjb25zdCBjb25maXJtZWQgPSAhb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZTtcblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvbiwgaWYgY2FuY2VsXG4gICAgaWYgKCFjb25maXJtZWQgJiYgcm93LmRpcnR5ICYmICh0aGlzLmNvbmZpcm1CZWZvcmVDYW5jZWwgfHwgdGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZWQpKSB7XG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNhbkNhbmNlbFJvd3MoW3Jvd10sIG9wdHMpLnRoZW4oKGNvbmZpcm0pID0+IHtcbiAgICAgICAgLy8gSWYgY29uZmlybWVkLCBsb29wXG4gICAgICAgIGlmIChjb25maXJtKSB0aGlzLmNhbmNlbEV4aXN0aW5nUm93KGV2ZW50LCByb3csIHsgaW50ZXJhY3RpdmU6IGZhbHNlIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qga2VlcEVkaXRpbmcgPSByb3cuZWRpdGluZyAmJiAoIW9wdHMgfHwgb3B0cy5rZWVwRWRpdGluZyAhPT0gZmFsc2UpO1xuICAgIHRoaXMuZWRpdGVkUm93ID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCByb3dcbiAgICB0aGlzLl9kYXRhU291cmNlLmNhbmNlbE9yRGVsZXRlKHJvdyk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93Lm5leHQocm93KTtcblxuICAgIC8vIE1hcmsgcm93IGFzIHByaXN0aW5lXG4gICAgdGhpcy5jaGVja0lmUm93UHJpc3RpbmUocm93KTtcblxuICAgIC8vIFJlc3RvcmUgZWRpdGluZyBzdGF0ZVxuICAgIGlmIChrZWVwRWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0Um93KHVuZGVmaW5lZCwgcm93KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSWZSb3dQcmlzdGluZShyb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgb25seVNlbGY/OiBib29sZWFuIH0pIHtcbiAgICAvLyBNYXJrIHJvdyBhcyBwcmlzdGluZVxuICAgIGNvbnN0IG1hcmtSb3dBc1ByaXN0aW5lID0gdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVzdG9yZU9yaWdpbmFsRGF0YU9uQ2FuY2VsID09PSB0cnVlO1xuICAgIGlmIChtYXJrUm93QXNQcmlzdGluZSkge1xuICAgICAgcm93LnZhbGlkYXRvcj8ubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGFibGUgaXMgbm93IHByaXN0aW5lXG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5vbmx5U2VsZiAhPT0gdHJ1ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSWZQcmlzdGluZShvcHRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSWZQcmlzdGluZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuZGlydHkpIHJldHVybjsgLy8gQWxyZWFkeSBwcmlzdGluZVxuXG4gICAgY29uc3Qgcm93cyA9IHRoaXMuX2RhdGFTb3VyY2UuZ2V0Um93cygpO1xuICAgIGNvbnN0IHByaXN0aW5lID0gKHJvd3MgfHwgW10pLmZpbmRJbmRleCgocm93KSA9PiByb3cuZGlydHkpID09PSAtMTtcbiAgICBpZiAocHJpc3RpbmUpIHRoaXMubWFya0FzUHJpc3RpbmUob3B0cyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyKGZpbHRlcjogRiwgb3B0czogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBBcHBseWluZyBmaWx0ZXInLCBmaWx0ZXIpO1xuICAgIHRoaXMuX2ZpbHRlciA9IGZpbHRlcjtcbiAgICBpZiAob3B0cyAmJiBvcHRzLmVtaXRFdmVudCkge1xuICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA+IDApIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdFJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkRhdGFTb3VyY2VMb2FkaW5nKGRhdGFTb3VyY2U6IEVudGl0aWVzVGFibGVEYXRhU291cmNlPFQsIEYsIElEPikge1xuICAgIGlmICghZGF0YVNvdXJjZSkgdGhyb3cgbmV3IEVycm9yKCdbdGFibGVdIGRhdGFTb3VyY2Ugbm90IHNldCAhJyk7XG5cbiAgICAvLyBDbGVhbmluZyBwcmV2aW91cyBzdWJzY3JpcHRpb24gb24gZGF0YXNvdXJjZVxuICAgIGlmIChpc05vdE5pbCh0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbikpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIE1hbnkgY2FsbCB0byBsaXN0ZW5EYXRhc291cmNlKCk6IENsZWFuaW5nIHByZXZpb3VzIHN1YnNjcmlwdGlvbnMuLi4nKTtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnVucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIC8vIFByb3BhZ2UgbG9hZGluZyB0byB0YWJsZVxuICAgIHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uID0gdGhpcy5fZGF0YVNvdXJjZS5sb2FkaW5nU3ViamVjdFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihpc05vdE5pbCksIC8vIGZpbHRlciBvdXQgJ3VuZGVmaW5lZCdcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcblxuICAgICAgICAvLyBJZiBjaGFuZ2VkIHRvIFRydWU6IHByb3BhZ2F0ZSBhcyBzb29uIGFzIHBvc3NpYmxlXG4gICAgICAgIHRhcCgobG9hZGluZykgPT4gbG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcodHJ1ZSkpLFxuXG4gICAgICAgIC8vIElmIGNoYW5nZWQgdG8gRmFsc2U6IHdhaXQgMjUwbXMgYmVmb3JlIHByb3BhZ2F0ZSAodG8gbWFrZSBzdXJlIHRoZSBzcGlubmVyIGhhcyBiZWVuIGRpc3BsYXllZClcbiAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgIHRhcCgobG9hZGluZykgPT4gIWxvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDZWxsVmFsdWVDaGFuZ2VzKG5hbWU6IHN0cmluZywgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICBjb25zdCBkZWYgPSB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXTtcbiAgICBpZiAoIWRlZikge1xuICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIExpc3RlbmVyIHdpdGggbmFtZSB7JHtuYW1lfSBub3QgcmVnaXN0ZXJlZCEgUGxlYXNlIGNhbGwgcmVnaXN0ZXJDZWxsVmFsdWVDaGFuZ2VzKCkgYmVmb3JlYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFN0b3AgcHJldmlvdXMgc3Vic2NyaXB0aW9uXG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBTdGFydCB2YWx1ZXMgY2hhbmdlcyBvbiByb3cgcGF0aCB7JHtkZWYuZm9ybVBhdGh9fWApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2wgPSBnZXRDb250cm9sRnJvbVBhdGgocm93LnZhbGlkYXRvciwgZGVmLmZvcm1QYXRoKTtcblxuICAgIC8vIEVtaXQgdGhlIGFjdHVhbCB2YWx1ZVxuICAgIGlmIChkZWYuZW1pdEluaXRpYWxWYWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIGRlZi5zdWJqZWN0Lm5leHQoY29udHJvbD8udmFsdWUgPz8gbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCFjb250cm9sKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS53YXJuKGBbdGFibGVdIENvdWxkIG5vdCBsaXN0ZW4gY2VsbCBjaGFuZ2VzOiBubyB2YWxpZGF0b3Igb3IgaW52YWxpZCBmb3JtIHBhdGggeyR7ZGVmLmZvcm1QYXRofX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIHZhbHVlIGNoYW5nZXMsIGFuZCByZWRpcmVjdCB0byBldmVudCBlbWl0dGVyXG4gICAgICBkZWYuc3Vic2NyaXB0aW9uID0gY29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gZG9uJ3QgZW1pdCBpZiBjb250cm9sIGlzIGRpc2FibGVkXG4gICAgICAgICAgZmlsdGVyKCgpID0+IGNvbnRyb2wuZW5hYmxlZClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gZGVmLnN1YmplY3QubmV4dCh2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCBkZXN0cm95PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSByZXR1cm47XG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFN0b3AgdmFsdWUgY2hhbmdlcyBvbiByb3cgcGF0aCB7JyArIGRlZi5mb3JtUGF0aCArICd9Jyk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRlc3Ryb3kgJiYgZGVmLnN1YmplY3QpIHtcbiAgICAgIGRlZi5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICBkZWYuc3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
1905
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSixPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLHdCQUF3QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSxNQUFNLENBQUM7QUFDM0csT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHL0ksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQVcsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQWMsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQThCLE1BQU0sb0JBQW9CLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLDJCQUEyQixHQUc1QixNQUFNLGlFQUFpRSxDQUFDO0FBQ3pFLE9BQU8sRUFBb0IseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFDZixRQUFRLEVBQUUsZUFBZSxFQUN6QixpQkFBaUIsRUFDakIsU0FBUyxHQUNWLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQWtCLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlGLE9BQU8sRUFBb0IsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzdDLE9BQU8sRUFBNkIsbUJBQW1CLEVBQXVCLE1BQU0saURBQWlELENBQUM7QUFDdEksT0FBTyxFQUVMLGlCQUFpQixFQUNqQix5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixzQkFBc0IsRUFFdEIsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUNsQixzQkFBc0IsR0FDdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFeEQsV0FBVztBQUVYLGtFQUFrRTtBQUNsRSxNQUFNLE9BQWdCLFFBQVE7SUEwWGhCO0lBQ0E7SUFDRjtJQXpYRixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkMsOEJBQThCLENBQWU7SUFFN0MscUJBQXFCLEdBRXpCLEVBQUUsQ0FBQztJQUVHLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDaEIseUJBQXlCLENBQThCO0lBQ3ZELGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDYixFQUFFLENBQW9CO0lBQy9CLEtBQUssQ0FBaUI7SUFDdEIsTUFBTSxDQUFTO0lBQ2YsYUFBYSxDQUFnQjtJQUM3QixRQUFRLENBQVc7SUFDbkIsUUFBUSxDQUF1QjtJQUMvQixTQUFTLENBQW1CO0lBQzVCLFNBQVMsQ0FBa0I7SUFDM0IsU0FBUyxDQUFrQjtJQUMzQixlQUFlLENBQWtCO0lBQ2pDLHFCQUFxQixDQUFTO0lBQzlCLGdCQUFnQixDQUFzQjtJQUM3QixjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV4RCxlQUFlLEdBQWEsRUFBRSxDQUFDO0lBQy9CLGdCQUFnQixDQUFXO0lBQzNCLGFBQWEsR0FBa0IsSUFBSSxDQUFDO0lBQ3BDLGVBQWUsQ0FBUztJQUN4QixxQkFBcUIsQ0FBNEI7SUFFeEMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ25ELGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUNwRCxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDcEQsY0FBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3JELFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNuRCxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQVMsU0FBUyxDQUFDLENBQUM7SUFFL0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBYTtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsU0FBUyxHQUFHLElBQUksY0FBYyxDQUFrQixJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsa0JBQWtCLEdBQXNCLElBQUksQ0FBQztJQUM3QyxrQ0FBa0MsR0FBRyxLQUFLLENBQUM7SUFDM0MsU0FBUyxHQUFvQixTQUFTLENBQUM7SUFDdkMsa0JBQWtCLENBQWdEO0lBQ3pELE1BQU0sQ0FBVTtJQUV6QixnQkFBZ0I7SUFDUCxVQUFVLENBQVM7SUFDbkIsS0FBSyxDQUFVO0lBQ2YsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0lBQzdCLGdCQUFnQixDQUFTO0lBQ3pCLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDaEIsUUFBUSxDQUFVO0lBQ2xCLGFBQWEsQ0FBVTtJQUN2QixnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDekIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQzVCLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUM1QixnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDekIsZ0JBQWdCLENBQVU7SUFDMUIsbUJBQW1CLENBQVU7SUFDN0IsY0FBYyxDQUFVO0lBQ3hCLGdCQUFnQixDQUFVO0lBQzFCLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUMxQix5QkFBeUIsR0FBRyxLQUFLLENBQUMsQ0FBQywyREFBMkQ7SUFDOUYsbUJBQW1CLEdBQUcsR0FBRyxDQUFDLENBQUMsbURBQW1EO0lBRTlFLGFBQWEsQ0FBUztJQUN0QixvQkFBb0IsQ0FBZ0I7SUFDcEMsZUFBZSxHQUFHLGlCQUFpQixDQUFDO0lBQ3BDLHNCQUFzQixHQUFHLHlCQUF5QixDQUFDO0lBRTVELGdCQUFnQjtJQUNQLFdBQVcsQ0FBUztJQUU3QixJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsSUFBYSxVQUFVLENBQUMsS0FBd0M7UUFDOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxLQUFRO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFUyxTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNwQyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDakQsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQ2hELFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ25DLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQ3hELHNCQUFzQixHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQzdELG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQzFELGtCQUFrQixHQUFHLHlCQUF5QixFQUF3QyxDQUFDO0lBQ3ZGLGtCQUFrQixHQUFHLHlCQUF5QixFQUF3QyxDQUFDO0lBQ3ZGLFlBQVksR0FBRyx5QkFBeUIsRUFBcUYsQ0FBQztJQUM5SCxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztJQUMzRCxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNqQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUN0QyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUUvQyxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNGLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzlGLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzlGLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWtEO1FBQ3hELElBQUksSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7WUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFrRDtRQUN2RCxJQUFJLElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxJQUFhLFFBQVEsQ0FBQyxLQUFjO1FBQ2xDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksS0FBSztnQkFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7O2dCQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWtEO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsSUFBa0Q7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFrRDtRQUNoRSxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztZQUN2RixvRkFBb0Y7WUFDcEYsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixvRkFBb0Y7Z0JBQ3BGLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekMsQ0FBQztnQkFFRCx1QkFBdUI7Z0JBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEUsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxTQUFTLENBQUM7UUFDdkMsSUFBSSxhQUFhLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNoRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLElBQWtEO1FBQzlELE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0dBQWdHLENBQUMsQ0FBQztRQUMvRyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUE4QjtRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7Z0JBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUE4QjtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FBQyx3QkFBd0I7WUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7Z0JBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQThCO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNyRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSztnQkFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsSUFBOEI7UUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUE4QjtRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQThCO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU3QixtQ0FBbUM7WUFDbkMsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDM0MsSUFBdUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsSUFBOEI7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxpQkFBaUIsQ0FBQztJQUNsRyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsTUFBYztRQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDOUcsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQW9CO1FBQ3BDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsR0FBd0IsSUFBSSxDQUFDO0lBRS9DLElBQWEsU0FBUyxDQUFDLEtBQW1CO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sS0FBSyxLQUFLLENBQUM7SUFDL0MsQ0FBQztJQUV1QyxLQUFLLENBQWM7SUFDZixjQUFjLENBQWU7SUFDbEMsSUFBSSxDQUFVO0lBRXJELFlBQ0UsUUFBa0IsRUFDUixPQUFpQixFQUNqQixXQUErQyxFQUNqRCxPQUFXO1FBRlQsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUNqQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0M7UUFDakQsWUFBTyxHQUFQLE9BQU8sQ0FBSTtRQUVuQixJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRW5DLHNCQUFzQjtRQUN0QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQztZQUMvRCxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMzRSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztJQUNsRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLENBQUMsaUJBQWlCO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXpCLGVBQWU7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtRQUM3RyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUM1RyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUN6RyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsK0JBQStCO1FBQ3JHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsK0JBQStCO1FBQ3pHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyw2Q0FBNkM7UUFFbkosMENBQTBDO1FBQzFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxNQUFNLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1FBRTlILDhDQUE4QztRQUM5QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUVqRCx5Q0FBeUM7UUFDekMsQ0FBQztZQUNDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTFDLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUYscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxDQUFDLGlCQUFpQjthQUNuQixJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxFQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNmLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDN0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQ2pDLEtBQUssRUFBRTtRQUNQLFFBQVE7UUFDUiwrREFBK0Q7UUFFL0QsMENBQTBDO1FBQzFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFDakMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDL0IsQ0FDRixDQUNGO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUN2QyxDQUFDO1FBRUYsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxDQUFDLFNBQVM7YUFDWCxJQUFJLENBQ0gsU0FBUyxDQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQVEsQ0FBQyxFQUNwRCxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO2dCQUNuRixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxJQUFJLENBQUMsV0FBVztpQkFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztpQkFDM0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDM0MsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBQ25DLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQWdDLENBQUMsQ0FBQyxDQUN6RSxDQUFDO1FBRUYsbUNBQW1DO1FBQ25DLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJFLCtCQUErQjtRQUMvQixJQUFJLElBQUksQ0FBQyx5QkFBeUI7WUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZUFBZTtRQUNiLHlDQUF5QztRQUN6QyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUZBQW1GLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUU3SCw0Q0FBNEM7UUFDNUMsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqQyxtQ0FBbUM7UUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBRWhDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVoQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FDZCxHQUE4QixFQUM5QixJQUVDO1FBRUQsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLENBQUMsbUJBQW1CO1FBQ3JDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3RDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSztnQkFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNoSSxJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sY0FBYyxDQUFDLENBQUM7UUFDMUUsQ0FBQzthQUFNLENBQUM7WUFDTiwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBNkM7UUFDekQsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUMxRSxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLFlBQVk7Z0JBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFvQjtRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQW9CO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBUyxFQUFFLElBQTRFO1FBQy9GLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFbkMsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBRXRJLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsZ0RBQWdEO1lBQ2hELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU87Z0JBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUM3QyxxRUFBcUU7b0JBQ3JFLElBQUksS0FBSyxFQUFFLENBQUM7d0JBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2pDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sa0NBQWtDO2dCQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTix3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWEsRUFBRSxHQUFxQixFQUFFLElBQStCO1FBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEMsZ0RBQWdEO1lBQ2hELElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxDQUNMLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDekUsa0NBQWtDO3FCQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQ3BELENBQUM7WUFDSixDQUFDO1lBRUQseUJBQXlCO1lBQ3pCLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUF3QixFQUFFLEdBQXFCLEVBQUUsSUFBK0I7UUFDakcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFN0QsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO1FBRXpCLDhDQUE4QztRQUM5QyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLG9EQUFvRDtZQUNwRCxJQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUM3RixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFFdEMsOEVBQThFO2dCQUM5RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELGlDQUFpQztpQkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsZ0RBQWdEO2dCQUNoRCxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7b0JBQ25DLE9BQU8sQ0FDTCxZQUFZLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ2pGLGtDQUFrQzt5QkFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUNwRSxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUVwQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBd0IsRUFBRSxHQUFxQixFQUFFLElBQStCO1FBQ2hHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3RDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFOUQsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO1FBRXpCLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hDLGdEQUFnRDtZQUNoRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FDTCxZQUFZLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3pFLGtDQUFrQztxQkFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUNuRSxDQUFDO1lBQ0osQ0FBQztZQUVELDBCQUEwQjtZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFcEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsZ0JBQWdCO1FBQ2hCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFcEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsR0FBcUI7UUFDcEQsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsb0JBQW9CO1FBRTNELG1DQUFtQztRQUNuQyxvQkFBb0I7UUFDcEIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFMUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLHNDQUFzQztZQUN0QyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQzdCLENBQUM7WUFFRCx3Q0FBd0M7WUFDeEMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFFRCxjQUFjO1lBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRWxCLHlCQUF5QjtZQUN6QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXRDLE9BQU8sSUFBSSxDQUFDLENBQUMsV0FBVztRQUMxQixDQUFDO1FBRUQsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsZ0RBQWdEO1lBQ2hELG1EQUFtRDtZQUNuRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzFCLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO29CQUMxQyxrQ0FBa0M7cUJBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELGdDQUFnQztZQUNoQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7Z0JBQzVELFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBRUQsbURBQW1EO1lBQ25ELEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUVqQyxvREFBb0Q7WUFDcEQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBWSxFQUFFLEdBQW9CLEVBQUUsSUFBdUQ7UUFDeEcsaUJBQWlCO1FBQ2pCLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCx3Q0FBd0M7YUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0Qsb0NBQW9DO2FBQy9CLENBQUM7WUFDSixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBYSxFQUFFLFFBQWlCLEVBQUUsSUFBa0Q7UUFDL0YsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVqQywwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELGNBQWM7UUFDZCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQWdDO1FBQ3pDLElBQUksR0FBRztZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CO1lBQ3JDLEdBQUcsSUFBSTtTQUNSLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUM7UUFDL0UsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxXQUFXO1lBQzNDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7WUFDekYsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNkLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3pELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVc7WUFDM0MsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVztZQUN6RyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDOUIsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFLENBQUM7UUFDL0YsQ0FBQztRQUVELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDO1lBQ0gseUJBQXlCO1lBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUUzQyxJQUFJLElBQUk7Z0JBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRWhDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQyxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVuQix1QkFBdUI7WUFDdkIsSUFBSSxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQzlFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhLEVBQUUsSUFBZ0M7UUFDcEQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDMUgsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDcEMscUJBQXFCO2dCQUNyQixJQUFJLE9BQU87b0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUNoQixLQUFhLEVBQ2IsR0FBcUIsRUFDckIsSUFHQztRQUVELEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUV6QixHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRTVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixJQUFJLE1BQVcsQ0FBQztRQUVoQixnQ0FBZ0M7UUFDaEMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ1osb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdkMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxzQkFBc0I7YUFDakIsQ0FBQztZQUNKLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFFaEIsMEJBQTBCO1lBQzFCLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELG9EQUFvRDtRQUNwRCxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN2QyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUM5QixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxTQUFTO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixhQUFhO1FBQ1gsUUFBUTtRQUNSLDhGQUE4RjtRQUU5RixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzFILENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsS0FBSyxDQUFDLFlBQVk7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFZLEVBQUUsSUFBZ0M7UUFDbEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRixJQUFJLFdBQVcsR0FBRyxDQUFDO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFtQixFQUFFLEdBQW9CLEVBQUUsSUFBZ0M7UUFDekYsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELE9BQU8sV0FBVyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFtQixFQUFFLElBQXVCLEVBQUUsSUFBZ0M7UUFDN0YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxDQUFDO1FBQy9FLENBQUM7UUFDRCxJQUFJLEtBQUssRUFBRSxnQkFBZ0I7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDOUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7UUFFN0YsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsK0dBQStHLENBQUMsQ0FBQztZQUM5SCxPQUFPLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtRQUM5QixDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzFGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsNkNBQTZDO1FBQ3pFLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBRTFDLGdDQUFnQztRQUNoQyxzRUFBc0U7UUFDdEUsMENBQTBDO1FBQzFDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkUsTUFBTSxXQUFXLEdBQXNCLEVBQUUsQ0FBQztRQUUxQyxpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixvRkFBb0Y7WUFDcEYsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakMsbUJBQW1CO2dCQUNuQixvQ0FBb0M7Z0JBQ3BDLHNEQUFzRDtnQkFDdEQsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQywyRUFBMkUsRUFBRSxDQUFDO29CQUMvSCxJQUFJLElBQUksQ0FBQyxLQUFLO3dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUMvRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDN0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNyQixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssR0FBRzt3QkFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztvQkFDdkQsT0FBTyxLQUFLLENBQUMsQ0FBQyxvREFBb0Q7Z0JBQ3BFLENBQUM7Z0JBQ0QsdUVBQXVFO3FCQUNsRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM3QixHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2IscUNBQXFDO29CQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQztvQkFDbEcsT0FBTyxJQUFJLENBQUMsQ0FBQyx1REFBdUQ7Z0JBQ3RFLENBQUM7Z0JBRUQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztZQUVILHlEQUF5RDtZQUN6RCx3SUFBd0k7WUFDeEksSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUMsNkNBQTZDO2dCQUM3QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLHdDQUF3QztvQkFDeEMsT0FBTztnQkFDVCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCwrQkFBK0I7WUFDL0Isa0dBQWtHO1lBQ2xHLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNwQixJQUFJLElBQUksQ0FBQyxLQUFLO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLFFBQVEsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFFRCxnRkFBZ0Y7WUFDaEYsb0NBQW9DO1lBQ3BDLHNDQUFzQztZQUV0Qyx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXBCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDM0MsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBVTtRQUM1QixJQUFJLEVBQUUsS0FBSyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkMsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFPO1FBQzNCLElBQUksSUFBSSxLQUFLLFNBQVM7WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQXdCLEVBQUUsR0FBb0I7UUFDNUQseUVBQXlFO1FBQ3pFLDBCQUEwQjtRQUMxQixLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUF3QixFQUFFLEdBQW9CO1FBQ3JELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLCtCQUErQjtZQUMvQixJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsUUFBUTtRQUNSLCtDQUErQztRQUUvQyxxQkFBcUI7UUFDckIsSUFBSSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUM1RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELCtDQUErQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVc7Z0JBQUUsT0FBTyxDQUFDLHVCQUF1QjtZQUVyRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLHVCQUF1QjtZQUNoRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7aUJBQ2xDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVc7aUJBQ3BFLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUVwQixtREFBbUQ7Z0JBQ25ELElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUwsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFVLEVBQUUsU0FBaUI7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBcUI7UUFDekIsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQXFCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUs7WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6RCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBYTtRQUN4QyxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFFeEIsbUNBQW1DO1FBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpDLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDeEMsU0FBUyxFQUFFLDJCQUEyQjtZQUN0QyxjQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUU7WUFDM0IsUUFBUSxFQUFFLFdBQVcsSUFBSSxhQUFhO1NBQ3ZDLENBQUMsQ0FBQztRQUVILGlCQUFpQjtRQUNqQixNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV0QixhQUFhO1FBQ2IsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxDQUFDLFlBQVk7UUFFL0IsZ0JBQWdCO1FBQ2hCLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQix1QkFBdUI7UUFDdkIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsR0FBb0I7UUFDM0MsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBd0I7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QixzREFBc0Q7UUFDdEQsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0MsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNwQixNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckksT0FBTyxJQUFJLENBQUMsZ0JBQWdCO2FBQ3pCLE1BQU0sQ0FBQyxhQUFhLENBQUM7YUFDckIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNkLElBQUk7WUFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUNuQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEQsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLEdBQXFCO1FBQ25ELEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRWpDLFFBQVE7UUFDUiwrREFBK0Q7UUFFL0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLDZCQUE2QjtZQUM3QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEIsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2xCLGdEQUFnRDtnQkFDaEQsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2hCLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDM0YsT0FBTztnQkFDVCxDQUFDO2dCQUVELGlDQUFpQztnQkFDakMsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUM5QixPQUFPO2dCQUNULENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELGdDQUFnQzthQUMzQixDQUFDO1lBQ0oseUJBQXlCO1lBQ3pCLDBDQUEwQztZQUMxQyxzQ0FBc0M7WUFDdEMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQzNELE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFZO1FBQzVCLDZEQUE2RDtRQUU3RCxvQ0FBb0M7UUFDcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxDQUFDO0lBQ2pFLENBQUM7SUFFRCw0QkFBNEI7SUFFbEIsT0FBTyxDQUFDLEtBQXdCLEVBQUUsR0FBb0IsRUFBRSxJQUErQjtRQUMvRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLHlCQUF5QjtRQUNsRSxJQUFJLEtBQUssRUFBRSxnQkFBZ0I7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTdCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWxDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3pELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFVLEVBQUUsSUFBUTtRQUN0RCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7UUFDakIsSUFBSSxDQUFDO1lBQ0gsc0NBQXNDO1lBQ3RDLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLElBQUk7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUVELGNBQWM7WUFDZCxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksSUFBSTtvQkFBRSxPQUFPLElBQUksQ0FBQztnQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxpREFBaUQsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4RSxDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLG9CQUFvQjtZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFjLGlCQUFpQjtRQUM3QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDeEYsQ0FBQztJQUVTLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBdUIsRUFBRSxJQUFnQztRQUNyRixzQkFBc0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDO2dCQUNILE1BQU0sU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRTtvQkFDN0UsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFNBQVM7b0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDL0IsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxHQUFHLEtBQUssV0FBVztvQkFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLGNBQWM7Z0JBQ3JELE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQztRQUNILENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEUsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFUyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQXdCLEVBQUUsSUFBZ0M7UUFDdEYsaUJBQWlCO1FBQ2pCLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFL0UsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxlQUFlO1FBRXBELHNCQUFzQjtRQUN0QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFO29CQUM1RSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUU7aUJBQ2pCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsUUFBUTtvQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5QixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLEdBQUcsS0FBSyxXQUFXO29CQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsY0FBYztnQkFDckQsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVTLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUEwQjtRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLHdCQUF3QjtZQUN4QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLElBQWEsQ0FBQztRQUNsQixRQUFRLFVBQVUsRUFBRSxDQUFDO1lBQ25CLEtBQUssUUFBUTtnQkFDWCxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUM3QixNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdCLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzNCLE1BQU07WUFDUjtnQkFDRSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxtQkFBbUI7UUFDbkIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXJCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9CLG1CQUFtQjtnQkFDbkIsSUFBSSxDQUFDO29CQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUU7d0JBQ2xFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7cUJBQ2xELENBQUMsQ0FBQztvQkFDSCxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixJQUFJLEdBQUcsS0FBSyxXQUFXO3dCQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsY0FBYztvQkFDckQsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDOUQsTUFBTSxHQUFHLENBQUM7Z0JBQ1osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1Qsc0JBQXNCO2dCQUN0QixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMscUJBQXFCO2dCQUN6QyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLDhCQUE4QjtRQUM3QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQyx5QkFBeUI7SUFDekMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDTyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQU0sRUFBRSxHQUFvQjtRQUNsRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLDZEQUE2RCxDQUFDLENBQUM7WUFDOUUsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsNEVBQTRFO2dCQUM1RSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsd0NBQXdDO1lBQ3hDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO2dCQUNqRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUV2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUNuRCxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ3RCLFdBQVcsRUFBRSxFQUFFO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBVztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFdkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUN0RCxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDdEIsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlEQUFpRDtJQUN2QyxrQkFBa0I7UUFDMUIsT0FBTyx3QkFBd0IsQ0FBQztJQUNsQyxDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRVMsZUFBZTtRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzVGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3BHLENBQUM7UUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRVMsV0FBVztRQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFTLGtCQUFrQixDQUFDLENBQUM7UUFDbEUsT0FBTyxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUMxQyxDQUFDO0lBRVMsaUJBQWlCO1FBQ3pCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV4QyxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLDBDQUEwQztZQUMxQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RixxQkFBcUI7UUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJGLHlDQUF5QztRQUN6QyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEksa0NBQWtDO1FBQ2xDLFdBQVcsQ0FBQyxJQUFJLENBQ2QsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdkksQ0FBQztRQUVGLE9BQU8sQ0FDTCxpQkFBaUI7YUFDZCxNQUFNLENBQUMsV0FBVyxDQUFDO2FBQ25CLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDeEIseUJBQXlCO2FBQ3hCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM5RCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxhQUFhO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVTLG9CQUFvQixDQUFDLEdBQWlCO1FBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFUyxzQkFBc0IsQ0FBQyxHQUFpQjtRQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRVMseUJBQXlCLENBQ2pDLFNBQWlCLEVBQ2pCLE9BQStDO1FBRS9DLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVTLGlCQUFpQixDQUFDLFVBQWtCO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUYsQ0FBQztJQUVTLGVBQWU7UUFDdkIsK0JBQStCO1FBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsK0lBQStJO1FBQy9JLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3hGLE1BQU0sRUFBRSxHQUNOLElBQUksQ0FBQyxRQUFRO2FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNWLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1lBQzNCLEdBQUc7WUFDSCxXQUFXLENBQUM7UUFDZCxzREFBc0Q7UUFDdEQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRVMsS0FBSyxDQUFDLGFBQWEsQ0FDM0IsUUFBaUIsRUFDakIsSUFBdUU7UUFFdkUsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUZBQWlGLENBQUMsQ0FBQztZQUNoRyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLG9DQUFvQztRQUVuRyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUUzQixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQix3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUU3RCwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDLENBQUM7UUFFL0UsYUFBYTtRQUNiLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVTLHdCQUF3QixDQUFDLElBQVksRUFBRSxRQUFpQixFQUFFLGdCQUEwQjtRQUM1RixRQUFRLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQztRQUM1QixnQkFBZ0IsR0FBRyxnQkFBZ0IsSUFBSSxLQUFLLENBQUM7UUFDN0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNwRixNQUFNLEtBQUssQ0FBQyxpSUFBaUksQ0FBQyxDQUFDO1FBQ2pKLENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixJQUFJLCtCQUErQixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3RHLEdBQUcsR0FBRztnQkFDSixPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQU87Z0JBQzNCLFlBQVksRUFBRSxJQUFJO2dCQUNsQixRQUFRO2dCQUNSLGdCQUFnQjthQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUV2QywwQ0FBMEM7WUFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUM7SUFDckIsQ0FBQztJQUVTLGFBQWEsQ0FBQyxVQUFrQixFQUFFLElBQWEsRUFBRSxJQUE4QjtRQUN2RixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLEtBQUssSUFBSSxDQUFDO29CQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBRUQsNEJBQTRCO1lBQzVCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNqRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRVMsYUFBYSxDQUFDLFVBQWtCO1FBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxhQUFhO1FBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVTLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsSUFBd0I7UUFDM0UsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQix5Q0FBeUM7WUFDekMsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFJLENBQUM7UUFDRCw0QkFBNEI7UUFDNUIsT0FBTyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRVMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEtBQWEsRUFBRSxJQUF3QjtRQUMzRSxPQUFPLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUksQ0FBQztJQUVTLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxLQUFhO1FBQ2xELE9BQU8sTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVTLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBc0I7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ2pHLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVTLFVBQVUsQ0FBQyxJQUE4QjtRQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRVMsV0FBVyxDQUFDLEdBQXFCLEVBQUUsSUFBZ0M7UUFDM0UsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRTtZQUM5RCxHQUFHLElBQUksQ0FBQyxxQkFBcUI7WUFDN0IsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLFFBQVEsQ0FBQyxLQUFhLEVBQUUsSUFBOEI7UUFDOUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sTUFBTSxDQUFDLEVBQUssRUFBRSxFQUFLO1FBQzNCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFUyxjQUFjLENBQUMsR0FBcUIsRUFBRSxJQUFrRDtRQUNoRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDNUIsSUFBSSxHQUFHO1lBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRVMsZUFBZSxDQUFVLFlBQXFCO1FBQ3RELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRVMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQVUsRUFBRSxZQUFxQixFQUFFLElBQThCO1FBQ2hHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFUyxXQUFXLENBQUMsS0FBVztRQUMvQiwrRUFBK0U7UUFDL0UsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ08sc0JBQXNCO1FBQzlCLElBQUksSUFBSSxDQUFDLGtCQUFrQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUV6RixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTFELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsbUNBQW1DO1NBQ2xILENBQUM7UUFFRiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDekIsMkVBQTJFO2FBQzFFLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUM7WUFDL0MsSUFBSSxDQUFDO2dCQUNILE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlGLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO29CQUFTLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLEtBQUssQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQ2hILG1CQUFtQjtZQUNuQixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQ2xDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztvQkFDekMsbUJBQW1CO3FCQUNsQixNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0Riw0Q0FBNEM7cUJBQzNDLE1BQU0sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FDN0MsQ0FBQztZQUNKLENBQUM7WUFDRCx3QkFBd0I7WUFDeEIsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FDbEMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDN0gsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCwwQkFBMEI7SUFFbEIsS0FBSyxDQUFDLDZCQUE2QjtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLDREQUE0RDtZQUM1RCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixVQUFVLENBQ1IsR0FBRyxFQUFFLENBQ0gsQ0FBQyxJQUFJLENBQUMsS0FBSztvQkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLHNGQUFzRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQzdILEdBQUcsQ0FDSixDQUFDO1lBQ0osQ0FBQztZQUVELDhCQUE4QjtZQUM5QixNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMseUNBQXlDLEVBQUUsQ0FBQyxDQUFDO1FBQy9ILENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLEtBQUs7UUFDSCxxQkFBcUI7UUFDckIsQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDdkIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDakMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ25ELE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQztZQUM3Qix3QkFBd0I7WUFDeEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUNILENBQUM7WUFDRixLQUFLO1FBRVAsMEJBQTBCO1FBQzFCLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3RCLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQzlDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztZQUNqQyw2QkFBNkI7WUFDN0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQzlFLENBQUM7WUFDRixLQUFLLENBQ1I7WUFDQywwQ0FBMEM7YUFDekMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsb0VBQW9FO1FBQ3BFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFJLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUF3QixFQUFFLEVBQVUsRUFBRSxJQUErQjtRQUM3RixJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUNuQixJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUQsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFjLEVBQUUsSUFBOEI7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWhDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUF3QixFQUFFLEdBQW9CO1FBQ2pFLG1EQUFtRDtRQUNuRCxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzVELEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsZUFBZTtRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFtQixFQUFFLEdBQW9CLEVBQUUsSUFBZ0M7UUFDbkcsbURBQW1EO1FBQ25ELElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFMUQsSUFBSSxLQUFLLEVBQUUsZ0JBQWdCO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQzlDLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQXdCLEVBQUUsR0FBb0IsRUFBRSxJQUF1RDtRQUMvSCxtREFBbUQ7UUFDbkQsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFFakcsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUM7UUFFdEQsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM5RixLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMvQyxxQkFBcUI7Z0JBQ3JCLElBQUksT0FBTztvQkFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLGVBQWU7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuQyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdCLHdCQUF3QjtRQUN4QixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQW9CLEVBQUUsSUFBa0Q7UUFDdkcsdUJBQXVCO1FBQ3ZCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsMkJBQTJCLEtBQUssSUFBSSxDQUFDO1FBQ3ZGLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0QixHQUFHLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBRWhDLGlDQUFpQztZQUNqQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQThCO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sQ0FBQyxtQkFBbUI7UUFFNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLFFBQVE7WUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxXQUFXLENBQUMsTUFBUyxFQUFFLElBQTZCO1FBQzFELElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsVUFBNkM7UUFDM0UsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFakUsK0NBQStDO1FBQy9DLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7WUFDN0csSUFBSSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWM7YUFDbEUsSUFBSSxDQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSx5QkFBeUI7UUFDM0Msb0JBQW9CLEVBQUU7UUFFdEIsb0RBQW9EO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEQsaUdBQWlHO1FBQ2pHLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3JEO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQVksRUFBRSxHQUFvQjtRQUM5RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsSUFBSSxnRUFBZ0UsQ0FBQyxDQUFDO1lBQ2xILE9BQU87UUFDVCxDQUFDO1FBQ0QsNkJBQTZCO1FBQzdCLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoRSx3QkFBd0I7UUFDeEIsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLDZFQUE2RSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUM3SCxDQUFDO2FBQU0sQ0FBQztZQUNOLHNEQUFzRDtZQUN0RCxHQUFHLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZO2lCQUNwQyxJQUFJO1lBQ0gsb0NBQW9DO1lBQ3BDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQzlCO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQVksRUFBRSxPQUFpQjtRQUMxRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ2pCLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQy9GLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7d0dBcmhFbUIsUUFBUTs0RkFBUixRQUFRLDQ3Q0FvWGpCLFFBQVEsaUZBQ1IsWUFBWSx1RUFDWixPQUFPOzs0RkF0WEUsUUFBUTtrQkFGN0IsU0FBUzs2SkFtRUMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQVVPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBUU8sTUFBTTtzQkFBbEIsS0FBSztnQkFnQkksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBdURNLFFBQVE7c0JBQXBCLEtBQUs7Z0JBd0tPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBWWtDLEtBQUs7c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDTSxjQUFjO3NCQUF6RCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0gsSUFBSTtzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydGFibGUsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBFTVBUWSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgRW50aXRpZXNUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2UuY2xhc3MnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbHMsIElFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29sdW1uSXRlbSwgVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1zZWxlY3QtY29sdW1ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQgeyBBcHBGb3JtVXRpbHMsIENhblNhdmUsIElBcHBGb3JtLCBPblJlYWR5IH0gZnJvbSAnLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXIsXG4gIE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9ucyxcbiAgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9hdXRvY29tcGxldGUvbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmNvbmZpZyc7XG5pbXBvcnQgeyBDb21wbGV0YWJsZUV2ZW50LCBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyLCBlbWl0UHJvbWlzZUV2ZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2V2ZW50cyc7XG5pbXBvcnQge1xuICBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlLFxuICBnZXRQcm9wZXJ0eUJ5UGF0aCxcbiAgaXNFbXB0eUFycmF5LFxuICBpc05pbCxcbiAgaXNOb3RFbXB0eUFycmF5LFxuICBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLFxuICBzZXRQcm9wZXJ0eUJ5UGF0aCxcbiAgdG9Cb29sZWFuLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3IsIHdhaXRGb3JGYWxzZSwgV2FpdEZvck9wdGlvbnMsIHdhaXRGb3JUcnVlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IFNob3dUb2FzdE9wdGlvbnMsIFRvYXN0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgQWxlcnRzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FsZXJ0cyc7XG5pbXBvcnQgeyBDZGtDb2x1bW5EZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvdGFibGUnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBGb3JtRXJyb3JUcmFuc2xhdGVPcHRpb25zLCBGb3JtRXJyb3JUcmFuc2xhdG9yLCBJRm9ybVBhdGhUcmFuc2xhdG9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZhbGlkYXRvci9mb3JtLWVycm9yLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQ2VsbFZhbHVlQ2hhbmdlTGlzdGVuZXIsXG4gIERFRkFVTFRfUEFHRV9TSVpFLFxuICBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxuICBERUZBVUxUX1JFUVVJUkVEX0NPTFVNTlMsXG4gIFJFU0VSVkVEX0VORF9DT0xVTU5TLFxuICBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLFxuICBTYXZlQWN0aW9uVHlwZSxcbiAgU0VUVElOR1NfRElTUExBWV9DT0xVTU5TLFxuICBTRVRUSU5HU19QQUdFX1NJWkUsXG4gIFNFVFRJTkdTX1NPUlRFRF9DT0xVTU4sXG59IGZyb20gJy4vdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwVGFibGVVdGlscyB9IGZyb20gJy4vdGFibGUudXRpbHMnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgZ2V0Q29udHJvbEZyb21QYXRoIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwVGFibGU8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBGID0gYW55LCBJRCA9IG51bWJlcj5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgSUFwcEZvcm0sIENhblNhdmUsIElGb3JtUGF0aFRyYW5zbGF0b3JcbntcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3BlbmluZ1JvdyA9IGZhbHNlO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBfY2VsbFZhbHVlQ2hhbmdlc0RlZnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBDZWxsVmFsdWVDaGFuZ2VMaXN0ZW5lcjtcbiAgfSA9IHt9O1xuXG4gIHByb3RlY3RlZCBfZW5hYmxlZCA9IHRydWU7XG4gIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyOiBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXI7XG4gIHByb3RlY3RlZCBhbGxvd1Jvd0RldGFpbCA9IHRydWU7XG4gIHByb3RlY3RlZCByZWFkb25seSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBsb2NhdGlvbjogTG9jYXRpb247XG4gIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2U7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIGFsZXJ0Q3RybDogQWxlcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBwcmV2aW91c2x5RWRpdGVkUm93SWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGZvcm1FcnJvckFkYXB0ZXI6IEZvcm1FcnJvclRyYW5zbGF0b3I7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZXhjbHVkZXNDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXTtcbiAgdG90YWxSb3dDb3VudDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHZpc2libGVSb3dDb3VudDogbnVtYmVyO1xuICBlcnJvclRyYW5zbGF0ZU9wdGlvbnM6IEZvcm1FcnJvclRyYW5zbGF0ZU9wdGlvbnM7XG5cbiAgcmVhZG9ubHkgcmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgc2F2aW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB0b3VjaGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBkaXJ0eVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZXJyb3JTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG5cbiAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc2V0IGVycm9yKGVycm9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEVycm9yKGVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0IGVycm9yJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUYWJsZUVsZW1lbnQ8VD4+KHRydWUsIFtdKTtcbiAgcGVybWFuZW50U2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxUPiA9IG51bGw7XG4gIHBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgZWRpdGVkUm93OiBUYWJsZUVsZW1lbnQ8VD4gPSB1bmRlZmluZWQ7XG4gIGF1dG9jb21wbGV0ZUZpZWxkczogeyBba2V5OiBzdHJpbmddOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyB9O1xuICByZWFkb25seSBtb2JpbGU6IGJvb2xlYW47XG5cbiAgLy8gVGFibGUgb3B0aW9uc1xuICBASW5wdXQoKSBzZXR0aW5nc0lkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuO1xuICBASW5wdXQoKSBpMThuQ29sdW1uUHJlZml4ID0gJ0NPTU1PTi4nO1xuICBASW5wdXQoKSBpMThuQ29sdW1uU3VmZml4OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQElucHV0KCkgcmVhZE9ubHk6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlubGluZUVkaXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZvY3VzRmlyc3RDb2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlybUJlZm9yZURlbGV0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maXJtQmVmb3JlQ2FuY2VsID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVuZG9hYmxlRGVsZXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZURlbGV0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkga2VlcEVkaXRlZFJvd09uU2F2ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZVNvcnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNhdmVCZWZvcmVGaWx0ZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHByb3BhZ2F0ZVJvd0Vycm9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBlcm1hbmVudFNlbGVjdGlvbkFsbG93ZWQgPSBmYWxzZTsgLy8gQWxsb3cga2VlcCBzZWxlY3RlZCByb3dzIG92ZXIgcGFnZSBjaGFuZ2Ugb3Igc29ydCBjaGFuZ2VcbiAgQElucHV0KCkgb3BlblJvd1Rocm90dGxlVGltZSA9IDgwMDsgLy8gUHJldmVudCBkb3VibGUgY2xpY2sgLSBzZWUgaXNzdWUgc3VtYXJpcy1hcHAjODY0XG5cbiAgQElucHV0KCkgZGVmYXVsdFNvcnRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBkZWZhdWx0U29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcbiAgQElucHV0KCkgZGVmYXVsdFBhZ2VTaXplID0gREVGQVVMVF9QQUdFX1NJWkU7XG4gIEBJbnB1dCgpIGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TO1xuXG4gIC8vIEZvY3VzIG1hbmFnZXJcbiAgQElucHV0KCkgZm9jdXNDb2x1bW46IHN0cmluZztcblxuICBnZXQgZmlyc3RVc2VyQ29sdW1uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1tSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmxlbmd0aF07XG4gIH1cblxuICBnZXQgbGFzdFVzZXJDb2x1bW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW3RoaXMuZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggLSBSRVNFUlZFRF9FTkRfQ09MVU1OUy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICB0aGlzLnNldERhdGFzb3VyY2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRhdGFTb3VyY2UoKTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IEYpIHtcbiAgICB0aGlzLnNldEZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICBnZXQgZmlsdGVyKCk6IEYge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gIH1cblxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZyB8fCB0aGlzLnRvdGFsUm93Q291bnQgPT09IDA7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRFbnRpdGllcygpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbj8uc2VsZWN0ZWQgfHwgQXBwVGFibGVVdGlscy5nZXRFbnRpdGllcyh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25SZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbkNsaWNrUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbk9wZW5Sb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWxlbWVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uTmV3Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblN0YXJ0RWRpdGluZ1JvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Db25maXJtRWRpdENyZWF0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWxPckRlbGV0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVEZWxldGVSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7IHJvd3M6IFRhYmxlRWxlbWVudDxUPltdIH0+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbFJvd3MgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPGJvb2xlYW4sIHsgcm93czogVGFibGVFbGVtZW50PFQ+W10gfT4oKTtcbiAgQE91dHB1dCgpIG9uQmVmb3JlU2F2ZSA9IGNyZWF0ZVByb21pc2VFdmVudEVtaXR0ZXI8eyBjb25maXJtZWQ6IGJvb2xlYW47IHNhdmU6IGJvb2xlYW4gfSwgeyBhY3Rpb246IFNhdmVBY3Rpb25UeXBlOyB2YWxpZDogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgb25BZnRlckRlbGV0ZWRSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD5bXT4oKTtcbiAgQE91dHB1dCgpIG9uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25EaXJ0eSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy52YWxpZCA6IHRydWU7XG4gIH1cblxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyA/IHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8uaW52YWxpZCA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93ICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/LnBlbmRpbmcgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZFN1YmplY3QudmFsdWU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHNhdmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZGlzYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBlbmFibGUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gIH1cblxuICAvLyBGSVhNRTogbmVlZCB0byBoaWRkZW4gYnV0dG9ucyAoaW4gSFRNTCksIGV0Yy4gd2hlbiBkaXNhYmxlZFxuICBASW5wdXQoKSBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgIT09ICF0aGlzLl9lbmFibGVkKSB7XG4gICAgICBpZiAodmFsdWUpIHRoaXMuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICBlbHNlIHRoaXMuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl9lbmFibGVkO1xuICB9XG5cbiAgbWFya0FzRGlydHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuZGlydHlTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLmRpcnR5U3ViamVjdC52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5kaXJ0eVN1YmplY3QuY2xvc2VkICYmIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgbGV0IG5lZWRFbWl0RXZlbnQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50b3VjaGVkU3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy50b3VjaGVkU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIG5lZWRFbWl0RXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXJ0eSB8fCAodGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuaWQgIT09IHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkKSkge1xuICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50IGVkaXRpbmcgcm93IG9ubHkgaWYgZWRpdGluZyBhbmQgaWYgaXQgd2FzIG5vdCBwcmV2aW91c2x5IHNhdmVkXG4gICAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50IGVkaXRpbmcgcm93IG9ubHkgaWYgZWRpdGluZyBhbmQgaWYgaXQgd2FzIG5vdCBwcmV2aW91c2x5IHNhdmVkXG4gICAgICAgIGlmICh0aGlzLmVkaXRlZFJvdy5pZCA9PT0gLTEpIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGVsZXRlKC0xKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2FuY2VsKHRoaXMuZWRpdGVkUm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hcmsgcm93IGFzIHByaXN0aW5lXG4gICAgICAgIHRoaXMuY2hlY2tJZlJvd1ByaXN0aW5lKHRoaXMuZWRpdGVkUm93LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IG51bGw7XG4gICAgICBuZWVkRW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c2x5RWRpdGVkUm93SWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKG5lZWRFbWl0RXZlbnQgJiYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgcHJlZmVyIHRvIHVzZSBtYXJrQWxsQXNUb3VjaGVkKClcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIG1hcmtBc1RvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBjb25zb2xlLndhcm4oJ1RPRE86IFJlcGxhY2UgdGhpcyBjYWxsIGJ5IG1hcmtBbGxBc1RvdWNoZWQoKSAtIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiBuZ3gtY29tcG9uZW50cyA+PSAwLjE2LjAnKTtcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnRvdWNoZWRTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLnRvdWNoZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc2F2aW5nU3ViamVjdC5jbG9zZWQgJiYgdGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCBmb2N1cyBjb2x1bW5cbiAgICAgIHRoaXMuc2F2aW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc2F2aW5nU3ViamVjdC5jbG9zZWQgJiYgdGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBvcHRzKTtcbiAgfVxuXG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIG9wdHMpO1xuICB9XG5cbiAgbWFya0FzUmVhZHkob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnJlYWR5U3ViamVjdC5jbG9zZWQgJiYgdGhpcy5yZWFkeVN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMucmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgIC8vIElmIHN1YmNsYXNzZXMgaW1wbGVtZW50cyBPblJlYWR5XG4gICAgICBpZiAodHlwZW9mIHRoaXNbJ25nT25SZWFkeSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICh0aGlzIGFzIGFueSBhcyBPblJlYWR5KS5uZ09uUmVhZHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNOb3RSZWFkeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMucmVhZHlTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnJlYWR5U3ViamVjdC52YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucmVhZHlTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGVuYWJsZVNvcnQoKSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBkaXNhYmxlU29ydCgpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRTtcbiAgfVxuXG4gIGdldCBwYWdlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSkgfHwgMDtcbiAgfVxuXG4gIGdldCBzb3J0QWN0aXZlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc29ydCAmJiB0aGlzLnNvcnQuYWN0aXZlO1xuICB9XG5cbiAgc2V0IHNvcnRBY3RpdmUoc29ydEJ5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB7XG4gICAgICB0aGlzLnNvcnQuYWN0aXZlID0gc29ydEJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSBzb3J0Qnk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNvcnREaXJlY3Rpb24oKTogU29ydERpcmVjdGlvbiB7XG4gICAgcmV0dXJuICh0aGlzLnNvcnQgJiYgdGhpcy5zb3J0LmRpcmVjdGlvbiAmJiAodGhpcy5zb3J0LmRpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycpKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXQgc29ydERpcmVjdGlvbih2YWx1ZTogU29ydERpcmVjdGlvbikge1xuICAgIGlmICh0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuc29ydC5kaXJlY3Rpb24gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvciB8fCB0aGlzLmNoaWxkUGFnaW5hdG9yO1xuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95U3ViamVjdD8uY2xvc2VkICE9PSBmYWxzZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZTogTWF0VGFibGU8VD47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hpbGRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogZmFsc2UgfSkgc29ydDogTWF0U29ydDtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBjb2x1bW5zOiBzdHJpbmdbXSxcbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U/OiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4sXG4gICAgcHJpdmF0ZSBfZmlsdGVyPzogRlxuICApIHtcbiAgICB0aGlzLmNkID0gaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICB0aGlzLnJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLnJvdXRlciA9IGluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIHRoaXMubmF2Q29udHJvbGxlciA9IGluamVjdG9yLmdldChOYXZDb250cm9sbGVyKTtcbiAgICB0aGlzLmxvY2F0aW9uID0gaW5qZWN0b3IuZ2V0KExvY2F0aW9uKTtcbiAgICB0aGlzLnNldHRpbmdzID0gaW5qZWN0b3IuZ2V0KExvY2FsU2V0dGluZ3NTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0ZSA9IGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLm1vZGFsQ3RybCA9IGluamVjdG9yLmdldChNb2RhbENvbnRyb2xsZXIpO1xuICAgIHRoaXMuYWxlcnRDdHJsID0gaW5qZWN0b3IuZ2V0KEFsZXJ0Q29udHJvbGxlcik7XG4gICAgdGhpcy50b2FzdENvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoVG9hc3RDb250cm9sbGVyKTtcbiAgICB0aGlzLmZvcm1FcnJvckFkYXB0ZXIgPSBpbmplY3Rvci5nZXQoRm9ybUVycm9yVHJhbnNsYXRvcik7XG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcblxuICAgIC8vIEF1dG9jb21wbGV0ZSBmaWVsZHNcbiAgICB0aGlzLl9hdXRvY29tcGxldGVDb25maWdIb2xkZXIgPSBuZXcgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyKHtcbiAgICAgIGdldFVzZXJBdHRyaWJ1dGVzOiAoYSwgYikgPT4gdGhpcy5zZXR0aW5ncy5nZXRGaWVsZERpc3BsYXlBdHRyaWJ1dGVzKGEsIGIpLFxuICAgIH0pO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzID0gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmZpZWxkcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgcmV0dXJuOyAvLyBJbml0IG9ubHkgb25jZVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHRoaXMucmVhZE9ubHkgPSB0b0Jvb2xlYW4odGhpcy5yZWFkT25seSwgdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVhZE9ubHkgfHwgZmFsc2UpOyAvLyByZWFkL3dyaXRlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSAhdGhpcy5yZWFkT25seSAmJiB0b0Jvb2xlYW4odGhpcy5pbmxpbmVFZGl0aW9uLCBmYWxzZSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVEZWxldGUgPSB0b0Jvb2xlYW4odGhpcy5zYXZlQmVmb3JlRGVsZXRlLCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVTb3J0ID0gdG9Cb29sZWFuKHRoaXMuc2F2ZUJlZm9yZVNvcnQsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMuc2F2ZUJlZm9yZUZpbHRlciA9IHRvQm9vbGVhbih0aGlzLnNhdmVCZWZvcmVGaWx0ZXIsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSA9IHRvQm9vbGVhbih0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsIHRoaXMuaW5saW5lRWRpdGlvbik7XG4gICAgdGhpcy5lcnJvclRyYW5zbGF0ZU9wdGlvbnMgPSB0aGlzLmVycm9yVHJhbnNsYXRlT3B0aW9ucyB8fCB7IHNlcGFyYXRvcjogJywgJywgcGF0aFRyYW5zbGF0b3I6IHRoaXMgfTsgLy8gQ2FuIGJlIG92ZXJyaWRlIGluIHN1YmNsYXNzZXMgY29uc3RydWN0b3JzXG5cbiAgICAvLyBDaGVjayBhc2sgdXNlciBjb25maXJtYXRpb24gaXMgcG9zc2libGVcbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICF0aGlzLmFsZXJ0Q3RybCkgdGhyb3cgRXJyb3IoXCJNaXNzaW5nICdhbGVydEN0cmwnIG9yICdpbmplY3RvcicgaW4gY29tcG9uZW50J3MgY29uc3RydWN0b3IuXCIpO1xuXG4gICAgLy8gRGVmaW5lZCB1bmlxdWUgaWQgZm9yIHNldHRpbmdzIGZvciB0aGUgcGFnZVxuICAgIHRoaXMuc2V0dGluZ3NJZCA9IHRoaXMuc2V0dGluZ3NJZCB8fCB0aGlzLmdlbmVyYXRlVGFibGVJZCgpO1xuXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5nZXREaXNwbGF5Q29sdW1ucygpO1xuXG4gICAgLy8gTG9hZCB0aGUgc29ydGVkIGNvbHVtbnMsIGZyb20gc2V0dGluZ3NcbiAgICB7XG4gICAgICBjb25zdCBzb3J0ZWRDb2x1bW4gPSB0aGlzLmdldFNvcnRlZENvbHVtbigpO1xuICAgICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gc29ydGVkQ29sdW1uLmlkO1xuICAgICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IHNvcnRlZENvbHVtbi5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSBlcnJvciB0byBldmVudCBlbWl0dGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmVycm9yU3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRXJyb3IuZW1pdCh2YWx1ZSkpKTtcblxuICAgIC8vIFByb3BhZ2F0ZSBkaXJ0eSB0byBldmVudCBlbWl0dGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmRpcnR5U3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRGlydHkuZW1pdCh2YWx1ZSkpKTtcblxuICAgIC8vIFByb3BhZ2F0ZSByb3cgZGlydHkgc3RhdGUgdG8gdGFibGVcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvd1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJvdykgPT4gcm93Py52YWxpZGF0b3IgJiYgdHJ1ZSksXG4gICAgICAgICAgbWVyZ2VNYXAoKHJvdykgPT5cbiAgICAgICAgICAgIHJvdy52YWxpZGF0b3IudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcigoKSA9PiByb3cudmFsaWRhdG9yLmRpcnR5KSxcbiAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAgICAgLy90YXAoKCkgPT4gY29uc29sZS5kZWJ1ZyhcIlByb3BhZ2F0ZSByb3cncyBkaXJ0eSB0byB0YWJsZS4uLlwiKSlcblxuICAgICAgICAgICAgICAvLyBTdG9wIGlmIG5leHQgYW5vdGhlciByb3csIG9yIGRlc3Ryb3lpbmdcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25TdGFydEVkaXRpbmdSb3cpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm1hcmtBc0RpcnR5KCkpXG4gICAgKTtcblxuICAgIC8vIENhbGwgZGF0YXNvdXJjZSByZWZyZXNoLCBvbiBlYWNoIHJlZnJlc2ggZXZlbnRzXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25SZWZyZXNoXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aDxhbnk+KCh0aGlzLmF1dG9Mb2FkID8ge30gOiAnc2tpcCcpIGFzIGFueSksXG4gICAgICAgICAgc3dpdGNoTWFwKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnc2tpcCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gU2tpcHBpbmcgZGF0YSBsb2FkOiBubyBkYXRhU291cmNlIGRlZmluZWQnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBDYWxsaW5nIGRhdGFTb3VyY2Uud2F0Y2hBbGwoKS4uLicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VcbiAgICAgICAgICAgICAgLndhdGNoQWxsKHRoaXMucGFnZU9mZnNldCwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zb3J0QWN0aXZlLCB0aGlzLnNvcnREaXJlY3Rpb24sIHRoaXMuX2ZpbHRlcilcbiAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25SZWZyZXNoKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7IC8vIENvbnRpbnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHRoaXMudXBkYXRlVmlldyhyZXMgYXMgTG9hZFJlc3VsdDxUPiB8IHVuZGVmaW5lZCkpXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBkYXRhU291cmNlIGxvYWRpbmcgZXZlbnRzXG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRoaXMubGlzdGVuRGF0YVNvdXJjZUxvYWRpbmcodGhpcy5fZGF0YVNvdXJjZSk7XG5cbiAgICAvLyBQZXJtYW5lbnQgc2VsZWN0aW9uIGJlaGF2aW9yXG4gICAgaWYgKHRoaXMucGVybWFuZW50U2VsZWN0aW9uQWxsb3dlZCkgdGhpcy5pbml0UGVybWFuZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gRGV0ZWN0IHdoZW4gcGFyZW50IG5nT25Jbml0KCkgbm90IGNhbGxcbiAgICBpZiAodGhpcy5kZWJ1ZyAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgJ2Rpc3BsYXllZENvbHVtbnMnLiBEaWQgeW91IGNhbGwgcGFyZW50IG5nT25Jbml0KCkgaW4gY29tcG9uZW50ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSA/YCk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgc29ydCBhbmQgcGFnaW5hdG9yIGV2ZW50c1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU0lnbm9yZWRQcm9taXNlRnJvbUNhbGxcbiAgICB0aGlzLmxpc3RlblNvcnRBbmRQYWdpbmF0aW9uRXZlbnRzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIC8vIFVuc3Vic2NyaWJlIGNvbHVtbiB2YWx1ZSBjaGFuZ2VzXG4gICAgT2JqZWN0LmtleXModGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnMpLmZvckVhY2goKGNvbCkgPT4gdGhpcy5zdG9wQ2VsbFZhbHVlQ2hhbmdlcyhjb2wsIHRydWUpKTtcbiAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmcyA9IHt9O1xuXG4gICAgdGhpcy5yZWFkeVN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zYXZpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lcnJvclN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpcnR5U3ViamVjdC51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uT3BlblJvdy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25OZXdSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25CZWZvcmVTYXZlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkFmdGVyRGVsZXRlZFJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU29ydC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EaXJ0eS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25FcnJvci51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhcbiAgICByZXM6IExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQsXG4gICAgb3B0cz86IHtcbiAgICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXJlcykgcmV0dXJuOyAvLyBTa2lwIChlLmcgZXJyb3IpXG4gICAgaWYgKHJlcyAmJiByZXMuZGF0YSkge1xuICAgICAgdGhpcy52aXNpYmxlUm93Q291bnQgPSByZXMuZGF0YS5sZW5ndGg7XG4gICAgICB0aGlzLnRvdGFsUm93Q291bnQgPSBpc05vdE5pbChyZXMudG90YWwpXG4gICAgICAgID8gcmVzLnRvdGFsXG4gICAgICAgIDogKCh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiAodGhpcy5wYWdpbmF0b3IucGFnZVNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkUpKSB8fCAwKSArIHRoaXMudmlzaWJsZVJvd0NvdW50O1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gJHtyZXMuZGF0YS5sZW5ndGh9IHJvd3MgbG9hZGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTk8gcm93cyBsb2FkZWQnKTtcbiAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IDA7XG4gICAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNVbnRvdWNoZWQoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERhdGFzb3VyY2UoZGF0YXNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRocm93IG5ldyBFcnJvcignW3RhYmxlXSBkYXRhU291cmNlIGFscmVhZHkgc2V0ICEnKTtcbiAgICBpZiAoZGF0YXNvdXJjZSAmJiB0aGlzLl9kYXRhU291cmNlICE9PSBkYXRhc291cmNlKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YXNvdXJjZTtcbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgdGhpcy5saXN0ZW5EYXRhU291cmNlTG9hZGluZyhkYXRhc291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXNldERhdGFTb3VyY2UoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IG51bGw7XG4gIH1cblxuICBhZGRDb2x1bW5EZWYoY29sdW1uOiBDZGtDb2x1bW5EZWYpIHtcbiAgICB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZihjb2x1bW4pO1xuICB9XG5cbiAgcmVtb3ZlQ29sdW1uRGVmKGNvbHVtbjogQ2RrQ29sdW1uRGVmKSB7XG4gICAgdGhpcy50YWJsZS5yZW1vdmVDb2x1bW5EZWYoY29sdW1uKTtcbiAgfVxuXG4gIHNldEZpbHRlcihmaWx0ZXI6IEYsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQ/OiBib29sZWFuIH0pIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7IGVtaXRFdmVudDogdHJ1ZSB9O1xuXG4gICAgLy8gUHJldmVudCBwZXJtYW5lbnQgc2VsZWN0aW9uIGNoYW5nZSBldmVudHNcbiAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSB0b0Jvb2xlYW4ob3B0cy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkLCB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQpO1xuXG4gICAgaWYgKHRoaXMuc2F2ZUJlZm9yZUZpbHRlcikge1xuICAgICAgLy8gaWYgYSBkaXJ0eSB0YWJsZSBpcyB0byBiZSBzYXZlZCBiZWZvcmUgZmlsdGVyXG4gICAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICAvLyBTYXZlXG4gICAgICAgIHRoaXMuc2F2ZUJlZm9yZUFjdGlvbignZmlsdGVyJykudGhlbigoc2F2ZWQpID0+IHtcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgb25seSBpZiB1c2VyIGRpZG4ndCBjYW5jZWwgdGhlIHNhdmUgb3IgdGhlIHNhdmUgaXMgb2tcbiAgICAgICAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYXBwbHkgZmlsdGVyIG9uIG5vbi1kaXJ0eSB0YWJsZVxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGZpbHRlciwgb3B0cyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFwcGx5IGZpbHRlciBkaXJlY3RseVxuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNvbmZpcm1BbmRBZGQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBmb2N1c0NvbHVtbj86IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICAvLyBJZiBwZW5kaW5nOiBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uLCB0aGVuIGxvb3BcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvciwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0IH0pXG4gICAgICAgICAgICAvLyBMb29wIGFmdGVyIHZhbGlkYXRpb24gY29tcGxldGVkXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1BbmRBZGQoZXZlbnQsIHJvdywgb3B0cykpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdvIGJhY2sgdG8gZm9jdXNDb2x1bW5cbiAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsob3B0cz8uZm9jdXNDb2x1bW4pKSB7XG4gICAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSBvcHRzLmZvY3VzQ29sdW1uO1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJvd1xuICAgIHJldHVybiB0aGlzLmFkZFJvdyhldmVudCwgdW5kZWZpbmVkIC8qIGluc2VydEF0OiB1c2UgZGVmYXVsdCAqLywgb3B0cyk7XG4gIH1cblxuICBjb25maXJtQW5kQmFja3dhcmQoZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nIH0pOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBwcmV2aW91c1JvdyA9IHRoaXMuZWRpdGVkUm93O1xuICAgIGNvbnN0IGZvY3VzQ29sdW1uID0gb3B0cz8uZm9jdXNDb2x1bW4gPz8gdGhpcy5sYXN0VXNlckNvbHVtbjtcblxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIERlbGV0aW5nIGVkaXRlZCByb3csIGlmIGVtcHR5IGFuZCBub3QgZGlydHlcbiAgICBpZiAocHJldmlvdXNSb3cpIHtcbiAgICAgIC8vIFByZXZpb3VzIHJvdyB3YXMgYSBuZXggcm93IEFORCBpbnZhbGlkOiBkZWxldGUgaXRcbiAgICAgIGlmIChwcmV2aW91c1Jvdy5pZCA9PT0gLTEgJiYgcHJldmlvdXNSb3cudmFsaWRhdG9yPy5pbnZhbGlkICYmICFwcmV2aW91c1Jvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCBwcmV2aW91c1Jvdyk7XG5cbiAgICAgICAgLy8gV2FpdCBkZWxldGlvbiBpcyBkb25lLCB0aGVuIGVkaXQgcHJldmlvdXMgcm93IChieSBpZCwgYmVjYXVzZSBvZiByZWxvYWRpbmcpXG4gICAgICAgIHRoaXMud2FpdElkbGUoKS50aGVuKCgpID0+IHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIHJvdy5pZCwgeyBmb2N1c0NvbHVtbiB9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjYW5ub3QgY29uZmlybSBwcmV2aW91cyByb3dcbiAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCBwcmV2aW91c1JvdykpIHtcbiAgICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAgIGlmIChwcmV2aW91c1Jvdy52YWxpZGF0b3I/LnBlbmRpbmcpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocHJldmlvdXNSb3cudmFsaWRhdG9yLCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QgfSlcbiAgICAgICAgICAgICAgLy8gV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiBhbmQgbG9vcFxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1BbmRCYWNrd2FyZChldmVudCwgcm93LCB7IGZvY3VzQ29sdW1uIH0pKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHbyBiYWNrIHRvIGZpcnN0IGNvbHVtblxuICAgICAgICB0aGlzLmZvY3VzQ29sdW1uID0gZm9jdXNDb2x1bW47XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVkaXQgcm93LCBmb2N1c2luZyBhdCB0aGUgZW5kXG4gICAgdGhpcy5lZGl0Um93KGV2ZW50LCByb3csIHsgZm9jdXNDb2x1bW4gfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25maXJtQW5kRm9yd2FyZChldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIHJvdz86IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmcgfSk6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBjb25zdCBmb2N1c0NvbHVtbiA9IG9wdHM/LmZvY3VzQ29sdW1uID8/IHRoaXMuZmlyc3RVc2VyQ29sdW1uO1xuXG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gSWYgbm90IGNvbmZpcm1lZFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHJvdy52YWxpZGF0b3IsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KVxuICAgICAgICAgICAgLy8gV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiBhbmQgbG9vcFxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25maXJtQW5kRm9yd2FyZChldmVudCwgcm93LCB7IGZvY3VzQ29sdW1uIH0pKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBHbyBiYWNrIHRvIGZpcnN0IGNvbHVtblxuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IGZvY3VzQ29sdW1uO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEVkaXQgbmV4dCByb3dcbiAgICBjb25zdCBuZXh0Um93SWQgPSByb3cuaWQgKyAxO1xuICAgIHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIG5leHRSb3dJZCwgeyBmb2N1c0NvbHVtbiB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm0gdGhlIGNyZWF0aW9uIG9mIHRoZSBnaXZlbiByb3csIG9yIGlmIG5vdCBzcGVjaWZpZWQgdGhlIGN1cnJlbnRseSBlZGl0ZWQgcm93XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBjb25maXJtRWRpdENyZWF0ZShldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5lZGl0aW5nKSByZXR1cm4gdHJ1ZTsgLy8gbm8gcm93IHRvIGNvbmZpcm1cblxuICAgIC8vIENvbmZpcm1hdGlvbiBlZGl0aW9uIG9yIGNyZWF0aW9uXG4gICAgLy8gVE9ETzogYWRkIGF3YWl0ID9cbiAgICBjb25zdCBjb25maXJtZWQgPSByb3cuY29uZmlybUVkaXRDcmVhdGUoKTtcblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIC8vIElmIGVkaXQgZmluaXNoZWQsIGZvcmdldCBlZGl0ZWQgcm93XG4gICAgICBpZiAocm93ID09PSB0aGlzLmVkaXRlZFJvdykge1xuICAgICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFyayB0YWJsZSBhcyBkaXJ0eSAoaWYgcm93IGlzIGRpcnR5KVxuICAgICAgaWYgKHJvdy5kaXJ0eSkge1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKiBiZWNhdXNlIG9mIHJlc2V0RXJyb3IoKSAqLyB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgZXJyb3JcbiAgICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgICAvLyBFbWl0IHRoZSBjb25maXJtIGV2ZW50XG4gICAgICB0aGlzLm9uQ29uZmlybUVkaXRDcmVhdGVSb3cubmV4dChyb3cpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICBpZiAocm93LnZhbGlkYXRvcikge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiB1c2luZyBhc3luYyBpc1ZhbGlkKCkgZnVuY3Rpb25cbiAgICAgIGlmIChyb3cudmFsaWRhdG9yLnBlbmRpbmcpIHtcbiAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvcilcbiAgICAgICAgICAvLyBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uIGFuZCBsb29wXG4gICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gTk9UIGNvbmZpcm1lZCA9IHJvdyBoYXMgZXJyb3JcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBDYW5ub3QgY29uZmlybSByb3csIGJlY2F1c2UgaW52YWxpZCcpO1xuICAgICAgICBBcHBGb3JtVXRpbHMubG9nRm9ybUVycm9ycyhyb3cudmFsaWRhdG9yLCAnW3RhYmxlXSAnKTtcbiAgICAgIH1cblxuICAgICAgLy8gZml4OiBtYXJrIGFsbCBjb250cm9scyBhcyB0b3VjaGVkIHRvIHNob3cgZXJyb3JzXG4gICAgICByb3cudmFsaWRhdG9yLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgLy8gQ29tcHV0ZSByb3cgZXJyb3IsIGFuZCBwcm9wYWdhdGUgdG8gdGFibGUncyBlcnJvclxuICAgICAgaWYgKHRoaXMucHJvcGFnYXRlUm93RXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmdldFJvd0Vycm9yKHJvdyk7XG4gICAgICAgIHRoaXMuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdCBjb25maXJtZWRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjYW5jZWxPckRlbGV0ZShldmVudDogRXZlbnQsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW47IGtlZXBFZGl0aW5nPzogYm9vbGVhbiB9KSB7XG4gICAgLy8gRGVsZXRlIG5ldyByb3dcbiAgICBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHJvdyk7XG4gICAgfVxuICAgIC8vIERlbGV0ZSBleGlzdGluZyAoYnV0IG5vdCBlZGl0aW5nKSByb3dcbiAgICBlbHNlIGlmICghcm93LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZGVsZXRlRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICAgIC8vIENhbmNlbCBleGlzdGluZyAoYW5kIGVkaXRpbmcpIHJvd1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRSb3coZXZlbnQ/OiBFdmVudCwgaW5zZXJ0QXQ/OiBudW1iZXIsIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nOyBlZGl0aW5nPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQXNraW5nIGZvciBuZXcgcm93Li4uJyk7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBVc2UgbW9kYWwgaWYgaW5saW5lIGVkaXRpb24gaXMgZGlzYWJsZWRcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikge1xuICAgICAgdGhpcy5vcGVuTmV3Um93RGV0YWlsKGV2ZW50KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gZmluaXNoIGVkaXRlZCByb3cgZmlyc3RcbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFkZCBuZXcgcm93XG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5hZGRSb3dUb1RhYmxlKGluc2VydEF0LCBvcHRzKTtcbiAgICByZXR1cm4gISFyb3c7XG4gIH1cblxuICBhc3luYyBzYXZlKG9wdHM/OiB7IGtlZXBFZGl0aW5nPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGtlZXBFZGl0aW5nOiB0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsXG4gICAgICAuLi5vcHRzLFxuICAgIH07XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5UQUJMRV9SRUFEX09OTFksIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9SRUFEX09OTFknIH07XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICAvLyBLZWVwIGVkaXRlZCByb3cgaWQgKHNob3VsZCBiZSBkb25lIEJFRk9SRSBjb25maXJtRWRpdENyZWF0ZSgpIClcbiAgICB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IG9wdHMua2VlcEVkaXRpbmdcbiAgICAgID8gKHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cuaWQgOiB1bmRlZmluZWQpIHx8IHRoaXMuc2luZ2xlU2VsZWN0ZWRSb3c/LmlkXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcmV2aW91c2x5RWRpdGVkUm93SWQgPSB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZDtcbiAgICBjb25zdCBwcmV2aW91c2x5RWRpdGVkRGF0YSA9IG9wdHMua2VlcEVkaXRpbmdcbiAgICAgID8gKGlzTm90TmlsKHByZXZpb3VzbHlFZGl0ZWRSb3dJZCkgJiYgdGhpcy5lZGl0ZWRSb3c/LmN1cnJlbnREYXRhKSB8fCB0aGlzLnNpbmdsZVNlbGVjdGVkUm93Py5jdXJyZW50RGF0YVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLlRBQkxFX0lOVkFMSURfUk9XX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfSU5WQUxJRF9ST1dfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBzYXZpbmdcbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENhbGxpbmcgc2VydmljZSBzYXZlKClcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIENhbGxpbmcgZGF0YVNvdXJjZS5zYXZlKCkuLi4nKTtcbiAgICAgIGNvbnN0IGlzT0sgPSBhd2FpdCB0aGlzLl9kYXRhU291cmNlLnNhdmUoKTtcblxuICAgICAgaWYgKGlzT0spIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgcmV0dXJuIGlzT0s7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcblxuICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyByb3dcbiAgICAgIGlmIChpc05vdE5pbChwcmV2aW91c2x5RWRpdGVkUm93SWQpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2VsZWN0Um93QnlJZE9yRGF0YShwcmV2aW91c2x5RWRpdGVkUm93SWQsIHByZXZpb3VzbHlFZGl0ZWREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYW5jZWwoZXZlbnQ/OiBFdmVudCwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pIHtcbiAgICAvLyBDaGVjayBjb25maXJtYXRpb25cbiAgICBpZiAoKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSAmJiB0aGlzLmRpcnR5ICYmICh0aGlzLmNvbmZpcm1CZWZvcmVDYW5jZWwgfHwgdGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZWQpKSB7XG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNhbkNhbmNlbFJvd3MoKS50aGVuKChjb25maXJtKSA9PiB7XG4gICAgICAgIC8vIElmIGNvbmZpcm1lZCwgbG9vcFxuICAgICAgICBpZiAoY29uZmlybSkgdGhpcy5jYW5jZWwobnVsbCwgeyBpbnRlcmFjdGl2ZTogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRSZWZyZXNoKCk7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVSb3coXG4gICAgZXZlbnQ/OiBFdmVudCxcbiAgICByb3c/OiBUYWJsZUVsZW1lbnQ8VD4sXG4gICAgb3B0cz86IHtcbiAgICAgIGluY2x1ZGVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuICAgICAgZXhjbHVkZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gICAgfVxuICApIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICByb3cgPSByb3cgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1JvdyA9IGF3YWl0IHRoaXMuYWRkUm93VG9UYWJsZShyb3cuaWQgKyAxKTtcbiAgICBpZiAoIW5ld1JvdykgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIG5ldyByb3cgdG8gdGFibGUnKTtcblxuICAgIGNvbnN0IHNvdXJjZSA9IHJvdy5jbG9uZURhdGEoKTtcbiAgICBsZXQgdGFyZ2V0OiBhbnk7XG5cbiAgICAvLyBDb3B5IGluY2x1ZGVkIHByb3BlcnRpZXMgb25seVxuICAgIGlmIChpc05vdEVtcHR5QXJyYXkob3B0cz8uaW5jbHVkZWRQcm9wZXJ0aWVzKSkge1xuICAgICAgdGFyZ2V0ID0ge307XG4gICAgICAvLyBDbG9uZSAoZGVlcCBjb3B5KVxuICAgICAgb3B0cy5pbmNsdWRlZFByb3BlcnRpZXMuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgICAgICBzZXRQcm9wZXJ0eUJ5UGF0aCh0YXJnZXQsIHBhdGgsIGdldFByb3BlcnR5QnlQYXRoKHNvdXJjZSwgcGF0aCkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBhbGwgcHJvcGVydGllc1xuICAgIGVsc2Uge1xuICAgICAgdGFyZ2V0ID0gc291cmNlO1xuXG4gICAgICAvLyBDbGVhbiBpZCBhbmQgdXBkYXRlRGF0ZVxuICAgICAgRW50aXR5VXRpbHMuY2xlYW5JZEFuZFVwZGF0ZURhdGUodGFyZ2V0LCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgZXhjbHVkZWQgcHJvcGVydGllcyAoZS5nLiByYW5rT3JkZXIsIGV0YylcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KG9wdHM/LmV4Y2x1ZGVkUHJvcGVydGllcykpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXdSb3cuY3VycmVudERhdGE7XG4gICAgICBvcHRzLmV4Y2x1ZGVkUHJvcGVydGllcy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgICAgIHNldFByb3BlcnR5QnlQYXRoKHRhcmdldCwgcGF0aCwgZ2V0UHJvcGVydHlCeVBhdGgobmV3RGF0YSwgcGF0aCkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Jvdy52YWxpZGF0b3IpIHtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZSh0YXJnZXQpO1xuICAgICAgbmV3Um93LnZhbGlkYXRvci5tYXJrQXNEaXJ0eSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3Um93LmN1cnJlbnREYXRhPy5mcm9tT2JqZWN0KSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YS5mcm9tT2JqZWN0KHRhcmdldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSb3cuY3VycmVudERhdGEgPSB0YXJnZXQ7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0XG4gICAgdGhpcy5jbGlja1Jvdyh1bmRlZmluZWQsIG5ld1Jvdyk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdpc0FsbFNlbGVjdGVkLiBsZW5ndGhzJywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoLCB0aGlzLnRvdGFsUm93Q291bnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJvd0NvdW50IHx8IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy52aXNpYmxlUm93Q291bnQ7XG4gIH1cblxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICBhc3luYyBtYXN0ZXJUb2dnbGUoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93cyA9IHRoaXMuX2RhdGFTb3VyY2UuZ2V0Um93cygpO1xuICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uKC4uLnJvd3MpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlbGVjdGlvbihldmVudDogRXZlbnQsIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IGF3YWl0IHRoaXMuZGVsZXRlUm93cyhldmVudCwgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQsIG9wdHMpO1xuICAgIGlmIChkZWxldGVDb3VudCA+IDApIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBvcHRzIFVzZSBpbnRlcmFjdGl2ZT1mYWxzZSB0byBhdm9pZCB1c2VyIGludGVyYWN0aW9uIChlLmcuIHVzZXIgY29uZmlybWF0aW9uKVxuICAgKiAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93KGV2ZW50OiBFdmVudCB8IG51bGwsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gYXdhaXQgdGhpcy5kZWxldGVSb3dzKGV2ZW50LCBbcm93XSwgb3B0cyk7XG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50ID09PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93c1xuICAgKiBAcGFyYW0gb3B0cyBVc2UgaW50ZXJhY3RpdmU9ZmFsc2UgdG8gYXZvaWQgdXNlciBpbnRlcmFjdGlvbiAoZS5nLiB1c2VyIGNvbmZpcm1hdGlvbilcbiAgICogICAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93cyhldmVudDogRXZlbnQgfCBudWxsLCByb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVEFCTEVfUkVBRF9PTkxZLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfUkVBRF9PTkxZJyB9O1xuICAgIH1cbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiAwOyAvLyBTS2lwXG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQgfHwgaXNFbXB0eUFycmF5KHJvd3MpKSByZXR1cm4gMDsgLy8gU2tpcCBpcyBkaXNhYmxlZCwgb3Igbm8gcm93cyB0byBkZWxldGVcblxuICAgIGlmICh0aGlzLmxvYWRpbmcgJiYgKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTa2lwIGRlbGV0ZVJvd3MoKSBiZWNhdXNlIHRhYmxlIGlzIGJ1c3kgKGxvYWRpbmcpLiBVc2Ugb3B0cy5pbnRlcmFjdGl2ZSA9IGZhbHNlIHRvIGZvcmNlIGRlbGV0aW9uJyk7XG4gICAgICByZXR1cm4gMDsgLy8gU2tpcCBpZiBsb2FkaW5nXG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRvIGtlZXAgbmV3bHkgY3JlYXRlZCByb3dcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmlkID09PSAtMSAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nICYmICFyb3dzLmluY2x1ZGVzKHRoaXMuZWRpdGVkUm93KSkge1xuICAgICAgY29uc3QgY29uZmlybWVkID0gdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpO1xuICAgICAgaWYgKCFjb25maXJtZWQpIHJldHVybiAwOyAvLyBDYW5ub3QgZGVsZXRlIChlLmcuIGVkaXRlZCByb3cgaXMgaW52YWxpZClcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjYW4gZGVsZXRlXG4gICAgY29uc3QgY2FuRGVsZXRlID0gYXdhaXQgdGhpcy5jYW5EZWxldGVSb3dzKHJvd3MsIG9wdHMpO1xuICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gMDsgLy8gQ2Fubm90IGRlbGV0ZVxuXG4gICAgLy8gUmV2ZXJzZSByb3cgb3JkZXIgKG9uIGEgY29weSlcbiAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCwgbmVlZCBiZWNhdXNlIHJvdy5kZWxldGUoKSBoYXMgYXN5bmMgZXhlY3V0aW9uXG4gICAgLy8gYW5kIGluZGV4IGNhY2hlIGlzIHVwZGF0ZWQgd2l0aCBhIGRlbGF5XG4gICAgbGV0IHRlbXBSb3dzID0gcm93cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IChhLmlkID4gYi5pZCA/IC0xIDogMSkpO1xuXG4gICAgY29uc3QgZGVsZXRlZFJvd3M6IFRhYmxlRWxlbWVudDxUPltdID0gW107XG5cbiAgICAvLyBJZiBkYXRhIG5lZWQgdG8gYmUgc2F2ZWQgZmlyc3RcbiAgICBpZiAodGhpcy5zYXZlQmVmb3JlRGVsZXRlKSB7XG4gICAgICAvLyBFeGNsdWRlIGludmFsaWQgcm93cyAoYmVjYXVzZSBvZiBzYXZlKCkgd2lsbCBmYWlsLCB3aGVuIGV4aXN0cyBzb21lIGludmFsaWQgcm93cylcbiAgICAgIHRlbXBSb3dzID0gdGVtcFJvd3MuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgLy8gRGVsZXRlIHRoZSByb3cgOlxuICAgICAgICAvLyAtIGlmIG5ld2x5IGNyZWF0ZWQgcm93IChpZCA9IC0xKSxcbiAgICAgICAgLy8gLSBvciBpZiBpbnZhbGlkIGFuZCBub3QgZWRpdGluZyAoPSBub3QgY2FuY2VsbGFibGUpXG4gICAgICAgIGlmIChyb3cuaWQgPT09IC0xIHx8ICghcm93LmVkaXRpbmcgJiYgcm93LmludmFsaWQpIC8qZG8gbm90IHVzZSAhdmFsaWQgYmVjYXVzZSBpZiByb3cgaXMgZGlzYWJsZWQsIGl0IHdpbGwgYmUgYWx3YXlzICF2YWxpZCAqLykge1xuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIERlbGV0ZSByb3cgIyR7cm93LmlkfWApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgICAgICAgcm93LmRlbGV0ZSgpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50LS07XG4gICAgICAgICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgICAgICAgZGVsZXRlZFJvd3MucHVzaChyb3cpO1xuICAgICAgICAgIGlmICh0aGlzLmVkaXRlZFJvdyA9PT0gcm93KSB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEV4Y2x1ZGUgZnJvbSB0aGUgbGlzdCB0byBkZWxldGUgdXNpbmcgdGhlIHNlcnZpY2VcbiAgICAgICAgfVxuICAgICAgICAvLyBDYW5jZWwgdGhlIHJvdyAoYW5kIG1hcmsgYXMgcHJpc3RpbmUpLCB3aGVuIG5vdCB2YWxpZCBidXQgaW4gZWRpdGlvblxuICAgICAgICBlbHNlIGlmIChyb3cuZWRpdGluZyAmJiAhcm93LnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcbiAgICAgICAgICByb3cuY2FuY2VsKCk7XG4gICAgICAgICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmUgKGlmIHBvc3NpYmxlKVxuICAgICAgICAgIHRoaXMuY2hlY2tJZlJvd1ByaXN0aW5lKHJvdywgeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSAvKmF2b2lkIHByb3BhZ2F0aW9uIHRvIHRhYmxlKi8gfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJvdy4gdGhlIHJvdyB3aWxsIGJlIGRlbGV0ZWQgYWZ0ZXIgdGhlIHNhdmVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEFwcGx5IHNhdmUsIG9ubHkgaWYgdGhlcmUgaXMgc3RpbGwgc29tZSByb3dzIHRvIGRlbGV0ZVxuICAgICAgLy8gV0FSTjogSWYgbm8gbW9yZSByb3dzIChlLmcuIGJlY2F1c2UgYWxsIGhhcyBiZWVuIGNhbmNlbGxlZCkgdGhlbiBjb250aW51ZSBhbnl3YXkgdG8gY2xlYXIgZWRpdGVkUm93IGFuZCBzZWxlY3Rpb24gKGlzc3VlIElNQUdJTkUtNjY5KVxuICAgICAgaWYgKGRlbGV0ZWRSb3dzLmxlbmd0aCB8fCB0ZW1wUm93cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gU2F2ZSBkYXRhIChlLmcuIHdoZW4gdXNpbmcgbWVtb3J5IHNlcnZpY2UpXG4gICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdkZWxldGUnKTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIC8vIFN0b3AgaWYgc2F2ZSBjYW5jZWxsZWQgb3Igc2F2ZSBmYWlsZWRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQXBwbHkgZGVsZXRpb24gb24gZGF0YXNvdXJjZVxuICAgICAgLy8gSWYgbm8gbW9yZSByb3dzIHRvIGRlbGV0ZSwgY29udGludWUgYW55d2F5IHRvIGNsZWFyIGVkaXRlZFJvdyBhbmQgc2VsZWN0aW9uIChpc3N1ZSBJTUFHSU5FLTY2OSlcbiAgICAgIGlmICh0ZW1wUm93cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gRGVsZXRlICR7dGVtcFJvd3MubGVuZ3RofSByb3dzLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuZGVsZXRlQWxsKHRlbXBSb3dzKTtcbiAgICAgIH1cblxuICAgICAgLy8gRE8gbm90IHVwZGF0ZSBtYW51YWxseSwgYmVjYXVzZSB3YXRjaEFMbCgpLnN1YnNjcmliZSgpIHdpbGwgdXBkYXRlIHRoaXMgY291bnRcbiAgICAgIC8vdGhpcy50b3RhbFJvd0NvdW50IC09IGRlbGV0ZUNvdW50O1xuICAgICAgLy90aGlzLnZpc2libGVSb3dDb3VudCAtPSBkZWxldGVDb3VudDtcblxuICAgICAgLy8gRGVzZWxlY3QgZGVsZXRlZCByb3dzXG4gICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdCguLi5yb3dzKTtcblxuICAgICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKm1hcmtGb3JDaGVjaygpIGlzIGNhbGxlZCBqdXN0IGFmdGVyKi8gfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICB0aGlzLm9uQWZ0ZXJEZWxldGVkUm93cy5uZXh0KHJvd3MpO1xuXG4gICAgICByZXR1cm4gcm93cy5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VsZWN0Um93QnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgaWYgKCFyb3cpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jbGlja1JvdyhudWxsLCByb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBzZWxlY3Qgcm93IGJ5IGRhdGEuIFdpbGwgdXNlIGVxdWFscygpIHRvIGZpbmQgc2FtZSByb3cncyBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBhc3luYyBzZWxlY3RSb3dCeURhdGEoZGF0YTogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMud2FpdElkbGUoKTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpLmZpbmQoKHJvdykgPT4gdGhpcy5lcXVhbHMocm93LmN1cnJlbnREYXRhLCBkYXRhKSk7XG4gICAgaWYgKCFyb3cpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jbGlja1JvdyhudWxsLCByb3cpO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0Um93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICAvLyAvIVxcIERPIE5PVCBwcmV2ZW50IGRlZmF1bHQsIG90aGVyd2lzZSB0aGUgY2hlY2tib3ggd2lsbCBub3QgYmUgdXBkYXRlZFxuICAgIC8vZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2VsZWN0aW9uLnRvZ2dsZShyb3cpO1xuICB9XG5cbiAgY2xpY2tSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIC8vIFdhaXQgd2hpbGUgbG9hZGluZywgYW5kIGxvb3BcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFdhaXRpbmcgYmVmb3JlIGFwcGx5IGNsaWNrUm93KCkgKGRhdGFzb3VyY2UgaXMgYnVzeSkuLi4nKTtcbiAgICAgIHRoaXMud2FpdElkbGUoeyB0aW1lb3V0OiAyMDAwIH0pLnRoZW4oKCkgPT4gdGhpcy5jbGlja1JvdyhldmVudCwgcm93KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ1t0YWJsZV0gRGV0ZWN0IGNsaWNrIG9uIHJvdycpO1xuXG4gICAgLy8gQ2FuY2VsbGVkIGJ5IGV2ZW50XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBjbGlja1JvdyBldmVudCBpcyBkZWZhdWx0UHJldmVudGVkJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBvbkNsaWNrUm93IGlmIG9ic2VydmVkXG4gICAgaWYgKHRoaXMub25DbGlja1Jvdy5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5vbkNsaWNrUm93Lm5leHQocm93KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE9wZW4gdGhlIGRldGFpbCBwYWdlIChpZiBub3QgaW5saW5lIGVkaXRpbmcpXG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHtcbiAgICAgIGlmICh0aGlzLl9vcGVuaW5nUm93KSByZXR1cm47IC8vIFByZXZlbnQgZG91YmxlIGNsaWNrXG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb3BlbmluZ1JvdyA9IHRydWU7IC8vIFByZXZlbnQgZG91YmxlIGNsaWNrXG4gICAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgICAgdGhpcy5vcGVuUm93KHJvdy5jdXJyZW50RGF0YS5pZCwgcm93KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignRmFpbGVkIHRvIG9wZW4gcm93JywgZXJyKSkgLy8gQ29udGludWVcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG5cbiAgICAgICAgICAvLyBQcmV2ZW50IGRvdWJsZSBjbGljayAodXNlIGFuIG9wZW4gdGhyb3R0bGUgdGltZSlcbiAgICAgICAgICBpZiAodGhpcy5vcGVuUm93VGhyb3R0bGVUaW1lID4gMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX29wZW5pbmdSb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIHRoaXMub3BlblJvd1Rocm90dGxlVGltZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX29wZW5pbmdSb3cgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBlZGl0aW5nIHJvd1xuICAgIHJldHVybiB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgeyBmb2N1c0NvbHVtbjogdW5kZWZpbmVkIC8qZm9yY2UgdG8gdXNlIHRoZSBjbGljayB0YXJnZXQqLyB9KTtcbiAgfVxuXG4gIG1vdmVSb3coaWQ6IG51bWJlciwgZGlyZWN0aW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UubW92ZShpZCwgZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHJlYWR5KG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB3YWl0Rm9yVHJ1ZSh0aGlzLnJlYWR5U3ViamVjdCwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0LCAuLi5vcHRzIH0pO1xuICB9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgcmV0dXJuIHdhaXRGb3JGYWxzZSh0aGlzLmxvYWRpbmdTdWJqZWN0LCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QsIC4uLm9wdHMgfSk7XG4gIH1cblxuICBhc3luYyBvcGVuU2VsZWN0Q29sdW1uc01vZGFsKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPGFueT4ge1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gQ29weSBjdXJyZW50IGNvbHVtbnMgKGRlZXAgY29weSlcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDdXJyZW50Q29sdW1ucygpO1xuXG4gICAgY29uc3QgaGFzVG9wTW9kYWwgPSAhIShhd2FpdCB0aGlzLm1vZGFsQ3RybC5nZXRUb3AoKSk7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBUYWJsZVNlbGVjdENvbHVtbnNDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczogeyBjb2x1bW5zIH0sXG4gICAgICBjc3NDbGFzczogaGFzVG9wTW9kYWwgJiYgJ3N0YWNrLW1vZGFsJyxcbiAgICB9KTtcblxuICAgIC8vIE9wZW4gdGhlIG1vZGFsXG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuXG4gICAgLy8gT24gZGlzbWlzc1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgbW9kYWwub25EaWREaXNtaXNzKCk7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47IC8vIENBTkNFTExFRFxuXG4gICAgLy8gQXBwbHkgY29sdW1uc1xuICAgIGNvbnN0IHVzZXJDb2x1bW5zID0gKGRhdGEgfHwgW10pLmZpbHRlcigoYykgPT4gYy5jYW5IaWRlID09PSBmYWxzZSB8fCBjLnZpc2libGUpLm1hcCgoYykgPT4gYy5uYW1lKSB8fCBbXTtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmNvbmNhdCh1c2VyQ29sdW1ucykuY29uY2F0KFJFU0VSVkVEX0VORF9DT0xVTU5TKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gVXBkYXRlIHVzZXIgc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModXNlckNvbHVtbnMsIFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyk7XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pOiBhbnkge1xuICAgIHJldHVybiByb3cuaWQ7XG4gIH1cblxuICBkb1JlZnJlc2goZXZlbnQ/OiBDb21wbGV0YWJsZUV2ZW50KSB7XG4gICAgdGhpcy5lbWl0UmVmcmVzaChldmVudCk7XG5cbiAgICAvLyBXaGVuIHRhcmdldCB3YWl0IGZvciBhIGNvbXBsZXRlIChlLmcuIElvblJlZnJlc2hlcilcbiAgICBpZiAoZXZlbnQ/LnRhcmdldCAmJiBldmVudC50YXJnZXQuY29tcGxldGUpIHtcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgICAgIGV2ZW50LnRhcmdldC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudENvbHVtbnMoKTogQ29sdW1uSXRlbVtdIHtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLnNsaWNlKFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoKS5maWx0ZXIoKG5hbWUpID0+IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKG5hbWUpID09PSAtMSk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1xuICAgICAgLmNvbmNhdChoaWRkZW5Db2x1bW5zKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gIVJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMobmFtZSkgJiYgIVJFU0VSVkVEX0VORF9DT0xVTU5TLmluY2x1ZGVzKG5hbWUpICYmICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhuYW1lKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxhYmVsOiB0aGlzLmdldEkxOG5Db2x1bW5OYW1lKG5hbWUpLFxuICAgICAgICB2aXNpYmxlOiB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZihuYW1lKSAhPT0gLTEsXG4gICAgICAgIGNhbkhpZGU6IHRoaXMuZ2V0UmVxdWlyZWRDb2x1bW5zKCkuaW5kZXhPZihuYW1lKSA9PT0gLTEsXG4gICAgICB9KSk7XG4gIH1cblxuICBlc2NhcGVFZGl0aW5nUm93KGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPikge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhcm93LmVkaXRpbmcpIHJldHVybjtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbYXBwLXRhYmxlXSBDYW5jZWwgdGhlIHJvdyAoa2V5ZG93bi5lc2NhcGUpJyk7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIC8vIEF2b2lkIHRvIGNhbmNlbCB0aGUgZWRpdG9yXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgbmV3IHJvdyAobm8gaWQpXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEpIHtcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yKSB7XG4gICAgICAgIC8vIElmIHBlbmRpbmc6IFdhaXQgZW5kIG9mIHZhbGlkYXRpb24sIHRoZW4gbG9vcFxuICAgICAgICBpZiAocm93LnBlbmRpbmcpIHtcbiAgICAgICAgICBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyhyb3cudmFsaWRhdG9yKS50aGVuKCgpID0+IHRoaXMuZXNjYXBlRWRpdGluZ1JvdyhldmVudCwgcm93KSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUm93IGlzIGludmFsaWQ6IGRlbGV0ZSB0aGUgcm93XG4gICAgICAgIGlmIChyb3cuaW52YWxpZCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCByb3cpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgcm93IGV4aXN0cyAoaGFzIGFuIGlkKVxuICAgIGVsc2Uge1xuICAgICAgLy8gQ2FsbCBjYW5jZWwgZnVuY3Rpb24gLFxuICAgICAgLy8gLSBpZiBjb25maXJtYXRpb24gd2lsbCBiZSBjYWxsZWQgYmVmb3JlXG4gICAgICAvLyAtIG9yIGlmIHJvdyBpcyBwcmlzdGluZSAobm90IGRpcnR5KVxuICAgICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCB8fCAhcm93LmRpcnR5KSB7XG4gICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgeyBrZWVwRWRpdGluZzogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCB0cnkgdG8gY29uZmlybSB0aGUgcm93XG4gICAgdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUZvcm1QYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcywgdG8gcmVzb2x2ZSBhbGwgZmllbGQgbmFtZVxuXG4gICAgLy8gVXNlIGNvbHVtbnMga2V5LCBoYXMgZGVmYXVsdCBuYW1lXG4gICAgY29uc3QgaTE4bkNvbHVtbktleSA9IHRoaXMuZ2V0STE4bkNvbHVtbk5hbWUocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlPy5pbnN0YW50KGkxOG5Db2x1bW5LZXkpIHx8IGkxOG5Db2x1bW5LZXk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJvdGVjdGVkIGVkaXRSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fZW5hYmxlZCB8fCAhdGhpcy5pbmxpbmVFZGl0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93ID09PSByb3cpIHJldHVybiB0cnVlOyAvLyBBbHJlYWR5IHRoZSBlZGl0ZWQgcm93XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjb25maXJtZWQgPSB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKCk7XG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghcm93LmVkaXRpbmcgJiYgIXRoaXMubG9hZGluZykge1xuXG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gb3B0cz8uZm9jdXNDb2x1bW4gPz8gdGhpcy5mb2N1c0NvbHVtbjtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2Uuc3RhcnRFZGl0KHJvdyk7XG4gICAgfVxuICAgIHRoaXMuZWRpdGVkUm93ID0gcm93O1xuICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3cuZW1pdChyb3cpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBzZWxlY3Qgcm93LCBieSByb3cuaWQsIG9yIGJ5IGRhdGEuIFdJbGwgdXNlIEVudGl0eVV0aWxzLmVxdWFscygpXG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2VsZWN0Um93QnlJZE9yRGF0YShpZDogbnVtYmVyLCBkYXRhPzogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNlbGVjdCBieSByb3cgaWQgKGlmIE5PVCBhIG5ldyByb3cpXG4gICAgICBpZiAoaXNOb3ROaWwoaWQpIHx8IGlkICE9PSAtMSkge1xuICAgICAgICBkb25lID0gYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkKGlkKTtcbiAgICAgICAgaWYgKGRvbmUpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1thcHAtdGFibGVdIFNhdmU6IENhbm5vdCByZXNlbGVjdCByb3cgYnkgcm93LmlkOiAnLCBpZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyeSBieSBkYXRhXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkb25lID0gYXdhaXQgdGhpcy5zZWxlY3RSb3dCeURhdGEoZGF0YSk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTYXZlOiBDYW5ub3QgcmVzZWxlY3Qgcm93IGJ5IGRhdGE6ICcsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBMb2csIGJ1dCBjb250aW51ZVxuICAgICAgY29uc29sZS5lcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIHNlbGVjdGVkIHJvdyBpZiB1bmlxdWUgaW4gc2VsZWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNpbmdsZVNlbGVjdGVkUm93KCk6IFRhYmxlRWxlbWVudDxUPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkPy5sZW5ndGggPT09IDEgPyB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFswXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5EZWxldGVSb3dzKHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3Mub2JzZXJ2ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MsICdjYW5EZWxldGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7IHJvd3MgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWxcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGRlbGV0ZSByb3dzJywgZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgIGlmICh0aGlzLmNvbmZpcm1CZWZvcmVEZWxldGUgJiYgKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNrRGVsZXRlQ29uZmlybWF0aW9uKG51bGwsIHJvd3MpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5DYW5jZWxSb3dzKHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBHZXQgZGlydHkgcm93c1xuICAgIHJvd3MgPSByb3dzIHx8IHRoaXMuZGF0YVNvdXJjZS5nZXRSb3dzKCkuZmlsdGVyKChyb3cpID0+IHJvdy52YWxpZGF0b3I/LmRpcnR5KTtcblxuICAgIGlmIChpc0VtcHR5QXJyYXkocm93cykpIHJldHVybiB0cnVlOyAvLyBObyBkaXJ0eTogT0tcblxuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzQ2FuY2VsID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cywgJ2NhbkNhbmNlbCcsIHtcbiAgICAgICAgICBkZXRhaWw6IHsgcm93cyB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFpc0NhbmNlbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBjYW5jZWwgcm93cycsIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFza0NhbmNlbENvbmZpcm1hdGlvbihudWxsLCByb3dzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZUJlZm9yZUFjdGlvbihzYXZlQWN0aW9uOiBTYXZlQWN0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgLy8gQ29udGludWUgd2l0aG91dCBzYXZlXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgc2F2ZTogYm9vbGVhbjtcbiAgICBzd2l0Y2ggKHNhdmVBY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHNhdmUgPSB0aGlzLnNhdmVCZWZvcmVEZWxldGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZUZpbHRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzb3J0JzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZVNvcnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2F2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvclxuICAgIGxldCBjb25maXJtZWQgPSB0cnVlO1xuXG4gICAgaWYgKHNhdmUpIHtcbiAgICAgIGlmICh0aGlzLm9uQmVmb3JlU2F2ZS5vYnNlcnZlZCkge1xuICAgICAgICAvLyBBc2sgY29uZmlybWF0aW9uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlU2F2ZSwgJ2JlZm9yZVNhdmUnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgYWN0aW9uOiBzYXZlQWN0aW9uLCB2YWxpZDogdGhpcy52YWxpZCB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbmZpcm1lZCA9IHJlcy5jb25maXJtZWQ7XG4gICAgICAgICAgc2F2ZSA9IHJlcy5zYXZlO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBkZWxldGUgcm93cycsIGVycik7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgaWYgKHNhdmUpIHtcbiAgICAgICAgLy8gVXNlciBjb25maXJtZWQgc2F2ZVxuICAgICAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZSgpO1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7IC8vIFJlc3RvcmUgZGlydHkgZmxhZ1xuICAgICAgICByZXR1cm4gc2F2ZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gTm8gc2F2ZSBidXQgY29udGludWUgYWN0aW9uXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbCB0aGUgYWN0aW9uXG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIHJvdyBkZXRhaWwgdmlldy4gQnkgZGVmYXVsdCwgd2lsbCB0byBvcGVuIHJvdyBkZXRhaWwgcGFnZS5cbiAgICogQ2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcywgQlVUIHByZWZlciB0byBzdWJzY3JpYmUgb24gb25PcGVuUm93XG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvcGVuUm93KGlkOiBJRCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5hbGxvd1Jvd0RldGFpbCkge1xuICAgICAgaWYgKHRoaXMuZGVidWcgJiYgdGhpcy5kaXJ0eSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gT3BlbmluZyByb3cgZGV0YWlscywgYnV0IHRhYmxlIGhhcyB1bnNhdmVkIGNoYW5nZXMhJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9uT3BlblJvdy5vYnNlcnZlZCkge1xuICAgICAgICAvLyBDbGVhciBzZWxlY3Rpb24gKGJlY2F1c2UgbmV4dCByb3V0ZSBjYW4gY2hhbmdlIHRoZSBjdXJyZW50IHRhYmxlIGNvbnRlbnQpXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMub25PcGVuUm93LmVtaXQocm93KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIElEIGRlZmluZWQ6IHVuYWJsZSB0byBvcGVuIGRldGFpbHNcbiAgICAgIGlmIChpc05pbChpZCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIE9wZW5pbmcgcm93IGRldGFpbHMsIGJ1dCBkYXRhIGhhcyBubyBpZCEnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciBzZWxlY3Rpb24gKGJlY2F1c2UgbmV4dCByb3V0ZSBjYW4gY2hhbmdlIHRoZSBjdXJyZW50IHRhYmxlIGNvbnRlbnQpXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuXG4gICAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlRm9yd2FyZChbJy4nLCBpZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHt9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvcGVuTmV3Um93RGV0YWlsKGV2ZW50PzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmFsbG93Um93RGV0YWlsKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5vbk5ld1Jvdy5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5vbk5ld1Jvdy5lbWl0KGV2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHNlbGVjdGlvbiAoYmVjYXVzZSBuZXh0IHJvdXRlIGNhbiBjaGFuZ2UgdGhlIGN1cnJlbnQgdGFibGUgY29udGVudClcbiAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuXG4gICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUZvcndhcmQoWycuJywgJ25ldyddLCB7XG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgcXVlcnlQYXJhbXM6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gY2FuIGJlIG92ZXJyaWRkZW4gdG8gYWRkIG1vcmUgcmVxdWlyZWQgY29sdW1uc1xuICBwcm90ZWN0ZWQgZ2V0UmVxdWlyZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiBERUZBVUxUX1JFUVVJUkVEX0NPTFVNTlM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VXNlckNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhTRVRUSU5HU19ESVNQTEFZX0NPTFVNTlMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvcnRlZENvbHVtbigpOiBNYXRTb3J0YWJsZSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGFnZVNldHRpbmdzKFNFVFRJTkdTX1NPUlRFRF9DT0xVTU4pO1xuICAgIGNvbnN0IHBhcnRzID0gZGF0YSAmJiBkYXRhLnNwbGl0KCc6Jyk7XG4gICAgaWYgKHBhcnRzICYmIHBhcnRzLmxlbmd0aCA9PT0gMiAmJiB0aGlzLmNvbHVtbnMuaW5jbHVkZXMocGFydHNbMF0pKSB7XG4gICAgICByZXR1cm4geyBpZDogcGFydHNbMF0sIHN0YXJ0OiBwYXJ0c1sxXSA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVmYXVsdFNvcnRCeSkge1xuICAgICAgcmV0dXJuIHsgaWQ6IHRoaXMuZGVmYXVsdFNvcnRCeSwgc3RhcnQ6IHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24gfHwgJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2UgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaWQ6ICdpZCcsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZSB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTZXR0aW5nczxudW1iZXI+KFNFVFRJTkdTX1BBR0VfU0laRSk7XG4gICAgcmV0dXJuIHBhZ2VTaXplIHx8IHRoaXMuZGVmYXVsdFBhZ2VTaXplO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgdXNlckNvbHVtbnMgPSB0aGlzLmdldFVzZXJDb2x1bW5zKCk7XG5cbiAgICAvLyBObyB1c2VyIG92ZXJyaWRlXG4gICAgaWYgKCF1c2VyQ29sdW1ucykge1xuICAgICAgLy8gUmV0dXJuIGRlZmF1bHQsIHdpdGhvdXQgY29sdW1ucyB0byBoaWRlXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uKSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGZpeGVkIHN0YXJ0IGNvbHVtbnNcbiAgICBjb25zdCBmaXhlZFN0YXJ0Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGMpID0+IFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gUmVtb3ZlIGVuZCBjb2x1bW5zXG4gICAgY29uc3QgZml4ZWRFbmRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoYykgPT4gUkVTRVJWRURfRU5EX0NPTFVNTlMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gUmVtb3ZlIGZpeGVkIGNvbHVtbnMgZnJvbSB1c2VyIGNvbHVtbnNcbiAgICB1c2VyQ29sdW1ucyA9IHVzZXJDb2x1bW5zLmZpbHRlcigoYykgPT4gIWZpeGVkU3RhcnRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICFmaXhlZEVuZENvbHVtbnMuaW5jbHVkZXMoYykgJiYgdGhpcy5jb2x1bW5zLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIEFkZCByZXF1aXJlZCBjb2x1bW5zIGlmIG1pc3NpbmdcbiAgICB1c2VyQ29sdW1ucy5wdXNoKFxuICAgICAgLi4udGhpcy5nZXRSZXF1aXJlZENvbHVtbnMoKS5maWx0ZXIoKGMpID0+ICFmaXhlZFN0YXJ0Q29sdW1ucy5pbmNsdWRlcyhjKSAmJiAhZml4ZWRFbmRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICF1c2VyQ29sdW1ucy5pbmNsdWRlcyhjKSlcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGZpeGVkU3RhcnRDb2x1bW5zXG4gICAgICAgIC5jb25jYXQodXNlckNvbHVtbnMpXG4gICAgICAgIC5jb25jYXQoZml4ZWRFbmRDb2x1bW5zKVxuICAgICAgICAvLyBSZW1vdmUgY29sdW1ucyB0byBoaWRlXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbXB1dGUgZGlzcGxheSBjb2x1bW5zXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVDb2x1bW5zKCkge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZ2V0RGlzcGxheUNvbHVtbnMoKTtcbiAgICBpZiAoIXRoaXMubG9hZGluZykgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlclN1YnNjcmlwdGlvbihzdWI6IFN1YnNjcmlwdGlvbikge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3ViKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YjogU3Vic2NyaXB0aW9uKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZShzdWIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyQXV0b2NvbXBsZXRlRmllbGQ8RSA9IGFueSwgRUYgPSBhbnk+KFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYXRBdXRvY29tcGxldGVGaWVsZEFkZE9wdGlvbnM8RSwgRUY+XG4gICk6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnPEUsIEVGPiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlci5hZGQoZmllbGROYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJMThuQ29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKHRoaXMuaTE4bkNvbHVtblByZWZpeCB8fCAnJykgKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGNvbHVtbk5hbWUpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVUYWJsZUlkKCkge1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU05vbkFTQ0lJTmFtZXNcbiAgICBjb25zdCBtZXRhID0gdGhpcy5jb25zdHJ1Y3RvclsnybVjbXAnXTtcbiAgICAvLyBHZXQgYSBjb21wb25lbnQgdW5pcXVlIG5hbWUgLSBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAxMTQ2ODIvaG93LXRvLWFjY2Vzcy1jb21wb25lbnRzLXVuaXF1ZS1lbmNhcHN1bGF0aW9uLWlkLWluLWFuZ3VsYXItOVxuICAgIGNvbnN0IGNvbXBvbmVudElkID0gKG1ldGEgJiYgKG1ldGEuc2VsZWN0b3JzPy5bMF0gfHwgbWV0YS5pZCkpIHx8IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICBjb25zdCBpZCA9XG4gICAgICB0aGlzLmxvY2F0aW9uXG4gICAgICAgIC5wYXRoKHRydWUpXG4gICAgICAgIC5yZXBsYWNlKC9bP10uKiQvZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9cXC9cXGQrL2csICdfaWQnKSArXG4gICAgICAnXycgK1xuICAgICAgY29tcG9uZW50SWQ7XG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBpZCA9ICcgKyBpZCk7XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZFJvd1RvVGFibGUoXG4gICAgaW5zZXJ0QXQ/OiBudW1iZXIsXG4gICAgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmc7IGVkaXRpbmc/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH1cbiAgKTogUHJvbWlzZTxUYWJsZUVsZW1lbnQ8VD4gfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBUcnkgdG8gZmluaXNoIGVkaXRlZCByb3cgZmlyc3RcbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIENhbm5vdCBhZGQgbmV3IHJvdywgYmVjYXVzZSB0aGUgcHJldmlvdXMgZWRpdGVkIHJvdyBjYW5ub3QgYmUgY29uZmlybWVkJyk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGVkaXRpbmcgPSB0aGlzLmlubGluZUVkaXRpb24gJiYgb3B0cz8uZWRpdGluZyAhPT0gZmFsc2U7IC8vIHRydWUgYnkgZGVmYXVsdCwgaWYgaW5saW5lRWRpdGlvblxuXG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5jcmVhdGVOZXcoaW5zZXJ0QXQsIHsgZWRpdGluZyB9KTtcbiAgICBpZiAoIXJvdykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmIChyb3cuZWRpdGluZykge1xuICAgICAgLy8gVXBkYXRlIGZvY3VzZWQgY29sdW1uXG4gICAgICB0aGlzLmZvY3VzRmlyc3RDb2x1bW4gPSB0cnVlO1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IG9wdHM/LmZvY3VzQ29sdW1uIHx8IHRoaXMuZmlyc3RVc2VyQ29sdW1uO1xuXG4gICAgICAvLyBFbWl0IHN0YXJ0IGVkaXRpbmcgZXZlbnRcbiAgICAgIHRoaXMuZWRpdGVkUm93ID0gcm93O1xuICAgICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvdy5lbWl0KHJvdyk7XG4gICAgfVxuXG4gICAgdGhpcy50b3RhbFJvd0NvdW50Kys7XG4gICAgdGhpcy52aXNpYmxlUm93Q291bnQrKztcblxuICAgIHRoaXMubWFya0FzRGlydHkoeyBlbWl0RXZlbnQ6IGZhbHNlIC8qbWFya0ZvckNoZWNrKCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIqLyB9KTtcblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCBmb3JtUGF0aD86IHN0cmluZywgZW1pdEluaXRpYWxWYWx1ZT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGZvcm1QYXRoID0gZm9ybVBhdGggfHwgbmFtZTtcbiAgICBlbWl0SW5pdGlhbFZhbHVlID0gZW1pdEluaXRpYWxWYWx1ZSB8fCBmYWxzZTtcbiAgICBsZXQgZGVmID0gdGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnNbbmFtZV07XG4gICAgaWYgKGRlZiAmJiAoZGVmLmZvcm1QYXRoICE9PSBmb3JtUGF0aCB8fCBkZWYuZW1pdEluaXRpYWxWYWx1ZSAhPT0gZW1pdEluaXRpYWxWYWx1ZSkpIHtcbiAgICAgIHRocm93IEVycm9yKFwiQWxyZWFkeSByZWdpc3RlciBhIGNlbGwgdmFsdWUgY2hhbmdlIGZvciB0aGlzIG5hbWUsIHdpdGggZGlmZmVyZW50ICdmb3JtUGF0aCcgb3IgJ2VtaXRJbml0aWFsVmFsdWUnLiBQbGVhc2UgdXNlIHNhbWUgYXJndW1lbnRzLlwiKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgZXhpc3RzOiByZWdpc3RlciBuZXcgZGVmaW5pdGlvblxuICAgIGlmICghZGVmKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBOZXcgbGlzdGVuZXIgeyR7bmFtZX19IGZvciB2YWx1ZSBjaGFuZ2VzIG9uIHBhdGggJHtmb3JtUGF0aH1gKTtcbiAgICAgIGRlZiA9IHtcbiAgICAgICAgc3ViamVjdDogbmV3IFN1YmplY3Q8YW55PigpLFxuICAgICAgICBzdWJzY3JpcHRpb246IG51bGwsXG4gICAgICAgIGZvcm1QYXRoLFxuICAgICAgICBlbWl0SW5pdGlhbFZhbHVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdID0gZGVmO1xuXG4gICAgICAvLyBTdGFydCB0aGUgbGlzdGVuZXIsIHdoZW4gZWRpdGluZyBzdGFydHNcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5vblN0YXJ0RWRpdGluZ1Jvdy5zdWJzY3JpYmUoKHJvdykgPT4gdGhpcy5zdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZSwgcm93KSkpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWYuc3ViamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgc2hvdzogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKSAhPT0gc2hvdykge1xuICAgICAgaWYgKCFzaG93KSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZXNDb2x1bW5zLnB1c2goY29sdW1uTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZXhjbHVkZXNDb2x1bW5zLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBjb2x1bW5OYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHRoaXMuZXhjbHVkZXNDb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlY29tcHV0ZSBkaXNwbGF5IGNvbHVtbnNcbiAgICAgIGlmICh0aGlzLmRpc3BsYXllZENvbHVtbnMgJiYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNob3dDb2x1bW4oY29sdW1uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRlY3RDaGFuZ2VzKCkge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFza0RlbGV0ZUNvbmZpcm1hdGlvbihldmVudD86IEV2ZW50LCByb3dzPzogVGFibGVFbGVtZW50PFQ+W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy51bmRvYWJsZURlbGV0aW9uKSB7XG4gICAgICAvLyBTcGVjaWFsIG1lc3NhZ2UsIGZvciB1bmRvYWJsZSBkZWxldGlvblxuICAgICAgcmV0dXJuIEFsZXJ0cy5hc2tDb25maXJtYXRpb24ocm93cz8ubGVuZ3RoID09PSAxID8gJ0NPTkZJUk0uREVMRVRFX1JPVycgOiAnQ09ORklSTS5ERUxFVEVfUk9XUycsIHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgZXZlbnQpO1xuICAgIH1cbiAgICAvLyBJbW1lZGlhdGUgZGVsZXRpb24gYWN0aW9uXG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCB0cnVlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXNrQ2FuY2VsQ29uZmlybWF0aW9uKGV2ZW50PzogRXZlbnQsIHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBBbGVydHMuYXNrQ29uZmlybWF0aW9uKHJvd3M/Lmxlbmd0aCA9PT0gMSA/ICdDT05GSVJNLkNBTkNFTF9ST1cnIDogJ0NPTkZJUk0uQ0FOQ0VMX1JPV1MnLCB0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhc2tSZXN0b3JlQ29uZmlybWF0aW9uKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQWxlcnRzLmFza0FjdGlvbkNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGZhbHNlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMudG9hc3RDb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHRvYXN0Q29udHJvbGxlciBpbiBjb21wb25lbnQncyBjb25zdHJ1Y3RvclwiKTtcbiAgICByZXR1cm4gVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEVycm9yKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuc2V0RXJyb3IodW5kZWZpbmVkLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSb3dFcnJvcihyb3c/OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiBGb3JtRXJyb3JUcmFuc2xhdGVPcHRpb25zKTogc3RyaW5nIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXRoaXMuZm9ybUVycm9yQWRhcHRlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmZvcm1FcnJvckFkYXB0ZXIudHJhbnNsYXRlRm9ybUVycm9ycyhyb3cudmFsaWRhdG9yLCB7XG4gICAgICAuLi50aGlzLmVycm9yVHJhbnNsYXRlT3B0aW9ucyxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RXJyb3IodmFsdWU6IHN0cmluZywgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuZXJyb3JTdWJqZWN0LnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgZGF0YSBlcXVhbGl0eSAoZGVmYXVsdCBieSBpZCwgdXNpbmcgRW50aXR5VXRpbHMuZXF1YWxzKCkpXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIHRvIGFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gZDFcbiAgICogQHBhcmFtIGQyXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBlcXVhbHMoZDE6IFQsIGQyOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVudGl0eVV0aWxzLmVxdWFscyhkMSwgZDIsICdpZCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtSb3dBc0RpcnR5KHJvdz86IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RVZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKHJvdykgcm93LnZhbGlkYXRvcj8ubWFya0FzRGlydHkob3B0cyk7XG4gICAgdGhpcy5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYWdlU2V0dGluZ3M8VCA9IGFueT4ocHJvcGVydHlOYW1lPzogc3RyaW5nKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuZ2V0UGFnZVNldHRpbmdzKHRoaXMuc2V0dGluZ3NJZCwgcHJvcGVydHlOYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlUGFnZVNldHRpbmdzKHZhbHVlOiBhbnksIHByb3BlcnR5TmFtZT86IHN0cmluZywgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5zYXZlUGFnZVNldHRpbmcodGhpcy5zZXR0aW5nc0lkLCB2YWx1ZSwgcHJvcGVydHlOYW1lLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0UmVmcmVzaCh2YWx1ZT86IGFueSkge1xuICAgIC8vIEVtaXQgb25SZWZyZXNoIGlmIG5vdCBjbG9zZWQgKGNhbiBoYXBwZW4gaWYgY29tcG9uZW50IGlzIGRlc3Ryb3llZCB0byBlYXJseSlcbiAgICBpZiAoISF0aGlzLm9uUmVmcmVzaCAmJiAhdGhpcy5vblJlZnJlc2guY2xvc2VkKSB7XG4gICAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgcGVybWFuZW50IHNlbGVjdGlvbiBtb2RlbFxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5pdFBlcm1hbmVudFNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24pIHRocm93IG5ldyBFcnJvcignaW5pdFBlcm1hbmVudFNlbGVjdGlvbigpIGFscmVhZHkgY2FsbGVkIScpO1xuXG4gICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VD4odHJ1ZSwgW10pO1xuXG4gICAgLy8gTGlzdGVuIHNvcnQgY2hhbmdlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25Tb3J0LnN1YnNjcmliZSgoKSA9PiAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkID0gdHJ1ZSkpIC8vIHByZXZlbnQgc2VsZWN0aW9uIGNoYW5nZSBvbiBzb3J0XG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBkYXRhc291cmNlIHVwZGF0ZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uucm93c1N1YmplY3RcbiAgICAgICAgLy8gcmVzdG9yZSB0aGUgJ2FkZGluZycgc2VsZWN0aW9uIChmb3IgZXhhbXBsZSBhZnRlciBhIHBhZ2Ugb3Igc29ydCBjaGFuZ2UpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwZXJtYW5lbnRTZWxlY3Rpb25JZHMgPSAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pLm1hcChFbnRpdHlVdGlscy5nZXRJZCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oLi4ucm93cy5maWx0ZXIoKHJvdykgPT4gcGVybWFuZW50U2VsZWN0aW9uSWRzLmluY2x1ZGVzKEFwcFRhYmxlVXRpbHMuZ2V0RW50aXR5SWQocm93KSkpKTtcbiAgICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2hhbmdlZC5waXBlKGZpbHRlcigoKSA9PiAhdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkKSkuc3Vic2NyaWJlKChzZWxlY3Rpb25DaGFuZ2UpID0+IHtcbiAgICAgICAgLy8gYWRkIHRvIHNlbGVjdGlvblxuICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlLmFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNldFNlbGVjdGlvbihcbiAgICAgICAgICAgIC4uLih0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZWxlY3RlZCB8fCBbXSlcbiAgICAgICAgICAgICAgLy8gQWRkIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAgICAuY29uY2F0KC4uLkFwcFRhYmxlVXRpbHMuZ2V0RW50aXRpZXMoc2VsZWN0aW9uQ2hhbmdlLmFkZGVkKS5maWx0ZXIoRW50aXR5VXRpbHMuaGFzSWQpKVxuICAgICAgICAgICAgICAvLyBBdm9pZCBkdXBsaWNhdGVkIGVudGl0aWVzIChNYW50aXMgIzU1MzUxKVxuICAgICAgICAgICAgICAuZmlsdGVyKEVudGl0eVV0aWxzLmFycmF5RGlzdGluY3RGaWx0ZXJGbilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIHNlbGVjdGlvblxuICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlLnJlbW92ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZElkcyA9IEFwcFRhYmxlVXRpbHMuZ2V0RW50aXR5SWRzKHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkKTtcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oXG4gICAgICAgICAgICAuLi4odGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pLmZpbHRlcigoZW50aXR5KSA9PiBFbnRpdHlVdGlscy5oYXNJZChlbnRpdHkpICYmICFyZW1vdmVkSWRzLmluY2x1ZGVzKGVudGl0eS5pZCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIGxpc3RlblNvcnRBbmRQYWdpbmF0aW9uRXZlbnRzKCkge1xuICAgIGlmICghdGhpcy50YWJsZSkge1xuICAgICAgLy8gREVCVUcgb25seSAtLSBhbGVydCB1c2VyIHRoYXQgdGFibGUgbm90IGZvdW5kIGluIHRlbXBsYXRlXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAhdGhpcy50YWJsZSAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgPG1hdC10YWJsZT4gaW4gdGhlIEhUTUwgdGVtcGxhdGUgKGFmdGVyIHdhaXRpbmcgNTAwbXMpISBDb21wb25lbnQ6ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApLFxuICAgICAgICAgIDUwMFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIHN1cmUgdG8gd2FpdCB0aGUgdGFibGVcbiAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gISF0aGlzLnRhYmxlLCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QsIHN0b3BFcnJvcjogZmFsc2UgLyphdm9pZCBlcnJvciB3aGVuIGRlc3RvcnlpbmcgdGhlIHRhYmxlKi8gfSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIG1lcmdlKFxuICAgICAgICAvLyBMaXN0ZW4gc29ydCBldmVudHNcbiAgICAgICAgKHRoaXMuc29ydCAmJlxuICAgICAgICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCksXG4gICAgICAgICAgICBtZXJnZU1hcChhc3luYyAoKSA9PiB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ3NvcnQnKSksXG4gICAgICAgICAgICBmaWx0ZXIoKHJlcykgPT4gcmVzID09PSB0cnVlKSxcbiAgICAgICAgICAgIC8vIFNhdmUgc29ydCBpbiBzZXR0aW5nc1xuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBbdGhpcy5zb3J0LmFjdGl2ZSwgdGhpcy5zb3J0LmRpcmVjdGlvbiB8fCAnYXNjJ10uam9pbignOicpO1xuICAgICAgICAgICAgICB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModmFsdWUsIFNFVFRJTkdTX1NPUlRFRF9DT0xVTU4pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApKSB8fFxuICAgICAgICAgIEVNUFRZLFxuXG4gICAgICAgIC8vIExpc3RlbiBwYWdpbmF0b3IgZXZlbnRzXG4gICAgICAgICh0aGlzLnBhZ2luYXRvciAmJlxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2UucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKChfKSA9PiB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ3NvcnQnKSksXG4gICAgICAgICAgICBmaWx0ZXIoKHNhdmVkKSA9PiBzYXZlZCA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAvLyBTYXZlIHBhZ2Ugc2l6ZSBpbiBzZXR0aW5nc1xuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2F2ZVBhZ2VTZXR0aW5ncyh0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSwgU0VUVElOR1NfUEFHRV9TSVpFKSlcbiAgICAgICAgICApKSB8fFxuICAgICAgICAgIEVNUFRZXG4gICAgICApXG4gICAgICAgIC8vIFJlZnJlc2ggb24gYW55IHNvcnQgb3IgcGFnaW5hdG9yIGV2ZW50c1xuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMub25Tb3J0LmVtaXQodmFsdWUpO1xuICAgICAgICAgIHRoaXMuZW1pdFJlZnJlc2godmFsdWUpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBzb3J0IG9yZGVyLCByZXNldCBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlLlxuICAgIGlmICh0aGlzLnNvcnQgJiYgdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5zb3J0LnNvcnRDaGFuZ2UucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCkpLnN1YnNjcmliZSgoKSA9PiAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMCkpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVkaXRSb3dCeUlkKGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgaWQ6IG51bWJlciwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmcgfSkge1xuICAgIGlmIChpZCA8IDApIHJldHVybjtcbiAgICBpZiAoaWQgPj0gdGhpcy52aXNpYmxlUm93Q291bnQpIHtcbiAgICAgIHRoaXMuYWRkUm93KGV2ZW50LCB1bmRlZmluZWQsIHsgLi4ub3B0cywgZWRpdGluZzogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nKHZhbHVlOiBib29sZWFuLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMubG9hZGluZ1N1YmplY3QuY2xvc2VkICYmIHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodmFsdWUpO1xuXG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVOZXdSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIC8vIE1ha2Ugc3VyZSByb3cgd2lsbCBiZSBjYW5jZWxsZWQsIGFuZCBOT1QgZGVsZXRlZFxuICAgIGlmIChyb3cuaWQgIT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ1JvdyBtdXN0IGhhdmUgaWQgPSAtMScpO1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IHJvd1xuICAgIHRoaXMuX2RhdGFTb3VyY2UuY2FuY2VsT3JEZWxldGUocm93KTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIHRoaXMub25DYW5jZWxPckRlbGV0ZVJvdy5uZXh0KHJvdyk7XG4gICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgdGhpcy52aXNpYmxlUm93Q291bnQtLTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlRXhpc3RpbmdSb3coZXZlbnQ6IEV2ZW50IHwgbnVsbCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KSB7XG4gICAgLy8gTWFrZSBzdXJlIHJvdyB3aWxsIGJlIGNhbmNlbGxlZCwgYW5kIE5PVCBkZWxldGVkXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignUm93IG11c3QgaGF2ZSBhbiBpZCcpO1xuXG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gMDsgLy8gU0tpcFxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5kZWxldGVSb3cobnVsbCwgcm93LCBvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuOyBrZWVwRWRpdGluZz86IGJvb2xlYW4gfSkge1xuICAgIC8vIE1ha2Ugc3VyZSByb3cgd2lsbCBiZSBjYW5jZWxsZWQsIGFuZCBOT1QgZGVsZXRlZFxuICAgIGlmIChyb3cuaWQgPT09IC0xIHx8ICFyb3cuZWRpdGluZykgdGhyb3cgbmV3IEVycm9yKCdSb3cgY2Fubm90IGJlIGNhbmNlbGluZywgYnV0IG9ubHkgZGVsZXRpbmcnKTtcblxuICAgIGNvbnN0IGNvbmZpcm1lZCA9ICFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlO1xuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uLCBpZiBjYW5jZWxcbiAgICBpZiAoIWNvbmZpcm1lZCAmJiByb3cuZGlydHkgJiYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCB8fCB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy5vYnNlcnZlZCkpIHtcbiAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY2FuQ2FuY2VsUm93cyhbcm93XSwgb3B0cykudGhlbigoY29uZmlybSkgPT4ge1xuICAgICAgICAvLyBJZiBjb25maXJtZWQsIGxvb3BcbiAgICAgICAgaWYgKGNvbmZpcm0pIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgeyBpbnRlcmFjdGl2ZTogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBrZWVwRWRpdGluZyA9IHJvdy5lZGl0aW5nICYmICghb3B0cyB8fCBvcHRzLmtlZXBFZGl0aW5nICE9PSBmYWxzZSk7XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IHJvd1xuICAgIHRoaXMuX2RhdGFTb3VyY2UuY2FuY2VsT3JEZWxldGUocm93KTtcbiAgICB0aGlzLm9uQ2FuY2VsT3JEZWxldGVSb3cubmV4dChyb3cpO1xuXG4gICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmVcbiAgICB0aGlzLmNoZWNrSWZSb3dQcmlzdGluZShyb3cpO1xuXG4gICAgLy8gUmVzdG9yZSBlZGl0aW5nIHN0YXRlXG4gICAgaWYgKGtlZXBFZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRSb3codW5kZWZpbmVkLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlJvd1ByaXN0aW5lKHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBvbmx5U2VsZj86IGJvb2xlYW4gfSkge1xuICAgIC8vIE1hcmsgcm93IGFzIHByaXN0aW5lXG4gICAgY29uc3QgbWFya1Jvd0FzUHJpc3RpbmUgPSB0aGlzLmRhdGFTb3VyY2U/LmNvbmZpZy5yZXN0b3JlT3JpZ2luYWxEYXRhT25DYW5jZWwgPT09IHRydWU7XG4gICAgaWYgKG1hcmtSb3dBc1ByaXN0aW5lKSB7XG4gICAgICByb3cudmFsaWRhdG9yPy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0YWJsZSBpcyBub3cgcHJpc3RpbmVcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLm9ubHlTZWxmICE9PSB0cnVlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJZlByaXN0aW5lKG9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlByaXN0aW5lKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5kaXJ0eSkgcmV0dXJuOyAvLyBBbHJlYWR5IHByaXN0aW5lXG5cbiAgICBjb25zdCByb3dzID0gdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3dzKCk7XG4gICAgY29uc3QgcHJpc3RpbmUgPSAocm93cyB8fCBbXSkuZmluZEluZGV4KChyb3cpID0+IHJvdy5kaXJ0eSkgPT09IC0xO1xuICAgIGlmIChwcmlzdGluZSkgdGhpcy5tYXJrQXNQcmlzdGluZShvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXIoZmlsdGVyOiBGLCBvcHRzOiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIEFwcGx5aW5nIGZpbHRlcicsIGZpbHRlcik7XG4gICAgdGhpcy5fZmlsdGVyID0gZmlsdGVyO1xuICAgIGlmIChvcHRzICYmIG9wdHMuZW1pdEV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID4gMCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0UmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRGF0YVNvdXJjZUxvYWRpbmcoZGF0YVNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKCFkYXRhU291cmNlKSB0aHJvdyBuZXcgRXJyb3IoJ1t0YWJsZV0gZGF0YVNvdXJjZSBub3Qgc2V0ICEnKTtcblxuICAgIC8vIENsZWFuaW5nIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBvbiBkYXRhc291cmNlXG4gICAgaWYgKGlzTm90TmlsKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTWFueSBjYWxsIHRvIGxpc3RlbkRhdGFzb3VyY2UoKTogQ2xlYW5pbmcgcHJldmlvdXMgc3Vic2NyaXB0aW9ucy4uLicpO1xuICAgICAgdGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMudW5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgLy8gUHJvcGFnZSBsb2FkaW5nIHRvIHRhYmxlXG4gICAgdGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24gPSB0aGlzLl9kYXRhU291cmNlLmxvYWRpbmdTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGlzTm90TmlsKSwgLy8gZmlsdGVyIG91dCAndW5kZWZpbmVkJ1xuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXG4gICAgICAgIC8vIElmIGNoYW5nZWQgdG8gVHJ1ZTogcHJvcGFnYXRlIGFzIHNvb24gYXMgcG9zc2libGVcbiAgICAgICAgdGFwKChsb2FkaW5nKSA9PiBsb2FkaW5nICYmIHRoaXMuc2V0TG9hZGluZyh0cnVlKSksXG5cbiAgICAgICAgLy8gSWYgY2hhbmdlZCB0byBGYWxzZTogd2FpdCAyNTBtcyBiZWZvcmUgcHJvcGFnYXRlICh0byBtYWtlIHN1cmUgdGhlIHNwaW5uZXIgaGFzIGJlZW4gZGlzcGxheWVkKVxuICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgdGFwKChsb2FkaW5nKSA9PiAhbG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcoZmFsc2UpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFt0YWJsZV0gTGlzdGVuZXIgd2l0aCBuYW1lIHske25hbWV9IG5vdCByZWdpc3RlcmVkISBQbGVhc2UgY2FsbCByZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMoKSBiZWZvcmVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU3RvcCBwcmV2aW91cyBzdWJzY3JpcHRpb25cbiAgICBpZiAoZGVmLnN1YnNjcmlwdGlvbikge1xuICAgICAgZGVmLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgZGVmLnN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIFN0YXJ0IHZhbHVlcyBjaGFuZ2VzIG9uIHJvdyBwYXRoIHske2RlZi5mb3JtUGF0aH19YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbCA9IGdldENvbnRyb2xGcm9tUGF0aChyb3cudmFsaWRhdG9yLCBkZWYuZm9ybVBhdGgpO1xuXG4gICAgLy8gRW1pdCB0aGUgYWN0dWFsIHZhbHVlXG4gICAgaWYgKGRlZi5lbWl0SW5pdGlhbFZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgZGVmLnN1YmplY3QubmV4dChjb250cm9sPy52YWx1ZSA/PyBudWxsKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLndhcm4oYFt0YWJsZV0gQ291bGQgbm90IGxpc3RlbiBjZWxsIGNoYW5nZXM6IG5vIHZhbGlkYXRvciBvciBpbnZhbGlkIGZvcm0gcGF0aCB7JHtkZWYuZm9ybVBhdGh9fWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gdmFsdWUgY2hhbmdlcywgYW5kIHJlZGlyZWN0IHRvIGV2ZW50IGVtaXR0ZXJcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBkb24ndCBlbWl0IGlmIGNvbnRyb2wgaXMgZGlzYWJsZWRcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiBkZWYuc3ViamVjdC5uZXh0KHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ2VsbFZhbHVlQ2hhbmdlcyhuYW1lOiBzdHJpbmcsIGRlc3Ryb3k/OiBib29sZWFuKSB7XG4gICAgY29uc3QgZGVmID0gdGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnNbbmFtZV07XG4gICAgaWYgKCFkZWYpIHJldHVybjtcbiAgICBpZiAoZGVmLnN1YnNjcmlwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gU3RvcCB2YWx1ZSBjaGFuZ2VzIG9uIHJvdyBwYXRoIHsnICsgZGVmLmZvcm1QYXRoICsgJ30nKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH1cbiAgICBpZiAoZGVzdHJveSAmJiBkZWYuc3ViamVjdCkge1xuICAgICAgZGVmLnN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgIGRlZi5zdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|