@sbb-esta/lyne-elements-dev 4.11.0-dev.1776937132 → 4.11.0-dev.1776939746

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 (66) hide show
  1. package/autocomplete/autocomplete-base-element.js +1 -1
  2. package/autocomplete/autocomplete.component.js +1 -1
  3. package/{autocomplete-base-element-DNoAdA1R.js → autocomplete-base-element-BQS5lHRU.js} +1 -1
  4. package/autocomplete.js +1 -1
  5. package/autocomplete.pure.js +1 -1
  6. package/custom-elements.json +417 -417
  7. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  8. package/development/autocomplete/autocomplete-base-element.js +1 -1
  9. package/development/autocomplete/autocomplete.component.js +1 -1
  10. package/development/{autocomplete-base-element-BR5zqYyY.js → autocomplete-base-element-BGAFOzNh.js} +2 -2
  11. package/development/autocomplete.js +1 -1
  12. package/development/autocomplete.pure.js +1 -1
  13. package/development/block-link-common-COY1RI1I.js +1 -1
  14. package/development/breadcrumb-group.component-DZslNBlB.js +1 -1
  15. package/development/button-common-7dmrUx4A.js +1 -1
  16. package/development/calendar-cell-base-element-BXohfDSl.js +1 -1
  17. package/development/calendar.component-Dg3D2A7k.js +1 -1
  18. package/development/card-action-common-1FDHbfeR.js +1 -1
  19. package/development/carousel-list.component-L-nYpHcN.js +1 -1
  20. package/development/carousel.component-Dl48ROSf.js +1 -1
  21. package/development/checkbox-common-Dd5uup8K.js +1 -1
  22. package/development/checkbox-group/checkbox-group.component.js +1 -1
  23. package/development/chip-group.component-BVfHWX2-.js +1 -1
  24. package/development/core/a11y/input-modality-detector.js +1 -1
  25. package/development/core/base-elements/element.js +1 -1
  26. package/development/core/controllers/media-matchers-controller.js +1 -1
  27. package/development/core/datetime/date-adapter.js +1 -1
  28. package/development/core/datetime/native-date-adapter.js +1 -1
  29. package/development/core/datetime/temporal-date-adapter.js +1 -1
  30. package/development/core/mixins/disabled-mixin.js +1 -1
  31. package/development/core/mixins/form-associated-checkbox-mixin.js +1 -1
  32. package/development/core/mixins/form-associated-input-mixin.js +1 -1
  33. package/development/core/mixins/form-associated-mixin.js +1 -1
  34. package/development/core/mixins/form-associated-radio-button-mixin.js +1 -1
  35. package/development/core/mixins/named-slot-list-mixin.js +1 -1
  36. package/development/core/mixins/negative-mixin.js +1 -1
  37. package/development/core/mixins/readonly-mixin.js +1 -1
  38. package/development/core/mixins/required-mixin.js +1 -1
  39. package/development/core/testing/event-spy.js +1 -1
  40. package/development/datepicker-button-CUPeoQgH.js +1 -1
  41. package/development/file-selector-common-C82QR3zb.js +1 -1
  42. package/development/header-action-common-MTYV0dqA.js +1 -1
  43. package/development/icon/icon-name-mixin.js +1 -1
  44. package/development/image.component-BD0jc-u-.js +1 -1
  45. package/development/link-common-DJ2FfG_Q.js +1 -1
  46. package/development/link-list-base-CKMNz30d.js +1 -1
  47. package/development/mini-calendar.component-BufzKw74.js +1 -1
  48. package/development/navigation-action-common-Hjr4dI9J.js +1 -1
  49. package/development/navigation-section.component-CnVrRETN.js +1 -1
  50. package/development/navigation.component-CTNQ1dix.js +1 -1
  51. package/development/option/option/option-base-element.js +1 -1
  52. package/development/paginator/common/paginator-common.js +1 -1
  53. package/development/panel-mixin-Dj_rsgL9.js +1 -1
  54. package/development/popover.component-BCMdJBUR.js +1 -1
  55. package/development/radio-button-common--d3WX-ZM.js +1 -1
  56. package/development/radio-button-panel/radio-button-panel.component.js +1 -1
  57. package/development/sidebar-container.component-BDSoDAym.js +1 -1
  58. package/development/sidebar.component-BLqO52nH.js +1 -1
  59. package/development/stepper.component-CxOBayI1.js +1 -1
  60. package/development/sticky-bar.component-Dzrdsnxu.js +1 -1
  61. package/development/styles-D8-q-irv.js +1 -1
  62. package/development/tab-group.component-DldBA45K.js +1 -1
  63. package/development/teaser-product-common-DYX370pm.js +1 -1
  64. package/development/time-input.component-BtdSR8kB.js +1 -1
  65. package/development/toggle.component-BJpD1b9H.js +1 -1
  66. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-base-element.d.ts","sourceRoot":"","sources":["../../../../src/elements/autocomplete/autocomplete-base-element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autocomplete-base-element.d.ts","sourceRoot":"","sources":["../../../../src/elements/autocomplete/autocomplete-base-element.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { t as SbbAutocompleteBaseElement } from "../autocomplete-base-element-BR5zqYyY.js";
1
+ import { t as SbbAutocompleteBaseElement } from "../autocomplete-base-element-BGAFOzNh.js";
2
2
  export { SbbAutocompleteBaseElement };
@@ -1,4 +1,4 @@
1
- import { t as SbbAutocompleteBaseElement } from "../autocomplete-base-element-BR5zqYyY.js";
1
+ import { t as SbbAutocompleteBaseElement } from "../autocomplete-base-element-BGAFOzNh.js";
2
2
  import { isSafari } from "../core/dom.js";
3
3
  import { setAriaComboBoxAttributes } from "../core/overlay.js";
4
4
  import { getNextElementIndex } from "../core/a11y.js";
@@ -553,7 +553,7 @@ var SbbAutocompleteBaseElement = (() => {
553
553
  this.triggerElement.addEventListener("click", () => this.open(), { signal: this._triggerAbortController.signal });
554
554
  this.triggerElement.addEventListener("input", (event) => {
555
555
  const value = event.target.value;
556
- if (value) this.open();
556
+ if (value && event.isTrusted) this.open();
557
557
  this._highlightOptions(value);
558
558
  this._lastUserInput = value;
559
559
  this.pendingAutoSelectedOption = null;
@@ -689,4 +689,4 @@ var SbbAutocompleteBaseElement = (() => {
689
689
  //#endregion
690
690
  export { SbbAutocompleteBaseElement as t };
691
691
 
692
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWJhc2UtZWxlbWVudC1CUjV6cVl5WS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1iYXNlLWVsZW1lbnQuc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1iYXNlLWVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuLy8gRml4ZXMgdGhlIGdhcCBiZXR3ZWVuIHRoZSBvcmlnaW4gYW5kIHRoZSBvdmVybGF5IGJ5IGNyZWF0aW5nIGNvbmp1bmN0aW9uXG4vLyBjb3JuZXJzIGJhc2VkIG9uIHRoZSBvcmlnaW4gZWxlbWVudCBib3JkZXIgcmFkaXVzXG5AaW5jbHVkZSBzYmIub3ZlcmxheS1nYXAtZml4O1xuXG46aG9zdCB7XG4gIEBpbmNsdWRlIHNiYi5vcHRpb25zLXBhbmVsLW92ZXJsYXktdmFyaWFibGVzO1xuXG4gIC0tc2JiLW9wdGlvbnMtcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgLS1zYmItb3B0aW9ucy1wYW5lbC1pbnRlcm5hbC16LWluZGV4OiB2YXIoXG4gICAgLS1zYmItYXV0b2NvbXBsZXRlLXotaW5kZXgsXG4gICAgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KVxuICApO1xuXG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC10ZXh0KTtcbn1cblxuOmhvc3QoW3NpemU9J3MnXSkge1xuICBAaW5jbHVkZSBzYmIub3B0aW9ucy1wYW5lbC1vdmVybGF5LXNpemUtcy12YXJpYWJsZXM7XG59XG5cbjpob3N0KFtzaXplPSdtJ10pIHtcbiAgQGluY2x1ZGUgc2JiLm9wdGlvbnMtcGFuZWwtb3ZlcmxheS1zaXplLW0tdmFyaWFibGVzO1xufVxuXG46aG9zdCg6aXMoOnN0YXRlKHN0YXRlLW9wZW5pbmcpLCA6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLWNsb3NpbmcpKSkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuOmhvc3QoW25lZ2F0aXZlXSkge1xuICBAaW5jbHVkZSBzYmIub3B0aW9ucy1wYW5lbC1vdmVybGF5LW5lZ2F0aXZlLXZhcmlhYmxlcztcbn1cblxuOmhvc3QoOm5vdCg6c3RhdGUoc3RhdGUtb3BlbmluZyksIDpzdGF0ZShzdGF0ZS1vcGVuZWQpLCA6c3RhdGUoc3RhdGUtY2xvc2luZykpKSxcbjpob3N0KDpzdGF0ZShzdGF0ZS1jbG9zZWQpKSB7XG4gIC0tc2JiLW9wdGlvbnMtcGFuZWwtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAtLXNiYi1vcHRpb25zLXBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG46aG9zdCg6c3RhdGUoc3RhdGUtb3BlbmluZykpIHtcbiAgLS1zYmItb3B0aW9ucy1wYW5lbC1hbmltYXRpb24tbmFtZTogb3Blbjtcbn1cblxuOmhvc3QoOnN0YXRlKHN0YXRlLWNsb3NpbmcpKSB7XG4gIC0tc2JiLW9wdGlvbnMtcGFuZWwtYW5pbWF0aW9uLW5hbWU6IGNsb3NlO1xufVxuXG46aG9zdCg6c3RhdGUoc3RhdGUtb3BlbmVkKSksXG46aG9zdCg6c3RhdGUoc3RhdGUtb3BlbmluZykpIHtcbiAgLS1zYmItb3B0aW9ucy1wYW5lbC1nYXAtZml4LW9wYWNpdHk6IDE7XG59XG5cbjpob3N0KDpzdGF0ZShvcHRpb25zLXBhbmVsLXBvc2l0aW9uLWJlbG93KSkge1xuICAtLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoXG4gICAgY2FsYygodmFyKC0tc2JiLW9wdGlvbnMtcGFuZWwtb3JpZ2luLWhlaWdodCkgLyAyKSAqIC0xKVxuICApO1xufVxuXG46aG9zdCg6c3RhdGUob3B0aW9ucy1wYW5lbC1wb3NpdGlvbi1hYm92ZSkpIHtcbiAgLS1zYmItb3B0aW9ucy1wYW5lbC1vcHRpb25zLWJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi1vcHRpb25zLXBhbmVsLWJvcmRlci1yYWRpdXMpXG4gICAgdmFyKC0tc2JiLW9wdGlvbnMtcGFuZWwtYm9yZGVyLXJhZGl1cykgMCAwO1xuICAtLXNiYi1vcHRpb25zLXBhbmVsLWdhcC1maXgtdG9wOiB2YXIoLS1fc2JiLW9wdGlvbnMtcGFuZWwtbWF4LWhlaWdodCk7XG4gIC0tc2JiLW9wdGlvbnMtcGFuZWwtZ2FwLWZpeC10cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAtLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoXG4gICAgY2FsYyh2YXIoLS1zYmItb3B0aW9ucy1wYW5lbC1vcmlnaW4taGVpZ2h0KSAvIDIpXG4gICk7XG59XG5cbjpob3N0KFtwcmVzZXJ2ZS1pY29uLXNwYWNlXSkge1xuICAtLXNiYi1vcHRpb24taWNvbi1jb250YWluZXItZGlzcGxheTogYmxvY2s7XG59XG5cbjo6c2xvdHRlZChzYmItZGl2aWRlcikge1xuICBtYXJnaW4tYmxvY2s6IHZhcigtLXNiYi1vcHRpb25zLXBhbmVsLWRpdmlkZXItbWFyZ2luLWJsb2NrKTtcbn1cblxuLnNiYi1hdXRvY29tcGxldGVfX2NvbnRhaW5lciB7XG4gIEBpbmNsdWRlIHNiYi5vcHRpb25zLXBhbmVsLW92ZXJsYXktY29udGFpbmVyO1xufVxuXG4uc2JiLWF1dG9jb21wbGV0ZV9fZ2FwLWZpeCB7XG4gIEBpbmNsdWRlIHNiYi5vcHRpb25zLXBhbmVsLW92ZXJsYXktZ2FwO1xufVxuXG4uc2JiLWF1dG9jb21wbGV0ZV9fcGFuZWwge1xuICBAaW5jbHVkZSBzYmIub3B0aW9ucy1wYW5lbC1vdmVybGF5O1xuXG4gIDpob3N0KDpzdGF0ZShvcHRpb25zLXBhbmVsLXBvc2l0aW9uLWJlbG93KSkgJiB7XG4gICAgaW5zZXQtYmxvY2stc3RhcnQ6IGNhbGMoXG4gICAgICB2YXIoLS1zYmItb3B0aW9ucy1wYW5lbC1wb3NpdGlvbi15KSAtIHZhcigtLXNiYi1vcHRpb25zLXBhbmVsLW9yaWdpbi1oZWlnaHQpXG4gICAgKTtcbiAgfVxuXG4gIDpob3N0KDppcyg6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLW9wZW5pbmcpKSkgJiB7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2JiLWJveC1zaGFkb3ctbGV2ZWwtNS1oYXJkKTtcbiAgfVxuXG4gIDpob3N0KDppcyg6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLW9wZW5pbmcpKVtuZWdhdGl2ZV0pICYge1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNiYi1ib3gtc2hhZG93LWxldmVsLTUtaGFyZC1uZWdhdGl2ZSk7XG4gIH1cblxuICAmOjpiZWZvcmUge1xuICAgIDpob3N0KDpzdGF0ZShvcHRpb25zLXBhbmVsLXBvc2l0aW9uLWJlbG93KSkgJiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICAmOjphZnRlciB7XG4gICAgOmhvc3QoOnN0YXRlKG9wdGlvbnMtcGFuZWwtcG9zaXRpb24tYWJvdmUpKSAmIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kZXNjZW5kaW5nLXNwZWNpZmljaXR5XG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIDpob3N0KDppcyg6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLW9wZW5pbmcpKTpzdGF0ZShvcHRpb24tcGFuZWwtb3JpZ2luLWJvcmRlcmxlc3MpKVxuICAgICAgJiB7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1zYmItYm94LXNoYWRvdy1sZXZlbC01LWhhcmQpO1xuICAgIH1cblxuICAgIDpob3N0KFxuICAgICAgICA6aXMoOnN0YXRlKHN0YXRlLW9wZW5lZCksIDpzdGF0ZShzdGF0ZS1vcGVuaW5nKSk6c3RhdGUoXG4gICAgICAgICAgICBvcHRpb24tcGFuZWwtb3JpZ2luLWJvcmRlcmxlc3NcbiAgICAgICAgICApW25lZ2F0aXZlXVxuICAgICAgKVxuICAgICAgJiB7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1zYmItYm94LXNoYWRvdy1sZXZlbC01LWhhcmQtbmVnYXRpdmUpO1xuICAgIH1cbiAgfVxufVxuXG4uc2JiLWF1dG9jb21wbGV0ZV9fd3JhcHBlciB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5zYmItYXV0b2NvbXBsZXRlX19vcHRpb25zIHtcbiAgQGluY2x1ZGUgc2JiLm9wdGlvbnNPdmVybGF5O1xuICBAaW5jbHVkZSBzYmIuc2Nyb2xsYmFyLXJ1bGVzO1xuXG4gIHBvaW50ZXItZXZlbnRzOiB2YXIoLS1zYmItb3B0aW9ucy1wb2ludGVyLWV2ZW50cyk7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGJvcmRlcjogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0xeCkgc29saWQgQ2FudmFzVGV4dDtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgb3BlbiB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogdmFyKC0tc2JiLW9wdGlvbnMtcGFuZWwtYW5pbWF0aW9uLXRyYW5zZm9ybSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGNsb3NlIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB2YXIoLS1zYmItb3B0aW9ucy1wYW5lbC1hbmltYXRpb24tdHJhbnNmb3JtKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG4iLCJpbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxuICB1bnNhZmVDU1MsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLnRzJztcbmltcG9ydCB7XG4gIFNiYlByb3BlcnR5V2F0Y2hlckNvbnRyb2xsZXIsXG4gIFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLFxufSBmcm9tICcuLi9jb3JlL2NvbnRyb2xsZXJzLnRzJztcbmltcG9ydCB7IGZvcmNlVHlwZSwgaWRSZWZlcmVuY2UgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgaXNMZWFuLCBpc1NhZmFyaSwgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24gfSBmcm9tICcuLi9jb3JlL2RvbS50cyc7XG5pbXBvcnQgeyBTYmJOZWdhdGl2ZU1peGluIH0gZnJvbSAnLi4vY29yZS9taXhpbnMudHMnO1xuaW1wb3J0IHtcbiAgaXNFdmVudE9uRWxlbWVudCxcbiAgb3ZlcmxheUdhcEZpeENvcm5lcnMsXG4gIHJlbW92ZUFyaWFDb21ib0JveEF0dHJpYnV0ZXMsXG4gIHNldE92ZXJsYXlQb3NpdGlvbixcbn0gZnJvbSAnLi4vY29yZS9vdmVybGF5LnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uL2NvcmUvc3R5bGVzLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiRm9ybUZpZWxkRWxlbWVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdGlvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vb3B0aW9uLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vYXV0b2NvbXBsZXRlLWJhc2UtZWxlbWVudC5zY3NzP2lubGluZSc7XG5cbi8qKlxuICogT24gU2FmYXJpLCB0aGUgYXJpYSByb2xlICdsaXN0Ym94JyBtdXN0IGJlIG9uIHRoZSBob3N0IGVsZW1lbnQsIG9yIGVsc2UgVm9pY2VPdmVyIHdvbid0IHdvcmsgYXQgYWxsLlxuICogT24gdGhlIG90aGVyIGhhbmQsIEpBV1MgYW5kIE5WREEgbmVlZCB0aGUgcm9sZSB0byBiZSBcImNsb3NlclwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGF1dG9jb21wbGV0ZSBjb21wb25lbnRzLlxuICpcbiAqIEBldmVudCB7RXZlbnR9IGNoYW5nZSAtIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgb24gdGhlIGF1dG9jb21wbGV0ZSdzIHRyaWdnZXIgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLiBVbmxpa2UgdGhlIGlucHV0IGV2ZW50LCB0aGUgY2hhbmdlIGV2ZW50IGlzIG5vdCBuZWNlc3NhcmlseSBmaXJlZCBmb3IgZWFjaCBhbHRlcmF0aW9uIHRvIGFuIGVsZW1lbnQncyB2YWx1ZS5cbiAqIEBldmVudCB7SW5wdXRFdmVudH0gaW5wdXQgLSBUaGUgaW5wdXQgZXZlbnQgZmlyZXMgIG9uIHRoZSBhdXRvY29tcGxldGUncyB0cmlnZ2VyIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgYXMgYSBkaXJlY3QgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYmJBdXRvY29tcGxldGVCYXNlRWxlbWVudDxUID0gc3RyaW5nPiBleHRlbmRzIFNiYk5lZ2F0aXZlTWl4aW4oXG4gIFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50LFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB3aGVyZSB0aGUgYXV0b2NvbXBsZXRlIHdpbGwgYXR0YWNoLlxuICAgKiBJZiBub3Qgc2V0LCBhcyBmYWxsYmFjayB0aGVyZSBhcmUgdHdvIGVsZW1lbnRzIHdoaWNoIGNhbiBhY3QgYXMgb3JpZ2luIHdpdGggZm9sbG93aW5nIHByaW9yaXR5IG9yZGVyOlxuICAgKiAxLiBgc2JiLWZvcm0tZmllbGRgIGlmIGl0IGlzIGFuIGFuY2VzdG9yLlxuICAgKiAyLiB0cmlnZ2VyIGVsZW1lbnQgaWYgc2V0LlxuICAgKlxuICAgKiBGb3IgYXR0cmlidXRlIHVzYWdlLCBwcm92aWRlIGFuIGlkIHJlZmVyZW5jZS5cbiAgICovXG4gIEBpZFJlZmVyZW5jZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBvcmlnaW46IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBlbGVtZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBhdXRvY29tcGxldGUgb3BlbmluZy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGF1dG9jb21wbGV0ZSB3aWxsIG9wZW4gb24gZm9jdXMsIGNsaWNrLCBpbnB1dCBvciBgQXJyb3dEb3duYCBrZXlwcmVzcyBvZiB0aGUgJ3RyaWdnZXInIGVsZW1lbnQuXG4gICAqIElmIG5vdCBzZXQsIHdpbGwgc2VhcmNoIGZvciB0aGUgZmlyc3QgJ2lucHV0JyBjaGlsZCBvZiBhICdzYmItZm9ybS1maWVsZCcgYW5jZXN0b3IuXG4gICAqXG4gICAqIEZvciBhdHRyaWJ1dGUgdXNhZ2UsIHByb3ZpZGUgYW4gaWQgcmVmZXJlbmNlLlxuICAgKi9cbiAgQGlkUmVmZXJlbmNlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIHRyaWdnZXI6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgaWNvbiBzcGFjZSBpcyBwcmVzZXJ2ZWQgd2hlbiBubyBpY29uIGlzIHNldC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3ByZXNlcnZlLWljb24tc3BhY2UnLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBwcmVzZXJ2ZUljb25TcGFjZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBmaXJzdCBvcHRpb24gaXMgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQgd2hlbiB0aGUgYXV0b2NvbXBsZXRlIGlzIG9wZW5lZC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2F1dG8tYWN0aXZlLWZpcnN0LW9wdGlvbicsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGF1dG9BY3RpdmVGaXJzdE9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBGdW5jdGlvbiB0aGF0IG1hcHMgYW4gb3B0aW9uJ3MgY29udHJvbCB2YWx1ZSB0byBpdHMgZGlzcGxheSB2YWx1ZSBpbiB0aGUgdHJpZ2dlci4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZGlzcGxheVdpdGg6ICgodmFsdWU6IFQpID0+IHN0cmluZykgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2l6ZSB2YXJpYW50LCBlaXRoZXIgbSBvciBzLlxuICAgKiBAZGVmYXVsdCAnbScgLyAncycgKGxlYW4pXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAnbScgfCAncycgPSBpc0xlYW4oKSA/ICdzJyA6ICdtJztcblxuICAvKiogV2hldGhlciB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgYmUgc2VsZWN0ZWQgYXMgdGhlIHVzZXIgaXMgbmF2aWdhdGluZy4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2F1dG8tc2VsZWN0LWFjdGl2ZS1vcHRpb24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGFjdGl2ZSBvcHRpb24gaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbiBibHVyLlxuICAgKiBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLiBJdCBtaWdodCBiZSBzdWJqZWN0IHRvIGNoYW5nZXMuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYXV0by1zZWxlY3QtYWN0aXZlLW9wdGlvbi1vbi1ibHVyJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbk9uQmx1cjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBzZWxlY3Rpb24gd2hlbiB0aGV5J3JlIGludGVyYWN0aW5nIHdpdGggdGhlXG4gICAqIGF1dG9jb21wbGV0ZS4gSWYgdGhlIHVzZXIgbW92ZXMgYXdheSBmcm9tIHRoZSBhdXRvY29tcGxldGUgd2l0aG91dCBzZWxlY3RpbmcgYW4gb3B0aW9uIGZyb21cbiAgICogdGhlIGxpc3QsIHRoZSB2YWx1ZSB3aWxsIGJlIHJlc2V0LiBJZiB0aGUgdXNlciBvcGVucyB0aGUgcGFuZWwgYW5kIGNsb3NlcyBpdCB3aXRob3V0XG4gICAqIGludGVyYWN0aW5nIG9yIHNlbGVjdGluZyBhIHZhbHVlLCB0aGUgaW5pdGlhbCB2YWx1ZSB3aWxsIGJlIGtlcHQuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAncmVxdWlyZS1zZWxlY3Rpb24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciByZXF1aXJlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgYXV0b2NvbXBsZXRlIHBhbmVsIHJlbGF0aXZlIHRvIHRoZSB0cmlnZ2VyLlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBwb3NpdGlvbjogJ2F1dG8nIHwgJ2Fib3ZlJyB8ICdiZWxvdycgPSAnYXV0byc7XG5cbiAgLyoqIFJldHVybnMgdGhlIGVsZW1lbnQgd2hlcmUgdGhlIGF1dG9jb21wbGV0ZSBvdmVybGF5IGlzIGF0dGFjaGVkIHRvLiAqL1xuICBwdWJsaWMgZ2V0IG9yaWdpbkVsZW1lbnQoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5vcmlnaW4gPz9cbiAgICAgIHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy4oJyNvdmVybGF5LWFuY2hvcicpID8/XG4gICAgICB0aGlzLnRyaWdnZXIgPz9cbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHRyaWdnZXIgZWxlbWVudC4gKi9cbiAgcHVibGljIGdldCB0cmlnZ2VyRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50ID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ/OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb3ZlcmxheUlkOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYW5lbFJvbGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJvdGVjdGVkIHBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb246IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICAvLyBUaGlzIGlzIGFuIElJRkUsIGJlY2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IHN0YXRlXG4gICAgLy8gZm9yIGRlYm91bmNpbmcgdGhlIHJlc2l6ZSBjYWxsYmFja3MuXG4gICAgY2FsbGJhY2s6ICgoKSA9PiB7XG4gICAgICBsZXQgdGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCAxMCk7XG4gICAgICB9O1xuICAgIH0pKCksXG4gIH0pO1xuICAvKiogTGlzdGVucyB0byB0aGUgY2hhbmdlcyBvbiB0aGUgYGRpc2FibGVkYCBvciBgcmVhZG9ubHlgIGF0dHJpYnV0ZSBvZiB0aGUgdHJpZ2dlci4gKi9cbiAgcHJpdmF0ZSBfdHJpZ2dlckF0dHJpYnV0ZU9ic2VydmVyID0gIWlzU2VydmVyXG4gICAgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gbXV0YXRpb25zWzBdLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpIHx8IGlucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGw7XG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3B0aW9uQ29udGFpbmVyITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2lzUG9pbnRlckRvd25FdmVudE9uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlciA9IG5ldyBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfb3B0aW9uc0NvdW50ID0gMDtcbiAgcHJpdmF0ZSBfcHJldmlvdXNFbGVtZW50cz86IEVsZW1lbnRbXTtcblxuICAvKiogVHJhY2tzIGlucHV0IGZyb20ga2V5Ym9hcmQuICovXG4gIHByaXZhdGUgX2xhc3RVc2VySW5wdXQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBJZiB0cnVlLCB0aGUgJ2NoYW5nZScgZXZlbnQgc291cmNlIGlzIGFuIG9wdGlvbiBzZWxlY3Rpb24gb3IgYSAncmVxdWlyZVNlbGVjdGlvbicgZmllbGQgY2xlYW51cCAqL1xuICBwcml2YXRlIF9pc0N1c3RvbUNoYW5nZUV2ZW50ID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBvcHRpb25zKCk6IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+W107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ29wdGlvbnNlbGVjdGVkJywgKGU6IEV2ZW50KSA9PiB0aGlzLm9uT3B0aW9uU2VsZWN0ZWQoZSkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCfJtW9wdGdyb3Vwc2xvdGNoYW5nZScsICgpID0+IHRoaXMuX2hhbmRsZVNsb3RjaGFuZ2UoKSwge1xuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgU2JiUHJvcGVydHlXYXRjaGVyQ29udHJvbGxlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgKCkgPT4gdGhpcy5jbG9zZXN0PFNiYkZvcm1GaWVsZEVsZW1lbnQ+KCdzYmItZm9ybS1maWVsZCcpLFxuICAgICAgICB7XG4gICAgICAgICAgbmVnYXRpdmU6IChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5lZ2F0aXZlID0gZS5uZWdhdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuc3luY05lZ2F0aXZlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBib3JkZXJsZXNzOiAoZSkgPT4gdGhpcy50b2dnbGVTdGF0ZSgnb3B0aW9uLXBhbmVsLW9yaWdpbi1ib3JkZXJsZXNzJywgZS5ib3JkZXJsZXNzKSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzeW5jTmVnYXRpdmUoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFRyaWdnZXJBdHRyaWJ1dGVzKGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNlbGVjdEJ5S2V5Ym9hcmQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVzZXRBY3RpdmVFbGVtZW50KCk6IHZvaWQ7XG5cbiAgLyoqIE9wZW5zIHRoZSBhdXRvY29tcGxldGUuICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJyB8fFxuICAgICAgdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcgfHxcbiAgICAgICF0aGlzLl9vdmVybGF5IHx8XG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwIHx8XG4gICAgICB0aGlzLl9yZWFkb25seSgpIHx8XG4gICAgICAhdGhpcy5kaXNwYXRjaEJlZm9yZU9wZW5FdmVudCgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaG93UG9wb3Zlcj8uKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICBjb25zdCBvcmlnaW5FbGVtZW50ID0gdGhpcy5vcmlnaW5FbGVtZW50O1xuICAgIGlmICghb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGZpbmQgdGhlIG9yaWdpbiBlbGVtZW50LiBQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIGVsZW1lbnQgb3IgY2hlY2sgdGhlIHVzYWdlIG9mIHRoZSBcIm9yaWdpblwiIHByb3BlcnR5IGZyb20gdGhlIGRvY3VtZW50YXRpb24nLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKG9yaWdpbkVsZW1lbnQpO1xuICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25JZkF1dG9BY3RpdmVGaXJzdE9wdGlvbigpO1xuICAgIHRoaXMuX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpO1xuICAgIHRoaXMuX2VzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLmNvbm5lY3QoKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBvcGVuZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgYXV0b2NvbXBsZXRlLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnY2xvc2VkJyB8fCAhdGhpcy5kaXNwYXRjaEJlZm9yZUNsb3NlRXZlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBpcyBjb25maXJtZWQgb24gcGFuZWwgY2xvc2VcbiAgICBpZiAodGhpcy5wZW5kaW5nQXV0b1NlbGVjdGVkT3B0aW9uKSB7XG4gICAgICB0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fc2V0VmFsdWVBbmREaXNwYXRjaEV2ZW50cyh0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24sIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWV4cGFuZGVkJyk7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5hYm9ydCgpO1xuICAgIGlmICh0aGlzLm9yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLm9yaWdpbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKHRoaXMsICctLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMucG9wb3ZlciA9ICdtYW51YWwnO1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgaWYgKGFyaWFSb2xlT25Ib3N0KSB7XG4gICAgICB0aGlzLmlkIHx8PSB0aGlzLm92ZXJsYXlJZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRTZXR1cCgpO1xuICAgIH1cbiAgICB0aGlzLnN5bmNOZWdhdGl2ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpKSB7XG4gICAgICB0aGlzLnN5bmNOZWdhdGl2ZSgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2F1dG9BY3RpdmVGaXJzdE9wdGlvbicpICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uSWZBdXRvQWN0aXZlRmlyc3RPcHRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy5fY29tcG9uZW50U2V0dXAoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICBuYW1lPzogUHJvcGVydHlLZXksXG4gICAgb2xkVmFsdWU/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICApOiB2b2lkIHtcbiAgICBzdXBlci5yZXF1ZXN0VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBvcHRpb25zKTtcblxuICAgIGlmIChpc1NlcnZlciB8fCAhdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghbmFtZSB8fCBuYW1lID09PSAndHJpZ2dlcicpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZVRyaWdnZXIoKTtcbiAgICB9IGVsc2UgaWYgKCghbmFtZSB8fCBuYW1lID09PSAnb3JpZ2luJykgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCwgdXBkYXRlIHRoZSBpbnB1dCB2YWx1ZSBhbmQgY2xvc2UgdGhlIGF1dG9jb21wbGV0ZS4gKi9cbiAgcHJvdGVjdGVkIG9uT3B0aW9uU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+O1xuICAgIHRoaXMuX3NldFZhbHVlQW5kRGlzcGF0Y2hFdmVudHModGFyZ2V0KTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgcHJvdGVjdGVkIG9uT3B0aW9uQXJyb3dzU2VsZWN0ZWQoX2FjdGl2ZU9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4pOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBzZXRzIHRoZSBvcHRpb24gdmFsdWUgaW4gdGhlIGlucHV0IGVsZW1lbnQgd2l0aG91dCBlbWl0dGluZyBldmVudHMuXG4gICAqIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBpcyBjb25maXJtZWQgd2hlbiB0aGUgcGFuZWwgY2xvc2VzLiBBbnkgb3RoZXIgdXNlciBpbnRlcmFjdGlvblxuICAgKiB3aWxsIHJlc2V0IHRoZSBwZW5kaW5nIHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldFBlbmRpbmdTZWxlY3Rpb24oYWN0aXZlT3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxUPik6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ0F1dG9TZWxlY3RlZE9wdGlvbiA9IGFjdGl2ZU9wdGlvbjtcbiAgICB0aGlzLl9zZXRJbnB1dFZhbHVlKGFjdGl2ZU9wdGlvbik7XG4gIH1cblxuICBwcml2YXRlIF9zZXRWYWx1ZUFuZERpc3BhdGNoRXZlbnRzKFxuICAgIHNlbGVjdGVkT3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxUPixcbiAgICBwcmV2ZW50Rm9jdXMgPSBmYWxzZSxcbiAgKTogdm9pZCB7XG4gICAgLy8gRGVzZWxlY3QgdGhlIHByZXZpb3VzIG9wdGlvbnNcbiAgICB0aGlzLm9wdGlvbnNcbiAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmlkICE9PSBzZWxlY3RlZE9wdGlvbi5pZCAmJiBvcHRpb24uc2VsZWN0ZWQpXG4gICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICB0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3NldElucHV0VmFsdWUoc2VsZWN0ZWRPcHRpb24pO1xuXG4gICAgICAvLyBNYW51YWxseSB0cmlnZ2VyIHRoZSBjaGFuZ2UgZXZlbnRzXG4gICAgICB0aGlzLl9pc0N1c3RvbUNoYW5nZUV2ZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG5cbiAgICAgIC8vIERpc3BhdGNoaW5nIHRoZSBpbnB1dCBldmVudCBjaGFuZ2VzIF9sYXN0SW5wdXQsIHdoaWNoIHNob3VsZCBzdGF5IGVtcHR5IHNpbmNlIHRoZXJlJ3Mgbm8ga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAgICB0aGlzLl9sYXN0VXNlcklucHV0ID0gbnVsbDtcblxuICAgICAgLy8gQ3VzdG9tIGlucHV0IGV2ZW50IGVtaXR0ZWQgd2hlbiBpbnB1dCB2YWx1ZSBjaGFuZ2VzIGFmdGVyIGFuIG9wdGlvbiBpcyBzZWxlY3RlZFxuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvcHRpb246IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+IH0+KCdpbnB1dEF1dG9jb21wbGV0ZScsIHtcbiAgICAgICAgICBkZXRhaWw6IHsgb3B0aW9uOiBzZWxlY3RlZE9wdGlvbiB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBpZiAoIXByZXZlbnRGb2N1cykge1xuICAgICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldCB0aGUgb3B0aW9uIHZhbHVlIHdpdGhpbiB0aGUgaW5wdXQgZWxlbWVudCAqL1xuICBwcml2YXRlIF9zZXRJbnB1dFZhbHVlKG9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlbiBhIHZhbHVlLCByZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBzaG91bGQgYmUgc2hvd24gd2l0aGluIHRoZSBpbnB1dC5cbiAgICBjb25zdCB0b0Rpc3BsYXkgPSB0aGlzLmRpc3BsYXlXaXRoPy4ob3B0aW9uLnZhbHVlIGFzIFQpID8/IG9wdGlvbi52YWx1ZTtcblxuICAgIC8vIFNldCB0aGUgb3B0aW9uIHZhbHVlXG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBSZWFjdCBvbkNoYW5nZSBldmVudCwgd2UgaGF2ZSB0byBnZXQgdGhlIHNldHRlciBhbmQgY2FsbCBpdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExNjAwI2lzc3VlY29tbWVudC0zNDU4MTMxMzBcbiAgICBjb25zdCBzZXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpIS5zZXQhO1xuICAgIHNldFZhbHVlLmNhbGwodGhpcy50cmlnZ2VyRWxlbWVudCwgdG9EaXNwbGF5KTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNsb3RjaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9ucyh0aGlzLnRyaWdnZXJFbGVtZW50Py52YWx1ZSk7XG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IGFuIGVsZW1lbnQgaXMgYWRkZWQgdGhhdCBoYXMgbm90IGJlZW4gcmVuZGVyZWRcbiAgICAvLyB5ZXQgYW5kIHRoZXJlZm9yZSBoYXMgaGVpZ2h0IDAuIFRoZXJlZm9yZSB3ZSBhbHNvIG9ic2VydmUgdGhlIHNpemVcbiAgICAvLyBvZiBhbGwgY2hpbGQgZWxlbWVudHMuXG4gICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSk7XG4gICAgdGhpcy5fcHJldmlvdXNFbGVtZW50cz8uZm9yRWFjaCgoZSkgPT4gdGhpcy5fcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGUpKTtcbiAgICB0aGlzLl9wcmV2aW91c0VsZW1lbnRzID0gY3VycmVudEVsZW1lbnRzO1xuICAgIHRoaXMuX3ByZXZpb3VzRWxlbWVudHMuZm9yRWFjaCgoZSkgPT4gdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlKSk7XG5cbiAgICAvKipcbiAgICAgKiBJdCdzIHBvc3NpYmxlIHRvIGZpbHRlciBvdXQgb3B0aW9ucyB3aXRoIGFuIG9wZW5lZCBwYW5lbCBvbiBpbnB1dCBjaGFuZ2UuXG4gICAgICogSW4gdGhpcyBjYXNlLCB0aGUgcGFuZWwncyBwb3NpdGlvbiBtdXN0IGJlIHJlY2FsY3VsYXRlZCBjb25zaWRlcmluZyB0aGUgbmV3IG9wdGlvbidzIGxpc3QuXG4gICAgICovXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKTtcbiAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25JZkF1dG9BY3RpdmVGaXJzdE9wdGlvbigpO1xuXG4gICAgICAvLyBJZiB0aGUgYXV0b2NvbXBsZXRlIGlzIG9wZW4gYW5kIHRoZSBvcHRpb24gY291bnQgZ2V0cyB0byB6ZXJvLCB3ZSBjbG9zZSB0aGUgYXV0b2NvbXBsZXRlLlxuICAgICAgaWYgKHRoaXMuX29wdGlvbnNDb3VudCA+IDAgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIElmIHRoZSAnaW5wdXQnIGlzIGZvY3VzZWQgYW5kIHRoZSBjb3VudCBvZiBvcHRpb25zIGNoYW5nZXMgZnJvbSAwIHRvID4gMCxcbiAgICAgIC8vIHRoZSBhdXRvY29tcGxldGUgc2hvdWxkIG9wZW4gYXV0b21hdGljYWxseS5cbiAgICAgIGRvY3VtZW50Py5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyaWdnZXJFbGVtZW50ICYmXG4gICAgICB0aGlzLl9vcHRpb25zQ291bnQgPT09IDAgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLl9vcHRpb25zQ291bnQgPSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEFjdGl2ZU9wdGlvbklmQXV0b0FjdGl2ZUZpcnN0T3B0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9BY3RpdmVGaXJzdE9wdGlvbikge1xuICAgICAgdGhpcy5yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgIHRoaXMuc2V0TmV4dEFjdGl2ZU9wdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgYXV0b2NvbXBsZXRlIHNob3VsZCBpbmhlcml0ICdyZWFkb25seScgc3RhdGUgZnJvbSB0aGUgdHJpZ2dlci4gKi9cbiAgcHJpdmF0ZSBfcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlckVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXBvbmVudFNldHVwKCk6IHZvaWQge1xuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZ3VyZVRyaWdnZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ3VyZVRyaWdnZXIoKTogdm9pZCB7XG4gICAgY29uc3QgdHJpZ2dlckVsZW1lbnQgPSAodGhpcy50cmlnZ2VyID8/XG4gICAgICB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKSkgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgaWYgKHRyaWdnZXJFbGVtZW50ID09PSB0aGlzLnRyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICByZW1vdmVBcmlhQ29tYm9Cb3hBdHRyaWJ1dGVzKHRoaXMudHJpZ2dlckVsZW1lbnQpO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gdHJpZ2dlckVsZW1lbnQ7XG5cbiAgICBpZiAoIXRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBcyB0aGUgdHJpZ2dlciBjYW4gYmUgdGhlIGZhbGxiYWNrIG9mIHRoZSBvcmlnaW4sIHdlIGV2ZW50dWFsbHkgaGF2ZSB0byB1cGRhdGUgdGhlIHBvc2l0aW9uLlxuICAgIGNvbnN0IG9yaWdpbkVsZW1lbnQgPSB0aGlzLm9yaWdpbkVsZW1lbnQ7XG4gICAgaWYgKHRoaXMudHJpZ2dlckVsZW1lbnQgPT09IG9yaWdpbkVsZW1lbnQgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbihvcmlnaW5FbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLl90cmlnZ2VyQXR0cmlidXRlT2JzZXJ2ZXI/Lm9ic2VydmUodGhpcy50cmlnZ2VyRWxlbWVudCEsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknXSxcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0VHJpZ2dlckF0dHJpYnV0ZXModGhpcy50cmlnZ2VyRWxlbWVudCk7XG4gICAgdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIC8vIE9wZW4gdGhlIG92ZXJsYXkgb24gZm9jdXMsIGNsaWNrLCBpbnB1dCBhbmQgYEFycm93RG93bmAgZXZlbnRcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4gdGhpcy5vcGVuKCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMub3BlbigpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdpbnB1dCcsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2xhc3RVc2VySW5wdXQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQXV0b1NlbGVjdGVkT3B0aW9uID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwgfSxcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdjaGFuZ2UnLFxuICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbiAncmVxdWlyZVNlbGVjdGlvbicgbW9kZSwgd2UgYmxvY2sgdGhlIG5hdGl2ZSBjaGFuZ2UgZXZlbnRzIGFuZFxuICAgICAgICAgKiBsZXQgb25seSBwYXNzIHRoZSBvbmVzIHRoYXQgY29tZSB3aXRoIGEgdmFsaWQgdmFsdWUgKHdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkKVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZVNlbGVjdGlvbiAmJiAhdGhpcy5faXNDdXN0b21DaGFuZ2VFdmVudCkge1xuICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzQ3VzdG9tQ2hhbmdlRXZlbnQgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwsIGNhcHR1cmU6IHRydWUgfSxcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5fY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgLy8gV2UgbmVlZCBrZXkgZXZlbnQgdG8gcnVuIGJlZm9yZSBhbnkgb3RoZXIgc3Vic2NyaXB0aW9uIHRvIGd1YXJhbnRlZSBhIGNvcnJlY3RcbiAgICAgICAgLy8gaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIChuZWNlc3NhcnkgZm9yIHRoZSAnc2JiLWNoaXAtZ3JvdXAnIHVzZSBjYXNlKS5cbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdibHVyJyxcbiAgICAgIChlKSA9PiB7XG4gICAgICAgIC8vIElmIHRoZSBuZXcgZm9jdXMgaXMgdGhlIGF1dG9jb21wbGV0ZSBvciBpbnNpZGUgb2YgaXQgdGhlbiBhbiBvcHRpb25cbiAgICAgICAgLy8gd2FzIHNlbGVjdGVkLiBUaGVyZWZvcmUsIHRoZSBmb2N1cyBpcyBzdGlsbCBvbiB0aGUgY29tcG9uZW50LlxuICAgICAgICBpZiAodGhpcy5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiAnYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbk9uQmx1cicgaXMgZW5hYmxlZCwgc2VsZWN0IHRoZSBhY3RpdmUgb3B0aW9uIG9uIGJsdXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbk9uQmx1ciAmJlxuICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uICYmXG4gICAgICAgICAgdGhpcy5fbGFzdFVzZXJJbnB1dCAmJlxuICAgICAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9zZXRWYWx1ZUFuZERpc3BhdGNoRXZlbnRzKHRoaXMuYWN0aXZlT3B0aW9uLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFycyB0aGUgaW5wdXQgaWYgdGhlcmUncyB1c2VyIGludGVyYWN0aW9uIHdpdGhvdXQgc2VsZWN0aW9uIChzZWxlY3Rpb24gY2xlYXJzIGBfbGFzdFVzZXJJbnB1dGApLlxuICAgICAgICBpZiAodGhpcy5yZXF1aXJlU2VsZWN0aW9uICYmIHRoaXMudHJpZ2dlckVsZW1lbnQgJiYgdGhpcy5fbGFzdFVzZXJJbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc2V0VmFsdWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsXG4gICAgICAgICAgICAndmFsdWUnLFxuICAgICAgICAgICkhLnNldCE7XG4gICAgICAgICAgc2V0VmFsdWUuY2FsbCh0aGlzLnRyaWdnZXJFbGVtZW50LCAnJyk7XG4gICAgICAgICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9ucygnJyk7XG4gICAgICAgICAgdGhpcy5faXNDdXN0b21DaGFuZ2VFdmVudCA9IHRydWU7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIuc2lnbmFsLCBjYXB0dXJlOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNldCBvdmVybGF5IHBvc2l0aW9uLCB3aWR0aCBhbmQgbWF4IGhlaWdodFxuICBwcml2YXRlIF9zZXRPdmVybGF5UG9zaXRpb24ob3JpZ2luRWxlbWVudCA9IHRoaXMub3JpZ2luRWxlbWVudCk6IHZvaWQge1xuICAgIC8vIEFuIHVuZGVmaW5lZCBvcmlnaW5FbGVtZW50IHNob3VsZCBvbmx5IG9jY3VyIGluIHRoZSB1bmxpa2VseSBldmVudFxuICAgIC8vIHRoYXQgdGhlIGF1dG9jb21wbGV0ZSBsb3NlcyBpdHMgb3JpZ2luRWxlbWVudCBhbmQgdHJpZ2dlckVsZW1lbnQgZHVyaW5nIGFuIG9wZW4gc3RhdGUuXG4gICAgaWYgKCFvcmlnaW5FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldE92ZXJsYXlQb3NpdGlvbihcbiAgICAgIHRoaXMuX292ZXJsYXksXG4gICAgICBvcmlnaW5FbGVtZW50LFxuICAgICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLWF1dG9jb21wbGV0ZV9fY29udGFpbmVyJykhLFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMucG9zaXRpb24sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBvcGVuL2Nsb3NlIGFuaW1hdGlvbiBlbmQuXG4gICAqIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gICAqIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgICovXG4gIHByaXZhdGUgX29uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgJiYgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnY2xvc2UnICYmIHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIGlmICh0aGlzLm9yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5vcmlnaW5FbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcbiAgICB0aGlzLmRpc3BhdGNoT3BlbkV2ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDbG9zaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2VkJztcbiAgICB0aGlzLmhpZGVQb3BvdmVyPy4oKTtcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcblxuICAgIHRoaXMucmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5fZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuZGlzcGF0Y2hDbG9zZUV2ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hPcGVuUGFuZWxFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBvdmVybGF5IHBvc2l0aW9uIG9uIHNjcm9sbCBhbmQgd2luZG93IHJlc2l6ZVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIC8vIFdpdGhvdXQgY2FwdHVyZSwgb3RoZXIgc2Nyb2xsIGNvbnRleHRzIHdvdWxkIG5vdCBidWJibGUgdG8gdGhpcyBldmVudCBsaXN0ZW5lci5cbiAgICAgIC8vIENhcHR1cmUgYWxsb3dzIHVzIHRvIHJlYWN0IHRvIGFsbCBzY3JvbGwgY29udGV4dHMgaW4gdGhpcyBET00uXG4gICAgICBjYXB0dXJlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBhdXRvY29tcGxldGUgb24gYmFja2Ryb3AgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCAoZXYpID0+IHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIoZXYpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCAoZXYpID0+IHRoaXMuX2Nsb3NlT25CYWNrZHJvcENsaWNrKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICfJtWRpc2FibGVkY2hhbmdlJyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlT3B0aW9uPy5kaXNhYmxlZCkge1xuICAgICAgICAgIHRoaXMucmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbklmQXV0b0FjdGl2ZUZpcnN0T3B0aW9uKCk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gS2V5Ym9hcmQgaW50ZXJhY3Rpb25zXG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5vcGVuZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQpLFxuICAgICAge1xuICAgICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAvLyBXZSBuZWVkIGtleSBldmVudCB0byBydW4gYmVmb3JlIGFueSBvdGhlciBzdWJzY3JpcHRpb24gdG8gZ3VhcmFudGVlIGEgY29ycmVjdFxuICAgICAgICAvLyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHMgKG5lY2Vzc2FyeSBmb3IgdGhlICdzYmItY2hpcC1ncm91cCcgdXNlIGNhc2UpLlxuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHBvaW50ZXJkb3duIGV2ZW50IHRhcmdldCBpcyB0cmlnZ2VyZWQgb24gdGhlIG1lbnUuXG4gIHByaXZhdGUgX3BvaW50ZXJEb3duTGlzdGVuZXIgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uTWVudSA9IGlzRXZlbnRPbkVsZW1lbnQodGhpcy5fb3ZlcmxheSwgZXZlbnQpO1xuICB9O1xuXG4gIC8vIElmIHRoZSBjbGljayBpcyBvdXRzaWRlIHRoZSBhdXRvY29tcGxldGUsIGNsb3NlcyB0aGUgcGFuZWwuXG4gIHByaXZhdGUgX2Nsb3NlT25CYWNrZHJvcENsaWNrID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmXG4gICAgICAhaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCkgJiZcbiAgICAgICFpc0V2ZW50T25FbGVtZW50KHRoaXMub3JpZ2luRWxlbWVudCwgZXZlbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX2Nsb3NlZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmluZycgfHwgdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhpZ2hsaWdodCB0aGUgc2VhcmNoZWQgdGV4dCBvbiB0aGUgb3B0aW9ucy4gKi9cbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0T3B0aW9ucyhzZWFyY2hUZXJtPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHNlYXJjaFRlcm0gPT09IG51bGwgfHwgc2VhcmNoVGVybSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IG9wdGlvbi5oaWdobGlnaHQoc2VhcmNoVGVybSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgLy8gU2Nyb2xsIGFyZWFzIHdpdGhvdXQgY29udGFpbmluZyBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IHdpbGwgcmVjZWl2ZSBmb2N1cyB3aGVuIHRhYmJpbmcgdGhyb3VnaCB0aGUgZG9jdW1lbnQuXG4gICAgLy8gSWYgdGhlcmUgYXJlIGEgbG90IG9mIG9wdGlvbnMgYW5kIHdoZW4gcHJlc3NpbmcgdGFiIGtleSwgdGhlIHNjcm9sbCBhcmVhIG9uIHNiYi1hdXRvY29tcGxldGVfX29wdGlvbnMgZ2V0cyBmb2N1cy5cbiAgICAvLyBBcyBlbGVtZW50cyBpbnNpZGUgdGhlIHBhbmVsIHNob3VsZCBuZXZlciBnZXQgZm9jdXMsIHdlIGhhdmUgdG8gYXZvaWQgdGhhdCBieSBzZXR0aW5nIHRhYmluZGV4PS0xLlxuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1hdXRvY29tcGxldGVfX2dhcC1maXhcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItYXV0b2NvbXBsZXRlX19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1hdXRvY29tcGxldGVfX2dhcC1maXhcIj4ke292ZXJsYXlHYXBGaXhDb3JuZXJzKCl9PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7dGhpcy5fb25BbmltYXRpb25FbmR9XG4gICAgICAgICAgY2xhc3M9XCJzYmItYXV0b2NvbXBsZXRlX19wYW5lbFwiXG4gICAgICAgICAgJHtyZWYoKG92ZXJsYXlSZWY/OiBFbGVtZW50KSA9PiAodGhpcy5fb3ZlcmxheSA9IG92ZXJsYXlSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItYXV0b2NvbXBsZXRlX193cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLWF1dG9jb21wbGV0ZV9fb3B0aW9uc1wiXG4gICAgICAgICAgICAgIHJvbGU9JHshYXJpYVJvbGVPbkhvc3QgPyB0aGlzLnBhbmVsUm9sZSA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGlkPSR7IWFyaWFSb2xlT25Ib3N0ID8gdGhpcy5vdmVybGF5SWQgOiBub3RoaW5nfVxuICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgJHtyZWYoKGNvbnRhaW5lclJlZikgPT4gKHRoaXMuX29wdGlvbkNvbnRhaW5lciA9IGNvbnRhaW5lclJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX2hhbmRsZVNsb3RjaGFuZ2V9Pjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRFdmVudE1hcCB7XG4gICAgaW5wdXRBdXRvY29tcGxldGU6IEN1c3RvbUV2ZW50PHsgb3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxhbnk+IH0+O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FD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
692
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWJhc2UtZWxlbWVudC1CR0FGT3pOaC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1iYXNlLWVsZW1lbnQuc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1iYXNlLWVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuLy8gRml4ZXMgdGhlIGdhcCBiZXR3ZWVuIHRoZSBvcmlnaW4gYW5kIHRoZSBvdmVybGF5IGJ5IGNyZWF0aW5nIGNvbmp1bmN0aW9uXG4vLyBjb3JuZXJzIGJhc2VkIG9uIHRoZSBvcmlnaW4gZWxlbWVudCBib3JkZXIgcmFkaXVzXG5AaW5jbHVkZSBzYmIub3ZlcmxheS1nYXAtZml4O1xuXG46aG9zdCB7XG4gIEBpbmNsdWRlIHNiYi5vcHRpb25zLXBhbmVsLW92ZXJsYXktdmFyaWFibGVzO1xuXG4gIC0tc2JiLW9wdGlvbnMtcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgLS1zYmItb3B0aW9ucy1wYW5lbC1pbnRlcm5hbC16LWluZGV4OiB2YXIoXG4gICAgLS1zYmItYXV0b2NvbXBsZXRlLXotaW5kZXgsXG4gICAgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KVxuICApO1xuXG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC10ZXh0KTtcbn1cblxuOmhvc3QoW3NpemU9J3MnXSkge1xuICBAaW5jbHVkZSBzYmIub3B0aW9ucy1wYW5lbC1vdmVybGF5LXNpemUtcy12YXJpYWJsZXM7XG59XG5cbjpob3N0KFtzaXplPSdtJ10pIHtcbiAgQGluY2x1ZGUgc2JiLm9wdGlvbnMtcGFuZWwtb3ZlcmxheS1zaXplLW0tdmFyaWFibGVzO1xufVxuXG46aG9zdCg6aXMoOnN0YXRlKHN0YXRlLW9wZW5pbmcpLCA6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLWNsb3NpbmcpKSkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuOmhvc3QoW25lZ2F0aXZlXSkge1xuICBAaW5jbHVkZSBzYmIub3B0aW9ucy1wYW5lbC1vdmVybGF5LW5lZ2F0aXZlLXZhcmlhYmxlcztcbn1cblxuOmhvc3QoOm5vdCg6c3RhdGUoc3RhdGUtb3BlbmluZyksIDpzdGF0ZShzdGF0ZS1vcGVuZWQpLCA6c3RhdGUoc3RhdGUtY2xvc2luZykpKSxcbjpob3N0KDpzdGF0ZShzdGF0ZS1jbG9zZWQpKSB7XG4gIC0tc2JiLW9wdGlvbnMtcGFuZWwtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAtLXNiYi1vcHRpb25zLXBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG46aG9zdCg6c3RhdGUoc3RhdGUtb3BlbmluZykpIHtcbiAgLS1zYmItb3B0aW9ucy1wYW5lbC1hbmltYXRpb24tbmFtZTogb3Blbjtcbn1cblxuOmhvc3QoOnN0YXRlKHN0YXRlLWNsb3NpbmcpKSB7XG4gIC0tc2JiLW9wdGlvbnMtcGFuZWwtYW5pbWF0aW9uLW5hbWU6IGNsb3NlO1xufVxuXG46aG9zdCg6c3RhdGUoc3RhdGUtb3BlbmVkKSksXG46aG9zdCg6c3RhdGUoc3RhdGUtb3BlbmluZykpIHtcbiAgLS1zYmItb3B0aW9ucy1wYW5lbC1nYXAtZml4LW9wYWNpdHk6IDE7XG59XG5cbjpob3N0KDpzdGF0ZShvcHRpb25zLXBhbmVsLXBvc2l0aW9uLWJlbG93KSkge1xuICAtLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoXG4gICAgY2FsYygodmFyKC0tc2JiLW9wdGlvbnMtcGFuZWwtb3JpZ2luLWhlaWdodCkgLyAyKSAqIC0xKVxuICApO1xufVxuXG46aG9zdCg6c3RhdGUob3B0aW9ucy1wYW5lbC1wb3NpdGlvbi1hYm92ZSkpIHtcbiAgLS1zYmItb3B0aW9ucy1wYW5lbC1vcHRpb25zLWJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi1vcHRpb25zLXBhbmVsLWJvcmRlci1yYWRpdXMpXG4gICAgdmFyKC0tc2JiLW9wdGlvbnMtcGFuZWwtYm9yZGVyLXJhZGl1cykgMCAwO1xuICAtLXNiYi1vcHRpb25zLXBhbmVsLWdhcC1maXgtdG9wOiB2YXIoLS1fc2JiLW9wdGlvbnMtcGFuZWwtbWF4LWhlaWdodCk7XG4gIC0tc2JiLW9wdGlvbnMtcGFuZWwtZ2FwLWZpeC10cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAtLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoXG4gICAgY2FsYyh2YXIoLS1zYmItb3B0aW9ucy1wYW5lbC1vcmlnaW4taGVpZ2h0KSAvIDIpXG4gICk7XG59XG5cbjpob3N0KFtwcmVzZXJ2ZS1pY29uLXNwYWNlXSkge1xuICAtLXNiYi1vcHRpb24taWNvbi1jb250YWluZXItZGlzcGxheTogYmxvY2s7XG59XG5cbjo6c2xvdHRlZChzYmItZGl2aWRlcikge1xuICBtYXJnaW4tYmxvY2s6IHZhcigtLXNiYi1vcHRpb25zLXBhbmVsLWRpdmlkZXItbWFyZ2luLWJsb2NrKTtcbn1cblxuLnNiYi1hdXRvY29tcGxldGVfX2NvbnRhaW5lciB7XG4gIEBpbmNsdWRlIHNiYi5vcHRpb25zLXBhbmVsLW92ZXJsYXktY29udGFpbmVyO1xufVxuXG4uc2JiLWF1dG9jb21wbGV0ZV9fZ2FwLWZpeCB7XG4gIEBpbmNsdWRlIHNiYi5vcHRpb25zLXBhbmVsLW92ZXJsYXktZ2FwO1xufVxuXG4uc2JiLWF1dG9jb21wbGV0ZV9fcGFuZWwge1xuICBAaW5jbHVkZSBzYmIub3B0aW9ucy1wYW5lbC1vdmVybGF5O1xuXG4gIDpob3N0KDpzdGF0ZShvcHRpb25zLXBhbmVsLXBvc2l0aW9uLWJlbG93KSkgJiB7XG4gICAgaW5zZXQtYmxvY2stc3RhcnQ6IGNhbGMoXG4gICAgICB2YXIoLS1zYmItb3B0aW9ucy1wYW5lbC1wb3NpdGlvbi15KSAtIHZhcigtLXNiYi1vcHRpb25zLXBhbmVsLW9yaWdpbi1oZWlnaHQpXG4gICAgKTtcbiAgfVxuXG4gIDpob3N0KDppcyg6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLW9wZW5pbmcpKSkgJiB7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2JiLWJveC1zaGFkb3ctbGV2ZWwtNS1oYXJkKTtcbiAgfVxuXG4gIDpob3N0KDppcyg6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLW9wZW5pbmcpKVtuZWdhdGl2ZV0pICYge1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNiYi1ib3gtc2hhZG93LWxldmVsLTUtaGFyZC1uZWdhdGl2ZSk7XG4gIH1cblxuICAmOjpiZWZvcmUge1xuICAgIDpob3N0KDpzdGF0ZShvcHRpb25zLXBhbmVsLXBvc2l0aW9uLWJlbG93KSkgJiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICAmOjphZnRlciB7XG4gICAgOmhvc3QoOnN0YXRlKG9wdGlvbnMtcGFuZWwtcG9zaXRpb24tYWJvdmUpKSAmIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kZXNjZW5kaW5nLXNwZWNpZmljaXR5XG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIDpob3N0KDppcyg6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLW9wZW5pbmcpKTpzdGF0ZShvcHRpb24tcGFuZWwtb3JpZ2luLWJvcmRlcmxlc3MpKVxuICAgICAgJiB7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1zYmItYm94LXNoYWRvdy1sZXZlbC01LWhhcmQpO1xuICAgIH1cblxuICAgIDpob3N0KFxuICAgICAgICA6aXMoOnN0YXRlKHN0YXRlLW9wZW5lZCksIDpzdGF0ZShzdGF0ZS1vcGVuaW5nKSk6c3RhdGUoXG4gICAgICAgICAgICBvcHRpb24tcGFuZWwtb3JpZ2luLWJvcmRlcmxlc3NcbiAgICAgICAgICApW25lZ2F0aXZlXVxuICAgICAgKVxuICAgICAgJiB7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1zYmItYm94LXNoYWRvdy1sZXZlbC01LWhhcmQtbmVnYXRpdmUpO1xuICAgIH1cbiAgfVxufVxuXG4uc2JiLWF1dG9jb21wbGV0ZV9fd3JhcHBlciB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5zYmItYXV0b2NvbXBsZXRlX19vcHRpb25zIHtcbiAgQGluY2x1ZGUgc2JiLm9wdGlvbnNPdmVybGF5O1xuICBAaW5jbHVkZSBzYmIuc2Nyb2xsYmFyLXJ1bGVzO1xuXG4gIHBvaW50ZXItZXZlbnRzOiB2YXIoLS1zYmItb3B0aW9ucy1wb2ludGVyLWV2ZW50cyk7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGJvcmRlcjogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0xeCkgc29saWQgQ2FudmFzVGV4dDtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgb3BlbiB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogdmFyKC0tc2JiLW9wdGlvbnMtcGFuZWwtYW5pbWF0aW9uLXRyYW5zZm9ybSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGNsb3NlIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB2YXIoLS1zYmItb3B0aW9ucy1wYW5lbC1hbmltYXRpb24tdHJhbnNmb3JtKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG4iLCJpbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxuICB1bnNhZmVDU1MsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLnRzJztcbmltcG9ydCB7XG4gIFNiYlByb3BlcnR5V2F0Y2hlckNvbnRyb2xsZXIsXG4gIFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLFxufSBmcm9tICcuLi9jb3JlL2NvbnRyb2xsZXJzLnRzJztcbmltcG9ydCB7IGZvcmNlVHlwZSwgaWRSZWZlcmVuY2UgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgaXNMZWFuLCBpc1NhZmFyaSwgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24gfSBmcm9tICcuLi9jb3JlL2RvbS50cyc7XG5pbXBvcnQgeyBTYmJOZWdhdGl2ZU1peGluIH0gZnJvbSAnLi4vY29yZS9taXhpbnMudHMnO1xuaW1wb3J0IHtcbiAgaXNFdmVudE9uRWxlbWVudCxcbiAgb3ZlcmxheUdhcEZpeENvcm5lcnMsXG4gIHJlbW92ZUFyaWFDb21ib0JveEF0dHJpYnV0ZXMsXG4gIHNldE92ZXJsYXlQb3NpdGlvbixcbn0gZnJvbSAnLi4vY29yZS9vdmVybGF5LnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uL2NvcmUvc3R5bGVzLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiRm9ybUZpZWxkRWxlbWVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdGlvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vb3B0aW9uLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vYXV0b2NvbXBsZXRlLWJhc2UtZWxlbWVudC5zY3NzP2lubGluZSc7XG5cbi8qKlxuICogT24gU2FmYXJpLCB0aGUgYXJpYSByb2xlICdsaXN0Ym94JyBtdXN0IGJlIG9uIHRoZSBob3N0IGVsZW1lbnQsIG9yIGVsc2UgVm9pY2VPdmVyIHdvbid0IHdvcmsgYXQgYWxsLlxuICogT24gdGhlIG90aGVyIGhhbmQsIEpBV1MgYW5kIE5WREEgbmVlZCB0aGUgcm9sZSB0byBiZSBcImNsb3NlclwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGF1dG9jb21wbGV0ZSBjb21wb25lbnRzLlxuICpcbiAqIEBldmVudCB7RXZlbnR9IGNoYW5nZSAtIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgb24gdGhlIGF1dG9jb21wbGV0ZSdzIHRyaWdnZXIgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLiBVbmxpa2UgdGhlIGlucHV0IGV2ZW50LCB0aGUgY2hhbmdlIGV2ZW50IGlzIG5vdCBuZWNlc3NhcmlseSBmaXJlZCBmb3IgZWFjaCBhbHRlcmF0aW9uIHRvIGFuIGVsZW1lbnQncyB2YWx1ZS5cbiAqIEBldmVudCB7SW5wdXRFdmVudH0gaW5wdXQgLSBUaGUgaW5wdXQgZXZlbnQgZmlyZXMgIG9uIHRoZSBhdXRvY29tcGxldGUncyB0cmlnZ2VyIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgYXMgYSBkaXJlY3QgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYmJBdXRvY29tcGxldGVCYXNlRWxlbWVudDxUID0gc3RyaW5nPiBleHRlbmRzIFNiYk5lZ2F0aXZlTWl4aW4oXG4gIFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50LFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB3aGVyZSB0aGUgYXV0b2NvbXBsZXRlIHdpbGwgYXR0YWNoLlxuICAgKiBJZiBub3Qgc2V0LCBhcyBmYWxsYmFjayB0aGVyZSBhcmUgdHdvIGVsZW1lbnRzIHdoaWNoIGNhbiBhY3QgYXMgb3JpZ2luIHdpdGggZm9sbG93aW5nIHByaW9yaXR5IG9yZGVyOlxuICAgKiAxLiBgc2JiLWZvcm0tZmllbGRgIGlmIGl0IGlzIGFuIGFuY2VzdG9yLlxuICAgKiAyLiB0cmlnZ2VyIGVsZW1lbnQgaWYgc2V0LlxuICAgKlxuICAgKiBGb3IgYXR0cmlidXRlIHVzYWdlLCBwcm92aWRlIGFuIGlkIHJlZmVyZW5jZS5cbiAgICovXG4gIEBpZFJlZmVyZW5jZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBvcmlnaW46IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBlbGVtZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBhdXRvY29tcGxldGUgb3BlbmluZy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGF1dG9jb21wbGV0ZSB3aWxsIG9wZW4gb24gZm9jdXMsIGNsaWNrLCBpbnB1dCBvciBgQXJyb3dEb3duYCBrZXlwcmVzcyBvZiB0aGUgJ3RyaWdnZXInIGVsZW1lbnQuXG4gICAqIElmIG5vdCBzZXQsIHdpbGwgc2VhcmNoIGZvciB0aGUgZmlyc3QgJ2lucHV0JyBjaGlsZCBvZiBhICdzYmItZm9ybS1maWVsZCcgYW5jZXN0b3IuXG4gICAqXG4gICAqIEZvciBhdHRyaWJ1dGUgdXNhZ2UsIHByb3ZpZGUgYW4gaWQgcmVmZXJlbmNlLlxuICAgKi9cbiAgQGlkUmVmZXJlbmNlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIHRyaWdnZXI6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgaWNvbiBzcGFjZSBpcyBwcmVzZXJ2ZWQgd2hlbiBubyBpY29uIGlzIHNldC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3ByZXNlcnZlLWljb24tc3BhY2UnLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBwcmVzZXJ2ZUljb25TcGFjZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBmaXJzdCBvcHRpb24gaXMgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQgd2hlbiB0aGUgYXV0b2NvbXBsZXRlIGlzIG9wZW5lZC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2F1dG8tYWN0aXZlLWZpcnN0LW9wdGlvbicsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGF1dG9BY3RpdmVGaXJzdE9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBGdW5jdGlvbiB0aGF0IG1hcHMgYW4gb3B0aW9uJ3MgY29udHJvbCB2YWx1ZSB0byBpdHMgZGlzcGxheSB2YWx1ZSBpbiB0aGUgdHJpZ2dlci4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZGlzcGxheVdpdGg6ICgodmFsdWU6IFQpID0+IHN0cmluZykgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2l6ZSB2YXJpYW50LCBlaXRoZXIgbSBvciBzLlxuICAgKiBAZGVmYXVsdCAnbScgLyAncycgKGxlYW4pXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAnbScgfCAncycgPSBpc0xlYW4oKSA/ICdzJyA6ICdtJztcblxuICAvKiogV2hldGhlciB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgYmUgc2VsZWN0ZWQgYXMgdGhlIHVzZXIgaXMgbmF2aWdhdGluZy4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2F1dG8tc2VsZWN0LWFjdGl2ZS1vcHRpb24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGFjdGl2ZSBvcHRpb24gaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbiBibHVyLlxuICAgKiBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLiBJdCBtaWdodCBiZSBzdWJqZWN0IHRvIGNoYW5nZXMuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYXV0by1zZWxlY3QtYWN0aXZlLW9wdGlvbi1vbi1ibHVyJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbk9uQmx1cjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBzZWxlY3Rpb24gd2hlbiB0aGV5J3JlIGludGVyYWN0aW5nIHdpdGggdGhlXG4gICAqIGF1dG9jb21wbGV0ZS4gSWYgdGhlIHVzZXIgbW92ZXMgYXdheSBmcm9tIHRoZSBhdXRvY29tcGxldGUgd2l0aG91dCBzZWxlY3RpbmcgYW4gb3B0aW9uIGZyb21cbiAgICogdGhlIGxpc3QsIHRoZSB2YWx1ZSB3aWxsIGJlIHJlc2V0LiBJZiB0aGUgdXNlciBvcGVucyB0aGUgcGFuZWwgYW5kIGNsb3NlcyBpdCB3aXRob3V0XG4gICAqIGludGVyYWN0aW5nIG9yIHNlbGVjdGluZyBhIHZhbHVlLCB0aGUgaW5pdGlhbCB2YWx1ZSB3aWxsIGJlIGtlcHQuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAncmVxdWlyZS1zZWxlY3Rpb24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciByZXF1aXJlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgYXV0b2NvbXBsZXRlIHBhbmVsIHJlbGF0aXZlIHRvIHRoZSB0cmlnZ2VyLlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBwb3NpdGlvbjogJ2F1dG8nIHwgJ2Fib3ZlJyB8ICdiZWxvdycgPSAnYXV0byc7XG5cbiAgLyoqIFJldHVybnMgdGhlIGVsZW1lbnQgd2hlcmUgdGhlIGF1dG9jb21wbGV0ZSBvdmVybGF5IGlzIGF0dGFjaGVkIHRvLiAqL1xuICBwdWJsaWMgZ2V0IG9yaWdpbkVsZW1lbnQoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5vcmlnaW4gPz9cbiAgICAgIHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy4oJyNvdmVybGF5LWFuY2hvcicpID8/XG4gICAgICB0aGlzLnRyaWdnZXIgPz9cbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHRyaWdnZXIgZWxlbWVudC4gKi9cbiAgcHVibGljIGdldCB0cmlnZ2VyRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50ID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ/OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb3ZlcmxheUlkOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYW5lbFJvbGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJvdGVjdGVkIHBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb246IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICAvLyBUaGlzIGlzIGFuIElJRkUsIGJlY2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IHN0YXRlXG4gICAgLy8gZm9yIGRlYm91bmNpbmcgdGhlIHJlc2l6ZSBjYWxsYmFja3MuXG4gICAgY2FsbGJhY2s6ICgoKSA9PiB7XG4gICAgICBsZXQgdGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCAxMCk7XG4gICAgICB9O1xuICAgIH0pKCksXG4gIH0pO1xuICAvKiogTGlzdGVucyB0byB0aGUgY2hhbmdlcyBvbiB0aGUgYGRpc2FibGVkYCBvciBgcmVhZG9ubHlgIGF0dHJpYnV0ZSBvZiB0aGUgdHJpZ2dlci4gKi9cbiAgcHJpdmF0ZSBfdHJpZ2dlckF0dHJpYnV0ZU9ic2VydmVyID0gIWlzU2VydmVyXG4gICAgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gbXV0YXRpb25zWzBdLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpIHx8IGlucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGw7XG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3B0aW9uQ29udGFpbmVyITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2lzUG9pbnRlckRvd25FdmVudE9uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlciA9IG5ldyBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfb3B0aW9uc0NvdW50ID0gMDtcbiAgcHJpdmF0ZSBfcHJldmlvdXNFbGVtZW50cz86IEVsZW1lbnRbXTtcblxuICAvKiogVHJhY2tzIGlucHV0IGZyb20ga2V5Ym9hcmQuICovXG4gIHByaXZhdGUgX2xhc3RVc2VySW5wdXQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBJZiB0cnVlLCB0aGUgJ2NoYW5nZScgZXZlbnQgc291cmNlIGlzIGFuIG9wdGlvbiBzZWxlY3Rpb24gb3IgYSAncmVxdWlyZVNlbGVjdGlvbicgZmllbGQgY2xlYW51cCAqL1xuICBwcml2YXRlIF9pc0N1c3RvbUNoYW5nZUV2ZW50ID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBvcHRpb25zKCk6IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+W107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ29wdGlvbnNlbGVjdGVkJywgKGU6IEV2ZW50KSA9PiB0aGlzLm9uT3B0aW9uU2VsZWN0ZWQoZSkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCfJtW9wdGdyb3Vwc2xvdGNoYW5nZScsICgpID0+IHRoaXMuX2hhbmRsZVNsb3RjaGFuZ2UoKSwge1xuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgU2JiUHJvcGVydHlXYXRjaGVyQ29udHJvbGxlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgKCkgPT4gdGhpcy5jbG9zZXN0PFNiYkZvcm1GaWVsZEVsZW1lbnQ+KCdzYmItZm9ybS1maWVsZCcpLFxuICAgICAgICB7XG4gICAgICAgICAgbmVnYXRpdmU6IChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5lZ2F0aXZlID0gZS5uZWdhdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuc3luY05lZ2F0aXZlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBib3JkZXJsZXNzOiAoZSkgPT4gdGhpcy50b2dnbGVTdGF0ZSgnb3B0aW9uLXBhbmVsLW9yaWdpbi1ib3JkZXJsZXNzJywgZS5ib3JkZXJsZXNzKSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzeW5jTmVnYXRpdmUoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFRyaWdnZXJBdHRyaWJ1dGVzKGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNlbGVjdEJ5S2V5Ym9hcmQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVzZXRBY3RpdmVFbGVtZW50KCk6IHZvaWQ7XG5cbiAgLyoqIE9wZW5zIHRoZSBhdXRvY29tcGxldGUuICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJyB8fFxuICAgICAgdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcgfHxcbiAgICAgICF0aGlzLl9vdmVybGF5IHx8XG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwIHx8XG4gICAgICB0aGlzLl9yZWFkb25seSgpIHx8XG4gICAgICAhdGhpcy5kaXNwYXRjaEJlZm9yZU9wZW5FdmVudCgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaG93UG9wb3Zlcj8uKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICBjb25zdCBvcmlnaW5FbGVtZW50ID0gdGhpcy5vcmlnaW5FbGVtZW50O1xuICAgIGlmICghb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGZpbmQgdGhlIG9yaWdpbiBlbGVtZW50LiBQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIGVsZW1lbnQgb3IgY2hlY2sgdGhlIHVzYWdlIG9mIHRoZSBcIm9yaWdpblwiIHByb3BlcnR5IGZyb20gdGhlIGRvY3VtZW50YXRpb24nLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKG9yaWdpbkVsZW1lbnQpO1xuICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25JZkF1dG9BY3RpdmVGaXJzdE9wdGlvbigpO1xuICAgIHRoaXMuX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpO1xuICAgIHRoaXMuX2VzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLmNvbm5lY3QoKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBvcGVuZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgYXV0b2NvbXBsZXRlLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnY2xvc2VkJyB8fCAhdGhpcy5kaXNwYXRjaEJlZm9yZUNsb3NlRXZlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBpcyBjb25maXJtZWQgb24gcGFuZWwgY2xvc2VcbiAgICBpZiAodGhpcy5wZW5kaW5nQXV0b1NlbGVjdGVkT3B0aW9uKSB7XG4gICAgICB0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fc2V0VmFsdWVBbmREaXNwYXRjaEV2ZW50cyh0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24sIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWV4cGFuZGVkJyk7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5hYm9ydCgpO1xuICAgIGlmICh0aGlzLm9yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLm9yaWdpbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKHRoaXMsICctLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMucG9wb3ZlciA9ICdtYW51YWwnO1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgaWYgKGFyaWFSb2xlT25Ib3N0KSB7XG4gICAgICB0aGlzLmlkIHx8PSB0aGlzLm92ZXJsYXlJZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRTZXR1cCgpO1xuICAgIH1cbiAgICB0aGlzLnN5bmNOZWdhdGl2ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpKSB7XG4gICAgICB0aGlzLnN5bmNOZWdhdGl2ZSgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2F1dG9BY3RpdmVGaXJzdE9wdGlvbicpICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uSWZBdXRvQWN0aXZlRmlyc3RPcHRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy5fY29tcG9uZW50U2V0dXAoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICBuYW1lPzogUHJvcGVydHlLZXksXG4gICAgb2xkVmFsdWU/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICApOiB2b2lkIHtcbiAgICBzdXBlci5yZXF1ZXN0VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBvcHRpb25zKTtcblxuICAgIGlmIChpc1NlcnZlciB8fCAhdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghbmFtZSB8fCBuYW1lID09PSAndHJpZ2dlcicpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZVRyaWdnZXIoKTtcbiAgICB9IGVsc2UgaWYgKCghbmFtZSB8fCBuYW1lID09PSAnb3JpZ2luJykgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCwgdXBkYXRlIHRoZSBpbnB1dCB2YWx1ZSBhbmQgY2xvc2UgdGhlIGF1dG9jb21wbGV0ZS4gKi9cbiAgcHJvdGVjdGVkIG9uT3B0aW9uU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+O1xuICAgIHRoaXMuX3NldFZhbHVlQW5kRGlzcGF0Y2hFdmVudHModGFyZ2V0KTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgcHJvdGVjdGVkIG9uT3B0aW9uQXJyb3dzU2VsZWN0ZWQoX2FjdGl2ZU9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4pOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBzZXRzIHRoZSBvcHRpb24gdmFsdWUgaW4gdGhlIGlucHV0IGVsZW1lbnQgd2l0aG91dCBlbWl0dGluZyBldmVudHMuXG4gICAqIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBpcyBjb25maXJtZWQgd2hlbiB0aGUgcGFuZWwgY2xvc2VzLiBBbnkgb3RoZXIgdXNlciBpbnRlcmFjdGlvblxuICAgKiB3aWxsIHJlc2V0IHRoZSBwZW5kaW5nIHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldFBlbmRpbmdTZWxlY3Rpb24oYWN0aXZlT3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxUPik6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ0F1dG9TZWxlY3RlZE9wdGlvbiA9IGFjdGl2ZU9wdGlvbjtcbiAgICB0aGlzLl9zZXRJbnB1dFZhbHVlKGFjdGl2ZU9wdGlvbik7XG4gIH1cblxuICBwcml2YXRlIF9zZXRWYWx1ZUFuZERpc3BhdGNoRXZlbnRzKFxuICAgIHNlbGVjdGVkT3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxUPixcbiAgICBwcmV2ZW50Rm9jdXMgPSBmYWxzZSxcbiAgKTogdm9pZCB7XG4gICAgLy8gRGVzZWxlY3QgdGhlIHByZXZpb3VzIG9wdGlvbnNcbiAgICB0aGlzLm9wdGlvbnNcbiAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmlkICE9PSBzZWxlY3RlZE9wdGlvbi5pZCAmJiBvcHRpb24uc2VsZWN0ZWQpXG4gICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICB0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3NldElucHV0VmFsdWUoc2VsZWN0ZWRPcHRpb24pO1xuXG4gICAgICAvLyBNYW51YWxseSB0cmlnZ2VyIHRoZSBjaGFuZ2UgZXZlbnRzXG4gICAgICB0aGlzLl9pc0N1c3RvbUNoYW5nZUV2ZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG5cbiAgICAgIC8vIERpc3BhdGNoaW5nIHRoZSBpbnB1dCBldmVudCBjaGFuZ2VzIF9sYXN0SW5wdXQsIHdoaWNoIHNob3VsZCBzdGF5IGVtcHR5IHNpbmNlIHRoZXJlJ3Mgbm8ga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAgICB0aGlzLl9sYXN0VXNlcklucHV0ID0gbnVsbDtcblxuICAgICAgLy8gQ3VzdG9tIGlucHV0IGV2ZW50IGVtaXR0ZWQgd2hlbiBpbnB1dCB2YWx1ZSBjaGFuZ2VzIGFmdGVyIGFuIG9wdGlvbiBpcyBzZWxlY3RlZFxuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvcHRpb246IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+IH0+KCdpbnB1dEF1dG9jb21wbGV0ZScsIHtcbiAgICAgICAgICBkZXRhaWw6IHsgb3B0aW9uOiBzZWxlY3RlZE9wdGlvbiB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBpZiAoIXByZXZlbnRGb2N1cykge1xuICAgICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldCB0aGUgb3B0aW9uIHZhbHVlIHdpdGhpbiB0aGUgaW5wdXQgZWxlbWVudCAqL1xuICBwcml2YXRlIF9zZXRJbnB1dFZhbHVlKG9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlbiBhIHZhbHVlLCByZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBzaG91bGQgYmUgc2hvd24gd2l0aGluIHRoZSBpbnB1dC5cbiAgICBjb25zdCB0b0Rpc3BsYXkgPSB0aGlzLmRpc3BsYXlXaXRoPy4ob3B0aW9uLnZhbHVlIGFzIFQpID8/IG9wdGlvbi52YWx1ZTtcblxuICAgIC8vIFNldCB0aGUgb3B0aW9uIHZhbHVlXG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBSZWFjdCBvbkNoYW5nZSBldmVudCwgd2UgaGF2ZSB0byBnZXQgdGhlIHNldHRlciBhbmQgY2FsbCBpdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExNjAwI2lzc3VlY29tbWVudC0zNDU4MTMxMzBcbiAgICBjb25zdCBzZXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpIS5zZXQhO1xuICAgIHNldFZhbHVlLmNhbGwodGhpcy50cmlnZ2VyRWxlbWVudCwgdG9EaXNwbGF5KTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNsb3RjaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9ucyh0aGlzLnRyaWdnZXJFbGVtZW50Py52YWx1ZSk7XG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IGFuIGVsZW1lbnQgaXMgYWRkZWQgdGhhdCBoYXMgbm90IGJlZW4gcmVuZGVyZWRcbiAgICAvLyB5ZXQgYW5kIHRoZXJlZm9yZSBoYXMgaGVpZ2h0IDAuIFRoZXJlZm9yZSB3ZSBhbHNvIG9ic2VydmUgdGhlIHNpemVcbiAgICAvLyBvZiBhbGwgY2hpbGQgZWxlbWVudHMuXG4gICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSk7XG4gICAgdGhpcy5fcHJldmlvdXNFbGVtZW50cz8uZm9yRWFjaCgoZSkgPT4gdGhpcy5fcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGUpKTtcbiAgICB0aGlzLl9wcmV2aW91c0VsZW1lbnRzID0gY3VycmVudEVsZW1lbnRzO1xuICAgIHRoaXMuX3ByZXZpb3VzRWxlbWVudHMuZm9yRWFjaCgoZSkgPT4gdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlKSk7XG5cbiAgICAvKipcbiAgICAgKiBJdCdzIHBvc3NpYmxlIHRvIGZpbHRlciBvdXQgb3B0aW9ucyB3aXRoIGFuIG9wZW5lZCBwYW5lbCBvbiBpbnB1dCBjaGFuZ2UuXG4gICAgICogSW4gdGhpcyBjYXNlLCB0aGUgcGFuZWwncyBwb3NpdGlvbiBtdXN0IGJlIHJlY2FsY3VsYXRlZCBjb25zaWRlcmluZyB0aGUgbmV3IG9wdGlvbidzIGxpc3QuXG4gICAgICovXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKTtcbiAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25JZkF1dG9BY3RpdmVGaXJzdE9wdGlvbigpO1xuXG4gICAgICAvLyBJZiB0aGUgYXV0b2NvbXBsZXRlIGlzIG9wZW4gYW5kIHRoZSBvcHRpb24gY291bnQgZ2V0cyB0byB6ZXJvLCB3ZSBjbG9zZSB0aGUgYXV0b2NvbXBsZXRlLlxuICAgICAgaWYgKHRoaXMuX29wdGlvbnNDb3VudCA+IDAgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIElmIHRoZSAnaW5wdXQnIGlzIGZvY3VzZWQgYW5kIHRoZSBjb3VudCBvZiBvcHRpb25zIGNoYW5nZXMgZnJvbSAwIHRvID4gMCxcbiAgICAgIC8vIHRoZSBhdXRvY29tcGxldGUgc2hvdWxkIG9wZW4gYXV0b21hdGljYWxseS5cbiAgICAgIGRvY3VtZW50Py5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyaWdnZXJFbGVtZW50ICYmXG4gICAgICB0aGlzLl9vcHRpb25zQ291bnQgPT09IDAgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLl9vcHRpb25zQ291bnQgPSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEFjdGl2ZU9wdGlvbklmQXV0b0FjdGl2ZUZpcnN0T3B0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9BY3RpdmVGaXJzdE9wdGlvbikge1xuICAgICAgdGhpcy5yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgIHRoaXMuc2V0TmV4dEFjdGl2ZU9wdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgYXV0b2NvbXBsZXRlIHNob3VsZCBpbmhlcml0ICdyZWFkb25seScgc3RhdGUgZnJvbSB0aGUgdHJpZ2dlci4gKi9cbiAgcHJpdmF0ZSBfcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlckVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXBvbmVudFNldHVwKCk6IHZvaWQge1xuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZ3VyZVRyaWdnZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ3VyZVRyaWdnZXIoKTogdm9pZCB7XG4gICAgY29uc3QgdHJpZ2dlckVsZW1lbnQgPSAodGhpcy50cmlnZ2VyID8/XG4gICAgICB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKSkgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgaWYgKHRyaWdnZXJFbGVtZW50ID09PSB0aGlzLnRyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICByZW1vdmVBcmlhQ29tYm9Cb3hBdHRyaWJ1dGVzKHRoaXMudHJpZ2dlckVsZW1lbnQpO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gdHJpZ2dlckVsZW1lbnQ7XG5cbiAgICBpZiAoIXRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBcyB0aGUgdHJpZ2dlciBjYW4gYmUgdGhlIGZhbGxiYWNrIG9mIHRoZSBvcmlnaW4sIHdlIGV2ZW50dWFsbHkgaGF2ZSB0byB1cGRhdGUgdGhlIHBvc2l0aW9uLlxuICAgIGNvbnN0IG9yaWdpbkVsZW1lbnQgPSB0aGlzLm9yaWdpbkVsZW1lbnQ7XG4gICAgaWYgKHRoaXMudHJpZ2dlckVsZW1lbnQgPT09IG9yaWdpbkVsZW1lbnQgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbihvcmlnaW5FbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLl90cmlnZ2VyQXR0cmlidXRlT2JzZXJ2ZXI/Lm9ic2VydmUodGhpcy50cmlnZ2VyRWxlbWVudCEsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknXSxcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0VHJpZ2dlckF0dHJpYnV0ZXModGhpcy50cmlnZ2VyRWxlbWVudCk7XG4gICAgdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIC8vIE9wZW4gdGhlIG92ZXJsYXkgb24gZm9jdXMsIGNsaWNrLCBpbnB1dCBhbmQgYEFycm93RG93bmAgZXZlbnRcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4gdGhpcy5vcGVuKCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMub3BlbigpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdpbnB1dCcsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG5cbiAgICAgICAgLy8gRG8gbm90IG9wZW4gaWYgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCB2aWEgZGlzcGF0Y2hFdmVudCAoZS5nLiBjbGljayBvbiB0aW1ldGFibGUtc3dhcC1idXR0b24pXG4gICAgICAgIGlmICh2YWx1ZSAmJiBldmVudC5pc1RydXN0ZWQpIHtcbiAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9oaWdobGlnaHRPcHRpb25zKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fbGFzdFVzZXJJbnB1dCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24gPSBudWxsO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NoYW5nZScsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluICdyZXF1aXJlU2VsZWN0aW9uJyBtb2RlLCB3ZSBibG9jayB0aGUgbmF0aXZlIGNoYW5nZSBldmVudHMgYW5kXG4gICAgICAgICAqIGxldCBvbmx5IHBhc3MgdGhlIG9uZXMgdGhhdCBjb21lIHdpdGggYSB2YWxpZCB2YWx1ZSAod2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQpXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5yZXF1aXJlU2VsZWN0aW9uICYmICF0aGlzLl9pc0N1c3RvbUNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNDdXN0b21DaGFuZ2VFdmVudCA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCwgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2tleWRvd24nLFxuICAgICAgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9jbG9zZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQpLFxuICAgICAge1xuICAgICAgICBzaWduYWw6IHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAvLyBXZSBuZWVkIGtleSBldmVudCB0byBydW4gYmVmb3JlIGFueSBvdGhlciBzdWJzY3JpcHRpb24gdG8gZ3VhcmFudGVlIGEgY29ycmVjdFxuICAgICAgICAvLyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHMgKG5lY2Vzc2FyeSBmb3IgdGhlICdzYmItY2hpcC1ncm91cCcgdXNlIGNhc2UpLlxuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2JsdXInLFxuICAgICAgKGUpID0+IHtcbiAgICAgICAgLy8gSWYgdGhlIG5ldyBmb2N1cyBpcyB0aGUgYXV0b2NvbXBsZXRlIG9yIGluc2lkZSBvZiBpdCB0aGVuIGFuIG9wdGlvblxuICAgICAgICAvLyB3YXMgc2VsZWN0ZWQuIFRoZXJlZm9yZSwgdGhlIGZvY3VzIGlzIHN0aWxsIG9uIHRoZSBjb21wb25lbnQuXG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmICdhdXRvU2VsZWN0QWN0aXZlT3B0aW9uT25CbHVyJyBpcyBlbmFibGVkLCBzZWxlY3QgdGhlIGFjdGl2ZSBvcHRpb24gb24gYmx1clxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5hdXRvU2VsZWN0QWN0aXZlT3B0aW9uT25CbHVyICYmXG4gICAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gJiZcbiAgICAgICAgICB0aGlzLl9sYXN0VXNlcklucHV0ICYmXG4gICAgICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudD8udmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX3NldFZhbHVlQW5kRGlzcGF0Y2hFdmVudHModGhpcy5hY3RpdmVPcHRpb24sIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYXJzIHRoZSBpbnB1dCBpZiB0aGVyZSdzIHVzZXIgaW50ZXJhY3Rpb24gd2l0aG91dCBzZWxlY3Rpb24gKHNlbGVjdGlvbiBjbGVhcnMgYF9sYXN0VXNlcklucHV0YCkuXG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVTZWxlY3Rpb24gJiYgdGhpcy50cmlnZ2VyRWxlbWVudCAmJiB0aGlzLl9sYXN0VXNlcklucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBzZXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSxcbiAgICAgICAgICAgICd2YWx1ZScsXG4gICAgICAgICAgKSEuc2V0ITtcbiAgICAgICAgICBzZXRWYWx1ZS5jYWxsKHRoaXMudHJpZ2dlckVsZW1lbnQsICcnKTtcbiAgICAgICAgICB0aGlzLl9oaWdobGlnaHRPcHRpb25zKCcnKTtcbiAgICAgICAgICB0aGlzLl9pc0N1c3RvbUNoYW5nZUV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgIG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwsIGNhcHR1cmU6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gU2V0IG92ZXJsYXkgcG9zaXRpb24sIHdpZHRoIGFuZCBtYXggaGVpZ2h0XG4gIHByaXZhdGUgX3NldE92ZXJsYXlQb3NpdGlvbihvcmlnaW5FbGVtZW50ID0gdGhpcy5vcmlnaW5FbGVtZW50KTogdm9pZCB7XG4gICAgLy8gQW4gdW5kZWZpbmVkIG9yaWdpbkVsZW1lbnQgc2hvdWxkIG9ubHkgb2NjdXIgaW4gdGhlIHVubGlrZWx5IGV2ZW50XG4gICAgLy8gdGhhdCB0aGUgYXV0b2NvbXBsZXRlIGxvc2VzIGl0cyBvcmlnaW5FbGVtZW50IGFuZCB0cmlnZ2VyRWxlbWVudCBkdXJpbmcgYW4gb3BlbiBzdGF0ZS5cbiAgICBpZiAoIW9yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0T3ZlcmxheVBvc2l0aW9uKFxuICAgICAgdGhpcy5fb3ZlcmxheSxcbiAgICAgIG9yaWdpbkVsZW1lbnQsXG4gICAgICB0aGlzLl9vcHRpb25Db250YWluZXIsXG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItYXV0b2NvbXBsZXRlX19jb250YWluZXInKSEsXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5wb3NpdGlvbixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIG9wZW4vY2xvc2UgYW5pbWF0aW9uIGVuZC5cbiAgICogSW4gcmFyZSBjYXNlcyBpdCBjYW4gYmUgdGhhdCB0aGUgYW5pbWF0aW9uRW5kIGV2ZW50IGlzIHRyaWdnZXJlZCB0d2ljZS5cbiAgICogVG8gYXZvaWQgZW50ZXJpbmcgYSBjb3JydXB0IHN0YXRlLCBleGl0IHdoZW4gc3RhdGUgaXMgbm90IGV4cGVjdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgaWYgKHRoaXMub3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLm9yaWdpbkVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIHRoaXMuZGlzcGF0Y2hPcGVuRXZlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNsb3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHRoaXMuaGlkZVBvcG92ZXI/LigpO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuXG4gICAgdGhpcy5yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB0aGlzLl9vcHRpb25Db250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5kaXNwYXRjaENsb3NlRXZlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgdGhlIG92ZXJsYXkgcG9zaXRpb24gb24gc2Nyb2xsIGFuZCB3aW5kb3cgcmVzaXplXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgLy8gV2l0aG91dCBjYXB0dXJlLCBvdGhlciBzY3JvbGwgY29udGV4dHMgd291bGQgbm90IGJ1YmJsZSB0byB0aGlzIGV2ZW50IGxpc3RlbmVyLlxuICAgICAgLy8gQ2FwdHVyZSBhbGxvd3MgdXMgdG8gcmVhY3QgdG8gYWxsIHNjcm9sbCBjb250ZXh0cyBpbiB0aGlzIERPTS5cbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIC8vIENsb3NlIGF1dG9jb21wbGV0ZSBvbiBiYWNrZHJvcCBjbGlja1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIChldikgPT4gdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcihldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIChldikgPT4gdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2soZXYpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ8m1ZGlzYWJsZWRjaGFuZ2UnLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24/LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uSWZBdXRvQWN0aXZlRmlyc3RPcHRpb24oKTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBLZXlib2FyZCBpbnRlcmFjdGlvbnNcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2tleWRvd24nLFxuICAgICAgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLm9wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCksXG4gICAgICB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIC8vIFdlIG5lZWQga2V5IGV2ZW50IHRvIHJ1biBiZWZvcmUgYW55IG90aGVyIHN1YnNjcmlwdGlvbiB0byBndWFyYW50ZWUgYSBjb3JyZWN0XG4gICAgICAgIC8vIGludGVyYWN0aW9uIHdpdGggb3RoZXIgY29tcG9uZW50cyAobmVjZXNzYXJ5IGZvciB0aGUgJ3NiYi1jaGlwLWdyb3VwJyB1c2UgY2FzZSkuXG4gICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gSWYgdGhlIGNsaWNrIGlzIG91dHNpZGUgdGhlIGF1dG9jb21wbGV0ZSwgY2xvc2VzIHRoZSBwYW5lbC5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnUgJiZcbiAgICAgICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSAmJlxuICAgICAgIWlzRXZlbnRPbkVsZW1lbnQodGhpcy5vcmlnaW5FbGVtZW50LCBldmVudClcbiAgICApIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKiogSGlnaGxpZ2h0IHRoZSBzZWFyY2hlZCB0ZXh0IG9uIHRoZSBvcHRpb25zLiAqL1xuICBwcml2YXRlIF9oaWdobGlnaHRPcHRpb25zKHNlYXJjaFRlcm0/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoc2VhcmNoVGVybSA9PT0gbnVsbCB8fCBzZWFyY2hUZXJtID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4gb3B0aW9uLmhpZ2hsaWdodChzZWFyY2hUZXJtKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAvLyBTY3JvbGwgYXJlYXMgd2l0aG91dCBjb250YWluaW5nIGFuIGludGVyYWN0aXZlIGVsZW1lbnQgd2lsbCByZWNlaXZlIGZvY3VzIHdoZW4gdGFiYmluZyB0aHJvdWdoIHRoZSBkb2N1bWVudC5cbiAgICAvLyBJZiB0aGVyZSBhcmUgYSBsb3Qgb2Ygb3B0aW9ucyBhbmQgd2hlbiBwcmVzc2luZyB0YWIga2V5LCB0aGUgc2Nyb2xsIGFyZWEgb24gc2JiLWF1dG9jb21wbGV0ZV9fb3B0aW9ucyBnZXRzIGZvY3VzLlxuICAgIC8vIEFzIGVsZW1lbnRzIGluc2lkZSB0aGUgcGFuZWwgc2hvdWxkIG5ldmVyIGdldCBmb2N1cywgd2UgaGF2ZSB0byBhdm9pZCB0aGF0IGJ5IHNldHRpbmcgdGFiaW5kZXg9LTEuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWF1dG9jb21wbGV0ZV9fZ2FwLWZpeFwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1hdXRvY29tcGxldGVfX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWF1dG9jb21wbGV0ZV9fZ2FwLWZpeFwiPiR7b3ZlcmxheUdhcEZpeENvcm5lcnMoKX08L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHt0aGlzLl9vbkFuaW1hdGlvbkVuZH1cbiAgICAgICAgICBjbGFzcz1cInNiYi1hdXRvY29tcGxldGVfX3BhbmVsXCJcbiAgICAgICAgICAke3JlZigob3ZlcmxheVJlZj86IEVsZW1lbnQpID0+ICh0aGlzLl9vdmVybGF5ID0gb3ZlcmxheVJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1hdXRvY29tcGxldGVfX3dyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItYXV0b2NvbXBsZXRlX19vcHRpb25zXCJcbiAgICAgICAgICAgICAgcm9sZT0keyFhcmlhUm9sZU9uSG9zdCA/IHRoaXMucGFuZWxSb2xlIDogbm90aGluZ31cbiAgICAgICAgICAgICAgaWQ9JHshYXJpYVJvbGVPbkhvc3QgPyB0aGlzLm92ZXJsYXlJZCA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAke3JlZigoY29udGFpbmVyUmVmKSA9PiAodGhpcy5fb3B0aW9uQ29udGFpbmVyID0gY29udGFpbmVyUmVmIGFzIEhUTUxFbGVtZW50KSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5faGFuZGxlU2xvdGNoYW5nZX0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudEV2ZW50TWFwIHtcbiAgICBpbnB1dEF1dG9jb21wbGV0ZTogQ3VzdG9tRXZlbnQ8eyBvcHRpb246IFNiYk9wdGlvbkJhc2VFbGVtZW50PGFueT4gfT47XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNzQ0EsSUFBTSxpQkFBaUI7Ozs7Ozs7SUFRRCxvQ0FBMEI7bUJBQXFCLGlCQUNuRSx3QkFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztjQUZxQixtQ0FBK0MsWUFFcEU7Ozt5QkFXRSxhQUFhLEVBQ2IsVUFBVSxDQUFBOzBCQVVWLGFBQWEsRUFDYixVQUFVLENBQUE7b0NBSVYsV0FBVyxFQUNYLFNBQVM7SUFBRSxXQUFXO0lBQXVCLFNBQVM7SUFBTSxNQUFNO0lBQVMsQ0FBQyxDQUFBO3dDQUk1RSxXQUFXLEVBQ1gsU0FBUztJQUFFLFdBQVc7SUFBNEIsTUFBTTtJQUFTLENBQUMsQ0FBQTs4QkFJbEUsU0FBUyxFQUFFLFdBQVcsT0FBTyxDQUFDLENBQUE7dUJBTzlCLFNBQVMsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUFBO3lDQUczQixXQUFXLEVBQ1gsU0FBUztJQUFFLFdBQVc7SUFBNkIsTUFBTTtJQUFTLENBQUMsQ0FBQTsrQ0FPbkUsV0FBVyxFQUNYLFNBQVM7SUFBRSxXQUFXO0lBQXFDLE1BQU07SUFBUyxDQUFDLENBQUE7bUNBUzNFLFdBQVcsRUFDWCxTQUFTO0lBQUUsV0FBVztJQUFxQixNQUFNO0lBQVMsQ0FBQyxDQUFBOzJCQU8zRCxVQUFVLENBQUE7QUE1RFgsZ0JBQUEsTUFBQSxNQUFBLG9CQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsWUFBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFNLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBTixTQUFNOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEsc0JBQUEsMEJBQUE7QUFXdEIsZ0JBQUEsTUFBQSxNQUFBLHFCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsYUFBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFPLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBUCxVQUFPOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEsdUJBQUEsMkJBQUE7QUFLdkIsZ0JBQUEsTUFBQSxNQUFBLCtCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsdUJBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBaUIsTUFBQSxLQUFBLFVBQUE7QUFBQSxVQUFqQixvQkFBaUI7O0tBQUE7SUFBQSxVQUFBO0lBQUEsRUFBQSxpQ0FBQSxxQ0FBQTtBQUtqQyxnQkFBQSxNQUFBLE1BQUEsbUNBQUE7SUFBQSxNQUFBO0lBQUEsTUFBQTtJQUFBLFFBQUE7SUFBQSxTQUFBO0lBQUEsUUFBQTtLQUFBLE1BQUEsUUFBQSwyQkFBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFxQixNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQXJCLHdCQUFxQjs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLHFDQUFBLHlDQUFBO0FBSXJDLGdCQUFBLE1BQUEsTUFBQSx5QkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLGlCQUFBO0tBQUEsTUFBQSxRQUFBLElBQWdCO0tBQVcsTUFBQSxLQUFBLFVBQUE7QUFBQSxVQUFYLGNBQVc7O0tBQUE7SUFBQSxVQUFBO0lBQUEsRUFBQSwyQkFBQSwrQkFBQTtBQU1FLGdCQUFBLE1BQUEsTUFBQSxrQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFVBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBSSxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUosT0FBSTs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLG9CQUFBLHdCQUFBO0FBS2pELGdCQUFBLE1BQUEsTUFBQSxvQ0FBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLDRCQUFBO0tBQUEsTUFBQSxRQUFBLElBQWdCO0tBQXNCLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBdEIseUJBQXNCOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEsc0NBQUEsMENBQUE7QUFRdEMsZ0JBQUEsTUFBQSxNQUFBLDBDQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsa0NBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBNEIsTUFBQSxLQUFBLFVBQUE7QUFBQSxVQUE1QiwrQkFBNEI7O0tBQUE7SUFBQSxVQUFBO0lBQUEsRUFBQSw0Q0FBQSxnREFBQTtBQVU1QyxnQkFBQSxNQUFBLE1BQUEsOEJBQUE7SUFBQSxNQUFBO0lBQUEsTUFBQTtJQUFBLFFBQUE7SUFBQSxTQUFBO0lBQUEsUUFBQTtLQUFBLE1BQUEsUUFBQSxzQkFBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFnQixNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQWhCLG1CQUFnQjs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLGdDQUFBLG9DQUFBO0FBT2hDLGdCQUFBLE1BQUEsTUFBQSxzQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLGNBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBUSxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVIsV0FBUTs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLHdCQUFBLDRCQUFBOzs7Ozs7Ozs7QUF6RUQsUUFBQSxTQUF5QixDQUFDLGlCQUFpQixVQUFVLGtDQUFNLENBQUM7O0VBWW5GOzs7Ozs7Ozs7RUFBQSxJQUFnQixTQUFNO0FBQUEsVUFBQSxNQUFBOztFQUF0QixJQUFnQixPQUFNLE9BQUE7QUFBQSxTQUFBLDBCQUFBOztFQVd0Qjs7Ozs7Ozs7RUFBQSxJQUFnQixVQUFPO0FBQUEsVUFBQSxNQUFBOztFQUF2QixJQUFnQixRQUFPLE9BQUE7QUFBQSxTQUFBLDJCQUFBOztFQUt2Qjs7RUFBQSxJQUFnQixvQkFBaUI7QUFBQSxVQUFBLE1BQUE7O0VBQWpDLElBQWdCLGtCQUFpQixPQUFBO0FBQUEsU0FBQSxxQ0FBQTs7RUFLakM7O0VBQUEsSUFBZ0Isd0JBQXFCO0FBQUEsVUFBQSxNQUFBOztFQUFyQyxJQUFnQixzQkFBcUIsT0FBQTtBQUFBLFNBQUEseUNBQUE7O0VBSXJDOztFQUFBLElBQWdCLGNBQVc7QUFBQSxVQUFBLE1BQUE7O0VBQTNCLElBQWdCLFlBQVcsT0FBQTtBQUFBLFNBQUEsK0JBQUE7O0VBTUU7Ozs7O0VBQUEsSUFBZ0IsT0FBSTtBQUFBLFVBQUEsTUFBQTs7RUFBcEIsSUFBZ0IsS0FBSSxPQUFBO0FBQUEsU0FBQSx3QkFBQTs7RUFLakQ7O0VBQUEsSUFBZ0IseUJBQXNCO0FBQUEsVUFBQSxNQUFBOztFQUF0QyxJQUFnQix1QkFBc0IsT0FBQTtBQUFBLFNBQUEsMENBQUE7O0VBUXRDOzs7OztFQUFBLElBQWdCLCtCQUE0QjtBQUFBLFVBQUEsTUFBQTs7RUFBNUMsSUFBZ0IsNkJBQTRCLE9BQUE7QUFBQSxTQUFBLGdEQUFBOztFQVU1Qzs7Ozs7OztFQUFBLElBQWdCLG1CQUFnQjtBQUFBLFVBQUEsTUFBQTs7RUFBaEMsSUFBZ0IsaUJBQWdCLE9BQUE7QUFBQSxTQUFBLG9DQUFBOztFQU9oQzs7Ozs7RUFBQSxJQUFnQixXQUFRO0FBQUEsVUFBQSxNQUFBOztFQUF4QixJQUFnQixTQUFRLE9BQUE7QUFBQSxTQUFBLDRCQUFBOzs7RUFHeEIsSUFBVyxnQkFBYTtBQUN0QixVQUNFLEtBQUssVUFDTCxLQUFLLFVBQVUsaUJBQWlCLEVBQUUsWUFBWSxnQkFBZ0Isa0JBQWtCLElBQ2hGLEtBQUssV0FDTDs7O0VBS0osSUFBVyxpQkFBYztBQUN2QixVQUFPLEtBQUssbUJBQW1COztFQStDakMsY0FBQTtBQUNFLFVBQU87QUEzSE8sU0FBQSwwQkFBQSxrQkFBQSxNQUFBLHNCQUE2QixLQUFJO0FBV2pDLFNBQUEsNEJBQUEsa0JBQUEsTUFBQSwwQkFBQSxFQUFBLGtCQUFBLE1BQUEsdUJBQW1DLEtBQUk7QUFLdkMsU0FBQSxzQ0FBQSxrQkFBQSxNQUFBLDJCQUFBLEVBQUEsa0JBQUEsTUFBQSxpQ0FBNkIsTUFBSztBQUtsQyxTQUFBLDBDQUFBLGtCQUFBLE1BQUEscUNBQUEsRUFBQSxrQkFBQSxNQUFBLHFDQUFpQyxNQUFLO0FBSXRDLFNBQUEsZ0NBQUEsa0JBQUEsTUFBQSx5Q0FBQSxFQUFBLGtCQUFBLE1BQUEsMkJBQTZDLEtBQUk7QUFNcEIsU0FBQSx5QkFBQSxrQkFBQSxNQUFBLCtCQUFBLEVBQUEsa0JBQUEsTUFBQSxvQkFBa0IsUUFBUSxHQUFHLE1BQU0sSUFBRztBQUtuRSxTQUFBLDJDQUFBLGtCQUFBLE1BQUEsd0JBQUEsRUFBQSxrQkFBQSxNQUFBLHNDQUFrQyxNQUFLO0FBUXZDLFNBQUEsaURBQUEsa0JBQUEsTUFBQSwwQ0FBQSxFQUFBLGtCQUFBLE1BQUEsNENBQXdDLE1BQUs7QUFVN0MsU0FBQSxxQ0FBQSxrQkFBQSxNQUFBLGdEQUFBLEVBQUEsa0JBQUEsTUFBQSxnQ0FBNEIsTUFBSztBQU9qQyxTQUFBLDZCQUFBLGtCQUFBLE1BQUEsb0NBQUEsRUFBQSxrQkFBQSxNQUFBLHdCQUF1QyxPQUFNO0FBZ0JyRCxRQUFBLGtCQUFlLGtCQUFBLE1BQUEsNEJBQUE7QUFJYixRQUFBLGVBQStDO0FBQy9DLFFBQUEsNEJBQTREO0FBQzlELFFBQUEsa0JBQWtCLElBQUksaUJBQWlCLE1BQU07SUFDbkQsUUFBUTtJQUNSLGFBQWE7SUFHYixpQkFBZ0I7S0FDZCxJQUFJO0FBQ0osa0JBQVk7QUFDVixtQkFBYSxVQUFVO0FBQ3ZCLGtCQUFZLGlCQUFpQixLQUFLLHFCQUFxQixFQUFFLEdBQUc7OztJQUdqRSxDQUFDOztBQUVNLFFBQUEsNEJBQTRCLENBQUMsV0FDakMsSUFBSSxrQkFBa0IsY0FBcUM7SUFDekQsTUFBTSxRQUFRLFVBQVUsR0FBRztBQUMzQixRQUFJLE1BQU0sYUFBYSxXQUFXLElBQUksTUFBTSxhQUFhLFdBQVcsQ0FDbEUsTUFBSyxPQUFPO0tBRWQsR0FDRjtBQUtJLFFBQUEsNEJBQXFDO0FBQ3JDLFFBQUEsOEJBQThCLElBQUksOEJBQThCLEtBQUs7QUFDckUsUUFBQSxnQkFBZ0I7O0FBSWhCLFFBQUEsaUJBQWdDOztBQUdoQyxRQUFBLHVCQUF1QjtBQThldkIsUUFBQSx3QkFBd0IsVUFBNkI7QUFDM0QsU0FBSyw0QkFBNEIsaUJBQWlCLEtBQUssVUFBVSxNQUFNOztBQUlqRSxRQUFBLHlCQUF5QixVQUE2QjtBQUM1RCxRQUNFLENBQUMsS0FBSyw2QkFDTixDQUFDLGlCQUFpQixLQUFLLFVBQVUsTUFBTSxJQUN2QyxDQUFDLGlCQUFpQixLQUFLLGVBQWUsTUFBTSxDQUU1QyxNQUFLLE9BQU87O0FBbmZkLFFBQUssbUJBQW1CLG1CQUFtQixNQUFhLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztBQUNqRixRQUFLLG1CQUFtQiw2QkFBNkIsS0FBSyxtQkFBbUIsRUFBRSxFQUM3RSxTQUFTLE1BQ1YsQ0FBQztBQUNGLFFBQUssY0FDSCxJQUFJLDZCQUNGLFlBQ00sS0FBSyxRQUE2QixpQkFBaUIsRUFDekQ7SUFDRSxXQUFXLE1BQUs7QUFDZCxVQUFLLFdBQVcsRUFBRTtBQUNsQixVQUFLLGNBQWM7O0lBRXJCLGFBQWEsTUFBTSxLQUFLLFlBQVksa0NBQWtDLEVBQUUsV0FBQTtJQUN6RSxDQUNGLENBQ0Y7OztFQVdJLE9BQUk7QUFDVCxPQUNFLEtBQUssVUFBVSxhQUNmLEtBQUssVUFBVSxZQUNmLENBQUMsS0FBSyxZQUNOLEtBQUssUUFBUSxXQUFXLEtBQ3hCLEtBQUssV0FBVyxJQUNoQixDQUFDLEtBQUsseUJBQXlCLENBRS9CO0FBR0YsUUFBSyxlQUFlO0FBQ3BCLFFBQUssUUFBUTtBQUNiLFFBQUssZ0JBQWdCLGdCQUFnQixpQkFBaUIsS0FBSztHQUMzRCxNQUFNLGdCQUFnQixLQUFLO0FBQzNCLE9BQUksQ0FBQyxjQUNILE9BQU0sSUFBSSxNQUNSLHNJQUNEO0FBRUgsUUFBSyxvQkFBb0IsY0FBYztBQUN2QyxRQUFLLDZDQUE2QztBQUNsRCxRQUFLLHdCQUF3QjtBQUM3QixRQUFLLDRCQUE0QixTQUFTO0FBSTFDLE9BQUksS0FBSywwQkFBMEIsQ0FDakMsTUFBSyxnQkFBZ0I7OztFQUtsQixRQUFLO0FBQ1YsT0FBSSxLQUFLLFVBQVUsYUFBYSxLQUFLLFVBQVUsWUFBWSxDQUFDLEtBQUssMEJBQTBCLENBQ3pGO0FBSUYsT0FBSSxLQUFLLDJCQUEyQjtBQUNsQyxTQUFLLDBCQUEwQixXQUFXO0FBQzFDLFNBQUssMkJBQTJCLEtBQUssMkJBQTJCLEtBQUs7O0FBR3ZFLFFBQUssUUFBUTtBQUNiLFFBQUssZ0JBQWdCLGdCQUFnQixnQkFBZ0I7QUFDckQsUUFBSywyQkFBMkIsT0FBTztBQUN2QyxPQUFJLEtBQUssY0FDUCxNQUFLLGdCQUFnQixVQUFVLEtBQUssY0FBYztBQUtwRCxPQUFJLEtBQUssMEJBQTBCLENBQ2pDLE1BQUssZ0JBQWdCOztFQUlqQiwyQkFBd0I7QUFDOUIsVUFBTyx3QkFBd0IsTUFBTSx5Q0FBeUM7O0VBR2hFLG9CQUFpQjtBQUMvQixRQUFLLFVBQVU7QUFDZixTQUFNLG1CQUFtQjtBQUN6QixPQUFJLGVBQ0YsTUFBSyxPQUFPLEtBQUs7QUFHbkIsT0FBSSxLQUFLLFdBQ1AsTUFBSyxpQkFBaUI7QUFFeEIsUUFBSyxjQUFjOztFQUdGLFdBQVcsbUJBQXVDO0FBQ25FLFNBQU0sV0FBVyxrQkFBa0I7QUFFbkMsT0FBSSxrQkFBa0IsSUFBSSxXQUFXLENBQ25DLE1BQUssY0FBYztBQUdyQixPQUFJLGtCQUFrQixJQUFJLHdCQUF3QixJQUFJLEtBQUssT0FDekQsTUFBSyw2Q0FBNkM7O0VBSW5DLGFBQWEsbUJBQXVDO0FBQ3JFLFNBQU0sYUFBYSxrQkFBa0I7QUFDckMsUUFBSyxpQkFBaUI7O0VBR1IsdUJBQW9CO0FBQ2xDLFNBQU0sc0JBQXNCO0FBQzVCLFFBQUssa0JBQWtCO0FBQ3ZCLFFBQUsseUJBQXlCLE9BQU87QUFDckMsUUFBSyw0QkFBNEIsT0FBTzs7RUFHMUIsY0FDZCxNQUNBLFVBQ0EsU0FBNkI7QUFFN0IsU0FBTSxjQUFjLE1BQU0sVUFBVSxRQUFRO0FBRTVDLE9BQUksWUFBWSxDQUFDLEtBQUssV0FDcEI7QUFFRixPQUFJLENBQUMsUUFBUSxTQUFTLFVBQ3BCLE1BQUssbUJBQW1CO2FBQ2QsQ0FBQyxRQUFRLFNBQVMsYUFBYSxLQUFLLE9BQzlDLE1BQUsscUJBQXFCOzs7RUFLcEIsaUJBQWlCLE9BQVk7R0FDckMsTUFBTSxTQUFTLE1BQU07QUFDckIsUUFBSywyQkFBMkIsT0FBTztBQUN2QyxRQUFLLE9BQU87OztFQUlKLHVCQUF1QixlQUFzQzs7Ozs7O0VBTzdELG9CQUFvQixjQUFxQztBQUNqRSxRQUFLLDRCQUE0QjtBQUNqQyxRQUFLLGVBQWUsYUFBYTs7RUFHM0IsMkJBQ04sZ0JBQ0EsZUFBZSxPQUFLO0FBR3BCLFFBQUssUUFDRixRQUFRLFdBQVcsT0FBTyxPQUFPLGVBQWUsTUFBTSxPQUFPLFNBQVMsQ0FDdEUsU0FBUyxXQUFZLE9BQU8sV0FBVyxNQUFPO0FBQ2pELFFBQUssNEJBQTRCO0FBRWpDLE9BQUksS0FBSyxnQkFBZ0I7QUFDdkIsU0FBSyxlQUFlLGVBQWU7QUFHbkMsU0FBSyx1QkFBdUI7QUFDNUIsU0FBSyxlQUFlLGNBQWMsSUFBSSxNQUFNLFVBQVUsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUFDO0FBQ3pFLFNBQUssZUFBZSxjQUFjLElBQUksV0FBVyxTQUFTO0tBQUUsU0FBUztLQUFNLFVBQVU7S0FBTSxDQUFDLENBQUM7QUFHN0YsU0FBSyxpQkFBaUI7QUFHdEIsU0FBSyxlQUFlLGNBQ2xCLElBQUksWUFBaUQscUJBQXFCLEVBQ3hFLFFBQVEsRUFBRSxRQUFRLGdCQUFnQixFQUNuQyxDQUFDLENBQ0g7QUFDRCxRQUFJLENBQUMsYUFDSCxNQUFLLGVBQWUsT0FBTzs7OztFQU16QixlQUFlLFFBQStCO0FBQ3BELE9BQUksQ0FBQyxLQUFLLGVBQ1I7R0FJRixNQUFNLFlBQVksS0FBSyxjQUFjLE9BQU8sTUFBVyxJQUFJLE9BQU87QUFLakQsVUFBTyx5QkFBeUIsaUJBQWlCLFdBQVcsUUFBUyxDQUFDLElBQzlFLEtBQUssS0FBSyxnQkFBZ0IsVUFBVTs7RUFHdkMsb0JBQWlCO0FBQ3ZCLFFBQUssa0JBQWtCLEtBQUssZ0JBQWdCLE1BQU07R0FLbEQsTUFBTSxrQkFBa0IsTUFBTSxLQUFLLEtBQUssaUJBQWlCLElBQUksQ0FBQztBQUM5RCxRQUFLLG1CQUFtQixTQUFTLE1BQU0sS0FBSyxnQkFBZ0IsVUFBVSxFQUFFLENBQUM7QUFDekUsUUFBSyxvQkFBb0I7QUFDekIsUUFBSyxrQkFBa0IsU0FBUyxNQUFNLEtBQUssZ0JBQWdCLFFBQVEsRUFBRSxDQUFDOzs7OztBQU10RSxPQUFJLEtBQUssUUFBUTtBQUNmLFNBQUsscUJBQXFCO0FBQzFCLFNBQUssNkNBQTZDO0FBR2xELFFBQUksS0FBSyxnQkFBZ0IsS0FBSyxLQUFLLFFBQVEsV0FBVyxFQUNwRCxNQUFLLE9BQU87Y0FLZCxVQUFVLGtCQUFrQixLQUFLLGtCQUNqQyxLQUFLLGtCQUFrQixLQUN2QixLQUFLLFFBQVEsU0FBUyxFQUV0QixNQUFLLE1BQU07QUFHYixRQUFLLGdCQUFnQixLQUFLLFFBQVE7O0VBRzVCLDhDQUEyQztBQUNqRCxPQUFJLEtBQUssdUJBQXVCO0FBQzlCLFNBQUssb0JBQW9CO0FBQ3pCLFNBQUsscUJBQXFCOzs7O0VBS3RCLFlBQVM7QUFDZixVQUFPLEtBQUssZ0JBQWdCLGFBQWEsV0FBVyxJQUFJOztFQUdsRCxrQkFBZTtBQUNyQixPQUFJLFNBQ0Y7QUFHRixRQUFLLG1CQUFtQjs7RUFHbEIsb0JBQWlCO0dBQ3ZCLE1BQU0saUJBQWtCLEtBQUssV0FDM0IsS0FBSyxVQUFVLGlCQUFpQixFQUFFLGNBQWMsUUFBUTtBQUMxRCxPQUFJLG1CQUFtQixLQUFLLGVBQzFCO0FBR0YsUUFBSyx5QkFBeUIsT0FBTztBQUNyQyxnQ0FBNkIsS0FBSyxlQUFlO0FBQ2pELFFBQUssZ0JBQWdCLGdCQUFnQixnQkFBZ0I7QUFDckQsUUFBSyxrQkFBa0I7QUFFdkIsT0FBSSxDQUFDLEtBQUssZUFDUjtHQUlGLE1BQU0sZ0JBQWdCLEtBQUs7QUFDM0IsT0FBSSxLQUFLLG1CQUFtQixpQkFBaUIsS0FBSyxPQUNoRCxNQUFLLG9CQUFvQixjQUFjO0FBR3pDLFFBQUssMkJBQTJCLFFBQVEsS0FBSyxnQkFBaUI7SUFDNUQsWUFBWTtJQUNaLGlCQUFpQixDQUFDLFlBQVksV0FBQTtJQUMvQixDQUFDO0FBRUYsUUFBSyxxQkFBcUIsS0FBSyxlQUFlO0FBQzlDLFFBQUssMEJBQTBCLElBQUksaUJBQWlCO0FBR3BELFFBQUssZUFBZSxpQkFBaUIsZUFBZSxLQUFLLE1BQU0sRUFBRSxFQUMvRCxRQUFRLEtBQUssd0JBQXdCLFFBQ3RDLENBQUM7QUFDRixRQUFLLGVBQWUsaUJBQWlCLGVBQWUsS0FBSyxNQUFNLEVBQUUsRUFDL0QsUUFBUSxLQUFLLHdCQUF3QixRQUN0QyxDQUFDO0FBQ0YsUUFBSyxlQUFlLGlCQUNsQixVQUNDLFVBQVM7SUFDUixNQUFNLFFBQWlCLE1BQU0sT0FBNEI7QUFHekQsUUFBSSxTQUFTLE1BQU0sVUFDakIsTUFBSyxNQUFNO0FBRWIsU0FBSyxrQkFBa0IsTUFBTTtBQUM3QixTQUFLLGlCQUFpQjtBQUN0QixTQUFLLDRCQUE0QjtNQUVuQyxFQUFFLFFBQVEsS0FBSyx3QkFBd0IsUUFBUSxDQUNoRDtBQUNELFFBQUssZUFBZSxpQkFDbEIsV0FDQyxVQUFTOzs7OztBQUtSLFFBQUksS0FBSyxvQkFBb0IsQ0FBQyxLQUFLLHFCQUNqQyxPQUFNLDBCQUEwQjtBQUVsQyxTQUFLLHVCQUF1QjtNQUU5QjtJQUFFLFFBQVEsS0FBSyx3QkFBd0I7SUFBUSxTQUFTO0lBQU0sQ0FDL0Q7QUFDRCxRQUFLLGVBQWUsaUJBQ2xCLFlBQ0MsVUFBeUIsS0FBSyxnQ0FBZ0MsTUFBTSxFQUNyRTtJQUNFLFFBQVEsS0FBSyx3QkFBd0I7SUFHckMsU0FBUztJQUNWLENBQ0Y7QUFFRCxRQUFLLGVBQWUsaUJBQ2xCLFNBQ0MsTUFBSztBQUdKLFFBQUksS0FBSyxTQUFTLEVBQUUsY0FBc0IsQ0FDeEM7QUFJRixRQUNFLEtBQUssZ0NBQ0wsS0FBSyxnQkFDTCxLQUFLLGtCQUNMLEtBQUssZ0JBQWdCLE9BQ3JCO0FBQ0EsVUFBSyxhQUFhLFdBQVc7QUFDN0IsVUFBSywyQkFBMkIsS0FBSyxjQUFjLEtBQUs7O0FBSTFELFFBQUksS0FBSyxvQkFBb0IsS0FBSyxrQkFBa0IsS0FBSyxrQkFBa0IsTUFBTTtBQUM5RCxZQUFPLHlCQUN0QixpQkFBaUIsV0FDakIsUUFDQSxDQUFDLElBQ00sS0FBSyxLQUFLLGdCQUFnQixHQUFHO0FBQ3RDLFVBQUssa0JBQWtCLEdBQUc7QUFDMUIsVUFBSyx1QkFBdUI7QUFDNUIsVUFBSyxlQUFlLGNBQWMsSUFBSSxNQUFNLFVBQVUsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUFDO0FBQ3pFLFVBQUssZUFBZSxjQUNsQixJQUFJLFdBQVcsU0FBUztNQUFFLFNBQVM7TUFBTSxVQUFVO01BQU0sQ0FBQyxDQUMzRDs7QUFHSCxTQUFLLE9BQU87TUFFZDtJQUFFLFFBQVEsS0FBSyx3QkFBd0I7SUFBUSxTQUFTO0lBQU0sQ0FDL0Q7O0VBSUssb0JBQW9CLGdCQUFnQixLQUFLLGVBQWE7QUFHNUQsT0FBSSxDQUFDLGNBQ0g7QUFFRixzQkFDRSxLQUFLLFVBQ0wsZUFDQSxLQUFLLGtCQUNMLEtBQUssV0FBWSxjQUFjLCtCQUFnQyxFQUMvRCxNQUNBLEtBQUssU0FDTjs7Ozs7OztFQVFLLGdCQUFnQixPQUFxQjtBQUMzQyxPQUFJLE1BQU0sa0JBQWtCLFVBQVUsS0FBSyxVQUFVLFVBQ25ELE1BQUssZ0JBQWdCO1lBQ1osTUFBTSxrQkFBa0IsV0FBVyxLQUFLLFVBQVUsVUFDM0QsTUFBSyxnQkFBZ0I7O0VBSWpCLGlCQUFjO0FBQ3BCLFFBQUssUUFBUTtBQUNiLE9BQUksS0FBSyxjQUNQLE1BQUssZ0JBQWdCLFFBQVEsS0FBSyxjQUFjO0FBRWxELFFBQUssZ0JBQWdCLGFBQWEsaUJBQWlCLE9BQU87QUFDMUQsUUFBSyxtQkFBbUI7O0VBR2xCLGlCQUFjO0FBQ3BCLFFBQUssUUFBUTtBQUNiLFFBQUssZUFBZTtBQUNwQixRQUFLLGdCQUFnQixhQUFhLGlCQUFpQixRQUFRO0FBRTNELFFBQUssb0JBQW9CO0FBQ3pCLFFBQUssaUJBQWlCLFlBQVk7QUFDbEMsUUFBSyw0QkFBNEIsWUFBWTtBQUM3QyxRQUFLLG9CQUFvQjs7RUFHbkIseUJBQXNCO0FBQzVCLFFBQUssNkJBQTZCLElBQUksaUJBQWlCO0FBR3ZELFlBQVMsaUJBQWlCLGdCQUFnQixLQUFLLHFCQUFxQixFQUFFO0lBQ3BFLFNBQVM7SUFDVCxRQUFRLEtBQUssMkJBQTJCO0lBR3hDLFNBQVM7SUFDVixDQUFDO0FBQ0YsVUFBTyxpQkFBaUIsZ0JBQWdCLEtBQUsscUJBQXFCLEVBQUU7SUFDbEUsU0FBUztJQUNULFFBQVEsS0FBSywyQkFBMkI7SUFDekMsQ0FBQztBQUdGLFVBQU8saUJBQWlCLGdCQUFnQixPQUFPLEtBQUsscUJBQXFCLEdBQUcsRUFBRSxFQUM1RSxRQUFRLEtBQUssMkJBQTJCLFFBQ3pDLENBQUM7QUFDRixVQUFPLGlCQUFpQixjQUFjLE9BQU8sS0FBSyxzQkFBc0IsR0FBRyxFQUFFLEVBQzNFLFFBQVEsS0FBSywyQkFBMkIsUUFDekMsQ0FBQztBQUVGLFFBQUssaUJBQ0gseUJBQ0s7QUFDSCxRQUFJLEtBQUssY0FBYyxTQUNyQixNQUFLLG9CQUFvQjtBQUUzQixTQUFLLDZDQUE2QztNQUVwRCxFQUNFLFFBQVEsS0FBSywyQkFBMkIsUUFDekMsQ0FDRjtBQUdELFFBQUssZ0JBQWdCLGlCQUNuQixZQUNDLFVBQXlCLEtBQUssK0JBQStCLE1BQU0sRUFDcEU7SUFDRSxRQUFRLEtBQUssMkJBQTJCO0lBR3hDLFNBQVM7SUFDVixDQUNGOztFQW1CSyxnQ0FBZ0MsT0FBb0I7QUFDMUQsT0FBSSxLQUFLLFVBQVUsYUFBYSxLQUFLLFVBQVUsU0FDN0M7QUFHRixXQUFRLE1BQU0sS0FBZDtJQUNFLEtBQUs7SUFDTCxLQUFLO0FBQ0gsVUFBSyxNQUFNO0FBQ1g7Ozs7RUFLRSxrQkFBa0IsWUFBbUI7QUFDM0MsT0FBSSxlQUFlLFFBQVEsZUFBZSxLQUFBLEVBQ3hDO0FBRUYsUUFBSyxRQUFRLFNBQVMsV0FBVyxPQUFPLFVBQVUsV0FBVyxDQUFDOztFQUc3QyxTQUFNO0FBSXZCLFVBQU8sSUFBSTs7O2lEQUdrQyxzQkFBc0IsQ0FBQTs7MEJBRTdDLEtBQUssZ0JBQUE7O1lBRW5CLEtBQUssZUFBMEIsS0FBSyxXQUFXLFdBQTJCLENBQUE7Ozs7O3FCQUtqRSxDQUFDLGlCQUFpQixLQUFLLFlBQVksUUFBQTttQkFDckMsQ0FBQyxpQkFBaUIsS0FBSyxZQUFZLFFBQUE7O2dCQUV0QyxLQUFLLGlCQUFrQixLQUFLLG1CQUFtQixhQUE2QixDQUFBOztrQ0FFMUQsS0FBSyxrQkFBaUIifQ==
@@ -1,4 +1,4 @@
1
- import { t as SbbAutocompleteBaseElement } from "./autocomplete-base-element-BR5zqYyY.js";
1
+ import { t as SbbAutocompleteBaseElement } from "./autocomplete-base-element-BGAFOzNh.js";
2
2
  import { SbbAutocompleteElement } from "./autocomplete/autocomplete.component.js";
3
3
  import "./autocomplete.pure.js";
4
4
  //#region src/elements/autocomplete.ts
@@ -1,3 +1,3 @@
1
- import { t as SbbAutocompleteBaseElement } from "./autocomplete-base-element-BR5zqYyY.js";
1
+ import { t as SbbAutocompleteBaseElement } from "./autocomplete-base-element-BGAFOzNh.js";
2
2
  import { SbbAutocompleteElement } from "./autocomplete/autocomplete.component.js";
3
3
  export { SbbAutocompleteBaseElement, SbbAutocompleteElement };
@@ -68,4 +68,4 @@ var SbbBlockLinkCommonElementMixin = (superClass) => {
68
68
  //#endregion
69
69
  export { SbbBlockLinkCommonElementMixin as t };
70
70
 
71
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stbGluay1jb21tb24tQ09ZMVJJMUkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2xpbmsvY29tbW9uL2Jsb2NrLWxpbmsuc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvbGluay9jb21tb24vYmxvY2stbGluay1jb21tb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBAaW5jbHVkZSBzYmIuYmxvY2stbGluay12YXJpYWJsZXM7XG5cbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbjpob3N0KFtuZWdhdGl2ZV0pIHtcbiAgQGluY2x1ZGUgc2JiLmJsb2NrLWxpbmstdmFyaWFibGVzLS1uZWdhdGl2ZTtcbn1cblxuOmhvc3QoLnNiYi1hY3RpdmUpIHtcbiAgQGluY2x1ZGUgc2JiLmJsb2NrLWxpbmstdmFyaWFibGVzLS1hY3RpdmU7XG59XG5cbjpob3N0KC5zYmItYWN0aXZlW25lZ2F0aXZlXSkge1xuICBAaW5jbHVkZSBzYmIuYmxvY2stbGluay12YXJpYWJsZXMtLWFjdGl2ZS1uZWdhdGl2ZTtcbn1cblxuOmhvc3QoW3NpemU9J3hzJ10pIHtcbiAgLS1zYmItYmxvY2stbGluay1mb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS14cyk7XG59XG5cbjpob3N0KFtzaXplPSdzJ10pIHtcbiAgLS1zYmItYmxvY2stbGluay1mb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS1zKTtcbn1cblxuOmhvc3QoW3NpemU9J20nXSkge1xuICAtLXNiYi1ibG9jay1saW5rLWZvbnQtc2l6ZTogdmFyKC0tc2JiLXRleHQtZm9udC1zaXplLW0pO1xufVxuXG4uc2JiLWFjdGlvbi1iYXNlIHtcbiAgZ2FwOiB2YXIoLS1zYmItYmxvY2stbGluay1nYXApO1xuICBmb250LXNpemU6IHZhcigtLXNiYi1ibG9jay1saW5rLWZvbnQtc2l6ZSk7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1zYmItdHlwby1sZXR0ZXItc3BhY2luZy10ZXh0KTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10eXBvLWxpbmUtaGVpZ2h0LXRleHQpO1xufVxuXG4uc2JiLWxpbmtfX2ljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogY2FsYyh2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC10ZXh0KSAqIDFlbSk7XG4gIHdpZHRoOiB2YXIoLS1zYmItYmxvY2stbGluay1pY29uLXNpemUpO1xuICBmbGV4OiAwIDAgYXV0bztcbiAgYWxpZ24tc2VsZjogc3RhcnQ7XG5cbiAgOmhvc3QoOm5vdCg6c3RhdGUoc2xvdHRlZC1pY29uKSwgOnN0YXRlKGhhcy1pY29uLW5hbWUpKSkgJiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIDpob3N0KFtpY29uLXBsYWNlbWVudD0nZW5kJ10pICYge1xuICAgIG9yZGVyOiAyO1xuICB9XG5cbiAgOjpzbG90dGVkKFtzbG90PSdpY29uJ10pLFxuICBzYmItaWNvbiB7XG4gICAgQGluY2x1ZGUgc2JiLmFic29sdXRlLWNlbnRlci15O1xuICB9XG59XG4iLCJpbXBvcnQgeyBodG1sLCB1bnNhZmVDU1MsIHR5cGUgQ1NTUmVzdWx0R3JvdXAsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiQWN0aW9uQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJJY29uUGxhY2VtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9pbnRlcmZhY2VzLnRzJztcbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB7IFNiYkljb25OYW1lTWl4aW4gfSBmcm9tICcuLi8uLi9pY29uLnRzJztcblxuaW1wb3J0IHsgU2JiTGlua0NvbW1vbkVsZW1lbnRNaXhpbiB9IGZyb20gJy4vbGluay1jb21tb24udHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L29yZGVyXG5pbXBvcnQgYmxvY2tTdHlsZSBmcm9tICcuL2Jsb2NrLWxpbmsuc2Nzcz9pbmxpbmUnO1xuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJCbG9ja0xpbmtDb21tb25FbGVtZW50TWl4aW5UeXBlIGV4dGVuZHMgU2JiTGlua0NvbW1vbkVsZW1lbnRNaXhpbihcbiAgU2JiSWNvbk5hbWVNaXhpbihTYmJBY3Rpb25CYXNlRWxlbWVudCksXG4pIHtcbiAgcHVibGljIGFjY2Vzc29yIGljb25QbGFjZW1lbnQ6IFNiYkljb25QbGFjZW1lbnQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJCbG9ja0xpbmtDb21tb25FbGVtZW50TWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiQWN0aW9uQmFzZUVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiQmxvY2tMaW5rQ29tbW9uRWxlbWVudE1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiQmxvY2tMaW5rQ29tbW9uRWxlbWVudFxuICAgIGV4dGVuZHMgU2JiTGlua0NvbW1vbkVsZW1lbnRNaXhpbihTYmJJY29uTmFtZU1peGluKHN1cGVyQ2xhc3MpKVxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJCbG9ja0xpbmtDb21tb25FbGVtZW50TWl4aW5UeXBlPlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW3N1cGVyLnN0eWxlcywgdW5zYWZlQ1NTKGJsb2NrU3R5bGUpXTtcblxuICAgIC8qKiBNb3ZlcyB0aGUgaWNvbiB0byB0aGUgZW5kIG9mIHRoZSBjb21wb25lbnQgaWYgc2V0IHRvIHRydWUuICovXG4gICAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaWNvbi1wbGFjZW1lbnQnLCByZWZsZWN0OiB0cnVlIH0pXG4gICAgcHVibGljIGFjY2Vzc29yIGljb25QbGFjZW1lbnQ6IFNiYkljb25QbGFjZW1lbnQgPSAnc3RhcnQnO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1saW5rX19pY29uXCI+JHtzdXBlci5yZW5kZXJJY29uU2xvdCgpfTwvc3Bhbj5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNiYkJsb2NrTGlua0NvbW1vbkVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkJsb2NrTGlua0NvbW1vbkVsZW1lbnRNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FDbUJBLElBQWEsa0NBQ1gsZUFDK0Q7QUFrQi9ELGVBakJ3QztvQkFDOUIsMEJBQTBCLGlCQUFpQixXQUFXLENBQUM7Ozs7ZUFEbEQsa0NBQ0wsWUFBdUQ7OztpQ0FNOUQsU0FBUztLQUFFLFdBQVc7S0FBa0IsU0FBUztLQUFNLENBQUMsQ0FBQTtBQUN6RCxpQkFBQSxNQUFBLE1BQUEsMkJBQUE7S0FBQSxNQUFBO0tBQUEsTUFBQTtLQUFBLFFBQUE7S0FBQSxTQUFBO0tBQUEsUUFBQTtNQUFBLE1BQUEsUUFBQSxtQkFBQTtNQUFBLE1BQUEsUUFBQSxJQUFnQjtNQUFhLE1BQUEsS0FBQSxVQUFBO0FBQUEsV0FBYixnQkFBYTs7TUFBQTtLQUFBLFVBQUE7S0FBQSxFQUFBLDZCQUFBLGlDQUFBOzs7Ozs7Ozs7QUFKTixTQUFBLFNBQXlCLENBQUMsTUFBTSxRQUFRLFVBQVUsbUJBQVcsQ0FBQzs7R0FJckYsa0NBQUEsa0JBQUEsTUFBQSw2QkFBa0QsUUFBTzs7R0FBekQsSUFBZ0IsZ0JBQWE7QUFBQSxXQUFBLE1BQUE7O0dBQTdCLElBQWdCLGNBQWEsT0FBQTtBQUFBLFVBQUEsaUNBQUE7O0dBRVYsaUJBQWM7QUFDL0IsV0FBTyxJQUFJO3VDQUNzQixNQUFNLGdCQUFnQixDQUFBIn0=
71
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stbGluay1jb21tb24tQ09ZMVJJMUkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2xpbmsvY29tbW9uL2Jsb2NrLWxpbmsuc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvbGluay9jb21tb24vYmxvY2stbGluay1jb21tb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBAaW5jbHVkZSBzYmIuYmxvY2stbGluay12YXJpYWJsZXM7XG5cbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbjpob3N0KFtuZWdhdGl2ZV0pIHtcbiAgQGluY2x1ZGUgc2JiLmJsb2NrLWxpbmstdmFyaWFibGVzLS1uZWdhdGl2ZTtcbn1cblxuOmhvc3QoLnNiYi1hY3RpdmUpIHtcbiAgQGluY2x1ZGUgc2JiLmJsb2NrLWxpbmstdmFyaWFibGVzLS1hY3RpdmU7XG59XG5cbjpob3N0KC5zYmItYWN0aXZlW25lZ2F0aXZlXSkge1xuICBAaW5jbHVkZSBzYmIuYmxvY2stbGluay12YXJpYWJsZXMtLWFjdGl2ZS1uZWdhdGl2ZTtcbn1cblxuOmhvc3QoW3NpemU9J3hzJ10pIHtcbiAgLS1zYmItYmxvY2stbGluay1mb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS14cyk7XG59XG5cbjpob3N0KFtzaXplPSdzJ10pIHtcbiAgLS1zYmItYmxvY2stbGluay1mb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS1zKTtcbn1cblxuOmhvc3QoW3NpemU9J20nXSkge1xuICAtLXNiYi1ibG9jay1saW5rLWZvbnQtc2l6ZTogdmFyKC0tc2JiLXRleHQtZm9udC1zaXplLW0pO1xufVxuXG4uc2JiLWFjdGlvbi1iYXNlIHtcbiAgZ2FwOiB2YXIoLS1zYmItYmxvY2stbGluay1nYXApO1xuICBmb250LXNpemU6IHZhcigtLXNiYi1ibG9jay1saW5rLWZvbnQtc2l6ZSk7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1zYmItdHlwby1sZXR0ZXItc3BhY2luZy10ZXh0KTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10eXBvLWxpbmUtaGVpZ2h0LXRleHQpO1xufVxuXG4uc2JiLWxpbmtfX2ljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogY2FsYyh2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC10ZXh0KSAqIDFlbSk7XG4gIHdpZHRoOiB2YXIoLS1zYmItYmxvY2stbGluay1pY29uLXNpemUpO1xuICBmbGV4OiAwIDAgYXV0bztcbiAgYWxpZ24tc2VsZjogc3RhcnQ7XG5cbiAgOmhvc3QoOm5vdCg6c3RhdGUoc2xvdHRlZC1pY29uKSwgOnN0YXRlKGhhcy1pY29uLW5hbWUpKSkgJiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIDpob3N0KFtpY29uLXBsYWNlbWVudD0nZW5kJ10pICYge1xuICAgIG9yZGVyOiAyO1xuICB9XG5cbiAgOjpzbG90dGVkKFtzbG90PSdpY29uJ10pLFxuICBzYmItaWNvbiB7XG4gICAgQGluY2x1ZGUgc2JiLmFic29sdXRlLWNlbnRlci15O1xuICB9XG59XG4iLCJpbXBvcnQgeyBodG1sLCB1bnNhZmVDU1MsIHR5cGUgQ1NTUmVzdWx0R3JvdXAsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiQWN0aW9uQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJJY29uUGxhY2VtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9pbnRlcmZhY2VzLnRzJztcbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB7IFNiYkljb25OYW1lTWl4aW4gfSBmcm9tICcuLi8uLi9pY29uLnRzJztcblxuaW1wb3J0IHsgU2JiTGlua0NvbW1vbkVsZW1lbnRNaXhpbiB9IGZyb20gJy4vbGluay1jb21tb24udHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L29yZGVyXG5pbXBvcnQgYmxvY2tTdHlsZSBmcm9tICcuL2Jsb2NrLWxpbmsuc2Nzcz9pbmxpbmUnO1xuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJCbG9ja0xpbmtDb21tb25FbGVtZW50TWl4aW5UeXBlIGV4dGVuZHMgU2JiTGlua0NvbW1vbkVsZW1lbnRNaXhpbihcbiAgU2JiSWNvbk5hbWVNaXhpbihTYmJBY3Rpb25CYXNlRWxlbWVudCksXG4pIHtcbiAgcHVibGljIGFjY2Vzc29yIGljb25QbGFjZW1lbnQ6IFNiYkljb25QbGFjZW1lbnQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJCbG9ja0xpbmtDb21tb25FbGVtZW50TWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiQWN0aW9uQmFzZUVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiQmxvY2tMaW5rQ29tbW9uRWxlbWVudE1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiQmxvY2tMaW5rQ29tbW9uRWxlbWVudFxuICAgIGV4dGVuZHMgU2JiTGlua0NvbW1vbkVsZW1lbnRNaXhpbihTYmJJY29uTmFtZU1peGluKHN1cGVyQ2xhc3MpKVxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJCbG9ja0xpbmtDb21tb25FbGVtZW50TWl4aW5UeXBlPlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW3N1cGVyLnN0eWxlcywgdW5zYWZlQ1NTKGJsb2NrU3R5bGUpXTtcblxuICAgIC8qKiBNb3ZlcyB0aGUgaWNvbiB0byB0aGUgZW5kIG9mIHRoZSBjb21wb25lbnQgaWYgc2V0IHRvIHRydWUuICovXG4gICAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaWNvbi1wbGFjZW1lbnQnLCByZWZsZWN0OiB0cnVlIH0pXG4gICAgcHVibGljIGFjY2Vzc29yIGljb25QbGFjZW1lbnQ6IFNiYkljb25QbGFjZW1lbnQgPSAnc3RhcnQnO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1saW5rX19pY29uXCI+JHtzdXBlci5yZW5kZXJJY29uU2xvdCgpfTwvc3Bhbj5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNiYkJsb2NrTGlua0NvbW1vbkVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkJsb2NrTGlua0NvbW1vbkVsZW1lbnRNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FDbUJBLElBQWEsa0NBQ1gsZUFDK0Q7QUFrQi9ELGVBakJ3QztvQkFDOUIsMEJBQTBCLGlCQUFpQixXQUFXLENBQUM7Ozs7ZUFEbEQsa0NBQ0wsWUFBdUQ7OztpQ0FNOUQsU0FBUztLQUFFLFdBQVc7S0FBa0IsU0FBUztLQUFNLENBQUMsQ0FBQTtBQUN6RCxpQkFBQSxNQUFBLE1BQUEsMkJBQUE7S0FBQSxNQUFBO0tBQUEsTUFBQTtLQUFBLFFBQUE7S0FBQSxTQUFBO0tBQUEsUUFBQTtNQUFBLE1BQUEsUUFBQSxtQkFBQTtNQUFBLE1BQUEsUUFBQSxJQUFnQjtNQUFhLE1BQUEsS0FBQSxVQUFBO0FBQUEsV0FBYixnQkFBYTs7TUFBQTtLQUFBLFVBQUE7S0FBQSxFQUFBLDZCQUFBLGlDQUFBOzs7Ozs7Ozs7QUFKTixTQUFBLFNBQXlCLENBQUMsTUFBTSxRQUFRLFVBQVUsbUJBQVcsQ0FBQzs7R0FJckYsa0NBQUEsa0JBQUEsTUFBQSw2QkFBa0QsUUFBTzs7R0FBekQsSUFBZ0IsZ0JBQWE7QUFBQSxXQUFBLE1BQUE7O0dBQTdCLElBQWdCLGNBQWEsT0FBQTtBQUFBLFVBQUEsaUNBQUE7O0dBRVYsaUJBQWM7QUFDL0IsV0FBTyxJQUFJO3VDQUNzQixNQUFNLGdCQUFnQixDQUFBOzs7Ozs7Ozs7S0FLcEQifQ==
@@ -192,4 +192,4 @@ var SbbBreadcrumbGroupElement = (() => {
192
192
  //#endregion
193
193
  export { SbbBreadcrumbGroupElement as t };
194
194
 
195
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1ncm91cC5jb21wb25lbnQtRFpzbE5CbEIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1ncm91cC9icmVhZGNydW1iLWdyb3VwLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1ncm91cC9icmVhZGNydW1iLWdyb3VwLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuXG4gIC8vIEFsbG93cyBzaXplIGNhbGN1bGF0aW9uIGV2ZW4gaWYgaW4gZ3JpZCBvciBmbGV4IGNvbnRleHQuXG4gIG1pbi13aWR0aDogMDtcblxuICAvLyBTZXQgdGhlIGxpbmUtaGVpZ2h0IGZvciBhZGphY2VudCBlbGVtZW50cyBpbiBvcmRlciB0byBwcmV2ZW50IGZyb20gaW5mbHVlbmNlIG9mIGEgY29uc3VtZXItc2V0IGxpbmUtaGVpZ2h0LlxuICBsaW5lLWhlaWdodDogdmFyKC0tc2JiLXR5cG8tbGluZS1oZWlnaHQtdGV4dCk7XG59XG5cbjpob3N0KDpzdGF0ZShsb2FkZWQpKSB7XG4gIC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuOmhvc3QoOmlzKDpzdGF0ZShzdGF0ZS1jb2xsYXBzZWQpLCA6c3RhdGUoc3RhdGUtbWFudWFsbHktZXhwYW5kZWQpKSkge1xuICAtLXNiYi1icmVhZGNydW1iLWdyb3VwLXdyYXA6IHdyYXA7XG59XG5cbi5zYmItYnJlYWRjcnVtYi1ncm91cCB7XG4gIEBpbmNsdWRlIHNiYi5saXN0LXJlc2V0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtd3JhcCk7XG4gIGNvbHVtbi1nYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTF4KTtcbiAgdmlzaWJpbGl0eTogdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtdmlzaWJpbGl0eSk7XG59XG5cbi5zYmItYnJlYWRjcnVtYi1ncm91cF9faXRlbSB7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2x1bW4tZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xeCk7XG59XG5cbi5zYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uIHtcbiAgY29sb3I6IHZhcigtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWNvbG9yKTtcbn1cblxuI3NiYi1icmVhZGNydW1iLWVsbGlwc2lzIHtcbiAgQGluY2x1ZGUgc2JiLmJ1dHRvbi1yZXNldDtcblxuICBmb250LWZhbWlseTogdmFyKC0tc2JiLXR5cG8tZm9udC1mYW1pbHkpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS14eHMpO1xuXG4gIC8vIGxpbmUgaGVpZ2h0IGFuZCBsZXR0ZXItc3BhY2luZyBuZWVkZWQgdG8gbWF0Y2ggc3F1YXJlcyBkcmF3biBpbiBGaWdtYS5cbiAgbGluZS1oZWlnaHQ6IDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAxZW07XG4gIHdpZHRoOiB2YXIoLS1zYmItc2l6ZS1pY29uLXVpLXNtYWxsKTtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItc2l6ZS1pY29uLXVpLXNtYWxsKTtcbiAgYm9yZGVyOiB2YXIoLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1ib3JkZXItd2lkdGgpIHNvbGlkXG4gICAgdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtYm9yZGVyLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuXG4gIC8vIEluIG9yZGVyIHRvIHZlcnRpY2FsbHkgY2VudGVyIC4uLiwgd2UgdXNlIHBhZGRpbmcgd2l0aCBoYWxmIHRoZSBmb250IHNpemUuXG4gIHBhZGRpbmctYmxvY2stZW5kOiAwLjVlbTtcbiAgY3Vyc29yOiB2YXIoLS1zYmItY3Vyc29yLXBvaW50ZXIpO1xuICBjb2xvcjogdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtY29sb3IpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1ib3JkZXItd2lkdGg6IHZhcigtLXNiYi1ib3JkZXItd2lkdGgtMngpO1xuICAgIC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtYm9yZGVyLWNvbG9yOiBDYW52YXNUZXh0O1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmhvdmVyLW1xKCRob3ZlcjogdHJ1ZSkge1xuICAgICY6aG92ZXIge1xuICAgICAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLTIpO1xuICAgICAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci0zKTtcblxuICAgICAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgICAgICAtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWJvcmRlci1jb2xvcjogSGlnaGxpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG4gIH1cbn1cbiIsImltcG9ydCB7IFJlc2l6ZUNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL3Jlc2l6ZS1jb250cm9sbGVyLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG4gIHVuc2FmZUNTUyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQge1xuICBnZXROZXh0RWxlbWVudEluZGV4LFxuICBpc0Fycm93S2V5UHJlc3NlZCxcbiAgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yLFxufSBmcm9tICcuLi8uLi9jb3JlL2ExMXkudHMnO1xuaW1wb3J0IHsgU2JiRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy50cyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLnRzJztcbmltcG9ydCB7IGkxOG5CcmVhZGNydW1iRWxsaXBzaXNCdXR0b25MYWJlbCB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi50cyc7XG5pbXBvcnQgeyBTYmJOYW1lZFNsb3RMaXN0TWl4aW4sIHR5cGUgV2l0aExpc3RDaGlsZHJlbiB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uLy4uL2NvcmUvc3R5bGVzLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiQnJlYWRjcnVtYkVsZW1lbnQgfSBmcm9tICcuLi9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vYnJlYWRjcnVtYi1ncm91cC5zY3NzP2lubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vaWNvbi50cyc7XG5cbmNvbnN0IE1JTl9CUkVBRENSVU1CU19UT19DT0xMQVBTRSA9IDM7XG5cbi8qKlxuICogSXQgY2FuIGJlIHVzZWQgYXMgYSBjb250YWluZXIgZm9yIG9uZSBvciBtb3JlIGBzYmItYnJlYWRjcnVtYmAgY29tcG9uZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItYnJlYWRjcnVtYmAgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJCcmVhZGNydW1iR3JvdXBFbGVtZW50IGV4dGVuZHMgU2JiTmFtZWRTbG90TGlzdE1peGluPFxuICBTYmJCcmVhZGNydW1iRWxlbWVudCxcbiAgdHlwZW9mIFNiYkVsZW1lbnRcbj4oU2JiRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLWJyZWFkY3J1bWItZ3JvdXAnO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IHJvbGUgPSAnbmF2aWdhdGlvbic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lcyA9IFsnc2JiLWJyZWFkY3J1bWInXTtcblxuICAvKiogVGhlIHN0YXRlIG9mIHRoZSBicmVhZGNydW1iIGdyb3VwLiAqL1xuICBAc3RhdGUoKVxuICBwcml2YXRlIHNldCBfc3RhdGUoc3RhdGU6ICdjb2xsYXBzZWQnIHwgJ21hbnVhbGx5LWV4cGFuZGVkJyB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5fc3RhdGVJbnRlcm5hbCkge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgc3RhdGUtJHt0aGlzLl9zdGF0ZUludGVybmFsfWApO1xuICAgIH1cbiAgICB0aGlzLl9zdGF0ZUludGVybmFsID0gc3RhdGU7XG4gICAgaWYgKHRoaXMuX3N0YXRlSW50ZXJuYWwpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoYHN0YXRlLSR7dGhpcy5fc3RhdGVJbnRlcm5hbH1gKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXQgX3N0YXRlKCk6ICdjb2xsYXBzZWQnIHwgJ21hbnVhbGx5LWV4cGFuZGVkJyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZUludGVybmFsO1xuICB9XG4gIHByaXZhdGUgX3N0YXRlSW50ZXJuYWw6ICdjb2xsYXBzZWQnIHwgJ21hbnVhbGx5LWV4cGFuZGVkJyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5fZXZhbHVhdGVDb2xsYXBzZWRTdGF0ZSgpLFxuICB9KTtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9tYXJrRm9yRm9jdXMgPSBmYWxzZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5ZG93bicsIChlKSA9PiB0aGlzLl9oYW5kbGVLZXlEb3duKGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUtleURvd24oZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMubGlzdENoaWxkcmVuLmxlbmd0aCB8fFxuICAgICAgLy8gZG9uJ3QgdHJhcCBuZXN0ZWQgaGFuZGxpbmdcbiAgICAgICgoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgIT09IHRoaXMgJiYgKGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnBhcmVudEVsZW1lbnQgIT09IHRoaXMpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyb3dLZXlQcmVzc2VkKGV2dCkpIHtcbiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvY3VzTmV4dENvbGxhcHNlZChldnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9jdXNOZXh0KGV2dCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCdsb2FkZWQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczxXaXRoTGlzdENoaWxkcmVuPHRoaXM+Pik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbGlzdENoaWxkcmVuJykpIHtcbiAgICAgIHRoaXMuX3N5bmNCcmVhZGNydW1icygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczxXaXRoTGlzdENoaWxkcmVuPHRoaXM+Pik6IHZvaWQge1xuICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2xpc3RDaGlsZHJlbicpKSB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuX2V2YWx1YXRlQ29sbGFwc2VkU3RhdGUoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXJrRm9yRm9jdXMgJiYgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yLm1vc3RSZWNlbnRNb2RhbGl0eSA9PT0gJ2tleWJvYXJkJykge1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW5bMV0/LmZvY3VzKCk7XG5cbiAgICAgIC8vIFJlc2V0IG1hcmsgZm9yIGZvY3VzXG4gICAgICB0aGlzLl9tYXJrRm9yRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQXBwbHkgdGhlIGFyaWEtY3VycmVudCBhdHRyaWJ1dGUgdG8gdGhlIGxhc3Qgc2JiLWJyZWFkY3J1bWIgZWxlbWVudC4gKi9cbiAgcHJpdmF0ZSBfc3luY0JyZWFkY3J1bWJzKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAuc2xpY2UoMCwgLTEpXG4gICAgICAuZmlsdGVyKChjKSA9PiBjLmhhc0F0dHJpYnV0ZSgnYWNjZXNzaWJpbGl0eS1jdXJyZW50JykpXG4gICAgICAuZm9yRWFjaCgoYykgPT4gYy5yZW1vdmVBdHRyaWJ1dGUoJ2FjY2Vzc2liaWxpdHktY3VycmVudCcpKTtcbiAgICB0aGlzLmxpc3RDaGlsZHJlblt0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggLSAxXT8uc2V0QXR0cmlidXRlKCdhY2Nlc3NpYmlsaXR5LWN1cnJlbnQnLCAncGFnZScpO1xuXG4gICAgLy8gSWYgaXQgaXMgbm90IGV4cGFuZGFibGUsIHJlc2V0IHN0YXRlXG4gICAgaWYgKHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aCA8IE1JTl9CUkVBRENSVU1CU19UT19DT0xMQVBTRSkge1xuICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgY29ycmVjdCBlbGVtZW50IHdoZW4gdGhlIGVsbGlwc2lzIGJyZWFkY3J1bWIgaXMgZGlzcGxheWVkIGFuZCB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHdpdGgga2V5Ym9hcmQncyBhcnJvd3MuXG4gICAqL1xuICBwcml2YXRlIF9mb2N1c05leHRDb2xsYXBzZWQoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYXJyYXlDb2xsYXBzZWQ6IFNiYkJyZWFkY3J1bWJFbGVtZW50W10gPSBbXG4gICAgICB0aGlzLmxpc3RDaGlsZHJlblswXSxcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignI3NiYi1icmVhZGNydW1iLWVsbGlwc2lzJykgYXMgU2JiQnJlYWRjcnVtYkVsZW1lbnQsXG4gICAgICB0aGlzLmxpc3RDaGlsZHJlblt0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggLSAxXSxcbiAgICBdO1xuICAgIHRoaXMuX2ZvY3VzTmV4dChldnQsIGFycmF5Q29sbGFwc2VkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZvY3VzTmV4dChcbiAgICBldnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgYnJlYWRjcnVtYnM6IFNiYkJyZWFkY3J1bWJFbGVtZW50W10gPSB0aGlzLmxpc3RDaGlsZHJlbixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gYnJlYWRjcnVtYnMuZmluZEluZGV4KFxuICAgICAgKGUpID0+IGUgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZSA9PT0gdGhpcy5zaGFkb3dSb290IS5hY3RpdmVFbGVtZW50LFxuICAgICk7XG4gICAgY29uc3QgbmV4dEluZGV4OiBudW1iZXIgPSBnZXROZXh0RWxlbWVudEluZGV4KGV2dCwgY3VycmVudCwgYnJlYWRjcnVtYnMubGVuZ3RoKTtcbiAgICBicmVhZGNydW1ic1tuZXh0SW5kZXhdPy5mb2N1cygpO1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IGR1ZSB0byBAU3RhdGUgYW5ub3RhdGlvbiBvbiBfc3RhdGUsIHRoaXMgbWV0aG9kIHRyaWdnZXJzIGEgbmV3IHJlbmRlcjsgYXMgYSBjb25zZXF1ZW5jZSwgdGhlIGZvY3VzIGlzIG1vdmVkXG4gICAqIHRvIHRoZSBgYm9keWAsIHNvIGlmIHRoZSBlbGxpcHNpcyBlbGVtZW50IGhhcyBmb2N1cywgaXQncyBhc3luY2hyb25vdXNseSBmb3JjZWQgdG8gdGhlIGZpcnN0IGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIF9leHBhbmRCcmVhZGNydW1icygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9ICdtYW51YWxseS1leHBhbmRlZCc7XG4gICAgdGhpcy5fbWFya0ZvckZvY3VzID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBFdmFsdWF0ZSBpZiB0aGUgZXhwYW5kZWQgYnJlYWRjcnVtYiBlbGVtZW50IGZpdHMgaW4gcGFnZSB3aWR0aCwgb3RoZXJ3aXNlIGl0IG5lZWRzIGVsbGlwc2lzICovXG4gIHByaXZhdGUgX2V2YWx1YXRlQ29sbGFwc2VkU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX3N0YXRlICYmXG4gICAgICB0aGlzLnNjcm9sbFdpZHRoID4gdGhpcy5vZmZzZXRXaWR0aCAmJlxuICAgICAgdGhpcy5saXN0Q2hpbGRyZW4ubGVuZ3RoID49IE1JTl9CUkVBRENSVU1CU19UT19DT0xMQVBTRVxuICAgICkge1xuICAgICAgdGhpcy5fc3RhdGUgPSAnY29sbGFwc2VkJztcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLmhvc3REaXNjb25uZWN0ZWQoKTtcbiAgICAgIHRoaXMucmVtb3ZlQ29udHJvbGxlcih0aGlzLl9yZXNpemVPYnNlcnZlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQ29sbGFwc2VkKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxsaSBjbGFzcz1cInNiYi1icmVhZGNydW1iLWdyb3VwX19pdGVtXCI+XG4gICAgICAgIDxzbG90IG5hbWU9XCJsaS0wXCI+PC9zbG90PlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzcz1cInNiYi1icmVhZGNydW1iLWdyb3VwX19pdGVtXCIgaWQ9XCJzYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpc1wiPlxuICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1yaWdodC1zbWFsbFwiXG4gICAgICAgICAgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uXCJcbiAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpZD1cInNiYi1icmVhZGNydW1iLWVsbGlwc2lzXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPSR7aTE4bkJyZWFkY3J1bWJFbGxpcHNpc0J1dHRvbkxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fZXhwYW5kQnJlYWRjcnVtYnMoKX1cbiAgICAgICAgPlxuICAgICAgICAgIC4uLlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9faXRlbVwiPlxuICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1yaWdodC1zbWFsbFwiXG4gICAgICAgICAgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uXCJcbiAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgIDxzbG90IG5hbWU9JHtgbGktJHt0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggLSAxfWB9Pjwvc2xvdD5cbiAgICAgIDwvbGk+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckV4cGFuZGVkKCk6IFRlbXBsYXRlUmVzdWx0W10ge1xuICAgIHJldHVybiB0aGlzLmxpc3RTbG90RW50cmllcygpLm1hcChcbiAgICAgIChzbG90LCBpbmRleCwgYXJyYXkpID0+IGh0bWxgXG4gICAgICAgIDxsaSBjbGFzcz1cInNiYi1icmVhZGNydW1iLWdyb3VwX19pdGVtXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT0ke3Nsb3QubmFtZX0+PC9zbG90PlxuICAgICAgICAgICR7aW5kZXggIT09IGFycmF5Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gaHRtbGA8c2JiLWljb25cbiAgICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1yaWdodC1zbWFsbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uXCJcbiAgICAgICAgICAgICAgPjwvc2JiLWljb24+YFxuICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICA8L2xpPlxuICAgICAgYCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8b2wgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cFwiPlxuICAgICAgICAke3RoaXMuX3N0YXRlID09PSAnY29sbGFwc2VkJyA/IHRoaXMuX3JlbmRlckNvbGxhcHNlZCgpIDogdGhpcy5fcmVuZGVyRXhwYW5kZWQoKX1cbiAgICAgIDwvb2w+XG4gICAgICAke3RoaXMucmVuZGVySGlkZGVuU2xvdCgpfVxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1icmVhZGNydW1iLWdyb3VwJzogU2JiQnJlYWRjcnVtYkdyb3VwRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUMyQkEsSUFBTSw4QkFBOEI7Ozs7OztJQU92QixtQ0FBeUI7bUJBQVMsc0JBRzdDLFdBQVc7OztjQUhBLGtDQUFrQyxZQUds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
195
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1ncm91cC5jb21wb25lbnQtRFpzbE5CbEIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1ncm91cC9icmVhZGNydW1iLWdyb3VwLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1ncm91cC9icmVhZGNydW1iLWdyb3VwLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuXG4gIC8vIEFsbG93cyBzaXplIGNhbGN1bGF0aW9uIGV2ZW4gaWYgaW4gZ3JpZCBvciBmbGV4IGNvbnRleHQuXG4gIG1pbi13aWR0aDogMDtcblxuICAvLyBTZXQgdGhlIGxpbmUtaGVpZ2h0IGZvciBhZGphY2VudCBlbGVtZW50cyBpbiBvcmRlciB0byBwcmV2ZW50IGZyb20gaW5mbHVlbmNlIG9mIGEgY29uc3VtZXItc2V0IGxpbmUtaGVpZ2h0LlxuICBsaW5lLWhlaWdodDogdmFyKC0tc2JiLXR5cG8tbGluZS1oZWlnaHQtdGV4dCk7XG59XG5cbjpob3N0KDpzdGF0ZShsb2FkZWQpKSB7XG4gIC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuOmhvc3QoOmlzKDpzdGF0ZShzdGF0ZS1jb2xsYXBzZWQpLCA6c3RhdGUoc3RhdGUtbWFudWFsbHktZXhwYW5kZWQpKSkge1xuICAtLXNiYi1icmVhZGNydW1iLWdyb3VwLXdyYXA6IHdyYXA7XG59XG5cbi5zYmItYnJlYWRjcnVtYi1ncm91cCB7XG4gIEBpbmNsdWRlIHNiYi5saXN0LXJlc2V0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtd3JhcCk7XG4gIGNvbHVtbi1nYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTF4KTtcbiAgdmlzaWJpbGl0eTogdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtdmlzaWJpbGl0eSk7XG59XG5cbi5zYmItYnJlYWRjcnVtYi1ncm91cF9faXRlbSB7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2x1bW4tZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xeCk7XG59XG5cbi5zYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uIHtcbiAgY29sb3I6IHZhcigtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWNvbG9yKTtcbn1cblxuI3NiYi1icmVhZGNydW1iLWVsbGlwc2lzIHtcbiAgQGluY2x1ZGUgc2JiLmJ1dHRvbi1yZXNldDtcblxuICBmb250LWZhbWlseTogdmFyKC0tc2JiLXR5cG8tZm9udC1mYW1pbHkpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS14eHMpO1xuXG4gIC8vIGxpbmUgaGVpZ2h0IGFuZCBsZXR0ZXItc3BhY2luZyBuZWVkZWQgdG8gbWF0Y2ggc3F1YXJlcyBkcmF3biBpbiBGaWdtYS5cbiAgbGluZS1oZWlnaHQ6IDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAxZW07XG4gIHdpZHRoOiB2YXIoLS1zYmItc2l6ZS1pY29uLXVpLXNtYWxsKTtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItc2l6ZS1pY29uLXVpLXNtYWxsKTtcbiAgYm9yZGVyOiB2YXIoLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1ib3JkZXItd2lkdGgpIHNvbGlkXG4gICAgdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtYm9yZGVyLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuXG4gIC8vIEluIG9yZGVyIHRvIHZlcnRpY2FsbHkgY2VudGVyIC4uLiwgd2UgdXNlIHBhZGRpbmcgd2l0aCBoYWxmIHRoZSBmb250IHNpemUuXG4gIHBhZGRpbmctYmxvY2stZW5kOiAwLjVlbTtcbiAgY3Vyc29yOiB2YXIoLS1zYmItY3Vyc29yLXBvaW50ZXIpO1xuICBjb2xvcjogdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtY29sb3IpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1ib3JkZXItd2lkdGg6IHZhcigtLXNiYi1ib3JkZXItd2lkdGgtMngpO1xuICAgIC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtYm9yZGVyLWNvbG9yOiBDYW52YXNUZXh0O1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmhvdmVyLW1xKCRob3ZlcjogdHJ1ZSkge1xuICAgICY6aG92ZXIge1xuICAgICAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLTIpO1xuICAgICAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci0zKTtcblxuICAgICAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgICAgICAtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWJvcmRlci1jb2xvcjogSGlnaGxpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG4gIH1cbn1cbiIsImltcG9ydCB7IFJlc2l6ZUNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL3Jlc2l6ZS1jb250cm9sbGVyLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG4gIHVuc2FmZUNTUyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQge1xuICBnZXROZXh0RWxlbWVudEluZGV4LFxuICBpc0Fycm93S2V5UHJlc3NlZCxcbiAgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yLFxufSBmcm9tICcuLi8uLi9jb3JlL2ExMXkudHMnO1xuaW1wb3J0IHsgU2JiRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy50cyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLnRzJztcbmltcG9ydCB7IGkxOG5CcmVhZGNydW1iRWxsaXBzaXNCdXR0b25MYWJlbCB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi50cyc7XG5pbXBvcnQgeyBTYmJOYW1lZFNsb3RMaXN0TWl4aW4sIHR5cGUgV2l0aExpc3RDaGlsZHJlbiB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uLy4uL2NvcmUvc3R5bGVzLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiQnJlYWRjcnVtYkVsZW1lbnQgfSBmcm9tICcuLi9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vYnJlYWRjcnVtYi1ncm91cC5zY3NzP2lubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vaWNvbi50cyc7XG5cbmNvbnN0IE1JTl9CUkVBRENSVU1CU19UT19DT0xMQVBTRSA9IDM7XG5cbi8qKlxuICogSXQgY2FuIGJlIHVzZWQgYXMgYSBjb250YWluZXIgZm9yIG9uZSBvciBtb3JlIGBzYmItYnJlYWRjcnVtYmAgY29tcG9uZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItYnJlYWRjcnVtYmAgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJCcmVhZGNydW1iR3JvdXBFbGVtZW50IGV4dGVuZHMgU2JiTmFtZWRTbG90TGlzdE1peGluPFxuICBTYmJCcmVhZGNydW1iRWxlbWVudCxcbiAgdHlwZW9mIFNiYkVsZW1lbnRcbj4oU2JiRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLWJyZWFkY3J1bWItZ3JvdXAnO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IHJvbGUgPSAnbmF2aWdhdGlvbic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lcyA9IFsnc2JiLWJyZWFkY3J1bWInXTtcblxuICAvKiogVGhlIHN0YXRlIG9mIHRoZSBicmVhZGNydW1iIGdyb3VwLiAqL1xuICBAc3RhdGUoKVxuICBwcml2YXRlIHNldCBfc3RhdGUoc3RhdGU6ICdjb2xsYXBzZWQnIHwgJ21hbnVhbGx5LWV4cGFuZGVkJyB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5fc3RhdGVJbnRlcm5hbCkge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgc3RhdGUtJHt0aGlzLl9zdGF0ZUludGVybmFsfWApO1xuICAgIH1cbiAgICB0aGlzLl9zdGF0ZUludGVybmFsID0gc3RhdGU7XG4gICAgaWYgKHRoaXMuX3N0YXRlSW50ZXJuYWwpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoYHN0YXRlLSR7dGhpcy5fc3RhdGVJbnRlcm5hbH1gKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXQgX3N0YXRlKCk6ICdjb2xsYXBzZWQnIHwgJ21hbnVhbGx5LWV4cGFuZGVkJyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZUludGVybmFsO1xuICB9XG4gIHByaXZhdGUgX3N0YXRlSW50ZXJuYWw6ICdjb2xsYXBzZWQnIHwgJ21hbnVhbGx5LWV4cGFuZGVkJyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5fZXZhbHVhdGVDb2xsYXBzZWRTdGF0ZSgpLFxuICB9KTtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9tYXJrRm9yRm9jdXMgPSBmYWxzZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5ZG93bicsIChlKSA9PiB0aGlzLl9oYW5kbGVLZXlEb3duKGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUtleURvd24oZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMubGlzdENoaWxkcmVuLmxlbmd0aCB8fFxuICAgICAgLy8gZG9uJ3QgdHJhcCBuZXN0ZWQgaGFuZGxpbmdcbiAgICAgICgoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgIT09IHRoaXMgJiYgKGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnBhcmVudEVsZW1lbnQgIT09IHRoaXMpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyb3dLZXlQcmVzc2VkKGV2dCkpIHtcbiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvY3VzTmV4dENvbGxhcHNlZChldnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9jdXNOZXh0KGV2dCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCdsb2FkZWQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczxXaXRoTGlzdENoaWxkcmVuPHRoaXM+Pik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbGlzdENoaWxkcmVuJykpIHtcbiAgICAgIHRoaXMuX3N5bmNCcmVhZGNydW1icygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczxXaXRoTGlzdENoaWxkcmVuPHRoaXM+Pik6IHZvaWQge1xuICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2xpc3RDaGlsZHJlbicpKSB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuX2V2YWx1YXRlQ29sbGFwc2VkU3RhdGUoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXJrRm9yRm9jdXMgJiYgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yLm1vc3RSZWNlbnRNb2RhbGl0eSA9PT0gJ2tleWJvYXJkJykge1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW5bMV0/LmZvY3VzKCk7XG5cbiAgICAgIC8vIFJlc2V0IG1hcmsgZm9yIGZvY3VzXG4gICAgICB0aGlzLl9tYXJrRm9yRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQXBwbHkgdGhlIGFyaWEtY3VycmVudCBhdHRyaWJ1dGUgdG8gdGhlIGxhc3Qgc2JiLWJyZWFkY3J1bWIgZWxlbWVudC4gKi9cbiAgcHJpdmF0ZSBfc3luY0JyZWFkY3J1bWJzKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAuc2xpY2UoMCwgLTEpXG4gICAgICAuZmlsdGVyKChjKSA9PiBjLmhhc0F0dHJpYnV0ZSgnYWNjZXNzaWJpbGl0eS1jdXJyZW50JykpXG4gICAgICAuZm9yRWFjaCgoYykgPT4gYy5yZW1vdmVBdHRyaWJ1dGUoJ2FjY2Vzc2liaWxpdHktY3VycmVudCcpKTtcbiAgICB0aGlzLmxpc3RDaGlsZHJlblt0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggLSAxXT8uc2V0QXR0cmlidXRlKCdhY2Nlc3NpYmlsaXR5LWN1cnJlbnQnLCAncGFnZScpO1xuXG4gICAgLy8gSWYgaXQgaXMgbm90IGV4cGFuZGFibGUsIHJlc2V0IHN0YXRlXG4gICAgaWYgKHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aCA8IE1JTl9CUkVBRENSVU1CU19UT19DT0xMQVBTRSkge1xuICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgY29ycmVjdCBlbGVtZW50IHdoZW4gdGhlIGVsbGlwc2lzIGJyZWFkY3J1bWIgaXMgZGlzcGxheWVkIGFuZCB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHdpdGgga2V5Ym9hcmQncyBhcnJvd3MuXG4gICAqL1xuICBwcml2YXRlIF9mb2N1c05leHRDb2xsYXBzZWQoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYXJyYXlDb2xsYXBzZWQ6IFNiYkJyZWFkY3J1bWJFbGVtZW50W10gPSBbXG4gICAgICB0aGlzLmxpc3RDaGlsZHJlblswXSxcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignI3NiYi1icmVhZGNydW1iLWVsbGlwc2lzJykgYXMgU2JiQnJlYWRjcnVtYkVsZW1lbnQsXG4gICAgICB0aGlzLmxpc3RDaGlsZHJlblt0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggLSAxXSxcbiAgICBdO1xuICAgIHRoaXMuX2ZvY3VzTmV4dChldnQsIGFycmF5Q29sbGFwc2VkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZvY3VzTmV4dChcbiAgICBldnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgYnJlYWRjcnVtYnM6IFNiYkJyZWFkY3J1bWJFbGVtZW50W10gPSB0aGlzLmxpc3RDaGlsZHJlbixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gYnJlYWRjcnVtYnMuZmluZEluZGV4KFxuICAgICAgKGUpID0+IGUgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZSA9PT0gdGhpcy5zaGFkb3dSb290IS5hY3RpdmVFbGVtZW50LFxuICAgICk7XG4gICAgY29uc3QgbmV4dEluZGV4OiBudW1iZXIgPSBnZXROZXh0RWxlbWVudEluZGV4KGV2dCwgY3VycmVudCwgYnJlYWRjcnVtYnMubGVuZ3RoKTtcbiAgICBicmVhZGNydW1ic1tuZXh0SW5kZXhdPy5mb2N1cygpO1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IGR1ZSB0byBAU3RhdGUgYW5ub3RhdGlvbiBvbiBfc3RhdGUsIHRoaXMgbWV0aG9kIHRyaWdnZXJzIGEgbmV3IHJlbmRlcjsgYXMgYSBjb25zZXF1ZW5jZSwgdGhlIGZvY3VzIGlzIG1vdmVkXG4gICAqIHRvIHRoZSBgYm9keWAsIHNvIGlmIHRoZSBlbGxpcHNpcyBlbGVtZW50IGhhcyBmb2N1cywgaXQncyBhc3luY2hyb25vdXNseSBmb3JjZWQgdG8gdGhlIGZpcnN0IGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIF9leHBhbmRCcmVhZGNydW1icygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9ICdtYW51YWxseS1leHBhbmRlZCc7XG4gICAgdGhpcy5fbWFya0ZvckZvY3VzID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBFdmFsdWF0ZSBpZiB0aGUgZXhwYW5kZWQgYnJlYWRjcnVtYiBlbGVtZW50IGZpdHMgaW4gcGFnZSB3aWR0aCwgb3RoZXJ3aXNlIGl0IG5lZWRzIGVsbGlwc2lzICovXG4gIHByaXZhdGUgX2V2YWx1YXRlQ29sbGFwc2VkU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX3N0YXRlICYmXG4gICAgICB0aGlzLnNjcm9sbFdpZHRoID4gdGhpcy5vZmZzZXRXaWR0aCAmJlxuICAgICAgdGhpcy5saXN0Q2hpbGRyZW4ubGVuZ3RoID49IE1JTl9CUkVBRENSVU1CU19UT19DT0xMQVBTRVxuICAgICkge1xuICAgICAgdGhpcy5fc3RhdGUgPSAnY29sbGFwc2VkJztcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLmhvc3REaXNjb25uZWN0ZWQoKTtcbiAgICAgIHRoaXMucmVtb3ZlQ29udHJvbGxlcih0aGlzLl9yZXNpemVPYnNlcnZlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQ29sbGFwc2VkKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxsaSBjbGFzcz1cInNiYi1icmVhZGNydW1iLWdyb3VwX19pdGVtXCI+XG4gICAgICAgIDxzbG90IG5hbWU9XCJsaS0wXCI+PC9zbG90PlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzcz1cInNiYi1icmVhZGNydW1iLWdyb3VwX19pdGVtXCIgaWQ9XCJzYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpc1wiPlxuICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1yaWdodC1zbWFsbFwiXG4gICAgICAgICAgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uXCJcbiAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpZD1cInNiYi1icmVhZGNydW1iLWVsbGlwc2lzXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPSR7aTE4bkJyZWFkY3J1bWJFbGxpcHNpc0J1dHRvbkxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fZXhwYW5kQnJlYWRjcnVtYnMoKX1cbiAgICAgICAgPlxuICAgICAgICAgIC4uLlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9faXRlbVwiPlxuICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1yaWdodC1zbWFsbFwiXG4gICAgICAgICAgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uXCJcbiAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgIDxzbG90IG5hbWU9JHtgbGktJHt0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggLSAxfWB9Pjwvc2xvdD5cbiAgICAgIDwvbGk+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckV4cGFuZGVkKCk6IFRlbXBsYXRlUmVzdWx0W10ge1xuICAgIHJldHVybiB0aGlzLmxpc3RTbG90RW50cmllcygpLm1hcChcbiAgICAgIChzbG90LCBpbmRleCwgYXJyYXkpID0+IGh0bWxgXG4gICAgICAgIDxsaSBjbGFzcz1cInNiYi1icmVhZGNydW1iLWdyb3VwX19pdGVtXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT0ke3Nsb3QubmFtZX0+PC9zbG90PlxuICAgICAgICAgICR7aW5kZXggIT09IGFycmF5Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gaHRtbGA8c2JiLWljb25cbiAgICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1yaWdodC1zbWFsbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uXCJcbiAgICAgICAgICAgICAgPjwvc2JiLWljb24+YFxuICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICA8L2xpPlxuICAgICAgYCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8b2wgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cFwiPlxuICAgICAgICAke3RoaXMuX3N0YXRlID09PSAnY29sbGFwc2VkJyA/IHRoaXMuX3JlbmRlckNvbGxhcHNlZCgpIDogdGhpcy5fcmVuZGVyRXhwYW5kZWQoKX1cbiAgICAgIDwvb2w+XG4gICAgICAke3RoaXMucmVuZGVySGlkZGVuU2xvdCgpfVxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1icmVhZGNydW1iLWdyb3VwJzogU2JiQnJlYWRjcnVtYkdyb3VwRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUMyQkEsSUFBTSw4QkFBOEI7Ozs7OztJQU92QixtQ0FBeUI7bUJBQVMsc0JBRzdDLFdBQVc7OztjQUhBLGtDQUFrQyxZQUdsQzs7OzZCQU9WLE9BQU8sQ0FBQTtBQUNSLGdCQUFBLE1BQUEsTUFBQSx3QkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFlBQUE7S0FBQSxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVksU0FBTTs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLE1BQUEsMkJBQUE7Ozs7Ozs7OztBQVBjLFFBQUEsY0FBc0I7OztBQUN0QixRQUFBLE9BQU87OztBQUNoQixRQUFBLFNBQXlCLENBQUMsaUJBQWlCLFVBQVUseUJBQU0sQ0FBQzs7O0VBS25GLElBQVksT0FBTyxPQUErQztBQUNoRSxPQUFJLEtBQUssZUFDUCxNQUFLLFVBQVUsT0FBTyxPQUFPLFNBQVMsS0FBSyxpQkFBaUI7QUFFOUQsUUFBSyxpQkFBaUI7QUFDdEIsT0FBSSxLQUFLLGVBQ1AsTUFBSyxVQUFVLE9BQU8sSUFBSSxTQUFTLEtBQUssaUJBQWlCOztFQUc3RCxJQUFZLFNBQU07QUFDaEIsVUFBTyxLQUFLOztFQVlkLGNBQUE7QUFDRSxVQUFPO0FBM0JtQixRQUFBLHVCQVBqQixrQkFBQSxNQUFBLDJCQUF5QixFQU9jLENBQUMsaUJBQWlCO0FBZ0I1RCxRQUFBLGlCQUEyRDtBQUUzRCxRQUFBLGtCQUFrQixJQUFJLGlCQUFpQixNQUFNO0lBQ25ELFFBQVE7SUFDUixhQUFhO0lBQ2IsZ0JBQWdCLEtBQUsseUJBQUE7SUFDdEIsQ0FBQztBQUNNLFFBQUEsWUFBWSxJQUFJLHNCQUFzQixLQUFLO0FBQzNDLFFBQUEsZ0JBQWdCO0FBSXRCLFFBQUssbUJBQW1CLFlBQVksTUFBTSxLQUFLLGVBQWUsRUFBRSxDQUFDOztFQUczRCxlQUFlLEtBQWtCO0FBQ3ZDLE9BQ0UsQ0FBQyxLQUFLLGFBQWEsVUFFakIsSUFBSSxXQUEyQixRQUFTLElBQUksT0FBdUIsa0JBQWtCLEtBRXZGO0FBR0YsT0FBSSxrQkFBa0IsSUFBSSxFQUFFO0FBQzFCLFFBQUksS0FBSyxXQUFXLFlBQ2xCLFFBQU8sS0FBSyxvQkFBb0IsSUFBSTtBQUV0QyxTQUFLLFdBQVcsSUFBSTs7O0VBSUwsYUFBYSxtQkFBdUM7QUFDckUsU0FBTSxhQUFhLGtCQUFrQjtBQUVyQyxRQUFLLGdCQUFnQixRQUFRLEtBQUs7QUFDbEMsUUFBSyxVQUFVLE9BQU8sSUFBSSxTQUFTOztFQUdsQixXQUFXLG1CQUF5RDtBQUNyRixTQUFNLFdBQVcsa0JBQWtCO0FBRW5DLE9BQUksa0JBQWtCLElBQUksZUFBZSxDQUN2QyxNQUFLLGtCQUFrQjs7RUFJUixRQUFRLG1CQUF5RDtBQUNsRixTQUFNLFFBQVEsa0JBQWtCO0FBQ2hDLE9BQUksa0JBQWtCLElBQUksZUFBZSxDQUN2QyxTQUFRLFNBQVMsQ0FBQyxXQUFXLEtBQUsseUJBQXlCLENBQUM7QUFFOUQsT0FBSSxLQUFLLGlCQUFpQix5QkFBeUIsdUJBQXVCLFlBQVk7QUFDcEYsU0FBSyxhQUFhLElBQUksT0FBTztBQUc3QixTQUFLLGdCQUFnQjs7OztFQUtqQixtQkFBZ0I7QUFDdEIsUUFBSyxhQUNGLE1BQU0sR0FBRyxHQUFHLENBQ1osUUFBUSxNQUFNLEVBQUUsYUFBYSx3QkFBd0IsQ0FBQyxDQUN0RCxTQUFTLE1BQU0sRUFBRSxnQkFBZ0Isd0JBQXdCLENBQUM7QUFDN0QsUUFBSyxhQUFhLEtBQUssYUFBYSxTQUFTLElBQUksYUFBYSx5QkFBeUIsT0FBTztBQUc5RixPQUFJLEtBQUssYUFBYSxTQUFTLDRCQUM3QixNQUFLLFNBQVM7Ozs7O0VBT1Ysb0JBQW9CLEtBQWtCO0dBQzVDLE1BQU0saUJBQXlDO0lBQzdDLEtBQUssYUFBYTtJQUNsQixLQUFLLFdBQVksY0FBYywyQkFBbUQ7SUFDbEYsS0FBSyxhQUFhLEtBQUssYUFBYSxTQUFTO0lBQzlDO0FBQ0QsUUFBSyxXQUFXLEtBQUssZUFBZTs7RUFHOUIsV0FDTixLQUNBLGNBQXNDLEtBQUssY0FBWTtBQU12RCxlQUQwQixvQkFBb0IsS0FIdEIsWUFBWSxXQUNqQyxNQUFNLE1BQU0sU0FBUyxpQkFBaUIsTUFBTSxLQUFLLFdBQVksY0FFYixFQUFTLFlBQVksT0FDNUQsR0FBWSxPQUFPO0FBQy9CLE9BQUksZ0JBQWdCOzs7Ozs7RUFPZCxxQkFBa0I7QUFDeEIsUUFBSyxTQUFTO0FBQ2QsUUFBSyxnQkFBZ0I7OztFQUlmLDBCQUF1QjtBQUM3QixPQUNFLENBQUMsS0FBSyxVQUNOLEtBQUssY0FBYyxLQUFLLGVBQ3hCLEtBQUssYUFBYSxVQUFVLDZCQUM1QjtBQUNBLFNBQUssU0FBUztBQUNkLFNBQUssZ0JBQWdCLGtCQUFrQjtBQUN2QyxTQUFLLGlCQUFpQixLQUFLLGdCQUFnQjs7O0VBSXZDLG1CQUFnQjtBQUN0QixVQUFPLElBQUk7Ozs7Ozs7Ozs7Ozt1QkFZUSxrQ0FBa0MsS0FBSyxVQUFVLFNBQUE7O3lCQUUvQyxLQUFLLG9CQUFvQixDQUFBOzs7Ozs7Ozs7O3FCQVU3QixNQUFNLEtBQUssYUFBYSxTQUFTLElBQUc7Ozs7RUFLL0Msa0JBQWU7QUFDckIsVUFBTyxLQUFLLGlCQUFpQixDQUFDLEtBQzNCLE1BQU0sT0FBTyxVQUFVLElBQUk7O3VCQUVYLEtBQUssS0FBSTtZQUNwQixVQUFVLE1BQU0sU0FBUyxJQUN2QixJQUFJOzs7OEJBSUosUUFBQTs7UUFHVDs7RUFHZ0IsU0FBTTtBQUN2QixVQUFPLElBQUk7O1VBRUwsS0FBSyxXQUFXLGNBQWMsS0FBSyxrQkFBa0IsR0FBRyxLQUFLLGlCQUFpQixDQUFBOztRQUVoRixLQUFLLGtCQUFrQixDQUFBIn0=