@mnaoumov/typescript-lib 1.7.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +21 -0
  2. package/dist/lib/cjs/async-events.cjs +1 -1
  3. package/dist/lib/cjs/async-events.d.cts +12 -12
  4. package/dist/lib/cjs/async.cjs +4 -5
  5. package/dist/lib/cjs/async.d.cts +2 -2
  6. package/dist/lib/cjs/debug-controller.cjs +1 -1
  7. package/dist/lib/cjs/debug-controller.d.cts +4 -4
  8. package/dist/lib/cjs/debug-switches.cjs +1 -1
  9. package/dist/lib/cjs/debug-switches.d.cts +2 -2
  10. package/dist/lib/cjs/debug.cjs +3 -11
  11. package/dist/lib/cjs/debug.d.cts +0 -8
  12. package/dist/lib/cjs/desktop-zip-extractor.cjs +1 -1
  13. package/dist/lib/cjs/desktop-zip-extractor.d.cts +2 -2
  14. package/dist/lib/cjs/disposable.cjs +1 -1
  15. package/dist/lib/cjs/disposable.d.cts +2 -2
  16. package/dist/lib/cjs/error.cjs +23 -5
  17. package/dist/lib/cjs/html-element.cjs +1 -1
  18. package/dist/lib/cjs/html-element.d.cts +3 -3
  19. package/dist/lib/cjs/object-utils.cjs +5 -5
  20. package/dist/lib/cjs/object-utils.d.cts +6 -6
  21. package/dist/lib/cjs/string.cjs +1 -1
  22. package/dist/lib/cjs/string.d.cts +6 -6
  23. package/dist/lib/cjs/transformers/transformer.cjs +1 -1
  24. package/dist/lib/cjs/type.cjs +1 -1
  25. package/dist/lib/cjs/type.d.cts +3 -3
  26. package/dist/lib/cjs/value-provider.cjs +1 -1
  27. package/dist/lib/cjs/value-provider.d.cts +1 -1
  28. package/dist/lib/esm/async-events.d.mts +12 -12
  29. package/dist/lib/esm/async-events.mjs +1 -1
  30. package/dist/lib/esm/async.d.mts +2 -2
  31. package/dist/lib/esm/async.mjs +5 -9
  32. package/dist/lib/esm/debug-controller.d.mts +4 -4
  33. package/dist/lib/esm/debug-switches.d.mts +2 -2
  34. package/dist/lib/esm/debug-switches.mjs +1 -1
  35. package/dist/lib/esm/debug.d.mts +0 -8
  36. package/dist/lib/esm/debug.mjs +2 -9
  37. package/dist/lib/esm/desktop-zip-extractor.d.mts +2 -2
  38. package/dist/lib/esm/desktop-zip-extractor.mjs +1 -1
  39. package/dist/lib/esm/disposable.d.mts +2 -2
  40. package/dist/lib/esm/disposable.mjs +1 -1
  41. package/dist/lib/esm/error.mjs +23 -5
  42. package/dist/lib/esm/html-element.d.mts +3 -3
  43. package/dist/lib/esm/html-element.mjs +1 -1
  44. package/dist/lib/esm/object-utils.d.mts +6 -6
  45. package/dist/lib/esm/object-utils.mjs +5 -5
  46. package/dist/lib/esm/string.d.mts +6 -6
  47. package/dist/lib/esm/string.mjs +1 -1
  48. package/dist/lib/esm/transformers/transformer.mjs +1 -1
  49. package/dist/lib/esm/type.d.mts +3 -3
  50. package/dist/lib/esm/type.mjs +1 -1
  51. package/dist/lib/esm/value-provider.d.mts +1 -1
  52. package/dist/lib/esm/value-provider.mjs +1 -1
  53. package/package.json +18 -14
@@ -93,4 +93,4 @@ export {
93
93
  registerDebugSwitch,
94
94
  setDebugSwitch
95
95
  };
96
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlYnVnLXN3aXRjaGVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZWdpc3RyeSBvZiBkZWJ1ZyBzd2l0Y2hlczogbmFtZWQsIGFwcC13aWRlIGJvb2xlYW5zIHRoYXQgY2hhbmdlIGJlaGF2aW9yIHdoaWxlIGRlYnVnZ2luZy5cbiAqXG4gKiBBIGRlYnVnIG5hbWVzcGFjZSAoc2VlIGBkZWJ1Zy50c2ApIGNvbnRyb2xzIGxvZ2dpbmcgb25seS4gQmVoYXZpb3IgdGhhdCBzaG91bGQgZGlmZmVyIHdoaWxlIGRlYnVnZ2luZywgc3VjaCBhc1xuICogbm90IHRlcm1pbmF0aW5nIGFuIG9wZXJhdGlvbiBwYXVzZWQgb24gYSBicmVha3BvaW50LCBpcyBhIGRlYnVnIHN3aXRjaCBpbnN0ZWFkLCBzbyB0dXJuaW5nIGxvZ2dpbmcgb24gbmV2ZXJcbiAqIGNoYW5nZXMgd2hhdCB0aGUgY29kZSBkb2VzLlxuICpcbiAqIFRoZSBkZWZpbml0aW9ucywgdGhlIHZhbHVlcyBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnMgYWxsIGxpdmUgaW4gdGhlIHNoYXJlZCBzdGF0ZSBiYWcgKGB0eXBlc2NyaXB0LWxpYi1zdGF0ZS50c2ApXG4gKiBhcyBwbGFpbiBkYXRhLCBzbyBldmVyeSBjb3B5IG9mIHRoaXMgbGlicmFyeSBsb2FkZWQgaW4gb25lIHJlYWxtLCBzdWNoIGFzIHRoZSBjb3B5IGVhY2ggT2JzaWRpYW4gcGx1Z2luIGJ1bmRsZXMsXG4gKiBzZWVzIG9uZSB2YWx1ZSBwZXIgc3dpdGNoLiBBIHRvb2wgc3VjaCBhcyBhIGRlYnVnLXNldHRpbmdzIFVJIGxpc3RzIGV2ZXJ5IHJlZ2lzdGVyZWQgc3dpdGNoIHdpdGhcbiAqIHtAbGluayBnZXREZWJ1Z1N3aXRjaGVzfSBhbmQgbmVlZHMgbm8gY2hhbmdlIHdoZW4gYSBsaWJyYXJ5IG9yIHBsdWdpbiBhZGRzIG9uZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJy4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlV3JhcHBlciB9IGZyb20gJy4vdmFsdWUtd3JhcHBlci50cyc7XG5cbmltcG9ydCB7IENhbGxiYWNrRGlzcG9zYWJsZSB9IGZyb20gJy4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgeyBnZXRUeXBlc2NyaXB0TGliU3RhdGUgfSBmcm9tICcuL3R5cGVzY3JpcHQtbGliLXN0YXRlLnRzJztcblxuLyoqXG4gKiBBIGhhbmRsZSB0byBhIHJlZ2lzdGVyZWQgZGVidWcgc3dpdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYnVnU3dpdGNoIGV4dGVuZHMgRGVidWdTd2l0Y2hEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3dpdGNoIGlzIG9uLlxuICAgKi9cbiAgaXNFbmFibGVkOiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSwgbm90aWZ5aW5nIHRoZSB7QGxpbmsgb25EZWJ1Z1N3aXRjaENoYW5nZWR9IGxpc3RlbmVycyBpZiBpdCBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0gaXNFbmFibGVkIC0gVGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIHNldEVuYWJsZWQ6IChpc0VuYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBjaGFuZ2Ugb2YgYSBkZWJ1ZyBzd2l0Y2gncyB2YWx1ZSwgcGFzc2VkIHRvIGFuIHtAbGluayBvbkRlYnVnU3dpdGNoQ2hhbmdlZH0gbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVidWdTd2l0Y2hDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBzd2l0Y2ggdGhhdCBjaGFuZ2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgbGlzdGVuZXIgb2Yge0BsaW5rIG9uRGVidWdTd2l0Y2hDaGFuZ2VkfS5cbiAqL1xuZXhwb3J0IHR5cGUgRGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lciA9IChjaGFuZ2U6IERlYnVnU3dpdGNoQ2hhbmdlKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgZGVidWcgc3dpdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYnVnU3dpdGNoRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBXaGF0IHRoZSBzd2l0Y2ggZG9lcywgZm9yIGEgc2V0dGluZ3MgVUkuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkLCBuYW1lc3BhY2VkIGJ5IHRoZSBsaWJyYXJ5IG9yIHBsdWdpbiB0aGF0IG93bnMgdGhlIHN3aXRjaCwgZS5nLlxuICAgKiBgdHlwZXNjcmlwdC1saWI6dGVybWluYXRlLW9uLXRpbWVvdXRgLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSBzd2l0Y2ggaGFzIHVudGlsIHNvbWV0aGluZyBzZXRzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkQnlEZWZhdWx0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSwgZm9yIGEgc2V0dGluZ3MgVUkuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8vIEEgc3dpdGNoIHdob3NlIHZhbHVlIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkga2VwdCB1bmRlciBpdHMgb3duIHNoYXJlZC1zdGF0ZSBrZXkga2VlcHMgdGhhdCBrZXksIHNvIGFcbi8vIGNvcHkgb2YgdGhhdCB2ZXJzaW9uIGxvYWRlZCBiZXNpZGUgdGhpcyBvbmUgc3RpbGwgcmVhZHMgYW5kIHdyaXRlcyB0aGUgc2FtZSB2YWx1ZS5cbmNvbnN0IExFR0FDWV9TVEFURV9LRVlTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgJ3R5cGVzY3JpcHQtbGliOnRlcm1pbmF0ZS1vbi10aW1lb3V0JzogJ2lzVGVybWluYXRpb25PblRpbWVvdXRFbmFibGVkJ1xufTtcblxuY29uc3QgVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTjogRGVidWdTd2l0Y2hEZWZpbml0aW9uID0ge1xuICBkZXNjcmlwdGlvbjogJ1Rlcm1pbmF0ZSBhbiBvcGVyYXRpb24gdGhhdCB0aW1lcyBvdXQuIFN3aXRjaCBpdCBvZmYgc28gYW4gb3BlcmF0aW9uIHBhdXNlZCBvbiBhIGJyZWFrcG9pbnQga2VlcHMgcnVubmluZy4nLFxuICBpZDogJ3R5cGVzY3JpcHQtbGliOnRlcm1pbmF0ZS1vbi10aW1lb3V0JyxcbiAgaXNFbmFibGVkQnlEZWZhdWx0OiB0cnVlLFxuICBuYW1lOiAnVGVybWluYXRlIG9wZXJhdGlvbnMgb24gdGltZW91dCdcbn07XG5cbi8vIFRoaXMgbGlicmFyeSdzIG93biBzd2l0Y2hlcywgYWx3YXlzIHJlZ2lzdGVyZWQsIHNvIGEgc2V0dGluZ3MgVUkgbGlzdHMgdGhlbSBiZWZvcmUgYW55IGNvZGUgdGhhdCByZWFkcyB0aGVtIHJ1bnMuXG5jb25zdCBCVUlMVF9JTl9ERUZJTklUSU9OUzogcmVhZG9ubHkgRGVidWdTd2l0Y2hEZWZpbml0aW9uW10gPSBbVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTl07XG5cbi8qKlxuICogR2V0cyBhIHJlZ2lzdGVyZWQgZGVidWcgc3dpdGNoLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgc3dpdGNoLlxuICogQHJldHVybnMgVGhlIHN3aXRjaCwgb3IgYHVuZGVmaW5lZGAgaWYgbm8gc3dpdGNoIHdpdGggdGhhdCBpZCBpcyByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdTd2l0Y2goaWQ6IHN0cmluZyk6IERlYnVnU3dpdGNoIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb25zKCkuZ2V0KGlkKTtcbiAgcmV0dXJuIGRlZmluaXRpb24gPyBjcmVhdGVIYW5kbGUoZGVmaW5pdGlvbikgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2V0cyBldmVyeSByZWdpc3RlcmVkIGRlYnVnIHN3aXRjaCwgc29ydGVkIGJ5IGlkLlxuICpcbiAqIEByZXR1cm5zIFRoZSByZWdpc3RlcmVkIHN3aXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdTd2l0Y2hlcygpOiBEZWJ1Z1N3aXRjaFtdIHtcbiAgcmV0dXJuIFsuLi5nZXREZWZpbml0aW9ucygpLnZhbHVlcygpXVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLmlkLmxvY2FsZUNvbXBhcmUoYi5pZCkpXG4gICAgLm1hcCgoZGVmaW5pdGlvbikgPT4gY3JlYXRlSGFuZGxlKGRlZmluaXRpb24pKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkZWJ1ZyBzd2l0Y2ggdGhhdCBkZWNpZGVzIHdoZXRoZXIgYSBgcnVuV2l0aFRpbWVvdXRgIGNhbGwgd2l0aG91dCBpdHMgb3duIGBvblRpbWVvdXRgIHRlcm1pbmF0ZXMgdGhlXG4gKiBvcGVyYXRpb24gd2hlbiBpdCB0aW1lcyBvdXQuXG4gKlxuICogSXRzIGlkIGlzIGB0eXBlc2NyaXB0LWxpYjp0ZXJtaW5hdGUtb24tdGltZW91dGAgYW5kIGl0IGlzIG9uIGJ5IGRlZmF1bHQuIFN3aXRjaCBpdCBvZmYgd2hpbGUgZGVidWdnaW5nLCBzbyBhblxuICogb3BlcmF0aW9uIHBhdXNlZCBvbiBhIGJyZWFrcG9pbnQgaXMgbm90IHRlcm1pbmF0ZWQgdW5kZXIgdGhlIGRlYnVnZ2VyLiBUaGUgdGltZW91dCBpcyBzdGlsbCBsb2dnZWQgdGhyb3VnaCB0aGVcbiAqIGBBc3luYzpydW5XaXRoVGltZW91dGAgZGVidWdnZXIuXG4gKlxuICogQHJldHVybnMgVGhlIGRlYnVnIHN3aXRjaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcm1pbmF0ZU9uVGltZW91dERlYnVnU3dpdGNoKCk6IERlYnVnU3dpdGNoIHtcbiAgcmV0dXJuIHJlZ2lzdGVyRGVidWdTd2l0Y2goVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTik7XG59XG5cbi8qKlxuICogQWRkcyBhIGxpc3RlbmVyIGNhbGxlZCB3aGVuZXZlciBhIGRlYnVnIHN3aXRjaCdzIHZhbHVlIGNoYW5nZXMsIGluIGFueSBsb2FkZWQgY29weSBvZiB0aGlzIGxpYnJhcnkuXG4gKlxuICogQHBhcmFtIGxpc3RlbmVyIC0gVGhlIGxpc3RlbmVyLlxuICogQHJldHVybnMgQSBkaXNwb3NhYmxlIHRoYXQgcmVtb3ZlcyB0aGUgbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkRlYnVnU3dpdGNoQ2hhbmdlZChsaXN0ZW5lcjogRGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcik6IERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycygpO1xuICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBkZWJ1ZyBzd2l0Y2guXG4gKlxuICogUmVnaXN0ZXJpbmcgYW4gaWQgYWdhaW4gaXMgaWRlbXBvdGVudDogdGhlIGZpcnN0IGRlZmluaXRpb24gaXMga2VwdCwgYW5kIHRoZSByZXR1cm5lZCBoYW5kbGUgcmVhZHMgdGhlIHNhbWVcbiAqIHZhbHVlLiBBIHZhbHVlIHNldCB3aXRoIHtAbGluayBzZXREZWJ1Z1N3aXRjaH0gYmVmb3JlIHRoZSBzd2l0Y2ggd2FzIHJlZ2lzdGVyZWQgaXMga2VwdCwgbm90IHJlc2V0IHRvIHRoZVxuICogZGVmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZGVmaW5pdGlvbiAtIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBzd2l0Y2guXG4gKiBAcmV0dXJucyBUaGUgaGFuZGxlIHRvIHRoZSBzd2l0Y2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlYnVnU3dpdGNoKGRlZmluaXRpb246IERlYnVnU3dpdGNoRGVmaW5pdGlvbik6IERlYnVnU3dpdGNoIHtcbiAgY29uc3QgZGVmaW5pdGlvbnMgPSBnZXREZWZpbml0aW9ucygpO1xuICBsZXQgcmVnaXN0ZXJlZERlZmluaXRpb24gPSBkZWZpbml0aW9ucy5nZXQoZGVmaW5pdGlvbi5pZCk7XG4gIGlmICghcmVnaXN0ZXJlZERlZmluaXRpb24pIHtcbiAgICByZWdpc3RlcmVkRGVmaW5pdGlvbiA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBkZWZpbml0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgaWQ6IGRlZmluaXRpb24uaWQsXG4gICAgICBpc0VuYWJsZWRCeURlZmF1bHQ6IGRlZmluaXRpb24uaXNFbmFibGVkQnlEZWZhdWx0LFxuICAgICAgbmFtZTogZGVmaW5pdGlvbi5uYW1lXG4gICAgfTtcbiAgICBkZWZpbml0aW9ucy5zZXQoZGVmaW5pdGlvbi5pZCwgcmVnaXN0ZXJlZERlZmluaXRpb24pO1xuICB9XG4gIHJldHVybiBjcmVhdGVIYW5kbGUocmVnaXN0ZXJlZERlZmluaXRpb24pO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIGEgZGVidWcgc3dpdGNoLCBub3RpZnlpbmcgdGhlIHtAbGluayBvbkRlYnVnU3dpdGNoQ2hhbmdlZH0gbGlzdGVuZXJzIGlmIGl0IGNoYW5nZWQuXG4gKlxuICogVGhlIHN3aXRjaCBkb2VzIG5vdCBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgeWV0OiB0aGUgdmFsdWUgaXMga2VwdCwgYW5kIHRoZSBzd2l0Y2ggdGFrZXMgaXQgd2hlbiBpdCByZWdpc3RlcnMuIFRoYXRcbiAqIGxldHMgYSBzZXR0aW5ncyBzdG9yZSByZS1hcHBseSBzYXZlZCB2YWx1ZXMgYmVmb3JlIGV2ZXJ5IGxpYnJhcnkgb3IgcGx1Z2luIHRoYXQgb3ducyBhIHN3aXRjaCBoYXMgbG9hZGVkLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgc3dpdGNoLlxuICogQHBhcmFtIGlzRW5hYmxlZCAtIFRoZSBuZXcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWJ1Z1N3aXRjaChpZDogc3RyaW5nLCBpc0VuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb25zKCkuZ2V0KGlkKTtcbiAgLy8gQW4gdW5yZWdpc3RlcmVkIHN3aXRjaCB3aXRoIG5vIHZhbHVlIHlldCBoYXMgbm8gcHJldmlvdXMgdmFsdWUsIHNvIGl0cyBmaXJzdCBzZXQgY291bnRzIGFzIGEgY2hhbmdlLlxuICBjb25zdCB3cmFwcGVyID0gZ2V0VmFsdWVXcmFwcGVyKGlkLCBkZWZpbml0aW9uPy5pc0VuYWJsZWRCeURlZmF1bHQgPz8gIWlzRW5hYmxlZCk7XG4gIGlmICh3cmFwcGVyLnZhbHVlID09PSBpc0VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgd3JhcHBlci52YWx1ZSA9IGlzRW5hYmxlZDtcbiAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBnZXRMaXN0ZW5lcnMoKSkge1xuICAgIGxpc3RlbmVyKHsgaWQsIGlzRW5hYmxlZCB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVIYW5kbGUoZGVmaW5pdGlvbjogRGVidWdTd2l0Y2hEZWZpbml0aW9uKTogRGVidWdTd2l0Y2gge1xuICByZXR1cm4ge1xuICAgIC4uLmRlZmluaXRpb24sXG4gICAgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGdldFZhbHVlV3JhcHBlcihkZWZpbml0aW9uLmlkLCBkZWZpbml0aW9uLmlzRW5hYmxlZEJ5RGVmYXVsdCkudmFsdWU7XG4gICAgfSxcbiAgICBzZXRFbmFibGVkKGlzRW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgc2V0RGVidWdTd2l0Y2goZGVmaW5pdGlvbi5pZCwgaXNFbmFibGVkKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmluaXRpb25zKCk6IE1hcDxzdHJpbmcsIERlYnVnU3dpdGNoRGVmaW5pdGlvbj4ge1xuICBjb25zdCBkZWZpbml0aW9ucyA9IGdldFR5cGVzY3JpcHRMaWJTdGF0ZSgnZGVidWdTd2l0Y2hEZWZpbml0aW9ucycsIG5ldyBNYXA8c3RyaW5nLCBEZWJ1Z1N3aXRjaERlZmluaXRpb24+KCkpLnZhbHVlO1xuICAvLyBDaGVja2VkIG9uIGV2ZXJ5IHJlYWQsIGJlY2F1c2UgdGhlIG1hcCBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgYnkgYSBjb3B5IG9mIHRoaXMgbGlicmFyeSB0aGF0IHByZWRhdGVzIGEgc3dpdGNoLlxuICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgQlVJTFRfSU5fREVGSU5JVElPTlMpIHtcbiAgICBpZiAoIWRlZmluaXRpb25zLmhhcyhkZWZpbml0aW9uLmlkKSkge1xuICAgICAgZGVmaW5pdGlvbnMuc2V0KGRlZmluaXRpb24uaWQsIGRlZmluaXRpb24pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmaW5pdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGdldExpc3RlbmVycygpOiBTZXQ8RGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcj4ge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKCdkZWJ1Z1N3aXRjaExpc3RlbmVycycsIG5ldyBTZXQ8RGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcj4oKSkudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlV3JhcHBlcihpZDogc3RyaW5nLCBpc0VuYWJsZWRCeURlZmF1bHQ6IGJvb2xlYW4pOiBWYWx1ZVdyYXBwZXI8Ym9vbGVhbj4ge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKExFR0FDWV9TVEFURV9LRVlTW2lkXSA/PyBgZGVidWdTd2l0Y2g6JHtpZH1gLCBpc0VuYWJsZWRCeURlZmF1bHQpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFrQkEsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyw2QkFBNkI7QUFxRXRDLE1BQU0sb0JBQXNEO0FBQUEsRUFDMUQsdUNBQXVDO0FBQ3pDO0FBRUEsTUFBTSxrQ0FBeUQ7QUFBQSxFQUM3RCxhQUFhO0FBQUEsRUFDYixJQUFJO0FBQUEsRUFDSixvQkFBb0I7QUFBQSxFQUNwQixNQUFNO0FBQ1I7QUFHQSxNQUFNLHVCQUF5RCxDQUFDLCtCQUErQjtBQVF4RixTQUFTLGVBQWUsSUFBcUM7QUFDbEUsUUFBTSxhQUFhLGVBQWUsRUFBRSxJQUFJLEVBQUU7QUFDMUMsU0FBTyxhQUFhLGFBQWEsVUFBVSxJQUFJO0FBQ2pEO0FBT08sU0FBUyxtQkFBa0M7QUFDaEQsU0FBTyxDQUFDLEdBQUcsZUFBZSxFQUFFLE9BQU8sQ0FBQyxFQUNqQyxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQ3ZDLElBQUksQ0FBQyxlQUFlLGFBQWEsVUFBVSxDQUFDO0FBQ2pEO0FBWU8sU0FBUyxtQ0FBZ0Q7QUFDOUQsU0FBTyxvQkFBb0IsK0JBQStCO0FBQzVEO0FBUU8sU0FBUyxxQkFBcUIsVUFBbUQ7QUFDdEYsUUFBTSxZQUFZLGFBQWE7QUFDL0IsWUFBVSxJQUFJLFFBQVE7QUFDdEIsU0FBTyxJQUFJLG1CQUFtQjtBQUFBLElBQzVCLFdBQWlCO0FBQ2YsZ0JBQVUsT0FBTyxRQUFRO0FBQUEsSUFDM0I7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVlPLFNBQVMsb0JBQW9CLFlBQWdEO0FBQ2xGLFFBQU0sY0FBYyxlQUFlO0FBQ25DLE1BQUksdUJBQXVCLFlBQVksSUFBSSxXQUFXLEVBQUU7QUFDeEQsTUFBSSxDQUFDLHNCQUFzQjtBQUN6QiwyQkFBdUI7QUFBQSxNQUNyQixhQUFhLFdBQVc7QUFBQSxNQUN4QixJQUFJLFdBQVc7QUFBQSxNQUNmLG9CQUFvQixXQUFXO0FBQUEsTUFDL0IsTUFBTSxXQUFXO0FBQUEsSUFDbkI7QUFDQSxnQkFBWSxJQUFJLFdBQVcsSUFBSSxvQkFBb0I7QUFBQSxFQUNyRDtBQUNBLFNBQU8sYUFBYSxvQkFBb0I7QUFDMUM7QUFXTyxTQUFTLGVBQWUsSUFBWSxXQUEwQjtBQUNuRSxRQUFNLGFBQWEsZUFBZSxFQUFFLElBQUksRUFBRTtBQUUxQyxRQUFNLFVBQVUsZ0JBQWdCLElBQUksWUFBWSxzQkFBc0IsQ0FBQyxTQUFTO0FBQ2hGLE1BQUksUUFBUSxVQUFVLFdBQVc7QUFDL0I7QUFBQSxFQUNGO0FBQ0EsVUFBUSxRQUFRO0FBQ2hCLGFBQVcsWUFBWSxhQUFhLEdBQUc7QUFDckMsYUFBUyxFQUFFLElBQUksVUFBVSxDQUFDO0FBQUEsRUFDNUI7QUFDRjtBQUVBLFNBQVMsYUFBYSxZQUFnRDtBQUNwRSxTQUFPO0FBQUEsSUFDTCxHQUFHO0FBQUEsSUFDSCxZQUFxQjtBQUNuQixhQUFPLGdCQUFnQixXQUFXLElBQUksV0FBVyxrQkFBa0IsRUFBRTtBQUFBLElBQ3ZFO0FBQUEsSUFDQSxXQUFXLFdBQTBCO0FBQ25DLHFCQUFlLFdBQVcsSUFBSSxTQUFTO0FBQUEsSUFDekM7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGlCQUFxRDtBQUM1RCxRQUFNLGNBQWMsc0JBQXNCLDBCQUEwQixvQkFBSSxJQUFtQyxDQUFDLEVBQUU7QUFFOUcsYUFBVyxjQUFjLHNCQUFzQjtBQUM3QyxRQUFJLENBQUMsWUFBWSxJQUFJLFdBQVcsRUFBRSxHQUFHO0FBQ25DLGtCQUFZLElBQUksV0FBVyxJQUFJLFVBQVU7QUFBQSxJQUMzQztBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGVBQStDO0FBQ3RELFNBQU8sc0JBQXNCLHdCQUF3QixvQkFBSSxJQUErQixDQUFDLEVBQUU7QUFDN0Y7QUFFQSxTQUFTLGdCQUFnQixJQUFZLG9CQUFvRDtBQUN2RixTQUFPLHNCQUFzQixrQkFBa0IsRUFBRSxLQUFLLGVBQWUsRUFBRSxJQUFJLGtCQUFrQjtBQUMvRjsiLAogICJuYW1lcyI6IFtdCn0K
96
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlYnVnLXN3aXRjaGVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZWdpc3RyeSBvZiBkZWJ1ZyBzd2l0Y2hlczogbmFtZWQsIGFwcC13aWRlIGJvb2xlYW5zIHRoYXQgY2hhbmdlIGJlaGF2aW9yIHdoaWxlIGRlYnVnZ2luZy5cbiAqXG4gKiBBIGRlYnVnIG5hbWVzcGFjZSAoc2VlIGBkZWJ1Zy50c2ApIGNvbnRyb2xzIGxvZ2dpbmcgb25seS4gQmVoYXZpb3IgdGhhdCBzaG91bGQgZGlmZmVyIHdoaWxlIGRlYnVnZ2luZywgc3VjaCBhc1xuICogbm90IHRlcm1pbmF0aW5nIGFuIG9wZXJhdGlvbiBwYXVzZWQgb24gYSBicmVha3BvaW50LCBpcyBhIGRlYnVnIHN3aXRjaCBpbnN0ZWFkLCBzbyB0dXJuaW5nIGxvZ2dpbmcgb24gbmV2ZXJcbiAqIGNoYW5nZXMgd2hhdCB0aGUgY29kZSBkb2VzLlxuICpcbiAqIFRoZSBkZWZpbml0aW9ucywgdGhlIHZhbHVlcyBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnMgYWxsIGxpdmUgaW4gdGhlIHNoYXJlZCBzdGF0ZSBiYWcgKGB0eXBlc2NyaXB0LWxpYi1zdGF0ZS50c2ApXG4gKiBhcyBwbGFpbiBkYXRhLCBzbyBldmVyeSBjb3B5IG9mIHRoaXMgbGlicmFyeSBsb2FkZWQgaW4gb25lIHJlYWxtLCBzdWNoIGFzIHRoZSBjb3B5IGVhY2ggT2JzaWRpYW4gcGx1Z2luIGJ1bmRsZXMsXG4gKiBzZWVzIG9uZSB2YWx1ZSBwZXIgc3dpdGNoLiBBIHRvb2wgc3VjaCBhcyBhIGRlYnVnLXNldHRpbmdzIFVJIGxpc3RzIGV2ZXJ5IHJlZ2lzdGVyZWQgc3dpdGNoIHdpdGhcbiAqIHtAbGluayBnZXREZWJ1Z1N3aXRjaGVzfSBhbmQgbmVlZHMgbm8gY2hhbmdlIHdoZW4gYSBsaWJyYXJ5IG9yIHBsdWdpbiBhZGRzIG9uZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJy4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlV3JhcHBlciB9IGZyb20gJy4vdmFsdWUtd3JhcHBlci50cyc7XG5cbmltcG9ydCB7IENhbGxiYWNrRGlzcG9zYWJsZSB9IGZyb20gJy4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgeyBnZXRUeXBlc2NyaXB0TGliU3RhdGUgfSBmcm9tICcuL3R5cGVzY3JpcHQtbGliLXN0YXRlLnRzJztcblxuLyoqXG4gKiBBIGhhbmRsZSB0byBhIHJlZ2lzdGVyZWQgZGVidWcgc3dpdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYnVnU3dpdGNoIGV4dGVuZHMgRGVidWdTd2l0Y2hEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3dpdGNoIGlzIG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkOiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSwgbm90aWZ5aW5nIHRoZSB7QGxpbmsgb25EZWJ1Z1N3aXRjaENoYW5nZWR9IGxpc3RlbmVycyBpZiBpdCBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0gaXNFbmFibGVkIC0gVGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNldEVuYWJsZWQ6IChpc0VuYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBjaGFuZ2Ugb2YgYSBkZWJ1ZyBzd2l0Y2gncyB2YWx1ZSwgcGFzc2VkIHRvIGFuIHtAbGluayBvbkRlYnVnU3dpdGNoQ2hhbmdlZH0gbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVidWdTd2l0Y2hDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBzd2l0Y2ggdGhhdCBjaGFuZ2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgbGlzdGVuZXIgb2Yge0BsaW5rIG9uRGVidWdTd2l0Y2hDaGFuZ2VkfS5cbiAqL1xuZXhwb3J0IHR5cGUgRGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lciA9IChjaGFuZ2U6IERlYnVnU3dpdGNoQ2hhbmdlKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgZGVidWcgc3dpdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYnVnU3dpdGNoRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBXaGF0IHRoZSBzd2l0Y2ggZG9lcywgZm9yIGEgc2V0dGluZ3MgVUkuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkLCBuYW1lc3BhY2VkIGJ5IHRoZSBsaWJyYXJ5IG9yIHBsdWdpbiB0aGF0IG93bnMgdGhlIHN3aXRjaCwgZS5nLlxuICAgKiBgdHlwZXNjcmlwdC1saWI6dGVybWluYXRlLW9uLXRpbWVvdXRgLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSBzd2l0Y2ggaGFzIHVudGlsIHNvbWV0aGluZyBzZXRzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkQnlEZWZhdWx0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSwgZm9yIGEgc2V0dGluZ3MgVUkuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8vIEEgc3dpdGNoIHdob3NlIHZhbHVlIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkga2VwdCB1bmRlciBpdHMgb3duIHNoYXJlZC1zdGF0ZSBrZXkga2VlcHMgdGhhdCBrZXksIHNvIGFcbi8vIGNvcHkgb2YgdGhhdCB2ZXJzaW9uIGxvYWRlZCBiZXNpZGUgdGhpcyBvbmUgc3RpbGwgcmVhZHMgYW5kIHdyaXRlcyB0aGUgc2FtZSB2YWx1ZS5cbmNvbnN0IExFR0FDWV9TVEFURV9LRVlTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgJ3R5cGVzY3JpcHQtbGliOnRlcm1pbmF0ZS1vbi10aW1lb3V0JzogJ2lzVGVybWluYXRpb25PblRpbWVvdXRFbmFibGVkJ1xufTtcblxuY29uc3QgVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTjogRGVidWdTd2l0Y2hEZWZpbml0aW9uID0ge1xuICBkZXNjcmlwdGlvbjogJ1Rlcm1pbmF0ZSBhbiBvcGVyYXRpb24gdGhhdCB0aW1lcyBvdXQuIFN3aXRjaCBpdCBvZmYgc28gYW4gb3BlcmF0aW9uIHBhdXNlZCBvbiBhIGJyZWFrcG9pbnQga2VlcHMgcnVubmluZy4nLFxuICBpZDogJ3R5cGVzY3JpcHQtbGliOnRlcm1pbmF0ZS1vbi10aW1lb3V0JyxcbiAgaXNFbmFibGVkQnlEZWZhdWx0OiB0cnVlLFxuICBuYW1lOiAnVGVybWluYXRlIG9wZXJhdGlvbnMgb24gdGltZW91dCdcbn07XG5cbi8vIFRoaXMgbGlicmFyeSdzIG93biBzd2l0Y2hlcywgYWx3YXlzIHJlZ2lzdGVyZWQsIHNvIGEgc2V0dGluZ3MgVUkgbGlzdHMgdGhlbSBiZWZvcmUgYW55IGNvZGUgdGhhdCByZWFkcyB0aGVtIHJ1bnMuXG5jb25zdCBCVUlMVF9JTl9ERUZJTklUSU9OUzogcmVhZG9ubHkgRGVidWdTd2l0Y2hEZWZpbml0aW9uW10gPSBbVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTl07XG5cbi8qKlxuICogR2V0cyBhIHJlZ2lzdGVyZWQgZGVidWcgc3dpdGNoLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgc3dpdGNoLlxuICogQHJldHVybnMgVGhlIHN3aXRjaCwgb3IgYHVuZGVmaW5lZGAgaWYgbm8gc3dpdGNoIHdpdGggdGhhdCBpZCBpcyByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdTd2l0Y2goaWQ6IHN0cmluZyk6IERlYnVnU3dpdGNoIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb25zKCkuZ2V0KGlkKTtcbiAgcmV0dXJuIGRlZmluaXRpb24gPyBjcmVhdGVIYW5kbGUoZGVmaW5pdGlvbikgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2V0cyBldmVyeSByZWdpc3RlcmVkIGRlYnVnIHN3aXRjaCwgc29ydGVkIGJ5IGlkLlxuICpcbiAqIEByZXR1cm5zIFRoZSByZWdpc3RlcmVkIHN3aXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdTd2l0Y2hlcygpOiBEZWJ1Z1N3aXRjaFtdIHtcbiAgcmV0dXJuIFsuLi5nZXREZWZpbml0aW9ucygpLnZhbHVlcygpXVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLmlkLmxvY2FsZUNvbXBhcmUoYi5pZCkpXG4gICAgLm1hcCgoZGVmaW5pdGlvbikgPT4gY3JlYXRlSGFuZGxlKGRlZmluaXRpb24pKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkZWJ1ZyBzd2l0Y2ggdGhhdCBkZWNpZGVzIHdoZXRoZXIgYSBgcnVuV2l0aFRpbWVvdXRgIGNhbGwgd2l0aG91dCBpdHMgb3duIGBvblRpbWVvdXRgIHRlcm1pbmF0ZXMgdGhlXG4gKiBvcGVyYXRpb24gd2hlbiBpdCB0aW1lcyBvdXQuXG4gKlxuICogSXRzIGlkIGlzIGB0eXBlc2NyaXB0LWxpYjp0ZXJtaW5hdGUtb24tdGltZW91dGAgYW5kIGl0IGlzIG9uIGJ5IGRlZmF1bHQuIFN3aXRjaCBpdCBvZmYgd2hpbGUgZGVidWdnaW5nLCBzbyBhblxuICogb3BlcmF0aW9uIHBhdXNlZCBvbiBhIGJyZWFrcG9pbnQgaXMgbm90IHRlcm1pbmF0ZWQgdW5kZXIgdGhlIGRlYnVnZ2VyLiBUaGUgdGltZW91dCBpcyBzdGlsbCBsb2dnZWQgdGhyb3VnaCB0aGVcbiAqIGBBc3luYzpydW5XaXRoVGltZW91dGAgZGVidWdnZXIuXG4gKlxuICogQHJldHVybnMgVGhlIGRlYnVnIHN3aXRjaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcm1pbmF0ZU9uVGltZW91dERlYnVnU3dpdGNoKCk6IERlYnVnU3dpdGNoIHtcbiAgcmV0dXJuIHJlZ2lzdGVyRGVidWdTd2l0Y2goVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTik7XG59XG5cbi8qKlxuICogQWRkcyBhIGxpc3RlbmVyIGNhbGxlZCB3aGVuZXZlciBhIGRlYnVnIHN3aXRjaCdzIHZhbHVlIGNoYW5nZXMsIGluIGFueSBsb2FkZWQgY29weSBvZiB0aGlzIGxpYnJhcnkuXG4gKlxuICogQHBhcmFtIGxpc3RlbmVyIC0gVGhlIGxpc3RlbmVyLlxuICogQHJldHVybnMgQSBkaXNwb3NhYmxlIHRoYXQgcmVtb3ZlcyB0aGUgbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkRlYnVnU3dpdGNoQ2hhbmdlZChsaXN0ZW5lcjogRGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcik6IERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycygpO1xuICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBkZWJ1ZyBzd2l0Y2guXG4gKlxuICogUmVnaXN0ZXJpbmcgYW4gaWQgYWdhaW4gaXMgaWRlbXBvdGVudDogdGhlIGZpcnN0IGRlZmluaXRpb24gaXMga2VwdCwgYW5kIHRoZSByZXR1cm5lZCBoYW5kbGUgcmVhZHMgdGhlIHNhbWVcbiAqIHZhbHVlLiBBIHZhbHVlIHNldCB3aXRoIHtAbGluayBzZXREZWJ1Z1N3aXRjaH0gYmVmb3JlIHRoZSBzd2l0Y2ggd2FzIHJlZ2lzdGVyZWQgaXMga2VwdCwgbm90IHJlc2V0IHRvIHRoZVxuICogZGVmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZGVmaW5pdGlvbiAtIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBzd2l0Y2guXG4gKiBAcmV0dXJucyBUaGUgaGFuZGxlIHRvIHRoZSBzd2l0Y2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlYnVnU3dpdGNoKGRlZmluaXRpb246IERlYnVnU3dpdGNoRGVmaW5pdGlvbik6IERlYnVnU3dpdGNoIHtcbiAgY29uc3QgZGVmaW5pdGlvbnMgPSBnZXREZWZpbml0aW9ucygpO1xuICBsZXQgcmVnaXN0ZXJlZERlZmluaXRpb24gPSBkZWZpbml0aW9ucy5nZXQoZGVmaW5pdGlvbi5pZCk7XG4gIGlmICghcmVnaXN0ZXJlZERlZmluaXRpb24pIHtcbiAgICByZWdpc3RlcmVkRGVmaW5pdGlvbiA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBkZWZpbml0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgaWQ6IGRlZmluaXRpb24uaWQsXG4gICAgICBpc0VuYWJsZWRCeURlZmF1bHQ6IGRlZmluaXRpb24uaXNFbmFibGVkQnlEZWZhdWx0LFxuICAgICAgbmFtZTogZGVmaW5pdGlvbi5uYW1lXG4gICAgfTtcbiAgICBkZWZpbml0aW9ucy5zZXQoZGVmaW5pdGlvbi5pZCwgcmVnaXN0ZXJlZERlZmluaXRpb24pO1xuICB9XG4gIHJldHVybiBjcmVhdGVIYW5kbGUocmVnaXN0ZXJlZERlZmluaXRpb24pO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIGEgZGVidWcgc3dpdGNoLCBub3RpZnlpbmcgdGhlIHtAbGluayBvbkRlYnVnU3dpdGNoQ2hhbmdlZH0gbGlzdGVuZXJzIGlmIGl0IGNoYW5nZWQuXG4gKlxuICogVGhlIHN3aXRjaCBkb2VzIG5vdCBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgeWV0OiB0aGUgdmFsdWUgaXMga2VwdCwgYW5kIHRoZSBzd2l0Y2ggdGFrZXMgaXQgd2hlbiBpdCByZWdpc3RlcnMuIFRoYXRcbiAqIGxldHMgYSBzZXR0aW5ncyBzdG9yZSByZS1hcHBseSBzYXZlZCB2YWx1ZXMgYmVmb3JlIGV2ZXJ5IGxpYnJhcnkgb3IgcGx1Z2luIHRoYXQgb3ducyBhIHN3aXRjaCBoYXMgbG9hZGVkLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgc3dpdGNoLlxuICogQHBhcmFtIGlzRW5hYmxlZCAtIFRoZSBuZXcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWJ1Z1N3aXRjaChpZDogc3RyaW5nLCBpc0VuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb25zKCkuZ2V0KGlkKTtcbiAgLy8gQW4gdW5yZWdpc3RlcmVkIHN3aXRjaCB3aXRoIG5vIHZhbHVlIHlldCBoYXMgbm8gcHJldmlvdXMgdmFsdWUsIHNvIGl0cyBmaXJzdCBzZXQgY291bnRzIGFzIGEgY2hhbmdlLlxuICBjb25zdCB3cmFwcGVyID0gZ2V0VmFsdWVXcmFwcGVyKGlkLCBkZWZpbml0aW9uPy5pc0VuYWJsZWRCeURlZmF1bHQgPz8gIWlzRW5hYmxlZCk7XG4gIGlmICh3cmFwcGVyLnZhbHVlID09PSBpc0VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgd3JhcHBlci52YWx1ZSA9IGlzRW5hYmxlZDtcbiAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBnZXRMaXN0ZW5lcnMoKSkge1xuICAgIGxpc3RlbmVyKHsgaWQsIGlzRW5hYmxlZCB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVIYW5kbGUoZGVmaW5pdGlvbjogRGVidWdTd2l0Y2hEZWZpbml0aW9uKTogRGVidWdTd2l0Y2gge1xuICByZXR1cm4ge1xuICAgIC4uLmRlZmluaXRpb24sXG4gICAgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGdldFZhbHVlV3JhcHBlcihkZWZpbml0aW9uLmlkLCBkZWZpbml0aW9uLmlzRW5hYmxlZEJ5RGVmYXVsdCkudmFsdWU7XG4gICAgfSxcbiAgICBzZXRFbmFibGVkKGlzRW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgc2V0RGVidWdTd2l0Y2goZGVmaW5pdGlvbi5pZCwgaXNFbmFibGVkKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmluaXRpb25zKCk6IE1hcDxzdHJpbmcsIERlYnVnU3dpdGNoRGVmaW5pdGlvbj4ge1xuICBjb25zdCBkZWZpbml0aW9ucyA9IGdldFR5cGVzY3JpcHRMaWJTdGF0ZSgnZGVidWdTd2l0Y2hEZWZpbml0aW9ucycsIG5ldyBNYXA8c3RyaW5nLCBEZWJ1Z1N3aXRjaERlZmluaXRpb24+KCkpLnZhbHVlO1xuICAvLyBDaGVja2VkIG9uIGV2ZXJ5IHJlYWQsIGJlY2F1c2UgdGhlIG1hcCBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgYnkgYSBjb3B5IG9mIHRoaXMgbGlicmFyeSB0aGF0IHByZWRhdGVzIGEgc3dpdGNoLlxuICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgQlVJTFRfSU5fREVGSU5JVElPTlMpIHtcbiAgICBpZiAoIWRlZmluaXRpb25zLmhhcyhkZWZpbml0aW9uLmlkKSkge1xuICAgICAgZGVmaW5pdGlvbnMuc2V0KGRlZmluaXRpb24uaWQsIGRlZmluaXRpb24pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmaW5pdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGdldExpc3RlbmVycygpOiBTZXQ8RGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcj4ge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKCdkZWJ1Z1N3aXRjaExpc3RlbmVycycsIG5ldyBTZXQ8RGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcj4oKSkudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlV3JhcHBlcihpZDogc3RyaW5nLCBpc0VuYWJsZWRCeURlZmF1bHQ6IGJvb2xlYW4pOiBWYWx1ZVdyYXBwZXI8Ym9vbGVhbj4ge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKExFR0FDWV9TVEFURV9LRVlTW2lkXSA/PyBgZGVidWdTd2l0Y2g6JHtpZH1gLCBpc0VuYWJsZWRCeURlZmF1bHQpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFrQkEsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyw2QkFBNkI7QUFxRXRDLE1BQU0sb0JBQXNEO0FBQUEsRUFDMUQsdUNBQXVDO0FBQ3pDO0FBRUEsTUFBTSxrQ0FBeUQ7QUFBQSxFQUM3RCxhQUFhO0FBQUEsRUFDYixJQUFJO0FBQUEsRUFDSixvQkFBb0I7QUFBQSxFQUNwQixNQUFNO0FBQ1I7QUFHQSxNQUFNLHVCQUF5RCxDQUFDLCtCQUErQjtBQVF4RixTQUFTLGVBQWUsSUFBcUM7QUFDbEUsUUFBTSxhQUFhLGVBQWUsRUFBRSxJQUFJLEVBQUU7QUFDMUMsU0FBTyxhQUFhLGFBQWEsVUFBVSxJQUFJO0FBQ2pEO0FBT08sU0FBUyxtQkFBa0M7QUFDaEQsU0FBTyxDQUFDLEdBQUcsZUFBZSxFQUFFLE9BQU8sQ0FBQyxFQUNqQyxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQ3ZDLElBQUksQ0FBQyxlQUFlLGFBQWEsVUFBVSxDQUFDO0FBQ2pEO0FBWU8sU0FBUyxtQ0FBZ0Q7QUFDOUQsU0FBTyxvQkFBb0IsK0JBQStCO0FBQzVEO0FBUU8sU0FBUyxxQkFBcUIsVUFBbUQ7QUFDdEYsUUFBTSxZQUFZLGFBQWE7QUFDL0IsWUFBVSxJQUFJLFFBQVE7QUFDdEIsU0FBTyxJQUFJLG1CQUFtQjtBQUFBLElBQzVCLFdBQWlCO0FBQ2YsZ0JBQVUsT0FBTyxRQUFRO0FBQUEsSUFDM0I7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVlPLFNBQVMsb0JBQW9CLFlBQWdEO0FBQ2xGLFFBQU0sY0FBYyxlQUFlO0FBQ25DLE1BQUksdUJBQXVCLFlBQVksSUFBSSxXQUFXLEVBQUU7QUFDeEQsTUFBSSxDQUFDLHNCQUFzQjtBQUN6QiwyQkFBdUI7QUFBQSxNQUNyQixhQUFhLFdBQVc7QUFBQSxNQUN4QixJQUFJLFdBQVc7QUFBQSxNQUNmLG9CQUFvQixXQUFXO0FBQUEsTUFDL0IsTUFBTSxXQUFXO0FBQUEsSUFDbkI7QUFDQSxnQkFBWSxJQUFJLFdBQVcsSUFBSSxvQkFBb0I7QUFBQSxFQUNyRDtBQUNBLFNBQU8sYUFBYSxvQkFBb0I7QUFDMUM7QUFXTyxTQUFTLGVBQWUsSUFBWSxXQUEwQjtBQUNuRSxRQUFNLGFBQWEsZUFBZSxFQUFFLElBQUksRUFBRTtBQUUxQyxRQUFNLFVBQVUsZ0JBQWdCLElBQUksWUFBWSxzQkFBc0IsQ0FBQyxTQUFTO0FBQ2hGLE1BQUksUUFBUSxVQUFVLFdBQVc7QUFDL0I7QUFBQSxFQUNGO0FBQ0EsVUFBUSxRQUFRO0FBQ2hCLGFBQVcsWUFBWSxhQUFhLEdBQUc7QUFDckMsYUFBUyxFQUFFLElBQUksVUFBVSxDQUFDO0FBQUEsRUFDNUI7QUFDRjtBQUVBLFNBQVMsYUFBYSxZQUFnRDtBQUNwRSxTQUFPO0FBQUEsSUFDTCxHQUFHO0FBQUEsSUFDSCxZQUFxQjtBQUNuQixhQUFPLGdCQUFnQixXQUFXLElBQUksV0FBVyxrQkFBa0IsRUFBRTtBQUFBLElBQ3ZFO0FBQUEsSUFDQSxXQUFXLFdBQTBCO0FBQ25DLHFCQUFlLFdBQVcsSUFBSSxTQUFTO0FBQUEsSUFDekM7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGlCQUFxRDtBQUM1RCxRQUFNLGNBQWMsc0JBQXNCLDBCQUEwQixvQkFBSSxJQUFtQyxDQUFDLEVBQUU7QUFFOUcsYUFBVyxjQUFjLHNCQUFzQjtBQUM3QyxRQUFJLENBQUMsWUFBWSxJQUFJLFdBQVcsRUFBRSxHQUFHO0FBQ25DLGtCQUFZLElBQUksV0FBVyxJQUFJLFVBQVU7QUFBQSxJQUMzQztBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGVBQStDO0FBQ3RELFNBQU8sc0JBQXNCLHdCQUF3QixvQkFBSSxJQUErQixDQUFDLEVBQUU7QUFDN0Y7QUFFQSxTQUFTLGdCQUFnQixJQUFZLG9CQUFvRDtBQUN2RixTQUFPLHNCQUFzQixrQkFBa0IsRUFBRSxLQUFLLGVBQWUsRUFBRSxJQUFJLGtCQUFrQjtBQUMvRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -77,11 +77,3 @@ export declare function isDebugNamespaceEnabled(namespace: string): boolean;
77
77
  * @param params - The parameters for printing the message.
78
78
  */
79
79
  export declare function printWithStackTrace(params: PrintWithStackTraceParams): void;
80
- /**
81
- * Shows an initial debug message, telling the user how to disable the plugin's debug messages.
82
- *
83
- * Prints nothing while the plugin's debug messages are disabled, so a plugin in its default configuration writes nothing to the console.
84
- *
85
- * @param pluginId - The plugin ID.
86
- */
87
- export declare function showInitialDebugMessage(pluginId: string): void;
@@ -109,12 +109,6 @@ function printWithStackTrace(params) {
109
109
  }
110
110
  debuggerInstance(message, ...$arguments, "\n\n---\nContext stack trace:\n", makeStackTraceError(stackTrace));
111
111
  }
112
- function showInitialDebugMessage(pluginId) {
113
- if (!isDebugNamespaceEnabled(pluginId)) {
114
- return;
115
- }
116
- getDebugger(pluginId)(`Debug messages for plugin ${pluginId} are enabled.${formatDebugGuideReference(" how to disable them")}`);
117
- }
118
112
  function disableNamespaces(namespaces) {
119
113
  const set = new Set(getNamespaces());
120
114
  for (const namespace of toArray(namespaces)) {
@@ -181,7 +175,6 @@ export {
181
175
  getDebugger,
182
176
  getLibDebugger,
183
177
  isDebugNamespaceEnabled,
184
- printWithStackTrace,
185
- showInitialDebugMessage
178
+ printWithStackTrace
186
179
  };
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWJ1Zy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRlYnVnZ2luZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyIH0gZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnQ29udHJvbGxlciB9IGZyb20gJy4vZGVidWctY29udHJvbGxlci50cyc7XG5cbmltcG9ydCB7XG4gIEN1c3RvbVN0YWNrVHJhY2VFcnJvcixcbiAgZ2V0U3RhY2tUcmFjZVxufSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7IExpYnJhcnkgfSBmcm9tICcuL2xpYnJhcnkudHMnO1xuaW1wb3J0IHsgZ2V0VHlwZXNjcmlwdExpYlN0YXRlIH0gZnJvbSAnLi90eXBlc2NyaXB0LWxpYi1zdGF0ZS50cyc7XG5cbi8qKlxuICogVGhlIGFsaWFzaW5nIGRlYnVnZ2VyJ3Mgb3duIGZyYW1lIGJldHdlZW4gdGhlIGNhbGxlciBhbmQgdGhlIGBkZWJ1Z2AgcGFja2FnZTogdGhlIGBhcHBseWAgdHJhcCBvZiBpdHMgcHJveHkuXG4gKi9cbmNvbnN0IEFMSUFTX0ZSQU1FU19UT19TS0lQID0gMTtcbmNvbnN0IE5BTUVTUEFDRV9TRVBBUkFUT1IgPSAnLCc7XG5jb25zdCBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggPSAnLSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHByaW50V2l0aFN0YWNrVHJhY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaW50V2l0aFN0YWNrVHJhY2VQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5ICRhcmd1bWVudHM6IHVua25vd25bXTtcblxuICAvKipcbiAgICogVGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVidWdnZXJJbnN0YW5jZTogRGVidWdnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2UgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxvZ1dpdGhDYWxsZXJ9LlxuICovXG5pbnRlcmZhY2UgTG9nV2l0aENhbGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgJGFyZ3VtZW50czogdW5rbm93bltdO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGluIHRoZSBzdGFjayB0cmFjZS5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1lc1RvU2tpcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW5hYmxlcyB0aGUgZGVidWdnZXJzIGZvciB0aGUgbGlicmFyeSAodW5kZXIgaXRzIGRlYnVnIG5hbWVzcGFjZSwgc2VlIGBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVMaWJyYXJ5RGVidWdnZXJzKCk6IHZvaWQge1xuICBlbmFibGVOYW1lc3BhY2VzKFtMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlLCBgJHtMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlfToqYF0pO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGhlIHNlbnRlbmNlIHRoYXQgcG9pbnRzIGF0IHRoZSBkZWJ1ZyBndWlkZSB0aGUgaG9zdCBzdXBwbGllZCAoc2VlIGBMaWJyYXJ5LmRlYnVnR3VpZGVVcmxgKS5cbiAqXG4gKiBAcGFyYW0gc3VmZml4IC0gVGhlIHRleHQgYXBwZW5kZWQgdG8gdGhlIGd1aWRlIFVSTCwgaW5zaWRlIHRoZSBzZW50ZW5jZSAoZS5nLiBgJyBob3cgdG8gZGlzYWJsZSB0aGVtJ2ApLlxuICogQHJldHVybnMgVGhlIHNlbnRlbmNlLCB3aXRoIGEgbGVhZGluZyBzcGFjZSwgb3IgYW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlIGhvc3Qgc3VwcGxpZWQgbm8gZ3VpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREZWJ1Z0d1aWRlUmVmZXJlbmNlKHN1ZmZpeCA9ICcnKTogc3RyaW5nIHtcbiAgcmV0dXJuIExpYnJhcnkuZGVidWdHdWlkZVVybCA/IGAgU2VlICR7TGlicmFyeS5kZWJ1Z0d1aWRlVXJsfSR7c3VmZml4fS5gIDogJyc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnIGNvbnRyb2xsZXIuXG4gKlxuICogQHJldHVybnMgQSBkZWJ1ZyBjb250cm9sbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdDb250cm9sbGVyKCk6IERlYnVnQ29udHJvbGxlciB7XG4gIHJldHVybiB7XG4gICAgZGlzYWJsZTogZGlzYWJsZU5hbWVzcGFjZXMsXG4gICAgZW5hYmxlOiBlbmFibGVOYW1lc3BhY2VzLFxuICAgIGdldDogZ2V0TmFtZXNwYWNlcyxcbiAgICBzZXQ6IHNldE5hbWVzcGFjZXNcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWdnZXIgaW5zdGFuY2Ugd2l0aCBhIGxvZyBmdW5jdGlvbiB0aGF0IGluY2x1ZGVzIHRoZSBjYWxsZXIncyBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggYSBsb2cgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyB0aGUgY2FsbGVyJ3MgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlYnVnZ2VyKG5hbWVzcGFjZTogc3RyaW5nLCBmcmFtZXNUb1NraXAgPSAwKTogRGVidWdnZXIge1xuICBjb25zdCBrZXkgPSBgJHtuYW1lc3BhY2V9OiR7U3RyaW5nKGZyYW1lc1RvU2tpcCl9YDtcbiAgY29uc3QgZGVidWdnZXJzTWFwID0gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKCdkZWJ1Z2dlcnMnLCBuZXcgTWFwPHN0cmluZywgRGVidWdnZXI+KCkpLnZhbHVlO1xuICBsZXQgZGVidWdnZXJFeCA9IGRlYnVnZ2Vyc01hcC5nZXQoa2V5KTtcbiAgaWYgKCFkZWJ1Z2dlckV4KSB7XG4gICAgZGVidWdnZXJFeCA9IGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKShuYW1lc3BhY2UpO1xuICAgIGRlYnVnZ2VyRXgubG9nID0gKG1lc3NhZ2U6IHN0cmluZywgLi4uJGFyZ3VtZW50czogdW5rbm93bltdKTogdm9pZCA9PiB7XG4gICAgICBsb2dXaXRoQ2FsbGVyKHtcbiAgICAgICAgJGFyZ3VtZW50cyxcbiAgICAgICAgZnJhbWVzVG9Ta2lwLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBuYW1lc3BhY2VcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBkZWJ1Z2dlcnNNYXAuc2V0KGtleSwgZGVidWdnZXJFeCk7XG4gIH1cblxuICByZXR1cm4gZGVidWdnZXJFeDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWdnZXIgaW5zdGFuY2UgZm9yIHRoZSBsaWJyYXJ5ICh1bmRlciBpdHMgZGVidWcgbmFtZXNwYWNlLCBzZWUgYExpYnJhcnkuZGVidWdOYW1lc3BhY2VgKS5cbiAqXG4gKiBXaGVuIHRoZSBob3N0IHN1cHBsaWVkIGBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlQWxpYXNlc2AsIGEgZmlsdGVyIHdyaXR0ZW4gZm9yIGFuIGFsaWFzIHN0aWxsIHNob3dzIHRoZSBtZXNzYWdlcy5cbiAqIEVhY2ggbWVzc2FnZSBwcmludHMgT05DRTogdW5kZXIgdGhlIGN1cnJlbnQgbmFtZXNwYWNlIHdoZW4gYSBmaWx0ZXIgZW5hYmxlcyBpdCwgb3RoZXJ3aXNlIHVuZGVyIHRoZSBmaXJzdCBhbGlhcyBhXG4gKiBmaWx0ZXIgZW5hYmxlcy4gUHJpbnRpbmcgdW5kZXIgZXZlcnkgZW5hYmxlZCBvbmUgd291bGQgZG91YmxlIGVhY2ggbWVzc2FnZSB1bmRlciB0aGUgbW9zdCBjb21tb24gZmlsdGVyIG9mIGFsbCxcbiAqIGA8cHJlZml4PipgLCB3aGljaCBlbmFibGVzIHRoZW0gYWxsLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIGRlYnVnZ2VyIGluc3RhbmNlIGZvciB0aGUgbGlicmFyeSAodW5kZXIgaXRzIGRlYnVnIG5hbWVzcGFjZSwgc2VlIGBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWJEZWJ1Z2dlcihuYW1lc3BhY2U6IHN0cmluZyk6IERlYnVnZ2VyIHtcbiAgY29uc3QgYWxpYXNlcyA9IExpYnJhcnkuZGVidWdOYW1lc3BhY2VBbGlhc2VzO1xuICBpZiAoYWxpYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZ2V0RGVidWdnZXIoYCR7TGlicmFyeS5kZWJ1Z1ByZWZpeE5hbWVzcGFjZX0ke0xpYnJhcnkuZGVidWdOYW1lc3BhY2V9OiR7bmFtZXNwYWNlfWApO1xuICB9XG5cbiAgLy8gRXZlcnkgZGVidWdnZXIgY29tZXMgZnJvbSB0aGUgc2hhcmVkIGNhY2hlIGBnZXREZWJ1Z2dlcmAga2VlcHMsIHNvIG9ubHkgdGhlIGNoZWFwIHByb3h5IGlzIG5ldyBvbiBlYWNoIGNhbGwsIGFuZCBhXG4gIC8vIHNweSBpbnN0YWxsZWQgb24gb25lIGNhbGwncyBgbG9nYCBpcyB0aGUgb25lIHRoZSBuZXh0IGNhbGwgcmVhY2hlcy5cbiAgY29uc3QgY3VycmVudERlYnVnZ2VyID0gZ2V0RGVidWdnZXIoYCR7TGlicmFyeS5kZWJ1Z1ByZWZpeE5hbWVzcGFjZX0ke0xpYnJhcnkuZGVidWdOYW1lc3BhY2V9OiR7bmFtZXNwYWNlfWAsIEFMSUFTX0ZSQU1FU19UT19TS0lQKTtcbiAgY29uc3QgYWxpYXNEZWJ1Z2dlcnMgPSBhbGlhc2VzLm1hcCgoYWxpYXMpID0+IGdldERlYnVnZ2VyKGAke0xpYnJhcnkuZGVidWdQcmVmaXhOYW1lc3BhY2V9JHthbGlhc306JHtuYW1lc3BhY2V9YCwgQUxJQVNfRlJBTUVTX1RPX1NLSVApKTtcbiAgY29uc3QgYWxsRGVidWdnZXJzID0gW2N1cnJlbnREZWJ1Z2dlciwgLi4uYWxpYXNEZWJ1Z2dlcnNdO1xuICByZXR1cm4gbmV3IFByb3h5KGN1cnJlbnREZWJ1Z2dlciwge1xuICAgIGFwcGx5KF90YXJnZXQsIF90aGlzQXJndW1lbnQsICRhcmd1bWVudHM6IFBhcmFtZXRlcnM8RGVidWdnZXI+KTogdm9pZCB7XG4gICAgICBhbGxEZWJ1Z2dlcnMuZmluZCgoZGVidWdnZXJJbnN0YW5jZSkgPT4gZGVidWdnZXJJbnN0YW5jZS5lbmFibGVkKT8uKC4uLiRhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKTogdW5rbm93biB7XG4gICAgICBpZiAocHJvcGVydHkgPT09ICdlbmFibGVkJykge1xuICAgICAgICByZXR1cm4gYWxsRGVidWdnZXJzLnNvbWUoKGRlYnVnZ2VySW5zdGFuY2UpID0+IGRlYnVnZ2VySW5zdGFuY2UuZW5hYmxlZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlOiB1bmtub3duID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZGVidWcgZmlsdGVyIGVuYWJsZXMgYSBuYW1lc3BhY2UuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBuYW1lc3BhY2UgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVidWdOYW1lc3BhY2VFbmFibGVkKG5hbWVzcGFjZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkuZW5hYmxlZChuYW1lc3BhY2UpO1xufVxuXG4vKipcbiAqIFByaW50cyBhIG1lc3NhZ2Ugd2l0aCBhIHN0YWNrIHRyYWNlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcHJpbnRpbmcgdGhlIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFdpdGhTdGFja1RyYWNlKHBhcmFtczogUHJpbnRXaXRoU3RhY2tUcmFjZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgJGFyZ3VtZW50cyxcbiAgICBkZWJ1Z2dlckluc3RhbmNlLFxuICAgIG1lc3NhZ2UsXG4gICAgc3RhY2tUcmFjZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIUxpYnJhcnkuc2hvdWxkUHJpbnRTdGFja1RyYWNlKSB7XG4gICAgZGVidWdnZXJJbnN0YW5jZShtZXNzYWdlLCAuLi4kYXJndW1lbnRzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWJ1Z2dlckluc3RhbmNlKG1lc3NhZ2UsIC4uLiRhcmd1bWVudHMsICdcXG5cXG4tLS1cXG5Db250ZXh0IHN0YWNrIHRyYWNlOlxcbicsIG1ha2VTdGFja1RyYWNlRXJyb3Ioc3RhY2tUcmFjZSkpO1xufVxuXG4vKipcbiAqIFNob3dzIGFuIGluaXRpYWwgZGVidWcgbWVzc2FnZSwgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gZGlzYWJsZSB0aGUgcGx1Z2luJ3MgZGVidWcgbWVzc2FnZXMuXG4gKlxuICogUHJpbnRzIG5vdGhpbmcgd2hpbGUgdGhlIHBsdWdpbidzIGRlYnVnIG1lc3NhZ2VzIGFyZSBkaXNhYmxlZCwgc28gYSBwbHVnaW4gaW4gaXRzIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3cml0ZXMgbm90aGluZyB0byB0aGUgY29uc29sZS5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIElELlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvd0luaXRpYWxEZWJ1Z01lc3NhZ2UocGx1Z2luSWQ6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoIWlzRGVidWdOYW1lc3BhY2VFbmFibGVkKHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGdldERlYnVnZ2VyKHBsdWdpbklkKShgRGVidWcgbWVzc2FnZXMgZm9yIHBsdWdpbiAke3BsdWdpbklkfSBhcmUgZW5hYmxlZC4ke2Zvcm1hdERlYnVnR3VpZGVSZWZlcmVuY2UoJyBob3cgdG8gZGlzYWJsZSB0aGVtJyl9YCk7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVOYW1lc3BhY2VzKG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoZ2V0TmFtZXNwYWNlcygpKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgdG9BcnJheShuYW1lc3BhY2VzKSkge1xuICAgIGlmIChuYW1lc3BhY2Uuc3RhcnRzV2l0aChORUdBVEVEX05BTUVTUEFDRV9QUkVGSVgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbmVnYXRlZE5hbWVzcGFjZSA9IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCArIG5hbWVzcGFjZTtcbiAgICBzZXQuZGVsZXRlKG5hbWVzcGFjZSk7XG4gICAgc2V0LmFkZChuZWdhdGVkTmFtZXNwYWNlKTtcbiAgfVxuICBzZXROYW1lc3BhY2VzKFsuLi5zZXRdKTtcbn1cblxuZnVuY3Rpb24gZW5hYmxlTmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KGdldE5hbWVzcGFjZXMoKSk7XG4gIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIHRvQXJyYXkobmFtZXNwYWNlcykpIHtcbiAgICBpZiAoIW5hbWVzcGFjZS5zdGFydHNXaXRoKE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCkpIHtcbiAgICAgIGNvbnN0IG5lZ2F0ZWROYW1lc3BhY2UgPSBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggKyBuYW1lc3BhY2U7XG4gICAgICBzZXQuZGVsZXRlKG5lZ2F0ZWROYW1lc3BhY2UpO1xuICAgIH1cbiAgICBzZXQuYWRkKG5hbWVzcGFjZSk7XG4gIH1cbiAgc2V0TmFtZXNwYWNlcyhbLi4uc2V0XSk7XG59XG5cbmZ1bmN0aW9uIGdldE5hbWVzcGFjZXMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gdG9BcnJheShnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkubG9hZCgpID8/ICcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpOiB0eXBlb2YgZGVidWcge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKCdkZWJ1ZycsIGRlYnVnKS52YWx1ZTtcbn1cblxuZnVuY3Rpb24gbG9nV2l0aENhbGxlcihwYXJhbXM6IExvZ1dpdGhDYWxsZXJQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgICRhcmd1bWVudHMsXG4gICAgZnJhbWVzVG9Ta2lwLFxuICAgIG1lc3NhZ2UsXG4gICAgbmFtZXNwYWNlXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghaXNEZWJ1Z05hbWVzcGFjZUVuYWJsZWQobmFtZXNwYWNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghTGlicmFyeS5zaG91bGRQcmludFN0YWNrVHJhY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBWYWxpZCB1c2FnZS5cbiAgICBjb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLiRhcmd1bWVudHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY2FsbGVyIGlzIDMgZnJhbWVzIGFib3ZlIHRoaXMgb25lLCBiZWNhdXNlIHRoZSBjYWxsIHN0YWNrIGlzIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqIDA6IGxvZ1dpdGhDYWxsZXJcbiAgICogMTogZGVidWdJbnN0YW5jZS5sb2dcbiAgICogMjogZGVidWdcbiAgICogMzogZnVuY3Rpb25OYW1lICh0aGUgY2FsbGVyKVxuICAgKlxuICAgKiBgZ2V0U3RhY2tUcmFjZWAgZHJvcHMgaXRzIG93biBmcmFtZSBhbmQsIG9uIGFuIGVuZ2luZSB0aGF0IHdyaXRlcyBvbmUsIHRoZSBgRXJyb3JgIGhlYWRlciBsaW5lLlxuICAgKi9cbiAgY29uc3QgQ0FMTEVSX0ZSQU1FX0lOREVYID0gMztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBWYWxpZCB1c2FnZS5cbiAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi4kYXJndW1lbnRzLCAnXFxuXFxuLS0tXFxuTG9nZ2VyIHN0YWNrIHRyYWNlOlxcbicsIG1ha2VTdGFja1RyYWNlRXJyb3IoZ2V0U3RhY2tUcmFjZShDQUxMRVJfRlJBTUVfSU5ERVggKyBmcmFtZXNUb1NraXApKSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VTdGFja1RyYWNlRXJyb3Ioc3RhY2tUcmFjZTogc3RyaW5nKTogQ3VzdG9tU3RhY2tUcmFjZUVycm9yIHtcbiAgcmV0dXJuIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3Ioe1xuICAgIGNhdXNlOiB1bmRlZmluZWQsXG4gICAgbWVzc2FnZTogYERlYnVnIG1vZGU6IGludGVudGlvbmFsIHBsYWNlaG9sZGVyIGVycm9yLiR7Zm9ybWF0RGVidWdHdWlkZVJlZmVyZW5jZSgpfWAsXG4gICAgc3RhY2tUcmFjZVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBuYW1lc3BhY2VzIHRvIGVuYWJsZS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlcyAtIFRoZSBuYW1lc3BhY2VzIHRvIGVuYWJsZS5cbiAqL1xuZnVuY3Rpb24gc2V0TmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkuZW5hYmxlKHRvQXJyYXkobmFtZXNwYWNlcykuam9pbihOQU1FU1BBQ0VfU0VQQVJBVE9SKSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiB0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzLnNwbGl0KE5BTUVTUEFDRV9TRVBBUkFUT1IpLmZpbHRlcihCb29sZWFuKSA6IG5hbWVzcGFjZXMuZmxhdE1hcCgobmFtZXNwYWNlKSA9PiB0b0FycmF5KG5hbWVzcGFjZSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sV0FBVztBQUlsQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZUFBZTtBQUN4QixTQUFTLDZCQUE2QjtBQUt0QyxNQUFNLHVCQUF1QjtBQUM3QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLDJCQUEyQjtBQXVEMUIsU0FBUyx5QkFBK0I7QUFDN0MsbUJBQWlCLENBQUMsUUFBUSxnQkFBZ0IsR0FBRyxRQUFRLGNBQWMsSUFBSSxDQUFDO0FBQzFFO0FBUU8sU0FBUywwQkFBMEIsU0FBUyxJQUFZO0FBQzdE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
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWJ1Zy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRlYnVnZ2luZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyIH0gZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnQ29udHJvbGxlciB9IGZyb20gJy4vZGVidWctY29udHJvbGxlci50cyc7XG5cbmltcG9ydCB7XG4gIEN1c3RvbVN0YWNrVHJhY2VFcnJvcixcbiAgZ2V0U3RhY2tUcmFjZVxufSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7IExpYnJhcnkgfSBmcm9tICcuL2xpYnJhcnkudHMnO1xuaW1wb3J0IHsgZ2V0VHlwZXNjcmlwdExpYlN0YXRlIH0gZnJvbSAnLi90eXBlc2NyaXB0LWxpYi1zdGF0ZS50cyc7XG5cbi8qKlxuICogVGhlIGFsaWFzaW5nIGRlYnVnZ2VyJ3Mgb3duIGZyYW1lIGJldHdlZW4gdGhlIGNhbGxlciBhbmQgdGhlIGBkZWJ1Z2AgcGFja2FnZTogdGhlIGBhcHBseWAgdHJhcCBvZiBpdHMgcHJveHkuXG4gKi9cbmNvbnN0IEFMSUFTX0ZSQU1FU19UT19TS0lQID0gMTtcbmNvbnN0IE5BTUVTUEFDRV9TRVBBUkFUT1IgPSAnLCc7XG5jb25zdCBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggPSAnLSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHByaW50V2l0aFN0YWNrVHJhY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaW50V2l0aFN0YWNrVHJhY2VQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5ICRhcmd1bWVudHM6IHVua25vd25bXTtcblxuICAvKipcbiAgICogVGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVidWdnZXJJbnN0YW5jZTogRGVidWdnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2UgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxvZ1dpdGhDYWxsZXJ9LlxuICovXG5pbnRlcmZhY2UgTG9nV2l0aENhbGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgJGFyZ3VtZW50czogdW5rbm93bltdO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGluIHRoZSBzdGFjayB0cmFjZS5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1lc1RvU2tpcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW5hYmxlcyB0aGUgZGVidWdnZXJzIGZvciB0aGUgbGlicmFyeSAodW5kZXIgaXRzIGRlYnVnIG5hbWVzcGFjZSwgc2VlIGBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVMaWJyYXJ5RGVidWdnZXJzKCk6IHZvaWQge1xuICBlbmFibGVOYW1lc3BhY2VzKFtMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlLCBgJHtMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlfToqYF0pO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGhlIHNlbnRlbmNlIHRoYXQgcG9pbnRzIGF0IHRoZSBkZWJ1ZyBndWlkZSB0aGUgaG9zdCBzdXBwbGllZCAoc2VlIGBMaWJyYXJ5LmRlYnVnR3VpZGVVcmxgKS5cbiAqXG4gKiBAcGFyYW0gc3VmZml4IC0gVGhlIHRleHQgYXBwZW5kZWQgdG8gdGhlIGd1aWRlIFVSTCwgaW5zaWRlIHRoZSBzZW50ZW5jZSAoZS5nLiBgJyBob3cgdG8gZGlzYWJsZSB0aGVtJ2ApLlxuICogQHJldHVybnMgVGhlIHNlbnRlbmNlLCB3aXRoIGEgbGVhZGluZyBzcGFjZSwgb3IgYW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlIGhvc3Qgc3VwcGxpZWQgbm8gZ3VpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREZWJ1Z0d1aWRlUmVmZXJlbmNlKHN1ZmZpeCA9ICcnKTogc3RyaW5nIHtcbiAgcmV0dXJuIExpYnJhcnkuZGVidWdHdWlkZVVybCA/IGAgU2VlICR7TGlicmFyeS5kZWJ1Z0d1aWRlVXJsfSR7c3VmZml4fS5gIDogJyc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnIGNvbnRyb2xsZXIuXG4gKlxuICogQHJldHVybnMgQSBkZWJ1ZyBjb250cm9sbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdDb250cm9sbGVyKCk6IERlYnVnQ29udHJvbGxlciB7XG4gIHJldHVybiB7XG4gICAgZGlzYWJsZTogZGlzYWJsZU5hbWVzcGFjZXMsXG4gICAgZW5hYmxlOiBlbmFibGVOYW1lc3BhY2VzLFxuICAgIGdldDogZ2V0TmFtZXNwYWNlcyxcbiAgICBzZXQ6IHNldE5hbWVzcGFjZXNcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWdnZXIgaW5zdGFuY2Ugd2l0aCBhIGxvZyBmdW5jdGlvbiB0aGF0IGluY2x1ZGVzIHRoZSBjYWxsZXIncyBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggYSBsb2cgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyB0aGUgY2FsbGVyJ3MgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlYnVnZ2VyKG5hbWVzcGFjZTogc3RyaW5nLCBmcmFtZXNUb1NraXAgPSAwKTogRGVidWdnZXIge1xuICBjb25zdCBrZXkgPSBgJHtuYW1lc3BhY2V9OiR7U3RyaW5nKGZyYW1lc1RvU2tpcCl9YDtcbiAgY29uc3QgZGVidWdnZXJzTWFwID0gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKCdkZWJ1Z2dlcnMnLCBuZXcgTWFwPHN0cmluZywgRGVidWdnZXI+KCkpLnZhbHVlO1xuICBsZXQgZGVidWdnZXJFeCA9IGRlYnVnZ2Vyc01hcC5nZXQoa2V5KTtcbiAgaWYgKCFkZWJ1Z2dlckV4KSB7XG4gICAgZGVidWdnZXJFeCA9IGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKShuYW1lc3BhY2UpO1xuICAgIGRlYnVnZ2VyRXgubG9nID0gKG1lc3NhZ2U6IHN0cmluZywgLi4uJGFyZ3VtZW50czogdW5rbm93bltdKTogdm9pZCA9PiB7XG4gICAgICBsb2dXaXRoQ2FsbGVyKHtcbiAgICAgICAgJGFyZ3VtZW50cyxcbiAgICAgICAgZnJhbWVzVG9Ta2lwLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBuYW1lc3BhY2VcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBkZWJ1Z2dlcnNNYXAuc2V0KGtleSwgZGVidWdnZXJFeCk7XG4gIH1cblxuICByZXR1cm4gZGVidWdnZXJFeDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWdnZXIgaW5zdGFuY2UgZm9yIHRoZSBsaWJyYXJ5ICh1bmRlciBpdHMgZGVidWcgbmFtZXNwYWNlLCBzZWUgYExpYnJhcnkuZGVidWdOYW1lc3BhY2VgKS5cbiAqXG4gKiBXaGVuIHRoZSBob3N0IHN1cHBsaWVkIGBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlQWxpYXNlc2AsIGEgZmlsdGVyIHdyaXR0ZW4gZm9yIGFuIGFsaWFzIHN0aWxsIHNob3dzIHRoZSBtZXNzYWdlcy5cbiAqIEVhY2ggbWVzc2FnZSBwcmludHMgT05DRTogdW5kZXIgdGhlIGN1cnJlbnQgbmFtZXNwYWNlIHdoZW4gYSBmaWx0ZXIgZW5hYmxlcyBpdCwgb3RoZXJ3aXNlIHVuZGVyIHRoZSBmaXJzdCBhbGlhcyBhXG4gKiBmaWx0ZXIgZW5hYmxlcy4gUHJpbnRpbmcgdW5kZXIgZXZlcnkgZW5hYmxlZCBvbmUgd291bGQgZG91YmxlIGVhY2ggbWVzc2FnZSB1bmRlciB0aGUgbW9zdCBjb21tb24gZmlsdGVyIG9mIGFsbCxcbiAqIGA8cHJlZml4PipgLCB3aGljaCBlbmFibGVzIHRoZW0gYWxsLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIGRlYnVnZ2VyIGluc3RhbmNlIGZvciB0aGUgbGlicmFyeSAodW5kZXIgaXRzIGRlYnVnIG5hbWVzcGFjZSwgc2VlIGBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWJEZWJ1Z2dlcihuYW1lc3BhY2U6IHN0cmluZyk6IERlYnVnZ2VyIHtcbiAgY29uc3QgYWxpYXNlcyA9IExpYnJhcnkuZGVidWdOYW1lc3BhY2VBbGlhc2VzO1xuICBpZiAoYWxpYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZ2V0RGVidWdnZXIoYCR7TGlicmFyeS5kZWJ1Z1ByZWZpeE5hbWVzcGFjZX0ke0xpYnJhcnkuZGVidWdOYW1lc3BhY2V9OiR7bmFtZXNwYWNlfWApO1xuICB9XG5cbiAgLy8gRXZlcnkgZGVidWdnZXIgY29tZXMgZnJvbSB0aGUgc2hhcmVkIGNhY2hlIGBnZXREZWJ1Z2dlcmAga2VlcHMsIHNvIG9ubHkgdGhlIGNoZWFwIHByb3h5IGlzIG5ldyBvbiBlYWNoIGNhbGwsIGFuZCBhXG4gIC8vIHNweSBpbnN0YWxsZWQgb24gb25lIGNhbGwncyBgbG9nYCBpcyB0aGUgb25lIHRoZSBuZXh0IGNhbGwgcmVhY2hlcy5cbiAgY29uc3QgY3VycmVudERlYnVnZ2VyID0gZ2V0RGVidWdnZXIoYCR7TGlicmFyeS5kZWJ1Z1ByZWZpeE5hbWVzcGFjZX0ke0xpYnJhcnkuZGVidWdOYW1lc3BhY2V9OiR7bmFtZXNwYWNlfWAsIEFMSUFTX0ZSQU1FU19UT19TS0lQKTtcbiAgY29uc3QgYWxpYXNEZWJ1Z2dlcnMgPSBhbGlhc2VzLm1hcCgoYWxpYXMpID0+IGdldERlYnVnZ2VyKGAke0xpYnJhcnkuZGVidWdQcmVmaXhOYW1lc3BhY2V9JHthbGlhc306JHtuYW1lc3BhY2V9YCwgQUxJQVNfRlJBTUVTX1RPX1NLSVApKTtcbiAgY29uc3QgYWxsRGVidWdnZXJzID0gW2N1cnJlbnREZWJ1Z2dlciwgLi4uYWxpYXNEZWJ1Z2dlcnNdO1xuICByZXR1cm4gbmV3IFByb3h5KGN1cnJlbnREZWJ1Z2dlciwge1xuICAgIGFwcGx5KF90YXJnZXQsIF90aGlzQXJndW1lbnQsICRhcmd1bWVudHM6IFBhcmFtZXRlcnM8RGVidWdnZXI+KTogdm9pZCB7XG4gICAgICBhbGxEZWJ1Z2dlcnMuZmluZCgoZGVidWdnZXJJbnN0YW5jZSkgPT4gZGVidWdnZXJJbnN0YW5jZS5lbmFibGVkKT8uKC4uLiRhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKTogdW5rbm93biB7XG4gICAgICBpZiAocHJvcGVydHkgPT09ICdlbmFibGVkJykge1xuICAgICAgICByZXR1cm4gYWxsRGVidWdnZXJzLnNvbWUoKGRlYnVnZ2VySW5zdGFuY2UpID0+IGRlYnVnZ2VySW5zdGFuY2UuZW5hYmxlZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlOiB1bmtub3duID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZGVidWcgZmlsdGVyIGVuYWJsZXMgYSBuYW1lc3BhY2UuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBuYW1lc3BhY2UgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVidWdOYW1lc3BhY2VFbmFibGVkKG5hbWVzcGFjZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkuZW5hYmxlZChuYW1lc3BhY2UpO1xufVxuXG4vKipcbiAqIFByaW50cyBhIG1lc3NhZ2Ugd2l0aCBhIHN0YWNrIHRyYWNlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcHJpbnRpbmcgdGhlIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFdpdGhTdGFja1RyYWNlKHBhcmFtczogUHJpbnRXaXRoU3RhY2tUcmFjZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgJGFyZ3VtZW50cyxcbiAgICBkZWJ1Z2dlckluc3RhbmNlLFxuICAgIG1lc3NhZ2UsXG4gICAgc3RhY2tUcmFjZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIUxpYnJhcnkuc2hvdWxkUHJpbnRTdGFja1RyYWNlKSB7XG4gICAgZGVidWdnZXJJbnN0YW5jZShtZXNzYWdlLCAuLi4kYXJndW1lbnRzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWJ1Z2dlckluc3RhbmNlKG1lc3NhZ2UsIC4uLiRhcmd1bWVudHMsICdcXG5cXG4tLS1cXG5Db250ZXh0IHN0YWNrIHRyYWNlOlxcbicsIG1ha2VTdGFja1RyYWNlRXJyb3Ioc3RhY2tUcmFjZSkpO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlTmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KGdldE5hbWVzcGFjZXMoKSk7XG4gIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIHRvQXJyYXkobmFtZXNwYWNlcykpIHtcbiAgICBpZiAobmFtZXNwYWNlLnN0YXJ0c1dpdGgoTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5lZ2F0ZWROYW1lc3BhY2UgPSBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggKyBuYW1lc3BhY2U7XG4gICAgc2V0LmRlbGV0ZShuYW1lc3BhY2UpO1xuICAgIHNldC5hZGQobmVnYXRlZE5hbWVzcGFjZSk7XG4gIH1cbiAgc2V0TmFtZXNwYWNlcyhbLi4uc2V0XSk7XG59XG5cbmZ1bmN0aW9uIGVuYWJsZU5hbWVzcGFjZXMobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3Qgc2V0ID0gbmV3IFNldChnZXROYW1lc3BhY2VzKCkpO1xuICBmb3IgKGNvbnN0IG5hbWVzcGFjZSBvZiB0b0FycmF5KG5hbWVzcGFjZXMpKSB7XG4gICAgaWYgKCFuYW1lc3BhY2Uuc3RhcnRzV2l0aChORUdBVEVEX05BTUVTUEFDRV9QUkVGSVgpKSB7XG4gICAgICBjb25zdCBuZWdhdGVkTmFtZXNwYWNlID0gTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYICsgbmFtZXNwYWNlO1xuICAgICAgc2V0LmRlbGV0ZShuZWdhdGVkTmFtZXNwYWNlKTtcbiAgICB9XG4gICAgc2V0LmFkZChuYW1lc3BhY2UpO1xuICB9XG4gIHNldE5hbWVzcGFjZXMoWy4uLnNldF0pO1xufVxuXG5mdW5jdGlvbiBnZXROYW1lc3BhY2VzKCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHRvQXJyYXkoZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmxvYWQoKSA/PyAnJyk7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKTogdHlwZW9mIGRlYnVnIHtcbiAgcmV0dXJuIGdldFR5cGVzY3JpcHRMaWJTdGF0ZSgnZGVidWcnLCBkZWJ1ZykudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGxvZ1dpdGhDYWxsZXIocGFyYW1zOiBMb2dXaXRoQ2FsbGVyUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICAkYXJndW1lbnRzLFxuICAgIGZyYW1lc1RvU2tpcCxcbiAgICBtZXNzYWdlLFxuICAgIG5hbWVzcGFjZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIWlzRGVidWdOYW1lc3BhY2VFbmFibGVkKG5hbWVzcGFjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIUxpYnJhcnkuc2hvdWxkUHJpbnRTdGFja1RyYWNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gVmFsaWQgdXNhZ2UuXG4gICAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi4kYXJndW1lbnRzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNhbGxlciBpcyAzIGZyYW1lcyBhYm92ZSB0aGlzIG9uZSwgYmVjYXVzZSB0aGUgY2FsbCBzdGFjayBpcyBhcyBmb2xsb3dzOlxuICAgKlxuICAgKiAwOiBsb2dXaXRoQ2FsbGVyXG4gICAqIDE6IGRlYnVnSW5zdGFuY2UubG9nXG4gICAqIDI6IGRlYnVnXG4gICAqIDM6IGZ1bmN0aW9uTmFtZSAodGhlIGNhbGxlcilcbiAgICpcbiAgICogYGdldFN0YWNrVHJhY2VgIGRyb3BzIGl0cyBvd24gZnJhbWUgYW5kLCBvbiBhbiBlbmdpbmUgdGhhdCB3cml0ZXMgb25lLCB0aGUgYEVycm9yYCBoZWFkZXIgbGluZS5cbiAgICovXG4gIGNvbnN0IENBTExFUl9GUkFNRV9JTkRFWCA9IDM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gVmFsaWQgdXNhZ2UuXG4gIGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uJGFyZ3VtZW50cywgJ1xcblxcbi0tLVxcbkxvZ2dlciBzdGFjayB0cmFjZTpcXG4nLCBtYWtlU3RhY2tUcmFjZUVycm9yKGdldFN0YWNrVHJhY2UoQ0FMTEVSX0ZSQU1FX0lOREVYICsgZnJhbWVzVG9Ta2lwKSkpO1xufVxuXG5mdW5jdGlvbiBtYWtlU3RhY2tUcmFjZUVycm9yKHN0YWNrVHJhY2U6IHN0cmluZyk6IEN1c3RvbVN0YWNrVHJhY2VFcnJvciB7XG4gIHJldHVybiBuZXcgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKHtcbiAgICBjYXVzZTogdW5kZWZpbmVkLFxuICAgIG1lc3NhZ2U6IGBEZWJ1ZyBtb2RlOiBpbnRlbnRpb25hbCBwbGFjZWhvbGRlciBlcnJvci4ke2Zvcm1hdERlYnVnR3VpZGVSZWZlcmVuY2UoKX1gLFxuICAgIHN0YWNrVHJhY2VcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZXMgLSBUaGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKi9cbmZ1bmN0aW9uIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZSh0b0FycmF5KG5hbWVzcGFjZXMpLmpvaW4oTkFNRVNQQUNFX1NFUEFSQVRPUikpO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gdHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcy5zcGxpdChOQU1FU1BBQ0VfU0VQQVJBVE9SKS5maWx0ZXIoQm9vbGVhbikgOiBuYW1lc3BhY2VzLmZsYXRN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
@@ -61,14 +61,14 @@ export interface ZipExtractionFileSystem {
61
61
  * @param options - The {@link ZipExtractionMkdirOptions}.
62
62
  * @returns The first directory created, if any.
63
63
  */
64
- mkdirSync: (path: string, options: ZipExtractionMkdirOptions) => string | undefined;
64
+ readonly mkdirSync: (path: string, options: ZipExtractionMkdirOptions) => string | undefined;
65
65
  /**
66
66
  * Writes a file, overwriting it if it exists.
67
67
  *
68
68
  * @param path - The file to write.
69
69
  * @param data - The bytes to write.
70
70
  */
71
- writeFileSync: (path: string, data: Buffer) => void;
71
+ readonly writeFileSync: (path: string, data: Buffer) => void;
72
72
  }
73
73
  /**
74
74
  * The options {@link ZipExtractionFileSystem.mkdirSync} is always called with.
@@ -133,4 +133,4 @@ function readEntryData(archive, entry) {
133
133
  export {
134
134
  extractZipArchive
135
135
  };
136
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rlc2t0b3AtemlwLWV4dHJhY3Rvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV4dHJhY3RzIGEgWklQIGFyY2hpdmUgdG8gZGlzayB1c2luZyBvbmx5IE5vZGUncyBgemxpYmAgXHUyMDE0IHdpdGggbm8gdGhpcmQtcGFydHkgdW56aXAgZGVwZW5kZW5jeS5cbiAqXG4gKiBJdCBleGlzdHMgZm9yIG9uZSBtZWFzdXJlZCByZWFzb24uIFRoZSBkZXBlbmRlbmN5IGl0IHJlcGxhY2VkIG9uIHRoaXMgcGF0aCwgYGFkbS16aXBgLCBidW5kbGVkXG4gKiByb3VnaGx5IDM0IEtCIG9mIG1pbmlmaWVkIEphdmFTY3JpcHQgaW50byBFVkVSWSBPYnNpZGlhbiBwbHVnaW4gYnVpbHQgd2l0aCB0aGlzIGxpYnJhcnk6IGEgcGx1Z2luXG4gKiBzaGlwcyBhIHNpbmdsZSBDSlMgYG1haW4uanNgLCBlc2J1aWxkIGhhcyBubyBjb2RlIHNwbGl0dGluZyB0byBwdXQgYSBkZXBlbmRlbmN5IGJlaGluZCwgYW5kIGFcbiAqIGBhd2FpdCBpbXBvcnQoKWAgb25seSBkZWZlcnMgZXZhbHVhdGlvbiBcdTIwMTQgdGhlIG1vZHVsZSBib2R5IGlzIGlubGluZWQgZWl0aGVyIHdheS4gYG5vZGU6emxpYmAgaXNcbiAqIGFscmVhZHkgYW4gZXNidWlsZCBleHRlcm5hbCwgc28gdGhlIHNhbWUgd29yayBub3cgY29zdHMgYSBwbHVnaW4gYnVuZGxlIG5vdGhpbmcgYXQgYWxsLiBBcmNoaXZlcyBhcmVcbiAqIFdSSVRURU4gd2l0aCBgZmZsYXRlYCBhdCByZWxlYXNlIHRpbWUgKGBzY3JpcHQtdXRpbHMvZGVtby12YXVsdC50c2ApLCB3aGljaCBpcyBOb2RlLXNpZGUgdG9vbGluZyBhbmRcbiAqIG5ldmVyIHJlYWNoZXMgYSBwbHVnaW4gYnVuZGxlIFx1MjAxNCBhIHRoaXJkLXBhcnR5IHdyaXRlciB0aGVyZSBpcyBhbHNvIHdoYXQga2VlcHMgdGhpcyByZWFkZXIgY2hlY2tlZFxuICogYWdhaW5zdCBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG5vdCBpdHMgb3duLlxuICpcbiAqIERlbGliZXJhdGVseSBuYXJyb3c6IGl0IHJlYWRzIGV4YWN0bHkgd2hhdCB0aGF0IHdyaXRlciBwcm9kdWNlcyBcdTIwMTQgc3RvcmVkIGFuZCBkZWZsYXRlZCBlbnRyaWVzIGluIGFuXG4gKiB1bmVuY3J5cHRlZCBhcmNoaXZlIGJlbG93IHRoZSA0IEdCIC8gNjU1MzUtZW50cnkgWklQNjQgdGhyZXNob2xkIFx1MjAxNCBhbmQgcmFpc2VzIGEgbmFtZWQgZXJyb3IgZm9yXG4gKiBhbnl0aGluZyBlbHNlIHJhdGhlciB0aGFuIGd1ZXNzaW5nIGF0IGl0LiBTaXplcyBhbmQgb2Zmc2V0cyBhcmUgdGFrZW4gZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnksXG4gKiB3aGljaCBpcyBhdXRob3JpdGF0aXZlIGV2ZW4gZm9yIGFyY2hpdmVzIHdyaXR0ZW4gd2l0aCBkYXRhIGRlc2NyaXB0b3JzLlxuICpcbiAqIFRoZSBgbm9kZTpgIGltcG9ydHMgYmVsb3cgYXJlIHNhZmUgdG8gbWVyZWx5IEVWQUxVQVRFIG9uIG1vYmlsZSBcdTIwMTQgYHJlcXVpcmVgIGhhbmRzIGJhY2sgYHVuZGVmaW5lZGBcbiAqIHRoZXJlIGFuZCBub3RoaW5nIHJlYWRzIGl0IGF0IGxvYWQgdGltZSBcdTIwMTQgc28gdGhpcyBtb2R1bGUgY2FuIHNpdCBpbiB0aGUgZ2VuZXJhdGVkIGJhcnJlbHMgd2l0aG91dFxuICogYnJlYWtpbmcgdGhlIGxpYnJhcnkncyBsb2FkIG9uIEFuZHJvaWQuIE9ubHkgdGhlIGNhbGxzIGFyZSBkZXNrdG9wLW9ubHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5cbmltcG9ydCB7IGluZmxhdGVSYXdTeW5jIH0gZnJvbSAnbm9kZTp6bGliJztcblxuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pblxufSBmcm9tICcuL3BhdGgudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleHRyYWN0WmlwQXJjaGl2ZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdFppcEFyY2hpdmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdmU6IEJ1ZmZlcjtcblxuICAvKipcbiAgICogVGhlIGZpbGUtc3lzdGVtIGltcGxlbWVudGF0aW9uIHRoZSBleHRyYWN0ZWQgZW50cmllcyBhcmUgd3JpdHRlbiB3aXRoLlxuICAgKlxuICAgKiBJbmplY3RlZCByYXRoZXIgdGhhbiBpbXBvcnRlZCBzbyB0aGUgY2FsbGVyIGNob29zZXMgd2hpY2ggYGZzYCB3cml0ZXMgdGhlIGZpbGVzLiBUaGUgZGVtby12YXVsdFxuICAgKiBvcGVuZXIgaGFuZHMgb3ZlciBFbGVjdHJvbidzIGBvcmlnaW5hbC1mc2AgKHNlZSB7QGxpbmsgWmlwRXh0cmFjdGlvbkZpbGVTeXN0ZW19KS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVTeXN0ZW06IFppcEV4dHJhY3Rpb25GaWxlU3lzdGVtO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIGV4dHJhY3QgaW50by4gQ3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldERpcmVjdG9yeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBgbm9kZTpmc2AgZXh0cmFjdGlvbiBuZWVkcy5cbiAqXG4gKiBPbmx5IHRoZSB0d28gV1JJVElORyBjYWxscyBhcmUgcmVxdWlyZWQsIGFuZCB0aGF0IGlzIGRlbGliZXJhdGU6IEVsZWN0cm9uJ3MgYXNhciBsYXllciBpbnRlcmNlcHRzXG4gKiBgZnNgIFJFQURTIChhbmQgYGV4aXN0c1N5bmNgKSBvbiBhbnkgcGF0aCBjb250YWluaW5nIGAuYXNhcmAsIHdoaWNoIGEgZGVtbyB2YXVsdCBtYXkgbGVnaXRpbWF0ZWx5XG4gKiBzaGlwIGFzIGEgcGxhaW4gZmlsZS4gTmV2ZXIgcHJvYmluZyB0aGUgdGFyZ2V0IHdpdGggYSByZWFkIGtlZXBzIHRoYXQgaW50ZXJjZXB0aW9uIG91dCBvZiB0aGVcbiAqIHBpY3R1cmUgZW50aXJlbHksIGFuZCBhIGNhbGxlciB0aGF0IGhhbmRzIG92ZXIgRWxlY3Ryb24ncyBgb3JpZ2luYWwtZnNgIGlzIHNhZmUgZXZlbiBmcm9tIHRoZVxuICogd3JpdGUgc2lkZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgYW55IG1pc3NpbmcgcGFyZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgZGlyZWN0b3J5IHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFppcEV4dHJhY3Rpb25Na2Rpck9wdGlvbnN9LlxuICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgZGlyZWN0b3J5IGNyZWF0ZWQsIGlmIGFueS5cbiAgICovXG4gIG1rZGlyU3luYzogKHBhdGg6IHN0cmluZywgb3B0aW9uczogWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9ucykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXcml0ZXMgYSBmaWxlLCBvdmVyd3JpdGluZyBpdCBpZiBpdCBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVGhlIGZpbGUgdG8gd3JpdGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGJ5dGVzIHRvIHdyaXRlLlxuICAgKi9cbiAgd3JpdGVGaWxlU3luYzogKHBhdGg6IHN0cmluZywgZGF0YTogQnVmZmVyKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpb25zIHtAbGluayBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbS5ta2RpclN5bmN9IGlzIGFsd2F5cyBjYWxsZWQgd2l0aC5cbiAqXG4gKiBFeHRyYWN0aW9uIG5ldmVyIHByb2JlcyBmb3IgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBzbyBldmVyeSBjYWxsIGhhcyB0byBjcmVhdGUgdGhlIG1pc3NpbmcgcGFyZW50c1xuICogaXRzZWxmIGFuZCB0b2xlcmF0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzIGFscmVhZHkgdGhlcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbHdheXMgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjdXJzaXZlOiB0cnVlO1xufVxuXG5pbnRlcmZhY2UgWmlwRW50cnkge1xuICByZWFkb25seSBjb21wcmVzc2VkU2l6ZTogbnVtYmVyO1xuICByZWFkb25seSBjb21wcmVzc2lvbk1ldGhvZDogbnVtYmVyO1xuICByZWFkb25seSBsb2NhbEhlYWRlck9mZnNldDogbnVtYmVyO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVORF9PRl9DRU5UUkFMX0RJUkVDVE9SWV9TSUdOQVRVUkUgPSAweDA2XzA1XzRCXzUwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJR05BVFVSRSA9IDB4MDJfMDFfNEJfNTA7XG5jb25zdCBMT0NBTF9GSUxFX0hFQURFUl9TSUdOQVRVUkUgPSAweDA0XzAzXzRCXzUwO1xuXG5jb25zdCBFTkRfT0ZfQ0VOVFJBTF9ESVJFQ1RPUllfU0laRSA9IDIyO1xuY29uc3QgTUFYX0FSQ0hJVkVfQ09NTUVOVF9MRU5HVEggPSA2NV81MzU7XG5cbi8vIEEgY291bnQgb3Igb2Zmc2V0IHNhdHVyYXRlZCB0byBhbGwtb25lcyBtZWFucyB0aGUgcmVhbCB2YWx1ZSBsaXZlcyBpbiBhIFpJUDY0IHJlY29yZCB0aGlzIHJlYWRlclxuLy8gZG9lcyBub3QgaW1wbGVtZW50LCBzbyB0aGUgZmllbGQgbXVzdCBuZXZlciBiZSByZWFkIGF0IGZhY2UgdmFsdWUuXG5jb25zdCBTQVRVUkFURURfVUlOVF8xNiA9IDY1XzUzNTtcbmNvbnN0IFNBVFVSQVRFRF9VSU5UXzMyID0gNF8yOTRfOTY3XzI5NTtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gdGhlIGVuZC1vZi1jZW50cmFsLWRpcmVjdG9yeSByZWNvcmQuXG5jb25zdCBBUkNISVZFX0VOVFJZX0NPVU5UX09GRlNFVCA9IDEwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfU1RBUlRfT0ZGU0VUID0gMTY7XG5cbi8vIEZpZWxkIG9mZnNldHMgd2l0aGluIGEgY2VudHJhbC1kaXJlY3RvcnkgaGVhZGVyLlxuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfRkxBR1NfT0ZGU0VUID0gODtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTSU9OX01FVEhPRF9PRkZTRVQgPSAxMDtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTRURfU0laRV9PRkZTRVQgPSAyMDtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX05BTUVfTEVOR1RIX09GRlNFVCA9IDI4O1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfRVhUUkFfTEVOR1RIX09GRlNFVCA9IDMwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfQ09NTUVOVF9MRU5HVEhfT0ZGU0VUID0gMzI7XG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9MT0NBTF9IRUFERVJfT0ZGU0VUX09GRlNFVCA9IDQyO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJWkUgPSA0NjtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gYSBsb2NhbCBmaWxlIGhlYWRlci5cbmNvbnN0IExPQ0FMX0hFQURFUl9OQU1FX0xFTkdUSF9PRkZTRVQgPSAyNjtcbmNvbnN0IExPQ0FMX0hFQURFUl9FWFRSQV9MRU5HVEhfT0ZGU0VUID0gMjg7XG5jb25zdCBMT0NBTF9IRUFERVJfU0laRSA9IDMwO1xuXG5jb25zdCBDT01QUkVTU0lPTl9NRVRIT0RfU1RPUkVEID0gMDtcbmNvbnN0IENPTVBSRVNTSU9OX01FVEhPRF9ERUZMQVRFRCA9IDg7XG5cbi8vIEJpdCAwIG9mIHRoZSBnZW5lcmFsLXB1cnBvc2UgZmxhZ3MgbWFya3MgYW4gZW5jcnlwdGVkIGVudHJ5LCBhbmQgaXQgaXMgdGhlIGxvd2VzdCBiaXQgXHUyMDE0IHNvIHRoZVxuLy8gcmVtYWluZGVyIHRlc3RzIGl0IHdpdGhvdXQgcmVhY2hpbmcgZm9yIGEgYml0d2lzZSBvcGVyYXRvci5cbmNvbnN0IEVOQ1JZUFRFRF9GTEFHX0RJVklTT1IgPSAyO1xuXG5jb25zdCBFTlRSWV9OQU1FX1NFUEFSQVRPUiA9ICcvJztcbmNvbnN0IFdJTkRPV1NfRFJJVkVfUFJFRklYX1JFR19FWFAgPSAvXltBLVphLXpdOi87XG5cbi8qKlxuICogRXh0cmFjdHMgZXZlcnkgZW50cnkgb2YgYSBaSVAgYXJjaGl2ZSBpbnRvIGEgZGlyZWN0b3J5LlxuICpcbiAqIERpcmVjdG9yeSBlbnRyaWVzIGJlY29tZSBkaXJlY3RvcmllczsgYSBmaWxlIGVudHJ5J3MgcGFyZW50cyBhcmUgY3JlYXRlZCB3aGV0aGVyIG9yIG5vdCB0aGUgYXJjaGl2ZVxuICogZGVjbGFyZWQgdGhlbS4gQW4gZW50cnkgd2hvc2UgbmFtZSB3b3VsZCBlc2NhcGUge0BsaW5rIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zLnRhcmdldERpcmVjdG9yeX0gaXNcbiAqIHJlZnVzZWQgcmF0aGVyIHRoYW4gd3JpdHRlbiAodGhlIFwiemlwIHNsaXBcIiB0cmF2ZXJzYWwpLCBhcyBpcyBhbiBlbmNyeXB0ZWQsIFpJUDY0LCBvclxuICogdW5rbm93bi1jb21wcmVzc2lvbiBhcmNoaXZlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zfS5cbiAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBuYW1pbmcgdGhlIHJlYXNvbiB3aGVuIHRoZSBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIGFzIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0WmlwQXJjaGl2ZShwYXJhbXM6IEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBhcmNoaXZlLFxuICAgIGZpbGVTeXN0ZW0sXG4gICAgdGFyZ2V0RGlyZWN0b3J5XG4gIH0gPSBwYXJhbXM7XG5cbiAgZmlsZVN5c3RlbS5ta2RpclN5bmModGFyZ2V0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRDZW50cmFsRGlyZWN0b3J5KGFyY2hpdmUpKSB7XG4gICAgYXNzZXJ0U2FmZUVudHJ5TmFtZShlbnRyeS5uYW1lKTtcblxuICAgIGlmIChlbnRyeS5uYW1lLmVuZHNXaXRoKEVOVFJZX05BTUVfU0VQQVJBVE9SKSkge1xuICAgICAgLy8gTmFtZWQgd2l0aG91dCBpdHMgdHJhaWxpbmcgc2VwYXJhdG9yLCBzbyB0aGUgY3JlYXRlZCBwYXRoIHJlYWRzIHRoZSBzYW1lIGFzIGV2ZXJ5IG90aGVyIG9uZS5cbiAgICAgIGZpbGVTeXN0ZW0ubWtkaXJTeW5jKGpvaW4odGFyZ2V0RGlyZWN0b3J5LCBlbnRyeS5uYW1lLnNsaWNlKDAsIC0xKSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlQYXRoID0gam9pbih0YXJnZXREaXJlY3RvcnksIGVudHJ5Lm5hbWUpO1xuICAgIGZpbGVTeXN0ZW0ubWtkaXJTeW5jKGRpcm5hbWUoZW50cnlQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZmlsZVN5c3RlbS53cml0ZUZpbGVTeW5jKGVudHJ5UGF0aCwgcmVhZEVudHJ5RGF0YShhcmNoaXZlLCBlbnRyeSkpO1xuICB9XG59XG5cbi8qKlxuICogUmVmdXNlcyBhbiBlbnRyeSBuYW1lIHRoYXQgd291bGQgcGxhY2UgdGhlIGV4dHJhY3RlZCBmaWxlIG91dHNpZGUgdGhlIHRhcmdldCBkaXJlY3RvcnkuXG4gKlxuICogQW4gYXJjaGl2ZSBpcyB1bnRydXN0ZWQgaW5wdXQgZXZlbiB3aGVuIHdlIHB1Ymxpc2hlZCBpdCBvdXJzZWx2ZXMsIGFuZCBldmVyeSBvbmUgb2YgdGhlc2Ugc2hhcGVzXG4gKiBlc2NhcGVzIHRoZSB0YXJnZXQ6IGFuIGFic29sdXRlIFBPU0lYIHBhdGgsIGEgV2luZG93cyBkcml2ZS1xdWFsaWZpZWQgcGF0aCwgYSBiYWNrc2xhc2ggKHdoaWNoIHRoZVxuICogWklQIHNwZWNpZmljYXRpb24gZm9yYmlkcyBhcyBhIHNlcGFyYXRvciwgc28gaXRzIG9ubHkgdXNlIGhlcmUgaXMgdG8gc211Z2dsZSBvbmUgcGFzdCBhXG4gKiBmb3J3YXJkLXNsYXNoIGNoZWNrKSwgYW5kIGEgYC4uYCBzZWdtZW50LlxuICpcbiAqIEBwYXJhbSBlbnRyeU5hbWUgLSBUaGUgZW50cnkgbmFtZSBhcyByZWNvcmRlZCBpbiB0aGUgYXJjaGl2ZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0U2FmZUVudHJ5TmFtZShlbnRyeU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZW50cnlOYW1lLnN0YXJ0c1dpdGgoRU5UUllfTkFNRV9TRVBBUkFUT1IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBhYnNvbHV0ZSBhcmNoaXZlIGVudHJ5ICcke2VudHJ5TmFtZX0nLmApO1xuICB9XG5cbiAgaWYgKFdJTkRPV1NfRFJJVkVfUFJFRklYX1JFR19FWFAudGVzdChlbnRyeU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBkcml2ZS1xdWFsaWZpZWQgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jy5gKTtcbiAgfVxuXG4gIGlmIChlbnRyeU5hbWUuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVmdXNpbmcgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jywgd2hpY2ggdXNlcyBhIGJhY2tzbGFzaCBzZXBhcmF0b3IuYCk7XG4gIH1cblxuICBpZiAoZW50cnlOYW1lLnNwbGl0KEVOVFJZX05BTUVfU0VQQVJBVE9SKS5pbmNsdWRlcygnLi4nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVmdXNpbmcgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jywgd2hpY2ggcG9pbnRzIG91dHNpZGUgdGhlIHRhcmdldCBkaXJlY3RvcnkuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2NhdGVzIHRoZSBlbmQtb2YtY2VudHJhbC1kaXJlY3RvcnkgcmVjb3JkIGFuZCByZXR1cm5zIGl0cyBvZmZzZXQuXG4gKlxuICogVGhlIHJlY29yZCBzaXRzIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYXJjaGl2ZSB1bmxlc3MgYSB0cmFpbGluZyBjb21tZW50IGZvbGxvd3MgaXQsIHNvIGl0IGlzIGZvdW5kXG4gKiBieSBzY2FubmluZyBiYWNrd2FyZHMgb3ZlciB0aGUgY29tbWVudCdzIG1heGltdW0gbGVuZ3RoIHJhdGhlciB0aGFuIGFzc3VtZWQgdG8gYmUgYXQgYSBmaXhlZCBwbGFjZS5cbiAqXG4gKiBAcGFyYW0gYXJjaGl2ZSAtIFRoZSByYXcgWklQIGFyY2hpdmUgYnl0ZXMuXG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkJ3Mgb2Zmc2V0LlxuICovXG5mdW5jdGlvbiBmaW5kRW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0KGFyY2hpdmU6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGNvbnN0IGxhc3RQb3NzaWJsZU9mZnNldCA9IGFyY2hpdmUubGVuZ3RoIC0gRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJWkU7XG4gIGNvbnN0IGZpcnN0UG9zc2libGVPZmZzZXQgPSBNYXRoLm1heCgwLCBsYXN0UG9zc2libGVPZmZzZXQgLSBNQVhfQVJDSElWRV9DT01NRU5UX0xFTkdUSCk7XG5cbiAgZm9yIChsZXQgb2Zmc2V0ID0gbGFzdFBvc3NpYmxlT2Zmc2V0OyBvZmZzZXQgPj0gZmlyc3RQb3NzaWJsZU9mZnNldDsgb2Zmc2V0LS0pIHtcbiAgICBpZiAoYXJjaGl2ZS5yZWFkVUludDMyTEUob2Zmc2V0KSA9PT0gRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJR05BVFVSRSkge1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmNoaXZlIGlzIG5vdCBhIFpJUCBmaWxlOiBpdHMgZW5kLW9mLWNlbnRyYWwtZGlyZWN0b3J5IHJlY29yZCBpcyBtaXNzaW5nLicpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjZW50cmFsIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIGFyY2hpdmUncyBhdXRob3JpdGF0aXZlIGluZGV4IG9mIGl0cyBlbnRyaWVzLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEByZXR1cm5zIE9uZSB7QGxpbmsgWmlwRW50cnl9IHBlciBlbnRyeSwgaW4gdGhlIG9yZGVyIHRoZSBhcmNoaXZlIGxpc3RzIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIHJlYWRDZW50cmFsRGlyZWN0b3J5KGFyY2hpdmU6IEJ1ZmZlcik6IFppcEVudHJ5W10ge1xuICBjb25zdCBlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgPSBmaW5kRW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0KGFyY2hpdmUpO1xuICBjb25zdCBlbnRyeUNvdW50ID0gYXJjaGl2ZS5yZWFkVUludDE2TEUoZW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0ICsgQVJDSElWRV9FTlRSWV9DT1VOVF9PRkZTRVQpO1xuICBsZXQgZW50cnlPZmZzZXQgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9TVEFSVF9PRkZTRVQpO1xuXG4gIGlmIChlbnRyeUNvdW50ID09PSBTQVRVUkFURURfVUlOVF8xNiB8fCBlbnRyeU9mZnNldCA9PT0gU0FUVVJBVEVEX1VJTlRfMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1pJUDY0IGFyY2hpdmVzIGFyZSBub3Qgc3VwcG9ydGVkLicpO1xuICB9XG5cbiAgY29uc3QgZW50cmllczogWmlwRW50cnlbXSA9IFtdO1xuICBmb3IgKGxldCBlbnRyeUluZGV4ID0gMDsgZW50cnlJbmRleCA8IGVudHJ5Q291bnQ7IGVudHJ5SW5kZXgrKykge1xuICAgIGlmIChhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCkgIT09IENFTlRSQUxfRElSRUNUT1JZX0hFQURFUl9TSUdOQVRVUkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUncyBjZW50cmFsIGRpcmVjdG9yeSBpcyBjb3JydXB0IGF0IGVudHJ5ICR7U3RyaW5nKGVudHJ5SW5kZXgpfS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBmbGFncyA9IGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfRkxBR1NfT0ZGU0VUKTtcbiAgICBpZiAoZmxhZ3MgJSBFTkNSWVBURURfRkxBR19ESVZJU09SID09PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY3J5cHRlZCBaSVAgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcHJlc3NlZFNpemUgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCArIENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTRURfU0laRV9PRkZTRVQpO1xuICAgIGNvbnN0IGxvY2FsSGVhZGVyT2Zmc2V0ID0gYXJjaGl2ZS5yZWFkVUludDMyTEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9MT0NBTF9IRUFERVJfT0ZGU0VUX09GRlNFVCk7XG4gICAgaWYgKGNvbXByZXNzZWRTaXplID09PSBTQVRVUkFURURfVUlOVF8zMiB8fCBsb2NhbEhlYWRlck9mZnNldCA9PT0gU0FUVVJBVEVEX1VJTlRfMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWklQNjQgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUxlbmd0aCA9IGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfTkFNRV9MRU5HVEhfT0ZGU0VUKTtcbiAgICBjb25zdCBuYW1lT2Zmc2V0ID0gZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9IRUFERVJfU0laRTtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgY29tcHJlc3NlZFNpemUsXG4gICAgICBjb21wcmVzc2lvbk1ldGhvZDogYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9DT01QUkVTU0lPTl9NRVRIT0RfT0ZGU0VUKSxcbiAgICAgIGxvY2FsSGVhZGVyT2Zmc2V0LFxuICAgICAgbmFtZTogYXJjaGl2ZS50b1N0cmluZygndXRmLTgnLCBuYW1lT2Zmc2V0LCBuYW1lT2Zmc2V0ICsgbmFtZUxlbmd0aClcbiAgICB9KTtcblxuICAgIGVudHJ5T2Zmc2V0ID0gbmFtZU9mZnNldFxuICAgICAgKyBuYW1lTGVuZ3RoXG4gICAgICArIGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfRVhUUkFfTEVOR1RIX09GRlNFVClcbiAgICAgICsgYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9DT01NRU5UX0xFTkdUSF9PRkZTRVQpO1xuICB9XG5cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5cbi8qKlxuICogUmVhZHMgYW5kIGRlY29tcHJlc3NlcyBvbmUgZW50cnkncyBieXRlcy5cbiAqXG4gKiBUaGUgZGF0YSdzIHN0YXJ0IGlzIGNvbXB1dGVkIGZyb20gdGhlIExPQ0FMIGhlYWRlciByYXRoZXIgdGhhbiB0aGUgY2VudHJhbCBvbmU6IHRoZSB0d28gY2FycnlcbiAqIGluZGVwZW5kZW50IG5hbWUgYW5kIGV4dHJhLWZpZWxkIGxlbmd0aHMsIGFuZCBvbmx5IHRoZSBsb2NhbCBwYWlyIGRlc2NyaWJlcyB3aGVyZSB0aGUgYnl0ZXNcbiAqIGFjdHVhbGx5IGJlZ2luLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeSwgYXMgcmVhZCBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeS5cbiAqIEByZXR1cm5zIFRoZSBlbnRyeSdzIHVuY29tcHJlc3NlZCBjb250ZW50LlxuICovXG5mdW5jdGlvbiByZWFkRW50cnlEYXRhKGFyY2hpdmU6IEJ1ZmZlciwgZW50cnk6IFppcEVudHJ5KTogQnVmZmVyIHtcbiAgaWYgKGFyY2hpdmUucmVhZFVJbnQzMkxFKGVudHJ5LmxvY2FsSGVhZGVyT2Zmc2V0KSAhPT0gTE9DQUxfRklMRV9IRUFERVJfU0lHTkFUVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeS5uYW1lfScgaGFzIGEgY29ycnVwdCBsb2NhbCBoZWFkZXIuYCk7XG4gIH1cblxuICBjb25zdCBkYXRhT2Zmc2V0ID0gZW50cnkubG9jYWxIZWFkZXJPZmZzZXRcbiAgICArIExPQ0FMX0hFQURFUl9TSVpFXG4gICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeS5sb2NhbEhlYWRlck9mZnNldCArIExPQ0FMX0hFQURFUl9OQU1FX0xFTkdUSF9PRkZTRVQpXG4gICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeS5sb2NhbEhlYWRlck9mZnNldCArIExPQ0FMX0hFQURFUl9FWFRSQV9MRU5HVEhfT0ZGU0VUKTtcbiAgY29uc3QgZGF0YUVuZCA9IGRhdGFPZmZzZXQgKyBlbnRyeS5jb21wcmVzc2VkU2l6ZTtcbiAgaWYgKGRhdGFFbmQgPiBhcmNoaXZlLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUgaXMgdHJ1bmNhdGVkOiBlbnRyeSAnJHtlbnRyeS5uYW1lfScgcnVucyBwYXN0IGl0cyBlbmQuYCk7XG4gIH1cblxuICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IGFyY2hpdmUuc3ViYXJyYXkoZGF0YU9mZnNldCwgZGF0YUVuZCk7XG4gIHN3aXRjaCAoZW50cnkuY29tcHJlc3Npb25NZXRob2QpIHtcbiAgICBjYXNlIENPTVBSRVNTSU9OX01FVEhPRF9ERUZMQVRFRDoge1xuICAgICAgcmV0dXJuIGluZmxhdGVSYXdTeW5jKGNvbXByZXNzZWREYXRhKTtcbiAgICB9XG4gICAgY2FzZSBDT01QUkVTU0lPTl9NRVRIT0RfU1RPUkVEOiB7XG4gICAgICByZXR1cm4gY29tcHJlc3NlZERhdGE7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUgZW50cnkgJyR7ZW50cnkubmFtZX0nIHVzZXMgdW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gbWV0aG9kICR7U3RyaW5nKGVudHJ5LmNvbXByZXNzaW9uTWV0aG9kKX0uYCk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQTBCQSxTQUFTLHNCQUFzQjtBQUUvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXlFUCxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLDhCQUE4QjtBQUVwQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLDZCQUE2QjtBQUluQyxNQUFNLG9CQUFvQjtBQUMxQixNQUFNLG9CQUFvQjtBQUcxQixNQUFNLDZCQUE2QjtBQUNuQyxNQUFNLGlDQUFpQztBQUd2QyxNQUFNLGlDQUFpQztBQUN2QyxNQUFNLDhDQUE4QztBQUNwRCxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLHVDQUF1QztBQUM3QyxNQUFNLHdDQUF3QztBQUM5QyxNQUFNLDBDQUEwQztBQUNoRCxNQUFNLCtD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
136
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rlc2t0b3AtemlwLWV4dHJhY3Rvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV4dHJhY3RzIGEgWklQIGFyY2hpdmUgdG8gZGlzayB1c2luZyBvbmx5IE5vZGUncyBgemxpYmAgXHUyMDE0IHdpdGggbm8gdGhpcmQtcGFydHkgdW56aXAgZGVwZW5kZW5jeS5cbiAqXG4gKiBJdCBleGlzdHMgZm9yIG9uZSBtZWFzdXJlZCByZWFzb24uIFRoZSBkZXBlbmRlbmN5IGl0IHJlcGxhY2VkIG9uIHRoaXMgcGF0aCwgYGFkbS16aXBgLCBidW5kbGVkXG4gKiByb3VnaGx5IDM0IEtCIG9mIG1pbmlmaWVkIEphdmFTY3JpcHQgaW50byBFVkVSWSBPYnNpZGlhbiBwbHVnaW4gYnVpbHQgd2l0aCB0aGlzIGxpYnJhcnk6IGEgcGx1Z2luXG4gKiBzaGlwcyBhIHNpbmdsZSBDSlMgYG1haW4uanNgLCBlc2J1aWxkIGhhcyBubyBjb2RlIHNwbGl0dGluZyB0byBwdXQgYSBkZXBlbmRlbmN5IGJlaGluZCwgYW5kIGFcbiAqIGBhd2FpdCBpbXBvcnQoKWAgb25seSBkZWZlcnMgZXZhbHVhdGlvbiBcdTIwMTQgdGhlIG1vZHVsZSBib2R5IGlzIGlubGluZWQgZWl0aGVyIHdheS4gYG5vZGU6emxpYmAgaXNcbiAqIGFscmVhZHkgYW4gZXNidWlsZCBleHRlcm5hbCwgc28gdGhlIHNhbWUgd29yayBub3cgY29zdHMgYSBwbHVnaW4gYnVuZGxlIG5vdGhpbmcgYXQgYWxsLiBBcmNoaXZlcyBhcmVcbiAqIFdSSVRURU4gd2l0aCBgZmZsYXRlYCBhdCByZWxlYXNlIHRpbWUgKGBzY3JpcHQtdXRpbHMvZGVtby12YXVsdC50c2ApLCB3aGljaCBpcyBOb2RlLXNpZGUgdG9vbGluZyBhbmRcbiAqIG5ldmVyIHJlYWNoZXMgYSBwbHVnaW4gYnVuZGxlIFx1MjAxNCBhIHRoaXJkLXBhcnR5IHdyaXRlciB0aGVyZSBpcyBhbHNvIHdoYXQga2VlcHMgdGhpcyByZWFkZXIgY2hlY2tlZFxuICogYWdhaW5zdCBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG5vdCBpdHMgb3duLlxuICpcbiAqIERlbGliZXJhdGVseSBuYXJyb3c6IGl0IHJlYWRzIGV4YWN0bHkgd2hhdCB0aGF0IHdyaXRlciBwcm9kdWNlcyBcdTIwMTQgc3RvcmVkIGFuZCBkZWZsYXRlZCBlbnRyaWVzIGluIGFuXG4gKiB1bmVuY3J5cHRlZCBhcmNoaXZlIGJlbG93IHRoZSA0IEdCIC8gNjU1MzUtZW50cnkgWklQNjQgdGhyZXNob2xkIFx1MjAxNCBhbmQgcmFpc2VzIGEgbmFtZWQgZXJyb3IgZm9yXG4gKiBhbnl0aGluZyBlbHNlIHJhdGhlciB0aGFuIGd1ZXNzaW5nIGF0IGl0LiBTaXplcyBhbmQgb2Zmc2V0cyBhcmUgdGFrZW4gZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnksXG4gKiB3aGljaCBpcyBhdXRob3JpdGF0aXZlIGV2ZW4gZm9yIGFyY2hpdmVzIHdyaXR0ZW4gd2l0aCBkYXRhIGRlc2NyaXB0b3JzLlxuICpcbiAqIFRoZSBgbm9kZTpgIGltcG9ydHMgYmVsb3cgYXJlIHNhZmUgdG8gbWVyZWx5IEVWQUxVQVRFIG9uIG1vYmlsZSBcdTIwMTQgYHJlcXVpcmVgIGhhbmRzIGJhY2sgYHVuZGVmaW5lZGBcbiAqIHRoZXJlIGFuZCBub3RoaW5nIHJlYWRzIGl0IGF0IGxvYWQgdGltZSBcdTIwMTQgc28gdGhpcyBtb2R1bGUgY2FuIHNpdCBpbiB0aGUgZ2VuZXJhdGVkIGJhcnJlbHMgd2l0aG91dFxuICogYnJlYWtpbmcgdGhlIGxpYnJhcnkncyBsb2FkIG9uIEFuZHJvaWQuIE9ubHkgdGhlIGNhbGxzIGFyZSBkZXNrdG9wLW9ubHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5cbmltcG9ydCB7IGluZmxhdGVSYXdTeW5jIH0gZnJvbSAnbm9kZTp6bGliJztcblxuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pblxufSBmcm9tICcuL3BhdGgudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleHRyYWN0WmlwQXJjaGl2ZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdFppcEFyY2hpdmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdmU6IEJ1ZmZlcjtcblxuICAvKipcbiAgICogVGhlIGZpbGUtc3lzdGVtIGltcGxlbWVudGF0aW9uIHRoZSBleHRyYWN0ZWQgZW50cmllcyBhcmUgd3JpdHRlbiB3aXRoLlxuICAgKlxuICAgKiBJbmplY3RlZCByYXRoZXIgdGhhbiBpbXBvcnRlZCBzbyB0aGUgY2FsbGVyIGNob29zZXMgd2hpY2ggYGZzYCB3cml0ZXMgdGhlIGZpbGVzLiBUaGUgZGVtby12YXVsdFxuICAgKiBvcGVuZXIgaGFuZHMgb3ZlciBFbGVjdHJvbidzIGBvcmlnaW5hbC1mc2AgKHNlZSB7QGxpbmsgWmlwRXh0cmFjdGlvbkZpbGVTeXN0ZW19KS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVTeXN0ZW06IFppcEV4dHJhY3Rpb25GaWxlU3lzdGVtO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIGV4dHJhY3QgaW50by4gQ3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldERpcmVjdG9yeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBgbm9kZTpmc2AgZXh0cmFjdGlvbiBuZWVkcy5cbiAqXG4gKiBPbmx5IHRoZSB0d28gV1JJVElORyBjYWxscyBhcmUgcmVxdWlyZWQsIGFuZCB0aGF0IGlzIGRlbGliZXJhdGU6IEVsZWN0cm9uJ3MgYXNhciBsYXllciBpbnRlcmNlcHRzXG4gKiBgZnNgIFJFQURTIChhbmQgYGV4aXN0c1N5bmNgKSBvbiBhbnkgcGF0aCBjb250YWluaW5nIGAuYXNhcmAsIHdoaWNoIGEgZGVtbyB2YXVsdCBtYXkgbGVnaXRpbWF0ZWx5XG4gKiBzaGlwIGFzIGEgcGxhaW4gZmlsZS4gTmV2ZXIgcHJvYmluZyB0aGUgdGFyZ2V0IHdpdGggYSByZWFkIGtlZXBzIHRoYXQgaW50ZXJjZXB0aW9uIG91dCBvZiB0aGVcbiAqIHBpY3R1cmUgZW50aXJlbHksIGFuZCBhIGNhbGxlciB0aGF0IGhhbmRzIG92ZXIgRWxlY3Ryb24ncyBgb3JpZ2luYWwtZnNgIGlzIHNhZmUgZXZlbiBmcm9tIHRoZVxuICogd3JpdGUgc2lkZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgYW55IG1pc3NpbmcgcGFyZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgZGlyZWN0b3J5IHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFppcEV4dHJhY3Rpb25Na2Rpck9wdGlvbnN9LlxuICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgZGlyZWN0b3J5IGNyZWF0ZWQsIGlmIGFueS5cbiAgICovXG4gIHJlYWRvbmx5IG1rZGlyU3luYzogKHBhdGg6IHN0cmluZywgb3B0aW9uczogWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9ucykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXcml0ZXMgYSBmaWxlLCBvdmVyd3JpdGluZyBpdCBpZiBpdCBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVGhlIGZpbGUgdG8gd3JpdGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGJ5dGVzIHRvIHdyaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVGaWxlU3luYzogKHBhdGg6IHN0cmluZywgZGF0YTogQnVmZmVyKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpb25zIHtAbGluayBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbS5ta2RpclN5bmN9IGlzIGFsd2F5cyBjYWxsZWQgd2l0aC5cbiAqXG4gKiBFeHRyYWN0aW9uIG5ldmVyIHByb2JlcyBmb3IgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBzbyBldmVyeSBjYWxsIGhhcyB0byBjcmVhdGUgdGhlIG1pc3NpbmcgcGFyZW50c1xuICogaXRzZWxmIGFuZCB0b2xlcmF0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzIGFscmVhZHkgdGhlcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbHdheXMgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjdXJzaXZlOiB0cnVlO1xufVxuXG5pbnRlcmZhY2UgWmlwRW50cnkge1xuICByZWFkb25seSBjb21wcmVzc2VkU2l6ZTogbnVtYmVyO1xuICByZWFkb25seSBjb21wcmVzc2lvbk1ldGhvZDogbnVtYmVyO1xuICByZWFkb25seSBsb2NhbEhlYWRlck9mZnNldDogbnVtYmVyO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVORF9PRl9DRU5UUkFMX0RJUkVDVE9SWV9TSUdOQVRVUkUgPSAweDA2XzA1XzRCXzUwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJR05BVFVSRSA9IDB4MDJfMDFfNEJfNTA7XG5jb25zdCBMT0NBTF9GSUxFX0hFQURFUl9TSUdOQVRVUkUgPSAweDA0XzAzXzRCXzUwO1xuXG5jb25zdCBFTkRfT0ZfQ0VOVFJBTF9ESVJFQ1RPUllfU0laRSA9IDIyO1xuY29uc3QgTUFYX0FSQ0hJVkVfQ09NTUVOVF9MRU5HVEggPSA2NV81MzU7XG5cbi8vIEEgY291bnQgb3Igb2Zmc2V0IHNhdHVyYXRlZCB0byBhbGwtb25lcyBtZWFucyB0aGUgcmVhbCB2YWx1ZSBsaXZlcyBpbiBhIFpJUDY0IHJlY29yZCB0aGlzIHJlYWRlclxuLy8gZG9lcyBub3QgaW1wbGVtZW50LCBzbyB0aGUgZmllbGQgbXVzdCBuZXZlciBiZSByZWFkIGF0IGZhY2UgdmFsdWUuXG5jb25zdCBTQVRVUkFURURfVUlOVF8xNiA9IDY1XzUzNTtcbmNvbnN0IFNBVFVSQVRFRF9VSU5UXzMyID0gNF8yOTRfOTY3XzI5NTtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gdGhlIGVuZC1vZi1jZW50cmFsLWRpcmVjdG9yeSByZWNvcmQuXG5jb25zdCBBUkNISVZFX0VOVFJZX0NPVU5UX09GRlNFVCA9IDEwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfU1RBUlRfT0ZGU0VUID0gMTY7XG5cbi8vIEZpZWxkIG9mZnNldHMgd2l0aGluIGEgY2VudHJhbC1kaXJlY3RvcnkgaGVhZGVyLlxuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfRkxBR1NfT0ZGU0VUID0gODtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTSU9OX01FVEhPRF9PRkZTRVQgPSAxMDtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTRURfU0laRV9PRkZTRVQgPSAyMDtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX05BTUVfTEVOR1RIX09GRlNFVCA9IDI4O1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfRVhUUkFfTEVOR1RIX09GRlNFVCA9IDMwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfQ09NTUVOVF9MRU5HVEhfT0ZGU0VUID0gMzI7XG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9MT0NBTF9IRUFERVJfT0ZGU0VUX09GRlNFVCA9IDQyO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJWkUgPSA0NjtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gYSBsb2NhbCBmaWxlIGhlYWRlci5cbmNvbnN0IExPQ0FMX0hFQURFUl9OQU1FX0xFTkdUSF9PRkZTRVQgPSAyNjtcbmNvbnN0IExPQ0FMX0hFQURFUl9FWFRSQV9MRU5HVEhfT0ZGU0VUID0gMjg7XG5jb25zdCBMT0NBTF9IRUFERVJfU0laRSA9IDMwO1xuXG5jb25zdCBDT01QUkVTU0lPTl9NRVRIT0RfU1RPUkVEID0gMDtcbmNvbnN0IENPTVBSRVNTSU9OX01FVEhPRF9ERUZMQVRFRCA9IDg7XG5cbi8vIEJpdCAwIG9mIHRoZSBnZW5lcmFsLXB1cnBvc2UgZmxhZ3MgbWFya3MgYW4gZW5jcnlwdGVkIGVudHJ5LCBhbmQgaXQgaXMgdGhlIGxvd2VzdCBiaXQgXHUyMDE0IHNvIHRoZVxuLy8gcmVtYWluZGVyIHRlc3RzIGl0IHdpdGhvdXQgcmVhY2hpbmcgZm9yIGEgYml0d2lzZSBvcGVyYXRvci5cbmNvbnN0IEVOQ1JZUFRFRF9GTEFHX0RJVklTT1IgPSAyO1xuXG5jb25zdCBFTlRSWV9OQU1FX1NFUEFSQVRPUiA9ICcvJztcbmNvbnN0IFdJTkRPV1NfRFJJVkVfUFJFRklYX1JFR19FWFAgPSAvXltBLVphLXpdOi87XG5cbi8qKlxuICogRXh0cmFjdHMgZXZlcnkgZW50cnkgb2YgYSBaSVAgYXJjaGl2ZSBpbnRvIGEgZGlyZWN0b3J5LlxuICpcbiAqIERpcmVjdG9yeSBlbnRyaWVzIGJlY29tZSBkaXJlY3RvcmllczsgYSBmaWxlIGVudHJ5J3MgcGFyZW50cyBhcmUgY3JlYXRlZCB3aGV0aGVyIG9yIG5vdCB0aGUgYXJjaGl2ZVxuICogZGVjbGFyZWQgdGhlbS4gQW4gZW50cnkgd2hvc2UgbmFtZSB3b3VsZCBlc2NhcGUge0BsaW5rIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zLnRhcmdldERpcmVjdG9yeX0gaXNcbiAqIHJlZnVzZWQgcmF0aGVyIHRoYW4gd3JpdHRlbiAodGhlIFwiemlwIHNsaXBcIiB0cmF2ZXJzYWwpLCBhcyBpcyBhbiBlbmNyeXB0ZWQsIFpJUDY0LCBvclxuICogdW5rbm93bi1jb21wcmVzc2lvbiBhcmNoaXZlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zfS5cbiAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBuYW1pbmcgdGhlIHJlYXNvbiB3aGVuIHRoZSBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIGFzIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0WmlwQXJjaGl2ZShwYXJhbXM6IEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBhcmNoaXZlLFxuICAgIGZpbGVTeXN0ZW0sXG4gICAgdGFyZ2V0RGlyZWN0b3J5XG4gIH0gPSBwYXJhbXM7XG5cbiAgZmlsZVN5c3RlbS5ta2RpclN5bmModGFyZ2V0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRDZW50cmFsRGlyZWN0b3J5KGFyY2hpdmUpKSB7XG4gICAgYXNzZXJ0U2FmZUVudHJ5TmFtZShlbnRyeS5uYW1lKTtcblxuICAgIGlmIChlbnRyeS5uYW1lLmVuZHNXaXRoKEVOVFJZX05BTUVfU0VQQVJBVE9SKSkge1xuICAgICAgLy8gTmFtZWQgd2l0aG91dCBpdHMgdHJhaWxpbmcgc2VwYXJhdG9yLCBzbyB0aGUgY3JlYXRlZCBwYXRoIHJlYWRzIHRoZSBzYW1lIGFzIGV2ZXJ5IG90aGVyIG9uZS5cbiAgICAgIGZpbGVTeXN0ZW0ubWtkaXJTeW5jKGpvaW4odGFyZ2V0RGlyZWN0b3J5LCBlbnRyeS5uYW1lLnNsaWNlKDAsIC0xKSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlQYXRoID0gam9pbih0YXJnZXREaXJlY3RvcnksIGVudHJ5Lm5hbWUpO1xuICAgIGZpbGVTeXN0ZW0ubWtkaXJTeW5jKGRpcm5hbWUoZW50cnlQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZmlsZVN5c3RlbS53cml0ZUZpbGVTeW5jKGVudHJ5UGF0aCwgcmVhZEVudHJ5RGF0YShhcmNoaXZlLCBlbnRyeSkpO1xuICB9XG59XG5cbi8qKlxuICogUmVmdXNlcyBhbiBlbnRyeSBuYW1lIHRoYXQgd291bGQgcGxhY2UgdGhlIGV4dHJhY3RlZCBmaWxlIG91dHNpZGUgdGhlIHRhcmdldCBkaXJlY3RvcnkuXG4gKlxuICogQW4gYXJjaGl2ZSBpcyB1bnRydXN0ZWQgaW5wdXQgZXZlbiB3aGVuIHdlIHB1Ymxpc2hlZCBpdCBvdXJzZWx2ZXMsIGFuZCBldmVyeSBvbmUgb2YgdGhlc2Ugc2hhcGVzXG4gKiBlc2NhcGVzIHRoZSB0YXJnZXQ6IGFuIGFic29sdXRlIFBPU0lYIHBhdGgsIGEgV2luZG93cyBkcml2ZS1xdWFsaWZpZWQgcGF0aCwgYSBiYWNrc2xhc2ggKHdoaWNoIHRoZVxuICogWklQIHNwZWNpZmljYXRpb24gZm9yYmlkcyBhcyBhIHNlcGFyYXRvciwgc28gaXRzIG9ubHkgdXNlIGhlcmUgaXMgdG8gc211Z2dsZSBvbmUgcGFzdCBhXG4gKiBmb3J3YXJkLXNsYXNoIGNoZWNrKSwgYW5kIGEgYC4uYCBzZWdtZW50LlxuICpcbiAqIEBwYXJhbSBlbnRyeU5hbWUgLSBUaGUgZW50cnkgbmFtZSBhcyByZWNvcmRlZCBpbiB0aGUgYXJjaGl2ZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0U2FmZUVudHJ5TmFtZShlbnRyeU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZW50cnlOYW1lLnN0YXJ0c1dpdGgoRU5UUllfTkFNRV9TRVBBUkFUT1IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBhYnNvbHV0ZSBhcmNoaXZlIGVudHJ5ICcke2VudHJ5TmFtZX0nLmApO1xuICB9XG5cbiAgaWYgKFdJTkRPV1NfRFJJVkVfUFJFRklYX1JFR19FWFAudGVzdChlbnRyeU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBkcml2ZS1xdWFsaWZpZWQgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jy5gKTtcbiAgfVxuXG4gIGlmIChlbnRyeU5hbWUuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVmdXNpbmcgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jywgd2hpY2ggdXNlcyBhIGJhY2tzbGFzaCBzZXBhcmF0b3IuYCk7XG4gIH1cblxuICBpZiAoZW50cnlOYW1lLnNwbGl0KEVOVFJZX05BTUVfU0VQQVJBVE9SKS5pbmNsdWRlcygnLi4nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVmdXNpbmcgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jywgd2hpY2ggcG9pbnRzIG91dHNpZGUgdGhlIHRhcmdldCBkaXJlY3RvcnkuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2NhdGVzIHRoZSBlbmQtb2YtY2VudHJhbC1kaXJlY3RvcnkgcmVjb3JkIGFuZCByZXR1cm5zIGl0cyBvZmZzZXQuXG4gKlxuICogVGhlIHJlY29yZCBzaXRzIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYXJjaGl2ZSB1bmxlc3MgYSB0cmFpbGluZyBjb21tZW50IGZvbGxvd3MgaXQsIHNvIGl0IGlzIGZvdW5kXG4gKiBieSBzY2FubmluZyBiYWNrd2FyZHMgb3ZlciB0aGUgY29tbWVudCdzIG1heGltdW0gbGVuZ3RoIHJhdGhlciB0aGFuIGFzc3VtZWQgdG8gYmUgYXQgYSBmaXhlZCBwbGFjZS5cbiAqXG4gKiBAcGFyYW0gYXJjaGl2ZSAtIFRoZSByYXcgWklQIGFyY2hpdmUgYnl0ZXMuXG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkJ3Mgb2Zmc2V0LlxuICovXG5mdW5jdGlvbiBmaW5kRW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0KGFyY2hpdmU6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGNvbnN0IGxhc3RQb3NzaWJsZU9mZnNldCA9IGFyY2hpdmUubGVuZ3RoIC0gRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJWkU7XG4gIGNvbnN0IGZpcnN0UG9zc2libGVPZmZzZXQgPSBNYXRoLm1heCgwLCBsYXN0UG9zc2libGVPZmZzZXQgLSBNQVhfQVJDSElWRV9DT01NRU5UX0xFTkdUSCk7XG5cbiAgZm9yIChsZXQgb2Zmc2V0ID0gbGFzdFBvc3NpYmxlT2Zmc2V0OyBvZmZzZXQgPj0gZmlyc3RQb3NzaWJsZU9mZnNldDsgb2Zmc2V0LS0pIHtcbiAgICBpZiAoYXJjaGl2ZS5yZWFkVUludDMyTEUob2Zmc2V0KSA9PT0gRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJR05BVFVSRSkge1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmNoaXZlIGlzIG5vdCBhIFpJUCBmaWxlOiBpdHMgZW5kLW9mLWNlbnRyYWwtZGlyZWN0b3J5IHJlY29yZCBpcyBtaXNzaW5nLicpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjZW50cmFsIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIGFyY2hpdmUncyBhdXRob3JpdGF0aXZlIGluZGV4IG9mIGl0cyBlbnRyaWVzLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEByZXR1cm5zIE9uZSB7QGxpbmsgWmlwRW50cnl9IHBlciBlbnRyeSwgaW4gdGhlIG9yZGVyIHRoZSBhcmNoaXZlIGxpc3RzIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIHJlYWRDZW50cmFsRGlyZWN0b3J5KGFyY2hpdmU6IEJ1ZmZlcik6IFppcEVudHJ5W10ge1xuICBjb25zdCBlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgPSBmaW5kRW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0KGFyY2hpdmUpO1xuICBjb25zdCBlbnRyeUNvdW50ID0gYXJjaGl2ZS5yZWFkVUludDE2TEUoZW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0ICsgQVJDSElWRV9FTlRSWV9DT1VOVF9PRkZTRVQpO1xuICBsZXQgZW50cnlPZmZzZXQgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9TVEFSVF9PRkZTRVQpO1xuXG4gIGlmIChlbnRyeUNvdW50ID09PSBTQVRVUkFURURfVUlOVF8xNiB8fCBlbnRyeU9mZnNldCA9PT0gU0FUVVJBVEVEX1VJTlRfMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1pJUDY0IGFyY2hpdmVzIGFyZSBub3Qgc3VwcG9ydGVkLicpO1xuICB9XG5cbiAgY29uc3QgZW50cmllczogWmlwRW50cnlbXSA9IFtdO1xuICBmb3IgKGxldCBlbnRyeUluZGV4ID0gMDsgZW50cnlJbmRleCA8IGVudHJ5Q291bnQ7IGVudHJ5SW5kZXgrKykge1xuICAgIGlmIChhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCkgIT09IENFTlRSQUxfRElSRUNUT1JZX0hFQURFUl9TSUdOQVRVUkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUncyBjZW50cmFsIGRpcmVjdG9yeSBpcyBjb3JydXB0IGF0IGVudHJ5ICR7U3RyaW5nKGVudHJ5SW5kZXgpfS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBmbGFncyA9IGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfRkxBR1NfT0ZGU0VUKTtcbiAgICBpZiAoZmxhZ3MgJSBFTkNSWVBURURfRkxBR19ESVZJU09SID09PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY3J5cHRlZCBaSVAgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcHJlc3NlZFNpemUgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCArIENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTRURfU0laRV9PRkZTRVQpO1xuICAgIGNvbnN0IGxvY2FsSGVhZGVyT2Zmc2V0ID0gYXJjaGl2ZS5yZWFkVUludDMyTEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9MT0NBTF9IRUFERVJfT0ZGU0VUX09GRlNFVCk7XG4gICAgaWYgKGNvbXByZXNzZWRTaXplID09PSBTQVRVUkFURURfVUlOVF8zMiB8fCBsb2NhbEhlYWRlck9mZnNldCA9PT0gU0FUVVJBVEVEX1VJTlRfMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWklQNjQgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUxlbmd0aCA9IGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfTkFNRV9MRU5HVEhfT0ZGU0VUKTtcbiAgICBjb25zdCBuYW1lT2Zmc2V0ID0gZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9IRUFERVJfU0laRTtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgY29tcHJlc3NlZFNpemUsXG4gICAgICBjb21wcmVzc2lvbk1ldGhvZDogYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9DT01QUkVTU0lPTl9NRVRIT0RfT0ZGU0VUKSxcbiAgICAgIGxvY2FsSGVhZGVyT2Zmc2V0LFxuICAgICAgbmFtZTogYXJjaGl2ZS50b1N0cmluZygndXRmLTgnLCBuYW1lT2Zmc2V0LCBuYW1lT2Zmc2V0ICsgbmFtZUxlbmd0aClcbiAgICB9KTtcblxuICAgIGVudHJ5T2Zmc2V0ID0gbmFtZU9mZnNldFxuICAgICAgKyBuYW1lTGVuZ3RoXG4gICAgICArIGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfRVhUUkFfTEVOR1RIX09GRlNFVClcbiAgICAgICsgYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9DT01NRU5UX0xFTkdUSF9PRkZTRVQpO1xuICB9XG5cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5cbi8qKlxuICogUmVhZHMgYW5kIGRlY29tcHJlc3NlcyBvbmUgZW50cnkncyBieXRlcy5cbiAqXG4gKiBUaGUgZGF0YSdzIHN0YXJ0IGlzIGNvbXB1dGVkIGZyb20gdGhlIExPQ0FMIGhlYWRlciByYXRoZXIgdGhhbiB0aGUgY2VudHJhbCBvbmU6IHRoZSB0d28gY2FycnlcbiAqIGluZGVwZW5kZW50IG5hbWUgYW5kIGV4dHJhLWZpZWxkIGxlbmd0aHMsIGFuZCBvbmx5IHRoZSBsb2NhbCBwYWlyIGRlc2NyaWJlcyB3aGVyZSB0aGUgYnl0ZXNcbiAqIGFjdHVhbGx5IGJlZ2luLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeSwgYXMgcmVhZCBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeS5cbiAqIEByZXR1cm5zIFRoZSBlbnRyeSdzIHVuY29tcHJlc3NlZCBjb250ZW50LlxuICovXG5mdW5jdGlvbiByZWFkRW50cnlEYXRhKGFyY2hpdmU6IEJ1ZmZlciwgZW50cnk6IFppcEVudHJ5KTogQnVmZmVyIHtcbiAgaWYgKGFyY2hpdmUucmVhZFVJbnQzMkxFKGVudHJ5LmxvY2FsSGVhZGVyT2Zmc2V0KSAhPT0gTE9DQUxfRklMRV9IRUFERVJfU0lHTkFUVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeS5uYW1lfScgaGFzIGEgY29ycnVwdCBsb2NhbCBoZWFkZXIuYCk7XG4gIH1cblxuICBjb25zdCBkYXRhT2Zmc2V0ID0gZW50cnkubG9jYWxIZWFkZXJPZmZzZXRcbiAgICArIExPQ0FMX0hFQURFUl9TSVpFXG4gICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeS5sb2NhbEhlYWRlck9mZnNldCArIExPQ0FMX0hFQURFUl9OQU1FX0xFTkdUSF9PRkZTRVQpXG4gICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeS5sb2NhbEhlYWRlck9mZnNldCArIExPQ0FMX0hFQURFUl9FWFRSQV9MRU5HVEhfT0ZGU0VUKTtcbiAgY29uc3QgZGF0YUVuZCA9IGRhdGFPZmZzZXQgKyBlbnRyeS5jb21wcmVzc2VkU2l6ZTtcbiAgaWYgKGRhdGFFbmQgPiBhcmNoaXZlLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUgaXMgdHJ1bmNhdGVkOiBlbnRyeSAnJHtlbnRyeS5uYW1lfScgcnVucyBwYXN0IGl0cyBlbmQuYCk7XG4gIH1cblxuICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IGFyY2hpdmUuc3ViYXJyYXkoZGF0YU9mZnNldCwgZGF0YUVuZCk7XG4gIHN3aXRjaCAoZW50cnkuY29tcHJlc3Npb25NZXRob2QpIHtcbiAgICBjYXNlIENPTVBSRVNTSU9OX01FVEhPRF9ERUZMQVRFRDoge1xuICAgICAgcmV0dXJuIGluZmxhdGVSYXdTeW5jKGNvbXByZXNzZWREYXRhKTtcbiAgICB9XG4gICAgY2FzZSBDT01QUkVTU0lPTl9NRVRIT0RfU1RPUkVEOiB7XG4gICAgICByZXR1cm4gY29tcHJlc3NlZERhdGE7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUgZW50cnkgJyR7ZW50cnkubmFtZX0nIHVzZXMgdW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gbWV0aG9kICR7U3RyaW5nKGVudHJ5LmNvbXByZXNzaW9uTWV0aG9kKX0uYCk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQTBCQSxTQUFTLHNCQUFzQjtBQUUvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXlFUCxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLDhCQUE4QjtBQUVwQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLDZCQUE2QjtBQUluQyxNQUFNLG9CQUFvQjtBQUMxQixNQUFNLG9CQUFvQjtBQUcxQixNQUFNLDZCQUE2QjtBQUNuQyxNQUFNLGlDQUFpQztBQUd2QyxNQUFNLGlDQUFpQztBQUN2QyxNQUFNLDhDQUE4QztBQUNwRCxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLHVDQUF1QztBQUM3QyxNQUFNLHdDQUF3QztBQUM5QyxNQUFNLDBD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
@@ -79,7 +79,7 @@ export interface AsyncDisposableEx extends AsyncDisposable {
79
79
  *
80
80
  * @returns A {@link Promise} that resolves once disposal completes.
81
81
  */
82
- asyncDispose: () => Promise<void>;
82
+ readonly asyncDispose: () => Promise<void>;
83
83
  }
84
84
  /**
85
85
  * A callback invoked when an {@link AsyncCallbackDisposable} is disposed.
@@ -162,7 +162,7 @@ export interface DisposableEx extends Disposable {
162
162
  /**
163
163
  * Disposes the object. Delegates to `this[Symbol.dispose]()`.
164
164
  */
165
- dispose: () => void;
165
+ readonly dispose: () => void;
166
166
  }
167
167
  /**
168
168
  * A callback invoked when a {@link CallbackDisposable} is disposed.
@@ -321,4 +321,4 @@ export {
321
321
  toAsyncDisposableEx,
322
322
  toDisposableEx
323
323
  };
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kaXNwb3NhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIHV0aWxpdGllcyBmb3IgYHVzaW5nYCAvIGBhd2FpdCB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yIH0gZnJvbSAnLi9hZ2dyZWdhdGUtZXJyb3IudHMnO1xuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBlcnJvciBzZW1hbnRpY3Mgb2YgYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9IG9yIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfSB3aGVuXG4gKiBvbmUgb2YgaXRzIGNoaWxkcmVuIHRocm93cyB3aGlsZSBiZWluZyBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGVudW0gRGlzcG9zZUVycm9yQmVoYXZpb3Ige1xuICAvKipcbiAgICogRGlzcG9zZSBldmVyeSBjaGlsZCBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdywgY29sbGVjdGluZyB0aGUgdGhyb3duIGVycm9ycyBhbmQgcmUtdGhyb3dpbmcgdGhlbVxuICAgKiBhcyBhIHNpbmdsZSB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIEFnZ3JlZ2F0ZSxcblxuICAvKipcbiAgICogUmUtdGhyb3cgdGhlIGZpcnN0IGVycm9yIGEgY2hpbGQgdGhyb3dzIGltbWVkaWF0ZWx5LCBsZWF2aW5nIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdW5kaXNwb3NlZC5cbiAgICovXG4gIEZhaWxGYXN0XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgb3JkZXIgaW4gd2hpY2ggYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9IG9yIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfSBkaXNwb3Nlc1xuICogaXRzIGNoaWxkcmVuLlxuICovXG5leHBvcnQgZW51bSBEaXNwb3NlT3JkZXIge1xuICAvKipcbiAgICogRGlzcG9zZSB0aGUgbGFzdC1yZWdpc3RlcmVkIGNoaWxkIGZpcnN0IChsYXN0LWluLCBmaXJzdC1vdXQpLCBsaWtlIG5lc3RlZCBgdXNpbmdgIGRlY2xhcmF0aW9uc1xuICAgKiB1bndpbmRpbmcgaW4gcmV2ZXJzZS5cbiAgICovXG4gIExpZm8sXG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIGZpcnN0LXJlZ2lzdGVyZWQgY2hpbGQgZmlyc3QgKGZpcnN0LWluLCBmaXJzdC1vdXQpLlxuICAgKi9cbiAgRmlmb1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaG93IGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gb3Ige0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfSBiZWhhdmVzIHdoZW4gaXQgaXNcbiAqIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICovXG5leHBvcnQgZW51bSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvciB7XG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIGV2ZXJ5IGRpc3Bvc2UuXG4gICAqL1xuICBJbnZva2UsXG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhlIGZpcnN0IGRpc3Bvc2Ugb25seTsgc3Vic2VxdWVudCBkaXNwb3NlcyBhcmUgbm8tb3BzLlxuICAgKi9cbiAgSWdub3JlLFxuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBmaXJzdCBkaXNwb3NlIG9ubHk7IHN1YnNlcXVlbnQgZGlzcG9zZXMgdGhyb3cuXG4gICAqL1xuICBUaHJvd1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RpbmcgYW4ge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogQXN5bmNEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICByZWFkb25seSBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcj86IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yO1xufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IHRoYXQgYWRkaXRpb25hbGx5IGV4cG9zZXMgYSBjb252ZW5pZW5jZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXguYXN5bmNEaXNwb3NlfVxuICogbWV0aG9kLCBzbyBhIHN0b3JlZCBoYW5kbGUgY2FuIGJlIGRpc3Bvc2VkIGFzIGBoYW5kbGUuYXN5bmNEaXNwb3NlKClgIGluc3RlYWQgb2YgdGhlIGNsdW5raWVyXG4gKiBgaGFuZGxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jRGlzcG9zYWJsZUV4IGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIERlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpYC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAgICovXG4gIGFzeW5jRGlzcG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiBhbiB7QGxpbmsgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGV9IGlzIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgdHlwZSBBc3luY0Rpc3Bvc2VDYWxsYmFjayA9ICgpID0+IFByb21pc2FibGU8dm9pZD47XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGRpc3Bvc2FibGUgYmVoYXZlcyB3aGVuIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW5nIGEge0BsaW5rIENvbWJpbmVBc3luY0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVBc3luY0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXN5bmMgZGlzcG9zYWJsZXMgdG8gZGlzcG9zZSB3aGVuIHRoZSBjb21iaW5lciBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzeW5jRGlzcG9zYWJsZXM6IEl0ZXJhYmxlPEFzeW5jRGlzcG9zYWJsZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGRyZW4gYXJlIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZU9yZGVyLkxpZm99XG4gICAqL1xuICByZWFkb25seSBkaXNwb3NlT3JkZXI/OiBEaXNwb3NlT3JkZXI7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIG9uZSBvZiBpdHMgY2hpbGRyZW4gdGhyb3dzIHdoaWxlIGJlaW5nIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlfVxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcj86IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGNvbWJpbmVyIGJlaGF2ZXMgd2hlbiBpdCBpcyBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yPzogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDb21iaW5lRGlzcG9zYWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZURpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZGlzcG9zYWJsZXMgdG8gZGlzcG9zZSB3aGVuIHRoZSBjb21iaW5lciBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2FibGVzOiBJdGVyYWJsZTxEaXNwb3NhYmxlPjtcblxuICAvKipcbiAgICogVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZHJlbiBhcmUgZGlzcG9zZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBEaXNwb3NlT3JkZXIuTGlmb31cbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcj86IERpc3Bvc2VPcmRlcjtcblxuICAvKipcbiAgICogSG93IHRoZSBjb21iaW5lciBiZWhhdmVzIHdoZW4gb25lIG9mIGl0cyBjaGlsZHJlbiB0aHJvd3Mgd2hpbGUgYmVpbmcgZGlzcG9zZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBEaXNwb3NlRXJyb3JCZWhhdmlvci5BZ2dyZWdhdGV9XG4gICAqL1xuICByZWFkb25seSBlcnJvckJlaGF2aW9yPzogRGlzcG9zZUVycm9yQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIGl0IGlzIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IGFkZGl0aW9uYWxseSBleHBvc2VzIGEgY29udmVuaWVuY2Uge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QsIHNvIGFcbiAqIHN0b3JlZCBoYW5kbGUgY2FuIGJlIGRpc3Bvc2VkIGFzIGBoYW5kbGUuZGlzcG9zZSgpYCBpbnN0ZWFkIG9mIHRoZSBjbHVua2llciBgaGFuZGxlW1N5bWJvbC5kaXNwb3NlXSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNwb3NhYmxlRXggZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIERlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICBkaXNwb3NlOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERpc3Bvc2VDYWxsYmFjayA9ICgpID0+IHZvaWQ7XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBmb3IgYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fTogaXQgY2FycmllcyB0aGUgcmUtZGlzcG9zZSBndWFyZCAodmlhXG4gKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9KSBhbmQgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeC5hc3luY0Rpc3Bvc2V9IGFsaWFzOyBhIHN1YmNsYXNzIG9ubHlcbiAqIGltcGxlbWVudHMge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2VBc3luY30uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBc3luY0Rpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlRXgge1xuICAvKipcbiAgICogSG93IHRoZSBkaXNwb3NhYmxlIGJlaGF2ZXMgd2hlbiBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHByb3RlY3RlZCBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBkaXNwb3NhYmxlIGhhcyBiZWVuIGRpc3Bvc2VkIChpdHMgdGVhcmRvd24gaGFzIHJ1biBhdCBsZWFzdCBvbmNlKS5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIG9uY2UgZGlzcG9zYWwgaGFzIHN0YXJ0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzcG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ7XG4gIH1cblxuICBwcml2YXRlIF9pc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIENvbnZlbmllbmNlIGFsaWFzIHRoYXQgZGVsZWdhdGVzIHRvIGB0aGlzW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jRGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlQmFzZS5wZXJmb3JtRGlzcG9zZUFzeW5jfSwgaG9ub3JpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSBvbiBhIHJlcGVhdCBkaXNwb3NlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5wZXJmb3JtRGlzcG9zZUFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgdGhlIGFjdHVhbCB0ZWFyZG93bi4gQ2FsbGVkIGF0IG1vc3Qgb25jZSB1bmxlc3Mge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZX0gaXMgc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNhYmxlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBlcmZvcm1EaXNwb3NlQXN5bmMoKTogUHJvbWlzYWJsZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBbiBhc3luYyBkaXNwb3NhYmxlIHRoYXQgZXhlY3V0ZXMgYSBjYWxsYmFjayB3aGVuIGRpc3Bvc2VkIHZpYSBgYXdhaXQgdXNpbmdgIChvciBhIG1hbnVhbFxuICogYGF3YWl0IGRpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKWApLlxuICovXG5leHBvcnQgY2xhc3MgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGUgZXh0ZW5kcyBBc3luY0Rpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogQXN5bmNEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNhbGxiYWNrIGNvbXBsZXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGEge0BsaW5rIERpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV0oKWAgYXQgdGhlIGNhbGwgc2l0ZTogaXQgcmVhZHMgYmV0dGVyIGFuZCBrZWVwcyB0aGVcbiAqIHdlbGwta25vd24gc3ltYm9sIHJlZmVyZW5jZWQgaW4gYSBzaW5nbGUgcGxhY2UuXG4gKlxuICogQHBhcmFtIGRpc3Bvc2FibGUgLSB0aGUgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlKGRpc3Bvc2FibGU6IERpc3Bvc2FibGUpOiB2b2lkIHtcbiAgZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGZvciBhIHtAbGluayBEaXNwb3NhYmxlRXh9OiBpdCBjYXJyaWVzIHRoZSByZS1kaXNwb3NlIGd1YXJkICh2aWEge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSlcbiAqIGFuZCB0aGUge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBhbGlhczsgYSBzdWJjbGFzcyBvbmx5IGltcGxlbWVudHMge0BsaW5rIERpc3Bvc2FibGVCYXNlLnBlcmZvcm1EaXNwb3NlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgRGlzcG9zYWJsZUV4IHtcbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICBwcm90ZWN0ZWQgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcG9zYWJsZSBoYXMgYmVlbiBkaXNwb3NlZCAoaXRzIHRlYXJkb3duIGhhcyBydW4gYXQgbGVhc3Qgb25jZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBvbmNlIGRpc3Bvc2FsIGhhcyBzdGFydGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3Bvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBDb252ZW5pZW5jZSBhbGlhcyB0aGF0IGRlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2V9LCBob25vcmluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9IG9uIGEgcmVwZWF0IGRpc3Bvc2UuXG4gICAqL1xuICBwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgdGhpcy5wZXJmb3JtRGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgdGVhcmRvd24uIENhbGxlZCBhdCBtb3N0IG9uY2UgdW5sZXNzIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2V9IGlzIHNldC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgZGlzcG9zYWJsZSB0aGF0IGV4ZWN1dGVzIGEgY2FsbGJhY2sgd2hlbiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENhbGxiYWNrRGlzcG9zYWJsZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBlcmZvcm1EaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gdGhhdCBjb21iaW5lcyBtdWx0aXBsZSBhc3luYyBkaXNwb3NhYmxlcyBhbmQgZGlzcG9zZXMgYWxsIG9mIHRoZW0gd2hlbiBpdFxuICogaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lQXN5bmNEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IHJlYWRvbmx5IEFzeW5jRGlzcG9zYWJsZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcjogRGlzcG9zZU9yZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yQmVoYXZpb3I6IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZUFzeW5jRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gWy4uLnBhcmFtcy5hc3luY0Rpc3Bvc2FibGVzXTtcbiAgICB0aGlzLmRpc3Bvc2VPcmRlciA9IHBhcmFtcy5kaXNwb3NlT3JkZXIgPz8gRGlzcG9zZU9yZGVyLkxpZm87XG4gICAgdGhpcy5lcnJvckJlaGF2aW9yID0gcGFyYW1zLmVycm9yQmVoYXZpb3IgPz8gRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlO1xuICAgIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBwYXJhbXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPz8gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIGFsbCBjb21iaW5lZCBjaGlsZHJlbiBpbiB0aGUgY29uZmlndXJlZCB7QGxpbmsgRGlzcG9zZU9yZGVyfSwgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIERpc3Bvc2VFcnJvckJlaGF2aW9yfSB3aGVuIGEgY2hpbGQgdGhyb3dzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmdldE9yZGVyZWRDaGlsZHJlbigpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjaGlsZFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgQXN5bmNEaXNwb3NhYmxlW10ge1xuICAgIHN3aXRjaCAodGhpcy5kaXNwb3NlT3JkZXIpIHtcbiAgICAgIGNhc2UgRGlzcG9zZU9yZGVyLkZpZm86IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gICAgICB9XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5MaWZvOiB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5jaGlsZHJlbl0ucmV2ZXJzZSgpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLmRpc3Bvc2VPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IGNvbWJpbmVzIG11bHRpcGxlIGRpc3Bvc2FibGVzIGFuZCBkaXNwb3NlcyBhbGwgb2YgdGhlbSB3aGVuIGl0IGlzXG4gKiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbWJpbmVEaXNwb3NhYmxlIGV4dGVuZHMgRGlzcG9zYWJsZUJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuOiByZWFkb25seSBEaXNwb3NhYmxlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zZU9yZGVyOiBEaXNwb3NlT3JkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcjogRGlzcG9zZUVycm9yQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIENvbWJpbmVEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZURpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFsuLi5wYXJhbXMuZGlzcG9zYWJsZXNdO1xuICAgIHRoaXMuZGlzcG9zZU9yZGVyID0gcGFyYW1zLmRpc3Bvc2VPcmRlciA/PyBEaXNwb3NlT3JkZXIuTGlmbztcbiAgICB0aGlzLmVycm9yQmVoYXZpb3IgPSBwYXJhbXMuZXJyb3JCZWhhdmlvciA/PyBEaXNwb3NlRXJyb3JCZWhhdmlvci5BZ2dyZWdhdGU7XG4gICAgdGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IHBhcmFtcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA/PyBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgYWxsIGNvbWJpbmVkIGNoaWxkcmVuIGluIHRoZSBjb25maWd1cmVkIHtAbGluayBEaXNwb3NlT3JkZXJ9LCBhcHBseWluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3J9IHdoZW4gYSBjaGlsZCB0aHJvd3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGVyZm9ybURpc3Bvc2UoKTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuZ2V0T3JkZXJlZENoaWxkcmVuKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNoaWxkW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgRGlzcG9zYWJsZVtdIHtcbiAgICBzd2l0Y2ggKHRoaXMuZGlzcG9zZU9yZGVyKSB7XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5GaWZvOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICAgICAgfVxuICAgICAgY2FzZSBEaXNwb3NlT3JkZXIuTGlmbzoge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuY2hpbGRyZW5dLnJldmVyc2UoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXNzZXJ0TmV2ZXIodGhpcy5kaXNwb3NlT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgYXN5bmNEaXNwb3NhYmxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgIGF0IHRoZSBjYWxsIHNpdGU6IGl0IHJlYWRzIGJldHRlciBhbmRcbiAqIGtlZXBzIHRoZSB3ZWxsLWtub3duIHN5bWJvbCByZWZlcmVuY2VkIGluIGEgc2luZ2xlIHBsYWNlLlxuICpcbiAqIEBwYXJhbSBhc3luY0Rpc3Bvc2FibGUgLSB0aGUgYXN5bmMgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlfSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICogQHJldHVybnMgV2hldGhlciB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0Rpc3Bvc2FibGUoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBhc3luY0Rpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPEFzeW5jRGlzcG9zYWJsZT47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWNvbXB1dGVkLXByb3BlcnR5LWV4aXN0ZW5jZS1jaGVjayAtLSBgT2JqZWN0Lmhhc093bmAgaXMgb3duLXByb3BlcnR5LW9ubHksIGFuZCBgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdYCBpcyBhIHByb3RvdHlwZSBtZXRob2Qgb24gZXZlcnkgY2xhc3MtYmFzZWQgZGlzcG9zYWJsZSBoZXJlLlxuICByZXR1cm4gISFhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNEaXNwb3NhYmxlRXgoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGFzeW5jRGlzcG9zYWJsZUV4ID0gJHVua25vd24gYXMgUGFydGlhbDxBc3luY0Rpc3Bvc2FibGVFeD47XG4gIHJldHVybiBpc0FzeW5jRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSAkdW5rbm93biAtIHRoZSBvYmplY3QgdG8gY2hlY2sgZm9yIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEaXNwb3NhYmxlKCR1bmtub3duOiB1bmtub3duKTogJHVua25vd24gaXMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGRpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPERpc3Bvc2FibGU+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1jb21wdXRlZC1wcm9wZXJ0eS1leGlzdGVuY2UtY2hlY2sgLS0gYE9iamVjdC5oYXNPd25gIGlzIG93bi1wcm9wZXJ0eS1vbmx5LCBhbmQgYFtTeW1ib2wuZGlzcG9zZV1gIGlzIGEgcHJvdG90eXBlIG1ldGhvZCBvbiBldmVyeSBjbGFzcy1iYXNlZCBkaXNwb3NhYmxlIGhlcmUuXG4gIHJldHVybiAhIWRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBEaXNwb3NhYmxlRXh9IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc3Bvc2FibGVFeCgkdW5rbm93bjogdW5rbm93bik6ICR1bmtub3duIGlzIERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGRpc3Bvc2FibGVFeCA9ICR1bmtub3duIGFzIFBhcnRpYWw8RGlzcG9zYWJsZUV4PjtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGRpc3Bvc2FibGVFeC5kaXNwb3NlID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIEFkYXB0cyBhIHBsYWluIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludG8gYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZX0gbWV0aG9kIHRoYXQgZGVsZWdhdGVzIHRvIGBTeW1ib2wuYXN5bmNEaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9LCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIGFzeW5jRGlzcG9zYWJsZSAtIHRoZSBhc3luYyBkaXNwb3NhYmxlIHRvIGFkYXB0XG4gKiBAcmV0dXJucyBBbiB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9IHdyYXBwaW5nIHRoZSBhc3luYyBkaXNwb3NhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Bc3luY0Rpc3Bvc2FibGVFeChhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IEFzeW5jRGlzcG9zYWJsZUV4IHtcbiAgcmV0dXJuIGlzQXN5bmNEaXNwb3NhYmxlRXgoYXN5bmNEaXNwb3NhYmxlKVxuICAgID8gYXN5bmNEaXNwb3NhYmxlXG4gICAgOiB7XG4gICAgICBhc3luY0Rpc3Bvc2U6IGFzeW5jRGlzcG9zZUFkYXB0ZWQsXG4gICAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jRGlzcG9zZUFkYXB0ZWRcbiAgICB9O1xuXG4gIGZ1bmN0aW9uIGFzeW5jRGlzcG9zZUFkYXB0ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGUpO1xuICB9XG59XG5cbi8qKlxuICogQWRhcHRzIGEgcGxhaW4ge0BsaW5rIERpc3Bvc2FibGV9IGludG8gYSB7QGxpbmsgRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QgdGhhdCBkZWxlZ2F0ZXMgdG8gYFN5bWJvbC5kaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgRGlzcG9zYWJsZUV4fSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gdGhlIGRpc3Bvc2FibGUgdG8gYWRhcHRcbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gd3JhcHBpbmcgdGhlIGRpc3Bvc2FibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rpc3Bvc2FibGVFeChkaXNwb3NhYmxlOiBEaXNwb3NhYmxlKTogRGlzcG9zYWJsZUV4IHtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZUV4KGRpc3Bvc2FibGUpXG4gICAgPyBkaXNwb3NhYmxlXG4gICAgOiB7XG4gICAgICBkaXNwb3NlOiBkaXNwb3NlQWRhcHRlZCxcbiAgICAgIFtTeW1ib2wuZGlzcG9zZV06IGRpc3Bvc2VBZGFwdGVkXG4gICAgfTtcblxuICBmdW5jdGlvbiBkaXNwb3NlQWRhcHRlZCgpOiB2b2lkIHtcbiAgICBkaXNwb3NlKGRpc3Bvc2FibGUpO1xuICB9XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgZGlzcG9zYWJsZSdzIHRlYXJkb3duIHNob3VsZCBydW4gb24gdGhlIGN1cnJlbnQgZGlzcG9zZSBjYWxsLCBhcHBseWluZyB0aGVcbiAqIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcn0gcmUtZGlzcG9zZSBwb2xpY3kuIFNpbmdsZSBzb3VyY2Ugb2YgdGhlIGd1YXJkIHNoYXJlZCBieVxuICoge0BsaW5rIERpc3Bvc2FibGVCYXNlfSBhbmQge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2V9LlxuICpcbiAqIEBwYXJhbSBpc0Rpc3Bvc2VkIC0gV2hldGhlciB0aGUgZGlzcG9zYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9uY2UuXG4gKiBAcGFyYW0gbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgLSBUaGUgcmUtZGlzcG9zZSBiZWhhdmlvci5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSB0ZWFyZG93biBzaG91bGQgcnVuLCBgZmFsc2VgIHdoZW4gaXQgc2hvdWxkIGJlIHNraXBwZWQuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFBlcmZvcm1EaXNwb3NlKGlzRGlzcG9zZWQ6IGJvb2xlYW4sIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcik6IGJvb2xlYW4ge1xuICBpZiAoIWlzRGlzcG9zZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaCAobXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpIHtcbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZToge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZToge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuVGhyb3c6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBkaXNwb3NhYmxlIGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQuJyk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGFzc2VydE5ldmVyKG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQVFBLFNBQVMsNEJBQTRCO0FBQ3JDLFNBQVMsbUJBQW1CO0FBTXJCLElBQUssdUJBQUwsa0JBQUtBLDBCQUFMO0FBS0wsRUFBQUEsNENBQUE7QUFLQSxFQUFBQSw0Q0FBQTtBQVZVLFNBQUFBO0FBQUEsR0FBQTtBQWlCTCxJQUFLLGVBQUwsa0JBQUtDLGtCQUFMO0FBS0wsRUFBQUEsNEJBQUE7QUFLQSxFQUFBQSw0QkFBQTtBQVZVLFNBQUFBO0FBQUEsR0FBQTtBQWlCTCxJQUFLLDBCQUFMLGtCQUFLQyw2QkFBTDtBQUlMLEVBQUFBLGtEQUFBO0FBS0EsRUFBQUEsa0RBQUE7QUFLQSxFQUFBQSxrREFBQTtBQWRVLFNBQUFBO0FBQUEsR0FBQTtBQXlKTCxNQUFlLG9CQUFpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU0zRCwwQkFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPN0QsSUFBYyxhQUFzQjtBQUNsQyxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFUSxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT2YsZUFBOEI7QUFDbkMsV0FBTyxLQUFLLE9BQU8sWUFBWSxFQUFFO0FBQUEsRUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE9BQWMsT0FBTyxZQUFZLElBQW1CO0FBQ2xELFFBQUksQ0FBQyxxQkFBcUIsS0FBSyxhQUFhLEtBQUssdUJBQXVCLEdBQUc7QUFDekU7QUFBQSxJQUNGO0FBRUEsU0FBSyxjQUFjO0FBQ25CLFVBQU0sS0FBSyxvQkFBb0I7QUFBQSxFQUNqQztBQVFGO0FBTU8sTUFBTSxnQ0FBZ0Msb0JBQW9CO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FB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RSxRQUFNLGFBQWE7QUFFbkIsU0FBTyxDQUFDLENBQUMsV0FBVyxPQUFPLE9BQU87QUFDcEM7QUFRTyxTQUFTLGVBQWUsVUFBNkM7QUFDMUUsUUFBTSxlQUFlO0FBQ3JCLFNBQU8sYUFBYSxRQUFRLEtBQUssT0FBTyxhQUFhLFlBQVk7QUFDbkU7QUFXTyxTQUFTLG9CQUFvQixpQkFBcUQ7QUFDdkYsU0FBTyxvQkFBb0IsZUFBZSxJQUN0QyxrQkFDQTtBQUFBLElBQ0EsY0FBYztBQUFBLElBQ2QsQ0FBQyxPQUFPLFlBQVksR0FBRztBQUFBLEVBQ3pCO0FBRUYsV0FBUyxzQkFBcUM7QUFDNUMsV0FBTyxhQUFhLGVBQWU7QUFBQSxFQUNyQztBQUNGO0FBV08sU0FBUyxlQUFlLFlBQXNDO0FBQ25FLFNBQU8sZUFBZSxVQUFVLElBQzVCLGFBQ0E7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULENBQUMsT0FBTyxPQUFPLEdBQUc7QUFBQSxFQUNwQjtBQUVGLFdBQVMsaUJBQXVCO0FBQzlCLFlBQVEsVUFBVTtBQUFBLEVBQ3BCO0FBQ0Y7QUFXQSxTQUFTLHFCQUFxQixZQUFxQix5QkFBMkQ7QUFDNUcsTUFBSSxDQUFDLFlBQVk7QUFDZixXQUFPO0FBQUEsRUFDVDtBQUVBLFVBQVEseUJBQXlCO0FBQUEsSUFDL0IsS0FBSyxnQkFBZ0M7QUFDbkMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssZ0JBQWdDO0FBQ25DLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxLQUFLLGVBQStCO0FBQ2xDLFlBQU0sSUFBSSxNQUFNLDRDQUE0QztBQUFBLElBQzlEO0FBQUEsSUFDQSxTQUFTO0FBQ1Asa0JBQVksdUJBQXVCO0FBQUEsSUFDckM7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOlsiRGlzcG9zZUVycm9yQmVoYXZpb3IiLCJEaXNwb3NlT3JkZXIiLCJNdWx0aXBsZURpc3Bvc2VCZWhhdmlvciJdfQ==
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kaXNwb3NhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIHV0aWxpdGllcyBmb3IgYHVzaW5nYCAvIGBhd2FpdCB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yIH0gZnJvbSAnLi9hZ2dyZWdhdGUtZXJyb3IudHMnO1xuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBlcnJvciBzZW1hbnRpY3Mgb2YgYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9IG9yIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfSB3aGVuXG4gKiBvbmUgb2YgaXRzIGNoaWxkcmVuIHRocm93cyB3aGlsZSBiZWluZyBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGVudW0gRGlzcG9zZUVycm9yQmVoYXZpb3Ige1xuICAvKipcbiAgICogRGlzcG9zZSBldmVyeSBjaGlsZCBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdywgY29sbGVjdGluZyB0aGUgdGhyb3duIGVycm9ycyBhbmQgcmUtdGhyb3dpbmcgdGhlbVxuICAgKiBhcyBhIHNpbmdsZSB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIEFnZ3JlZ2F0ZSxcblxuICAvKipcbiAgICogUmUtdGhyb3cgdGhlIGZpcnN0IGVycm9yIGEgY2hpbGQgdGhyb3dzIGltbWVkaWF0ZWx5LCBsZWF2aW5nIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdW5kaXNwb3NlZC5cbiAgICovXG4gIEZhaWxGYXN0XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgb3JkZXIgaW4gd2hpY2ggYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9IG9yIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfSBkaXNwb3Nlc1xuICogaXRzIGNoaWxkcmVuLlxuICovXG5leHBvcnQgZW51bSBEaXNwb3NlT3JkZXIge1xuICAvKipcbiAgICogRGlzcG9zZSB0aGUgbGFzdC1yZWdpc3RlcmVkIGNoaWxkIGZpcnN0IChsYXN0LWluLCBmaXJzdC1vdXQpLCBsaWtlIG5lc3RlZCBgdXNpbmdgIGRlY2xhcmF0aW9uc1xuICAgKiB1bndpbmRpbmcgaW4gcmV2ZXJzZS5cbiAgICovXG4gIExpZm8sXG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIGZpcnN0LXJlZ2lzdGVyZWQgY2hpbGQgZmlyc3QgKGZpcnN0LWluLCBmaXJzdC1vdXQpLlxuICAgKi9cbiAgRmlmb1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaG93IGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gb3Ige0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfSBiZWhhdmVzIHdoZW4gaXQgaXNcbiAqIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICovXG5leHBvcnQgZW51bSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvciB7XG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIGV2ZXJ5IGRpc3Bvc2UuXG4gICAqL1xuICBJbnZva2UsXG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhlIGZpcnN0IGRpc3Bvc2Ugb25seTsgc3Vic2VxdWVudCBkaXNwb3NlcyBhcmUgbm8tb3BzLlxuICAgKi9cbiAgSWdub3JlLFxuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBmaXJzdCBkaXNwb3NlIG9ubHk7IHN1YnNlcXVlbnQgZGlzcG9zZXMgdGhyb3cuXG4gICAqL1xuICBUaHJvd1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RpbmcgYW4ge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogQXN5bmNEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICByZWFkb25seSBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcj86IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yO1xufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IHRoYXQgYWRkaXRpb25hbGx5IGV4cG9zZXMgYSBjb252ZW5pZW5jZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXguYXN5bmNEaXNwb3NlfVxuICogbWV0aG9kLCBzbyBhIHN0b3JlZCBoYW5kbGUgY2FuIGJlIGRpc3Bvc2VkIGFzIGBoYW5kbGUuYXN5bmNEaXNwb3NlKClgIGluc3RlYWQgb2YgdGhlIGNsdW5raWVyXG4gKiBgaGFuZGxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jRGlzcG9zYWJsZUV4IGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIERlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpYC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGFzeW5jRGlzcG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiBhbiB7QGxpbmsgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGV9IGlzIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgdHlwZSBBc3luY0Rpc3Bvc2VDYWxsYmFjayA9ICgpID0+IFByb21pc2FibGU8dm9pZD47XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGRpc3Bvc2FibGUgYmVoYXZlcyB3aGVuIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW5nIGEge0BsaW5rIENvbWJpbmVBc3luY0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVBc3luY0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXN5bmMgZGlzcG9zYWJsZXMgdG8gZGlzcG9zZSB3aGVuIHRoZSBjb21iaW5lciBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzeW5jRGlzcG9zYWJsZXM6IEl0ZXJhYmxlPEFzeW5jRGlzcG9zYWJsZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGRyZW4gYXJlIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZU9yZGVyLkxpZm99XG4gICAqL1xuICByZWFkb25seSBkaXNwb3NlT3JkZXI/OiBEaXNwb3NlT3JkZXI7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIG9uZSBvZiBpdHMgY2hpbGRyZW4gdGhyb3dzIHdoaWxlIGJlaW5nIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlfVxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcj86IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGNvbWJpbmVyIGJlaGF2ZXMgd2hlbiBpdCBpcyBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yPzogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDb21iaW5lRGlzcG9zYWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZURpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZGlzcG9zYWJsZXMgdG8gZGlzcG9zZSB3aGVuIHRoZSBjb21iaW5lciBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2FibGVzOiBJdGVyYWJsZTxEaXNwb3NhYmxlPjtcblxuICAvKipcbiAgICogVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZHJlbiBhcmUgZGlzcG9zZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBEaXNwb3NlT3JkZXIuTGlmb31cbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcj86IERpc3Bvc2VPcmRlcjtcblxuICAvKipcbiAgICogSG93IHRoZSBjb21iaW5lciBiZWhhdmVzIHdoZW4gb25lIG9mIGl0cyBjaGlsZHJlbiB0aHJvd3Mgd2hpbGUgYmVpbmcgZGlzcG9zZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBEaXNwb3NlRXJyb3JCZWhhdmlvci5BZ2dyZWdhdGV9XG4gICAqL1xuICByZWFkb25seSBlcnJvckJlaGF2aW9yPzogRGlzcG9zZUVycm9yQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIGl0IGlzIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IGFkZGl0aW9uYWxseSBleHBvc2VzIGEgY29udmVuaWVuY2Uge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QsIHNvIGFcbiAqIHN0b3JlZCBoYW5kbGUgY2FuIGJlIGRpc3Bvc2VkIGFzIGBoYW5kbGUuZGlzcG9zZSgpYCBpbnN0ZWFkIG9mIHRoZSBjbHVua2llciBgaGFuZGxlW1N5bWJvbC5kaXNwb3NlXSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNwb3NhYmxlRXggZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIERlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICByZWFkb25seSBkaXNwb3NlOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERpc3Bvc2VDYWxsYmFjayA9ICgpID0+IHZvaWQ7XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBmb3IgYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fTogaXQgY2FycmllcyB0aGUgcmUtZGlzcG9zZSBndWFyZCAodmlhXG4gKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9KSBhbmQgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeC5hc3luY0Rpc3Bvc2V9IGFsaWFzOyBhIHN1YmNsYXNzIG9ubHlcbiAqIGltcGxlbWVudHMge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2VBc3luY30uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBc3luY0Rpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlRXgge1xuICAvKipcbiAgICogSG93IHRoZSBkaXNwb3NhYmxlIGJlaGF2ZXMgd2hlbiBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHByb3RlY3RlZCBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBkaXNwb3NhYmxlIGhhcyBiZWVuIGRpc3Bvc2VkIChpdHMgdGVhcmRvd24gaGFzIHJ1biBhdCBsZWFzdCBvbmNlKS5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIG9uY2UgZGlzcG9zYWwgaGFzIHN0YXJ0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzcG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ7XG4gIH1cblxuICBwcml2YXRlIF9pc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIENvbnZlbmllbmNlIGFsaWFzIHRoYXQgZGVsZWdhdGVzIHRvIGB0aGlzW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jRGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlQmFzZS5wZXJmb3JtRGlzcG9zZUFzeW5jfSwgaG9ub3JpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSBvbiBhIHJlcGVhdCBkaXNwb3NlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5wZXJmb3JtRGlzcG9zZUFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgdGhlIGFjdHVhbCB0ZWFyZG93bi4gQ2FsbGVkIGF0IG1vc3Qgb25jZSB1bmxlc3Mge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZX0gaXMgc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNhYmxlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBlcmZvcm1EaXNwb3NlQXN5bmMoKTogUHJvbWlzYWJsZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBbiBhc3luYyBkaXNwb3NhYmxlIHRoYXQgZXhlY3V0ZXMgYSBjYWxsYmFjayB3aGVuIGRpc3Bvc2VkIHZpYSBgYXdhaXQgdXNpbmdgIChvciBhIG1hbnVhbFxuICogYGF3YWl0IGRpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKWApLlxuICovXG5leHBvcnQgY2xhc3MgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGUgZXh0ZW5kcyBBc3luY0Rpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogQXN5bmNEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNhbGxiYWNrIGNvbXBsZXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGEge0BsaW5rIERpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV0oKWAgYXQgdGhlIGNhbGwgc2l0ZTogaXQgcmVhZHMgYmV0dGVyIGFuZCBrZWVwcyB0aGVcbiAqIHdlbGwta25vd24gc3ltYm9sIHJlZmVyZW5jZWQgaW4gYSBzaW5nbGUgcGxhY2UuXG4gKlxuICogQHBhcmFtIGRpc3Bvc2FibGUgLSB0aGUgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlKGRpc3Bvc2FibGU6IERpc3Bvc2FibGUpOiB2b2lkIHtcbiAgZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGZvciBhIHtAbGluayBEaXNwb3NhYmxlRXh9OiBpdCBjYXJyaWVzIHRoZSByZS1kaXNwb3NlIGd1YXJkICh2aWEge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSlcbiAqIGFuZCB0aGUge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBhbGlhczsgYSBzdWJjbGFzcyBvbmx5IGltcGxlbWVudHMge0BsaW5rIERpc3Bvc2FibGVCYXNlLnBlcmZvcm1EaXNwb3NlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgRGlzcG9zYWJsZUV4IHtcbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICBwcm90ZWN0ZWQgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcG9zYWJsZSBoYXMgYmVlbiBkaXNwb3NlZCAoaXRzIHRlYXJkb3duIGhhcyBydW4gYXQgbGVhc3Qgb25jZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBvbmNlIGRpc3Bvc2FsIGhhcyBzdGFydGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3Bvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBDb252ZW5pZW5jZSBhbGlhcyB0aGF0IGRlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2V9LCBob25vcmluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9IG9uIGEgcmVwZWF0IGRpc3Bvc2UuXG4gICAqL1xuICBwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgdGhpcy5wZXJmb3JtRGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgdGVhcmRvd24uIENhbGxlZCBhdCBtb3N0IG9uY2UgdW5sZXNzIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2V9IGlzIHNldC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgZGlzcG9zYWJsZSB0aGF0IGV4ZWN1dGVzIGEgY2FsbGJhY2sgd2hlbiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENhbGxiYWNrRGlzcG9zYWJsZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBlcmZvcm1EaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gdGhhdCBjb21iaW5lcyBtdWx0aXBsZSBhc3luYyBkaXNwb3NhYmxlcyBhbmQgZGlzcG9zZXMgYWxsIG9mIHRoZW0gd2hlbiBpdFxuICogaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lQXN5bmNEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IHJlYWRvbmx5IEFzeW5jRGlzcG9zYWJsZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcjogRGlzcG9zZU9yZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yQmVoYXZpb3I6IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZUFzeW5jRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gWy4uLnBhcmFtcy5hc3luY0Rpc3Bvc2FibGVzXTtcbiAgICB0aGlzLmRpc3Bvc2VPcmRlciA9IHBhcmFtcy5kaXNwb3NlT3JkZXIgPz8gRGlzcG9zZU9yZGVyLkxpZm87XG4gICAgdGhpcy5lcnJvckJlaGF2aW9yID0gcGFyYW1zLmVycm9yQmVoYXZpb3IgPz8gRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlO1xuICAgIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBwYXJhbXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPz8gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIGFsbCBjb21iaW5lZCBjaGlsZHJlbiBpbiB0aGUgY29uZmlndXJlZCB7QGxpbmsgRGlzcG9zZU9yZGVyfSwgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIERpc3Bvc2VFcnJvckJlaGF2aW9yfSB3aGVuIGEgY2hpbGQgdGhyb3dzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmdldE9yZGVyZWRDaGlsZHJlbigpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjaGlsZFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgQXN5bmNEaXNwb3NhYmxlW10ge1xuICAgIHN3aXRjaCAodGhpcy5kaXNwb3NlT3JkZXIpIHtcbiAgICAgIGNhc2UgRGlzcG9zZU9yZGVyLkZpZm86IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gICAgICB9XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5MaWZvOiB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5jaGlsZHJlbl0ucmV2ZXJzZSgpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLmRpc3Bvc2VPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IGNvbWJpbmVzIG11bHRpcGxlIGRpc3Bvc2FibGVzIGFuZCBkaXNwb3NlcyBhbGwgb2YgdGhlbSB3aGVuIGl0IGlzXG4gKiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbWJpbmVEaXNwb3NhYmxlIGV4dGVuZHMgRGlzcG9zYWJsZUJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuOiByZWFkb25seSBEaXNwb3NhYmxlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zZU9yZGVyOiBEaXNwb3NlT3JkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcjogRGlzcG9zZUVycm9yQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIENvbWJpbmVEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZURpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFsuLi5wYXJhbXMuZGlzcG9zYWJsZXNdO1xuICAgIHRoaXMuZGlzcG9zZU9yZGVyID0gcGFyYW1zLmRpc3Bvc2VPcmRlciA/PyBEaXNwb3NlT3JkZXIuTGlmbztcbiAgICB0aGlzLmVycm9yQmVoYXZpb3IgPSBwYXJhbXMuZXJyb3JCZWhhdmlvciA/PyBEaXNwb3NlRXJyb3JCZWhhdmlvci5BZ2dyZWdhdGU7XG4gICAgdGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IHBhcmFtcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA/PyBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgYWxsIGNvbWJpbmVkIGNoaWxkcmVuIGluIHRoZSBjb25maWd1cmVkIHtAbGluayBEaXNwb3NlT3JkZXJ9LCBhcHBseWluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3J9IHdoZW4gYSBjaGlsZCB0aHJvd3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGVyZm9ybURpc3Bvc2UoKTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuZ2V0T3JkZXJlZENoaWxkcmVuKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNoaWxkW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgRGlzcG9zYWJsZVtdIHtcbiAgICBzd2l0Y2ggKHRoaXMuZGlzcG9zZU9yZGVyKSB7XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5GaWZvOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICAgICAgfVxuICAgICAgY2FzZSBEaXNwb3NlT3JkZXIuTGlmbzoge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuY2hpbGRyZW5dLnJldmVyc2UoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXNzZXJ0TmV2ZXIodGhpcy5kaXNwb3NlT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgYXN5bmNEaXNwb3NhYmxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgIGF0IHRoZSBjYWxsIHNpdGU6IGl0IHJlYWRzIGJldHRlciBhbmRcbiAqIGtlZXBzIHRoZSB3ZWxsLWtub3duIHN5bWJvbCByZWZlcmVuY2VkIGluIGEgc2luZ2xlIHBsYWNlLlxuICpcbiAqIEBwYXJhbSBhc3luY0Rpc3Bvc2FibGUgLSB0aGUgYXN5bmMgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlfSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICogQHJldHVybnMgV2hldGhlciB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0Rpc3Bvc2FibGUoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBhc3luY0Rpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPEFzeW5jRGlzcG9zYWJsZT47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWNvbXB1dGVkLXByb3BlcnR5LWV4aXN0ZW5jZS1jaGVjayAtLSBgT2JqZWN0Lmhhc093bmAgaXMgb3duLXByb3BlcnR5LW9ubHksIGFuZCBgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdYCBpcyBhIHByb3RvdHlwZSBtZXRob2Qgb24gZXZlcnkgY2xhc3MtYmFzZWQgZGlzcG9zYWJsZSBoZXJlLlxuICByZXR1cm4gISFhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNEaXNwb3NhYmxlRXgoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGFzeW5jRGlzcG9zYWJsZUV4ID0gJHVua25vd24gYXMgUGFydGlhbDxBc3luY0Rpc3Bvc2FibGVFeD47XG4gIHJldHVybiBpc0FzeW5jRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSAkdW5rbm93biAtIHRoZSBvYmplY3QgdG8gY2hlY2sgZm9yIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEaXNwb3NhYmxlKCR1bmtub3duOiB1bmtub3duKTogJHVua25vd24gaXMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGRpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPERpc3Bvc2FibGU+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1jb21wdXRlZC1wcm9wZXJ0eS1leGlzdGVuY2UtY2hlY2sgLS0gYE9iamVjdC5oYXNPd25gIGlzIG93bi1wcm9wZXJ0eS1vbmx5LCBhbmQgYFtTeW1ib2wuZGlzcG9zZV1gIGlzIGEgcHJvdG90eXBlIG1ldGhvZCBvbiBldmVyeSBjbGFzcy1iYXNlZCBkaXNwb3NhYmxlIGhlcmUuXG4gIHJldHVybiAhIWRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBEaXNwb3NhYmxlRXh9IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc3Bvc2FibGVFeCgkdW5rbm93bjogdW5rbm93bik6ICR1bmtub3duIGlzIERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGRpc3Bvc2FibGVFeCA9ICR1bmtub3duIGFzIFBhcnRpYWw8RGlzcG9zYWJsZUV4PjtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGRpc3Bvc2FibGVFeC5kaXNwb3NlID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIEFkYXB0cyBhIHBsYWluIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludG8gYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZX0gbWV0aG9kIHRoYXQgZGVsZWdhdGVzIHRvIGBTeW1ib2wuYXN5bmNEaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9LCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIGFzeW5jRGlzcG9zYWJsZSAtIHRoZSBhc3luYyBkaXNwb3NhYmxlIHRvIGFkYXB0XG4gKiBAcmV0dXJucyBBbiB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9IHdyYXBwaW5nIHRoZSBhc3luYyBkaXNwb3NhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Bc3luY0Rpc3Bvc2FibGVFeChhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IEFzeW5jRGlzcG9zYWJsZUV4IHtcbiAgcmV0dXJuIGlzQXN5bmNEaXNwb3NhYmxlRXgoYXN5bmNEaXNwb3NhYmxlKVxuICAgID8gYXN5bmNEaXNwb3NhYmxlXG4gICAgOiB7XG4gICAgICBhc3luY0Rpc3Bvc2U6IGFzeW5jRGlzcG9zZUFkYXB0ZWQsXG4gICAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jRGlzcG9zZUFkYXB0ZWRcbiAgICB9O1xuXG4gIGZ1bmN0aW9uIGFzeW5jRGlzcG9zZUFkYXB0ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGUpO1xuICB9XG59XG5cbi8qKlxuICogQWRhcHRzIGEgcGxhaW4ge0BsaW5rIERpc3Bvc2FibGV9IGludG8gYSB7QGxpbmsgRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QgdGhhdCBkZWxlZ2F0ZXMgdG8gYFN5bWJvbC5kaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgRGlzcG9zYWJsZUV4fSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gdGhlIGRpc3Bvc2FibGUgdG8gYWRhcHRcbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gd3JhcHBpbmcgdGhlIGRpc3Bvc2FibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rpc3Bvc2FibGVFeChkaXNwb3NhYmxlOiBEaXNwb3NhYmxlKTogRGlzcG9zYWJsZUV4IHtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZUV4KGRpc3Bvc2FibGUpXG4gICAgPyBkaXNwb3NhYmxlXG4gICAgOiB7XG4gICAgICBkaXNwb3NlOiBkaXNwb3NlQWRhcHRlZCxcbiAgICAgIFtTeW1ib2wuZGlzcG9zZV06IGRpc3Bvc2VBZGFwdGVkXG4gICAgfTtcblxuICBmdW5jdGlvbiBkaXNwb3NlQWRhcHRlZCgpOiB2b2lkIHtcbiAgICBkaXNwb3NlKGRpc3Bvc2FibGUpO1xuICB9XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgZGlzcG9zYWJsZSdzIHRlYXJkb3duIHNob3VsZCBydW4gb24gdGhlIGN1cnJlbnQgZGlzcG9zZSBjYWxsLCBhcHBseWluZyB0aGVcbiAqIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcn0gcmUtZGlzcG9zZSBwb2xpY3kuIFNpbmdsZSBzb3VyY2Ugb2YgdGhlIGd1YXJkIHNoYXJlZCBieVxuICoge0BsaW5rIERpc3Bvc2FibGVCYXNlfSBhbmQge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2V9LlxuICpcbiAqIEBwYXJhbSBpc0Rpc3Bvc2VkIC0gV2hldGhlciB0aGUgZGlzcG9zYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9uY2UuXG4gKiBAcGFyYW0gbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgLSBUaGUgcmUtZGlzcG9zZSBiZWhhdmlvci5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSB0ZWFyZG93biBzaG91bGQgcnVuLCBgZmFsc2VgIHdoZW4gaXQgc2hvdWxkIGJlIHNraXBwZWQuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFBlcmZvcm1EaXNwb3NlKGlzRGlzcG9zZWQ6IGJvb2xlYW4sIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcik6IGJvb2xlYW4ge1xuICBpZiAoIWlzRGlzcG9zZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaCAobXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpIHtcbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZToge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZToge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuVGhyb3c6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBkaXNwb3NhYmxlIGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQuJyk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGFzc2VydE5ldmVyKG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQVFBLFNBQVMsNEJBQTRCO0FBQ3JDLFNBQVMsbUJBQW1CO0FBTXJCLElBQUssdUJBQUwsa0JBQUtBLDBCQUFMO0FBS0wsRUFBQUEsNENBQUE7QUFLQSxFQUFBQSw0Q0FBQTtBQVZVLFNBQUFBO0FBQUEsR0FBQTtBQWlCTCxJQUFLLGVBQUwsa0JBQUtDLGtCQUFMO0FBS0wsRUFBQUEsNEJBQUE7QUFLQSxFQUFBQSw0QkFBQTtBQVZVLFNBQUFBO0FBQUEsR0FBQTtBQWlCTCxJQUFLLDBCQUFMLGtCQUFLQyw2QkFBTDtBQUlMLEVBQUFBLGtEQUFBO0FBS0EsRUFBQUEsa0RBQUE7QUFLQSxFQUFBQSxrREFBQTtBQWRVLFNBQUFBO0FBQUEsR0FBQTtBQXlKTCxNQUFlLG9CQUFpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU0zRCwwQkFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPN0QsSUFBYyxhQUFzQjtBQUNsQyxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFUSxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT2YsZUFBOEI7QUFDbkMsV0FBTyxLQUFLLE9BQU8sWUFBWSxFQUFFO0FBQUEsRUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE9BQWMsT0FBTyxZQUFZLElBQW1CO0FBQ2xELFFBQUksQ0FBQyxxQkFBcUIsS0FBSyxhQUFhLEtBQUssdUJBQXVCLEdBQUc7QUFDekU7QUFBQSxJQUNGO0FBRUEsU0FBSyxjQUFjO0FBQ25CLFVBQU0sS0FBSyxvQkFBb0I7QUFBQSxFQUNqQztBQVFGO0FBTU8sTUFBTSxnQ0FBZ0Msb0JBQW9CO0FBQUEs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QVMsYUFBYSxVQUEyQztBQUN0RSxRQUFNLGFBQWE7QUFFbkIsU0FBTyxDQUFDLENBQUMsV0FBVyxPQUFPLE9BQU87QUFDcEM7QUFRTyxTQUFTLGVBQWUsVUFBNkM7QUFDMUUsUUFBTSxlQUFlO0FBQ3JCLFNBQU8sYUFBYSxRQUFRLEtBQUssT0FBTyxhQUFhLFlBQVk7QUFDbkU7QUFXTyxTQUFTLG9CQUFvQixpQkFBcUQ7QUFDdkYsU0FBTyxvQkFBb0IsZUFBZSxJQUN0QyxrQkFDQTtBQUFBLElBQ0EsY0FBYztBQUFBLElBQ2QsQ0FBQyxPQUFPLFlBQVksR0FBRztBQUFBLEVBQ3pCO0FBRUYsV0FBUyxzQkFBcUM7QUFDNUMsV0FBTyxhQUFhLGVBQWU7QUFBQSxFQUNyQztBQUNGO0FBV08sU0FBUyxlQUFlLFlBQXNDO0FBQ25FLFNBQU8sZUFBZSxVQUFVLElBQzVCLGFBQ0E7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULENBQUMsT0FBTyxPQUFPLEdBQUc7QUFBQSxFQUNwQjtBQUVGLFdBQVMsaUJBQXVCO0FBQzlCLFlBQVEsVUFBVTtBQUFBLEVBQ3BCO0FBQ0Y7QUFXQSxTQUFTLHFCQUFxQixZQUFxQix5QkFBMkQ7QUFDNUcsTUFBSSxDQUFDLFlBQVk7QUFDZixXQUFPO0FBQUEsRUFDVDtBQUVBLFVBQVEseUJBQXlCO0FBQUEsSUFDL0IsS0FBSyxnQkFBZ0M7QUFDbkMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssZ0JBQWdDO0FBQ25DLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxLQUFLLGVBQStCO0FBQ2xDLFlBQU0sSUFBSSxNQUFNLDRDQUE0QztBQUFBLElBQzlEO0FBQUEsSUFDQSxTQUFTO0FBQ1Asa0JBQVksdUJBQXVCO0FBQUEsSUFDckM7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOlsiRGlzcG9zZUVycm9yQmVoYXZpb3IiLCJEaXNwb3NlT3JkZXIiLCJNdWx0aXBsZURpc3Bvc2VCZWhhdmlvciJdfQ==