igniteui-angular 14.1.1 → 14.2.0-alpha.2
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/esm2020/lib/core/setImmediate.mjs +1 -1
- package/esm2020/lib/core/utils.mjs +2 -2
- package/esm2020/lib/grids/columns/column-group.component.mjs +1 -1
- package/esm2020/lib/grids/columns/column.component.mjs +1 -1
- package/esm2020/lib/grids/columns/templates.directive.mjs +29 -1
- package/esm2020/lib/grids/common/grid.interface.mjs +1 -1
- package/esm2020/lib/grids/filtering/base/grid-filtering-cell.component.mjs +2 -2
- package/esm2020/lib/grids/filtering/excel-style/excel-style-search.component.mjs +5 -1
- package/esm2020/lib/grids/grid/expandable-cell.component.mjs +3 -3
- package/esm2020/lib/grids/grid/grid.component.mjs +1 -1
- package/esm2020/lib/grids/grid/grid.directives.mjs +41 -1
- package/esm2020/lib/grids/grid-base.directive.mjs +1 -1
- package/esm2020/lib/grids/grid-public-row.mjs +2 -2
- package/esm2020/lib/grids/grid.rowEdit.directive.mjs +17 -1
- package/esm2020/lib/grids/headers/grid-header-row.component.mjs +3 -3
- package/esm2020/lib/grids/pivot-grid/pivot-grid.component.mjs +1 -1
- package/esm2020/lib/grids/pivot-grid/pivot-grid.directives.mjs +5 -1
- package/esm2020/lib/grids/pivot-grid/pivot-grid.interface.mjs +1 -1
- package/esm2020/lib/grids/row-drag.directive.mjs +9 -1
- package/esm2020/lib/grids/row.directive.mjs +2 -2
- package/esm2020/lib/grids/selection/row-selectors.mjs +13 -1
- package/esm2020/lib/grids/toolbar/common.mjs +5 -1
- package/esm2020/lib/services/excel/excel-exporter.mjs +13 -13
- package/esm2020/lib/services/excel/excel-files.mjs +14 -13
- package/esm2020/lib/services/excel/excel-interfaces.mjs +1 -1
- package/fesm2015/igniteui-angular.mjs +146 -30
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +146 -30
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/core/setImmediate.d.ts +8 -3
- package/lib/grids/columns/column-group.component.d.ts +2 -2
- package/lib/grids/columns/column.component.d.ts +19 -19
- package/lib/grids/columns/templates.directive.d.ts +22 -14
- package/lib/grids/common/grid.interface.d.ts +97 -13
- package/lib/grids/filtering/base/grid-filtering-cell.component.d.ts +1 -0
- package/lib/grids/filtering/excel-style/excel-style-search.component.d.ts +3 -2
- package/lib/grids/grid/grid.component.d.ts +8 -11
- package/lib/grids/grid/grid.directives.d.ts +13 -2
- package/lib/grids/grid-base.directive.d.ts +24 -24
- package/lib/grids/grid.rowEdit.directive.d.ts +5 -1
- package/lib/grids/headers/grid-header-row.component.d.ts +3 -11
- package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +3 -3
- package/lib/grids/pivot-grid/pivot-grid.component.d.ts +3 -3
- package/lib/grids/pivot-grid/pivot-grid.directives.d.ts +4 -2
- package/lib/grids/pivot-grid/pivot-grid.interface.d.ts +3 -0
- package/lib/grids/row-drag.directive.d.ts +5 -2
- package/lib/grids/selection/row-selectors.d.ts +10 -6
- package/lib/grids/toolbar/common.d.ts +1 -0
- package/lib/services/excel/excel-exporter.d.ts +2 -5
- package/lib/services/excel/excel-files.d.ts +12 -13
- package/lib/services/excel/excel-interfaces.d.ts +1 -2
- package/package.json +3 -3
- package/schematics/ng-add/index.spec.js +1 -1
- package/schematics/tsconfig.tsbuildinfo +1 -1
- package/schematics/utils/dependency-handler.js +2 -2
|
@@ -35,6 +35,10 @@ export class IgxExcelStyleLoadingValuesTemplateDirective {
|
|
|
35
35
|
constructor(template) {
|
|
36
36
|
this.template = template;
|
|
37
37
|
}
|
|
38
|
+
static ngTemplateContextGuard(_dir, ctx) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
;
|
|
38
42
|
}
|
|
39
43
|
IgxExcelStyleLoadingValuesTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: IgxExcelStyleLoadingValuesTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
40
44
|
IgxExcelStyleLoadingValuesTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.1", type: IgxExcelStyleLoadingValuesTemplateDirective, selector: "[igxExcelStyleLoading]", ngImport: i0 });
|
|
@@ -588,4 +592,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
|
|
|
588
592
|
type: ViewChild,
|
|
589
593
|
args: ['defaultExcelStyleLoadingValuesTemplate', { read: TemplateRef }]
|
|
590
594
|
}] } });
|
|
591
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBRVQsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUMvRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seURBQXlELENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUNILDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUM5RSx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSx1QkFBdUIsRUFDbEYsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBNEIsb0JB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QUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU90RCxJQUFJO3NCQURWLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT3JELGlCQUFpQjtzQkFEdkIsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU9yRSwwQkFBMEI7c0JBRGhDLFNBQVM7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPL0UsSUFBSTtzQkFEVixTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU9uRCxPQUFPO3NCQURoQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPcEMsc0NBQXNDO3NCQUQvQyxTQUFTO3VCQUFDLHdDQUF3QyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgVmlld0NoaWxkLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgSG9zdEJpbmRpbmdcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvaW5wdXQvaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IElneEZvck9mRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9mb3Itb2YvZm9yX29mLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgRmlsdGVyaW5nTG9naWMgfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHtcbiAgICBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZCwgSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZCwgSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQsXG4gICAgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZCwgSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLCBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZFxufSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJZ3hMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vbGlzdC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElDaGFuZ2VDaGVja2JveEV2ZW50QXJncywgSWd4Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgY2xvbmVIaWVyYXJjaGljYWxBcnJheSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBCYXNlRmlsdGVyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWZpbHRlcmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXhwcmVzc2lvblVJLCBGaWx0ZXJMaXN0SXRlbSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IElneFRyZWVDb21wb25lbnQsIElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vdHJlZS9wdWJsaWNfYXBpJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4RXhjZWxTdHlsZUxvYWRpbmddJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxufVxuXG4vKipcbiAqIEEgY29tcG9uZW50IHVzZWQgZm9yIHByZXNlbnRpbmcgRXhjZWwgc3R5bGUgc2VhcmNoIFVJLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1leGNlbC1zdHlsZS1zZWFyY2gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9leGNlbC1zdHlsZS1zZWFyY2guY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneEV4Y2VsU3R5bGVTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGZpbHRlck9wdGltaXphdGlvblRocmVzaG9sZCA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4Y2VsLWZpbHRlcl9fbWVudS1tYWluJylcbiAgICBwdWJsaWMgZGVmYXVsdENsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdsaXN0JywgeyByZWFkOiBJZ3hMaXN0Q29tcG9uZW50LCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGxpc3Q6IElneExpc3RDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdEFsbENoZWNrYm94JywgeyByZWFkOiBJZ3hDaGVja2JveENvbXBvbmVudCwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBzZWxlY3RBbGxDaGVja2JveDogSWd4Q2hlY2tib3hDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgICBAVmlld0NoaWxkKCdhZGRUb0N1cnJlbnRGaWx0ZXJDaGVja2JveCcsIHsgcmVhZDogSWd4Q2hlY2tib3hDb21wb25lbnQsIHN0YXRpYzogZmFsc2UgfSlcbiAgICAgcHVibGljIGFkZFRvQ3VycmVudEZpbHRlckNoZWNrYm94OiBJZ3hDaGVja2JveENvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgIEBWaWV3Q2hpbGQoJ3RyZWUnLCB7IHJlYWQ6IElneFRyZWVDb21wb25lbnQsIHN0YXRpYzogZmFsc2UgfSlcbiAgICAgcHVibGljIHRyZWU6IElneFRyZWVDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4Rm9yT2ZEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIHZpcnREaXI6IElneEZvck9mRGlyZWN0aXZlPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0RXhjZWxTdHlsZUxvYWRpbmdWYWx1ZXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RBbGxJdGVtKCk6IEZpbHRlckxpc3RJdGVtIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3RBbGxJdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RBbGxJdGVtID0ge1xuICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRmlsdGVyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzU3BlY2lhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc0JsYW5rczogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZXNmLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX3NlbGVjdF9hbGwsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZXNmLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX3NlbGVjdF9hbGxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdEFsbEl0ZW0gPSBzZWxlY3RBbGxJdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdEFsbEl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFkZFRvQ3VycmVudEZpbHRlckl0ZW0oKTogRmlsdGVyTGlzdEl0ZW0ge1xuICAgICAgICBpZiAoIXRoaXMuX2FkZFRvQ3VycmVudEZpbHRlckl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZFRvQ3VycmVudEZpbHRlckl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNGaWx0ZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNTcGVjaWFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzQmxhbmtzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfYWRkX3RvX2ZpbHRlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfYWRkX3RvX2ZpbHRlclxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5fYWRkVG9DdXJyZW50RmlsdGVySXRlbSA9IGFkZFRvQ3VycmVudEZpbHRlckl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkVG9DdXJyZW50RmlsdGVySXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNMb2FkaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2FkaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNldCBpc0xvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gdmFsdWU7XG4gICAgICAgIGlmICghKHRoaXMuY2RyIGFzIGFueSkuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWFyY2hWYWx1ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzcGxheWVkTGlzdERhdGE6IEZpbHRlckxpc3RJdGVtW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWx1ZXNMb2FkaW5nVGVtcGxhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmVzZi5ncmlkPy5leGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lc2YuZ3JpZC5leGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEV4Y2VsU3R5bGVMb2FkaW5nVmFsdWVzVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0xvYWRpbmc7XG4gICAgcHJpdmF0ZSBfYWRkVG9DdXJyZW50RmlsdGVySXRlbTogRmlsdGVyTGlzdEl0ZW07XG4gICAgcHJpdmF0ZSBfc2VsZWN0QWxsSXRlbTogRmlsdGVyTGlzdEl0ZW07XG4gICAgcHJpdmF0ZSBfaGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtczogRmlsdGVyTGlzdEl0ZW1bXTtcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgZXNmOiBCYXNlRmlsdGVyaW5nQ29tcG9uZW50LCBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCkge1xuICAgICAgICBlc2YubG9hZGluZ1N0YXJ0LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgZXNmLmxvYWRpbmdFbmQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTaXplKCk7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgZXNmLmluaXRpYWxpemVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hTaXplKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVzZi5jb2x1bW5DaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZpcnREaXI/LnJlc2V0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXNmLmxpc3REYXRhTG9hZGVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0QWxsSXRlbSA9IHRoaXMuZXNmLmxpc3REYXRhWzBdO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNIaWVyYXJjaGljYWwoKSAmJiB0aGlzLmVzZi5saXN0RGF0YVswXS5pc1NwZWNpYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVzZi5saXN0RGF0YS5zcGxpY2UoMCwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdERhdGEoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hTaXplKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVmcmVzaFNpemUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVmcmVzaFNpemUgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnZpcnREaXIpIHtcbiAgICAgICAgICAgIHRoaXMudmlydERpci5pZ3hGb3JDb250YWluZXJTaXplID0gdGhpcy5jb250YWluZXJTaXplO1xuICAgICAgICAgICAgdGhpcy52aXJ0RGlyLmlneEZvckl0ZW1TaXplID0gdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIHRoaXMudmlydERpci5yZWNhbGNVcGRhdGVTaXplcygpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJJbnB1dCgpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsdGVyTGlzdERhdGEoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoZWNrYm94Q2hhbmdlKGV2ZW50QXJnczogSUNoYW5nZUNoZWNrYm94RXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLmRpc3BsYXllZExpc3REYXRhLmluZGV4T2YoZXZlbnRBcmdzLmNoZWNrYm94LnZhbHVlKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0QWxsQnRuID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YVswXTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSB0aGlzLmFkZFRvQ3VycmVudEZpbHRlckl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50LmlzU2VsZWN0ZWQgPSBldmVudEFyZ3MuY2hlY2tlZDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZlbnRBcmdzLmNoZWNrYm94LnZhbHVlLmlzU2VsZWN0ZWQgPSBldmVudEFyZ3MuY2hlY2tlZDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4VG9TdGFydFNsaWNpbmcgPSB0aGlzLmRpc3BsYXllZExpc3REYXRhLmluZGV4T2YodGhpcy5hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtKSA+IC0xID8gMiA6IDE7XG5cbiAgICAgICAgICAgIGNvbnN0IHNsaWNlZEFycmF5ID1cbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXllZExpc3REYXRhLnNsaWNlKGluZGV4VG9TdGFydFNsaWNpbmcsIHRoaXMuZGlzcGxheWVkTGlzdERhdGEubGVuZ3RoKTtcblxuICAgICAgICAgICAgaWYgKCFzbGljZWRBcnJheS5maW5kKGVsID0+IGVsLmlzU2VsZWN0ZWQgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc2xpY2VkQXJyYXkuZmluZChlbCA9PiBlbC5pc1NlbGVjdGVkID09PSB0cnVlKSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV2ZW50QXJncy5jaGVja2JveC5uYXRpdmVDaGVja2JveC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblNlbGVjdEFsbENoZWNrYm94Q2hhbmdlKGV2ZW50QXJnczogSUNoYW5nZUNoZWNrYm94RXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdEFsbEl0ZW0uaXNTZWxlY3RlZCA9IGV2ZW50QXJncy5jaGVja2VkO1xuICAgICAgICB0aGlzLl9zZWxlY3RBbGxJdGVtLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdHJlZU5vZGVzID0gdGhpcy50cmVlLm5vZGVzO1xuICAgICAgICB0cmVlTm9kZXMuZm9yRWFjaChub2RlID0+IChub2RlLmRhdGEgYXMgRmlsdGVyTGlzdEl0ZW0pLmlzU2VsZWN0ZWQgPSBldmVudEFyZ3MuY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICAgcHVibGljIG9uTm9kZVNlbGVjdGlvbkNoYW5nZShldmVudEFyZ3M6IElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50KSB7XG4gICAgICAgIGV2ZW50QXJncy5hZGRlZC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgKG5vZGUuZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbSkuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBldmVudEFyZ3MucmVtb3ZlZC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgKG5vZGUuZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbSkuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9oaWVyYXJjaGljYWxTZWxlY3RlZEl0ZW1zID0gZXZlbnRBcmdzLm5ld1NlbGVjdGlvbi5tYXAoaXRlbSA9PiBpdGVtLmRhdGEgYXMgRmlsdGVyTGlzdEl0ZW0pO1xuICAgICAgICBjb25zdCBzZWxlY3RBbGxCdG4gPSB0aGlzLnNlbGVjdEFsbEl0ZW07XG4gICAgICAgIGlmICh0aGlzLl9oaWVyYXJjaGljYWxTZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IHRoaXMudHJlZS5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGl0ZW1TaXplKCkge1xuICAgICAgICBsZXQgaXRlbVNpemUgPSAnNDBweCc7XG4gICAgICAgIHN3aXRjaCAodGhpcy5lc2YuZGlzcGxheURlbnNpdHkpIHtcbiAgICAgICAgICAgIGNhc2UgRGlzcGxheURlbnNpdHkuY29zeTogaXRlbVNpemUgPSAnMzJweCc7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0OiBpdGVtU2l6ZSA9ICcyNHB4JzsgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbVNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRhaW5lclNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLmVzZi5saXN0RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3Q/LmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHRSBOb3YgMXN0LCAyMDIxICMxMDM1NSBSZXR1cm4gYSBudW1lcmljIHZhbHVlLCBzbyB0aGUgY2h1bmsgc2l6ZSBpcyBjYWxjdWxhdGVkIHByb3Blcmx5LlxuICAgICAgICAvLyBJZiB3ZSBza2lwIHRoaXMgYnJhbmNoLCBvbiBhcHBseWluZyB0aGUgZmlsdGVyIHRoZSBfY2FsY3VsYXRlQ2h1bmtTaXplKCkgbWV0aG9kIG9mZiB0aGUgRm9yT2ZEaXJlY3RpdmUgcmVjZWl2ZXNcbiAgICAgICAgLy8gYW4gaWd4Rm9yQ29udGFpbmVyU2l6ZSA9IHVuZGVmaW5lZCwgdGh1cyBhc3NpZ25zIHRoZSBjaHVua1NpemUgdG8gdGhlIGlneEZvck9mLmxlbmd0aCB3aGljaCBsZWFkcyB0byBwZXJmb3JtYW5jZSBpc3N1ZXMuXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBhcHBseUJ1dHRvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX3NlbGVjdEFsbEl0ZW0gJiYgIXRoaXMuX3NlbGVjdEFsbEl0ZW0uaXNTZWxlY3RlZCAmJiAhdGhpcy5fc2VsZWN0QWxsSXRlbS5pbmRldGVybWluYXRlKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLmRpc3BsYXllZExpc3REYXRhICYmIHRoaXMuZGlzcGxheWVkTGlzdERhdGEubGVuZ3RoID09PSAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5FTlRFUjpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuRVNDQVBFOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmaWx0ZXJMaXN0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXNmLmNvbHVtbj8uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXIgfHxcbiAgICAgICAgICAgIHRoaXMuZXNmLmNvbHVtbj8uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5DdXJyZW5jeSB8fFxuICAgICAgICAgICAgdGhpcy5lc2YuY29sdW1uPy5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlBlcmNlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0Tm9uTnVtZXJpY2FsRW50cmllcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmVzZi5saXN0RGF0YSB8fCAhdGhpcy5lc2YubGlzdERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZExpc3REYXRhID0gW107XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxlY3RBbGxCdG47XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RBbGxJdGVtKSB7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4gPSB0aGlzLl9zZWxlY3RBbGxJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuID0gdGhpcy5lc2YubGlzdERhdGFbMF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBhbnlGaWx0ZXJlZCA9IHRoaXMuZXNmLmxpc3REYXRhLnNvbWUoaSA9PiBpLmlzRmlsdGVyZWQpO1xuICAgICAgICAgICAgbGV0IGFueVVuZmlsdGVyZWQgPSB0aGlzLmVzZi5saXN0RGF0YS5zb21lKGkgPT4gIWkuaXNGaWx0ZXJlZCk7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGFueUZpbHRlcmVkICYmIGFueVVuZmlsdGVyZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbCgpICYmIHRoaXMudHJlZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMgPSB0aGlzLnRyZWUubm9kZXMubWFwKG4gPT4gbi5kYXRhIGFzIEZpbHRlckxpc3RJdGVtKS5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzRmlsdGVyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVzZi5saXN0RGF0YS5mb3JFYWNoKGkgPT4gaS5pc1NlbGVjdGVkID0gaS5pc0ZpbHRlcmVkKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXllZExpc3REYXRhICE9PSB0aGlzLmVzZi5saXN0RGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSB0aGlzLmVzZi5saXN0RGF0YTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlLm5vZGVzLmZvckVhY2gobiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbi5kYXRhIGFzIEZpbHRlckxpc3RJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgbi5zZWxlY3RlZCA9IGl0ZW0uaXNTZWxlY3RlZCB8fCBpdGVtLmlzRmlsdGVyZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbnlGaWx0ZXJlZCA9IGFueUZpbHRlcmVkIHx8IG4uc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbnlVbmZpbHRlcmVkID0gYW55VW5maWx0ZXJlZCB8fCAhbi5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gYW55RmlsdGVyZWQgJiYgYW55VW5maWx0ZXJlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4ubGFiZWwgPSB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9zZWxlY3RfYWxsO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWFyY2hWYWwgPSB0aGlzLnNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZXNmLmxpc3REYXRhLmZvckVhY2goaSA9PiBpLmlzU2VsZWN0ZWQgPSBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkRGF0YSA9IGNsb25lSGllcmFyY2hpY2FsQXJyYXkodGhpcy5lc2YubGlzdERhdGEsICdjaGlsZHJlbicpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSA9IHRoaXMuaGllcmFyY2hpY2FsU2VsZWN0TWF0Y2hlcyhtYXRjaGVkRGF0YSwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMudHJlZS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgICAgIG4uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICgobi5kYXRhIGFzIEZpbHRlckxpc3RJdGVtKS5sYWJlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWwpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGxQYXJlbnROb2RlcyhuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSB0aGlzLmVzZi5saXN0RGF0YS5maWx0ZXIoKGl0LCBpKSA9PiAoaSA9PT0gMCAmJiBpdC5pc1NwZWNpYWwpIHx8XG4gICAgICAgICAgICAgICAgKGl0LmxhYmVsICE9PSBudWxsICYmIGl0LmxhYmVsICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICAgICAgIWl0LmlzQmxhbmtzICYmXG4gICAgICAgICAgICAgICAgaXQubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVmFsKSA+IC0xKTtcblxuICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IHRydWUpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5zcGxpY2UoMSwgMCwgdGhpcy5hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIHNlbGVjdEFsbEJ0bi5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZWN0QWxsQnRuLmxhYmVsID0gdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbF9zZWFyY2hfcmVzdWx0cztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFwcGx5RmlsdGVyKCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJUcmVlID0gbmV3IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZShGaWx0ZXJpbmdMb2dpYy5PciwgdGhpcy5lc2YuY29sdW1uLmZpZWxkKTtcblxuICAgICAgICBsZXQgc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbCgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hZGRUb0N1cnJlbnRGaWx0ZXJDaGVja2JveCAmJiB0aGlzLmFkZFRvQ3VycmVudEZpbHRlckNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZpbHRlcmVkVG9TZWxlY3RlZEl0ZW1zKHRoaXMuZXNmLmxpc3REYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YVsxXTtcbiAgICAgICAgICAgIGNvbnN0IGFkZFRvQ3VycmVudEZpbHRlck9wdGlvblZpc2libGUgPSBpdGVtID09PSB0aGlzLmFkZFRvQ3VycmVudEZpbHRlckl0ZW07XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zID0gYWRkVG9DdXJyZW50RmlsdGVyT3B0aW9uVmlzaWJsZSAmJiBpdGVtLmlzU2VsZWN0ZWQgP1xuICAgICAgICAgICAgICAgIHRoaXMuZXNmLmxpc3REYXRhLnNsaWNlKDEsIHRoaXMuZXNmLmxpc3REYXRhLmxlbmd0aCkuZmlsdGVyKGVsID0+IGVsLmlzU2VsZWN0ZWQgfHwgZWwuaXNGaWx0ZXJlZCkgOlxuICAgICAgICAgICAgICAgIHRoaXMuZXNmLmxpc3REYXRhLnNsaWNlKDEsIHRoaXMuZXNmLmxpc3REYXRhLmxlbmd0aCkuZmlsdGVyKGVsID0+IGVsLmlzU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHVuc2VsZWN0ZWRJdGVtO1xuICAgICAgICBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbCgpKSB7XG4gICAgICAgICAgICB1bnNlbGVjdGVkSXRlbSA9IHRoaXMuZXNmLmxpc3REYXRhLmZpbmQoZWwgPT4gZWwuaXNTZWxlY3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5zZWxlY3RlZEl0ZW0gPSB0aGlzLmVzZi5saXN0RGF0YS5zbGljZSgxLCB0aGlzLmVzZi5saXN0RGF0YS5sZW5ndGgpLmZpbmQoZWwgPT4gZWwuaXNTZWxlY3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPD0gSWd4RXhjZWxTdHlsZVNlYXJjaENvbXBvbmVudC5maWx0ZXJPcHRpbWl6YXRpb25UaHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZSAhPT0gbnVsbCAmJiBlbGVtZW50LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVzZi5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gdGhpcy5jcmVhdGVDb25kaXRpb24oZWxlbWVudC52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29uZGl0aW9uID0gdGhpcy5lc2YuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSA/ICdhdCcgOiAnZXF1YWxzJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSB0aGlzLmNyZWF0ZUNvbmRpdGlvbihmaWx0ZXJDb25kaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gdGhpcy5jcmVhdGVDb25kaXRpb24oJ2VtcHR5Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogdGhpcy5lc2YuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogdGhpcy5lc2YuY29sdW1uLmZpbHRlcmluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hWYWw6IGVsZW1lbnQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsYW5rc0l0ZW1JbmRleCA9IHNlbGVjdGVkSXRlbXMuZmluZEluZGV4KGUgPT4gZS52YWx1ZSA9PT0gbnVsbCB8fCBlLnZhbHVlID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGxldCBibGFua3NJdGVtOiBhbnk7XG4gICAgICAgICAgICAgICAgaWYgKGJsYW5rc0l0ZW1JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rc0l0ZW0gPSBzZWxlY3RlZEl0ZW1zW2JsYW5rc0l0ZW1JbmRleF07XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuc3BsaWNlKGJsYW5rc0l0ZW1JbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlclRyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogdGhpcy5jcmVhdGVDb25kaXRpb24oJ2luJyksXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogdGhpcy5lc2YuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiB0aGlzLmVzZi5jb2x1bW4uZmlsdGVyaW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoVmFsOiBuZXcgU2V0KHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMubWFwKGQgPT4gZC52YWx1ZS50b0lTT1N0cmluZygpKSA6IHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlRpbWUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMubWFwKGUgPT4gZS52YWx1ZS50b0xvY2FsZVRpbWVTdHJpbmcoKSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMubWFwKGUgPT4gZS52YWx1ZSkpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYmxhbmtzSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiB0aGlzLmNyZWF0ZUNvbmRpdGlvbignZW1wdHknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogdGhpcy5lc2YuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogdGhpcy5lc2YuY29sdW1uLmZpbHRlcmluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hWYWw6IGJsYW5rc0l0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZXNmLmdyaWQ7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmVzZi5jb2x1bW47XG4gICAgICAgICAgICBncmlkLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVySW50ZXJuYWwoY29sLmZpZWxkLCBmaWx0ZXJUcmVlKTtcbiAgICAgICAgICAgIHRoaXMuZXNmLmV4cHJlc3Npb25zTGlzdCA9IG5ldyBBcnJheTxFeHByZXNzaW9uVUk+KCk7XG4gICAgICAgICAgICBncmlkLmZpbHRlcmluZ1NlcnZpY2UuZ2VuZXJhdGVFeHByZXNzaW9uc0xpc3QoY29sLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICBncmlkLmZpbHRlcmluZ0xvZ2ljLCB0aGlzLmVzZi5leHByZXNzaW9uc0xpc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lc2YuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmNsZWFyRmlsdGVyKHRoaXMuZXNmLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVzZi5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNIaWVyYXJjaGljYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVzZi5pc0hpZXJhcmNoaWNhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgICBwdWJsaWMgaXNUcmVlRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVzZi5pc0hpZXJhcmNoaWNhbCAmJiB0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZXJhcmNoaWNhbFNlbGVjdE1hdGNoZXMoZGF0YTogRmlsdGVyTGlzdEl0ZW1bXSwgc2VhcmNoVmFsOiBzdHJpbmcpIHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBlbGVtZW50LmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWUubm9kZXMuZmlsdGVyKG4gPT4gKG4uZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbSkubGFiZWwgPT09IGVsZW1lbnQubGFiZWwpWzBdO1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LmxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFZhbCkgPiAtMSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWxTZWxlY3RBbGxDaGlsZHJlbihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWVyYXJjaGljYWxTZWxlY3RlZEl0ZW1zLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4gPSB0aGlzLmhpZXJhcmNoaWNhbFNlbGVjdE1hdGNoZXMoZWxlbWVudC5jaGlsZHJlbiwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC5pc1NlbGVjdGVkID09PSB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZXJhcmNoaWNhbFNlbGVjdEFsbENoaWxkcmVuKGVsZW1lbnQ6IEZpbHRlckxpc3RJdGVtKSB7XG4gICAgICAgIGVsZW1lbnQuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBjaGlsZC5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBjaGlsZC5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbFNlbGVjdEFsbENoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGFuZEFsbFBhcmVudE5vZGVzKG5vZGU6IGFueSkge1xuICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRBbGxQYXJlbnROb2Rlcyhub2RlLnBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGaWx0ZXJlZFRvU2VsZWN0ZWRJdGVtcyhyZWNvcmRzOiBGaWx0ZXJMaXN0SXRlbVtdKSB7XG4gICAgICAgIHJlY29yZHMuZm9yRWFjaChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlY29yZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmlsdGVyZWRUb1NlbGVjdGVkSXRlbXMocmVjb3JkLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlY29yZC5pc0ZpbHRlcmVkICYmIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMuaW5kZXhPZihyZWNvcmQpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29uZGl0aW9uKGNvbmRpdGlvbk5hbWU6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oY29uZGl0aW9uTmFtZSk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXI6XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5DdXJyZW5jeTpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneE51bWJlckZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oY29uZGl0aW9uTmFtZSk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgIHJldHVybiBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpLmNvbmRpdGlvbihjb25kaXRpb25OYW1lKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlRpbWU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCkuY29uZGl0aW9uKGNvbmRpdGlvbk5hbWUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpLmNvbmRpdGlvbihjb25kaXRpb25OYW1lKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oY29uZGl0aW9uTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVqZWN0Tm9uTnVtZXJpY2FsRW50cmllcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVnRXhwID0gL1teMC05XFwuLGVFXFwtXS9nO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZSAmJiByZWdFeHAudGVzdCh0aGlzLnNlYXJjaFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC52YWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUucmVwbGFjZShyZWdFeHAsICcnKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSB0aGlzLnNlYXJjaElucHV0LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGlneC1pbnB1dC1ncm91cFxuICAgICAgICAgICAgdHlwZT1cImJveFwiXG4gICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiZXNmLmRpc3BsYXlEZW5zaXR5XCI+XG4gICAgPGlneC1pY29uIGlneFByZWZpeD5zZWFyY2g8L2lneC1pY29uPlxuICAgIDxpbnB1dFxuICAgICAgICAjaW5wdXRcbiAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckxpc3REYXRhKClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVzZi5jb2x1bW4/LmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX3NlYXJjaF9wbGFjZWhvbGRlclwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiLz5cbiAgICA8aWd4LWljb25cbiAgICAgICAgaWd4U3VmZml4XG4gICAgICAgICpuZ0lmPVwic2VhcmNoVmFsdWUgfHwgc2VhcmNoVmFsdWUgPT09IDBcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dCgpXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgIGNsZWFyXG4gICAgPC9pZ3gtaWNvbj5cbjwvaWd4LWlucHV0LWdyb3VwPlxuXG48aWd4LWxpc3QgI2xpc3QgW2Rpc3BsYXlEZW5zaXR5XT1cImVzZi5kaXNwbGF5RGVuc2l0eVwiIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCIgKm5nSWY9XCIhaXNIaWVyYXJjaGljYWwoKVwiPlxuICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7XCI+XG4gICAgICAgIDxpZ3gtbGlzdC1pdGVtXG4gICAgICAgICppZ3hGb3I9XCJsZXQgaXRlbSBvZiBkaXNwbGF5ZWRMaXN0RGF0YSBzY3JvbGxPcmllbnRhdGlvbiA6ICd2ZXJ0aWNhbCc7IGNvbnRhaW5lclNpemU6IGNvbnRhaW5lclNpemU7IGl0ZW1TaXplOiBpdGVtU2l6ZVwiPlxuICAgICAgICAgICAgPGlneC1jaGVja2JveFxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW0/LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIml0ZW0/LmluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlVHJhbnNpdGlvbnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICA8L2lneC1jaGVja2JveD5cbiAgICAgICAgPC9pZ3gtbGlzdC1pdGVtPlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLXRlbXBsYXRlIGlneERhdGFMb2FkaW5nPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fbG9hZGluZ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZhbHVlc0xvYWRpbmdUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgaWd4RW1wdHlMaXN0PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlTZWFyY2hcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9pZ3gtbGlzdD5cblxuPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX3RyZWVcIiAqbmdJZj1cImlzSGllcmFyY2hpY2FsKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fdHJlZS1hbGlrZVwiICpuZ0lmPVwiIWlzVHJlZUVtcHR5KClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX3RyZWUtYWxpa2UtaXRlbVwiPlxuICAgICAgICAgICAgPGlneC1jaGVja2JveCAjc2VsZWN0QWxsQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdEFsbEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RBbGxJdGVtPy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdEFsbEl0ZW0/LmluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRyYW5zaXRpb25zXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2hlY2tib3hDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdEFsbEl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvaWd4LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX3RyZWUtYWxpa2UtaXRlbVwiICpuZ0lmPVwic2VhcmNoVmFsdWVcIj5cbiAgICAgICAgICAgIDxpZ3gtY2hlY2tib3ggI2FkZFRvQ3VycmVudEZpbHRlckNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJhZGRUb0N1cnJlbnRGaWx0ZXJJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWRkVG9DdXJyZW50RmlsdGVySXRlbS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVHJhbnNpdGlvbnNdPVwidHJ1ZVwiPlxuXG4gICAgICAgICAgICAgICAge3sgYWRkVG9DdXJyZW50RmlsdGVySXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9pZ3gtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGlneC10cmVlICN0cmVlIFtkaXNwbGF5RGVuc2l0eV09XCJlc2YuZGlzcGxheURlbnNpdHlcIiBzZWxlY3Rpb249XCJDYXNjYWRpbmdcIiAgKG5vZGVTZWxlY3Rpb24pPVwib25Ob2RlU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRpc3BsYXllZExpc3REYXRhO1wiIFtzZWxlY3RlZF09XCJpdGVtLmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgIDxkaXY+e3tpdGVtLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImNoaWxkTGV2ZWwxXCIgKm5nRm9yPVwibGV0IGNoaWxkTGV2ZWwxIG9mIGl0ZW0uY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDEuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsMS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDJcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDIgb2YgY2hpbGRMZXZlbDEuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDIuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDIubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsM1wiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsMyBvZiBjaGlsZExldmVsMi5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsMy5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDMubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDRcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDQgb2YgY2hpbGRMZXZlbDMuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDQuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsNC5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDVcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDUgb2YgY2hpbGRMZXZlbDQuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDUuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsNlwiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsNiBvZiBjaGlsZExldmVsNS5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsNi5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDYubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDdcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDcgb2YgY2hpbGRMZXZlbDYuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDcuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsNy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDhcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDggb2YgY2hpbGRMZXZlbDcuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDguaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDgubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsOVwiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsOSBvZiBjaGlsZExldmVsOC5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsOS5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDkubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgPC9pZ3gtdHJlZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBpZ3hEYXRhTG9hZGluZz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX2xvYWRpbmdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2YWx1ZXNMb2FkaW5nVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzVHJlZUVtcHR5KClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5U2VhcmNoXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U2VhcmNoPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19lbXB0eVwiPlxuICAgICAgICB7e2VzZi5ncmlkPy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfbm9fbWF0Y2hlc319XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlPlxuICAgIDxpZ3gtY2lyY3VsYXItYmFyIFtpbmRldGVybWluYXRlXT1cInRydWVcIj5cbiAgICA8L2lneC1jaXJjdWxhci1iYXI+XG48L25nLXRlbXBsYXRlPlxuXG48Zm9vdGVyIGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fbWVudS1mb290ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fY2FuY2VsXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlneEJ1dHRvbj1cImZsYXRcIlxuICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImVzZi5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXNmLmNhbmNlbCgpXCI+XG4gICAgICAgICAgICAgICAge3sgZXNmLmdyaWQ/LnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9jYW5jZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX2FwcGx5XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlneEJ1dHRvbj1cInJhaXNlZFwiXG4gICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiZXNmLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhcHBseUJ1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcigpXCI+XG4gICAgICAgICAgICAgICAge3sgZXNmLmdyaWQ/LnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9hcHBseSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZm9vdGVyPlxuIl19
|
|
595
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBRVQsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUMvRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seURBQXlELENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUNILDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUM5RSx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSx1QkFBdUIsRUFDbEYsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBNEIsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLckYsTUFBTSxPQUFPLDJDQUEyQztJQUtwRCxZQUFtQixRQUFnQztRQUFoQyxhQUFRLEdBQVIsUUFBUSxDQUF3QjtJQUFJLENBQUM7SUFKakQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLElBQWlELEVBQ2xGLEdBQVk7UUFDWixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFBQSxDQUFDOzt3SUFKTywyQ0FBMkM7NEhBQTNDLDJDQUEyQzsyRkFBM0MsMkNBQTJDO2tCQUh2RCxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx3QkFBd0I7aUJBQ3JDOztBQVNEOztHQUVHO0FBS0gsTUFBTSxPQUFPLDRCQUE0QjtJQXlJckMsWUFBbUIsR0FBc0IsRUFBUyxHQUEyQixFQUFZLFFBQXNCO1FBQTVGLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBd0I7UUFBWSxhQUFRLEdBQVIsUUFBUSxDQUFjO1FBdEkvRzs7V0FFRztRQUVJLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBNEczQjs7V0FFRztRQUNJLHNCQUFpQixHQUFxQixFQUFFLENBQUM7UUFpQnhDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBa0QxQzs7V0FFRztRQUNJLGdCQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUM1QjtRQUNMLENBQUMsQ0FBQTtRQXpERyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMzRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDMUQscUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMzRCxJQUFJLENBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtnQkFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNsQztZQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ3JCO2lCQUFNO2dCQUNILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtZQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIscUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBM0hEOztPQUVHO0lBQ0gsSUFBVyxhQUFhO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLE1BQU0sYUFBYSxHQUFHO2dCQUNsQixVQUFVLEVBQUUsS0FBSztnQkFDakIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixTQUFTLEVBQUUsSUFBSTtnQkFDZixRQUFRLEVBQUUsS0FBSztnQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLHlCQUF5QjtnQkFDOUQsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUI7YUFDakUsQ0FBQztZQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1NBQ3ZDO1FBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsc0JBQXNCO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDL0IsTUFBTSxzQkFBc0IsR0FBRztnQkFDM0IsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixhQUFhLEVBQUUsS0FBSztnQkFDcEIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEI7Z0JBQ2pFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCO2FBQ3BFLENBQUM7WUFFRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsc0JBQXNCLENBQUM7U0FDekQ7UUFFRCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsU0FBUyxDQUFDLEtBQWM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFFLElBQUksQ0FBQyxHQUFXLENBQUMsU0FBUyxFQUFFO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBWUQ7O09BRUc7SUFDSCxJQUFXLHFCQUFxQjtRQUM1QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLHdDQUF3QyxFQUFFO1lBQ3pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsUUFBUSxDQUFDO1NBQzFFO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQztTQUN0RDtJQUNMLENBQUM7SUErQ00sZUFBZTtRQUNsQixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFjRDs7T0FFRztJQUNJLFVBQVU7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsU0FBbUM7UUFDdkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9FLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvQyxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDckMsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLHNCQUFzQixFQUFFO29CQUN6QyxPQUFPO2lCQUNWO2dCQUNELE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztZQUVILFlBQVksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1NBQ3RDO2FBQU07WUFDSCxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUN4RCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXJHLE1BQU0sV0FBVyxHQUNiLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXJGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDbEQsWUFBWSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQ25DLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQ2xDO2lCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsRUFBRTtnQkFDeEQsWUFBWSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQ25DLFlBQVksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQ25DO2lCQUFNO2dCQUNILFlBQVksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3JDO1NBQ0o7UUFDRCxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0kseUJBQXlCLENBQUMsU0FBbUM7UUFDaEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFFLElBQUksQ0FBQyxJQUF1QixDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVEOztPQUVHO0lBQ0kscUJBQXFCLENBQUMsU0FBa0M7UUFDM0QsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLElBQXVCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxJQUF1QixDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBc0IsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM5QyxZQUFZLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUNuQyxZQUFZLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUNuQzthQUFNLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDMUUsWUFBWSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDbkMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDbEM7YUFBTTtZQUNILFlBQVksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLFlBQVksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ25DO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2YsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUU7WUFDN0IsS0FBSyxjQUFjLENBQUMsSUFBSTtnQkFBRSxRQUFRLEdBQUcsTUFBTSxDQUFDO2dCQUFDLE1BQU07WUFDbkQsS0FBSyxjQUFjLENBQUMsT0FBTztnQkFBRSxRQUFRLEdBQUcsTUFBTSxDQUFDO2dCQUFDLE1BQU07WUFDdEQsT0FBTyxDQUFDLENBQUMsTUFBTTtTQUNsQjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsYUFBYTtRQUNwQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7U0FDeEQ7UUFFRCw0RkFBNEY7UUFDNUYsa0hBQWtIO1FBQ2xILDJIQUEySDtRQUMzSCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsbUJBQW1CO1FBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztZQUNqRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWMsQ0FBQyxLQUFvQjtRQUN0QyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDZixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQzNCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVuQixPQUFPO1lBQ1gsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2dCQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ2xCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2lCQUNyQjtnQkFFRCxPQUFPO1NBQ2Q7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ2pCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxLQUFLLGtCQUFrQixDQUFDLE1BQU07WUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxLQUFLLGtCQUFrQixDQUFDLFFBQVE7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxLQUFLLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtZQUMxRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztTQUNwQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBRTVCLE9BQU87U0FDVjtRQUVELElBQUksWUFBWSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUN0QzthQUFNO1lBQ0gsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9ELFlBQVksQ0FBQyxhQUFhLEdBQUcsV0FBVyxJQUFJLGFBQWEsQ0FBQztZQUMxRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQXNCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDeEg7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1RCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUMzQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN4QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBc0IsQ0FBQzt3QkFDdEMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7d0JBQ2hELFdBQVcsR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQzt3QkFDeEMsYUFBYSxHQUFHLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7b0JBQ2pELENBQUMsQ0FBQyxDQUFDO29CQUNILFlBQVksQ0FBQyxhQUFhLEdBQUcsV0FBVyxJQUFJLGFBQWEsQ0FBQztpQkFDN0Q7YUFDSjtZQUNELFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDO1lBQzdFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFekIsT0FBTztTQUNWO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsMEJBQTBCLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDckQsTUFBTSxXQUFXLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hCLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixJQUFLLENBQUMsQ0FBQyxJQUF1QixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ25GLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDaEM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xGLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7b0JBQzdDLENBQUMsRUFBRSxDQUFDLFFBQVE7b0JBQ1osRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUvRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUNqRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO2FBQy9CO1NBQ0o7UUFFRCxZQUFZLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUNuQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUMvQixZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyx3Q0FBd0MsQ0FBQztRQUM1RixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxNQUFNLFVBQVUsR0FBRyxJQUFJLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUYsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3ZCLElBQUksSUFBSSxDQUFDLDBCQUEwQixJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3REO1lBRUQsYUFBYSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztTQUNuRDthQUFNO1lBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUM3RSxhQUFhLEdBQUcsK0JBQStCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25HLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hGO1FBRUQsSUFBSSxjQUFjLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDdkIsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLENBQUM7U0FDMUU7YUFBTTtZQUNILGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLENBQUM7U0FDN0c7UUFFRCxJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksNEJBQTRCLENBQUMsMkJBQTJCLEVBQUU7Z0JBQ2xGLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzVCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDckIsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTt3QkFDdkQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssa0JBQWtCLENBQUMsT0FBTyxFQUFFOzRCQUN6RCxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7eUJBQzlEOzZCQUFNOzRCQUNILE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDOzRCQUMvRixTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQzt5QkFDckQ7cUJBQ0o7eUJBQU07d0JBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQzdDO29CQUNELFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7d0JBQzlCLFNBQVM7d0JBQ1QsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7d0JBQ2hDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUI7d0JBQy9DLFNBQVMsRUFBRSxPQUFPLENBQUMsS0FBSztxQkFDM0IsQ0FBQyxDQUFDO2dCQUNQLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQ2hHLElBQUksVUFBZSxDQUFDO2dCQUNwQixJQUFJLGVBQWUsSUFBSSxDQUFDLEVBQUU7b0JBQ3RCLFVBQVUsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQzVDLGFBQWEsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUM1QztnQkFDRCxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO29CQUM5QixTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7b0JBQ3JDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO29CQUNoQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CO29CQUMvQyxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLGtCQUFrQixDQUFDLElBQUk7d0JBQ25FLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDMUQsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNsRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDdEQsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDM0MsQ0FBQyxDQUFDO2dCQUVILElBQUksVUFBVSxFQUFFO29CQUNaLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7d0JBQzlCLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQzt3QkFDeEMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7d0JBQ2hDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUI7d0JBQy9DLFNBQVMsRUFBRSxVQUFVLENBQUMsS0FBSztxQkFDOUIsQ0FBQyxDQUFDO2lCQUNOO2FBQ0o7WUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7WUFDckQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFDdEUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3REO2FBQU07WUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckU7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWM7UUFDakIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8seUJBQXlCLENBQUMsSUFBc0IsRUFBRSxTQUFpQjtRQUN2RSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLENBQUMsQ0FBQyxJQUF1QixDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEcsSUFBSSxJQUFJLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7YUFDekI7WUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNoRSxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDMUIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2pEO2lCQUFNLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDN0IsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQzFCLElBQUksSUFBSSxFQUFFO3dCQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3FCQUN4QjtpQkFDSjthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyw2QkFBNkIsQ0FBQyxPQUF1QjtRQUN6RCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUM1QixLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdDO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRU8sb0JBQW9CLENBQUMsSUFBUztRQUNsQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDOUM7SUFDTCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsT0FBeUI7UUFDeEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDcEQ7WUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEQ7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFTyxlQUFlLENBQUMsYUFBcUI7UUFDekMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDOUIsS0FBSyxrQkFBa0IsQ0FBQyxPQUFPO2dCQUMzQixPQUFPLDBCQUEwQixDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMxRSxLQUFLLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUMvQixLQUFLLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztZQUNqQyxLQUFLLGtCQUFrQixDQUFDLE9BQU87Z0JBQzNCLE9BQU8seUJBQXlCLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pFLEtBQUssa0JBQWtCLENBQUMsSUFBSTtnQkFDeEIsT0FBTyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkUsS0FBSyxrQkFBa0IsQ0FBQyxJQUFJO2dCQUN4QixPQUFPLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RSxLQUFLLGtCQUFrQixDQUFDLFFBQVE7Z0JBQzVCLE9BQU8sMkJBQTJCLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzNFO2dCQUNJLE9BQU8seUJBQXlCLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0sseUJBQXlCO1FBQzdCLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztTQUM3QztJQUNMLENBQUM7O0FBMWxCdUIsd0RBQTJCLEdBQUcsQ0FBRSxDQUFBO3lIQUQvQyw0QkFBNEI7NkdBQTVCLDRCQUE0QixtT0FZVCxpQkFBaUIscUdBTWxCLGdCQUFnQixpSEFNSCxvQkFBb0IsbUlBTVgsb0JBQW9CLHVGQU0xQyxnQkFBZ0IsdURBTWhDLGlCQUFpQiw0TEFNaUMsV0FBVyw2QkMvRjVFLHMrTkF1SkE7MkZEeEdhLDRCQUE0QjtrQkFKeEMsU0FBUzsrQkFDSSx3QkFBd0I7d0tBVTNCLFlBQVk7c0JBRGxCLFdBQVc7dUJBQUMsbUNBQW1DO2dCQU96QyxXQUFXO3NCQURqQixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU90RCxJQUFJO3NCQURWLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT3JELGlCQUFpQjtzQkFEdkIsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU90RSwwQkFBMEI7c0JBRGhDLFNBQVM7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPL0UsSUFBSTtzQkFEVixTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU9sRCxPQUFPO3NCQURoQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPcEMsc0NBQXNDO3NCQUQvQyxTQUFTO3VCQUFDLHdDQUF3QyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgVmlld0NoaWxkLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgSG9zdEJpbmRpbmdcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvaW5wdXQvaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IElneEZvck9mRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9mb3Itb2YvZm9yX29mLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgRmlsdGVyaW5nTG9naWMgfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHtcbiAgICBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZCwgSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZCwgSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQsXG4gICAgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZCwgSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLCBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZFxufSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJZ3hMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vbGlzdC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElDaGFuZ2VDaGVja2JveEV2ZW50QXJncywgSWd4Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgY2xvbmVIaWVyYXJjaGljYWxBcnJheSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBCYXNlRmlsdGVyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWZpbHRlcmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXhwcmVzc2lvblVJLCBGaWx0ZXJMaXN0SXRlbSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IElneFRyZWVDb21wb25lbnQsIElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vdHJlZS9wdWJsaWNfYXBpJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4RXhjZWxTdHlsZUxvYWRpbmddJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBwdWJsaWMgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoX2RpcjogSWd4RXhjZWxTdHlsZUxvYWRpbmdWYWx1ZXNUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgY3R4OiB1bmtub3duKTogY3R4IGlzIHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfTtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVuZGVmaW5lZD4pIHsgfVxufVxuXG4vKipcbiAqIEEgY29tcG9uZW50IHVzZWQgZm9yIHByZXNlbnRpbmcgRXhjZWwgc3R5bGUgc2VhcmNoIFVJLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1leGNlbC1zdHlsZS1zZWFyY2gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9leGNlbC1zdHlsZS1zZWFyY2guY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneEV4Y2VsU3R5bGVTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGZpbHRlck9wdGltaXphdGlvblRocmVzaG9sZCA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4Y2VsLWZpbHRlcl9fbWVudS1tYWluJylcbiAgICBwdWJsaWMgZGVmYXVsdENsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdsaXN0JywgeyByZWFkOiBJZ3hMaXN0Q29tcG9uZW50LCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGxpc3Q6IElneExpc3RDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdEFsbENoZWNrYm94JywgeyByZWFkOiBJZ3hDaGVja2JveENvbXBvbmVudCwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBzZWxlY3RBbGxDaGVja2JveDogSWd4Q2hlY2tib3hDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2FkZFRvQ3VycmVudEZpbHRlckNoZWNrYm94JywgeyByZWFkOiBJZ3hDaGVja2JveENvbXBvbmVudCwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBhZGRUb0N1cnJlbnRGaWx0ZXJDaGVja2JveDogSWd4Q2hlY2tib3hDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RyZWUnLCB7IHJlYWQ6IElneFRyZWVDb21wb25lbnQsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgdHJlZTogSWd4VHJlZUNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hGb3JPZkRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgdmlydERpcjogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEV4Y2VsU3R5bGVMb2FkaW5nVmFsdWVzVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdEFsbEl0ZW0oKTogRmlsdGVyTGlzdEl0ZW0ge1xuICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdEFsbEl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEFsbEl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNGaWx0ZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNTcGVjaWFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzQmxhbmtzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbCxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0QWxsSXRlbSA9IHNlbGVjdEFsbEl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0QWxsSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYWRkVG9DdXJyZW50RmlsdGVySXRlbSgpOiBGaWx0ZXJMaXN0SXRlbSB7XG4gICAgICAgIGlmICghdGhpcy5fYWRkVG9DdXJyZW50RmlsdGVySXRlbSkge1xuICAgICAgICAgICAgY29uc3QgYWRkVG9DdXJyZW50RmlsdGVySXRlbSA9IHtcbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0ZpbHRlcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc1NwZWNpYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNCbGFua3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9hZGRfdG9fZmlsdGVyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9hZGRfdG9fZmlsdGVyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLl9hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtID0gYWRkVG9DdXJyZW50RmlsdGVySXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0xvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGlzTG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgYW55KS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNlYXJjaFZhbHVlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBkaXNwbGF5ZWRMaXN0RGF0YTogRmlsdGVyTGlzdEl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlc0xvYWRpbmdUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXNmLmdyaWQ/LmV4Y2VsU3R5bGVMb2FkaW5nVmFsdWVzVGVtcGxhdGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVzZi5ncmlkLmV4Y2VsU3R5bGVMb2FkaW5nVmFsdWVzVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0RXhjZWxTdHlsZUxvYWRpbmdWYWx1ZXNUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2lzTG9hZGluZztcbiAgICBwcml2YXRlIF9hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtOiBGaWx0ZXJMaXN0SXRlbTtcbiAgICBwcml2YXRlIF9zZWxlY3RBbGxJdGVtOiBGaWx0ZXJMaXN0SXRlbTtcbiAgICBwcml2YXRlIF9oaWVyYXJjaGljYWxTZWxlY3RlZEl0ZW1zOiBGaWx0ZXJMaXN0SXRlbVtdO1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyBlc2Y6IEJhc2VGaWx0ZXJpbmdDb21wb25lbnQsIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIGVzZi5sb2FkaW5nU3RhcnQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZExpc3REYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBlc2YubG9hZGluZ0VuZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFNpemUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBlc2YuaW5pdGlhbGl6ZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFNpemUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZXNmLmNvbHVtbkNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmlydERpcj8ucmVzZXRTY3JvbGxQb3NpdGlvbigpO1xuICAgICAgICB9KTtcblxuICAgICAgICBlc2YubGlzdERhdGFMb2FkZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RBbGxJdGVtID0gdGhpcy5lc2YubGlzdERhdGFbMF07XG4gICAgICAgICAgICBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbCgpICYmIHRoaXMuZXNmLmxpc3REYXRhWzBdLmlzU3BlY2lhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXNmLmxpc3REYXRhLnNwbGljZSgwLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJMaXN0RGF0YSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFNpemUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZWZyZXNoU2l6ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWZyZXNoU2l6ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmlydERpcikge1xuICAgICAgICAgICAgdGhpcy52aXJ0RGlyLmlneEZvckNvbnRhaW5lclNpemUgPSB0aGlzLmNvbnRhaW5lclNpemU7XG4gICAgICAgICAgICB0aGlzLnZpcnREaXIuaWd4Rm9ySXRlbVNpemUgPSB0aGlzLml0ZW1TaXplO1xuICAgICAgICAgICAgdGhpcy52aXJ0RGlyLnJlY2FsY1VwZGF0ZVNpemVzKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhcklucHV0KCkge1xuICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWx0ZXJMaXN0RGF0YSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2UoZXZlbnRBcmdzOiBJQ2hhbmdlQ2hlY2tib3hFdmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuZGlzcGxheWVkTGlzdERhdGEuaW5kZXhPZihldmVudEFyZ3MuY2hlY2tib3gudmFsdWUpO1xuICAgICAgICBjb25zdCBzZWxlY3RBbGxCdG4gPSB0aGlzLmRpc3BsYXllZExpc3REYXRhWzBdO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZExpc3REYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHRoaXMuYWRkVG9DdXJyZW50RmlsdGVySXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNTZWxlY3RlZCA9IGV2ZW50QXJncy5jaGVja2VkO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudEFyZ3MuY2hlY2tib3gudmFsdWUuaXNTZWxlY3RlZCA9IGV2ZW50QXJncy5jaGVja2VkO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhUb1N0YXJ0U2xpY2luZyA9IHRoaXMuZGlzcGxheWVkTGlzdERhdGEuaW5kZXhPZih0aGlzLmFkZFRvQ3VycmVudEZpbHRlckl0ZW0pID4gLTEgPyAyIDogMTtcblxuICAgICAgICAgICAgY29uc3Qgc2xpY2VkQXJyYXkgPVxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEuc2xpY2UoaW5kZXhUb1N0YXJ0U2xpY2luZywgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5sZW5ndGgpO1xuXG4gICAgICAgICAgICBpZiAoIXNsaWNlZEFycmF5LmZpbmQoZWwgPT4gZWwuaXNTZWxlY3RlZCA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxCdG4uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzbGljZWRBcnJheS5maW5kKGVsID0+IGVsLmlzU2VsZWN0ZWQgPT09IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxCdG4uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnRBcmdzLmNoZWNrYm94Lm5hdGl2ZUNoZWNrYm94Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0QWxsQ2hlY2tib3hDaGFuZ2UoZXZlbnRBcmdzOiBJQ2hhbmdlQ2hlY2tib3hFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0QWxsSXRlbS5pc1NlbGVjdGVkID0gZXZlbnRBcmdzLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX3NlbGVjdEFsbEl0ZW0uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSB0aGlzLnRyZWUubm9kZXM7XG4gICAgICAgIHRyZWVOb2Rlcy5mb3JFYWNoKG5vZGUgPT4gKG5vZGUuZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbSkuaXNTZWxlY3RlZCA9IGV2ZW50QXJncy5jaGVja2VkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbk5vZGVTZWxlY3Rpb25DaGFuZ2UoZXZlbnRBcmdzOiBJVHJlZU5vZGVTZWxlY3Rpb25FdmVudCkge1xuICAgICAgICBldmVudEFyZ3MuYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIChub2RlLmRhdGEgYXMgRmlsdGVyTGlzdEl0ZW0pLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgZXZlbnRBcmdzLnJlbW92ZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIChub2RlLmRhdGEgYXMgRmlsdGVyTGlzdEl0ZW0pLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcyA9IGV2ZW50QXJncy5uZXdTZWxlY3Rpb24ubWFwKGl0ZW0gPT4gaXRlbS5kYXRhIGFzIEZpbHRlckxpc3RJdGVtKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0QWxsQnRuID0gdGhpcy5zZWxlY3RBbGxJdGVtO1xuICAgICAgICBpZiAodGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSB0aGlzLnRyZWUubm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBpdGVtU2l6ZSgpIHtcbiAgICAgICAgbGV0IGl0ZW1TaXplID0gJzQwcHgnO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuZXNmLmRpc3BsYXlEZW5zaXR5KSB7XG4gICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvc3k6IGl0ZW1TaXplID0gJzMycHgnOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGlzcGxheURlbnNpdHkuY29tcGFjdDogaXRlbVNpemUgPSAnMjRweCc7IGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1TaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250YWluZXJTaXplKCkge1xuICAgICAgICBpZiAodGhpcy5lc2YubGlzdERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0Py5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR0UgTm92IDFzdCwgMjAyMSAjMTAzNTUgUmV0dXJuIGEgbnVtZXJpYyB2YWx1ZSwgc28gdGhlIGNodW5rIHNpemUgaXMgY2FsY3VsYXRlZCBwcm9wZXJseS5cbiAgICAgICAgLy8gSWYgd2Ugc2tpcCB0aGlzIGJyYW5jaCwgb24gYXBwbHlpbmcgdGhlIGZpbHRlciB0aGUgX2NhbGN1bGF0ZUNodW5rU2l6ZSgpIG1ldGhvZCBvZmYgdGhlIEZvck9mRGlyZWN0aXZlIHJlY2VpdmVzXG4gICAgICAgIC8vIGFuIGlneEZvckNvbnRhaW5lclNpemUgPSB1bmRlZmluZWQsIHRodXMgYXNzaWducyB0aGUgY2h1bmtTaXplIHRvIHRoZSBpZ3hGb3JPZi5sZW5ndGggd2hpY2ggbGVhZHMgdG8gcGVyZm9ybWFuY2UgaXNzdWVzLlxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYXBwbHlCdXR0b25EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9zZWxlY3RBbGxJdGVtICYmICF0aGlzLl9zZWxlY3RBbGxJdGVtLmlzU2VsZWN0ZWQgJiYgIXRoaXMuX3NlbGVjdEFsbEl0ZW0uaW5kZXRlcm1pbmF0ZSkgfHxcbiAgICAgICAgICAgICh0aGlzLmRpc3BsYXllZExpc3REYXRhICYmIHRoaXMuZGlzcGxheWVkTGlzdERhdGEubGVuZ3RoID09PSAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5FTlRFUjpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuRVNDQVBFOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmaWx0ZXJMaXN0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXNmLmNvbHVtbj8uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXIgfHxcbiAgICAgICAgICAgIHRoaXMuZXNmLmNvbHVtbj8uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5DdXJyZW5jeSB8fFxuICAgICAgICAgICAgdGhpcy5lc2YuY29sdW1uPy5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlBlcmNlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0Tm9uTnVtZXJpY2FsRW50cmllcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmVzZi5saXN0RGF0YSB8fCAhdGhpcy5lc2YubGlzdERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZExpc3REYXRhID0gW107XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxlY3RBbGxCdG47XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RBbGxJdGVtKSB7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4gPSB0aGlzLl9zZWxlY3RBbGxJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuID0gdGhpcy5lc2YubGlzdERhdGFbMF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBhbnlGaWx0ZXJlZCA9IHRoaXMuZXNmLmxpc3REYXRhLnNvbWUoaSA9PiBpLmlzRmlsdGVyZWQpO1xuICAgICAgICAgICAgbGV0IGFueVVuZmlsdGVyZWQgPSB0aGlzLmVzZi5saXN0RGF0YS5zb21lKGkgPT4gIWkuaXNGaWx0ZXJlZCk7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGFueUZpbHRlcmVkICYmIGFueVVuZmlsdGVyZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbCgpICYmIHRoaXMudHJlZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMgPSB0aGlzLnRyZWUubm9kZXMubWFwKG4gPT4gbi5kYXRhIGFzIEZpbHRlckxpc3RJdGVtKS5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzRmlsdGVyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVzZi5saXN0RGF0YS5mb3JFYWNoKGkgPT4gaS5pc1NlbGVjdGVkID0gaS5pc0ZpbHRlcmVkKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXllZExpc3REYXRhICE9PSB0aGlzLmVzZi5saXN0RGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSB0aGlzLmVzZi5saXN0RGF0YTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlLm5vZGVzLmZvckVhY2gobiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbi5kYXRhIGFzIEZpbHRlckxpc3RJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgbi5zZWxlY3RlZCA9IGl0ZW0uaXNTZWxlY3RlZCB8fCBpdGVtLmlzRmlsdGVyZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbnlGaWx0ZXJlZCA9IGFueUZpbHRlcmVkIHx8IG4uc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbnlVbmZpbHRlcmVkID0gYW55VW5maWx0ZXJlZCB8fCAhbi5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gYW55RmlsdGVyZWQgJiYgYW55VW5maWx0ZXJlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4ubGFiZWwgPSB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9zZWxlY3RfYWxsO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWFyY2hWYWwgPSB0aGlzLnNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZXNmLmxpc3REYXRhLmZvckVhY2goaSA9PiBpLmlzU2VsZWN0ZWQgPSBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkRGF0YSA9IGNsb25lSGllcmFyY2hpY2FsQXJyYXkodGhpcy5lc2YubGlzdERhdGEsICdjaGlsZHJlbicpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSA9IHRoaXMuaGllcmFyY2hpY2FsU2VsZWN0TWF0Y2hlcyhtYXRjaGVkRGF0YSwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMudHJlZS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgICAgIG4uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICgobi5kYXRhIGFzIEZpbHRlckxpc3RJdGVtKS5sYWJlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWwpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGxQYXJlbnROb2RlcyhuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSB0aGlzLmVzZi5saXN0RGF0YS5maWx0ZXIoKGl0LCBpKSA9PiAoaSA9PT0gMCAmJiBpdC5pc1NwZWNpYWwpIHx8XG4gICAgICAgICAgICAgICAgKGl0LmxhYmVsICE9PSBudWxsICYmIGl0LmxhYmVsICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICAgICAgIWl0LmlzQmxhbmtzICYmXG4gICAgICAgICAgICAgICAgaXQubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVmFsKSA+IC0xKTtcblxuICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IHRydWUpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5zcGxpY2UoMSwgMCwgdGhpcy5hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIHNlbGVjdEFsbEJ0bi5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZWN0QWxsQnRuLmxhYmVsID0gdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbF9zZWFyY2hfcmVzdWx0cztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFwcGx5RmlsdGVyKCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJUcmVlID0gbmV3IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZShGaWx0ZXJpbmdMb2dpYy5PciwgdGhpcy5lc2YuY29sdW1uLmZpZWxkKTtcblxuICAgICAgICBsZXQgc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbCgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hZGRUb0N1cnJlbnRGaWx0ZXJDaGVja2JveCAmJiB0aGlzLmFkZFRvQ3VycmVudEZpbHRlckNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZpbHRlcmVkVG9TZWxlY3RlZEl0ZW1zKHRoaXMuZXNmLmxpc3REYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YVsxXTtcbiAgICAgICAgICAgIGNvbnN0IGFkZFRvQ3VycmVudEZpbHRlck9wdGlvblZpc2libGUgPSBpdGVtID09PSB0aGlzLmFkZFRvQ3VycmVudEZpbHRlckl0ZW07XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zID0gYWRkVG9DdXJyZW50RmlsdGVyT3B0aW9uVmlzaWJsZSAmJiBpdGVtLmlzU2VsZWN0ZWQgP1xuICAgICAgICAgICAgICAgIHRoaXMuZXNmLmxpc3REYXRhLnNsaWNlKDEsIHRoaXMuZXNmLmxpc3REYXRhLmxlbmd0aCkuZmlsdGVyKGVsID0+IGVsLmlzU2VsZWN0ZWQgfHwgZWwuaXNGaWx0ZXJlZCkgOlxuICAgICAgICAgICAgICAgIHRoaXMuZXNmLmxpc3REYXRhLnNsaWNlKDEsIHRoaXMuZXNmLmxpc3REYXRhLmxlbmd0aCkuZmlsdGVyKGVsID0+IGVsLmlzU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHVuc2VsZWN0ZWRJdGVtO1xuICAgICAgICBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbCgpKSB7XG4gICAgICAgICAgICB1bnNlbGVjdGVkSXRlbSA9IHRoaXMuZXNmLmxpc3REYXRhLmZpbmQoZWwgPT4gZWwuaXNTZWxlY3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5zZWxlY3RlZEl0ZW0gPSB0aGlzLmVzZi5saXN0RGF0YS5zbGljZSgxLCB0aGlzLmVzZi5saXN0RGF0YS5sZW5ndGgpLmZpbmQoZWwgPT4gZWwuaXNTZWxlY3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPD0gSWd4RXhjZWxTdHlsZVNlYXJjaENvbXBvbmVudC5maWx0ZXJPcHRpbWl6YXRpb25UaHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZSAhPT0gbnVsbCAmJiBlbGVtZW50LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVzZi5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gdGhpcy5jcmVhdGVDb25kaXRpb24oZWxlbWVudC52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29uZGl0aW9uID0gdGhpcy5lc2YuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSA/ICdhdCcgOiAnZXF1YWxzJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSB0aGlzLmNyZWF0ZUNvbmRpdGlvbihmaWx0ZXJDb25kaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gdGhpcy5jcmVhdGVDb25kaXRpb24oJ2VtcHR5Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogdGhpcy5lc2YuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogdGhpcy5lc2YuY29sdW1uLmZpbHRlcmluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hWYWw6IGVsZW1lbnQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsYW5rc0l0ZW1JbmRleCA9IHNlbGVjdGVkSXRlbXMuZmluZEluZGV4KGUgPT4gZS52YWx1ZSA9PT0gbnVsbCB8fCBlLnZhbHVlID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGxldCBibGFua3NJdGVtOiBhbnk7XG4gICAgICAgICAgICAgICAgaWYgKGJsYW5rc0l0ZW1JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rc0l0ZW0gPSBzZWxlY3RlZEl0ZW1zW2JsYW5rc0l0ZW1JbmRleF07XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuc3BsaWNlKGJsYW5rc0l0ZW1JbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlclRyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogdGhpcy5jcmVhdGVDb25kaXRpb24oJ2luJyksXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogdGhpcy5lc2YuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiB0aGlzLmVzZi5jb2x1bW4uZmlsdGVyaW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoVmFsOiBuZXcgU2V0KHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMubWFwKGQgPT4gZC52YWx1ZS50b0lTT1N0cmluZygpKSA6IHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlRpbWUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMubWFwKGUgPT4gZS52YWx1ZS50b0xvY2FsZVRpbWVTdHJpbmcoKSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMubWFwKGUgPT4gZS52YWx1ZSkpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYmxhbmtzSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiB0aGlzLmNyZWF0ZUNvbmRpdGlvbignZW1wdHknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogdGhpcy5lc2YuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogdGhpcy5lc2YuY29sdW1uLmZpbHRlcmluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hWYWw6IGJsYW5rc0l0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZXNmLmdyaWQ7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmVzZi5jb2x1bW47XG4gICAgICAgICAgICBncmlkLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVySW50ZXJuYWwoY29sLmZpZWxkLCBmaWx0ZXJUcmVlKTtcbiAgICAgICAgICAgIHRoaXMuZXNmLmV4cHJlc3Npb25zTGlzdCA9IG5ldyBBcnJheTxFeHByZXNzaW9uVUk+KCk7XG4gICAgICAgICAgICBncmlkLmZpbHRlcmluZ1NlcnZpY2UuZ2VuZXJhdGVFeHByZXNzaW9uc0xpc3QoY29sLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICBncmlkLmZpbHRlcmluZ0xvZ2ljLCB0aGlzLmVzZi5leHByZXNzaW9uc0xpc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lc2YuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmNsZWFyRmlsdGVyKHRoaXMuZXNmLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVzZi5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNIaWVyYXJjaGljYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVzZi5pc0hpZXJhcmNoaWNhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc1RyZWVFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXNmLmlzSGllcmFyY2hpY2FsICYmIHRoaXMuZGlzcGxheWVkTGlzdERhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGllcmFyY2hpY2FsU2VsZWN0TWF0Y2hlcyhkYXRhOiBGaWx0ZXJMaXN0SXRlbVtdLCBzZWFyY2hWYWw6IHN0cmluZykge1xuICAgICAgICBkYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGVsZW1lbnQuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZS5ub2Rlcy5maWx0ZXIobiA9PiAobi5kYXRhIGFzIEZpbHRlckxpc3RJdGVtKS5sYWJlbCA9PT0gZWxlbWVudC5sYWJlbClbMF07XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVmFsKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbFNlbGVjdEFsbENoaWxkcmVuKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlbiA9IHRoaXMuaGllcmFyY2hpY2FsU2VsZWN0TWF0Y2hlcyhlbGVtZW50LmNoaWxkcmVuLCBzZWFyY2hWYWwpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50LmlzU2VsZWN0ZWQgPT09IHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGllcmFyY2hpY2FsU2VsZWN0QWxsQ2hpbGRyZW4oZWxlbWVudDogRmlsdGVyTGlzdEl0ZW0pIHtcbiAgICAgICAgZWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGNoaWxkLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNoaWxkLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY2FsU2VsZWN0QWxsQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kQWxsUGFyZW50Tm9kZXMobm9kZTogYW55KSB7XG4gICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZEFsbFBhcmVudE5vZGVzKG5vZGUucGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEZpbHRlcmVkVG9TZWxlY3RlZEl0ZW1zKHJlY29yZHM6IEZpbHRlckxpc3RJdGVtW10pIHtcbiAgICAgICAgcmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiB7XG4gICAgICAgICAgICBpZiAocmVjb3JkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGaWx0ZXJlZFRvU2VsZWN0ZWRJdGVtcyhyZWNvcmQuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmlzRmlsdGVyZWQgJiYgdGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcy5pbmRleE9mKHJlY29yZCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcy5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDb25kaXRpb24oY29uZGl0aW9uTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5lc2YuY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIHJldHVybiBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpLmNvbmRpdGlvbihjb25kaXRpb25OYW1lKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkN1cnJlbmN5OlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuUGVyY2VudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpLmNvbmRpdGlvbihjb25kaXRpb25OYW1lKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCkuY29uZGl0aW9uKGNvbmRpdGlvbk5hbWUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gSWd4VGltZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oY29uZGl0aW9uTmFtZSk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCkuY29uZGl0aW9uKGNvbmRpdGlvbk5hbWUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpLmNvbmRpdGlvbihjb25kaXRpb25OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWplY3ROb25OdW1lcmljYWxFbnRyaWVzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWdFeHAgPSAvW14wLTlcXC4sZUVcXC1dL2c7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlICYmIHJlZ0V4cC50ZXN0KHRoaXMuc2VhcmNoVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0LnZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZS5yZXBsYWNlKHJlZ0V4cCwgJycpO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoSW5wdXQudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8aWd4LWlucHV0LWdyb3VwXG4gICAgICAgICAgICB0eXBlPVwiYm94XCJcbiAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJlc2YuZGlzcGxheURlbnNpdHlcIj5cbiAgICA8aWd4LWljb24gaWd4UHJlZml4PnNlYXJjaDwvaWd4LWljb24+XG4gICAgPGlucHV0XG4gICAgICAgICNpbnB1dFxuICAgICAgICBpZ3hJbnB1dFxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyTGlzdERhdGEoKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZXNmLmNvbHVtbj8uZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VhcmNoX3BsYWNlaG9sZGVyXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIvPlxuICAgIDxpZ3gtaWNvblxuICAgICAgICBpZ3hTdWZmaXhcbiAgICAgICAgKm5nSWY9XCJzZWFyY2hWYWx1ZSB8fCBzZWFyY2hWYWx1ZSA9PT0gMFwiXG4gICAgICAgIChjbGljayk9XCJjbGVhcklucHV0KClcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgY2xlYXJcbiAgICA8L2lneC1pY29uPlxuPC9pZ3gtaW5wdXQtZ3JvdXA+XG5cbjxpZ3gtbGlzdCAjbGlzdCBbZGlzcGxheURlbnNpdHldPVwiZXNmLmRpc3BsYXlEZW5zaXR5XCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIiAqbmdJZj1cIiFpc0hpZXJhcmNoaWNhbCgpXCI+XG4gICAgPGRpdiBzdHlsZT1cIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cbiAgICAgICAgPGlneC1saXN0LWl0ZW1cbiAgICAgICAgKmlneEZvcj1cImxldCBpdGVtIG9mIGRpc3BsYXllZExpc3REYXRhIHNjcm9sbE9yaWVudGF0aW9uIDogJ3ZlcnRpY2FsJzsgY29udGFpbmVyU2l6ZTogY29udGFpbmVyU2l6ZTsgaXRlbVNpemU6IGl0ZW1TaXplXCI+XG4gICAgICAgICAgICA8aWd4LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXRlbT8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXRlbT8uaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVUcmFuc2l0aW9uc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvaWd4LWNoZWNrYm94PlxuICAgICAgICA8L2lneC1saXN0LWl0ZW0+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgaWd4RGF0YUxvYWRpbmc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19sb2FkaW5nXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmFsdWVzTG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBpZ3hFbXB0eUxpc3Q+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVNlYXJjaFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2lneC1saXN0PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fdHJlZVwiICpuZ0lmPVwiaXNIaWVyYXJjaGljYWwoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX190cmVlLWFsaWtlXCIgKm5nSWY9XCIhaXNUcmVlRW1wdHkoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fdHJlZS1hbGlrZS1pdGVtXCI+XG4gICAgICAgICAgICA8aWd4LWNoZWNrYm94ICNzZWxlY3RBbGxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0QWxsSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdEFsbEl0ZW0/LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0QWxsSXRlbT8uaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVHJhbnNpdGlvbnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RBbGxDaGVja2JveENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0QWxsSXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9pZ3gtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fdHJlZS1hbGlrZS1pdGVtXCIgKm5nSWY9XCJzZWFyY2hWYWx1ZVwiPlxuICAgICAgICAgICAgPGlneC1jaGVja2JveCAjYWRkVG9DdXJyZW50RmlsdGVyQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFkZFRvQ3VycmVudEZpbHRlckl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhZGRUb0N1cnJlbnRGaWx0ZXJJdGVtLmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUcmFuc2l0aW9uc109XCJ0cnVlXCI+XG5cbiAgICAgICAgICAgICAgICB7eyBhZGRUb0N1cnJlbnRGaWx0ZXJJdGVtLmxhYmVsIH19XG4gICAgICAgICAgICA8L2lneC1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8aWd4LXRyZWUgI3RyZWUgW2Rpc3BsYXlEZW5zaXR5XT1cImVzZi5kaXNwbGF5RGVuc2l0eVwiIHNlbGVjdGlvbj1cIkNhc2NhZGluZ1wiICAobm9kZVNlbGVjdGlvbik9XCJvbk5vZGVTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJpdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGlzcGxheWVkTGlzdERhdGE7XCIgW3NlbGVjdGVkXT1cIml0ZW0uaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgPGRpdj57e2l0ZW0ubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDFcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDEgb2YgaXRlbS5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsMS5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgPGRpdj57e2NoaWxkTGV2ZWwxLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsMlwiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsMiBvZiBjaGlsZExldmVsMS5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsMi5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsMi5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImNoaWxkTGV2ZWwzXCIgKm5nRm9yPVwibGV0IGNoaWxkTGV2ZWwzIG9mIGNoaWxkTGV2ZWwyLmNoaWxkcmVuXCIgW3NlbGVjdGVkXT1cImNoaWxkTGV2ZWwzLmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsMy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsNFwiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsNCBvZiBjaGlsZExldmVsMy5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsNC5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2NoaWxkTGV2ZWw0LmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsNVwiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsNSBvZiBjaGlsZExldmVsNC5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsNS5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsNS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImNoaWxkTGV2ZWw2XCIgKm5nRm9yPVwibGV0IGNoaWxkTGV2ZWw2IG9mIGNoaWxkTGV2ZWw1LmNoaWxkcmVuXCIgW3NlbGVjdGVkXT1cImNoaWxkTGV2ZWw2LmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsNi5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsN1wiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsNyBvZiBjaGlsZExldmVsNi5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsNy5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2NoaWxkTGV2ZWw3LmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsOFwiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsOCBvZiBjaGlsZExldmVsNy5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsOC5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsOC5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImNoaWxkTGV2ZWw5XCIgKm5nRm9yPVwibGV0IGNoaWxkTGV2ZWw5IG9mIGNoaWxkTGV2ZWw4LmNoaWxkcmVuXCIgW3NlbGVjdGVkXT1cImNoaWxkTGV2ZWw5LmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsOS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICA8L2lneC10cmVlPlxuXG4gICAgPG5nLXRlbXBsYXRlIGlneERhdGFMb2FkaW5nPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fbG9hZGluZ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZhbHVlc0xvYWRpbmdUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNUcmVlRW1wdHkoKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlTZWFyY2hcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlTZWFyY2g+XG4gICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX2VtcHR5XCI+XG4gICAgICAgIHt7ZXNmLmdyaWQ/LnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9ub19tYXRjaGVzfX1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEV4Y2VsU3R5bGVMb2FkaW5nVmFsdWVzVGVtcGxhdGU+XG4gICAgPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPlxuICAgIDwvaWd4LWNpcmN1bGFyLWJhcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxmb290ZXIgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19tZW51LWZvb3RlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19jYW5jZWxcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgaWd4QnV0dG9uPVwiZmxhdFwiXG4gICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiZXNmLmRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJlc2YuY2FuY2VsKClcIj5cbiAgICAgICAgICAgICAgICB7eyBlc2YuZ3JpZD8ucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX2NhbmNlbCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fYXBwbHlcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgaWd4QnV0dG9uPVwicmFpc2VkXCJcbiAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJlc2YuZGlzcGxheURlbnNpdHlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFwcGx5QnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5RmlsdGVyKClcIj5cbiAgICAgICAgICAgICAgICB7eyBlc2YuZ3JpZD8ucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX2FwcGx5IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9mb290ZXI+XG4iXX0=
|