igniteui-angular 12.3.16 → 12.3.19

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 (56) hide show
  1. package/README.md +252 -252
  2. package/bundles/igniteui-angular.umd.js +199 -42
  3. package/bundles/igniteui-angular.umd.js.map +1 -1
  4. package/esm2015/lib/carousel/carousel-base.js +1 -1
  5. package/esm2015/lib/carousel/public_api.js +1 -1
  6. package/esm2015/lib/data-operations/filtering-condition.js +150 -6
  7. package/esm2015/lib/grids/common/cell.interface.js +1 -1
  8. package/esm2015/lib/grids/common/crud.service.js +9 -6
  9. package/esm2015/lib/grids/common/pipes.js +2 -2
  10. package/esm2015/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.js +2 -2
  11. package/esm2015/lib/grids/filtering/excel-style/excel-style-header.component.js +2 -2
  12. package/esm2015/lib/grids/filtering/excel-style/public_api.js +1 -1
  13. package/esm2015/lib/grids/grid/grid.component.js +5 -3
  14. package/esm2015/lib/grids/grid-base.directive.js +4 -6
  15. package/esm2015/lib/grids/grid-navigation.service.js +12 -6
  16. package/esm2015/lib/grids/grid-public-cell.js +1 -1
  17. package/esm2015/lib/grids/grid-public-row.js +1 -1
  18. package/esm2015/lib/grids/grouping/group-by-area.directive.js +2 -2
  19. package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.js +3 -3
  20. package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid.component.js +2 -2
  21. package/esm2015/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.js +2 -2
  22. package/esm2015/lib/grids/toolbar/grid-toolbar-exporter.component.js +2 -2
  23. package/esm2015/lib/grids/toolbar/grid-toolbar-hiding.component.js +2 -2
  24. package/esm2015/lib/grids/toolbar/grid-toolbar-pinning.component.js +2 -2
  25. package/esm2015/lib/grids/tree-grid/tree-grid.component.js +2 -2
  26. package/esm2015/lib/grids/tree-grid/tree-grid.filtering.strategy.js +1 -1
  27. package/esm2015/lib/simple-combo/simple-combo.component.js +6 -2
  28. package/esm2015/lib/tabs/bottom-nav/bottom-nav-content.component.js +2 -2
  29. package/esm2015/lib/tabs/bottom-nav/bottom-nav-header.component.js +2 -2
  30. package/esm2015/lib/tabs/bottom-nav/bottom-nav-item.component.js +2 -2
  31. package/esm2015/lib/tabs/bottom-nav/bottom-nav.component.js +2 -2
  32. package/esm2015/lib/tabs/bottom-nav/bottom-nav.directives.js +1 -1
  33. package/esm2015/lib/tabs/bottom-nav/bottom-nav.module.js +1 -1
  34. package/esm2015/lib/tabs/bottom-nav/public_api.js +1 -1
  35. package/esm2015/lib/tabs/public_api.js +1 -1
  36. package/esm2015/lib/tabs/tab-content.directive.js +1 -1
  37. package/esm2015/lib/tabs/tab-header.directive.js +1 -1
  38. package/esm2015/lib/tabs/tab-item.directive.js +1 -1
  39. package/esm2015/lib/tabs/tabs/public_api.js +1 -1
  40. package/esm2015/lib/tabs/tabs/tab-content.component.js +2 -2
  41. package/esm2015/lib/tabs/tabs/tab-header.component.js +2 -2
  42. package/esm2015/lib/tabs/tabs/tab-item.component.js +2 -2
  43. package/esm2015/lib/tabs/tabs/tabs.component.js +2 -2
  44. package/esm2015/lib/tabs/tabs/tabs.directives.js +1 -1
  45. package/esm2015/lib/tabs/tabs/tabs.module.js +1 -1
  46. package/esm2015/lib/tabs/tabs.base.js +1 -1
  47. package/esm2015/lib/tabs/tabs.directive.js +1 -1
  48. package/fesm2015/igniteui-angular.js +200 -43
  49. package/fesm2015/igniteui-angular.js.map +1 -1
  50. package/igniteui-angular.metadata.json +1 -1
  51. package/lib/data-operations/filtering-condition.d.ts +1 -1
  52. package/lib/grids/common/pipes.d.ts +1 -1
  53. package/lib/grids/grouping/group-by-area.directive.d.ts +1 -1
  54. package/lib/simple-combo/simple-combo.component.d.ts +2 -0
  55. package/migrations/update-12_1_0/changes/classes.json +28 -28
  56. package/package.json +1 -1
@@ -702,4 +702,4 @@ export class IgxSummaryRow {
702
702
  return row;
703
703
  }
704
704
  }
705
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wdWJsaWMtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQtcHVibGljLXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9qRCxPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUV6QyxNQUFlLE9BQU87SUFRbEI7O09BRUc7SUFDSCxJQUFXLFNBQVM7O1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUFXLEdBQUc7O1FBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDeEMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFX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Q0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2pGLE9BQU8sYUFBYSxHQUFHLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQzVEO2FBQ0o7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFhTyxhQUFhLENBQUMsR0FBb0I7UUFDdEMsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2YsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7U0FDcEI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENlbGxUeXBlIH0gZnJvbSAnLi9jb21tb24vY2VsbC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJZ3hBZGRSb3csIElneEVkaXRSb3cgfSBmcm9tICcuL2NvbW1vbi9jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkSW5zdGFuY2VUeXBlLCBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSwgR3JpZFN1bW1hcnlQb3NpdGlvbiB9IGZyb20gJy4vY29tbW9uL2VudW1zJztcclxuaW1wb3J0IHsgUm93VHlwZSB9IGZyb20gJy4vY29tbW9uL3Jvdy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQ2VsbCB9IGZyb20gJy4vZ3JpZC1wdWJsaWMtY2VsbCc7XHJcbmltcG9ydCB7IElneEdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkL2dyaWQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkL2dyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4U3VtbWFyeVJlc3VsdCB9IGZyb20gJy4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XHJcbmltcG9ydCB7IElneFRyZWVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLWdyaWQvdHJlZS1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4vdHJlZS1ncmlkL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcclxuaW1wb3J0IG1lcmdlV2l0aCBmcm9tICdsb2Rhc2gubWVyZ2V3aXRoJztcclxuXHJcbmFic3RyYWN0IGNsYXNzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xyXG4gICAgcHJvdGVjdGVkIF9kYXRhPzogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcm93IGtleS5cclxuICAgICAqIEEgcm93IGluIHRoZSBncmlkIGlzIGlkZW50aWZpZWQgZWl0aGVyIGJ5OlxyXG4gICAgICogLSBwcmltYXJ5S2V5IGRhdGEgdmFsdWUsXHJcbiAgICAgKiAtIHRoZSB3aG9sZSByb3dEYXRhLCBpZiB0aGUgcHJpbWFyeUtleSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCByb3dLZXkgPSByb3cua2V5O1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQga2V5KCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdyaWQucHJpbWFyeUtleTtcclxuICAgICAgICByZXR1cm4gcHJpbWFyeUtleSA/IGRhdGFbcHJpbWFyeUtleV0gOiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBpZiB0aGlzIHJlcHJlc2VudHMgYWRkIHJvdyBVSVxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCBpc0FkZFJvdyA9IHJvdy5hZGRSb3dVSTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGFkZFJvd1VJKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cgJiZcclxuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4QWRkUm93Lm5hbWUgJiZcclxuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5pZCA9PT0gdGhpcy5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGF0YSByZWNvcmQgdGhhdCBwb3B1bGF0ZXMgdGhlIHJvdy5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgcm93RGF0YSA9IHJvdy5kYXRhO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmluRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aCh0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3kuY2xvbmUodGhpcy5fZGF0YSA/PyB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF0pLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5rZXksIGZhbHNlKSxcclxuICAgICAgICAgICAgICAgIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialZhbHVlID0gc3JjVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSAnZGF0YScgaW5zdGVhZFxyXG4gICAgICpcclxuICAgICAqIFRoZSBkYXRhIHJlY29yZCB0aGF0IHBvcHVsYXRlcyB0aGUgcm93XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcm93RGF0YSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2tleScgaW5zdGVhZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHJvd0lEKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpZiB0aGUgcm93IGlzIGN1cnJlbnRseSBpbiBlZGl0IG1vZGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaW5FZGl0TW9kZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3c7XHJcbiAgICAgICAgICAgIHJldHVybiAoZWRpdFJvd1N0YXRlICYmIGVkaXRSb3dTdGF0ZS5pZCA9PT0gdGhpcy5rZXkpIHx8IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCBpc1Bpbm5lZCA9IHJvdy5waW5uZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwaW5uZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZCh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnBpbm5lZCA9ICFyb3cucGlubmVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgcGlubmVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5waW4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVucGluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcm93IGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCBpc0V4cGFuZGVkID0gcm93LmV4cGFuZGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHBhbmRzL2NvbGxhcHNlcyB0aGUgcm93LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmtleSwgdmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKHRoaXMua2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gIXJvdy5zZWxlY3RlZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93c1dpdGhOb0V2ZW50KFt0aGlzLmtleV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KFt0aGlzLmtleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdyaWQuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpZiB0aGUgcm93IGlzIGluIGRlbGV0ZSBzdGF0ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkZWxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSS5yb3dfZGVsZXRlZF90cmFuc2FjdGlvbih0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaGFzIGNoaWxkIHJvd3MuIEFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIElneEdyaWRSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0dob3N0UmVjb3JkKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByZW5kZXJlZCBjZWxscyBpbiB0aGUgcm93IGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjZWxscygpOiBDZWxsVHlwZVtdIHtcclxuICAgICAgICBjb25zdCByZXM6IENlbGxUeXBlW10gPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGw6IENlbGxUeXBlID0gbmV3IElneEdyaWRDZWxsKHRoaXMuZ3JpZCwgdGhpcy5pbmRleCwgY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgcmVzLnB1c2goY2VsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpbnMgdGhlIHNwZWNpZmllZCByb3cuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dQaW5uaW5nYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyBwaW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnBpbigpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwaW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5waW5Sb3codGhpcy5rZXksIHRoaXMuaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5waW5zIHRoZSBzcGVjaWZpZWQgcm93LlxyXG4gICAgICogVGhpcyBtZXRob2QgZW1pdHMgYG9uUm93UGlubmluZ2AgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogLy8gdW5waW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnVucGluKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVucGluKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudW5waW5Sb3codGhpcy5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgc3BlY2lmaWVkIHJvdyBvYmplY3QgYW5kIHRoZSBkYXRhIHNvdXJjZSByZWNvcmQgd2l0aCB0aGUgcGFzc2VkIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIHVwZGF0ZSB0aGUgc2Vjb25kIHNlbGVjdGVkIHJvdydzIHZhbHVlXHJcbiAgICAgKiBsZXQgbmV3VmFsdWUgPSBcIkFwcGxlXCI7XHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLnVwZGF0ZShuZXdWYWx1ZSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3J1ZFNlcnZpY2UgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2U7XHJcbiAgICAgICAgaWYgKGNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlICYmIGNydWRTZXJ2aWNlLmNlbGwuaWQucm93SUQgPT09IHRoaXMua2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hFZGl0Um93KHRoaXMua2V5LCB0aGlzLmluZGV4LCB0aGlzLmRhdGEsIHRoaXMuZ3JpZCk7XHJcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX3Jvdyhyb3csIHZhbHVlKTtcclxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHJvdyBmcm9tIHRoZSBncmlkJ3MgZGF0YSBzb3VyY2UuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dEZWxldGVkYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyBkZWxldGUgdGhlIHRoaXJkIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzJdLmRlbGV0ZSgpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncmlkLmRlbGV0ZVJvd0J5SWQodGhpcy5rZXkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4R3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCxcclxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlciwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgJiYgZGF0YS5hZGRSb3cgJiYgZGF0YS5yZWNvcmRSZWYgPyBkYXRhLnJlY29yZFJlZiA6IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYWdpbmF0b3IpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nRGV0YWlsUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdHcm91cFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0RldGFpbFJvd3MgPSB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwZWRSb3dzID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZCA9IHRoaXMuZ3JpZC5ncm91cGluZ0ZsYXRSZXN1bHQuaW5kZXhPZihmaXJzdFJvdyk7XHJcblxyXG4gICAgICAgICAgICAvLyBmcm9tIGdyb3VwaW5nRmxhdFJlc3VsdCwgcmVzb2x2ZSB0d28gb3RoZXIgY29sbGVjdGlvbnM6XHJcbiAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nRGV0YWlsUm93cyAtPiBpc2UgaXQgdG8gcmVzb2x2ZSB0aGUgZGV0YWlsIHJvdyBmb3IgZWFjaCBleHBhbmRlZCBncmlkIHJvdyBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICBpZiAoaGFzRGV0YWlsUm93cyB8fCBoYXNHcm91cGVkUm93cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gclt0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNHcm91cGVkUm93cyAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kICYmICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0RldGFpbFJvd3MucHVzaChyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdFJvdyBpcyBhIGNoaWxkIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcHJlY2VkaW5nR3JvdXBSb3dzLFxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzdW1tYXJ5Um93IGZvciB0aGlzIGdpdmVuIGdyb3VwZWRSZWNvcmQgaXMgcmVuZGVyZWQgYWZ0ZXIgZmlyc3RSb3csXHJcbiAgICAgICAgICAgICAgICAvLyBpLmUuIG5lZWQgdG8gZGVjcmVhc2UgZmlyc3RSb3dJbmQgdG8gYWNjb3VudCBmb3IgdGhlIGFib3ZlLlxyXG4gICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSBwcmVjZWRpbmdHcm91cFJvd3MuZmlsdGVyKGdyID0+IHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3IpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gJiYgcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93c1twcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoIC0gMV0ucmVjb3Jkcy5pbmRleE9mKGZpcnN0Um93KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKz0gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwcmVjZWRpbmdEZXRhaWxSb3dzLmxlbmd0aCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgZmlyc3RSb3dJbmQgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHBhcmVudCByb3csIGlmIGdyaWQgaXMgZ3JvdXBlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwYXJlbnQoKTogUm93VHlwZSB7XHJcbiAgICAgICAgbGV0IHBhcmVudDogSWd4R3JvdXBCeVJvdztcclxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmluZGV4IC0gMTtcclxuICAgICAgICB3aGlsZSAoaSA+PSAwICYmICFwYXJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVjID0gdGhpcy5ncmlkLmRhdGFWaWV3W2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyZWMpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBuZXcgSWd4R3JvdXBCeVJvdyh0aGlzLmdyaWQsIGksIHJlYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRSb3cgZXh0ZW5kcyBCYXNlUm93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIEBoaWRkZW5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGdyaWQ6IElneFRyZWVHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55LCBwcml2YXRlIF90cmVlUm93PzogSVRyZWVHcmlkUmVjb3JkKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSAmJiBkYXRhLmFkZFJvdyAmJiBkYXRhLnJlY29yZFJlZiA/IGRhdGEucmVjb3JkUmVmIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zICYmICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSA+IDApKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dJbmRleCA9IHRoaXMuZ3JpZC5wcm9jZXNzZWRFeHBhbmRlZEZsYXREYXRhLmluZGV4T2YodGhpcy5ncmlkLmRhdGFWaWV3WzBdLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgLy8gZmlyc3RSb3dJbmRleCBpcyBiYXNlZCBvbiBkYXRhIHJlc3VsdCBhZnRlciBhbGwgcGlwZXMgdHJpZ2dlcmVkLCBleGNsdWRpbmcgc3VtbWFyeSBwaXBlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tID9cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm9vdFJlY29yZHMuaW5kZXhPZih0aGlzLmdldFJvb3RQYXJlbnQodGhpcy5ncmlkLmRhdGFWaWV3WzBdKSkgOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSArIDE7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBhIHN1bW1hcnkgcm93IGZvciBlYWNoIHJvb3QgcmVjb3JkLCBzbyB3ZSBjYWxjdWxhdGUgaG93IG1hbnkgcm9vdCByZWNvcmRzIGFyZSByZW5kZXJlZCBiZWZvcmUgdGhlIGN1cnJlbnQgcm93XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RSb3dJbmRleCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSAqICh0aGlzLmdyaWQucGFnaW5hdG9yPy5wZXJQYWdlIHx8IDApKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBUaGUgZGF0YSBwYXNzZWQgdG8gdGhlIHJvdyBjb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IHNlbGVjdGVkUm93RGF0YSA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0ucm93RGF0YTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5pbkVkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXJnZVdpdGgodGhpcy5ncmlkLmRhdGFDbG9uZVN0cmF0ZWd5LmNsb25lKHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMua2V5LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgICAob2JqVmFsdWUsIHNyY1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpWYWx1ZSA9IHNyY1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEgPyB0aGlzLl9kYXRhIDogdGhpcy5ncmlkLmlzVHJlZVJvdyhyZWMpID8gcmVjLmRhdGEgOiByZWM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGlsZCByb3dzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IFJvd1R5cGVbXSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IElneFRyZWVHcmlkUm93W10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy50cmVlUm93LmV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZVJvdy5jaGlsZHJlbi5mb3JFYWNoKChyZWMsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hUcmVlR3JpZFJvdyh0aGlzLmdyaWQsIHRoaXMuaW5kZXggKyAxICsgaSwgcmVjLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChyb3cpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGFyZW50IHJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwYXJlbnQoKTogUm93VHlwZSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLmdldFJvd0J5S2V5KHRoaXMudHJlZVJvdy5wYXJlbnQ/LnJvd0lEKTtcclxuICAgICAgICByZXR1cm4gcm93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGNoaWxkIHJvd3MgZXhpc3QuIEFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIElneEdyaWRSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZVJvdy5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmVlUm93LmNoaWxkcmVuLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBgSVRyZWVHcmlkUmVjb3JkYCB3aXRoIG1ldGFkYXRhIGFib3V0IHRoZSByb3cgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRyZWUgZ3JpZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCByb3dQYXJlbnQgPSB0aGlzLnRyZWVHcmlkLmdldFJvd0J5S2V5KDEpLnRyZWVSb3cucGFyZW50O1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdHJlZVJvdygpOiBJVHJlZUdyaWRSZWNvcmQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90cmVlUm93ID8/IHRoaXMuZ3JpZC5yZWNvcmRzLmdldCh0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IGlzUGlubmVkID0gcm93LnBpbm5lZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBpbm5lZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnBpbm5lZCA9ICFyb3cucGlubmVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgcGlubmVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5waW4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVucGluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgZXhwYW5kZWQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IGVzRXhwYW5kZWQgPSByb3cuZXhwYW5kZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy50cmVlUm93KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cGFuZHMvY29sbGFwc2VzIHRoZSByb3cuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMua2V5LCB2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gVE9ETyBjZWxsXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0dob3N0UmVjb3JkKHRoaXMuZGF0YSkgPyB0aGlzLnRyZWVSb3cuaXNGaWx0ZXJlZE91dFBhcmVudCA9PT0gdW5kZWZpbmVkIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSb290UGFyZW50KHJvdzogSVRyZWVHcmlkUmVjb3JkKTogSVRyZWVHcmlkUmVjb3JkIHtcclxuICAgICAgICB3aGlsZSAocm93LnBhcmVudCkge1xyXG4gICAgICAgICAgICByb3cgPSByb3cucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcm93O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4SGllcmFyY2hpY2FsR3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCxcclxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlciwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgJiYgZGF0YS5hZGRSb3cgJiYgZGF0YS5yZWNvcmRSZWYgPyBkYXRhLnJlY29yZFJlZiA6IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgcm93IGlzbGFuZHMgZXhpc3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ncmlkLmNoaWxkTGF5b3V0S2V5cy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5pbmRleE9mKHRoaXMuZ3JpZC5kYXRhVmlld1swXSk7XHJcbiAgICAgICAgY29uc3QgZXhwYW5kZWRSb3dzID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5maWx0ZXIoKHJlYywgaW5kKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaXJzdFJvd0luZCArIGV4cGFuZGVkUm93cy5sZW5ndGggKyB0aGlzLmluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcmVuZGVyZWQgY2VsbHMgaW4gdGhlIHJvdyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY2VsbHMoKTogQ2VsbFR5cGVbXSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBDZWxsVHlwZVtdID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbkxpc3QuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsOiBDZWxsVHlwZSA9IG5ldyBJZ3hHcmlkQ2VsbCh0aGlzLmdyaWQsIHRoaXMuaW5kZXgsIGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIHJlcy5wdXNoKGNlbGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hHcm91cEJ5Um93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHJvdyBpbmRleC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbHdheXMgdHJ1ZSwgYmVjYXVzZSB0aGlzIGlzIGluIGluc3RhbmNlIG9mIGFuIElneEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0dyb3VwQnlSb3c6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSUdyb3VwQnlSZWNvcmQgb2JqZWN0LCByZXByZXNlbnRpbmcgdGhlIGdyb3VwIHJlY29yZCwgaWYgdGhlIHJvdyBpcyBhIEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZ3JvdXBSb3coKTogSUdyb3VwQnlSZWNvcmQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cFJvdyA/IHRoaXMuX2dyb3VwUm93IDogdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY2hpbGQgcm93cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjaGlsZHJlbigpOiBSb3dUeXBlW10ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBJZ3hHcmlkUm93W10gPSBbXTtcclxuICAgICAgICB0aGlzLmdyb3VwUm93LnJlY29yZHMuZm9yRWFjaCgocmVjLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hHcmlkUm93KHRoaXMuZ3JpZCwgdGhpcy5pbmRleCArIDEgKyBpLCByZWMpO1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQucGFnZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0dyb3VwUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcclxuICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBlZFJvd3MgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZyb20gZ3JvdXBpbmdGbGF0UmVzdWx0LCByZXNvbHZlIHR3byBvdGhlciBjb2xsZWN0aW9uczpcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nR3JvdXBlZFJvd3MgLT4gdXNlIGl0IHRvIHJlc29sdmUgc3VtbWFyeVJvdyBmb3IgZWFjaCBncm91cCBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgIGlmIChoYXNEZXRhaWxSb3dzIHx8IGhhc0dyb3VwZWRSb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmZvckVhY2goKHIsIGluZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0dyb3VwZWRSb3dzICYmIGluZCA8IGZpcnN0Um93SW5kICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0Um93IGlzIGEgY2hpbGQgb2YgdGhlIGxhc3QgaXRlbSBpbiBwcmVjZWRpbmdHcm91cFJvd3MsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgIC8vIGkuZS4gbmVlZCB0byBkZWNyZWFzZSBmaXJzdFJvd0luZCB0byBhY2NvdW50IGZvciB0aGUgYWJvdmUuXHJcbiAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHByZWNlZGluZ0dyb3VwUm93cy5maWx0ZXIoZ3IgPT4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cChncikpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzW3ByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggLSAxXS5yZWNvcmRzLmluZGV4T2YoZmlyc3RSb3cpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyArPSAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHByZWNlZGluZ0RldGFpbFJvd3MubGVuZ3RoICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyBmaXJzdFJvd0luZCArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihncmlkOiBJZ3hHcmlkQ29tcG9uZW50LCBpbmRleDogbnVtYmVyLCBwcml2YXRlIF9ncm91cFJvdz86IElHcm91cEJ5UmVjb3JkKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5pc0dyb3VwQnlSb3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZXZlcnkocm93ID0+IHJvdy5zZWxlY3RlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBzZWxlY3RlZC5cclxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5zZWxlY3RlZCA9ICFyb3cuc2VsZWN0ZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93c1dpdGhOb0V2ZW50KFtyb3cua2V5XSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3Jvdy5rZXldKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgZ3JvdXAgcm93IGlzIGV4cGFuZGVkLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogY29uc3QgZ3JvdXBSb3dFeHBhbmRlZCA9IGdyb3VwUm93LmV4cGFuZGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAodGhpcy5ncm91cFJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZEFQSS5zZXRfZ3JvdXByb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMuZ3JvdXBSb3csIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUgPyB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLnJvdyA9PT0gdGhpcy5pbmRleCA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9nZ2xlcyB0aGUgZ3JvdXAgcm93IGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZS5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGdyb3VwUm93LnRvZ2dsZSgpXHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdyaWQudG9nZ2xlR3JvdXAodGhpcy5ncm91cFJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgZ3JpZEFQSSgpOiBJZ3hHcmlkQVBJU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJIGFzIElneEdyaWRBUElTZXJ2aWNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4U3VtbWFyeVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSByb3cgaW5kZXguXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyaWQgdGhhdCBjb250YWlucyB0aGUgcm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCB8IElneFRyZWVHcmlkQ29tcG9uZW50IHwgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWx3YXlzIHRydWUsIGJlY2F1c2UgdGhpcyBpcyBpbiBpbnN0YW5jZSBvZiBhbiBJZ3hHcm91cEJ5Um93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNTdW1tYXJ5Um93OiBib29sZWFuO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGN1cmVudCBncmlkIHR5cGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBncmlkVHlwZTogR3JpZEluc3RhbmNlVHlwZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBJR3JvdXBCeVJlY29yZCBvYmplY3QsIHJlcHJlc2VudGluZyB0aGUgZ3JvdXAgcmVjb3JkLCBpZiB0aGUgcm93IGlzIGEgR3JvdXBCeVJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdW1tYXJpZXMoKTogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1bW1hcmllcyA/IHRoaXMuX3N1bW1hcmllcyA6IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XS5zdW1tYXJpZXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucyAmJiB0aGlzLmdyaWQucGFnZSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IEdyaWRJbnN0YW5jZVR5cGUuR3JpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkID0gdGhpcy5ncmlkIGFzIElneEdyaWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nR3JvdXBSb3dzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNHcm91cGVkUm93cyA9IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBncm91cGluZ0ZsYXRSZXN1bHQsIHJlc29sdmUgdHdvIG90aGVyIGNvbGxlY3Rpb25zOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RldGFpbFJvd3MgfHwgaGFzR3JvdXBlZFJvd3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzR3JvdXBlZFJvd3MgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdFJvdyBpcyBhIGNoaWxkIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcHJlY2VkaW5nR3JvdXBSb3dzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaS5lLiBuZWVkIHRvIGRlY3JlYXNlIGZpcnN0Um93SW5kIHRvIGFjY291bnQgZm9yIHRoZSBhYm92ZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSBwcmVjZWRpbmdHcm91cFJvd3MuZmlsdGVyKGdyID0+IHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3IpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3NbcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAtIDFdLnJlY29yZHMuaW5kZXhPZihmaXJzdFJvdykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKz0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVjZWRpbmdEZXRhaWxSb3dzLmxlbmd0aCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgZmlyc3RSb3dJbmQgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRUeXBlID09PSBHcmlkSW5zdGFuY2VUeXBlLlRyZWVHcmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQgPSB0aGlzLmdyaWQgYXMgSWd4VHJlZUdyaWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZGV4ID0gdGhpcy5ncmlkLnByb2Nlc3NlZEV4cGFuZGVkRmxhdERhdGEuaW5kZXhPZih0aGlzLmdyaWQuZGF0YVZpZXdbMF0uZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSB0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Um93SW5kZXggKyBwcmVjZWRpbmdTdW1tYXJ5Um93cyArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIGluZGV4OiBudW1iZXIsIHByaXZhdGUgX3N1bW1hcmllcz86IE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4sIHR5cGU/OiBHcmlkSW5zdGFuY2VUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5pc1N1bW1hcnlSb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ3JpZFR5cGUgPSB0eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Um9vdFBhcmVudChyb3c6IElUcmVlR3JpZFJlY29yZCk6IElUcmVlR3JpZFJlY29yZCB7XHJcbiAgICAgICAgd2hpbGUgKHJvdy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgcm93ID0gcm93LnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvdztcclxuICAgIH1cclxufVxyXG4iXX0=
705
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wdWJsaWMtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQtcHVibGljLXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9qRCxPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUV6QyxNQUFlLE9BQU87SUFRbEI7O09BRUc7SUFDSCxJQUFXLFNBQVM7O1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUFXLEdBQUc7O1FBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDeEMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFX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Q0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2pGLE9BQU8sYUFBYSxHQUFHLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQzVEO2FBQ0o7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFhTyxhQUFhLENBQUMsR0FBb0I7UUFDdEMsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2YsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7U0FDcEI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDZWxsVHlwZSB9IGZyb20gJy4vY29tbW9uL2NlbGwuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEFkZFJvdywgSWd4RWRpdFJvdyB9IGZyb20gJy4vY29tbW9uL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkSW5zdGFuY2VUeXBlLCBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSwgR3JpZFN1bW1hcnlQb3NpdGlvbiB9IGZyb20gJy4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IFJvd1R5cGUgfSBmcm9tICcuL2NvbW1vbi9yb3cuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRDZWxsIH0gZnJvbSAnLi9ncmlkLXB1YmxpYy1jZWxsJztcbmltcG9ydCB7IElneEdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkL2dyaWQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZENvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC9oaWVyYXJjaGljYWwtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4U3VtbWFyeVJlc3VsdCB9IGZyb20gJy4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XG5pbXBvcnQgeyBJZ3hUcmVlR3JpZENvbXBvbmVudCB9IGZyb20gJy4vdHJlZS1ncmlkL3RyZWUtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVRyZWVHcmlkUmVjb3JkIH0gZnJvbSAnLi90cmVlLWdyaWQvdHJlZS1ncmlkLmludGVyZmFjZXMnO1xuaW1wb3J0IG1lcmdlV2l0aCBmcm9tICdsb2Rhc2gubWVyZ2V3aXRoJztcblxuYWJzdHJhY3QgY2xhc3MgQmFzZVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSBncmlkIHRoYXQgY29udGFpbnMgdGhlIHJvdy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCB8IElneFRyZWVHcmlkQ29tcG9uZW50IHwgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudDtcbiAgICBwcm90ZWN0ZWQgX2RhdGE/OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggKyAoKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBhZ2UgfHwgMCkgKiAodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGVyUGFnZSB8fCAwKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcm93IGtleS5cbiAgICAgKiBBIHJvdyBpbiB0aGUgZ3JpZCBpcyBpZGVudGlmaWVkIGVpdGhlciBieTpcbiAgICAgKiAtIHByaW1hcnlLZXkgZGF0YSB2YWx1ZSxcbiAgICAgKiAtIHRoZSB3aG9sZSByb3dEYXRhLCBpZiB0aGUgcHJpbWFyeUtleSBpcyBvbWl0dGVkLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByb3dLZXkgPSByb3cua2V5O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQga2V5KCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcbiAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgICAgICByZXR1cm4gcHJpbWFyeUtleSA/IGRhdGFbcHJpbWFyeUtleV0gOiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgaWYgdGhpcyByZXByZXNlbnRzIGFkZCByb3cgVUlcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNBZGRSb3cgPSByb3cuYWRkUm93VUk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBhZGRSb3dVSSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdyAmJlxuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4QWRkUm93Lm5hbWUgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cuaWQgPT09IHRoaXMua2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHJlY29yZCB0aGF0IHBvcHVsYXRlcyB0aGUgcm93LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByb3dEYXRhID0gcm93LmRhdGE7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkYXRhKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZVdpdGgodGhpcy5ncmlkLmRhdGFDbG9uZVN0cmF0ZWd5LmNsb25lKHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLmtleSwgZmFsc2UpLFxuICAgICAgICAgICAgICAgIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqVmFsdWUgPSBzcmNWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2RhdGEnIGluc3RlYWRcbiAgICAgKlxuICAgICAqIFRoZSBkYXRhIHJlY29yZCB0aGF0IHBvcHVsYXRlcyB0aGUgcm93XG4gICAgICovXG4gICAgcHVibGljIGdldCByb3dEYXRhKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlICdrZXknIGluc3RlYWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0lEKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmtleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaXMgY3VycmVudGx5IGluIGVkaXQgbW9kZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGluRWRpdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3c7XG4gICAgICAgICAgICByZXR1cm4gKGVkaXRSb3dTdGF0ZSAmJiBlZGl0Um93U3RhdGUuaWQgPT09IHRoaXMua2V5KSB8fCBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGlzUGlubmVkID0gcm93LnBpbm5lZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBpbm5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZCh0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHJvdy5waW5uZWQgPSAhcm93LnBpbm5lZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHBpbm5lZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5waW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5waW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHJvdyBleHBhbmRlZC9jb2xsYXBzZWQgc3RhdGUuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgaXNFeHBhbmRlZCA9IHJvdy5leHBhbmRlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHBhbmRzL2NvbGxhcHNlcyB0aGUgcm93LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHJvdy5leHBhbmRlZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkuc2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5rZXksIHZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKHRoaXMua2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBzZWxlY3RlZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHJvdy5zZWxlY3RlZCA9ICFyb3cuc2VsZWN0ZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93c1dpdGhOb0V2ZW50KFt0aGlzLmtleV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3RoaXMua2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaXMgaW4gZGVsZXRlIHN0YXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGVsZXRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLnJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHRoaXMua2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaGFzIGNoaWxkIHJvd3MuIEFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIElneEdyaWRSb3cuXG4gICAgICovXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuaXNHaG9zdFJlY29yZCh0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHJlbmRlcmVkIGNlbGxzIGluIHRoZSByb3cgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2VsbHMoKTogQ2VsbFR5cGVbXSB7XG4gICAgICAgIGNvbnN0IHJlczogQ2VsbFR5cGVbXSA9IFtdO1xuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjZWxsOiBDZWxsVHlwZSA9IG5ldyBJZ3hHcmlkQ2VsbCh0aGlzLmdyaWQsIHRoaXMuaW5kZXgsIGNvbC5maWVsZCk7XG4gICAgICAgICAgICByZXMucHVzaChjZWxsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGlucyB0aGUgc3BlY2lmaWVkIHJvdy5cbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dQaW5uaW5nYCBldmVudC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBwaW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXG4gICAgICogdGhpcy5ncmlkLnNlbGVjdGVkUm93c1swXS5waW4oKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgcGluKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnBpblJvdyh0aGlzLmtleSwgdGhpcy5pbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5waW5zIHRoZSBzcGVjaWZpZWQgcm93LlxuICAgICAqIFRoaXMgbWV0aG9kIGVtaXRzIGBvblJvd1Bpbm5pbmdgIGV2ZW50LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIHVucGluIHRoZSBzZWxlY3RlZCByb3cgZnJvbSB0aGUgZ3JpZFxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0udW5waW4oKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5waW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudW5waW5Sb3codGhpcy5rZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHNwZWNpZmllZCByb3cgb2JqZWN0IGFuZCB0aGUgZGF0YSBzb3VyY2UgcmVjb3JkIHdpdGggdGhlIHBhc3NlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyB1cGRhdGUgdGhlIHNlY29uZCBzZWxlY3RlZCByb3cncyB2YWx1ZVxuICAgICAqIGxldCBuZXdWYWx1ZSA9IFwiQXBwbGVcIjtcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLnVwZGF0ZShuZXdWYWx1ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNydWRTZXJ2aWNlID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlO1xuICAgICAgICBpZiAoY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUgJiYgY3J1ZFNlcnZpY2UuY2VsbC5pZC5yb3dJRCA9PT0gdGhpcy5rZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneEVkaXRSb3codGhpcy5rZXksIHRoaXMuaW5kZXgsIHRoaXMuZGF0YSwgdGhpcy5ncmlkKTtcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX3Jvdyhyb3csIHZhbHVlKTtcbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgcm93IGZyb20gdGhlIGdyaWQncyBkYXRhIHNvdXJjZS5cbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dEZWxldGVkYCBldmVudC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBkZWxldGUgdGhlIHRoaXJkIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXG4gICAgICogdGhpcy5ncmlkLnNlbGVjdGVkUm93c1syXS5kZWxldGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdyaWQuZGVsZXRlUm93QnlJZCh0aGlzLmtleSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4R3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHVibGljIGdyaWQ6IElneEdyaWRDb21wb25lbnQsXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhICYmIGRhdGEuYWRkUm93ICYmIGRhdGEucmVjb3JkUmVmID8gZGF0YS5yZWNvcmRSZWYgOiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5ncmlkLnBhZ2luYXRvcikge1xuICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nRGV0YWlsUm93cyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nR3JvdXBSb3dzID0gW107XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RldGFpbFJvd3MgPSB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLnNpemU7XG4gICAgICAgICAgICBjb25zdCBoYXNHcm91cGVkUm93cyA9IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aDtcbiAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZCA9IHRoaXMuZ3JpZC5ncm91cGluZ0ZsYXRSZXN1bHQuaW5kZXhPZihmaXJzdFJvdyk7XG5cbiAgICAgICAgICAgIC8vIGZyb20gZ3JvdXBpbmdGbGF0UmVzdWx0LCByZXNvbHZlIHR3byBvdGhlciBjb2xsZWN0aW9uczpcbiAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcbiAgICAgICAgICAgIC8vIHByZWNlZGluZ0RldGFpbFJvd3MgLT4gaXNlIGl0IHRvIHJlc29sdmUgdGhlIGRldGFpbCByb3cgZm9yIGVhY2ggZXhwYW5kZWQgZ3JpZCByb3cgaW4gcHJldmlvdXMgcGFnZXNcbiAgICAgICAgICAgIGlmIChoYXNEZXRhaWxSb3dzIHx8IGhhc0dyb3VwZWRSb3dzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93SUQgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0dyb3VwZWRSb3dzICYmIGluZCA8IGZpcnN0Um93SW5kICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0RldGFpbFJvd3MucHVzaChyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdFJvdyBpcyBhIGNoaWxkIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcHJlY2VkaW5nR3JvdXBSb3dzLFxuICAgICAgICAgICAgICAgIC8vIHRoZW4gc3VtbWFyeVJvdyBmb3IgdGhpcyBnaXZlbiBncm91cGVkUmVjb3JkIGlzIHJlbmRlcmVkIGFmdGVyIGZpcnN0Um93LFxuICAgICAgICAgICAgICAgIC8vIGkuZS4gbmVlZCB0byBkZWNyZWFzZSBmaXJzdFJvd0luZCB0byBhY2NvdW50IGZvciB0aGUgYWJvdmUuXG4gICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSBwcmVjZWRpbmdHcm91cFJvd3MuZmlsdGVyKGdyID0+IHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3IpKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tICYmIHByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzW3ByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggLSAxXS5yZWNvcmRzLmluZGV4T2YoZmlyc3RSb3cpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKz0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcHJlY2VkaW5nRGV0YWlsUm93cy5sZW5ndGggKyBwcmVjZWRpbmdTdW1tYXJ5Um93cyArIGZpcnN0Um93SW5kICsgdGhpcy5pbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcGFyZW50IHJvdywgaWYgZ3JpZCBpcyBncm91cGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGFyZW50KCk6IFJvd1R5cGUge1xuICAgICAgICBsZXQgcGFyZW50OiBJZ3hHcm91cEJ5Um93O1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpID0gdGhpcy5pbmRleCAtIDE7XG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgIXBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcmVjID0gdGhpcy5ncmlkLmRhdGFWaWV3W2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocmVjKSkge1xuICAgICAgICAgICAgICAgIHBhcmVudCA9IG5ldyBJZ3hHcm91cEJ5Um93KHRoaXMuZ3JpZCwgaSwgcmVjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkUm93IGV4dGVuZHMgQmFzZVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQsXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55LCBwcml2YXRlIF90cmVlUm93PzogSVRyZWVHcmlkUmVjb3JkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhICYmIGRhdGEuYWRkUm93ICYmIGRhdGEucmVjb3JkUmVmID8gZGF0YS5yZWNvcmRSZWYgOiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zICYmICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSA+IDApKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZGV4ID0gdGhpcy5ncmlkLnByb2Nlc3NlZEV4cGFuZGVkRmxhdERhdGEuaW5kZXhPZih0aGlzLmdyaWQuZGF0YVZpZXdbMF0uZGF0YSk7XG4gICAgICAgICAgICAgICAgLy8gZmlyc3RSb3dJbmRleCBpcyBiYXNlZCBvbiBkYXRhIHJlc3VsdCBhZnRlciBhbGwgcGlwZXMgdHJpZ2dlcmVkLCBleGNsdWRpbmcgc3VtbWFyeSBwaXBlXG4gICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSB0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSArIDE7XG4gICAgICAgICAgICAgICAgLy8gdGhlcmUgaXMgYSBzdW1tYXJ5IHJvdyBmb3IgZWFjaCByb290IHJlY29yZCwgc28gd2UgY2FsY3VsYXRlIGhvdyBtYW55IHJvb3QgcmVjb3JkcyBhcmUgcmVuZGVyZWQgYmVmb3JlIHRoZSBjdXJyZW50IHJvd1xuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFJvd0luZGV4ICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyB0aGlzLmluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBUaGUgZGF0YSBwYXNzZWQgdG8gdGhlIHJvdyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNlbGVjdGVkUm93RGF0YSA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0ucm93RGF0YTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuaW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aCh0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3kuY2xvbmUodGhpcy5fZGF0YSA/PyB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF0pLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMua2V5LCBmYWxzZSksXG4gICAgICAgICAgICAgICAgKG9ialZhbHVlLCBzcmNWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVjID0gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YSA/IHRoaXMuX2RhdGEgOiB0aGlzLmdyaWQuaXNUcmVlUm93KHJlYykgPyByZWMuZGF0YSA6IHJlYztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGlsZCByb3dzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogUm93VHlwZVtdIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IElneFRyZWVHcmlkUm93W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMudHJlZVJvdy5leHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy50cmVlUm93LmNoaWxkcmVuLmZvckVhY2goKHJlYywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hUcmVlR3JpZFJvdyh0aGlzLmdyaWQsIHRoaXMuaW5kZXggKyAxICsgaSwgcmVjLmRhdGEpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gocm93KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgcm93LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGFyZW50KCk6IFJvd1R5cGUge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ2V0Um93QnlLZXkodGhpcy50cmVlUm93LnBhcmVudD8ucm93SUQpO1xuICAgICAgICByZXR1cm4gcm93O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBjaGlsZCByb3dzIGV4aXN0LiBBbHdheXMgcmV0dXJuIGZhbHNlIGZvciBJZ3hHcmlkUm93LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVSb3cuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyZWVSb3cuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBgSVRyZWVHcmlkUmVjb3JkYCB3aXRoIG1ldGFkYXRhIGFib3V0IHRoZSByb3cgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRyZWUgZ3JpZC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCByb3dQYXJlbnQgPSB0aGlzLnRyZWVHcmlkLmdldFJvd0J5S2V5KDEpLnRyZWVSb3cucGFyZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdHJlZVJvdygpOiBJVHJlZUdyaWRSZWNvcmQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJlZVJvdyA/PyB0aGlzLmdyaWQucmVjb3Jkcy5nZXQodGhpcy5rZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNQaW5uZWQgPSByb3cucGlubmVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGlubmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHJvdy5waW5uZWQgPSAhcm93LnBpbm5lZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHBpbm5lZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5waW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5waW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIGV4cGFuZGVkLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBlc0V4cGFuZGVkID0gcm93LmV4cGFuZGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLnRyZWVSb3cpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMvY29sbGFwc2VzIHRoZSByb3cuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcm93LmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmtleSwgdmFsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBUT0RPIGNlbGxcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0dob3N0UmVjb3JkKHRoaXMuZGF0YSkgPyB0aGlzLnRyZWVSb3cuaXNGaWx0ZXJlZE91dFBhcmVudCA9PT0gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb290UGFyZW50KHJvdzogSVRyZWVHcmlkUmVjb3JkKTogSVRyZWVHcmlkUmVjb3JkIHtcbiAgICAgICAgd2hpbGUgKHJvdy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJvdyA9IHJvdy5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hIaWVyYXJjaGljYWxHcmlkUm93IGV4dGVuZHMgQmFzZVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCxcbiAgICAgICAgcHVibGljIGluZGV4OiBudW1iZXIsIGRhdGE/OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgJiYgZGF0YS5hZGRSb3cgJiYgZGF0YS5yZWNvcmRSZWYgPyBkYXRhLnJlY29yZFJlZiA6IGRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHJvdyBpc2xhbmRzIGV4aXN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ3JpZC5jaGlsZExheW91dEtleXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpIHtcbiAgICAgICAgY29uc3QgZmlyc3RSb3dJbmQgPSB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhLmluZGV4T2YodGhpcy5ncmlkLmRhdGFWaWV3WzBdKTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWRSb3dzID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5maWx0ZXIoKHJlYywgaW5kKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gcmVjW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHJlYztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmlyc3RSb3dJbmQgKyBleHBhbmRlZFJvd3MubGVuZ3RoICsgdGhpcy5pbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSByZW5kZXJlZCBjZWxscyBpbiB0aGUgcm93IGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNlbGxzKCk6IENlbGxUeXBlW10ge1xuICAgICAgICBjb25zdCByZXM6IENlbGxUeXBlW10gPSBbXTtcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbkxpc3QuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2VsbDogQ2VsbFR5cGUgPSBuZXcgSWd4R3JpZENlbGwodGhpcy5ncmlkLCB0aGlzLmluZGV4LCBjb2wuZmllbGQpO1xuICAgICAgICAgICAgcmVzLnB1c2goY2VsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneEdyb3VwQnlSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByb3cgaW5kZXguXG4gICAgICovXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSByb3cuXG4gICAgICovXG4gICAgcHVibGljIGdyaWQ6IElneEdyaWRDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsd2F5cyB0cnVlLCBiZWNhdXNlIHRoaXMgaXMgaW4gaW5zdGFuY2Ugb2YgYW4gSWd4R3JvdXBCeVJvdy5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNHcm91cEJ5Um93OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIElHcm91cEJ5UmVjb3JkIG9iamVjdCwgcmVwcmVzZW50aW5nIHRoZSBncm91cCByZWNvcmQsIGlmIHRoZSByb3cgaXMgYSBHcm91cEJ5Um93LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ3JvdXBSb3coKTogSUdyb3VwQnlSZWNvcmQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JvdXBSb3cgPyB0aGlzLl9ncm91cFJvdyA6IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGlsZCByb3dzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogUm93VHlwZVtdIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IElneEdyaWRSb3dbXSA9IFtdO1xuICAgICAgICB0aGlzLmdyb3VwUm93LnJlY29yZHMuZm9yRWFjaCgocmVjLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBuZXcgSWd4R3JpZFJvdyh0aGlzLmdyaWQsIHRoaXMuaW5kZXggKyAxICsgaSwgcmVjKTtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gocm93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYWdlKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdHcm91cFJvd3MgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93ID0gdGhpcy5ncmlkLmRhdGFWaWV3WzBdO1xuICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwZWRSb3dzID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoO1xuICAgICAgICAgICAgbGV0IHByZWNlZGluZ1N1bW1hcnlSb3dzID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcblxuICAgICAgICAgICAgLy8gZnJvbSBncm91cGluZ0ZsYXRSZXN1bHQsIHJlc29sdmUgdHdvIG90aGVyIGNvbGxlY3Rpb25zOlxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nR3JvdXBlZFJvd3MgLT4gdXNlIGl0IHRvIHJlc29sdmUgc3VtbWFyeVJvdyBmb3IgZWFjaCBncm91cCBpbiBwcmV2aW91cyBwYWdlc1xuICAgICAgICAgICAgLy8gcHJlY2VkaW5nRGV0YWlsUm93cyAtPiBpc2UgaXQgdG8gcmVzb2x2ZSB0aGUgZGV0YWlsIHJvdyBmb3IgZWFjaCBleHBhbmRlZCBncmlkIHJvdyBpbiBwcmV2aW91cyBwYWdlc1xuICAgICAgICAgICAgaWYgKGhhc0RldGFpbFJvd3MgfHwgaGFzR3JvdXBlZFJvd3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmZvckVhY2goKHIsIGluZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gclt0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzR3JvdXBlZFJvd3MgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0Um93IGlzIGEgY2hpbGQgb2YgdGhlIGxhc3QgaXRlbSBpbiBwcmVjZWRpbmdHcm91cFJvd3MsXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzdW1tYXJ5Um93IGZvciB0aGlzIGdpdmVuIGdyb3VwZWRSZWNvcmQgaXMgcmVuZGVyZWQgYWZ0ZXIgZmlyc3RSb3csXG4gICAgICAgICAgICAgICAgLy8gaS5lLiBuZWVkIHRvIGRlY3JlYXNlIGZpcnN0Um93SW5kIHRvIGFjY291bnQgZm9yIHRoZSBhYm92ZS5cbiAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHByZWNlZGluZ0dyb3VwUm93cy5maWx0ZXIoZ3IgPT4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cChncikpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gJiYgcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3NbcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAtIDFdLnJlY29yZHMuaW5kZXhPZihmaXJzdFJvdykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyArPSAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwcmVjZWRpbmdEZXRhaWxSb3dzLmxlbmd0aCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgZmlyc3RSb3dJbmQgKyB0aGlzLmluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZ3JpZDogSWd4R3JpZENvbXBvbmVudCwgaW5kZXg6IG51bWJlciwgcHJpdmF0ZSBfZ3JvdXBSb3c/OiBJR3JvdXBCeVJlY29yZCkge1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuaXNHcm91cEJ5Um93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBzZWxlY3RlZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHJvdy5zZWxlY3RlZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZXZlcnkocm93ID0+IHJvdy5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSAhcm93LnNlbGVjdGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd3NXaXRoTm9FdmVudChbcm93LmtleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdFJvd3NXaXRoTm9FdmVudChbcm93LmtleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgZ3JvdXAgcm93IGlzIGV4cGFuZGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBncm91cFJvd0V4cGFuZGVkID0gZ3JvdXBSb3cuZXhwYW5kZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAodGhpcy5ncm91cFJvdyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmdyaWRBUEkuc2V0X2dyb3Vwcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmdyb3VwUm93LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdmlnYXRpb24uYWN0aXZlTm9kZSA/IHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUucm93ID09PSB0aGlzLmluZGV4IDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgZ3JvdXAgcm93IGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogZ3JvdXBSb3cudG9nZ2xlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdyaWQudG9nZ2xlR3JvdXAodGhpcy5ncm91cFJvdyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZ3JpZEFQSSgpOiBJZ3hHcmlkQVBJU2VydmljZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSSBhcyBJZ3hHcmlkQVBJU2VydmljZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hTdW1tYXJ5Um93IGltcGxlbWVudHMgUm93VHlwZSB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcm93IGluZGV4LlxuICAgICAqL1xuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGdyaWQgdGhhdCBjb250YWlucyB0aGUgcm93LlxuICAgICAqL1xuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbHdheXMgdHJ1ZSwgYmVjYXVzZSB0aGlzIGlzIGluIGluc3RhbmNlIG9mIGFuIElneEdyb3VwQnlSb3cuXG4gICAgICovXG4gICAgcHVibGljIGlzU3VtbWFyeVJvdzogYm9vbGVhbjtcblxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VyZW50IGdyaWQgdHlwZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ3JpZFR5cGU6IEdyaWRJbnN0YW5jZVR5cGU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgSUdyb3VwQnlSZWNvcmQgb2JqZWN0LCByZXByZXNlbnRpbmcgdGhlIGdyb3VwIHJlY29yZCwgaWYgdGhlIHJvdyBpcyBhIEdyb3VwQnlSb3cuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzdW1tYXJpZXMoKTogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdW1tYXJpZXMgPyB0aGlzLl9zdW1tYXJpZXMgOiB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF0uc3VtbWFyaWVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zICYmIHRoaXMuZ3JpZC5wYWdlID4gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IEdyaWRJbnN0YW5jZVR5cGUuR3JpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZCA9IHRoaXMuZ3JpZCBhcyBJZ3hHcmlkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQucGFnZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0dyb3VwUm93cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBlZFJvd3MgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIGdyb3VwaW5nRmxhdFJlc3VsdCwgcmVzb2x2ZSB0d28gb3RoZXIgY29sbGVjdGlvbnM6XG4gICAgICAgICAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJlY2VkaW5nRGV0YWlsUm93cyAtPiBpc2UgaXQgdG8gcmVzb2x2ZSB0aGUgZGV0YWlsIHJvdyBmb3IgZWFjaCBleHBhbmRlZCBncmlkIHJvdyBpbiBwcmV2aW91cyBwYWdlc1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGV0YWlsUm93cyB8fCBoYXNHcm91cGVkUm93cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gclt0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNHcm91cGVkUm93cyAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0RldGFpbFJvd3MucHVzaChyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZmlyc3RSb3cgaXMgYSBjaGlsZCBvZiB0aGUgbGFzdCBpdGVtIGluIHByZWNlZGluZ0dyb3VwUm93cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gc3VtbWFyeVJvdyBmb3IgdGhpcyBnaXZlbiBncm91cGVkUmVjb3JkIGlzIHJlbmRlcmVkIGFmdGVyIGZpcnN0Um93LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaS5lLiBuZWVkIHRvIGRlY3JlYXNlIGZpcnN0Um93SW5kIHRvIGFjY291bnQgZm9yIHRoZSBhYm92ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ1N1bW1hcnlSb3dzID0gcHJlY2VkaW5nR3JvdXBSb3dzLmZpbHRlcihnciA9PiB0aGlzLmdyaWQuaXNFeHBhbmRlZEdyb3VwKGdyKSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tICYmIHByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3NbcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAtIDFdLnJlY29yZHMuaW5kZXhPZihmaXJzdFJvdykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ1N1bW1hcnlSb3dzICs9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWNlZGluZ0RldGFpbFJvd3MubGVuZ3RoICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyBmaXJzdFJvd0luZCArIHRoaXMuaW5kZXg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRUeXBlID09PSBHcmlkSW5zdGFuY2VUeXBlLlRyZWVHcmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkID0gdGhpcy5ncmlkIGFzIElneFRyZWVHcmlkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZGV4ID0gdGhpcy5ncmlkLnByb2Nlc3NlZEV4cGFuZGVkRmxhdERhdGEuaW5kZXhPZih0aGlzLmdyaWQuZGF0YVZpZXdbMF0uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ1N1bW1hcnlSb3dzID0gdGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gP1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvb3RSZWNvcmRzLmluZGV4T2YodGhpcy5nZXRSb290UGFyZW50KHRoaXMuZ3JpZC5kYXRhVmlld1swXSkpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFJvd0luZGV4ICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyB0aGlzLmluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50LFxuICAgICAgICBpbmRleDogbnVtYmVyLCBwcml2YXRlIF9zdW1tYXJpZXM/OiBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+LCB0eXBlPzogR3JpZEluc3RhbmNlVHlwZSkge1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuaXNTdW1tYXJ5Um93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ncmlkVHlwZSA9IHR5cGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb290UGFyZW50KHJvdzogSVRyZWVHcmlkUmVjb3JkKTogSVRyZWVHcmlkUmVjb3JkIHtcbiAgICAgICAgd2hpbGUgKHJvdy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJvdyA9IHJvdy5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9XG59XG4iXX0=
@@ -136,10 +136,10 @@ IgxGroupByAreaDirective.propDecorators = {
136
136
  export class IgxGroupByMetaPipe {
137
137
  transform(key, grid) {
138
138
  const column = grid.getColumnByName(key);
139
- return { groupable: column.groupable, title: column.header || key };
139
+ return { groupable: !!(column === null || column === void 0 ? void 0 : column.groupable), title: (column === null || column === void 0 ? void 0 : column.header) || key };
140
140
  }
141
141
  }
142
142
  IgxGroupByMetaPipe.decorators = [
143
143
  { type: Pipe, args: [{ name: 'igxGroupByMeta' },] }
144
144
  ];
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnktYXJlYS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JvdXBpbmcvZ3JvdXAtYnktYXJlYS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLElBQUksRUFJSixZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE4QixnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFHdEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0U7Ozs7R0FJRztBQUVILE1BQU0sT0FBZ0IsdUJBQXVCO0lBd0V6QyxZQUFvQixHQUE0QixFQUFZLFFBQXNCO1FBQTlELFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBQVksYUFBUSxHQUFSLFFBQVEsQ0FBYztRQS9EM0UsWUFBTyxHQUFtQixjQUFjLENBQUMsV0FBVyxDQUFDO1FBR3JELGlCQUFZLEdBQUksSUFBSSxDQUFDO1FBNkNyQixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQVk3RCxpQkFBWSxHQUEwQixFQUFFLENBQUM7SUFHcUMsQ0FBQztJQTFEdkYsSUFDVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQ1csWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFP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bEM7Ozs7OztHQU1HO0FBRUgsTUFBTSxPQUFPLGtCQUFrQjtJQUVwQixTQUFTLENBQUMsR0FBVyxFQUFFLElBQWM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7SUFDeEUsQ0FBQzs7O1lBTkosSUFBSSxTQUFDLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIERpcmVjdGl2ZSxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0QmluZGluZyxcclxuICAgIElucHV0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUGlwZSxcclxuICAgIFBpcGVUcmFuc2Zvcm0sXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBUZW1wbGF0ZVJlZixcclxuICAgIFZpZXdDaGlsZHJlblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJQ2hpcHNBcmVhUmVvcmRlckV2ZW50QXJncywgSWd4Q2hpcENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NoaXBzL3B1YmxpY19hcGknO1xyXG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eSB9IGZyb20gJy4uLy4uL2NvcmUvZGlzcGxheURlbnNpdHknO1xyXG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcclxuaW1wb3J0IHsgSUdyb3VwaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSWd4Q29sdW1uTW92aW5nRHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4uL21vdmluZy9tb3ZpbmcuZHJhZy5kaXJlY3RpdmUnO1xyXG5cclxuLyoqXHJcbiAqIEFuIGludGVybmFsIGNvbXBvbmVudCByZXByZXNlbnRpbmcgYSBiYXNlIGdyb3VwLWJ5IGRyb3AgYXJlYS5cclxuICpcclxuICogQGhpZGRlbiBAaW50ZXJuYWxcclxuICovXHJcbiBARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElneEdyb3VwQnlBcmVhRGlyZWN0aXZlIHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRyb3AgYXJlYSB0ZW1wbGF0ZSBpZiBwcm92aWRlZCBieSB0aGUgcGFyZW50IGdyaWQuXHJcbiAgICAgKiBPdGhlcndpc2UsIHVzZXMgdGhlIGRlZmF1bHQgaW50ZXJuYWwgb25lLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRyb3BBcmVhVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHZvaWQ+O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGVuc2l0eTogRGlzcGxheURlbnNpdHkgPSBEaXNwbGF5RGVuc2l0eS5jb21mb3J0YWJsZTtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkLWdyb3VwYXJlYScpXHJcbiAgICBwdWJsaWMgZGVmYXVsdENsYXNzID0gIHRydWU7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC1ncm91cGFyZWEtLWNvc3knKVxyXG4gICAgcHVibGljIGdldCBjb3N5U3R5bGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVuc2l0eSA9PT0gJ2Nvc3knO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtZ3JvdXBhcmVhLS1jb21wYWN0JylcclxuICAgIHB1YmxpYyBnZXQgY29tcGFjdFN0eWxlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlbnNpdHkgPT09ICdjb21wYWN0JztcclxuICAgIH1cclxuXHJcbiAgICAvKiogVGhlIHBhcmVudCBncmlkIGNvbnRhaW5pbmcgdGhlIGNvbXBvbmVudC4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ3JpZDogR3JpZFR5cGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JvdXAtYnkgZXhwcmVzc2lvbnMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCBncmlkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBleHByZXNzaW9ucygpOiBJR3JvdXBpbmdFeHByZXNzaW9uW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHByZXNzaW9ucztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IGV4cHJlc3Npb25zKHZhbHVlOiBJR3JvdXBpbmdFeHByZXNzaW9uW10pIHtcclxuICAgICAgICB0aGlzLl9leHByZXNzaW9ucyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuY2hpcEV4cHJlc3Npb25zID0gdGhpcy5fZXhwcmVzc2lvbnM7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uc0NoYW5nZWQoKTtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25zQ2hhbmdlLmVtaXQodGhpcy5fZXhwcmVzc2lvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlZmF1bHQgbWVzc2FnZSBmb3IgdGhlIGRlZmF1bHQgZHJvcCBhcmVhIHRlbXBsYXRlLlxyXG4gICAgICogT2J2aW91c2x5LCBpZiBhbm90aGVyIHRlbXBsYXRlIGlzIHByb3ZpZGVkLCB0aGlzIGlzIGlnbm9yZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IGRyb3BBcmVhTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wQXJlYU1lc3NhZ2UgPz8gdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9ncm91cEJ5QXJlYV9tZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgZHJvcEFyZWFNZXNzYWdlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9kcm9wQXJlYU1lc3NhZ2UgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBleHByZXNzaW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyb3VwaW5nRXhwcmVzc2lvbltdPigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oSWd4Q2hpcENvbXBvbmVudClcclxuICAgIHB1YmxpYyBjaGlwczogUXVlcnlMaXN0PElneENoaXBDb21wb25lbnQ+O1xyXG5cclxuICAgIHB1YmxpYyBjaGlwRXhwcmVzc2lvbnM6IElHcm91cGluZ0V4cHJlc3Npb25bXTtcclxuXHJcbiAgICAvKiogVGhlIG5hdGl2ZSBET00gZWxlbWVudC4gVXNlZCBpbiBzaXppbmcgY2FsY3VsYXRpb25zLiAqL1xyXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2V4cHJlc3Npb25zOiBJR3JvdXBpbmdFeHByZXNzaW9uW10gPSBbXTtcclxuICAgIHByaXZhdGUgX2Ryb3BBcmVhTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHsgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRyb3BBcmVhVmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZ3JpZC5jb2x1bW5JbkRyYWcgJiYgdGhpcy5ncmlkLmNvbHVtbkluRHJhZy5ncm91cGFibGUpIHx8XHJcbiAgICAgICAgICAgICF0aGlzLmV4cHJlc3Npb25zLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlS2V5RG93bihpZDogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKGlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUNsaWNrKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUoaWQpLmdyb3VwYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgIHB1YmxpYyBvbkRyYWdEcm9wKGV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZHJhZzogSWd4Q29sdW1uTW92aW5nRHJhZ0RpcmVjdGl2ZSA9IGV2ZW50LmRldGFpbC5vd25lcjtcclxuICAgICAgICBpZiAoZHJhZyBpbnN0YW5jZW9mIElneENvbHVtbk1vdmluZ0RyYWdEaXJlY3RpdmUpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uOiBJZ3hDb2x1bW5Db21wb25lbnQgPSBkcmFnLmNvbHVtbjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jb2x1bW5zLmluZGV4T2YoY29sdW1uKSA8IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaXNHcm91cGVkID0gdGhpcy5leHByZXNzaW9ucy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uZmllbGROYW1lID09PSBjb2x1bW4uZmllbGQpICE9PSAtMTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5ncm91cGFibGUgJiYgIWlzR3JvdXBlZCAmJiAhY29sdW1uLmNvbHVtbkdyb3VwICYmICEhY29sdW1uLmZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGluZ0V4cHJlc3Npb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyOiBTb3J0aW5nRGlyZWN0aW9uLkFzYyxcclxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBjb2x1bW4uc29ydGluZ0lnbm9yZUNhc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGNvbHVtbi5zb3J0U3RyYXRlZ3ksXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmdDb21wYXJlcjogY29sdW1uLmdyb3VwaW5nQ29tcGFyZXJcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cEJ5KGdyb3VwaW5nRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldFJlb3JkZXJlZEV4cHJlc3Npb25zKGNoaXBzQXJyYXk6IElneENoaXBDb21wb25lbnRbXSkge1xyXG4gICAgICAgIGNvbnN0IG5ld0V4cHJlc3Npb25zID0gW107XHJcblxyXG4gICAgICAgIGNoaXBzQXJyYXkuZm9yRWFjaChjaGlwID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuZXhwcmVzc2lvbnMuZmluZChpdGVtID0+IGl0ZW0uZmllbGROYW1lID09PSBjaGlwLmlkKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGRpc2FsbG93IGNoYW5naW5nIG9yZGVyIGlmIHRoZXJlIGFyZSBjb2x1bW5zIHdpdGggZ3JvdXBhYmxlOiBmYWxzZVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUoZXhwci5maWVsZE5hbWUpPy5ncm91cGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbmV3RXhwcmVzc2lvbnMucHVzaChleHByKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ld0V4cHJlc3Npb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVTb3J0aW5nKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBleHByID0gdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucy5maW5kKGUgPT4gZS5maWVsZE5hbWUgPT09IGlkKTtcclxuICAgICAgICBleHByLmRpciA9IDMgLSBleHByLmRpcjtcclxuICAgICAgICB0aGlzLmdyaWQuc29ydChleHByKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXhwcmVzc2lvbnNDaGFuZ2VkKCkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhYnN0cmFjdCBoYW5kbGVSZW9yZGVyKGV2ZW50OiBJQ2hpcHNBcmVhUmVvcmRlckV2ZW50QXJncyk7XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IGhhbmRsZU1vdmVFbmQoKTtcclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgZ3JvdXBCeShleHByZXNzaW9uOiBJR3JvdXBpbmdFeHByZXNzaW9uKTtcclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgY2xlYXJHcm91cGluZyhuYW1lOiBzdHJpbmcpO1xyXG5cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgcGlwZSB0byBjaXJjdW12ZW50IHRoZSB1c2Ugb2YgZ2V0dGVycy9tZXRob2RzIGp1c3QgdG8gZ2V0IHNvbWUgYWRkaXRpb25hbFxyXG4gKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBncm91cGluZyBleHByZXNzaW9uIGFuZCBwYXNzIGl0IHRvIHRoZSBjaGlwIHJlcHJlc2VudGluZ1xyXG4gKiB0aGF0IGV4cHJlc3Npb24uXHJcbiAqXHJcbiAqIEBoaWRkZW4gQGludGVybmFsXHJcbiAqL1xyXG5AUGlwZSh7IG5hbWU6ICdpZ3hHcm91cEJ5TWV0YScgfSlcclxuZXhwb3J0IGNsYXNzIElneEdyb3VwQnlNZXRhUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oa2V5OiBzdHJpbmcsIGdyaWQ6IEdyaWRUeXBlKSB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uID0gZ3JpZC5nZXRDb2x1bW5CeU5hbWUoa2V5KTtcclxuICAgICAgICByZXR1cm4geyBncm91cGFibGU6IGNvbHVtbi5ncm91cGFibGUsIHRpdGxlOiBjb2x1bW4uaGVhZGVyIHx8IGtleSB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnktYXJlYS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JvdXBpbmcvZ3JvdXAtYnktYXJlYS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLElBQUksRUFJSixZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE4QixnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFHdEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0U7Ozs7R0FJRztBQUVILE1BQU0sT0FBZ0IsdUJBQXVCO0lBd0V6QyxZQUFvQixHQUE0QixFQUFZLFFBQXNCO1FBQTlELFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBQVksYUFBUSxHQUFSLFFBQVEsQ0FBYztRQS9EM0UsWUFBTyxHQUFtQixjQUFjLENBQUMsV0FBVyxDQUFDO1FBR3JELGlCQUFZLEdBQUksSUFBSSxDQUFDO1FBNkNyQixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQVk3RCxpQkFBWSxHQUEwQixFQUFFLENBQUM7SUFHcUMsQ0FBQztJQTFEdkYsSUFDVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQ1csWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFP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bEM7Ozs7OztHQU1HO0FBRUgsTUFBTSxPQUFPLGtCQUFrQjtJQUVwQixTQUFTLENBQUMsR0FBVyxFQUFFLElBQWM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxTQUFTLENBQUEsRUFBRSxLQUFLLEVBQUUsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxLQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzVFLENBQUM7OztZQU5KLElBQUksU0FBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBQaXBlLFxuICAgIFBpcGVUcmFuc2Zvcm0sXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElDaGlwc0FyZWFSZW9yZGVyRXZlbnRBcmdzLCBJZ3hDaGlwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2hpcHMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eSB9IGZyb20gJy4uLy4uL2NvcmUvZGlzcGxheURlbnNpdHknO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJR3JvdXBpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4Q29sdW1uTW92aW5nRHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4uL21vdmluZy9tb3ZpbmcuZHJhZy5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIEFuIGludGVybmFsIGNvbXBvbmVudCByZXByZXNlbnRpbmcgYSBiYXNlIGdyb3VwLWJ5IGRyb3AgYXJlYS5cbiAqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICovXG4gQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWd4R3JvdXBCeUFyZWFEaXJlY3RpdmUge1xuICAgIC8qKlxuICAgICAqIFRoZSBkcm9wIGFyZWEgdGVtcGxhdGUgaWYgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCBncmlkLlxuICAgICAqIE90aGVyd2lzZSwgdXNlcyB0aGUgZGVmYXVsdCBpbnRlcm5hbCBvbmUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZHJvcEFyZWFUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkZW5zaXR5OiBEaXNwbGF5RGVuc2l0eSA9IERpc3BsYXlEZW5zaXR5LmNvbWZvcnRhYmxlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC1ncm91cGFyZWEnKVxuICAgIHB1YmxpYyBkZWZhdWx0Q2xhc3MgPSAgdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtZ3JvdXBhcmVhLS1jb3N5JylcbiAgICBwdWJsaWMgZ2V0IGNvc3lTdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVuc2l0eSA9PT0gJ2Nvc3knO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtZ3JvdXBhcmVhLS1jb21wYWN0JylcbiAgICBwdWJsaWMgZ2V0IGNvbXBhY3RTdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVuc2l0eSA9PT0gJ2NvbXBhY3QnO1xuICAgIH1cblxuICAgIC8qKiBUaGUgcGFyZW50IGdyaWQgY29udGFpbmluZyB0aGUgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGdyb3VwLWJ5IGV4cHJlc3Npb25zIHByb3ZpZGVkIGJ5IHRoZSBwYXJlbnQgZ3JpZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZXhwcmVzc2lvbnMoKTogSUdyb3VwaW5nRXhwcmVzc2lvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cHJlc3Npb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZXhwcmVzc2lvbnModmFsdWU6IElHcm91cGluZ0V4cHJlc3Npb25bXSkge1xuICAgICAgICB0aGlzLl9leHByZXNzaW9ucyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoaXBFeHByZXNzaW9ucyA9IHRoaXMuX2V4cHJlc3Npb25zO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb25zQ2hhbmdlZCgpO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb25zQ2hhbmdlLmVtaXQodGhpcy5fZXhwcmVzc2lvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IG1lc3NhZ2UgZm9yIHRoZSBkZWZhdWx0IGRyb3AgYXJlYSB0ZW1wbGF0ZS5cbiAgICAgKiBPYnZpb3VzbHksIGlmIGFub3RoZXIgdGVtcGxhdGUgaXMgcHJvdmlkZWQsIHRoaXMgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZHJvcEFyZWFNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wQXJlYU1lc3NhZ2UgPz8gdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9ncm91cEJ5QXJlYV9tZXNzYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZHJvcEFyZWFNZXNzYWdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZHJvcEFyZWFNZXNzYWdlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGV4cHJlc3Npb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JvdXBpbmdFeHByZXNzaW9uW10+KCk7XG5cbiAgICBAVmlld0NoaWxkcmVuKElneENoaXBDb21wb25lbnQpXG4gICAgcHVibGljIGNoaXBzOiBRdWVyeUxpc3Q8SWd4Q2hpcENvbXBvbmVudD47XG5cbiAgICBwdWJsaWMgY2hpcEV4cHJlc3Npb25zOiBJR3JvdXBpbmdFeHByZXNzaW9uW107XG5cbiAgICAvKiogVGhlIG5hdGl2ZSBET00gZWxlbWVudC4gVXNlZCBpbiBzaXppbmcgY2FsY3VsYXRpb25zLiAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwcmVzc2lvbnM6IElHcm91cGluZ0V4cHJlc3Npb25bXSA9IFtdO1xuICAgIHByaXZhdGUgX2Ryb3BBcmVhTWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCkgeyB9XG5cblxuICAgIHB1YmxpYyBnZXQgZHJvcEFyZWFWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuZ3JpZC5jb2x1bW5JbkRyYWcgJiYgdGhpcy5ncmlkLmNvbHVtbkluRHJhZy5ncm91cGFibGUpIHx8XG4gICAgICAgICAgICAhdGhpcy5leHByZXNzaW9ucy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUtleURvd24oaWQ6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVDbGljayhpZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZShpZCkuZ3JvdXBhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKGlkKTtcbiAgICB9XG5cbiAgICAgcHVibGljIG9uRHJhZ0Ryb3AoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZHJhZzogSWd4Q29sdW1uTW92aW5nRHJhZ0RpcmVjdGl2ZSA9IGV2ZW50LmRldGFpbC5vd25lcjtcbiAgICAgICAgaWYgKGRyYWcgaW5zdGFuY2VvZiBJZ3hDb2x1bW5Nb3ZpbmdEcmFnRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW46IElneENvbHVtbkNvbXBvbmVudCA9IGRyYWcuY29sdW1uO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jb2x1bW5zLmluZGV4T2YoY29sdW1uKSA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzR3JvdXBlZCA9IHRoaXMuZXhwcmVzc2lvbnMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmZpZWxkTmFtZSA9PT0gY29sdW1uLmZpZWxkKSAhPT0gLTE7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmdyb3VwYWJsZSAmJiAhaXNHcm91cGVkICYmICFjb2x1bW4uY29sdW1uR3JvdXAgJiYgISFjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGluZ0V4cHJlc3Npb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBkaXI6IFNvcnRpbmdEaXJlY3Rpb24uQXNjLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBjb2x1bW4uc29ydGluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBjb2x1bW4uc29ydFN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICBncm91cGluZ0NvbXBhcmVyOiBjb2x1bW4uZ3JvdXBpbmdDb21wYXJlclxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwQnkoZ3JvdXBpbmdFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRSZW9yZGVyZWRFeHByZXNzaW9ucyhjaGlwc0FycmF5OiBJZ3hDaGlwQ29tcG9uZW50W10pIHtcbiAgICAgICAgY29uc3QgbmV3RXhwcmVzc2lvbnMgPSBbXTtcblxuICAgICAgICBjaGlwc0FycmF5LmZvckVhY2goY2hpcCA9PiB7XG4gICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5leHByZXNzaW9ucy5maW5kKGl0ZW0gPT4gaXRlbS5maWVsZE5hbWUgPT09IGNoaXAuaWQpO1xuXG4gICAgICAgICAgICAvLyBkaXNhbGxvdyBjaGFuZ2luZyBvcmRlciBpZiB0aGVyZSBhcmUgY29sdW1ucyB3aXRoIGdyb3VwYWJsZTogZmFsc2VcbiAgICAgICAgICAgIGlmICghdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZShleHByLmZpZWxkTmFtZSk/Lmdyb3VwYWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV3RXhwcmVzc2lvbnMucHVzaChleHByKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ld0V4cHJlc3Npb25zO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cGRhdGVTb3J0aW5nKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMuZmluZChlID0+IGUuZmllbGROYW1lID09PSBpZCk7XG4gICAgICAgIGV4cHIuZGlyID0gMyAtIGV4cHIuZGlyO1xuICAgICAgICB0aGlzLmdyaWQuc29ydChleHByKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZXhwcmVzc2lvbnNDaGFuZ2VkKCkge1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBoYW5kbGVSZW9yZGVyKGV2ZW50OiBJQ2hpcHNBcmVhUmVvcmRlckV2ZW50QXJncyk7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgaGFuZGxlTW92ZUVuZCgpO1xuXG4gICAgcHVibGljIGFic3RyYWN0IGdyb3VwQnkoZXhwcmVzc2lvbjogSUdyb3VwaW5nRXhwcmVzc2lvbik7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgY2xlYXJHcm91cGluZyhuYW1lOiBzdHJpbmcpO1xuXG59XG5cbi8qKlxuICogQSBwaXBlIHRvIGNpcmN1bXZlbnQgdGhlIHVzZSBvZiBnZXR0ZXJzL21ldGhvZHMganVzdCB0byBnZXQgc29tZSBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBncm91cGluZyBleHByZXNzaW9uIGFuZCBwYXNzIGl0IHRvIHRoZSBjaGlwIHJlcHJlc2VudGluZ1xuICogdGhhdCBleHByZXNzaW9uLlxuICpcbiAqIEBoaWRkZW4gQGludGVybmFsXG4gKi9cbkBQaXBlKHsgbmFtZTogJ2lneEdyb3VwQnlNZXRhJyB9KVxuZXhwb3J0IGNsYXNzIElneEdyb3VwQnlNZXRhUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybShrZXk6IHN0cmluZywgZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gZ3JpZC5nZXRDb2x1bW5CeU5hbWUoa2V5KTtcbiAgICAgICAgcmV0dXJuIHsgZ3JvdXBhYmxlOiAhIWNvbHVtbj8uZ3JvdXBhYmxlLCB0aXRsZTogY29sdW1uPy5oZWFkZXIgfHwga2V5IH07XG4gICAgfVxufVxuIl19
@@ -282,8 +282,8 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi
282
282
  }
283
283
  clearActivation() {
284
284
  // clear if previous activation exists.
285
- if (this.activeNode) {
286
- this.activeNode.row = null;
285
+ if (this.activeNode && Object.keys(this.activeNode).length) {
286
+ this.activeNode = Object.assign({});
287
287
  }
288
288
  }
289
289
  hasNextTarget(grid, index, isNext) {
@@ -379,4 +379,4 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi
379
379
  IgxHierarchicalGridNavigationService.decorators = [
380
380
  { type: Injectable }
381
381
  ];
382
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWdyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLW5hdmlnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBT3RFLE1BQU0sT0FBTyxvQ0FBcUMsU0FBUSx3QkFBd0I7SUFEbEY7O1FBSWMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO0lBcVl6QyxDQUFDO0lBbFlVLGFBQWEsQ0FBQyxLQUFvQjtRQUNyQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvRixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFO1lBQ2xGLE9BQU87U0FDVjtRQUVELE1BQU0sVUFBVSxHQUFH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aWNlIH0gZnJvbSAnLi4vZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU1VQUE9SVEVEX0tFWVMsIE5BVklHQVRJT05fS0VZUyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4Q2hpbGRHcmlkUm93Q29tcG9uZW50IH0gZnJvbSAnLi9jaGlsZC1ncmlkLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9ncmlkL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVBhdGhTZWdtZW50IH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuLi9yb3cuZGlyZWN0aXZlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbEdyaWROYXZpZ2F0aW9uU2VydmljZSBleHRlbmRzIElneEdyaWROYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgcHVibGljIGdyaWQ6IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQ7XG5cbiAgICBwcm90ZWN0ZWQgX3BlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG5cblxuICAgIHB1YmxpYyBkaXNwYXRjaEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSB8fCAhKFNVUFBPUlRFRF9LRVlTLmhhcyhrZXkpIHx8IChrZXkgPT09ICd0YWInICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsKSkgJiZcbiAgICAgICAgICAgICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93RWRpdGluZ0Jsb2NrZWQgJiYgIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXRHcmlkID0gdGhpcy5nZXRDbG9zZXN0RWxlbUJ5VGFnKGV2ZW50LnRhcmdldCwgJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCcpO1xuICAgICAgICBpZiAodGFyZ2V0R3JpZCAhPT0gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiAmJiBOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2UgZm9jdXMgbmVlZHMgdG8gYmUgbW92ZWQgZnJvbSBvbmUgZ3JpZCB0byBhbm90aGVyLCBob3dldmVyIHRoZXJlIGlzIGEgcGVuZGluZyBzY3JvbGwgb3BlcmF0aW9uXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sIGFueSBhZGRpdGlvbmFsIG5hdmlnYXRpb24ga2V5cyBzaG91bGQgYmUgaWdub3JlZFxuICAgICAgICAgICAgLy8gdW50aWxsIG9wZXJhdGlvbiBjb21wbGV0ZS5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5hdmlnYXRlSW5Cb2R5KHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiOiAoYXJnOiBhbnkpID0+IHZvaWQgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlYyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleF07XG4gICAgICAgIGlmIChyZWMgJiYgdGhpcy5ncmlkLmlzQ2hpbGRHcmlkUmVjb3JkKHJlYykpIHtcbiAgICAgICAgICAgICAvLyB0YXJnZXQgaXMgY2hpbGQgZ3JpZFxuICAgICAgICAgICAgY29uc3QgdmlydFN0YXRlID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnN0YXRlO1xuICAgICAgICAgICAgIGNvbnN0IGluVmlldyA9IHJvd0luZGV4ID49IHZpcnRTdGF0ZS5zdGFydEluZGV4ICYmIHJvd0luZGV4IDw9IHZpcnRTdGF0ZS5zdGFydEluZGV4ICsgdmlydFN0YXRlLmNodW5rU2l6ZTtcbiAgICAgICAgICAgICBjb25zdCBpc05leHQgPSAgdGhpcy5hY3RpdmVOb2RlLnJvdyA8IHJvd0luZGV4O1xuICAgICAgICAgICAgIGNvbnN0IHRhcmdldExheW91dEluZGV4ID0gaXNOZXh0ID8gbnVsbCA6IHRoaXMuZ3JpZC5jaGlsZExheW91dEtleXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICBpZiAoaW5WaWV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVRvQ2hpbGQocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCwgaXNOZXh0LCB0YXJnZXRMYXlvdXRJbmRleCwgY2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgc2Nyb2xsQW1vdW50ID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmdldFNjcm9sbEZvckluZGV4KHJvd0luZGV4LCAhaXNOZXh0KTtcbiAgICAgICAgICAgICAgICBzY3JvbGxBbW91bnQgKz0gaXNOZXh0ID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTY3JvbGwoKS5zY3JvbGxUb3AgPSBzY3JvbGxBbW91bnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ05hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5jaHVua0xvYWQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlVG9DaGlsZChyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4LCBpc05leHQsIHRhcmdldExheW91dEluZGV4LCBjYik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0xhc3QgPSByb3dJbmRleCA9PT0gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aDtcbiAgICAgICAgaWYgKChyb3dJbmRleCA9PT0gLTEgfHwgaXNMYXN0KSAmJlxuICAgICAgICAgICAgdGhpcy5ncmlkLnBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gcmVhY2hlZCBlbmQgb2YgY2hpbGQgZ3JpZFxuICAgICAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdJbmRleCA9IHRoaXMubmV4dFNpYmxpbmdJbmRleChpc0xhc3QpO1xuICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucGFyZW50Lm5hdmlnYXRpb24uX21vdmVUb0NoaWxkKHRoaXMuZ3JpZC5jaGlsZFJvdy5pbmRleCwgdmlzaWJsZUNvbEluZGV4LCBpc0xhc3QsIG5leHRTaWJsaW5nSW5kZXgsIGNiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVRvUGFyZW50KGlzTGFzdCwgdmlzaWJsZUNvbEluZGV4LCBjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncmlkLnBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaXNOZXh0ID0gdGhpcy5hY3RpdmVOb2RlICYmIHR5cGVvZiB0aGlzLmFjdGl2ZU5vZGUucm93ID09PSAnbnVtYmVyJyA/IHJvd0luZGV4ID4gdGhpcy5hY3RpdmVOb2RlLnJvdyA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2JIYW5kbGVyID0gKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVTY3JvbGxJbkNoaWxkKHJvd0luZGV4LCBpc05leHQpO1xuICAgICAgICAgICAgICAgIGNiKGFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0geyByb3c6IG51bGwsIGNvbHVtbjogbnVsbCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3VwZXIubmF2aWdhdGVJbkJvZHkocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCwgY2JIYW5kbGVyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSB7IHJvdzogbnVsbCwgY29sdW1uOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmF2aWdhdGVJbkJvZHkocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCwgY2IpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwoaW5kZXgsIHZpc2libGVDb2x1bW5JbmRleCA9IC0xLCBpc05leHQ/KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlYyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tpbmRleF07XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaXNDaGlsZEdyaWRSZWNvcmQodGFyZ2V0UmVjKSkge1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsQW1vdW50ID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmdldFNjcm9sbEZvckluZGV4KGluZGV4LCAhaXNOZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJTY3JvbGwgPSB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2Nyb2xsKCkuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsID0gIWlzTmV4dCA/IHNjcm9sbEFtb3VudCA+IGN1cnJTY3JvbGwgOiBjdXJyU2Nyb2xsIDwgc2Nyb2xsQW1vdW50O1xuICAgICAgICAgICAgcmV0dXJuIHNob3VsZFNjcm9sbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwoaW5kZXgsIHZpc2libGVDb2x1bW5JbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNUYm9keShldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSB8fCB0aGlzLmFjdGl2ZU5vZGUucm93ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSB7XG4gICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8oMCwgMCwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jbGVhckNlbGxTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBvYmoudGFyZ2V0LmFjdGl2YXRlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5mb2N1c1Rib2R5KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBuZXh0U2libGluZ0luZGV4KGlzTmV4dCkge1xuICAgICAgICBjb25zdCBsYXlvdXRLZXkgPSB0aGlzLmdyaWQuY2hpbGRSb3cubGF5b3V0LmtleTtcbiAgICAgICAgY29uc3QgbGF5b3V0SW5kZXggPSB0aGlzLmdyaWQucGFyZW50LmNoaWxkTGF5b3V0S2V5cy5pbmRleE9mKGxheW91dEtleSk7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9IGlzTmV4dCA/IGxheW91dEluZGV4ICsgMSA6IGxheW91dEluZGV4IC0gMTtcbiAgICAgICAgaWYgKG5leHRJbmRleCA8PSB0aGlzLmdyaWQucGFyZW50LmNoaWxkTGF5b3V0S2V5cy5sZW5ndGggLSAxICYmIG5leHRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dEluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHNjcm9sbGluZyBpbiBjaGlsZCBncmlkIGFuZCBlbnN1cmVzIHRhcmdldCBjaGlsZCByb3cgaXMgaW4gbWFpbiBncmlkIHZpZXcgcG9ydC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByb3dJbmRleCBUaGUgcm93IGluZGV4IHdoaWNoIHNob3VsZCBiZSBpbiB2aWV3LlxuICAgICAqIEBwYXJhbSBpc05leHQgIE9wdGlvbmFsLiBXaGV0aGVyIHdlIGFyZSBuYXZpZ2F0aW5nIHRvIG5leHQuIFVzZWQgdG8gZGV0ZXJtaW5lIHNjcm9sbCBkaXJlY3Rpb24uXG4gICAgICogQHBhcmFtIGNiICBPcHRpb25hbC5DYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiBvcGVyYXRpb24gaXMgY29tcGxldGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVTY3JvbGxJbkNoaWxkKHJvd0luZGV4OiBudW1iZXIsIGlzTmV4dD86IGJvb2xlYW4sIGNiPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBzaG91bGRTY3JvbGwgPSB0aGlzLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbChyb3dJbmRleCwgLTEsIGlzTmV4dCk7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnBlcmZvcm1WZXJ0aWNhbFNjcm9sbFRvQ2VsbChyb3dJbmRleCwgLTEsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uSW5QYXJlbnQocm93SW5kZXgsIGlzTmV4dCwgY2IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSW5QYXJlbnQocm93SW5kZXgsIGlzTmV4dCwgY2IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93SW5kZXggUm93IGluZGV4IHRoYXQgc2hvdWxkIGNvbWUgaW4gdmlldy5cbiAgICAgKiBAcGFyYW0gaXNOZXh0ICBXaGV0aGVyIHdlIGFyZSBuYXZpZ2F0aW5nIHRvIG5leHQuIFVzZWQgdG8gZGV0ZXJtaW5lIHNjcm9sbCBkaXJlY3Rpb24uXG4gICAgICogQHBhcmFtIGNiICBPcHRpb25hbC5DYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiBvcGVyYXRpb24gaXMgY29tcGxldGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBvc2l0aW9uSW5QYXJlbnQocm93SW5kZXgsIGlzTmV4dCwgY2I/OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGNvbnN0IHJvd09iaiA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfYnlfaW5kZXgocm93SW5kZXgpO1xuICAgICAgICBpZiAoIXJvd09iaikge1xuICAgICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3NpdGlvbkluZm8gPSB0aGlzLmdldFBvc2l0aW9uSW5mbyhyb3dPYmosIGlzTmV4dCk7XG4gICAgICAgIGlmICghcG9zaXRpb25JbmZvLmluVmlldykge1xuICAgICAgICAgICAgLy8gc3RvcCBldmVudCBmcm9tIHRyaWdnZXJpbmcgbXVsdGlwbGUgdGltZXMgYmVmb3JlIHNjcm9sbGluZyBpcyBjb21wbGV0ZS5cbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVHcmlkID0gaXNOZXh0ID8gdGhpcy5nZXROZXh0U2Nyb2xsYWJsZURvd24odGhpcy5ncmlkKSA6IHRoaXMuZ2V0TmV4dFNjcm9sbGFibGVVcCh0aGlzLmdyaWQpO1xuICAgICAgICAgICAgc2Nyb2xsYWJsZUdyaWQuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5yZWNhbGNVcGRhdGVTaXplcygpO1xuICAgICAgICAgICAgc2Nyb2xsYWJsZUdyaWQuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5hZGRTY3JvbGxUb3AocG9zaXRpb25JbmZvLm9mZnNldCk7XG4gICAgICAgICAgICBzY3JvbGxhYmxlR3JpZC5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmNodW5rTG9hZC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlcyBuYXZpZ2F0aW9uIHRvIGNoaWxkIGdyaWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50Um93SW5kZXggVGhlIHBhcmVudCByb3cgaW5kZXgsIGF0IHdoaWNoIHRoZSBjaGlsZCBncmlkIGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBjaGlsZExheW91dEluZGV4IE9wdGlvbmFsLiBUaGUgaW5kZXggb2YgdGhlIGNoaWxkIHJvdyBpc2xhbmQgdG8gd2hpY2ggdGhlIGNoaWxkIGdyaWQgYmVsb25ncyB0by4gVXNlcyBmaXJzdCBpZiBub3Qgc2V0LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfbW92ZVRvQ2hpbGQocGFyZW50Um93SW5kZXg6IG51bWJlciwgdmlzaWJsZUNvbEluZGV4OiBudW1iZXIsIGlzTmV4dDogYm9vbGVhbiwgY2hpbGRMYXlvdXRJbmRleD86IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYj86IChhcmc6IGFueSkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCByaSA9IHR5cGVvZiBjaGlsZExheW91dEluZGV4ICE9PSAnbnVtYmVyJyA/XG4gICAgICAgICB0aGlzLmdyaWQuY2hpbGRMYXlvdXRMaXN0LmZpcnN0IDogdGhpcy5ncmlkLmNoaWxkTGF5b3V0TGlzdC50b0FycmF5KClbY2hpbGRMYXlvdXRJbmRleF07XG4gICAgICAgIGNvbnN0IHJvd0lkID0gdGhpcy5ncmlkLmRhdGFWaWV3W3BhcmVudFJvd0luZGV4XS5yb3dJRDtcbiAgICAgICAgY29uc3QgcGF0aFNlZ21lbnQ6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgIHJvd0lEOiByb3dJZCxcbiAgICAgICAgICAgIHJvd0lzbGFuZEtleTogcmkua2V5XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNoaWxkR3JpZCA9ICB0aGlzLmdyaWQuaGdyaWRBUEkuZ2V0Q2hpbGRHcmlkKFtwYXRoU2VnbWVudF0pO1xuICAgICAgICBjb25zdCB0YXJnZXRJbmRleCA9IGlzTmV4dCA/IDAgOiBjaGlsZEdyaWQuZGF0YVZpZXcubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjID0gIGNoaWxkR3JpZC5kYXRhVmlld1t0YXJnZXRJbmRleF07XG4gICAgICAgIGlmICghdGFyZ2V0UmVjKSB7XG4gICAgICAgICAgICAvLyBpZiBubyB0YXJnZXQgcmVjLCB0aGVuIG1vdmUgb24gaW4gbmV4dCBzaWJsaW5nIG9yIHBhcmVudFxuICAgICAgICAgICAgY2hpbGRHcmlkLm5hdmlnYXRpb24ubmF2aWdhdGVJbkJvZHkodGFyZ2V0SW5kZXgsIHZpc2libGVDb2xJbmRleCwgY2IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZEdyaWQuaXNDaGlsZEdyaWRSZWNvcmQodGFyZ2V0UmVjKSkge1xuICAgICAgICAgICAgLy8gaWYgdGFyZ2V0IGlzIGEgY2hpbGQgZ3JpZCByZWNvcmQgc2hvdWxkIG1vdmUgaW50byBpdC5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUucm93ID0gbnVsbDtcbiAgICAgICAgICAgIGNoaWxkR3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUgPSB7IHJvdzogdGFyZ2V0SW5kZXgsIGNvbHVtbjogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbn07XG4gICAgICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGlvbi5faGFuZGxlU2Nyb2xsSW5DaGlsZCh0YXJnZXRJbmRleCwgaXNOZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0TGF5b3V0SW5kZXggPSBpc05leHQgPyAwIDogY2hpbGRHcmlkLmNoaWxkTGF5b3V0TGlzdC50b0FycmF5KCkubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGlvbi5fbW92ZVRvQ2hpbGQodGFyZ2V0SW5kZXgsIHZpc2libGVDb2xJbmRleCwgaXNOZXh0LCB0YXJnZXRMYXlvdXRJbmRleCwgY2IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGlsZEdyaWROYXYgPSAgY2hpbGRHcmlkLm5hdmlnYXRpb247XG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSW5kZXggPSBjaGlsZEdyaWROYXYubGFzdENvbHVtbkluZGV4O1xuICAgICAgICBjb25zdCBjb2x1bW5JbmRleCA9IHZpc2libGVDb2xJbmRleCA8PSBsYXN0VmlzaWJsZUluZGV4ID8gdmlzaWJsZUNvbEluZGV4IDogbGFzdFZpc2libGVJbmRleDtcbiAgICAgICAgY2hpbGRHcmlkTmF2LmFjdGl2ZU5vZGUgPSB7IHJvdzogdGFyZ2V0SW5kZXgsIGNvbHVtbjogY29sdW1uSW5kZXh9O1xuICAgICAgICBjaGlsZEdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pO1xuICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGlvbi5faGFuZGxlU2Nyb2xsSW5DaGlsZCh0YXJnZXRJbmRleCwgaXNOZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGVUbyh0YXJnZXRJbmRleCwgY29sdW1uSW5kZXgsIGNiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgbmF2aWdhdGlvbiBiYWNrIHRvIHBhcmVudCBncmlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9tb3ZlVG9QYXJlbnQoaXNOZXh0OiBib29sZWFuLCBjb2x1bW5JbmRleCwgY2I/KSB7XG4gICAgICAgIGNvbnN0IGluZGV4SW5QYXJlbnQgPSB0aGlzLmdyaWQuY2hpbGRSb3cuaW5kZXg7XG4gICAgICAgIGNvbnN0IGhhc05leHRUYXJnZXQgPSB0aGlzLmhhc05leHRUYXJnZXQodGhpcy5ncmlkLnBhcmVudCwgaW5kZXhJblBhcmVudCwgaXNOZXh0KTtcbiAgICAgICAgaWYgKCFoYXNOZXh0VGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhckFjdGl2YXRpb24oKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSAgaXNOZXh0ID8gaW5kZXhJblBhcmVudCArIDEgOiBpbmRleEluUGFyZW50IC0gMTtcbiAgICAgICAgY29uc3QgbGFzdFZpc2libGVJbmRleCA9IHRoaXMuZ3JpZC5wYXJlbnQubmF2aWdhdGlvbi5sYXN0Q29sdW1uSW5kZXg7XG4gICAgICAgIGNvbnN0IG5leHRDb2x1bW5JbmRleCA9IGNvbHVtbkluZGV4IDw9IGxhc3RWaXNpYmxlSW5kZXggPyBjb2x1bW5JbmRleCA6IGxhc3RWaXNpYmxlSW5kZXg7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY2JGdW5jID0gKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICBjYihhcmdzKTtcbiAgICAgICAgICAgIGFyZ3MudGFyZ2V0LmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdyaWQucGFyZW50Lm5hdmlnYXRpb24ubmF2aWdhdGVJbkJvZHkodGFyZ2V0Um93SW5kZXgsIG5leHRDb2x1bW5JbmRleCwgY2JGdW5jKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGluZm9ybWF0aW9uIG9uIHRoZSByb3cgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHJvb3QgZ3JpZCB2aWV3IHBvcnQuXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByb3cgaXMgaW4gdmlldyBhbmQgaXRzIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByb3dPYmpcbiAgICAgKiBAcGFyYW0gaXNOZXh0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFBvc2l0aW9uSW5mbyhyb3dPYmo6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiwgaXNOZXh0OiBib29sZWFuKSB7XG4gICAgICAgIGxldCByb3dFbGVtID0gcm93T2JqLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChyb3dPYmogaW5zdGFuY2VvZiBJZ3hDaGlsZEdyaWRSb3dDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTGF5b3V0S2V5cyA9IHRoaXMuZ3JpZC5jaGlsZExheW91dEtleXM7XG4gICAgICAgICAgICBjb25zdCByaUtleSA9IGlzTmV4dCA/IGNoaWxkTGF5b3V0S2V5c1swXSA6IGNoaWxkTGF5b3V0S2V5c1tjaGlsZExheW91dEtleXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBwYXRoU2VnbWVudDogSVBhdGhTZWdtZW50ID0ge1xuICAgICAgICAgICAgICAgIHJvd0lEOiByb3dPYmoucm93RGF0YS5yb3dJRCxcbiAgICAgICAgICAgICAgICByb3dJc2xhbmRLZXk6IHJpS2V5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkID0gIHRoaXMuZ3JpZC5oZ3JpZEFQSS5nZXRDaGlsZEdyaWQoW3BhdGhTZWdtZW50XSk7XG4gICAgICAgICAgICByb3dFbGVtID0gY2hpbGRHcmlkLnRmb290Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JpZEJvdHRvbSA9IHRoaXMuX2dldE1pbkJvdHRvbSh0aGlzLmdyaWQpO1xuICAgICAgICBjb25zdCBkaWZmQm90dG9tID1cbiAgICAgICAgcm93RWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLSBncmlkQm90dG9tO1xuICAgICAgICBjb25zdCBncmlkVG9wID0gdGhpcy5fZ2V0TWF4VG9wKHRoaXMuZ3JpZCk7XG4gICAgICAgIGNvbnN0IGRpZmZUb3AgPSByb3dFbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtXG4gICAgICAgIHJvd0VsZW0ub2Zmc2V0SGVpZ2h0IC0gZ3JpZFRvcDtcbiAgICAgICAgY29uc3QgaXNJblZpZXcgPSBpc05leHQgPyBkaWZmQm90dG9tIDw9IDAgOiBkaWZmVG9wID49IDA7XG4gICAgICAgIGNvbnN0IGNhbGNPZmZzZXQgPSAgaXNOZXh0ID8gZGlmZkJvdHRvbSA6IGRpZmZUb3A7XG5cbiAgICAgICAgcmV0dXJuIHsgaW5WaWV3OiBpc0luVmlldywgb2Zmc2V0OiBjYWxjT2Zmc2V0IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBjbG9zZXN0IGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZUVsZW0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0byBzdGFydCB0aGUgc2VhcmNoLlxuICAgICAqIEBwYXJhbSB0YXJnZXRUYWcgVGhlIHRhcmdldCBlbGVtZW50IHRhZyBuYW1lLCBmb3Igd2hpY2ggdG8gc2VhcmNoLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRDbG9zZXN0RWxlbUJ5VGFnKHNvdXJjZUVsZW0sIHRhcmdldFRhZykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gc291cmNlRWxlbTtcbiAgICAgICAgd2hpbGUgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YXJnZXRUYWcudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQWN0aXZhdGlvbigpIHtcbiAgICAgICAgLy8gY2xlYXIgaWYgcHJldmlvdXMgYWN0aXZhdGlvbiBleGlzdHMuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZS5yb3cgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNOZXh0VGFyZ2V0KGdyaWQsIGluZGV4OiBudW1iZXIsIGlzTmV4dDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCB0YXJnZXRSb3dJbmRleCA9ICBpc05leHQgPyBpbmRleCArIDEgOiBpbmRleCAtIDE7XG4gICAgICAgIGNvbnN0IGhhc1RhcmdldFJlY29yZCA9ICEhZ3JpZC5kYXRhVmlld1t0YXJnZXRSb3dJbmRleF07XG4gICAgICAgIGlmIChoYXNUYXJnZXRSZWNvcmQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGhhc1RhcmdldFJlY29yZEluUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZ3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleEluUGFyZW50ID0gZ3JpZC5jaGlsZFJvdy5pbmRleDtcbiAgICAgICAgICAgICAgICBoYXNUYXJnZXRSZWNvcmRJblBhcmVudCA9IHRoaXMuaGFzTmV4dFRhcmdldChncmlkLnBhcmVudCwgaW5kZXhJblBhcmVudCwgaXNOZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYXNUYXJnZXRSZWNvcmRJblBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1heCB0b3AgdmlldyBpbiB0aGUgY3VycmVudCBncmlkIGhpZXJhcmNoeS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBncmlkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0TWF4VG9wKGdyaWQpIHtcbiAgICAgICAgbGV0IGN1cnJHcmlkID0gZ3JpZDtcbiAgICAgICAgbGV0IHRvcCA9IGN1cnJHcmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICB3aGlsZSAoY3VyckdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICBjdXJyR3JpZCA9IGN1cnJHcmlkLnBhcmVudDtcbiAgICAgICAgICAgIGNvbnN0IHBpbm5lZFJvd3NIZWlnaHQgPSBjdXJyR3JpZC5oYXNQaW5uZWRSZWNvcmRzICYmIGN1cnJHcmlkLmlzUm93UGlubmluZ1RvVG9wID8gY3VyckdyaWQucGlubmVkUm93SGVpZ2h0IDogMDtcbiAgICAgICAgICAgIHRvcCA9IE1hdGgubWF4KHRvcCwgY3VyckdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBwaW5uZWRSb3dzSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9wO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1pbiBib3R0b20gdmlldyBpbiB0aGUgY3VycmVudCBncmlkIGhpZXJhcmNoeS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBncmlkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0TWluQm90dG9tKGdyaWQpIHtcbiAgICAgICAgbGV0IGN1cnJHcmlkID0gZ3JpZDtcbiAgICAgICAgbGV0IGJvdHRvbSA9IGN1cnJHcmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO1xuICAgICAgICB3aGlsZSAoY3VyckdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICBjdXJyR3JpZCA9IGN1cnJHcmlkLnBhcmVudDtcbiAgICAgICAgICAgIGNvbnN0IHBpbm5lZFJvd3NIZWlnaHQgPSBjdXJyR3JpZC5oYXNQaW5uZWRSZWNvcmRzICYmICFjdXJyR3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCA/IGN1cnJHcmlkLnBpbm5lZFJvd0hlaWdodCA6IDA7XG4gICAgICAgICAgICBib3R0b20gPSBNYXRoLm1pbihib3R0b20sIGN1cnJHcmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIC0gcGlubmVkUm93c0hlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvdHRvbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgbmV4dCBncmlkIHRoYXQgYWxsb3dzIHNjcm9sbGluZyBkb3duLlxuICAgICAqXG4gICAgICogQHBhcmFtIGdyaWQgVGhlIGdyaWQgZnJvbSB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TmV4dFNjcm9sbGFibGVEb3duKGdyaWQpIHtcbiAgICAgICAgbGV0IGN1cnJHcmlkID0gZ3JpZC5wYXJlbnQ7XG4gICAgICAgIGlmICghY3VyckdyaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyaWQsIHByZXY6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2Nyb2xsVG9wID0gY3VyckdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsUG9zaXRpb247XG4gICAgICAgIGxldCBzY3JvbGxIZWlnaHQgPSBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTY3JvbGwoKS5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGxldCBub25TY3JvbGxhYmxlID0gc2Nyb2xsSGVpZ2h0ID09PSAwIHx8XG4gICAgICAgICAgICBNYXRoLnJvdW5kKHNjcm9sbFRvcCArIGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmlneEZvckNvbnRhaW5lclNpemUpID09PSBzY3JvbGxIZWlnaHQ7XG4gICAgICAgIGxldCBwcmV2ID0gZ3JpZDtcbiAgICAgICAgd2hpbGUgKG5vblNjcm9sbGFibGUgJiYgY3VyckdyaWQucGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwcmV2ID0gY3VyckdyaWQ7XG4gICAgICAgICAgICBjdXJyR3JpZCA9IGN1cnJHcmlkLnBhcmVudDtcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uO1xuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gY3VyckdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2Nyb2xsKCkuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgbm9uU2Nyb2xsYWJsZSA9IHNjcm9sbEhlaWdodCA9PT0gMCB8fFxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoc2Nyb2xsVG9wICsgY3VyckdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuaWd4Rm9yQ29udGFpbmVyU2l6ZSkgPT09IHNjcm9sbEhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBncmlkOiBjdXJyR3JpZCwgcHJldiB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIHRoZSBuZXh0IGdyaWQgdGhhdCBhbGxvd3Mgc2Nyb2xsaW5nIHVwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGdyaWQgVGhlIGdyaWQgZnJvbSB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TmV4dFNjcm9sbGFibGVVcChncmlkKSB7XG4gICAgICAgIGxldCBjdXJyR3JpZCA9IGdyaWQucGFyZW50O1xuICAgICAgICBpZiAoIWN1cnJHcmlkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBncmlkLCBwcmV2OiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5vblNjcm9sbGFibGUgPSBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxQb3NpdGlvbiA9PT0gMDtcbiAgICAgICAgbGV0IHByZXYgPSBncmlkO1xuICAgICAgICB3aGlsZSAobm9uU2Nyb2xsYWJsZSAmJiBjdXJyR3JpZC5wYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHByZXYgPSBjdXJyR3JpZDtcbiAgICAgICAgICAgIGN1cnJHcmlkID0gY3VyckdyaWQucGFyZW50O1xuICAgICAgICAgICAgbm9uU2Nyb2xsYWJsZSA9IGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGdyaWQ6IGN1cnJHcmlkLCBwcmV2IH07XG4gICAgfVxufVxuIl19
382
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWdyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLW5hdmlnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBT3RFLE1BQU0sT0FBTyxvQ0FBcUMsU0FBUSx3QkFBd0I7SUFEbEY7O1FBSWMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO0lBcVl6QyxDQUFDO0lBbFlVLGFBQWEsQ0FBQyxLQUFvQjtRQUNyQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvRixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFO1lBQ2xGLE9BQU87U0FDVjtRQUVELE1BQU0sVUFBVSxHQUFH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QyxDQUFDOzs7WUF4WUosVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElneEdyaWROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2dyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNVUFBPUlRFRF9LRVlTLCBOQVZJR0FUSU9OX0tFWVMgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneENoaWxkR3JpZFJvd0NvbXBvbmVudCB9IGZyb20gJy4vY2hpbGQtZ3JpZC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElQYXRoU2VnbWVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Um93RGlyZWN0aXZlIH0gZnJvbSAnLi4vcm93LmRpcmVjdGl2ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hIaWVyYXJjaGljYWxHcmlkTmF2aWdhdGlvblNlcnZpY2UgZXh0ZW5kcyBJZ3hHcmlkTmF2aWdhdGlvblNlcnZpY2Uge1xuICAgIHB1YmxpYyBncmlkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xuXG4gICAgcHJvdGVjdGVkIF9wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuXG5cbiAgICBwdWJsaWMgZGlzcGF0Y2hFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgIShTVVBQT1JURURfS0VZUy5oYXMoa2V5KSB8fCAoa2V5ID09PSAndGFiJyAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCkpICYmXG4gICAgICAgICAgICAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkICYmICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0R3JpZCA9IHRoaXMuZ2V0Q2xvc2VzdEVsZW1CeVRhZyhldmVudC50YXJnZXQsICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnKTtcbiAgICAgICAgaWYgKHRhcmdldEdyaWQgIT09IHRoaXMuZ3JpZC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ05hdmlnYXRpb24gJiYgTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIGZvY3VzIG5lZWRzIHRvIGJlIG1vdmVkIGZyb20gb25lIGdyaWQgdG8gYW5vdGhlciwgaG93ZXZlciB0aGVyZSBpcyBhIHBlbmRpbmcgc2Nyb2xsIG9wZXJhdGlvblxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLCBhbnkgYWRkaXRpb25hbCBuYXZpZ2F0aW9uIGtleXMgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICAgICAgICAgIC8vIHVudGlsbCBvcGVyYXRpb24gY29tcGxldGUuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuYXZpZ2F0ZUluQm9keShyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4LCBjYjogKGFyZzogYW55KSA9PiB2b2lkID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbcm93SW5kZXhdO1xuICAgICAgICBpZiAocmVjICYmIHRoaXMuZ3JpZC5pc0NoaWxkR3JpZFJlY29yZChyZWMpKSB7XG4gICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIGNoaWxkIGdyaWRcbiAgICAgICAgICAgIGNvbnN0IHZpcnRTdGF0ZSA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zdGF0ZTtcbiAgICAgICAgICAgICBjb25zdCBpblZpZXcgPSByb3dJbmRleCA+PSB2aXJ0U3RhdGUuc3RhcnRJbmRleCAmJiByb3dJbmRleCA8PSB2aXJ0U3RhdGUuc3RhcnRJbmRleCArIHZpcnRTdGF0ZS5jaHVua1NpemU7XG4gICAgICAgICAgICAgY29uc3QgaXNOZXh0ID0gIHRoaXMuYWN0aXZlTm9kZS5yb3cgPCByb3dJbmRleDtcbiAgICAgICAgICAgICBjb25zdCB0YXJnZXRMYXlvdXRJbmRleCA9IGlzTmV4dCA/IG51bGwgOiB0aGlzLmdyaWQuY2hpbGRMYXlvdXRLZXlzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgaWYgKGluVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVUb0NoaWxkKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGlzTmV4dCwgdGFyZ2V0TGF5b3V0SW5kZXgsIGNiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjcm9sbEFtb3VudCA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTY3JvbGxGb3JJbmRleChyb3dJbmRleCwgIWlzTmV4dCk7XG4gICAgICAgICAgICAgICAgc2Nyb2xsQW1vdW50ICs9IGlzTmV4dCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2Nyb2xsKCkuc2Nyb2xsVG9wID0gc2Nyb2xsQW1vdW50O1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuY2h1bmtMb2FkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZVRvQ2hpbGQocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCwgaXNOZXh0LCB0YXJnZXRMYXlvdXRJbmRleCwgY2IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNMYXN0ID0gcm93SW5kZXggPT09IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIGlmICgocm93SW5kZXggPT09IC0xIHx8IGlzTGFzdCkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5wYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIHJlYWNoZWQgZW5kIG9mIGNoaWxkIGdyaWRcbiAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nSW5kZXggPSB0aGlzLm5leHRTaWJsaW5nSW5kZXgoaXNMYXN0KTtcbiAgICAgICAgICAgIGlmIChuZXh0U2libGluZ0luZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnBhcmVudC5uYXZpZ2F0aW9uLl9tb3ZlVG9DaGlsZCh0aGlzLmdyaWQuY2hpbGRSb3cuaW5kZXgsIHZpc2libGVDb2xJbmRleCwgaXNMYXN0LCBuZXh0U2libGluZ0luZGV4LCBjYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVUb1BhcmVudChpc0xhc3QsIHZpc2libGVDb2xJbmRleCwgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzTmV4dCA9IHRoaXMuYWN0aXZlTm9kZSAmJiB0eXBlb2YgdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gJ251bWJlcicgPyByb3dJbmRleCA+IHRoaXMuYWN0aXZlTm9kZS5yb3cgOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNiSGFuZGxlciA9IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlU2Nyb2xsSW5DaGlsZChyb3dJbmRleCwgaXNOZXh0KTtcbiAgICAgICAgICAgICAgICBjYihhcmdzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IHsgcm93OiBudWxsLCBjb2x1bW46IG51bGwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1cGVyLm5hdmlnYXRlSW5Cb2R5KHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiSGFuZGxlcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0geyByb3c6IG51bGwsIGNvbHVtbjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5hdmlnYXRlSW5Cb2R5KHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKGluZGV4LCB2aXNpYmxlQ29sdW1uSW5kZXggPSAtMSwgaXNOZXh0Pykge1xuICAgICAgICBjb25zdCB0YXJnZXRSZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbaW5kZXhdO1xuICAgICAgICBpZiAodGhpcy5ncmlkLmlzQ2hpbGRHcmlkUmVjb3JkKHRhcmdldFJlYykpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbEFtb3VudCA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTY3JvbGxGb3JJbmRleChpbmRleCwgIWlzTmV4dCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyU2Nyb2xsID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmdldFNjcm9sbCgpLnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbCA9ICFpc05leHQgPyBzY3JvbGxBbW91bnQgPiBjdXJyU2Nyb2xsIDogY3VyclNjcm9sbCA8IHNjcm9sbEFtb3VudDtcbiAgICAgICAgICAgIHJldHVybiBzaG91bGRTY3JvbGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKGluZGV4LCB2aXNpYmxlQ29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzVGJvZHkoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0ge1xuICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICBjb2x1bW46IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKDAsIDAsIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2xlYXJDZWxsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgb2JqLnRhcmdldC5hY3RpdmF0ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIuZm9jdXNUYm9keShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbmV4dFNpYmxpbmdJbmRleChpc05leHQpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0S2V5ID0gdGhpcy5ncmlkLmNoaWxkUm93LmxheW91dC5rZXk7XG4gICAgICAgIGNvbnN0IGxheW91dEluZGV4ID0gdGhpcy5ncmlkLnBhcmVudC5jaGlsZExheW91dEtleXMuaW5kZXhPZihsYXlvdXRLZXkpO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBpc05leHQgPyBsYXlvdXRJbmRleCArIDEgOiBsYXlvdXRJbmRleCAtIDE7XG4gICAgICAgIGlmIChuZXh0SW5kZXggPD0gdGhpcy5ncmlkLnBhcmVudC5jaGlsZExheW91dEtleXMubGVuZ3RoIC0gMSAmJiBuZXh0SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHRJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBzY3JvbGxpbmcgaW4gY2hpbGQgZ3JpZCBhbmQgZW5zdXJlcyB0YXJnZXQgY2hpbGQgcm93IGlzIGluIG1haW4gZ3JpZCB2aWV3IHBvcnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93SW5kZXggVGhlIHJvdyBpbmRleCB3aGljaCBzaG91bGQgYmUgaW4gdmlldy5cbiAgICAgKiBAcGFyYW0gaXNOZXh0ICBPcHRpb25hbC4gV2hldGhlciB3ZSBhcmUgbmF2aWdhdGluZyB0byBuZXh0LiBVc2VkIHRvIGRldGVybWluZSBzY3JvbGwgZGlyZWN0aW9uLlxuICAgICAqIEBwYXJhbSBjYiAgT3B0aW9uYWwuQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfaGFuZGxlU2Nyb2xsSW5DaGlsZChyb3dJbmRleDogbnVtYmVyLCBpc05leHQ/OiBib29sZWFuLCBjYj86ICgpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsID0gdGhpcy5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwocm93SW5kZXgsIC0xLCBpc05leHQpO1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGlvbi5wZXJmb3JtVmVydGljYWxTY3JvbGxUb0NlbGwocm93SW5kZXgsIC0xLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkluUGFyZW50KHJvd0luZGV4LCBpc05leHQsIGNiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkluUGFyZW50KHJvd0luZGV4LCBpc05leHQsIGNiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHJvd0luZGV4IFJvdyBpbmRleCB0aGF0IHNob3VsZCBjb21lIGluIHZpZXcuXG4gICAgICogQHBhcmFtIGlzTmV4dCAgV2hldGhlciB3ZSBhcmUgbmF2aWdhdGluZyB0byBuZXh0LiBVc2VkIHRvIGRldGVybWluZSBzY3JvbGwgZGlyZWN0aW9uLlxuICAgICAqIEBwYXJhbSBjYiAgT3B0aW9uYWwuQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwb3NpdGlvbkluUGFyZW50KHJvd0luZGV4LCBpc05leHQsIGNiPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCByb3dPYmogPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgaWYgKCFyb3dPYmopIHtcbiAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb25JbmZvID0gdGhpcy5nZXRQb3NpdGlvbkluZm8ocm93T2JqLCBpc05leHQpO1xuICAgICAgICBpZiAoIXBvc2l0aW9uSW5mby5pblZpZXcpIHtcbiAgICAgICAgICAgIC8vIHN0b3AgZXZlbnQgZnJvbSB0cmlnZ2VyaW5nIG11bHRpcGxlIHRpbWVzIGJlZm9yZSBzY3JvbGxpbmcgaXMgY29tcGxldGUuXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlR3JpZCA9IGlzTmV4dCA/IHRoaXMuZ2V0TmV4dFNjcm9sbGFibGVEb3duKHRoaXMuZ3JpZCkgOiB0aGlzLmdldE5leHRTY3JvbGxhYmxlVXAodGhpcy5ncmlkKTtcbiAgICAgICAgICAgIHNjcm9sbGFibGVHcmlkLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIucmVjYWxjVXBkYXRlU2l6ZXMoKTtcbiAgICAgICAgICAgIHNjcm9sbGFibGVHcmlkLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuYWRkU2Nyb2xsVG9wKHBvc2l0aW9uSW5mby5vZmZzZXQpO1xuICAgICAgICAgICAgc2Nyb2xsYWJsZUdyaWQuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5jaHVua0xvYWQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgbmF2aWdhdGlvbiB0byBjaGlsZCBncmlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudFJvd0luZGV4IFRoZSBwYXJlbnQgcm93IGluZGV4LCBhdCB3aGljaCB0aGUgY2hpbGQgZ3JpZCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gY2hpbGRMYXlvdXRJbmRleCBPcHRpb25hbC4gVGhlIGluZGV4IG9mIHRoZSBjaGlsZCByb3cgaXNsYW5kIHRvIHdoaWNoIHRoZSBjaGlsZCBncmlkIGJlbG9uZ3MgdG8uIFVzZXMgZmlyc3QgaWYgbm90IHNldC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX21vdmVUb0NoaWxkKHBhcmVudFJvd0luZGV4OiBudW1iZXIsIHZpc2libGVDb2xJbmRleDogbnVtYmVyLCBpc05leHQ6IGJvb2xlYW4sIGNoaWxkTGF5b3V0SW5kZXg/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2I/OiAoYXJnOiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3QgcmkgPSB0eXBlb2YgY2hpbGRMYXlvdXRJbmRleCAhPT0gJ251bWJlcicgP1xuICAgICAgICAgdGhpcy5ncmlkLmNoaWxkTGF5b3V0TGlzdC5maXJzdCA6IHRoaXMuZ3JpZC5jaGlsZExheW91dExpc3QudG9BcnJheSgpW2NoaWxkTGF5b3V0SW5kZXhdO1xuICAgICAgICBjb25zdCByb3dJZCA9IHRoaXMuZ3JpZC5kYXRhVmlld1twYXJlbnRSb3dJbmRleF0ucm93SUQ7XG4gICAgICAgIGNvbnN0IHBhdGhTZWdtZW50OiBJUGF0aFNlZ21lbnQgPSB7XG4gICAgICAgICAgICByb3dJRDogcm93SWQsXG4gICAgICAgICAgICByb3dJc2xhbmRLZXk6IHJpLmtleVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjaGlsZEdyaWQgPSAgdGhpcy5ncmlkLmhncmlkQVBJLmdldENoaWxkR3JpZChbcGF0aFNlZ21lbnRdKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSBpc05leHQgPyAwIDogY2hpbGRHcmlkLmRhdGFWaWV3Lmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlYyA9ICBjaGlsZEdyaWQuZGF0YVZpZXdbdGFyZ2V0SW5kZXhdO1xuICAgICAgICBpZiAoIXRhcmdldFJlYykge1xuICAgICAgICAgICAgLy8gaWYgbm8gdGFyZ2V0IHJlYywgdGhlbiBtb3ZlIG9uIGluIG5leHQgc2libGluZyBvciBwYXJlbnRcbiAgICAgICAgICAgIGNoaWxkR3JpZC5uYXZpZ2F0aW9uLm5hdmlnYXRlSW5Cb2R5KHRhcmdldEluZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGRHcmlkLmlzQ2hpbGRHcmlkUmVjb3JkKHRhcmdldFJlYykpIHtcbiAgICAgICAgICAgIC8vIGlmIHRhcmdldCBpcyBhIGNoaWxkIGdyaWQgcmVjb3JkIHNob3VsZCBtb3ZlIGludG8gaXQuXG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLnJvdyA9IG51bGw7XG4gICAgICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlID0geyByb3c6IHRhcmdldEluZGV4LCBjb2x1bW46IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW59O1xuICAgICAgICAgICAgY2hpbGRHcmlkLm5hdmlnYXRpb24uX2hhbmRsZVNjcm9sbEluQ2hpbGQodGFyZ2V0SW5kZXgsIGlzTmV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldExheW91dEluZGV4ID0gaXNOZXh0ID8gMCA6IGNoaWxkR3JpZC5jaGlsZExheW91dExpc3QudG9BcnJheSgpLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgY2hpbGRHcmlkLm5hdmlnYXRpb24uX21vdmVUb0NoaWxkKHRhcmdldEluZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGlzTmV4dCwgdGFyZ2V0TGF5b3V0SW5kZXgsIGNiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpbGRHcmlkTmF2ID0gIGNoaWxkR3JpZC5uYXZpZ2F0aW9uO1xuICAgICAgICB0aGlzLmNsZWFyQWN0aXZhdGlvbigpO1xuICAgICAgICBjb25zdCBsYXN0VmlzaWJsZUluZGV4ID0gY2hpbGRHcmlkTmF2Lmxhc3RDb2x1bW5JbmRleDtcbiAgICAgICAgY29uc3QgY29sdW1uSW5kZXggPSB2aXNpYmxlQ29sSW5kZXggPD0gbGFzdFZpc2libGVJbmRleCA/IHZpc2libGVDb2xJbmRleCA6IGxhc3RWaXNpYmxlSW5kZXg7XG4gICAgICAgIGNoaWxkR3JpZE5hdi5hY3RpdmVOb2RlID0geyByb3c6IHRhcmdldEluZGV4LCBjb2x1bW46IGNvbHVtbkluZGV4fTtcbiAgICAgICAgY2hpbGRHcmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6IHRydWV9KTtcbiAgICAgICAgdGhpcy5fcGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgY2hpbGRHcmlkLm5hdmlnYXRpb24uX2hhbmRsZVNjcm9sbEluQ2hpbGQodGFyZ2V0SW5kZXgsIGlzTmV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgY2hpbGRHcmlkLm5hdmlnYXRlVG8odGFyZ2V0SW5kZXgsIGNvbHVtbkluZGV4LCBjYik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmVzIG5hdmlnYXRpb24gYmFjayB0byBwYXJlbnQgZ3JpZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfbW92ZVRvUGFyZW50KGlzTmV4dDogYm9vbGVhbiwgY29sdW1uSW5kZXgsIGNiPykge1xuICAgICAgICBjb25zdCBpbmRleEluUGFyZW50ID0gdGhpcy5ncmlkLmNoaWxkUm93LmluZGV4O1xuICAgICAgICBjb25zdCBoYXNOZXh0VGFyZ2V0ID0gdGhpcy5oYXNOZXh0VGFyZ2V0KHRoaXMuZ3JpZC5wYXJlbnQsIGluZGV4SW5QYXJlbnQsIGlzTmV4dCk7XG4gICAgICAgIGlmICghaGFzTmV4dFRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFJvd0luZGV4ID0gIGlzTmV4dCA/IGluZGV4SW5QYXJlbnQgKyAxIDogaW5kZXhJblBhcmVudCAtIDE7XG4gICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSW5kZXggPSB0aGlzLmdyaWQucGFyZW50Lm5hdmlnYXRpb24ubGFzdENvbHVtbkluZGV4O1xuICAgICAgICBjb25zdCBuZXh0Q29sdW1uSW5kZXggPSBjb2x1bW5JbmRleCA8PSBsYXN0VmlzaWJsZUluZGV4ID8gY29sdW1uSW5kZXggOiBsYXN0VmlzaWJsZUluZGV4O1xuICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNiRnVuYyA9IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgY2IoYXJncyk7XG4gICAgICAgICAgICBhcmdzLnRhcmdldC5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ncmlkLnBhcmVudC5uYXZpZ2F0aW9uLm5hdmlnYXRlSW5Cb2R5KHRhcmdldFJvd0luZGV4LCBuZXh0Q29sdW1uSW5kZXgsIGNiRnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBpbmZvcm1hdGlvbiBvbiB0aGUgcm93IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSByb290IGdyaWQgdmlldyBwb3J0LlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcm93IGlzIGluIHZpZXcgYW5kIGl0cyBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93T2JqXG4gICAgICogQHBhcmFtIGlzTmV4dFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRQb3NpdGlvbkluZm8ocm93T2JqOiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sIGlzTmV4dDogYm9vbGVhbikge1xuICAgICAgICBsZXQgcm93RWxlbSA9IHJvd09iai5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAocm93T2JqIGluc3RhbmNlb2YgSWd4Q2hpbGRHcmlkUm93Q29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZExheW91dEtleXMgPSB0aGlzLmdyaWQuY2hpbGRMYXlvdXRLZXlzO1xuICAgICAgICAgICAgY29uc3QgcmlLZXkgPSBpc05leHQgPyBjaGlsZExheW91dEtleXNbMF0gOiBjaGlsZExheW91dEtleXNbY2hpbGRMYXlvdXRLZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgcGF0aFNlZ21lbnQ6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICByb3dJRDogcm93T2JqLnJvd0RhdGEucm93SUQsXG4gICAgICAgICAgICAgICAgcm93SXNsYW5kS2V5OiByaUtleVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZCA9ICB0aGlzLmdyaWQuaGdyaWRBUEkuZ2V0Q2hpbGRHcmlkKFtwYXRoU2VnbWVudF0pO1xuICAgICAgICAgICAgcm93RWxlbSA9IGNoaWxkR3JpZC50Zm9vdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyaWRCb3R0b20gPSB0aGlzLl9nZXRNaW5Cb3R0b20odGhpcy5ncmlkKTtcbiAgICAgICAgY29uc3QgZGlmZkJvdHRvbSA9XG4gICAgICAgIHJvd0VsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIC0gZ3JpZEJvdHRvbTtcbiAgICAgICAgY29uc3QgZ3JpZFRvcCA9IHRoaXMuX2dldE1heFRvcCh0aGlzLmdyaWQpO1xuICAgICAgICBjb25zdCBkaWZmVG9wID0gcm93RWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLVxuICAgICAgICByb3dFbGVtLm9mZnNldEhlaWdodCAtIGdyaWRUb3A7XG4gICAgICAgIGNvbnN0IGlzSW5WaWV3ID0gaXNOZXh0ID8gZGlmZkJvdHRvbSA8PSAwIDogZGlmZlRvcCA+PSAwO1xuICAgICAgICBjb25zdCBjYWxjT2Zmc2V0ID0gIGlzTmV4dCA/IGRpZmZCb3R0b20gOiBkaWZmVG9wO1xuXG4gICAgICAgIHJldHVybiB7IGluVmlldzogaXNJblZpZXcsIG9mZnNldDogY2FsY09mZnNldCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgY2xvc2VzdCBlbGVtZW50IGJ5IGl0cyB0YWcgbmFtZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VFbGVtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggdG8gc3RhcnQgdGhlIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0VGFnIFRoZSB0YXJnZXQgZWxlbWVudCB0YWcgbmFtZSwgZm9yIHdoaWNoIHRvIHNlYXJjaC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0Q2xvc2VzdEVsZW1CeVRhZyhzb3VyY2VFbGVtLCB0YXJnZXRUYWcpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHNvdXJjZUVsZW07XG4gICAgICAgIHdoaWxlIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0Lm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFyZ2V0VGFnLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckFjdGl2YXRpb24oKSB7XG4gICAgICAgIC8vIGNsZWFyIGlmIHByZXZpb3VzIGFjdGl2YXRpb24gZXhpc3RzLlxuICAgICAgICBpZiAodGhpcy5hY3RpdmVOb2RlICYmIE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlTm9kZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSBPYmplY3QuYXNzaWduKHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFzTmV4dFRhcmdldChncmlkLCBpbmRleDogbnVtYmVyLCBpc05leHQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSAgaXNOZXh0ID8gaW5kZXggKyAxIDogaW5kZXggLSAxO1xuICAgICAgICBjb25zdCBoYXNUYXJnZXRSZWNvcmQgPSAhIWdyaWQuZGF0YVZpZXdbdGFyZ2V0Um93SW5kZXhdO1xuICAgICAgICBpZiAoaGFzVGFyZ2V0UmVjb3JkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBoYXNUYXJnZXRSZWNvcmRJblBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXhJblBhcmVudCA9IGdyaWQuY2hpbGRSb3cuaW5kZXg7XG4gICAgICAgICAgICAgICAgaGFzVGFyZ2V0UmVjb3JkSW5QYXJlbnQgPSB0aGlzLmhhc05leHRUYXJnZXQoZ3JpZC5wYXJlbnQsIGluZGV4SW5QYXJlbnQsIGlzTmV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFzVGFyZ2V0UmVjb3JkSW5QYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtYXggdG9wIHZpZXcgaW4gdGhlIGN1cnJlbnQgZ3JpZCBoaWVyYXJjaHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JpZFxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE1heFRvcChncmlkKSB7XG4gICAgICAgIGxldCBjdXJyR3JpZCA9IGdyaWQ7XG4gICAgICAgIGxldCB0b3AgPSBjdXJyR3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgd2hpbGUgKGN1cnJHcmlkLnBhcmVudCkge1xuICAgICAgICAgICAgY3VyckdyaWQgPSBjdXJyR3JpZC5wYXJlbnQ7XG4gICAgICAgICAgICBjb25zdCBwaW5uZWRSb3dzSGVpZ2h0ID0gY3VyckdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiBjdXJyR3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCA/IGN1cnJHcmlkLnBpbm5lZFJvd0hlaWdodCA6IDA7XG4gICAgICAgICAgICB0b3AgPSBNYXRoLm1heCh0b3AsIGN1cnJHcmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgcGlubmVkUm93c0hlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtaW4gYm90dG9tIHZpZXcgaW4gdGhlIGN1cnJlbnQgZ3JpZCBoaWVyYXJjaHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JpZFxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE1pbkJvdHRvbShncmlkKSB7XG4gICAgICAgIGxldCBjdXJyR3JpZCA9IGdyaWQ7XG4gICAgICAgIGxldCBib3R0b20gPSBjdXJyR3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtcbiAgICAgICAgd2hpbGUgKGN1cnJHcmlkLnBhcmVudCkge1xuICAgICAgICAgICAgY3VyckdyaWQgPSBjdXJyR3JpZC5wYXJlbnQ7XG4gICAgICAgICAgICBjb25zdCBwaW5uZWRSb3dzSGVpZ2h0ID0gY3VyckdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiAhY3VyckdyaWQuaXNSb3dQaW5uaW5nVG9Ub3AgPyBjdXJyR3JpZC5waW5uZWRSb3dIZWlnaHQgOiAwO1xuICAgICAgICAgICAgYm90dG9tID0gTWF0aC5taW4oYm90dG9tLCBjdXJyR3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtIHBpbm5lZFJvd3NIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib3R0b207XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgdGhlIG5leHQgZ3JpZCB0aGF0IGFsbG93cyBzY3JvbGxpbmcgZG93bi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBncmlkIFRoZSBncmlkIGZyb20gd2hpY2ggdG8gYmVnaW4gdGhlIHNlYXJjaC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE5leHRTY3JvbGxhYmxlRG93bihncmlkKSB7XG4gICAgICAgIGxldCBjdXJyR3JpZCA9IGdyaWQucGFyZW50O1xuICAgICAgICBpZiAoIWN1cnJHcmlkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBncmlkLCBwcmV2OiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNjcm9sbFRvcCA9IGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uO1xuICAgICAgICBsZXQgc2Nyb2xsSGVpZ2h0ID0gY3VyckdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2Nyb2xsKCkuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBsZXQgbm9uU2Nyb2xsYWJsZSA9IHNjcm9sbEhlaWdodCA9PT0gMCB8fFxuICAgICAgICAgICAgTWF0aC5yb3VuZChzY3JvbGxUb3AgKyBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5pZ3hGb3JDb250YWluZXJTaXplKSA9PT0gc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBsZXQgcHJldiA9IGdyaWQ7XG4gICAgICAgIHdoaWxlIChub25TY3JvbGxhYmxlICYmIGN1cnJHcmlkLnBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcHJldiA9IGN1cnJHcmlkO1xuICAgICAgICAgICAgY3VyckdyaWQgPSBjdXJyR3JpZC5wYXJlbnQ7XG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxQb3NpdGlvbjtcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmdldFNjcm9sbCgpLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIG5vblNjcm9sbGFibGUgPSBzY3JvbGxIZWlnaHQgPT09IDAgfHxcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNjcm9sbFRvcCArIGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmlneEZvckNvbnRhaW5lclNpemUpID09PSBzY3JvbGxIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZ3JpZDogY3VyckdyaWQsIHByZXYgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgbmV4dCBncmlkIHRoYXQgYWxsb3dzIHNjcm9sbGluZyB1cC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBncmlkIFRoZSBncmlkIGZyb20gd2hpY2ggdG8gYmVnaW4gdGhlIHNlYXJjaC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE5leHRTY3JvbGxhYmxlVXAoZ3JpZCkge1xuICAgICAgICBsZXQgY3VyckdyaWQgPSBncmlkLnBhcmVudDtcbiAgICAgICAgaWYgKCFjdXJyR3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JpZCwgcHJldjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCBub25TY3JvbGxhYmxlID0gY3VyckdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsUG9zaXRpb24gPT09IDA7XG4gICAgICAgIGxldCBwcmV2ID0gZ3JpZDtcbiAgICAgICAgd2hpbGUgKG5vblNjcm9sbGFibGUgJiYgY3VyckdyaWQucGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwcmV2ID0gY3VyckdyaWQ7XG4gICAgICAgICAgICBjdXJyR3JpZCA9IGN1cnJHcmlkLnBhcmVudDtcbiAgICAgICAgICAgIG5vblNjcm9sbGFibGUgPSBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxQb3NpdGlvbiA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBncmlkOiBjdXJyR3JpZCwgcHJldiB9O1xuICAgIH1cbn1cbiJdfQ==