igniteui-angular 17.1.8 → 17.1.10

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.
Files changed (39) hide show
  1. package/esm2022/lib/calendar/calendar-base.mjs +17 -1
  2. package/esm2022/lib/calendar/calendar.component.mjs +1 -1
  3. package/esm2022/lib/directives/date-time-editor/date-time-editor.directive.mjs +2 -2
  4. package/fesm2022/igniteui-angular.mjs +17 -1
  5. package/fesm2022/igniteui-angular.mjs.map +1 -1
  6. package/lib/calendar/calendar-base.d.ts +5 -5
  7. package/lib/calendar/calendar.component.d.ts +1 -1
  8. package/lib/core/styles/components/button-group/_button-group-theme.scss +0 -3
  9. package/lib/core/styles/components/chip/_chip-theme.scss +0 -6
  10. package/lib/core/styles/components/input/_input-group-component.scss +10 -0
  11. package/lib/core/styles/components/input/_input-group-theme.scss +23 -1
  12. package/lib/core/styles/components/query-builder/_query-builder-theme.scss +14 -2
  13. package/package.json +1 -1
  14. package/styles/igniteui-angular-dark.css +1 -1
  15. package/styles/igniteui-angular.css +1 -1
  16. package/styles/igniteui-bootstrap-dark.css +1 -1
  17. package/styles/igniteui-bootstrap-light.css +1 -1
  18. package/styles/igniteui-dark-green.css +1 -1
  19. package/styles/igniteui-fluent-dark-excel.css +1 -1
  20. package/styles/igniteui-fluent-dark-word.css +1 -1
  21. package/styles/igniteui-fluent-dark.css +1 -1
  22. package/styles/igniteui-fluent-light-excel.css +1 -1
  23. package/styles/igniteui-fluent-light-word.css +1 -1
  24. package/styles/igniteui-fluent-light.css +1 -1
  25. package/styles/igniteui-indigo-dark.css +1 -1
  26. package/styles/igniteui-indigo-light.css +1 -1
  27. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  28. package/styles/maps/igniteui-angular.css.map +1 -1
  29. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  30. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  31. package/styles/maps/igniteui-dark-green.css.map +1 -1
  32. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  33. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  34. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  35. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  36. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  37. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  38. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  39. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -943,4 +943,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
943
943
  type: HostListener,
944
944
  args: ['document:mouseup', ['$event']]
945
945
  }] } });
946
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFHWixnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxxQ0FBcUMsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25KLE9BQU8sRUFBaUIsZUFBZSxFQUFlLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsUUFBUSxF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dUJBQUMsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBNEQzQyxhQUFhO3NCQURuQixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjakMsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBY2hDLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyYW5zaXRpb24sIHRyaWdnZXIsIHVzZUFuaW1hdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgYm9vbGVhbkF0dHJpYnV0ZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nU3R5bGUsIE5nRm9yLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4Q2FsZW5kYXJTY3JvbGxNb250aERpcmVjdGl2ZSB9IGZyb20gJy4vY2FsZW5kYXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJQ2FsZW5kYXJEYXRlLCBJZ3hDYWxlbmRhclZpZXcsIFNjcm9sbE1vbnRoLCBtb250aFJhbmdlIH0gZnJvbSAnLi9jYWxlbmRhcic7XG5pbXBvcnQgeyBJZ3hNb250aFBpY2tlckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL21vbnRoLXBpY2tlci9tb250aC1waWNrZXItYmFzZSc7XG5pbXBvcnQgeyBJZ3hNb250aHNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tb250aHMtdmlldy9tb250aHMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4WWVhcnNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi95ZWFycy12aWV3L3llYXJzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IElneERheXNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIGRlYm91bmNlLCBza2lwTGFzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSVZpZXdDaGFuZ2luZ0V2ZW50QXJncyB9IGZyb20gJy4vZGF5cy12aWV3L2RheXMtdmlldy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4TW9udGhWaWV3U2xvdHNDYWxlbmRhciwgSWd4R2V0Vmlld0RhdGVDYWxlbmRhciB9IGZyb20gJy4vbW9udGhzLXZpZXcucGlwZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmYWRlSW4sIHNjYWxlSW5DZW50ZXIsIHNsaWRlSW5MZWZ0LCBzbGlkZUluUmlnaHQgfSBmcm9tICdpZ25pdGV1aS1hbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogQ2FsZW5kYXIgcHJvdmlkZXMgYSB3YXkgdG8gZGlzcGxheSBkYXRlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q2FsZW5kYXJNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWNhbGVuZGFyLXRoZW1lLCBpZ3gtaWNvbi10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBjYWxlbmRhciwgZGF0ZXBpY2tlciwgc2NoZWR1bGUsIGRhdGVcbiAqXG4gKiBAaWd4R3JvdXAgU2NoZWR1bGluZ1xuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIENhbGVuZGFyIHByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGRpc3BsYXkgYSBjYWxlbmRhciBhbmQgYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGRhdGVzIHVzaW5nIHNpbmdsZSwgbXVsdGlwbGVcbiAqIG9yIHJhbmdlIHNlbGVjdGlvbi5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtY2FsZW5kYXIgc2VsZWN0aW9uPVwicmFuZ2VcIj48L2lneC1jYWxlbmRhcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2FuaW1hdGVWaWV3JywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAwJywgdXNlQW5pbWF0aW9uKGZhZGVJbikpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgdXNlQW5pbWF0aW9uKHNjYWxlSW5DZW50ZXIsIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ICcuMnMnLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU2NhbGU6IC45XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdhbmltYXRlQ2hhbmdlJywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBwcmV2JywgdXNlQW5pbWF0aW9uKHNsaWRlSW5MZWZ0LCB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21Qb3NpdGlvbjogJ3RyYW5zbGF0ZVgoLTMwJSknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBuZXh0JywgdXNlQW5pbWF0aW9uKHNsaWRlSW5SaWdodCwge1xuICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBmcm9tUG9zaXRpb246ICd0cmFuc2xhdGVYKDMwJSknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC1jYWxlbmRhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgSWd4Q2FsZW5kYXJTY3JvbGxNb250aERpcmVjdGl2ZSwgTmdTdHlsZSwgSWd4SWNvbkNvbXBvbmVudCwgTmdGb3IsIElneERheXNWaWV3Q29tcG9uZW50LCBJZ3hNb250aHNWaWV3Q29tcG9uZW50LCBJZ3hZZWFyc1ZpZXdDb21wb25lbnQsIERhdGVQaXBlLCBJZ3hNb250aFZpZXdTbG90c0NhbGVuZGFyLCBJZ3hHZXRWaWV3RGF0ZUNhbGVuZGFyXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDYWxlbmRhckNvbXBvbmVudCBleHRlbmRzIElneE1vbnRoUGlja2VyQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBjYWxlbmRhci5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgd2lsbCBoYXZlIHZhbHVlIGBcImlneC1jYWxlbmRhci0wXCJgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBpZD1cIm15LWZpcnN0LWNhbGVuZGFyXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtY2FsZW5kYXItJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjYWxlbmRhciBoYXMgaGVhZGVyLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbaGFzSGVhZGVyXT1cImZhbHNlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGhhc0hlYWRlciA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGVhZGVyIHdpbGwgYmUgaW4gdmVydGljYWwgcG9zaXRpb24uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbdmVydGljYWxdPVwidHJ1ZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyB2ZXJ0aWNhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBudW1iZXIgb2YgbW9udGggdmlld3MgZGlzcGxheWVkLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYDFgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbbW9udGhzVmlld051bWJlcl09XCIyXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG1vbnRoc1ZpZXdOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb250aHNWaWV3TnVtYmVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgbW9udGhzVmlld051bWJlcih2YWw6IG51bWJlcikge1xuICAgICAgICBpZiAodmFsIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW9udGhzVmlld051bWJlciA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgd2VlayBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhbGVuZGFyIFtzaG93V2Vla051bWJlcnNdPVwidHJ1ZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQXBwbHkgdGhlIGRpZmZlcmVudCBzdGF0ZXMgZm9yIHRoZSB0cmFuc2l0aW9ucyBvZiBhbmltYXRlQ2hhbmdlXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYW5pbWF0aW9uQWN0aW9uOiBhbnkgPSAnJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXItLXZlcnRpY2FsJylcbiAgICBwdWJsaWMgZ2V0IHN0eWxlVmVydGljYWxDbGFzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVydGljYWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcicpXG4gICAgcHVibGljIHN0eWxlQ2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVmlld0NoaWxkIHRoYXQgcmVwcmVzZW50cyB0aGUgbW9udGhzIHZpZXcuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnbW9udGhzJywgeyByZWFkOiBJZ3hNb250aHNWaWV3Q29tcG9uZW50IH0pXG4gICAgcHVibGljIG1vbnRoc1ZpZXc6IElneE1vbnRoc1ZpZXdDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBNb250aCBidXR0b24sIHRoYXQgZGlzcGxheXMgdGhlIG1vbnRocyB2aWV3LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oJ21vbnRoc0J0bicpXG4gICAgcHVibGljIG1vbnRoc0J0bnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIC8qKlxuICAgICAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRlY2FkZSB2aWV3LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlY2FkZScsIHsgcmVhZDogSWd4WWVhcnNWaWV3Q29tcG9uZW50IH0pXG4gICAgcHVibGljIGRhY2FkZVZpZXc6IElneFllYXJzVmlld0NvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRheXMgdmlldy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkYXlzJywgeyByZWFkOiBJZ3hEYXlzVmlld0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBkYXlzVmlldzogSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3Q2hpbGRyZW5kZW4gcmVwcmVzZW50aW5nIGFsbCBvZiB0aGUgcmVuZGVyZWQgZGF5cyB2aWV3cy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCdkYXlzJywgeyByZWFkOiBJZ3hEYXlzVmlld0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBtb250aFZpZXdzOiBRdWVyeUxpc3Q8SWd4RGF5c1ZpZXdDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQnV0dG9uIGZvciBwcmV2aW91cyBtb250aC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdwcmV2TW9udGhCdG4nKVxuICAgIHB1YmxpYyBwcmV2TW9udGhCdG46IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBCdXR0b24gZm9yIG5leHQgbW9udGguXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnbmV4dE1vbnRoQnRuJylcbiAgICBwdWJsaWMgbmV4dE1vbnRoQnRuOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogRGVub3RlIGlmIHRoZSB5ZWFyIHZpZXcgaXMgYWN0aXZlLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNZZWFyVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhlYWRlclRlbXBsYXRlID0gIHRoaXMuY2FsZW5kYXIuaGVhZGVyVGVhbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVyVGVtcGxhdGUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGhlYWRlciB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU9XCJpZ3hDYWxlbmRhckhlYWRlclwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgaGVhZGVyVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdWJoZWFkZXIgdGVtcGxhdGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc3ViaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmNhbGVuZGFyLnN1YmhlYWRlclRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc3ViaGVhZGVyVGVtcGxhdGUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN1YmhlYWRlciB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgc3ViaGVhZGVyVGVtcGxhdGU9XCJpZ3hDYWxlbmRhclN1YmhlYWRlclwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc3ViaGVhZGVyVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5zdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgdGVtcGxhdGUgbWFya2VkIHdpdGggdGhlIGBpZ3hDYWxlbmRhckhlYWRlcmAgZGlyZWN0aXZlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhlYWRlckNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5oZWFkZXJDb250ZXh0O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ29udGV4dCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZTogRGF0ZSA9IHRoaXMuaGVhZGVyRGF0ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVDb250ZXh0KGRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbnRleHQgZm9yIHRoZSB0ZW1wbGF0ZSBtYXJrZWQgd2l0aCBlaXRoZXIgYGlneENhbGVuZGFyU3ViSGVhZGVyTW9udGhgXG4gICAgICogb3IgYGlneENhbGVuZGFyU3ViSGVhZGVyWWVhcmAgZGlyZWN0aXZlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5jb250ZXh0O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZTogRGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ29udGV4dChkYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEYXRlIGRpc3BsYXllZCBpbiBoZWFkZXJcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhlYWRlckRhdGUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZXMgPyB0aGlzLnNlbGVjdGVkRGF0ZXMgOiBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSksIHsgcmVhZDogSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTogSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSwgeyByZWFkOiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIHN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmVEYXRlID0gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gYXBwbHkgdGhlIGFjdGl2ZSBkYXRlIHdoZW4gdGhlIGNhbGVuZGFyIHZpZXcgaXMgY2hhbmdlZFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0RGF0ZTogRGF0ZTtcblxuICAgIC8qKlxuICAgICAqIERlbm90ZSBpZiB0aGUgY2FsZW5kYXIgdmlldyB3YXMgY2hhbmdlZCB3aXRoIHRoZSBrZXlib2FyZFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0tleWRvd25UcmlnZ2VyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNhbGxiYWNrOiAobmV4dCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9tb250aHNWaWV3TnVtYmVyID0gMTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbW9udGhWaWV3c0NoYW5nZXMkOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZWRvd24nLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZXVwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duUGFnZURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUGFnZURvd24gPSBldmVudC5rZXkgPT09ICdQYWdlRG93bic7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBpc1BhZ2VEb3duID8gMSA6IC0xO1xuICAgICAgICBsZXQgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgbGV0IGFjdGl2ZURhdGU7XG5cbiAgICAgICAgd2hpbGUgKCFhY3RpdmVEYXRlICYmIG1vbnRoVmlldykge1xuICAgICAgICAgICAgYWN0aXZlRGF0ZSA9IG1vbnRoVmlldy5kYXRlcy5maW5kKChkYXRlKSA9PiBkYXRlLm5hdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgbW9udGhWaWV3ID0gbW9udGhWaWV3Lm5leHRNb250aFZpZXc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0aXZlRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZSA9IG5ldyBEYXRlKGFjdGl2ZURhdGUuZGF0ZS5kYXRlKTtcblxuICAgICAgICAgICAgbGV0IHllYXIgPSB0aGlzLm5leHREYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgICAgIGxldCBtb250aCA9IHRoaXMubmV4dERhdGUuZ2V0TW9udGgoKSArIHN0ZXA7XG4gICAgICAgICAgICBpZiAoaXNQYWdlRG93bikge1xuICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoID0gMDsgeWVhciArPSBzdGVwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBtb250aCA9IDExOyB5ZWFyICs9IHN0ZXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IG1vbnRoUmFuZ2UodGhpcy5uZXh0RGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCk7XG5cbiAgICAgICAgICAgIGxldCBkYXkgPSB0aGlzLm5leHREYXRlLmdldERhdGUoKTtcbiAgICAgICAgICAgIGlmIChkYXkgPiByYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgIGRheSA9IHJhbmdlWzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5leHREYXRlLnNldERhdGUoZGF5KTtcbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUuc2V0TW9udGgobW9udGgpO1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBsZXQgZGF5SXRlbTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKCFkYXlJdGVtICYmIG1vbnRoVmlldykgfHwgKGRheUl0ZW0gJiYgIWRheUl0ZW0uaXNDdXJyZW50TW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0gPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZCkgPT4gZC5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF5SXRlbSAmJiBkYXlJdGVtLmlzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQYWdlRG93bikge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLm5leHRNb250aCh0cnVlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnByZXZpb3VzTW9udGgodHJ1ZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzTW9udGgodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uc2hpZnQucGFnZXVwJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNoaWZ0LnBhZ2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duU2hpZnRQYWdlVXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNEZWZhdWx0Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNQYWdlRG93biA9IGV2ZW50LmtleSA9PT0gJ1BhZ2VEb3duJztcbiAgICAgICAgY29uc3Qgc3RlcCA9IGlzUGFnZURvd24gPyAxIDogLTE7XG4gICAgICAgIHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLmNhbGVuZGFyTW9kZWwudGltZWRlbHRhKHRoaXMudmlld0RhdGUsICd5ZWFyJywgc3RlcCk7XG5cbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBpc1BhZ2VEb3duID8gU2Nyb2xsTW9udGguTkVYVCA6IFNjcm9sbE1vbnRoLlBSRVY7XG4gICAgICAgIHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IHRydWU7XG5cbiAgICAgICAgbGV0IG1vbnRoVmlldyA9IHRoaXMuZGF5c1ZpZXcgYXMgSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG4gICAgICAgIGxldCBhY3RpdmVEYXRlO1xuXG4gICAgICAgIHdoaWxlICghYWN0aXZlRGF0ZSAmJiBtb250aFZpZXcpIHtcbiAgICAgICAgICAgIGFjdGl2ZURhdGUgPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZGF0ZSkgPT4gZGF0ZS5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZURhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUgPSBuZXcgRGF0ZShhY3RpdmVEYXRlLmRhdGUuZGF0ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLm5leHREYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwO1xuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IG1vbnRoUmFuZ2UoeWVhciwgdGhpcy5uZXh0RGF0ZS5nZXRNb250aCgpKTtcblxuICAgICAgICAgICAgbGV0IGRheSA9IHRoaXMubmV4dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGRheSA+IHJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgZGF5ID0gcmFuZ2VbMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUuc2V0RGF0ZShkYXkpO1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBsZXQgZGF5SXRlbTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKCFkYXlJdGVtICYmIG1vbnRoVmlldykgfHwgKGRheUl0ZW0gJiYgIWRheUl0ZW0uaXNDdXJyZW50TW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0gPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZCkgPT4gZC5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF5SXRlbSAmJiBkYXlJdGVtLmlzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF5c1ZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZGF5c1ZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW5kJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRheXNWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLmRheXNWaWV3Lm9uS2V5ZG93bkVuZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9wIGNvbnRpbnVvdXMgbmF2aWdhdGlvbiBvbiBtb3VzZXVwIGV2ZW50XG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uTW91c2VVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiAhPT0gU2Nyb2xsTW9udGguTk9ORSkge1xuICAgICAgICAgICAgdGhpcy5zdG9wTW9udGhTY3JvbGwoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRTaWJsaW5nTW9udGhzKHRoaXMubW9udGhWaWV3cyk7XG4gICAgICAgIHRoaXMuX21vbnRoVmlld3NDaGFuZ2VzJCA9IHRoaXMubW9udGhWaWV3cy5jaGFuZ2VzLnN1YnNjcmliZShjID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2libGluZ01vbnRocyhjKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGFydE1vbnRoU2Nyb2xsJC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcE1vbnRoU2Nyb2xsJCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zY3JvbGxNb250aCQucGlwZShcbiAgICAgICAgICAgICAgICBza2lwTGFzdCgxKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZSgoKSA9PiBpbnRlcnZhbCgzMDApKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5zdG9wTW9udGhTY3JvbGwkKVxuICAgICAgICAgICAgKSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsTW9udGguUFJFVjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNNb250aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsTW9udGguTkVYVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxNb250aC5OT05FOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBpbiB0aGUgbW9udGggdmlldyBpZiBlbmFibGVkLFxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBkZWZhdWx0IGBEYXRlLmdldE1vbnRoKClgIHZhbHVlLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtYXR0ZWRNb250aCh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1hdFZpZXdzLm1vbnRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZXJNb250aC5mb3JtYXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXRNb250aCgpfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRvIHByZXZpb3VzIG1vbnRoXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHByZXZpb3VzTW9udGgoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc0tleWRvd25UcmlnZ2VyICYmIHRoaXMuYW5pbWF0aW9uQWN0aW9uID09PSBTY3JvbGxNb250aC5ORVhUKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMuY2FsZW5kYXJNb2RlbC5nZXRQcmV2TW9udGgodGhpcy52aWV3RGF0ZSk7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uQWN0aW9uID0gU2Nyb2xsTW9udGguUFJFVjtcbiAgICAgICAgdGhpcy5pc0tleWRvd25UcmlnZ2VyID0gaXNLZXlkb3duVHJpZ2dlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3VwcHJlc3NCbHVyKCkge1xuICAgICAgICB0aGlzLm1vbnRoVmlld3M/LmZvckVhY2goZCA9PiBkLnNob3VsZFJlc2V0RGF0ZSA9IGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuZGF5c1ZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZGF5c1ZpZXcuc2hvdWxkUmVzZXREYXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdG8gbmV4dCBtb250aFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0TW9udGgoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc0tleWRvd25UcmlnZ2VyICYmIHRoaXMuYW5pbWF0aW9uQWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzS2V5ZG93blRyaWdnZXIgPSBpc0tleWRvd25UcmlnZ2VyO1xuICAgICAgICB0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5jYWxlbmRhck1vZGVsLmdldE5leHRNb250aCh0aGlzLnZpZXdEYXRlKTtcbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBTY3JvbGxNb250aC5ORVhUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnRpbmlvdXMgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBwcmV2aW91cyBtb250aHNcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhcnRQcmV2TW9udGhTY3JvbGwgPSAoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhcnRNb250aFNjcm9sbCQubmV4dCgpO1xuICAgICAgICB0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsTW9udGguUFJFVjtcbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBTY3JvbGxNb250aC5QUkVWO1xuICAgICAgICB0aGlzLnByZXZpb3VzTW9udGgoaXNLZXlkb3duVHJpZ2dlcik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENvbnRpbmlvdXMgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBuZXh0IG1vbnRoc1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGFydE5leHRNb250aFNjcm9sbCA9IChpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpID0+IHtcbiAgICAgICAgdGhpcy5zdGFydE1vbnRoU2Nyb2xsJC5uZXh0KCk7XG4gICAgICAgIHRoaXMubW9udGhTY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxNb250aC5ORVhUO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IFNjcm9sbE1vbnRoLk5FWFQ7XG4gICAgICAgIHRoaXMubmV4dE1vbnRoKGlzS2V5ZG93blRyaWdnZXIpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTdG9wIGNvbnRpbnVvdXMgbmF2aWdhdGlvblxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzdG9wTW9udGhTY3JvbGwgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgLy8gZ2VuZXJhbGx5IHRoZSBzY3JvbGxpbmcgaXMgYnVpbHQgb24gdGhlIGNhbGVuZGFyIGNvbXBvbmVudFxuICAgICAgICAvLyBhbmQgYWxsIHN0YXJ0L3N0b3Agc2Nyb2xsaW5nIG1ldGhvZHMgYXJlIGNhbGxlZCBvbiB0aGUgY2FsZW5kYXJcbiAgICAgICAgLy8gaWYgd2UgY2hhbmdlIGJlbG93IGxpbmVzIHRvIGNhbGwgc3RvcE1vbnRoU2Nyb2xsJCBvbiB0aGUgY2FsZW5kYXIgaW5zdGVhZCBvZiBvbiB0aGUgdmlld3MsXG4gICAgICAgIC8vIHN0cmFuZ2UgYnVnIGlzIGludHJvZHVjZWQgLS0+IGFmdGVyIGNoYW5naW5nIG51bWJlciBvZiBtb250aHMsIGNvbnRpbnVvdXMgc2Nyb2xsaW5nIG9uIG1vdXNlIGNsaWNrIGRvZXMgbm90IGhhcHBlblxuICAgICAgICB0aGlzLmRheXNWaWV3LnN0b3BNb250aFNjcm9sbCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kYXlzVmlldy5zdG9wTW9udGhTY3JvbGwkLmNvbXBsZXRlKCk7XG5cblxuICAgICAgICBpZiAodGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiA9PT0gU2Nyb2xsTW9udGguUFJFVikge1xuICAgICAgICAgICAgdGhpcy5wcmV2TW9udGhCdG4ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9udGhTY3JvbGxEaXJlY3Rpb24gPT09IFNjcm9sbE1vbnRoLk5FWFQpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoQnRuLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbE1vbnRoLk5PTkU7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3RpdmVWaWV3RGVjYWRlKGFyZ3M6IERhdGUsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcikge1xuICAgICAgICBzdXBlci5hY3RpdmVWaWV3RGVjYWRlKGFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGFjYWRlVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5kYXRlID0gYXJncztcbiAgICAgICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcuY2FsZW5kYXJEaXIuZmluZChkYXRlID0+IGRhdGUuaXNDdXJyZW50WWVhcikubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aXZlVmlld0RlY2FkZUtCKGV2ZW50LCBhcmdzOiBEYXRlLCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpIHtcbiAgICAgICAgc3VwZXIuYWN0aXZlVmlld0RlY2FkZUtCKGV2ZW50LCBhY3RpdmVWaWV3SWR4KTtcblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGFjYWRlVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5kYXRlID0gYXJncztcbiAgICAgICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcuY2FsZW5kYXJEaXIuZmluZChkYXRlID0+IGRhdGUuaXNDdXJyZW50WWVhcikubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldEZvcm1hdHRlZERhdGUoKTogeyB3ZWVrZGF5OiBzdHJpbmc7IG1vbnRoZGF5OiBzdHJpbmcgfSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmhlYWRlckRhdGU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vbnRoZGF5OiB0aGlzLmZvcm1hdHRlck1vbnRoZGF5LmZvcm1hdChkYXRlKSxcbiAgICAgICAgICAgIHdlZWtkYXk6IHRoaXMuZm9ybWF0dGVyV2Vla2RheS5mb3JtYXQoZGF0ZSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBpbnZva2VkIG9uIGRhdGUgc2VsZWN0aW9uXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNoaWxkQ2xpY2tlZChpbnN0YW5jZTogSUNhbGVuZGFyRGF0ZSkge1xuICAgICAgICBpZiAoaW5zdGFuY2UuaXNQcmV2TW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNNb250aCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmlzTmV4dE1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLm5leHRNb250aCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2VsZWN0RGF0ZUZyb21DbGllbnQgaXMgY2FsbGVkIGJvdGggaGVyZSBhbmQgaW4gZGF5cy12aWV3LmNvbXBvbmVudFxuICAgICAgICAvLyB3aGVuIG11bHRpcGxlIG1vbnRocyBhcmUgaW4gdmlldywgJ3NoaWZ0S2V5JyBhbmQgJ2xhc3RTZWxlY3RlZERhdGUnXG4gICAgICAgIC8vIHNob3VsZCBiZSBzZXQgYmVmb3JlIGFuZCBhZnRlciBzZWxlY3REYXRlRnJvbUNsaWVudFxuICAgICAgICAvLyBpbiBvcmRlciBhbGwgdmlld3MgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgZm9yIHRoZXNlIHByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICBtLnNoaWZ0S2V5ID0gdGhpcy5zaGlmdEtleTtcbiAgICAgICAgICAgIG0ubGFzdFNlbGVjdGVkRGF0ZSA9IHRoaXMubGFzdFNlbGVjdGVkRGF0ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3REYXRlRnJvbUNsaWVudChpbnN0YW5jZS5kYXRlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSAnbXVsdGknICYmIHRoaXMuX2Rlc2VsZWN0RGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdERhdGVJbk1vbnRoVmlld3MoaW5zdGFuY2UuZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlcyk7XG5cbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICBtLnNoaWZ0S2V5ID0gdGhpcy5zaGlmdEtleTtcbiAgICAgICAgICAgIG0ubGFzdFNlbGVjdGVkRGF0ZSA9IHRoaXMubGFzdFNlbGVjdGVkRGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB2aWV3Q2hhbmdpbmcoYXJnczogSVZpZXdDaGFuZ2luZ0V2ZW50QXJncykge1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IGFyZ3MubW9udGhBY3Rpb247XG4gICAgICAgIHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IHRydWU7XG4gICAgICAgIHRoaXMubmV4dERhdGUgPSBhcmdzLm5leHREYXRlO1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gKG5leHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRheSA9IHRoaXMuZGF5c1ZpZXcuZGF0ZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICBpZiAoZGF5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXlzVmlldy5kYXlzTmF2U2VydmljZS5mb2N1c05leHREYXRlKGRheS5uYXRpdmVFbGVtZW50LCBhcmdzLmtleSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLm5leHREYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZW5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGFuZ2VNb250aChldmVudDogRGF0ZSkge1xuICAgICAgICB0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5jYWxlbmRhck1vZGVsLmdldEZpcnN0Vmlld0RhdGUoZXZlbnQsICdtb250aCcsIHRoaXMuYWN0aXZlVmlld0lkeCk7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IElneENhbGVuZGFyVmlldy5Nb250aDtcblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMubW9udGhzQnRucy5maW5kKChlOiBFbGVtZW50UmVmLCBpZHg6IG51bWJlcikgPT4gaWR4ID09PSB0aGlzLmFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICAgICAgaWYgKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGl2ZVZpZXdZZWFyKGFyZ3M6IERhdGUsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3SWR4ID0gYWN0aXZlVmlld0lkeDtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5kYXRlID0gYXJncztcbiAgICAgICAgICAgIHRoaXMuZm9jdXNNb250aCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aXZlVmlld1llYXJLQihhcmdzOiBEYXRlLCBldmVudDogS2V5Ym9hcmRFdmVudCwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm9uQWN0aXZlVmlld1llYXIoYXJncywgYWN0aXZlVmlld0lkeCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdHMgZGF0ZShzKSAoYmFzZWQgb24gdGhlIHNlbGVjdGlvbiB0eXBlKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICB0aGlzLmNhbGVuZGFyLmRlc2VsZWN0RGF0ZShuZXcgRGF0ZShgMjAxOC0wNi0xMmApKTtcbiAgICAgKiBgYGBgXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGRlc2VsZWN0RGF0ZSh2YWx1ZT86IERhdGUgfCBEYXRlW10pIHtcbiAgICAgICAgc3VwZXIuZGVzZWxlY3REYXRlKHZhbHVlKTtcblxuICAgICAgICB0aGlzLm1vbnRoVmlld3MuZm9yRWFjaCgodmlldykgPT4ge1xuICAgICAgICAgICAgdmlldy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuICAgICAgICAgICAgdmlldy5yYW5nZVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldFZpZXdEYXRlKGk6IG51bWJlcik6IERhdGUge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5jYWxlbmRhck1vZGVsLnRpbWVkZWx0YSh0aGlzLnZpZXdEYXRlLCAnbW9udGgnLCBpKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0dGVyIGZvciB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlIHRoZSBjYWxlbmRhciB0ZW1wbGF0ZXMuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRleHQoaTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmdldFZpZXdEYXRlKGkpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQoZGF0ZSwgaSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhbmltYXRpb25Eb25lKGV2ZW50KSB7XG4gICAgICAgIGlmICgoZXZlbnQuZnJvbVN0YXRlID09PSBTY3JvbGxNb250aC5OT05FICYmIChldmVudC50b1N0YXRlID09PSBTY3JvbGxNb250aC5QUkVWIHx8IGV2ZW50LnRvU3RhdGUgPT09IFNjcm9sbE1vbnRoLk5FWFQpKSB8fFxuICAgICAgICAgICAgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ3ZvaWQnICYmIGV2ZW50LnRvU3RhdGUgPT09IFNjcm9sbE1vbnRoLk5PTkUpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlQ2hhbmdlZC5lbWl0KHsgcHJldmlvdXNWYWx1ZTogdGhpcy5wcmV2aW91c1ZpZXdEYXRlLCBjdXJyZW50VmFsdWU6IHRoaXMudmlld0RhdGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmlzS2V5ZG93blRyaWdnZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRBY3RpdmVEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiAhPT0gU2Nyb2xsTW9udGguTk9ORSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxNb250aCQubmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtb250aFZpZXcgPSB0aGlzLmRheXNWaWV3IGFzIElneERheXNWaWV3Q29tcG9uZW50O1xuICAgICAgICBsZXQgZGF0ZSA9IG1vbnRoVmlldz8uZGF0ZXMuZmluZCgoZCkgPT4gZC5zZWxlY3RlZCk7XG5cbiAgICAgICAgd2hpbGUgKCFkYXRlICYmIG1vbnRoVmlldz8ubmV4dE1vbnRoVmlldykge1xuICAgICAgICAgICAgbW9udGhWaWV3ID0gbW9udGhWaWV3Lm5leHRNb250aFZpZXc7XG4gICAgICAgICAgICBkYXRlID0gbW9udGhWaWV3LmRhdGVzLmZpbmQoKGQpID0+IGQuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRlICYmIGRhdGUuaXNGb2N1c2FibGUgJiYgIXRoaXMuaXNLZXlkb3duVHJpZ2dlcikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0ZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9LCBwYXJzZUludChzbGlkZUluUmlnaHQub3B0aW9ucy5wYXJhbXMuZHVyYXRpb24sIDEwKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxsYmFjayAmJiAoZXZlbnQudG9TdGF0ZSA9PT0gU2Nyb2xsTW9udGguTkVYVCB8fCBldmVudC50b1N0YXRlID09PSBTY3JvbGxNb250aC5QUkVWKSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLm5leHREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IFNjcm9sbE1vbnRoLk5PTkU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB2aWV3UmVuZGVyZWQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmZyb21TdGF0ZSAhPT0gJ3ZvaWQnKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2VkLmVtaXQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZXNldEFjdGl2ZURhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5tb250aFZpZXdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGVzID0gW107XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5tYXAobXYgPT4gbXYuZGF0ZXMpLmZvckVhY2goZGF5cyA9PiB7XG4gICAgICAgICAgICBkYXRlcyA9IGRhdGVzLmNvbmNhdChkYXlzLnRvQXJyYXkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRlID0gZGF0ZXMuZmluZChkYXkgPT4gZGF5LnNlbGVjdGVkICYmIGRheS5pc0N1cnJlbnRNb250aCkgfHwgZGF0ZXMuZmluZChkYXkgPT4gZGF5LmlzVG9kYXkgJiYgZGF5LmlzQ3VycmVudE1vbnRoKVxuICAgICAgICAgICAgfHwgZGF0ZXMuZmluZChkID0+IGQuaXNGb2N1c2FibGUpO1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZS5kYXRlLmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhWaWV3c0NoYW5nZXMkKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aFZpZXdzQ2hhbmdlcyQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UHJldk1vbnRoKGRhdGUpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJNb2RlbC5nZXRQcmV2TW9udGgoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXh0TW9udGgoZGF0ZSwgdmlld0luZGV4KTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGVuZGFyTW9kZWwuZ2V0RGF0ZUJ5VmlldyhkYXRlLCAnTW9udGgnLCB2aWV3SW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgYnVpbGRpbmcgYW5kIHJldHVybmluZyB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlXG4gICAgICogdGhlIGNhbGVuZGFyIHRlbXBsYXRlcy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlQ29udGV4dCh2YWx1ZTogRGF0ZSwgaT86IG51bWJlcikge1xuICAgICAgICBjb25zdCBmb3JtYXRPYmplY3QgPSB7XG4gICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgIG1vbnRoVmlldzogKCkgPT4gdGhpcy5vbkFjdGl2ZVZpZXdZZWFyKHZhbHVlLCBpKSxcbiAgICAgICAgICAgIHllYXJWaWV3OiAoKSA9PiB0aGlzLm9uQWN0aXZlVmlld0RlY2FkZSh2YWx1ZSwgaSksXG4gICAgICAgICAgICAuLi50aGlzLmNhbGVuZGFyTW9kZWwuZm9ybWF0VG9QYXJ0cyh2YWx1ZSwgdGhpcy5sb2NhbGUsIHRoaXMuZm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICBbJ2VyYScsICd5ZWFyJywgJ21vbnRoJywgJ2RheScsICd3ZWVrZGF5J10pXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7ICRpbXBsaWNpdDogZm9ybWF0T2JqZWN0IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCB0aGF0IHNldHMgcmVmZXJlbmNlcyBmb3IgcHJldi9uZXh0IG1vbnRocyBmb3IgZWFjaCBtb250aCBpbiB0aGUgdmlld1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0U2libGluZ01vbnRocyhtb250aFZpZXdzOiBRdWVyeUxpc3Q8SWd4RGF5c1ZpZXdDb21wb25lbnQ+KSB7XG4gICAgICAgIG1vbnRoVmlld3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZNb250aFZpZXcgPSB0aGlzLmdldE1vbnRoVmlldyhpbmRleCAtIDEpO1xuICAgICAgICAgICAgY29uc3QgbmV4dE1vbnRoVmlldyA9IHRoaXMuZ2V0TW9udGhWaWV3KGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpdGVtLm5leHRNb250aFZpZXcgPSBuZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgaXRlbS5wcmV2TW9udGhWaWV3ID0gcHJldk1vbnRoVmlldztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCByZXR1cm5pbmcgcHJldmlvdXMvbmV4dCBkYXkgdmlld3NcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1vbnRoVmlldyhpbmRleDogbnVtYmVyKTogSWd4RGF5c1ZpZXdDb21wb25lbnQge1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB0aGlzLm1vbnRoVmlld3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vbnRoVmlld3MudG9BcnJheSgpW2luZGV4XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgdGhhdCBkb2VzIGRlc2VsZWN0aW9uIGZvciBhbGwgbW9udGggdmlld3Mgd2hlbiBzZWxlY3Rpb24gaXMgXCJtdWx0aVwiXG4gICAgICogSWYgbm90IGNhbGxlZCwgc2VsZWN0aW9uIGluIG90aGVyIG1vbnRoIHZpZXdzIHN0YXlzXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXNlbGVjdERhdGVJbk1vbnRoVmlld3ModmFsdWU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICBtLmRlc2VsZWN0TXVsdGlwbGVJbk1vbnRoKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c01vbnRoKCkge1xuICAgICAgICBjb25zdCBtb250aCA9IHRoaXMubW9udGhzVmlldy5tb250aHNSZWYuZmluZCgoZSkgPT5cbiAgICAgICAgICAgIGUuaW5kZXggPT09IHRoaXMubW9udGhzVmlldy5kYXRlLmdldE1vbnRoKCkpO1xuICAgICAgICBpZiAobW9udGgpIHtcbiAgICAgICAgICAgIG1vbnRoLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBsZXQtcmVzdWx0ICNkZWZhdWx0SGVhZGVyPlxuICAgIDxzcGFuPnt7IGdldEZvcm1hdHRlZERhdGUoKS53ZWVrZGF5IH19LCZuYnNwOzwvc3Bhbj5cbiAgICA8c3Bhbj57eyBnZXRGb3JtYXR0ZWREYXRlKCkubW9udGhkYXkgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LXJlc3VsdCAjZGVmYXVsdE1vbnRoIGxldC1vYmo+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwibW9udGhzVmlld051bWJlciA8IDIgfHwgb2JqLmluZGV4IDwgMVwiIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19hcmlhLW9mZi1zY3JlZW5cIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgPiAxID8gKHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfZmlyc3RfcGlja2VyX29mLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgICsgJyAnICsgKGdldFZpZXdEYXRlKG9iai5pbmRleCkgfCBkYXRlOiAnTExMTCB5eXl5JykpIDogcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RlZF9tb250aF9pcyArIChnZXRWaWV3RGF0ZShvYmouaW5kZXgpIHwgZGF0ZTogJ0xMTEwgeXl5eScpfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSB8IGRhdGU6ICdMTExMJykgKyAnICcgKyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF9tb250aFwiXG4gICAgICAgICAgICAjbW9udGhzQnRuXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbkFjdGl2ZVZpZXdZZWFyS0IoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSwgJGV2ZW50LCBvYmouaW5kZXgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFjdGl2ZVZpZXdZZWFyKGdldFZpZXdEYXRlKG9iai5pbmRleCksIG9iai5pbmRleClcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlXCI+XG4gICAgICAgICAgICB7eyBmb3JtYXR0ZWRNb250aChnZXRWaWV3RGF0ZShvYmouaW5kZXgpKSB9fVxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGdldFZpZXdEYXRlKG9iai5pbmRleCkgfCBkYXRlOiAneXl5eScpICsgJyAnICsgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RfeWVhclwiXG4gICAgICAgICAgICAjeWVhcnNCdG5cbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQWN0aXZlVmlld0RlY2FkZUtCKCRldmVudCwgZ2V0Vmlld0RhdGUob2JqLmluZGV4KSwgb2JqLmluZGV4KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3RpdmVWaWV3RGVjYWRlKGdldFZpZXdEYXRlKG9iai5pbmRleCksIG9iai5pbmRleClcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlXCI+XG4gICAgICAgICAgICB7eyBmb3JtYXR0ZWRZZWFyKGdldFZpZXdEYXRlKG9iai5pbmRleCkpIH19XG4gICAgICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxoZWFkZXJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS1tb250aCBpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS15ZWFyXCJcbiAgICBjbGFzcz1cImlneC1jYWxlbmRhcl9faGVhZGVyXCJcbiAgICAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3NpbmdsZScgJiYgaGFzSGVhZGVyXCI+XG5cbiAgICA8aDUgaWQ9XCJpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS15ZWFyXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlci15ZWFyXCI+XG4gICAgICAgIHt7IGZvcm1hdHRlZFllYXIoaGVhZGVyRGF0ZSkgfX1cbiAgICA8L2g1PlxuXG4gICAgPGgyIGlkPVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUtbW9udGhcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9faGVhZGVyLWRhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlID8gaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0SGVhZGVyOyBjb250ZXh0OiBoZWFkZXJDb250ZXh0XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvaDI+XG48L2hlYWRlcj5cblxuPGRpdiAqbmdJZj1cImlzRGVmYXVsdFZpZXdcIiAgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2JvZHlcIiBbQGFuaW1hdGVWaWV3XT1cImFjdGl2ZVZpZXdcIiAoQGFuaW1hdGVWaWV3LmRvbmUpPVwidmlld1JlbmRlcmVkKCRldmVudClcIiAoc3dpcGVyaWdodCk9XCJwcmV2aW91c01vbnRoKClcIlxuICAgIChzd2lwZWxlZnQpPVwibmV4dE1vbnRoKClcIiAocG9pbnRlcmRvd24pPVwic3VwcHJlc3NCbHVyKClcIj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJcIj5cbiAgICAgICAgPHNwYW4gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ211bHRpJ1wiPlxuICAgICAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgJiYgbW9udGhzVmlld051bWJlciA+IDEgPyAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9tdWx0aV9zZWxlY3Rpb24ucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSA6IHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfbXVsdGlfc2VsZWN0aW9ufX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgJiYgbW9udGhzVmlld051bWJlciA+IDEgPyAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9yYW5nZV9zZWxlY3Rpb24ucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSA6IHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfcmFuZ2Vfc2VsZWN0aW9ufX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3NpbmdsZSdcIj5cbiAgICAgICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID8gIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ2xlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDogcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9zaW5nbGVfc2VsZWN0aW9ufX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX3ByZXZcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfcHJldmlvdXNfbW9udGggKyAnLCAnICsgKGdldFByZXZNb250aCh2aWV3RGF0ZSkgfCBkYXRlOiAnTExMTCcpXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwicHJldlwiXG4gICAgICAgICAgICAjcHJldk1vbnRoQnRuXG4gICAgICAgICAgICBpZ3hDYWxlbmRhclNjcm9sbE1vbnRoXG4gICAgICAgICAgICBbc3RhcnRTY3JvbGxdPVwic3RhcnRQcmV2TW9udGhTY3JvbGxcIlxuICAgICAgICAgICAgW3N0b3BTY3JvbGxdPVwic3RvcE1vbnRoU2Nyb2xsXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ21pbi13aWR0aC4lJzogMTAwLyhtb250aHNWaWV3TnVtYmVyKjcpfVwiPlxuICAgICAgICAgICAgPGlneC1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmtleWJvYXJkX2Fycm93X2xlZnQ8L2lneC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVzXCJcbiAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmlldyBvZiBtb250aHNWaWV3TnVtYmVyIHwgSWd4TW9udGhWaWV3U2xvdHM7IGluZGV4IGFzIGk7XCJcbiAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCIxMDAvbW9udGhzVmlld051bWJlclwiXG4gICAgICAgICAgICAgW2F0dHIuZGF0YS1tb250aF09XCJpIHwgSWd4R2V0Vmlld0RhdGU6dmlld0RhdGU6ZmFsc2VcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdE1vbnRoOyBjb250ZXh0OiBnZXRDb250ZXh0KGkpXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25leHRcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfbmV4dF9tb250aCArICcsICcgKyAgKGdldE5leHRNb250aCh2aWV3RGF0ZSwgbW9udGhzVmlld051bWJlcikgfCBkYXRlOiAnTExMTCcpXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwibmV4dFwiXG4gICAgICAgICAgICAjbmV4dE1vbnRoQnRuXG4gICAgICAgICAgICBpZ3hDYWxlbmRhclNjcm9sbE1vbnRoXG4gICAgICAgICAgICBbc3RhcnRTY3JvbGxdPVwic3RhcnROZXh0TW9udGhTY3JvbGxcIlxuICAgICAgICAgICAgW3N0b3BTY3JvbGxdPVwic3RvcE1vbnRoU2Nyb2xsXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWluLXdpZHRoLiUnOiAxMDAvKG1vbnRoc1ZpZXdOdW1iZXIqNyl9XCI+XG4gICAgICAgICAgICA8aWd4LWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCI+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L2lneC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8c2VjdGlvbiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIlxuICAgICAgICBbQGFuaW1hdGVDaGFuZ2VdPVwiYW5pbWF0aW9uQWN0aW9uXCJcbiAgICAgICAgKEBhbmltYXRlQ2hhbmdlLmRvbmUpPVwiYW5pbWF0aW9uRG9uZSgkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtZGF5cy12aWV3IHJvbGU9XCJncmlkXCIgKm5nRm9yPVwibGV0IHZpZXcgb2YgbW9udGhzVmlld051bWJlciB8IElneE1vbnRoVmlld1Nsb3RzOyBpbmRleCBhcyBpO1wiIFtjaGFuZ2VEYXlzVmlld109XCJ0cnVlXCIgI2RheXNcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgWyhhY3RpdmVEYXRlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgICAgICAgICBbdmlld0RhdGVdPVwiaSB8IElneEdldFZpZXdEYXRlOnZpZXdEYXRlXCJcbiAgICAgICAgICAgICAgICBbd2Vla1N0YXJ0XT1cIndlZWtTdGFydFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdE9wdGlvbnNdPVwiZm9ybWF0T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFZpZXdzXT1cImZvcm1hdFZpZXdzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgICAgICAgICAgICBbc3BlY2lhbERhdGVzXT1cInNwZWNpYWxEYXRlc1wiXG4gICAgICAgICAgICAgICAgW2hpZGVPdXRzaWRlRGF5c109XCJoaWRlT3V0c2lkZURheXNcIlxuICAgICAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgICAgICAgICAodmlld0NoYW5naW5nKT1cInZpZXdDaGFuZ2luZygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdGlvbik9XCJjaGlsZENsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG1vbnRoc1ZpZXdCbHVyKT1cInJlc2V0QWN0aXZlRGF0ZSgpXCI+XG4gICAgICAgIDwvaWd4LWRheXMtdmlldz5cbiAgICA8L3NlY3Rpb24+XG48L2Rpdj5cblxuPGlneC1tb250aHMtdmlldyAqbmdJZj1cImlzWWVhclZpZXdcIlxuICAgICAgICAgICAgICAgICBbQGFuaW1hdGVWaWV3XT1cImFjdGl2ZVZpZXdcIlxuICAgICAgICAgICAgICAgICAjbW9udGhzXG4gICAgICAgICAgICAgICAgIChAYW5pbWF0ZVZpZXcuZG9uZSk9XCJ2aWV3UmVuZGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgIFtkYXRlXT1cInZpZXdEYXRlXCJcbiAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgICBbZm9ybWF0Vmlld109XCJmb3JtYXRWaWV3cy5tb250aFwiXG4gICAgICAgICAgICAgICAgIFttb250aEZvcm1hdF09XCJmb3JtYXRPcHRpb25zLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNoYW5nZU1vbnRoKCRldmVudClcIj5cbjwvaWd4LW1vbnRocy12aWV3PlxuXG48aWd4LXllYXJzLXZpZXcgKm5nSWY9XCJpc0RlY2FkZVZpZXdcIlxuICAgICAgICAgICAgICAgIFtAYW5pbWF0ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICAgICAgI2RlY2FkZVxuICAgICAgICAgICAgICAgIChAYW5pbWF0ZVZpZXcuZG9uZSk9XCJ2aWV3UmVuZGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2RhdGVdPVwidmlld0RhdGVcIlxuICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0Vmlld109XCJmb3JtYXRWaWV3cy55ZWFyXCJcbiAgICAgICAgICAgICAgICBbeWVhckZvcm1hdF09XCJmb3JtYXRPcHRpb25zLnllYXJcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGFuZ2VZZWFyKCRldmVudClcIj5cbjwvaWd4LXllYXJzLXZpZXc+XG4iXX0=
946
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFHWixnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxxQ0FBcUMsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25KLE9BQU8sRUFBaUIsZUFBZSxFQUFlLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsUUFBUSxF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dUJBQUMsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBNEQzQyxhQUFhO3NCQURuQixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjakMsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBY2hDLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyYW5zaXRpb24sIHRyaWdnZXIsIHVzZUFuaW1hdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgYm9vbGVhbkF0dHJpYnV0ZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nU3R5bGUsIE5nRm9yLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4Q2FsZW5kYXJTY3JvbGxNb250aERpcmVjdGl2ZSB9IGZyb20gJy4vY2FsZW5kYXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJQ2FsZW5kYXJEYXRlLCBJZ3hDYWxlbmRhclZpZXcsIFNjcm9sbE1vbnRoLCBtb250aFJhbmdlIH0gZnJvbSAnLi9jYWxlbmRhcic7XG5pbXBvcnQgeyBJZ3hNb250aFBpY2tlckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL21vbnRoLXBpY2tlci9tb250aC1waWNrZXItYmFzZSc7XG5pbXBvcnQgeyBJZ3hNb250aHNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tb250aHMtdmlldy9tb250aHMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4WWVhcnNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi95ZWFycy12aWV3L3llYXJzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IElneERheXNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIGRlYm91bmNlLCBza2lwTGFzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSVZpZXdDaGFuZ2luZ0V2ZW50QXJncyB9IGZyb20gJy4vZGF5cy12aWV3L2RheXMtdmlldy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4TW9udGhWaWV3U2xvdHNDYWxlbmRhciwgSWd4R2V0Vmlld0RhdGVDYWxlbmRhciB9IGZyb20gJy4vbW9udGhzLXZpZXcucGlwZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmYWRlSW4sIHNjYWxlSW5DZW50ZXIsIHNsaWRlSW5MZWZ0LCBzbGlkZUluUmlnaHQgfSBmcm9tICdpZ25pdGV1aS1hbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogQ2FsZW5kYXIgcHJvdmlkZXMgYSB3YXkgdG8gZGlzcGxheSBkYXRlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q2FsZW5kYXJNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWNhbGVuZGFyLXRoZW1lLCBpZ3gtaWNvbi10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBjYWxlbmRhciwgZGF0ZXBpY2tlciwgc2NoZWR1bGUsIGRhdGVcbiAqXG4gKiBAaWd4R3JvdXAgU2NoZWR1bGluZ1xuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIENhbGVuZGFyIHByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGRpc3BsYXkgYSBjYWxlbmRhciBhbmQgYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGRhdGVzIHVzaW5nIHNpbmdsZSwgbXVsdGlwbGVcbiAqIG9yIHJhbmdlIHNlbGVjdGlvbi5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtY2FsZW5kYXIgc2VsZWN0aW9uPVwicmFuZ2VcIj48L2lneC1jYWxlbmRhcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2FuaW1hdGVWaWV3JywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAwJywgdXNlQW5pbWF0aW9uKGZhZGVJbikpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgdXNlQW5pbWF0aW9uKHNjYWxlSW5DZW50ZXIsIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ICcuMnMnLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU2NhbGU6IC45XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdhbmltYXRlQ2hhbmdlJywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBwcmV2JywgdXNlQW5pbWF0aW9uKHNsaWRlSW5MZWZ0LCB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21Qb3NpdGlvbjogJ3RyYW5zbGF0ZVgoLTMwJSknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBuZXh0JywgdXNlQW5pbWF0aW9uKHNsaWRlSW5SaWdodCwge1xuICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBmcm9tUG9zaXRpb246ICd0cmFuc2xhdGVYKDMwJSknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC1jYWxlbmRhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgSWd4Q2FsZW5kYXJTY3JvbGxNb250aERpcmVjdGl2ZSwgTmdTdHlsZSwgSWd4SWNvbkNvbXBvbmVudCwgTmdGb3IsIElneERheXNWaWV3Q29tcG9uZW50LCBJZ3hNb250aHNWaWV3Q29tcG9uZW50LCBJZ3hZZWFyc1ZpZXdDb21wb25lbnQsIERhdGVQaXBlLCBJZ3hNb250aFZpZXdTbG90c0NhbGVuZGFyLCBJZ3hHZXRWaWV3RGF0ZUNhbGVuZGFyXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDYWxlbmRhckNvbXBvbmVudCBleHRlbmRzIElneE1vbnRoUGlja2VyQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBjYWxlbmRhci5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgd2lsbCBoYXZlIHZhbHVlIGBcImlneC1jYWxlbmRhci0wXCJgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBpZD1cIm15LWZpcnN0LWNhbGVuZGFyXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtY2FsZW5kYXItJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjYWxlbmRhciBoYXMgaGVhZGVyLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbaGFzSGVhZGVyXT1cImZhbHNlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGhhc0hlYWRlciA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGVhZGVyIHdpbGwgYmUgaW4gdmVydGljYWwgcG9zaXRpb24uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbdmVydGljYWxdPVwidHJ1ZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyB2ZXJ0aWNhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBudW1iZXIgb2YgbW9udGggdmlld3MgZGlzcGxheWVkLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYDFgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbbW9udGhzVmlld051bWJlcl09XCIyXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG1vbnRoc1ZpZXdOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb250aHNWaWV3TnVtYmVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgbW9udGhzVmlld051bWJlcih2YWw6IG51bWJlcikge1xuICAgICAgICBpZiAodmFsIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW9udGhzVmlld051bWJlciA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgd2VlayBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhbGVuZGFyIFtzaG93V2Vla051bWJlcnNdPVwidHJ1ZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQXBwbHkgdGhlIGRpZmZlcmVudCBzdGF0ZXMgZm9yIHRoZSB0cmFuc2l0aW9ucyBvZiBhbmltYXRlQ2hhbmdlXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYW5pbWF0aW9uQWN0aW9uOiBhbnkgPSAnJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXItLXZlcnRpY2FsJylcbiAgICBwdWJsaWMgZ2V0IHN0eWxlVmVydGljYWxDbGFzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVydGljYWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcicpXG4gICAgcHVibGljIHN0eWxlQ2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVmlld0NoaWxkIHRoYXQgcmVwcmVzZW50cyB0aGUgbW9udGhzIHZpZXcuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnbW9udGhzJywgeyByZWFkOiBJZ3hNb250aHNWaWV3Q29tcG9uZW50IH0pXG4gICAgcHVibGljIG1vbnRoc1ZpZXc6IElneE1vbnRoc1ZpZXdDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBNb250aCBidXR0b24sIHRoYXQgZGlzcGxheXMgdGhlIG1vbnRocyB2aWV3LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oJ21vbnRoc0J0bicpXG4gICAgcHVibGljIG1vbnRoc0J0bnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIC8qKlxuICAgICAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRlY2FkZSB2aWV3LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlY2FkZScsIHsgcmVhZDogSWd4WWVhcnNWaWV3Q29tcG9uZW50IH0pXG4gICAgcHVibGljIGRhY2FkZVZpZXc6IElneFllYXJzVmlld0NvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRheXMgdmlldy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkYXlzJywgeyByZWFkOiBJZ3hEYXlzVmlld0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBkYXlzVmlldzogSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3Q2hpbGRyZW5kZW4gcmVwcmVzZW50aW5nIGFsbCBvZiB0aGUgcmVuZGVyZWQgZGF5cyB2aWV3cy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCdkYXlzJywgeyByZWFkOiBJZ3hEYXlzVmlld0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBtb250aFZpZXdzOiBRdWVyeUxpc3Q8SWd4RGF5c1ZpZXdDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQnV0dG9uIGZvciBwcmV2aW91cyBtb250aC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdwcmV2TW9udGhCdG4nKVxuICAgIHB1YmxpYyBwcmV2TW9udGhCdG46IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBCdXR0b24gZm9yIG5leHQgbW9udGguXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnbmV4dE1vbnRoQnRuJylcbiAgICBwdWJsaWMgbmV4dE1vbnRoQnRuOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogRGVub3RlIGlmIHRoZSB5ZWFyIHZpZXcgaXMgYWN0aXZlLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNZZWFyVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhlYWRlclRlbXBsYXRlID0gIHRoaXMuY2FsZW5kYXIuaGVhZGVyVGVhbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVyVGVtcGxhdGUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGhlYWRlciB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU9XCJpZ3hDYWxlbmRhckhlYWRlclwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgaGVhZGVyVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdWJoZWFkZXIgdGVtcGxhdGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc3ViaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmNhbGVuZGFyLnN1YmhlYWRlclRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc3ViaGVhZGVyVGVtcGxhdGUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN1YmhlYWRlciB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgc3ViaGVhZGVyVGVtcGxhdGU9XCJpZ3hDYWxlbmRhclN1YmhlYWRlclwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc3ViaGVhZGVyVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5zdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgdGVtcGxhdGUgbWFya2VkIHdpdGggdGhlIGBpZ3hDYWxlbmRhckhlYWRlcmAgZGlyZWN0aXZlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhlYWRlckNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5oZWFkZXJDb250ZXh0O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ29udGV4dCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZTogRGF0ZSA9IHRoaXMuaGVhZGVyRGF0ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVDb250ZXh0KGRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbnRleHQgZm9yIHRoZSB0ZW1wbGF0ZSBtYXJrZWQgd2l0aCBlaXRoZXIgYGlneENhbGVuZGFyU3ViSGVhZGVyTW9udGhgXG4gICAgICogb3IgYGlneENhbGVuZGFyU3ViSGVhZGVyWWVhcmAgZGlyZWN0aXZlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5jb250ZXh0O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZTogRGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ29udGV4dChkYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEYXRlIGRpc3BsYXllZCBpbiBoZWFkZXJcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhlYWRlckRhdGUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZXMgPyB0aGlzLnNlbGVjdGVkRGF0ZXMgOiBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSksIHsgcmVhZDogSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTogSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSwgeyByZWFkOiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIHN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmVEYXRlID0gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gYXBwbHkgdGhlIGFjdGl2ZSBkYXRlIHdoZW4gdGhlIGNhbGVuZGFyIHZpZXcgaXMgY2hhbmdlZFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0RGF0ZTogRGF0ZTtcblxuICAgIC8qKlxuICAgICAqIERlbm90ZSBpZiB0aGUgY2FsZW5kYXIgdmlldyB3YXMgY2hhbmdlZCB3aXRoIHRoZSBrZXlib2FyZFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0tleWRvd25UcmlnZ2VyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNhbGxiYWNrOiAobmV4dCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9tb250aHNWaWV3TnVtYmVyID0gMTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbW9udGhWaWV3c0NoYW5nZXMkOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZWRvd24nLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZXVwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duUGFnZURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUGFnZURvd24gPSBldmVudC5rZXkgPT09ICdQYWdlRG93bic7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBpc1BhZ2VEb3duID8gMSA6IC0xO1xuICAgICAgICBsZXQgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgbGV0IGFjdGl2ZURhdGU7XG5cbiAgICAgICAgd2hpbGUgKCFhY3RpdmVEYXRlICYmIG1vbnRoVmlldykge1xuICAgICAgICAgICAgYWN0aXZlRGF0ZSA9IG1vbnRoVmlldy5kYXRlcy5maW5kKChkYXRlKSA9PiBkYXRlLm5hdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgbW9udGhWaWV3ID0gbW9udGhWaWV3Lm5leHRNb250aFZpZXc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0aXZlRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZSA9IG5ldyBEYXRlKGFjdGl2ZURhdGUuZGF0ZS5kYXRlKTtcblxuICAgICAgICAgICAgbGV0IHllYXIgPSB0aGlzLm5leHREYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgICAgIGxldCBtb250aCA9IHRoaXMubmV4dERhdGUuZ2V0TW9udGgoKSArIHN0ZXA7XG4gICAgICAgICAgICBpZiAoaXNQYWdlRG93bikge1xuICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoID0gMDsgeWVhciArPSBzdGVwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBtb250aCA9IDExOyB5ZWFyICs9IHN0ZXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IG1vbnRoUmFuZ2UodGhpcy5uZXh0RGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCk7XG5cbiAgICAgICAgICAgIGxldCBkYXkgPSB0aGlzLm5leHREYXRlLmdldERhdGUoKTtcbiAgICAgICAgICAgIGlmIChkYXkgPiByYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgIGRheSA9IHJhbmdlWzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5leHREYXRlLnNldERhdGUoZGF5KTtcbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUuc2V0TW9udGgobW9udGgpO1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBsZXQgZGF5SXRlbTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKCFkYXlJdGVtICYmIG1vbnRoVmlldykgfHwgKGRheUl0ZW0gJiYgIWRheUl0ZW0uaXNDdXJyZW50TW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0gPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZCkgPT4gZC5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF5SXRlbSAmJiBkYXlJdGVtLmlzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQYWdlRG93bikge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLm5leHRNb250aCh0cnVlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnByZXZpb3VzTW9udGgodHJ1ZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzTW9udGgodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uc2hpZnQucGFnZXVwJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNoaWZ0LnBhZ2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duU2hpZnRQYWdlVXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNEZWZhdWx0Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNQYWdlRG93biA9IGV2ZW50LmtleSA9PT0gJ1BhZ2VEb3duJztcbiAgICAgICAgY29uc3Qgc3RlcCA9IGlzUGFnZURvd24gPyAxIDogLTE7XG4gICAgICAgIHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLmNhbGVuZGFyTW9kZWwudGltZWRlbHRhKHRoaXMudmlld0RhdGUsICd5ZWFyJywgc3RlcCk7XG5cbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBpc1BhZ2VEb3duID8gU2Nyb2xsTW9udGguTkVYVCA6IFNjcm9sbE1vbnRoLlBSRVY7XG4gICAgICAgIHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IHRydWU7XG5cbiAgICAgICAgbGV0IG1vbnRoVmlldyA9IHRoaXMuZGF5c1ZpZXcgYXMgSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG4gICAgICAgIGxldCBhY3RpdmVEYXRlO1xuXG4gICAgICAgIHdoaWxlICghYWN0aXZlRGF0ZSAmJiBtb250aFZpZXcpIHtcbiAgICAgICAgICAgIGFjdGl2ZURhdGUgPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZGF0ZSkgPT4gZGF0ZS5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZURhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUgPSBuZXcgRGF0ZShhY3RpdmVEYXRlLmRhdGUuZGF0ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLm5leHREYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwO1xuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IG1vbnRoUmFuZ2UoeWVhciwgdGhpcy5uZXh0RGF0ZS5nZXRNb250aCgpKTtcblxuICAgICAgICAgICAgbGV0IGRheSA9IHRoaXMubmV4dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGRheSA+IHJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgZGF5ID0gcmFuZ2VbMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUuc2V0RGF0ZShkYXkpO1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBsZXQgZGF5SXRlbTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKCFkYXlJdGVtICYmIG1vbnRoVmlldykgfHwgKGRheUl0ZW0gJiYgIWRheUl0ZW0uaXNDdXJyZW50TW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0gPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZCkgPT4gZC5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF5SXRlbSAmJiBkYXlJdGVtLmlzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF5c1ZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZGF5c1ZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW5kJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRheXNWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLmRheXNWaWV3Lm9uS2V5ZG93bkVuZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9wIGNvbnRpbnVvdXMgbmF2aWdhdGlvbiBvbiBtb3VzZXVwIGV2ZW50XG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uTW91c2VVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiAhPT0gU2Nyb2xsTW9udGguTk9ORSkge1xuICAgICAgICAgICAgdGhpcy5zdG9wTW9udGhTY3JvbGwoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRTaWJsaW5nTW9udGhzKHRoaXMubW9udGhWaWV3cyk7XG4gICAgICAgIHRoaXMuX21vbnRoVmlld3NDaGFuZ2VzJCA9IHRoaXMubW9udGhWaWV3cy5jaGFuZ2VzLnN1YnNjcmliZShjID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2libGluZ01vbnRocyhjKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGFydE1vbnRoU2Nyb2xsJC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcE1vbnRoU2Nyb2xsJCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zY3JvbGxNb250aCQucGlwZShcbiAgICAgICAgICAgICAgICBza2lwTGFzdCgxKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZSgoKSA9PiBpbnRlcnZhbCgzMDApKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5zdG9wTW9udGhTY3JvbGwkKVxuICAgICAgICAgICAgKSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsTW9udGguUFJFVjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNNb250aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsTW9udGguTkVYVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxNb250aC5OT05FOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBpbiB0aGUgbW9udGggdmlldyBpZiBlbmFibGVkLFxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBkZWZhdWx0IGBEYXRlLmdldE1vbnRoKClgIHZhbHVlLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtYXR0ZWRNb250aCh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1hdFZpZXdzLm1vbnRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZXJNb250aC5mb3JtYXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXRNb250aCgpfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRvIHByZXZpb3VzIG1vbnRoXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHByZXZpb3VzTW9udGgoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc0tleWRvd25UcmlnZ2VyICYmIHRoaXMuYW5pbWF0aW9uQWN0aW9uID09PSBTY3JvbGxNb250aC5ORVhUKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMuY2FsZW5kYXJNb2RlbC5nZXRQcmV2TW9udGgodGhpcy52aWV3RGF0ZSk7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uQWN0aW9uID0gU2Nyb2xsTW9udGguUFJFVjtcbiAgICAgICAgdGhpcy5pc0tleWRvd25UcmlnZ2VyID0gaXNLZXlkb3duVHJpZ2dlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3VwcHJlc3NCbHVyKCkge1xuICAgICAgICB0aGlzLm1vbnRoVmlld3M/LmZvckVhY2goZCA9PiBkLnNob3VsZFJlc2V0RGF0ZSA9IGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuZGF5c1ZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZGF5c1ZpZXcuc2hvdWxkUmVzZXREYXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdG8gbmV4dCBtb250aFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0TW9udGgoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc0tleWRvd25UcmlnZ2VyICYmIHRoaXMuYW5pbWF0aW9uQWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzS2V5ZG93blRyaWdnZXIgPSBpc0tleWRvd25UcmlnZ2VyO1xuICAgICAgICB0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5jYWxlbmRhck1vZGVsLmdldE5leHRNb250aCh0aGlzLnZpZXdEYXRlKTtcbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBTY3JvbGxNb250aC5ORVhUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnRpbmlvdXMgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBwcmV2aW91cyBtb250aHNcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhcnRQcmV2TW9udGhTY3JvbGwgPSAoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhcnRNb250aFNjcm9sbCQubmV4dCgpO1xuICAgICAgICB0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsTW9udGguUFJFVjtcbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBTY3JvbGxNb250aC5QUkVWO1xuICAgICAgICB0aGlzLnByZXZpb3VzTW9udGgoaXNLZXlkb3duVHJpZ2dlcik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENvbnRpbmlvdXMgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBuZXh0IG1vbnRoc1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGFydE5leHRNb250aFNjcm9sbCA9IChpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpID0+IHtcbiAgICAgICAgdGhpcy5zdGFydE1vbnRoU2Nyb2xsJC5uZXh0KCk7XG4gICAgICAgIHRoaXMubW9udGhTY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxNb250aC5ORVhUO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IFNjcm9sbE1vbnRoLk5FWFQ7XG4gICAgICAgIHRoaXMubmV4dE1vbnRoKGlzS2V5ZG93blRyaWdnZXIpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTdG9wIGNvbnRpbnVvdXMgbmF2aWdhdGlvblxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzdG9wTW9udGhTY3JvbGwgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgLy8gZ2VuZXJhbGx5IHRoZSBzY3JvbGxpbmcgaXMgYnVpbHQgb24gdGhlIGNhbGVuZGFyIGNvbXBvbmVudFxuICAgICAgICAvLyBhbmQgYWxsIHN0YXJ0L3N0b3Agc2Nyb2xsaW5nIG1ldGhvZHMgYXJlIGNhbGxlZCBvbiB0aGUgY2FsZW5kYXJcbiAgICAgICAgLy8gaWYgd2UgY2hhbmdlIGJlbG93IGxpbmVzIHRvIGNhbGwgc3RvcE1vbnRoU2Nyb2xsJCBvbiB0aGUgY2FsZW5kYXIgaW5zdGVhZCBvZiBvbiB0aGUgdmlld3MsXG4gICAgICAgIC8vIHN0cmFuZ2UgYnVnIGlzIGludHJvZHVjZWQgLS0+IGFmdGVyIGNoYW5naW5nIG51bWJlciBvZiBtb250aHMsIGNvbnRpbnVvdXMgc2Nyb2xsaW5nIG9uIG1vdXNlIGNsaWNrIGRvZXMgbm90IGhhcHBlblxuICAgICAgICB0aGlzLmRheXNWaWV3LnN0b3BNb250aFNjcm9sbCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kYXlzVmlldy5zdG9wTW9udGhTY3JvbGwkLmNvbXBsZXRlKCk7XG5cblxuICAgICAgICBpZiAodGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiA9PT0gU2Nyb2xsTW9udGguUFJFVikge1xuICAgICAgICAgICAgdGhpcy5wcmV2TW9udGhCdG4ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9udGhTY3JvbGxEaXJlY3Rpb24gPT09IFNjcm9sbE1vbnRoLk5FWFQpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoQnRuLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbE1vbnRoLk5PTkU7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3RpdmVWaWV3RGVjYWRlKGFyZ3M6IERhdGUsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcikge1xuICAgICAgICBzdXBlci5hY3RpdmVWaWV3RGVjYWRlKGFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGFjYWRlVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5kYXRlID0gYXJncztcbiAgICAgICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcuY2FsZW5kYXJEaXIuZmluZChkYXRlID0+IGRhdGUuaXNDdXJyZW50WWVhcikubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aXZlVmlld0RlY2FkZUtCKGV2ZW50LCBhcmdzOiBEYXRlLCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpIHtcbiAgICAgICAgc3VwZXIuYWN0aXZlVmlld0RlY2FkZUtCKGV2ZW50LCBhY3RpdmVWaWV3SWR4KTtcblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGFjYWRlVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5kYXRlID0gYXJncztcbiAgICAgICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcuY2FsZW5kYXJEaXIuZmluZChkYXRlID0+IGRhdGUuaXNDdXJyZW50WWVhcikubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldEZvcm1hdHRlZERhdGUoKTogeyB3ZWVrZGF5OiBzdHJpbmc7IG1vbnRoZGF5OiBzdHJpbmcgfSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmhlYWRlckRhdGU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vbnRoZGF5OiB0aGlzLmZvcm1hdHRlck1vbnRoZGF5LmZvcm1hdChkYXRlKSxcbiAgICAgICAgICAgIHdlZWtkYXk6IHRoaXMuZm9ybWF0dGVyV2Vla2RheS5mb3JtYXQoZGF0ZSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBpbnZva2VkIG9uIGRhdGUgc2VsZWN0aW9uXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNoaWxkQ2xpY2tlZChpbnN0YW5jZTogSUNhbGVuZGFyRGF0ZSkge1xuICAgICAgICBpZiAoaW5zdGFuY2UuaXNQcmV2TW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNNb250aCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmlzTmV4dE1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLm5leHRNb250aCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2VsZWN0RGF0ZUZyb21DbGllbnQgaXMgY2FsbGVkIGJvdGggaGVyZSBhbmQgaW4gZGF5cy12aWV3LmNvbXBvbmVudFxuICAgICAgICAvLyB3aGVuIG11bHRpcGxlIG1vbnRocyBhcmUgaW4gdmlldywgJ3NoaWZ0S2V5JyBhbmQgJ2xhc3RTZWxlY3RlZERhdGUnXG4gICAgICAgIC8vIHNob3VsZCBiZSBzZXQgYmVmb3JlIGFuZCBhZnRlciBzZWxlY3REYXRlRnJvbUNsaWVudFxuICAgICAgICAvLyBpbiBvcmRlciBhbGwgdmlld3MgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgZm9yIHRoZXNlIHByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICBtLnNoaWZ0S2V5ID0gdGhpcy5zaGlmdEtleTtcbiAgICAgICAgICAgIG0ubGFzdFNlbGVjdGVkRGF0ZSA9IHRoaXMubGFzdFNlbGVjdGVkRGF0ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3REYXRlRnJvbUNsaWVudChpbnN0YW5jZS5kYXRlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSAnbXVsdGknICYmIHRoaXMuX2Rlc2VsZWN0RGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdERhdGVJbk1vbnRoVmlld3MoaW5zdGFuY2UuZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlcyk7XG5cbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICBtLnNoaWZ0S2V5ID0gdGhpcy5zaGlmdEtleTtcbiAgICAgICAgICAgIG0ubGFzdFNlbGVjdGVkRGF0ZSA9IHRoaXMubGFzdFNlbGVjdGVkRGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB2aWV3Q2hhbmdpbmcoYXJnczogSVZpZXdDaGFuZ2luZ0V2ZW50QXJncykge1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IGFyZ3MubW9udGhBY3Rpb247XG4gICAgICAgIHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IHRydWU7XG4gICAgICAgIHRoaXMubmV4dERhdGUgPSBhcmdzLm5leHREYXRlO1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gKG5leHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRheSA9IHRoaXMuZGF5c1ZpZXcuZGF0ZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICBpZiAoZGF5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXlzVmlldy5kYXlzTmF2U2VydmljZS5mb2N1c05leHREYXRlKGRheS5uYXRpdmVFbGVtZW50LCBhcmdzLmtleSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLm5leHREYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZW5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGFuZ2VNb250aChldmVudDogRGF0ZSkge1xuICAgICAgICB0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5jYWxlbmRhck1vZGVsLmdldEZpcnN0Vmlld0RhdGUoZXZlbnQsICdtb250aCcsIHRoaXMuYWN0aXZlVmlld0lkeCk7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IElneENhbGVuZGFyVmlldy5Nb250aDtcblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMubW9udGhzQnRucy5maW5kKChlOiBFbGVtZW50UmVmLCBpZHg6IG51bWJlcikgPT4gaWR4ID09PSB0aGlzLmFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICAgICAgaWYgKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGl2ZVZpZXdZZWFyKGFyZ3M6IERhdGUsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3SWR4ID0gYWN0aXZlVmlld0lkeDtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5kYXRlID0gYXJncztcbiAgICAgICAgICAgIHRoaXMuZm9jdXNNb250aCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aXZlVmlld1llYXJLQihhcmdzOiBEYXRlLCBldmVudDogS2V5Ym9hcmRFdmVudCwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm9uQWN0aXZlVmlld1llYXIoYXJncywgYWN0aXZlVmlld0lkeCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdHMgZGF0ZShzKSAoYmFzZWQgb24gdGhlIHNlbGVjdGlvbiB0eXBlKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICB0aGlzLmNhbGVuZGFyLmRlc2VsZWN0RGF0ZShuZXcgRGF0ZShgMjAxOC0wNi0xMmApKTtcbiAgICAgKiBgYGBgXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGRlc2VsZWN0RGF0ZSh2YWx1ZT86IERhdGUgfCBEYXRlW10gfCBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIuZGVzZWxlY3REYXRlKHZhbHVlKTtcblxuICAgICAgICB0aGlzLm1vbnRoVmlld3MuZm9yRWFjaCgodmlldykgPT4ge1xuICAgICAgICAgICAgdmlldy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuICAgICAgICAgICAgdmlldy5yYW5nZVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldFZpZXdEYXRlKGk6IG51bWJlcik6IERhdGUge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5jYWxlbmRhck1vZGVsLnRpbWVkZWx0YSh0aGlzLnZpZXdEYXRlLCAnbW9udGgnLCBpKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0dGVyIGZvciB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlIHRoZSBjYWxlbmRhciB0ZW1wbGF0ZXMuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRleHQoaTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmdldFZpZXdEYXRlKGkpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQoZGF0ZSwgaSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhbmltYXRpb25Eb25lKGV2ZW50KSB7XG4gICAgICAgIGlmICgoZXZlbnQuZnJvbVN0YXRlID09PSBTY3JvbGxNb250aC5OT05FICYmIChldmVudC50b1N0YXRlID09PSBTY3JvbGxNb250aC5QUkVWIHx8IGV2ZW50LnRvU3RhdGUgPT09IFNjcm9sbE1vbnRoLk5FWFQpKSB8fFxuICAgICAgICAgICAgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ3ZvaWQnICYmIGV2ZW50LnRvU3RhdGUgPT09IFNjcm9sbE1vbnRoLk5PTkUpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlQ2hhbmdlZC5lbWl0KHsgcHJldmlvdXNWYWx1ZTogdGhpcy5wcmV2aW91c1ZpZXdEYXRlLCBjdXJyZW50VmFsdWU6IHRoaXMudmlld0RhdGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmlzS2V5ZG93blRyaWdnZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRBY3RpdmVEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiAhPT0gU2Nyb2xsTW9udGguTk9ORSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxNb250aCQubmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtb250aFZpZXcgPSB0aGlzLmRheXNWaWV3IGFzIElneERheXNWaWV3Q29tcG9uZW50O1xuICAgICAgICBsZXQgZGF0ZSA9IG1vbnRoVmlldz8uZGF0ZXMuZmluZCgoZCkgPT4gZC5zZWxlY3RlZCk7XG5cbiAgICAgICAgd2hpbGUgKCFkYXRlICYmIG1vbnRoVmlldz8ubmV4dE1vbnRoVmlldykge1xuICAgICAgICAgICAgbW9udGhWaWV3ID0gbW9udGhWaWV3Lm5leHRNb250aFZpZXc7XG4gICAgICAgICAgICBkYXRlID0gbW9udGhWaWV3LmRhdGVzLmZpbmQoKGQpID0+IGQuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRlICYmIGRhdGUuaXNGb2N1c2FibGUgJiYgIXRoaXMuaXNLZXlkb3duVHJpZ2dlcikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0ZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9LCBwYXJzZUludChzbGlkZUluUmlnaHQub3B0aW9ucy5wYXJhbXMuZHVyYXRpb24sIDEwKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxsYmFjayAmJiAoZXZlbnQudG9TdGF0ZSA9PT0gU2Nyb2xsTW9udGguTkVYVCB8fCBldmVudC50b1N0YXRlID09PSBTY3JvbGxNb250aC5QUkVWKSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLm5leHREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IFNjcm9sbE1vbnRoLk5PTkU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB2aWV3UmVuZGVyZWQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmZyb21TdGF0ZSAhPT0gJ3ZvaWQnKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2VkLmVtaXQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZXNldEFjdGl2ZURhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5tb250aFZpZXdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGVzID0gW107XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5tYXAobXYgPT4gbXYuZGF0ZXMpLmZvckVhY2goZGF5cyA9PiB7XG4gICAgICAgICAgICBkYXRlcyA9IGRhdGVzLmNvbmNhdChkYXlzLnRvQXJyYXkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRlID0gZGF0ZXMuZmluZChkYXkgPT4gZGF5LnNlbGVjdGVkICYmIGRheS5pc0N1cnJlbnRNb250aCkgfHwgZGF0ZXMuZmluZChkYXkgPT4gZGF5LmlzVG9kYXkgJiYgZGF5LmlzQ3VycmVudE1vbnRoKVxuICAgICAgICAgICAgfHwgZGF0ZXMuZmluZChkID0+IGQuaXNGb2N1c2FibGUpO1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZS5kYXRlLmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhWaWV3c0NoYW5nZXMkKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aFZpZXdzQ2hhbmdlcyQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UHJldk1vbnRoKGRhdGUpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJNb2RlbC5nZXRQcmV2TW9udGgoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXh0TW9udGgoZGF0ZSwgdmlld0luZGV4KTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGVuZGFyTW9kZWwuZ2V0RGF0ZUJ5VmlldyhkYXRlLCAnTW9udGgnLCB2aWV3SW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgYnVpbGRpbmcgYW5kIHJldHVybmluZyB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlXG4gICAgICogdGhlIGNhbGVuZGFyIHRlbXBsYXRlcy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlQ29udGV4dCh2YWx1ZTogRGF0ZSwgaT86IG51bWJlcikge1xuICAgICAgICBjb25zdCBmb3JtYXRPYmplY3QgPSB7XG4gICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgIG1vbnRoVmlldzogKCkgPT4gdGhpcy5vbkFjdGl2ZVZpZXdZZWFyKHZhbHVlLCBpKSxcbiAgICAgICAgICAgIHllYXJWaWV3OiAoKSA9PiB0aGlzLm9uQWN0aXZlVmlld0RlY2FkZSh2YWx1ZSwgaSksXG4gICAgICAgICAgICAuLi50aGlzLmNhbGVuZGFyTW9kZWwuZm9ybWF0VG9QYXJ0cyh2YWx1ZSwgdGhpcy5sb2NhbGUsIHRoaXMuZm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICBbJ2VyYScsICd5ZWFyJywgJ21vbnRoJywgJ2RheScsICd3ZWVrZGF5J10pXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7ICRpbXBsaWNpdDogZm9ybWF0T2JqZWN0IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCB0aGF0IHNldHMgcmVmZXJlbmNlcyBmb3IgcHJldi9uZXh0IG1vbnRocyBmb3IgZWFjaCBtb250aCBpbiB0aGUgdmlld1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0U2libGluZ01vbnRocyhtb250aFZpZXdzOiBRdWVyeUxpc3Q8SWd4RGF5c1ZpZXdDb21wb25lbnQ+KSB7XG4gICAgICAgIG1vbnRoVmlld3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZNb250aFZpZXcgPSB0aGlzLmdldE1vbnRoVmlldyhpbmRleCAtIDEpO1xuICAgICAgICAgICAgY29uc3QgbmV4dE1vbnRoVmlldyA9IHRoaXMuZ2V0TW9udGhWaWV3KGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpdGVtLm5leHRNb250aFZpZXcgPSBuZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgaXRlbS5wcmV2TW9udGhWaWV3ID0gcHJldk1vbnRoVmlldztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCByZXR1cm5pbmcgcHJldmlvdXMvbmV4dCBkYXkgdmlld3NcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1vbnRoVmlldyhpbmRleDogbnVtYmVyKTogSWd4RGF5c1ZpZXdDb21wb25lbnQge1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB0aGlzLm1vbnRoVmlld3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vbnRoVmlld3MudG9BcnJheSgpW2luZGV4XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgdGhhdCBkb2VzIGRlc2VsZWN0aW9uIGZvciBhbGwgbW9udGggdmlld3Mgd2hlbiBzZWxlY3Rpb24gaXMgXCJtdWx0aVwiXG4gICAgICogSWYgbm90IGNhbGxlZCwgc2VsZWN0aW9uIGluIG90aGVyIG1vbnRoIHZpZXdzIHN0YXlzXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXNlbGVjdERhdGVJbk1vbnRoVmlld3ModmFsdWU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICBtLmRlc2VsZWN0TXVsdGlwbGVJbk1vbnRoKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c01vbnRoKCkge1xuICAgICAgICBjb25zdCBtb250aCA9IHRoaXMubW9udGhzVmlldy5tb250aHNSZWYuZmluZCgoZSkgPT5cbiAgICAgICAgICAgIGUuaW5kZXggPT09IHRoaXMubW9udGhzVmlldy5kYXRlLmdldE1vbnRoKCkpO1xuICAgICAgICBpZiAobW9udGgpIHtcbiAgICAgICAgICAgIG1vbnRoLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBsZXQtcmVzdWx0ICNkZWZhdWx0SGVhZGVyPlxuICAgIDxzcGFuPnt7IGdldEZvcm1hdHRlZERhdGUoKS53ZWVrZGF5IH19LCZuYnNwOzwvc3Bhbj5cbiAgICA8c3Bhbj57eyBnZXRGb3JtYXR0ZWREYXRlKCkubW9udGhkYXkgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LXJlc3VsdCAjZGVmYXVsdE1vbnRoIGxldC1vYmo+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwibW9udGhzVmlld051bWJlciA8IDIgfHwgb2JqLmluZGV4IDwgMVwiIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19hcmlhLW9mZi1zY3JlZW5cIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgPiAxID8gKHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfZmlyc3RfcGlja2VyX29mLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgICsgJyAnICsgKGdldFZpZXdEYXRlKG9iai5pbmRleCkgfCBkYXRlOiAnTExMTCB5eXl5JykpIDogcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RlZF9tb250aF9pcyArIChnZXRWaWV3RGF0ZShvYmouaW5kZXgpIHwgZGF0ZTogJ0xMTEwgeXl5eScpfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSB8IGRhdGU6ICdMTExMJykgKyAnICcgKyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF9tb250aFwiXG4gICAgICAgICAgICAjbW9udGhzQnRuXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbkFjdGl2ZVZpZXdZZWFyS0IoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSwgJGV2ZW50LCBvYmouaW5kZXgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFjdGl2ZVZpZXdZZWFyKGdldFZpZXdEYXRlKG9iai5pbmRleCksIG9iai5pbmRleClcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlXCI+XG4gICAgICAgICAgICB7eyBmb3JtYXR0ZWRNb250aChnZXRWaWV3RGF0ZShvYmouaW5kZXgpKSB9fVxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGdldFZpZXdEYXRlKG9iai5pbmRleCkgfCBkYXRlOiAneXl5eScpICsgJyAnICsgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RfeWVhclwiXG4gICAgICAgICAgICAjeWVhcnNCdG5cbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQWN0aXZlVmlld0RlY2FkZUtCKCRldmVudCwgZ2V0Vmlld0RhdGUob2JqLmluZGV4KSwgb2JqLmluZGV4KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3RpdmVWaWV3RGVjYWRlKGdldFZpZXdEYXRlKG9iai5pbmRleCksIG9iai5pbmRleClcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlXCI+XG4gICAgICAgICAgICB7eyBmb3JtYXR0ZWRZZWFyKGdldFZpZXdEYXRlKG9iai5pbmRleCkpIH19XG4gICAgICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxoZWFkZXJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS1tb250aCBpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS15ZWFyXCJcbiAgICBjbGFzcz1cImlneC1jYWxlbmRhcl9faGVhZGVyXCJcbiAgICAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3NpbmdsZScgJiYgaGFzSGVhZGVyXCI+XG5cbiAgICA8aDUgaWQ9XCJpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS15ZWFyXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlci15ZWFyXCI+XG4gICAgICAgIHt7IGZvcm1hdHRlZFllYXIoaGVhZGVyRGF0ZSkgfX1cbiAgICA8L2g1PlxuXG4gICAgPGgyIGlkPVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUtbW9udGhcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9faGVhZGVyLWRhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlID8gaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0SGVhZGVyOyBjb250ZXh0OiBoZWFkZXJDb250ZXh0XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvaDI+XG48L2hlYWRlcj5cblxuPGRpdiAqbmdJZj1cImlzRGVmYXVsdFZpZXdcIiAgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2JvZHlcIiBbQGFuaW1hdGVWaWV3XT1cImFjdGl2ZVZpZXdcIiAoQGFuaW1hdGVWaWV3LmRvbmUpPVwidmlld1JlbmRlcmVkKCRldmVudClcIiAoc3dpcGVyaWdodCk9XCJwcmV2aW91c01vbnRoKClcIlxuICAgIChzd2lwZWxlZnQpPVwibmV4dE1vbnRoKClcIiAocG9pbnRlcmRvd24pPVwic3VwcHJlc3NCbHVyKClcIj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJcIj5cbiAgICAgICAgPHNwYW4gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ211bHRpJ1wiPlxuICAgICAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgJiYgbW9udGhzVmlld051bWJlciA+IDEgPyAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9tdWx0aV9zZWxlY3Rpb24ucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSA6IHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfbXVsdGlfc2VsZWN0aW9ufX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgJiYgbW9udGhzVmlld051bWJlciA+IDEgPyAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9yYW5nZV9zZWxlY3Rpb24ucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSA6IHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfcmFuZ2Vfc2VsZWN0aW9ufX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3NpbmdsZSdcIj5cbiAgICAgICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID8gIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ2xlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDogcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9zaW5nbGVfc2VsZWN0aW9ufX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX3ByZXZcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfcHJldmlvdXNfbW9udGggKyAnLCAnICsgKGdldFByZXZNb250aCh2aWV3RGF0ZSkgfCBkYXRlOiAnTExMTCcpXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwicHJldlwiXG4gICAgICAgICAgICAjcHJldk1vbnRoQnRuXG4gICAgICAgICAgICBpZ3hDYWxlbmRhclNjcm9sbE1vbnRoXG4gICAgICAgICAgICBbc3RhcnRTY3JvbGxdPVwic3RhcnRQcmV2TW9udGhTY3JvbGxcIlxuICAgICAgICAgICAgW3N0b3BTY3JvbGxdPVwic3RvcE1vbnRoU2Nyb2xsXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ21pbi13aWR0aC4lJzogMTAwLyhtb250aHNWaWV3TnVtYmVyKjcpfVwiPlxuICAgICAgICAgICAgPGlneC1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmtleWJvYXJkX2Fycm93X2xlZnQ8L2lneC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVzXCJcbiAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmlldyBvZiBtb250aHNWaWV3TnVtYmVyIHwgSWd4TW9udGhWaWV3U2xvdHM7IGluZGV4IGFzIGk7XCJcbiAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCIxMDAvbW9udGhzVmlld051bWJlclwiXG4gICAgICAgICAgICAgW2F0dHIuZGF0YS1tb250aF09XCJpIHwgSWd4R2V0Vmlld0RhdGU6dmlld0RhdGU6ZmFsc2VcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdE1vbnRoOyBjb250ZXh0OiBnZXRDb250ZXh0KGkpXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25leHRcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfbmV4dF9tb250aCArICcsICcgKyAgKGdldE5leHRNb250aCh2aWV3RGF0ZSwgbW9udGhzVmlld051bWJlcikgfCBkYXRlOiAnTExMTCcpXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwibmV4dFwiXG4gICAgICAgICAgICAjbmV4dE1vbnRoQnRuXG4gICAgICAgICAgICBpZ3hDYWxlbmRhclNjcm9sbE1vbnRoXG4gICAgICAgICAgICBbc3RhcnRTY3JvbGxdPVwic3RhcnROZXh0TW9udGhTY3JvbGxcIlxuICAgICAgICAgICAgW3N0b3BTY3JvbGxdPVwic3RvcE1vbnRoU2Nyb2xsXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWluLXdpZHRoLiUnOiAxMDAvKG1vbnRoc1ZpZXdOdW1iZXIqNyl9XCI+XG4gICAgICAgICAgICA8aWd4LWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCI+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L2lneC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8c2VjdGlvbiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIlxuICAgICAgICBbQGFuaW1hdGVDaGFuZ2VdPVwiYW5pbWF0aW9uQWN0aW9uXCJcbiAgICAgICAgKEBhbmltYXRlQ2hhbmdlLmRvbmUpPVwiYW5pbWF0aW9uRG9uZSgkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtZGF5cy12aWV3IHJvbGU9XCJncmlkXCIgKm5nRm9yPVwibGV0IHZpZXcgb2YgbW9udGhzVmlld051bWJlciB8IElneE1vbnRoVmlld1Nsb3RzOyBpbmRleCBhcyBpO1wiIFtjaGFuZ2VEYXlzVmlld109XCJ0cnVlXCIgI2RheXNcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgWyhhY3RpdmVEYXRlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgICAgICAgICBbdmlld0RhdGVdPVwiaSB8IElneEdldFZpZXdEYXRlOnZpZXdEYXRlXCJcbiAgICAgICAgICAgICAgICBbd2Vla1N0YXJ0XT1cIndlZWtTdGFydFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdE9wdGlvbnNdPVwiZm9ybWF0T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFZpZXdzXT1cImZvcm1hdFZpZXdzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgICAgICAgICAgICBbc3BlY2lhbERhdGVzXT1cInNwZWNpYWxEYXRlc1wiXG4gICAgICAgICAgICAgICAgW2hpZGVPdXRzaWRlRGF5c109XCJoaWRlT3V0c2lkZURheXNcIlxuICAgICAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgICAgICAgICAodmlld0NoYW5naW5nKT1cInZpZXdDaGFuZ2luZygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdGlvbik9XCJjaGlsZENsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG1vbnRoc1ZpZXdCbHVyKT1cInJlc2V0QWN0aXZlRGF0ZSgpXCI+XG4gICAgICAgIDwvaWd4LWRheXMtdmlldz5cbiAgICA8L3NlY3Rpb24+XG48L2Rpdj5cblxuPGlneC1tb250aHMtdmlldyAqbmdJZj1cImlzWWVhclZpZXdcIlxuICAgICAgICAgICAgICAgICBbQGFuaW1hdGVWaWV3XT1cImFjdGl2ZVZpZXdcIlxuICAgICAgICAgICAgICAgICAjbW9udGhzXG4gICAgICAgICAgICAgICAgIChAYW5pbWF0ZVZpZXcuZG9uZSk9XCJ2aWV3UmVuZGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgIFtkYXRlXT1cInZpZXdEYXRlXCJcbiAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgICBbZm9ybWF0Vmlld109XCJmb3JtYXRWaWV3cy5tb250aFwiXG4gICAgICAgICAgICAgICAgIFttb250aEZvcm1hdF09XCJmb3JtYXRPcHRpb25zLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNoYW5nZU1vbnRoKCRldmVudClcIj5cbjwvaWd4LW1vbnRocy12aWV3PlxuXG48aWd4LXllYXJzLXZpZXcgKm5nSWY9XCJpc0RlY2FkZVZpZXdcIlxuICAgICAgICAgICAgICAgIFtAYW5pbWF0ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICAgICAgI2RlY2FkZVxuICAgICAgICAgICAgICAgIChAYW5pbWF0ZVZpZXcuZG9uZSk9XCJ2aWV3UmVuZGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2RhdGVdPVwidmlld0RhdGVcIlxuICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0Vmlld109XCJmb3JtYXRWaWV3cy55ZWFyXCJcbiAgICAgICAgICAgICAgICBbeWVhckZvcm1hdF09XCJmb3JtYXRPcHRpb25zLnllYXJcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGFuZ2VZZWFyKCRldmVudClcIj5cbjwvaWd4LXllYXJzLXZpZXc+XG4iXX0=