@jax-data-science/sci-image-visualizer 0.12.0 → 0.13.0

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 (37) hide show
  1. package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
  2. package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
  3. package/esm2022/lib/geometry/reconstruct.mjs +11 -1
  4. package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +18 -6
  5. package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +29 -14
  6. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +6 -1
  7. package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +9 -4
  8. package/esm2022/lib/region-editor/region-editor.component.mjs +13 -1
  9. package/esm2022/lib/routing-visualizer.service.mjs +4 -1
  10. package/esm2022/lib/spatial/spatial-controls.facade.mjs +71 -21
  11. package/esm2022/lib/spatial/spatial-selection.mjs +70 -1
  12. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +53 -11
  13. package/esm2022/lib/store/region-selection.mjs +21 -4
  14. package/esm2022/lib/store/region-store.service.mjs +22 -3
  15. package/esm2022/lib/store/spatial-selection.service.mjs +13 -1
  16. package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +3 -3
  17. package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-a68Hw5rw.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DURPqs5a.mjs} +770 -500
  18. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DURPqs5a.mjs.map +1 -0
  19. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-CvadfzjS.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-D0IQ6PjZ.mjs} +2 -2
  20. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-CvadfzjS.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-D0IQ6PjZ.mjs.map} +1 -1
  21. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +2 -2
  22. package/lib/contracts/region-editor-api.contract.d.ts +3 -0
  23. package/lib/contracts/visualizer.contract.d.ts +25 -2
  24. package/lib/geometry/reconstruct.d.ts +6 -0
  25. package/lib/implementations/napari-js/napari-region-overlay.d.ts +13 -1
  26. package/lib/implementations/napari-js/napari-tool-bridge.d.ts +11 -0
  27. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +3 -0
  28. package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +6 -1
  29. package/lib/routing-visualizer.service.d.ts +1 -0
  30. package/lib/spatial/spatial-controls.facade.d.ts +16 -2
  31. package/lib/spatial/spatial-selection.d.ts +16 -1
  32. package/lib/spatial-controls/spatial-controls.component.d.ts +14 -3
  33. package/lib/store/region-selection.d.ts +14 -3
  34. package/lib/store/region-store.service.d.ts +14 -1
  35. package/lib/store/spatial-selection.service.d.ts +8 -0
  36. package/package.json +1 -1
  37. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-a68Hw5rw.mjs.map +0 -1
@@ -327,6 +327,11 @@ export class NapariVisualizerService extends BaseStoreVisualizer {
327
327
  getSpatialScreenProjection(obs) {
328
328
  return this.scene?.screenProjection?.(obs) ?? null;
329
329
  }
330
+ /** The ids of the regions drawn over the 3D cloud in screen space (its lassos); [] in 2D. Every
331
+ * other region in the store is in image space, and means nothing at canvas pixels. */
332
+ getSpatialLassoIds() {
333
+ return this.tools.regionOverlay?.ownRegionIds() ?? [];
334
+ }
330
335
  fitCameraSoon() {
331
336
  const run = () => {
332
337
  if (this.viewer && this.canvas && this.imageW > 0 && this.imageH > 0) {
@@ -666,4 +671,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
666
671
  type: Inject,
667
672
  args: [SPATIAL_DATA_PORT]
668
673
  }] }, { type: i8.SpatialSelectionStore }] });
669
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXZpc3VhbGl6ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9uYXBhcmktdmlzdWFsaXplci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBYyxlQUFlLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFPbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLHlDQUF5QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBa0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RixPQUFPLEVBQXNCLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRyxPQUFPLEVBQ0wsUUFBUSxFQUVSLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEVBQ2QsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFXbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUcvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1B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bXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgT3B0aW9uYWwsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdpbWFnZS1qcyc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IFZpZXdlciB9IGZyb20gJ25hcGFyaS1qcyc7XG5cbmltcG9ydCB7IElJbWFnZUluZm8gfSBmcm9tICcuLi8uLi9jb250cmFjdHMvaW1hZ2UuY29udHJhY3QnO1xuaW1wb3J0IHsgSUhpc3RvZ3JhbSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jaGFubmVsLWhpc3RvZ3JhbS1hcGkuY29udHJhY3QnO1xuaW1wb3J0IHsgQ2FudmFzVG9vbElkIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgSVJlZ2lvbk92ZXJsYXkgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcmVnaW9uLW92ZXJsYXkuY29udHJhY3QnO1xuaW1wb3J0IHsgU3BhdGlhbE9ic2VydmF0aW9ucyB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHsgU1BBVElBTF9EQVRBX1BPUlQsIFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQgeyBUSUxFX0FDQ0VTU19QT1JULCBUaWxlQWNjZXNzUG9ydCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wb3J0cy90aWxlLWFjY2Vzcy5wb3J0JztcbmltcG9ydCB7IFZJWl9DT05GSUcsIFZpekNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy92aXotY29uZmlnJztcbmltcG9ydCB7IElDZWxsU2VnbWVudGVyLCBDRUxMX1NFR01FTlRFUiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jZWxsLXNlZ21lbnRlci5jb250cmFjdCc7XG5pbXBvcnQgeyBWaWV3ZXJDYXBhYmlsaXRpZXMsIFZpZXdlckZlYXR1cmUsIGNhcGFiaWxpdGllc09mIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2NhcGFiaWxpdGllcy5jb250cmFjdCc7XG5pbXBvcnQge1xuICBQbG90VHlwZSxcbiAgUGxvdFR5cGVEZXNjcmlwdG9yLFxuICBQTE9UX1RZUEVfREVTQ1JJUFRPUlMsXG4gIE5BUEFSSV9ERUZBVUxUX0RFQ0lNQVRFLFxuICBpc05hcGFyaTNkLFxuICBpc05hcGFyaUlzb3N1cmZhY2UsXG4gIGlzTmFwYXJpU2NhdHRlcixcbiAgaXNOYXBhcmlTY2F0dGVyM2QsXG4gIGlzTmFwYXJpU3VyZmFjZSxcbiAgaXNTcGF0aWFsT21pY3MsXG4gIGlzU3BhdGlhbE9taWNzM2QsXG59IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wbG90LXR5cGUnO1xuaW1wb3J0IHtcbiAgSVZpZXdlckJhY2tlbmQsXG4gIFBpeGVsRGF0YSxcbiAgSUlzb3N1cmZhY2VDb250cm9scyxcbiAgSUludGVuc2l0eUNvbnRyb2xzLFxuICBJU3VyZmFjZTNkQ29udHJvbHMsXG4gIElPc2RWaWV3T3B0aW9ucyxcbiAgSVZvbHVtZVJlc29sdXRpb24sXG4gIElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSxcbn0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuaW1wb3J0IHsgVmlzdWFsaXplclN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvdmlzdWFsaXplci1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZ2lvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvcmVnaW9uLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3BhdGlhbFNlbGVjdGlvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvc3BhdGlhbC1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYW52YXNUb29sTWFuYWdlciB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvdG9vbC1raXQvY2FudmFzLXRvb2wtbWFuYWdlcic7XG5pbXBvcnQgeyBXYW5kU2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvd2FuZC93YW5kLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FtVG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNhbVBvaW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tcG9pbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IENlbGxTZWdtZW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9jZWxsLXNlZ21lbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VTdG9yZVZpc3VhbGl6ZXIgfSBmcm9tICcuLi9iYXNlLXN0b3JlLXZpc3VhbGl6ZXInO1xuaW1wb3J0IHsgdGhyb3dJZkFib3J0ZWQgfSBmcm9tICcuLi90aWxlLXNlcnZlcic7XG5pbXBvcnQgeyBTaW1wbGVTbGljZUFjY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi9zaW1wbGUtc2xpY2UtYWNjZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgWk9PTV9CVVRUT05fU1RFUCB9IGZyb20gJy4uL29zZC9vc2Qtem9vbSc7XG5pbXBvcnQgeyBOQVBBUklfV0hFRUxfWk9PTV9TUEVFRCB9IGZyb20gJy4vbmFwYXJpLXpvb20nO1xuaW1wb3J0IHsgVHJhbnNjcmlwdEVzdGltYXRlIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC10aWxlcyc7XG5pbXBvcnQgeyBOYXBhcmlUaWxlQ2xpZW50IH0gZnJvbSAnLi9uYXBhcmktdGlsZS1jbGllbnQnO1xuaW1wb3J0IHsgTmFwYXJpRGlzcGxheVN0YXRlIH0gZnJvbSAnLi9uYXBhcmktZGlzcGxheS1zdGF0ZSc7XG5pbXBvcnQgeyBMb2FkaW5nQmFkZ2VTdGF0ZSB9IGZyb20gJy4vbmFwYXJpLWxvYWRpbmctc3RhdGUnO1xuaW1wb3J0IHsgTmFwYXJpVG9vbEJyaWRnZSB9IGZyb20gJy4vbmFwYXJpLXRvb2wtYnJpZGdlJztcbmltcG9ydCB7IGNhbWVyYURyYWdNb2RlIH0gZnJvbSAnLi9uYXBhcmktYXhlcy1naXptbyc7XG5pbXBvcnQgeyBOYXBhcmlTY2VuZSwgTmFwYXJpU2V0dGluZ3MsIFNjZW5lQ29udGV4dCwgVm9sdW1lVm94ZWxzT25TY3JlZW4gfSBmcm9tICcuL25hcGFyaS1zY2VuZSc7XG5pbXBvcnQgdHlwZSB7IFBsYW5lQXhpcywgU2xpY2VQbGFuZXMgfSBmcm9tICcuL25hcGFyaS12b2x1bWUtc2xpY2UtcGxhbmVzJztcbmltcG9ydCB0eXBlIHsgUmVnaW9uTWVzaDNEIH0gZnJvbSAnLi9uYXBhcmktdm9sdW1lLXJlZ2lvbi1tZXNoZXMnO1xuaW1wb3J0IHsgSW1hZ2UyZFNjZW5lLCBTY2F0dGVyUmVnaW9uc1NjZW5lIH0gZnJvbSAnLi9uYXBhcmktaW1hZ2UtMmQtc2NlbmUnO1xuaW1wb3J0IHsgU2NhdHRlcjNkU2NlbmUsIFZvbHVtZVNjZW5lIH0gZnJvbSAnLi9uYXBhcmktdm9sdW1lLXNjZW5lJztcbmltcG9ydCB7IFN1cmZhY2VTY2VuZSB9IGZyb20gJy4vbmFwYXJpLXN1cmZhY2Utc2NlbmUnO1xuaW1wb3J0IHsgU3BhdGlhbFNlc3Npb24gfSBmcm9tICcuL25hcGFyaS1zcGF0aWFsLXNjZW5lJztcbmltcG9ydCB7IFNwYXRpYWwyZFNjZW5lIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC0yZC1zY2VuZSc7XG5pbXBvcnQgeyBTcGF0aWFsM2RTY2VuZSB9IGZyb20gJy4vbmFwYXJpLXNwYXRpYWwtM2Qtc2NlbmUnO1xuXG4vKiogT3BhcXVlIGhhbmRsZSBmcm9tIHtAbGluayBOYXBhcmlWaXN1YWxpemVyU2VydmljZS5sb2FkfSwgcGFzc2VkIGJhY2sgdG8gcGxvdCgpLiAqL1xuaW50ZXJmYWNlIE5hcGFyaUxvYWRlZCB7XG4gIGltYWdlSW5mbzogSUltYWdlSW5mbztcbiAgejogbnVtYmVyO1xuICAvKiogTXVzdCBtYXRjaCBgSUltYWdlSW5mby5maWxlTmFtZWAg4oCUIHRoZSByZW5kZXIgb3JjaGVzdHJhdG9yIGRyb3BzIHRoZSByZXN1bHQgaWYgdGhlXG4gICAqICBoYW5kbGUncyBgZmlsZW5hbWVgIGRvZXNuJ3QgbWF0Y2ggdGhlIHJlcXVlc3RlZCBpbWFnZSAoZ3VhcmRzIGFnYWluc3Qgc3RhbGUgY2xpY2tzKS4gKi9cbiAgZmlsZW5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgV2ViR1BVIGltYWdlIGJhY2tlbmQsIGJ1aWx0IG9uIHRoZSBwdWJsaXNoZWQgYG5hcGFyaS1qc2AgbGlicmFyeSAoaml0LXVpIzEwMjogYVxuICogYnJvd3Nlci1iYXNlZCBuYXBhcmkgc2hpcHBlZCBhcyBhIEpTIGxpYnJhcnksIGFsb25nc2lkZSBPcGVuU2VhZHJhZ29uIGZvciBpbWFnZXMgYW5kIFBsb3RseVxuICogZm9yIDNEKS5cbiAqXG4gKiBPbmUgc2NlbmUgaXMgbW91bnRlZCBwZXIge0BsaW5rIHBsb3R9LCBjaG9zZW4gYnkgcGxvdCB0eXBlOlxuICogIC0gKioyRCBpbWFnZSoqIChhbmQgdGhlIHJlZ2lvbi1jZW50cm9pZCBzY2F0dGVyIGFuZCBzcGF0aWFsLW9taWNzIHZpZXdzIG92ZXIgaXQpOiBweXJhbWlkYWxcbiAqICAgIGBUaWxlZFNvdXJjZWBzIGFnYWluc3QgdGhlIGppdC1zZXJ2aWNlIGAvdGlsZWAgZW5kcG9pbnQgd2hlbiBgL3RpbGVzL2luZm9gIGRlc2NyaWJlcyB0aGVcbiAqICAgIGltYWdlLCBlbHNlIGEgc2luZ2xlIHN0aXRjaGVkIGxldmVsIChgdGlsZWQ6ZmFsc2VgIHN0YWNrcyBmZXRjaCBlYWNoIHNsaWNlJ3Mgb3duIFVSTCk7XG4gKiAgICBtdWx0aWNoYW5uZWwgYWRkaXRpdmUgdGludHMsIGdyYXlzY2FsZSBjb2xvcm1hcCBvciBSR0I7IHNjYWxlIGJhciwgbmF2aWdhdG9yLCByZWdpb25cbiAqICAgIG92ZXJsYXkgYW5kIHRoZSBzaGFyZWQgcGl4ZWwgdG9vbHMgKHdhbmQsIGJydXNoLCBlcmFzZXIsIHpvb20tdG8tYm94LCBTQU0vY2VsbHBvc2UpLlxuICogIC0gKipWb2x1bWUgLyBpc29zdXJmYWNlIC8gM0Qgc2NhdHRlciAvIHN1cmZhY2UqKjogc2xpY2VzIGFzc2VtYmxlZCBpbnRvIGEgZGVjaW1hdGVkIHZvbHVtZVxuICogICAgKG9yIG9uZSBoZWlnaHQgZmllbGQgcGVyIHNsaWNlKSwgd2l0aCB0aGUgYXhlcyBnaXptbyBhbmQgdGhlIFotaGVpZ2h0IGhhbmRsZS5cbiAqICAtICoqU3BhdGlhbCBvbWljcyAyRCAvIDNEKio6IG9ic2VydmF0aW9uIG1hcmtlcnMgb3IgYSAzRCBjbG91ZCwgZ2VuZSBtYXBzLCBkZW5zaXR5IHZvbHVtZXMsXG4gKiAgICBsZXZlbC1vZi1kZXRhaWwgdGlsZXMsIGhvdmVyIHRvb2x0aXAgYW5kIGNsaWNrLXRvLXNlbGVjdC5cbiAqXG4gKiBQZXItY2hhbm5lbCBoaXN0b2dyYW1zIGNvbWUgZnJvbSB0aGUgY2xpZW50IGRhdGEsIG9yIGZyb20gdGhlIHNlcnZlcidzIGAvaGlzdG9ncmFtYCBmb3JcbiAqID44LWJpdCBpbWFnZXM7IFRJRkYgZXhwb3J0IGZyb20gYC9leHBvcnQvdGlmZmAuIFJlZ2lvbiBzdGF0ZSBhbmQgZGlzcGxheSBvcHRpb25zIGRlbGVnYXRlIHRvXG4gKiB0aGUgc2hhcmVkIHtAbGluayBSZWdpb25TdG9yZX0gLyB7QGxpbmsgVmlzdWFsaXplclN0b3JlfSB0aHJvdWdoIHtAbGluayBCYXNlU3RvcmVWaXN1YWxpemVyfSxcbiAqIGV4YWN0bHkgYXMgT1NEIGRvZXMuIG5hcGFyaS1qcydzIHJlbmRlciBsb29wIGFuZCB0aGUgaG90IHBvaW50ZXIgcGF0aHMgcnVuIG91dHNpZGUgdGhlXG4gKiBBbmd1bGFyIHpvbmUuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmFwYXJpVmlzdWFsaXplclNlcnZpY2UgZXh0ZW5kcyBCYXNlU3RvcmVWaXN1YWxpemVyIGltcGxlbWVudHMgSVZpZXdlckJhY2tlbmQge1xuICByZWFkb25seSBjYXBhYmlsaXRpZXM6IFZpZXdlckNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllc09mKFtcbiAgICBWaWV3ZXJGZWF0dXJlLkltYWdlRGlzcGxheSxcbiAgICBWaWV3ZXJGZWF0dXJlLlN0YWNrU2xpZGVyLFxuICAgIFZpZXdlckZlYXR1cmUuUGl4ZWxSZWFkYmFjayxcbiAgICBWaWV3ZXJGZWF0dXJlLlN1cmZhY2UzRCxcbiAgICBWaWV3ZXJGZWF0dXJlLklzb3N1cmZhY2UsXG4gIF0pO1xuXG4gIC8qKiBUaGUgaml0LXNlcnZpY2UgdGlsZSBzZXJ2ZXI6IGRlc2NyaXB0b3IsIHNsaWNlcywgdGlsZWQgc291cmNlcywgaGlzdG9ncmFtcywgZXhwb3J0LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbGVDbGllbnQ6IE5hcGFyaVRpbGVDbGllbnQ7XG4gIC8qKiBuYXBhcmktanMncyByZW5kZXIgbG9vcCBhbmQgdGhlIGhvdCBwb2ludGVyL3RpbWVyIHBhdGhzIHJ1biBvdXRzaWRlIHRoZSBBbmd1bGFyIHpvbmVcbiAgICogIChOQVBBUkktU1ZDLTI1KTsgd2hhdCB0aGV5IHByb2R1Y2UgZm9yIHRoZSBVSSByZS1lbnRlcnMgaXQgdGhyb3VnaCB7QGxpbmsgaW5ab25lfS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJpdmF0ZSB2aWV3ZXI6IFZpZXdlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBob3N0OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxvYWRlZDogTmFwYXJpTG9hZGVkIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBGb3IgdGhlIHBhbmVsOiB0aGUgdHJhbnNjcmlwdHMtaW4tdmlldyBlc3RpbWF0ZSBhbmQgdGhlIGRlbnNpdHkgd2luZG93IGluIHVzZS4gKi9cbiAgcmVhZG9ubHkgdHJhbnNjcmlwdEVzdGltYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHJhbnNjcmlwdEVzdGltYXRlIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUcmFuc2NyaXB0cyBvZiBlYWNoIHNlbGVjdGVkIGdlbmUgaW4gdmlldyAoc2VlIE5hcGFyaVNwYXRpYWxUaWxlTGF5ZXJzLmdlbmVDb3VudHNJbikuICovXG4gIHJlYWRvbmx5IGdlbmVDb3VudHNJblZpZXckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGRlbnNpdHlTdGF0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgbG86IG51bWJlcjsgaGk6IG51bWJlcjsgbWF4OiBudW1iZXIgfSB8IG51bGw+KG51bGwpO1xuICAvKiogXCJ4IHJlbG9hZGluZ+KAplwiIGF0IHRoZSBib3R0b20gb2YgdGhlIGNhbnZhczogdGhlIHRpbGUgbGF5ZXJzJyBsb2FkcyBhbmQgdGhlIG9ic2VydmF0aW9ucycuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYmFkZ2UgPSBuZXcgTG9hZGluZ0JhZGdlU3RhdGUoKTtcbiAgLyoqIFRoZSBzdG9yZSdzIGRpc3BsYXkgc3RhdGUgKGNvbG9ybWFwLCByZXZlcnNlLCBpbnZlcnQpIGFuZCB0aGUgY29sb3JtYXBzIGRlcml2ZWQgZnJvbSBpdC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5OiBOYXBhcmlEaXNwbGF5U3RhdGU7XG4gIC8qKlxuICAgKiBUaGUgbW91bnRlZCBzY2VuZSdzIGxpZmV0aW1lOiBhYm9ydGVkIGJ5IHtAbGluayByZXNldH0sIHNvIGV2ZXJ5dGhpbmcgYSBwbG90IHN0YXJ0cyDigJQgaXRzXG4gICAqIGRlc2NyaXB0b3IgcG9sbCwgaXRzIHRpbGUgZmV0Y2hlcywgaXRzIGJhZGdlIGNvdW50cywgaXRzIGF3YWl0cyDigJQgY2FuIHRlbGwgdGhhdCBhIG5ld2VyIHBsb3RcbiAgICogaGFzIHJlcGxhY2VkIGl0LiBBIHRpbGUgdGhhdCBzZXR0bGVzIGFmdGVyIGEgcmVzZXQgYmVsb25ncyB0byB0aGUgYWJvcnRlZCBzY2VuZSBhbmQgbGVhdmVzIHRoZVxuICAgKiBuZXcgc2NlbmUncyBjb3VudCBhbG9uZS5cbiAgICovXG4gIHByaXZhdGUgbGlmZXRpbWUgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIC8qKiBXaGF0IHtAbGluayBwbG90fSBtb3VudGVkLCB3aGlsZSBpdCBpcyBtb3VudGVkLiAqL1xuICBwcml2YXRlIHNjZW5lOiBOYXBhcmlTY2VuZSB8IG51bGwgPSBudWxsO1xuICAvKiogUmVnaW9uIHJlY29uc3RydWN0aW9ucyB0byBzaG93IGluIGEgdm9sdW1lIHZpZXcsIGtlcHQgYWNyb3NzIHJlLXBsb3RzIG9mIHRoZWlyIGltYWdlLiAqL1xuICBwcml2YXRlIHJlZ2lvbk1lc2hlczogcmVhZG9ubHkgUmVnaW9uTWVzaDNEW10gPSBbXTtcbiAgLyoqIFRoZSBpbWFnZSAoZmlsZSBuYW1lKSB7QGxpbmsgcmVnaW9uTWVzaGVzfSB3ZXJlIGJ1aWx0IGZyb20uICovXG4gIHByaXZhdGUgcmVnaW9uTWVzaGVzSW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIFRoZSBrZXlzIG9mIHRoZSByZWNvbnN0cnVjdGlvbnMgaGlnaGxpZ2h0ZWQuICovXG4gIHByaXZhdGUgcmVnaW9uSGlnaGxpZ2h0OiByZWFkb25seSBzdHJpbmdbXSA9IFtdO1xuICAvKiogVGhlIGtleXMgb2YgdGhlIHJlY29uc3RydWN0aW9ucyBoaWRkZW4uICovXG4gIHByaXZhdGUgcmVnaW9uSGlkZGVuOiByZWFkb25seSBzdHJpbmdbXSA9IFtdO1xuICAvKiogVGhlIHBsYW5lcyBvZiB0aGUgc2VjdGlvbnMgYmVzaWRlIGEgdm9sdW1lIHZpZXcsIG9yIG5vbmUuICovXG4gIHByaXZhdGUgc2xpY2VQbGFuZXM6IFNsaWNlUGxhbmVzID0geyB4OiBudWxsLCB5OiBudWxsLCB6OiBudWxsIH07XG4gIC8qKiBBIHNlY3Rpb24ncyBwbGFuZSBkcmFnZ2VkIGluIHRoZSB2b2x1bWUgKHNlZSB7QGxpbmsgZ2V0U2xpY2VQbGFuZU1vdmUkfSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc2xpY2VQbGFuZU1vdmUkID0gbmV3IFN1YmplY3Q8eyBheGlzOiBQbGFuZUF4aXM7IHZhbHVlOiBudW1iZXIgfT4oKTtcbiAgLyoqIENsaWNrcyBvbiB0aGUgcmVjb25zdHJ1Y3Rpb25zIChzZWUge0BsaW5rIGdldFJlZ2lvbk1lc2hQaWNrJH0pLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbk1lc2hQaWNrJCA9IG5ldyBTdWJqZWN0PHsga2V5OiBzdHJpbmcgfCBudWxsOyBhZGRpdGl2ZTogYm9vbGVhbiB9PigpO1xuICAvKiogU3BhdGlhbCBzdGF0ZSB0aGF0IG91dGxpdmVzIGEgc2NlbmUgKGxhdGVzdCBkYXRhLCB3aW5kb3dzLCBlc3RpbWF0ZWQgZ2VuZS1tYXAgZmllbGRzKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzcGF0aWFsOiBTcGF0aWFsU2Vzc2lvbjtcbiAgLyoqIFZpZXdlciBzZXR0aW5ncyB0aGF0IG91dGxpdmUgYSBzY2VuZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nczogTmFwYXJpU2V0dGluZ3MgPSB7XG4gICAgcmVzb2x1dGlvblNjYWxlOiBOQVBBUklfREVGQVVMVF9ERUNJTUFURSxcbiAgICBuYXZpZ2F0b3JWaXNpYmxlOiB0cnVlLFxuICAgIGltYWdlU21vb3RoaW5nOiBmYWxzZSxcbiAgICBheGVzVmlzaWJsZTogdHJ1ZSxcbiAgICBzdXJmYWNlV2lyZWZyYW1lOiBmYWxzZSxcbiAgICB2b2x1bWVaU2NhbGU6IDEsXG4gIH07XG4gIC8qKlxuICAgKiBGcmFtZSBsb2FkaW5nICh2b2x1bWUgYXNzZW1ibHksIHN1cmZhY2UgcHJlbG9hZCk6IGFib3J0ZWQgYnkge0BsaW5rIHJlc2V0fSBBTkQgYnlcbiAgICoge0BsaW5rIGNhbmNlbExvYWRpbmd9LCBzbyBhIENhbmNlbCBhY3R1YWxseSBzdG9wcyBmZXRjaGluZyBmcmFtZXMgaW5zdGVhZCBvZiBydW5uaW5nIHRvXG4gICAqIGNvbXBsZXRpb24gaW4gdGhlIGJhY2tncm91bmQsIHdoaWxlIHRoZSBzY2VuZSBpdHNlbGYgc3RheXMgbW91bnRlZC4gKExhdGVzdC13aW5zIFdJVEhJTiBhXG4gICAqIHNjZW5lIOKAlCBhIHNjcnViLCBhIGNvbG91ciByZWJ1aWxkLCBhIGhvdmVyLXNvdXJjZSBmZXRjaCDigJQgaXMgZWFjaCBzY2VuZSdzIG93biBidXNpbmVzcy4pXG4gICAqL1xuICBwcml2YXRlIGxvYWRpbmcgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIC8qKiBUaGUgaW1hZ2UncyBmdWxsLXJlc29sdXRpb24gc2l6ZSBhcyB0aGUgbGFzdCBzY2VuZSBkcmV3IGl0IChpdCBvdXRsaXZlcyB0aGUgc2NlbmUpLiAqL1xuICBwcml2YXRlIGltYWdlVyA9IDA7XG4gIHByaXZhdGUgaW1hZ2VIID0gMDtcbiAgLyoqIFRoZSByZWdpb24gb3ZlcmxheSwgdGhlIHBpeGVsIHRvb2xzIGFuZCB0aGUgZGlzcGxheWVkLXBpeGVsIHJlYWRiYWNrIHRoZXkgcmVhZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0b29sczogTmFwYXJpVG9vbEJyaWRnZTtcbiAgLyoqIFRoaXMgYmFja2VuZCdzIG93biB3YW5kLCBicnVzaCwgZXJhc2VyLCB6b29tLXRvLWJveCBhbmQgU0FNIHBvaW50IHRvb2xzLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FudmFzVG9vbHM6IENhbnZhc1Rvb2xNYW5hZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja0xvYWRpbmdQcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b3NjYWxlRXZlbnQkID0gbmV3IFN1YmplY3Q8dW5rbm93bj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3cG9ydENoYW5nZSQgPSBuZXcgU3ViamVjdDx7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVElMRV9BQ0NFU1NfUE9SVCkgdGlsZXM6IFRpbGVBY2Nlc3NQb3J0LFxuICAgIHN0b3JlOiBWaXN1YWxpemVyU3RvcmUsXG4gICAgcmVnaW9uU3RvcmU6IFJlZ2lvblN0b3JlLFxuICAgIHdhbmRTZXJ2aWNlOiBXYW5kU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbVRvb2w6IFNhbVRvb2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2FtUG9pbnRUb29sOiBTYW1Qb2ludFRvb2xTZXJ2aWNlLFxuICAgIGNlbGxTZWdtZW50VG9vbDogQ2VsbFNlZ21lbnRUb29sU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KENFTExfU0VHTUVOVEVSKSBjZWxsU2VnbWVudGVyOiBJQ2VsbFNlZ21lbnRlciB8IG51bGwsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzaW1wbGVTdGFjazogU2ltcGxlU2xpY2VBY2Nlc3NTZXJ2aWNlLFxuICAgIEBJbmplY3QoVklaX0NPTkZJRykgY29uZmlnOiBWaXpDb25maWcsXG4gICAgLy8gT3B0aW9uYWw6IG9ubHkgYSBob3N0IHRoYXQgc2VydmVzIHNwYXRpYWwtb21pY3MgZGF0YSBwcm92aWRlcyBpdCwgYW5kXG4gICAgLy8gd2l0aG91dCBpdCB0aGUgU1BBVElBTF9PTUlDUyBwbG90IHR5cGUgaXMgbmV2ZXIgb2ZmZXJlZCBhbnl3YXkuXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChTUEFUSUFMX0RBVEFfUE9SVCkgc3BhdGlhbERhdGE6IFNwYXRpYWxEYXRhUG9ydCB8IG51bGwgPSBudWxsLFxuICAgIHNlbGVjdGlvblN0b3JlOiBTcGF0aWFsU2VsZWN0aW9uU3RvcmUgfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgc3VwZXIocmVnaW9uU3RvcmUsIHN0b3JlKTtcbiAgICB0aGlzLnRpbGVDbGllbnQgPSBuZXcgTmFwYXJpVGlsZUNsaWVudCh0aWxlcywgc2ltcGxlU3RhY2ssIGNvbmZpZy5zbGlkZUNyb3BTZXJ2ZXIpO1xuICAgIHRoaXMudGlsZUNsaWVudC5zdGFydFNjZW5lKHRoaXMubGlmZXRpbWUuc2lnbmFsKTtcbiAgICB0aGlzLmRpc3BsYXkgPSBuZXcgTmFwYXJpRGlzcGxheVN0YXRlKHN0b3JlKTtcbiAgICB0aGlzLnNwYXRpYWwgPSBuZXcgU3BhdGlhbFNlc3Npb24oc3BhdGlhbERhdGEsIHNlbGVjdGlvblN0b3JlLCB7XG4gICAgICBjb250aW51b3VzTHV0OiAodmlldykgPT4gdGhpcy5kaXNwbGF5LnNwYXRpYWxMdXQodmlldyksXG4gICAgICAvLyBUaGVzZSBmb2xsb3cgdGhlIGNhbWVyYSwgd2hpY2ggbW92ZXMgb3V0c2lkZSB0aGUgem9uZTsgdGhlIHBhbmVsIHJlYWRzIHRoZW0uXG4gICAgICBlc3RpbWF0ZUNoYW5nZWQ6IChlKSA9PiB0aGlzLmluWm9uZSgoKSA9PiB0aGlzLnRyYW5zY3JpcHRFc3RpbWF0ZSQubmV4dChlKSksXG4gICAgICBnZW5lQ291bnRzQ2hhbmdlZDogKGMpID0+IHRoaXMuaW5ab25lKCgpID0+IHRoaXMuZ2VuZUNvdW50c0luVmlldyQubmV4dChjKSksXG4gICAgICBkZW5zaXR5Q2hhbmdlZDogKGQpID0+IHRoaXMuaW5ab25lKCgpID0+IHRoaXMuZGVuc2l0eVN0YXRzJC5uZXh0KGQpKSxcbiAgICAgIGxvYWRpbmdDaGFuZ2VkOiAobGF5ZXJzKSA9PiB0aGlzLmJhZGdlLnNldFRpbGVMYXllcnMobGF5ZXJzKSxcbiAgICB9KTtcbiAgICB0aGlzLnRvb2xzID0gbmV3IE5hcGFyaVRvb2xCcmlkZ2UoXG4gICAgICB7XG4gICAgICAgIHZpZXdlcjogKCkgPT4gdGhpcy52aWV3ZXIsXG4gICAgICAgIGhvc3Q6ICgpID0+IHRoaXMuaG9zdCxcbiAgICAgICAgY2FudmFzOiAoKSA9PiB0aGlzLmNhbnZhcyxcbiAgICAgICAgaW1hZ2VTaXplOiAoKSA9PiB0aGlzLmdldFRydWVJbWFnZVNpemUoKSxcbiAgICAgICAgZnJhbWVJbmRleDogKCkgPT4gdGhpcy5sb2FkZWQ/LnogPz8gMCxcbiAgICAgICAgZmlsZU5hbWU6ICgpID0+IHRoaXMubG9hZGVkPy5maWxlbmFtZSxcbiAgICAgICAgLy8gUmVhY2hlZCBmcm9tIHRpbWVycyBhcm1lZCBvdXRzaWRlIHRoZSB6b25lOyBzdWJzY3JpYmVycyBhcmUgVUkuXG4gICAgICAgIHZpZXdwb3J0Q2hhbmdlZDogKHJlY3QpID0+IHRoaXMuaW5ab25lKCgpID0+IHRoaXMudmlld3BvcnRDaGFuZ2UkLm5leHQocmVjdCkpLFxuICAgICAgICBvdXRzaWRlWm9uZTogKGZuKSA9PiB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZm4pLFxuICAgICAgICBpblpvbmU6IChmbikgPT4gdGhpcy5pblpvbmUoZm4pLFxuICAgICAgfSxcbiAgICAgIHsgcmVnaW9uU3RvcmUsIHdhbmRTZXJ2aWNlLCBzYW1Ub29sLCBzYW1Qb2ludFRvb2wsIGNlbGxTZWdtZW50VG9vbCwgY2VsbFNlZ21lbnRlciB9LFxuICAgICk7XG4gICAgdGhpcy5jYW52YXNUb29scyA9IHRoaXMudG9vbHMuY2FudmFzVG9vbHM7XG4gIH1cblxuICAvKiogUnVuIGBmbmAgaW5zaWRlIHRoZSBBbmd1bGFyIHpvbmU6IGZvciBvdXRwdXQgKHN1YmplY3RzIHRoZSBVSSByZW5kZXJzLCBzdG9yZSB3cml0ZXMpXG4gICAqICBwcm9kdWNlZCBieSB3b3JrIHRoYXQgcnVucyBvdXRzaWRlIGl0LiAqL1xuICBwcml2YXRlIGluWm9uZTxUPihmbjogKCkgPT4gVCk6IFQge1xuICAgIHJldHVybiBOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkgPyBmbigpIDogdGhpcy56b25lLnJ1bihmbik7XG4gIH1cblxuICAvKiogV2hhdCBhIHNjZW5lIGlzIGJ1aWx0IGZyb20gKHNlZSB7QGxpbmsgU2NlbmVDb250ZXh0fSkuICovXG4gIHByaXZhdGUgc2NlbmVDb250ZXh0KHZpZXdlcjogVmlld2VyLCBob3N0OiBIVE1MRWxlbWVudCwgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCk6IFNjZW5lQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZXdlcixcbiAgICAgIGhvc3QsXG4gICAgICBjYW52YXMsXG4gICAgICBzaWduYWw6IHRoaXMubGlmZXRpbWUuc2lnbmFsLFxuICAgICAgbG9hZGluZzogKCkgPT4gdGhpcy5sb2FkaW5nLnNpZ25hbCxcbiAgICAgIGluZm86ICgpID0+IHRoaXMubG9hZGVkPy5pbWFnZUluZm8sXG4gICAgICB6OiAoKSA9PiB0aGlzLmxvYWRlZD8ueiA/PyAwLFxuICAgICAgdGlsZXM6IHRoaXMudGlsZUNsaWVudCxcbiAgICAgIGRpc3BsYXk6IHRoaXMuZGlzcGxheSxcbiAgICAgIGJhZGdlOiB0aGlzLmJhZGdlLFxuICAgICAgdG9vbHM6IHRoaXMudG9vbHMsXG4gICAgICBzdG9yZTogdGhpcy5zdG9yZSxcbiAgICAgIHJlZ2lvblN0b3JlOiB0aGlzLnJlZ2lvblN0b3JlLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuc2V0dGluZ3MsXG4gICAgICBzdGFjazoge1xuICAgICAgICBsb2FkaW5nOiAob24pID0+IHRoaXMuc3RhY2tMb2FkaW5nJC5uZXh0KG9uKSxcbiAgICAgICAgcHJvZ3Jlc3M6IChwZXJjZW50KSA9PiB0aGlzLnN0YWNrTG9hZGluZ1Byb2dyZXNzJC5uZXh0KHBlcmNlbnQpLFxuICAgICAgfSxcbiAgICAgIGltYWdlU2l6ZTogKCkgPT4gKHsgd2lkdGg6IHRoaXMuaW1hZ2VXLCBoZWlnaHQ6IHRoaXMuaW1hZ2VIIH0pLFxuICAgICAgc2V0SW1hZ2VTaXplOiAod2lkdGgsIGhlaWdodCkgPT4ge1xuICAgICAgICB0aGlzLmltYWdlVyA9IHdpZHRoO1xuICAgICAgICB0aGlzLmltYWdlSCA9IGhlaWdodDtcbiAgICAgIH0sXG4gICAgICBmaXRDYW1lcmFTb29uOiAoKSA9PiB0aGlzLmZpdENhbWVyYVNvb24oKSxcbiAgICAgIG91dHNpZGVab25lOiAoZm4pID0+IHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmbiksXG4gICAgICBpblpvbmU6IChmbikgPT4gdGhpcy5pblpvbmUoZm4pLFxuICAgICAgcmVnaW9uTWVzaFBpY2tlZDogKGtleSwgYWRkaXRpdmUpID0+IHRoaXMucmVnaW9uTWVzaFBpY2skLm5leHQoeyBrZXksIGFkZGl0aXZlIH0pLFxuICAgICAgc2xpY2VQbGFuZU1vdmVkOiAoYXhpcywgdmFsdWUpID0+IHRoaXMuc2xpY2VQbGFuZU1vdmUkLm5leHQoeyBheGlzLCB2YWx1ZSB9KSxcbiAgICB9O1xuICB9XG5cbiAgLy8g4pSA4pSAIElEYXRhUmVuZGVyZXI6IGxvYWQgLyByZW5kZXIgLyB2aWV3cG9ydCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqXG4gICAqIFJlY29yZCB0aGUgaW1hZ2UgdG8gZHJhdy4gTm8gbmV0d29yayB3b3JrIGhhcHBlbnMgaGVyZSDigJQgdGhlIGRlc2NyaXB0b3IgcG9sbCBhbmQgdGhlIHRpbGUsXG4gICAqIHZvbHVtZSBhbmQgc3BhdGlhbCBmZXRjaGVzIGFsbCBydW4gaW4ge0BsaW5rIHBsb3R9IHVuZGVyIGl0cyBzY2VuZSBzaWduYWwsIHdoaWNoIGEgbmV3ZXIgcGxvdCxcbiAgICoge0BsaW5rIHJlc2V0fSBvciBgY2FuY2VsTG9hZGluZygpYCBhYm9ydHMg4oCUIHNvIGBzaWduYWxgIGlzIG9ubHkgY2hlY2tlZDogYW4gYWxyZWFkeS1hYm9ydGVkXG4gICAqIGxvYWQgcmVqZWN0cyB3aXRoIGFuIGBBYm9ydEVycm9yYCBhbmQgbGVhdmVzIHRoZSByZWNvcmRlZCBpbWFnZSBhbG9uZS5cbiAgICovXG4gIGFzeW5jIGxvYWQoaW1hZ2VJbmZvOiBJSW1hZ2VJbmZvLCB6SW5kZXg6IG51bWJlciwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPE5hcGFyaUxvYWRlZD4ge1xuICAgIHRocm93SWZBYm9ydGVkKHNpZ25hbCk7XG4gICAgLy8gS2VlcHMgU2ltcGxlU2xpY2VBY2Nlc3NTZXJ2aWNlJ3MgYmxvYiBjYWNoZSBpbiBzeW5jIGV2ZW4gd2hlbiB0aGUgdXNlclxuICAgIC8vIHN3aXRjaGVzIGJhY2tlbmRzIChlLmcuIE9TRCBJbWFnZSDihpIgbmFwYXJpIFZvbHVtZSkgb24gdGhlIHNhbWUgZmlsZSDigJRcbiAgICAvLyB3aGljaGV2ZXIgYmFja2VuZCBsb2FkcyBhIGdlbnVpbmVseSBkaWZmZXJlbnQgZmlsZSBmaXJzdCBldmljdHMgaXQuXG4gICAgdGhpcy5zaW1wbGVTdGFjay5ub3RlQWN0aXZlRmlsZShpbWFnZUluZm8uZmlsZU5hbWUpO1xuICAgIHRoaXMubG9hZGVkID0geyBpbWFnZUluZm8sIHo6IHpJbmRleCwgZmlsZW5hbWU6IGltYWdlSW5mby5maWxlTmFtZSB9O1xuICAgIHJldHVybiB0aGlzLmxvYWRlZDtcbiAgfVxuXG4gIGFzeW5jIHBsb3QoXG4gICAgcGxvdERpdjogc3RyaW5nLFxuICAgIGltYWdlTG9hZGVkOiB1bmtub3duLFxuICAgIGltYWdlSW5mbzogSUltYWdlSW5mbyxcbiAgICBzY3JlZW5IZWlnaHQ6IG51bWJlcixcbiAgICBwbG90VHlwZTogUGxvdFR5cGUsXG4gICAgaW5QbGFjZT86IGJvb2xlYW4sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwbG90RGl2KTtcbiAgICBpZiAoIWhvc3QpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtuYXBhcmktanNdIHBsb3QgdGFyZ2V0ICMke3Bsb3REaXZ9IG5vdCBmb3VuZGApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgLy8gQSBuZXcgaW1hZ2U6IGEgc3Ryb2tlIG9yIFNBTSBwcm9tcHQgaW4gcHJvZ3Jlc3MgYmVsb25nZWQgdG8gdGhlIG9sZCBvbmUuXG4gICAgaWYgKCFpblBsYWNlKSB0aGlzLmNhbnZhc1Rvb2xzLnJlc2V0QWxsKCk7XG4gICAgLy8gVGhpcyBwbG90J3Mgc2NlbmUuIEEgbmV3ZXIgcGxvdCByZXNldHMgaW50byB0aGUgbmV4dCBvbmUgd2hpbGUgdGhpcyBvbmUgc3RpbGwgYXdhaXRzLCBhbmRcbiAgICAvLyBhIHN1cGVyc2VkZWQgcGxvdCBtdXN0IG5vdCBnbyBvbiB0byBkcmF3IChvciBjb3VudCBpbWFnZSB0aWxlcykgaW50byB0aGUgbmV3ZXIgc2NlbmUuXG4gICAgY29uc3Qgc2NlbmUgPSB0aGlzLmxpZmV0aW1lLnNpZ25hbDtcbiAgICB0aGlzLmhvc3QgPSBob3N0O1xuICAgIHRoaXMuYmFkZ2UuYXR0YWNoKGhvc3QpO1xuXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY2FudmFzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gc2NyZWVuSGVpZ2h0ID8gYCR7c2NyZWVuSGVpZ2h0fXB4YCA6ICcxMDAlJztcbiAgICBob3N0LmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG5cbiAgICBjb25zdCBpbmZvID0gKGltYWdlTG9hZGVkIGFzIE5hcGFyaUxvYWRlZCk/LmltYWdlSW5mbyA/PyBpbWFnZUluZm87XG5cbiAgICB0cnkge1xuICAgICAgLy8gQnVpbHQgT1VUU0lERSB0aGUgQW5ndWxhciB6b25lLCBzbyBpdHMgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGxvb3AsIGl0cyBjYW52YXMgcG9pbnRlciAvXG4gICAgICAvLyB3aGVlbCBsaXN0ZW5lcnMgYW5kIGl0cyBSZXNpemVPYnNlcnZlciBkbyBub3QgZWFjaCB0cmlnZ2VyIGFwcC13aWRlIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgICAvLyBXaGF0ZXZlciB0aGV5IGNhdXNlIHRoYXQgdGhlIFVJIHNob3dzIHJlLWVudGVycyB0aGUgem9uZSAoc2VlIGluWm9uZSkuXG4gICAgICBjb25zdCB2aWV3ZXIgPSB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IFZpZXdlcih7XG4gICAgICAgICAgICBjYW52YXMsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB7IHI6IDAuMDcsIGc6IDAuMDcsIGI6IDAuMDksIGE6IDEgfSxcbiAgICAgICAgICAgIC8vIFNldCBoZXJlIHJhdGhlciB0aGFuIGxlZnQgdG8gbmFwYXJpLWpzJ3Mgb3duIGRlZmF1bHQgc28gdGhlIGdlbnRsZXJcbiAgICAgICAgICAgIC8vIHN0ZXAgYXBwbGllcyB3aXRoIHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBpbnN0YWxsZWQuIENob3NlbiB0byBtYXRjaCB0aGVcbiAgICAgICAgICAgIC8vIE9TRCBiYWNrZW5kJ3Mgc3RlcCAoc2VlIE9TRF9aT09NX1BFUl9TQ1JPTEwpOiB0aGUgd2hlZWwgc2hvdWxkIGZlZWwgdGhlXG4gICAgICAgICAgICAvLyBzYW1lIG9uIGFuIGltYWdlIHdoaWNoZXZlciByZW5kZXJlciBpcyBkcmF3aW5nIGl0LiBUaGUgc3RlcCBhcHBsaWVzIHBlclxuICAgICAgICAgICAgLy8gc2Nyb2xsIEVWRU5ULCBhbmQgYSB0cmFja3BhZCBzZW5kcyBhIGJ1cnN0IG9mIHRoZW0gcGVyIHN3aXBlLCBzbyBhIHN0ZXBcbiAgICAgICAgICAgIC8vIHR1bmVkIHRvIGEgbW91c2Ugbm90Y2ggcnVucyBhd2F5IHVuZGVyIGEgdHJhY2twYWQuXG4gICAgICAgICAgICB3aGVlbFpvb21TcGVlZDogTkFQQVJJX1dIRUVMX1pPT01fU1BFRUQsXG4gICAgICAgICAgICAvLyBUaGUgRklSU1QgM0QgbGF5ZXIgb2YgYSBzY2VuZSBmcmFtZXMgdGhlIG9yYml0IGNhbWVyYTsgZXZlcnkgbGF0ZXIgb25lIGxlYXZlcyB0aGVcbiAgICAgICAgICAgIC8vIHBvc2UgYWxvbmUuIEEgc3BhdGlhbCBzY2VuZSBpcyBidWlsdCBmcm9tIHNldmVyYWwgbGF5ZXJzIGFuZCByZWJ1aWx0IGNvbnN0YW50bHkg4oCUXG4gICAgICAgICAgICAvLyByZWNvbG91cmluZyBieSBhIGNsYXNzLCBwaWNraW5nIGEgZ2VuZSwgc3RlcHBpbmcgYSBzZWN0aW9uIOKAlCBhbmQgd2l0aCBuYXBhcmktanMnc1xuICAgICAgICAgICAgLy8gcHJldmlvdXMgdW5jb25kaXRpb25hbCBmcmFtaW5nIGVhY2ggb2YgdGhvc2UgdGhyZXcgYXdheSBhbiBvcmJpdCB0aGUgdXNlciBoYWQgc2V0LlxuICAgICAgICAgICAgLy8gVGhlIHBvc2UgaXQgc25hcHBlZCBiYWNrIHRvIGRlcGVuZGVkIG9uIFdISUNIIGxheWVyIHdhcyByZWJ1aWx0LCBzbyBpc29sYXRpbmcgb25lXG4gICAgICAgICAgICAvLyBzZWN0aW9uIHpvb21lZCB0byB0aGF0IHNlY3Rpb24ncyBib3VuZHMuIGByZXNldEZpdDNEKClgIG9uIGEgZGF0YXNldCBjaGFuZ2UgaXMgd2hhdFxuICAgICAgICAgICAgLy8gbGV0cyB0aGUgbmV4dCBzY2VuZSBmcmFtZSBpdHNlbGYuXG4gICAgICAgICAgICBmaXQzZDogJ29uY2UnLFxuICAgICAgICAgICAgLy8gSW4gdGhlIHNwYXRpYWwgbW9kZXMgYSBwbGFpbiBjbGljayBTRUxFQ1RTIHRoZSBjbGFzcyB1bmRlciB0aGUgY3Vyc29yLFxuICAgICAgICAgICAgLy8gc28gbmFwYXJpJ3MgT1NELXN0eWxlIGNsaWNrLXRvLXpvb20gaXMgdHVybmVkIG9mZiB0aGVyZTogb3RoZXJ3aXNlIG9uZVxuICAgICAgICAgICAgLy8gY2xpY2sgd291bGQgYm90aCBzZWxlY3QgYSBjbGFzcyBhbmQgem9vbSAyeCBhYm91dCB0aGUgY3Vyc29yLCBhbmQgdGhlXG4gICAgICAgICAgICAvLyB6b29tIHdvdWxkIHRoZW4gaGFsdmUgdGhlIHBpeGVsIHJhZGl1cyB0aGUgbmV4dCBjbGljayBoaXQtdGVzdHMgd2l0aC5cbiAgICAgICAgICAgIC8vIFpvb21pbmcgaXMgc3RpbGwgb24gdGhlIHdoZWVsLCB0aGUgem9vbSBidXR0b25zIGFuZCB0aGUgem9vbS1ib3ggdG9vbC5cbiAgICAgICAgICAgIC4uLihpc1NwYXRpYWxPbWljcyhwbG90VHlwZSkgfHwgaXNTcGF0aWFsT21pY3MzZChwbG90VHlwZSkgPyB7IGNsaWNrWm9vbUZhY3RvcjogMCB9IDoge30pLFxuICAgICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIHRoaXMudmlld2VyID0gdmlld2VyO1xuICAgICAgYXdhaXQgdmlld2VyLnJlYWR5O1xuICAgICAgaWYgKHNjZW5lLmFib3J0ZWQpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gTm8gbG9hZGVkIGltYWdlOiBhbiBpbWFnZS1sZXNzIHNwYXRpYWwgZGF0YXNldCBvcGVuZWQgYmVmb3JlIGFueSBpbWFnZSAodGhlIHZpc3VhbGl6ZXInc1xuICAgICAgLy8gcGxvdFNwYXRpYWxXaXRob3V0SW1hZ2UpIOKAlCB0aGUgb2JzZXJ2YXRpb25zIGFsb25lLlxuICAgICAgdGhpcy5zY2VuZSA9IHRoaXMuY3JlYXRlU2NlbmUocGxvdFR5cGUsIHRoaXMuc2NlbmVDb250ZXh0KHZpZXdlciwgaG9zdCwgY2FudmFzKSwgaW5mbywgaW1hZ2VMb2FkZWQgPT0gbnVsbCk7XG4gICAgICAvLyBBbm90aGVyIGltYWdlJ3Mgc3VyZmFjZXMgd291bGQgbGFuZCBpbiB0aGlzIHZvbHVtZSdzIGZyYW1lIGF0IHRoZSB3cm9uZyBzaXplOiBkcm9wIHRoZW0uXG4gICAgICBpZiAoaW5mbz8uZmlsZU5hbWUgIT09IHRoaXMucmVnaW9uTWVzaGVzSW1hZ2UpIHRoaXMucmVnaW9uTWVzaGVzID0gW107XG4gICAgICB0aGlzLnNjZW5lLnNldFJlZ2lvbk1lc2hlcz8uKHRoaXMucmVnaW9uTWVzaGVzKTtcbiAgICAgIHRoaXMuc2NlbmUuc2V0UmVnaW9uSGlnaGxpZ2h0Py4odGhpcy5yZWdpb25IaWdobGlnaHQpO1xuICAgICAgdGhpcy5zY2VuZS5zZXRSZWdpb25IaWRkZW4/Lih0aGlzLnJlZ2lvbkhpZGRlbik7XG4gICAgICB0aGlzLnNjZW5lLnNldFJlZ2lvbnNUaHJvdWdoVm9sdW1lPy4odGhpcy5yZWdpb25zVGhyb3VnaFZvbHVtZSk7XG4gICAgICB0aGlzLnNjZW5lLnNldFNsaWNlUGxhbmVzPy4odGhpcy5zbGljZVBsYW5lcyk7XG4gICAgICBhd2FpdCB0aGlzLnNjZW5lLm1vdW50KCk7XG4gICAgICB0aGlzLnRvb2xzLnNjaGVkdWxlUmVhZGJhY2soKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW25hcGFyaS1qc10gcGxvdCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIHNjZW5lIGEgcGxvdCB0eXBlIG1vdW50cy4gKi9cbiAgcHJpdmF0ZSBjcmVhdGVTY2VuZShcbiAgICBwbG90VHlwZTogUGxvdFR5cGUsXG4gICAgY3R4OiBTY2VuZUNvbnRleHQsXG4gICAgaW5mbzogSUltYWdlSW5mbyB8IHVuZGVmaW5lZCxcbiAgICBub0ltYWdlOiBib29sZWFuLFxuICApOiBOYXBhcmlTY2VuZSB7XG4gICAgaWYgKGlzU3BhdGlhbE9taWNzM2QocGxvdFR5cGUpKSByZXR1cm4gbmV3IFNwYXRpYWwzZFNjZW5lKGN0eCwgdGhpcy5zcGF0aWFsLCBpbmZvKTtcbiAgICBpZiAoaXNTcGF0aWFsT21pY3MocGxvdFR5cGUpKSByZXR1cm4gbmV3IFNwYXRpYWwyZFNjZW5lKGN0eCwgdGhpcy5zcGF0aWFsLCBub0ltYWdlKTtcbiAgICBpZiAoaXNOYXBhcmlTY2F0dGVyKHBsb3RUeXBlKSkgcmV0dXJuIG5ldyBTY2F0dGVyUmVnaW9uc1NjZW5lKGN0eCk7XG4gICAgaWYgKGlzTmFwYXJpU2NhdHRlcjNkKHBsb3RUeXBlKSkgcmV0dXJuIG5ldyBTY2F0dGVyM2RTY2VuZShjdHgsIGluZm8pO1xuICAgIGlmIChpc05hcGFyaVN1cmZhY2UocGxvdFR5cGUpKSByZXR1cm4gbmV3IFN1cmZhY2VTY2VuZShjdHgpO1xuICAgIGlmIChpc05hcGFyaTNkKHBsb3RUeXBlKSkgcmV0dXJuIG5ldyBWb2x1bWVTY2VuZShjdHgsIGluZm8sIGlzTmFwYXJpSXNvc3VyZmFjZShwbG90VHlwZSkgPyAnaXNvJyA6ICdtaXAnKTtcbiAgICByZXR1cm4gbmV3IEltYWdlMmRTY2VuZShjdHgpO1xuICB9XG5cbiAgLyoqIFNob3cvaGlkZSB0aGUgb3ZlcnZpZXcgbmF2aWdhdG9yIChzYW1lIHNldHRpbmcgYXMgT1NEJ3MpLiAqL1xuICBzZXROYXZpZ2F0b3JWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNldHRpbmdzLm5hdmlnYXRvclZpc2libGUgPSB2aXNpYmxlO1xuICAgIHRoaXMuc2NlbmU/LnNldE5hdmlnYXRvclZpc2libGU/Lih2aXNpYmxlKTtcbiAgfVxuXG4gIC8qKiBPYnNlcnZhdGlvbnMgcHJvamVjdGVkIHRvIGNhbnZhcyBwaXhlbHMgdW5kZXIgdGhlIDNEIGNhbWVyYSAodGhlIHNwYXRpYWwgM0QgY2xvdWQpLCBpbmRleGVkXG4gICAqICBieSBvYnNlcnZhdGlvbiB3aXRoIE5hTiBmb3IgYW55IG5vdCBkcmF3bjsgbnVsbCB3aGVuIG5vIGNsb3VkIGlzIG1vdW50ZWQuICovXG4gIGdldFNwYXRpYWxTY3JlZW5Qcm9qZWN0aW9uKG9iczogU3BhdGlhbE9ic2VydmF0aW9ucyk6IEZsb2F0MzJBcnJheSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNjZW5lPy5zY3JlZW5Qcm9qZWN0aW9uPy4ob2JzKSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXRDYW1lcmFTb29uKCk6IHZvaWQge1xuICAgIGNvbnN0IHJ1biA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLnZpZXdlciAmJiB0aGlzLmNhbnZhcyAmJiB0aGlzLmltYWdlVyA+IDAgJiYgdGhpcy5pbWFnZUggPiAwKSB7XG4gICAgICAgIHRoaXMudmlld2VyLmNhbWVyYS5maXQoXG4gICAgICAgICAgdGhpcy5pbWFnZVcsXG4gICAgICAgICAgdGhpcy5pbWFnZUgsXG4gICAgICAgICAgdGhpcy5jYW52YXMuY2xpZW50V2lkdGggfHwgdGhpcy5pbWFnZVcsXG4gICAgICAgICAgdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0IHx8IHRoaXMuaW1hZ2VILFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicpIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocnVuKSk7XG4gICAgZWxzZSBydW4oKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbG90bHktc3BlY2lmaWM7IGhvc3QgcmUtZHJpdmVzIHBsb3QoKSBmcm9tIGl0cyBpbWFnZSBzdHJlYW0uICovXG4gIHJlbG9hZEFuZFBsb3QoKTogdm9pZCB7XG4gICAgLyogbm8tb3AgKi9cbiAgfVxuXG4gIC8qKiBTaG93IGBtZXNzYWdlYCBvbiB0aGUgY2FudmFzJ3MgbG9hZGluZyBiYWRnZSB1bnRpbCB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gaXMgY2FsbGVkLiAqL1xuICBiZWdpblRhc2sobWVzc2FnZTogc3RyaW5nKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuYmFkZ2UuYmVnaW5UYXNrKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqIFNob3cgdGhlc2UgcmVnaW9uIHJlY29uc3RydWN0aW9ucyBvZiBgaW1hZ2VgIGluIHRoZSB2b2x1bWUgdmlldyAoa2VwdCBmb3IgaXRzIG5leHQgdm9sdW1lIHBsb3QpLiAqL1xuICBzZXRSZWdpb25NZXNoZXMobWVzaGVzOiByZWFkb25seSBSZWdpb25NZXNoM0RbXSwgaW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMucmVnaW9uTWVzaGVzID0gbWVzaGVzO1xuICAgIHRoaXMucmVnaW9uTWVzaGVzSW1hZ2UgPSBpbWFnZTtcbiAgICB0aGlzLnNjZW5lPy5zZXRSZWdpb25NZXNoZXM/LihtZXNoZXMpO1xuICB9XG5cbiAgLyoqIEhpZ2hsaWdodCB0aGUgcmVjb25zdHJ1Y3Rpb25zIG9mIHRoZXNlIGtleXMgKG5vbmU6IGFsbCBhcyB1c3VhbCkuICovXG4gIHNldFJlZ2lvbkhpZ2hsaWdodChrZXlzOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMucmVnaW9uSGlnaGxpZ2h0ID0ga2V5cztcbiAgICB0aGlzLnNjZW5lPy5zZXRSZWdpb25IaWdobGlnaHQ/LihrZXlzKTtcbiAgfVxuXG4gIC8qKiBIaWRlIHRoZSByZWNvbnN0cnVjdGlvbnMgb2YgdGhlc2Uga2V5cyAoa2VwdCBmb3IgdGhlIG5leHQgdm9sdW1lIHBsb3QpLiAqL1xuICBzZXRSZWdpb25IaWRkZW4oa2V5czogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lvbkhpZGRlbiA9IGtleXM7XG4gICAgdGhpcy5zY2VuZT8uc2V0UmVnaW9uSGlkZGVuPy4oa2V5cyk7XG4gIH1cblxuICAvKiogRHJhdyB0aGUgcmVjb25zdHJ1Y3Rpb25zIHRocm91Z2ggdGhlIHZvbHVtZSByYXRoZXIgdGhhbiBoaWRkZW4gYmVoaW5kIGl0IChrZXB0IGFjcm9zcyBwbG90cykuICovXG4gIHNldFJlZ2lvbnNUaHJvdWdoVm9sdW1lKHRocm91Z2g6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lvbnNUaHJvdWdoVm9sdW1lID0gdGhyb3VnaDtcbiAgICB0aGlzLnNjZW5lPy5zZXRSZWdpb25zVGhyb3VnaFZvbHVtZT8uKHRocm91Z2gpO1xuICB9XG4gIHByaXZhdGUgcmVnaW9uc1Rocm91Z2hWb2x1bWUgPSBmYWxzZTtcblxuICAvKiogU2hvdyB0aGUgcGxhbmVzIG9mIHRoZSBzZWN0aW9ucyBiZXNpZGUgYSB2b2x1bWUgdmlldyAobnVsbDogaGlkZSBvbmUpOyBrZXB0IGFjcm9zcyBwbG90cy4gKi9cbiAgc2V0U2xpY2VQbGFuZXMocGxhbmVzOiBTbGljZVBsYW5lcyk6IHZvaWQge1xuICAgIHRoaXMuc2xpY2VQbGFuZXMgPSBwbGFuZXM7XG4gICAgdGhpcy5zY2VuZT8uc2V0U2xpY2VQbGFuZXM/LihwbGFuZXMpO1xuICB9XG5cbiAgLyoqIEEgc2VjdGlvbidzIHBsYW5lIGRyYWdnZWQgaW4gdGhlIHZvbHVtZSB2aWV3LCB0byBgdmFsdWVgIGFsb25nIGl0cyBheGlzIChpbWFnZSBweCwgb3IgYSBzbGljZSkuICovXG4gIGdldFNsaWNlUGxhbmVNb3ZlJCgpOiBPYnNlcnZhYmxlPHsgYXhpczogUGxhbmVBeGlzOyB2YWx1ZTogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gdGhpcy5zbGljZVBsYW5lTW92ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKiogVGhlIHZvbHVtZSBvbiBzY3JlZW4sIGFzIGFzc2VtYmxlZCAoc2VlIFZvbHVtZVNjZW5lLnZvbHVtZVZveGVscyk7IG51bGwgb3V0c2lkZSBhIHZvbHVtZSB2aWV3LiAqL1xuICB2b2x1bWVWb3hlbHMoKTogVm9sdW1lVm94ZWxzT25TY3JlZW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zY2VuZT8udm9sdW1lVm94ZWxzPy4oKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqIEEgcmVjb25zdHJ1Y3Rpb24gY2xpY2tlZCB3aXRoIHRoZSBzZWxlY3Rpb24gdG9vbCAoaXRzIGtleSksIG9yIHRoZSB2b2x1bWUgYmVzaWRlIHRoZW0gKG51bGwpLiAqL1xuICBnZXRSZWdpb25NZXNoUGljayQoKTogT2JzZXJ2YWJsZTx7IGtleTogc3RyaW5nIHwgbnVsbDsgYWRkaXRpdmU6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybiB0aGlzLnJlZ2lvbk1lc2hQaWNrJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKiBJbWFnZSBweCBwZXIgdm94ZWwgb2YgdGhlIHZvbHVtZSBvbiBzY3JlZW4sIGluLXBsYW5lOyBudWxsIG91dHNpZGUgYSB2b2x1bWUgdmlldy4gKi9cbiAgcmVnaW9uVm94ZWxTdGVwKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNjZW5lPy52b3hlbFN0ZXA/LigpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRW5kIHRoZSBtb3VudGVkIHNjZW5lOiBhYm9ydCBpdHMgbGlmZXRpbWUgKGl0cyBkZXNjcmlwdG9yIHBvbGwsIHRpbGUgY291bnRzLCBmcmFtZSBsb2FkaW5nIGFuZFxuICAgKiBhd2FpdHMpIGFuZCBkaXNwb3NlIGl0IOKAlCBpdHMgbGF5ZXJzLCBrZXlzLCBzdWJzY3JpcHRpb25zIGFuZCBsaXN0ZW5lcnMgZ28gd2l0aCBpdCwgc28gdGhlIG5leHRcbiAgICogcGxvdCBjYW4gbmV2ZXIgaW5oZXJpdCBhbiBcImFscmVhZHkgYnVpbHRcIiBrZXkgKE5BUEFSSS1TVkMtMSkg4oCUIHRoZW4gdGVhciB0aGUgdmlld2VyIGRvd24uXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcuYWJvcnQoKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5saWZldGltZS5hYm9ydCgpO1xuICAgIHRoaXMubGlmZXRpbWUgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5zY2VuZT8uZGlzcG9zZSgpO1xuICAgIHRoaXMuc2NlbmUgPSBudWxsO1xuICAgIHRoaXMuYmFkZ2UucmVzZXQoKTtcbiAgICB0aGlzLnRvb2xzLnRlYXJkb3duKCk7XG4gICAgdGhpcy50aWxlQ2xpZW50LnN0YXJ0U2NlbmUodGhpcy5saWZldGltZS5zaWduYWwpO1xuICAgIHRoaXMudmlld2VyPy5kaXNwb3NlKCk7XG4gICAgdGhpcy52aWV3ZXIgPSBudWxsO1xuICAgIGlmICh0aGlzLmNhbnZhcyAmJiB0aGlzLmhvc3Q/LmNvbnRhaW5zKHRoaXMuY2FudmFzKSkgdGhpcy5ob3N0LnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKTtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBsb3QgYXJlYSBjaGFuZ2VkIHNpemUgKHRoZSBzbGljZSBlZGl0b3Igc3BsaXQgaXQsIGEgZGl2aWRlciBtb3ZlZCk6IGZpdCB0aGUgY2FudmFzLCB3aG9zZVxuICAgKiBoZWlnaHQgd2FzIGZpeGVkIGF0IHBsb3QgdGltZSwgdG8gaXQgYWdhaW4uXG4gICAqL1xuICByZWxheW91dChfdHJ1ZUltYWdlU2l6ZT86IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgeyBjYW52YXMsIGhvc3QgfSA9IHRoaXM7XG4gICAgaWYgKGNhbnZhcyAmJiBob3N0KSB7XG4gICAgICAvLyBMZXQgdGhlIGhvc3QgdGFrZSBpdHMgaGVpZ2h0IGZyb20gdGhlIGxheW91dCwgbm90IGZyb20gdGhlIGNhbnZhcyBpbnNpZGUgaXQuXG4gICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gJzBweCc7XG4gICAgICBjb25zdCBoZWlnaHQgPSBob3N0LmNsaWVudEhlaWdodDtcbiAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgPiAwID8gYCR7aGVpZ2h0fXB4YCA6ICcxMDAlJztcbiAgICB9XG4gICAgdGhpcy52aWV3ZXI/LnJlcXVlc3RSZW5kZXIoKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbG90bHktc3BlY2lmaWMgYXhpcyByZXNldC4gKi9cbiAgcmVzZXRBeGVzKCk6IHZvaWQge1xuICAgIHRoaXMuZml0Q2FtZXJhU29vbigpO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIFBsb3RseS1zcGVjaWZpYyBhdXRvc2NhbGUuICovXG4gIGF1dG9zY2FsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpdENhbWVyYVNvb24oKTtcbiAgICB0aGlzLmF1dG9zY2FsZUV2ZW50JC5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICB6b29tSW4oKTogdm9pZCB7XG4gICAgdGhpcy56b29tQnkoWk9PTV9CVVRUT05fU1RFUCk7XG4gIH1cblxuICB6b29tT3V0KCk6IHZvaWQge1xuICAgIHRoaXMuem9vbUJ5KDEgLyBaT09NX0JVVFRPTl9TVEVQKTtcbiAgfVxuXG4gIC8qKiBab29tIGJ5IGBmYWN0b3JgICg+IDEgPSBpbikgb24gd2hpY2hldmVyIGNhbWVyYSBpcyBsaXZlOiB0aGUgMkQgY2FtZXJhJ3Mgem9vbSwgb3Ig4oCUIGluIGEgM0RcbiAgICogIHNjZW5lLCB3aGVyZSB0aGF0IHdvdWxkIGNoYW5nZSBub3RoaW5nIHZpc2libGUg4oCUIHRoZSBvcmJpdCBjYW1lcmEncyBkaXN0YW5jZS4gKi9cbiAgcHJpdmF0ZSB6b29tQnkoZmFjdG9yOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gdGhpcy52aWV3ZXI7XG4gICAgaWYgKCF2KSByZXR1cm47XG4gICAgaWYgKHYuZGltcy5uZGlzcGxheSA9PT0gMylcbiAgICAgIHYuY2FtZXJhM2Quem9vbUJ5KDEgLyBmYWN0b3IpOyAvLyB6b29tQnkgc2NhbGVzIHRoZSBkaXN0YW5jZVxuICAgIGVsc2Ugdi5jYW1lcmEuem9vbSA9IHYuY2FtZXJhLnpvb20gKiBmYWN0b3I7XG4gIH1cblxuICBzZXREcmFnTW9kZShfbW9kZTogc3RyaW5nIHwgZmFsc2UpOiB2b2lkIHtcbiAgICAvLyBOby1vcDogcGFuIGFuZCB6b29tIGFyZSBhbHdheXMgdGhlIG5hcGFyaSBjYW1lcmEncyBkZWZhdWx0IGdlc3R1cmVzLCBhbmQgcGFuL3pvb20gZ2F0aW5nIGZvclxuICAgIC8vIGRyYXdpbmcgaXMgb3duZWQgYnkgdGhlIHJlZ2lvbiBvdmVybGF5J3Mgc2V0TW9kZSAoc2V0Q29udHJvbHNFbmFibGVkKS4gVG9nZ2xpbmcgY29udHJvbHMgaGVyZVxuICAgIC8vIHdvdWxkIGZpZ2h0IHRoYXQg4oCUIHRoZSBob3N0IGNhbGxzIHNldERyYWdNb2RlKGZhbHNlKSBhbG9uZ3NpZGUgb3ZlcmxheS5zZXRNb2RlKDx0b29sPikuXG4gIH1cblxuICBzZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ3MuaW1hZ2VTbW9vdGhpbmcgPSBlbmFibGVkO1xuICAgIC8vIEFwcGx5IGxpdmUgdG8gdGhlIHJlbmRlcmVkIGltYWdlIGxheWVyczsgYmFrZWQgaW50byB0aGUgbmV4dCByZW5kZXIgdG9vLlxuICAgIHRoaXMuc2NlbmU/LnNldEltYWdlU21vb3RoaW5nPy4oZW5hYmxlZCk7XG4gIH1cblxuICBzZXRTaG93U3RhY2soX3Nob3dzdGFjazogYm9vbGVhbik6IHZvaWQge1xuICAgIC8qIHN0YWNrIG5hdmlnYXRlZCB2aWEgc2V0WkluZGV4ICovXG4gIH1cblxuICBzZXRaSW5kZXgoekluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkZWQpIHRoaXMubG9hZGVkLnogPSB6SW5kZXg7XG4gICAgaWYgKCF0aGlzLnZpZXdlcikgcmV0dXJuO1xuICAgIC8vIERpc3BhdGNoIG9uIFdIQVQgSVMgTU9VTlRFRCwgbm90IG9uIHdoaWNoIGxheWVyIGhhbmRsZSBoYXBwZW5zIHRvIGJlIG5vbi1udWxsOiBhIHN1cmZhY2VcbiAgICAvLyBzdGlsbCBwcmVsb2FkaW5nIChvciB3aG9zZSBmaXJzdCBidWlsZCBmYWlsZWQpIGhhcyBubyBsYXllciB5ZXQsIGFuZCBhIDNEIHNjYXR0ZXIgb3IgY2xvdWRcbiAgICAvLyBoYXMgbm9uZSBvZiB0aGVtIOKAlCBhbmQgYm90aCB1c2VkIHRvIGZhbGwgdGhyb3VnaCB0byB0aGUgMkQgcmVuZGVyIChOQVBBUkktU1ZDLTkpLlxuICAgIHRoaXMuc2NlbmU/LnNldFooekluZGV4KTtcbiAgfVxuXG4gIHNldFN0YWNrTG9hZGluZyhzdGFja0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnN0YWNrTG9hZGluZyQubmV4dChzdGFja0xvYWRpbmcpO1xuICB9XG5cbiAgLyoqIENhbmNlbCBpbi1mbGlnaHQgZnJhbWUgbG9hZGluZzogYWJvcnQge0BsaW5rIGxvYWRpbmd9IHNvIHRoZSB2b2x1bWUtYXNzZW1ibHkgLyBzdXJmYWNlXG4gICAqICBwcmVsb2FkIHdvcmtlcnMgc3RvcCBmZXRjaGluZyBtb3JlIGZyYW1lcywgYW5kIGNsZWFyIHRoZSBsb2FkaW5nIGZsYWcgKyBwcm9ncmVzcy4gKi9cbiAgY2FuY2VsTG9hZGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcuYWJvcnQoKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5zdGFja0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuc3RhY2tMb2FkaW5nUHJvZ3Jlc3MkLm5leHQoMCk7XG4gIH1cblxuICBpc1N0YWNrTG9hZGluZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFja0xvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0U3RhY2tMb2FkaW5nUHJvZ3Jlc3MoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFja0xvYWRpbmdQcm9ncmVzcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRUcnVlSW1hZ2VTaXplKCk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmltYWdlVyA+IDAgJiYgdGhpcy5pbWFnZUggPiAwID8geyB3aWR0aDogdGhpcy5pbWFnZVcsIGhlaWdodDogdGhpcy5pbWFnZUggfSA6IG51bGw7XG4gIH1cblxuICBnZXRDdXJyZW50SW1hZ2UoKTogUHJvbWlzZTxJbWFnZSB8IG51bGw+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgZ2V0RGlzcGxheWVkUGl4ZWxEYXRhKCk6IFBpeGVsRGF0YSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRvb2xzLmxhc3RQaXhlbHM7XG4gIH1cblxuICBnZXREaXNwbGF5ZWRTb3VyY2VSZWN0KCk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBjb25zdCB2ID0gdGhpcy52aWV3ZXI7XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0VHJ1ZUltYWdlU2l6ZSgpO1xuICAgIGlmICghdiB8fCAhc2l6ZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgciA9IHYudmlzaWJsZVdvcmxkUmVjdCgpO1xuICAgIGNvbnN0IHggPSBNYXRoLm1heCgwLCByLngpO1xuICAgIGNvbnN0IHkgPSBNYXRoLm1heCgwLCByLnkpO1xuICAgIHJldHVybiB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHdpZHRoOiBNYXRoLm1pbihzaXplLndpZHRoLCByLnggKyByLndpZHRoKSAtIHgsXG4gICAgICBoZWlnaHQ6IE1hdGgubWluKHNpemUuaGVpZ2h0LCByLnkgKyByLmhlaWdodCkgLSB5LFxuICAgIH07XG4gIH1cblxuICBkb3dubG9hZEltYWdlKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5leHBvcnRDb21wb3NpdGUoKTtcbiAgfVxuXG4gIC8qKiBOby1vcDogdGhlIG1vdW50ZWQgc2NlbmUgaXMgZml4ZWQgcGVyIHtAbGluayBwbG90fTsgYSBuZXcgcGxvdCB0eXBlIHRha2VzIGEgcmUtcGxvdC4gKi9cbiAgc2V0UGxvdFR5cGUoX3Bsb3RUeXBlOiBQbG90VHlwZSk6IHZvaWQge1xuICAgIC8qIHRoZSBzY2VuZSBpcyBjaG9zZW4gYnkgcGxvdCgpICovXG4gIH1cblxuICAvKiogTWFwIGEgUGxvdGx5LXN0eWxlIDNEIGRyYWcgbW9kZSBvbnRvIG5hcGFyaS1qcydzIGNhbWVyYSBkcmFnIG1vZGUuICovXG4gIHNldFN1cmZhY2VEcmFnTW9kZShtb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmlld2VyKSByZXR1cm47XG4gICAgdGhpcy52aWV3ZXIuc2V0Q2FtZXJhRHJhZ01vZGUoY2FtZXJhRHJhZ01vZGUobW9kZSkpO1xuICB9XG5cbiAgLyoqIFJlLWZyYW1lIHRoZSAzRCBjYW1lcmEgb24gdGhlIHNjZW5lOiBuYXBhcmktanMgZnJhbWVzIHRoZSB1bmlvbiBvZiBldmVyeSAzRCBsYXllcidzIGJvdW5kc1xuICAgKiAgKHN1cmZhY2UsIHZvbHVtZSwgcG9pbnQgY2xvdWQpLCB3aXRoIHRoZSB2aWV3cG9ydC1hd2FyZSBmcmFtaW5nIGl0cyBhZGRlcnMgdXNlLiAqL1xuICByZXNldFN1cmZhY2VDYW1lcmEoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3ZXI/LmZpdFRvTGF5ZXJzKCk7XG4gICAgdGhpcy52aWV3ZXI/LnJlcXVlc3RSZW5kZXIoKTtcbiAgfVxuXG4gIGdldEF1dG9zY2FsZUV2ZW50KCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmF1dG9zY2FsZUV2ZW50JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGxvdCB0eXBlcyB0aGlzIGJhY2tlbmQgY2FuIG1vdW50IOKAlCBldmVyeSB0eXBlIHtAbGluayBwbG90fSBkaXNwYXRjaGVzIG9uLlxuICAgKlxuICAgKiBDb250cmFjdC1vbmx5IGluIHByb2R1Y3Rpb246IHRoZSByb3V0ZXIgYW5zd2VycyBgZ2V0UGxvdFR5cGVEZXNjcmlwdG9yc2AgZnJvbSB0aGUgUGxvdGx5XG4gICAqIHNlcnZpY2UsIHNvIG5vdGhpbmcgcmVhY2hlcyB0aGlzIG9uZSB0aHJvdWdoIGl0OyBpdCBpcyBrZXB0IGFjY3VyYXRlIGZvciBkaXJlY3QgY2FsbGVycy5cbiAgICovXG4gIGdldFBsb3RUeXBlRGVzY3JpcHRvcnMoKTogUGxvdFR5cGVEZXNjcmlwdG9yW10ge1xuICAgIC8vIFRoZSBXZWJHUFUgbmFwYXJpLWpzIG9wdGlvbnMsIG9mZmVyZWQgYWxvbmdzaWRlIChub3QgcmVwbGFjaW5nKSB0aGUgT1NEL1Bsb3RseSB0eXBlcy5cbiAgICByZXR1cm4gW1xuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLk5BUEFSSV9JTUFHRV0hLFxuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLk5BUEFSSV9TQ0FUVEVSXSEsXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuTkFQQVJJX1NVUkZBQ0VdISxcbiAgICAgIFBMT1RfVFlQRV9ERVNDUklQVE9SU1tQbG90VHlwZS5OQVBBUklfU0NBVFRFUjNEXSEsXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuTkFQQVJJX1ZPTFVNRV0hLFxuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLk5BUEFSSV9JU09TVVJGQUNFXSEsXG4gICAgICAvLyBHYXRlZCBieSBgcmVxdWlyZXNTcGF0aWFsRGF0YWAsIHNvIHRoZSBzZWxlY3RvciBoaWRlcyB0aGVtIHVudGlsIGEgZGF0YXNldCBpcyBwdWJsaXNoZWRcbiAgICAgIC8vICh0aGUgM0Qgb25lIGFsc28gYnkgYHJlcXVpcmVzU3BhdGlhbDNkYCkuXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuU1BBVElBTF9PTUlDU10hLFxuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLlNQQVRJQUxfT01JQ1NfM0RdISxcbiAgICBdO1xuICB9XG5cbiAgLyoqIFRoZSBuYXBhcmkgM0QgZGVjaW1hdGUgZmFjdG9yICgxID0gZnVsbCDigKYgOCA9IOKFmykuIFJlYWQgYnkgdGhlIHRvb2xiYXIgdG8gaW5pdCB0aGUgY29udHJvbC4gKi9cbiAgZ2V0UmVzb2x1dGlvblNjYWxlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucmVzb2x1dGlvblNjYWxlO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgZGVjaW1hdGUgZmFjdG9yIGZvciB0aGUgbmFwYXJpIDNEIHR5cGVzLiBUYWtlcyBlZmZlY3Qgb24gdGhlIG5leHQgKHJlKWxvYWQg4oCUIHRoZSBob3N0XG4gICAqICByZS1wbG90cyBhZnRlciBjYWxsaW5nIHRoaXMsIHNpbmNlIGRlY2ltYXRpb24gY2hhbmdlcyB0aGUgZmV0Y2hlZC9hc3NlbWJsZWQgZGF0YS4gKi9cbiAgc2V0UmVzb2x1dGlvblNjYWxlKHNjYWxlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNldHRpbmdzLnJlc29sdXRpb25TY2FsZSA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoc2NhbGUpKTtcbiAgfVxuXG4gIC8qKiBuYXBhcmktanMgaGFzIHRoZSBuYXZpZ2F0b3IgYW5kIGltYWdlIHNtb290aGluZyB0b28gKGl0cyAyRCB2aWV3cykuICovXG4gIGdldE9zZFZpZXdPcHRpb25zKCk6IElPc2RWaWV3T3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnM7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3T3B0aW9uczogSU9zZFZpZXdPcHRpb25zID0ge1xuICAgIHNldE5hdmlnYXRvclZpc2libGU6ICh2aXNpYmxlKSA9PiB0aGlzLnNldE5hdmlnYXRvclZpc2libGUodmlzaWJsZSksXG4gICAgc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkOiAoZW5hYmxlZCkgPT4gdGhpcy5zZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZW5hYmxlZCksXG4gIH07XG5cbiAgLyoqIFRoZSAzRCBkZWNpbWF0ZSBmYWN0b3IgKHRoZSAzRCB0eXBlcycgUmVzb2x1dGlvbiBjb250cm9sKS4gKi9cbiAgZ2V0Vm9sdW1lUmVzb2x1dGlvbigpOiBJVm9sdW1lUmVzb2x1dGlvbiB7XG4gICAgcmV0dXJuIHRoaXMudm9sdW1lUmVzb2x1dGlvbjtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IHZvbHVtZVJlc29sdXRpb246IElWb2x1bWVSZXNvbHV0aW9uID0ge1xuICAgIGdldDogKCkgPT4gdGhpcy5nZXRSZXNvbHV0aW9uU2NhbGUoKSxcbiAgICBzZXQ6IChzY2FsZSkgPT4gdGhpcy5zZXRSZXNvbHV0aW9uU2NhbGUoc2NhbGUpLFxuICB9O1xuXG4gIC8qKiBXaGVyZSB0aGUgY2FtZXJhIHNldHRsZWQsIGZvciB0aGUgaW50ZW5zaXR5IGluc2V0J3MgcmUtc2FtcGxpbmcuICovXG4gIGdldEludGVuc2l0eVNhbXBsaW5nKCk6IElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMudmlld3BvcnRTb3VyY2U7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3cG9ydFNvdXJjZTogSUludGVuc2l0eVZpZXdwb3J0U291cmNlID0ge1xuICAgIGdldFZpZXdwb3J0Q2hhbmdlJDogKCkgPT4gdGhpcy52aWV3cG9ydENoYW5nZSQuYXNPYnNlcnZhYmxlKCksXG4gIH07XG5cbiAgLy8g4pSA4pSAIElSZWdpb25TdG9yZSArIGNsYXNzaWZpY2F0aW9uIGNvbG91cnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIEluaGVyaXRlZCBmcm9tIEJhc2VTdG9yZVZpc3VhbGl6ZXIg4oCUIHB1cmUgZGVsZWdhdGlvbnMgdG8gdGhlIHNoYXJlZFxuICAvLyBSZWdpb25TdG9yZSAvIFZpc3VhbGl6ZXJTdG9yZSAoaWRlbnRpY2FsIHRvIHRoZSBPU0QgYmFja2VuZCkuXG5cbiAgLy8g4pSA4pSAIElUb29sQ29udHJvbGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gc2V0QWN0aXZlVG9vbCBhbmQgdGhlIHBlci10b29sIHNldHRlcnMgcnVuIGluIEJhc2VTdG9yZVZpc3VhbGl6ZXIgb3ZlciB0aGlzLmNhbnZhc1Rvb2xzOyB0aGVcbiAgLy8gcG9pbnRlciBhbmQgcmVhZGJhY2sgZ2F0aW5nLCBhbmQgdGhlIFNBTSAvIGNlbGxwb3NlIHJ1bnMsIGFyZSB0aGUgdG9vbCBicmlkZ2Uncy5cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYmVmb3JlVG9vbENoYW5nZShuZXh0OiBDYW52YXNUb29sSWQgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHMuYmVmb3JlVG9vbENoYW5nZShuZXh0KTtcbiAgfVxuICBzZWdtZW50UmVjdGFuZ2xlcygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnRvb2xzLnNlZ21lbnRSZWN0YW5nbGVzKCk7XG4gIH1cbiAgc2VnbWVudFJlY3RhbmdsZXNDZWxscG9zZSgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnRvb2xzLnNlZ21lbnRSZWN0YW5nbGVzQ2VsbHBvc2UoKTtcbiAgfVxuICBzZXRTYW1Nb2RlbChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zYW1Ub29sLnNldE1vZGVsKGlkKTtcbiAgICB0aGlzLnNhbVBvaW50VG9vbC5zZXRNb2RlbChpZCk7XG4gIH1cblxuICAvLyDilIDilIAgSURpc3BsYXlPcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBJbmhlcml0ZWQgZnJvbSBCYXNlU3RvcmVWaXN1YWxpemVyIOKAlCBwdXJlIGRlbGVnYXRpb25zIHRvIHRoZSBzaGFyZWRcbiAgLy8gVmlzdWFsaXplclN0b3JlIChpZGVudGljYWwgdG8gdGhlIE9TRCBiYWNrZW5kKS5cblxuICAvLyDilIDilIAgSVZpc3VhbGl6ZXIgY29tcG9zaXRlIG1lbWJlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldFJlZ2lvbk92ZXJsYXkoKTogSVJlZ2lvbk92ZXJsYXkgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50b29scy5yZWdpb25PdmVybGF5O1xuICB9XG4gIGdldElzb3N1cmZhY2VDb250cm9scygpOiBJSXNvc3VyZmFjZUNvbnRyb2xzIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2NlbmU/Lmlzb0NvbnRyb2xzPy4oKSA/PyBudWxsO1xuICB9XG4gIGdldEludGVuc2l0eUNvbnRyb2xzKCk6IElJbnRlbnNpdHlDb250cm9scyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldFN1cmZhY2UzZENvbnRyb2xzKCk6IElTdXJmYWNlM2RDb250cm9scyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNjZW5lPy5zdXJmYWNlM2RDb250cm9scz8uKCkgPz8gbnVsbDtcbiAgfVxuICBnZXRIaXN0b2dyYW0oY2hhbm5lbEluZGV4OiBudW1iZXIsIGJpbnM6IG51bWJlcik6IElIaXN0b2dyYW0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMudmlld2VyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5zY2VuZT8uaGlzdG9ncmFtKGNoYW5uZWxJbmRleCwgYmlucykgPz8gbnVsbDtcbiAgfVxuICBnZXRIaXN0b2dyYW0kKGNoYW5uZWxJbmRleDogbnVtYmVyLCBiaW5zOiBudW1iZXIpOiBPYnNlcnZhYmxlPElIaXN0b2dyYW0gfCBudWxsPiB7XG4gICAgLy8gPjgtYml0IGNoYW5uZWxzOiB0aGUgdHJ1ZSBuYXRpdmUgZGlzdHJpYnV0aW9uIGZyb20gdGhlIHNlcnZlciAodGhlIGRpc3BsYXllZCBwaXhlbHMgYXJlXG4gICAgLy8gOC1iaXQsIHNvIHRoZSBjbGllbnQgaGlzdG9ncmFtIHdvdWxkIGJlIGNsaXBwZWQpLiA4LWJpdCBjaGFubmVscyB1c2UgdGhlIGNsaWVudCBwYXRoLlxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRpbGVDbGllbnQubmF0aXZlSGlzdG9ncmFtJCh0aGlzLmxvYWRlZD8uaW1hZ2VJbmZvLCB0aGlzLmxvYWRlZD8ueiA/PyAwLCBjaGFubmVsSW5kZXgsIGJpbnMpID8/XG4gICAgICBvZih0aGlzLmdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXgsIGJpbnMpKVxuICAgICk7XG4gIH1cblxuICAvKiogU2F2ZSB0aGUgZGlzcGxheWVkIGNvbXBvc2l0ZSBhcyBhIFBORy4gVGhyb3VnaCBmaWxlLXNhdmVyLCB3aGljaCAodW5saWtlIHJldm9raW5nIGFuIG9iamVjdFxuICAgKiAgVVJMIHN0cmFpZ2h0IGFmdGVyIGBhLmNsaWNrKClgKSBkb2VzIG5vdCByYWNlIHRoZSBicm93c2VyJ3MgZG93bmxvYWQuICovXG4gIGV4cG9ydENvbXBvc2l0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gdGhpcy52aWV3ZXI7XG4gICAgaWYgKCF2KSByZXR1cm47XG4gICAgdm9pZCB2XG4gICAgICAuc2NyZWVuc2hvdCgpXG4gICAgICAudGhlbigoYmxvYikgPT4gc2F2ZUFzKGJsb2IsICduYXBhcmktanMucG5nJykpXG4gICAgICAuY2F0Y2goKGVycikgPT4gY29uc29sZS53YXJuKCdbbmFwYXJpLWpzXSBQTkcgZXhwb3J0IGZhaWxlZCcsIGVycikpO1xuICB9XG4gIC8qKiBOYXRpdmUtYml0LWRlcHRoICgxNi8zMi1iaXQpIG11bHRpLWJhbmQgVElGRiBleHBvcnQgdmlhIHRoZSBzZXJ2ZXIgYC9leHBvcnQvdGlmZmAgZW5kcG9pbnQg4oCUXG4gICAqICB0aGUgZGlzcGxheWVkIFBORyBpcyBhbiA4LWJpdCBmaWd1cmUsIHRoaXMgcHJlc2VydmVzIHRoZSB0cnVlIHBpeGVsIHZhbHVlcy4gVmlzaWJsZSBjaGFubmVsc1xuICAgKiAgb25seSAob21pdHRlZCB3aGVuIGFsbCBhcmUgdmlzaWJsZSDihpIgc2VydmVyIGRlZmF1bHQpLiBNaXJyb3JzIHRoZSBPU0QgYmFja2VuZC4gKi9cbiAgYXN5bmMgZXhwb3J0RGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnRpbGVDbGllbnQuZXhwb3J0VGlmZihcbiAgICAgIHRoaXMubG9hZGVkPy56ID8/IDAsXG4gICAgICB0aGlzLnN0b3JlLmN1cnJlbnRDaGFubmVsU3RhdGVzKCksXG4gICAgICB0aGlzLmxvYWRlZD8uZmlsZW5hbWUsXG4gICAgKTtcbiAgfVxuICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cbn1cbiJdfQ==
674
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXZpc3VhbGl6ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9uYXBhcmktdmlzdWFsaXplci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBYyxlQUFlLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFPbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLHlDQUF5QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBa0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RixPQUFPLEVBQXNCLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRyxPQUFPLEVBQ0wsUUFBUSxFQUVSLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEVBQ2QsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFXbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUcvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1B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QUksTUFBTTsyQkFBQyxjQUFjOzswQkFFakMsTUFBTTsyQkFBQyxVQUFVOzswQkFHakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgT3B0aW9uYWwsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdpbWFnZS1qcyc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IFZpZXdlciB9IGZyb20gJ25hcGFyaS1qcyc7XG5cbmltcG9ydCB7IElJbWFnZUluZm8gfSBmcm9tICcuLi8uLi9jb250cmFjdHMvaW1hZ2UuY29udHJhY3QnO1xuaW1wb3J0IHsgSUhpc3RvZ3JhbSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jaGFubmVsLWhpc3RvZ3JhbS1hcGkuY29udHJhY3QnO1xuaW1wb3J0IHsgQ2FudmFzVG9vbElkIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgSVJlZ2lvbk92ZXJsYXkgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcmVnaW9uLW92ZXJsYXkuY29udHJhY3QnO1xuaW1wb3J0IHsgU3BhdGlhbE9ic2VydmF0aW9ucyB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHsgU1BBVElBTF9EQVRBX1BPUlQsIFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQgeyBUSUxFX0FDQ0VTU19QT1JULCBUaWxlQWNjZXNzUG9ydCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wb3J0cy90aWxlLWFjY2Vzcy5wb3J0JztcbmltcG9ydCB7IFZJWl9DT05GSUcsIFZpekNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy92aXotY29uZmlnJztcbmltcG9ydCB7IElDZWxsU2VnbWVudGVyLCBDRUxMX1NFR01FTlRFUiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jZWxsLXNlZ21lbnRlci5jb250cmFjdCc7XG5pbXBvcnQgeyBWaWV3ZXJDYXBhYmlsaXRpZXMsIFZpZXdlckZlYXR1cmUsIGNhcGFiaWxpdGllc09mIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2NhcGFiaWxpdGllcy5jb250cmFjdCc7XG5pbXBvcnQge1xuICBQbG90VHlwZSxcbiAgUGxvdFR5cGVEZXNjcmlwdG9yLFxuICBQTE9UX1RZUEVfREVTQ1JJUFRPUlMsXG4gIE5BUEFSSV9ERUZBVUxUX0RFQ0lNQVRFLFxuICBpc05hcGFyaTNkLFxuICBpc05hcGFyaUlzb3N1cmZhY2UsXG4gIGlzTmFwYXJpU2NhdHRlcixcbiAgaXNOYXBhcmlTY2F0dGVyM2QsXG4gIGlzTmFwYXJpU3VyZmFjZSxcbiAgaXNTcGF0aWFsT21pY3MsXG4gIGlzU3BhdGlhbE9taWNzM2QsXG59IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wbG90LXR5cGUnO1xuaW1wb3J0IHtcbiAgSVZpZXdlckJhY2tlbmQsXG4gIFBpeGVsRGF0YSxcbiAgSUlzb3N1cmZhY2VDb250cm9scyxcbiAgSUludGVuc2l0eUNvbnRyb2xzLFxuICBJU3VyZmFjZTNkQ29udHJvbHMsXG4gIElPc2RWaWV3T3B0aW9ucyxcbiAgSVZvbHVtZVJlc29sdXRpb24sXG4gIElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSxcbn0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuaW1wb3J0IHsgVmlzdWFsaXplclN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvdmlzdWFsaXplci1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZ2lvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvcmVnaW9uLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3BhdGlhbFNlbGVjdGlvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvc3BhdGlhbC1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYW52YXNUb29sTWFuYWdlciB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvdG9vbC1raXQvY2FudmFzLXRvb2wtbWFuYWdlcic7XG5pbXBvcnQgeyBXYW5kU2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvd2FuZC93YW5kLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FtVG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNhbVBvaW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tcG9pbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IENlbGxTZWdtZW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9jZWxsLXNlZ21lbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VTdG9yZVZpc3VhbGl6ZXIgfSBmcm9tICcuLi9iYXNlLXN0b3JlLXZpc3VhbGl6ZXInO1xuaW1wb3J0IHsgdGhyb3dJZkFib3J0ZWQgfSBmcm9tICcuLi90aWxlLXNlcnZlcic7XG5pbXBvcnQgeyBTaW1wbGVTbGljZUFjY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi9zaW1wbGUtc2xpY2UtYWNjZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgWk9PTV9CVVRUT05fU1RFUCB9IGZyb20gJy4uL29zZC9vc2Qtem9vbSc7XG5pbXBvcnQgeyBOQVBBUklfV0hFRUxfWk9PTV9TUEVFRCB9IGZyb20gJy4vbmFwYXJpLXpvb20nO1xuaW1wb3J0IHsgVHJhbnNjcmlwdEVzdGltYXRlIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC10aWxlcyc7XG5pbXBvcnQgeyBOYXBhcmlUaWxlQ2xpZW50IH0gZnJvbSAnLi9uYXBhcmktdGlsZS1jbGllbnQnO1xuaW1wb3J0IHsgTmFwYXJpRGlzcGxheVN0YXRlIH0gZnJvbSAnLi9uYXBhcmktZGlzcGxheS1zdGF0ZSc7XG5pbXBvcnQgeyBMb2FkaW5nQmFkZ2VTdGF0ZSB9IGZyb20gJy4vbmFwYXJpLWxvYWRpbmctc3RhdGUnO1xuaW1wb3J0IHsgTmFwYXJpVG9vbEJyaWRnZSB9IGZyb20gJy4vbmFwYXJpLXRvb2wtYnJpZGdlJztcbmltcG9ydCB7IGNhbWVyYURyYWdNb2RlIH0gZnJvbSAnLi9uYXBhcmktYXhlcy1naXptbyc7XG5pbXBvcnQgeyBOYXBhcmlTY2VuZSwgTmFwYXJpU2V0dGluZ3MsIFNjZW5lQ29udGV4dCwgVm9sdW1lVm94ZWxzT25TY3JlZW4gfSBmcm9tICcuL25hcGFyaS1zY2VuZSc7XG5pbXBvcnQgdHlwZSB7IFBsYW5lQXhpcywgU2xpY2VQbGFuZXMgfSBmcm9tICcuL25hcGFyaS12b2x1bWUtc2xpY2UtcGxhbmVzJztcbmltcG9ydCB0eXBlIHsgUmVnaW9uTWVzaDNEIH0gZnJvbSAnLi9uYXBhcmktdm9sdW1lLXJlZ2lvbi1tZXNoZXMnO1xuaW1wb3J0IHsgSW1hZ2UyZFNjZW5lLCBTY2F0dGVyUmVnaW9uc1NjZW5lIH0gZnJvbSAnLi9uYXBhcmktaW1hZ2UtMmQtc2NlbmUnO1xuaW1wb3J0IHsgU2NhdHRlcjNkU2NlbmUsIFZvbHVtZVNjZW5lIH0gZnJvbSAnLi9uYXBhcmktdm9sdW1lLXNjZW5lJztcbmltcG9ydCB7IFN1cmZhY2VTY2VuZSB9IGZyb20gJy4vbmFwYXJpLXN1cmZhY2Utc2NlbmUnO1xuaW1wb3J0IHsgU3BhdGlhbFNlc3Npb24gfSBmcm9tICcuL25hcGFyaS1zcGF0aWFsLXNjZW5lJztcbmltcG9ydCB7IFNwYXRpYWwyZFNjZW5lIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC0yZC1zY2VuZSc7XG5pbXBvcnQgeyBTcGF0aWFsM2RTY2VuZSB9IGZyb20gJy4vbmFwYXJpLXNwYXRpYWwtM2Qtc2NlbmUnO1xuXG4vKiogT3BhcXVlIGhhbmRsZSBmcm9tIHtAbGluayBOYXBhcmlWaXN1YWxpemVyU2VydmljZS5sb2FkfSwgcGFzc2VkIGJhY2sgdG8gcGxvdCgpLiAqL1xuaW50ZXJmYWNlIE5hcGFyaUxvYWRlZCB7XG4gIGltYWdlSW5mbzogSUltYWdlSW5mbztcbiAgejogbnVtYmVyO1xuICAvKiogTXVzdCBtYXRjaCBgSUltYWdlSW5mby5maWxlTmFtZWAg4oCUIHRoZSByZW5kZXIgb3JjaGVzdHJhdG9yIGRyb3BzIHRoZSByZXN1bHQgaWYgdGhlXG4gICAqICBoYW5kbGUncyBgZmlsZW5hbWVgIGRvZXNuJ3QgbWF0Y2ggdGhlIHJlcXVlc3RlZCBpbWFnZSAoZ3VhcmRzIGFnYWluc3Qgc3RhbGUgY2xpY2tzKS4gKi9cbiAgZmlsZW5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgV2ViR1BVIGltYWdlIGJhY2tlbmQsIGJ1aWx0IG9uIHRoZSBwdWJsaXNoZWQgYG5hcGFyaS1qc2AgbGlicmFyeSAoaml0LXVpIzEwMjogYVxuICogYnJvd3Nlci1iYXNlZCBuYXBhcmkgc2hpcHBlZCBhcyBhIEpTIGxpYnJhcnksIGFsb25nc2lkZSBPcGVuU2VhZHJhZ29uIGZvciBpbWFnZXMgYW5kIFBsb3RseVxuICogZm9yIDNEKS5cbiAqXG4gKiBPbmUgc2NlbmUgaXMgbW91bnRlZCBwZXIge0BsaW5rIHBsb3R9LCBjaG9zZW4gYnkgcGxvdCB0eXBlOlxuICogIC0gKioyRCBpbWFnZSoqIChhbmQgdGhlIHJlZ2lvbi1jZW50cm9pZCBzY2F0dGVyIGFuZCBzcGF0aWFsLW9taWNzIHZpZXdzIG92ZXIgaXQpOiBweXJhbWlkYWxcbiAqICAgIGBUaWxlZFNvdXJjZWBzIGFnYWluc3QgdGhlIGppdC1zZXJ2aWNlIGAvdGlsZWAgZW5kcG9pbnQgd2hlbiBgL3RpbGVzL2luZm9gIGRlc2NyaWJlcyB0aGVcbiAqICAgIGltYWdlLCBlbHNlIGEgc2luZ2xlIHN0aXRjaGVkIGxldmVsIChgdGlsZWQ6ZmFsc2VgIHN0YWNrcyBmZXRjaCBlYWNoIHNsaWNlJ3Mgb3duIFVSTCk7XG4gKiAgICBtdWx0aWNoYW5uZWwgYWRkaXRpdmUgdGludHMsIGdyYXlzY2FsZSBjb2xvcm1hcCBvciBSR0I7IHNjYWxlIGJhciwgbmF2aWdhdG9yLCByZWdpb25cbiAqICAgIG92ZXJsYXkgYW5kIHRoZSBzaGFyZWQgcGl4ZWwgdG9vbHMgKHdhbmQsIGJydXNoLCBlcmFzZXIsIHpvb20tdG8tYm94LCBTQU0vY2VsbHBvc2UpLlxuICogIC0gKipWb2x1bWUgLyBpc29zdXJmYWNlIC8gM0Qgc2NhdHRlciAvIHN1cmZhY2UqKjogc2xpY2VzIGFzc2VtYmxlZCBpbnRvIGEgZGVjaW1hdGVkIHZvbHVtZVxuICogICAgKG9yIG9uZSBoZWlnaHQgZmllbGQgcGVyIHNsaWNlKSwgd2l0aCB0aGUgYXhlcyBnaXptbyBhbmQgdGhlIFotaGVpZ2h0IGhhbmRsZS5cbiAqICAtICoqU3BhdGlhbCBvbWljcyAyRCAvIDNEKio6IG9ic2VydmF0aW9uIG1hcmtlcnMgb3IgYSAzRCBjbG91ZCwgZ2VuZSBtYXBzLCBkZW5zaXR5IHZvbHVtZXMsXG4gKiAgICBsZXZlbC1vZi1kZXRhaWwgdGlsZXMsIGhvdmVyIHRvb2x0aXAgYW5kIGNsaWNrLXRvLXNlbGVjdC5cbiAqXG4gKiBQZXItY2hhbm5lbCBoaXN0b2dyYW1zIGNvbWUgZnJvbSB0aGUgY2xpZW50IGRhdGEsIG9yIGZyb20gdGhlIHNlcnZlcidzIGAvaGlzdG9ncmFtYCBmb3JcbiAqID44LWJpdCBpbWFnZXM7IFRJRkYgZXhwb3J0IGZyb20gYC9leHBvcnQvdGlmZmAuIFJlZ2lvbiBzdGF0ZSBhbmQgZGlzcGxheSBvcHRpb25zIGRlbGVnYXRlIHRvXG4gKiB0aGUgc2hhcmVkIHtAbGluayBSZWdpb25TdG9yZX0gLyB7QGxpbmsgVmlzdWFsaXplclN0b3JlfSB0aHJvdWdoIHtAbGluayBCYXNlU3RvcmVWaXN1YWxpemVyfSxcbiAqIGV4YWN0bHkgYXMgT1NEIGRvZXMuIG5hcGFyaS1qcydzIHJlbmRlciBsb29wIGFuZCB0aGUgaG90IHBvaW50ZXIgcGF0aHMgcnVuIG91dHNpZGUgdGhlXG4gKiBBbmd1bGFyIHpvbmUuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmFwYXJpVmlzdWFsaXplclNlcnZpY2UgZXh0ZW5kcyBCYXNlU3RvcmVWaXN1YWxpemVyIGltcGxlbWVudHMgSVZpZXdlckJhY2tlbmQge1xuICByZWFkb25seSBjYXBhYmlsaXRpZXM6IFZpZXdlckNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllc09mKFtcbiAgICBWaWV3ZXJGZWF0dXJlLkltYWdlRGlzcGxheSxcbiAgICBWaWV3ZXJGZWF0dXJlLlN0YWNrU2xpZGVyLFxuICAgIFZpZXdlckZlYXR1cmUuUGl4ZWxSZWFkYmFjayxcbiAgICBWaWV3ZXJGZWF0dXJlLlN1cmZhY2UzRCxcbiAgICBWaWV3ZXJGZWF0dXJlLklzb3N1cmZhY2UsXG4gIF0pO1xuXG4gIC8qKiBUaGUgaml0LXNlcnZpY2UgdGlsZSBzZXJ2ZXI6IGRlc2NyaXB0b3IsIHNsaWNlcywgdGlsZWQgc291cmNlcywgaGlzdG9ncmFtcywgZXhwb3J0LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbGVDbGllbnQ6IE5hcGFyaVRpbGVDbGllbnQ7XG4gIC8qKiBuYXBhcmktanMncyByZW5kZXIgbG9vcCBhbmQgdGhlIGhvdCBwb2ludGVyL3RpbWVyIHBhdGhzIHJ1biBvdXRzaWRlIHRoZSBBbmd1bGFyIHpvbmVcbiAgICogIChOQVBBUkktU1ZDLTI1KTsgd2hhdCB0aGV5IHByb2R1Y2UgZm9yIHRoZSBVSSByZS1lbnRlcnMgaXQgdGhyb3VnaCB7QGxpbmsgaW5ab25lfS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJpdmF0ZSB2aWV3ZXI6IFZpZXdlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBob3N0OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxvYWRlZDogTmFwYXJpTG9hZGVkIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBGb3IgdGhlIHBhbmVsOiB0aGUgdHJhbnNjcmlwdHMtaW4tdmlldyBlc3RpbWF0ZSBhbmQgdGhlIGRlbnNpdHkgd2luZG93IGluIHVzZS4gKi9cbiAgcmVhZG9ubHkgdHJhbnNjcmlwdEVzdGltYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHJhbnNjcmlwdEVzdGltYXRlIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUcmFuc2NyaXB0cyBvZiBlYWNoIHNlbGVjdGVkIGdlbmUgaW4gdmlldyAoc2VlIE5hcGFyaVNwYXRpYWxUaWxlTGF5ZXJzLmdlbmVDb3VudHNJbikuICovXG4gIHJlYWRvbmx5IGdlbmVDb3VudHNJblZpZXckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGRlbnNpdHlTdGF0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgbG86IG51bWJlcjsgaGk6IG51bWJlcjsgbWF4OiBudW1iZXIgfSB8IG51bGw+KG51bGwpO1xuICAvKiogXCJ4IHJlbG9hZGluZ+KAplwiIGF0IHRoZSBib3R0b20gb2YgdGhlIGNhbnZhczogdGhlIHRpbGUgbGF5ZXJzJyBsb2FkcyBhbmQgdGhlIG9ic2VydmF0aW9ucycuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYmFkZ2UgPSBuZXcgTG9hZGluZ0JhZGdlU3RhdGUoKTtcbiAgLyoqIFRoZSBzdG9yZSdzIGRpc3BsYXkgc3RhdGUgKGNvbG9ybWFwLCByZXZlcnNlLCBpbnZlcnQpIGFuZCB0aGUgY29sb3JtYXBzIGRlcml2ZWQgZnJvbSBpdC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5OiBOYXBhcmlEaXNwbGF5U3RhdGU7XG4gIC8qKlxuICAgKiBUaGUgbW91bnRlZCBzY2VuZSdzIGxpZmV0aW1lOiBhYm9ydGVkIGJ5IHtAbGluayByZXNldH0sIHNvIGV2ZXJ5dGhpbmcgYSBwbG90IHN0YXJ0cyDigJQgaXRzXG4gICAqIGRlc2NyaXB0b3IgcG9sbCwgaXRzIHRpbGUgZmV0Y2hlcywgaXRzIGJhZGdlIGNvdW50cywgaXRzIGF3YWl0cyDigJQgY2FuIHRlbGwgdGhhdCBhIG5ld2VyIHBsb3RcbiAgICogaGFzIHJlcGxhY2VkIGl0LiBBIHRpbGUgdGhhdCBzZXR0bGVzIGFmdGVyIGEgcmVzZXQgYmVsb25ncyB0byB0aGUgYWJvcnRlZCBzY2VuZSBhbmQgbGVhdmVzIHRoZVxuICAgKiBuZXcgc2NlbmUncyBjb3VudCBhbG9uZS5cbiAgICovXG4gIHByaXZhdGUgbGlmZXRpbWUgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIC8qKiBXaGF0IHtAbGluayBwbG90fSBtb3VudGVkLCB3aGlsZSBpdCBpcyBtb3VudGVkLiAqL1xuICBwcml2YXRlIHNjZW5lOiBOYXBhcmlTY2VuZSB8IG51bGwgPSBudWxsO1xuICAvKiogUmVnaW9uIHJlY29uc3RydWN0aW9ucyB0byBzaG93IGluIGEgdm9sdW1lIHZpZXcsIGtlcHQgYWNyb3NzIHJlLXBsb3RzIG9mIHRoZWlyIGltYWdlLiAqL1xuICBwcml2YXRlIHJlZ2lvbk1lc2hlczogcmVhZG9ubHkgUmVnaW9uTWVzaDNEW10gPSBbXTtcbiAgLyoqIFRoZSBpbWFnZSAoZmlsZSBuYW1lKSB7QGxpbmsgcmVnaW9uTWVzaGVzfSB3ZXJlIGJ1aWx0IGZyb20uICovXG4gIHByaXZhdGUgcmVnaW9uTWVzaGVzSW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIFRoZSBrZXlzIG9mIHRoZSByZWNvbnN0cnVjdGlvbnMgaGlnaGxpZ2h0ZWQuICovXG4gIHByaXZhdGUgcmVnaW9uSGlnaGxpZ2h0OiByZWFkb25seSBzdHJpbmdbXSA9IFtdO1xuICAvKiogVGhlIGtleXMgb2YgdGhlIHJlY29uc3RydWN0aW9ucyBoaWRkZW4uICovXG4gIHByaXZhdGUgcmVnaW9uSGlkZGVuOiByZWFkb25seSBzdHJpbmdbXSA9IFtdO1xuICAvKiogVGhlIHBsYW5lcyBvZiB0aGUgc2VjdGlvbnMgYmVzaWRlIGEgdm9sdW1lIHZpZXcsIG9yIG5vbmUuICovXG4gIHByaXZhdGUgc2xpY2VQbGFuZXM6IFNsaWNlUGxhbmVzID0geyB4OiBudWxsLCB5OiBudWxsLCB6OiBudWxsIH07XG4gIC8qKiBBIHNlY3Rpb24ncyBwbGFuZSBkcmFnZ2VkIGluIHRoZSB2b2x1bWUgKHNlZSB7QGxpbmsgZ2V0U2xpY2VQbGFuZU1vdmUkfSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc2xpY2VQbGFuZU1vdmUkID0gbmV3IFN1YmplY3Q8eyBheGlzOiBQbGFuZUF4aXM7IHZhbHVlOiBudW1iZXIgfT4oKTtcbiAgLyoqIENsaWNrcyBvbiB0aGUgcmVjb25zdHJ1Y3Rpb25zIChzZWUge0BsaW5rIGdldFJlZ2lvbk1lc2hQaWNrJH0pLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbk1lc2hQaWNrJCA9IG5ldyBTdWJqZWN0PHsga2V5OiBzdHJpbmcgfCBudWxsOyBhZGRpdGl2ZTogYm9vbGVhbiB9PigpO1xuICAvKiogU3BhdGlhbCBzdGF0ZSB0aGF0IG91dGxpdmVzIGEgc2NlbmUgKGxhdGVzdCBkYXRhLCB3aW5kb3dzLCBlc3RpbWF0ZWQgZ2VuZS1tYXAgZmllbGRzKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzcGF0aWFsOiBTcGF0aWFsU2Vzc2lvbjtcbiAgLyoqIFZpZXdlciBzZXR0aW5ncyB0aGF0IG91dGxpdmUgYSBzY2VuZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nczogTmFwYXJpU2V0dGluZ3MgPSB7XG4gICAgcmVzb2x1dGlvblNjYWxlOiBOQVBBUklfREVGQVVMVF9ERUNJTUFURSxcbiAgICBuYXZpZ2F0b3JWaXNpYmxlOiB0cnVlLFxuICAgIGltYWdlU21vb3RoaW5nOiBmYWxzZSxcbiAgICBheGVzVmlzaWJsZTogdHJ1ZSxcbiAgICBzdXJmYWNlV2lyZWZyYW1lOiBmYWxzZSxcbiAgICB2b2x1bWVaU2NhbGU6IDEsXG4gIH07XG4gIC8qKlxuICAgKiBGcmFtZSBsb2FkaW5nICh2b2x1bWUgYXNzZW1ibHksIHN1cmZhY2UgcHJlbG9hZCk6IGFib3J0ZWQgYnkge0BsaW5rIHJlc2V0fSBBTkQgYnlcbiAgICoge0BsaW5rIGNhbmNlbExvYWRpbmd9LCBzbyBhIENhbmNlbCBhY3R1YWxseSBzdG9wcyBmZXRjaGluZyBmcmFtZXMgaW5zdGVhZCBvZiBydW5uaW5nIHRvXG4gICAqIGNvbXBsZXRpb24gaW4gdGhlIGJhY2tncm91bmQsIHdoaWxlIHRoZSBzY2VuZSBpdHNlbGYgc3RheXMgbW91bnRlZC4gKExhdGVzdC13aW5zIFdJVEhJTiBhXG4gICAqIHNjZW5lIOKAlCBhIHNjcnViLCBhIGNvbG91ciByZWJ1aWxkLCBhIGhvdmVyLXNvdXJjZSBmZXRjaCDigJQgaXMgZWFjaCBzY2VuZSdzIG93biBidXNpbmVzcy4pXG4gICAqL1xuICBwcml2YXRlIGxvYWRpbmcgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIC8qKiBUaGUgaW1hZ2UncyBmdWxsLXJlc29sdXRpb24gc2l6ZSBhcyB0aGUgbGFzdCBzY2VuZSBkcmV3IGl0IChpdCBvdXRsaXZlcyB0aGUgc2NlbmUpLiAqL1xuICBwcml2YXRlIGltYWdlVyA9IDA7XG4gIHByaXZhdGUgaW1hZ2VIID0gMDtcbiAgLyoqIFRoZSByZWdpb24gb3ZlcmxheSwgdGhlIHBpeGVsIHRvb2xzIGFuZCB0aGUgZGlzcGxheWVkLXBpeGVsIHJlYWRiYWNrIHRoZXkgcmVhZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0b29sczogTmFwYXJpVG9vbEJyaWRnZTtcbiAgLyoqIFRoaXMgYmFja2VuZCdzIG93biB3YW5kLCBicnVzaCwgZXJhc2VyLCB6b29tLXRvLWJveCBhbmQgU0FNIHBvaW50IHRvb2xzLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FudmFzVG9vbHM6IENhbnZhc1Rvb2xNYW5hZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja0xvYWRpbmdQcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b3NjYWxlRXZlbnQkID0gbmV3IFN1YmplY3Q8dW5rbm93bj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3cG9ydENoYW5nZSQgPSBuZXcgU3ViamVjdDx7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVElMRV9BQ0NFU1NfUE9SVCkgdGlsZXM6IFRpbGVBY2Nlc3NQb3J0LFxuICAgIHN0b3JlOiBWaXN1YWxpemVyU3RvcmUsXG4gICAgcmVnaW9uU3RvcmU6IFJlZ2lvblN0b3JlLFxuICAgIHdhbmRTZXJ2aWNlOiBXYW5kU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbVRvb2w6IFNhbVRvb2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2FtUG9pbnRUb29sOiBTYW1Qb2ludFRvb2xTZXJ2aWNlLFxuICAgIGNlbGxTZWdtZW50VG9vbDogQ2VsbFNlZ21lbnRUb29sU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KENFTExfU0VHTUVOVEVSKSBjZWxsU2VnbWVudGVyOiBJQ2VsbFNlZ21lbnRlciB8IG51bGwsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzaW1wbGVTdGFjazogU2ltcGxlU2xpY2VBY2Nlc3NTZXJ2aWNlLFxuICAgIEBJbmplY3QoVklaX0NPTkZJRykgY29uZmlnOiBWaXpDb25maWcsXG4gICAgLy8gT3B0aW9uYWw6IG9ubHkgYSBob3N0IHRoYXQgc2VydmVzIHNwYXRpYWwtb21pY3MgZGF0YSBwcm92aWRlcyBpdCwgYW5kXG4gICAgLy8gd2l0aG91dCBpdCB0aGUgU1BBVElBTF9PTUlDUyBwbG90IHR5cGUgaXMgbmV2ZXIgb2ZmZXJlZCBhbnl3YXkuXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChTUEFUSUFMX0RBVEFfUE9SVCkgc3BhdGlhbERhdGE6IFNwYXRpYWxEYXRhUG9ydCB8IG51bGwgPSBudWxsLFxuICAgIHNlbGVjdGlvblN0b3JlOiBTcGF0aWFsU2VsZWN0aW9uU3RvcmUgfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgc3VwZXIocmVnaW9uU3RvcmUsIHN0b3JlKTtcbiAgICB0aGlzLnRpbGVDbGllbnQgPSBuZXcgTmFwYXJpVGlsZUNsaWVudCh0aWxlcywgc2ltcGxlU3RhY2ssIGNvbmZpZy5zbGlkZUNyb3BTZXJ2ZXIpO1xuICAgIHRoaXMudGlsZUNsaWVudC5zdGFydFNjZW5lKHRoaXMubGlmZXRpbWUuc2lnbmFsKTtcbiAgICB0aGlzLmRpc3BsYXkgPSBuZXcgTmFwYXJpRGlzcGxheVN0YXRlKHN0b3JlKTtcbiAgICB0aGlzLnNwYXRpYWwgPSBuZXcgU3BhdGlhbFNlc3Npb24oc3BhdGlhbERhdGEsIHNlbGVjdGlvblN0b3JlLCB7XG4gICAgICBjb250aW51b3VzTHV0OiAodmlldykgPT4gdGhpcy5kaXNwbGF5LnNwYXRpYWxMdXQodmlldyksXG4gICAgICAvLyBUaGVzZSBmb2xsb3cgdGhlIGNhbWVyYSwgd2hpY2ggbW92ZXMgb3V0c2lkZSB0aGUgem9uZTsgdGhlIHBhbmVsIHJlYWRzIHRoZW0uXG4gICAgICBlc3RpbWF0ZUNoYW5nZWQ6IChlKSA9PiB0aGlzLmluWm9uZSgoKSA9PiB0aGlzLnRyYW5zY3JpcHRFc3RpbWF0ZSQubmV4dChlKSksXG4gICAgICBnZW5lQ291bnRzQ2hhbmdlZDogKGMpID0+IHRoaXMuaW5ab25lKCgpID0+IHRoaXMuZ2VuZUNvdW50c0luVmlldyQubmV4dChjKSksXG4gICAgICBkZW5zaXR5Q2hhbmdlZDogKGQpID0+IHRoaXMuaW5ab25lKCgpID0+IHRoaXMuZGVuc2l0eVN0YXRzJC5uZXh0KGQpKSxcbiAgICAgIGxvYWRpbmdDaGFuZ2VkOiAobGF5ZXJzKSA9PiB0aGlzLmJhZGdlLnNldFRpbGVMYXllcnMobGF5ZXJzKSxcbiAgICB9KTtcbiAgICB0aGlzLnRvb2xzID0gbmV3IE5hcGFyaVRvb2xCcmlkZ2UoXG4gICAgICB7XG4gICAgICAgIHZpZXdlcjogKCkgPT4gdGhpcy52aWV3ZXIsXG4gICAgICAgIGhvc3Q6ICgpID0+IHRoaXMuaG9zdCxcbiAgICAgICAgY2FudmFzOiAoKSA9PiB0aGlzLmNhbnZhcyxcbiAgICAgICAgaW1hZ2VTaXplOiAoKSA9PiB0aGlzLmdldFRydWVJbWFnZVNpemUoKSxcbiAgICAgICAgZnJhbWVJbmRleDogKCkgPT4gdGhpcy5sb2FkZWQ/LnogPz8gMCxcbiAgICAgICAgZmlsZU5hbWU6ICgpID0+IHRoaXMubG9hZGVkPy5maWxlbmFtZSxcbiAgICAgICAgLy8gUmVhY2hlZCBmcm9tIHRpbWVycyBhcm1lZCBvdXRzaWRlIHRoZSB6b25lOyBzdWJzY3JpYmVycyBhcmUgVUkuXG4gICAgICAgIHZpZXdwb3J0Q2hhbmdlZDogKHJlY3QpID0+IHRoaXMuaW5ab25lKCgpID0+IHRoaXMudmlld3BvcnRDaGFuZ2UkLm5leHQocmVjdCkpLFxuICAgICAgICBvdXRzaWRlWm9uZTogKGZuKSA9PiB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZm4pLFxuICAgICAgICBpblpvbmU6IChmbikgPT4gdGhpcy5pblpvbmUoZm4pLFxuICAgICAgfSxcbiAgICAgIHsgcmVnaW9uU3RvcmUsIHdhbmRTZXJ2aWNlLCBzYW1Ub29sLCBzYW1Qb2ludFRvb2wsIGNlbGxTZWdtZW50VG9vbCwgY2VsbFNlZ21lbnRlciB9LFxuICAgICk7XG4gICAgdGhpcy5jYW52YXNUb29scyA9IHRoaXMudG9vbHMuY2FudmFzVG9vbHM7XG4gIH1cblxuICAvKiogUnVuIGBmbmAgaW5zaWRlIHRoZSBBbmd1bGFyIHpvbmU6IGZvciBvdXRwdXQgKHN1YmplY3RzIHRoZSBVSSByZW5kZXJzLCBzdG9yZSB3cml0ZXMpXG4gICAqICBwcm9kdWNlZCBieSB3b3JrIHRoYXQgcnVucyBvdXRzaWRlIGl0LiAqL1xuICBwcml2YXRlIGluWm9uZTxUPihmbjogKCkgPT4gVCk6IFQge1xuICAgIHJldHVybiBOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkgPyBmbigpIDogdGhpcy56b25lLnJ1bihmbik7XG4gIH1cblxuICAvKiogV2hhdCBhIHNjZW5lIGlzIGJ1aWx0IGZyb20gKHNlZSB7QGxpbmsgU2NlbmVDb250ZXh0fSkuICovXG4gIHByaXZhdGUgc2NlbmVDb250ZXh0KHZpZXdlcjogVmlld2VyLCBob3N0OiBIVE1MRWxlbWVudCwgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCk6IFNjZW5lQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZXdlcixcbiAgICAgIGhvc3QsXG4gICAgICBjYW52YXMsXG4gICAgICBzaWduYWw6IHRoaXMubGlmZXRpbWUuc2lnbmFsLFxuICAgICAgbG9hZGluZzogKCkgPT4gdGhpcy5sb2FkaW5nLnNpZ25hbCxcbiAgICAgIGluZm86ICgpID0+IHRoaXMubG9hZGVkPy5pbWFnZUluZm8sXG4gICAgICB6OiAoKSA9PiB0aGlzLmxvYWRlZD8ueiA/PyAwLFxuICAgICAgdGlsZXM6IHRoaXMudGlsZUNsaWVudCxcbiAgICAgIGRpc3BsYXk6IHRoaXMuZGlzcGxheSxcbiAgICAgIGJhZGdlOiB0aGlzLmJhZGdlLFxuICAgICAgdG9vbHM6IHRoaXMudG9vbHMsXG4gICAgICBzdG9yZTogdGhpcy5zdG9yZSxcbiAgICAgIHJlZ2lvblN0b3JlOiB0aGlzLnJlZ2lvblN0b3JlLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuc2V0dGluZ3MsXG4gICAgICBzdGFjazoge1xuICAgICAgICBsb2FkaW5nOiAob24pID0+IHRoaXMuc3RhY2tMb2FkaW5nJC5uZXh0KG9uKSxcbiAgICAgICAgcHJvZ3Jlc3M6IChwZXJjZW50KSA9PiB0aGlzLnN0YWNrTG9hZGluZ1Byb2dyZXNzJC5uZXh0KHBlcmNlbnQpLFxuICAgICAgfSxcbiAgICAgIGltYWdlU2l6ZTogKCkgPT4gKHsgd2lkdGg6IHRoaXMuaW1hZ2VXLCBoZWlnaHQ6IHRoaXMuaW1hZ2VIIH0pLFxuICAgICAgc2V0SW1hZ2VTaXplOiAod2lkdGgsIGhlaWdodCkgPT4ge1xuICAgICAgICB0aGlzLmltYWdlVyA9IHdpZHRoO1xuICAgICAgICB0aGlzLmltYWdlSCA9IGhlaWdodDtcbiAgICAgIH0sXG4gICAgICBmaXRDYW1lcmFTb29uOiAoKSA9PiB0aGlzLmZpdENhbWVyYVNvb24oKSxcbiAgICAgIG91dHNpZGVab25lOiAoZm4pID0+IHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmbiksXG4gICAgICBpblpvbmU6IChmbikgPT4gdGhpcy5pblpvbmUoZm4pLFxuICAgICAgcmVnaW9uTWVzaFBpY2tlZDogKGtleSwgYWRkaXRpdmUpID0+IHRoaXMucmVnaW9uTWVzaFBpY2skLm5leHQoeyBrZXksIGFkZGl0aXZlIH0pLFxuICAgICAgc2xpY2VQbGFuZU1vdmVkOiAoYXhpcywgdmFsdWUpID0+IHRoaXMuc2xpY2VQbGFuZU1vdmUkLm5leHQoeyBheGlzLCB2YWx1ZSB9KSxcbiAgICB9O1xuICB9XG5cbiAgLy8g4pSA4pSAIElEYXRhUmVuZGVyZXI6IGxvYWQgLyByZW5kZXIgLyB2aWV3cG9ydCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqXG4gICAqIFJlY29yZCB0aGUgaW1hZ2UgdG8gZHJhdy4gTm8gbmV0d29yayB3b3JrIGhhcHBlbnMgaGVyZSDigJQgdGhlIGRlc2NyaXB0b3IgcG9sbCBhbmQgdGhlIHRpbGUsXG4gICAqIHZvbHVtZSBhbmQgc3BhdGlhbCBmZXRjaGVzIGFsbCBydW4gaW4ge0BsaW5rIHBsb3R9IHVuZGVyIGl0cyBzY2VuZSBzaWduYWwsIHdoaWNoIGEgbmV3ZXIgcGxvdCxcbiAgICoge0BsaW5rIHJlc2V0fSBvciBgY2FuY2VsTG9hZGluZygpYCBhYm9ydHMg4oCUIHNvIGBzaWduYWxgIGlzIG9ubHkgY2hlY2tlZDogYW4gYWxyZWFkeS1hYm9ydGVkXG4gICAqIGxvYWQgcmVqZWN0cyB3aXRoIGFuIGBBYm9ydEVycm9yYCBhbmQgbGVhdmVzIHRoZSByZWNvcmRlZCBpbWFnZSBhbG9uZS5cbiAgICovXG4gIGFzeW5jIGxvYWQoaW1hZ2VJbmZvOiBJSW1hZ2VJbmZvLCB6SW5kZXg6IG51bWJlciwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPE5hcGFyaUxvYWRlZD4ge1xuICAgIHRocm93SWZBYm9ydGVkKHNpZ25hbCk7XG4gICAgLy8gS2VlcHMgU2ltcGxlU2xpY2VBY2Nlc3NTZXJ2aWNlJ3MgYmxvYiBjYWNoZSBpbiBzeW5jIGV2ZW4gd2hlbiB0aGUgdXNlclxuICAgIC8vIHN3aXRjaGVzIGJhY2tlbmRzIChlLmcuIE9TRCBJbWFnZSDihpIgbmFwYXJpIFZvbHVtZSkgb24gdGhlIHNhbWUgZmlsZSDigJRcbiAgICAvLyB3aGljaGV2ZXIgYmFja2VuZCBsb2FkcyBhIGdlbnVpbmVseSBkaWZmZXJlbnQgZmlsZSBmaXJzdCBldmljdHMgaXQuXG4gICAgdGhpcy5zaW1wbGVTdGFjay5ub3RlQWN0aXZlRmlsZShpbWFnZUluZm8uZmlsZU5hbWUpO1xuICAgIHRoaXMubG9hZGVkID0geyBpbWFnZUluZm8sIHo6IHpJbmRleCwgZmlsZW5hbWU6IGltYWdlSW5mby5maWxlTmFtZSB9O1xuICAgIHJldHVybiB0aGlzLmxvYWRlZDtcbiAgfVxuXG4gIGFzeW5jIHBsb3QoXG4gICAgcGxvdERpdjogc3RyaW5nLFxuICAgIGltYWdlTG9hZGVkOiB1bmtub3duLFxuICAgIGltYWdlSW5mbzogSUltYWdlSW5mbyxcbiAgICBzY3JlZW5IZWlnaHQ6IG51bWJlcixcbiAgICBwbG90VHlwZTogUGxvdFR5cGUsXG4gICAgaW5QbGFjZT86IGJvb2xlYW4sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwbG90RGl2KTtcbiAgICBpZiAoIWhvc3QpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtuYXBhcmktanNdIHBsb3QgdGFyZ2V0ICMke3Bsb3REaXZ9IG5vdCBmb3VuZGApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgLy8gQSBuZXcgaW1hZ2U6IGEgc3Ryb2tlIG9yIFNBTSBwcm9tcHQgaW4gcHJvZ3Jlc3MgYmVsb25nZWQgdG8gdGhlIG9sZCBvbmUuXG4gICAgaWYgKCFpblBsYWNlKSB0aGlzLmNhbnZhc1Rvb2xzLnJlc2V0QWxsKCk7XG4gICAgLy8gVGhpcyBwbG90J3Mgc2NlbmUuIEEgbmV3ZXIgcGxvdCByZXNldHMgaW50byB0aGUgbmV4dCBvbmUgd2hpbGUgdGhpcyBvbmUgc3RpbGwgYXdhaXRzLCBhbmRcbiAgICAvLyBhIHN1cGVyc2VkZWQgcGxvdCBtdXN0IG5vdCBnbyBvbiB0byBkcmF3IChvciBjb3VudCBpbWFnZSB0aWxlcykgaW50byB0aGUgbmV3ZXIgc2NlbmUuXG4gICAgY29uc3Qgc2NlbmUgPSB0aGlzLmxpZmV0aW1lLnNpZ25hbDtcbiAgICB0aGlzLmhvc3QgPSBob3N0O1xuICAgIHRoaXMuYmFkZ2UuYXR0YWNoKGhvc3QpO1xuXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY2FudmFzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gc2NyZWVuSGVpZ2h0ID8gYCR7c2NyZWVuSGVpZ2h0fXB4YCA6ICcxMDAlJztcbiAgICBob3N0LmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG5cbiAgICBjb25zdCBpbmZvID0gKGltYWdlTG9hZGVkIGFzIE5hcGFyaUxvYWRlZCk/LmltYWdlSW5mbyA/PyBpbWFnZUluZm87XG5cbiAgICB0cnkge1xuICAgICAgLy8gQnVpbHQgT1VUU0lERSB0aGUgQW5ndWxhciB6b25lLCBzbyBpdHMgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGxvb3AsIGl0cyBjYW52YXMgcG9pbnRlciAvXG4gICAgICAvLyB3aGVlbCBsaXN0ZW5lcnMgYW5kIGl0cyBSZXNpemVPYnNlcnZlciBkbyBub3QgZWFjaCB0cmlnZ2VyIGFwcC13aWRlIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgICAvLyBXaGF0ZXZlciB0aGV5IGNhdXNlIHRoYXQgdGhlIFVJIHNob3dzIHJlLWVudGVycyB0aGUgem9uZSAoc2VlIGluWm9uZSkuXG4gICAgICBjb25zdCB2aWV3ZXIgPSB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IFZpZXdlcih7XG4gICAgICAgICAgICBjYW52YXMsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB7IHI6IDAuMDcsIGc6IDAuMDcsIGI6IDAuMDksIGE6IDEgfSxcbiAgICAgICAgICAgIC8vIFNldCBoZXJlIHJhdGhlciB0aGFuIGxlZnQgdG8gbmFwYXJpLWpzJ3Mgb3duIGRlZmF1bHQgc28gdGhlIGdlbnRsZXJcbiAgICAgICAgICAgIC8vIHN0ZXAgYXBwbGllcyB3aXRoIHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBpbnN0YWxsZWQuIENob3NlbiB0byBtYXRjaCB0aGVcbiAgICAgICAgICAgIC8vIE9TRCBiYWNrZW5kJ3Mgc3RlcCAoc2VlIE9TRF9aT09NX1BFUl9TQ1JPTEwpOiB0aGUgd2hlZWwgc2hvdWxkIGZlZWwgdGhlXG4gICAgICAgICAgICAvLyBzYW1lIG9uIGFuIGltYWdlIHdoaWNoZXZlciByZW5kZXJlciBpcyBkcmF3aW5nIGl0LiBUaGUgc3RlcCBhcHBsaWVzIHBlclxuICAgICAgICAgICAgLy8gc2Nyb2xsIEVWRU5ULCBhbmQgYSB0cmFja3BhZCBzZW5kcyBhIGJ1cnN0IG9mIHRoZW0gcGVyIHN3aXBlLCBzbyBhIHN0ZXBcbiAgICAgICAgICAgIC8vIHR1bmVkIHRvIGEgbW91c2Ugbm90Y2ggcnVucyBhd2F5IHVuZGVyIGEgdHJhY2twYWQuXG4gICAgICAgICAgICB3aGVlbFpvb21TcGVlZDogTkFQQVJJX1dIRUVMX1pPT01fU1BFRUQsXG4gICAgICAgICAgICAvLyBUaGUgRklSU1QgM0QgbGF5ZXIgb2YgYSBzY2VuZSBmcmFtZXMgdGhlIG9yYml0IGNhbWVyYTsgZXZlcnkgbGF0ZXIgb25lIGxlYXZlcyB0aGVcbiAgICAgICAgICAgIC8vIHBvc2UgYWxvbmUuIEEgc3BhdGlhbCBzY2VuZSBpcyBidWlsdCBmcm9tIHNldmVyYWwgbGF5ZXJzIGFuZCByZWJ1aWx0IGNvbnN0YW50bHkg4oCUXG4gICAgICAgICAgICAvLyByZWNvbG91cmluZyBieSBhIGNsYXNzLCBwaWNraW5nIGEgZ2VuZSwgc3RlcHBpbmcgYSBzZWN0aW9uIOKAlCBhbmQgd2l0aCBuYXBhcmktanMnc1xuICAgICAgICAgICAgLy8gcHJldmlvdXMgdW5jb25kaXRpb25hbCBmcmFtaW5nIGVhY2ggb2YgdGhvc2UgdGhyZXcgYXdheSBhbiBvcmJpdCB0aGUgdXNlciBoYWQgc2V0LlxuICAgICAgICAgICAgLy8gVGhlIHBvc2UgaXQgc25hcHBlZCBiYWNrIHRvIGRlcGVuZGVkIG9uIFdISUNIIGxheWVyIHdhcyByZWJ1aWx0LCBzbyBpc29sYXRpbmcgb25lXG4gICAgICAgICAgICAvLyBzZWN0aW9uIHpvb21lZCB0byB0aGF0IHNlY3Rpb24ncyBib3VuZHMuIGByZXNldEZpdDNEKClgIG9uIGEgZGF0YXNldCBjaGFuZ2UgaXMgd2hhdFxuICAgICAgICAgICAgLy8gbGV0cyB0aGUgbmV4dCBzY2VuZSBmcmFtZSBpdHNlbGYuXG4gICAgICAgICAgICBmaXQzZDogJ29uY2UnLFxuICAgICAgICAgICAgLy8gSW4gdGhlIHNwYXRpYWwgbW9kZXMgYSBwbGFpbiBjbGljayBTRUxFQ1RTIHRoZSBjbGFzcyB1bmRlciB0aGUgY3Vyc29yLFxuICAgICAgICAgICAgLy8gc28gbmFwYXJpJ3MgT1NELXN0eWxlIGNsaWNrLXRvLXpvb20gaXMgdHVybmVkIG9mZiB0aGVyZTogb3RoZXJ3aXNlIG9uZVxuICAgICAgICAgICAgLy8gY2xpY2sgd291bGQgYm90aCBzZWxlY3QgYSBjbGFzcyBhbmQgem9vbSAyeCBhYm91dCB0aGUgY3Vyc29yLCBhbmQgdGhlXG4gICAgICAgICAgICAvLyB6b29tIHdvdWxkIHRoZW4gaGFsdmUgdGhlIHBpeGVsIHJhZGl1cyB0aGUgbmV4dCBjbGljayBoaXQtdGVzdHMgd2l0aC5cbiAgICAgICAgICAgIC8vIFpvb21pbmcgaXMgc3RpbGwgb24gdGhlIHdoZWVsLCB0aGUgem9vbSBidXR0b25zIGFuZCB0aGUgem9vbS1ib3ggdG9vbC5cbiAgICAgICAgICAgIC4uLihpc1NwYXRpYWxPbWljcyhwbG90VHlwZSkgfHwgaXNTcGF0aWFsT21pY3MzZChwbG90VHlwZSkgPyB7IGNsaWNrWm9vbUZhY3RvcjogMCB9IDoge30pLFxuICAgICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIHRoaXMudmlld2VyID0gdmlld2VyO1xuICAgICAgYXdhaXQgdmlld2VyLnJlYWR5O1xuICAgICAgaWYgKHNjZW5lLmFib3J0ZWQpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gTm8gbG9hZGVkIGltYWdlOiBhbiBpbWFnZS1sZXNzIHNwYXRpYWwgZGF0YXNldCBvcGVuZWQgYmVmb3JlIGFueSBpbWFnZSAodGhlIHZpc3VhbGl6ZXInc1xuICAgICAgLy8gcGxvdFNwYXRpYWxXaXRob3V0SW1hZ2UpIOKAlCB0aGUgb2JzZXJ2YXRpb25zIGFsb25lLlxuICAgICAgdGhpcy5zY2VuZSA9IHRoaXMuY3JlYXRlU2NlbmUocGxvdFR5cGUsIHRoaXMuc2NlbmVDb250ZXh0KHZpZXdlciwgaG9zdCwgY2FudmFzKSwgaW5mbywgaW1hZ2VMb2FkZWQgPT0gbnVsbCk7XG4gICAgICAvLyBBbm90aGVyIGltYWdlJ3Mgc3VyZmFjZXMgd291bGQgbGFuZCBpbiB0aGlzIHZvbHVtZSdzIGZyYW1lIGF0IHRoZSB3cm9uZyBzaXplOiBkcm9wIHRoZW0uXG4gICAgICBpZiAoaW5mbz8uZmlsZU5hbWUgIT09IHRoaXMucmVnaW9uTWVzaGVzSW1hZ2UpIHRoaXMucmVnaW9uTWVzaGVzID0gW107XG4gICAgICB0aGlzLnNjZW5lLnNldFJlZ2lvbk1lc2hlcz8uKHRoaXMucmVnaW9uTWVzaGVzKTtcbiAgICAgIHRoaXMuc2NlbmUuc2V0UmVnaW9uSGlnaGxpZ2h0Py4odGhpcy5yZWdpb25IaWdobGlnaHQpO1xuICAgICAgdGhpcy5zY2VuZS5zZXRSZWdpb25IaWRkZW4/Lih0aGlzLnJlZ2lvbkhpZGRlbik7XG4gICAgICB0aGlzLnNjZW5lLnNldFJlZ2lvbnNUaHJvdWdoVm9sdW1lPy4odGhpcy5yZWdpb25zVGhyb3VnaFZvbHVtZSk7XG4gICAgICB0aGlzLnNjZW5lLnNldFNsaWNlUGxhbmVzPy4odGhpcy5zbGljZVBsYW5lcyk7XG4gICAgICBhd2FpdCB0aGlzLnNjZW5lLm1vdW50KCk7XG4gICAgICB0aGlzLnRvb2xzLnNjaGVkdWxlUmVhZGJhY2soKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW25hcGFyaS1qc10gcGxvdCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIHNjZW5lIGEgcGxvdCB0eXBlIG1vdW50cy4gKi9cbiAgcHJpdmF0ZSBjcmVhdGVTY2VuZShcbiAgICBwbG90VHlwZTogUGxvdFR5cGUsXG4gICAgY3R4OiBTY2VuZUNvbnRleHQsXG4gICAgaW5mbzogSUltYWdlSW5mbyB8IHVuZGVmaW5lZCxcbiAgICBub0ltYWdlOiBib29sZWFuLFxuICApOiBOYXBhcmlTY2VuZSB7XG4gICAgaWYgKGlzU3BhdGlhbE9taWNzM2QocGxvdFR5cGUpKSByZXR1cm4gbmV3IFNwYXRpYWwzZFNjZW5lKGN0eCwgdGhpcy5zcGF0aWFsLCBpbmZvKTtcbiAgICBpZiAoaXNTcGF0aWFsT21pY3MocGxvdFR5cGUpKSByZXR1cm4gbmV3IFNwYXRpYWwyZFNjZW5lKGN0eCwgdGhpcy5zcGF0aWFsLCBub0ltYWdlKTtcbiAgICBpZiAoaXNOYXBhcmlTY2F0dGVyKHBsb3RUeXBlKSkgcmV0dXJuIG5ldyBTY2F0dGVyUmVnaW9uc1NjZW5lKGN0eCk7XG4gICAgaWYgKGlzTmFwYXJpU2NhdHRlcjNkKHBsb3RUeXBlKSkgcmV0dXJuIG5ldyBTY2F0dGVyM2RTY2VuZShjdHgsIGluZm8pO1xuICAgIGlmIChpc05hcGFyaVN1cmZhY2UocGxvdFR5cGUpKSByZXR1cm4gbmV3IFN1cmZhY2VTY2VuZShjdHgpO1xuICAgIGlmIChpc05hcGFyaTNkKHBsb3RUeXBlKSkgcmV0dXJuIG5ldyBWb2x1bWVTY2VuZShjdHgsIGluZm8sIGlzTmFwYXJpSXNvc3VyZmFjZShwbG90VHlwZSkgPyAnaXNvJyA6ICdtaXAnKTtcbiAgICByZXR1cm4gbmV3IEltYWdlMmRTY2VuZShjdHgpO1xuICB9XG5cbiAgLyoqIFNob3cvaGlkZSB0aGUgb3ZlcnZpZXcgbmF2aWdhdG9yIChzYW1lIHNldHRpbmcgYXMgT1NEJ3MpLiAqL1xuICBzZXROYXZpZ2F0b3JWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNldHRpbmdzLm5hdmlnYXRvclZpc2libGUgPSB2aXNpYmxlO1xuICAgIHRoaXMuc2NlbmU/LnNldE5hdmlnYXRvclZpc2libGU/Lih2aXNpYmxlKTtcbiAgfVxuXG4gIC8qKiBPYnNlcnZhdGlvbnMgcHJvamVjdGVkIHRvIGNhbnZhcyBwaXhlbHMgdW5kZXIgdGhlIDNEIGNhbWVyYSAodGhlIHNwYXRpYWwgM0QgY2xvdWQpLCBpbmRleGVkXG4gICAqICBieSBvYnNlcnZhdGlvbiB3aXRoIE5hTiBmb3IgYW55IG5vdCBkcmF3bjsgbnVsbCB3aGVuIG5vIGNsb3VkIGlzIG1vdW50ZWQuICovXG4gIGdldFNwYXRpYWxTY3JlZW5Qcm9qZWN0aW9uKG9iczogU3BhdGlhbE9ic2VydmF0aW9ucyk6IEZsb2F0MzJBcnJheSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNjZW5lPy5zY3JlZW5Qcm9qZWN0aW9uPy4ob2JzKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqIFRoZSBpZHMgb2YgdGhlIHJlZ2lvbnMgZHJhd24gb3ZlciB0aGUgM0QgY2xvdWQgaW4gc2NyZWVuIHNwYWNlIChpdHMgbGFzc29zKTsgW10gaW4gMkQuIEV2ZXJ5XG4gICAqICBvdGhlciByZWdpb24gaW4gdGhlIHN0b3JlIGlzIGluIGltYWdlIHNwYWNlLCBhbmQgbWVhbnMgbm90aGluZyBhdCBjYW52YXMgcGl4ZWxzLiAqL1xuICBnZXRTcGF0aWFsTGFzc29JZHMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnRvb2xzLnJlZ2lvbk92ZXJsYXk/Lm93blJlZ2lvbklkcygpID8/IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXRDYW1lcmFTb29uKCk6IHZvaWQge1xuICAgIGNvbnN0IHJ1biA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLnZpZXdlciAmJiB0aGlzLmNhbnZhcyAmJiB0aGlzLmltYWdlVyA+IDAgJiYgdGhpcy5pbWFnZUggPiAwKSB7XG4gICAgICAgIHRoaXMudmlld2VyLmNhbWVyYS5maXQoXG4gICAgICAgICAgdGhpcy5pbWFnZVcsXG4gICAgICAgICAgdGhpcy5pbWFnZUgsXG4gICAgICAgICAgdGhpcy5jYW52YXMuY2xpZW50V2lkdGggfHwgdGhpcy5pbWFnZVcsXG4gICAgICAgICAgdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0IHx8IHRoaXMuaW1hZ2VILFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicpIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocnVuKSk7XG4gICAgZWxzZSBydW4oKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbG90bHktc3BlY2lmaWM7IGhvc3QgcmUtZHJpdmVzIHBsb3QoKSBmcm9tIGl0cyBpbWFnZSBzdHJlYW0uICovXG4gIHJlbG9hZEFuZFBsb3QoKTogdm9pZCB7XG4gICAgLyogbm8tb3AgKi9cbiAgfVxuXG4gIC8qKiBTaG93IGBtZXNzYWdlYCBvbiB0aGUgY2FudmFzJ3MgbG9hZGluZyBiYWRnZSB1bnRpbCB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gaXMgY2FsbGVkLiAqL1xuICBiZWdpblRhc2sobWVzc2FnZTogc3RyaW5nKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuYmFkZ2UuYmVnaW5UYXNrKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqIFNob3cgdGhlc2UgcmVnaW9uIHJlY29uc3RydWN0aW9ucyBvZiBgaW1hZ2VgIGluIHRoZSB2b2x1bWUgdmlldyAoa2VwdCBmb3IgaXRzIG5leHQgdm9sdW1lIHBsb3QpLiAqL1xuICBzZXRSZWdpb25NZXNoZXMobWVzaGVzOiByZWFkb25seSBSZWdpb25NZXNoM0RbXSwgaW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMucmVnaW9uTWVzaGVzID0gbWVzaGVzO1xuICAgIHRoaXMucmVnaW9uTWVzaGVzSW1hZ2UgPSBpbWFnZTtcbiAgICB0aGlzLnNjZW5lPy5zZXRSZWdpb25NZXNoZXM/LihtZXNoZXMpO1xuICB9XG5cbiAgLyoqIEhpZ2hsaWdodCB0aGUgcmVjb25zdHJ1Y3Rpb25zIG9mIHRoZXNlIGtleXMgKG5vbmU6IGFsbCBhcyB1c3VhbCkuICovXG4gIHNldFJlZ2lvbkhpZ2hsaWdodChrZXlzOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMucmVnaW9uSGlnaGxpZ2h0ID0ga2V5cztcbiAgICB0aGlzLnNjZW5lPy5zZXRSZWdpb25IaWdobGlnaHQ/LihrZXlzKTtcbiAgfVxuXG4gIC8qKiBIaWRlIHRoZSByZWNvbnN0cnVjdGlvbnMgb2YgdGhlc2Uga2V5cyAoa2VwdCBmb3IgdGhlIG5leHQgdm9sdW1lIHBsb3QpLiAqL1xuICBzZXRSZWdpb25IaWRkZW4oa2V5czogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lvbkhpZGRlbiA9IGtleXM7XG4gICAgdGhpcy5zY2VuZT8uc2V0UmVnaW9uSGlkZGVuPy4oa2V5cyk7XG4gIH1cblxuICAvKiogRHJhdyB0aGUgcmVjb25zdHJ1Y3Rpb25zIHRocm91Z2ggdGhlIHZvbHVtZSByYXRoZXIgdGhhbiBoaWRkZW4gYmVoaW5kIGl0IChrZXB0IGFjcm9zcyBwbG90cykuICovXG4gIHNldFJlZ2lvbnNUaHJvdWdoVm9sdW1lKHRocm91Z2g6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lvbnNUaHJvdWdoVm9sdW1lID0gdGhyb3VnaDtcbiAgICB0aGlzLnNjZW5lPy5zZXRSZWdpb25zVGhyb3VnaFZvbHVtZT8uKHRocm91Z2gpO1xuICB9XG4gIHByaXZhdGUgcmVnaW9uc1Rocm91Z2hWb2x1bWUgPSBmYWxzZTtcblxuICAvKiogU2hvdyB0aGUgcGxhbmVzIG9mIHRoZSBzZWN0aW9ucyBiZXNpZGUgYSB2b2x1bWUgdmlldyAobnVsbDogaGlkZSBvbmUpOyBrZXB0IGFjcm9zcyBwbG90cy4gKi9cbiAgc2V0U2xpY2VQbGFuZXMocGxhbmVzOiBTbGljZVBsYW5lcyk6IHZvaWQge1xuICAgIHRoaXMuc2xpY2VQbGFuZXMgPSBwbGFuZXM7XG4gICAgdGhpcy5zY2VuZT8uc2V0U2xpY2VQbGFuZXM/LihwbGFuZXMpO1xuICB9XG5cbiAgLyoqIEEgc2VjdGlvbidzIHBsYW5lIGRyYWdnZWQgaW4gdGhlIHZvbHVtZSB2aWV3LCB0byBgdmFsdWVgIGFsb25nIGl0cyBheGlzIChpbWFnZSBweCwgb3IgYSBzbGljZSkuICovXG4gIGdldFNsaWNlUGxhbmVNb3ZlJCgpOiBPYnNlcnZhYmxlPHsgYXhpczogUGxhbmVBeGlzOyB2YWx1ZTogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gdGhpcy5zbGljZVBsYW5lTW92ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKiogVGhlIHZvbHVtZSBvbiBzY3JlZW4sIGFzIGFzc2VtYmxlZCAoc2VlIFZvbHVtZVNjZW5lLnZvbHVtZVZveGVscyk7IG51bGwgb3V0c2lkZSBhIHZvbHVtZSB2aWV3LiAqL1xuICB2b2x1bWVWb3hlbHMoKTogVm9sdW1lVm94ZWxzT25TY3JlZW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zY2VuZT8udm9sdW1lVm94ZWxzPy4oKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqIEEgcmVjb25zdHJ1Y3Rpb24gY2xpY2tlZCB3aXRoIHRoZSBzZWxlY3Rpb24gdG9vbCAoaXRzIGtleSksIG9yIHRoZSB2b2x1bWUgYmVzaWRlIHRoZW0gKG51bGwpLiAqL1xuICBnZXRSZWdpb25NZXNoUGljayQoKTogT2JzZXJ2YWJsZTx7IGtleTogc3RyaW5nIHwgbnVsbDsgYWRkaXRpdmU6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybiB0aGlzLnJlZ2lvbk1lc2hQaWNrJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKiBJbWFnZSBweCBwZXIgdm94ZWwgb2YgdGhlIHZvbHVtZSBvbiBzY3JlZW4sIGluLXBsYW5lOyBudWxsIG91dHNpZGUgYSB2b2x1bWUgdmlldy4gKi9cbiAgcmVnaW9uVm94ZWxTdGVwKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNjZW5lPy52b3hlbFN0ZXA/LigpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRW5kIHRoZSBtb3VudGVkIHNjZW5lOiBhYm9ydCBpdHMgbGlmZXRpbWUgKGl0cyBkZXNjcmlwdG9yIHBvbGwsIHRpbGUgY291bnRzLCBmcmFtZSBsb2FkaW5nIGFuZFxuICAgKiBhd2FpdHMpIGFuZCBkaXNwb3NlIGl0IOKAlCBpdHMgbGF5ZXJzLCBrZXlzLCBzdWJzY3JpcHRpb25zIGFuZCBsaXN0ZW5lcnMgZ28gd2l0aCBpdCwgc28gdGhlIG5leHRcbiAgICogcGxvdCBjYW4gbmV2ZXIgaW5oZXJpdCBhbiBcImFscmVhZHkgYnVpbHRcIiBrZXkgKE5BUEFSSS1TVkMtMSkg4oCUIHRoZW4gdGVhciB0aGUgdmlld2VyIGRvd24uXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcuYWJvcnQoKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5saWZldGltZS5hYm9ydCgpO1xuICAgIHRoaXMubGlmZXRpbWUgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5zY2VuZT8uZGlzcG9zZSgpO1xuICAgIHRoaXMuc2NlbmUgPSBudWxsO1xuICAgIHRoaXMuYmFkZ2UucmVzZXQoKTtcbiAgICB0aGlzLnRvb2xzLnRlYXJkb3duKCk7XG4gICAgdGhpcy50aWxlQ2xpZW50LnN0YXJ0U2NlbmUodGhpcy5saWZldGltZS5zaWduYWwpO1xuICAgIHRoaXMudmlld2VyPy5kaXNwb3NlKCk7XG4gICAgdGhpcy52aWV3ZXIgPSBudWxsO1xuICAgIGlmICh0aGlzLmNhbnZhcyAmJiB0aGlzLmhvc3Q/LmNvbnRhaW5zKHRoaXMuY2FudmFzKSkgdGhpcy5ob3N0LnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKTtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBsb3QgYXJlYSBjaGFuZ2VkIHNpemUgKHRoZSBzbGljZSBlZGl0b3Igc3BsaXQgaXQsIGEgZGl2aWRlciBtb3ZlZCk6IGZpdCB0aGUgY2FudmFzLCB3aG9zZVxuICAgKiBoZWlnaHQgd2FzIGZpeGVkIGF0IHBsb3QgdGltZSwgdG8gaXQgYWdhaW4uXG4gICAqL1xuICByZWxheW91dChfdHJ1ZUltYWdlU2l6ZT86IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgeyBjYW52YXMsIGhvc3QgfSA9IHRoaXM7XG4gICAgaWYgKGNhbnZhcyAmJiBob3N0KSB7XG4gICAgICAvLyBMZXQgdGhlIGhvc3QgdGFrZSBpdHMgaGVpZ2h0IGZyb20gdGhlIGxheW91dCwgbm90IGZyb20gdGhlIGNhbnZhcyBpbnNpZGUgaXQuXG4gICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gJzBweCc7XG4gICAgICBjb25zdCBoZWlnaHQgPSBob3N0LmNsaWVudEhlaWdodDtcbiAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgPiAwID8gYCR7aGVpZ2h0fXB4YCA6ICcxMDAlJztcbiAgICB9XG4gICAgdGhpcy52aWV3ZXI/LnJlcXVlc3RSZW5kZXIoKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbG90bHktc3BlY2lmaWMgYXhpcyByZXNldC4gKi9cbiAgcmVzZXRBeGVzKCk6IHZvaWQge1xuICAgIHRoaXMuZml0Q2FtZXJhU29vbigpO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIFBsb3RseS1zcGVjaWZpYyBhdXRvc2NhbGUuICovXG4gIGF1dG9zY2FsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpdENhbWVyYVNvb24oKTtcbiAgICB0aGlzLmF1dG9zY2FsZUV2ZW50JC5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICB6b29tSW4oKTogdm9pZCB7XG4gICAgdGhpcy56b29tQnkoWk9PTV9CVVRUT05fU1RFUCk7XG4gIH1cblxuICB6b29tT3V0KCk6IHZvaWQge1xuICAgIHRoaXMuem9vbUJ5KDEgLyBaT09NX0JVVFRPTl9TVEVQKTtcbiAgfVxuXG4gIC8qKiBab29tIGJ5IGBmYWN0b3JgICg+IDEgPSBpbikgb24gd2hpY2hldmVyIGNhbWVyYSBpcyBsaXZlOiB0aGUgMkQgY2FtZXJhJ3Mgem9vbSwgb3Ig4oCUIGluIGEgM0RcbiAgICogIHNjZW5lLCB3aGVyZSB0aGF0IHdvdWxkIGNoYW5nZSBub3RoaW5nIHZpc2libGUg4oCUIHRoZSBvcmJpdCBjYW1lcmEncyBkaXN0YW5jZS4gKi9cbiAgcHJpdmF0ZSB6b29tQnkoZmFjdG9yOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gdGhpcy52aWV3ZXI7XG4gICAgaWYgKCF2KSByZXR1cm47XG4gICAgaWYgKHYuZGltcy5uZGlzcGxheSA9PT0gMylcbiAgICAgIHYuY2FtZXJhM2Quem9vbUJ5KDEgLyBmYWN0b3IpOyAvLyB6b29tQnkgc2NhbGVzIHRoZSBkaXN0YW5jZVxuICAgIGVsc2Ugdi5jYW1lcmEuem9vbSA9IHYuY2FtZXJhLnpvb20gKiBmYWN0b3I7XG4gIH1cblxuICBzZXREcmFnTW9kZShfbW9kZTogc3RyaW5nIHwgZmFsc2UpOiB2b2lkIHtcbiAgICAvLyBOby1vcDogcGFuIGFuZCB6b29tIGFyZSBhbHdheXMgdGhlIG5hcGFyaSBjYW1lcmEncyBkZWZhdWx0IGdlc3R1cmVzLCBhbmQgcGFuL3pvb20gZ2F0aW5nIGZvclxuICAgIC8vIGRyYXdpbmcgaXMgb3duZWQgYnkgdGhlIHJlZ2lvbiBvdmVybGF5J3Mgc2V0TW9kZSAoc2V0Q29udHJvbHNFbmFibGVkKS4gVG9nZ2xpbmcgY29udHJvbHMgaGVyZVxuICAgIC8vIHdvdWxkIGZpZ2h0IHRoYXQg4oCUIHRoZSBob3N0IGNhbGxzIHNldERyYWdNb2RlKGZhbHNlKSBhbG9uZ3NpZGUgb3ZlcmxheS5zZXRNb2RlKDx0b29sPikuXG4gIH1cblxuICBzZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ3MuaW1hZ2VTbW9vdGhpbmcgPSBlbmFibGVkO1xuICAgIC8vIEFwcGx5IGxpdmUgdG8gdGhlIHJlbmRlcmVkIGltYWdlIGxheWVyczsgYmFrZWQgaW50byB0aGUgbmV4dCByZW5kZXIgdG9vLlxuICAgIHRoaXMuc2NlbmU/LnNldEltYWdlU21vb3RoaW5nPy4oZW5hYmxlZCk7XG4gIH1cblxuICBzZXRTaG93U3RhY2soX3Nob3dzdGFjazogYm9vbGVhbik6IHZvaWQge1xuICAgIC8qIHN0YWNrIG5hdmlnYXRlZCB2aWEgc2V0WkluZGV4ICovXG4gIH1cblxuICBzZXRaSW5kZXgoekluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkZWQpIHRoaXMubG9hZGVkLnogPSB6SW5kZXg7XG4gICAgaWYgKCF0aGlzLnZpZXdlcikgcmV0dXJuO1xuICAgIC8vIERpc3BhdGNoIG9uIFdIQVQgSVMgTU9VTlRFRCwgbm90IG9uIHdoaWNoIGxheWVyIGhhbmRsZSBoYXBwZW5zIHRvIGJlIG5vbi1udWxsOiBhIHN1cmZhY2VcbiAgICAvLyBzdGlsbCBwcmVsb2FkaW5nIChvciB3aG9zZSBmaXJzdCBidWlsZCBmYWlsZWQpIGhhcyBubyBsYXllciB5ZXQsIGFuZCBhIDNEIHNjYXR0ZXIgb3IgY2xvdWRcbiAgICAvLyBoYXMgbm9uZSBvZiB0aGVtIOKAlCBhbmQgYm90aCB1c2VkIHRvIGZhbGwgdGhyb3VnaCB0byB0aGUgMkQgcmVuZGVyIChOQVBBUkktU1ZDLTkpLlxuICAgIHRoaXMuc2NlbmU/LnNldFooekluZGV4KTtcbiAgfVxuXG4gIHNldFN0YWNrTG9hZGluZyhzdGFja0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnN0YWNrTG9hZGluZyQubmV4dChzdGFja0xvYWRpbmcpO1xuICB9XG5cbiAgLyoqIENhbmNlbCBpbi1mbGlnaHQgZnJhbWUgbG9hZGluZzogYWJvcnQge0BsaW5rIGxvYWRpbmd9IHNvIHRoZSB2b2x1bWUtYXNzZW1ibHkgLyBzdXJmYWNlXG4gICAqICBwcmVsb2FkIHdvcmtlcnMgc3RvcCBmZXRjaGluZyBtb3JlIGZyYW1lcywgYW5kIGNsZWFyIHRoZSBsb2FkaW5nIGZsYWcgKyBwcm9ncmVzcy4gKi9cbiAgY2FuY2VsTG9hZGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcuYWJvcnQoKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5zdGFja0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuc3RhY2tMb2FkaW5nUHJvZ3Jlc3MkLm5leHQoMCk7XG4gIH1cblxuICBpc1N0YWNrTG9hZGluZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFja0xvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0U3RhY2tMb2FkaW5nUHJvZ3Jlc3MoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFja0xvYWRpbmdQcm9ncmVzcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRUcnVlSW1hZ2VTaXplKCk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmltYWdlVyA+IDAgJiYgdGhpcy5pbWFnZUggPiAwID8geyB3aWR0aDogdGhpcy5pbWFnZVcsIGhlaWdodDogdGhpcy5pbWFnZUggfSA6IG51bGw7XG4gIH1cblxuICBnZXRDdXJyZW50SW1hZ2UoKTogUHJvbWlzZTxJbWFnZSB8IG51bGw+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgZ2V0RGlzcGxheWVkUGl4ZWxEYXRhKCk6IFBpeGVsRGF0YSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRvb2xzLmxhc3RQaXhlbHM7XG4gIH1cblxuICBnZXREaXNwbGF5ZWRTb3VyY2VSZWN0KCk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBjb25zdCB2ID0gdGhpcy52aWV3ZXI7XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0VHJ1ZUltYWdlU2l6ZSgpO1xuICAgIGlmICghdiB8fCAhc2l6ZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgciA9IHYudmlzaWJsZVdvcmxkUmVjdCgpO1xuICAgIGNvbnN0IHggPSBNYXRoLm1heCgwLCByLngpO1xuICAgIGNvbnN0IHkgPSBNYXRoLm1heCgwLCByLnkpO1xuICAgIHJldHVybiB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHdpZHRoOiBNYXRoLm1pbihzaXplLndpZHRoLCByLnggKyByLndpZHRoKSAtIHgsXG4gICAgICBoZWlnaHQ6IE1hdGgubWluKHNpemUuaGVpZ2h0LCByLnkgKyByLmhlaWdodCkgLSB5LFxuICAgIH07XG4gIH1cblxuICBkb3dubG9hZEltYWdlKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5leHBvcnRDb21wb3NpdGUoKTtcbiAgfVxuXG4gIC8qKiBOby1vcDogdGhlIG1vdW50ZWQgc2NlbmUgaXMgZml4ZWQgcGVyIHtAbGluayBwbG90fTsgYSBuZXcgcGxvdCB0eXBlIHRha2VzIGEgcmUtcGxvdC4gKi9cbiAgc2V0UGxvdFR5cGUoX3Bsb3RUeXBlOiBQbG90VHlwZSk6IHZvaWQge1xuICAgIC8qIHRoZSBzY2VuZSBpcyBjaG9zZW4gYnkgcGxvdCgpICovXG4gIH1cblxuICAvKiogTWFwIGEgUGxvdGx5LXN0eWxlIDNEIGRyYWcgbW9kZSBvbnRvIG5hcGFyaS1qcydzIGNhbWVyYSBkcmFnIG1vZGUuICovXG4gIHNldFN1cmZhY2VEcmFnTW9kZShtb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmlld2VyKSByZXR1cm47XG4gICAgdGhpcy52aWV3ZXIuc2V0Q2FtZXJhRHJhZ01vZGUoY2FtZXJhRHJhZ01vZGUobW9kZSkpO1xuICB9XG5cbiAgLyoqIFJlLWZyYW1lIHRoZSAzRCBjYW1lcmEgb24gdGhlIHNjZW5lOiBuYXBhcmktanMgZnJhbWVzIHRoZSB1bmlvbiBvZiBldmVyeSAzRCBsYXllcidzIGJvdW5kc1xuICAgKiAgKHN1cmZhY2UsIHZvbHVtZSwgcG9pbnQgY2xvdWQpLCB3aXRoIHRoZSB2aWV3cG9ydC1hd2FyZSBmcmFtaW5nIGl0cyBhZGRlcnMgdXNlLiAqL1xuICByZXNldFN1cmZhY2VDYW1lcmEoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3ZXI/LmZpdFRvTGF5ZXJzKCk7XG4gICAgdGhpcy52aWV3ZXI/LnJlcXVlc3RSZW5kZXIoKTtcbiAgfVxuXG4gIGdldEF1dG9zY2FsZUV2ZW50KCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmF1dG9zY2FsZUV2ZW50JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGxvdCB0eXBlcyB0aGlzIGJhY2tlbmQgY2FuIG1vdW50IOKAlCBldmVyeSB0eXBlIHtAbGluayBwbG90fSBkaXNwYXRjaGVzIG9uLlxuICAgKlxuICAgKiBDb250cmFjdC1vbmx5IGluIHByb2R1Y3Rpb246IHRoZSByb3V0ZXIgYW5zd2VycyBgZ2V0UGxvdFR5cGVEZXNjcmlwdG9yc2AgZnJvbSB0aGUgUGxvdGx5XG4gICAqIHNlcnZpY2UsIHNvIG5vdGhpbmcgcmVhY2hlcyB0aGlzIG9uZSB0aHJvdWdoIGl0OyBpdCBpcyBrZXB0IGFjY3VyYXRlIGZvciBkaXJlY3QgY2FsbGVycy5cbiAgICovXG4gIGdldFBsb3RUeXBlRGVzY3JpcHRvcnMoKTogUGxvdFR5cGVEZXNjcmlwdG9yW10ge1xuICAgIC8vIFRoZSBXZWJHUFUgbmFwYXJpLWpzIG9wdGlvbnMsIG9mZmVyZWQgYWxvbmdzaWRlIChub3QgcmVwbGFjaW5nKSB0aGUgT1NEL1Bsb3RseSB0eXBlcy5cbiAgICByZXR1cm4gW1xuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLk5BUEFSSV9JTUFHRV0hLFxuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLk5BUEFSSV9TQ0FUVEVSXSEsXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuTkFQQVJJX1NVUkZBQ0VdISxcbiAgICAgIFBMT1RfVFlQRV9ERVNDUklQVE9SU1tQbG90VHlwZS5OQVBBUklfU0NBVFRFUjNEXSEsXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuTkFQQVJJX1ZPTFVNRV0hLFxuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLk5BUEFSSV9JU09TVVJGQUNFXSEsXG4gICAgICAvLyBHYXRlZCBieSBgcmVxdWlyZXNTcGF0aWFsRGF0YWAsIHNvIHRoZSBzZWxlY3RvciBoaWRlcyB0aGVtIHVudGlsIGEgZGF0YXNldCBpcyBwdWJsaXNoZWRcbiAgICAgIC8vICh0aGUgM0Qgb25lIGFsc28gYnkgYHJlcXVpcmVzU3BhdGlhbDNkYCkuXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuU1BBVElBTF9PTUlDU10hLFxuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLlNQQVRJQUxfT01JQ1NfM0RdISxcbiAgICBdO1xuICB9XG5cbiAgLyoqIFRoZSBuYXBhcmkgM0QgZGVjaW1hdGUgZmFjdG9yICgxID0gZnVsbCDigKYgOCA9IOKFmykuIFJlYWQgYnkgdGhlIHRvb2xiYXIgdG8gaW5pdCB0aGUgY29udHJvbC4gKi9cbiAgZ2V0UmVzb2x1dGlvblNjYWxlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucmVzb2x1dGlvblNjYWxlO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgZGVjaW1hdGUgZmFjdG9yIGZvciB0aGUgbmFwYXJpIDNEIHR5cGVzLiBUYWtlcyBlZmZlY3Qgb24gdGhlIG5leHQgKHJlKWxvYWQg4oCUIHRoZSBob3N0XG4gICAqICByZS1wbG90cyBhZnRlciBjYWxsaW5nIHRoaXMsIHNpbmNlIGRlY2ltYXRpb24gY2hhbmdlcyB0aGUgZmV0Y2hlZC9hc3NlbWJsZWQgZGF0YS4gKi9cbiAgc2V0UmVzb2x1dGlvblNjYWxlKHNjYWxlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNldHRpbmdzLnJlc29sdXRpb25TY2FsZSA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoc2NhbGUpKTtcbiAgfVxuXG4gIC8qKiBuYXBhcmktanMgaGFzIHRoZSBuYXZpZ2F0b3IgYW5kIGltYWdlIHNtb290aGluZyB0b28gKGl0cyAyRCB2aWV3cykuICovXG4gIGdldE9zZFZpZXdPcHRpb25zKCk6IElPc2RWaWV3T3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnM7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3T3B0aW9uczogSU9zZFZpZXdPcHRpb25zID0ge1xuICAgIHNldE5hdmlnYXRvclZpc2libGU6ICh2aXNpYmxlKSA9PiB0aGlzLnNldE5hdmlnYXRvclZpc2libGUodmlzaWJsZSksXG4gICAgc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkOiAoZW5hYmxlZCkgPT4gdGhpcy5zZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZW5hYmxlZCksXG4gIH07XG5cbiAgLyoqIFRoZSAzRCBkZWNpbWF0ZSBmYWN0b3IgKHRoZSAzRCB0eXBlcycgUmVzb2x1dGlvbiBjb250cm9sKS4gKi9cbiAgZ2V0Vm9sdW1lUmVzb2x1dGlvbigpOiBJVm9sdW1lUmVzb2x1dGlvbiB7XG4gICAgcmV0dXJuIHRoaXMudm9sdW1lUmVzb2x1dGlvbjtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IHZvbHVtZVJlc29sdXRpb246IElWb2x1bWVSZXNvbHV0aW9uID0ge1xuICAgIGdldDogKCkgPT4gdGhpcy5nZXRSZXNvbHV0aW9uU2NhbGUoKSxcbiAgICBzZXQ6IChzY2FsZSkgPT4gdGhpcy5zZXRSZXNvbHV0aW9uU2NhbGUoc2NhbGUpLFxuICB9O1xuXG4gIC8qKiBXaGVyZSB0aGUgY2FtZXJhIHNldHRsZWQsIGZvciB0aGUgaW50ZW5zaXR5IGluc2V0J3MgcmUtc2FtcGxpbmcuICovXG4gIGdldEludGVuc2l0eVNhbXBsaW5nKCk6IElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMudmlld3BvcnRTb3VyY2U7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3cG9ydFNvdXJjZTogSUludGVuc2l0eVZpZXdwb3J0U291cmNlID0ge1xuICAgIGdldFZpZXdwb3J0Q2hhbmdlJDogKCkgPT4gdGhpcy52aWV3cG9ydENoYW5nZSQuYXNPYnNlcnZhYmxlKCksXG4gIH07XG5cbiAgLy8g4pSA4pSAIElSZWdpb25TdG9yZSArIGNsYXNzaWZpY2F0aW9uIGNvbG91cnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIEluaGVyaXRlZCBmcm9tIEJhc2VTdG9yZVZpc3VhbGl6ZXIg4oCUIHB1cmUgZGVsZWdhdGlvbnMgdG8gdGhlIHNoYXJlZFxuICAvLyBSZWdpb25TdG9yZSAvIFZpc3VhbGl6ZXJTdG9yZSAoaWRlbnRpY2FsIHRvIHRoZSBPU0QgYmFja2VuZCkuXG5cbiAgLy8g4pSA4pSAIElUb29sQ29udHJvbGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gc2V0QWN0aXZlVG9vbCBhbmQgdGhlIHBlci10b29sIHNldHRlcnMgcnVuIGluIEJhc2VTdG9yZVZpc3VhbGl6ZXIgb3ZlciB0aGlzLmNhbnZhc1Rvb2xzOyB0aGVcbiAgLy8gcG9pbnRlciBhbmQgcmVhZGJhY2sgZ2F0aW5nLCBhbmQgdGhlIFNBTSAvIGNlbGxwb3NlIHJ1bnMsIGFyZSB0aGUgdG9vbCBicmlkZ2Uncy5cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYmVmb3JlVG9vbENoYW5nZShuZXh0OiBDYW52YXNUb29sSWQgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHMuYmVmb3JlVG9vbENoYW5nZShuZXh0KTtcbiAgfVxuICBzZWdtZW50UmVjdGFuZ2xlcygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnRvb2xzLnNlZ21lbnRSZWN0YW5nbGVzKCk7XG4gIH1cbiAgc2VnbWVudFJlY3RhbmdsZXNDZWxscG9zZSgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnRvb2xzLnNlZ21lbnRSZWN0YW5nbGVzQ2VsbHBvc2UoKTtcbiAgfVxuICBzZXRTYW1Nb2RlbChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zYW1Ub29sLnNldE1vZGVsKGlkKTtcbiAgICB0aGlzLnNhbVBvaW50VG9vbC5zZXRNb2RlbChpZCk7XG4gIH1cblxuICAvLyDilIDilIAgSURpc3BsYXlPcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBJbmhlcml0ZWQgZnJvbSBCYXNlU3RvcmVWaXN1YWxpemVyIOKAlCBwdXJlIGRlbGVnYXRpb25zIHRvIHRoZSBzaGFyZWRcbiAgLy8gVmlzdWFsaXplclN0b3JlIChpZGVudGljYWwgdG8gdGhlIE9TRCBiYWNrZW5kKS5cblxuICAvLyDilIDilIAgSVZpc3VhbGl6ZXIgY29tcG9zaXRlIG1lbWJlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldFJlZ2lvbk92ZXJsYXkoKTogSVJlZ2lvbk92ZXJsYXkgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50b29scy5yZWdpb25PdmVybGF5O1xuICB9XG4gIGdldElzb3N1cmZhY2VDb250cm9scygpOiBJSXNvc3VyZmFjZUNvbnRyb2xzIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2NlbmU/Lmlzb0NvbnRyb2xzPy4oKSA/PyBudWxsO1xuICB9XG4gIGdldEludGVuc2l0eUNvbnRyb2xzKCk6IElJbnRlbnNpdHlDb250cm9scyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldFN1cmZhY2UzZENvbnRyb2xzKCk6IElTdXJmYWNlM2RDb250cm9scyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNjZW5lPy5zdXJmYWNlM2RDb250cm9scz8uKCkgPz8gbnVsbDtcbiAgfVxuICBnZXRIaXN0b2dyYW0oY2hhbm5lbEluZGV4OiBudW1iZXIsIGJpbnM6IG51bWJlcik6IElIaXN0b2dyYW0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMudmlld2VyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5zY2VuZT8uaGlzdG9ncmFtKGNoYW5uZWxJbmRleCwgYmlucykgPz8gbnVsbDtcbiAgfVxuICBnZXRIaXN0b2dyYW0kKGNoYW5uZWxJbmRleDogbnVtYmVyLCBiaW5zOiBudW1iZXIpOiBPYnNlcnZhYmxlPElIaXN0b2dyYW0gfCBudWxsPiB7XG4gICAgLy8gPjgtYml0IGNoYW5uZWxzOiB0aGUgdHJ1ZSBuYXRpdmUgZGlzdHJpYnV0aW9uIGZyb20gdGhlIHNlcnZlciAodGhlIGRpc3BsYXllZCBwaXhlbHMgYXJlXG4gICAgLy8gOC1iaXQsIHNvIHRoZSBjbGllbnQgaGlzdG9ncmFtIHdvdWxkIGJlIGNsaXBwZWQpLiA4LWJpdCBjaGFubmVscyB1c2UgdGhlIGNsaWVudCBwYXRoLlxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRpbGVDbGllbnQubmF0aXZlSGlzdG9ncmFtJCh0aGlzLmxvYWRlZD8uaW1hZ2VJbmZvLCB0aGlzLmxvYWRlZD8ueiA/PyAwLCBjaGFubmVsSW5kZXgsIGJpbnMpID8/XG4gICAgICBvZih0aGlzLmdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXgsIGJpbnMpKVxuICAgICk7XG4gIH1cblxuICAvKiogU2F2ZSB0aGUgZGlzcGxheWVkIGNvbXBvc2l0ZSBhcyBhIFBORy4gVGhyb3VnaCBmaWxlLXNhdmVyLCB3aGljaCAodW5saWtlIHJldm9raW5nIGFuIG9iamVjdFxuICAgKiAgVVJMIHN0cmFpZ2h0IGFmdGVyIGBhLmNsaWNrKClgKSBkb2VzIG5vdCByYWNlIHRoZSBicm93c2VyJ3MgZG93bmxvYWQuICovXG4gIGV4cG9ydENvbXBvc2l0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gdGhpcy52aWV3ZXI7XG4gICAgaWYgKCF2KSByZXR1cm47XG4gICAgdm9pZCB2XG4gICAgICAuc2NyZWVuc2hvdCgpXG4gICAgICAudGhlbigoYmxvYikgPT4gc2F2ZUFzKGJsb2IsICduYXBhcmktanMucG5nJykpXG4gICAgICAuY2F0Y2goKGVycikgPT4gY29uc29sZS53YXJuKCdbbmFwYXJpLWpzXSBQTkcgZXhwb3J0IGZhaWxlZCcsIGVycikpO1xuICB9XG4gIC8qKiBOYXRpdmUtYml0LWRlcHRoICgxNi8zMi1iaXQpIG11bHRpLWJhbmQgVElGRiBleHBvcnQgdmlhIHRoZSBzZXJ2ZXIgYC9leHBvcnQvdGlmZmAgZW5kcG9pbnQg4oCUXG4gICAqICB0aGUgZGlzcGxheWVkIFBORyBpcyBhbiA4LWJpdCBmaWd1cmUsIHRoaXMgcHJlc2VydmVzIHRoZSB0cnVlIHBpeGVsIHZhbHVlcy4gVmlzaWJsZSBjaGFubmVsc1xuICAgKiAgb25seSAob21pdHRlZCB3aGVuIGFsbCBhcmUgdmlzaWJsZSDihpIgc2VydmVyIGRlZmF1bHQpLiBNaXJyb3JzIHRoZSBPU0QgYmFja2VuZC4gKi9cbiAgYXN5bmMgZXhwb3J0RGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnRpbGVDbGllbnQuZXhwb3J0VGlmZihcbiAgICAgIHRoaXMubG9hZGVkPy56ID8/IDAsXG4gICAgICB0aGlzLnN0b3JlLmN1cnJlbnRDaGFubmVsU3RhdGVzKCksXG4gICAgICB0aGlzLmxvYWRlZD8uZmlsZW5hbWUsXG4gICAgKTtcbiAgfVxuICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cbn1cbiJdfQ==
@@ -12,16 +12,21 @@ export const HANDLE_SIZE = 7;
12
12
  * the draft being drawn and the rubber-band marquee.
13
13
  */
14
14
  export class NapariRegionSvgRenderer {
15
- constructor(svg, store) {
15
+ /**
16
+ * @param draws which regions are this overlay's to draw (default: every one); the others are
17
+ * left out of the shapes and handles, keeping the store's indices
18
+ */
19
+ constructor(svg, store, draws = () => true) {
16
20
  this.svg = svg;
17
21
  this.store = store;
22
+ this.draws = draws;
18
23
  /** Dedicated marquee rect element, updated directly during the drag (no full region redraw). */
19
24
  this.marqueeEl = null;
20
25
  this.renderer = new SvgRegionRenderer(svg, {
21
26
  rectElement: 'rect',
22
27
  styleShape: (el, region, selected) => this.style(el, this.strokeOf(region), selected),
23
28
  decorate: (region, _i, _selected, layer) => this.drawLabel(region, layer),
24
- skip: (region) => !!region.isProfile?.() || store.isClassHidden(region.label),
29
+ skip: (region) => !!region.isProfile?.() || store.isClassHidden(region.label) || !draws(region),
25
30
  });
26
31
  }
27
32
  /** Follow the camera: one transform attribute plus the screen-space elements. */
@@ -37,7 +42,7 @@ export class NapariRegionSvgRenderer {
37
42
  this.renderer.renderOverlay((layer) => {
38
43
  for (const i of selected) {
39
44
  const region = regions[i];
40
- if (region && !region.isProfile?.())
45
+ if (region && !region.isProfile?.() && this.draws(region))
41
46
  this.drawHandles(region, layer);
42
47
  }
43
48
  this.drawDraft(draft, layer);
@@ -191,4 +196,4 @@ export class NapariRegionSvgRenderer {
191
196
  el.setAttribute('vector-effect', 'non-scaling-stroke');
192
197
  }
193
198
  }
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXN2Zy1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9yZWdpb24tb3ZlcmxheS9yZWdpb24tc3ZnLXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUF1QixpQkFBaUIsRUFBRSxLQUFLLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM1RyxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFVBQVUsR0FDWCxNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE1BQU0sTUFBTSxHQUFHLDRCQUE0QixDQUFDO0FBQzVDLHdDQUF3QztBQUN4QyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBZ0I3Qjs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFLbEMsWUFDbUIsR0FBa0IsRUFDbEIsS0FBa0I7UUFEbEIsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQUNsQixVQUFLLEdBQUwsS0FBSyxDQUFhO1FBTHJDLGdHQUFnRztRQUN4RixjQUFTLEdBQTBCLElBQUksQ0FBQztRQU05QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ3pDLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQztZQUNyRixRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUN6RSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDOUUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixTQUFTLENBQUMsTUFBYztRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsMERBQTBEO0lBQzFELE1BQU0sQ0FBQyxPQUEwQixFQUFFLFFBQTJCO1FBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsMEZBQTBGO0lBQzFGLGFBQWEsQ0FBQyxPQUEwQixFQUFFLFFBQTJCLEVBQUUsS0FBa0I7UUFDdkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUN6QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsV0FBVyxDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVU7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELCtDQUErQztJQUMvQyxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVU7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxpQ0FBaUM7SUFDekIsUUFBUSxDQUFDLE1BQWM7UUFDN0IsT0FBTyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksU0FBUyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxtR0FBbUc7SUFDM0YsU0FBUyxDQUFDLE1BQWMsRUFBRSxLQUFrQjtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQy9HLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDM0IscUVBQXFFO1FBQ3JFLElBQUksS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuRCxLQUFLLE1BQU0sSUFBSSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztnQkFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xGLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM3QyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDMUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxzRkFBc0Y7SUFDOUUsV0FBVyxDQUFDLE1BQWMsRUFBRSxLQUFrQjtRQUNwRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTztRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFRLEVBQUU7WUFDbEQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUMzQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbEMsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQzthQUFNLElBQUksQ0FBQyxZQUFZLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtnQkFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUk7b0JBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RSx5RkFBeUY7WUFDekYsMEZBQTBGO1lBQzFGLGlFQUFpRTtZQUNqRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDYixLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQzFELE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbkMsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3BDLElBQUksQ0FBQyxDQUFDLE1BQU07NEJBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3hFLElBQUksQ0FBQyxDQUFDLEtBQUs7NEJBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3hFLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs0RUFDd0U7SUFDaEUsZ0JBQWdCLENBQ3RCLEVBQVUsRUFDVixFQUFVLEVBQ1YsTUFBd0IsRUFDeEIsTUFBYyxFQUNkLEtBQWtCO1FBRWxCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUFFLE9BQU87UUFDakQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLEdBQUcsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxLQUFLLENBQUMsRUFBYyxFQUFFLE1BQWMsRUFBRSxVQUFtQjtRQUMvRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsVUFBVSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3RELE9BQU87UUFDVCxDQUFDO1FBQ0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELHFEQUFxRDtJQUM3QyxTQUFTLENBQUMsS0FBa0IsRUFBRSxLQUFrQjtRQUN0RCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QixLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxVQUFVLENBQ2IsS0FBSyxDQUFDLElBQUksQ0FDUixVQUFVLEVBQ1YsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3ZDLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLEVBQWM7UUFDL0IsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUNuRSxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9seWdvbiwgUmVjdGFuZ2xlLCBSZWdpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmVnaW9uJztcbmltcG9ydCB0eXBlIHsgUmVnaW9uU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9yZWdpb24tc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyByZWdpb25CQm94LCByaW5nSGFuZGxlcywgcmluZ09mIH0gZnJvbSAnLi4vLi4vLi4vcmVnaW9uLW92ZXJsYXkvcmVnaW9uLWdlb21ldHJ5JztcbmltcG9ydCB7IEFmZmluZSwgU2NyZWVuTGF5ZXIsIFN2Z1JlZ2lvblJlbmRlcmVyLCBzdmdFbCB9IGZyb20gJy4uLy4uLy4uL3JlZ2lvbi1vdmVybGF5L3N2Zy1yZWdpb24tcmVuZGVyZXInO1xuaW1wb3J0IHtcbiAgYXBwbHlQYWludCxcbiAgaXNGaWxsZWQsXG4gIHBsYWNlSW5zaWRlTGFiZWwsXG4gIHJlZ2lvbkxhYmVsU3BvdHMsXG4gIHNoYXBlUGFpbnQsXG59IGZyb20gJy4uLy4uLy4uL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1zdHlsZSc7XG5cbmNvbnN0IFNWR19OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4vKiogUmVuZGVyZWQgaGFuZGxlIHNpemUgKHNjcmVlbiBweCkuICovXG5leHBvcnQgY29uc3QgSEFORExFX1NJWkUgPSA3O1xuXG4vKiogQW4gYXhpcy1hbGlnbmVkIGJveCBmcm9tIGEgZHJhZydzIHN0YXJ0IHRvIGl0cyBjdXJyZW50IHBvaW50IChhbnkgb3JkZXIpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmFnQm94IHtcbiAgeDA6IG51bWJlcjtcbiAgeTA6IG51bWJlcjtcbiAgeDE6IG51bWJlcjtcbiAgeTE6IG51bWJlcjtcbn1cblxuLyoqIEEgcmVnaW9uIGJlaW5nIGRyYXduOiBhIHJlY3RhbmdsZSBkcmFnLCBvciBhIGZyZWVoYW5kIC8gY2xpY2stcGxhY2VkIHBhdGguICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbkRyYWZ0IHtcbiAgcmVjdDogRHJhZ0JveCB8IG51bGw7XG4gIHBhdGg6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+IHwgbnVsbDtcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSBuYXBhcmkgcmVnaW9uIG92ZXJsYXkgZHJhd3MsIG92ZXIgdGhlIHNoYXJlZCB7QGxpbmsgU3ZnUmVnaW9uUmVuZGVyZXJ9OiB0aGUgcmVnaW9uc1xuICogaW4gd29ybGQgY29vcmRpbmF0ZXMgKHN0eWxlZCBmcm9tIHRoZSBzdG9yZSdzIGNvbG91cnMsIGxhYmVsbGVkIHdoZW4gbGFiZWxzIGFyZSBvbiksIGFuZCBpblxuICogc2NyZWVuIHNwYWNlIHRoZSBzZWxlY3RlZCByZWdpb25zJyBncmFiIGhhbmRsZXMgKGNvcm5lcnMsIHZlcnRpY2VzLCBiw6l6aWVyIGNvbnRyb2wgcG9pbnRzKSxcbiAqIHRoZSBkcmFmdCBiZWluZyBkcmF3biBhbmQgdGhlIHJ1YmJlci1iYW5kIG1hcnF1ZWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXBhcmlSZWdpb25TdmdSZW5kZXJlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFN2Z1JlZ2lvblJlbmRlcmVyO1xuICAvKiogRGVkaWNhdGVkIG1hcnF1ZWUgcmVjdCBlbGVtZW50LCB1cGRhdGVkIGRpcmVjdGx5IGR1cmluZyB0aGUgZHJhZyAobm8gZnVsbCByZWdpb24gcmVkcmF3KS4gKi9cbiAgcHJpdmF0ZSBtYXJxdWVlRWw6IFNWR1JlY3RFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdmc6IFNWR1NWR0VsZW1lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZTogUmVnaW9uU3RvcmUsXG4gICkge1xuICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgU3ZnUmVnaW9uUmVuZGVyZXIoc3ZnLCB7XG4gICAgICByZWN0RWxlbWVudDogJ3JlY3QnLFxuICAgICAgc3R5bGVTaGFwZTogKGVsLCByZWdpb24sIHNlbGVjdGVkKSA9PiB0aGlzLnN0eWxlKGVsLCB0aGlzLnN0cm9rZU9mKHJlZ2lvbiksIHNlbGVjdGVkKSxcbiAgICAgIGRlY29yYXRlOiAocmVnaW9uLCBfaSwgX3NlbGVjdGVkLCBsYXllcikgPT4gdGhpcy5kcmF3TGFiZWwocmVnaW9uLCBsYXllciksXG4gICAgICBza2lwOiAocmVnaW9uKSA9PiAhIXJlZ2lvbi5pc1Byb2ZpbGU/LigpIHx8IHN0b3JlLmlzQ2xhc3NIaWRkZW4ocmVnaW9uLmxhYmVsKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBGb2xsb3cgdGhlIGNhbWVyYTogb25lIHRyYW5zZm9ybSBhdHRyaWJ1dGUgcGx1cyB0aGUgc2NyZWVuLXNwYWNlIGVsZW1lbnRzLiAqL1xuICBzZXRDYW1lcmEoYWZmaW5lOiBBZmZpbmUpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldENhbWVyYShhZmZpbmUpO1xuICB9XG5cbiAgLyoqIFJlYnVpbGQgdGhlIHJlZ2lvbnMgKHdvcmxkIHNwYWNlKSBhbmQgdGhlaXIgbGFiZWxzLiAqL1xuICByZW5kZXIocmVnaW9uczogcmVhZG9ubHkgUmVnaW9uW10sIHNlbGVjdGVkOiByZWFkb25seSBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyKHJlZ2lvbnMsIHNlbGVjdGVkKTtcbiAgfVxuXG4gIC8qKiBSZWJ1aWxkIHRoZSBzY3JlZW4tc3BhY2Ugb3ZlcmxheSBvbmx5OiB0aGUgc2VsZWN0ZWQgcmVnaW9ucycgaGFuZGxlcyBhbmQgdGhlIGRyYWZ0LiAqL1xuICByZW5kZXJPdmVybGF5KHJlZ2lvbnM6IHJlYWRvbmx5IFJlZ2lvbltdLCBzZWxlY3RlZDogcmVhZG9ubHkgbnVtYmVyW10sIGRyYWZ0OiBSZWdpb25EcmFmdCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyT3ZlcmxheSgobGF5ZXIpID0+IHtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBzZWxlY3RlZCkge1xuICAgICAgICBjb25zdCByZWdpb24gPSByZWdpb25zW2ldO1xuICAgICAgICBpZiAocmVnaW9uICYmICFyZWdpb24uaXNQcm9maWxlPy4oKSkgdGhpcy5kcmF3SGFuZGxlcyhyZWdpb24sIGxheWVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZHJhd0RyYWZ0KGRyYWZ0LCBsYXllcik7XG4gICAgfSk7XG4gIH1cblxuICAvKiogU2hvdyB0aGUgbWFycXVlZSBvdmVyIHN2Zy1sb2NhbCBjb3JuZXJzIGAobHgsIGx5KWDigJNgKHJ4LCByeSlgLCBjcmVhdGluZyBpdCBvbiBmaXJzdCB1c2UuICovXG4gIHNob3dNYXJxdWVlKGx4OiBudW1iZXIsIGx5OiBudW1iZXIsIHJ4OiBudW1iZXIsIHJ5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWFycXVlZUVsIHx8ICF0aGlzLm1hcnF1ZWVFbC5wYXJlbnROb2RlKSB7XG4gICAgICB0aGlzLm1hcnF1ZWVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdyZWN0Jyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjNGRhM2ZmJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICcxJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNCAzJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnIzRkYTNmZicpO1xuICAgICAgdGhpcy5tYXJxdWVlRWwuc2V0QXR0cmlidXRlKCdmaWxsLW9wYWNpdHknLCAnMC4xMicpO1xuICAgICAgdGhpcy5tYXJxdWVlRWwuc2V0QXR0cmlidXRlKCd2ZWN0b3ItZWZmZWN0JywgJ25vbi1zY2FsaW5nLXN0cm9rZScpO1xuICAgICAgdGhpcy5zdmcuYXBwZW5kQ2hpbGQodGhpcy5tYXJxdWVlRWwpO1xuICAgIH1cbiAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHtseH1gKTtcbiAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3knLCBgJHtseX1gKTtcbiAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7TWF0aC5hYnMocnggLSBseCl9YCk7XG4gICAgdGhpcy5tYXJxdWVlRWwuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtNYXRoLmFicyhyeSAtIGx5KX1gKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgdGhlIG1hcnF1ZWUgZWxlbWVudCBmcm9tIHRoZSBTVkcuICovXG4gIGNsZWFyTWFycXVlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXJxdWVlRWw/LnBhcmVudE5vZGUpIHRoaXMubWFycXVlZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYXJxdWVlRWwpO1xuICAgIHRoaXMubWFycXVlZUVsID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBBIHJlZ2lvbidzIG91dGxpbmUgY29sb3VyLiAqL1xuICBwcml2YXRlIHN0cm9rZU9mKHJlZ2lvbjogUmVnaW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVnaW9uLmNvbG9yIHx8IHRoaXMuc3RvcmUuZ2V0U2hhcGVDb2xvcigpIHx8ICcjMDBmZmZmJztcbiAgfVxuXG4gIC8qKiBEcmF3IGEgcmVnaW9uJ3MgY2xhc3NpZmljYXRpb24gbGFiZWwgYXQgaXRzIHRvcC1sZWZ0LCB3aGVuIGxhYmVscyBhcmUgZW5hYmxlZCAobWF0Y2hlcyBPU0QpLiAqL1xuICBwcml2YXRlIGRyYXdMYWJlbChyZWdpb246IFJlZ2lvbiwgbGF5ZXI6IFNjcmVlbkxheWVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0b3JlLmdldFNob3dTaGFwZUxhYmVsKCkgfHwgcmVnaW9uLmlzUHJvZmlsZT8uKCkgfHwgdGhpcy5zdG9yZS5pc0xhYmVsQ292ZXJlZChyZWdpb24ubGFiZWwpKSByZXR1cm47XG4gICAgY29uc3QgbGFiZWwgPSByZWdpb24ubGFiZWw7XG4gICAgLy8gVGhlIGZpbGxlZCAoYXRsYXMpIGxvb2sgbGFiZWxzIGVhY2ggcGFydCBpbnNpZGUgaXQsIHdoZXJlIGl0IGZpdHMuXG4gICAgaWYgKGxhYmVsICYmIGlzRmlsbGVkKHRoaXMuc3RvcmUuZ2V0UmVnaW9uU3R5bGUoKSkpIHtcbiAgICAgIGZvciAoY29uc3Qgc3BvdCBvZiByZWdpb25MYWJlbFNwb3RzKHJlZ2lvbikpIHBsYWNlSW5zaWRlTGFiZWwobGF5ZXIsIGxhYmVsLCBzcG90KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmIgPSBsYWJlbCA/IHJlZ2lvbkJCb3gocmVnaW9uKSA6IG51bGw7XG4gICAgaWYgKCFsYWJlbCB8fCAhYmIpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gc3ZnRWwoJ3RleHQnKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjZmZmJyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjMDAwJyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICczJyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3BhaW50LW9yZGVyJywgJ3N0cm9rZScpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCdmb250JywgJzEycHggc2Fucy1zZXJpZicpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgdGV4dC50ZXh0Q29udGVudCA9IGxhYmVsO1xuICAgIGxheWVyLmF0KHRleHQsIGJiLngwLCBiYi55MCwgeyBkeTogLTQgfSk7XG4gIH1cblxuICAvKiogRHJhdyBncmFiIGhhbmRsZXMgZm9yIGEgc2VsZWN0ZWQgcmVnaW9uOiByZWN0YW5nbGUgY29ybmVycyBvciBwb2x5Z29uIHZlcnRpY2VzLiAqL1xuICBwcml2YXRlIGRyYXdIYW5kbGVzKHJlZ2lvbjogUmVnaW9uLCBsYXllcjogU2NyZWVuTGF5ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBiID0gcmVnaW9uLmJvdW5kcztcbiAgICBpZiAoIWIpIHJldHVybjtcbiAgICBjb25zdCBzdHJva2UgPSB0aGlzLnN0cm9rZU9mKHJlZ2lvbik7XG4gICAgY29uc3QgaGFuZGxlID0gKGltZ1g6IG51bWJlciwgaW1nWTogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBlbCA9IHN2Z0VsKCdyZWN0Jyk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7SEFORExFX1NJWkV9YCk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGAke0hBTkRMRV9TSVpFfWApO1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdmaWxsJywgJyNmZmYnKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgc3Ryb2tlKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgJzEuNScpO1xuICAgICAgbGF5ZXIuYXQoZWwsIGltZ1gsIGltZ1ksIHsgZHg6IC1IQU5ETEVfU0laRSAvIDIsIGR5OiAtSEFORExFX1NJWkUgLyAyIH0pO1xuICAgIH07XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBSZWN0YW5nbGUpIHtcbiAgICAgIGhhbmRsZShiLngsIGIueSk7XG4gICAgICBoYW5kbGUoYi54ICsgYi53aWR0aCwgYi55KTtcbiAgICAgIGhhbmRsZShiLngsIGIueSArIGIuaGVpZ2h0KTtcbiAgICAgIGhhbmRsZShiLnggKyBiLndpZHRoLCBiLnkgKyBiLmhlaWdodCk7XG4gICAgfSBlbHNlIGlmIChiIGluc3RhbmNlb2YgUG9seWdvbikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiLm5wb2ludHM7IGkrKykgaGFuZGxlKGIueHBvaW50c1tpXSwgYi55cG9pbnRzW2ldKTtcbiAgICAgIGZvciAoY29uc3QgcmluZyBvZiBiLmhvbGVzID8/IFtdKSBmb3IgKGNvbnN0IFtoeCwgaHldIG9mIHJpbmcpIGhhbmRsZShoeCwgaHkpO1xuICAgICAgLy8gQmV6aWVyIHJlZ2lvbnMgYWxzbyBleHBvc2UgdGhlaXIgdGFuZ2VudCBjb250cm9sIHBvaW50cyAoY2lyY2xlcykgam9pbmVkIHRvIHRoZSBhbmNob3JcbiAgICAgIC8vIGJ5IGEgdGhpbiBsaW5lLCBtYXRjaGluZyB0aGUgT1NEIG92ZXJsYXkncyBlZGl0YWJsZSBiZXppZXIgaGFuZGxlcy4gU3RvcmVkIGhhbmRsZXMgd2hlblxuICAgICAgLy8gcHJlc2VudCwgZWxzZSB0aGUgQ2F0bXVsbC1Sb20gZGVmYXVsdCB0aGUgY3VydmUgaXMgZHJhd24gd2l0aC5cbiAgICAgIGlmIChiLmJlemllcikge1xuICAgICAgICBmb3IgKGxldCByaW5nID0gLTE7IHJpbmcgPCAoYi5ob2xlcz8ubGVuZ3RoID8/IDApOyByaW5nKyspIHtcbiAgICAgICAgICBjb25zdCB7IHhzLCB5cyB9ID0gcmluZ09mKGIsIHJpbmcpO1xuICAgICAgICAgIHJpbmdIYW5kbGVzKGIsIHJpbmcpLmZvckVhY2goKGgsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChoLmhhc091dCkgdGhpcy5kcmF3QmV6aWVySGFuZGxlKHhzW2ldLCB5c1tpXSwgaC5vdXQsIHN0cm9rZSwgbGF5ZXIpO1xuICAgICAgICAgICAgaWYgKGguaGFzSW4pIHRoaXMuZHJhd0JlemllckhhbmRsZSh4c1tpXSwgeXNbaV0sIGguaW4sIHN0cm9rZSwgbGF5ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIERyYXcgb25lIGJlemllciBjb250cm9sIHBvaW50IGFzIGEgc21hbGwgY2lyY2xlIGNvbm5lY3RlZCB0byBpdHMgYW5jaG9yIGJ5IGEgdGFuZ2VudCBsaW5lLlxuICAgKiAgYGhhbmRsZWAgaXMgdGhlIGNvbnRyb2wgcG9pbnQncyBhYnNvbHV0ZSBwb3NpdGlvbiBpbiBpbWFnZSBzcGFjZS4gKi9cbiAgcHJpdmF0ZSBkcmF3QmV6aWVySGFuZGxlKFxuICAgIGF4OiBudW1iZXIsXG4gICAgYXk6IG51bWJlcixcbiAgICBoYW5kbGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgc3Ryb2tlOiBzdHJpbmcsXG4gICAgbGF5ZXI6IFNjcmVlbkxheWVyLFxuICApOiB2b2lkIHtcbiAgICBpZiAoaGFuZGxlWzBdID09PSBheCAmJiBoYW5kbGVbMV0gPT09IGF5KSByZXR1cm47XG4gICAgY29uc3QgbGluZSA9IGxheWVyLmxpbmUoYXgsIGF5LCBoYW5kbGVbMF0sIGhhbmRsZVsxXSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHN0cm9rZSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICcxJyk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1vcGFjaXR5JywgJzAuNycpO1xuICAgIGNvbnN0IGRvdCA9IHN2Z0VsKCdjaXJjbGUnKTtcbiAgICBkb3Quc2V0QXR0cmlidXRlKCdyJywgYCR7SEFORExFX1NJWkUgLyAyfWApO1xuICAgIGRvdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBzdHJva2UpO1xuICAgIGRvdC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjZmZmJyk7XG4gICAgZG90LnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgJzEnKTtcbiAgICBsYXllci5hdChkb3QsIGhhbmRsZVswXSwgaGFuZGxlWzFdLCB7IHg6ICdjeCcsIHk6ICdjeScgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0eWxlKGVsOiBTVkdFbGVtZW50LCBzdHJva2U6IHN0cmluZywgaXNTZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5zdG9yZS5nZXRSZWdpb25TdHlsZSgpO1xuICAgIGlmIChpc0ZpbGxlZChzdHlsZSkpIHtcbiAgICAgIGFwcGx5UGFpbnQoZWwsIHNoYXBlUGFpbnQoc3Ryb2tlLCBpc1NlbGVjdGVkLCBzdHlsZSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHN0cm9rZSk7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBpc1NlbGVjdGVkID8gJzQnIDogJzInKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBpc1NlbGVjdGVkID8gc3Ryb2tlIDogJ25vbmUnKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsIGlzU2VsZWN0ZWQgPyAnMC4zNScgOiAnMCcpO1xuICB9XG5cbiAgLyoqIERyYXcgdGhlIGluLXByb2dyZXNzIHJlY3RhbmdsZSAvIHBhdGggcHJldmlldy4gKi9cbiAgcHJpdmF0ZSBkcmF3RHJhZnQoZHJhZnQ6IFJlZ2lvbkRyYWZ0LCBsYXllcjogU2NyZWVuTGF5ZXIpOiB2b2lkIHtcbiAgICBpZiAoZHJhZnQucmVjdCkge1xuICAgICAgY29uc3QgeyB4MCwgeTAsIHgxLCB5MSB9ID0gZHJhZnQucmVjdDtcbiAgICAgIGNvbnN0IGVsID0gc3ZnRWwoJ3JlY3QnKTtcbiAgICAgIGxheWVyLnBsYWNlKGVsLCAoZSwgcHJvamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBbbHgsIGx5XSA9IHByb2plY3QoTWF0aC5taW4oeDAsIHgxKSwgTWF0aC5taW4oeTAsIHkxKSk7XG4gICAgICAgIGNvbnN0IFtyeCwgcnldID0gcHJvamVjdChNYXRoLm1heCh4MCwgeDEpLCBNYXRoLm1heCh5MCwgeTEpKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHtseH1gKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3knLCBgJHtseX1gKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7TWF0aC5hYnMocnggLSBseCl9YCk7XG4gICAgICAgIGUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtNYXRoLmFicyhyeSAtIGx5KX1gKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdHlsZURyYWZ0KGVsKTtcbiAgICB9XG4gICAgaWYgKGRyYWZ0LnBhdGggJiYgZHJhZnQucGF0aC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3R5bGVEcmFmdChcbiAgICAgICAgbGF5ZXIucG9seShcbiAgICAgICAgICAncG9seWxpbmUnLFxuICAgICAgICAgIGRyYWZ0LnBhdGgubWFwKChbeCwgeV0pID0+ICh7IHgsIHkgfSkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0eWxlRHJhZnQoZWw6IFNWR0VsZW1lbnQpOiB2b2lkIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHRoaXMuc3RvcmUuZ2V0U2hhcGVDb2xvcigpIHx8ICcjMDBmZmZmJyk7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCAnMicpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsICc0IDMnKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgndmVjdG9yLWVmZmVjdCcsICdub24tc2NhbGluZy1zdHJva2UnKTtcbiAgfVxufVxuIl19
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXN2Zy1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9yZWdpb24tb3ZlcmxheS9yZWdpb24tc3ZnLXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUF1QixpQkFBaUIsRUFBRSxLQUFLLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM1RyxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFVBQVUsR0FDWCxNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE1BQU0sTUFBTSxHQUFHLDRCQUE0QixDQUFDO0FBQzVDLHdDQUF3QztBQUN4QyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBZ0I3Qjs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFLbEM7OztPQUdHO0lBQ0gsWUFDbUIsR0FBa0IsRUFDbEIsS0FBa0IsRUFDbEIsUUFBcUMsR0FBRyxFQUFFLENBQUMsSUFBSTtRQUYvQyxRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQWE7UUFDbEIsVUFBSyxHQUFMLEtBQUssQ0FBMEM7UUFWbEUsZ0dBQWdHO1FBQ3hGLGNBQVMsR0FBMEIsSUFBSSxDQUFDO1FBVzlDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDekMsV0FBVyxFQUFFLE1BQU07WUFDbkIsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFD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QUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN2QyxDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxFQUFjO1FBQy9CLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksU0FBUyxDQUFDLENBQUM7UUFDbkUsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckMsRUFBRSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoQyxFQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvbHlnb24sIFJlY3RhbmdsZSwgUmVnaW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3JlZ2lvbic7XG5pbXBvcnQgdHlwZSB7IFJlZ2lvblN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvcmVnaW9uLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcmVnaW9uQkJveCwgcmluZ0hhbmRsZXMsIHJpbmdPZiB9IGZyb20gJy4uLy4uLy4uL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1nZW9tZXRyeSc7XG5pbXBvcnQgeyBBZmZpbmUsIFNjcmVlbkxheWVyLCBTdmdSZWdpb25SZW5kZXJlciwgc3ZnRWwgfSBmcm9tICcuLi8uLi8uLi9yZWdpb24tb3ZlcmxheS9zdmctcmVnaW9uLXJlbmRlcmVyJztcbmltcG9ydCB7XG4gIGFwcGx5UGFpbnQsXG4gIGlzRmlsbGVkLFxuICBwbGFjZUluc2lkZUxhYmVsLFxuICByZWdpb25MYWJlbFNwb3RzLFxuICBzaGFwZVBhaW50LFxufSBmcm9tICcuLi8uLi8uLi9yZWdpb24tb3ZlcmxheS9yZWdpb24tc3R5bGUnO1xuXG5jb25zdCBTVkdfTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuLyoqIFJlbmRlcmVkIGhhbmRsZSBzaXplIChzY3JlZW4gcHgpLiAqL1xuZXhwb3J0IGNvbnN0IEhBTkRMRV9TSVpFID0gNztcblxuLyoqIEFuIGF4aXMtYWxpZ25lZCBib3ggZnJvbSBhIGRyYWcncyBzdGFydCB0byBpdHMgY3VycmVudCBwb2ludCAoYW55IG9yZGVyKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJhZ0JveCB7XG4gIHgwOiBudW1iZXI7XG4gIHkwOiBudW1iZXI7XG4gIHgxOiBudW1iZXI7XG4gIHkxOiBudW1iZXI7XG59XG5cbi8qKiBBIHJlZ2lvbiBiZWluZyBkcmF3bjogYSByZWN0YW5nbGUgZHJhZywgb3IgYSBmcmVlaGFuZCAvIGNsaWNrLXBsYWNlZCBwYXRoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpb25EcmFmdCB7XG4gIHJlY3Q6IERyYWdCb3ggfCBudWxsO1xuICBwYXRoOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiB8IG51bGw7XG59XG5cbi8qKlxuICogV2hhdCB0aGUgbmFwYXJpIHJlZ2lvbiBvdmVybGF5IGRyYXdzLCBvdmVyIHRoZSBzaGFyZWQge0BsaW5rIFN2Z1JlZ2lvblJlbmRlcmVyfTogdGhlIHJlZ2lvbnNcbiAqIGluIHdvcmxkIGNvb3JkaW5hdGVzIChzdHlsZWQgZnJvbSB0aGUgc3RvcmUncyBjb2xvdXJzLCBsYWJlbGxlZCB3aGVuIGxhYmVscyBhcmUgb24pLCBhbmQgaW5cbiAqIHNjcmVlbiBzcGFjZSB0aGUgc2VsZWN0ZWQgcmVnaW9ucycgZ3JhYiBoYW5kbGVzIChjb3JuZXJzLCB2ZXJ0aWNlcywgYsOpemllciBjb250cm9sIHBvaW50cyksXG4gKiB0aGUgZHJhZnQgYmVpbmcgZHJhd24gYW5kIHRoZSBydWJiZXItYmFuZCBtYXJxdWVlLlxuICovXG5leHBvcnQgY2xhc3MgTmFwYXJpUmVnaW9uU3ZnUmVuZGVyZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBTdmdSZWdpb25SZW5kZXJlcjtcbiAgLyoqIERlZGljYXRlZCBtYXJxdWVlIHJlY3QgZWxlbWVudCwgdXBkYXRlZCBkaXJlY3RseSBkdXJpbmcgdGhlIGRyYWcgKG5vIGZ1bGwgcmVnaW9uIHJlZHJhdykuICovXG4gIHByaXZhdGUgbWFycXVlZUVsOiBTVkdSZWN0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gZHJhd3Mgd2hpY2ggcmVnaW9ucyBhcmUgdGhpcyBvdmVybGF5J3MgdG8gZHJhdyAoZGVmYXVsdDogZXZlcnkgb25lKTsgdGhlIG90aGVycyBhcmVcbiAgICogICAgICAgIGxlZnQgb3V0IG9mIHRoZSBzaGFwZXMgYW5kIGhhbmRsZXMsIGtlZXBpbmcgdGhlIHN0b3JlJ3MgaW5kaWNlc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdmc6IFNWR1NWR0VsZW1lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZTogUmVnaW9uU3RvcmUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkcmF3czogKHJlZ2lvbjogUmVnaW9uKSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZSxcbiAgKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IG5ldyBTdmdSZWdpb25SZW5kZXJlcihzdmcsIHtcbiAgICAgIHJlY3RFbGVtZW50OiAncmVjdCcsXG4gICAgICBzdHlsZVNoYXBlOiAoZWwsIHJlZ2lvbiwgc2VsZWN0ZWQpID0+IHRoaXMuc3R5bGUoZWwsIHRoaXMuc3Ryb2tlT2YocmVnaW9uKSwgc2VsZWN0ZWQpLFxuICAgICAgZGVjb3JhdGU6IChyZWdpb24sIF9pLCBfc2VsZWN0ZWQsIGxheWVyKSA9PiB0aGlzLmRyYXdMYWJlbChyZWdpb24sIGxheWVyKSxcbiAgICAgIHNraXA6IChyZWdpb24pID0+ICEhcmVnaW9uLmlzUHJvZmlsZT8uKCkgfHwgc3RvcmUuaXNDbGFzc0hpZGRlbihyZWdpb24ubGFiZWwpIHx8ICFkcmF3cyhyZWdpb24pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEZvbGxvdyB0aGUgY2FtZXJhOiBvbmUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBwbHVzIHRoZSBzY3JlZW4tc3BhY2UgZWxlbWVudHMuICovXG4gIHNldENhbWVyYShhZmZpbmU6IEFmZmluZSk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0Q2FtZXJhKGFmZmluZSk7XG4gIH1cblxuICAvKiogUmVidWlsZCB0aGUgcmVnaW9ucyAod29ybGQgc3BhY2UpIGFuZCB0aGVpciBsYWJlbHMuICovXG4gIHJlbmRlcihyZWdpb25zOiByZWFkb25seSBSZWdpb25bXSwgc2VsZWN0ZWQ6IHJlYWRvbmx5IG51bWJlcltdKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXIocmVnaW9ucywgc2VsZWN0ZWQpO1xuICB9XG5cbiAgLyoqIFJlYnVpbGQgdGhlIHNjcmVlbi1zcGFjZSBvdmVybGF5IG9ubHk6IHRoZSBzZWxlY3RlZCByZWdpb25zJyBoYW5kbGVzIGFuZCB0aGUgZHJhZnQuICovXG4gIHJlbmRlck92ZXJsYXkocmVnaW9uczogcmVhZG9ubHkgUmVnaW9uW10sIHNlbGVjdGVkOiByZWFkb25seSBudW1iZXJbXSwgZHJhZnQ6IFJlZ2lvbkRyYWZ0KTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJPdmVybGF5KChsYXllcikgPT4ge1xuICAgICAgZm9yIChjb25zdCBpIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IHJlZ2lvbnNbaV07XG4gICAgICAgIGlmIChyZWdpb24gJiYgIXJlZ2lvbi5pc1Byb2ZpbGU/LigpICYmIHRoaXMuZHJhd3MocmVnaW9uKSkgdGhpcy5kcmF3SGFuZGxlcyhyZWdpb24sIGxheWVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZHJhd0RyYWZ0KGRyYWZ0LCBsYXllcik7XG4gICAgfSk7XG4gIH1cblxuICAvKiogU2hvdyB0aGUgbWFycXVlZSBvdmVyIHN2Zy1sb2NhbCBjb3JuZXJzIGAobHgsIGx5KWDigJNgKHJ4LCByeSlgLCBjcmVhdGluZyBpdCBvbiBmaXJzdCB1c2UuICovXG4gIHNob3dNYXJxdWVlKGx4OiBudW1iZXIsIGx5OiBudW1iZXIsIHJ4OiBudW1iZXIsIHJ5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWFycXVlZUVsIHx8ICF0aGlzLm1hcnF1ZWVFbC5wYXJlbnROb2RlKSB7XG4gICAgICB0aGlzLm1hcnF1ZWVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdyZWN0Jyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjNGRhM2ZmJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICcxJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNCAzJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnIzRkYTNmZicpO1xuICAgICAgdGhpcy5tYXJxdWVlRWwuc2V0QXR0cmlidXRlKCdmaWxsLW9wYWNpdHknLCAnMC4xMicpO1xuICAgICAgdGhpcy5tYXJxdWVlRWwuc2V0QXR0cmlidXRlKCd2ZWN0b3ItZWZmZWN0JywgJ25vbi1zY2FsaW5nLXN0cm9rZScpO1xuICAgICAgdGhpcy5zdmcuYXBwZW5kQ2hpbGQodGhpcy5tYXJxdWVlRWwpO1xuICAgIH1cbiAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHtseH1gKTtcbiAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3knLCBgJHtseX1gKTtcbiAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7TWF0aC5hYnMocnggLSBseCl9YCk7XG4gICAgdGhpcy5tYXJxdWVlRWwuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtNYXRoLmFicyhyeSAtIGx5KX1gKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgdGhlIG1hcnF1ZWUgZWxlbWVudCBmcm9tIHRoZSBTVkcuICovXG4gIGNsZWFyTWFycXVlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXJxdWVlRWw/LnBhcmVudE5vZGUpIHRoaXMubWFycXVlZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYXJxdWVlRWwpO1xuICAgIHRoaXMubWFycXVlZUVsID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBBIHJlZ2lvbidzIG91dGxpbmUgY29sb3VyLiAqL1xuICBwcml2YXRlIHN0cm9rZU9mKHJlZ2lvbjogUmVnaW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVnaW9uLmNvbG9yIHx8IHRoaXMuc3RvcmUuZ2V0U2hhcGVDb2xvcigpIHx8ICcjMDBmZmZmJztcbiAgfVxuXG4gIC8qKiBEcmF3IGEgcmVnaW9uJ3MgY2xhc3NpZmljYXRpb24gbGFiZWwgYXQgaXRzIHRvcC1sZWZ0LCB3aGVuIGxhYmVscyBhcmUgZW5hYmxlZCAobWF0Y2hlcyBPU0QpLiAqL1xuICBwcml2YXRlIGRyYXdMYWJlbChyZWdpb246IFJlZ2lvbiwgbGF5ZXI6IFNjcmVlbkxheWVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0b3JlLmdldFNob3dTaGFwZUxhYmVsKCkgfHwgcmVnaW9uLmlzUHJvZmlsZT8uKCkgfHwgdGhpcy5zdG9yZS5pc0xhYmVsQ292ZXJlZChyZWdpb24ubGFiZWwpKSByZXR1cm47XG4gICAgY29uc3QgbGFiZWwgPSByZWdpb24ubGFiZWw7XG4gICAgLy8gVGhlIGZpbGxlZCAoYXRsYXMpIGxvb2sgbGFiZWxzIGVhY2ggcGFydCBpbnNpZGUgaXQsIHdoZXJlIGl0IGZpdHMuXG4gICAgaWYgKGxhYmVsICYmIGlzRmlsbGVkKHRoaXMuc3RvcmUuZ2V0UmVnaW9uU3R5bGUoKSkpIHtcbiAgICAgIGZvciAoY29uc3Qgc3BvdCBvZiByZWdpb25MYWJlbFNwb3RzKHJlZ2lvbikpIHBsYWNlSW5zaWRlTGFiZWwobGF5ZXIsIGxhYmVsLCBzcG90KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmIgPSBsYWJlbCA/IHJlZ2lvbkJCb3gocmVnaW9uKSA6IG51bGw7XG4gICAgaWYgKCFsYWJlbCB8fCAhYmIpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gc3ZnRWwoJ3RleHQnKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjZmZmJyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjMDAwJyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICczJyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3BhaW50LW9yZGVyJywgJ3N0cm9rZScpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCdmb250JywgJzEycHggc2Fucy1zZXJpZicpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgdGV4dC50ZXh0Q29udGVudCA9IGxhYmVsO1xuICAgIGxheWVyLmF0KHRleHQsIGJiLngwLCBiYi55MCwgeyBkeTogLTQgfSk7XG4gIH1cblxuICAvKiogRHJhdyBncmFiIGhhbmRsZXMgZm9yIGEgc2VsZWN0ZWQgcmVnaW9uOiByZWN0YW5nbGUgY29ybmVycyBvciBwb2x5Z29uIHZlcnRpY2VzLiAqL1xuICBwcml2YXRlIGRyYXdIYW5kbGVzKHJlZ2lvbjogUmVnaW9uLCBsYXllcjogU2NyZWVuTGF5ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBiID0gcmVnaW9uLmJvdW5kcztcbiAgICBpZiAoIWIpIHJldHVybjtcbiAgICBjb25zdCBzdHJva2UgPSB0aGlzLnN0cm9rZU9mKHJlZ2lvbik7XG4gICAgY29uc3QgaGFuZGxlID0gKGltZ1g6IG51bWJlciwgaW1nWTogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBlbCA9IHN2Z0VsKCdyZWN0Jyk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7SEFORExFX1NJWkV9YCk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGAke0hBTkRMRV9TSVpFfWApO1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdmaWxsJywgJyNmZmYnKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgc3Ryb2tlKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgJzEuNScpO1xuICAgICAgbGF5ZXIuYXQoZWwsIGltZ1gsIGltZ1ksIHsgZHg6IC1IQU5ETEVfU0laRSAvIDIsIGR5OiAtSEFORExFX1NJWkUgLyAyIH0pO1xuICAgIH07XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBSZWN0YW5nbGUpIHtcbiAgICAgIGhhbmRsZShiLngsIGIueSk7XG4gICAgICBoYW5kbGUoYi54ICsgYi53aWR0aCwgYi55KTtcbiAgICAgIGhhbmRsZShiLngsIGIueSArIGIuaGVpZ2h0KTtcbiAgICAgIGhhbmRsZShiLnggKyBiLndpZHRoLCBiLnkgKyBiLmhlaWdodCk7XG4gICAgfSBlbHNlIGlmIChiIGluc3RhbmNlb2YgUG9seWdvbikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiLm5wb2ludHM7IGkrKykgaGFuZGxlKGIueHBvaW50c1tpXSwgYi55cG9pbnRzW2ldKTtcbiAgICAgIGZvciAoY29uc3QgcmluZyBvZiBiLmhvbGVzID8/IFtdKSBmb3IgKGNvbnN0IFtoeCwgaHldIG9mIHJpbmcpIGhhbmRsZShoeCwgaHkpO1xuICAgICAgLy8gQmV6aWVyIHJlZ2lvbnMgYWxzbyBleHBvc2UgdGhlaXIgdGFuZ2VudCBjb250cm9sIHBvaW50cyAoY2lyY2xlcykgam9pbmVkIHRvIHRoZSBhbmNob3JcbiAgICAgIC8vIGJ5IGEgdGhpbiBsaW5lLCBtYXRjaGluZyB0aGUgT1NEIG92ZXJsYXkncyBlZGl0YWJsZSBiZXppZXIgaGFuZGxlcy4gU3RvcmVkIGhhbmRsZXMgd2hlblxuICAgICAgLy8gcHJlc2VudCwgZWxzZSB0aGUgQ2F0bXVsbC1Sb20gZGVmYXVsdCB0aGUgY3VydmUgaXMgZHJhd24gd2l0aC5cbiAgICAgIGlmIChiLmJlemllcikge1xuICAgICAgICBmb3IgKGxldCByaW5nID0gLTE7IHJpbmcgPCAoYi5ob2xlcz8ubGVuZ3RoID8/IDApOyByaW5nKyspIHtcbiAgICAgICAgICBjb25zdCB7IHhzLCB5cyB9ID0gcmluZ09mKGIsIHJpbmcpO1xuICAgICAgICAgIHJpbmdIYW5kbGVzKGIsIHJpbmcpLmZvckVhY2goKGgsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChoLmhhc091dCkgdGhpcy5kcmF3QmV6aWVySGFuZGxlKHhzW2ldLCB5c1tpXSwgaC5vdXQsIHN0cm9rZSwgbGF5ZXIpO1xuICAgICAgICAgICAgaWYgKGguaGFzSW4pIHRoaXMuZHJhd0JlemllckhhbmRsZSh4c1tpXSwgeXNbaV0sIGguaW4sIHN0cm9rZSwgbGF5ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIERyYXcgb25lIGJlemllciBjb250cm9sIHBvaW50IGFzIGEgc21hbGwgY2lyY2xlIGNvbm5lY3RlZCB0byBpdHMgYW5jaG9yIGJ5IGEgdGFuZ2VudCBsaW5lLlxuICAgKiAgYGhhbmRsZWAgaXMgdGhlIGNvbnRyb2wgcG9pbnQncyBhYnNvbHV0ZSBwb3NpdGlvbiBpbiBpbWFnZSBzcGFjZS4gKi9cbiAgcHJpdmF0ZSBkcmF3QmV6aWVySGFuZGxlKFxuICAgIGF4OiBudW1iZXIsXG4gICAgYXk6IG51bWJlcixcbiAgICBoYW5kbGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgc3Ryb2tlOiBzdHJpbmcsXG4gICAgbGF5ZXI6IFNjcmVlbkxheWVyLFxuICApOiB2b2lkIHtcbiAgICBpZiAoaGFuZGxlWzBdID09PSBheCAmJiBoYW5kbGVbMV0gPT09IGF5KSByZXR1cm47XG4gICAgY29uc3QgbGluZSA9IGxheWVyLmxpbmUoYXgsIGF5LCBoYW5kbGVbMF0sIGhhbmRsZVsxXSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHN0cm9rZSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICcxJyk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1vcGFjaXR5JywgJzAuNycpO1xuICAgIGNvbnN0IGRvdCA9IHN2Z0VsKCdjaXJjbGUnKTtcbiAgICBkb3Quc2V0QXR0cmlidXRlKCdyJywgYCR7SEFORExFX1NJWkUgLyAyfWApO1xuICAgIGRvdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBzdHJva2UpO1xuICAgIGRvdC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjZmZmJyk7XG4gICAgZG90LnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgJzEnKTtcbiAgICBsYXllci5hdChkb3QsIGhhbmRsZVswXSwgaGFuZGxlWzFdLCB7IHg6ICdjeCcsIHk6ICdjeScgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0eWxlKGVsOiBTVkdFbGVtZW50LCBzdHJva2U6IHN0cmluZywgaXNTZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5zdG9yZS5nZXRSZWdpb25TdHlsZSgpO1xuICAgIGlmIChpc0ZpbGxlZChzdHlsZSkpIHtcbiAgICAgIGFwcGx5UGFpbnQoZWwsIHNoYXBlUGFpbnQoc3Ryb2tlLCBpc1NlbGVjdGVkLCBzdHlsZSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHN0cm9rZSk7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBpc1NlbGVjdGVkID8gJzQnIDogJzInKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBpc1NlbGVjdGVkID8gc3Ryb2tlIDogJ25vbmUnKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsIGlzU2VsZWN0ZWQgPyAnMC4zNScgOiAnMCcpO1xuICB9XG5cbiAgLyoqIERyYXcgdGhlIGluLXByb2dyZXNzIHJlY3RhbmdsZSAvIHBhdGggcHJldmlldy4gKi9cbiAgcHJpdmF0ZSBkcmF3RHJhZnQoZHJhZnQ6IFJlZ2lvbkRyYWZ0LCBsYXllcjogU2NyZWVuTGF5ZXIpOiB2b2lkIHtcbiAgICBpZiAoZHJhZnQucmVjdCkge1xuICAgICAgY29uc3QgeyB4MCwgeTAsIHgxLCB5MSB9ID0gZHJhZnQucmVjdDtcbiAgICAgIGNvbnN0IGVsID0gc3ZnRWwoJ3JlY3QnKTtcbiAgICAgIGxheWVyLnBsYWNlKGVsLCAoZSwgcHJvamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBbbHgsIGx5XSA9IHByb2plY3QoTWF0aC5taW4oeDAsIHgxKSwgTWF0aC5taW4oeTAsIHkxKSk7XG4gICAgICAgIGNvbnN0IFtyeCwgcnldID0gcHJvamVjdChNYXRoLm1heCh4MCwgeDEpLCBNYXRoLm1heCh5MCwgeTEpKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHtseH1gKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3knLCBgJHtseX1gKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7TWF0aC5hYnMocnggLSBseCl9YCk7XG4gICAgICAgIGUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtNYXRoLmFicyhyeSAtIGx5KX1gKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdHlsZURyYWZ0KGVsKTtcbiAgICB9XG4gICAgaWYgKGRyYWZ0LnBhdGggJiYgZHJhZnQucGF0aC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3R5bGVEcmFmdChcbiAgICAgICAgbGF5ZXIucG9seShcbiAgICAgICAgICAncG9seWxpbmUnLFxuICAgICAgICAgIGRyYWZ0LnBhdGgubWFwKChbeCwgeV0pID0+ICh7IHgsIHkgfSkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0eWxlRHJhZnQoZWw6IFNWR0VsZW1lbnQpOiB2b2lkIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHRoaXMuc3RvcmUuZ2V0U2hhcGVDb2xvcigpIHx8ICcjMDBmZmZmJyk7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCAnMicpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsICc0IDMnKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgndmVjdG9yLWVmZmVjdCcsICdub24tc2NhbGluZy1zdHJva2UnKTtcbiAgfVxufVxuIl19