igniteui-angular 17.2.2 → 17.2.4
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/esm2022/lib/buttonGroup/buttonGroup.component.mjs +1 -5
- package/esm2022/lib/directives/for-of/for_of.directive.mjs +17 -12
- package/esm2022/lib/grids/common/crud.service.mjs +9 -6
- package/esm2022/lib/grids/grid-base.directive.mjs +20 -9
- package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +2 -2
- package/esm2022/lib/navbar/navbar.component.mjs +3 -3
- package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +2 -31
- package/fesm2022/igniteui-angular.mjs +47 -61
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/core/styles/components/bottom-nav/_bottom-nav-component.scss +2 -0
- package/lib/core/styles/components/bottom-nav/_bottom-nav-theme.scss +107 -24
- package/lib/core/styles/components/button/_button-theme.scss +17 -3
- package/lib/core/styles/components/button-group/_button-group-theme.scss +6 -6
- package/lib/core/styles/components/navbar/_navbar-component.scss +4 -0
- package/lib/core/styles/components/navbar/_navbar-theme.scss +67 -26
- package/lib/core/styles/components/navdrawer/_navdrawer-theme.scss +43 -33
- package/lib/core/styles/components/switch/_switch-component.scss +12 -0
- package/lib/core/styles/components/switch/_switch-theme.scss +24 -18
- package/lib/core/styles/typography/_indigo.scss +10 -3
- package/lib/directives/for-of/for_of.directive.d.ts +2 -2
- package/lib/grids/grid-base.directive.d.ts +1 -1
- package/lib/navigation-drawer/navigation-drawer.component.d.ts +5 -5
- package/migrations/migration-collection.json +5 -0
- package/migrations/update-17_2_3/changes/theme-changes.json +17 -0
- package/migrations/update-17_2_3/index.d.ts +3 -0
- package/migrations/update-17_2_3/index.js +31 -0
- package/package.json +2 -2
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -33,7 +33,7 @@ import * as i0 from "@angular/core";
|
|
|
33
33
|
*/
|
|
34
34
|
export class IgxPivotHeaderRowComponent extends IgxGridHeaderRowComponent {
|
|
35
35
|
get headerForOf() {
|
|
36
|
-
return this.headerContainers
|
|
36
|
+
return this.headerContainers?.last;
|
|
37
37
|
}
|
|
38
38
|
constructor(grid, ref, cdr, renderer) {
|
|
39
39
|
super(ref, cdr);
|
|
@@ -468,4 +468,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
468
468
|
type: ViewChildren,
|
|
469
469
|
args: ['headerVirtualContainer', { read: IgxGridForOfDirective }]
|
|
470
470
|
}] } });
|
|
471
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtaGVhZGVyLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1oZWFkZXItcm93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWhlYWRlci1yb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUlOLFNBQVMsRUFFVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBcUMsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvSSxPQUFPLEVBQWMsYUFBYSxFQUFpQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxD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cG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElCYXNlQ2hpcEV2ZW50QXJncywgSWd4Q2hpcENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NoaXBzL2NoaXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneENoaXBzQXJlYUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NoaXBzL2NoaXBzLWFyZWEuY29tcG9uZW50JztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IElTZWxlY3Rpb25FdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksIEF1dG9Qb3NpdGlvblN0cmF0ZWd5LCBPdmVybGF5U2V0dGluZ3MsIFBvc2l0aW9uU2V0dGluZ3MsIFZlcnRpY2FsQWxpZ25tZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBJR1hfR1JJRF9CQVNFLCBQaXZvdEdyaWRUeXBlIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2hlYWRlcnMvZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuLi9oZWFkZXJzL2dyaWQtaGVhZGVyLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJvcFBvc2l0aW9uIH0gZnJvbSAnLi4vbW92aW5nL21vdmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IElQaXZvdEFnZ3JlZ2F0b3IsIElQaXZvdERpbWVuc2lvbiwgSVBpdm90VmFsdWUsIFBpdm90RGltZW5zaW9uVHlwZSB9IGZyb20gJy4vcGl2b3QtZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi9waXZvdC11dGlsJztcbmltcG9ydCB7IElneEdyaWRUb3BMZXZlbENvbHVtbnMgfSBmcm9tICcuLi9jb21tb24vcGlwZXMnO1xuaW1wb3J0IHsgSWd4SGVhZGVyR3JvdXBXaWR0aFBpcGUsIElneEhlYWRlckdyb3VwU3R5bGVQaXBlIH0gZnJvbSAnLi4vaGVhZGVycy9waXBlcyc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsdGVyaW5nL2V4Y2VsLXN0eWxlL2V4Y2VsLXN0eWxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQsIElneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUsIElneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9kcm9wLWRvd24vZHJvcC1kb3duLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kcm9wLWRvd24vZHJvcC1kb3duLW5hdmlnYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4QmFkZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iYWRnZS9iYWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hEcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9kcmFnLWRyb3AvZHJhZy1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgTmdUZW1wbGF0ZU91dGxldCwgTmdDbGFzcywgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKlxuICpcbiAqIEZvciBhbGwgaW50ZW50cyAmIHB1cnBvc2VzIHRyZWF0IHRoaXMgY29tcG9uZW50IGFzIHdoYXQgYSA8dGhlYWQ+IHVzdWFsbHkgaXMgaW4gdGhlIGRlZmF1bHQgPHRhYmxlPiBlbGVtZW50LlxuICpcbiAqIFRoaXMgY29udGFpbmVyIGhvbGRzIHRoZSBwaXZvdCBncmlkIGhlYWRlciBlbGVtZW50cyBhbmQgdGhlaXIgYmVoYXZpb3IvaW50ZXJhY3Rpb25zLlxuICpcbiAqIEBoaWRkZW4gQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LXBpdm90LWhlYWRlci1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9waXZvdC1oZWFkZXItcm93LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBJZ3hEcm9wRGlyZWN0aXZlLCBJZ3hDaGlwc0FyZWFDb21wb25lbnQsIE5nRm9yLCBJZ3hDaGlwQ29tcG9uZW50LCBJZ3hJY29uQ29tcG9uZW50LCBJZ3hQcmVmaXhEaXJlY3RpdmUsIElneEJhZGdlQ29tcG9uZW50LCBJZ3hTdWZmaXhEaXJlY3RpdmUsIElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCwgTmdDbGFzcywgTmdTdHlsZSwgSWd4R3JpZEZvck9mRGlyZWN0aXZlLCBJZ3hEcm9wRG93bkNvbXBvbmVudCwgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50LCBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RXhjZWxTdHlsZVNlYXJjaENvbXBvbmVudCwgSWd4SGVhZGVyR3JvdXBXaWR0aFBpcGUsIElneEhlYWRlckdyb3VwU3R5bGVQaXBlLCBJZ3hHcmlkVG9wTGV2ZWxDb2x1bW5zXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdEhlYWRlclJvd0NvbXBvbmVudCBleHRlbmRzIElneEdyaWRIZWFkZXJSb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIHB1YmxpYyBhZ2dyZWdhdGVMaXN0OiBJUGl2b3RBZ2dyZWdhdG9yW10gPSBbXTtcblxuICAgIHB1YmxpYyB2YWx1ZTogSVBpdm90VmFsdWU7XG4gICAgcHVibGljIGZpbHRlckRyb3Bkb3duRGltZW5zaW9uczogU2V0PGFueT4gPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwdWJsaWMgZmlsdGVyQXJlYURpbWVuc2lvbnM6IFNldDxhbnk+ID0gbmV3IFNldDxhbnk+KCk7XG4gICAgcHJpdmF0ZSBfZHJvcFBvcyA9IERyb3BQb3NpdGlvbi5BZnRlckRyb3BUYXJnZXQ7XG4gICAgcHJpdmF0ZSB2YWx1ZURhdGE6IE1hcDxzdHJpbmcsIElQaXZvdEFnZ3JlZ2F0b3JbXT47XG4gICAgcHJpdmF0ZSBfc3ViTWVudVBvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICBjbG9zZUFuaW1hdGlvbjogdW5kZWZpbmVkXG4gICAgfTtcbiAgICBwcml2YXRlIF9zdWJNZW51T3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogbmV3IEF1dG9Qb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3N1Yk1lbnVQb3NpdGlvblNldHRpbmdzKSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KClcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdlc2YnKSBwdWJsaWMgZXNmOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbHRlckFyZWFIaWRkZW4nLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGZpbHRlckFyZWE7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbHRlckljb24nKSBwdWJsaWMgZmlsdGVyc0J1dHRvbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZHJvcGRvd25DaGlwcycpIHB1YmxpYyBkcm9wZG93bkNoaXBzO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdwaXZvdEZpbHRlckNvbnRhaW5lcicpIHB1YmxpYyBwaXZvdEZpbHRlckNvbnRhaW5lcjtcblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCdub3RpZnlDaGlwJylcbiAgICBwdWJsaWMgbm90aWZpY2F0aW9uQ2hpcHM6IFF1ZXJ5TGlzdDxJZ3hDaGlwQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKiBUaGUgdmlydHVhbGl6ZWQgcGFydCBvZiB0aGUgaGVhZGVyIHJvdyBjb250YWluaW5nIHRoZSB1bnBpbm5lZCBoZWFkZXIgZ3JvdXBzLlxuICAgICovXG4gICAgQFZpZXdDaGlsZHJlbignaGVhZGVyVmlydHVhbENvbnRhaW5lcicsIHsgcmVhZDogSWd4R3JpZEZvck9mRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIGhlYWRlckNvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxJZ3hHcmlkRm9yT2ZEaXJlY3RpdmU8Q29sdW1uVHlwZSwgQ29sdW1uVHlwZVtdPj47XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhlYWRlckZvck9mKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXJDb250YWluZXJzLmxhc3Q7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHVibGljIG92ZXJyaWRlIGdyaWQ6IFBpdm90R3JpZFR5cGUsXG4gICAgICAgIHJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICkge1xuICAgICAgICBzdXBlcihyZWYsIGNkcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqIERlZmF1bHQgaXMgYSBzaW5nbGUgZW1wdHkgbGV2ZWwgc2luY2UgZGVmYXVsdCBkZXB0aCBpcyAxXG4gICAgKi9cbiAgICBwdWJsaWMgY29sdW1uRGltZW5zaW9uc0J5TGV2ZWw6IGFueVtdID0gW1tdXTtcblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNGaWx0ZXJzQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY2hpcHNXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMuZmlsdGVyRHJvcGRvd25EaW1lbnNpb25zLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyQXJlYURpbWVuc2lvbnMuY2xlYXIoKTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyQXJlYT8uY2hpcHNMaXN0ICYmIHRoaXMuZmlsdGVyQXJlYS5jaGlwc0xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMucGl2b3RGaWx0ZXJDb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJQYWRkaW5ncyA9IHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdSaWdodCk7XG4gICAgICAgICAgICBjaGlwc1dpZHRoICs9IGNvbnRhaW5lclBhZGRpbmdzICsgKHRoaXMuZmlsdGVyc0J1dHRvbiAmJiB0aGlzLmZpbHRlckFyZWE/LmNoaXBzTGlzdC5sZW5ndGggPiAxID8gdGhpcy5maWx0ZXJzQnV0dG9uLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggOiAwKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQXJlYS5jaGlwc0xpc3QuZm9yRWFjaChjaGlwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW0gPSB0aGlzLmdyaWQuZmlsdGVyRGltZW5zaW9ucy5maW5kKHggPT4geC5tZW1iZXJOYW1lID09PSBjaGlwLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoZGltKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIDggcHggbWFyZ2luIGJldHdlZW4gY2hpcHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENoaXBXaWR0aCA9IGNoaXAubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArIDg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlwc1dpZHRoICsgY3VycmVudENoaXBXaWR0aCA8IHRoaXMuZ3JpZC5waXZvdFJvd1dpZHRocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJBcmVhRGltZW5zaW9ucy5hZGQoZGltKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRHJvcGRvd25EaW1lbnNpb25zLmFkZChkaW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoaXBzV2lkdGggKz0gY3VycmVudENoaXBXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlckRyb3Bkb3duRGltZW5zaW9ucy5zaXplID4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgdG90YWxEZXB0aCgpIHtcbiAgICAgICAgY29uc3QgY29sdW1uRGltZW5zaW9ucyA9IHRoaXMuZ3JpZC5jb2x1bW5EaW1lbnNpb25zO1xuICAgICAgICBpZiAoY29sdW1uRGltZW5zaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0b3RhbERlcHRoID0gY29sdW1uRGltZW5zaW9ucy5tYXAoeCA9PiBQaXZvdFV0aWwuZ2V0RGltZW5zaW9uRGVwdGgoeCkgKyAxKS5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc011bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICB0b3RhbERlcHRoICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvdGFsRGVwdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgbWF4Q29udGFpbmVySGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b3RhbERlcHRoICogdGhpcy5ncmlkLnJlbmRlcmVkUm93SGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgY2FsY0hlaWdodChjb2w6IENvbHVtblR5cGUsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuICFjb2wuY29sdW1uR3JvdXAgJiYgY29sLmxldmVsIDwgdGhpcy50b3RhbERlcHRoICYmIGNvbC5sZXZlbCA9PT0gaW5kZXggPyAodGhpcy50b3RhbERlcHRoIC0gY29sLmxldmVsKSAqIHRoaXMuZ3JpZC5yb3dIZWlnaHQgOiB0aGlzLmdyaWQucm93SGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgaXNEdXBsaWNhdGVPZkV4aXN0aW5nUGFyZW50KGNvbDogQ29sdW1uVHlwZSwgbHZsOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGFyZW50Q29sbGVjdGlvbiA9IGx2bCA+IDAgPyB0aGlzLmNvbHVtbkRpbWVuc2lvbnNCeUxldmVsW2x2bCAtIDFdIDogW107XG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHBhcmVudENvbGxlY3Rpb24uaW5kZXhPZihjb2wpICE9PSAtMTtcblxuICAgICAgICByZXR1cm4gZHVwbGljYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgaXNNdWx0aVJvdyhjb2w6IENvbHVtblR5cGUsIGx2bDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGlzTGVhZiA9ICFjb2wuY29sdW1uR3JvdXA7XG4gICAgICAgIHJldHVybiBpc0xlYWYgJiYgbHZsICE9PSB0aGlzLnRvdGFsRGVwdGggLSAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgcG9wdWxhdGVDb2x1bW5EaW1lbnNpb25zQnlMZXZlbCgpIHtcbiAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50b3RhbERlcHRoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc1tpXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbHMgPSB0aGlzLnVucGlubmVkQ29sdW1uQ29sbGVjdGlvbjtcbiAgICAgICAgLy8gcG9wdWxhdGUgY29sdW1uIGRpbWVuc2lvbiBtYXRyaXggcmVjdXJzaXZlbHlcbiAgICAgICAgdGhpcy5wb3B1bGF0ZURpbWVuc2lvblJlY3Vyc2l2ZWx5KGNvbHMuZmlsdGVyKHggPT4geC5sZXZlbCA9PT0gMCksIDAsIHJlcyk7XG4gICAgICAgIHRoaXMuY29sdW1uRGltZW5zaW9uc0J5TGV2ZWwgPSByZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHBvcHVsYXRlRGltZW5zaW9uUmVjdXJzaXZlbHkoY3VycmVudExldmVsQ29sdW1uczogQ29sdW1uVHlwZVtdLCBsZXZlbCA9IDAsIHJlczogYW55W10pIHtcbiAgICAgICAgY3VycmVudExldmVsQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAocmVzW2xldmVsXSkge1xuICAgICAgICAgICAgICAgIHJlc1tsZXZlbF0ucHVzaChjb2wpO1xuICAgICAgICAgICAgICAgIGlmIChjb2wuY29sdW1uR3JvdXAgJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBjb2wuY2hpbGRyZW4udG9BcnJheSgpLmZpbHRlcih4ID0+ICF4LmhpZGRlbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVEaW1lbnNpb25SZWN1cnNpdmVseSh2aXNpYmxlQ29sdW1ucywgbGV2ZWwgKyAxLCByZXMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPCB0aGlzLnRvdGFsRGVwdGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBsZXZlbCArIDE7IGkgPD0gdGhpcy50b3RhbERlcHRoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNbaV0ucHVzaChjb2wpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudW5waW5uZWRDb2x1bW5Db2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlQ29sdW1uRGltZW5zaW9uc0J5TGV2ZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb25EaW1EcmFnU3RhcnQoZXZlbnQsIGFyZWEpIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoaXAgb2YgdGhpcy5ub3RpZmljYXRpb25DaGlwcykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gY2hpcC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoYXJlYS5jaGlwc0xpc3QudG9BcnJheSgpLmluZGV4T2YoY2hpcCkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4uaXRlbSgwKS5pZCAhPT0gJ2VtcHR5Jykge1xuICAgICAgICAgICAgICAgIGNoaXAubmF0aXZlRWxlbWVudC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBwYXJlbnQucGFyZW50RWxlbWVudC5zY3JvbGxUbyh7IGxlZnQ6IGNoaXAubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvbkRpbURyYWdFbmQoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpcCBvZiB0aGlzLm5vdGlmaWNhdGlvbkNoaXBzKSB7XG4gICAgICAgICAgICBjaGlwLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0QXJlYUhlaWdodChhcmVhOiBJZ3hDaGlwc0FyZWFDb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgY2hpcHMgPSBhcmVhLmNoaXBzTGlzdDtcbiAgICAgICAgcmV0dXJuIGNoaXBzICYmIGNoaXBzLmxlbmd0aCA+IDAgPyBjaGlwcy5maXJzdC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyByb3dSZW1vdmVkKGV2ZW50OiBJQmFzZUNoaXBFdmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzLmZpbmQoeCA9PiB4Lm1lbWJlck5hbWUgPT09IGV2ZW50Lm93bmVyLmlkKTtcbiAgICAgICAgdGhpcy5ncmlkLnRvZ2dsZURpbWVuc2lvbihyb3cpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgY29sdW1uUmVtb3ZlZChldmVudDogSUJhc2VDaGlwRXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1ucy5maW5kKHggPT4geC5tZW1iZXJOYW1lID09PSBldmVudC5vd25lci5pZCk7XG4gICAgICAgIHRoaXMuZ3JpZC50b2dnbGVEaW1lbnNpb24oY29sKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIHZhbHVlUmVtb3ZlZChldmVudDogSUJhc2VDaGlwRXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5ncmlkLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMuZmluZCh4ID0+IHgubWVtYmVyID09PSBldmVudC5vd25lci5pZCB8fCB4LmRpc3BsYXlOYW1lID09PSBldmVudC5vd25lci5pZCk7XG4gICAgICAgIHRoaXMuZ3JpZC50b2dnbGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBmaWx0ZXJSZW1vdmVkKGV2ZW50OiBJQmFzZUNoaXBFdmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5ncmlkLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzLmZpbmQoeCA9PiB4Lm1lbWJlck5hbWUgPT09IGV2ZW50Lm93bmVyLmlkKTtcbiAgICAgICAgdGhpcy5ncmlkLnRvZ2dsZURpbWVuc2lvbihmaWx0ZXIpO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJEcm9wZG93bkRpbWVuc2lvbnMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMub25GaWx0ZXJzQXJlYURyb3Bkb3duQ2xpY2soeyB0YXJnZXQ6IHRoaXMuZmlsdGVyc0J1dHRvbi5lbC5uYXRpdmVFbGVtZW50IH0sIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuaGlkZUVTRigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uRmlsdGVyc1NlbGVjdGlvbkNoYW5nZWQoZXZlbnQ/OiBJQmFzZUNoaXBFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bkNoaXBzLmNoaXBzTGlzdC5mb3JFYWNoKGNoaXAgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaXAuaWQgIT09IGV2ZW50Lm93bmVyLmlkKSB7XG4gICAgICAgICAgICAgICAgY2hpcC5zZWxlY3RlZCA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uRmlsdGVyc0FyZWFEcm9wZG93bkNsaWNrKHsgdGFyZ2V0OiB0aGlzLmZpbHRlcnNCdXR0b24uZWwubmF0aXZlRWxlbWVudCB9LCB0aGlzLmdyaWQuZmlsdGVyRGltZW5zaW9ucy5maW5kKGRpbSA9PiBkaW0ubWVtYmVyTmFtZSA9PT0gZXZlbnQub3duZXIuaWQpLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvbkZpbHRlcmluZ0ljb25Qb2ludGVyRG93bihldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG9uRmlsdGVyaW5nSWNvbkNsaWNrKGV2ZW50LCBkaW1lbnNpb24pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGRpbSA9IGRpbWVuc2lvbjtcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5ncmlkLmRpbWVuc2lvbkRhdGFDb2x1bW5zLmZpbmQoeCA9PiB4LmZpZWxkID09PSBkaW0ubWVtYmVyTmFtZSB8fCB4LmZpZWxkID09PSBkaW0ubWVtYmVyKTtcbiAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UudG9nZ2xlRmlsdGVyRHJvcGRvd24oZXZlbnQudGFyZ2V0LCBjb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb25TdW1tYXJ5Q2xpY2soZXZlbnRBcmdzLCB2YWx1ZTogSVBpdm90VmFsdWUsIGRyb3Bkb3duOiBJZ3hEcm9wRG93bkNvbXBvbmVudCwgY2hpcDogSWd4Q2hpcENvbXBvbmVudCkge1xuICAgICAgICB0aGlzLl9zdWJNZW51T3ZlcmxheVNldHRpbmdzLnRhcmdldCA9IGV2ZW50QXJncy5jdXJyZW50VGFyZ2V0O1xuICAgICAgICB0aGlzLnVwZGF0ZURyb3BEb3duKHZhbHVlLCBkcm9wZG93biwgY2hpcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25GaWx0ZXJzQXJlYURyb3Bkb3duQ2xpY2soZXZlbnQsIGRpbWVuc2lvbj8sIHNob3VsZFJlYXR0YWNoID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBkaW0gPSBkaW1lbnNpb24gfHwgdGhpcy5maWx0ZXJEcm9wZG93bkRpbWVuc2lvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmdyaWQuZGltZW5zaW9uRGF0YUNvbHVtbnMuZmluZCh4ID0+IHguZmllbGQgPT09IGRpbS5tZW1iZXJOYW1lIHx8IHguZmllbGQgPT09IGRpbS5tZW1iZXIpO1xuICAgICAgICBpZiAoc2hvdWxkUmVhdHRhY2gpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25DaGlwcy5jaGlwc0xpc3QuZm9yRWFjaChjaGlwID0+IHtcbiAgICAgICAgICAgICAgICBjaGlwLnNlbGVjdGVkID0gZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNoaXBzLmNoaXBzTGlzdC5maXJzdC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UudG9nZ2xlRmlsdGVyc0VTRih0aGlzLmVzZiwgZXZlbnQudGFyZ2V0LCBjb2wsIHNob3VsZFJlYXR0YWNoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG9uQWdncmVnYXRpb25DaGFuZ2UoZXZlbnQ6IElTZWxlY3Rpb25FdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWQoZXZlbnQubmV3U2VsZWN0aW9uLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5hZ2dyZWdhdGUgPSBldmVudC5uZXdTZWxlY3Rpb24udmFsdWU7XG4gICAgICAgICAgICB0aGlzLmdyaWQucGlwZVRyaWdnZXIrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgaXNTZWxlY3RlZCh2YWw6IElQaXZvdEFnZ3JlZ2F0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuYWdncmVnYXRlLmtleSA9PT0gdmFsLmtleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG9uQ2hpcFNvcnQoX2V2ZW50LCBkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBjb25zdCBzdGFydERpcmVjdGlvbiA9IGRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uIHx8IFNvcnRpbmdEaXJlY3Rpb24uTm9uZTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc3RhcnREaXJlY3Rpb24gKyAxID4gU29ydGluZ0RpcmVjdGlvbi5EZXNjID9cbiAgICAgICAgICAgIFNvcnRpbmdEaXJlY3Rpb24uTm9uZSA6IHN0YXJ0RGlyZWN0aW9uICsgMTtcbiAgICAgICAgdGhpcy5ncmlkLnNvcnREaW1lbnNpb24oZGltZW5zaW9uLCBkaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb25EaW1EcmFnT3ZlcihldmVudCwgZGltZW5zaW9uPzogUGl2b3REaW1lbnNpb25UeXBlKSB7XG4gICAgICAgIGlmICghZXZlbnQuZHJhZ0NoaXAgfHwgIWV2ZW50LmRyYWdDaGlwLmRhdGE/LnBpdm90QXJlYSkgcmV0dXJuO1xuICAgICAgICBjb25zdCB0eXBlTWlzbWF0Y2ggPSBkaW1lbnNpb24gIT09IHVuZGVmaW5lZCA/IHRoaXMuZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzLmZpbmQoeCA9PiB4Lm1lbWJlciA9PT0gZXZlbnQuZHJhZ0NoaXAuaWRcbiAgICAgICAgICAgIHx8IHguZGlzcGxheU5hbWUgPT09IGV2ZW50LmRyYWdDaGlwLmlkKSA6XG4gICAgICAgICAgICAhdGhpcy5ncmlkLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMuZmluZCh4ID0+IHgubWVtYmVyID09PSBldmVudC5kcmFnQ2hpcC5pZCB8fCB4LmRpc3BsYXlOYW1lID09PSBldmVudC5kcmFnQ2hpcC5pZCk7XG4gICAgICAgIGlmICh0eXBlTWlzbWF0Y2gpIHtcbiAgICAgICAgICAgIC8vIGNhbm5vdCBkcmFnIGJldHdlZW4gZGltZW5zaW9ucyBhbmQgdmFsdWVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSBhcmUgaW4gdGhlIGxlZnQgaGFsZiBvZiB0aGUgY2hpcCwgZHJvcCBvbiB0aGUgbGVmdFxuICAgICAgICAvLyBlbHNlIGRyb3Agb24gdGhlIHJpZ2h0IG9mIHRoZSBjaGlwXG4gICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBldmVudC5vd25lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBwb3MgPSBjbGllbnRSZWN0LndpZHRoIC8gMjtcblxuICAgICAgICB0aGlzLl9kcm9wUG9zID0gZXZlbnQub3JpZ2luYWxFdmVudC5vZmZzZXRYID4gcG9zID8gRHJvcFBvc2l0aW9uLkFmdGVyRHJvcFRhcmdldCA6IERyb3BQb3NpdGlvbi5CZWZvcmVEcm9wVGFyZ2V0O1xuICAgICAgICBpZiAodGhpcy5fZHJvcFBvcyA9PT0gRHJvcFBvc2l0aW9uLkFmdGVyRHJvcFRhcmdldCkge1xuICAgICAgICAgICAgZXZlbnQub3duZXIubmF0aXZlRWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLm5hdGl2ZUVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLnN0eWxlLnZpc2liaWxpdHkgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLm5hdGl2ZUVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLm5hdGl2ZUVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG9uRGltRHJhZ0xlYXZlKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50Lm93bmVyLm5hdGl2ZUVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIGV2ZW50Lm93bmVyLm5hdGl2ZUVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgdGhpcy5fZHJvcFBvcyA9IERyb3BQb3NpdGlvbi5BZnRlckRyb3BUYXJnZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvbkFyZWFEcmFnTGVhdmUoZXZlbnQsIGFyZWEpIHtcbiAgICAgICAgY29uc3QgZGF0YUNoaXBzID0gYXJlYS5jaGlwc0xpc3QudG9BcnJheSgpLmZpbHRlcih4ID0+IHRoaXMubm90aWZpY2F0aW9uQ2hpcHMudG9BcnJheSgpLmluZGV4T2YoeCkgPT09IC0xKTtcbiAgICAgICAgZGF0YUNoaXBzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5uYXRpdmVFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5uYXRpdmVFbGVtZW50Lm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG9uVmFsdWVEcm9wKGV2ZW50LCBhcmVhKSB7XG4gICAgICAgIGlmICghKGV2ZW50LmRyYWdDaGlwICYmIGV2ZW50LmRyYWdDaGlwLmRhdGE/LnBpdm90QXJlYSkgJiYgIShldmVudC5kcmFnRGF0YT8uY2hpcCAmJiAhIWV2ZW50LmRyYWdEYXRhLmNoaXAuZGF0YS5waXZvdEFyZWEpKSByZXR1cm47XG4gICAgICAgIC8vdmFsdWVzIGNhbiBvbmx5IGJlIHJlb3JkZXJlZFxuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcztcbiAgICAgICAgY29uc3QgZHJhZ0lkID0gZXZlbnQuZHJhZ0NoaXA/LmlkIHx8IGV2ZW50LmRyYWdEYXRhPy5jaGlwLmlkO1xuICAgICAgICBjb25zdCBjaGlwc0FycmF5ID0gYXJlYS5jaGlwc0xpc3QudG9BcnJheSgpO1xuICAgICAgICBsZXQgY2hpcEluZGV4ID0gY2hpcHNBcnJheS5pbmRleE9mKGV2ZW50Lm93bmVyKSAhPT0gLTEgPyBjaGlwc0FycmF5LmluZGV4T2YoZXZlbnQub3duZXIpIDogY2hpcHNBcnJheS5sZW5ndGg7XG4gICAgICAgIGNoaXBJbmRleCA9IHRoaXMuX2Ryb3BQb3MgPT09IERyb3BQb3NpdGlvbi5BZnRlckRyb3BUYXJnZXQgPyBjaGlwSW5kZXggKyAxIDogY2hpcEluZGV4O1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlcy5maW5kKHggPT4geC5tZW1iZXIgPT09IGRyYWdJZCB8fCB4LmRpc3BsYXlOYW1lID09PSBkcmFnSWQpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdDaGlwSW5kZXggPSBjaGlwc0FycmF5LmluZGV4T2YoZXZlbnQuZHJhZ0NoaXAgfHwgZXZlbnQuZHJhZ0RhdGEuY2hpcCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQubW92ZVZhbHVlKHZhbHVlLCBkcmFnQ2hpcEluZGV4ID49IGNoaXBJbmRleCA/IGNoaXBJbmRleCA6IGNoaXBJbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvbkRpbURyb3AoZXZlbnQsIGFyZWEsIGRpbWVuc2lvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZSkge1xuICAgICAgICBpZiAoIShldmVudC5kcmFnQ2hpcCAmJiBldmVudC5kcmFnQ2hpcC5kYXRhPy5waXZvdEFyZWEpICYmICEoZXZlbnQuZHJhZ0RhdGE/LmNoaXAgJiYgISFldmVudC5kcmFnRGF0YS5jaGlwLmRhdGEucGl2b3RBcmVhKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBkcmFnSWQgPSBldmVudC5kcmFnQ2hpcD8uaWQgfHwgZXZlbnQuZHJhZ0RhdGE/LmNoaXAuaWQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREaW0gPSB0aGlzLmdyaWQuZ2V0RGltZW5zaW9uc0J5VHlwZShkaW1lbnNpb25UeXBlKTtcbiAgICAgICAgY29uc3QgY2hpcHNBcnJheSA9IGFyZWEuY2hpcHNMaXN0LnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgY2hpcCA9IGNoaXBzQXJyYXkuZmluZCh4ID0+IHguaWQgPT09IGRyYWdJZCk7XG4gICAgICAgIGNvbnN0IGlzTmV3Q2hpcCA9IGNoaXAgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgaXNSZW9yZGVyID0gZXZlbnQub3duZXIuaWQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgLy9jb25zdCBjaGlwSW5kZXggPSBjaGlwc0FycmF5LmluZGV4T2YoZXZlbnQub3duZXIpICE9PSAtMSA/IGNoaXBzQXJyYXkuaW5kZXhPZihldmVudC5vd25lcikgOiBjaGlwc0FycmF5Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgY2hpcEluZGV4ID0gY3VycmVudERpbS5maW5kSW5kZXgoeCA9PiB4Lm1lbWJlck5hbWUgPT09IGV2ZW50Lm93bmVyLmlkKSAhPT0gLTEgP1xuICAgICAgICAgICAgY3VycmVudERpbS5maW5kSW5kZXgoeCA9PiB4Lm1lbWJlck5hbWUgPT09IGV2ZW50Lm93bmVyLmlkKSA6IGN1cnJlbnREaW0ubGVuZ3RoO1xuICAgICAgICBjb25zdCB0YXJnZXRJbmRleCA9IHRoaXMuX2Ryb3BQb3MgPT09IERyb3BQb3NpdGlvbi5BZnRlckRyb3BUYXJnZXQgPyBjaGlwSW5kZXggKyAxIDogY2hpcEluZGV4O1xuICAgICAgICBpZiAoaXNOZXdDaGlwKSB7XG4gICAgICAgICAgICAvLyBjaGlwIG1vdmVkIGZyb20gYW4gZXh0ZXJuYWwgY29sbGVjdGlvblxuICAgICAgICAgICAgY29uc3QgZGltID0gdGhpcy5ncmlkLmFsbERpbWVuc2lvbnMuZmluZCh4ID0+IHggJiYgeC5tZW1iZXJOYW1lID09PSBkcmFnSWQpO1xuICAgICAgICAgICAgaWYgKCFkaW0pIHtcbiAgICAgICAgICAgICAgICAvLyB5b3UgaGF2ZSBkcmFnZ2VkIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIGRpbWVuc2lvblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5tb3ZlRGltZW5zaW9uKGRpbSwgZGltZW5zaW9uVHlwZSwgdGFyZ2V0SW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVvcmRlcikge1xuICAgICAgICAgICAgLy8gY2hpcCBmcm9tIHNhbWUgY29sbGVjdGlvbiwgcmVvcmRlcmVkLlxuICAgICAgICAgICAgY29uc3QgbmV3RGltID0gY3VycmVudERpbS5maW5kKHggPT4geC5tZW1iZXJOYW1lID09PSBkcmFnSWQpO1xuICAgICAgICAgICAgY29uc3QgZHJhZ0NoaXBJbmRleCA9IGN1cnJlbnREaW0uZmluZEluZGV4KHggPT4geC5tZW1iZXJOYW1lID09PSBkcmFnSWQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm1vdmVEaW1lbnNpb24obmV3RGltLCBkaW1lbnNpb25UeXBlLCBkcmFnQ2hpcEluZGV4ID4gY2hpcEluZGV4ID8gdGFyZ2V0SW5kZXggOiB0YXJnZXRJbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmdyaWQuZGltZW5zaW9uc0NoYW5nZS5lbWl0KHsgZGltZW5zaW9uczogY3VycmVudERpbSwgZGltZW5zaW9uQ29sbGVjdGlvblR5cGU6IGRpbWVuc2lvblR5cGUgfSk7XG4gICAgICAgIC8vIGNsZWFuIHN0YXRlc1xuICAgICAgICB0aGlzLm9uRGltRHJhZ0VuZCgpO1xuICAgICAgICB0aGlzLm9uQXJlYURyYWdMZWF2ZShldmVudCwgYXJlYSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZURyb3BEb3duKHZhbHVlOiBJUGl2b3RWYWx1ZSwgZHJvcGRvd246IElneERyb3BEb3duQ29tcG9uZW50LCBjaGlwOiBJZ3hDaGlwQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgZHJvcGRvd24ud2lkdGggPSBjaGlwLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggKyAncHgnO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUxpc3QgPSBQaXZvdFV0aWwuZ2V0QWdncmVnYXRlTGlzdCh2YWx1ZSwgdGhpcy5ncmlkKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBkcm9wZG93bi5vcGVuKHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cbn1cbiIsIjxkaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkLXRoZWFkX193cmFwcGVyIGlneC1ncmlkLXRoZWFkX193cmFwcGVyLS1waXZvdFwiIHJvbGU9XCJyb3dcIiBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190clwiIHJvbGU9XCJyb3dcIiBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J2lneC1ncmlkX190ci1waXZvdC0tZmlsdGVyLWNvbnRhaW5lcic+XG4gICAgICAgICAgICAgICAgPGRpdiAjcGl2b3RGaWx0ZXJDb250YWluZXIgKm5nSWY9XCJncmlkLnNob3dQaXZvdENvbmZpZ3VyYXRpb25VSVwiXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1ncmlkX190ci1waXZvdCBpZ3gtZ3JpZF9fdHItcGl2b3QtLWZpbHRlclwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwiZ3JpZC5waXZvdFJvd1dpZHRocyAtIDFcIlxuICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJncmlkLnBpdm90Um93V2lkdGhzIC0gMVwiIChpZ3hEcmFnTGVhdmUpPVwib25BcmVhRHJhZ0xlYXZlKCRldmVudCwgZmlsdGVyQXJlYSlcIlxuICAgICAgICAgICAgICAgICAgICAgaWd4RHJvcCAoZHJvcHBlZCk9XCJvbkRpbURyb3AoJGV2ZW50LCBmaWx0ZXJBcmVhLCAyKVwiIChwb2ludGVyZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIEZpbHRlciBhcmVhIC0tPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWNoaXBzLWFyZWEgI2ZpbHRlckFyZWEgZHJvcHBhYmxlPSd0cnVlJz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9J2VtcHR5JyBpZ3hEcm9wIChkcm9wcGVkKT1cIm9uRGltRHJvcCgkZXZlbnQsIGZpbHRlckFyZWEsIDIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJncmlkLmZpbHRlckRpbWVuc2lvbnMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9J2lneC1ncmlkX19waXZvdC1lbXB0eS1jaGlwLWFyZWEnPnt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGl2b3RfZW1wdHlfZmlsdGVyX2Ryb3BfYXJlYX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIHRoaXMuZmlsdGVyQXJlYURpbWVuc2lvbnM7IGxldCBsYXN0ID0gbGFzdDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3RyLXBpdm90LS1jaGlwX2Ryb3BfaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPSdnZXRBcmVhSGVpZ2h0KGZpbHRlckFyZWEpJz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1jaGlwIFtpZF09XCJmaWx0ZXIubWVtYmVyTmFtZVwiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIFtkaXNwbGF5RGVuc2l0eV09XCJncmlkLmRpc3BsYXlEZW5zaXR5XCIgW2RhdGFdPVwieyBwaXZvdEFyZWE6ICdmaWx0ZXInIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlKT1cImZpbHRlclJlbW92ZWQoJGV2ZW50KVwiIChkcmFnT3Zlcik9XCJvbkRpbURyYWdPdmVyKCRldmVudCwgMilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ0xlYXZlKT1cIm9uRGltRHJhZ0xlYXZlKCRldmVudClcIiAoZHJhZ0Ryb3ApPVwib25EaW1Ecm9wKCRldmVudCwgZmlsdGVyQXJlYSwgMilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW92ZVN0YXJ0KT0nb25EaW1EcmFnU3RhcnQoJGV2ZW50LCBmaWx0ZXJBcmVhKScgKG1vdmVFbmQpPSdvbkRpbURyYWdFbmQoKSc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvbiBpZ3hQcmVmaXggKHBvaW50ZXJkb3duKT0nb25GaWx0ZXJpbmdJY29uUG9pbnRlckRvd24oJGV2ZW50KSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9J29uRmlsdGVyaW5nSWNvbkNsaWNrKCRldmVudCwgZmlsdGVyKSc+ZmlsdGVyX2xpc3Q8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZpbHRlci5kaXNwbGF5TmFtZSB8fCBmaWx0ZXIubWVtYmVyTmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSdsYXN0Jz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190ci1waXZvdC0tY2hpcF9kcm9wX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09J2dldEFyZWFIZWlnaHQoZmlsdGVyQXJlYSknPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1jaGlwIGlneERyb3AgKGRyYWdEcm9wKT1cIm9uRGltRHJvcCgkZXZlbnQsIGZpbHRlckFyZWEsIDIpXCIgI25vdGlmeUNoaXAgW2hpZGRlbl09J3RydWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImdyaWQuZGlzcGxheURlbnNpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Bpdm90X2ZpbHRlcl9kcm9wX2NoaXB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgPC9pZ3gtY2hpcHMtYXJlYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19waXZvdC1maWx0ZXItdG9nZ2xlXCIgKm5nSWY9XCJpc0ZpbHRlcnNCdXR0b24gJiYgZ3JpZC5maWx0ZXJEaW1lbnNpb25zLmxlbmd0aCAhPT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uICNmaWx0ZXJJY29uIChwb2ludGVyZG93bik9J29uRmlsdGVyaW5nSWNvblBvaW50ZXJEb3duKCRldmVudCknIChjbGljayk9J29uRmlsdGVyc0FyZWFEcm9wZG93bkNsaWNrKCRldmVudCknPmZpbHRlcl9saXN0PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtYmFkZ2UgdmFsdWU9XCJ7e3RoaXMuZmlsdGVyRHJvcGRvd25EaW1lbnNpb25zLnNpemV9fVwiPjwvaWd4LWJhZGdlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdpZ3gtZ3JpZF9fdHItcGl2b3QtLWRyb3Atcm93LWFyZWEnIChpZ3hEcmFnTGVhdmUpPVwib25BcmVhRHJhZ0xlYXZlKCRldmVudCwgcm93QXJlYSlcIiBpZ3hEcm9wXG4gICAgICAgICAgICAgICAgICAgICAoZHJvcHBlZCk9XCJvbkRpbURyb3AoJGV2ZW50LCByb3dBcmVhLCAwKVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3QtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICNwaXZvdENvbHVtbkNvbnRhaW5lciAqbmdJZj1cImdyaWQuc2hvd1Bpdm90Q29uZmlndXJhdGlvblVJXCIgY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3RcIlxuICAgICAgICAgICAgICAgICAgICAgKGRyb3BwZWQpPVwib25EaW1Ecm9wKCRldmVudCwgY29sQXJlYSwgMSlcIiBpZ3hEcm9wIChpZ3hEcmFnTGVhdmUpPVwib25BcmVhRHJhZ0xlYXZlKCRldmVudCwgY29sQXJlYSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBDb2x1bW5zIGFyZWEgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcHMtYXJlYSAjY29sQXJlYSBkcm9wcGFibGU9J3RydWUnPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0nZW1wdHknIChkcm9wcGVkKT1cIm9uRGltRHJvcCgkZXZlbnQsIGNvbEFyZWEsIDEpXCIgaWd4RHJvcFxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJncmlkLmNvbHVtbkRpbWVuc2lvbnMubGVuZ3RoID09PSAwXCIgY2xhc3M9J2lneC1ncmlkX19waXZvdC1lbXB0eS1jaGlwLWFyZWEnPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF9lbXB0eV9jb2x1bW5fZHJvcF9hcmVhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgZ3JpZC5jb2x1bW5EaW1lbnNpb25zOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190ci1waXZvdC0tY2hpcF9kcm9wX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT0nZ2V0QXJlYUhlaWdodChjb2xBcmVhKSc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcCBbZHJhZ2dhYmxlXT1cInRydWVcIiBbaWRdPVwiY29sLm1lbWJlck5hbWVcIiBbZGlzcGxheURlbnNpdHldPVwiZ3JpZC5kaXNwbGF5RGVuc2l0eVwiIFtkYXRhXT1cInsgcGl2b3RBcmVhOiAnY29sdW1uJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZSk9XCJjb2x1bW5SZW1vdmVkKCRldmVudClcIiAoZHJhZ092ZXIpPVwib25EaW1EcmFnT3ZlcigkZXZlbnQsIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdMZWF2ZSk9XCJvbkRpbURyYWdMZWF2ZSgkZXZlbnQpXCIgKGRyYWdEcm9wKT1cIm9uRGltRHJvcCgkZXZlbnQsIGNvbEFyZWEsIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdmVTdGFydCk9J29uRGltRHJhZ1N0YXJ0KCRldmVudCwgY29sQXJlYSknIChtb3ZlRW5kKT0nb25EaW1EcmFnRW5kKCknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoaXBTb3J0KCRldmVudCwgY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24gaWd4UHJlZml4PnZpZXdfY29sdW1uPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uIGlneFByZWZpeCAocG9pbnRlcmRvd24pPSdvbkZpbHRlcmluZ0ljb25Qb2ludGVyRG93bigkZXZlbnQpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0nb25GaWx0ZXJpbmdJY29uQ2xpY2soJGV2ZW50LCBjb2wpJz5maWx0ZXJfbGlzdDwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29sLmRpc3BsYXlOYW1lIHx8IGNvbC5tZW1iZXJOYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uICpuZ0lmPVwiY29sLnNvcnREaXJlY3Rpb25cIiBpZ3hTdWZmaXg+IHt7IGNvbC5zb3J0RGlyZWN0aW9uIDwgMiA/ICdhcnJvd191cHdhcmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdhcnJvd19kb3dud2FyZCcgfX08L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nbGFzdCc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3QtLWNoaXBfZHJvcF9pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPSdnZXRBcmVhSGVpZ2h0KGNvbEFyZWEpJz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcCBpZ3hEcm9wIChkcmFnRHJvcCk9XCJvbkRpbURyb3AoJGV2ZW50LCBjb2xBcmVhLCAxKVwiICNub3RpZnlDaGlwIFtoaWRkZW5dPSd0cnVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJncmlkLmRpc3BsYXlEZW5zaXR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF9jb2x1bW5fZHJvcF9jaGlwfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgIDwvaWd4LWNoaXBzLWFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICNwaXZvdFZhbHVlQ29udGFpbmVyICpuZ0lmPVwiZ3JpZC5zaG93UGl2b3RDb25maWd1cmF0aW9uVUlcIiBjbGFzcz1cImlneC1ncmlkX190ci1waXZvdFwiXG4gICAgICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAoZHJvcHBlZCk9XCJvblZhbHVlRHJvcCgkZXZlbnQsIHZhbHVlQXJlYSlcIiBpZ3hEcm9wXG4gICAgICAgICAgICAgICAgICAgICAoaWd4RHJhZ0xlYXZlKT1cIm9uQXJlYURyYWdMZWF2ZSgkZXZlbnQsIHZhbHVlQXJlYSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZSBhcmVhIC0tPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWNoaXBzLWFyZWEgI3ZhbHVlQXJlYSBkcm9wcGFibGU9J3RydWUnPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0nZW1wdHknIChkcm9wcGVkKT1cIm9uVmFsdWVEcm9wKCRldmVudCwgdmFsdWVBcmVhKVwiIGlneERyb3AgKm5nSWY9XCJncmlkLnZhbHVlcy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9J2lneC1ncmlkX19waXZvdC1lbXB0eS1jaGlwLWFyZWEnPnt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGl2b3RfZW1wdHlfdmFsdWVfZHJvcF9hcmVhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGdyaWQudmFsdWVzOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190ci1waXZvdC0tY2hpcF9kcm9wX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT0nZ2V0QXJlYUhlaWdodCh2YWx1ZUFyZWEpJz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1jaGlwICNjdXJyQ2hpcCBbZHJhZ2dhYmxlXT1cInRydWVcIiBbaWRdPVwidmFsdWUuZGlzcGxheU5hbWUgfHwgdmFsdWUubWVtYmVyXCIgW2RhdGFdPVwieyBwaXZvdEFyZWE6ICd2YWx1ZScgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJncmlkLmRpc3BsYXlEZW5zaXR5XCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZSk9XCJ2YWx1ZVJlbW92ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnTGVhdmUpPVwib25EaW1EcmFnTGVhdmUoJGV2ZW50KVwiIChkcmFnT3Zlcik9XCJvbkRpbURyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ0Ryb3ApPVwib25WYWx1ZURyb3AoJGV2ZW50LCB2YWx1ZUFyZWEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3QtdG9nZ2xlLWljb25zXCIgaWd4UHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0nb25TdW1tYXJ5Q2xpY2soJGV2ZW50LCB2YWx1ZSwgZHJvcGRvd24sIGN1cnJDaGlwKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPSckZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCknIFtpZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uXT1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24+ZnVuY3Rpb25zPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvbj5hcnJvd19kcm9wX2Rvd248L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdyaWQudmFsdWVDaGlwVGVtcGxhdGUgPyBncmlkLnZhbHVlQ2hpcFRlbXBsYXRlIDogdmFsdWVDaGlwRGVmYXVsdFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogdmFsdWUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nbGFzdCc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3QtLWNoaXBfZHJvcF9pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPSdnZXRBcmVhSGVpZ2h0KHZhbHVlQXJlYSknPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1jaGlwIGlneERyb3AgKGRyYWdEcm9wKT1cIm9uVmFsdWVEcm9wKCRldmVudCwgdmFsdWVBcmVhKVwiICNub3RpZnlWYWx1ZUNoaXAgW2hpZGRlbl09J3RydWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImdyaWQuZGlzcGxheURlbnNpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Bpdm90X3ZhbHVlX2Ryb3BfY2hpcH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC1jaGlwcy1hcmVhPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgcm9sZT1cInJvd2dyb3VwXCIgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZF9fd3JhcHBlclwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiXG4gICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiIFtjbGFzcy5pZ3gtZ3JpZF9fdHItLW1ybF09XCJoYXNNUkxcIj5cblxuICAgICAgICA8IS0tIENvbHVtbiBoZWFkZXJzIGFyZWEgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdHJcIiByb2xlPVwicm93XCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCI+XG4gICAgICAgICAgICA8ZGl2ICNwaXZvdENvbnRhaW5lciBjbGFzcz1cImlneC1ncmlkX190ci1waXZvdCBpZ3gtZ3JpZF9fdHItcGl2b3QtLXJvdy1hcmVhXCJcbiAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdyaWQucGl2b3RSb3dXaWR0aHMgLSAxXCIgKGlneERyYWdMZWF2ZSk9XCJvbkFyZWFEcmFnTGVhdmUoJGV2ZW50LCByb3dBcmVhKVwiIGlneERyb3BcbiAgICAgICAgICAgICAgICAgKGRyb3BwZWQpPVwib25EaW1Ecm9wKCRldmVudCwgcm93QXJlYSwgMClcIiAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICA8IS0tIFJvdyBhcmVhIC0tPlxuICAgICAgICAgICAgICAgIDxpZ3gtY2hpcHMtYXJlYSAjcm93QXJlYSBkcm9wcGFibGU9J3RydWUnPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JpZC5zaG93UGl2b3RDb25maWd1cmF0aW9uVUlcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9J2VtcHR5JyBpZ3hEcm9wIChkcm9wcGVkKT1cIm9uRGltRHJvcCgkZXZlbnQsIHJvd0FyZWEsIDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JpZC5yb3dEaW1lbnNpb25zLmxlbmd0aCA9PT0gMCAmJiBncmlkLnNob3dQaXZvdENvbmZpZ3VyYXRpb25VSVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0naWd4LWdyaWRfX3Bpdm90LWVtcHR5LWNoaXAtYXJlYSc+e3tncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF9lbXB0eV9yb3dfZHJvcF9hcmVhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBncmlkLnJvd0RpbWVuc2lvbnM7IGxldCBsYXN0ID0gbGFzdDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3RyLXBpdm90LS1jaGlwX2Ryb3BfaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPSdnZXRBcmVhSGVpZ2h0KHJvd0FyZWEpJz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1jaGlwIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIFtpZF09XCJyb3cubWVtYmVyTmFtZVwiIFtkaXNwbGF5RGVuc2l0eV09XCJncmlkLmRpc3BsYXlEZW5zaXR5XCIgW2RhdGFdPVwieyBwaXZvdEFyZWE6ICdyb3cnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlKT1cInJvd1JlbW92ZWQoJGV2ZW50KVwiIChkcmFnTGVhdmUpPVwib25EaW1EcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnRHJvcCk9XCJvbkRpbURyb3AoJGV2ZW50LCByb3dBcmVhLCAwKVwiIChkcmFnT3Zlcik9XCJvbkRpbURyYWdPdmVyKCRldmVudCwgMClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW92ZVN0YXJ0KT0nb25EaW1EcmFnU3RhcnQoJGV2ZW50LCByb3dBcmVhKScgKG1vdmVFbmQpPSdvbkRpbURyYWdFbmQoKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hpcFNvcnQoJGV2ZW50LCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvbiBpZ3hQcmVmaXg+dGFibGVfcm93czwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvbiBpZ3hQcmVmaXggKHBvaW50ZXJkb3duKT0nb25GaWx0ZXJpbmdJY29uUG9pbnRlckRvd24oJGV2ZW50KSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9J29uRmlsdGVyaW5nSWNvbkNsaWNrKCRldmVudCwgcm93KSc+ZmlsdGVyX2xpc3Q8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3cuZGlzcGxheU5hbWUgfHwgcm93Lm1lbWJlck5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24gKm5nSWY9XCJyb3cuc29ydERpcmVjdGlvblwiIGlneFN1ZmZpeD4ge3sgcm93LnNvcnREaXJlY3Rpb24gPCAyID8gJ2Fycm93X3Vwd2FyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Fycm93X2Rvd253YXJkJyB9fTwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSdsYXN0Jz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190ci1waXZvdC0tY2hpcF9kcm9wX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09J2dldEFyZWFIZWlnaHQocm93QXJlYSknPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1jaGlwIGlneERyb3AgKGRyYWdEcm9wKT1cIm9uRGltRHJvcCgkZXZlbnQsIHJvd0FyZWEsIDApXCIgI25vdGlmeUNoaXAgW2hpZGRlbl09J3RydWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImdyaWQuZGlzcGxheURlbnNpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Bpdm90X3Jvd19kcm9wX2NoaXB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9pZ3gtY2hpcHMtYXJlYT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFBpbm5lZCBjb2x1bW5zIGNvbGxlY3Rpb24gZnJvbSB0aGUgc3RhcnQgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGlubmVkQ29sdW1uQ29sbGVjdGlvbi5sZW5ndGggJiYgZ3JpZC5pc1Bpbm5pbmdUb1N0YXJ0XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHBpbm5lZENvbHVtbkNvbGxlY3Rpb24gfCBpZ3hUb3BMZXZlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWdyaWQtaGVhZGVyLWdyb3VwIFtuZ0NsYXNzXT1cImNvbHVtbi5oZWFkZXJHcm91cENsYXNzZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5oZWFkZXJHcm91cFN0eWxlcyB8IGlneEhlYWRlckdyb3VwU3R5bGU6Y29sdW1uOmdyaWQucGlwZVRyaWdnZXJcIiBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2x1bW4ucmVzb2x2ZWRXaWR0aCB8IGlneEhlYWRlckdyb3VwV2lkdGg6Z3JpZC5kZWZhdWx0SGVhZGVyR3JvdXBNaW5XaWR0aDpoYXNNUkxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzXT1cImNvbHVtbi5yZXNvbHZlZFdpZHRoIHwgaWd4SGVhZGVyR3JvdXBXaWR0aDpncmlkLmRlZmF1bHRIZWFkZXJHcm91cE1pbldpZHRoOmhhc01STFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cImdyaWQubmF2aWdhdGlvbi5mb2N1c091dFJvd0hlYWRlcigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvaWd4LWdyaWQtaGVhZGVyLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWQtdGhlYWQtLXZpcnR1YWxpemF0aW9uV3JhcHBlclwiIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT0nbWF4Q29udGFpbmVySGVpZ2h0Jz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRfX2dyb3VwIGlneC1ncmlkLXRoZWFkLS12aXJ0dWFsaXphdGlvbkNvbnRhaW5lclwiIFtzdHlsZS5oZWlnaHQucHhdPSd0b3RhbERlcHRoID4gMSA/IGdyaWQucm93SGVpZ2h0IDogdW5kZWZpbmVkJyAqbmdGb3I9J2xldCBkaW1MZXZlbENvbHVtbnMgb2YgY29sdW1uRGltZW5zaW9uc0J5TGV2ZWw7IGxldCBpID0gaW5kZXgnIFtzdHlsZS53aWR0aC5weF09J2dyaWQudW5waW5uZWRXaWR0aCc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hHcmlkRm9yICNoZWFkZXJWaXJ0dWFsQ29udGFpbmVyIGxldC1jb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ3hHcmlkRm9yT2ZdPVwiZGltTGV2ZWxDb2x1bW5zXCIgW2lneEdyaWRGb3JPZlVuaXF1ZVNpemVDYWNoZV0gPSAndHJ1ZScgW2lneEZvclNjcm9sbENvbnRhaW5lcl09XCJncmlkLnBhcmVudFZpcnREaXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lneEZvckNvbnRhaW5lclNpemVdPVwiZ3JpZC51bnBpbm5lZFdpZHRoXCIgW2lneEZvclRyYWNrQnldPVwiZ3JpZC50cmFja0NvbHVtbkNoYW5nZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lneEZvclNpemVQcm9wTmFtZV09XCInY2FsY1BpeGVsV2lkdGgnXCIgW2lneEZvclNjcm9sbE9yaWVudGF0aW9uXT1cIidob3Jpem9udGFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1ncmlkLWhlYWRlci1ncm91cCBbbmdDbGFzc109XCJjb2x1bW4uaGVhZGVyR3JvdXBDbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09J3RvdGFsRGVwdGggPiAxID8gY2FsY0hlaWdodChjb2x1bW4sIGkpIDogdW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb2x1bW4uaGVhZGVyR3JvdXBTdHlsZXMgfGlneEhlYWRlckdyb3VwU3R5bGU6Y29sdW1uOmdyaWQucGlwZVRyaWdnZXJcIiBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sdW1uLnJlc29sdmVkV2lkdGggfCBpZ3hIZWFkZXJHcm91cFdpZHRoOmdyaWQuZGVmYXVsdEhlYWRlckdyb3VwTWluV2lkdGg6aGFzTVJMXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXNdPVwiY29sdW1uLnJlc29sdmVkV2lkdGggfCBpZ3hIZWFkZXJHcm91cFdpZHRoOmdyaWQuZGVmYXVsdEhlYWRlckdyb3VwTWluV2lkdGg6aGFzTVJMXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlneC1ncmlkX190ci1waXZvdC0tY29sdW1uRGltZW5zaW9uTGVhZl0gPSAnaXNEdXBsaWNhdGVPZkV4aXN0aW5nUGFyZW50KGNvbHVtbiwgaSknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdHItcGl2b3QtLWNvbHVtbk11bHRpUm93U3Bhbl0gPSAnaXNNdWx0aVJvdyhjb2x1bW4sIGkpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtZ3JpZC1oZWFkZXItZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBQaW5uZWQgY29sdW1ucyBjb2xsZWN0aW9uIGF0IHRoZSBlbmQgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGlubmVkQ29sdW1uQ29sbGVjdGlvbi5sZW5ndGggJiYgIWdyaWQuaXNQaW5uaW5nVG9TdGFydFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBwaW5uZWRDb2x1bW5Db2xsZWN0aW9uIHwgaWd4VG9wTGV2ZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlneC1ncmlkLWhlYWRlci1ncm91cCBbbmdDbGFzc109XCJjb2x1bW4uaGVhZGVyR3JvdXBDbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb2x1bW4uaGVhZGVyR3JvdXBTdHlsZXMgfGlneEhlYWRlckdyb3VwU3R5bGU6Y29sdW1uOmdyaWQucGlwZVRyaWdnZXJcIiBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2x1bW4ucmVzb2x2ZWRXaWR0aCB8IGlneEhlYWRlckdyb3VwV2lkdGg6Z3JpZC5kZWZhdWx0SGVhZGVyR3JvdXBNaW5XaWR0aDpoYXNNUkxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzXT1cImNvbHVtbi5yZXNvbHZlZFdpZHRoIHwgaWd4SGVhZGVyR3JvdXBXaWR0aDpncmlkLmRlZmF1bHRIZWFkZXJHcm91cE1pbldpZHRoOmhhc01STFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnRdPVwiY29sdW1uLnJpZ2h0UGlubmVkT2Zmc2V0XCIgKHBvaW50ZXJkb3duKT1cImdyaWQubmF2aWdhdGlvbi5mb2N1c091dFJvd0hlYWRlcigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvaWd4LWdyaWQtaGVhZGVyLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48IS0tIEhlYWRlciB0aHVtYiBhcmVhIC0tPlxuPGRpdiBjbGFzcz1cImlneC1ncmlkLXRoZWFkX190aHVtYlwiIFtoaWRkZW5dPVwiIWdyaWQuaGFzVmVydGljYWxTY3JvbGwoKVwiIFtzdHlsZS53aWR0aC5weF09XCJncmlkLnNjcm9sbFNpemVcIj5cbjwvZGl2PlxuXG48aWd4LWRyb3AtZG93biAjZHJvcGRvd24gKHNlbGVjdGlvbkNoYW5naW5nKT0nb25BZ2dyZWdhdGlvbkNoYW5nZSgkZXZlbnQpJz5cbiAgICA8aWd4LWRyb3AtZG93bi1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFnZ3JlZ2F0ZUxpc3RcIiBbc2VsZWN0ZWRdPSdpc1NlbGVjdGVkKGl0ZW0pJyBbdmFsdWVdPSdpdGVtJz5cbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgIDwvaWd4LWRyb3AtZG93bi1pdGVtPlxuPC9pZ3gtZHJvcC1kb3duPlxuXG48ZGl2IFtoaWRkZW5dPSd0cnVlJz5cbiAgICA8aWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nIFttYXhIZWlnaHRdPSdncmlkLmV4Y2VsU3R5bGVGaWx0ZXJNYXhIZWlnaHQnIFttaW5IZWlnaHRdPSdncmlkLmV4Y2VsU3R5bGVGaWx0ZXJNaW5IZWlnaHQnICNlc2Y+XG4gICAgICAgIDxkaXYgaWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnM+XG4gICAgICAgICAgICA8aWd4LWNoaXBzLWFyZWEgI2Ryb3Bkb3duQ2hpcHM+XG4gICAgICAgICAgICAgICAgPGlneC1jaGlwICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgdGhpcy5maWx0ZXJEcm9wZG93bkRpbWVuc2lvbnNcIiBbaWRdPVwiZmlsdGVyLm1lbWJlck5hbWVcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJncmlkLmRpc3BsYXlEZW5zaXR5XCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZSk9XCJmaWx0ZXJSZW1vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGlwQ2xpY2spPSdvbkZpbHRlcnNTZWxlY3Rpb25DaGFuZ2VkKCRldmVudCknIFtzZWxlY3RhYmxlXT0ndHJ1ZScgW3NlbGVjdGVkXT0nZmlsdGVyID09PSB0aGlzLmZpbHRlckRyb3Bkb3duRGltZW5zaW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWUnPlxuICAgICAgICAgICAgICAgIHt7ZmlsdGVyLmRpc3BsYXlOYW1lIHx8IGZpbHRlci5tZW1iZXJOYW1lfX1cbiAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgIDwvaWd4LWNoaXBzLWFyZWE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aWd4LWV4Y2VsLXN0eWxlLWZpbHRlci1vcGVyYXRpb25zPlxuICAgICAgICAgICAgPGlneC1leGNlbC1zdHlsZS1zZWFyY2g+PC9pZ3gtZXhjZWwtc3R5bGUtc2VhcmNoPlxuICAgICAgICA8L2lneC1leGNlbC1zdHlsZS1maWx0ZXItb3BlcmF0aW9ucz5cbiAgICA8L2lneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZz5cbjwvZGl2PlxuXG48ZGl2IHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMDAwcHhcIj5cbiAgICA8aWd4LWNoaXBzLWFyZWEgI2ZpbHRlckFyZWFIaWRkZW4gZHJvcHBhYmxlPSd0cnVlJz5cbiAgICAgICAgPGlneC1jaGlwICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZ3JpZC5maWx0ZXJEaW1lbnNpb25zXCIgW2lkXT1cImZpbHRlci5tZW1iZXJOYW1lXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJncmlkLmRpc3BsYXlEZW5zaXR5XCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZSk9XCJmaWx0ZXJSZW1vdmVkKCRldmVudClcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBpZ3hQcmVmaXg+ZmlsdGVyX2xpc3Q8L2lneC1pY29uPlxuICAgICAgICAgICAge3tmaWx0ZXIuZGlzcGxheU5hbWUgfHwgZmlsdGVyLm1lbWJlck5hbWV9fVxuICAgICAgICA8L2lneC1jaGlwPlxuICAgIDwvaWd4LWNoaXBzLWFyZWE+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN2YWx1ZUNoaXBEZWZhdWx0VGVtcGxhdGUgbGV0LXZhbHVlPlxuICAgIHt7dmFsdWUuYWdncmVnYXRlLmtleX19KHt7dmFsdWUuZGlzcGxheU5hbWUgfHwgdmFsdWUubWVtYmVyfX0pXG48L25nLXRlbXBsYXRlPlxuIl19
|
|
471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtaGVhZGVyLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1oZWFkZXItcm93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWhlYWRlci1yb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUlOLFNBQVMsRUFFVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBcUMsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvSSxPQUFPLEVBQWMsYUFBYSxFQUFpQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSw4Q0FBOEMsRUFBRSw4Q0FBOEMsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQy9NLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFbEY7Ozs7Ozs7R0FPRztBQVFILE1BQU0sT0FBTywwQkFBMkIsU0FBUSx5QkFBeUI7SUEyRHJFLElBQW9CLFdBQVc7UUFDM0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxZQUMyQyxJQUFtQixFQUMxRCxHQUE0QixFQUM1QixHQUFzQixFQUNaLFFBQW1CO1FBRTdCLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFMdUIsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUdoRCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBbEUxQixrQkFBYSxHQUF1QixFQUFFLENBQUM7UUFHdkMsNkJBQXdCLEdBQWEsSUFBSSxHQUFHLEVBQU8sQ0FBQztRQUNwRCx5QkFBb0IsR0FBYSxJQUFJLEdBQUcsRUFBTyxDQUFDO1FBQy9DLGFBQVEsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDO1FBRXhDLDZCQUF3QixHQUFxQjtZQUNqRCxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO1lBQzVDLGNBQWMsRUFBRSxTQUFTO1NBQzVCLENBQUM7UUFDTSw0QkFBdUIsR0FBb0I7WUFDL0MsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixLQUFLLEVBQUUsS0FBSztZQUNaLGdCQUFnQixFQUFFLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1lBQ3pFLGNBQWMsRUFBRSxJQUFJLHNCQUFzQixFQUFFO1NBQy9DLENBQUM7UUF1REY7Ozs7VUFJRTtRQUNLLDRCQUF1QixHQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFQN0MsQ0FBQztJQVNEOztNQUVFO0lBQ0YsSUFBVyxlQUFlO1FBQ3RCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0RSxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekUsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDM0YsVUFBVSxJQUFJLGlCQUFpQixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hLLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsNEJBQTRCO29CQUM1QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUM5RSxJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTt3QkFDMUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDdEM7eUJBQU07d0JBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDMUM7b0JBQ0QsVUFBVSxJQUFJLGdCQUFnQixDQUFDO2lCQUNsQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O01BR0U7SUFDRixJQUFXLFVBQVU7UUFDakIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3BELElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMvQixPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsSUFBSSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUMvRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDN0IsVUFBVSxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O01BR0U7SUFDRixJQUFXLGtCQUFrQjtRQUN6QixPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7OztNQUdFO0lBQ0ssVUFBVSxDQUFDLEdBQWUsRUFBRSxLQUFhO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDOUosQ0FBQztJQUVEOzs7TUFHRTtJQUNLLDJCQUEyQixDQUFDLEdBQWUsRUFBRSxHQUFXO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlFLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV2RCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztNQUdFO0lBQ0ssVUFBVSxDQUFDLEdBQWUsRUFBRSxHQUFXO1FBQzFDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNoQyxPQUFPLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7TUFHRTtJQUNLLCtCQUErQjtRQUNsQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDM0MsK0NBQStDO1FBQy9DLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztJQUN2QyxDQUFDO0lBRVMsNEJBQTRCLENBQUMsbUJBQWlDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFVO1FBQzNGLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5QixJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDWixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUM1QyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNyRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsY0FBYyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQ3JFO3FCQUFNLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFO29CQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNwQjtpQkFDSjthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztNQUdFO0lBQ0ssV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLElBQUksT0FBTyxDQUFDLHdCQUF3QixFQUFFO1lBQ2xDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1NBQzFDO0lBQ0wsQ0FBQztJQUVEOzs7TUFHRTtJQUNLLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSTtRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1lBQ2hELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUMxQixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQzthQUMxRTtTQUNKO0lBQ0wsQ0FBQztJQUVEOzs7TUFHRTtJQUNLLFlBQVk7UUFDZixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDcEM7SUFDTCxDQUFDO0lBRUQ7OztNQUdFO0lBQ0ssYUFBYSxDQUFDLElBQTJCO1FBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDN0IsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7O01BR0U7SUFDSyxVQUFVLENBQUMsS0FBeUI7UUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O01BR0U7SUFDSyxhQUFhLENBQUMsS0FBeUI7UUFDMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O01BR0U7SUFDSyxZQUFZLENBQUMsS0FBeUI7UUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0gsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7TUFHRTtJQUNLLGFBQWEsQ0FBQyxLQUF5QjtRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3RHO2FBQU07WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3hDO0lBQ0wsQ0FBQztJQUVNLHlCQUF5QixDQUFDLEtBQTBCO1FBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO2FBQ3hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkssQ0FBQztJQUVEOzs7TUFHRTtJQUNLLDBCQUEwQixDQUFDLEtBQUs7UUFDbkMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztNQUdFO0lBQ0ssb0JBQW9CLENBQUMsS0FBSyxFQUFFLFNBQVM7UUFDeEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUM7UUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0csSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7O01BR0U7SUFDSyxjQUFjLENBQUMsU0FBUyxFQUFFLEtBQWtCLEVBQUUsUUFBOEIsRUFBRSxJQUFzQjtRQUN2RyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDOUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUNJLDBCQUEwQixDQUFDLEtBQUssRUFBRSxTQUFVLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDdEUsTUFBTSxHQUFHLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDN0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0csSUFBSSxjQUFjLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtZQUN6QixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRDs7O01BR0U7SUFDSyxtQkFBbUIsQ0FBQyxLQUEwQjtRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQ7OztNQUdFO0lBQ0ssVUFBVSxDQUFDLEdBQXFCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7TUFHRTtJQUNLLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBMEI7UUFDaEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLGFBQWEsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFDeEUsTUFBTSxTQUFTLEdBQUcsY0FBYyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7O01BR0U7SUFDSyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQThCO1FBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUztZQUFFLE9BQU87UUFDL0QsTUFBTSxZQUFZLEdBQUcsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7ZUFDcEgsQ0FBQyxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxSCxJQUFJLFlBQVksRUFBRTtZQUNkLDJDQUEyQztZQUMzQyxPQUFPO1NBQ1Y7UUFDRCwyREFBMkQ7UUFDM0QscUNBQXFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDckUsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqSCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLGVBQWUsRUFBRTtZQUNoRCxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUM3RSxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztTQUN0RTthQUFNO1lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7WUFDekUsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7U0FDMUU7SUFDTCxDQUFDO0lBRUQ7OztNQUdFO0lBQ0ssY0FBYyxDQUFDLEtBQUs7UUFDdkIsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDekUsSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7O01BR0U7SUFDSyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUk7UUFDOUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0csU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4QixJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzlDLE9BQU8sQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7YUFDNUU7WUFDRCxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7YUFDeEU7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O01BR0U7SUFDSyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUk7UUFDMUIsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPO1FBQ25JLDhCQUE4QjtRQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUNuRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDN0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QyxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDN0csU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3ZGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ2hGLElBQUksS0FBSyxFQUFFO1lBQ1AsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3RGO0lBQ0wsQ0FBQztJQUVEOzs7TUFHRTtJQUNLLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWlDO1FBQzNELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTztRQUNuSSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDN0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxTQUFTLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDO1FBQy9DLGlIQUFpSDtRQUNqSCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakYsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNuRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMvRixJQUFJLFNBQVMsRUFBRTtZQUNYLHlDQUF5QztZQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLHFEQUFxRDtnQkFDckQsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUM1RDthQUFNLElBQUksU0FBUyxFQUFFO1lBQ2xCLHdDQUF3QztZQUN4QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUM3RCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzdHO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNwRyxlQUFlO1FBQ2YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFUyxjQUFjLENBQUMsS0FBa0IsRUFBRSxRQUE4QixFQUFFLElBQXNCO1FBQy9GLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7OEdBOWRRLDBCQUEwQixrQkFnRXZCLGFBQWE7a0dBaEVoQiwwQkFBMEIsMnRCQXdEYSxxQkFBcUIseUVDOUd6RSxreGtCQWlQQSw0Q0Q3TGMsSUFBSSw2RkFBRSxnQkFBZ0IsOEtBQUUscUJBQXFCLHlKQUFFLEtBQUssbUhBQUUsZ0JBQWdCLDJiQUFFLGdCQUFnQiwyRkFBRSxrQkFBa0IsOEVBQUUsaUJBQWlCLG1IQUFFLGtCQUFrQiw0RUFBRSxrQ0FBa0MsK0dBQUUsZ0JBQWdCLG9KQUFFLDJCQUEyQixzRkFBRSxPQUFPLG9GQUFFLE9BQU8sMkVBQUUscUJBQXFCLHdMQUFFLG9CQUFvQiwwSkFBRSx3QkFBd0IsK0RBQUUsbUNBQW1DLHFPQUFFLDhDQUE4Qyw4R0FBRSw4Q0FBOEMsOEdBQUUsNEJBQTRCLDhFQUFFLHVCQUF1Qix1REFBRSx1QkFBdUIsdURBQUUsc0JBQXNCOzsyRkFFN2lCLDBCQUEwQjtrQkFQdEMsU0FBUztzQ0FDVyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDLHNCQUFzQixjQUVwQixJQUFJLFdBQ1AsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtDQUFrQyxFQUFFLGdCQUFnQixFQUFFLDJCQUEyQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsbUNBQW1DLEVBQUUsOENBQThDLEVBQUUsOENBQThDLEVBQUUsNEJBQTRCLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLENBQUM7OzBCQWtFbGpCLE1BQU07MkJBQUMsYUFBYTswSEExQ0EsR0FBRztzQkFBM0IsU0FBUzt1QkFBQyxLQUFLO2dCQUt5QyxVQUFVO3NCQUFsRSxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLaEIsYUFBYTtzQkFBNUMsU0FBUzt1QkFBQyxZQUFZO2dCQUtZLGFBQWE7c0JBQS9DLFNBQVM7dUJBQUMsZUFBZTtnQkFLZ0Isb0JBQW9CO3NCQUE3RCxTQUFTO3VCQUFDLHNCQUFzQjtnQkFPMUIsaUJBQWlCO3NCQUR2QixZQUFZO3VCQUFDLFlBQVk7Z0JBU25CLGdCQUFnQjtzQkFEdEIsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElCYXNlQ2hpcEV2ZW50QXJncywgSWd4Q2hpcENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NoaXBzL2NoaXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneENoaXBzQXJlYUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NoaXBzL2NoaXBzLWFyZWEuY29tcG9uZW50JztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IElTZWxlY3Rpb25FdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksIEF1dG9Qb3NpdGlvblN0cmF0ZWd5LCBPdmVybGF5U2V0dGluZ3MsIFBvc2l0aW9uU2V0dGluZ3MsIFZlcnRpY2FsQWxpZ25tZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBJR1hfR1JJRF9CQVNFLCBQaXZvdEdyaWRUeXBlIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2hlYWRlcnMvZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuLi9oZWFkZXJzL2dyaWQtaGVhZGVyLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJvcFBvc2l0aW9uIH0gZnJvbSAnLi4vbW92aW5nL21vdmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IElQaXZvdEFnZ3JlZ2F0b3IsIElQaXZvdERpbWVuc2lvbiwgSVBpdm90VmFsdWUsIFBpdm90RGltZW5zaW9uVHlwZSB9IGZyb20gJy4vcGl2b3QtZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi9waXZvdC11dGlsJztcbmltcG9ydCB7IElneEdyaWRUb3BMZXZlbENvbHVtbnMgfSBmcm9tICcuLi9jb21tb24vcGlwZXMnO1xuaW1wb3J0IHsgSWd4SGVhZGVyR3JvdXBXaWR0aFBpcGUsIElneEhlYWRlckdyb3VwU3R5bGVQaXBlIH0gZnJvbSAnLi4vaGVhZGVycy9waXBlcyc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsdGVyaW5nL2V4Y2VsLXN0eWxlL2V4Y2VsLXN0eWxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQsIElneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUsIElneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9kcm9wLWRvd24vZHJvcC1kb3duLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kcm9wLWRvd24vZHJvcC1kb3duLW5hdmlnYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4QmFkZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iYWRnZS9iYWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hEcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9kcmFnLWRyb3AvZHJhZy1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgTmdUZW1wbGF0ZU91dGxldCwgTmdDbGFzcywgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKlxuICpcbiAqIEZvciBhbGwgaW50ZW50cyAmIHB1cnBvc2VzIHRyZWF0IHRoaXMgY29tcG9uZW50IGFzIHdoYXQgYSA8dGhlYWQ+IHVzdWFsbHkgaXMgaW4gdGhlIGRlZmF1bHQgPHRhYmxlPiBlbGVtZW50LlxuICpcbiAqIFRoaXMgY29udGFpbmVyIGhvbGRzIHRoZSBwaXZvdCBncmlkIGhlYWRlciBlbGVtZW50cyBhbmQgdGhlaXIgYmVoYXZpb3IvaW50ZXJhY3Rpb25zLlxuICpcbiAqIEBoaWRkZW4gQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LXBpdm90LWhlYWRlci1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9waXZvdC1oZWFkZXItcm93LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBJZ3hEcm9wRGlyZWN0aXZlLCBJZ3hDaGlwc0FyZWFDb21wb25lbnQsIE5nRm9yLCBJZ3hDaGlwQ29tcG9uZW50LCBJZ3hJY29uQ29tcG9uZW50LCBJZ3hQcmVmaXhEaXJlY3RpdmUsIElneEJhZGdlQ29tcG9uZW50LCBJZ3hTdWZmaXhEaXJlY3RpdmUsIElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCwgTmdDbGFzcywgTmdTdHlsZSwgSWd4R3JpZEZvck9mRGlyZWN0aXZlLCBJZ3hEcm9wRG93bkNvbXBvbmVudCwgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50LCBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RXhjZWxTdHlsZVNlYXJjaENvbXBvbmVudCwgSWd4SGVhZGVyR3JvdXBXaWR0aFBpcGUsIElneEhlYWRlckdyb3VwU3R5bGVQaXBlLCBJZ3hHcmlkVG9wTGV2ZWxDb2x1bW5zXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdEhlYWRlclJvd0NvbXBvbmVudCBleHRlbmRzIElneEdyaWRIZWFkZXJSb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIHB1YmxpYyBhZ2dyZWdhdGVMaXN0OiBJUGl2b3RBZ2dyZWdhdG9yW10gPSBbXTtcblxuICAgIHB1YmxpYyB2YWx1ZTogSVBpdm90VmFsdWU7XG4gICAgcHVibGljIGZpbHRlckRyb3Bkb3duRGltZW5zaW9uczogU2V0PGFueT4gPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwdWJsaWMgZmlsdGVyQXJlYURpbWVuc2lvbnM6IFNldDxhbnk+ID0gbmV3IFNldDxhbnk+KCk7XG4gICAgcHJpdmF0ZSBfZHJvcFBvcyA9IERyb3BQb3NpdGlvbi5BZnRlckRyb3BUYXJnZXQ7XG4gICAgcHJpdmF0ZSB2YWx1ZURhdGE6IE1hcDxzdHJpbmcsIElQaXZvdEFnZ3JlZ2F0b3JbXT47XG4gICAgcHJpdmF0ZSBfc3ViTWVudVBvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICBjbG9zZUFuaW1hdGlvbjogdW5kZWZpbmVkXG4gICAgfTtcbiAgICBwcml2YXRlIF9zdWJNZW51T3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogbmV3IEF1dG9Qb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3N1Yk1lbnVQb3NpdGlvblNldHRpbmdzKSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KClcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdlc2YnKSBwdWJsaWMgZXNmOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbHRlckFyZWFIaWRkZW4nLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGZpbHRlckFyZWE7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbHRlckljb24nKSBwdWJsaWMgZmlsdGVyc0J1dHRvbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZHJvcGRvd25DaGlwcycpIHB1YmxpYyBkcm9wZG93bkNoaXBzO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdwaXZvdEZpbHRlckNvbnRhaW5lcicpIHB1YmxpYyBwaXZvdEZpbHRlckNvbnRhaW5lcjtcblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCdub3RpZnlDaGlwJylcbiAgICBwdWJsaWMgbm90aWZpY2F0aW9uQ2hpcHM6IFF1ZXJ5TGlzdDxJZ3hDaGlwQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKiBUaGUgdmlydHVhbGl6ZWQgcGFydCBvZiB0aGUgaGVhZGVyIHJvdyBjb250YWluaW5nIHRoZSB1bnBpbm5lZCBoZWFkZXIgZ3JvdXBzLlxuICAgICovXG4gICAgQFZpZXdDaGlsZHJlbignaGVhZGVyVmlydHVhbENvbnRhaW5lcicsIHsgcmVhZDogSWd4R3JpZEZvck9mRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIGhlYWRlckNvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxJZ3hHcmlkRm9yT2ZEaXJlY3RpdmU8Q29sdW1uVHlwZSwgQ29sdW1uVHlwZVtdPj47XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhlYWRlckZvck9mKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXJDb250YWluZXJzPy5sYXN0O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9HUklEX0JBU0UpIHB1YmxpYyBvdmVycmlkZSBncmlkOiBQaXZvdEdyaWRUeXBlLFxuICAgICAgICByZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICApIHtcbiAgICAgICAgc3VwZXIocmVmLCBjZHIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKiBEZWZhdWx0IGlzIGEgc2luZ2xlIGVtcHR5IGxldmVsIHNpbmNlIGRlZmF1bHQgZGVwdGggaXMgMVxuICAgICovXG4gICAgcHVibGljIGNvbHVtbkRpbWVuc2lvbnNCeUxldmVsOiBhbnlbXSA9IFtbXV07XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzRmlsdGVyc0J1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGNoaXBzV2lkdGggPSAwO1xuICAgICAgICB0aGlzLmZpbHRlckRyb3Bkb3duRGltZW5zaW9ucy5jbGVhcigpO1xuICAgICAgICB0aGlzLmZpbHRlckFyZWFEaW1lbnNpb25zLmNsZWFyKCk7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlckFyZWE/LmNoaXBzTGlzdCAmJiB0aGlzLmZpbHRlckFyZWEuY2hpcHNMaXN0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnBpdm90RmlsdGVyQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUGFkZGluZ3MgPSBwYXJzZUZsb2F0KHN0eWxlcy5wYWRkaW5nTGVmdCkgKyBwYXJzZUZsb2F0KHN0eWxlcy5wYWRkaW5nUmlnaHQpO1xuICAgICAgICAgICAgY2hpcHNXaWR0aCArPSBjb250YWluZXJQYWRkaW5ncyArICh0aGlzLmZpbHRlcnNCdXR0b24gJiYgdGhpcy5maWx0ZXJBcmVhPy5jaGlwc0xpc3QubGVuZ3RoID4gMSA/IHRoaXMuZmlsdGVyc0J1dHRvbi5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIDogMCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckFyZWEuY2hpcHNMaXN0LmZvckVhY2goY2hpcCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGltID0gdGhpcy5ncmlkLmZpbHRlckRpbWVuc2lvbnMuZmluZCh4ID0+IHgubWVtYmVyTmFtZSA9PT0gY2hpcC5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKGRpbSkge1xuICAgICAgICAgICAgICAgICAgICAvLyA4IHB4IG1hcmdpbiBiZXR3ZWVuIGNoaXBzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDaGlwV2lkdGggPSBjaGlwLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKyA4O1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpcHNXaWR0aCArIGN1cnJlbnRDaGlwV2lkdGggPCB0aGlzLmdyaWQucGl2b3RSb3dXaWR0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQXJlYURpbWVuc2lvbnMuYWRkKGRpbSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckRyb3Bkb3duRGltZW5zaW9ucy5hZGQoZGltKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaGlwc1dpZHRoICs9IGN1cnJlbnRDaGlwV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJEcm9wZG93bkRpbWVuc2lvbnMuc2l6ZSA+IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRvdGFsRGVwdGgoKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkRpbWVuc2lvbnMgPSB0aGlzLmdyaWQuY29sdW1uRGltZW5zaW9ucztcbiAgICAgICAgaWYgKGNvbHVtbkRpbWVuc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG90YWxEZXB0aCA9IGNvbHVtbkRpbWVuc2lvbnMubWFwKHggPT4gUGl2b3RVdGlsLmdldERpbWVuc2lvbkRlcHRoKHgpICsgMSkucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgdmFsKTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNNdWx0aXBsZVZhbHVlcykge1xuICAgICAgICAgICAgdG90YWxEZXB0aCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3RhbERlcHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1heENvbnRhaW5lckhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWxEZXB0aCAqIHRoaXMuZ3JpZC5yZW5kZXJlZFJvd0hlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIGNhbGNIZWlnaHQoY29sOiBDb2x1bW5UeXBlLCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAhY29sLmNvbHVtbkdyb3VwICYmIGNvbC5sZXZlbCA8IHRoaXMudG90YWxEZXB0aCAmJiBjb2wubGV2ZWwgPT09IGluZGV4ID8gKHRoaXMudG90YWxEZXB0aCAtIGNvbC5sZXZlbCkgKiB0aGlzLmdyaWQucm93SGVpZ2h0IDogdGhpcy5ncmlkLnJvd0hlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIGlzRHVwbGljYXRlT2ZFeGlzdGluZ1BhcmVudChjb2w6IENvbHVtblR5cGUsIGx2bDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudENvbGxlY3Rpb24gPSBsdmwgPiAwID8gdGhpcy5jb2x1bW5EaW1lbnNpb25zQnlMZXZlbFtsdmwgLSAxXSA6IFtdO1xuICAgICAgICBjb25zdCBkdXBsaWNhdGUgPSBwYXJlbnRDb2xsZWN0aW9uLmluZGV4T2YoY29sKSAhPT0gLTE7XG5cbiAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIGlzTXVsdGlSb3coY29sOiBDb2x1bW5UeXBlLCBsdmw6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpc0xlYWYgPSAhY29sLmNvbHVtbkdyb3VwO1xuICAgICAgICByZXR1cm4gaXNMZWFmICYmIGx2bCAhPT0gdGhpcy50b3RhbERlcHRoIC0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIHBvcHVsYXRlQ29sdW1uRGltZW5zaW9uc0J5TGV2ZWwoKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG90YWxEZXB0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXNbaV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy51bnBpbm5lZENvbHVtbkNvbGxlY3Rpb247XG4gICAgICAgIC8vIHBvcHVsYXRlIGNvbHVtbiBkaW1lbnNpb24gbWF0cml4IHJlY3Vyc2l2ZWx5XG4gICAgICAgIHRoaXMucG9wdWxhdGVEaW1lbnNpb25SZWN1cnNpdmVseShjb2xzLmZpbHRlcih4ID0+IHgubGV2ZWwgPT09IDApLCAwLCByZXMpO1xuICAgICAgICB0aGlzLmNvbHVtbkRpbWVuc2lvbnNCeUxldmVsID0gcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwb3B1bGF0ZURpbWVuc2lvblJlY3Vyc2l2ZWx5KGN1cnJlbnRMZXZlbENvbHVtbnM6IENvbHVtblR5cGVbXSwgbGV2ZWwgPSAwLCByZXM6IGFueVtdKSB7XG4gICAgICAgIGN1cnJlbnRMZXZlbENvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc1tsZXZlbF0pIHtcbiAgICAgICAgICAgICAgICByZXNbbGV2ZWxdLnB1c2goY29sKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sLmNvbHVtbkdyb3VwICYmIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gY29sLmNoaWxkcmVuLnRvQXJyYXkoKS5maWx0ZXIoeCA9PiAheC5oaWRkZW4pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlRGltZW5zaW9uUmVjdXJzaXZlbHkodmlzaWJsZUNvbHVtbnMsIGxldmVsICsgMSwgcmVzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxldmVsIDwgdGhpcy50b3RhbERlcHRoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gbGV2ZWwgKyAxOyBpIDw9IHRoaXMudG90YWxEZXB0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2ldLnB1c2goY29sKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnVucGlubmVkQ29sdW1uQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUNvbHVtbkRpbWVuc2lvbnNCeUxldmVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG9uRGltRHJhZ1N0YXJ0KGV2ZW50LCBhcmVhKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlwIG9mIHRoaXMubm90aWZpY2F0aW9uQ2hpcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGNoaXAubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGFyZWEuY2hpcHNMaXN0LnRvQXJyYXkoKS5pbmRleE9mKGNoaXApID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLml0ZW0oMCkuaWQgIT09ICdlbXB0eScpIHtcbiAgICAgICAgICAgICAgICBjaGlwLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudEVsZW1lbnQuc2Nyb2xsVG8oeyBsZWZ0OiBjaGlwLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb25EaW1EcmFnRW5kKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaXAgb2YgdGhpcy5ub3RpZmljYXRpb25DaGlwcykge1xuICAgICAgICAgICAgY2hpcC5uYXRpdmVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIGdldEFyZWFIZWlnaHQoYXJlYTogSWd4Q2hpcHNBcmVhQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGNoaXBzID0gYXJlYS5jaGlwc0xpc3Q7XG4gICAgICAgIHJldHVybiBjaGlwcyAmJiBjaGlwcy5sZW5ndGggPiAwID8gY2hpcHMuZmlyc3QubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgcm93UmVtb3ZlZChldmVudDogSUJhc2VDaGlwRXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24ucm93cy5maW5kKHggPT4geC5tZW1iZXJOYW1lID09PSBldmVudC5vd25lci5pZCk7XG4gICAgICAgIHRoaXMuZ3JpZC50b2dnbGVEaW1lbnNpb24ocm93KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIGNvbHVtblJlbW92ZWQoZXZlbnQ6IElCYXNlQ2hpcEV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnMuZmluZCh4ID0+IHgubWVtYmVyTmFtZSA9PT0gZXZlbnQub3duZXIuaWQpO1xuICAgICAgICB0aGlzLmdyaWQudG9nZ2xlRGltZW5zaW9uKGNvbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyB2YWx1ZVJlbW92ZWQoZXZlbnQ6IElCYXNlQ2hpcEV2ZW50QXJncykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzLmZpbmQoeCA9PiB4Lm1lbWJlciA9PT0gZXZlbnQub3duZXIuaWQgfHwgeC5kaXNwbGF5TmFtZSA9PT0gZXZlbnQub3duZXIuaWQpO1xuICAgICAgICB0aGlzLmdyaWQudG9nZ2xlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyUmVtb3ZlZChldmVudDogSUJhc2VDaGlwRXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycy5maW5kKHggPT4geC5tZW1iZXJOYW1lID09PSBldmVudC5vd25lci5pZCk7XG4gICAgICAgIHRoaXMuZ3JpZC50b2dnbGVEaW1lbnNpb24oZmlsdGVyKTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyRHJvcGRvd25EaW1lbnNpb25zLnNpemUgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm9uRmlsdGVyc0FyZWFEcm9wZG93bkNsaWNrKHsgdGFyZ2V0OiB0aGlzLmZpbHRlcnNCdXR0b24uZWwubmF0aXZlRWxlbWVudCB9LCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmhpZGVFU0YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkZpbHRlcnNTZWxlY3Rpb25DaGFuZ2VkKGV2ZW50PzogSUJhc2VDaGlwRXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25DaGlwcy5jaGlwc0xpc3QuZm9yRWFjaChjaGlwID0+IHtcbiAgICAgICAgICAgIGlmIChjaGlwLmlkICE9PSBldmVudC5vd25lci5pZCkge1xuICAgICAgICAgICAgICAgIGNoaXAuc2VsZWN0ZWQgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbkZpbHRlcnNBcmVhRHJvcGRvd25DbGljayh7IHRhcmdldDogdGhpcy5maWx0ZXJzQnV0dG9uLmVsLm5hdGl2ZUVsZW1lbnQgfSwgdGhpcy5ncmlkLmZpbHRlckRpbWVuc2lvbnMuZmluZChkaW0gPT4gZGltLm1lbWJlck5hbWUgPT09IGV2ZW50Lm93bmVyLmlkKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb25GaWx0ZXJpbmdJY29uUG9pbnRlckRvd24oZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvbkZpbHRlcmluZ0ljb25DbGljayhldmVudCwgZGltZW5zaW9uKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkaW0gPSBkaW1lbnNpb247XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZ3JpZC5kaW1lbnNpb25EYXRhQ29sdW1ucy5maW5kKHggPT4geC5maWVsZCA9PT0gZGltLm1lbWJlck5hbWUgfHwgeC5maWVsZCA9PT0gZGltLm1lbWJlcik7XG4gICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLnRvZ2dsZUZpbHRlckRyb3Bkb3duKGV2ZW50LnRhcmdldCwgY29sKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG9uU3VtbWFyeUNsaWNrKGV2ZW50QXJncywgdmFsdWU6IElQaXZvdFZhbHVlLCBkcm9wZG93bjogSWd4RHJvcERvd25Db21wb25lbnQsIGNoaXA6IElneENoaXBDb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5fc3ViTWVudU92ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSBldmVudEFyZ3MuY3VycmVudFRhcmdldDtcbiAgICAgICAgdGhpcy51cGRhdGVEcm9wRG93bih2YWx1ZSwgZHJvcGRvd24sIGNoaXApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uRmlsdGVyc0FyZWFEcm9wZG93bkNsaWNrKGV2ZW50LCBkaW1lbnNpb24/LCBzaG91bGRSZWF0dGFjaCA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgZGltID0gZGltZW5zaW9uIHx8IHRoaXMuZmlsdGVyRHJvcGRvd25EaW1lbnNpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5ncmlkLmRpbWVuc2lvbkRhdGFDb2x1bW5zLmZpbmQoeCA9PiB4LmZpZWxkID09PSBkaW0ubWVtYmVyTmFtZSB8fCB4LmZpZWxkID09PSBkaW0ubWVtYmVyKTtcbiAgICAgICAgaWYgKHNob3VsZFJlYXR0YWNoKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ2hpcHMuY2hpcHNMaXN0LmZvckVhY2goY2hpcCA9PiB7XG4gICAgICAgICAgICAgICAgY2hpcC5zZWxlY3RlZCA9IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25DaGlwcy5jaGlwc0xpc3QuZmlyc3Quc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLnRvZ2dsZUZpbHRlcnNFU0YodGhpcy5lc2YsIGV2ZW50LnRhcmdldCwgY29sLCBzaG91bGRSZWF0dGFjaCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvbkFnZ3JlZ2F0aW9uQ2hhbmdlKGV2ZW50OiBJU2VsZWN0aW9uRXZlbnRBcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKGV2ZW50Lm5ld1NlbGVjdGlvbi52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuYWdncmVnYXRlID0gZXZlbnQubmV3U2VsZWN0aW9uLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIGlzU2VsZWN0ZWQodmFsOiBJUGl2b3RBZ2dyZWdhdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmFnZ3JlZ2F0ZS5rZXkgPT09IHZhbC5rZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBTb3J0KF9ldmVudCwgZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3Qgc3RhcnREaXJlY3Rpb24gPSBkaW1lbnNpb24uc29ydERpcmVjdGlvbiB8fCBTb3J0aW5nRGlyZWN0aW9uLk5vbmU7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHN0YXJ0RGlyZWN0aW9uICsgMSA+IFNvcnRpbmdEaXJlY3Rpb24uRGVzYyA/XG4gICAgICAgICAgICBTb3J0aW5nRGlyZWN0aW9uLk5vbmUgOiBzdGFydERpcmVjdGlvbiArIDE7XG4gICAgICAgIHRoaXMuZ3JpZC5zb3J0RGltZW5zaW9uKGRpbWVuc2lvbiwgZGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG9uRGltRHJhZ092ZXIoZXZlbnQsIGRpbWVuc2lvbj86IFBpdm90RGltZW5zaW9uVHlwZSkge1xuICAgICAgICBpZiAoIWV2ZW50LmRyYWdDaGlwIHx8ICFldmVudC5kcmFnQ2hpcC5kYXRhPy5waXZvdEFyZWEpIHJldHVybjtcbiAgICAgICAgY29uc3QgdHlwZU1pc21hdGNoID0gZGltZW5zaW9uICE9PSB1bmRlZmluZWQgPyB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcy5maW5kKHggPT4geC5tZW1iZXIgPT09IGV2ZW50LmRyYWdDaGlwLmlkXG4gICAgICAgICAgICB8fCB4LmRpc3BsYXlOYW1lID09PSBldmVudC5kcmFnQ2hpcC5pZCkgOlxuICAgICAgICAgICAgIXRoaXMuZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzLmZpbmQoeCA9PiB4Lm1lbWJlciA9PT0gZXZlbnQuZHJhZ0NoaXAuaWQgfHwgeC5kaXNwbGF5TmFtZSA9PT0gZXZlbnQuZHJhZ0NoaXAuaWQpO1xuICAgICAgICBpZiAodHlwZU1pc21hdGNoKSB7XG4gICAgICAgICAgICAvLyBjYW5ub3QgZHJhZyBiZXR3ZWVuIGRpbWVuc2lvbnMgYW5kIHZhbHVlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UgYXJlIGluIHRoZSBsZWZ0IGhhbGYgb2YgdGhlIGNoaXAsIGRyb3Agb24gdGhlIGxlZnRcbiAgICAgICAgLy8gZWxzZSBkcm9wIG9uIHRoZSByaWdodCBvZiB0aGUgY2hpcFxuICAgICAgICBjb25zdCBjbGllbnRSZWN0ID0gZXZlbnQub3duZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgcG9zID0gY2xpZW50UmVjdC53aWR0aCAvIDI7XG5cbiAgICAgICAgdGhpcy5fZHJvcFBvcyA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQub2Zmc2V0WCA+IHBvcyA/IERyb3BQb3NpdGlvbi5BZnRlckRyb3BUYXJnZXQgOiBEcm9wUG9zaXRpb24uQmVmb3JlRHJvcFRhcmdldDtcbiAgICAgICAgaWYgKHRoaXMuX2Ryb3BQb3MgPT09IERyb3BQb3NpdGlvbi5BZnRlckRyb3BUYXJnZXQpIHtcbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLm5hdGl2ZUVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICBldmVudC5vd25lci5uYXRpdmVFbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudC5vd25lci5uYXRpdmVFbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICBldmVudC5vd25lci5uYXRpdmVFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvbkRpbURyYWdMZWF2ZShldmVudCkge1xuICAgICAgICBldmVudC5vd25lci5uYXRpdmVFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICBldmVudC5vd25lci5uYXRpdmVFbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIHRoaXMuX2Ryb3BQb3MgPSBEcm9wUG9zaXRpb24uQWZ0ZXJEcm9wVGFyZ2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb25BcmVhRHJhZ0xlYXZlKGV2ZW50LCBhcmVhKSB7XG4gICAgICAgIGNvbnN0IGRhdGFDaGlwcyA9IGFyZWEuY2hpcHNMaXN0LnRvQXJyYXkoKS5maWx0ZXIoeCA9PiB0aGlzLm5vdGlmaWNhdGlvbkNoaXBzLnRvQXJyYXkoKS5pbmRleE9mKHgpID09PSAtMSk7XG4gICAgICAgIGRhdGFDaGlwcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQubmF0aXZlRWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQubmF0aXZlRWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvblZhbHVlRHJvcChldmVudCwgYXJlYSkge1xuICAgICAgICBpZiAoIShldmVudC5kcmFnQ2hpcCAmJiBldmVudC5kcmFnQ2hpcC5kYXRhPy5waXZvdEFyZWEpICYmICEoZXZlbnQuZHJhZ0RhdGE/LmNoaXAgJiYgISFldmVudC5kcmFnRGF0YS5jaGlwLmRhdGEucGl2b3RBcmVhKSkgcmV0dXJuO1xuICAgICAgICAvL3ZhbHVlcyBjYW4gb25seSBiZSByZW9yZGVyZWRcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5ncmlkLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXM7XG4gICAgICAgIGNvbnN0IGRyYWdJZCA9IGV2ZW50LmRyYWdDaGlwPy5pZCB8fCBldmVudC5kcmFnRGF0YT8uY2hpcC5pZDtcbiAgICAgICAgY29uc3QgY2hpcHNBcnJheSA9IGFyZWEuY2hpcHNMaXN0LnRvQXJyYXkoKTtcbiAgICAgICAgbGV0IGNoaXBJbmRleCA9IGNoaXBzQXJyYXkuaW5kZXhPZihldmVudC5vd25lcikgIT09IC0xID8gY2hpcHNBcnJheS5pbmRleE9mKGV2ZW50Lm93bmVyKSA6IGNoaXBzQXJyYXkubGVuZ3RoO1xuICAgICAgICBjaGlwSW5kZXggPSB0aGlzLl9kcm9wUG9zID09PSBEcm9wUG9zaXRpb24uQWZ0ZXJEcm9wVGFyZ2V0ID8gY2hpcEluZGV4ICsgMSA6IGNoaXBJbmRleDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXMuZmluZCh4ID0+IHgubWVtYmVyID09PSBkcmFnSWQgfHwgeC5kaXNwbGF5TmFtZSA9PT0gZHJhZ0lkKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBkcmFnQ2hpcEluZGV4ID0gY2hpcHNBcnJheS5pbmRleE9mKGV2ZW50LmRyYWdDaGlwIHx8IGV2ZW50LmRyYWdEYXRhLmNoaXApO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm1vdmVWYWx1ZSh2YWx1ZSwgZHJhZ0NoaXBJbmRleCA+PSBjaGlwSW5kZXggPyBjaGlwSW5kZXggOiBjaGlwSW5kZXggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb25EaW1Ecm9wKGV2ZW50LCBhcmVhLCBkaW1lbnNpb25UeXBlOiBQaXZvdERpbWVuc2lvblR5cGUpIHtcbiAgICAgICAgaWYgKCEoZXZlbnQuZHJhZ0NoaXAgJiYgZXZlbnQuZHJhZ0NoaXAuZGF0YT8ucGl2b3RBcmVhKSAmJiAhKGV2ZW50LmRyYWdEYXRhPy5jaGlwICYmICEhZXZlbnQuZHJhZ0RhdGEuY2hpcC5kYXRhLnBpdm90QXJlYSkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZHJhZ0lkID0gZXZlbnQuZHJhZ0NoaXA/LmlkIHx8IGV2ZW50LmRyYWdEYXRhPy5jaGlwLmlkO1xuICAgICAgICBjb25zdCBjdXJyZW50RGltID0gdGhpcy5ncmlkLmdldERpbWVuc2lvbnNCeVR5cGUoZGltZW5zaW9uVHlwZSk7XG4gICAgICAgIGNvbnN0IGNoaXBzQXJyYXkgPSBhcmVhLmNoaXBzTGlzdC50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IGNoaXAgPSBjaGlwc0FycmF5LmZpbmQoeCA9PiB4LmlkID09PSBkcmFnSWQpO1xuICAgICAgICBjb25zdCBpc05ld0NoaXAgPSBjaGlwID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGlzUmVvcmRlciA9IGV2ZW50Lm93bmVyLmlkICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIC8vY29uc3QgY2hpcEluZGV4ID0gY2hpcHNBcnJheS5pbmRleE9mKGV2ZW50Lm93bmVyKSAhPT0gLTEgPyBjaGlwc0FycmF5LmluZGV4T2YoZXZlbnQub3duZXIpIDogY2hpcHNBcnJheS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNoaXBJbmRleCA9IGN1cnJlbnREaW0uZmluZEluZGV4KHggPT4geC5tZW1iZXJOYW1lID09PSBldmVudC5vd25lci5pZCkgIT09IC0xID9cbiAgICAgICAgICAgIGN1cnJlbnREaW0uZmluZEluZGV4KHggPT4geC5tZW1iZXJOYW1lID09PSBldmVudC5vd25lci5pZCkgOiBjdXJyZW50RGltLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLl9kcm9wUG9zID09PSBEcm9wUG9zaXRpb24uQWZ0ZXJEcm9wVGFyZ2V0ID8gY2hpcEluZGV4ICsgMSA6IGNoaXBJbmRleDtcbiAgICAgICAgaWYgKGlzTmV3Q2hpcCkge1xuICAgICAgICAgICAgLy8gY2hpcCBtb3ZlZCBmcm9tIGFuIGV4dGVybmFsIGNvbGxlY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGRpbSA9IHRoaXMuZ3JpZC5hbGxEaW1lbnNpb25zLmZpbmQoeCA9PiB4ICYmIHgubWVtYmVyTmFtZSA9PT0gZHJhZ0lkKTtcbiAgICAgICAgICAgIGlmICghZGltKSB7XG4gICAgICAgICAgICAgICAgLy8geW91IGhhdmUgZHJhZ2dlZCBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBkaW1lbnNpb25cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdyaWQubW92ZURpbWVuc2lvbihkaW0sIGRpbWVuc2lvblR5cGUsIHRhcmdldEluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Jlb3JkZXIpIHtcbiAgICAgICAgICAgIC8vIGNoaXAgZnJvbSBzYW1lIGNvbGxlY3Rpb24sIHJlb3JkZXJlZC5cbiAgICAgICAgICAgIGNvbnN0IG5ld0RpbSA9IGN1cnJlbnREaW0uZmluZCh4ID0+IHgubWVtYmVyTmFtZSA9PT0gZHJhZ0lkKTtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdDaGlwSW5kZXggPSBjdXJyZW50RGltLmZpbmRJbmRleCh4ID0+IHgubWVtYmVyTmFtZSA9PT0gZHJhZ0lkKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5tb3ZlRGltZW5zaW9uKG5ld0RpbSwgZGltZW5zaW9uVHlwZSwgZHJhZ0NoaXBJbmRleCA+IGNoaXBJbmRleCA/IHRhcmdldEluZGV4IDogdGFyZ2V0SW5kZXggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5ncmlkLmRpbWVuc2lvbnNDaGFuZ2UuZW1pdCh7IGRpbWVuc2lvbnM6IGN1cnJlbnREaW0sIGRpbWVuc2lvbkNvbGxlY3Rpb25UeXBlOiBkaW1lbnNpb25UeXBlIH0pO1xuICAgICAgICAvLyBjbGVhbiBzdGF0ZXNcbiAgICAgICAgdGhpcy5vbkRpbURyYWdFbmQoKTtcbiAgICAgICAgdGhpcy5vbkFyZWFEcmFnTGVhdmUoZXZlbnQsIGFyZWEpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cGRhdGVEcm9wRG93bih2YWx1ZTogSVBpdm90VmFsdWUsIGRyb3Bkb3duOiBJZ3hEcm9wRG93bkNvbXBvbmVudCwgY2hpcDogSWd4Q2hpcENvbXBvbmVudCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGRyb3Bkb3duLndpZHRoID0gY2hpcC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoICsgJ3B4JztcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGVMaXN0ID0gUGl2b3RVdGlsLmdldEFnZ3JlZ2F0ZUxpc3QodmFsdWUsIHRoaXMuZ3JpZCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgZHJvcGRvd24ub3Blbih0aGlzLl9zdWJNZW51T3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG59XG4iLCI8ZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZF9fd3JhcHBlciBpZ3gtZ3JpZC10aGVhZF9fd3JhcHBlci0tcGl2b3RcIiByb2xlPVwicm93XCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdHJcIiByb2xlPVwicm93XCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSdpZ3gtZ3JpZF9fdHItcGl2b3QtLWZpbHRlci1jb250YWluZXInPlxuICAgICAgICAgICAgICAgIDxkaXYgI3Bpdm90RmlsdGVyQ29udGFpbmVyICpuZ0lmPVwiZ3JpZC5zaG93UGl2b3RDb25maWd1cmF0aW9uVUlcIlxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3QgaWd4LWdyaWRfX3RyLXBpdm90LS1maWx0ZXJcIiBbc3R5bGUubWluLXdpZHRoLnB4XT1cImdyaWQucGl2b3RSb3dXaWR0aHMgLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiZ3JpZC5waXZvdFJvd1dpZHRocyAtIDFcIiAoaWd4RHJhZ0xlYXZlKT1cIm9uQXJlYURyYWdMZWF2ZSgkZXZlbnQsIGZpbHRlckFyZWEpXCJcbiAgICAgICAgICAgICAgICAgICAgIGlneERyb3AgKGRyb3BwZWQpPVwib25EaW1Ecm9wKCRldmVudCwgZmlsdGVyQXJlYSwgMilcIiAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBGaWx0ZXIgYXJlYSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGlneC1jaGlwcy1hcmVhICNmaWx0ZXJBcmVhIGRyb3BwYWJsZT0ndHJ1ZSc+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSdlbXB0eScgaWd4RHJvcCAoZHJvcHBlZCk9XCJvbkRpbURyb3AoJGV2ZW50LCBmaWx0ZXJBcmVhLCAyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JpZC5maWx0ZXJEaW1lbnNpb25zLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSdpZ3gtZ3JpZF9fcGl2b3QtZW1wdHktY2hpcC1hcmVhJz57e2dyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Bpdm90X2VtcHR5X2ZpbHRlcl9kcm9wX2FyZWF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiB0aGlzLmZpbHRlckFyZWFEaW1lbnNpb25zOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190ci1waXZvdC0tY2hpcF9kcm9wX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT0nZ2V0QXJlYUhlaWdodChmaWx0ZXJBcmVhKSc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcCBbaWRdPVwiZmlsdGVyLm1lbWJlck5hbWVcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbZGlzcGxheURlbnNpdHldPVwiZ3JpZC5kaXNwbGF5RGVuc2l0eVwiIFtkYXRhXT1cInsgcGl2b3RBcmVhOiAnZmlsdGVyJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZSk9XCJmaWx0ZXJSZW1vdmVkKCRldmVudClcIiAoZHJhZ092ZXIpPVwib25EaW1EcmFnT3ZlcigkZXZlbnQsIDIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdMZWF2ZSk9XCJvbkRpbURyYWdMZWF2ZSgkZXZlbnQpXCIgKGRyYWdEcm9wKT1cIm9uRGltRHJvcCgkZXZlbnQsIGZpbHRlckFyZWEsIDIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdmVTdGFydCk9J29uRGltRHJhZ1N0YXJ0KCRldmVudCwgZmlsdGVyQXJlYSknIChtb3ZlRW5kKT0nb25EaW1EcmFnRW5kKCknPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24gaWd4UHJlZml4IChwb2ludGVyZG93bik9J29uRmlsdGVyaW5nSWNvblBvaW50ZXJEb3duKCRldmVudCknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSdvbkZpbHRlcmluZ0ljb25DbGljaygkZXZlbnQsIGZpbHRlciknPmZpbHRlcl9saXN0PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmaWx0ZXIuZGlzcGxheU5hbWUgfHwgZmlsdGVyLm1lbWJlck5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nbGFzdCc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3QtLWNoaXBfZHJvcF9pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPSdnZXRBcmVhSGVpZ2h0KGZpbHRlckFyZWEpJz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcCBpZ3hEcm9wIChkcmFnRHJvcCk9XCJvbkRpbURyb3AoJGV2ZW50LCBmaWx0ZXJBcmVhLCAyKVwiICNub3RpZnlDaGlwIFtoaWRkZW5dPSd0cnVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJncmlkLmRpc3BsYXlEZW5zaXR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF9maWx0ZXJfZHJvcF9jaGlwfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgIDwvaWd4LWNoaXBzLWFyZWE+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fcGl2b3QtZmlsdGVyLXRvZ2dsZVwiICpuZ0lmPVwiaXNGaWx0ZXJzQnV0dG9uICYmIGdyaWQuZmlsdGVyRGltZW5zaW9ucy5sZW5ndGggIT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvbiAjZmlsdGVySWNvbiAocG9pbnRlcmRvd24pPSdvbkZpbHRlcmluZ0ljb25Qb2ludGVyRG93bigkZXZlbnQpJyAoY2xpY2spPSdvbkZpbHRlcnNBcmVhRHJvcGRvd25DbGljaygkZXZlbnQpJz5maWx0ZXJfbGlzdDwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWJhZGdlIHZhbHVlPVwie3t0aGlzLmZpbHRlckRyb3Bkb3duRGltZW5zaW9ucy5zaXplfX1cIj48L2lneC1iYWRnZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0naWd4LWdyaWRfX3RyLXBpdm90LS1kcm9wLXJvdy1hcmVhJyAoaWd4RHJhZ0xlYXZlKT1cIm9uQXJlYURyYWdMZWF2ZSgkZXZlbnQsIHJvd0FyZWEpXCIgaWd4RHJvcFxuICAgICAgICAgICAgICAgICAgICAgKGRyb3BwZWQpPVwib25EaW1Ecm9wKCRldmVudCwgcm93QXJlYSwgMClcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3RyLXBpdm90LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAjcGl2b3RDb2x1bW5Db250YWluZXIgKm5nSWY9XCJncmlkLnNob3dQaXZvdENvbmZpZ3VyYXRpb25VSVwiIGNsYXNzPVwiaWd4LWdyaWRfX3RyLXBpdm90XCJcbiAgICAgICAgICAgICAgICAgICAgIChkcm9wcGVkKT1cIm9uRGltRHJvcCgkZXZlbnQsIGNvbEFyZWEsIDEpXCIgaWd4RHJvcCAoaWd4RHJhZ0xlYXZlKT1cIm9uQXJlYURyYWdMZWF2ZSgkZXZlbnQsIGNvbEFyZWEpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQ29sdW1ucyBhcmVhIC0tPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWNoaXBzLWFyZWEgI2NvbEFyZWEgZHJvcHBhYmxlPSd0cnVlJz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9J2VtcHR5JyAoZHJvcHBlZCk9XCJvbkRpbURyb3AoJGV2ZW50LCBjb2xBcmVhLCAxKVwiIGlneERyb3BcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JpZC5jb2x1bW5EaW1lbnNpb25zLmxlbmd0aCA9PT0gMFwiIGNsYXNzPSdpZ3gtZ3JpZF9fcGl2b3QtZW1wdHktY2hpcC1hcmVhJz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGl2b3RfZW1wdHlfY29sdW1uX2Ryb3BfYXJlYX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGdyaWQuY29sdW1uRGltZW5zaW9uczsgbGV0IGxhc3QgPSBsYXN0O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3QtLWNoaXBfZHJvcF9pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09J2dldEFyZWFIZWlnaHQoY29sQXJlYSknPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWNoaXAgW2RyYWdnYWJsZV09XCJ0cnVlXCIgW2lkXT1cImNvbC5tZW1iZXJOYW1lXCIgW2Rpc3BsYXlEZW5zaXR5XT1cImdyaWQuZGlzcGxheURlbnNpdHlcIiBbZGF0YV09XCJ7IHBpdm90QXJlYTogJ2NvbHVtbicgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmUpPVwiY29sdW1uUmVtb3ZlZCgkZXZlbnQpXCIgKGRyYWdPdmVyKT1cIm9uRGltRHJhZ092ZXIoJGV2ZW50LCAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnTGVhdmUpPVwib25EaW1EcmFnTGVhdmUoJGV2ZW50KVwiIChkcmFnRHJvcCk9XCJvbkRpbURyb3AoJGV2ZW50LCBjb2xBcmVhLCAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3ZlU3RhcnQpPSdvbkRpbURyYWdTdGFydCgkZXZlbnQsIGNvbEFyZWEpJyAobW92ZUVuZCk9J29uRGltRHJhZ0VuZCgpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGlwU29ydCgkZXZlbnQsIGNvbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uIGlneFByZWZpeD52aWV3X2NvbHVtbjwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvbiBpZ3hQcmVmaXggKHBvaW50ZXJkb3duKT0nb25GaWx0ZXJpbmdJY29uUG9pbnRlckRvd24oJGV2ZW50KSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9J29uRmlsdGVyaW5nSWNvbkNsaWNrKCRldmVudCwgY29sKSc+ZmlsdGVyX2xpc3Q8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbC5kaXNwbGF5TmFtZSB8fCBjb2wubWVtYmVyTmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvbiAqbmdJZj1cImNvbC5zb3J0RGlyZWN0aW9uXCIgaWd4U3VmZml4PiB7eyBjb2wuc29ydERpcmVjdGlvbiA8IDIgPyAnYXJyb3dfdXB3YXJkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYXJyb3dfZG93bndhcmQnIH19PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9J2xhc3QnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3RyLXBpdm90LS1jaGlwX2Ryb3BfaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT0nZ2V0QXJlYUhlaWdodChjb2xBcmVhKSc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWNoaXAgaWd4RHJvcCAoZHJhZ0Ryb3ApPVwib25EaW1Ecm9wKCRldmVudCwgY29sQXJlYSwgMSlcIiAjbm90aWZ5Q2hpcCBbaGlkZGVuXT0ndHJ1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiZ3JpZC5kaXNwbGF5RGVuc2l0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGl2b3RfY29sdW1uX2Ryb3BfY2hpcH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC1jaGlwcy1hcmVhPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiAjcGl2b3RWYWx1ZUNvbnRhaW5lciAqbmdJZj1cImdyaWQuc2hvd1Bpdm90Q29uZmlndXJhdGlvblVJXCIgY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3RcIlxuICAgICAgICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgKGRyb3BwZWQpPVwib25WYWx1ZURyb3AoJGV2ZW50LCB2YWx1ZUFyZWEpXCIgaWd4RHJvcFxuICAgICAgICAgICAgICAgICAgICAgKGlneERyYWdMZWF2ZSk9XCJvbkFyZWFEcmFnTGVhdmUoJGV2ZW50LCB2YWx1ZUFyZWEpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWUgYXJlYSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGlneC1jaGlwcy1hcmVhICN2YWx1ZUFyZWEgZHJvcHBhYmxlPSd0cnVlJz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9J2VtcHR5JyAoZHJvcHBlZCk9XCJvblZhbHVlRHJvcCgkZXZlbnQsIHZhbHVlQXJlYSlcIiBpZ3hEcm9wICpuZ0lmPVwiZ3JpZC52YWx1ZXMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSdpZ3gtZ3JpZF9fcGl2b3QtZW1wdHktY2hpcC1hcmVhJz57e2dyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Bpdm90X2VtcHR5X3ZhbHVlX2Ryb3BfYXJlYX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBncmlkLnZhbHVlczsgbGV0IGxhc3QgPSBsYXN0O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3QtLWNoaXBfZHJvcF9pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09J2dldEFyZWFIZWlnaHQodmFsdWVBcmVhKSc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcCAjY3VyckNoaXAgW2RyYWdnYWJsZV09XCJ0cnVlXCIgW2lkXT1cInZhbHVlLmRpc3BsYXlOYW1lIHx8IHZhbHVlLm1lbWJlclwiIFtkYXRhXT1cInsgcGl2b3RBcmVhOiAndmFsdWUnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiZ3JpZC5kaXNwbGF5RGVuc2l0eVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmUpPVwidmFsdWVSZW1vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ0xlYXZlKT1cIm9uRGltRHJhZ0xlYXZlKCRldmVudClcIiAoZHJhZ092ZXIpPVwib25EaW1EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdEcm9wKT1cIm9uVmFsdWVEcm9wKCRldmVudCwgdmFsdWVBcmVhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3RyLXBpdm90LXRvZ2dsZS1pY29uc1wiIGlneFByZWZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9J29uU3VtbWFyeUNsaWNrKCRldmVudCwgdmFsdWUsIGRyb3Bkb3duLCBjdXJyQ2hpcCknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT0nJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpJyBbaWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbl09XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uPmZ1bmN0aW9uczwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24+YXJyb3dfZHJvcF9kb3duPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncmlkLnZhbHVlQ2hpcFRlbXBsYXRlID8gZ3JpZC52YWx1ZUNoaXBUZW1wbGF0ZSA6IHZhbHVlQ2hpcERlZmF1bHRUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHZhbHVlIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9J2xhc3QnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3RyLXBpdm90LS1jaGlwX2Ryb3BfaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT0nZ2V0QXJlYUhlaWdodCh2YWx1ZUFyZWEpJz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcCBpZ3hEcm9wIChkcmFnRHJvcCk9XCJvblZhbHVlRHJvcCgkZXZlbnQsIHZhbHVlQXJlYSlcIiAjbm90aWZ5VmFsdWVDaGlwIFtoaWRkZW5dPSd0cnVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJncmlkLmRpc3BsYXlEZW5zaXR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF92YWx1ZV9kcm9wX2NoaXB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgPC9pZ3gtY2hpcHMtYXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHJvbGU9XCJyb3dncm91cFwiIGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRfX3dyYXBwZXJcIiBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIlxuICAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImFjdGl2ZURlc2NlbmRhbnRcIiBbY2xhc3MuaWd4LWdyaWRfX3RyLS1tcmxdPVwiaGFzTVJMXCI+XG5cbiAgICAgICAgPCEtLSBDb2x1bW4gaGVhZGVycyBhcmVhIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3RyXCIgcm9sZT1cInJvd1wiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiPlxuICAgICAgICAgICAgPGRpdiAjcGl2b3RDb250YWluZXIgY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3QgaWd4LWdyaWRfX3RyLXBpdm90LS1yb3ctYXJlYVwiXG4gICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJncmlkLnBpdm90Um93V2lkdGhzIC0gMVwiIChpZ3hEcmFnTGVhdmUpPVwib25BcmVhRHJhZ0xlYXZlKCRldmVudCwgcm93QXJlYSlcIiBpZ3hEcm9wXG4gICAgICAgICAgICAgICAgIChkcm9wcGVkKT1cIm9uRGltRHJvcCgkZXZlbnQsIHJvd0FyZWEsIDApXCIgKHBvaW50ZXJkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBSb3cgYXJlYSAtLT5cbiAgICAgICAgICAgICAgICA8aWd4LWNoaXBzLWFyZWEgI3Jvd0FyZWEgZHJvcHBhYmxlPSd0cnVlJz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyaWQuc2hvd1Bpdm90Q29uZmlndXJhdGlvblVJXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSdlbXB0eScgaWd4RHJvcCAoZHJvcHBlZCk9XCJvbkRpbURyb3AoJGV2ZW50LCByb3dBcmVhLCAwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdyaWQucm93RGltZW5zaW9ucy5sZW5ndGggPT09IDAgJiYgZ3JpZC5zaG93UGl2b3RDb25maWd1cmF0aW9uVUlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9J2lneC1ncmlkX19waXZvdC1lbXB0eS1jaGlwLWFyZWEnPnt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGl2b3RfZW1wdHlfcm93X2Ryb3BfYXJlYX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZ3JpZC5yb3dEaW1lbnNpb25zOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190ci1waXZvdC0tY2hpcF9kcm9wX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT0nZ2V0QXJlYUhlaWdodChyb3dBcmVhKSc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcCBbZHJhZ2dhYmxlXT1cInRydWVcIiBbaWRdPVwicm93Lm1lbWJlck5hbWVcIiBbZGlzcGxheURlbnNpdHldPVwiZ3JpZC5kaXNwbGF5RGVuc2l0eVwiIFtkYXRhXT1cInsgcGl2b3RBcmVhOiAncm93JyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZSk9XCJyb3dSZW1vdmVkKCRldmVudClcIiAoZHJhZ0xlYXZlKT1cIm9uRGltRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ0Ryb3ApPVwib25EaW1Ecm9wKCRldmVudCwgcm93QXJlYSwgMClcIiAoZHJhZ092ZXIpPVwib25EaW1EcmFnT3ZlcigkZXZlbnQsIDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdmVTdGFydCk9J29uRGltRHJhZ1N0YXJ0KCRldmVudCwgcm93QXJlYSknIChtb3ZlRW5kKT0nb25EaW1EcmFnRW5kKCknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoaXBTb3J0KCRldmVudCwgcm93KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24gaWd4UHJlZml4PnRhYmxlX3Jvd3M8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24gaWd4UHJlZml4IChwb2ludGVyZG93bik9J29uRmlsdGVyaW5nSWNvblBvaW50ZXJEb3duKCRldmVudCknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSdvbkZpbHRlcmluZ0ljb25DbGljaygkZXZlbnQsIHJvdyknPmZpbHRlcl9saXN0PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcm93LmRpc3BsYXlOYW1lIHx8IHJvdy5tZW1iZXJOYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uICpuZ0lmPVwicm93LnNvcnREaXJlY3Rpb25cIiBpZ3hTdWZmaXg+IHt7IHJvdy5zb3J0RGlyZWN0aW9uIDwgMiA/ICdhcnJvd191cHdhcmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdhcnJvd19kb3dud2FyZCcgfX08L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nbGFzdCc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdHItcGl2b3QtLWNoaXBfZHJvcF9pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPSdnZXRBcmVhSGVpZ2h0KHJvd0FyZWEpJz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcCBpZ3hEcm9wIChkcmFnRHJvcCk9XCJvbkRpbURyb3AoJGV2ZW50LCByb3dBcmVhLCAwKVwiICNub3RpZnlDaGlwIFtoaWRkZW5dPSd0cnVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJncmlkLmRpc3BsYXlEZW5zaXR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF9yb3dfZHJvcF9jaGlwfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvaWd4LWNoaXBzLWFyZWE+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBQaW5uZWQgY29sdW1ucyBjb2xsZWN0aW9uIGZyb20gdGhlIHN0YXJ0IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBpbm5lZENvbHVtbkNvbGxlY3Rpb24ubGVuZ3RoICYmIGdyaWQuaXNQaW5uaW5nVG9TdGFydFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBwaW5uZWRDb2x1bW5Db2xsZWN0aW9uIHwgaWd4VG9wTGV2ZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlneC1ncmlkLWhlYWRlci1ncm91cCBbbmdDbGFzc109XCJjb2x1bW4uaGVhZGVyR3JvdXBDbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb2x1bW4uaGVhZGVyR3JvdXBTdHlsZXMgfCBpZ3hIZWFkZXJHcm91cFN0eWxlOmNvbHVtbjpncmlkLnBpcGVUcmlnZ2VyXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sdW1uLnJlc29sdmVkV2lkdGggfCBpZ3hIZWFkZXJHcm91cFdpZHRoOmdyaWQuZGVmYXVsdEhlYWRlckdyb3VwTWluV2lkdGg6aGFzTVJMXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpc109XCJjb2x1bW4ucmVzb2x2ZWRXaWR0aCB8IGlneEhlYWRlckdyb3VwV2lkdGg6Z3JpZC5kZWZhdWx0SGVhZGVyR3JvdXBNaW5XaWR0aDpoYXNNUkxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJncmlkLm5hdmlnYXRpb24uZm9jdXNPdXRSb3dIZWFkZXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC1ncmlkLWhlYWRlci1ncm91cD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkLXRoZWFkLS12aXJ0dWFsaXphdGlvbldyYXBwZXJcIiBbc3R5bGUubWF4LWhlaWdodC5weF09J21heENvbnRhaW5lckhlaWdodCc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkLXRoZWFkX19ncm91cCBpZ3gtZ3JpZC10aGVhZC0tdmlydHVhbGl6YXRpb25Db250YWluZXJcIiBbc3R5bGUuaGVpZ2h0LnB4XT0ndG90YWxEZXB0aCA+IDEgPyBncmlkLnJvd0hlaWdodCA6IHVuZGVmaW5lZCcgKm5nRm9yPSdsZXQgZGltTGV2ZWxDb2x1bW5zIG9mIGNvbHVtbkRpbWVuc2lvbnNCeUxldmVsOyBsZXQgaSA9IGluZGV4JyBbc3R5bGUud2lkdGgucHhdPSdncmlkLnVucGlubmVkV2lkdGgnPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciAjaGVhZGVyVmlydHVhbENvbnRhaW5lciBsZXQtY29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWd4R3JpZEZvck9mXT1cImRpbUxldmVsQ29sdW1uc1wiIFtpZ3hHcmlkRm9yT2ZVbmlxdWVTaXplQ2FjaGVdID0gJ3RydWUnIFtpZ3hGb3JTY3JvbGxDb250YWluZXJdPVwiZ3JpZC5wYXJlbnRWaXJ0RGlyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JDb250YWluZXJTaXplXT1cImdyaWQudW5waW5uZWRXaWR0aFwiIFtpZ3hGb3JUcmFja0J5XT1cImdyaWQudHJhY2tDb2x1bW5DaGFuZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JTaXplUHJvcE5hbWVdPVwiJ2NhbGNQaXhlbFdpZHRoJ1wiIFtpZ3hGb3JTY3JvbGxPcmllbnRhdGlvbl09XCInaG9yaXpvbnRhbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtZ3JpZC1oZWFkZXItZ3JvdXAgW25nQ2xhc3NdPVwiY29sdW1uLmhlYWRlckdyb3VwQ2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPSd0b3RhbERlcHRoID4gMSA/IGNhbGNIZWlnaHQoY29sdW1uLCBpKSA6IHVuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29sdW1uLmhlYWRlckdyb3VwU3R5bGVzIHxpZ3hIZWFkZXJHcm91cFN0eWxlOmNvbHVtbjpncmlkLnBpcGVUcmlnZ2VyXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbHVtbi5yZXNvbHZlZFdpZHRoIHwgaWd4SGVhZGVyR3JvdXBXaWR0aDpncmlkLmRlZmF1bHRIZWFkZXJHcm91cE1pbldpZHRoOmhhc01STFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzXT1cImNvbHVtbi5yZXNvbHZlZFdpZHRoIHwgaWd4SGVhZGVyR3JvdXBXaWR0aDpncmlkLmRlZmF1bHRIZWFkZXJHcm91cE1pbldpZHRoOmhhc01STFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdHItcGl2b3QtLWNvbHVtbkRpbWVuc2lvbkxlYWZdID0gJ2lzRHVwbGljYXRlT2ZFeGlzdGluZ1BhcmVudChjb2x1bW4sIGkpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaWd4LWdyaWRfX3RyLXBpdm90LS1jb2x1bW5NdWx0aVJvd1NwYW5dID0gJ2lzTXVsdGlSb3coY29sdW1uLCBpKSdcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWdyaWQtaGVhZGVyLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUGlubmVkIGNvbHVtbnMgY29sbGVjdGlvbiBhdCB0aGUgZW5kIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBpbm5lZENvbHVtbkNvbGxlY3Rpb24ubGVuZ3RoICYmICFncmlkLmlzUGlubmluZ1RvU3RhcnRcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgcGlubmVkQ29sdW1uQ29sbGVjdGlvbiB8IGlneFRvcExldmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtZ3JpZC1oZWFkZXItZ3JvdXAgW25nQ2xhc3NdPVwiY29sdW1uLmhlYWRlckdyb3VwQ2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29sdW1uLmhlYWRlckdyb3VwU3R5bGVzIHxpZ3hIZWFkZXJHcm91cFN0eWxlOmNvbHVtbjpncmlkLnBpcGVUcmlnZ2VyXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sdW1uLnJlc29sdmVkV2lkdGggfCBpZ3hIZWFkZXJHcm91cFdpZHRoOmdyaWQuZGVmYXVsdEhlYWRlckdyb3VwTWluV2lkdGg6aGFzTVJMXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpc109XCJjb2x1bW4ucmVzb2x2ZWRXaWR0aCB8IGlneEhlYWRlckdyb3VwV2lkdGg6Z3JpZC5kZWZhdWx0SGVhZGVyR3JvdXBNaW5XaWR0aDpoYXNNUkxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cImNvbHVtbi5yaWdodFBpbm5lZE9mZnNldFwiIChwb2ludGVyZG93bik9XCJncmlkLm5hdmlnYXRpb24uZm9jdXNPdXRSb3dIZWFkZXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC1ncmlkLWhlYWRlci1ncm91cD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBIZWFkZXIgdGh1bWIgYXJlYSAtLT5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZF9fdGh1bWJcIiBbaGlkZGVuXT1cIiFncmlkLmhhc1ZlcnRpY2FsU2Nyb2xsKClcIiBbc3R5bGUud2lkdGgucHhdPVwiZ3JpZC5zY3JvbGxTaXplXCI+XG48L2Rpdj5cblxuPGlneC1kcm9wLWRvd24gI2Ryb3Bkb3duIChzZWxlY3Rpb25DaGFuZ2luZyk9J29uQWdncmVnYXRpb25DaGFuZ2UoJGV2ZW50KSc+XG4gICAgPGlneC1kcm9wLWRvd24taXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhZ2dyZWdhdGVMaXN0XCIgW3NlbGVjdGVkXT0naXNTZWxlY3RlZChpdGVtKScgW3ZhbHVlXT0naXRlbSc+XG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICA8L2lneC1kcm9wLWRvd24taXRlbT5cbjwvaWd4LWRyb3AtZG93bj5cblxuPGRpdiBbaGlkZGVuXT0ndHJ1ZSc+XG4gICAgPGlneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZyBbbWF4SGVpZ2h0XT0nZ3JpZC5leGNlbFN0eWxlRmlsdGVyTWF4SGVpZ2h0JyBbbWluSGVpZ2h0XT0nZ3JpZC5leGNlbFN0eWxlRmlsdGVyTWluSGVpZ2h0JyAjZXNmPlxuICAgICAgICA8ZGl2IGlneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zPlxuICAgICAgICAgICAgPGlneC1jaGlwcy1hcmVhICNkcm9wZG93bkNoaXBzPlxuICAgICAgICAgICAgICAgIDxpZ3gtY2hpcCAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIHRoaXMuZmlsdGVyRHJvcGRvd25EaW1lbnNpb25zXCIgW2lkXT1cImZpbHRlci5tZW1iZXJOYW1lXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiZ3JpZC5kaXNwbGF5RGVuc2l0eVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmUpPVwiZmlsdGVyUmVtb3ZlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2hpcENsaWNrKT0nb25GaWx0ZXJzU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpJyBbc2VsZWN0YWJsZV09J3RydWUnIFtzZWxlY3RlZF09J2ZpbHRlciA9PT0gdGhpcy5maWx0ZXJEcm9wZG93bkRpbWVuc2lvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlJz5cbiAgICAgICAgICAgICAgICB7e2ZpbHRlci5kaXNwbGF5TmFtZSB8fCBmaWx0ZXIubWVtYmVyTmFtZX19XG4gICAgICAgICAgICA8L2lneC1jaGlwPlxuICAgICAgICA8L2lneC1jaGlwcy1hcmVhPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlneC1leGNlbC1zdHlsZS1maWx0ZXItb3BlcmF0aW9ucz5cbiAgICAgICAgICAgIDxpZ3gtZXhjZWwtc3R5bGUtc2VhcmNoPjwvaWd4LWV4Y2VsLXN0eWxlLXNlYXJjaD5cbiAgICAgICAgPC9pZ3gtZXhjZWwtc3R5bGUtZmlsdGVyLW9wZXJhdGlvbnM+XG4gICAgPC9pZ3gtZ3JpZC1leGNlbC1zdHlsZS1maWx0ZXJpbmc+XG48L2Rpdj5cblxuPGRpdiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDAwMHB4XCI+XG4gICAgPGlneC1jaGlwcy1hcmVhICNmaWx0ZXJBcmVhSGlkZGVuIGRyb3BwYWJsZT0ndHJ1ZSc+XG4gICAgICAgIDxpZ3gtY2hpcCAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGdyaWQuZmlsdGVyRGltZW5zaW9uc1wiIFtpZF09XCJmaWx0ZXIubWVtYmVyTmFtZVwiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiZ3JpZC5kaXNwbGF5RGVuc2l0eVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmUpPVwiZmlsdGVyUmVtb3ZlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gaWd4UHJlZml4PmZpbHRlcl9saXN0PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIHt7ZmlsdGVyLmRpc3BsYXlOYW1lIHx8IGZpbHRlci5tZW1iZXJOYW1lfX1cbiAgICAgICAgPC9pZ3gtY2hpcD5cbiAgICA8L2lneC1jaGlwcy1hcmVhPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdmFsdWVDaGlwRGVmYXVsdFRlbXBsYXRlIGxldC12YWx1ZT5cbiAgICB7e3ZhbHVlLmFnZ3JlZ2F0ZS5rZXl9fSh7e3ZhbHVlLmRpc3BsYXlOYW1lIHx8IHZhbHVlLm1lbWJlcn19KVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -111,11 +111,11 @@ export class IgxNavbarComponent {
|
|
|
111
111
|
this.action.emit(this);
|
|
112
112
|
}
|
|
113
113
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxNavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
114
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.4", type: IgxNavbarComponent, isStandalone: true, selector: "igx-navbar", inputs: { id: "id", actionButtonIcon: "actionButtonIcon", title: "title", titleId: "titleId", isActionButtonVisible: ["isActionButtonVisible", "isActionButtonVisible", booleanAttribute] }, outputs: { action: "action" }, host: { properties: { "attr.id": "this.id" } }, queries: [{ propertyName: "actionIconTemplate", first: true, predicate: IgxNavbarActionDirective, descendants: true, read: IgxNavbarActionDirective }, { propertyName: "titleContent", first: true, predicate: IgxNavbarTitleDirective, descendants: true, read: IgxNavbarTitleDirective }], ngImport: i0, template: "<nav class=\"igx-navbar\" role=\"navigation\" [attr.aria-labelledby]=\"titleId\">\n <div class=\"igx-navbar__left\">\n <igx-icon\n (click)=\"_triggerAction()\"\n *ngIf=\"isActionButtonVisible\">\n {{actionButtonIcon}}\n </igx-icon>\n <ng-content select=\"igx-navbar-action, [igxNavbarAction]\"></ng-content>\n <h1\n *ngIf=\"!isTitleContentVisible\"\n class=\"igx-navbar__title\"\n [attr.id]=\"titleId\">\n {{ title }}\n </h1>\n <ng-content select=\"igx-navbar-title, [igxNavbarTitle]\"></ng-content>\n </div>\n <div class=\"igx-navbar__right\">\n <ng-content></ng-content>\n </div>\n</nav>\n", styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }] }); }
|
|
114
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.4", type: IgxNavbarComponent, isStandalone: true, selector: "igx-navbar", inputs: { id: "id", actionButtonIcon: "actionButtonIcon", title: "title", titleId: "titleId", isActionButtonVisible: ["isActionButtonVisible", "isActionButtonVisible", booleanAttribute] }, outputs: { action: "action" }, host: { properties: { "attr.id": "this.id" } }, queries: [{ propertyName: "actionIconTemplate", first: true, predicate: IgxNavbarActionDirective, descendants: true, read: IgxNavbarActionDirective }, { propertyName: "titleContent", first: true, predicate: IgxNavbarTitleDirective, descendants: true, read: IgxNavbarTitleDirective }], ngImport: i0, template: "<nav class=\"igx-navbar\" role=\"navigation\" [attr.aria-labelledby]=\"titleId\">\n <div class=\"igx-navbar__left\">\n <igx-icon\n (click)=\"_triggerAction()\"\n *ngIf=\"isActionButtonVisible\">\n {{actionButtonIcon}}\n </igx-icon>\n <ng-content select=\"igx-navbar-action, [igxNavbarAction]\"></ng-content>\n </div>\n <div class=\"igx-navbar__middle\">\n <h1\n *ngIf=\"!isTitleContentVisible\"\n class=\"igx-navbar__title\"\n [attr.id]=\"titleId\">\n {{ title }}\n </h1>\n <ng-content select=\"igx-navbar-title, [igxNavbarTitle]\"></ng-content>\n </div>\n <div class=\"igx-navbar__right\">\n <ng-content></ng-content>\n </div>\n</nav>\n", styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }] }); }
|
|
115
115
|
}
|
|
116
116
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxNavbarComponent, decorators: [{
|
|
117
117
|
type: Component,
|
|
118
|
-
args: [{ selector: 'igx-navbar', standalone: true, imports: [NgIf, IgxIconComponent], template: "<nav class=\"igx-navbar\" role=\"navigation\" [attr.aria-labelledby]=\"titleId\">\n <div class=\"igx-navbar__left\">\n <igx-icon\n (click)=\"_triggerAction()\"\n *ngIf=\"isActionButtonVisible\">\n {{actionButtonIcon}}\n </igx-icon>\n <ng-content select=\"igx-navbar-action, [igxNavbarAction]\"></ng-content>\n <h1\n *ngIf=\"!isTitleContentVisible\"\n class=\"igx-navbar__title\"\n [attr.id]=\"titleId\">\n {{ title }}\n </h1>\n <ng-content select=\"igx-navbar-title, [igxNavbarTitle]\"></ng-content>\n </div>\n <div class=\"igx-navbar__right\">\n <ng-content></ng-content>\n </div>\n</nav>\n", styles: [":host{display:block;width:100%}\n"] }]
|
|
118
|
+
args: [{ selector: 'igx-navbar', standalone: true, imports: [NgIf, IgxIconComponent], template: "<nav class=\"igx-navbar\" role=\"navigation\" [attr.aria-labelledby]=\"titleId\">\n <div class=\"igx-navbar__left\">\n <igx-icon\n (click)=\"_triggerAction()\"\n *ngIf=\"isActionButtonVisible\">\n {{actionButtonIcon}}\n </igx-icon>\n <ng-content select=\"igx-navbar-action, [igxNavbarAction]\"></ng-content>\n </div>\n <div class=\"igx-navbar__middle\">\n <h1\n *ngIf=\"!isTitleContentVisible\"\n class=\"igx-navbar__title\"\n [attr.id]=\"titleId\">\n {{ title }}\n </h1>\n <ng-content select=\"igx-navbar-title, [igxNavbarTitle]\"></ng-content>\n </div>\n <div class=\"igx-navbar__right\">\n <ng-content></ng-content>\n </div>\n</nav>\n", styles: [":host{display:block;width:100%}\n"] }]
|
|
119
119
|
}], propDecorators: { id: [{
|
|
120
120
|
type: HostBinding,
|
|
121
121
|
args: ['attr.id']
|
|
@@ -139,4 +139,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
139
139
|
type: Input,
|
|
140
140
|
args: [{ transform: booleanAttribute }]
|
|
141
141
|
}] } });
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9uYXZiYXIvbmF2YmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9uYXZiYXIvbmF2YmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFMUQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sd0JBQXdCOzhHQUF4Qix3QkFBd0I7a0dBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFKcEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUscUNBQXFDO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtpQkFDbkI7O0FBT0QsTUFBTSxPQUFPLHVCQUF1Qjs4R0FBdkIsdUJBQXVCO2tHQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBSm5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1DQUFtQztvQkFDN0MsVUFBVSxFQUFFLElBQUk7aUJBQ25COztBQUdELElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNoQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFnQkgsTUFBTSxPQUFPLGtCQUFrQjtJQWQvQjtRQWVJOzs7OztXQUtHO1FBR0ksT0FBRSxHQUFHLGNBQWMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQWtCdEM7Ozs7Ozs7Ozs7OztXQVlHO1FBQ2MsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBRWpFOzs7OztXQUtHO1FBRUksWUFBTyxHQUFHLG9CQUFvQixPQUFPLEVBQUUsRUFBRSxDQUFDO1FBY3pDLGNBQVMsR0FBRyxJQUFJLENBQUM7S0F3QzVCO0lBdENHOzs7OztPQUtHO0lBQ0gsSUFBVyxxQkFBcUIsQ0FBQyxLQUFjO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUNXLHFCQUFxQjtRQUM1QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuRCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxxQkFBcUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7OEdBdEdRLGtCQUFrQjtrR0FBbEIsa0JBQWtCLHNOQXFGUCxnQkFBZ0IsNEpBL0J0Qix3QkFBd0IsMkJBQVUsd0JBQXdCLDREQU0xRCx1QkFBdUIsMkJBQVUsdUJBQXVCLDZCQ3pIMUUsK3dCQXNCQSwyRkRvQ2MsSUFBSSw2RkFBRSxnQkFBZ0I7OzJGQUd2QixrQkFBa0I7a0JBZDlCLFNBQVM7K0JBQ0ksWUFBWSxjQVNWLElBQUksV0FDUCxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQzs4QkFZMUIsRUFBRTtzQkFGUixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLO2dCQVNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFRVSxLQUFLO3NCQUFwQixLQUFLO2dCQWVXLE1BQU07c0JBQXRCLE1BQU07Z0JBU0EsT0FBTztzQkFEYixLQUFLO2dCQU9JLGtCQUFrQjtzQkFEM0IsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRTtnQkFPaEUsWUFBWTtzQkFEckIsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRTtnQkEwQjdELHFCQUFxQjtzQkFEL0IsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBEaXJlY3RpdmUsXG4gICAgQ29udGVudENoaWxkLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcblxuLyoqXG4gKiBJZ3hBY3Rpb25JY29uIGlzIGEgY29udGFpbmVyIGZvciB0aGUgYWN0aW9uIG5hdiBpY29uIG9mIHRoZSBJZ3hOYXZiYXIuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaWd4LW5hdmJhci1hY3Rpb24sW2lneE5hdmJhckFjdGlvbl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4TmF2YmFyQWN0aW9uRGlyZWN0aXZlIHsgfVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2lneC1uYXZiYXItdGl0bGUsW2lneE5hdmJhclRpdGxlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hOYXZiYXJUaXRsZURpcmVjdGl2ZSB7IH1cblxubGV0IE5FWFRfSUQgPSAwO1xuLyoqXG4gKiAqKklnbml0ZSBVSSBmb3IgQW5ndWxhciBOYXZiYXIqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvbmF2YmFyLmh0bWwpXG4gKlxuICogVGhlIElnbml0ZSBVSSBOYXZiYXIgaXMgbW9zdCBjb21tb25seSB1c2VkIHRvIHByb3ZpZGUgYW4gYXBwIGhlYWRlciB3aXRoIGEgaGFtYnVyZ2VyIG1lbnUgYW5kIG5hdmlnYXRpb25cbiAqIHN0YXRlIHN1Y2ggYXMgYSBcIkdvIEJhY2tcIiBidXR0b24uIEl0IGFsc28gc3VwcG9ydHMgb3RoZXIgYWN0aW9ucyByZXByZXNlbnRlZCBieSBpY29ucy5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1uYXZiYXIgdGl0bGU9XCJTYW1wbGUgQXBwXCIgYWN0aW9uQnV0dG9uSWNvbj1cIm1lbnVcIj5cbiAqICAgPGlneC1pY29uPnNlYXJjaDwvaWd4LWljb24+XG4gKiAgIDxpZ3gtaWNvbj5mYXZvcml0ZTwvaWd4LWljb24+XG4gKiAgIDxpZ3gtaWNvbj5tb3JlX3ZlcnQ8L2lneC1pY29uPlxuICogPC9pZ3gtbmF2YmFyPlxuICogYGBgXG4gKi9cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtbmF2YmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ25hdmJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVzOiBbYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgYFxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgSWd4SWNvbkNvbXBvbmVudF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBJZ3hOYXZiYXJDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBgaWRgIGF0dHJpYnV0ZS4gSWYgbm90IHByb3ZpZGVkIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbmF2YmFyIFtpZF09XCInaWd4LW5hdmJhci0xMidcIiB0aXRsZT1cIlNhbXBsZSBBcHBcIiBhY3Rpb25CdXR0b25JY29uPVwibWVudVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LW5hdmJhci0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgaWNvbiBvZiB0aGUgYElneE5hdmJhckNvbXBvbmVudGAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbmF2YmFyIFt0aXRsZV09XCJjdXJyZW50Vmlld1wiIGFjdGlvbkJ1dHRvbkljb249XCJhcnJvd19iYWNrXCI+PC9pZ3gtbmF2YmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25CdXR0b25JY29uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0aXRsZSBvZiB0aGUgYElneE5hdmJhckNvbXBvbmVudGAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbmF2YmFyIHRpdGxlPVwiU2FtcGxlIEFwcFwiIGFjdGlvbkJ1dHRvbkljb249XCJtZW51XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnQgdGhhdCB3aWxsIGJlIHRocm93biB3aGVuIHRoZSBhY3Rpb24gaXMgZXhlY3V0ZWQsXG4gICAgICogcHJvdmlkZXMgcmVmZXJlbmNlIHRvIHRoZSBgSWd4TmF2YmFyYCBjb21wb25lbnQgYXMgYXJndW1lbnRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGFjdGlvbkV4YyhldmVudCl7XG4gICAgICogICAgIGFsZXJ0KFwiQWN0aW9uIEV4ZWN1dGUhXCIpO1xuICAgICAqIH1cbiAgICAgKiAgLy8uLlxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LW5hdmJhciAoYWN0aW9uKT1cImFjdGlvbkV4YygkZXZlbnQpXCIgdGl0bGU9XCJTYW1wbGUgQXBwXCIgYWN0aW9uQnV0dG9uSWNvbj1cIm1lbnVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4TmF2YmFyQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGl0bGVJZCBvZiB0aGUgYElneE5hdmJhckNvbXBvbmVudGAuIElmIG5vdCBzZXQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1uYXZiYXIgW3RpdGxlSWRdPVwiJ2lneC1uYXZiYXItNydcIiB0aXRsZT1cIlNhbXBsZSBBcHBcIiBhY3Rpb25CdXR0b25JY29uPVwibWVudVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRpdGxlSWQgPSBgaWd4LW5hdmJhci10aXRsZS0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4TmF2YmFyQWN0aW9uRGlyZWN0aXZlLCB7IHJlYWQ6IElneE5hdmJhckFjdGlvbkRpcmVjdGl2ZSB9KVxuICAgIHByb3RlY3RlZCBhY3Rpb25JY29uVGVtcGxhdGU6IElneE5hdmJhckFjdGlvbkRpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneE5hdmJhclRpdGxlRGlyZWN0aXZlLCB7IHJlYWQ6IElneE5hdmJhclRpdGxlRGlyZWN0aXZlIH0pXG4gICAgcHJvdGVjdGVkIHRpdGxlQ29udGVudDogSWd4TmF2YmFyVGl0bGVEaXJlY3RpdmU7XG5cbiAgICBwcml2YXRlIGlzVmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIGFjdGlvbiBidXR0b24gb2YgdGhlIGBJZ3hOYXZiYXJDb21wb25lbnRgIGlzIHZpc2libGUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbmF2YmFyIFt0aXRsZV09XCJjdXJyZW50Vmlld1wiIFtpc0FjdGlvbkJ1dHRvblZpc2libGVdPVwiJ2ZhbHNlJ1wiPjwvaWd4LW5hdmJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGlzQWN0aW9uQnV0dG9uVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgYElneE5hdmJhckNvbXBvbmVudGAgYWN0aW9uIGJ1dHRvbiBpcyB2aXNpYmxlLCB0cnVlL2ZhbHNlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwdWJsaWMgbmF2QmFyOiBJZ3hOYXZiYXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBhY3Rpb25CdXR0b25WaXNpYmlsZSA9IHRoaXMubmF2QmFyLmlzQWN0aW9uQnV0dG9uVmlzaWJsZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGdldCBpc0FjdGlvbkJ1dHRvblZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvbkljb25UZW1wbGF0ZSB8fCAhdGhpcy5hY3Rpb25CdXR0b25JY29uKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNUaXRsZUNvbnRlbnRWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50aXRsZUNvbnRlbnQgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBfdHJpZ2dlckFjdGlvbigpIHtcbiAgICAgICAgdGhpcy5hY3Rpb24uZW1pdCh0aGlzKTtcbiAgICB9XG59XG5cbiIsIjxuYXYgY2xhc3M9XCJpZ3gtbmF2YmFyXCIgcm9sZT1cIm5hdmlnYXRpb25cIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidGl0bGVJZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtbmF2YmFyX19sZWZ0XCI+XG4gICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgKGNsaWNrKT1cIl90cmlnZ2VyQWN0aW9uKClcIlxuICAgICAgICAgICAgKm5nSWY9XCJpc0FjdGlvbkJ1dHRvblZpc2libGVcIj5cbiAgICAgICAgICAgIHt7YWN0aW9uQnV0dG9uSWNvbn19XG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1uYXZiYXItYWN0aW9uLCBbaWd4TmF2YmFyQWN0aW9uXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LW5hdmJhcl9fbWlkZGxlXCI+XG4gICAgICAgIDxoMVxuICAgICAgICAgICAgKm5nSWY9XCIhaXNUaXRsZUNvbnRlbnRWaXNpYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LW5hdmJhcl9fdGl0bGVcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwidGl0bGVJZFwiPlxuICAgICAgICAgICAge3sgdGl0bGUgfX1cbiAgICAgICAgPC9oMT5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LW5hdmJhci10aXRsZSwgW2lneE5hdmJhclRpdGxlXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LW5hdmJhcl9fcmlnaHRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9uYXY+XG4iXX0=
|