igniteui-angular 14.1.1 → 14.2.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/esm2020/lib/core/setImmediate.mjs +1 -1
  2. package/esm2020/lib/core/utils.mjs +2 -2
  3. package/esm2020/lib/grids/columns/column-group.component.mjs +1 -1
  4. package/esm2020/lib/grids/columns/column.component.mjs +1 -1
  5. package/esm2020/lib/grids/columns/templates.directive.mjs +29 -1
  6. package/esm2020/lib/grids/common/grid.interface.mjs +1 -1
  7. package/esm2020/lib/grids/filtering/base/grid-filtering-cell.component.mjs +2 -2
  8. package/esm2020/lib/grids/filtering/excel-style/excel-style-search.component.mjs +5 -1
  9. package/esm2020/lib/grids/grid/expandable-cell.component.mjs +3 -3
  10. package/esm2020/lib/grids/grid/grid.component.mjs +1 -1
  11. package/esm2020/lib/grids/grid/grid.directives.mjs +41 -1
  12. package/esm2020/lib/grids/grid-base.directive.mjs +1 -1
  13. package/esm2020/lib/grids/grid-public-row.mjs +2 -2
  14. package/esm2020/lib/grids/grid.rowEdit.directive.mjs +17 -1
  15. package/esm2020/lib/grids/headers/grid-header-row.component.mjs +3 -3
  16. package/esm2020/lib/grids/pivot-grid/pivot-grid.component.mjs +1 -1
  17. package/esm2020/lib/grids/pivot-grid/pivot-grid.directives.mjs +5 -1
  18. package/esm2020/lib/grids/pivot-grid/pivot-grid.interface.mjs +1 -1
  19. package/esm2020/lib/grids/row-drag.directive.mjs +9 -1
  20. package/esm2020/lib/grids/row.directive.mjs +2 -2
  21. package/esm2020/lib/grids/selection/row-selectors.mjs +13 -1
  22. package/esm2020/lib/grids/toolbar/common.mjs +5 -1
  23. package/esm2020/lib/services/excel/excel-exporter.mjs +13 -13
  24. package/esm2020/lib/services/excel/excel-files.mjs +14 -13
  25. package/esm2020/lib/services/excel/excel-interfaces.mjs +1 -1
  26. package/fesm2015/igniteui-angular.mjs +146 -30
  27. package/fesm2015/igniteui-angular.mjs.map +1 -1
  28. package/fesm2020/igniteui-angular.mjs +146 -30
  29. package/fesm2020/igniteui-angular.mjs.map +1 -1
  30. package/lib/core/setImmediate.d.ts +8 -3
  31. package/lib/grids/columns/column-group.component.d.ts +2 -2
  32. package/lib/grids/columns/column.component.d.ts +19 -19
  33. package/lib/grids/columns/templates.directive.d.ts +22 -14
  34. package/lib/grids/common/grid.interface.d.ts +97 -13
  35. package/lib/grids/filtering/base/grid-filtering-cell.component.d.ts +1 -0
  36. package/lib/grids/filtering/excel-style/excel-style-search.component.d.ts +3 -2
  37. package/lib/grids/grid/grid.component.d.ts +8 -11
  38. package/lib/grids/grid/grid.directives.d.ts +13 -2
  39. package/lib/grids/grid-base.directive.d.ts +24 -24
  40. package/lib/grids/grid.rowEdit.directive.d.ts +5 -1
  41. package/lib/grids/headers/grid-header-row.component.d.ts +3 -11
  42. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +3 -3
  43. package/lib/grids/pivot-grid/pivot-grid.component.d.ts +3 -3
  44. package/lib/grids/pivot-grid/pivot-grid.directives.d.ts +4 -2
  45. package/lib/grids/pivot-grid/pivot-grid.interface.d.ts +3 -0
  46. package/lib/grids/row-drag.directive.d.ts +5 -2
  47. package/lib/grids/selection/row-selectors.d.ts +10 -6
  48. package/lib/grids/toolbar/common.d.ts +1 -0
  49. package/lib/services/excel/excel-exporter.d.ts +2 -5
  50. package/lib/services/excel/excel-files.d.ts +12 -13
  51. package/lib/services/excel/excel-interfaces.d.ts +1 -2
  52. package/package.json +3 -3
  53. package/schematics/ng-add/index.spec.js +1 -1
  54. package/schematics/tsconfig.tsbuildinfo +1 -1
  55. package/schematics/utils/dependency-handler.js +2 -2
@@ -52,4 +52,4 @@ export function clearImmediate(id) {
52
52
  }
53
53
  delete queue[id];
54
54
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0SW1tZWRpYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvcmUvc2V0SW1tZWRpYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsd0dBQXdHO0FBRXhHLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEIsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFL0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUNmLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUMxQixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckIsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakIsRUFBRSxFQUFFLENBQUM7S0FDUjtBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTVDLCtFQUErRTtBQUMvRSxNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQWMsRUFBRSxHQUFHLElBQUk7SUFDaEQsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1FBQ3JCLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNsQztJQUVELElBQUksQ0FBQyxrQkFBa0IsRUFBRTtRQUNyQixrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDdkQ7SUFFRCxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLEVBQUU7UUFDcEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXZGLE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQU87SUFDbEMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNwQztJQUVELE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMCBEZW5pcyBQdXNoa2FyZXZcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFXG4gKi9cblxuLy8gTm90ZTogT3JpZ2luYWxseSBjb3BpZWQgZnJvbSBjb3JlLWpzLXB1cmUgcGFja2FnZSBhbmQgbW9kaWZpZWQuIChodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcylcblxuY29uc3QgcXVldWUgPSB7fTtcbmxldCBjb3VudGVyID0gMDtcbmxldCBldmVudExpc3RlbmVyQWRkZWQgPSBmYWxzZTtcblxuY29uc3QgcnVuID0gKGlkKSA9PiB7XG4gICAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICBjb25zdCBmbiA9IHF1ZXVlW2lkXTtcbiAgICAgICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICAgICAgZm4oKTtcbiAgICB9XG59O1xuXG5jb25zdCBsaXN0ZW5lciA9IChldmVudCkgPT4gcnVuKGV2ZW50LmRhdGEpO1xuXG4vLyBVc2UgZnVuY3Rpb24gaW5zdGVhZCBvZiBhcnJvdyBmdW5jdGlvbiB0byB3b3JrYXJvdW5kIGFuIGlzc3VlIGluIGNvZGVzYW5kYm94XG5leHBvcnQgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNiOiAoKSA9PiB2b2lkLCAuLi5hcmdzKSB7XG4gICAgaWYgKHdpbmRvdy5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5zZXRJbW1lZGlhdGUoY2IpO1xuICAgIH1cblxuICAgIGlmICghZXZlbnRMaXN0ZW5lckFkZGVkKSB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJBZGRlZCA9IHRydWU7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gKCkgPT4ge1xuICAgICAgICBjYi5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zdCB3aW5kb3dMb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoY291bnRlciArICcnLCB3aW5kb3dMb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3dMb2NhdGlvbi5ob3N0KTtcblxuICAgIHJldHVybiBjb3VudGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQ6IGFueSkge1xuICAgIGlmICh3aW5kb3cuY2xlYXJJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5jbGVhckltbWVkaWF0ZShpZCk7XG4gICAgfVxuXG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbn1cbiJdfQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0SW1tZWRpYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvcmUvc2V0SW1tZWRpYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsd0dBQXdHO0FBRXhHLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEIsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFTL0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUNmLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUMxQixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckIsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakIsRUFBRSxFQUFFLENBQUM7S0FDUjtBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTVDLCtFQUErRTtBQUMvRSxNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQWMsRUFBRSxHQUFHLElBQUk7SUFDaEQsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1FBQ3JCLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNsQztJQUVELElBQUksQ0FBQyxrQkFBa0IsRUFBRTtRQUNyQixrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDdkQ7SUFFRCxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLEVBQUU7UUFDcEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXZGLE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQU87SUFDbEMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNwQztJQUVELE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMCBEZW5pcyBQdXNoa2FyZXZcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFXG4gKi9cblxuLy8gTm90ZTogT3JpZ2luYWxseSBjb3BpZWQgZnJvbSBjb3JlLWpzLXB1cmUgcGFja2FnZSBhbmQgbW9kaWZpZWQuIChodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcylcblxuY29uc3QgcXVldWUgPSB7fTtcbmxldCBjb3VudGVyID0gMDtcbmxldCBldmVudExpc3RlbmVyQWRkZWQgPSBmYWxzZTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBzZXRJbW1lZGlhdGU6IGFueTtcbiAgICAgICAgY2xlYXJJbW1lZGlhdGU6IGFueTtcbiAgICB9XG59XG5cbmNvbnN0IHJ1biA9IChpZCkgPT4ge1xuICAgIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgY29uc3QgZm4gPSBxdWV1ZVtpZF07XG4gICAgICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgICAgIGZuKCk7XG4gICAgfVxufTtcblxuY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQpID0+IHJ1bihldmVudC5kYXRhKTtcblxuLy8gVXNlIGZ1bmN0aW9uIGluc3RlYWQgb2YgYXJyb3cgZnVuY3Rpb24gdG8gd29ya2Fyb3VuZCBhbiBpc3N1ZSBpbiBjb2Rlc2FuZGJveFxuZXhwb3J0IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYjogKCkgPT4gdm9pZCwgLi4uYXJncykge1xuICAgIGlmICh3aW5kb3cuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuc2V0SW1tZWRpYXRlKGNiKTtcbiAgICB9XG5cbiAgICBpZiAoIWV2ZW50TGlzdGVuZXJBZGRlZCkge1xuICAgICAgICBldmVudExpc3RlbmVyQWRkZWQgPSB0cnVlO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcXVldWVbKytjb3VudGVyXSA9ICgpID0+IHtcbiAgICAgICAgY2IuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgd2luZG93TG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgd2luZG93LnBvc3RNZXNzYWdlKGNvdW50ZXIgKyAnJywgd2luZG93TG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93TG9jYXRpb24uaG9zdCk7XG5cbiAgICByZXR1cm4gY291bnRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkOiBhbnkpIHtcbiAgICBpZiAod2luZG93LmNsZWFySW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuY2xlYXJJbW1lZGlhdGUoaWQpO1xuICAgIH1cblxuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { CurrencyPipe, formatDate as _formatDate, isPlatformBrowser } from '@angular/common';
2
2
  import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
3
- import mergeWith from 'lodash.mergewith';
3
+ import { mergeWith } from 'lodash-es';
4
4
  import { Observable } from 'rxjs';
5
5
  import { blink, fadeIn, fadeOut, flipBottom, flipHorBck, flipHorFwd, flipLeft, flipRight, flipTop, flipVerBck, flipVerFwd, growVerIn, growVerOut, heartbeat, pulsateBck, pulsateFwd, rotateInBl, rotateInBottom, rotateInBr, rotateInCenter, rotateInDiagonal1, rotateInDiagonal2, rotateInHor, rotateInLeft, rotateInRight, rotateInTl, rotateInTop, rotateInTr, rotateInVer, rotateOutBl, rotateOutBottom, rotateOutBr, rotateOutCenter, rotateOutDiagonal1, rotateOutDiagonal2, rotateOutHor, rotateOutLeft, rotateOutRight, rotateOutTl, rotateOutTop, rotateOutTr, rotateOutVer, scaleInBl, scaleInBottom, scaleInBr, scaleInCenter, scaleInHorCenter, scaleInHorLeft, scaleInHorRight, scaleInLeft, scaleInRight, scaleInTl, scaleInTop, scaleInTr, scaleInVerBottom, scaleInVerCenter, scaleInVerTop, scaleOutBl, scaleOutBottom, scaleOutBr, scaleOutCenter, scaleOutHorCenter, scaleOutHorLeft, scaleOutHorRight, scaleOutLeft, scaleOutRight, scaleOutTl, scaleOutTop, scaleOutTr, scaleOutVerBottom, scaleOutVerCenter, scaleOutVerTop, shakeBl, shakeBottom, shakeBr, shakeCenter, shakeHor, shakeLeft, shakeRight, shakeTl, shakeTop, shakeTr, shakeVer, slideInBl, slideInBottom, slideInBr, slideInLeft, slideInRight, slideInTl, slideInTop, slideInTr, slideOutBl, slideOutBottom, slideOutBr, slideOutLeft, slideOutRight, slideOutTl, slideOutTop, slideOutTr, swingInBottomBck, swingInBottomFwd, swingInLeftBck, swingInLeftFwd, swingInRightBck, swingInRightFwd, swingInTopBck, swingInTopFwd, swingOutBottomBck, swingOutBottomFwd, swingOutLeftBck, swingOutLefttFwd, swingOutRightBck, swingOutRightFwd, swingOutTopBck, swingOutTopFwd } from '../animations/main';
6
6
  import { setImmediate } from './setImmediate';
@@ -694,4 +694,4 @@ export const formatDate = (value, format, locale, timezone) => {
694
694
  return _formatDate(value, format, locale, timezone);
695
695
  };
696
696
  export const formatCurrency = new CurrencyPipe(undefined).transform;
697
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY29yZS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsSUFBSSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQ0gsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQ3hGLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQzVGLGNBQWMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFDN0YsWUFBWSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUMxRixlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFDckYsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQ25GLFlBQVksRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQ2xGLGNBQWMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxT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SUFDVixXQUFXO0lBQ1gsYUFBYTtJQUNiLGNBQWM7SUFDZCxTQUFTO0lBQ1QsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0lBQ1YsU0FBUztJQUNULFVBQVU7SUFDVixTQUFTO0lBQ1QsVUFBVTtJQUNWLGFBQWE7SUFDYixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixVQUFVO0lBQ1YsV0FBVztJQUNYLGFBQWE7SUFDYixjQUFjO0lBQ2QsU0FBUztJQUNULFVBQVU7SUFDVixTQUFTO0lBQ1QsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0lBQ1YsU0FBUztJQUNULFVBQVU7SUFDVixhQUFhO0lBQ2IsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsYUFBYTtJQUNiLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0NBQ3BCLENBQUM7QUFHRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUE2QixFQUFFLE1BQWMsRUFBRSxNQUFjLEVBQUUsUUFBaUIsRUFBVSxFQUFFO0lBQ25ILElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7UUFDdkQsT0FBTyxFQUFFLENBQUM7S0FDYjtJQUNELE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ3VycmVuY3lQaXBlLCBmb3JtYXREYXRlIGFzIF9mb3JtYXREYXRlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbWVyZ2VXaXRoIGZyb20gJ2xvZGFzaC5tZXJnZXdpdGgnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBibGluaywgZmFkZUluLCBmYWRlT3V0LCBmbGlwQm90dG9tLCBmbGlwSG9yQmNrLCBmbGlwSG9yRndkLCBmbGlwTGVmdCwgZmxpcFJpZ2h0LCBmbGlwVG9wLFxuICAgIGZsaXBWZXJCY2ssIGZsaXBWZXJGd2QsIGdyb3dWZXJJbiwgZ3Jvd1Zlck91dCwgaGVhcnRiZWF0LCBwdWxzYXRlQmNrLCBwdWxzYXRlRndkLCByb3RhdGVJbkJsLFxuICAgIHJvdGF0ZUluQm90dG9tLCByb3RhdGVJbkJyLCByb3RhdGVJbkNlbnRlciwgcm90YXRlSW5EaWFnb25hbDEsIHJvdGF0ZUluRGlhZ29uYWwyLCByb3RhdGVJbkhvcixcbiAgICByb3RhdGVJbkxlZnQsIHJvdGF0ZUluUmlnaHQsIHJvdGF0ZUluVGwsIHJvdGF0ZUluVG9wLCByb3RhdGVJblRyLCByb3RhdGVJblZlciwgcm90YXRlT3V0QmwsXG4gICAgcm90YXRlT3V0Qm90dG9tLCByb3RhdGVPdXRCciwgcm90YXRlT3V0Q2VudGVyLCByb3RhdGVPdXREaWFnb25hbDEsIHJvdGF0ZU91dERpYWdvbmFsMixcbiAgICByb3RhdGVPdXRIb3IsIHJvdGF0ZU91dExlZnQsIHJvdGF0ZU91dFJpZ2h0LCByb3RhdGVPdXRUbCwgcm90YXRlT3V0VG9wLCByb3RhdGVPdXRUcixcbiAgICByb3RhdGVPdXRWZXIsIHNjYWxlSW5CbCwgc2NhbGVJbkJvdHRvbSwgc2NhbGVJbkJyLCBzY2FsZUluQ2VudGVyLCBzY2FsZUluSG9yQ2VudGVyLFxuICAgIHNjYWxlSW5Ib3JMZWZ0LCBzY2FsZUluSG9yUmlnaHQsIHNjYWxlSW5MZWZ0LCBzY2FsZUluUmlnaHQsIHNjYWxlSW5UbCwgc2NhbGVJblRvcCwgc2NhbGVJblRyLFxuICAgIHNjYWxlSW5WZXJCb3R0b20sIHNjYWxlSW5WZXJDZW50ZXIsIHNjYWxlSW5WZXJUb3AsIHNjYWxlT3V0QmwsIHNjYWxlT3V0Qm90dG9tLCBzY2FsZU91dEJyLFxuICAgIHNjYWxlT3V0Q2VudGVyLCBzY2FsZU91dEhvckNlbnRlciwgc2NhbGVPdXRIb3JMZWZ0LCBzY2FsZU91dEhvclJpZ2h0LCBzY2FsZU91dExlZnQsXG4gICAgc2NhbGVPdXRSaWdodCwgc2NhbGVPdXRUbCwgc2NhbGVPdXRUb3AsIHNjYWxlT3V0VHIsIHNjYWxlT3V0VmVyQm90dG9tLCBzY2FsZU91dFZlckNlbnRlcixcbiAgICBzY2FsZU91dFZlclRvcCwgc2hha2VCbCwgc2hha2VCb3R0b20sIHNoYWtlQnIsIHNoYWtlQ2VudGVyLCBzaGFrZUhvciwgc2hha2VMZWZ0LCBzaGFrZVJpZ2h0LFxuICAgIHNoYWtlVGwsIHNoYWtlVG9wLCBzaGFrZVRyLCBzaGFrZVZlciwgc2xpZGVJbkJsLCBzbGlkZUluQm90dG9tLCBzbGlkZUluQnIsIHNsaWRlSW5MZWZ0LFxuICAgIHNsaWRlSW5SaWdodCwgc2xpZGVJblRsLCBzbGlkZUluVG9wLCBzbGlkZUluVHIsIHNsaWRlT3V0QmwsIHNsaWRlT3V0Qm90dG9tLCBzbGlkZU91dEJyLFxuICAgIHNsaWRlT3V0TGVmdCwgc2xpZGVPdXRSaWdodCwgc2xpZGVPdXRUbCwgc2xpZGVPdXRUb3AsIHNsaWRlT3V0VHIsIHN3aW5nSW5Cb3R0b21CY2ssXG4gICAgc3dpbmdJbkJvdHRvbUZ3ZCwgc3dpbmdJbkxlZnRCY2ssIHN3aW5nSW5MZWZ0RndkLCBzd2luZ0luUmlnaHRCY2ssIHN3aW5nSW5SaWdodEZ3ZCxcbiAgICBzd2luZ0luVG9wQmNrLCBzd2luZ0luVG9wRndkLCBzd2luZ091dEJvdHRvbUJjaywgc3dpbmdPdXRCb3R0b21Gd2QsIHN3aW5nT3V0TGVmdEJjayxcbiAgICBzd2luZ091dExlZnR0RndkLCBzd2luZ091dFJpZ2h0QmNrLCBzd2luZ091dFJpZ2h0RndkLCBzd2luZ091dFRvcEJjaywgc3dpbmdPdXRUb3BGd2Rcbn0gZnJvbSAnLi4vYW5pbWF0aW9ucy9tYWluJztcbmltcG9ydCB7IHNldEltbWVkaWF0ZSB9IGZyb20gJy4vc2V0SW1tZWRpYXRlJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dNZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZywgaXNNZXNzYWdlU2hvd246IGJvb2xlYW4pOiBib29sZWFuID0+IHtcbiAgICBpZiAoIWlzTWVzc2FnZVNob3duICYmIGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBta2VudW0gPSA8VCBleHRlbmRzIHsgW2luZGV4OiBzdHJpbmddOiBVIH0sIFUgZXh0ZW5kcyBzdHJpbmc+KHg6IFQpID0+IHg7XG5cbi8qKlxuICpcbiAqIEBoaWRkZW4gQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVPYnNlcnZlciA9ICgpID0+IHdpbmRvdy5SZXNpemVPYnNlcnZlcjtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZUFycmF5ID0gKGFycmF5OiBhbnlbXSwgZGVlcD86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBhcnIgPSBbXTtcbiAgICBpZiAoIWFycmF5KSB7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICAgIGxldCBpID0gYXJyYXkubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgYXJyW2ldID0gZGVlcCA/IGNsb25lVmFsdWUoYXJyYXlbaV0pIDogYXJyYXlbaV07XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIERvZXNuJ3QgY2xvbmUgbGVhZiBpdGVtc1xuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IGNsb25lSGllcmFyY2hpY2FsQXJyYXkgPSAoYXJyYXk6IGFueVtdLCBjaGlsZERhdGFLZXk6IGFueSk6IGFueVtdID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgaWYgKCFhcnJheSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnJheSkge1xuICAgICAgICBjb25zdCBjbG9uZWRJdGVtID0gY2xvbmVWYWx1ZShpdGVtKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbVtjaGlsZERhdGFLZXldKSkge1xuICAgICAgICAgICAgY2xvbmVkSXRlbVtjaGlsZERhdGFLZXldID0gY2xvbmVIaWVyYXJjaGljYWxBcnJheShjbG9uZWRJdGVtW2NoaWxkRGF0YUtleV0sIGNoaWxkRGF0YUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goY2xvbmVkSXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggcHJvdG90eXBlIGZyb20gcHJvdmlkZWQgc291cmNlIGFuZCBjb3BpZXNcbiAqIGFsbCBwcm9wZXJ0aWVzIGRlc2NyaXB0b3JzIGZyb20gcHJvdmlkZWQgc291cmNlXG4gKiBAcGFyYW0gb2JqIFNvdXJjZSB0byBjb3B5IHByb3RvdHlwZSBhbmQgZGVzY3JpcHRvcnMgZnJvbVxuICogQHJldHVybnMgTmV3IG9iamVjdCB3aXRoIGNsb25lZCBwcm90b3R5cGUgYW5kIHByb3BlcnR5IGRlc2NyaXB0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBjb3B5RGVzY3JpcHRvcnMgPSAob2JqKSA9PiB7XG4gICAgaWYgKG9iaikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZShcbiAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLFxuICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKVxuICAgICAgICAgICAgKTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiBEZWVwIGNsb25lcyBhbGwgZmlyc3QgbGV2ZWwga2V5cyBvZiBPYmoyIGFuZCBtZXJnZXMgdGhlbSB0byBPYmoxXG4gKlxuICogQHBhcmFtIG9iajEgT2JqZWN0IHRvIG1lcmdlIGludG9cbiAqIEBwYXJhbSBvYmoyIE9iamVjdCB0byBtZXJnZSBmcm9tXG4gKiBAcmV0dXJucyBPYmoxIHdpdGggbWVyZ2VkIGNsb25lZCBrZXlzIGZyb20gT2JqMlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgbWVyZ2VPYmplY3RzID0gKG9iajE6IGFueSwgb2JqMjogYW55KTogYW55ID0+IG1lcmdlV2l0aChvYmoxLCBvYmoyLCAob2JqVmFsdWUsIHNyY1ZhbHVlKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBvYmpWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIENyZWF0ZXMgZGVlcCBjbG9uZSBvZiBwcm92aWRlZCB2YWx1ZS5cbiAqIFN1cHBvcnRzIHByaW1pdGl2ZSB2YWx1ZXMsIGRhdGVzIGFuZCBvYmplY3RzLlxuICogSWYgcGFzc2VkIHZhbHVlIGlzIGFycmF5IHJldHVybnMgc2hhbGxvdyBjb3B5IG9mIHRoZSBhcnJheS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gY2xvbmVcbiAqIEByZXR1cm5zIERlZXAgY29weSBvZiBwcm92aWRlZCB2YWx1ZVxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgY2xvbmVWYWx1ZSA9ICh2YWx1ZTogYW55KTogYW55ID0+IHtcbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUuZ2V0VGltZSgpKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBbLi4udmFsdWVdO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gY2xvbmVWYWx1ZSh2YWx1ZVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFBhcnNlIHByb3ZpZGVkIGlucHV0IHRvIERhdGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIGlucHV0IHRvIHBhcnNlXG4gKiBAcmV0dXJucyBEYXRlIGlmIHBhcnNlIHN1Y2NlZWQgb3IgbnVsbFxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgcGFyc2VEYXRlID0gKHZhbHVlOiBhbnkpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgLy8gaWYgdmFsdWUgaXMgSW52YWxpZCBEYXRlIHJldHVybiBudWxsXG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpID8gdmFsdWUgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiBudWxsO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggdW5pcXVlIGRhdGVzIG9ubHkuXG4gKlxuICogQHBhcmFtIGNvbHVtblZhbHVlcyBjb2xsZWN0aW9uIG9mIGRhdGUgdmFsdWVzIChtaWdodCBiZSBudW1iZXJzIG9yIElTTyA4NjAxIHN0cmluZ3MpXG4gKiBAcmV0dXJucyBjb2xsZWN0aW9uIG9mIHVuaXF1ZSBkYXRlcy5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaXF1ZURhdGVzID0gKGNvbHVtblZhbHVlczogYW55W10pID0+IGNvbHVtblZhbHVlcy5yZWR1Y2UoKGEsIGMpID0+IHtcbiAgICBpZiAoIWEuY2FjaGVbYy5sYWJlbF0pIHtcbiAgICAgICAgYS5yZXN1bHQucHVzaChjKTtcbiAgICB9XG4gICAgYS5jYWNoZVtjLmxhYmVsXSA9IHRydWU7XG4gICAgcmV0dXJuIGE7XG59LCB7IHJlc3VsdDogW10sIGNhY2hlOiB7fSB9KS5yZXN1bHQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHByb3ZpZGVkIHZhcmlhYmxlIGlzIE9iamVjdFxuICpcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZSBpZiBwcm92aWRlZCB2YXJpYWJsZSBpcyBPYmplY3RcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+ICEhKHZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE9iamVjdF0nKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgcHJvdmlkZWQgdmFyaWFibGUgaXMgRGF0ZVxuICpcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZSBpZiBwcm92aWRlZCB2YXJpYWJsZSBpcyBEYXRlXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RhdGUgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIERhdGUgPT4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgdHdvIHBhc3NlZCBhcmd1bWVudHMgYXJlIGVxdWFsXG4gKiBDdXJyZW50bHkgc3VwcG9ydHMgZGF0ZSBvYmplY3RzXG4gKlxuICogQHBhcmFtIG9iajFcbiAqIEBwYXJhbSBvYmoyXG4gKiBAcmV0dXJuczogYGJvb2xlYW5gXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VxdWFsID0gKG9iajEsIG9iajIpOiBib29sZWFuID0+IHtcbiAgICBpZiAoaXNEYXRlKG9iajEpICYmIGlzRGF0ZShvYmoyKSkge1xuICAgICAgICByZXR1cm4gb2JqMS5nZXRUaW1lKCkgPT09IG9iajIuZ2V0VGltZSgpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqMSA9PT0gb2JqMjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHByb3ZpZGVkIHZhcmlhYmxlIGlzIHRoZSB2YWx1ZSBOYU5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUgaWYgcHJvdmlkZWQgdmFyaWFibGUgaXMgTmFOXG4gKiBAaGlkZGVuXG4gKi9cbiBleHBvcnQgY29uc3QgaXNOYU52YWx1ZSA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiBpc05hTih2YWx1ZSkgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnO1xuXG4vKipcbiAqIFV0aWxpdHkgc2VydmljZSB0YWtpbmcgY2FyZSBvZiB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIHN1Y2ggYXNcbiAqIGRldGVjdGluZyBicm93c2VyIGZlYXR1cmVzLCBnZW5lcmFsIGNyb3NzIGJyb3dzZXIgRE9NIG1hbmlwdWxhdGlvbiwgZXRjLlxuICpcbiAqIEBoaWRkZW4gQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1VdGlsIHtcbiAgICBwdWJsaWMgaXNCcm93c2VyOiBib29sZWFuID0gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcbiAgICBwdWJsaWMgaXNJT1MgPSB0aGlzLmlzQnJvd3NlciAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAhKCdNU1N0cmVhbScgaW4gd2luZG93KTtcbiAgICBwdWJsaWMgaXNGaXJlZm94ID0gdGhpcy5pc0Jyb3dzZXIgJiYgL0ZpcmVmb3hbXFwvXFxzXShcXGQrXFwuXFxkKykvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgcHVibGljIGlzRWRnZSA9IHRoaXMuaXNCcm93c2VyICYmIC9FZGdlW1xcL1xcc10oXFxkK1xcLlxcZCspLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIHB1YmxpYyBpc0Nocm9taXVtID0gdGhpcy5pc0Jyb3dzZXIgJiYgKC9DaHJvbXxlP2l1bS9nLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHxcbiAgICAgICAgL0dvb2dsZSBJbmMvZy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpKSAmJiAhL0VkZ2UvZy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4gICAgcHVibGljIEtFWU1BUCA9IG1rZW51bSh7XG4gICAgICAgIEVOVEVSOiAnRW50ZXInLFxuICAgICAgICBTUEFDRTogJyAnLFxuICAgICAgICBFU0NBUEU6ICdFc2NhcGUnLFxuICAgICAgICBBUlJPV19ET1dOOiAnQXJyb3dEb3duJyxcbiAgICAgICAgQVJST1dfVVA6ICdBcnJvd1VwJyxcbiAgICAgICAgQVJST1dfTEVGVDogJ0Fycm93TGVmdCcsXG4gICAgICAgIEFSUk9XX1JJR0hUOiAnQXJyb3dSaWdodCcsXG4gICAgICAgIEVORDogJ0VuZCcsXG4gICAgICAgIEhPTUU6ICdIb21lJyxcbiAgICAgICAgUEFHRV9ET1dOOiAnUGFnZURvd24nLFxuICAgICAgICBQQUdFX1VQOiAnUGFnZVVwJyxcbiAgICAgICAgRjI6ICdGMicsXG4gICAgICAgIFRBQjogJ1RhYicsXG4gICAgICAgIFNFTUlDT0xPTjogJzsnLFxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcyNlZGl0aW5nX2tleXNcbiAgICAgICAgREVMRVRFOiAnRGVsZXRlJyxcbiAgICAgICAgQkFDS1NQQUNFOiAnQmFja3NwYWNlJyxcbiAgICAgICAgQ09OVFJPTDogJ0NvbnRyb2wnLFxuICAgICAgICBYOiAneCcsXG4gICAgICAgIFk6ICd5JyxcbiAgICAgICAgWjogJ3onXG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBub2RlIGNvbnRlbnQsIHVzaW5nIFJhbmdlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICogbGV0IGNvbHVtbiA9IHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZpbHRlcihjID0+IGMuZmllbGQgPT09ICdJRCcpWzBdO1xuICAgICAqXG4gICAgICogbGV0IHNpemUgPSBnZXROb2RlU2l6ZVZpYVJhbmdlKHJhbmdlLCBjb2x1bW4uY2VsbHNbMF0ubmF0aXZlRWxlbWVudCk7XG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBsYXN0IHBhcmFtZXRlciBpcyB1c2VmdWwgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVudCB0byBtZWFzdXJlIGlzIG1vZGlmaWVkIGJ5IGFcbiAgICAgKiBwYXJlbnQgZWxlbWVudCB0aGF0IGhhcyBleHBsaWNpdCBzaXplLiBJbiBzdWNoIGNhc2VzIHRoZSBjYWxjdWxhdGVkIHNpemUgaXMgbmV2ZXIgbG93ZXJcbiAgICAgKiBhbmQgdGhlIGZ1bmN0aW9uIG1heSBpbnN0ZWFkIHJlbW92ZSB0aGUgcGFyZW50IHNpemUgd2hpbGUgbWVhc3VyaW5nIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Tm9kZVNpemVWaWFSYW5nZShyYW5nZTogUmFuZ2UsIG5vZGU6IEhUTUxFbGVtZW50LCBzaXplSG9sZGluZ05vZGU/OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBsZXQgb3ZlcmZsb3cgPSBudWxsO1xuICAgICAgICBsZXQgbm9kZVN0eWxlcztcblxuICAgICAgICBpZiAoIXRoaXMuaXNGaXJlZm94KSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9IG5vZGUuc3R5bGUub3ZlcmZsb3c7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRoYXQgaGFjayAtIG90aGVyd2lzZSBjb250ZW50IHdvbid0IGJlIG1lYXN1cmVkIGNvcnJlY3RseSBpbiBJRS9FZGdlXG4gICAgICAgICAgICBub2RlLnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpemVIb2xkaW5nTm9kZSkge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBzaXplSG9sZGluZ05vZGUuc3R5bGU7XG4gICAgICAgICAgICBub2RlU3R5bGVzID0gW3N0eWxlLndpZHRoLCBzdHlsZS5taW5XaWR0aCwgc3R5bGUuZmxleEJhc2lzXTtcbiAgICAgICAgICAgIHN0eWxlLndpZHRoID0gJyc7XG4gICAgICAgICAgICBzdHlsZS5taW5XaWR0aCA9ICcnO1xuICAgICAgICAgICAgc3R5bGUuZmxleEJhc2lzID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyZWZveCkge1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGF0IGhhY2sgLSBvdGhlcndpc2UgY29udGVudCB3b24ndCBiZSBtZWFzdXJlZCBjb3JyZWN0bHkgaW4gSUUvRWRnZVxuICAgICAgICAgICAgbm9kZS5zdHlsZS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpemVIb2xkaW5nTm9kZSkge1xuICAgICAgICAgICAgc2l6ZUhvbGRpbmdOb2RlLnN0eWxlLndpZHRoID0gbm9kZVN0eWxlc1swXTtcbiAgICAgICAgICAgIHNpemVIb2xkaW5nTm9kZS5zdHlsZS5taW5XaWR0aCA9IG5vZGVTdHlsZXNbMV07XG4gICAgICAgICAgICBzaXplSG9sZGluZ05vZGUuc3R5bGUuZmxleEJhc2lzID0gbm9kZVN0eWxlc1syXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBrZXlib2FyZCBldmVudCBpcyBhbiBhY3RpdmF0aW9uIGtleSAoRW50ZXIvU3BhY2UgYmFyKVxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBsYXRmb3JtVXRpbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0FjdGl2YXRpb25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmtleSA9PT0gdGhpcy5LRVlNQVAuRU5URVIgfHwgZXZlbnQua2V5ID09PSB0aGlzLktFWU1BUC5TUEFDRTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQga2V5Ym9hcmQgZXZlbnQgaXMgYSBjb21iaW5hdGlvbiB0aGF0IGNsb3NlcyB0aGUgZmlsdGVyaW5nIFVJIG9mIHRoZSBncmlkLiAoRXNjYXBlL0N0cmwrU2hpZnQrTClcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKiBAbWVtYmVyb2YgUGxhdGZvcm1VdGlsXG4gICAgICovXG4gICAgcHVibGljIGlzRmlsdGVyaW5nS2V5Q29tYm8oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmtleSA9PT0gdGhpcy5LRVlNQVAuRVNDQVBFIHx8IChldmVudC5jdHJsS2V5ICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGlzTGVmdENsaWNrKGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHJldHVybiBldmVudC5idXR0b24gPT09IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNOYXZpZ2F0aW9uS2V5KGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLktFWU1BUC5IT01FLCB0aGlzLktFWU1BUC5FTkQsIHRoaXMuS0VZTUFQLlNQQUNFLFxuICAgICAgICAgICAgdGhpcy5LRVlNQVAuQVJST1dfRE9XTiwgdGhpcy5LRVlNQVAuQVJST1dfTEVGVCwgdGhpcy5LRVlNQVAuQVJST1dfUklHSFQsIHRoaXMuS0VZTUFQLkFSUk9XX1VQXG4gICAgICAgIF0uaW5jbHVkZXMoa2V5KTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgZmxhdHRlbiA9IChhcnI6IGFueVtdKSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuXG4gICAgYXJyLmZvckVhY2goZWwgPT4ge1xuICAgICAgICByZXN1bHQucHVzaChlbCk7XG4gICAgICAgIGlmIChlbC5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KGVsLmNoaWxkcmVuKSA/IGVsLmNoaWxkcmVuIDogZWwuY2hpbGRyZW4udG9BcnJheSgpO1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChmbGF0dGVuKGNoaWxkcmVuKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjYW5jZWwgdGhlIGV2ZW50LlxuICAgICAqL1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlIHRvIHRoZSBvd25lciBjb21wb25lbnQuXG4gICAgICovXG4gICAgb3duZXI/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgZXh0ZW5kcyBDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbiAgICAvKiogQnJvd3NlciBldmVudCAqL1xuICAgIGV2ZW50PzogRXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzLCBJQmFzZUV2ZW50QXJncyB7IH1cblxuZXhwb3J0IGludGVyZmFjZSBJQmFzZUNhbmNlbGFibGVFdmVudEFyZ3MgZXh0ZW5kcyBDYW5jZWxhYmxlRXZlbnRBcmdzLCBJQmFzZUV2ZW50QXJncyB7IH1cblxuZXhwb3J0IGNvbnN0IEhPUklaT05UQUxfTkFWX0tFWVMgPSBuZXcgU2V0KFsnYXJyb3dsZWZ0JywgJ2xlZnQnLCAnYXJyb3dyaWdodCcsICdyaWdodCcsICdob21lJywgJ2VuZCddKTtcblxuZXhwb3J0IGNvbnN0IE5BVklHQVRJT05fS0VZUyA9IG5ldyBTZXQoW1xuICAgICdkb3duJyxcbiAgICAndXAnLFxuICAgICdsZWZ0JyxcbiAgICAncmlnaHQnLFxuICAgICdhcnJvd2Rvd24nLFxuICAgICdhcnJvd3VwJyxcbiAgICAnYXJyb3dsZWZ0JyxcbiAgICAnYXJyb3dyaWdodCcsXG4gICAgJ2hvbWUnLFxuICAgICdlbmQnLFxuICAgICdzcGFjZScsXG4gICAgJ3NwYWNlYmFyJyxcbiAgICAnICdcbl0pO1xuZXhwb3J0IGNvbnN0IEFDQ09SRElPTl9OQVZJR0FUSU9OX0tFWVMgPSBuZXcgU2V0KCd1cCBkb3duIGFycm93dXAgYXJyb3dkb3duIGhvbWUgZW5kJy5zcGxpdCgnICcpKTtcbmV4cG9ydCBjb25zdCBST1dfRVhQQU5EX0tFWVMgPSBuZXcgU2V0KCdyaWdodCBkb3duIGFycm93cmlnaHQgYXJyb3dkb3duJy5zcGxpdCgnICcpKTtcbmV4cG9ydCBjb25zdCBST1dfQ09MTEFQU0VfS0VZUyA9IG5ldyBTZXQoJ2xlZnQgdXAgYXJyb3dsZWZ0IGFycm93dXAnLnNwbGl0KCcgJykpO1xuZXhwb3J0IGNvbnN0IFJPV19BRERfS0VZUyA9IG5ldyBTZXQoWycrJywgJ2FkZCcsICfiiaAnLCAnwrEnLCAnPSddKTtcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfS0VZUyA9IG5ldyBTZXQoWy4uLkFycmF5LmZyb20oTkFWSUdBVElPTl9LRVlTKSxcbi4uLkFycmF5LmZyb20oUk9XX0FERF9LRVlTKSwgJ2VudGVyJywgJ2YyJywgJ2VzY2FwZScsICdlc2MnLCAncGFnZWRvd24nLCAncGFnZXVwJ10pO1xuZXhwb3J0IGNvbnN0IEhFQURFUl9LRVlTID0gbmV3IFNldChbLi4uQXJyYXkuZnJvbShOQVZJR0FUSU9OX0tFWVMpLCAnZXNjYXBlJywgJ2VzYycsICdsJyxcbiAgICAvKiogVGhpcyBzeW1ib2wgY29ycmVzcG9uZHMgdG8gdGhlIEFsdCArIEwgY29tYmluYXRpb24gdW5kZXIgTUFDLiAqL1xuICAgICfCrCddKTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqXG4gKiBDcmVhdGVzIGEgbmV3IFJlc2l6ZU9ic2VydmVyIG9uIGB0YXJnZXRgIGFuZCByZXR1cm5zIGl0IGFzIGFuIE9ic2VydmFibGUuXG4gKiBSdW4gdGhlIHJlc2l6ZU9ic2VydmFibGUgb3V0c2lkZSBhbmd1bGFyIHpvbmUsIGJlY2F1c2UgaXQgcGF0Y2hlcyB0aGUgTXV0YXRpb25PYnNlcnZlciB3aGljaCBjYXVzZXMgYW4gaW5maW5pdGUgbG9vcC5cbiAqIFJlbGF0ZWQgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzMxNzEyXG4gKi9cbmV4cG9ydCBjb25zdCByZXNpemVPYnNlcnZhYmxlID0gKHRhcmdldDogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT4gPT4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgKGdldFJlc2l6ZU9ic2VydmVyKCkpKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChlbnRyaWVzKTtcbiAgICB9KTtcbiAgICBpbnN0YW5jZS5vYnNlcnZlKHRhcmdldCk7XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiBpbnN0YW5jZS5kaXNjb25uZWN0KCk7XG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xufSk7XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKlxuICogQ29tcGFyZXMgdHdvIG1hcHMuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wYXJlTWFwcyA9IChtYXAxOiBNYXA8YW55LCBhbnk+LCBtYXAyOiBNYXA8YW55LCBhbnk+KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFtYXAyKSB7XG4gICAgICAgIHJldHVybiAhbWFwMSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG1hcDEuc2l6ZSAhPT0gbWFwMi5zaXplKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG1hdGNoID0gdHJ1ZTtcbiAgICBjb25zdCBrZXlzID0gQXJyYXkuZnJvbShtYXAyLmtleXMoKSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAobWFwMS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgbWF0Y2ggPSBtYXAxLmdldChrZXkpID09PSBtYXAyLmdldChrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG59O1xuXG4vKipcbiAqXG4gKiBHaXZlbiBhIHByb3BlcnR5IGFjY2VzcyBwYXRoIGluIHRoZSBmb3JtYXQgYHgueS56YCByZXNvbHZlcyBhbmQgcmV0dXJuc1xuICogdGhlIHZhbHVlIG9mIHRoZSBgemAgcHJvcGVydHkgaW4gdGhlIHBhc3NlZCBvYmplY3QuXG4gKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlTmVzdGVkUGF0aCA9IChvYmo6IGFueSwgcGF0aDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoPy5zcGxpdCgnLicpID8/IFtdO1xuICAgIGxldCBjdXJyZW50ID0gb2JqW3BhcnRzLnNoaWZ0KCldO1xuXG4gICAgcGFydHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3Byb3BdO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3VycmVudDtcbn07XG5cbi8qKlxuICpcbiAqIEdpdmVuIGEgcHJvcGVydHkgYWNjZXNzIHBhdGggaW4gdGhlIGZvcm1hdCBgeC55LnpgIGFuZCBhIHZhbHVlXG4gKiB0aGlzIGZ1bmN0aW9ucyBidWlsZHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IGZvbGxvd2luZyB0aGUgYWNjZXNzIHBhdGguXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnNvbGUubG9nKCd4Lnkuei4nLCA0Mik7XG4gKiA+PiB7IHg6IHsgeTogeyB6OiA0MiB9IH0gfVxuICogYGBgXG4gKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCByZXZlcnNlTWFwcGVyID0gKHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIGNvbnN0IHBhcnRzID0gcGF0aD8uc3BsaXQoJy4nKSA/PyBbXTtcblxuICAgIGxldCBfcHJvcCA9IHBhcnRzLnNoaWZ0KCk7XG4gICAgbGV0IG1hcHBpbmc6IGFueTtcblxuICAgIC8vIEluaXRpYWwgYmluZGluZyBmb3IgZmlyc3QgbGV2ZWwgYmluZGluZ3NcbiAgICBvYmpbX3Byb3BdID0gdmFsdWU7XG4gICAgbWFwcGluZyA9IG9iajtcblxuICAgIHBhcnRzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIC8vIFN0YXJ0IGJ1aWxkaW5nIHRoZSBoaWVyYXJjaHlcbiAgICAgICAgbWFwcGluZ1tfcHJvcF0gPSB7fTtcbiAgICAgICAgLy8gR28gZG93biBhIGxldmVsXG4gICAgICAgIG1hcHBpbmcgPSBtYXBwaW5nW19wcm9wXTtcbiAgICAgICAgLy8gQmluZCB0aGUgdmFsdWUgYW5kIG1vdmUgdGhlIGtleVxuICAgICAgICBtYXBwaW5nW3Byb3BdID0gdmFsdWU7XG4gICAgICAgIF9wcm9wID0gcHJvcDtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnQgY29uc3QgeWllbGRpbmdMb29wID0gKGNvdW50OiBudW1iZXIsIGNodW5rU2l6ZTogbnVtYmVyLCBjYWxsYmFjazogKGluZGV4OiBudW1iZXIpID0+IHZvaWQsIGRvbmU6ICgpID0+IHZvaWQpID0+IHtcbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3QgY2h1bmsgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKGkgKyBjaHVua1NpemUsIGNvdW50KTtcbiAgICAgICAgZm9yICg7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgICAgICAgY2FsbGJhY2soaSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPCBjb3VudCkge1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGNodW5rKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY2h1bmsoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NvbnN0cnVjdG9yID0gKHJlZjogYW55KSA9PiB0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nICYmIEJvb2xlYW4ocmVmLnByb3RvdHlwZSkgJiYgQm9vbGVhbihyZWYucHJvdG90eXBlLmNvbnN0cnVjdG9yKTtcblxuZXhwb3J0IGNvbnN0IHJldmVyc2VBbmltYXRpb25SZXNvbHZlciA9IChhbmltYXRpb246IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhKTogQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEgPT5cbiAgICBvcHBvc2l0ZUFuaW1hdGlvbi5nZXQoYW5pbWF0aW9uKSA/PyBhbmltYXRpb247XG5cbmV4cG9ydCBjb25zdCBpc0hvcml6b250YWxBbmltYXRpb24gPSAoYW5pbWF0aW9uOiBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YSk6IGJvb2xlYW4gPT4gaG9yaXpvbnRhbEFuaW1hdGlvbnMuaW5jbHVkZXMoYW5pbWF0aW9uKTtcblxuZXhwb3J0IGNvbnN0IGlzVmVydGljYWxBbmltYXRpb24gPSAoYW5pbWF0aW9uOiBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YSk6IGJvb2xlYW4gPT4gdmVydGljYWxBbmltYXRpb25zLmluY2x1ZGVzKGFuaW1hdGlvbik7XG5cbmNvbnN0IG9wcG9zaXRlQW5pbWF0aW9uOiBNYXA8QW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEsIEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhPiA9IG5ldyBNYXAoW1xuICAgIFtmYWRlSW4sIGZhZGVJbl0sXG4gICAgW2ZhZGVPdXQsIGZhZGVPdXRdLFxuICAgIFtmbGlwVG9wLCBmbGlwQm90dG9tXSxcbiAgICBbZmxpcEJvdHRvbSwgZmxpcFRvcF0sXG4gICAgW2ZsaXBSaWdodCwgZmxpcExlZnRdLFxuICAgIFtmbGlwTGVmdCwgZmxpcFJpZ2h0XSxcbiAgICBbZmxpcEhvckZ3ZCwgZmxpcEhvckJja10sXG4gICAgW2ZsaXBIb3JCY2ssIGZsaXBIb3JGd2RdLFxuICAgIFtmbGlwVmVyRndkLCBmbGlwVmVyQmNrXSxcbiAgICBbZmxpcFZlckJjaywgZmxpcFZlckZ3ZF0sXG4gICAgW2dyb3dWZXJJbiwgZ3Jvd1ZlckluXSxcbiAgICBbZ3Jvd1Zlck91dCwgZ3Jvd1Zlck91dF0sXG4gICAgW2hlYXJ0YmVhdCwgaGVhcnRiZWF0XSxcbiAgICBbcHVsc2F0ZUZ3ZCwgcHVsc2F0ZUJja10sXG4gICAgW3B1bHNhdGVCY2ssIHB1bHNhdGVGd2RdLFxuICAgIFtibGluaywgYmxpbmtdLFxuICAgIFtzaGFrZUhvciwgc2hha2VIb3JdLFxuICAgIFtzaGFrZVZlciwgc2hha2VWZXJdLFxuICAgIFtzaGFrZVRvcCwgc2hha2VUb3BdLFxuICAgIFtzaGFrZUJvdHRvbSwgc2hha2VCb3R0b21dLFxuICAgIFtzaGFrZVJpZ2h0LCBzaGFrZVJpZ2h0XSxcbiAgICBbc2hha2VMZWZ0LCBzaGFrZUxlZnRdLFxuICAgIFtzaGFrZUNlbnRlciwgc2hha2VDZW50ZXJdLFxuICAgIFtzaGFrZVRyLCBzaGFrZVRyXSxcbiAgICBbc2hha2VCciwgc2hha2VCcl0sXG4gICAgW3NoYWtlQmwsIHNoYWtlQmxdLFxuICAgIFtzaGFrZVRsLCBzaGFrZVRsXSxcbiAgICBbcm90YXRlSW5DZW50ZXIsIHJvdGF0ZUluQ2VudGVyXSxcbiAgICBbcm90YXRlT3V0Q2VudGVyLCByb3RhdGVPdXRDZW50ZXJdLFxuICAgIFtyb3RhdGVJblRvcCwgcm90YXRlSW5Cb3R0b21dLFxuICAgIFtyb3RhdGVPdXRUb3AsIHJvdGF0ZU91dEJvdHRvbV0sXG4gICAgW3JvdGF0ZUluUmlnaHQsIHJvdGF0ZUluTGVmdF0sXG4gICAgW3JvdGF0ZU91dFJpZ2h0LCByb3RhdGVPdXRMZWZ0XSxcbiAgICBbcm90YXRlSW5MZWZ0LCByb3RhdGVJblJpZ2h0XSxcbiAgICBbcm90YXRlT3V0TGVmdCwgcm90YXRlT3V0UmlnaHRdLFxuICAgIFtyb3RhdGVJbkJvdHRvbSwgcm90YXRlSW5Ub3BdLFxuICAgIFtyb3RhdGVPdXRCb3R0b20sIHJvdGF0ZU91dFRvcF0sXG4gICAgW3JvdGF0ZUluVHIsIHJvdGF0ZUluQmxdLFxuICAgIFtyb3RhdGVPdXRUciwgcm90YXRlT3V0QmxdLFxuICAgIFtyb3RhdGVJbkJyLCByb3RhdGVJblRsXSxcbiAgICBbcm90YXRlT3V0QnIsIHJvdGF0ZU91dFRsXSxcbiAgICBbcm90YXRlSW5CbCwgcm90YXRlSW5Ucl0sXG4gICAgW3JvdGF0ZU91dEJsLCByb3RhdGVPdXRUcl0sXG4gICAgW3JvdGF0ZUluVGwsIHJvdGF0ZUluQnJdLFxuICAgIFtyb3RhdGVPdXRUbCwgcm90YXRlT3V0QnJdLFxuICAgIFtyb3RhdGVJbkRpYWdvbmFsMSwgcm90YXRlSW5EaWFnb25hbDFdLFxuICAgIFtyb3RhdGVPdXREaWFnb25hbDEsIHJvdGF0ZU91dERpYWdvbmFsMV0sXG4gICAgW3JvdGF0ZUluRGlhZ29uYWwyLCByb3RhdGVJbkRpYWdvbmFsMl0sXG4gICAgW3JvdGF0ZU91dERpYWdvbmFsMiwgcm90YXRlT3V0RGlhZ29uYWwyXSxcbiAgICBbcm90YXRlSW5Ib3IsIHJvdGF0ZUluSG9yXSxcbiAgICBbcm90YXRlT3V0SG9yLCByb3RhdGVPdXRIb3JdLFxuICAgIFtyb3RhdGVJblZlciwgcm90YXRlSW5WZXJdLFxuICAgIFtyb3RhdGVPdXRWZXIsIHJvdGF0ZU91dFZlcl0sXG4gICAgW3NjYWxlSW5Ub3AsIHNjYWxlSW5Cb3R0b21dLFxuICAgIFtzY2FsZU91dFRvcCwgc2NhbGVPdXRCb3R0b21dLFxuICAgIFtzY2FsZUluUmlnaHQsIHNjYWxlSW5MZWZ0XSxcbiAgICBbc2NhbGVPdXRSaWdodCwgc2NhbGVPdXRMZWZ0XSxcbiAgICBbc2NhbGVJbkJvdHRvbSwgc2NhbGVJblRvcF0sXG4gICAgW3NjYWxlT3V0Qm90dG9tLCBzY2FsZU91dFRvcF0sXG4gICAgW3NjYWxlSW5MZWZ0LCBzY2FsZUluUmlnaHRdLFxuICAgIFtzY2FsZU91dExlZnQsIHNjYWxlT3V0UmlnaHRdLFxuICAgIFtzY2FsZUluQ2VudGVyLCBzY2FsZUluQ2VudGVyXSxcbiAgICBbc2NhbGVPdXRDZW50ZXIsIHNjYWxlT3V0Q2VudGVyXSxcbiAgICBbc2NhbGVJblRyLCBzY2FsZUluQmxdLFxuICAgIFtzY2FsZU91dFRyLCBzY2FsZU91dEJsXSxcbiAgICBbc2NhbGVJbkJyLCBzY2FsZUluVGxdLFxuICAgIFtzY2FsZU91dEJyLCBzY2FsZU91dFRsXSxcbiAgICBbc2NhbGVJbkJsLCBzY2FsZUluVHJdLFxuICAgIFtzY2FsZU91dEJsLCBzY2FsZU91dFRyXSxcbiAgICBbc2NhbGVJblRsLCBzY2FsZUluQnJdLFxuICAgIFtzY2FsZU91dFRsLCBzY2FsZU91dEJyXSxcbiAgICBbc2NhbGVJblZlclRvcCwgc2NhbGVJblZlckJvdHRvbV0sXG4gICAgW3NjYWxlT3V0VmVyVG9wLCBzY2FsZU91dFZlckJvdHRvbV0sXG4gICAgW3NjYWxlSW5WZXJCb3R0b20sIHNjYWxlSW5WZXJUb3BdLFxuICAgIFtzY2FsZU91dFZlckJvdHRvbSwgc2NhbGVPdXRWZXJUb3BdLFxuICAgIFtzY2FsZUluVmVyQ2VudGVyLCBzY2FsZUluVmVyQ2VudGVyXSxcbiAgICBbc2NhbGVPdXRWZXJDZW50ZXIsIHNjYWxlT3V0VmVyQ2VudGVyXSxcbiAgICBbc2NhbGVJbkhvckNlbnRlciwgc2NhbGVJbkhvckNlbnRlcl0sXG4gICAgW3NjYWxlT3V0SG9yQ2VudGVyLCBzY2FsZU91dEhvckNlbnRlcl0sXG4gICAgW3NjYWxlSW5Ib3JMZWZ0LCBzY2FsZUluSG9yUmlnaHRdLFxuICAgIFtzY2FsZU91dEhvckxlZnQsIHNjYWxlT3V0SG9yUmlnaHRdLFxuICAgIFtzY2FsZUluSG9yUmlnaHQsIHNjYWxlSW5Ib3JMZWZ0XSxcbiAgICBbc2NhbGVPdXRIb3JSaWdodCwgc2NhbGVPdXRIb3JMZWZ0XSxcbiAgICBbc2xpZGVJblRvcCwgc2xpZGVJbkJvdHRvbV0sXG4gICAgW3NsaWRlT3V0VG9wLCBzbGlkZU91dEJvdHRvbV0sXG4gICAgW3NsaWRlSW5SaWdodCwgc2xpZGVJbkxlZnRdLFxuICAgIFtzbGlkZU91dFJpZ2h0LCBzbGlkZU91dExlZnRdLFxuICAgIFtzbGlkZUluQm90dG9tLCBzbGlkZUluVG9wXSxcbiAgICBbc2xpZGVPdXRCb3R0b20sIHNsaWRlT3V0VG9wXSxcbiAgICBbc2xpZGVJbkxlZnQsIHNsaWRlSW5SaWdodF0sXG4gICAgW3NsaWRlT3V0TGVmdCwgc2xpZGVPdXRSaWdodF0sXG4gICAgW3NsaWRlSW5Uciwgc2xpZGVJbkJsXSxcbiAgICBbc2xpZGVPdXRUciwgc2xpZGVPdXRCbF0sXG4gICAgW3NsaWRlSW5Cciwgc2xpZGVJblRsXSxcbiAgICBbc2xpZGVPdXRCciwgc2xpZGVPdXRUbF0sXG4gICAgW3NsaWRlSW5CbCwgc2xpZGVJblRyXSxcbiAgICBbc2xpZGVPdXRCbCwgc2xpZGVPdXRUcl0sXG4gICAgW3NsaWRlSW5UbCwgc2xpZGVJbkJyXSxcbiAgICBbc2xpZGVPdXRUbCwgc2xpZGVPdXRCcl0sXG4gICAgW3N3aW5nSW5Ub3BGd2QsIHN3aW5nSW5Cb3R0b21Gd2RdLFxuICAgIFtzd2luZ091dFRvcEZ3ZCwgc3dpbmdPdXRCb3R0b21Gd2RdLFxuICAgIFtzd2luZ0luUmlnaHRGd2QsIHN3aW5nSW5MZWZ0RndkXSxcbiAgICBbc3dpbmdPdXRSaWdodEZ3ZCwgc3dpbmdPdXRMZWZ0dEZ3ZF0sXG4gICAgW3N3aW5nSW5MZWZ0RndkLCBzd2luZ0luUmlnaHRGd2RdLFxuICAgIFtzd2luZ091dExlZnR0RndkLCBzd2luZ091dFJpZ2h0RndkXSxcbiAgICBbc3dpbmdJbkJvdHRvbUZ3ZCwgc3dpbmdJblRvcEZ3ZF0sXG4gICAgW3N3aW5nT3V0Qm90dG9tRndkLCBzd2luZ091dFRvcEZ3ZF0sXG4gICAgW3N3aW5nSW5Ub3BCY2ssIHN3aW5nSW5Cb3R0b21CY2tdLFxuICAgIFtzd2luZ091dFRvcEJjaywgc3dpbmdPdXRCb3R0b21CY2tdLFxuICAgIFtzd2luZ0luUmlnaHRCY2ssIHN3aW5nSW5MZWZ0QmNrXSxcbiAgICBbc3dpbmdPdXRSaWdodEJjaywgc3dpbmdPdXRMZWZ0QmNrXSxcbiAgICBbc3dpbmdJbkJvdHRvbUJjaywgc3dpbmdJblRvcEJja10sXG4gICAgW3N3aW5nT3V0Qm90dG9tQmNrLCBzd2luZ091dFRvcEJja10sXG4gICAgW3N3aW5nSW5MZWZ0QmNrLCBzd2luZ0luUmlnaHRCY2tdLFxuICAgIFtzd2luZ091dExlZnRCY2ssIHN3aW5nT3V0UmlnaHRCY2tdLFxuXSk7XG5cbmNvbnN0IGhvcml6b250YWxBbmltYXRpb25zOiBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YVtdID0gW1xuICAgIGZsaXBSaWdodCxcbiAgICBmbGlwTGVmdCxcbiAgICBmbGlwVmVyRndkLFxuICAgIGZsaXBWZXJCY2ssXG4gICAgcm90YXRlSW5SaWdodCxcbiAgICByb3RhdGVPdXRSaWdodCxcbiAgICByb3RhdGVJbkxlZnQsXG4gICAgcm90YXRlT3V0TGVmdCxcbiAgICByb3RhdGVJblRyLFxuICAgIHJvdGF0ZU91dFRyLFxuICAgIHJvdGF0ZUluQnIsXG4gICAgcm90YXRlT3V0QnIsXG4gICAgcm90YXRlSW5CbCxcbiAgICByb3RhdGVPdXRCbCxcbiAgICByb3RhdGVJblRsLFxuICAgIHJvdGF0ZU91dFRsLFxuICAgIHNjYWxlSW5SaWdodCxcbiAgICBzY2FsZU91dFJpZ2h0LFxuICAgIHNjYWxlSW5MZWZ0LFxuICAgIHNjYWxlT3V0TGVmdCxcbiAgICBzY2FsZUluVHIsXG4gICAgc2NhbGVPdXRUcixcbiAgICBzY2FsZUluQnIsXG4gICAgc2NhbGVPdXRCcixcbiAgICBzY2FsZUluQmwsXG4gICAgc2NhbGVPdXRCbCxcbiAgICBzY2FsZUluVGwsXG4gICAgc2NhbGVPdXRUbCxcbiAgICBzY2FsZUluSG9yTGVmdCxcbiAgICBzY2FsZU91dEhvckxlZnQsXG4gICAgc2NhbGVJbkhvclJpZ2h0LFxuICAgIHNjYWxlT3V0SG9yUmlnaHQsXG4gICAgc2xpZGVJblJpZ2h0LFxuICAgIHNsaWRlT3V0UmlnaHQsXG4gICAgc2xpZGVJbkxlZnQsXG4gICAgc2xpZGVPdXRMZWZ0LFxuICAgIHNsaWRlSW5UcixcbiAgICBzbGlkZU91dFRyLFxuICAgIHNsaWRlSW5CcixcbiAgICBzbGlkZU91dEJyLFxuICAgIHNsaWRlSW5CbCxcbiAgICBzbGlkZU91dEJsLFxuICAgIHNsaWRlSW5UbCxcbiAgICBzbGlkZU91dFRsLFxuICAgIHN3aW5nSW5SaWdodEZ3ZCxcbiAgICBzd2luZ091dFJpZ2h0RndkLFxuICAgIHN3aW5nSW5MZWZ0RndkLFxuICAgIHN3aW5nT3V0TGVmdHRGd2QsXG4gICAgc3dpbmdJblJpZ2h0QmNrLFxuICAgIHN3aW5nT3V0UmlnaHRCY2ssXG4gICAgc3dpbmdJbkxlZnRCY2ssXG4gICAgc3dpbmdPdXRMZWZ0QmNrLFxuXTtcbmNvbnN0IHZlcnRpY2FsQW5pbWF0aW9uczogQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGFbXSA9IFtcbiAgICBmbGlwVG9wLFxuICAgIGZsaXBCb3R0b20sXG4gICAgZmxpcEhvckZ3ZCxcbiAgICBmbGlwSG9yQmNrLFxuICAgIGdyb3dWZXJJbixcbiAgICBncm93VmVyT3V0LFxuICAgIHJvdGF0ZUluVG9wLFxuICAgIHJvdGF0ZU91dFRvcCxcbiAgICByb3RhdGVJbkJvdHRvbSxcbiAgICByb3RhdGVPdXRCb3R0b20sXG4gICAgcm90YXRlSW5UcixcbiAgICByb3RhdGVPdXRUcixcbiAgICByb3RhdGVJbkJyLFxuICAgIHJvdGF0ZU91dEJyLFxuICAgIHJvdGF0ZUluQmwsXG4gICAgcm90YXRlT3V0QmwsXG4gICAgcm90YXRlSW5UbCxcbiAgICByb3RhdGVPdXRUbCxcbiAgICBzY2FsZUluVG9wLFxuICAgIHNjYWxlT3V0VG9wLFxuICAgIHNjYWxlSW5Cb3R0b20sXG4gICAgc2NhbGVPdXRCb3R0b20sXG4gICAgc2NhbGVJblRyLFxuICAgIHNjYWxlT3V0VHIsXG4gICAgc2NhbGVJbkJyLFxuICAgIHNjYWxlT3V0QnIsXG4gICAgc2NhbGVJbkJsLFxuICAgIHNjYWxlT3V0QmwsXG4gICAgc2NhbGVJblRsLFxuICAgIHNjYWxlT3V0VGwsXG4gICAgc2NhbGVJblZlclRvcCxcbiAgICBzY2FsZU91dFZlclRvcCxcbiAgICBzY2FsZUluVmVyQm90dG9tLFxuICAgIHNjYWxlT3V0VmVyQm90dG9tLFxuICAgIHNsaWRlSW5Ub3AsXG4gICAgc2xpZGVPdXRUb3AsXG4gICAgc2xpZGVJbkJvdHRvbSxcbiAgICBzbGlkZU91dEJvdHRvbSxcbiAgICBzbGlkZUluVHIsXG4gICAgc2xpZGVPdXRUcixcbiAgICBzbGlkZUluQnIsXG4gICAgc2xpZGVPdXRCcixcbiAgICBzbGlkZUluQmwsXG4gICAgc2xpZGVPdXRCbCxcbiAgICBzbGlkZUluVGwsXG4gICAgc2xpZGVPdXRUbCxcbiAgICBzd2luZ0luVG9wRndkLFxuICAgIHN3aW5nT3V0VG9wRndkLFxuICAgIHN3aW5nSW5Cb3R0b21Gd2QsXG4gICAgc3dpbmdPdXRCb3R0b21Gd2QsXG4gICAgc3dpbmdJblRvcEJjayxcbiAgICBzd2luZ091dFRvcEJjayxcbiAgICBzd2luZ0luQm90dG9tQmNrLFxuICAgIHN3aW5nT3V0Qm90dG9tQmNrLFxuXTtcblxuXG4vKipcbiAqIFNpbWlsYXIgdG8gQW5ndWxhcidzIGZvcm1hdERhdGUuIEhvd2V2ZXIgaXQgd2lsbCBub3QgdGhyb3cgb24gYHVuZGVmaW5lZCB8IG51bGwgfCAnJ2AgaW5zdGVhZFxuICogY29hbGVzY2luZyB0byBhbiBlbXB0eSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXREYXRlID0gKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlLCBmb3JtYXQ6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcsIHRpbWV6b25lPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gX2Zvcm1hdERhdGUodmFsdWUsIGZvcm1hdCwgbG9jYWxlLCB0aW1lem9uZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Q3VycmVuY3kgPSBuZXcgQ3VycmVuY3lQaXBlKHVuZGVmaW5lZCkudHJhbnNmb3JtO1xuIl19
697
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY29yZS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsSUFBSSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFDSCxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFDeEYsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFDNUYsY0FBYyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUM3RixZQUFZLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQzFGLGVBQWUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUNyRixZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFDbkYsWUFBWSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFDbEYsY0FBYyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsWUFB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Q1gsVUFBVTtJQUNWLFdBQVc7SUFDWCxhQUFhO0lBQ2IsY0FBYztJQUNkLFNBQVM7SUFDVCxVQUFVO0lBQ1YsU0FBUztJQUNULFVBQVU7SUFDVixTQUFTO0lBQ1QsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0lBQ1YsYUFBYTtJQUNiLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixXQUFXO0lBQ1gsYUFBYTtJQUNiLGNBQWM7SUFDZCxTQUFTO0lBQ1QsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0lBQ1YsU0FBUztJQUNULFVBQVU7SUFDVixTQUFTO0lBQ1QsVUFBVTtJQUNWLGFBQWE7SUFDYixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixpQkFBaUI7Q0FDcEIsQ0FBQztBQUdGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQTZCLEVBQUUsTUFBYyxFQUFFLE1BQWMsRUFBRSxRQUFpQixFQUFVLEVBQUU7SUFDbkgsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtRQUN2RCxPQUFPLEVBQUUsQ0FBQztLQUNiO0lBQ0QsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDdXJyZW5jeVBpcGUsIGZvcm1hdERhdGUgYXMgX2Zvcm1hdERhdGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1lcmdlV2l0aCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGJsaW5rLCBmYWRlSW4sIGZhZGVPdXQsIGZsaXBCb3R0b20sIGZsaXBIb3JCY2ssIGZsaXBIb3JGd2QsIGZsaXBMZWZ0LCBmbGlwUmlnaHQsIGZsaXBUb3AsXG4gICAgZmxpcFZlckJjaywgZmxpcFZlckZ3ZCwgZ3Jvd1ZlckluLCBncm93VmVyT3V0LCBoZWFydGJlYXQsIHB1bHNhdGVCY2ssIHB1bHNhdGVGd2QsIHJvdGF0ZUluQmwsXG4gICAgcm90YXRlSW5Cb3R0b20sIHJvdGF0ZUluQnIsIHJvdGF0ZUluQ2VudGVyLCByb3RhdGVJbkRpYWdvbmFsMSwgcm90YXRlSW5EaWFnb25hbDIsIHJvdGF0ZUluSG9yLFxuICAgIHJvdGF0ZUluTGVmdCwgcm90YXRlSW5SaWdodCwgcm90YXRlSW5UbCwgcm90YXRlSW5Ub3AsIHJvdGF0ZUluVHIsIHJvdGF0ZUluVmVyLCByb3RhdGVPdXRCbCxcbiAgICByb3RhdGVPdXRCb3R0b20sIHJvdGF0ZU91dEJyLCByb3RhdGVPdXRDZW50ZXIsIHJvdGF0ZU91dERpYWdvbmFsMSwgcm90YXRlT3V0RGlhZ29uYWwyLFxuICAgIHJvdGF0ZU91dEhvciwgcm90YXRlT3V0TGVmdCwgcm90YXRlT3V0UmlnaHQsIHJvdGF0ZU91dFRsLCByb3RhdGVPdXRUb3AsIHJvdGF0ZU91dFRyLFxuICAgIHJvdGF0ZU91dFZlciwgc2NhbGVJbkJsLCBzY2FsZUluQm90dG9tLCBzY2FsZUluQnIsIHNjYWxlSW5DZW50ZXIsIHNjYWxlSW5Ib3JDZW50ZXIsXG4gICAgc2NhbGVJbkhvckxlZnQsIHNjYWxlSW5Ib3JSaWdodCwgc2NhbGVJbkxlZnQsIHNjYWxlSW5SaWdodCwgc2NhbGVJblRsLCBzY2FsZUluVG9wLCBzY2FsZUluVHIsXG4gICAgc2NhbGVJblZlckJvdHRvbSwgc2NhbGVJblZlckNlbnRlciwgc2NhbGVJblZlclRvcCwgc2NhbGVPdXRCbCwgc2NhbGVPdXRCb3R0b20sIHNjYWxlT3V0QnIsXG4gICAgc2NhbGVPdXRDZW50ZXIsIHNjYWxlT3V0SG9yQ2VudGVyLCBzY2FsZU91dEhvckxlZnQsIHNjYWxlT3V0SG9yUmlnaHQsIHNjYWxlT3V0TGVmdCxcbiAgICBzY2FsZU91dFJpZ2h0LCBzY2FsZU91dFRsLCBzY2FsZU91dFRvcCwgc2NhbGVPdXRUciwgc2NhbGVPdXRWZXJCb3R0b20sIHNjYWxlT3V0VmVyQ2VudGVyLFxuICAgIHNjYWxlT3V0VmVyVG9wLCBzaGFrZUJsLCBzaGFrZUJvdHRvbSwgc2hha2VCciwgc2hha2VDZW50ZXIsIHNoYWtlSG9yLCBzaGFrZUxlZnQsIHNoYWtlUmlnaHQsXG4gICAgc2hha2VUbCwgc2hha2VUb3AsIHNoYWtlVHIsIHNoYWtlVmVyLCBzbGlkZUluQmwsIHNsaWRlSW5Cb3R0b20sIHNsaWRlSW5Cciwgc2xpZGVJbkxlZnQsXG4gICAgc2xpZGVJblJpZ2h0LCBzbGlkZUluVGwsIHNsaWRlSW5Ub3AsIHNsaWRlSW5Uciwgc2xpZGVPdXRCbCwgc2xpZGVPdXRCb3R0b20sIHNsaWRlT3V0QnIsXG4gICAgc2xpZGVPdXRMZWZ0LCBzbGlkZU91dFJpZ2h0LCBzbGlkZU91dFRsLCBzbGlkZU91dFRvcCwgc2xpZGVPdXRUciwgc3dpbmdJbkJvdHRvbUJjayxcbiAgICBzd2luZ0luQm90dG9tRndkLCBzd2luZ0luTGVmdEJjaywgc3dpbmdJbkxlZnRGd2QsIHN3aW5nSW5SaWdodEJjaywgc3dpbmdJblJpZ2h0RndkLFxuICAgIHN3aW5nSW5Ub3BCY2ssIHN3aW5nSW5Ub3BGd2QsIHN3aW5nT3V0Qm90dG9tQmNrLCBzd2luZ091dEJvdHRvbUZ3ZCwgc3dpbmdPdXRMZWZ0QmNrLFxuICAgIHN3aW5nT3V0TGVmdHRGd2QsIHN3aW5nT3V0UmlnaHRCY2ssIHN3aW5nT3V0UmlnaHRGd2QsIHN3aW5nT3V0VG9wQmNrLCBzd2luZ091dFRvcEZ3ZFxufSBmcm9tICcuLi9hbmltYXRpb25zL21haW4nO1xuaW1wb3J0IHsgc2V0SW1tZWRpYXRlIH0gZnJvbSAnLi9zZXRJbW1lZGlhdGUnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3Qgc2hvd01lc3NhZ2UgPSAobWVzc2FnZTogc3RyaW5nLCBpc01lc3NhZ2VTaG93bjogYm9vbGVhbik6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghaXNNZXNzYWdlU2hvd24gJiYgaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IG1rZW51bSA9IDxUIGV4dGVuZHMgeyBbaW5kZXg6IHN0cmluZ106IFUgfSwgVSBleHRlbmRzIHN0cmluZz4oeDogVCkgPT4geDtcblxuLyoqXG4gKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlc2l6ZU9ic2VydmVyID0gKCkgPT4gd2luZG93LlJlc2l6ZU9ic2VydmVyO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IGNsb25lQXJyYXkgPSAoYXJyYXk6IGFueVtdLCBkZWVwPzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IGFyciA9IFtdO1xuICAgIGlmICghYXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgbGV0IGkgPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICBhcnJbaV0gPSBkZWVwID8gY2xvbmVWYWx1ZShhcnJheVtpXSkgOiBhcnJheVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogRG9lc24ndCBjbG9uZSBsZWFmIGl0ZW1zXG4gKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgY2xvbmVIaWVyYXJjaGljYWxBcnJheSA9IChhcnJheTogYW55W10sIGNoaWxkRGF0YUtleTogYW55KTogYW55W10gPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBpZiAoIWFycmF5KSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGFycmF5KSB7XG4gICAgICAgIGNvbnN0IGNsb25lZEl0ZW0gPSBjbG9uZVZhbHVlKGl0ZW0pO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtW2NoaWxkRGF0YUtleV0pKSB7XG4gICAgICAgICAgICBjbG9uZWRJdGVtW2NoaWxkRGF0YUtleV0gPSBjbG9uZUhpZXJhcmNoaWNhbEFycmF5KGNsb25lZEl0ZW1bY2hpbGREYXRhS2V5XSwgY2hpbGREYXRhS2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaChjbG9uZWRJdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCBwcm90b3R5cGUgZnJvbSBwcm92aWRlZCBzb3VyY2UgYW5kIGNvcGllc1xuICogYWxsIHByb3BlcnRpZXMgZGVzY3JpcHRvcnMgZnJvbSBwcm92aWRlZCBzb3VyY2VcbiAqIEBwYXJhbSBvYmogU291cmNlIHRvIGNvcHkgcHJvdG90eXBlIGFuZCBkZXNjcmlwdG9ycyBmcm9tXG4gKiBAcmV0dXJucyBOZXcgb2JqZWN0IHdpdGggY2xvbmVkIHByb3RvdHlwZSBhbmQgcHJvcGVydHkgZGVzY3JpcHRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvcHlEZXNjcmlwdG9ycyA9IChvYmopID0+IHtcbiAgICBpZiAob2JqKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKFxuICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaiksXG4gICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIERlZXAgY2xvbmVzIGFsbCBmaXJzdCBsZXZlbCBrZXlzIG9mIE9iajIgYW5kIG1lcmdlcyB0aGVtIHRvIE9iajFcbiAqXG4gKiBAcGFyYW0gb2JqMSBPYmplY3QgdG8gbWVyZ2UgaW50b1xuICogQHBhcmFtIG9iajIgT2JqZWN0IHRvIG1lcmdlIGZyb21cbiAqIEByZXR1cm5zIE9iajEgd2l0aCBtZXJnZWQgY2xvbmVkIGtleXMgZnJvbSBPYmoyXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBtZXJnZU9iamVjdHMgPSAob2JqMTogYW55LCBvYmoyOiBhbnkpOiBhbnkgPT4gbWVyZ2VXaXRoKG9iajEsIG9iajIsIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG9ialZhbHVlID0gc3JjVmFsdWU7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ3JlYXRlcyBkZWVwIGNsb25lIG9mIHByb3ZpZGVkIHZhbHVlLlxuICogU3VwcG9ydHMgcHJpbWl0aXZlIHZhbHVlcywgZGF0ZXMgYW5kIG9iamVjdHMuXG4gKiBJZiBwYXNzZWQgdmFsdWUgaXMgYXJyYXkgcmV0dXJucyBzaGFsbG93IGNvcHkgb2YgdGhlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBjbG9uZVxuICogQHJldHVybnMgRGVlcCBjb3B5IG9mIHByb3ZpZGVkIHZhbHVlXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZVZhbHVlID0gKHZhbHVlOiBhbnkpOiBhbnkgPT4ge1xuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZS5nZXRUaW1lKCkpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFsuLi52YWx1ZV07XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwIHx8IHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjbG9uZVZhbHVlKHZhbHVlW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogUGFyc2UgcHJvdmlkZWQgaW5wdXQgdG8gRGF0ZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgaW5wdXQgdG8gcGFyc2VcbiAqIEByZXR1cm5zIERhdGUgaWYgcGFyc2Ugc3VjY2VlZCBvciBudWxsXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZURhdGUgPSAodmFsdWU6IGFueSk6IERhdGUgfCBudWxsID0+IHtcbiAgICAvLyBpZiB2YWx1ZSBpcyBJbnZhbGlkIERhdGUgcmV0dXJuIG51bGxcbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHZhbHVlLmdldFRpbWUoKSkgPyB2YWx1ZSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCB1bmlxdWUgZGF0ZXMgb25seS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uVmFsdWVzIGNvbGxlY3Rpb24gb2YgZGF0ZSB2YWx1ZXMgKG1pZ2h0IGJlIG51bWJlcnMgb3IgSVNPIDg2MDEgc3RyaW5ncylcbiAqIEByZXR1cm5zIGNvbGxlY3Rpb24gb2YgdW5pcXVlIGRhdGVzLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgdW5pcXVlRGF0ZXMgPSAoY29sdW1uVmFsdWVzOiBhbnlbXSkgPT4gY29sdW1uVmFsdWVzLnJlZHVjZSgoYSwgYykgPT4ge1xuICAgIGlmICghYS5jYWNoZVtjLmxhYmVsXSkge1xuICAgICAgICBhLnJlc3VsdC5wdXNoKGMpO1xuICAgIH1cbiAgICBhLmNhY2hlW2MubGFiZWxdID0gdHJ1ZTtcbiAgICByZXR1cm4gYTtcbn0sIHsgcmVzdWx0OiBbXSwgY2FjaGU6IHt9IH0pLnJlc3VsdDtcblxuLyoqXG4gKiBDaGVja3MgaWYgcHJvdmlkZWQgdmFyaWFibGUgaXMgT2JqZWN0XG4gKlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB0cnVlIGlmIHByb3ZpZGVkIHZhcmlhYmxlIGlzIE9iamVjdFxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4gISEodmFsdWUgJiYgdmFsdWUudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBwcm92aWRlZCB2YXJpYWJsZSBpcyBEYXRlXG4gKlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB0cnVlIGlmIHByb3ZpZGVkIHZhcmlhYmxlIGlzIERhdGVcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGF0ZSA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgRGF0ZSA9PiB2YWx1ZSBpbnN0YW5jZW9mIERhdGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSB0d28gcGFzc2VkIGFyZ3VtZW50cyBhcmUgZXF1YWxcbiAqIEN1cnJlbnRseSBzdXBwb3J0cyBkYXRlIG9iamVjdHNcbiAqXG4gKiBAcGFyYW0gb2JqMVxuICogQHBhcmFtIG9iajJcbiAqIEByZXR1cm5zOiBgYm9vbGVhbmBcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRXF1YWwgPSAob2JqMSwgb2JqMik6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChpc0RhdGUob2JqMSkgJiYgaXNEYXRlKG9iajIpKSB7XG4gICAgICAgIHJldHVybiBvYmoxLmdldFRpbWUoKSA9PT0gb2JqMi5nZXRUaW1lKCk7XG4gICAgfVxuICAgIHJldHVybiBvYmoxID09PSBvYmoyO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgcHJvdmlkZWQgdmFyaWFibGUgaXMgdGhlIHZhbHVlIE5hTlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZSBpZiBwcm92aWRlZCB2YXJpYWJsZSBpcyBOYU5cbiAqIEBoaWRkZW5cbiAqL1xuIGV4cG9ydCBjb25zdCBpc05hTnZhbHVlID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IGlzTmFOKHZhbHVlKSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZyc7XG5cbi8qKlxuICogVXRpbGl0eSBzZXJ2aWNlIHRha2luZyBjYXJlIG9mIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgc3VjaCBhc1xuICogZGV0ZWN0aW5nIGJyb3dzZXIgZmVhdHVyZXMsIGdlbmVyYWwgY3Jvc3MgYnJvd3NlciBET00gbWFuaXB1bGF0aW9uLCBldGMuXG4gKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybVV0aWwge1xuICAgIHB1YmxpYyBpc0Jyb3dzZXI6IGJvb2xlYW4gPSBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpO1xuICAgIHB1YmxpYyBpc0lPUyA9IHRoaXMuaXNCcm93c2VyICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmICEoJ01TU3RyZWFtJyBpbiB3aW5kb3cpO1xuICAgIHB1YmxpYyBpc0ZpcmVmb3ggPSB0aGlzLmlzQnJvd3NlciAmJiAvRmlyZWZveFtcXC9cXHNdKFxcZCtcXC5cXGQrKS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBwdWJsaWMgaXNFZGdlID0gdGhpcy5pc0Jyb3dzZXIgJiYgL0VkZ2VbXFwvXFxzXShcXGQrXFwuXFxkKykvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgcHVibGljIGlzQ2hyb21pdW0gPSB0aGlzLmlzQnJvd3NlciAmJiAoL0Nocm9tfGU/aXVtL2cudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSB8fFxuICAgICAgICAvR29vZ2xlIEluYy9nLnRlc3QobmF2aWdhdG9yLnZlbmRvcikpICYmICEvRWRnZS9nLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbiAgICBwdWJsaWMgS0VZTUFQID0gbWtlbnVtKHtcbiAgICAgICAgRU5URVI6ICdFbnRlcicsXG4gICAgICAgIFNQQUNFOiAnICcsXG4gICAgICAgIEVTQ0FQRTogJ0VzY2FwZScsXG4gICAgICAgIEFSUk9XX0RPV046ICdBcnJvd0Rvd24nLFxuICAgICAgICBBUlJPV19VUDogJ0Fycm93VXAnLFxuICAgICAgICBBUlJPV19MRUZUOiAnQXJyb3dMZWZ0JyxcbiAgICAgICAgQVJST1dfUklHSFQ6ICdBcnJvd1JpZ2h0JyxcbiAgICAgICAgRU5EOiAnRW5kJyxcbiAgICAgICAgSE9NRTogJ0hvbWUnLFxuICAgICAgICBQQUdFX0RPV046ICdQYWdlRG93bicsXG4gICAgICAgIFBBR0VfVVA6ICdQYWdlVXAnLFxuICAgICAgICBGMjogJ0YyJyxcbiAgICAgICAgVEFCOiAnVGFiJyxcbiAgICAgICAgU0VNSUNPTE9OOiAnOycsXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzI2VkaXRpbmdfa2V5c1xuICAgICAgICBERUxFVEU6ICdEZWxldGUnLFxuICAgICAgICBCQUNLU1BBQ0U6ICdCYWNrc3BhY2UnLFxuICAgICAgICBDT05UUk9MOiAnQ29udHJvbCcsXG4gICAgICAgIFg6ICd4JyxcbiAgICAgICAgWTogJ3knLFxuICAgICAgICBaOiAneidcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogYW55KSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIG5vZGUgY29udGVudCwgdXNpbmcgUmFuZ2VcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgKiBsZXQgY29sdW1uID0gdGhpcy5ncmlkLmNvbHVtbkxpc3QuZmlsdGVyKGMgPT4gYy5maWVsZCA9PT0gJ0lEJylbMF07XG4gICAgICpcbiAgICAgKiBsZXQgc2l6ZSA9IGdldE5vZGVTaXplVmlhUmFuZ2UocmFuZ2UsIGNvbHVtbi5jZWxsc1swXS5uYXRpdmVFbGVtZW50KTtcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIGxhc3QgcGFyYW1ldGVyIGlzIHVzZWZ1bCB3aGVuIHRoZSBzaXplIG9mIHRoZSBlbGVtZW50IHRvIG1lYXN1cmUgaXMgbW9kaWZpZWQgYnkgYVxuICAgICAqIHBhcmVudCBlbGVtZW50IHRoYXQgaGFzIGV4cGxpY2l0IHNpemUuIEluIHN1Y2ggY2FzZXMgdGhlIGNhbGN1bGF0ZWQgc2l6ZSBpcyBuZXZlciBsb3dlclxuICAgICAqIGFuZCB0aGUgZnVuY3Rpb24gbWF5IGluc3RlYWQgcmVtb3ZlIHRoZSBwYXJlbnQgc2l6ZSB3aGlsZSBtZWFzdXJpbmcgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROb2RlU2l6ZVZpYVJhbmdlKHJhbmdlOiBSYW5nZSwgbm9kZTogSFRNTEVsZW1lbnQsIHNpemVIb2xkaW5nTm9kZT86IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGxldCBvdmVyZmxvdyA9IG51bGw7XG4gICAgICAgIGxldCBub2RlU3R5bGVzO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0ZpcmVmb3gpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID0gbm9kZS5zdHlsZS5vdmVyZmxvdztcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdGhhdCBoYWNrIC0gb3RoZXJ3aXNlIGNvbnRlbnQgd29uJ3QgYmUgbWVhc3VyZWQgY29ycmVjdGx5IGluIElFL0VkZ2VcbiAgICAgICAgICAgIG5vZGUuc3R5bGUub3ZlcmZsb3cgPSAndmlzaWJsZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2l6ZUhvbGRpbmdOb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IHNpemVIb2xkaW5nTm9kZS5zdHlsZTtcbiAgICAgICAgICAgIG5vZGVTdHlsZXMgPSBbc3R5bGUud2lkdGgsIHN0eWxlLm1pbldpZHRoLCBzdHlsZS5mbGV4QmFzaXNdO1xuICAgICAgICAgICAgc3R5bGUud2lkdGggPSAnJztcbiAgICAgICAgICAgIHN0eWxlLm1pbldpZHRoID0gJyc7XG4gICAgICAgICAgICBzdHlsZS5mbGV4QmFzaXMgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNGaXJlZm94KSB7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRoYXQgaGFjayAtIG90aGVyd2lzZSBjb250ZW50IHdvbid0IGJlIG1lYXN1cmVkIGNvcnJlY3RseSBpbiBJRS9FZGdlXG4gICAgICAgICAgICBub2RlLnN0eWxlLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2l6ZUhvbGRpbmdOb2RlKSB7XG4gICAgICAgICAgICBzaXplSG9sZGluZ05vZGUuc3R5bGUud2lkdGggPSBub2RlU3R5bGVzWzBdO1xuICAgICAgICAgICAgc2l6ZUhvbGRpbmdOb2RlLnN0eWxlLm1pbldpZHRoID0gbm9kZVN0eWxlc1sxXTtcbiAgICAgICAgICAgIHNpemVIb2xkaW5nTm9kZS5zdHlsZS5mbGV4QmFzaXMgPSBub2RlU3R5bGVzWzJdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGtleWJvYXJkIGV2ZW50IGlzIGFuIGFjdGl2YXRpb24ga2V5IChFbnRlci9TcGFjZSBiYXIpXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUGxhdGZvcm1VdGlsXG4gICAgICovXG4gICAgcHVibGljIGlzQWN0aXZhdGlvbktleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICByZXR1cm4gZXZlbnQua2V5ID09PSB0aGlzLktFWU1BUC5FTlRFUiB8fCBldmVudC5rZXkgPT09IHRoaXMuS0VZTUFQLlNQQUNFO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBrZXlib2FyZCBldmVudCBpcyBhIGNvbWJpbmF0aW9uIHRoYXQgY2xvc2VzIHRoZSBmaWx0ZXJpbmcgVUkgb2YgdGhlIGdyaWQuIChFc2NhcGUvQ3RybCtTaGlmdCtMKVxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBwYXJhbSBldmVudFxuICAgICAqIEBtZW1iZXJvZiBQbGF0Zm9ybVV0aWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNGaWx0ZXJpbmdLZXlDb21ibyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICByZXR1cm4gZXZlbnQua2V5ID09PSB0aGlzLktFWU1BUC5FU0NBUEUgfHwgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNMZWZ0Q2xpY2soZXZlbnQ6IFBvaW50ZXJFdmVudCB8IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmJ1dHRvbiA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc05hdmlnYXRpb25LZXkoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuS0VZTUFQLkhPTUUsIHRoaXMuS0VZTUFQLkVORCwgdGhpcy5LRVlNQVAuU1BBQ0UsXG4gICAgICAgICAgICB0aGlzLktFWU1BUC5BUlJPV19ET1dOLCB0aGlzLktFWU1BUC5BUlJPV19MRUZULCB0aGlzLktFWU1BUC5BUlJPV19SSUdIVCwgdGhpcy5LRVlNQVAuQVJST1dfVVBcbiAgICAgICAgXS5pbmNsdWRlcyhrZXkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBmbGF0dGVuID0gKGFycjogYW55W10pID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG5cbiAgICBhcnIuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVsKTtcbiAgICAgICAgaWYgKGVsLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoZWwuY2hpbGRyZW4pID8gZWwuY2hpbGRyZW4gOiBlbC5jaGlsZHJlbi50b0FycmF5KCk7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGZsYXR0ZW4oY2hpbGRyZW4pKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbGFibGVFdmVudEFyZ3Mge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNhbmNlbCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdG8gdGhlIG93bmVyIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBvd25lcj86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVFdmVudEFyZ3Mge1xuICAgIC8qKiBCcm93c2VyIGV2ZW50ICovXG4gICAgZXZlbnQ/OiBFdmVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzIGV4dGVuZHMgQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzIHsgfVxuXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlQ2FuY2VsYWJsZUV2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzIHsgfVxuXG5leHBvcnQgY29uc3QgSE9SSVpPTlRBTF9OQVZfS0VZUyA9IG5ldyBTZXQoWydhcnJvd2xlZnQnLCAnbGVmdCcsICdhcnJvd3JpZ2h0JywgJ3JpZ2h0JywgJ2hvbWUnLCAnZW5kJ10pO1xuXG5leHBvcnQgY29uc3QgTkFWSUdBVElPTl9LRVlTID0gbmV3IFNldChbXG4gICAgJ2Rvd24nLFxuICAgICd1cCcsXG4gICAgJ2xlZnQnLFxuICAgICdyaWdodCcsXG4gICAgJ2Fycm93ZG93bicsXG4gICAgJ2Fycm93dXAnLFxuICAgICdhcnJvd2xlZnQnLFxuICAgICdhcnJvd3JpZ2h0JyxcbiAgICAnaG9tZScsXG4gICAgJ2VuZCcsXG4gICAgJ3NwYWNlJyxcbiAgICAnc3BhY2ViYXInLFxuICAgICcgJ1xuXSk7XG5leHBvcnQgY29uc3QgQUNDT1JESU9OX05BVklHQVRJT05fS0VZUyA9IG5ldyBTZXQoJ3VwIGRvd24gYXJyb3d1cCBhcnJvd2Rvd24gaG9tZSBlbmQnLnNwbGl0KCcgJykpO1xuZXhwb3J0IGNvbnN0IFJPV19FWFBBTkRfS0VZUyA9IG5ldyBTZXQoJ3JpZ2h0IGRvd24gYXJyb3dyaWdodCBhcnJvd2Rvd24nLnNwbGl0KCcgJykpO1xuZXhwb3J0IGNvbnN0IFJPV19DT0xMQVBTRV9LRVlTID0gbmV3IFNldCgnbGVmdCB1cCBhcnJvd2xlZnQgYXJyb3d1cCcuc3BsaXQoJyAnKSk7XG5leHBvcnQgY29uc3QgUk9XX0FERF9LRVlTID0gbmV3IFNldChbJysnLCAnYWRkJywgJ+KJoCcsICfCsScsICc9J10pO1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9LRVlTID0gbmV3IFNldChbLi4uQXJyYXkuZnJvbShOQVZJR0FUSU9OX0tFWVMpLFxuLi4uQXJyYXkuZnJvbShST1dfQUREX0tFWVMpLCAnZW50ZXInLCAnZjInLCAnZXNjYXBlJywgJ2VzYycsICdwYWdlZG93bicsICdwYWdldXAnXSk7XG5leHBvcnQgY29uc3QgSEVBREVSX0tFWVMgPSBuZXcgU2V0KFsuLi5BcnJheS5mcm9tKE5BVklHQVRJT05fS0VZUyksICdlc2NhcGUnLCAnZXNjJywgJ2wnLFxuICAgIC8qKiBUaGlzIHN5bWJvbCBjb3JyZXNwb25kcyB0byB0aGUgQWx0ICsgTCBjb21iaW5hdGlvbiB1bmRlciBNQUMuICovXG4gICAgJ8KsJ10pO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICpcbiAqIENyZWF0ZXMgYSBuZXcgUmVzaXplT2JzZXJ2ZXIgb24gYHRhcmdldGAgYW5kIHJldHVybnMgaXQgYXMgYW4gT2JzZXJ2YWJsZS5cbiAqIFJ1biB0aGUgcmVzaXplT2JzZXJ2YWJsZSBvdXRzaWRlIGFuZ3VsYXIgem9uZSwgYmVjYXVzZSBpdCBwYXRjaGVzIHRoZSBNdXRhdGlvbk9ic2VydmVyIHdoaWNoIGNhdXNlcyBhbiBpbmZpbml0ZSBsb29wLlxuICogUmVsYXRlZCBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMzE3MTJcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2l6ZU9ic2VydmFibGUgPSAodGFyZ2V0OiBIVE1MRWxlbWVudCk6IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPiA9PiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyAoZ2V0UmVzaXplT2JzZXJ2ZXIoKSkoKGVudHJpZXM6IFJlc2l6ZU9ic2VydmVyRW50cnlbXSkgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KGVudHJpZXMpO1xuICAgIH0pO1xuICAgIGluc3RhbmNlLm9ic2VydmUodGFyZ2V0KTtcbiAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IGluc3RhbmNlLmRpc2Nvbm5lY3QoKTtcbiAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG59KTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqXG4gKiBDb21wYXJlcyB0d28gbWFwcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBhcmVNYXBzID0gKG1hcDE6IE1hcDxhbnksIGFueT4sIG1hcDI6IE1hcDxhbnksIGFueT4pOiBib29sZWFuID0+IHtcbiAgICBpZiAoIW1hcDIpIHtcbiAgICAgICAgcmV0dXJuICFtYXAxID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgICBpZiAobWFwMS5zaXplICE9PSBtYXAyLnNpemUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgbWF0Y2ggPSB0cnVlO1xuICAgIGNvbnN0IGtleXMgPSBBcnJheS5mcm9tKG1hcDIua2V5cygpKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGlmIChtYXAxLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IG1hcDEuZ2V0KGtleSkgPT09IG1hcDIuZ2V0KGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRjaDtcbn07XG5cbi8qKlxuICpcbiAqIEdpdmVuIGEgcHJvcGVydHkgYWNjZXNzIHBhdGggaW4gdGhlIGZvcm1hdCBgeC55LnpgIHJlc29sdmVzIGFuZCByZXR1cm5zXG4gKiB0aGUgdmFsdWUgb2YgdGhlIGB6YCBwcm9wZXJ0eSBpbiB0aGUgcGFzc2VkIG9iamVjdC5cbiAqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVOZXN0ZWRQYXRoID0gKG9iajogYW55LCBwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGg/LnNwbGl0KCcuJykgPz8gW107XG4gICAgbGV0IGN1cnJlbnQgPSBvYmpbcGFydHMuc2hpZnQoKV07XG5cbiAgICBwYXJ0cy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcHJvcF07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjdXJyZW50O1xufTtcblxuLyoqXG4gKlxuICogR2l2ZW4gYSBwcm9wZXJ0eSBhY2Nlc3MgcGF0aCBpbiB0aGUgZm9ybWF0IGB4LnkuemAgYW5kIGEgdmFsdWVcbiAqIHRoaXMgZnVuY3Rpb25zIGJ1aWxkcyBhbmQgcmV0dXJucyBhbiBvYmplY3QgZm9sbG93aW5nIHRoZSBhY2Nlc3MgcGF0aC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc29sZS5sb2coJ3gueS56LicsIDQyKTtcbiAqID4+IHsgeDogeyB5OiB7IHo6IDQyIH0gfSB9XG4gKiBgYGBcbiAqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHJldmVyc2VNYXBwZXIgPSAocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgY29uc3QgcGFydHMgPSBwYXRoPy5zcGxpdCgnLicpID8/IFtdO1xuXG4gICAgbGV0IF9wcm9wID0gcGFydHMuc2hpZnQoKTtcbiAgICBsZXQgbWFwcGluZzogYW55O1xuXG4gICAgLy8gSW5pdGlhbCBiaW5kaW5nIGZvciBmaXJzdCBsZXZlbCBiaW5kaW5nc1xuICAgIG9ialtfcHJvcF0gPSB2YWx1ZTtcbiAgICBtYXBwaW5nID0gb2JqO1xuXG4gICAgcGFydHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgLy8gU3RhcnQgYnVpbGRpbmcgdGhlIGhpZXJhcmNoeVxuICAgICAgICBtYXBwaW5nW19wcm9wXSA9IHt9O1xuICAgICAgICAvLyBHbyBkb3duIGEgbGV2ZWxcbiAgICAgICAgbWFwcGluZyA9IG1hcHBpbmdbX3Byb3BdO1xuICAgICAgICAvLyBCaW5kIHRoZSB2YWx1ZSBhbmQgbW92ZSB0aGUga2V5XG4gICAgICAgIG1hcHBpbmdbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgX3Byb3AgPSBwcm9wO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydCBjb25zdCB5aWVsZGluZ0xvb3AgPSAoY291bnQ6IG51bWJlciwgY2h1bmtTaXplOiBudW1iZXIsIGNhbGxiYWNrOiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZCwgZG9uZTogKCkgPT4gdm9pZCkgPT4ge1xuICAgIGxldCBpID0gMDtcbiAgICBjb25zdCBjaHVuayA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oaSArIGNodW5rU2l6ZSwgY291bnQpO1xuICAgICAgICBmb3IgKDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA8IGNvdW50KSB7XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoY2h1bmspO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjaHVuaygpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQ29uc3RydWN0b3IgPSAocmVmOiBhbnkpID0+IHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicgJiYgQm9vbGVhbihyZWYucHJvdG90eXBlKSAmJiBCb29sZWFuKHJlZi5wcm90b3R5cGUuY29uc3RydWN0b3IpO1xuXG5leHBvcnQgY29uc3QgcmV2ZXJzZUFuaW1hdGlvblJlc29sdmVyID0gKGFuaW1hdGlvbjogQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEpOiBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YSA9PlxuICAgIG9wcG9zaXRlQW5pbWF0aW9uLmdldChhbmltYXRpb24pID8/IGFuaW1hdGlvbjtcblxuZXhwb3J0IGNvbnN0IGlzSG9yaXpvbnRhbEFuaW1hdGlvbiA9IChhbmltYXRpb246IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhKTogYm9vbGVhbiA9PiBob3Jpem9udGFsQW5pbWF0aW9ucy5pbmNsdWRlcyhhbmltYXRpb24pO1xuXG5leHBvcnQgY29uc3QgaXNWZXJ0aWNhbEFuaW1hdGlvbiA9IChhbmltYXRpb246IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhKTogYm9vbGVhbiA9PiB2ZXJ0aWNhbEFuaW1hdGlvbnMuaW5jbHVkZXMoYW5pbWF0aW9uKTtcblxuY29uc3Qgb3Bwb3NpdGVBbmltYXRpb246IE1hcDxBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YSwgQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGE+ID0gbmV3IE1hcChbXG4gICAgW2ZhZGVJbiwgZmFkZUluXSxcbiAgICBbZmFkZU91dCwgZmFkZU91dF0sXG4gICAgW2ZsaXBUb3AsIGZsaXBCb3R0b21dLFxuICAgIFtmbGlwQm90dG9tLCBmbGlwVG9wXSxcbiAgICBbZmxpcFJpZ2h0LCBmbGlwTGVmdF0sXG4gICAgW2ZsaXBMZWZ0LCBmbGlwUmlnaHRdLFxuICAgIFtmbGlwSG9yRndkLCBmbGlwSG9yQmNrXSxcbiAgICBbZmxpcEhvckJjaywgZmxpcEhvckZ3ZF0sXG4gICAgW2ZsaXBWZXJGd2QsIGZsaXBWZXJCY2tdLFxuICAgIFtmbGlwVmVyQmNrLCBmbGlwVmVyRndkXSxcbiAgICBbZ3Jvd1ZlckluLCBncm93VmVySW5dLFxuICAgIFtncm93VmVyT3V0LCBncm93VmVyT3V0XSxcbiAgICBbaGVhcnRiZWF0LCBoZWFydGJlYXRdLFxuICAgIFtwdWxzYXRlRndkLCBwdWxzYXRlQmNrXSxcbiAgICBbcHVsc2F0ZUJjaywgcHVsc2F0ZUZ3ZF0sXG4gICAgW2JsaW5rLCBibGlua10sXG4gICAgW3NoYWtlSG9yLCBzaGFrZUhvcl0sXG4gICAgW3NoYWtlVmVyLCBzaGFrZVZlcl0sXG4gICAgW3NoYWtlVG9wLCBzaGFrZVRvcF0sXG4gICAgW3NoYWtlQm90dG9tLCBzaGFrZUJvdHRvbV0sXG4gICAgW3NoYWtlUmlnaHQsIHNoYWtlUmlnaHRdLFxuICAgIFtzaGFrZUxlZnQsIHNoYWtlTGVmdF0sXG4gICAgW3NoYWtlQ2VudGVyLCBzaGFrZUNlbnRlcl0sXG4gICAgW3NoYWtlVHIsIHNoYWtlVHJdLFxuICAgIFtzaGFrZUJyLCBzaGFrZUJyXSxcbiAgICBbc2hha2VCbCwgc2hha2VCbF0sXG4gICAgW3NoYWtlVGwsIHNoYWtlVGxdLFxuICAgIFtyb3RhdGVJbkNlbnRlciwgcm90YXRlSW5DZW50ZXJdLFxuICAgIFtyb3RhdGVPdXRDZW50ZXIsIHJvdGF0ZU91dENlbnRlcl0sXG4gICAgW3JvdGF0ZUluVG9wLCByb3RhdGVJbkJvdHRvbV0sXG4gICAgW3JvdGF0ZU91dFRvcCwgcm90YXRlT3V0Qm90dG9tXSxcbiAgICBbcm90YXRlSW5SaWdodCwgcm90YXRlSW5MZWZ0XSxcbiAgICBbcm90YXRlT3V0UmlnaHQsIHJvdGF0ZU91dExlZnRdLFxuICAgIFtyb3RhdGVJbkxlZnQsIHJvdGF0ZUluUmlnaHRdLFxuICAgIFtyb3RhdGVPdXRMZWZ0LCByb3RhdGVPdXRSaWdodF0sXG4gICAgW3JvdGF0ZUluQm90dG9tLCByb3RhdGVJblRvcF0sXG4gICAgW3JvdGF0ZU91dEJvdHRvbSwgcm90YXRlT3V0VG9wXSxcbiAgICBbcm90YXRlSW5Uciwgcm90YXRlSW5CbF0sXG4gICAgW3JvdGF0ZU91dFRyLCByb3RhdGVPdXRCbF0sXG4gICAgW3JvdGF0ZUluQnIsIHJvdGF0ZUluVGxdLFxuICAgIFtyb3RhdGVPdXRCciwgcm90YXRlT3V0VGxdLFxuICAgIFtyb3RhdGVJbkJsLCByb3RhdGVJblRyXSxcbiAgICBbcm90YXRlT3V0QmwsIHJvdGF0ZU91dFRyXSxcbiAgICBbcm90YXRlSW5UbCwgcm90YXRlSW5Ccl0sXG4gICAgW3JvdGF0ZU91dFRsLCByb3RhdGVPdXRCcl0sXG4gICAgW3JvdGF0ZUluRGlhZ29uYWwxLCByb3RhdGVJbkRpYWdvbmFsMV0sXG4gICAgW3JvdGF0ZU91dERpYWdvbmFsMSwgcm90YXRlT3V0RGlhZ29uYWwxXSxcbiAgICBbcm90YXRlSW5EaWFnb25hbDIsIHJvdGF0ZUluRGlhZ29uYWwyXSxcbiAgICBbcm90YXRlT3V0RGlhZ29uYWwyLCByb3RhdGVPdXREaWFnb25hbDJdLFxuICAgIFtyb3RhdGVJbkhvciwgcm90YXRlSW5Ib3JdLFxuICAgIFtyb3RhdGVPdXRIb3IsIHJvdGF0ZU91dEhvcl0sXG4gICAgW3JvdGF0ZUluVmVyLCByb3RhdGVJblZlcl0sXG4gICAgW3JvdGF0ZU91dFZlciwgcm90YXRlT3V0VmVyXSxcbiAgICBbc2NhbGVJblRvcCwgc2NhbGVJbkJvdHRvbV0sXG4gICAgW3NjYWxlT3V0VG9wLCBzY2FsZU91dEJvdHRvbV0sXG4gICAgW3NjYWxlSW5SaWdodCwgc2NhbGVJbkxlZnRdLFxuICAgIFtzY2FsZU91dFJpZ2h0LCBzY2FsZU91dExlZnRdLFxuICAgIFtzY2FsZUluQm90dG9tLCBzY2FsZUluVG9wXSxcbiAgICBbc2NhbGVPdXRCb3R0b20sIHNjYWxlT3V0VG9wXSxcbiAgICBbc2NhbGVJbkxlZnQsIHNjYWxlSW5SaWdodF0sXG4gICAgW3NjYWxlT3V0TGVmdCwgc2NhbGVPdXRSaWdodF0sXG4gICAgW3NjYWxlSW5DZW50ZXIsIHNjYWxlSW5DZW50ZXJdLFxuICAgIFtzY2FsZU91dENlbnRlciwgc2NhbGVPdXRDZW50ZXJdLFxuICAgIFtzY2FsZUluVHIsIHNjYWxlSW5CbF0sXG4gICAgW3NjYWxlT3V0VHIsIHNjYWxlT3V0QmxdLFxuICAgIFtzY2FsZUluQnIsIHNjYWxlSW5UbF0sXG4gICAgW3NjYWxlT3V0QnIsIHNjYWxlT3V0VGxdLFxuICAgIFtzY2FsZUluQmwsIHNjYWxlSW5Ucl0sXG4gICAgW3NjYWxlT3V0QmwsIHNjYWxlT3V0VHJdLFxuICAgIFtzY2FsZUluVGwsIHNjYWxlSW5Ccl0sXG4gICAgW3NjYWxlT3V0VGwsIHNjYWxlT3V0QnJdLFxuICAgIFtzY2FsZUluVmVyVG9wLCBzY2FsZUluVmVyQm90dG9tXSxcbiAgICBbc2NhbGVPdXRWZXJUb3AsIHNjYWxlT3V0VmVyQm90dG9tXSxcbiAgICBbc2NhbGVJblZlckJvdHRvbSwgc2NhbGVJblZlclRvcF0sXG4gICAgW3NjYWxlT3V0VmVyQm90dG9tLCBzY2FsZU91dFZlclRvcF0sXG4gICAgW3NjYWxlSW5WZXJDZW50ZXIsIHNjYWxlSW5WZXJDZW50ZXJdLFxuICAgIFtzY2FsZU91dFZlckNlbnRlciwgc2NhbGVPdXRWZXJDZW50ZXJdLFxuICAgIFtzY2FsZUluSG9yQ2VudGVyLCBzY2FsZUluSG9yQ2VudGVyXSxcbiAgICBbc2NhbGVPdXRIb3JDZW50ZXIsIHNjYWxlT3V0SG9yQ2VudGVyXSxcbiAgICBbc2NhbGVJbkhvckxlZnQsIHNjYWxlSW5Ib3JSaWdodF0sXG4gICAgW3NjYWxlT3V0SG9yTGVmdCwgc2NhbGVPdXRIb3JSaWdodF0sXG4gICAgW3NjYWxlSW5Ib3JSaWdodCwgc2NhbGVJbkhvckxlZnRdLFxuICAgIFtzY2FsZU91dEhvclJpZ2h0LCBzY2FsZU91dEhvckxlZnRdLFxuICAgIFtzbGlkZUluVG9wLCBzbGlkZUluQm90dG9tXSxcbiAgICBbc2xpZGVPdXRUb3AsIHNsaWRlT3V0Qm90dG9tXSxcbiAgICBbc2xpZGVJblJpZ2h0LCBzbGlkZUluTGVmdF0sXG4gICAgW3NsaWRlT3V0UmlnaHQsIHNsaWRlT3V0TGVmdF0sXG4gICAgW3NsaWRlSW5Cb3R0b20sIHNsaWRlSW5Ub3BdLFxuICAgIFtzbGlkZU91dEJvdHRvbSwgc2xpZGVPdXRUb3BdLFxuICAgIFtzbGlkZUluTGVmdCwgc2xpZGVJblJpZ2h0XSxcbiAgICBbc2xpZGVPdXRMZWZ0LCBzbGlkZU91dFJpZ2h0XSxcbiAgICBbc2xpZGVJblRyLCBzbGlkZUluQmxdLFxuICAgIFtzbGlkZU91dFRyLCBzbGlkZU91dEJsXSxcbiAgICBbc2xpZGVJbkJyLCBzbGlkZUluVGxdLFxuICAgIFtzbGlkZU91dEJyLCBzbGlkZU91dFRsXSxcbiAgICBbc2xpZGVJbkJsLCBzbGlkZUluVHJdLFxuICAgIFtzbGlkZU91dEJsLCBzbGlkZU91dFRyXSxcbiAgICBbc2xpZGVJblRsLCBzbGlkZUluQnJdLFxuICAgIFtzbGlkZU91dFRsLCBzbGlkZU91dEJyXSxcbiAgICBbc3dpbmdJblRvcEZ3ZCwgc3dpbmdJbkJvdHRvbUZ3ZF0sXG4gICAgW3N3aW5nT3V0VG9wRndkLCBzd2luZ091dEJvdHRvbUZ3ZF0sXG4gICAgW3N3aW5nSW5SaWdodEZ3ZCwgc3dpbmdJbkxlZnRGd2RdLFxuICAgIFtzd2luZ091dFJpZ2h0RndkLCBzd2luZ091dExlZnR0RndkXSxcbiAgICBbc3dpbmdJbkxlZnRGd2QsIHN3aW5nSW5SaWdodEZ3ZF0sXG4gICAgW3N3aW5nT3V0TGVmdHRGd2QsIHN3aW5nT3V0UmlnaHRGd2RdLFxuICAgIFtzd2luZ0luQm90dG9tRndkLCBzd2luZ0luVG9wRndkXSxcbiAgICBbc3dpbmdPdXRCb3R0b21Gd2QsIHN3aW5nT3V0VG9wRndkXSxcbiAgICBbc3dpbmdJblRvcEJjaywgc3dpbmdJbkJvdHRvbUJja10sXG4gICAgW3N3aW5nT3V0VG9wQmNrLCBzd2luZ091dEJvdHRvbUJja10sXG4gICAgW3N3aW5nSW5SaWdodEJjaywgc3dpbmdJbkxlZnRCY2tdLFxuICAgIFtzd2luZ091dFJpZ2h0QmNrLCBzd2luZ091dExlZnRCY2tdLFxuICAgIFtzd2luZ0luQm90dG9tQmNrLCBzd2luZ0luVG9wQmNrXSxcbiAgICBbc3dpbmdPdXRCb3R0b21CY2ssIHN3aW5nT3V0VG9wQmNrXSxcbiAgICBbc3dpbmdJbkxlZnRCY2ssIHN3aW5nSW5SaWdodEJja10sXG4gICAgW3N3aW5nT3V0TGVmdEJjaywgc3dpbmdPdXRSaWdodEJja10sXG5dKTtcblxuY29uc3QgaG9yaXpvbnRhbEFuaW1hdGlvbnM6IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhW10gPSBbXG4gICAgZmxpcFJpZ2h0LFxuICAgIGZsaXBMZWZ0LFxuICAgIGZsaXBWZXJGd2QsXG4gICAgZmxpcFZlckJjayxcbiAgICByb3RhdGVJblJpZ2h0LFxuICAgIHJvdGF0ZU91dFJpZ2h0LFxuICAgIHJvdGF0ZUluTGVmdCxcbiAgICByb3RhdGVPdXRMZWZ0LFxuICAgIHJvdGF0ZUluVHIsXG4gICAgcm90YXRlT3V0VHIsXG4gICAgcm90YXRlSW5CcixcbiAgICByb3RhdGVPdXRCcixcbiAgICByb3RhdGVJbkJsLFxuICAgIHJvdGF0ZU91dEJsLFxuICAgIHJvdGF0ZUluVGwsXG4gICAgcm90YXRlT3V0VGwsXG4gICAgc2NhbGVJblJpZ2h0LFxuICAgIHNjYWxlT3V0UmlnaHQsXG4gICAgc2NhbGVJbkxlZnQsXG4gICAgc2NhbGVPdXRMZWZ0LFxuICAgIHNjYWxlSW5UcixcbiAgICBzY2FsZU91dFRyLFxuICAgIHNjYWxlSW5CcixcbiAgICBzY2FsZU91dEJyLFxuICAgIHNjYWxlSW5CbCxcbiAgICBzY2FsZU91dEJsLFxuICAgIHNjYWxlSW5UbCxcbiAgICBzY2FsZU91dFRsLFxuICAgIHNjYWxlSW5Ib3JMZWZ0LFxuICAgIHNjYWxlT3V0SG9yTGVmdCxcbiAgICBzY2FsZUluSG9yUmlnaHQsXG4gICAgc2NhbGVPdXRIb3JSaWdodCxcbiAgICBzbGlkZUluUmlnaHQsXG4gICAgc2xpZGVPdXRSaWdodCxcbiAgICBzbGlkZUluTGVmdCxcbiAgICBzbGlkZU91dExlZnQsXG4gICAgc2xpZGVJblRyLFxuICAgIHNsaWRlT3V0VHIsXG4gICAgc2xpZGVJbkJyLFxuICAgIHNsaWRlT3V0QnIsXG4gICAgc2xpZGVJbkJsLFxuICAgIHNsaWRlT3V0QmwsXG4gICAgc2xpZGVJblRsLFxuICAgIHNsaWRlT3V0VGwsXG4gICAgc3dpbmdJblJpZ2h0RndkLFxuICAgIHN3aW5nT3V0UmlnaHRGd2QsXG4gICAgc3dpbmdJbkxlZnRGd2QsXG4gICAgc3dpbmdPdXRMZWZ0dEZ3ZCxcbiAgICBzd2luZ0luUmlnaHRCY2ssXG4gICAgc3dpbmdPdXRSaWdodEJjayxcbiAgICBzd2luZ0luTGVmdEJjayxcbiAgICBzd2luZ091dExlZnRCY2ssXG5dO1xuY29uc3QgdmVydGljYWxBbmltYXRpb25zOiBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YVtdID0gW1xuICAgIGZsaXBUb3AsXG4gICAgZmxpcEJvdHRvbSxcbiAgICBmbGlwSG9yRndkLFxuICAgIGZsaXBIb3JCY2ssXG4gICAgZ3Jvd1ZlckluLFxuICAgIGdyb3dWZXJPdXQsXG4gICAgcm90YXRlSW5Ub3AsXG4gICAgcm90YXRlT3V0VG9wLFxuICAgIHJvdGF0ZUluQm90dG9tLFxuICAgIHJvdGF0ZU91dEJvdHRvbSxcbiAgICByb3RhdGVJblRyLFxuICAgIHJvdGF0ZU91dFRyLFxuICAgIHJvdGF0ZUluQnIsXG4gICAgcm90YXRlT3V0QnIsXG4gICAgcm90YXRlSW5CbCxcbiAgICByb3RhdGVPdXRCbCxcbiAgICByb3RhdGVJblRsLFxuICAgIHJvdGF0ZU91dFRsLFxuICAgIHNjYWxlSW5Ub3AsXG4gICAgc2NhbGVPdXRUb3AsXG4gICAgc2NhbGVJbkJvdHRvbSxcbiAgICBzY2FsZU91dEJvdHRvbSxcbiAgICBzY2FsZUluVHIsXG4gICAgc2NhbGVPdXRUcixcbiAgICBzY2FsZUluQnIsXG4gICAgc2NhbGVPdXRCcixcbiAgICBzY2FsZUluQmwsXG4gICAgc2NhbGVPdXRCbCxcbiAgICBzY2FsZUluVGwsXG4gICAgc2NhbGVPdXRUbCxcbiAgICBzY2FsZUluVmVyVG9wLFxuICAgIHNjYWxlT3V0VmVyVG9wLFxuICAgIHNjYWxlSW5WZXJCb3R0b20sXG4gICAgc2NhbGVPdXRWZXJCb3R0b20sXG4gICAgc2xpZGVJblRvcCxcbiAgICBzbGlkZU91dFRvcCxcbiAgICBzbGlkZUluQm90dG9tLFxuICAgIHNsaWRlT3V0Qm90dG9tLFxuICAgIHNsaWRlSW5UcixcbiAgICBzbGlkZU91dFRyLFxuICAgIHNsaWRlSW5CcixcbiAgICBzbGlkZU91dEJyLFxuICAgIHNsaWRlSW5CbCxcbiAgICBzbGlkZU91dEJsLFxuICAgIHNsaWRlSW5UbCxcbiAgICBzbGlkZU91dFRsLFxuICAgIHN3aW5nSW5Ub3BGd2QsXG4gICAgc3dpbmdPdXRUb3BGd2QsXG4gICAgc3dpbmdJbkJvdHRvbUZ3ZCxcbiAgICBzd2luZ091dEJvdHRvbUZ3ZCxcbiAgICBzd2luZ0luVG9wQmNrLFxuICAgIHN3aW5nT3V0VG9wQmNrLFxuICAgIHN3aW5nSW5Cb3R0b21CY2ssXG4gICAgc3dpbmdPdXRCb3R0b21CY2ssXG5dO1xuXG5cbi8qKlxuICogU2ltaWxhciB0byBBbmd1bGFyJ3MgZm9ybWF0RGF0ZS4gSG93ZXZlciBpdCB3aWxsIG5vdCB0aHJvdyBvbiBgdW5kZWZpbmVkIHwgbnVsbCB8ICcnYCBpbnN0ZWFkXG4gKiBjb2FsZXNjaW5nIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdERhdGUgPSAodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IERhdGUsIGZvcm1hdDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZywgdGltZXpvbmU/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBfZm9ybWF0RGF0ZSh2YWx1ZSwgZm9ybWF0LCBsb2NhbGUsIHRpbWV6b25lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IG5ldyBDdXJyZW5jeVBpcGUodW5kZWZpbmVkKS50cmFuc2Zvcm07XG4iXX0=
@@ -366,4 +366,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
366
366
  }], hiddenChange: [{
367
367
  type: Output
368
368
  }] } });
369
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9jb2x1bW5zL2NvbHVtbi1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLEtBQUssRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUVULE1BQU0sRUFDTixZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQVUzQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsa0JBQWtCO0lBTi9EOztRQVNXLGFBQVEsR0FBRyxJQUFJLFNBQVMsRUFBc0IsQ0FBQztRQTBFdEQ7Ozs7Ozs7Ozs7O1dBV0c7UUFFSSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBNEp6Qjs7V0FFRztRQUVJLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztLQThHckQ7SUFuV0c7Ozs7Ozs7O09BUUc7SUFDSCxJQUNXLFdBQVcsQ0FBQyxLQUFjO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNuQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzthQUNqQztpQkFBTTtnQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFB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LFNBQVM7bUJBQUM7b0JBQ1AsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztvQkFDcEcsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7OEJBSVUsUUFBUTtzQkFEZCxlQUFlO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO2dCQWF0RCxXQUFXO3NCQURyQixLQUFLO2dCQTRCSyxRQUFRO3NCQURsQixLQUFLO2dCQXdCSyxTQUFTO3NCQURuQixLQUFLO2dCQTBCQyxVQUFVO3NCQURoQixLQUFLO2dCQVdLLE9BQU87c0JBRGpCLEtBQUs7Z0JBa0RDLDRCQUE0QjtzQkFEbEMsS0FBSztnQkFzQ0ssTUFBTTtzQkFEaEIsS0FBSztnQkFpRUMsWUFBWTtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIElucHV0LFxuICAgIGZvcndhcmRSZWYsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBDZWxsVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJZ3hDb2x1bW5Db21wb25lbnQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElneENvbHVtbkdyb3VwQ29tcG9uZW50KSB9XSxcbiAgICBzZWxlY3RvcjogJ2lneC1jb2x1bW4tZ3JvdXAnLFxuICAgIHRlbXBsYXRlOiBgYFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCBleHRlbmRzIElneENvbHVtbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hDb2x1bW5Db21wb25lbnQsIHsgcmVhZDogSWd4Q29sdW1uQ29tcG9uZW50IH0pXG4gICAgcHVibGljIGNoaWxkcmVuID0gbmV3IFF1ZXJ5TGlzdDxJZ3hDb2x1bW5Db21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgaWYgdGhlIGNvbHVtbiBncm91cCBpcyBjb2xsYXBzaWJsZS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY29sdW1uLWdyb3VwIFtjb2xsYXBzaWJsZV0gPSBcInRydWVcIj48L2lneC1jb2x1bW4tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY29sbGFwc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY29sbGFwc2libGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jb2xsYXBzaWJsZUNoYW5nZS5lbWl0KHRoaXMuX2NvbGxhcHNpYmxlKTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gJiYgIXRoaXMuaGlkZGVuKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEV4cGFuZENvbGxhcHNlU3RhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLmhpZGRlbiA9IGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGNvbGxhcHNpYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGFwc2libGUgJiYgdGhpcy5jaGVja0NvbGxhcHNpYmxlU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgd2hldGhlciB0aGUgZ3JvdXAgaXMgZXhwYW5kZWQgb3IgY29sbGFwc2VkIGluaXRpYWxseS5cbiAgICAgKiBBcHBsaWVkIG9ubHkgaWYgdGhlIGNvbGxhcHNpYmxlIHByb3BlcnR5IGlzIHNldCB0byBgdHJ1ZWBcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgY29uc3Qgc3RhdGUgPSBmYWxzZVxuICAgICAqICA8aWd4LWNvbHVtbi1ncm91cCBbKGV4cGFuZCldID0gXCJzdGF0ZVwiPjwvaWd4LWNvbHVtbi1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9leHBhbmRlZCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5fZXhwYW5kZWQpO1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaGlkZGVuICYmIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RXhwYW5kQ29sbGFwc2VTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb2x1bW4gZ3JvdXAgYHN1bW1hcmllc2AuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5Hcm91cFN1bW1hcmllcyA9IHRoaXMuY29sdW1uR3JvdXAuc3VtbWFyaWVzO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHN1bW1hcmllcygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3VtbWFyaWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4gZ3JvdXAgYHN1bW1hcmllc2AuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uR3JvdXAuc3VtbWFyaWVzID0gSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHN1bW1hcmllcyhjbGFzc1JlZjogYW55KSB7IH1cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY29sdW1uIGdyb3VwIGlzIGBzZWFyY2hhYmxlYC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzU2VhcmNoYWJsZSA9ICB0aGlzLmNvbHVtbkdyb3VwLnNlYXJjaGFibGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWNvbHVtbi1ncm91cCBbc2VhcmNoYWJsZV0gPSBcImZhbHNlXCI+PC9pZ3gtY29sdW1uLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VhcmNoYWJsZSA9IHRydWU7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sdW1uIGdyb3VwIGBmaWx0ZXJzYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwRmlsdGVycyA9IHRoaXMuY29sdW1uR3JvdXAuZmlsdGVycztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBmaWx0ZXJzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4gZ3JvdXAgYGZpbHRlcnNgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbHVtbkdyb3VwLmZpbHRlcnMgPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBmaWx0ZXJzKGNsYXNzUmVmOiBhbnkpIHsgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY29sdW1uIGdyb3VwIGlzIHNlbGVjdGFibGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwU2VsZWN0YWJsZSA9IHRoaXMuY29sdW1uR3JvdXAuc2VsZWN0YWJsZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4gJiYgdGhpcy5jaGlsZHJlbi5zb21lKGNoaWxkID0+IGNoaWxkLnNlbGVjdGFibGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge31cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGJvZHkgdGVtcGxhdGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBib2R5VGVtcGxhdGUgPSB0aGlzLmNvbHVtbkdyb3VwLmJvZHlUZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYm9keVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9keVRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNldCBib2R5VGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxuXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHlvdSB0byBkZWZpbmUgYSBjdXN0b20gdGVtcGxhdGUgZm9yIGV4cGFuZC9jb2xsYXBzZSBpbmRpY2F0b3JcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbGxhcHNpYmxlSW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmxpbmUgZWRpdG9yIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaW5saW5lRWRpdG9yVGVtcGxhdGUgPSB0aGlzLmNvbHVtbkdyb3VwLmlubGluZUVkaXRvclRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBpbmxpbmVFZGl0b3JUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZUVkaXRvclRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNldCBpbmxpbmVFZGl0b3JUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XG4gICAgLyoqXG4gICAgICogV2lsbCByZXR1cm4gZW1wdHkgYXJyYXkuIFVzZSB0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKVtpbmRleF0uY2VsbHMgdG8gZ2V0IHRoZSBjZWxscyBmb3IgYSBjb2x1bW4gdGhhdCBpcyBwYXJ0IG9mIHRoZSBjb2x1bW4gZ3JvdXAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5DZWxscyA9IHRoaXMuY29sdW1uR3JvdXAuY2VsbHM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNlbGxzKCk6IENlbGxUeXBlW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY29sdW1uIGdyb3VwIGlzIGhpZGRlbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzSGlkZGVuID0gdGhpcy5jb2x1bW5Hcm91cC5oaWRkZW47XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxDaGlsZHJlbi5ldmVyeShjID0+IGMuaGlkZGVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sdW1uIGdyb3VwIGhpZGRlbiBwcm9wZXJ0eS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4gW2hpZGRlbl0gPSBcInRydWVcIj48L2lneC1jb2x1bW4+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUd28td2F5IGRhdGEgYmluZGluZ1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbiBbKGhpZGRlbildID0gXCJtb2RlbC5jb2x1bW5zWzBdLmlzSGlkZGVuXCI+PC9pZ3gtY29sdW1uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBoaWRkZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGlkZGVuID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGlkZGVuQ2hhbmdlLmVtaXQodGhpcy5faGlkZGVuKTtcbiAgICAgICAgaWYgKHRoaXMuX2hpZGRlbiB8fCAhdGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLmhpZGRlbiA9IHRoaXMuX2hpZGRlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGMudmlzaWJsZVdoZW5Db2xsYXBzZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjLmhpZGRlbiA9IGZhbHNlOyByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGMuaGlkZGVuID0gdGhpcy5leHBhbmRlZCA/IGMudmlzaWJsZVdoZW5Db2xsYXBzZWQgOiAhYy52aXNpYmxlV2hlbkNvbGxhcHNlZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY29sdW1uIGdyb3VwIGlzIHNlbGVjdGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNTZWxlY3RlZCA9IHRoaXMuY29sdW1uR3JvdXAuc2VsZWN0ZWQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlQ2hpbGRyZW4gPSB0aGlzLmFsbENoaWxkcmVuLmZpbHRlcihjID0+ICFjLmNvbHVtbkdyb3VwICYmIGMuc2VsZWN0YWJsZSAmJiAhYy5oaWRkZW4pO1xuICAgICAgICByZXR1cm4gc2VsZWN0YWJsZUNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgc2VsZWN0YWJsZUNoaWxkcmVuLmV2ZXJ5KGMgPT4gYy5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0L2Rlc2VsZWN0IHRoZSBjb2x1bW4gZ3JvdXAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uR3JvdXAuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgICAgICAgYy5zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGhpZGRlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICAvKlxuICAgICAgICAgICAgQENvbnRlbnRDaGlsZHJlbiB3aXRoIGRlc2NlbmRhbnRzIHN0aWxsIHJldHVybnMgdGhlIGBwYXJlbnRgXG4gICAgICAgICAgICBjb21wb25lbnQgaW4gdGhlIHF1ZXJ5IGxpc3QuXG4gICAgICAgICovXG4gICAgICAgIGlmICh0aGlzLmhlYWRUZW1wbGF0ZSAmJiB0aGlzLmhlYWRUZW1wbGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkVGVtcGxhdGUudG9BcnJheSgpWzBdLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2libGVJbmRpY2F0b3JUZW1wbGF0ZSA9IHRoaXMuY29sbGFwc2VJbmRpY2F0b3JUZW1wbGF0ZS50ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjdXJyZW50bHkgb25seSBpdnkgZml4ZXMgdGhlIGlzc3VlLCB3ZSBoYXZlIHRvIHNsaWNlIG9ubHkgaWYgdGhlIGZpcnN0IGNoaWxkIGlzIGdyb3VwXG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmZpcnN0ID09PSB0aGlzKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnJlc2V0KHRoaXMuY2hpbGRyZW4udG9BcnJheSgpLnNsaWNlKDEpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEV4cGFuZENvbGxhcHNlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNoaWxkcmVuIGNvbHVtbnMgY29sbGVjdGlvbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbnMgPSAgdGhpcy5jb2x1bW5Hcm91cC5hbGxDaGlsZHJlbjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYWxsQ2hpbGRyZW4oKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gZmxhdHRlbih0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGNvbHVtbiBpcyBhIGBDb2x1bW5Hcm91cGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0NvbHVtbkdyb3VwID0gIHRoaXMuY29sdW1uR3JvdXAuY29sdW1uR3JvdXBcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uR3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBjb2x1bW4gaXMgYSBgQ29sdW1uTGF5b3V0YCBmb3IgbXVsdGktcm93IGxheW91dC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwID0gIHRoaXMuY29sdW1uLmNvbHVtbkdyb3VwO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uTGF5b3V0KCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gZ3JvdXAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5Hcm91cFdpZHRoID0gdGhpcy5jb2x1bW5Hcm91cC53aWR0aDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgd2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gYCR7dGhpcy5jaGlsZHJlbi5yZWR1Y2UoKGFjYywgdmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjICsgcGFyc2VJbnQodmFsLmNhbGNXaWR0aCwgMTApO1xuICAgICAgICB9LCAwKX1gO1xuICAgICAgICByZXR1cm4gd2lkdGggKyAncHgnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgd2lkdGgodmFsKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFwcGx5U2VsZWN0YWJsZUNsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlTZWxlY3RhYmxlQ2xhc3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgYXBwbHlTZWxlY3RhYmxlQ2xhc3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fYXBwbHlTZWxlY3RhYmxlQ2xhc3MgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgICAgICBjLmFwcGx5U2VsZWN0YWJsZUNsYXNzID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgdmlzaWJsZSBjb2x1bW5zLCBiYXNlZCBvbiBpbmRleGVzIG9mIGZpcnN0IGFuZCBsYXN0IHZpc2libGUgY29sdW1ucy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2FsY0NoaWxkcmVuKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHZpc2libGVDaGlsZHJlbiA9IHRoaXMuYWxsQ2hpbGRyZW4uZmlsdGVyKGMgPT4gYy52aXNpYmxlSW5kZXggPiAtMSk7XG4gICAgICAgIGNvbnN0IGZpID0gdmlzaWJsZUNoaWxkcmVuWzBdLnZpc2libGVJbmRleDtcbiAgICAgICAgY29uc3QgbGkgPSB2aXNpYmxlQ2hpbGRyZW5bdmlzaWJsZUNoaWxkcmVuLmxlbmd0aCAtIDFdLnZpc2libGVJbmRleDtcbiAgICAgICAgcmV0dXJuIGxpIC0gZmkgKyAxO1xuICAgIH1cbn1cbiJdfQ==
369
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9jb2x1bW5zL2NvbHVtbi1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLEtBQUssRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUVULE1BQU0sRUFDTixZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQVUzQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsa0JBQWtCO0lBTi9EOztRQVNXLGFBQVEsR0FBRyxJQUFJLFNBQVMsRUFBc0IsQ0FBQztRQTBFdEQ7Ozs7Ozs7Ozs7O1dBV0c7UUFFSSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBNEp6Qjs7V0FFRztRQUVJLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztLQThHckQ7SUFuV0c7Ozs7Ozs7O09BUUc7SUFDSCxJQUNXLFdBQVcsQ0FBQyxLQUFjO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNuQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzthQUNqQztpQkFBTTtnQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFB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LFNBQVM7bUJBQUM7b0JBQ1AsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztvQkFDcEcsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7OEJBSVUsUUFBUTtzQkFEZCxlQUFlO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO2dCQWF0RCxXQUFXO3NCQURyQixLQUFLO2dCQTRCSyxRQUFRO3NCQURsQixLQUFLO2dCQXdCSyxTQUFTO3NCQURuQixLQUFLO2dCQTBCQyxVQUFVO3NCQURoQixLQUFLO2dCQVdLLE9BQU87c0JBRGpCLEtBQUs7Z0JBa0RDLDRCQUE0QjtzQkFEbEMsS0FBSztnQkFzQ0ssTUFBTTtzQkFEaEIsS0FBSztnQkFpRUMsWUFBWTtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIElucHV0LFxuICAgIGZvcndhcmRSZWYsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBDZWxsVHlwZSwgSWd4Q29sdW1uVGVtcGxhdGVDb250ZXh0IH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IElneENvbHVtbkNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSWd4Q29sdW1uR3JvdXBDb21wb25lbnQpIH1dLFxuICAgIHNlbGVjdG9yOiAnaWd4LWNvbHVtbi1ncm91cCcsXG4gICAgdGVtcGxhdGU6IGBgXG59KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbkdyb3VwQ29tcG9uZW50IGV4dGVuZHMgSWd4Q29sdW1uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKElneENvbHVtbkNvbXBvbmVudCwgeyByZWFkOiBJZ3hDb2x1bW5Db21wb25lbnQgfSlcbiAgICBwdWJsaWMgY2hpbGRyZW4gPSBuZXcgUXVlcnlMaXN0PElneENvbHVtbkNvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIFNldCBpZiB0aGUgY29sdW1uIGdyb3VwIGlzIGNvbGxhcHNpYmxlLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1jb2x1bW4tZ3JvdXAgW2NvbGxhcHNpYmxlXSA9IFwidHJ1ZVwiPjwvaWd4LWNvbHVtbi1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBjb2xsYXBzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jb2xsYXBzaWJsZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbGxhcHNpYmxlQ2hhbmdlLmVtaXQodGhpcy5fY29sbGFwc2libGUpO1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbiAmJiAhdGhpcy5oaWRkZW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RXhwYW5kQ29sbGFwc2VTdGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQuaGlkZGVuID0gZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgY29sbGFwc2libGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsYXBzaWJsZSAmJiB0aGlzLmNoZWNrQ29sbGFwc2libGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB3aGV0aGVyIHRoZSBncm91cCBpcyBleHBhbmRlZCBvciBjb2xsYXBzZWQgaW5pdGlhbGx5LlxuICAgICAqIEFwcGxpZWQgb25seSBpZiB0aGUgY29sbGFwc2libGUgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYFxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgXG4gICAgICogYGBgaHRtbFxuICAgICAqICBjb25zdCBzdGF0ZSA9IGZhbHNlXG4gICAgICogIDxpZ3gtY29sdW1uLWdyb3VwIFsoZXhwYW5kKV0gPSBcInN0YXRlXCI+PC9pZ3gtY29sdW1uLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLl9leHBhbmRlZCk7XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5oaWRkZW4gJiYgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5zZXRFeHBhbmRDb2xsYXBzZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiBncm91cCBgc3VtbWFyaWVzYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwU3VtbWFyaWVzID0gdGhpcy5jb2x1bW5Hcm91cC5zdW1tYXJpZXM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc3VtbWFyaWVzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdW1tYXJpZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbHVtbiBncm91cCBgc3VtbWFyaWVzYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb2x1bW5Hcm91cC5zdW1tYXJpZXMgPSBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc3VtbWFyaWVzKGNsYXNzUmVmOiBhbnkpIHsgfVxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjb2x1bW4gZ3JvdXAgaXMgYHNlYXJjaGFibGVgLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNTZWFyY2hhYmxlID0gIHRoaXMuY29sdW1uR3JvdXAuc2VhcmNoYWJsZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY29sdW1uLWdyb3VwIFtzZWFyY2hhYmxlXSA9IFwiZmFsc2VcIj48L2lneC1jb2x1bW4tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb2x1bW4gZ3JvdXAgYGZpbHRlcnNgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uR3JvdXBGaWx0ZXJzID0gdGhpcy5jb2x1bW5Hcm91cC5maWx0ZXJzO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGZpbHRlcnMoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbHVtbiBncm91cCBgZmlsdGVyc2AuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uR3JvdXAuZmlsdGVycyA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZpbHRlcnMoY2xhc3NSZWY6IGFueSkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBjb2x1bW4gZ3JvdXAgaXMgc2VsZWN0YWJsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uR3JvdXBTZWxlY3RhYmxlID0gdGhpcy5jb2x1bW5Hcm91cC5zZWxlY3RhYmxlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbiAmJiB0aGlzLmNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQuc2VsZWN0YWJsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7fVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYm9keSB0ZW1wbGF0ZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGJvZHlUZW1wbGF0ZSA9IHRoaXMuY29sdW1uR3JvdXAuYm9keVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBib2R5VGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib2R5VGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGJvZHlUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgeW91IHRvIGRlZmluZSBhIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgZXhwYW5kL2NvbGxhcHNlIGluZGljYXRvclxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sbGFwc2libGVJbmRpY2F0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SWd4Q29sdW1uVGVtcGxhdGVDb250ZXh0PjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGlubGluZSBlZGl0b3IgdGVtcGxhdGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpbmxpbmVFZGl0b3JUZW1wbGF0ZSA9IHRoaXMuY29sdW1uR3JvdXAuaW5saW5lRWRpdG9yVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlubGluZUVkaXRvclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5saW5lRWRpdG9yVGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGlubGluZUVkaXRvclRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7IH1cbiAgICAvKipcbiAgICAgKiBXaWxsIHJldHVybiBlbXB0eSBhcnJheS4gVXNlIHRoaXMuY2hpbGRyZW4udG9BcnJheSgpW2luZGV4XS5jZWxscyB0byBnZXQgdGhlIGNlbGxzIGZvciBhIGNvbHVtbiB0aGF0IGlzIHBhcnQgb2YgdGhlIGNvbHVtbiBncm91cC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkNlbGxzID0gdGhpcy5jb2x1bW5Hcm91cC5jZWxscztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2VsbHMoKTogQ2VsbFR5cGVbXSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBjb2x1bW4gZ3JvdXAgaXMgaGlkZGVuLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNIaWRkZW4gPSB0aGlzLmNvbHVtbkdyb3VwLmhpZGRlbjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBoaWRkZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbENoaWxkcmVuLmV2ZXJ5KGMgPT4gYy5oaWRkZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4gZ3JvdXAgaGlkZGVuIHByb3BlcnR5LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbiBbaGlkZGVuXSA9IFwidHJ1ZVwiPjwvaWd4LWNvbHVtbj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFR3by13YXkgZGF0YSBiaW5kaW5nXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29sdW1uIFsoaGlkZGVuKV0gPSBcIm1vZGVsLmNvbHVtbnNbMF0uaXNIaWRkZW5cIj48L2lneC1jb2x1bW4+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGhpZGRlbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oaWRkZW4gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oaWRkZW5DaGFuZ2UuZW1pdCh0aGlzLl9oaWRkZW4pO1xuICAgICAgICBpZiAodGhpcy5faGlkZGVuIHx8ICF0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQuaGlkZGVuID0gdGhpcy5faGlkZGVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYy52aXNpYmxlV2hlbkNvbGxhcHNlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuaGlkZGVuID0gZmFsc2U7IHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYy5oaWRkZW4gPSB0aGlzLmV4cGFuZGVkID8gYy52aXNpYmxlV2hlbkNvbGxhcHNlZCA6ICFjLnZpc2libGVXaGVuQ29sbGFwc2VkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBjb2x1bW4gZ3JvdXAgaXMgc2VsZWN0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1NlbGVjdGVkID0gdGhpcy5jb2x1bW5Hcm91cC5zZWxlY3RlZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGFibGVDaGlsZHJlbiA9IHRoaXMuYWxsQ2hpbGRyZW4uZmlsdGVyKGMgPT4gIWMuY29sdW1uR3JvdXAgJiYgYy5zZWxlY3RhYmxlICYmICFjLmhpZGRlbik7XG4gICAgICAgIHJldHVybiBzZWxlY3RhYmxlQ2hpbGRyZW4ubGVuZ3RoID4gMCAmJiBzZWxlY3RhYmxlQ2hpbGRyZW4uZXZlcnkoYyA9PiBjLnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3QvZGVzZWxlY3QgdGhlIGNvbHVtbiBncm91cC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb2x1bW5Hcm91cC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgICAgICBjLnNlbGVjdGVkID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaGlkZGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBAQ29udGVudENoaWxkcmVuIHdpdGggZGVzY2VuZGFudHMgc3RpbGwgcmV0dXJucyB0aGUgYHBhcmVudGBcbiAgICAgICAgICAgIGNvbXBvbmVudCBpbiB0aGUgcXVlcnkgbGlzdC5cbiAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuaGVhZFRlbXBsYXRlICYmIHRoaXMuaGVhZFRlbXBsYXRlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5faGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRUZW1wbGF0ZS50b0FycmF5KClbMF0udGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VJbmRpY2F0b3JUZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jb2xsYXBzaWJsZUluZGljYXRvclRlbXBsYXRlID0gdGhpcy5jb2xsYXBzZUluZGljYXRvclRlbXBsYXRlLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGN1cnJlbnRseSBvbmx5IGl2eSBmaXhlcyB0aGUgaXNzdWUsIHdlIGhhdmUgdG8gc2xpY2Ugb25seSBpZiB0aGUgZmlyc3QgY2hpbGQgaXMgZ3JvdXBcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4uZmlyc3QgPT09IHRoaXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ucmVzZXQodGhpcy5jaGlsZHJlbi50b0FycmF5KCkuc2xpY2UoMSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RXhwYW5kQ29sbGFwc2VTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2hpbGRyZW4gY29sdW1ucyBjb2xsZWN0aW9uLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1ucyA9ICB0aGlzLmNvbHVtbkdyb3VwLmFsbENoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBhbGxDaGlsZHJlbigpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiBmbGF0dGVuKHRoaXMuY2hpbGRyZW4udG9BcnJheSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgY29sdW1uIGlzIGEgYENvbHVtbkdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzQ29sdW1uR3JvdXAgPSAgdGhpcy5jb2x1bW5Hcm91cC5jb2x1bW5Hcm91cFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjb2x1bW5Hcm91cCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGNvbHVtbiBpcyBhIGBDb2x1bW5MYXlvdXRgIGZvciBtdWx0aS1yb3cgbGF5b3V0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uR3JvdXAgPSAgdGhpcy5jb2x1bW4uY29sdW1uR3JvdXA7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjb2x1bW5MYXlvdXQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBncm91cC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwV2lkdGggPSB0aGlzLmNvbHVtbkdyb3VwLndpZHRoO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCB3aWR0aCgpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBgJHt0aGlzLmNoaWxkcmVuLnJlZHVjZSgoYWNjLCB2YWwpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2MgKyBwYXJzZUludCh2YWwuY2FsY1dpZHRoLCAxMCk7XG4gICAgICAgIH0sIDApfWA7XG4gICAgICAgIHJldHVybiB3aWR0aCArICdweCc7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB3aWR0aCh2YWwpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYXBwbHlTZWxlY3RhYmxlQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseVNlbGVjdGFibGVDbGFzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNldCBhcHBseVNlbGVjdGFibGVDbGFzcyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGFibGVDbGFzcyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xuICAgICAgICAgICAgICAgIGMuYXBwbHlTZWxlY3RhYmxlQ2xhc3MgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiB2aXNpYmxlIGNvbHVtbnMsIGJhc2VkIG9uIGluZGV4ZXMgb2YgZmlyc3QgYW5kIGxhc3QgdmlzaWJsZSBjb2x1bW5zLlxuICAgICAqL1xuICAgIHB1YmxpYyBjYWxjQ2hpbGRyZW4oKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNoaWxkcmVuID0gdGhpcy5hbGxDaGlsZHJlbi5maWx0ZXIoYyA9PiBjLnZpc2libGVJbmRleCA+IC0xKTtcbiAgICAgICAgY29uc3QgZmkgPSB2aXNpYmxlQ2hpbGRyZW5bMF0udmlzaWJsZUluZGV4O1xuICAgICAgICBjb25zdCBsaSA9IHZpc2libGVDaGlsZHJlblt2aXNpYmxlQ2hpbGRyZW4ubGVuZ3RoIC0gMV0udmlzaWJsZUluZGV4O1xuICAgICAgICByZXR1cm4gbGkgLSBmaSArIDE7XG4gICAgfVxufVxuIl19