@kirbydesign/designsystem 8.5.2 → 8.6.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/esm2020/item/item.component.mjs +2 -2
  2. package/esm2020/page/page.component.mjs +14 -4
  3. package/fesm2015/kirbydesign-designsystem-accordion.mjs +1 -0
  4. package/fesm2015/kirbydesign-designsystem-action-group.mjs +1 -0
  5. package/fesm2015/kirbydesign-designsystem-alert-experimental.mjs +1 -0
  6. package/fesm2015/kirbydesign-designsystem-avatar.mjs +1 -0
  7. package/fesm2015/kirbydesign-designsystem-button.mjs +1 -0
  8. package/fesm2015/kirbydesign-designsystem-calendar.mjs +1 -0
  9. package/fesm2015/kirbydesign-designsystem-card.mjs +1 -0
  10. package/fesm2015/kirbydesign-designsystem-chart.mjs +1 -0
  11. package/fesm2015/kirbydesign-designsystem-checkbox.mjs +1 -0
  12. package/fesm2015/kirbydesign-designsystem-data-table.mjs +1 -0
  13. package/fesm2015/kirbydesign-designsystem-divider.mjs +1 -0
  14. package/fesm2015/kirbydesign-designsystem-dropdown.mjs +1 -0
  15. package/fesm2015/kirbydesign-designsystem-empty-state.mjs +1 -0
  16. package/fesm2015/kirbydesign-designsystem-fab-sheet.mjs +1 -0
  17. package/fesm2015/kirbydesign-designsystem-flag.mjs +1 -0
  18. package/fesm2015/kirbydesign-designsystem-form-field.mjs +1 -0
  19. package/fesm2015/kirbydesign-designsystem-grid.mjs +1 -0
  20. package/fesm2015/kirbydesign-designsystem-header.mjs +1 -0
  21. package/fesm2015/kirbydesign-designsystem-helpers-scss.mjs +1 -0
  22. package/fesm2015/kirbydesign-designsystem-helpers.mjs +1 -0
  23. package/fesm2015/kirbydesign-designsystem-icon.mjs +1 -0
  24. package/fesm2015/kirbydesign-designsystem-item-group.mjs +1 -0
  25. package/fesm2015/kirbydesign-designsystem-item-sliding.mjs +1 -0
  26. package/fesm2015/kirbydesign-designsystem-item.mjs +2 -2
  27. package/fesm2015/kirbydesign-designsystem-item.mjs.map +1 -1
  28. package/fesm2015/kirbydesign-designsystem-kirby-app.mjs +1 -0
  29. package/fesm2015/kirbydesign-designsystem-kirby-ionic-module.mjs +1 -0
  30. package/fesm2015/kirbydesign-designsystem-list.mjs +1 -0
  31. package/fesm2015/kirbydesign-designsystem-loading-overlay.mjs +1 -0
  32. package/fesm2015/kirbydesign-designsystem-menu.mjs +1 -0
  33. package/fesm2015/kirbydesign-designsystem-modal-v2.mjs +1 -0
  34. package/fesm2015/kirbydesign-designsystem-page.mjs +13 -3
  35. package/fesm2015/kirbydesign-designsystem-page.mjs.map +1 -1
  36. package/fesm2015/kirbydesign-designsystem-popover.mjs +1 -0
  37. package/fesm2015/kirbydesign-designsystem-progress-circle.mjs +1 -0
  38. package/fesm2015/kirbydesign-designsystem-radio.mjs +1 -0
  39. package/fesm2015/kirbydesign-designsystem-range.mjs +1 -0
  40. package/fesm2015/kirbydesign-designsystem-reorder-list.mjs +1 -0
  41. package/fesm2015/kirbydesign-designsystem-router-outlet.mjs +1 -0
  42. package/fesm2015/kirbydesign-designsystem-section-header.mjs +1 -0
  43. package/fesm2015/kirbydesign-designsystem-shared-floating.mjs +1 -0
  44. package/fesm2015/kirbydesign-designsystem-shared-portal.mjs +1 -0
  45. package/fesm2015/kirbydesign-designsystem-shared.mjs +1 -0
  46. package/fesm2015/kirbydesign-designsystem-slide-button.mjs +1 -0
  47. package/fesm2015/kirbydesign-designsystem-slide.mjs +1 -0
  48. package/fesm2015/kirbydesign-designsystem-spinner.mjs +1 -0
  49. package/fesm2015/kirbydesign-designsystem-tab-navigation.mjs +1 -0
  50. package/fesm2015/kirbydesign-designsystem-tabs.mjs +1 -0
  51. package/fesm2015/kirbydesign-designsystem-testing-base.mjs +1 -0
  52. package/fesm2015/kirbydesign-designsystem-testing-jasmine.mjs +1 -0
  53. package/fesm2015/kirbydesign-designsystem-testing-jest.mjs +1 -0
  54. package/fesm2015/kirbydesign-designsystem-testing.mjs +1 -0
  55. package/fesm2015/kirbydesign-designsystem-toast.mjs +1 -0
  56. package/fesm2015/kirbydesign-designsystem-toggle-button.mjs +1 -0
  57. package/fesm2015/kirbydesign-designsystem-toggle.mjs +1 -0
  58. package/fesm2015/kirbydesign-designsystem-types.mjs +1 -0
  59. package/fesm2015/kirbydesign-designsystem.mjs +1 -0
  60. package/fesm2020/kirbydesign-designsystem-accordion.mjs +1 -0
  61. package/fesm2020/kirbydesign-designsystem-action-group.mjs +1 -0
  62. package/fesm2020/kirbydesign-designsystem-alert-experimental.mjs +1 -0
  63. package/fesm2020/kirbydesign-designsystem-avatar.mjs +1 -0
  64. package/fesm2020/kirbydesign-designsystem-button.mjs +1 -0
  65. package/fesm2020/kirbydesign-designsystem-calendar.mjs +1 -0
  66. package/fesm2020/kirbydesign-designsystem-card.mjs +1 -0
  67. package/fesm2020/kirbydesign-designsystem-chart.mjs +1 -0
  68. package/fesm2020/kirbydesign-designsystem-checkbox.mjs +1 -0
  69. package/fesm2020/kirbydesign-designsystem-data-table.mjs +1 -0
  70. package/fesm2020/kirbydesign-designsystem-divider.mjs +1 -0
  71. package/fesm2020/kirbydesign-designsystem-dropdown.mjs +1 -0
  72. package/fesm2020/kirbydesign-designsystem-empty-state.mjs +1 -0
  73. package/fesm2020/kirbydesign-designsystem-fab-sheet.mjs +1 -0
  74. package/fesm2020/kirbydesign-designsystem-flag.mjs +1 -0
  75. package/fesm2020/kirbydesign-designsystem-form-field.mjs +1 -0
  76. package/fesm2020/kirbydesign-designsystem-grid.mjs +1 -0
  77. package/fesm2020/kirbydesign-designsystem-header.mjs +1 -0
  78. package/fesm2020/kirbydesign-designsystem-helpers-scss.mjs +1 -0
  79. package/fesm2020/kirbydesign-designsystem-helpers.mjs +1 -0
  80. package/fesm2020/kirbydesign-designsystem-icon.mjs +1 -0
  81. package/fesm2020/kirbydesign-designsystem-item-group.mjs +1 -0
  82. package/fesm2020/kirbydesign-designsystem-item-sliding.mjs +1 -0
  83. package/fesm2020/kirbydesign-designsystem-item.mjs +2 -2
  84. package/fesm2020/kirbydesign-designsystem-item.mjs.map +1 -1
  85. package/fesm2020/kirbydesign-designsystem-kirby-app.mjs +1 -0
  86. package/fesm2020/kirbydesign-designsystem-kirby-ionic-module.mjs +1 -0
  87. package/fesm2020/kirbydesign-designsystem-list.mjs +1 -0
  88. package/fesm2020/kirbydesign-designsystem-loading-overlay.mjs +1 -0
  89. package/fesm2020/kirbydesign-designsystem-menu.mjs +1 -0
  90. package/fesm2020/kirbydesign-designsystem-modal-v2.mjs +1 -0
  91. package/fesm2020/kirbydesign-designsystem-page.mjs +13 -3
  92. package/fesm2020/kirbydesign-designsystem-page.mjs.map +1 -1
  93. package/fesm2020/kirbydesign-designsystem-popover.mjs +1 -0
  94. package/fesm2020/kirbydesign-designsystem-progress-circle.mjs +1 -0
  95. package/fesm2020/kirbydesign-designsystem-radio.mjs +1 -0
  96. package/fesm2020/kirbydesign-designsystem-range.mjs +1 -0
  97. package/fesm2020/kirbydesign-designsystem-reorder-list.mjs +1 -0
  98. package/fesm2020/kirbydesign-designsystem-router-outlet.mjs +1 -0
  99. package/fesm2020/kirbydesign-designsystem-section-header.mjs +1 -0
  100. package/fesm2020/kirbydesign-designsystem-shared-floating.mjs +1 -0
  101. package/fesm2020/kirbydesign-designsystem-shared-portal.mjs +1 -0
  102. package/fesm2020/kirbydesign-designsystem-shared.mjs +1 -0
  103. package/fesm2020/kirbydesign-designsystem-slide-button.mjs +1 -0
  104. package/fesm2020/kirbydesign-designsystem-slide.mjs +1 -0
  105. package/fesm2020/kirbydesign-designsystem-spinner.mjs +1 -0
  106. package/fesm2020/kirbydesign-designsystem-tab-navigation.mjs +1 -0
  107. package/fesm2020/kirbydesign-designsystem-tabs.mjs +1 -0
  108. package/fesm2020/kirbydesign-designsystem-testing-base.mjs +1 -0
  109. package/fesm2020/kirbydesign-designsystem-testing-jasmine.mjs +1 -0
  110. package/fesm2020/kirbydesign-designsystem-testing-jest.mjs +1 -0
  111. package/fesm2020/kirbydesign-designsystem-testing.mjs +1 -0
  112. package/fesm2020/kirbydesign-designsystem-toast.mjs +1 -0
  113. package/fesm2020/kirbydesign-designsystem-toggle-button.mjs +1 -0
  114. package/fesm2020/kirbydesign-designsystem-toggle.mjs +1 -0
  115. package/fesm2020/kirbydesign-designsystem-types.mjs +1 -0
  116. package/fesm2020/kirbydesign-designsystem.mjs +1 -0
  117. package/icon/src/README.md +16 -0
  118. package/package.json +1 -1
  119. package/page/page.component.d.ts +2 -2
  120. package/README.md +0 -7
@@ -22,10 +22,10 @@ export class ItemComponent {
22
22
  }
23
23
  }
24
24
  /** @nocollapse */ ItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
25
- /** @nocollapse */ ItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ItemComponent, selector: "kirby-item", inputs: { disabled: "disabled", selected: "selected", disclosure: "disclosure", selectable: "selectable", reorderable: "reorderable", size: "size" }, host: { properties: { "class.disabled": "this.disabled", "class.selected": "this.selected", "class.disclosure": "this.disclosure", "class": "this.size" } }, ngImport: i0, template: "<ion-item\n lines=\"none\"\n [attr.disabled]=\"disabled\"\n [attr.button]=\"selectable ? true : null\"\n [attr.tabindex]=\"selectable ? null : 0\"\n detail=\"false\"\n (mousedown)=\"onMouseDown($event)\"\n>\n <div class=\"outside\" slot=\"start\">\n <ng-content select=\"[slot='outside']\"></ng-content>\n </div>\n <ng-content></ng-content>\n <ion-reorder slot=\"end\" *ngIf=\"reorderable\">\n <kirby-icon name=\"reorder\"></kirby-icon>\n </ion-reorder>\n\n <kirby-icon *ngIf=\"disclosure\" class=\"disclosure\" slot=\"end\" name=\"{{ disclosure }}\"></kirby-icon>\n</ion-item>\n", styles: [":host{display:block;position:relative}:host ion-item{--padding-top: var(--item-padding-top, 0px);--padding-bottom: var(--item-padding-bottom, 0px);--min-height: 56px;--padding-start: 16px;--inner-padding-top: 8px;--inner-padding-bottom: 8px;--inner-padding-end: 16px;--background: var(--kirby-item-background, var(--kirby-white));--background-activated-opacity: .99;--background-focused: var( --kirby-item-background-focused, var(--kirby-background-color) );--background-focused-opacity: 1;font-size:16px;--transition: background-color 80ms linear 0ms}@media (hover: hover) and (pointer: fine){:host ion-item:focus-visible{box-shadow:none;--state-layer-opacity: .04;--state-layer-background-color: var(--kirby-black)}}@media (hover: hover){:host ion-item:hover{--state-layer-opacity: .04;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}:host ion-item:active,:host ion-item.ion-activated{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}@media screen and (orientation: landscape){:host ion-item{--ion-safe-area-left: 0px;--ion-safe-area-right: 0px}}:host ion-item ::ng-deep>[slot=end]{margin-inline-start:0;margin-inline-end:0;text-align:right}:host ion-item ::ng-deep>time[slot=end]{margin-inline-start:12px}:host ion-item ::ng-deep>data[slot=end],:host ion-item ::ng-deep>[detail][slot=end],:host ion-item ::ng-deep>ion-reorder[slot=end]{margin-inline-start:16px}:host ion-item ::ng-deep>h1,:host ion-item ::ng-deep>h2,:host ion-item ::ng-deep>h3,:host ion-item ::ng-deep>h4,:host ion-item ::ng-deep>h5,:host ion-item ::ng-deep>h6,:host ion-item ::ng-deep>p,:host ion-item ::ng-deep>data{font-size:16px;line-height:24px;color:var(--kirby-text-color-black);display:block;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:400}:host ion-item ::ng-deep>h1.kirby-text-bold,:host ion-item ::ng-deep>h2.kirby-text-bold,:host ion-item ::ng-deep>h3.kirby-text-bold,:host ion-item ::ng-deep>h4.kirby-text-bold,:host ion-item ::ng-deep>h5.kirby-text-bold,:host ion-item ::ng-deep>h6.kirby-text-bold,:host ion-item ::ng-deep>p.kirby-text-bold,:host ion-item ::ng-deep>data.kirby-text-bold{font-weight:700}:host ion-item ::ng-deep>p{font-size:14px}:host ion-item ::ng-deep>[subtitle],:host ion-item ::ng-deep>[detail]{font-size:12px;line-height:16px}:host ion-item ::ng-deep>[subtitle]:not(:last-child){margin-bottom:4px}:host ion-item ::ng-deep>[detail]{color:var(--kirby-text-color-semi-dark)}:host ion-item ::ng-deep>:not([slot]){width:100%}:host ion-item ::ng-deep>input[slot=end],:host ion-item ::ng-deep>kirby-form-field[slot=end] input{margin-inline-start:16px;width:auto;text-align:right}:host.sm ion-item,:host-context(kirby-card.menu-popover) :host:not([size]) ion-item{--min-height: 44px}:host.xs ion-item{--min-height: 32px;--inner-padding-top: 4px;--inner-padding-bottom: 4px}:host .outside{left:4px;margin:0;position:absolute;width:16px;z-index:1}.disclosure{padding-left:4px;color:var(--kirby-semi-dark)}:host-context(kirby-dropdown) ion-item,:host-context(kirby-popover) ion-item{--min-height: 44px}:host-context(kirby-dropdown .focused) ion-item{--background: whitesmoke}:host(.disabled),:host([disabled]){pointer-events:none}:host(.selected) ion-item ::ng-deep>h1,:host(.selected) ion-item ::ng-deep>h2,:host(.selected) ion-item ::ng-deep>h3,:host(.selected) ion-item ::ng-deep>h4,:host(.selected) ion-item ::ng-deep>h5,:host(.selected) ion-item ::ng-deep>h6,:host(.selected) ion-item ::ng-deep>p,:host(.selected) ion-item ::ng-deep>data,:host-context(kirby-list .selected) ion-item ::ng-deep>h1,:host-context(kirby-list .selected) ion-item ::ng-deep>h2,:host-context(kirby-list .selected) ion-item ::ng-deep>h3,:host-context(kirby-list .selected) ion-item ::ng-deep>h4,:host-context(kirby-list .selected) ion-item ::ng-deep>h5,:host-context(kirby-list .selected) ion-item ::ng-deep>h6,:host-context(kirby-list .selected) ion-item ::ng-deep>p,:host-context(kirby-list .selected) ion-item ::ng-deep>data{font-weight:700}:host(.disclosure) ion-item{--inner-padding-end: 8px}:host-context(.shape-rounded .is-single) ion-item{--border-radius: 16px}:host-context(.has-header .is-single) ion-item::part(native){border-top-left-radius:0;border-top-right-radius:0}:host-context(.has-footer .is-single) ion-item::part(native){border-bottom-left-radius:0;border-bottom-right-radius:0}:host-context(.shape-rounded.has-sections .list-items kirby-list-item:first-of-type) ion-item::part(native){border-top-left-radius:16px;border-top-right-radius:16px}\n"], dependencies: [{ kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonReorder, selector: "ion-reorder" }, { kind: "component", type: i2.IconComponent, selector: "kirby-icon", inputs: ["size", "name", "customName"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25
+ /** @nocollapse */ ItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ItemComponent, selector: "kirby-item", inputs: { disabled: "disabled", selected: "selected", disclosure: "disclosure", selectable: "selectable", reorderable: "reorderable", size: "size" }, host: { properties: { "class.disabled": "this.disabled", "class.selected": "this.selected", "class.disclosure": "this.disclosure", "class": "this.size" } }, ngImport: i0, template: "<ion-item\n lines=\"none\"\n [attr.disabled]=\"disabled\"\n [attr.button]=\"selectable ? true : null\"\n [attr.tabindex]=\"selectable ? null : 0\"\n detail=\"false\"\n (mousedown)=\"onMouseDown($event)\"\n>\n <div class=\"outside\" slot=\"start\">\n <ng-content select=\"[slot='outside']\"></ng-content>\n </div>\n <ng-content></ng-content>\n <ion-reorder slot=\"end\" *ngIf=\"reorderable\">\n <kirby-icon name=\"reorder\"></kirby-icon>\n </ion-reorder>\n\n <kirby-icon *ngIf=\"disclosure\" class=\"disclosure\" slot=\"end\" name=\"{{ disclosure }}\"></kirby-icon>\n</ion-item>\n", styles: [":host{display:block;position:relative}:host ion-item{--padding-top: var(--item-padding-top, 0px);--padding-bottom: var(--item-padding-bottom, 0px);--min-height: 56px;--padding-start: 16px;--inner-padding-top: 8px;--inner-padding-bottom: 8px;--inner-padding-end: 16px;--background: var(--kirby-item-background, var(--kirby-white));--background-activated-opacity: .99;--background-focused: var( --kirby-item-background-focused, var(--kirby-background-color) );--background-focused-opacity: 1;font-size:16px;--transition: background-color 80ms linear 0ms}@media (hover: hover) and (pointer: fine){:host ion-item:focus-visible{box-shadow:none;--state-layer-opacity: .04;--state-layer-background-color: var(--kirby-black)}}@media (hover: hover){:host ion-item:hover{--state-layer-opacity: .04;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}:host ion-item:active,:host ion-item.ion-activated{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}@media screen and (orientation: landscape){:host ion-item{--ion-safe-area-left: 0px;--ion-safe-area-right: 0px}}:host ion-item ::ng-deep>[slot=end]{margin-inline-start:0;margin-inline-end:0;text-align:right}:host ion-item ::ng-deep>time[slot=end]{margin-inline-start:12px}:host ion-item ::ng-deep>data[slot=end],:host ion-item ::ng-deep>[detail][slot=end],:host ion-item ::ng-deep>ion-reorder[slot=end]{margin-inline-start:16px}:host ion-item ::ng-deep>h1,:host ion-item ::ng-deep>h2,:host ion-item ::ng-deep>h3,:host ion-item ::ng-deep>h4,:host ion-item ::ng-deep>h5,:host ion-item ::ng-deep>h6,:host ion-item ::ng-deep>p,:host ion-item ::ng-deep>data{font-size:16px;line-height:24px;color:var(--kirby-text-color-black);display:block;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:400}:host ion-item ::ng-deep>h1.kirby-text-bold,:host ion-item ::ng-deep>h2.kirby-text-bold,:host ion-item ::ng-deep>h3.kirby-text-bold,:host ion-item ::ng-deep>h4.kirby-text-bold,:host ion-item ::ng-deep>h5.kirby-text-bold,:host ion-item ::ng-deep>h6.kirby-text-bold,:host ion-item ::ng-deep>p.kirby-text-bold,:host ion-item ::ng-deep>data.kirby-text-bold{font-weight:700}:host ion-item ::ng-deep>p{font-size:14px}:host ion-item ::ng-deep>[subtitle],:host ion-item ::ng-deep>[detail]{font-size:12px;line-height:16px}:host ion-item ::ng-deep>[subtitle]:not(:last-child){margin-bottom:4px}:host ion-item ::ng-deep>[detail]{color:var(--kirby-text-color-semi-dark)}:host ion-item ::ng-deep>:not([slot]){width:100%}:host ion-item ::ng-deep>input[slot=end],:host ion-item ::ng-deep>kirby-form-field[slot=end] input{margin-inline-start:16px;width:auto;text-align:right}:host.sm ion-item,:host-context(kirby-card.menu-popover) :host:not([size]) ion-item{--min-height: 44px}:host.xs ion-item{--min-height: 32px;--inner-padding-top: 4px;--inner-padding-bottom: 4px}:host .outside{left:4px;margin:0;position:absolute;width:16px;z-index:1}.disclosure{padding-left:4px;color:var(--kirby-semi-dark)}:host-context(kirby-dropdown) ion-item,:host-context(kirby-popover) ion-item{--min-height: 44px}:host-context(kirby-dropdown .focused) ion-item,:host-context(kirby-popover .focused) ion-item{--background: whitesmoke}:host(.disabled),:host([disabled]){pointer-events:none}:host(.selected) ion-item ::ng-deep>h1,:host(.selected) ion-item ::ng-deep>h2,:host(.selected) ion-item ::ng-deep>h3,:host(.selected) ion-item ::ng-deep>h4,:host(.selected) ion-item ::ng-deep>h5,:host(.selected) ion-item ::ng-deep>h6,:host(.selected) ion-item ::ng-deep>p,:host(.selected) ion-item ::ng-deep>data,:host-context(kirby-list .selected) ion-item ::ng-deep>h1,:host-context(kirby-list .selected) ion-item ::ng-deep>h2,:host-context(kirby-list .selected) ion-item ::ng-deep>h3,:host-context(kirby-list .selected) ion-item ::ng-deep>h4,:host-context(kirby-list .selected) ion-item ::ng-deep>h5,:host-context(kirby-list .selected) ion-item ::ng-deep>h6,:host-context(kirby-list .selected) ion-item ::ng-deep>p,:host-context(kirby-list .selected) ion-item ::ng-deep>data{font-weight:700}:host(.disclosure) ion-item{--inner-padding-end: 8px}:host-context(.shape-rounded .is-single) ion-item{--border-radius: 16px}:host-context(.has-header .is-single) ion-item::part(native){border-top-left-radius:0;border-top-right-radius:0}:host-context(.has-footer .is-single) ion-item::part(native){border-bottom-left-radius:0;border-bottom-right-radius:0}:host-context(.shape-rounded.has-sections .list-items kirby-list-item:first-of-type) ion-item::part(native){border-top-left-radius:16px;border-top-right-radius:16px}\n"], dependencies: [{ kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonReorder, selector: "ion-reorder" }, { kind: "component", type: i2.IconComponent, selector: "kirby-icon", inputs: ["size", "name", "customName"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ItemComponent, decorators: [{
27
27
  type: Component,
28
- args: [{ selector: 'kirby-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-item\n lines=\"none\"\n [attr.disabled]=\"disabled\"\n [attr.button]=\"selectable ? true : null\"\n [attr.tabindex]=\"selectable ? null : 0\"\n detail=\"false\"\n (mousedown)=\"onMouseDown($event)\"\n>\n <div class=\"outside\" slot=\"start\">\n <ng-content select=\"[slot='outside']\"></ng-content>\n </div>\n <ng-content></ng-content>\n <ion-reorder slot=\"end\" *ngIf=\"reorderable\">\n <kirby-icon name=\"reorder\"></kirby-icon>\n </ion-reorder>\n\n <kirby-icon *ngIf=\"disclosure\" class=\"disclosure\" slot=\"end\" name=\"{{ disclosure }}\"></kirby-icon>\n</ion-item>\n", styles: [":host{display:block;position:relative}:host ion-item{--padding-top: var(--item-padding-top, 0px);--padding-bottom: var(--item-padding-bottom, 0px);--min-height: 56px;--padding-start: 16px;--inner-padding-top: 8px;--inner-padding-bottom: 8px;--inner-padding-end: 16px;--background: var(--kirby-item-background, var(--kirby-white));--background-activated-opacity: .99;--background-focused: var( --kirby-item-background-focused, var(--kirby-background-color) );--background-focused-opacity: 1;font-size:16px;--transition: background-color 80ms linear 0ms}@media (hover: hover) and (pointer: fine){:host ion-item:focus-visible{box-shadow:none;--state-layer-opacity: .04;--state-layer-background-color: var(--kirby-black)}}@media (hover: hover){:host ion-item:hover{--state-layer-opacity: .04;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}:host ion-item:active,:host ion-item.ion-activated{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}@media screen and (orientation: landscape){:host ion-item{--ion-safe-area-left: 0px;--ion-safe-area-right: 0px}}:host ion-item ::ng-deep>[slot=end]{margin-inline-start:0;margin-inline-end:0;text-align:right}:host ion-item ::ng-deep>time[slot=end]{margin-inline-start:12px}:host ion-item ::ng-deep>data[slot=end],:host ion-item ::ng-deep>[detail][slot=end],:host ion-item ::ng-deep>ion-reorder[slot=end]{margin-inline-start:16px}:host ion-item ::ng-deep>h1,:host ion-item ::ng-deep>h2,:host ion-item ::ng-deep>h3,:host ion-item ::ng-deep>h4,:host ion-item ::ng-deep>h5,:host ion-item ::ng-deep>h6,:host ion-item ::ng-deep>p,:host ion-item ::ng-deep>data{font-size:16px;line-height:24px;color:var(--kirby-text-color-black);display:block;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:400}:host ion-item ::ng-deep>h1.kirby-text-bold,:host ion-item ::ng-deep>h2.kirby-text-bold,:host ion-item ::ng-deep>h3.kirby-text-bold,:host ion-item ::ng-deep>h4.kirby-text-bold,:host ion-item ::ng-deep>h5.kirby-text-bold,:host ion-item ::ng-deep>h6.kirby-text-bold,:host ion-item ::ng-deep>p.kirby-text-bold,:host ion-item ::ng-deep>data.kirby-text-bold{font-weight:700}:host ion-item ::ng-deep>p{font-size:14px}:host ion-item ::ng-deep>[subtitle],:host ion-item ::ng-deep>[detail]{font-size:12px;line-height:16px}:host ion-item ::ng-deep>[subtitle]:not(:last-child){margin-bottom:4px}:host ion-item ::ng-deep>[detail]{color:var(--kirby-text-color-semi-dark)}:host ion-item ::ng-deep>:not([slot]){width:100%}:host ion-item ::ng-deep>input[slot=end],:host ion-item ::ng-deep>kirby-form-field[slot=end] input{margin-inline-start:16px;width:auto;text-align:right}:host.sm ion-item,:host-context(kirby-card.menu-popover) :host:not([size]) ion-item{--min-height: 44px}:host.xs ion-item{--min-height: 32px;--inner-padding-top: 4px;--inner-padding-bottom: 4px}:host .outside{left:4px;margin:0;position:absolute;width:16px;z-index:1}.disclosure{padding-left:4px;color:var(--kirby-semi-dark)}:host-context(kirby-dropdown) ion-item,:host-context(kirby-popover) ion-item{--min-height: 44px}:host-context(kirby-dropdown .focused) ion-item{--background: whitesmoke}:host(.disabled),:host([disabled]){pointer-events:none}:host(.selected) ion-item ::ng-deep>h1,:host(.selected) ion-item ::ng-deep>h2,:host(.selected) ion-item ::ng-deep>h3,:host(.selected) ion-item ::ng-deep>h4,:host(.selected) ion-item ::ng-deep>h5,:host(.selected) ion-item ::ng-deep>h6,:host(.selected) ion-item ::ng-deep>p,:host(.selected) ion-item ::ng-deep>data,:host-context(kirby-list .selected) ion-item ::ng-deep>h1,:host-context(kirby-list .selected) ion-item ::ng-deep>h2,:host-context(kirby-list .selected) ion-item ::ng-deep>h3,:host-context(kirby-list .selected) ion-item ::ng-deep>h4,:host-context(kirby-list .selected) ion-item ::ng-deep>h5,:host-context(kirby-list .selected) ion-item ::ng-deep>h6,:host-context(kirby-list .selected) ion-item ::ng-deep>p,:host-context(kirby-list .selected) ion-item ::ng-deep>data{font-weight:700}:host(.disclosure) ion-item{--inner-padding-end: 8px}:host-context(.shape-rounded .is-single) ion-item{--border-radius: 16px}:host-context(.has-header .is-single) ion-item::part(native){border-top-left-radius:0;border-top-right-radius:0}:host-context(.has-footer .is-single) ion-item::part(native){border-bottom-left-radius:0;border-bottom-right-radius:0}:host-context(.shape-rounded.has-sections .list-items kirby-list-item:first-of-type) ion-item::part(native){border-top-left-radius:16px;border-top-right-radius:16px}\n"] }]
28
+ args: [{ selector: 'kirby-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-item\n lines=\"none\"\n [attr.disabled]=\"disabled\"\n [attr.button]=\"selectable ? true : null\"\n [attr.tabindex]=\"selectable ? null : 0\"\n detail=\"false\"\n (mousedown)=\"onMouseDown($event)\"\n>\n <div class=\"outside\" slot=\"start\">\n <ng-content select=\"[slot='outside']\"></ng-content>\n </div>\n <ng-content></ng-content>\n <ion-reorder slot=\"end\" *ngIf=\"reorderable\">\n <kirby-icon name=\"reorder\"></kirby-icon>\n </ion-reorder>\n\n <kirby-icon *ngIf=\"disclosure\" class=\"disclosure\" slot=\"end\" name=\"{{ disclosure }}\"></kirby-icon>\n</ion-item>\n", styles: [":host{display:block;position:relative}:host ion-item{--padding-top: var(--item-padding-top, 0px);--padding-bottom: var(--item-padding-bottom, 0px);--min-height: 56px;--padding-start: 16px;--inner-padding-top: 8px;--inner-padding-bottom: 8px;--inner-padding-end: 16px;--background: var(--kirby-item-background, var(--kirby-white));--background-activated-opacity: .99;--background-focused: var( --kirby-item-background-focused, var(--kirby-background-color) );--background-focused-opacity: 1;font-size:16px;--transition: background-color 80ms linear 0ms}@media (hover: hover) and (pointer: fine){:host ion-item:focus-visible{box-shadow:none;--state-layer-opacity: .04;--state-layer-background-color: var(--kirby-black)}}@media (hover: hover){:host ion-item:hover{--state-layer-opacity: .04;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}:host ion-item:active,:host ion-item.ion-activated{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}@media screen and (orientation: landscape){:host ion-item{--ion-safe-area-left: 0px;--ion-safe-area-right: 0px}}:host ion-item ::ng-deep>[slot=end]{margin-inline-start:0;margin-inline-end:0;text-align:right}:host ion-item ::ng-deep>time[slot=end]{margin-inline-start:12px}:host ion-item ::ng-deep>data[slot=end],:host ion-item ::ng-deep>[detail][slot=end],:host ion-item ::ng-deep>ion-reorder[slot=end]{margin-inline-start:16px}:host ion-item ::ng-deep>h1,:host ion-item ::ng-deep>h2,:host ion-item ::ng-deep>h3,:host ion-item ::ng-deep>h4,:host ion-item ::ng-deep>h5,:host ion-item ::ng-deep>h6,:host ion-item ::ng-deep>p,:host ion-item ::ng-deep>data{font-size:16px;line-height:24px;color:var(--kirby-text-color-black);display:block;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:400}:host ion-item ::ng-deep>h1.kirby-text-bold,:host ion-item ::ng-deep>h2.kirby-text-bold,:host ion-item ::ng-deep>h3.kirby-text-bold,:host ion-item ::ng-deep>h4.kirby-text-bold,:host ion-item ::ng-deep>h5.kirby-text-bold,:host ion-item ::ng-deep>h6.kirby-text-bold,:host ion-item ::ng-deep>p.kirby-text-bold,:host ion-item ::ng-deep>data.kirby-text-bold{font-weight:700}:host ion-item ::ng-deep>p{font-size:14px}:host ion-item ::ng-deep>[subtitle],:host ion-item ::ng-deep>[detail]{font-size:12px;line-height:16px}:host ion-item ::ng-deep>[subtitle]:not(:last-child){margin-bottom:4px}:host ion-item ::ng-deep>[detail]{color:var(--kirby-text-color-semi-dark)}:host ion-item ::ng-deep>:not([slot]){width:100%}:host ion-item ::ng-deep>input[slot=end],:host ion-item ::ng-deep>kirby-form-field[slot=end] input{margin-inline-start:16px;width:auto;text-align:right}:host.sm ion-item,:host-context(kirby-card.menu-popover) :host:not([size]) ion-item{--min-height: 44px}:host.xs ion-item{--min-height: 32px;--inner-padding-top: 4px;--inner-padding-bottom: 4px}:host .outside{left:4px;margin:0;position:absolute;width:16px;z-index:1}.disclosure{padding-left:4px;color:var(--kirby-semi-dark)}:host-context(kirby-dropdown) ion-item,:host-context(kirby-popover) ion-item{--min-height: 44px}:host-context(kirby-dropdown .focused) ion-item,:host-context(kirby-popover .focused) ion-item{--background: whitesmoke}:host(.disabled),:host([disabled]){pointer-events:none}:host(.selected) ion-item ::ng-deep>h1,:host(.selected) ion-item ::ng-deep>h2,:host(.selected) ion-item ::ng-deep>h3,:host(.selected) ion-item ::ng-deep>h4,:host(.selected) ion-item ::ng-deep>h5,:host(.selected) ion-item ::ng-deep>h6,:host(.selected) ion-item ::ng-deep>p,:host(.selected) ion-item ::ng-deep>data,:host-context(kirby-list .selected) ion-item ::ng-deep>h1,:host-context(kirby-list .selected) ion-item ::ng-deep>h2,:host-context(kirby-list .selected) ion-item ::ng-deep>h3,:host-context(kirby-list .selected) ion-item ::ng-deep>h4,:host-context(kirby-list .selected) ion-item ::ng-deep>h5,:host-context(kirby-list .selected) ion-item ::ng-deep>h6,:host-context(kirby-list .selected) ion-item ::ng-deep>p,:host-context(kirby-list .selected) ion-item ::ng-deep>data{font-weight:700}:host(.disclosure) ion-item{--inner-padding-end: 8px}:host-context(.shape-rounded .is-single) ion-item{--border-radius: 16px}:host-context(.has-header .is-single) ion-item::part(native){border-top-left-radius:0;border-top-right-radius:0}:host-context(.has-footer .is-single) ion-item::part(native){border-bottom-left-radius:0;border-bottom-right-radius:0}:host-context(.shape-rounded.has-sections .list-items kirby-list-item:first-of-type) ion-item::part(native){border-top-left-radius:16px;border-top-right-radius:16px}\n"] }]
29
29
  }], propDecorators: { disabled: [{
30
30
  type: HostBinding,
31
31
  args: ['class.disabled']
@@ -209,6 +209,7 @@ export class PageComponent {
209
209
  this.leave = new EventEmitter();
210
210
  this.refresh = new EventEmitter();
211
211
  this.backButtonClick = new EventEmitter();
212
+ this.toolbarTitleClick = new EventEmitter();
212
213
  this.isStickyContentPinned = false;
213
214
  this.hasInteractiveTitle = false;
214
215
  this.isObservingTitle = false;
@@ -327,7 +328,12 @@ export class PageComponent {
327
328
  return `max-width-${this.maxWidth}`;
328
329
  }
329
330
  onTitleClick(event) {
330
- this.headerTitleClick?.emit(event);
331
+ if (this.toolbarTitleClick.observed) {
332
+ this.toolbarTitleClick.emit(event);
333
+ }
334
+ else {
335
+ this.header?.titleClick.emit(event);
336
+ }
331
337
  }
332
338
  removeWrapper() {
333
339
  const parent = this.elementRef.nativeElement.parentNode;
@@ -402,7 +408,6 @@ export class PageComponent {
402
408
  this.titleActionIconTemplate = this.header.titleActionIconTemplate;
403
409
  if (this.header.titleClick.observed) {
404
410
  this.hasInteractiveTitle = true;
405
- this.headerTitleClick = this.header.titleClick;
406
411
  }
407
412
  }
408
413
  }
@@ -437,6 +442,9 @@ export class PageComponent {
437
442
  : typeof this.toolbarTitle === 'string'
438
443
  ? this.simpleToolbarTitleTemplate
439
444
  : defaultTitleTemplate;
445
+ if (this.toolbarTitleClick.observed) {
446
+ this.hasInteractiveTitle = true;
447
+ }
440
448
  }
441
449
  observeTitle() {
442
450
  if (!this.hasPageTitle) {
@@ -593,7 +601,7 @@ export class PageComponent {
593
601
  }
594
602
  }
595
603
  /** @nocollapse */ PageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PageComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i2.Router }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.ModalNavigationService }, { token: i3.ResizeObserverService }, { token: i4.TabsComponent, optional: true, skipSelf: true }, { token: PAGE_BACK_BUTTON_OVERRIDE, optional: true }, { token: i5.IonRouterOutlet, optional: true }, { token: i5.NavController, optional: true }], target: i0.ɵɵFactoryTarget.Component });
596
- /** @nocollapse */ PageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PageComponent, selector: "kirby-page", inputs: { title: "title", subtitle: "subtitle", toolbarTitle: "toolbarTitle", titleAlignment: "titleAlignment", defaultBackHref: "defaultBackHref", hideBackButton: "hideBackButton", titleMaxLines: "titleMaxLines", maxWidth: "maxWidth", tabBarBottomHidden: "tabBarBottomHidden" }, outputs: { enter: "enter", leave: "leave", refresh: "refresh", backButtonClick: "backButtonClick" }, host: { listeners: { "window:keyboardWillShow": "_onKeyboardWillShow($event)", "window:keyboardWillHide": "_onKeyboardWillHide()", "window:kirbySelectedTabClick": "_onSelectedTabClick()" } }, queries: [{ propertyName: "customToolbarTitleTemplate", first: true, predicate: PageToolbarTitleDirective, descendants: true, read: TemplateRef }, { propertyName: "customTitleTemplate", first: true, predicate: PageTitleDirective, descendants: true, read: TemplateRef }, { propertyName: "customSubtitleTemplate", first: true, predicate: PageSubtitleDirective, descendants: true, read: TemplateRef }, { propertyName: "stickyContentRef", first: true, predicate: PageStickyContentDirective, descendants: true, read: TemplateRef }, { propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "customActions", predicate: PageActionsDirective }, { propertyName: "customContent", predicate: PageContentDirective }], viewQueries: [{ propertyName: "content", first: true, predicate: IonContent, descendants: true, static: true }, { propertyName: "ionContentElement", first: true, predicate: IonContent, descendants: true, read: ElementRef, static: true }, { propertyName: "ionHeaderElement", first: true, predicate: IonHeader, descendants: true, read: ElementRef, static: true }, { propertyName: "ionFooterElement", first: true, predicate: IonFooter, descendants: true, read: ElementRef, static: true }, { propertyName: "ionToolbarElement", first: true, predicate: IonToolbar, descendants: true, read: ElementRef, static: true }, { propertyName: "backButtonDelegate", first: true, predicate: IonBackButtonDelegate, descendants: true }, { propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: true, read: ElementRef }, { propertyName: "stickyContentContainer", first: true, predicate: ["stickyContentContainer"], descendants: true, read: ElementRef }, { propertyName: "simpleTitleTemplate", first: true, predicate: ["simpleTitleTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "simpleToolbarTitleTemplate", first: true, predicate: ["simpleToolbarTitleTemplate"], descendants: true, read: TemplateRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar\n [class.content-scrolled]=\"isContentScrolled\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <ion-buttons slot=\"start\">\n <ion-back-button\n text=\"\"\n [defaultHref]=\"defaultBackHref\"\n icon=\"assets/kirby/icons/svg/arrow-back.svg\"\n [style.visibility]=\"hideBackButton ? 'hidden' : null\"\n ></ion-back-button>\n </ion-buttons>\n <ion-title [class.slide-and-fade-in]=\"toolbarTitleVisible\">\n <div class=\"toolbar-title\">\n <span\n [class.clickable]=\"hasInteractiveTitle\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n </div>\n </ion-title>\n <ion-buttons\n *ngIf=\"!!headerActionsTemplate\"\n class=\"hide\"\n slot=\"primary\"\n [class.fade-in]=\"toolbarActionsVisible\"\n >\n <ng-container\n *ngTemplateOutlet=\"headerActionsTemplate; injector: toolbarActionGroupInjector\"\n ></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!stickyActionsTemplate\" class=\"legacy-actions\" slot=\"primary\">\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!fixedActionsTemplate\" class=\"legacy-actions\" slot=\"secondary\">\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content scrollEvents=\"true\" forceOverscroll=\"false\" [class]=\"getMaxWidthClasses()\">\n <ion-refresher\n *ngIf=\"refresh.observers.length > 0\"\n (ionRefresh)=\"delegateRefreshEvent($event)\"\n slot=\"fixed\"\n >\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n\n <!-- Page header -->\n <div class=\"page-header-container\" *ngIf=\"hasPageTitle && !hasHeader\">\n <div\n class=\"page-header\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right'\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"!!pageActionsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n <div *ngIf=\"hasPageSubtitle\" class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n </div>\n </div>\n\n <!-- Header -->\n <div class=\"page-header-container\" *ngIf=\"hasHeader\">\n <ng-content select=\"kirby-header\"></ng-content>\n </div>\n\n <!-- Sticky content -->\n <ng-container *ngIf=\"stickyContentTemplate\">\n <div\n #stickyContentContainer\n class=\"sticky-content-container\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <div>\n <ng-container *ngTemplateOutlet=\"stickyContentTemplate\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Content -->\n <div class=\"content-inner\">\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n <div slot=\"fixed\" class=\"fixed-content\" *ngIf=\"fixedContentTemplate\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\n</ion-content>\n\n<ion-footer>\n <ng-content select=\"kirby-page-footer\"></ng-content>\n</ion-footer>\n\n<ng-template #defaultPageTitleTemplate>\n <h1 [kirbyFitHeading]=\"fitHeadingConfig\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </h1>\n</ng-template>\n<ng-template #defaultPageSubtitleTemplate>\n <ng-container *ngTemplateOutlet=\"simpleSubtitleTemplate\"></ng-container>\n</ng-template>\n<ng-template #defaultPageActionsTemplate>\n <ng-content select=\"kirby-page-actions\"></ng-content>\n</ng-template>\n\n<ng-template #defaultContentTemplate>\n <ng-content select=\"kirby-page-content\"></ng-content>\n</ng-template>\n\n<ng-template #simpleTitleTemplate>{{ title }}</ng-template>\n<ng-template #simpleSubtitleTemplate>{{ subtitle }}</ng-template>\n<ng-template #simpleToolbarTitleTemplate>{{ toolbarTitle }}</ng-template>\n", styles: ["ion-header,ion-toolbar{--background: var(--kirby-background-color);margin:0 auto}ion-toolbar{--border-width: 0 !important;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--ion-toolbar-color: var(--kirby-black);--min-height: 56px;box-sizing:border-box;padding-inline:4px}@media (min-width: 721px){ion-toolbar{--min-height: 72px}}ion-toolbar:before{content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px}ion-toolbar:before,ion-toolbar::part(background){transition:background-color 50ms linear}ion-toolbar.content-scrolled{--background: #f3f3f3}ion-toolbar.content-scrolled:before,ion-toolbar.content-scrolled::part(background){transition-duration:.2s}ion-toolbar.content-scrolled:not(.content-pinned):before{background-color:var(--kirby-medium)}@media (min-width: 721px){ion-toolbar{--background: #f3f3f3}ion-toolbar:not(.content-pinned):before{background-color:var(--kirby-medium);transition-duration:50ms}}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title{visibility:hidden;opacity:0;transform:translateY(10px);transition-property:opacity,transform;transition-duration:.15s;transition-timing-function:ease}ion-toolbar ion-title.slide-and-fade-in{visibility:visible;opacity:1;transform:translateY(0)}ion-toolbar ion-title .toolbar-title{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden;font-weight:700}ion-toolbar ion-title .toolbar-title span.clickable{cursor:pointer}ion-toolbar ion-title .toolbar-title span.has-icon{display:inline-flex;flex-direction:row;align-items:center;justify-content:center}ion-toolbar ion-title .toolbar-title ::ng-deep>*{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}.hide{visibility:hidden;opacity:0;transition:opacity .1s linear}.hide.fade-in{visibility:inherit;opacity:1}ion-title{box-sizing:border-box;font-size:16px;font-weight:400}ion-back-button{--color: var(--kirby-black);--background: var(--kirby-white);--icon-font-size: 24px;height:40px;width:40px;opacity:1}@media (hover: hover){ion-back-button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}ion-back-button:active,ion-back-button.ion-activated{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}ion-back-button::part(icon){margin-inline:0}ion-back-button::part(native){opacity:1;border-radius:999px;overflow:hidden}ion-back-button::part(native):after{transition:all 80ms linear 0ms}.page-header-container{max-width:var(--page-content-max-width, 720px);margin:0 auto}.page-header{margin-left:16px;margin-top:8px;margin-bottom:var(--kirby-page-title-margin-bottom, 40px)}.page-header .page-title.has-actions{display:flex;justify-content:space-between;align-items:flex-start}.page-header .page-title h1,.page-header .page-title h2,.page-header .page-title h3,.page-header .page-title h4,.page-header .page-title h5,.page-header .page-title h6{margin:0}.page-header .page-subtitle{margin-top:8px}.page-header.text-center{text-align:center;margin-left:0}.page-header.text-right{text-align:right}ion-content{--padding-top: 12px;--padding-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color);--color: var(--kirby-black)}@media (min-width: 632px){ion-content{--padding-start: var(--page-content-padding-start, 48px);--padding-end: var(--page-content-padding-end, 48px)}}ion-content.max-width-standard{--page-content-max-width: 792px}ion-content.max-width-optimized{--page-content-max-width: 1092px}ion-content.max-width-full{--page-content-max-width: 100%}ion-content .content-inner{max-width:var(--page-content-max-width, 720px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0;transform:initial}ion-content .fixed-content .content-inner{position:relative}.sticky-content-container{position:sticky;top:-13px;left:0;right:0;padding-top:1px;margin-block-end:24px;z-index:2}.sticky-content-container div{max-width:var(--page-content-max-width, 720px);margin:0 auto}.sticky-content-container:before,.sticky-content-container:after{content:\"\";position:absolute;left:calc(-1 * var(--padding-start));right:calc(-1 * var(--padding-end));bottom:0;transition:background-color 50ms linear}.sticky-content-container:before{top:0;background-color:var(--background)}.sticky-content-container:after{height:1px}.sticky-content-container.content-pinned:before,.sticky-content-container.content-pinned:after{transition-duration:.2s}.sticky-content-container.content-pinned:before{background-color:#f3f3f3}.sticky-content-container.content-pinned:after{background-color:var(--kirby-medium)}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IonBackButton, selector: "ion-back-button", inputs: ["color", "defaultHref", "disabled", "icon", "mode", "routerAnimation", "text", "type"] }, { kind: "component", type: i5.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i5.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i5.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i5.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i5.IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: i5.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i5.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "directive", type: i5.IonBackButtonDelegate, selector: "ion-back-button", inputs: ["defaultHref", "routerAnimation"] }, { kind: "directive", type: i3.FitHeadingDirective, selector: "h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading]", inputs: ["kirbyFitHeading"] }, { kind: "component", type: i7.SpinnerComponent, selector: "kirby-spinner" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
604
+ /** @nocollapse */ PageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PageComponent, selector: "kirby-page", inputs: { title: "title", subtitle: "subtitle", toolbarTitle: "toolbarTitle", titleAlignment: "titleAlignment", defaultBackHref: "defaultBackHref", hideBackButton: "hideBackButton", titleMaxLines: "titleMaxLines", maxWidth: "maxWidth", tabBarBottomHidden: "tabBarBottomHidden" }, outputs: { enter: "enter", leave: "leave", refresh: "refresh", backButtonClick: "backButtonClick", toolbarTitleClick: "toolbarTitleClick" }, host: { listeners: { "window:keyboardWillShow": "_onKeyboardWillShow($event)", "window:keyboardWillHide": "_onKeyboardWillHide()", "window:kirbySelectedTabClick": "_onSelectedTabClick()" } }, queries: [{ propertyName: "customToolbarTitleTemplate", first: true, predicate: PageToolbarTitleDirective, descendants: true, read: TemplateRef }, { propertyName: "customTitleTemplate", first: true, predicate: PageTitleDirective, descendants: true, read: TemplateRef }, { propertyName: "customSubtitleTemplate", first: true, predicate: PageSubtitleDirective, descendants: true, read: TemplateRef }, { propertyName: "stickyContentRef", first: true, predicate: PageStickyContentDirective, descendants: true, read: TemplateRef }, { propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "customActions", predicate: PageActionsDirective }, { propertyName: "customContent", predicate: PageContentDirective }], viewQueries: [{ propertyName: "content", first: true, predicate: IonContent, descendants: true, static: true }, { propertyName: "ionContentElement", first: true, predicate: IonContent, descendants: true, read: ElementRef, static: true }, { propertyName: "ionHeaderElement", first: true, predicate: IonHeader, descendants: true, read: ElementRef, static: true }, { propertyName: "ionFooterElement", first: true, predicate: IonFooter, descendants: true, read: ElementRef, static: true }, { propertyName: "ionToolbarElement", first: true, predicate: IonToolbar, descendants: true, read: ElementRef, static: true }, { propertyName: "backButtonDelegate", first: true, predicate: IonBackButtonDelegate, descendants: true }, { propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: true, read: ElementRef }, { propertyName: "stickyContentContainer", first: true, predicate: ["stickyContentContainer"], descendants: true, read: ElementRef }, { propertyName: "simpleTitleTemplate", first: true, predicate: ["simpleTitleTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "simpleToolbarTitleTemplate", first: true, predicate: ["simpleToolbarTitleTemplate"], descendants: true, read: TemplateRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar\n [class.content-scrolled]=\"isContentScrolled\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <ion-buttons slot=\"start\">\n <ion-back-button\n text=\"\"\n [defaultHref]=\"defaultBackHref\"\n icon=\"assets/kirby/icons/svg/arrow-back.svg\"\n [style.visibility]=\"hideBackButton ? 'hidden' : null\"\n ></ion-back-button>\n </ion-buttons>\n <ion-title [class.slide-and-fade-in]=\"toolbarTitleVisible\">\n <div class=\"toolbar-title\">\n <span\n [class.clickable]=\"hasInteractiveTitle\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n </div>\n </ion-title>\n <ion-buttons\n *ngIf=\"!!headerActionsTemplate\"\n class=\"hide\"\n slot=\"primary\"\n [class.fade-in]=\"toolbarActionsVisible\"\n >\n <ng-container\n *ngTemplateOutlet=\"headerActionsTemplate; injector: toolbarActionGroupInjector\"\n ></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!stickyActionsTemplate\" class=\"legacy-actions\" slot=\"primary\">\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!fixedActionsTemplate\" class=\"legacy-actions\" slot=\"secondary\">\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content scrollEvents=\"true\" forceOverscroll=\"false\" [class]=\"getMaxWidthClasses()\">\n <ion-refresher\n *ngIf=\"refresh.observers.length > 0\"\n (ionRefresh)=\"delegateRefreshEvent($event)\"\n slot=\"fixed\"\n >\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n\n <!-- Page header -->\n <div class=\"page-header-container\" *ngIf=\"hasPageTitle && !hasHeader\">\n <div\n class=\"page-header\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right'\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"!!pageActionsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n <div *ngIf=\"hasPageSubtitle\" class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n </div>\n </div>\n\n <!-- Header -->\n <div class=\"page-header-container\" *ngIf=\"hasHeader\">\n <ng-content select=\"kirby-header\"></ng-content>\n </div>\n\n <!-- Sticky content -->\n <ng-container *ngIf=\"stickyContentTemplate\">\n <div\n #stickyContentContainer\n class=\"sticky-content-container\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <div>\n <ng-container *ngTemplateOutlet=\"stickyContentTemplate\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Content -->\n <div class=\"content-inner\">\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n <div slot=\"fixed\" class=\"fixed-content\" *ngIf=\"fixedContentTemplate\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\n</ion-content>\n\n<ion-footer>\n <ng-content select=\"kirby-page-footer\"></ng-content>\n</ion-footer>\n\n<ng-template #defaultPageTitleTemplate>\n <h1 [kirbyFitHeading]=\"fitHeadingConfig\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </h1>\n</ng-template>\n<ng-template #defaultPageSubtitleTemplate>\n <ng-container *ngTemplateOutlet=\"simpleSubtitleTemplate\"></ng-container>\n</ng-template>\n<ng-template #defaultPageActionsTemplate>\n <ng-content select=\"kirby-page-actions\"></ng-content>\n</ng-template>\n\n<ng-template #defaultContentTemplate>\n <ng-content select=\"kirby-page-content\"></ng-content>\n</ng-template>\n\n<ng-template #simpleTitleTemplate>{{ title }}</ng-template>\n<ng-template #simpleSubtitleTemplate>{{ subtitle }}</ng-template>\n<ng-template #simpleToolbarTitleTemplate>{{ toolbarTitle }}</ng-template>\n", styles: ["ion-header,ion-toolbar{--background: var(--kirby-background-color);margin:0 auto}ion-toolbar{--border-width: 0 !important;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--ion-toolbar-color: var(--kirby-black);--min-height: 56px;box-sizing:border-box;padding-inline:4px}@media (min-width: 721px){ion-toolbar{--min-height: 72px}}ion-toolbar:before{content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px}ion-toolbar:before,ion-toolbar::part(background){transition:background-color 50ms linear}ion-toolbar.content-scrolled{--background: #f3f3f3}ion-toolbar.content-scrolled:before,ion-toolbar.content-scrolled::part(background){transition-duration:.2s}ion-toolbar.content-scrolled:not(.content-pinned):before{background-color:var(--kirby-medium)}@media (min-width: 721px){ion-toolbar{--background: #f3f3f3}ion-toolbar:not(.content-pinned):before{background-color:var(--kirby-medium);transition-duration:50ms}}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title{visibility:hidden;opacity:0;transform:translateY(10px);transition-property:opacity,transform;transition-duration:.15s;transition-timing-function:ease}ion-toolbar ion-title.slide-and-fade-in{visibility:visible;opacity:1;transform:translateY(0)}ion-toolbar ion-title .toolbar-title{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden;font-weight:700}ion-toolbar ion-title .toolbar-title span.clickable{cursor:pointer}ion-toolbar ion-title .toolbar-title span.has-icon{display:inline-flex;flex-direction:row;align-items:center;justify-content:center}ion-toolbar ion-title .toolbar-title ::ng-deep>*{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}.hide{visibility:hidden;opacity:0;transition:opacity .1s linear}.hide.fade-in{visibility:inherit;opacity:1}ion-title{box-sizing:border-box;font-size:16px;font-weight:400}ion-back-button{--color: var(--kirby-black);--background: var(--kirby-white);--icon-font-size: 24px;height:40px;width:40px;opacity:1}@media (hover: hover){ion-back-button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}ion-back-button:active,ion-back-button.ion-activated{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}ion-back-button::part(icon){margin-inline:0}ion-back-button::part(native){opacity:1;border-radius:999px;overflow:hidden}ion-back-button::part(native):after{transition:all 80ms linear 0ms}.page-header-container{max-width:var(--page-content-max-width, 720px);margin:0 auto}.page-header{margin-left:16px;margin-top:8px;margin-bottom:var(--kirby-page-title-margin-bottom, 40px)}.page-header .page-title.has-actions{display:flex;justify-content:space-between;align-items:flex-start}.page-header .page-title h1,.page-header .page-title h2,.page-header .page-title h3,.page-header .page-title h4,.page-header .page-title h5,.page-header .page-title h6{margin:0}.page-header .page-subtitle{margin-top:8px}.page-header.text-center{text-align:center;margin-left:0}.page-header.text-right{text-align:right}ion-content{--padding-top: 12px;--padding-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color);--color: var(--kirby-black)}@media (min-width: 632px){ion-content{--padding-start: var(--page-content-padding-start, 48px);--padding-end: var(--page-content-padding-end, 48px)}}ion-content.max-width-standard{--page-content-max-width: 792px}ion-content.max-width-optimized{--page-content-max-width: 1092px}ion-content.max-width-full{--page-content-max-width: 100%}ion-content .content-inner{max-width:var(--page-content-max-width, 720px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0;transform:initial}ion-content .fixed-content .content-inner{position:relative}.sticky-content-container{position:sticky;top:-13px;left:0;right:0;padding-top:1px;margin-block-end:24px;z-index:2}.sticky-content-container div{max-width:var(--page-content-max-width, 720px);margin:0 auto}.sticky-content-container:before,.sticky-content-container:after{content:\"\";position:absolute;left:calc(-1 * var(--padding-start));right:calc(-1 * var(--padding-end));bottom:0;transition:background-color 50ms linear}.sticky-content-container:before{top:0;background-color:var(--background)}.sticky-content-container:after{height:1px}.sticky-content-container.content-pinned:before,.sticky-content-container.content-pinned:after{transition-duration:.2s}.sticky-content-container.content-pinned:before{background-color:#f3f3f3}.sticky-content-container.content-pinned:after{background-color:var(--kirby-medium)}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IonBackButton, selector: "ion-back-button", inputs: ["color", "defaultHref", "disabled", "icon", "mode", "routerAnimation", "text", "type"] }, { kind: "component", type: i5.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i5.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i5.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i5.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i5.IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: i5.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i5.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "directive", type: i5.IonBackButtonDelegate, selector: "ion-back-button", inputs: ["defaultHref", "routerAnimation"] }, { kind: "directive", type: i3.FitHeadingDirective, selector: "h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading]", inputs: ["kirbyFitHeading"] }, { kind: "component", type: i7.SpinnerComponent, selector: "kirby-spinner" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
597
605
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PageComponent, decorators: [{
598
606
  type: Component,
599
607
  args: [{ selector: 'kirby-page', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar\n [class.content-scrolled]=\"isContentScrolled\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <ion-buttons slot=\"start\">\n <ion-back-button\n text=\"\"\n [defaultHref]=\"defaultBackHref\"\n icon=\"assets/kirby/icons/svg/arrow-back.svg\"\n [style.visibility]=\"hideBackButton ? 'hidden' : null\"\n ></ion-back-button>\n </ion-buttons>\n <ion-title [class.slide-and-fade-in]=\"toolbarTitleVisible\">\n <div class=\"toolbar-title\">\n <span\n [class.clickable]=\"hasInteractiveTitle\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n </div>\n </ion-title>\n <ion-buttons\n *ngIf=\"!!headerActionsTemplate\"\n class=\"hide\"\n slot=\"primary\"\n [class.fade-in]=\"toolbarActionsVisible\"\n >\n <ng-container\n *ngTemplateOutlet=\"headerActionsTemplate; injector: toolbarActionGroupInjector\"\n ></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!stickyActionsTemplate\" class=\"legacy-actions\" slot=\"primary\">\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!fixedActionsTemplate\" class=\"legacy-actions\" slot=\"secondary\">\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content scrollEvents=\"true\" forceOverscroll=\"false\" [class]=\"getMaxWidthClasses()\">\n <ion-refresher\n *ngIf=\"refresh.observers.length > 0\"\n (ionRefresh)=\"delegateRefreshEvent($event)\"\n slot=\"fixed\"\n >\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n\n <!-- Page header -->\n <div class=\"page-header-container\" *ngIf=\"hasPageTitle && !hasHeader\">\n <div\n class=\"page-header\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right'\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"!!pageActionsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n <div *ngIf=\"hasPageSubtitle\" class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n </div>\n </div>\n\n <!-- Header -->\n <div class=\"page-header-container\" *ngIf=\"hasHeader\">\n <ng-content select=\"kirby-header\"></ng-content>\n </div>\n\n <!-- Sticky content -->\n <ng-container *ngIf=\"stickyContentTemplate\">\n <div\n #stickyContentContainer\n class=\"sticky-content-container\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <div>\n <ng-container *ngTemplateOutlet=\"stickyContentTemplate\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Content -->\n <div class=\"content-inner\">\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n <div slot=\"fixed\" class=\"fixed-content\" *ngIf=\"fixedContentTemplate\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\n</ion-content>\n\n<ion-footer>\n <ng-content select=\"kirby-page-footer\"></ng-content>\n</ion-footer>\n\n<ng-template #defaultPageTitleTemplate>\n <h1 [kirbyFitHeading]=\"fitHeadingConfig\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </h1>\n</ng-template>\n<ng-template #defaultPageSubtitleTemplate>\n <ng-container *ngTemplateOutlet=\"simpleSubtitleTemplate\"></ng-container>\n</ng-template>\n<ng-template #defaultPageActionsTemplate>\n <ng-content select=\"kirby-page-actions\"></ng-content>\n</ng-template>\n\n<ng-template #defaultContentTemplate>\n <ng-content select=\"kirby-page-content\"></ng-content>\n</ng-template>\n\n<ng-template #simpleTitleTemplate>{{ title }}</ng-template>\n<ng-template #simpleSubtitleTemplate>{{ subtitle }}</ng-template>\n<ng-template #simpleToolbarTitleTemplate>{{ toolbarTitle }}</ng-template>\n", styles: ["ion-header,ion-toolbar{--background: var(--kirby-background-color);margin:0 auto}ion-toolbar{--border-width: 0 !important;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0;--ion-toolbar-color: var(--kirby-black);--min-height: 56px;box-sizing:border-box;padding-inline:4px}@media (min-width: 721px){ion-toolbar{--min-height: 72px}}ion-toolbar:before{content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px}ion-toolbar:before,ion-toolbar::part(background){transition:background-color 50ms linear}ion-toolbar.content-scrolled{--background: #f3f3f3}ion-toolbar.content-scrolled:before,ion-toolbar.content-scrolled::part(background){transition-duration:.2s}ion-toolbar.content-scrolled:not(.content-pinned):before{background-color:var(--kirby-medium)}@media (min-width: 721px){ion-toolbar{--background: #f3f3f3}ion-toolbar:not(.content-pinned):before{background-color:var(--kirby-medium);transition-duration:50ms}}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title{visibility:hidden;opacity:0;transform:translateY(10px);transition-property:opacity,transform;transition-duration:.15s;transition-timing-function:ease}ion-toolbar ion-title.slide-and-fade-in{visibility:visible;opacity:1;transform:translateY(0)}ion-toolbar ion-title .toolbar-title{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden;font-weight:700}ion-toolbar ion-title .toolbar-title span.clickable{cursor:pointer}ion-toolbar ion-title .toolbar-title span.has-icon{display:inline-flex;flex-direction:row;align-items:center;justify-content:center}ion-toolbar ion-title .toolbar-title ::ng-deep>*{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}.hide{visibility:hidden;opacity:0;transition:opacity .1s linear}.hide.fade-in{visibility:inherit;opacity:1}ion-title{box-sizing:border-box;font-size:16px;font-weight:400}ion-back-button{--color: var(--kirby-black);--background: var(--kirby-white);--icon-font-size: 24px;height:40px;width:40px;opacity:1}@media (hover: hover){ion-back-button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}ion-back-button:active,ion-back-button.ion-activated{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}ion-back-button::part(icon){margin-inline:0}ion-back-button::part(native){opacity:1;border-radius:999px;overflow:hidden}ion-back-button::part(native):after{transition:all 80ms linear 0ms}.page-header-container{max-width:var(--page-content-max-width, 720px);margin:0 auto}.page-header{margin-left:16px;margin-top:8px;margin-bottom:var(--kirby-page-title-margin-bottom, 40px)}.page-header .page-title.has-actions{display:flex;justify-content:space-between;align-items:flex-start}.page-header .page-title h1,.page-header .page-title h2,.page-header .page-title h3,.page-header .page-title h4,.page-header .page-title h5,.page-header .page-title h6{margin:0}.page-header .page-subtitle{margin-top:8px}.page-header.text-center{text-align:center;margin-left:0}.page-header.text-right{text-align:right}ion-content{--padding-top: 12px;--padding-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color);--color: var(--kirby-black)}@media (min-width: 632px){ion-content{--padding-start: var(--page-content-padding-start, 48px);--padding-end: var(--page-content-padding-end, 48px)}}ion-content.max-width-standard{--page-content-max-width: 792px}ion-content.max-width-optimized{--page-content-max-width: 1092px}ion-content.max-width-full{--page-content-max-width: 100%}ion-content .content-inner{max-width:var(--page-content-max-width, 720px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0;transform:initial}ion-content .fixed-content .content-inner{position:relative}.sticky-content-container{position:sticky;top:-13px;left:0;right:0;padding-top:1px;margin-block-end:24px;z-index:2}.sticky-content-container div{max-width:var(--page-content-max-width, 720px);margin:0 auto}.sticky-content-container:before,.sticky-content-container:after{content:\"\";position:absolute;left:calc(-1 * var(--padding-start));right:calc(-1 * var(--padding-end));bottom:0;transition:background-color 50ms linear}.sticky-content-container:before{top:0;background-color:var(--background)}.sticky-content-container:after{height:1px}.sticky-content-container.content-pinned:before,.sticky-content-container.content-pinned:after{transition-duration:.2s}.sticky-content-container.content-pinned:before{background-color:#f3f3f3}.sticky-content-container.content-pinned:after{background-color:var(--kirby-medium)}\n"] }]
@@ -636,6 +644,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
636
644
  type: Output
637
645
  }], backButtonClick: [{
638
646
  type: Output
647
+ }], toolbarTitleClick: [{
648
+ type: Output
639
649
  }], content: [{
640
650
  type: ViewChild,
641
651
  args: [IonContent, { static: true }]
@@ -697,4 +707,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
697
707
  type: HostListener,
698
708
  args: [`window:${selectedTabClickEvent}`]
699
709
  }] } });
700
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbnN5c3RlbS9wYWdlL3NyYy9wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3BhZ2Uvc3JjL3BhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUlOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxHQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RGLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixnQkFB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cUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHN0QsMEJBQTBCO3NCQURqQyxTQUFTO3VCQUFDLDRCQUE0QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUdwRSwwQkFBMEI7c0JBRGpDLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBRzdFLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHdEUsc0JBQXNCO3NCQURyQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUd6RSxhQUFhO3NCQURaLGVBQWU7dUJBQUMsb0JBQW9CO2dCQUc3QixhQUFhO3NCQURwQixlQUFlO3VCQUFDLG9CQUFvQjtnQkFHN0IsZ0JBQWdCO3NCQUR2QixZQUFZO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUc5RSxNQUFNO3NCQURMLFlBQVk7dUJBQUMsZUFBZTtnQkFpZTdCLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXbkQsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHlCQUF5QjtnQkFNdkMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLFVBQVUscUJBQXFCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFNraXBTZWxmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyLCBSb3V0ZXJFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBJb25CYWNrQnV0dG9uRGVsZWdhdGUsXG4gIElvbkNvbnRlbnQsXG4gIElvbkZvb3RlcixcbiAgSW9uSGVhZGVyLFxuICBJb25Sb3V0ZXJPdXRsZXQsXG4gIElvblRvb2xiYXIsXG4gIE5hdkNvbnRyb2xsZXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFNjcm9sbERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IHNlbGVjdGVkVGFiQ2xpY2tFdmVudCwgVGFic0NvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vdGFicyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEtpcmJ5QW5pbWF0aW9uIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9oZWxwZXJzJztcbmltcG9ydCB7XG4gIE1vZGFsRWxlbWVudENvbXBvbmVudCxcbiAgTW9kYWxFbGVtZW50c0FkdmVydGlzZXIsXG4gIE1vZGFsRWxlbWVudFR5cGUsXG4gIE1vZGFsTmF2aWdhdGlvblNlcnZpY2UsXG4gIE1vZGFsV3JhcHBlckNvbXBvbmVudCxcbn0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9tb2RhbCc7XG5pbXBvcnQgeyBGaXRIZWFkaW5nQ29uZmlnLCBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQge1xuICBIZWFkZXJBY3Rpb25zRGlyZWN0aXZlLFxuICBIZWFkZXJDb21wb25lbnQsXG4gIEhlYWRlclRpdGxlQWN0aW9uSWNvbkRpcmVjdGl2ZSxcbn0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9oZWFkZXInO1xuaW1wb3J0IHsgQUNUSU9OR1JPVVBfQ09ORklHLCBBY3Rpb25Hcm91cENvbmZpZyB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vYWN0aW9uLWdyb3VwJztcblxuLyoqXG4gKiBTcGVjaWZ5IHNjcm9sbCBldmVudCBkZWJvdW5jZSB0aW1lIGluIG1zIGFuZCBzY3JvbGxlZCBvZmZzZXQgZnJvbSB0b3AgaW4gcGl4ZWxzXG4gKi9cbmNvbnN0IGNvbnRlbnRTY3JvbGxEZWJvdW5jZVRpbWVJbk1TID0gMTA7XG5jb25zdCBjb250ZW50U2Nyb2xsZWRPZmZzZXRJblBpeGVscyA9IDQ7XG5cbnR5cGUgc3RpY2t5Q29uZmlnID0geyBzdGlja3k6IGJvb2xlYW4gfTtcbnR5cGUgZml4ZWRDb25maWcgPSB7IGZpeGVkOiBib29sZWFuIH07XG5cbmV4cG9ydCBjb25zdCBQQUdFX0JBQ0tfQlVUVE9OX09WRVJSSURFID0gbmV3IEluamVjdGlvblRva2VuPFBhZ2VCYWNrQnV0dG9uT3ZlcnJpZGU+KFxuICAncGFnZS1iYWNrLWJ1dHRvbi1vdmVycmlkZSdcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUJhY2tCdXR0b25PdmVycmlkZSB7XG4gIG5hdmlnYXRlQmFjazogKFxuICAgIHJvdXRlck91dGxldDogSW9uUm91dGVyT3V0bGV0LFxuICAgIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXIsXG4gICAgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBcInB1bGwtdG8tcmVmcmVzaFwiIGJlZ2lucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxsVG9SZWZyZXNoRXZlbnQge1xuICAvKipcbiAgICogSW52b2tlIHRoaXMgY2FsbGJhY2stbWV0aG9kIHdoZW4gYWN0aW9uIHRvIHBlcmZvcm0gdXBvbiBcInB1bGwtdG8tcmVmcmVzaFwiIGNvbXBsZXRlcy5cbiAgICovXG4gIGNvbXBsZXRlKCk7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1traXJieVBhZ2VUaXRsZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlVGl0bGVEaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2tpcmJ5UGFnZVN1YnRpdGxlXScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VTdWJ0aXRsZURpcmVjdGl2ZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdba2lyYnlQYWdlVG9vbGJhclRpdGxlXScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VUb29sYmFyVGl0bGVEaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2tpcmJ5UGFnZUFjdGlvbnNdJyxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZUFjdGlvbnNEaXJlY3RpdmUge1xuICBASW5wdXQoJ2tpcmJ5UGFnZUFjdGlvbnMnKSBjb25maWc6IHN0aWNreUNvbmZpZyB8IGZpeGVkQ29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0aWNreURlZmF1bHQgPSB0cnVlO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpeGVkRGVmYXVsdCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge31cblxuICBnZXQgaXNTdGlja3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnID8gKHRoaXMuY29uZmlnIGFzIHN0aWNreUNvbmZpZykuc3RpY2t5IDogdGhpcy5zdGlja3lEZWZhdWx0O1xuICB9XG5cbiAgZ2V0IGlzRml4ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnID8gKHRoaXMuY29uZmlnIGFzIGZpeGVkQ29uZmlnKS5maXhlZCA6IHRoaXMuZml4ZWREZWZhdWx0O1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1traXJieVBhZ2VDb250ZW50XScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VDb250ZW50RGlyZWN0aXZlIHtcbiAgQElucHV0KCdraXJieVBhZ2VDb250ZW50JykgY29uZmlnOiBmaXhlZENvbmZpZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG5cbiAgZ2V0IGlzRml4ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmZpeGVkO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1traXJieVBhZ2VTdGlja3lDb250ZW50XScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VTdGlja3lDb250ZW50RGlyZWN0aXZlIHt9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LXBhZ2UtcHJvZ3Jlc3MnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgYCxcbiAgc3R5bGVzOiBbJzpob3N0IHtkaXNwbGF5OiBmbGV4fSddLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlUHJvZ3Jlc3NDb21wb25lbnQgZXh0ZW5kcyBNb2RhbEVsZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyBUT0RPOiBGaW5kIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLCB3aGljaCBhbGlnbnMgd2l0aCBmdXR1cmUgcGFnZSBjb25maWd1cmF0aW9uIC8gY29uc3VtcHRpb25cbiAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiB3YXMgY2hvc2VuIG92ZXIgZXhwYW5kaW5nIGBtb3ZlQ2hpbGRgIG1ldGhvZCBpbiBjb21wb25lbnQgd3JhcHBlciB3aXRoIHlldCBhbm90aGVyIHNjZW5hcmlvXG4gIEBIb3N0QmluZGluZygnYXR0ci5zbG90Jykgc2xvdCA9ICdzdGFydCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcHJpdmF0ZSBtb2RhbFdyYXBwZXI6IE1vZGFsV3JhcHBlckNvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBtb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcjogTW9kYWxFbGVtZW50c0FkdmVydGlzZXIsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7XG4gICAgc3VwZXIoTW9kYWxFbGVtZW50VHlwZS5QQUdFX1BST0dSRVNTLCBlbGVtZW50UmVmLCBtb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcik7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RhbFdyYXBwZXIgJiYgdGhpcy5tb2RhbFdyYXBwZXIuY29uZmlnLmZsYXZvciA9PT0gJ2RyYXdlcicpIHtcbiAgICAgIHRoaXMuc2xvdCA9ICdlbmQnO1xuICAgIH1cbiAgfVxufVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktcGFnZS10aXRsZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlVGl0bGVDb21wb25lbnQgZXh0ZW5kcyBNb2RhbEVsZW1lbnRDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBAT3B0aW9uYWwoKSBtb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcjogTW9kYWxFbGVtZW50c0FkdmVydGlzZXJcbiAgKSB7XG4gICAgc3VwZXIoTW9kYWxFbGVtZW50VHlwZS5USVRMRSwgZWxlbWVudFJlZiwgbW9kYWxFbGVtZW50c0FkdmVydGlzZXIpO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LXBhZ2UtY29udGVudCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQ29udGVudENvbXBvbmVudCB7fVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1wYWdlLWFjdGlvbnMnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImJ1dHRvbltraXJieS1idXR0b25dXCI+PC9uZy1jb250ZW50PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQWN0aW9uc0NvbXBvbmVudCB7fVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIE9uQ2hhbmdlc1xue1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJ0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSB0b29sYmFyVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGVBbGlnbm1lbnQ6ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyA9ICdsZWZ0JztcbiAgQElucHV0KCkgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhpZGVCYWNrQnV0dG9uOiBib29sZWFuO1xuICBASW5wdXQoKSB0aXRsZU1heExpbmVzOiBudW1iZXI7XG4gIEBJbnB1dCgpIG1heFdpZHRoOiAnZGVmYXVsdCcgfCAnc3RhbmRhcmQnIHwgJ29wdGltaXplZCcgfCAnZnVsbCcgPSAnZGVmYXVsdCc7XG5cbiAgcHJpdmF0ZSBfdGFiQmFyQm90dG9tSGlkZGVuOiBib29sZWFuO1xuICBwdWJsaWMgZ2V0IHRhYkJhckJvdHRvbUhpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiQmFyQm90dG9tSGlkZGVuO1xuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGFiQmFyQm90dG9tSGlkZGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMudGFic0NvbXBvbmVudCkge1xuICAgICAgLy8gYXMgd2UgYXJlIHNldHRpbmcgYSBjbGFzcyBvbiB0YWJzLCB3ZSBuZWVkIHRoaXMgdG8gaGFwcGVuIGluIGEgc2VwYXJhdGUgY2QgY3ljbGVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMudGFic0NvbXBvbmVudC50YWJCYXJCb3R0b21IaWRkZW4gPSB2YWx1ZSkpO1xuICAgIH1cbiAgICB0aGlzLl90YWJCYXJCb3R0b21IaWRkZW4gPSB2YWx1ZTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8UHVsbFRvUmVmcmVzaEV2ZW50PigpO1xuICBAT3V0cHV0KCkgYmFja0J1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBAVmlld0NoaWxkKElvbkNvbnRlbnQsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgY29udGVudD86IElvbkNvbnRlbnQ7XG4gIEBWaWV3Q2hpbGQoSW9uQ29udGVudCwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBpb25Db250ZW50RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uQ29udGVudEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKElvbkhlYWRlciwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgaW9uSGVhZGVyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uSGVhZGVyRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoSW9uRm9vdGVyLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGlvbkZvb3RlckVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvbkZvb3RlckVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKElvblRvb2xiYXIsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgaW9uVG9vbGJhckVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvblRvb2xiYXJFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKElvbkJhY2tCdXR0b25EZWxlZ2F0ZSwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgYmFja0J1dHRvbkRlbGVnYXRlOiBJb25CYWNrQnV0dG9uRGVsZWdhdGU7XG4gIEBWaWV3Q2hpbGQoJ3BhZ2VUaXRsZScsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIHBhZ2VUaXRsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3RpY2t5Q29udGVudENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIHN0aWNreUNvbnRlbnRDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnc2ltcGxlVGl0bGVUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIHNpbXBsZVRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3NpbXBsZVRvb2xiYXJUaXRsZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgc2ltcGxlVG9vbGJhclRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoUGFnZVRvb2xiYXJUaXRsZURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIGN1c3RvbVRvb2xiYXJUaXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFBhZ2VUaXRsZURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBjdXN0b21UaXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFBhZ2VTdWJ0aXRsZURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBjdXN0b21TdWJ0aXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkcmVuKFBhZ2VBY3Rpb25zRGlyZWN0aXZlKVxuICBjdXN0b21BY3Rpb25zOiBRdWVyeUxpc3Q8UGFnZUFjdGlvbnNEaXJlY3RpdmU+O1xuICBAQ29udGVudENoaWxkcmVuKFBhZ2VDb250ZW50RGlyZWN0aXZlKVxuICBwcml2YXRlIGN1c3RvbUNvbnRlbnQ6IFF1ZXJ5TGlzdDxQYWdlQ29udGVudERpcmVjdGl2ZT47XG4gIEBDb250ZW50Q2hpbGQoUGFnZVN0aWNreUNvbnRlbnREaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSBzdGlja3lDb250ZW50UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKEhlYWRlckNvbXBvbmVudClcbiAgaGVhZGVyPzogSGVhZGVyQ29tcG9uZW50O1xuXG4gIGhhc0hlYWRlcjogYm9vbGVhbjtcbiAgaGFzUGFnZVRpdGxlOiBib29sZWFuO1xuICBoYXNQYWdlU3VidGl0bGU6IGJvb2xlYW47XG4gIHRvb2xiYXJUaXRsZVZpc2libGU6IGJvb2xlYW47XG4gIHRvb2xiYXJBY3Rpb25zVmlzaWJsZTogYm9vbGVhbjtcbiAgaXNDb250ZW50U2Nyb2xsZWQ6IGJvb2xlYW47XG4gIGlzU3RpY2t5Q29udGVudFBpbm5lZCA9IGZhbHNlO1xuXG4gIGZpdEhlYWRpbmdDb25maWc6IEZpdEhlYWRpbmdDb25maWc7XG5cbiAgdG9vbGJhclRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIGN1c3RvbUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcGFnZUFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgZml4ZWRDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIHN0aWNreUFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgZml4ZWRBY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIHN0aWNreUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UGFnZVN0aWNreUNvbnRlbnREaXJlY3RpdmU+O1xuICBoZWFkZXJBY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEhlYWRlckFjdGlvbnNEaXJlY3RpdmU+O1xuICB0aXRsZUFjdGlvbkljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8SGVhZGVyVGl0bGVBY3Rpb25JY29uRGlyZWN0aXZlPjtcbiAgaGVhZGVyVGl0bGVDbGljaz86IEV2ZW50RW1pdHRlcjxQb2ludGVyRXZlbnQ+O1xuICBoYXNJbnRlcmFjdGl2ZVRpdGxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB0aXRsZUludGVyc2VjdGlvbk9ic2VydmVyPzogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgc3RpY2t5QWN0aW9uc0ludGVyc2VjdGlvbk9ic2VydmVyPzogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgc3RpY2t5Q29udGVudEludGVyc2VjdGlvbk9ic2VydmVyPzogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgaXNPYnNlcnZpbmdUaXRsZSA9IGZhbHNlO1xuICBwcml2YXRlIGlzT2JzZXJ2aW5nQWN0aW9ucyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgaXNBY3RpdmU6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBuZ09uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGNvbnRlbnRTY3JvbGxlZCQ6IE9ic2VydmFibGU8U2Nyb2xsRGV0YWlsPjtcblxuICBwcml2YXRlIG5hdmlnYXRpb25TdGFydCQ6IE9ic2VydmFibGU8Um91dGVyRXZlbnQ+ID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgZmlsdGVyKChldmVudDogUm91dGVyRXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSxcbiAgICB0YWtlVW50aWwodGhpcy5uZ09uRGVzdHJveSQpXG4gICk7XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kJDogT2JzZXJ2YWJsZTxSb3V0ZXJFdmVudD4gPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICBmaWx0ZXIoKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICB0YWtlVW50aWwodGhpcy5uZ09uRGVzdHJveSQpXG4gICk7XG5cbiAgdG9vbGJhckFjdGlvbkdyb3VwSW5qZWN0b3I6IEluamVjdG9yO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIG1vZGFsTmF2aWdhdGlvblNlcnZpY2U6IE1vZGFsTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlclNlcnZpY2U6IFJlc2l6ZU9ic2VydmVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwcml2YXRlIHRhYnNDb21wb25lbnQ6IFRhYnNDb21wb25lbnQsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFBBR0VfQkFDS19CVVRUT05fT1ZFUlJJREUpXG4gICAgcHJpdmF0ZSBiYWNrQnV0dG9uT3ZlcnJpZGU6IFBhZ2VCYWNrQnV0dG9uT3ZlcnJpZGUsXG4gICAgQE9wdGlvbmFsKClcbiAgICBwcml2YXRlIHJvdXRlck91dGxldDogSW9uUm91dGVyT3V0bGV0LFxuICAgIEBPcHRpb25hbCgpXG4gICAgcHJpdmF0ZSBuYXZDdHJsOiBOYXZDb250cm9sbGVyXG4gICkge31cblxuICBwcml2YXRlIGNvbnRlbnRSZWFkeVByb21pc2U6IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgd2hlbkNvbnRlbnRSZWFkeSgpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFJlYWR5UHJvbWlzZSkge1xuICAgICAgdGhpcy5jb250ZW50UmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLmlvbkNvbnRlbnRFbGVtZW50LCAoZW50cnkpID0+IHtcbiAgICAgICAgICBpZiAoZW50cnkuY29udGVudFJlY3QuaGVpZ2h0ID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UudW5vYnNlcnZlKHRoaXMuaW9uQ29udGVudEVsZW1lbnQpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFJlYWR5UHJvbWlzZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlV3JhcHBlcigpO1xuICAgIHRoaXMuc2V0VG9vbGJhckJhY2tncm91bmRQYXJ0KCk7XG5cbiAgICBjb25zdCBhY3Rpb25Hcm91cENvbmZpZzogQWN0aW9uR3JvdXBDb25maWcgPSB7XG4gICAgICBpc0NvbmRlbnNlZDogdHJ1ZSxcbiAgICAgIG1heFZpc2libGVBY3Rpb25zOiAxLFxuICAgIH07XG4gICAgdGhpcy50b29sYmFyQWN0aW9uR3JvdXBJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEFDVElPTkdST1VQX0NPTkZJRyxcbiAgICAgICAgICB1c2VWYWx1ZTogYWN0aW9uR3JvdXBDb25maWcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRpdGxlTWF4TGluZXMpIHtcbiAgICAgIHRoaXMuZml0SGVhZGluZ0NvbmZpZyA9IHtcbiAgICAgICAgbWF4TGluZXM6IGNoYW5nZXMudGl0bGVNYXhMaW5lcy5jdXJyZW50VmFsdWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5zdWJ0aXRsZSAmJiAhY2hhbmdlcy5zdWJ0aXRsZS5pc0ZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnN1YnRpdGxlID0gY2hhbmdlcy50aXRsZS5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmhhc1BhZ2VTdWJ0aXRsZSA9IHRoaXMuc3VidGl0bGUgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuY29udGVudFNjcm9sbGVkJCA9IHRoaXMuY29udGVudC5pb25TY3JvbGwucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKGNvbnRlbnRTY3JvbGxEZWJvdW5jZVRpbWVJbk1TKSxcbiAgICAgICAgbWFwKChldmVudCkgPT4gZXZlbnQuZGV0YWlsKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdPbkRlc3Ryb3kkKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jb250ZW50U2Nyb2xsZWQkLnN1YnNjcmliZSgoc2Nyb2xsSW5mbzogU2Nyb2xsRGV0YWlsKSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxJbmZvLnNjcm9sbFRvcCA+IGNvbnRlbnRTY3JvbGxlZE9mZnNldEluUGl4ZWxzICE9PSB0aGlzLmlzQ29udGVudFNjcm9sbGVkKSB7XG4gICAgICAgICAgdGhpcy5pc0NvbnRlbnRTY3JvbGxlZCA9ICF0aGlzLmlzQ29udGVudFNjcm9sbGVkO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRoaXMgaW5zdGFuY2UgaGFzIG9ic2VydmVkIGEgcGFnZSBlbnRlciBzbyByZWdpc3RlciB0aGUgY29ycmVjdCB1cmwgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICB0aGlzLnVybCA9IHRoaXMucm91dGVyLnVybDtcbiAgICB0aGlzLm9uRW50ZXIoKTtcblxuICAgIC8vIFdhdGNoIG5hdmlnYXRpb24gZXZlbnRzIGZvciBwYWdlIGVudGVyIGFuZCBsZWF2ZVxuICAgIHRoaXMubmF2aWdhdGlvblN0YXJ0JC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5nZXRQYXRobmFtZShldmVudC51cmwpICE9PSB0aGlzLmdldFBhdGhuYW1lKHRoaXMudXJsKSAmJlxuICAgICAgICAhdGhpcy5tb2RhbE5hdmlnYXRpb25TZXJ2aWNlLmlzTW9kYWxSb3V0ZSh0aGlzLnVybCkgJiZcbiAgICAgICAgIXRoaXMubW9kYWxOYXZpZ2F0aW9uU2VydmljZS5pc01vZGFsUm91dGUoZXZlbnQudXJsKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMub25MZWF2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5kJC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XG4gICAgICBpZiAodGhpcy5nZXRQYXRobmFtZShldmVudC51cmxBZnRlclJlZGlyZWN0cykgPT09IHRoaXMuZ2V0UGF0aG5hbWUodGhpcy51cmwpKSB7XG4gICAgICAgIHRoaXMub25FbnRlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5pbnRlcmNlcHRCYWNrQnV0dG9uQ2xpY2tzU2V0dXAoKTtcbiAgICB0aGlzLmluaXRpYWxpemVTdGlja3lJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUhlYWRlcigpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVRpdGxlKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQWN0aW9ucygpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRlbnQoKTtcbiAgICB0aGlzLmluaXRpYWxpemVTdGlja3lDb250ZW50KCk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nT25EZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5uZ09uRGVzdHJveSQuY29tcGxldGUoKTtcblxuICAgIHRoaXMudGl0bGVJbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuc3RpY2t5QWN0aW9uc0ludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5zdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIGRlbGVnYXRlUmVmcmVzaEV2ZW50KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2guZW1pdCh7XG4gICAgICBjb21wbGV0ZTogZXZlbnQudGFyZ2V0LmNvbXBsZXRlLmJpbmQoZXZlbnQudGFyZ2V0KSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldE1heFdpZHRoQ2xhc3NlcygpIHtcbiAgICBpZiAoIXRoaXMubWF4V2lkdGgpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4V2lkdGggPT09ICdkZWZhdWx0Jykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gYG1heC13aWR0aC0ke3RoaXMubWF4V2lkdGh9YDtcbiAgfVxuXG4gIG9uVGl0bGVDbGljayhldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgdGhpcy5oZWFkZXJUaXRsZUNsaWNrPy5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlV3JhcHBlcigpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQocGFyZW50LCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChwYXJlbnQsIHRoaXMuaW9uSGVhZGVyRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgdGhpcy5pb25Gb290ZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUb29sYmFyQmFja2dyb3VuZFBhcnQoKSB7XG4gICAgLy8gRW5zdXJlIGlvbi10b29sYmFyIGN1c3RvbSBlbGVtZW50IGhhcyBiZWVuIGRlZmluZWQgKHByaW1hcmlseSB3aGVuIHRlc3RpbmcsIGJ1dCBkb2Vzbid0IGh1cnQpOlxuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKHRoaXMuaW9uVG9vbGJhckVsZW1lbnQubmF0aXZlRWxlbWVudC5sb2NhbE5hbWUpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5pb25Ub29sYmFyRWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbXBvbmVudE9uUmVhZHkoKS50aGVuKCh0b29sYmFyKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvb2xiYXJCYWNrZ3JvdW5kID0gdG9vbGJhci5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy50b29sYmFyLWJhY2tncm91bmQnKTtcbiAgICAgICAgaWYgKHRvb2xiYXJCYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodG9vbGJhckJhY2tncm91bmQsICdwYXJ0JywgJ2JhY2tncm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uRW50ZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHJldHVybjtcbiAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMuZW50ZXIuZW1pdCgpO1xuXG4gICAgdGhpcy5vYnNlcnZlVGl0bGUoKTtcbiAgICB0aGlzLm9ic2VydmVBY3Rpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIG9uTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKSByZXR1cm47XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5sZWF2ZS5lbWl0KCk7XG5cbiAgICB0aGlzLnVub2JzZXJ2ZVRpdGxlKCk7XG4gICAgdGhpcy51bm9ic2VydmVBY3Rpb25zKCk7XG5cbiAgICBpZiAodGhpcy50YWJCYXJCb3R0b21IaWRkZW4gJiYgdGhpcy50YWJzQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLnRhYnNDb21wb25lbnQudGFiQmFyQm90dG9tSGlkZGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcmNlcHRCYWNrQnV0dG9uQ2xpY2tzU2V0dXAoKSB7XG4gICAgaWYgKHRoaXMuYmFja0J1dHRvbk92ZXJyaWRlKSB7XG4gICAgICB0aGlzLmJhY2tCdXR0b25EZWxlZ2F0ZS5vbkNsaWNrID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJhY2tCdXR0b25PdmVycmlkZS5uYXZpZ2F0ZUJhY2sodGhpcy5yb3V0ZXJPdXRsZXQsIHRoaXMubmF2Q3RybCwgdGhpcy5kZWZhdWx0QmFja0hyZWYpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJbnRlcmNlcHQgYmFjay1idXR0b24gY2xpY2sgZXZlbnRzLCBkZWZhdWx0aW5nIHRvIHRoZSBidWlsdC1pbiBjbGljay1oYW5kbGVyLlxuICAgIGlmICh0aGlzLmJhY2tCdXR0b25DbGljay5vYnNlcnZlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmJhY2tCdXR0b25DbGlja1xuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ09uRGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKHRoaXMuYmFja0J1dHRvbkRlbGVnYXRlLm9uQ2xpY2suYmluZCh0aGlzLmJhY2tCdXR0b25EZWxlZ2F0ZSkpO1xuICAgIH1cbiAgICB0aGlzLmJhY2tCdXR0b25EZWxlZ2F0ZS5vbkNsaWNrID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5iYWNrQnV0dG9uQ2xpY2suZW1pdChldmVudCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0aWNreUludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuICAgIGlmICh0aGlzLnN0aWNreUNvbnRlbnRUZW1wbGF0ZSkge1xuICAgICAgLy8gU3RpY2t5IGNvbnRlbnQgcHJlc2VudCAtIHN0YXJ0IG9ic2VydmluZyBmb3Igc3RpY2tpbmVzc1xuICAgICAgaWYgKCF0aGlzLnN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICAgICAgICB0aGlzLnN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlciA9IHRoaXMuY3JlYXRlU3RpY2t5Q29udGVudEludGVyc2VjdGlvbk9ic2VydmVyKCk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnN0aWNreUNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVIZWFkZXIoKSB7XG4gICAgaWYgKHRoaXMuaGFzSGVhZGVyID09PSB1bmRlZmluZWQgJiYgISF0aGlzLmhlYWRlcikge1xuICAgICAgdGhpcy5oYXNIZWFkZXIgPSB0cnVlO1xuICAgICAgLy8gSGVhZGVyIGNvdWxkIGxhdGVyIGJlIHJlbW92ZWQgZnJvbSBET00gKGUuZy4gaW4gdmlydHVhbCBzY3JvbGxpbmcgc2NlbmFyaW9zKSxcbiAgICAgIC8vIHNvIHN0b3JlIGEgcmVmZXJlbmNlIHRvIGBoZWFkZXIudGl0bGVBY3Rpb25JY29uVGVtcGxhdGVgIGFuZCBgaGVhZGVyLnRpdGxlQ2xpY2tgOlxuICAgICAgdGhpcy50aXRsZUFjdGlvbkljb25UZW1wbGF0ZSA9IHRoaXMuaGVhZGVyLnRpdGxlQWN0aW9uSWNvblRlbXBsYXRlO1xuICAgICAgaWYgKHRoaXMuaGVhZGVyLnRpdGxlQ2xpY2sub2JzZXJ2ZWQpIHtcbiAgICAgICAgdGhpcy5oYXNJbnRlcmFjdGl2ZVRpdGxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oZWFkZXJUaXRsZUNsaWNrID0gdGhpcy5oZWFkZXIudGl0bGVDbGljaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUaXRsZSgpIHtcbiAgICBpZiAodGhpcy5oYXNIZWFkZXIgJiYgdGhpcy5pc09ic2VydmluZ1RpdGxlICYmICF0aGlzLmhlYWRlcj8udGl0bGVFbGVtZW50KSB7XG4gICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IG9ic2VydmluZyB0aGUgaGVhZGVyJ3MgdGl0bGUgZWxlbWVudCwgYnV0IGl0J3Mgbm8gbG9uZ2VyIHByZXNlbnQsXG4gICAgICAvLyBpdCBtZWFucyBpdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gRE9NIChlLmcuIGluIHZpcnR1YWwgc2Nyb2xsaW5nIHNjZW5hcmlvcykuXG4gICAgICAvLyBGbGlwIG9ic2VydmluZyBmbGFnOlxuICAgICAgdGhpcy5pc09ic2VydmluZ1RpdGxlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1BhZ2VUaXRsZSkge1xuICAgICAgaWYgKCF0aGlzLmlzT2JzZXJ2aW5nVGl0bGUgJiYgISF0aGlzLmhlYWRlcj8udGl0bGVFbGVtZW50KSB7XG4gICAgICAgIC8vIEhlYWRlciBhbmQgdGl0bGUgZWxlbWVudCByZS1hdHRhY2hlZCB0byBET00gLSBvYnNlcnZlIHRpdGxlOlxuICAgICAgICB0aGlzLm9ic2VydmVUaXRsZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmVzIHJlc3Qgb2YgaW5pdGlhbGl6ZVRpdGxlKCkgd29uJ3QgcnVuLCBpZiBhbHJlYWR5IGluaXRpYWxpemVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oYXNQYWdlVGl0bGUgPVxuICAgICAgdGhpcy50aXRsZSAhPT0gdW5kZWZpbmVkIHx8ICEhdGhpcy5jdXN0b21UaXRsZVRlbXBsYXRlIHx8ICEhdGhpcy5oZWFkZXI/LnRpdGxlO1xuICAgIHRoaXMudG9vbGJhclRpdGxlVmlzaWJsZSA9ICF0aGlzLmhhc1BhZ2VUaXRsZTtcbiAgICB0aGlzLmhhc1BhZ2VTdWJ0aXRsZSA9IHRoaXMuc3VidGl0bGUgIT09IHVuZGVmaW5lZCB8fCAhIXRoaXMuY3VzdG9tU3VidGl0bGVUZW1wbGF0ZTtcbiAgICBpZiAodGhpcy5oZWFkZXI/LnRpdGxlICYmICF0aGlzLnRvb2xiYXJUaXRsZSkge1xuICAgICAgdGhpcy50b29sYmFyVGl0bGUgPSB0aGlzLmhlYWRlci50aXRsZTtcbiAgICB9XG5cbiAgICB0aGlzLm9ic2VydmVUaXRsZSgpO1xuXG4gICAgY29uc3QgZGVmYXVsdFRpdGxlVGVtcGxhdGUgPSB0aGlzLmN1c3RvbVRpdGxlVGVtcGxhdGUgfHwgdGhpcy5zaW1wbGVUaXRsZVRlbXBsYXRlO1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdGhpcy50b29sYmFyVGl0bGVUZW1wbGF0ZSA9IHRoaXMuY3VzdG9tVG9vbGJhclRpdGxlVGVtcGxhdGVcbiAgICAgID8gdGhpcy5jdXN0b21Ub29sYmFyVGl0bGVUZW1wbGF0ZVxuICAgICAgOiB0eXBlb2YgdGhpcy50b29sYmFyVGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgID8gdGhpcy5zaW1wbGVUb29sYmFyVGl0bGVUZW1wbGF0ZVxuICAgICAgICA6IGRlZmF1bHRUaXRsZVRlbXBsYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlVGl0bGUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc1BhZ2VUaXRsZSkge1xuICAgICAgLy8gTm90aGluZyB0byBvYnNlcnZlXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT2JzZXJ2aW5nVGl0bGUpIHtcbiAgICAgIC8vIEFscmVhZHkgb2JzZXJ2aW5nXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgYXJlIG5vdCBhY3R1YWxseSBvYnNlcnZpbmcgdGhlIHRpdGxlIHVudGlsIGFmdGVyIHRoZSBgd2hlbkNvbnRlbnRSZWFkeWAgcHJvbWlzZSBoYXMgcmVzb2x2ZWQsXG4gICAgLy8gYnV0IHNpbmNlIHdlJ3ZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBwYWdlIGhhcyBhIHRpdGxlIGluIHRoZSBndWFyZCBhYm92ZSxcbiAgICAvLyB3ZSdsbCAtIGVhZ2VybHkgLSBzZXQgdGhpcyBmbGFnIG5vdyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJ1bnMgb2YgdGhlIHJlc3Qgb2YgdGhpcyBtZXRob2Q6XG4gICAgdGhpcy5pc09ic2VydmluZ1RpdGxlID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy50aXRsZUludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLnRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgLy8gSW4gcmFyZSBzY2VuYXJpb3Mgd2UgZ2V0IG1vcmUgdGhhbiAxIGVudHJ5IC0gdXNlIHRoZSBsYXN0IG9uZTpcbiAgICAgICAgICBjb25zdCBsYXN0RW50cnkgPSBlbnRyaWVzW2VudHJpZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKGxhc3RFbnRyeSkge1xuICAgICAgICAgICAgY29uc3Qgc2hvd1Rvb2xiYXJUaXRsZSA9ICFsYXN0RW50cnkuaXNJbnRlcnNlY3Rpbmc7XG4gICAgICAgICAgICAvLyBPbmx5IGZsaXAgdGhlIGZsYWcgYW5kIHJ1biBDaGFuZ2UgRGV0ZWN0aW9uIHdoZW4gY2hhbmdlZDpcbiAgICAgICAgICAgIGlmIChzaG93VG9vbGJhclRpdGxlICE9PSB0aGlzLnRvb2xiYXJUaXRsZVZpc2libGUpIHtcbiAgICAgICAgICAgICAgdGhpcy50b29sYmFyVGl0bGVWaXNpYmxlID0gc2hvd1Rvb2xiYXJUaXRsZTtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IHJvb3Q6IHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJ1biBvdXRzaWRlIEFuZ3VsYXIgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAvLyBhbmQgLSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgLSBhbiBpbmZpbml0ZSBsb29wIHdoZW4gY2FsbGVkIHdpdGhpbiBuZ0FmdGVyQ29udGVudENoZWNrZWQ6XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMud2hlbkNvbnRlbnRSZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCB0aXRsZUVsZW1lbnRSZWYgPSB0aGlzLnBhZ2VUaXRsZSB8fCB0aGlzLmhlYWRlcj8udGl0bGVFbGVtZW50O1xuICAgICAgICBpZiAodGl0bGVFbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50aXRsZUludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGl0bGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdW5vYnNlcnZlVGl0bGUoKSB7XG4gICAgY29uc3QgdGl0bGVFbGVtZW50UmVmID0gdGhpcy5wYWdlVGl0bGUgfHwgdGhpcy5oZWFkZXI/LnRpdGxlRWxlbWVudDtcbiAgICBpZiAodGl0bGVFbGVtZW50UmVmKSB7XG4gICAgICB0aGlzLnRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LnVub2JzZXJ2ZSh0aXRsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuaXNPYnNlcnZpbmdUaXRsZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5oZWFkZXJBY3Rpb25zVGVtcGxhdGUgPT09IHVuZGVmaW5lZCAmJiAhIXRoaXMuaGVhZGVyKSB7XG4gICAgICB0aGlzLmhlYWRlckFjdGlvbnNUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyLmFjdGlvbnNUZW1wbGF0ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzSGVhZGVyICYmIHRoaXMuaXNPYnNlcnZpbmdBY3Rpb25zICYmICF0aGlzLmhlYWRlcj8uYWN0aW9uc0VsZW1lbnQpIHtcbiAgICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgb2JzZXJ2aW5nIHRoZSBoZWFkZXIncyBhY3Rpb25zIGVsZW1lbnQsIGJ1dCBpdCdzIG5vIGxvbmdlciBwcmVzZW50LFxuICAgICAgLy8gaXQgbWVhbnMgaXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIERPTSAoZS5nLiBpbiB2aXJ0dWFsIHNjcm9sbGluZyBzY2VuYXJpb3MpLlxuICAgICAgLy8gRmxpcCBvYnNlcnZpbmcgZmxhZzpcbiAgICAgIHRoaXMuaXNPYnNlcnZpbmdBY3Rpb25zID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5vYnNlcnZlQWN0aW9ucygpO1xuXG4gICAgdGhpcy5jdXN0b21BY3Rpb25zLmZvckVhY2goKHBhZ2VBY3Rpb24pID0+IHtcbiAgICAgIGlmIChwYWdlQWN0aW9uLmlzRml4ZWQpIHtcbiAgICAgICAgdGhpcy5maXhlZEFjdGlvbnNUZW1wbGF0ZSA9IHBhZ2VBY3Rpb24udGVtcGxhdGU7XG4gICAgICB9IGVsc2UgaWYgKHBhZ2VBY3Rpb24uaXNTdGlja3kpIHtcbiAgICAgICAgdGhpcy5zdGlja3lBY3Rpb25zVGVtcGxhdGUgPSBwYWdlQWN0aW9uLnRlbXBsYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYWdlQWN0aW9uc1RlbXBsYXRlID0gcGFnZUFjdGlvbi50ZW1wbGF0ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUFjdGlvbnMoKSB7XG4gICAgaWYgKCF0aGlzLmhlYWRlcj8uYWN0aW9uc0VsZW1lbnQpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gb2JzZXJ2ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzT2JzZXJ2aW5nQWN0aW9ucykge1xuICAgICAgLy8gQWxyZWFkeSBvYnNlcnZpbmdcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXZSBhcmUgbm90IGFjdHVhbGx5IG9ic2VydmluZyBhY3Rpb25zIHVudGlsIGFmdGVyIHRoZSBgd2hlbkNvbnRlbnRSZWFkeWAgcHJvbWlzZSBoYXMgcmVzb2x2ZWQsXG4gICAgLy8gYnV0IHNpbmNlIHdlJ3ZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZXJlJ3MgYW4gYWN0aW9ucyBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGd1YXJkIGFib3ZlLFxuICAgIC8vIHdlJ2xsIC0gZWFnZXJseSAtIHNldCB0aGlzIGZsYWcgbm93IHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcnVucyBvZiB0aGUgcmVzdCBvZiB0aGlzIG1ldGhvZDpcbiAgICB0aGlzLmlzT2JzZXJ2aW5nQWN0aW9ucyA9IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuc3RpY2t5QWN0aW9uc0ludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLnN0aWNreUFjdGlvbnNJbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAvLyBJbiByYXJlIHNjZW5hcmlvcyB3ZSBnZXQgbW9yZSB0aGFuIDEgZW50cnkgLSB1c2UgdGhlIGxhc3Qgb25lOlxuICAgICAgICAgIGNvbnN0IGxhc3RFbnRyeSA9IGVudHJpZXNbZW50cmllcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdEVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBzaG93VG9vbGJhckFjdGlvbnMgPSAhbGFzdEVudHJ5LmlzSW50ZXJzZWN0aW5nO1xuICAgICAgICAgICAgLy8gT25seSBmbGlwIHRoZSBmbGFnIGFuZCBydW4gQ2hhbmdlIERldGVjdGlvbiB3aGVuIGNoYW5nZWQ6XG4gICAgICAgICAgICBpZiAoc2hvd1Rvb2xiYXJBY3Rpb25zICE9PSB0aGlzLnRvb2xiYXJBY3Rpb25zVmlzaWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJBY3Rpb25zVmlzaWJsZSA9IHNob3dUb29sYmFyQWN0aW9ucztcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IHJvb3Q6IHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJ1biBvdXRzaWRlIEFuZ3VsYXIgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAvLyBhbmQgLSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgLSBhbiBpbmZpbml0ZSBsb29wIHdoZW4gY2FsbGVkIHdpdGhpbiBuZ0FmdGVyQ29udGVudENoZWNrZWQ6XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMud2hlbkNvbnRlbnRSZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oZWFkZXI/LmFjdGlvbnNFbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5zdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhlYWRlci5hY3Rpb25zRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVub2JzZXJ2ZUFjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaGVhZGVyPy5hY3Rpb25zRWxlbWVudCkge1xuICAgICAgdGhpcy5zdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LnVub2JzZXJ2ZSh0aGlzLmhlYWRlci5hY3Rpb25zRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5pc09ic2VydmluZ0FjdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbnRlbnQoKSB7XG4gICAgdGhpcy5jdXN0b21Db250ZW50LmZvckVhY2goKGNvbnRlbnQpID0+IHtcbiAgICAgIGlmIChjb250ZW50LmlzRml4ZWQpIHtcbiAgICAgICAgdGhpcy5maXhlZENvbnRlbnRUZW1wbGF0ZSA9IGNvbnRlbnQudGVtcGxhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1c3RvbUNvbnRlbnRUZW1wbGF0ZSA9IGNvbnRlbnQudGVtcGxhdGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVTdGlja3lDb250ZW50KCkge1xuICAgIHRoaXMuc3RpY2t5Q29udGVudFRlbXBsYXRlID0gdGhpcy5zdGlja3lDb250ZW50UmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9uczogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0ID0ge1xuICAgICAgcm9vdDogdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhyZXNob2xkOiAxLFxuICAgIH07XG5cbiAgICBjb25zdCBjYWxsYmFjazogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayA9IChlbnRyaWVzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N0aWNreUNvbnRlbnRQaW5uZWQgIT09ICFlbnRyaWVzWzBdLmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgIHRoaXMuaXNTdGlja3lDb250ZW50UGlubmVkID0gIXRoaXMuaXNTdGlja3lDb250ZW50UGlubmVkO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXRobmFtZSh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB1cmwuc3BsaXQoJz8nKVswXTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlib2FyZFdpbGxTaG93JywgWyckZXZlbnQnXSlcbiAgX29uS2V5Ym9hcmRXaWxsU2hvdyhpbmZvPzogeyBrZXlib2FyZEhlaWdodDogbnVtYmVyIH0pIHtcbiAgICBpZiAoaW5mbyAmJiBpbmZvLmtleWJvYXJkSGVpZ2h0KSB7XG4gICAgICB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICctLWtleWJvYXJkLW9mZnNldCcsXG4gICAgICAgIGAke2luZm8ua2V5Ym9hcmRIZWlnaHR9cHhgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlib2FyZFdpbGxIaWRlJylcbiAgX29uS2V5Ym9hcmRXaWxsSGlkZSgpIHtcbiAgICB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0ta2V5Ym9hcmQtb2Zmc2V0JywgJzBweCcpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihgd2luZG93OiR7c2VsZWN0ZWRUYWJDbGlja0V2ZW50fWApXG4gIF9vblNlbGVjdGVkVGFiQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgdGhpcy5jb250ZW50LnNjcm9sbFRvVG9wKEtpcmJ5QW5pbWF0aW9uLkR1cmF0aW9uLkxPTkcpO1xuICAgIH1cbiAgfVxufVxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhclxuICAgIFtjbGFzcy5jb250ZW50LXNjcm9sbGVkXT1cImlzQ29udGVudFNjcm9sbGVkXCJcbiAgICBbY2xhc3MuY29udGVudC1waW5uZWRdPVwiaXNTdGlja3lDb250ZW50UGlubmVkXCJcbiAgPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIDxpb24tYmFjay1idXR0b25cbiAgICAgICAgdGV4dD1cIlwiXG4gICAgICAgIFtkZWZhdWx0SHJlZl09XCJkZWZhdWx0QmFja0hyZWZcIlxuICAgICAgICBpY29uPVwiYXNzZXRzL2tpcmJ5L2ljb25zL3N2Zy9hcnJvdy1iYWNrLnN2Z1wiXG4gICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cImhpZGVCYWNrQnV0dG9uID8gJ2hpZGRlbicgOiBudWxsXCJcbiAgICAgID48L2lvbi1iYWNrLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICAgIDxpb24tdGl0bGUgW2NsYXNzLnNsaWRlLWFuZC1mYWRlLWluXT1cInRvb2xiYXJUaXRsZVZpc2libGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLXRpdGxlXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2NsYXNzLmNsaWNrYWJsZV09XCJoYXNJbnRlcmFjdGl2ZVRpdGxlXCJcbiAgICAgICAgICBbY2xhc3MuaGFzLWljb25dPVwiISF0aXRsZUFjdGlvbkljb25UZW1wbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uVGl0bGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGl0bGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aXRsZUFjdGlvbkljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2lvbi10aXRsZT5cbiAgICA8aW9uLWJ1dHRvbnNcbiAgICAgICpuZ0lmPVwiISFoZWFkZXJBY3Rpb25zVGVtcGxhdGVcIlxuICAgICAgY2xhc3M9XCJoaWRlXCJcbiAgICAgIHNsb3Q9XCJwcmltYXJ5XCJcbiAgICAgIFtjbGFzcy5mYWRlLWluXT1cInRvb2xiYXJBY3Rpb25zVmlzaWJsZVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckFjdGlvbnNUZW1wbGF0ZTsgaW5qZWN0b3I6IHRvb2xiYXJBY3Rpb25Hcm91cEluamVjdG9yXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2lvbi1idXR0b25zPlxuICAgIDxpb24tYnV0dG9ucyAqbmdJZj1cIiEhc3RpY2t5QWN0aW9uc1RlbXBsYXRlXCIgY2xhc3M9XCJsZWdhY3ktYWN0aW9uc1wiIHNsb3Q9XCJwcmltYXJ5XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RpY2t5QWN0aW9uc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgICA8aW9uLWJ1dHRvbnMgKm5nSWY9XCIhIWZpeGVkQWN0aW9uc1RlbXBsYXRlXCIgY2xhc3M9XCJsZWdhY3ktYWN0aW9uc1wiIHNsb3Q9XCJzZWNvbmRhcnlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaXhlZEFjdGlvbnNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBzY3JvbGxFdmVudHM9XCJ0cnVlXCIgZm9yY2VPdmVyc2Nyb2xsPVwiZmFsc2VcIiBbY2xhc3NdPVwiZ2V0TWF4V2lkdGhDbGFzc2VzKClcIj5cbiAgPGlvbi1yZWZyZXNoZXJcbiAgICAqbmdJZj1cInJlZnJlc2gub2JzZXJ2ZXJzLmxlbmd0aCA+IDBcIlxuICAgIChpb25SZWZyZXNoKT1cImRlbGVnYXRlUmVmcmVzaEV2ZW50KCRldmVudClcIlxuICAgIHNsb3Q9XCJmaXhlZFwiXG4gID5cbiAgICA8a2lyYnktc3Bpbm5lcj48L2tpcmJ5LXNwaW5uZXI+XG4gIDwvaW9uLXJlZnJlc2hlcj5cblxuICA8IS0tIFBhZ2UgaGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwicGFnZS1oZWFkZXItY29udGFpbmVyXCIgKm5nSWY9XCJoYXNQYWdlVGl0bGUgJiYgIWhhc0hlYWRlclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicGFnZS1oZWFkZXJcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAndGV4dC1jZW50ZXInOiB0aXRsZUFsaWdubWVudCA9PT0gJ2NlbnRlcicsXG4gICAgICAgICd0ZXh0LXJpZ2h0JzogdGl0bGVBbGlnbm1lbnQgPT09ICdyaWdodCdcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxkaXYgI3BhZ2VUaXRsZSBjbGFzcz1cInBhZ2UtdGl0bGVcIiBbY2xhc3MuaGFzLWFjdGlvbnNdPVwiISFwYWdlQWN0aW9uc1RlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVRpdGxlVGVtcGxhdGUgfHwgZGVmYXVsdFBhZ2VUaXRsZVRlbXBsYXRlXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlQWN0aW9uc1RlbXBsYXRlIHx8IGRlZmF1bHRQYWdlQWN0aW9uc1RlbXBsYXRlXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaGFzUGFnZVN1YnRpdGxlXCIgY2xhc3M9XCJwYWdlLXN1YnRpdGxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVN1YnRpdGxlVGVtcGxhdGUgfHwgZGVmYXVsdFBhZ2VTdWJ0aXRsZVRlbXBsYXRlXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwicGFnZS1oZWFkZXItY29udGFpbmVyXCIgKm5nSWY9XCJoYXNIZWFkZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJraXJieS1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDwhLS0gIFN0aWNreSBjb250ZW50IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RpY2t5Q29udGVudFRlbXBsYXRlXCI+XG4gICAgPGRpdlxuICAgICAgI3N0aWNreUNvbnRlbnRDb250YWluZXJcbiAgICAgIGNsYXNzPVwic3RpY2t5LWNvbnRlbnQtY29udGFpbmVyXCJcbiAgICAgIFtjbGFzcy5jb250ZW50LXBpbm5lZF09XCJpc1N0aWNreUNvbnRlbnRQaW5uZWRcIlxuICAgID5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGlja3lDb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIENvbnRlbnQgLS0+XG4gIDxkaXYgY2xhc3M9XCJjb250ZW50LWlubmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Db250ZW50VGVtcGxhdGUgfHwgZGVmYXVsdENvbnRlbnRUZW1wbGF0ZVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2IHNsb3Q9XCJmaXhlZFwiIGNsYXNzPVwiZml4ZWQtY29udGVudFwiICpuZ0lmPVwiZml4ZWRDb250ZW50VGVtcGxhdGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1pbm5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpeGVkQ29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9pb24tY29udGVudD5cblxuPGlvbi1mb290ZXI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImtpcmJ5LXBhZ2UtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuPC9pb24tZm9vdGVyPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRQYWdlVGl0bGVUZW1wbGF0ZT5cbiAgPGgxIFtraXJieUZpdEhlYWRpbmddPVwiZml0SGVhZGluZ0NvbmZpZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaW1wbGVUaXRsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvaDE+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFnZVN1YnRpdGxlVGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaW1wbGVTdWJ0aXRsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFnZUFjdGlvbnNUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2lyYnktcGFnZS1hY3Rpb25zXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29udGVudFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJraXJieS1wYWdlLWNvbnRlbnRcIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NpbXBsZVRpdGxlVGVtcGxhdGU+e3sgdGl0bGUgfX08L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzaW1wbGVTdWJ0aXRsZVRlbXBsYXRlPnt7IHN1YnRpdGxlIH19PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjc2ltcGxlVG9vbGJhclRpdGxlVGVtcGxhdGU+e3sgdG9vbGJhclRpdGxlIH19PC9uZy10ZW1wbGF0ZT5cbiJdfQ==
710
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbnN5c3RlbS9wYWdlL3NyYy9wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3BhZ2Uvc3JjL3BhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUlOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxHQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RGLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixnQkFB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O3VCQUFDLHlCQUF5QjtnQkFNdkMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLFVBQVUscUJBQXFCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFNraXBTZWxmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyLCBSb3V0ZXJFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBJb25CYWNrQnV0dG9uRGVsZWdhdGUsXG4gIElvbkNvbnRlbnQsXG4gIElvbkZvb3RlcixcbiAgSW9uSGVhZGVyLFxuICBJb25Sb3V0ZXJPdXRsZXQsXG4gIElvblRvb2xiYXIsXG4gIE5hdkNvbnRyb2xsZXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFNjcm9sbERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IHNlbGVjdGVkVGFiQ2xpY2tFdmVudCwgVGFic0NvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vdGFicyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEtpcmJ5QW5pbWF0aW9uIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9oZWxwZXJzJztcbmltcG9ydCB7XG4gIE1vZGFsRWxlbWVudENvbXBvbmVudCxcbiAgTW9kYWxFbGVtZW50c0FkdmVydGlzZXIsXG4gIE1vZGFsRWxlbWVudFR5cGUsXG4gIE1vZGFsTmF2aWdhdGlvblNlcnZpY2UsXG4gIE1vZGFsV3JhcHBlckNvbXBvbmVudCxcbn0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9tb2RhbCc7XG5pbXBvcnQgeyBGaXRIZWFkaW5nQ29uZmlnLCBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQge1xuICBIZWFkZXJBY3Rpb25zRGlyZWN0aXZlLFxuICBIZWFkZXJDb21wb25lbnQsXG4gIEhlYWRlclRpdGxlQWN0aW9uSWNvbkRpcmVjdGl2ZSxcbn0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9oZWFkZXInO1xuaW1wb3J0IHsgQUNUSU9OR1JPVVBfQ09ORklHLCBBY3Rpb25Hcm91cENvbmZpZyB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vYWN0aW9uLWdyb3VwJztcblxuLyoqXG4gKiBTcGVjaWZ5IHNjcm9sbCBldmVudCBkZWJvdW5jZSB0aW1lIGluIG1zIGFuZCBzY3JvbGxlZCBvZmZzZXQgZnJvbSB0b3AgaW4gcGl4ZWxzXG4gKi9cbmNvbnN0IGNvbnRlbnRTY3JvbGxEZWJvdW5jZVRpbWVJbk1TID0gMTA7XG5jb25zdCBjb250ZW50U2Nyb2xsZWRPZmZzZXRJblBpeGVscyA9IDQ7XG5cbnR5cGUgc3RpY2t5Q29uZmlnID0geyBzdGlja3k6IGJvb2xlYW4gfTtcbnR5cGUgZml4ZWRDb25maWcgPSB7IGZpeGVkOiBib29sZWFuIH07XG5cbmV4cG9ydCBjb25zdCBQQUdFX0JBQ0tfQlVUVE9OX09WRVJSSURFID0gbmV3IEluamVjdGlvblRva2VuPFBhZ2VCYWNrQnV0dG9uT3ZlcnJpZGU+KFxuICAncGFnZS1iYWNrLWJ1dHRvbi1vdmVycmlkZSdcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUJhY2tCdXR0b25PdmVycmlkZSB7XG4gIG5hdmlnYXRlQmFjazogKFxuICAgIHJvdXRlck91dGxldDogSW9uUm91dGVyT3V0bGV0LFxuICAgIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXIsXG4gICAgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBcInB1bGwtdG8tcmVmcmVzaFwiIGJlZ2lucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxsVG9SZWZyZXNoRXZlbnQge1xuICAvKipcbiAgICogSW52b2tlIHRoaXMgY2FsbGJhY2stbWV0aG9kIHdoZW4gYWN0aW9uIHRvIHBlcmZvcm0gdXBvbiBcInB1bGwtdG8tcmVmcmVzaFwiIGNvbXBsZXRlcy5cbiAgICovXG4gIGNvbXBsZXRlKCk7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1traXJieVBhZ2VUaXRsZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlVGl0bGVEaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2tpcmJ5UGFnZVN1YnRpdGxlXScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VTdWJ0aXRsZURpcmVjdGl2ZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdba2lyYnlQYWdlVG9vbGJhclRpdGxlXScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VUb29sYmFyVGl0bGVEaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2tpcmJ5UGFnZUFjdGlvbnNdJyxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZUFjdGlvbnNEaXJlY3RpdmUge1xuICBASW5wdXQoJ2tpcmJ5UGFnZUFjdGlvbnMnKSBjb25maWc6IHN0aWNreUNvbmZpZyB8IGZpeGVkQ29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0aWNreURlZmF1bHQgPSB0cnVlO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpeGVkRGVmYXVsdCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge31cblxuICBnZXQgaXNTdGlja3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnID8gKHRoaXMuY29uZmlnIGFzIHN0aWNreUNvbmZpZykuc3RpY2t5IDogdGhpcy5zdGlja3lEZWZhdWx0O1xuICB9XG5cbiAgZ2V0IGlzRml4ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnID8gKHRoaXMuY29uZmlnIGFzIGZpeGVkQ29uZmlnKS5maXhlZCA6IHRoaXMuZml4ZWREZWZhdWx0O1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1traXJieVBhZ2VDb250ZW50XScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VDb250ZW50RGlyZWN0aXZlIHtcbiAgQElucHV0KCdraXJieVBhZ2VDb250ZW50JykgY29uZmlnOiBmaXhlZENvbmZpZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG5cbiAgZ2V0IGlzRml4ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmZpeGVkO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1traXJieVBhZ2VTdGlja3lDb250ZW50XScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VTdGlja3lDb250ZW50RGlyZWN0aXZlIHt9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LXBhZ2UtcHJvZ3Jlc3MnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgYCxcbiAgc3R5bGVzOiBbJzpob3N0IHtkaXNwbGF5OiBmbGV4fSddLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlUHJvZ3Jlc3NDb21wb25lbnQgZXh0ZW5kcyBNb2RhbEVsZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyBUT0RPOiBGaW5kIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLCB3aGljaCBhbGlnbnMgd2l0aCBmdXR1cmUgcGFnZSBjb25maWd1cmF0aW9uIC8gY29uc3VtcHRpb25cbiAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiB3YXMgY2hvc2VuIG92ZXIgZXhwYW5kaW5nIGBtb3ZlQ2hpbGRgIG1ldGhvZCBpbiBjb21wb25lbnQgd3JhcHBlciB3aXRoIHlldCBhbm90aGVyIHNjZW5hcmlvXG4gIEBIb3N0QmluZGluZygnYXR0ci5zbG90Jykgc2xvdCA9ICdzdGFydCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcHJpdmF0ZSBtb2RhbFdyYXBwZXI6IE1vZGFsV3JhcHBlckNvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBtb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcjogTW9kYWxFbGVtZW50c0FkdmVydGlzZXIsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7XG4gICAgc3VwZXIoTW9kYWxFbGVtZW50VHlwZS5QQUdFX1BST0dSRVNTLCBlbGVtZW50UmVmLCBtb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcik7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RhbFdyYXBwZXIgJiYgdGhpcy5tb2RhbFdyYXBwZXIuY29uZmlnLmZsYXZvciA9PT0gJ2RyYXdlcicpIHtcbiAgICAgIHRoaXMuc2xvdCA9ICdlbmQnO1xuICAgIH1cbiAgfVxufVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktcGFnZS10aXRsZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlVGl0bGVDb21wb25lbnQgZXh0ZW5kcyBNb2RhbEVsZW1lbnRDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBAT3B0aW9uYWwoKSBtb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcjogTW9kYWxFbGVtZW50c0FkdmVydGlzZXJcbiAgKSB7XG4gICAgc3VwZXIoTW9kYWxFbGVtZW50VHlwZS5USVRMRSwgZWxlbWVudFJlZiwgbW9kYWxFbGVtZW50c0FkdmVydGlzZXIpO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LXBhZ2UtY29udGVudCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQ29udGVudENvbXBvbmVudCB7fVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1wYWdlLWFjdGlvbnMnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImJ1dHRvbltraXJieS1idXR0b25dXCI+PC9uZy1jb250ZW50PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQWN0aW9uc0NvbXBvbmVudCB7fVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIE9uQ2hhbmdlc1xue1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJ0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSB0b29sYmFyVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGVBbGlnbm1lbnQ6ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyA9ICdsZWZ0JztcbiAgQElucHV0KCkgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhpZGVCYWNrQnV0dG9uOiBib29sZWFuO1xuICBASW5wdXQoKSB0aXRsZU1heExpbmVzOiBudW1iZXI7XG4gIEBJbnB1dCgpIG1heFdpZHRoOiAnZGVmYXVsdCcgfCAnc3RhbmRhcmQnIHwgJ29wdGltaXplZCcgfCAnZnVsbCcgPSAnZGVmYXVsdCc7XG5cbiAgcHJpdmF0ZSBfdGFiQmFyQm90dG9tSGlkZGVuOiBib29sZWFuO1xuICBwdWJsaWMgZ2V0IHRhYkJhckJvdHRvbUhpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiQmFyQm90dG9tSGlkZGVuO1xuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGFiQmFyQm90dG9tSGlkZGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMudGFic0NvbXBvbmVudCkge1xuICAgICAgLy8gYXMgd2UgYXJlIHNldHRpbmcgYSBjbGFzcyBvbiB0YWJzLCB3ZSBuZWVkIHRoaXMgdG8gaGFwcGVuIGluIGEgc2VwYXJhdGUgY2QgY3ljbGVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMudGFic0NvbXBvbmVudC50YWJCYXJCb3R0b21IaWRkZW4gPSB2YWx1ZSkpO1xuICAgIH1cbiAgICB0aGlzLl90YWJCYXJCb3R0b21IaWRkZW4gPSB2YWx1ZTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8UHVsbFRvUmVmcmVzaEV2ZW50PigpO1xuICBAT3V0cHV0KCkgYmFja0J1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIHRvb2xiYXJUaXRsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxQb2ludGVyRXZlbnQ+KCk7XG5cbiAgQFZpZXdDaGlsZChJb25Db250ZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIGNvbnRlbnQ/OiBJb25Db250ZW50O1xuICBAVmlld0NoaWxkKElvbkNvbnRlbnQsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgaW9uQ29udGVudEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvbkNvbnRlbnRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChJb25IZWFkZXIsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGlvbkhlYWRlckVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvbkhlYWRlckVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKElvbkZvb3RlciwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBpb25Gb290ZXJFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJb25Gb290ZXJFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChJb25Ub29sYmFyLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGlvblRvb2xiYXJFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJb25Ub29sYmFyRWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZChJb25CYWNrQnV0dG9uRGVsZWdhdGUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcml2YXRlIGJhY2tCdXR0b25EZWxlZ2F0ZTogSW9uQmFja0J1dHRvbkRlbGVnYXRlO1xuICBAVmlld0NoaWxkKCdwYWdlVGl0bGUnLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBwYWdlVGl0bGU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3N0aWNreUNvbnRlbnRDb250YWluZXInLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBzdGlja3lDb250ZW50Q29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3NpbXBsZVRpdGxlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSBzaW1wbGVUaXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdzaW1wbGVUb29sYmFyVGl0bGVUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIHNpbXBsZVRvb2xiYXJUaXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFBhZ2VUb29sYmFyVGl0bGVEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSBjdXN0b21Ub29sYmFyVGl0bGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZChQYWdlVGl0bGVEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgY3VzdG9tVGl0bGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZChQYWdlU3VidGl0bGVEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgY3VzdG9tU3VidGl0bGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZHJlbihQYWdlQWN0aW9uc0RpcmVjdGl2ZSlcbiAgY3VzdG9tQWN0aW9uczogUXVlcnlMaXN0PFBhZ2VBY3Rpb25zRGlyZWN0aXZlPjtcbiAgQENvbnRlbnRDaGlsZHJlbihQYWdlQ29udGVudERpcmVjdGl2ZSlcbiAgcHJpdmF0ZSBjdXN0b21Db250ZW50OiBRdWVyeUxpc3Q8UGFnZUNvbnRlbnREaXJlY3RpdmU+O1xuICBAQ29udGVudENoaWxkKFBhZ2VTdGlja3lDb250ZW50RGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgc3RpY2t5Q29udGVudFJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZChIZWFkZXJDb21wb25lbnQpXG4gIGhlYWRlcj86IEhlYWRlckNvbXBvbmVudDtcblxuICBoYXNIZWFkZXI6IGJvb2xlYW47XG4gIGhhc1BhZ2VUaXRsZTogYm9vbGVhbjtcbiAgaGFzUGFnZVN1YnRpdGxlOiBib29sZWFuO1xuICB0b29sYmFyVGl0bGVWaXNpYmxlOiBib29sZWFuO1xuICB0b29sYmFyQWN0aW9uc1Zpc2libGU6IGJvb2xlYW47XG4gIGlzQ29udGVudFNjcm9sbGVkOiBib29sZWFuO1xuICBpc1N0aWNreUNvbnRlbnRQaW5uZWQgPSBmYWxzZTtcblxuICBmaXRIZWFkaW5nQ29uZmlnOiBGaXRIZWFkaW5nQ29uZmlnO1xuXG4gIHRvb2xiYXJUaXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBjdXN0b21Db250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIHBhZ2VBY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIGZpeGVkQ29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzdGlja3lBY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIGZpeGVkQWN0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzdGlja3lDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPFBhZ2VTdGlja3lDb250ZW50RGlyZWN0aXZlPjtcbiAgaGVhZGVyQWN0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIZWFkZXJBY3Rpb25zRGlyZWN0aXZlPjtcbiAgdGl0bGVBY3Rpb25JY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEhlYWRlclRpdGxlQWN0aW9uSWNvbkRpcmVjdGl2ZT47XG4gIGhhc0ludGVyYWN0aXZlVGl0bGUgPSBmYWxzZTtcblxuICBwcml2YXRlIHRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBpc09ic2VydmluZ1RpdGxlID0gZmFsc2U7XG4gIHByaXZhdGUgaXNPYnNlcnZpbmdBY3Rpb25zID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBpc0FjdGl2ZTogYm9vbGVhbjtcblxuICBwcml2YXRlIG5nT25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgY29udGVudFNjcm9sbGVkJDogT2JzZXJ2YWJsZTxTY3JvbGxEZXRhaWw+O1xuXG4gIHByaXZhdGUgbmF2aWdhdGlvblN0YXJ0JDogT2JzZXJ2YWJsZTxSb3V0ZXJFdmVudD4gPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICBmaWx0ZXIoKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpLFxuICAgIHRha2VVbnRpbCh0aGlzLm5nT25EZXN0cm95JClcbiAgKTtcblxuICBwcml2YXRlIG5hdmlnYXRpb25FbmQkOiBPYnNlcnZhYmxlPFJvdXRlckV2ZW50PiA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxuICAgIGZpbHRlcigoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgIHRha2VVbnRpbCh0aGlzLm5nT25EZXN0cm95JClcbiAgKTtcblxuICB0b29sYmFyQWN0aW9uR3JvdXBJbmplY3RvcjogSW5qZWN0b3I7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgbW9kYWxOYXZpZ2F0aW9uU2VydmljZTogTW9kYWxOYXZpZ2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyU2VydmljZTogUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgdGFic0NvbXBvbmVudDogVGFic0NvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoUEFHRV9CQUNLX0JVVFRPTl9PVkVSUklERSlcbiAgICBwcml2YXRlIGJhY2tCdXR0b25PdmVycmlkZTogUGFnZUJhY2tCdXR0b25PdmVycmlkZSxcbiAgICBAT3B0aW9uYWwoKVxuICAgIHByaXZhdGUgcm91dGVyT3V0bGV0OiBJb25Sb3V0ZXJPdXRsZXQsXG4gICAgQE9wdGlvbmFsKClcbiAgICBwcml2YXRlIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXJcbiAgKSB7fVxuXG4gIHByaXZhdGUgY29udGVudFJlYWR5UHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSB3aGVuQ29udGVudFJlYWR5KCkge1xuICAgIGlmICghdGhpcy5jb250ZW50UmVhZHlQcm9taXNlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRSZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS5vYnNlcnZlKHRoaXMuaW9uQ29udGVudEVsZW1lbnQsIChlbnRyeSkgPT4ge1xuICAgICAgICAgIGlmIChlbnRyeS5jb250ZW50UmVjdC5oZWlnaHQgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS51bm9ic2VydmUodGhpcy5pb25Db250ZW50RWxlbWVudCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb250ZW50UmVhZHlQcm9taXNlO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVXcmFwcGVyKCk7XG4gICAgdGhpcy5zZXRUb29sYmFyQmFja2dyb3VuZFBhcnQoKTtcblxuICAgIGNvbnN0IGFjdGlvbkdyb3VwQ29uZmlnOiBBY3Rpb25Hcm91cENvbmZpZyA9IHtcbiAgICAgIGlzQ29uZGVuc2VkOiB0cnVlLFxuICAgICAgbWF4VmlzaWJsZUFjdGlvbnM6IDEsXG4gICAgfTtcbiAgICB0aGlzLnRvb2xiYXJBY3Rpb25Hcm91cEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQUNUSU9OR1JPVVBfQ09ORklHLFxuICAgICAgICAgIHVzZVZhbHVlOiBhY3Rpb25Hcm91cENvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IsXG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMudGl0bGVNYXhMaW5lcykge1xuICAgICAgdGhpcy5maXRIZWFkaW5nQ29uZmlnID0ge1xuICAgICAgICBtYXhMaW5lczogY2hhbmdlcy50aXRsZU1heExpbmVzLmN1cnJlbnRWYWx1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnN1YnRpdGxlICYmICFjaGFuZ2VzLnN1YnRpdGxlLmlzRmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuc3VidGl0bGUgPSBjaGFuZ2VzLnRpdGxlLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMuaGFzUGFnZVN1YnRpdGxlID0gdGhpcy5zdWJ0aXRsZSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5jb250ZW50U2Nyb2xsZWQkID0gdGhpcy5jb250ZW50LmlvblNjcm9sbC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoY29udGVudFNjcm9sbERlYm91bmNlVGltZUluTVMpLFxuICAgICAgICBtYXAoKGV2ZW50KSA9PiBldmVudC5kZXRhaWwpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ09uRGVzdHJveSQpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmNvbnRlbnRTY3JvbGxlZCQuc3Vic2NyaWJlKChzY3JvbGxJbmZvOiBTY3JvbGxEZXRhaWwpID0+IHtcbiAgICAgICAgaWYgKHNjcm9sbEluZm8uc2Nyb2xsVG9wID4gY29udGVudFNjcm9sbGVkT2Zmc2V0SW5QaXhlbHMgIT09IHRoaXMuaXNDb250ZW50U2Nyb2xsZWQpIHtcbiAgICAgICAgICB0aGlzLmlzQ29udGVudFNjcm9sbGVkID0gIXRoaXMuaXNDb250ZW50U2Nyb2xsZWQ7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGhpcyBpbnN0YW5jZSBoYXMgb2JzZXJ2ZWQgYSBwYWdlIGVudGVyIHNvIHJlZ2lzdGVyIHRoZSBjb3JyZWN0IHVybCBmb3IgdGhpcyBpbnN0YW5jZVxuICAgIHRoaXMudXJsID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIHRoaXMub25FbnRlcigpO1xuXG4gICAgLy8gV2F0Y2ggbmF2aWdhdGlvbiBldmVudHMgZm9yIHBhZ2UgZW50ZXIgYW5kIGxlYXZlXG4gICAgdGhpcy5uYXZpZ2F0aW9uU3RhcnQkLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmdldFBhdGhuYW1lKGV2ZW50LnVybCkgIT09IHRoaXMuZ2V0UGF0aG5hbWUodGhpcy51cmwpICYmXG4gICAgICAgICF0aGlzLm1vZGFsTmF2aWdhdGlvblNlcnZpY2UuaXNNb2RhbFJvdXRlKHRoaXMudXJsKSAmJlxuICAgICAgICAhdGhpcy5tb2RhbE5hdmlnYXRpb25TZXJ2aWNlLmlzTW9kYWxSb3V0ZShldmVudC51cmwpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vbkxlYXZlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm5hdmlnYXRpb25FbmQkLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcbiAgICAgIGlmICh0aGlzLmdldFBhdGhuYW1lKGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzKSA9PT0gdGhpcy5nZXRQYXRobmFtZSh0aGlzLnVybCkpIHtcbiAgICAgICAgdGhpcy5vbkVudGVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmludGVyY2VwdEJhY2tCdXR0b25DbGlja3NTZXR1cCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVN0aWNreUludGVyc2VjdGlvbk9ic2VydmVyKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplSGVhZGVyKCk7XG4gICAgdGhpcy5pbml0aWFsaXplVGl0bGUoKTtcbiAgICB0aGlzLmluaXRpYWxpemVBY3Rpb25zKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQ29udGVudCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVN0aWNreUNvbnRlbnQoKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdPbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLm5nT25EZXN0cm95JC5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy50aXRsZUludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5zdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgZGVsZWdhdGVSZWZyZXNoRXZlbnQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgIGNvbXBsZXRlOiBldmVudC50YXJnZXQuY29tcGxldGUuYmluZChldmVudC50YXJnZXQpLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TWF4V2lkdGhDbGFzc2VzKCkge1xuICAgIGlmICghdGhpcy5tYXhXaWR0aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhXaWR0aCA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBgbWF4LXdpZHRoLSR7dGhpcy5tYXhXaWR0aH1gO1xuICB9XG5cbiAgb25UaXRsZUNsaWNrKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAodGhpcy50b29sYmFyVGl0bGVDbGljay5vYnNlcnZlZCkge1xuICAgICAgdGhpcy50b29sYmFyVGl0bGVDbGljay5lbWl0KGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXI/LnRpdGxlQ2xpY2suZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVXcmFwcGVyKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChwYXJlbnQsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgdGhpcy5pb25IZWFkZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50LCB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50LCB0aGlzLmlvbkZvb3RlckVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHNldFRvb2xiYXJCYWNrZ3JvdW5kUGFydCgpIHtcbiAgICAvLyBFbnN1cmUgaW9uLXRvb2xiYXIgY3VzdG9tIGVsZW1lbnQgaGFzIGJlZW4gZGVmaW5lZCAocHJpbWFyaWx5IHdoZW4gdGVzdGluZywgYnV0IGRvZXNuJ3QgaHVydCk6XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQodGhpcy5pb25Ub29sYmFyRWxlbWVudC5uYXRpdmVFbGVtZW50LmxvY2FsTmFtZSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmlvblRvb2xiYXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29tcG9uZW50T25SZWFkeSgpLnRoZW4oKHRvb2xiYXIpID0+IHtcbiAgICAgICAgY29uc3QgdG9vbGJhckJhY2tncm91bmQgPSB0b29sYmFyLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLnRvb2xiYXItYmFja2dyb3VuZCcpO1xuICAgICAgICBpZiAodG9vbGJhckJhY2tncm91bmQpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0b29sYmFyQmFja2dyb3VuZCwgJ3BhcnQnLCAnYmFja2dyb3VuZCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25FbnRlcigpIHtcbiAgICBpZiAodGhpcy5pc0FjdGl2ZSkgcmV0dXJuO1xuICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5lbnRlci5lbWl0KCk7XG5cbiAgICB0aGlzLm9ic2VydmVUaXRsZSgpO1xuICAgIHRoaXMub2JzZXJ2ZUFjdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgb25MZWF2ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNBY3RpdmUpIHJldHVybjtcbiAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cbiAgICB0aGlzLmxlYXZlLmVtaXQoKTtcblxuICAgIHRoaXMudW5vYnNlcnZlVGl0bGUoKTtcbiAgICB0aGlzLnVub2JzZXJ2ZUFjdGlvbnMoKTtcblxuICAgIGlmICh0aGlzLnRhYkJhckJvdHRvbUhpZGRlbiAmJiB0aGlzLnRhYnNDb21wb25lbnQpIHtcbiAgICAgIHRoaXMudGFic0NvbXBvbmVudC50YWJCYXJCb3R0b21IaWRkZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGludGVyY2VwdEJhY2tCdXR0b25DbGlja3NTZXR1cCgpIHtcbiAgICBpZiAodGhpcy5iYWNrQnV0dG9uT3ZlcnJpZGUpIHtcbiAgICAgIHRoaXMuYmFja0J1dHRvbkRlbGVnYXRlLm9uQ2xpY2sgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmFja0J1dHRvbk92ZXJyaWRlLm5hdmlnYXRlQmFjayh0aGlzLnJvdXRlck91dGxldCwgdGhpcy5uYXZDdHJsLCB0aGlzLmRlZmF1bHRCYWNrSHJlZik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEludGVyY2VwdCBiYWNrLWJ1dHRvbiBjbGljayBldmVudHMsIGRlZmF1bHRpbmcgdG8gdGhlIGJ1aWx0LWluIGNsaWNrLWhhbmRsZXIuXG4gICAgaWYgKHRoaXMuYmFja0J1dHRvbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuYmFja0J1dHRvbkNsaWNrXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nT25EZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUodGhpcy5iYWNrQnV0dG9uRGVsZWdhdGUub25DbGljay5iaW5kKHRoaXMuYmFja0J1dHRvbkRlbGVnYXRlKSk7XG4gICAgfVxuICAgIHRoaXMuYmFja0J1dHRvbkRlbGVnYXRlLm9uQ2xpY2sgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJhY2tCdXR0b25DbGljay5lbWl0KGV2ZW50KTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplU3RpY2t5SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgaWYgKHRoaXMuc3RpY2t5Q29udGVudFRlbXBsYXRlKSB7XG4gICAgICAvLyBTdGlja3kgY29udGVudCBwcmVzZW50IC0gc3RhcnQgb2JzZXJ2aW5nIGZvciBzdGlja2luZXNzXG4gICAgICBpZiAoIXRoaXMuc3RpY2t5Q29udGVudEludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuc3RpY2t5Q29udGVudEludGVyc2VjdGlvbk9ic2VydmVyID0gdGhpcy5jcmVhdGVTdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuc3RpY2t5Q29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUhlYWRlcigpIHtcbiAgICBpZiAodGhpcy5oYXNIZWFkZXIgPT09IHVuZGVmaW5lZCAmJiAhIXRoaXMuaGVhZGVyKSB7XG4gICAgICB0aGlzLmhhc0hlYWRlciA9IHRydWU7XG4gICAgICAvLyBIZWFkZXIgY291bGQgbGF0ZXIgYmUgcmVtb3ZlZCBmcm9tIERPTSAoZS5nLiBpbiB2aXJ0dWFsIHNjcm9sbGluZyBzY2VuYXJpb3MpLFxuICAgICAgLy8gc28gc3RvcmUgYSByZWZlcmVuY2UgdG8gYGhlYWRlci50aXRsZUFjdGlvbkljb25UZW1wbGF0ZWAgYW5kIGBoZWFkZXIudGl0bGVDbGlja2A6XG4gICAgICB0aGlzLnRpdGxlQWN0aW9uSWNvblRlbXBsYXRlID0gdGhpcy5oZWFkZXIudGl0bGVBY3Rpb25JY29uVGVtcGxhdGU7XG4gICAgICBpZiAodGhpcy5oZWFkZXIudGl0bGVDbGljay5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLmhhc0ludGVyYWN0aXZlVGl0bGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVRpdGxlKCkge1xuICAgIGlmICh0aGlzLmhhc0hlYWRlciAmJiB0aGlzLmlzT2JzZXJ2aW5nVGl0bGUgJiYgIXRoaXMuaGVhZGVyPy50aXRsZUVsZW1lbnQpIHtcbiAgICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgb2JzZXJ2aW5nIHRoZSBoZWFkZXIncyB0aXRsZSBlbGVtZW50LCBidXQgaXQncyBubyBsb25nZXIgcHJlc2VudCxcbiAgICAgIC8vIGl0IG1lYW5zIGl0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBET00gKGUuZy4gaW4gdmlydHVhbCBzY3JvbGxpbmcgc2NlbmFyaW9zKS5cbiAgICAgIC8vIEZsaXAgb2JzZXJ2aW5nIGZsYWc6XG4gICAgICB0aGlzLmlzT2JzZXJ2aW5nVGl0bGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzUGFnZVRpdGxlKSB7XG4gICAgICBpZiAoIXRoaXMuaXNPYnNlcnZpbmdUaXRsZSAmJiAhIXRoaXMuaGVhZGVyPy50aXRsZUVsZW1lbnQpIHtcbiAgICAgICAgLy8gSGVhZGVyIGFuZCB0aXRsZSBlbGVtZW50IHJlLWF0dGFjaGVkIHRvIERPTSAtIG9ic2VydmUgdGl0bGU6XG4gICAgICAgIHRoaXMub2JzZXJ2ZVRpdGxlKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZXMgcmVzdCBvZiBpbml0aWFsaXplVGl0bGUoKSB3b24ndCBydW4sIGlmIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhc1BhZ2VUaXRsZSA9XG4gICAgICB0aGlzLnRpdGxlICE9PSB1bmRlZmluZWQgfHwgISF0aGlzLmN1c3RvbVRpdGxlVGVtcGxhdGUgfHwgISF0aGlzLmhlYWRlcj8udGl0bGU7XG4gICAgdGhpcy50b29sYmFyVGl0bGVWaXNpYmxlID0gIXRoaXMuaGFzUGFnZVRpdGxlO1xuICAgIHRoaXMuaGFzUGFnZVN1YnRpdGxlID0gdGhpcy5zdWJ0aXRsZSAhPT0gdW5kZWZpbmVkIHx8ICEhdGhpcy5jdXN0b21TdWJ0aXRsZVRlbXBsYXRlO1xuICAgIGlmICh0aGlzLmhlYWRlcj8udGl0bGUgJiYgIXRoaXMudG9vbGJhclRpdGxlKSB7XG4gICAgICB0aGlzLnRvb2xiYXJUaXRsZSA9IHRoaXMuaGVhZGVyLnRpdGxlO1xuICAgIH1cblxuICAgIHRoaXMub2JzZXJ2ZVRpdGxlKCk7XG5cbiAgICBjb25zdCBkZWZhdWx0VGl0bGVUZW1wbGF0ZSA9IHRoaXMuY3VzdG9tVGl0bGVUZW1wbGF0ZSB8fCB0aGlzLnNpbXBsZVRpdGxlVGVtcGxhdGU7XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0aGlzLnRvb2xiYXJUaXRsZVRlbXBsYXRlID0gdGhpcy5jdXN0b21Ub29sYmFyVGl0bGVUZW1wbGF0ZVxuICAgICAgPyB0aGlzLmN1c3RvbVRvb2xiYXJUaXRsZVRlbXBsYXRlXG4gICAgICA6IHR5cGVvZiB0aGlzLnRvb2xiYXJUaXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyB0aGlzLnNpbXBsZVRvb2xiYXJUaXRsZVRlbXBsYXRlXG4gICAgICAgIDogZGVmYXVsdFRpdGxlVGVtcGxhdGU7XG5cbiAgICBpZiAodGhpcy50b29sYmFyVGl0bGVDbGljay5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5oYXNJbnRlcmFjdGl2ZVRpdGxlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVUaXRsZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzUGFnZVRpdGxlKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIG9ic2VydmVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNPYnNlcnZpbmdUaXRsZSkge1xuICAgICAgLy8gQWxyZWFkeSBvYnNlcnZpbmdcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXZSBhcmUgbm90IGFjdHVhbGx5IG9ic2VydmluZyB0aGUgdGl0bGUgdW50aWwgYWZ0ZXIgdGhlIGB3aGVuQ29udGVudFJlYWR5YCBwcm9taXNlIGhhcyByZXNvbHZlZCxcbiAgICAvLyBidXQgc2luY2Ugd2UndmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIHBhZ2UgaGFzIGEgdGl0bGUgaW4gdGhlIGd1YXJkIGFib3ZlLFxuICAgIC8vIHdlJ2xsIC0gZWFnZXJseSAtIHNldCB0aGlzIGZsYWcgbm93IHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcnVucyBvZiB0aGUgcmVzdCBvZiB0aGlzIG1ldGhvZDpcbiAgICB0aGlzLmlzT2JzZXJ2aW5nVGl0bGUgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLnRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMudGl0bGVJbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAvLyBJbiByYXJlIHNjZW5hcmlvcyB3ZSBnZXQgbW9yZSB0aGFuIDEgZW50cnkgLSB1c2UgdGhlIGxhc3Qgb25lOlxuICAgICAgICAgIGNvbnN0IGxhc3RFbnRyeSA9IGVudHJpZXNbZW50cmllcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdEVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBzaG93VG9vbGJhclRpdGxlID0gIWxhc3RFbnRyeS5pc0ludGVyc2VjdGluZztcbiAgICAgICAgICAgIC8vIE9ubHkgZmxpcCB0aGUgZmxhZyBhbmQgcnVuIENoYW5nZSBEZXRlY3Rpb24gd2hlbiBjaGFuZ2VkOlxuICAgICAgICAgICAgaWYgKHNob3dUb29sYmFyVGl0bGUgIT09IHRoaXMudG9vbGJhclRpdGxlVmlzaWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJUaXRsZVZpc2libGUgPSBzaG93VG9vbGJhclRpdGxlO1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgcm9vdDogdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50IH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUnVuIG91dHNpZGUgQW5ndWxhciB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHRyaWdnZXJpbmcgY2hhbmdlIGRldGVjdGlvblxuICAgIC8vIGFuZCAtIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyAtIGFuIGluZmluaXRlIGxvb3Agd2hlbiBjYWxsZWQgd2l0aGluIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy53aGVuQ29udGVudFJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpdGxlRWxlbWVudFJlZiA9IHRoaXMucGFnZVRpdGxlIHx8IHRoaXMuaGVhZGVyPy50aXRsZUVsZW1lbnQ7XG4gICAgICAgIGlmICh0aXRsZUVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aXRsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1bm9ic2VydmVUaXRsZSgpIHtcbiAgICBjb25zdCB0aXRsZUVsZW1lbnRSZWYgPSB0aGlzLnBhZ2VUaXRsZSB8fCB0aGlzLmhlYWRlcj8udGl0bGVFbGVtZW50O1xuICAgIGlmICh0aXRsZUVsZW1lbnRSZWYpIHtcbiAgICAgIHRoaXMudGl0bGVJbnRlcnNlY3Rpb25PYnNlcnZlcj8udW5vYnNlcnZlKHRpdGxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5pc09ic2VydmluZ1RpdGxlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVBY3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmhlYWRlckFjdGlvbnNUZW1wbGF0ZSA9PT0gdW5kZWZpbmVkICYmICEhdGhpcy5oZWFkZXIpIHtcbiAgICAgIHRoaXMuaGVhZGVyQWN0aW9uc1RlbXBsYXRlID0gdGhpcy5oZWFkZXIuYWN0aW9uc1RlbXBsYXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNIZWFkZXIgJiYgdGhpcy5pc09ic2VydmluZ0FjdGlvbnMgJiYgIXRoaXMuaGVhZGVyPy5hY3Rpb25zRWxlbWVudCkge1xuICAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSBvYnNlcnZpbmcgdGhlIGhlYWRlcidzIGFjdGlvbnMgZWxlbWVudCwgYnV0IGl0J3Mgbm8gbG9uZ2VyIHByZXNlbnQsXG4gICAgICAvLyBpdCBtZWFucyBpdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gRE9NIChlLmcuIGluIHZpcnR1YWwgc2Nyb2xsaW5nIHNjZW5hcmlvcykuXG4gICAgICAvLyBGbGlwIG9ic2VydmluZyBmbGFnOlxuICAgICAgdGhpcy5pc09ic2VydmluZ0FjdGlvbnMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLm9ic2VydmVBY3Rpb25zKCk7XG5cbiAgICB0aGlzLmN1c3RvbUFjdGlvbnMuZm9yRWFjaCgocGFnZUFjdGlvbikgPT4ge1xuICAgICAgaWYgKHBhZ2VBY3Rpb24uaXNGaXhlZCkge1xuICAgICAgICB0aGlzLmZpeGVkQWN0aW9uc1RlbXBsYXRlID0gcGFnZUFjdGlvbi50ZW1wbGF0ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFnZUFjdGlvbi5pc1N0aWNreSkge1xuICAgICAgICB0aGlzLnN0aWNreUFjdGlvbnNUZW1wbGF0ZSA9IHBhZ2VBY3Rpb24udGVtcGxhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhZ2VBY3Rpb25zVGVtcGxhdGUgPSBwYWdlQWN0aW9uLnRlbXBsYXRlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlQWN0aW9ucygpIHtcbiAgICBpZiAoIXRoaXMuaGVhZGVyPy5hY3Rpb25zRWxlbWVudCkge1xuICAgICAgLy8gTm90aGluZyB0byBvYnNlcnZlXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNPYnNlcnZpbmdBY3Rpb25zKSB7XG4gICAgICAvLyBBbHJlYWR5IG9ic2VydmluZ1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIGFyZSBub3QgYWN0dWFsbHkgb2JzZXJ2aW5nIGFjdGlvbnMgdW50aWwgYWZ0ZXIgdGhlIGB3aGVuQ29udGVudFJlYWR5YCBwcm9taXNlIGhhcyByZXNvbHZlZCxcbiAgICAvLyBidXQgc2luY2Ugd2UndmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlcmUncyBhbiBhY3Rpb25zIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgZ3VhcmQgYWJvdmUsXG4gICAgLy8gd2UnbGwgLSBlYWdlcmx5IC0gc2V0IHRoaXMgZmxhZyBub3cgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1ydW5zIG9mIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kOlxuICAgIHRoaXMuaXNPYnNlcnZpbmdBY3Rpb25zID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5zdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuc3RpY2t5QWN0aW9uc0ludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICAgIC8vIEluIHJhcmUgc2NlbmFyaW9zIHdlIGdldCBtb3JlIHRoYW4gMSBlbnRyeSAtIHVzZSB0aGUgbGFzdCBvbmU6XG4gICAgICAgICAgY29uc3QgbGFzdEVudHJ5ID0gZW50cmllc1tlbnRyaWVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0RW50cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNob3dUb29sYmFyQWN0aW9ucyA9ICFsYXN0RW50cnkuaXNJbnRlcnNlY3Rpbmc7XG4gICAgICAgICAgICAvLyBPbmx5IGZsaXAgdGhlIGZsYWcgYW5kIHJ1biBDaGFuZ2UgRGV0ZWN0aW9uIHdoZW4gY2hhbmdlZDpcbiAgICAgICAgICAgIGlmIChzaG93VG9vbGJhckFjdGlvbnMgIT09IHRoaXMudG9vbGJhckFjdGlvbnNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9vbGJhckFjdGlvbnNWaXNpYmxlID0gc2hvd1Rvb2xiYXJBY3Rpb25zO1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgcm9vdDogdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50IH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUnVuIG91dHNpZGUgQW5ndWxhciB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHRyaWdnZXJpbmcgY2hhbmdlIGRldGVjdGlvblxuICAgIC8vIGFuZCAtIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyAtIGFuIGluZmluaXRlIGxvb3Agd2hlbiBjYWxsZWQgd2l0aGluIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy53aGVuQ29udGVudFJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhlYWRlcj8uYWN0aW9uc0VsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnN0aWNreUFjdGlvbnNJbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuaGVhZGVyLmFjdGlvbnNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdW5vYnNlcnZlQWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5oZWFkZXI/LmFjdGlvbnNFbGVtZW50KSB7XG4gICAgICB0aGlzLnN0aWNreUFjdGlvbnNJbnRlcnNlY3Rpb25PYnNlcnZlcj8udW5vYnNlcnZlKHRoaXMuaGVhZGVyLmFjdGlvbnNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLmlzT2JzZXJ2aW5nQWN0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGVudCgpIHtcbiAgICB0aGlzLmN1c3RvbUNvbnRlbnQuZm9yRWFjaCgoY29udGVudCkgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQuaXNGaXhlZCkge1xuICAgICAgICB0aGlzLmZpeGVkQ29udGVudFRlbXBsYXRlID0gY29udGVudC50ZW1wbGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VzdG9tQ29udGVudFRlbXBsYXRlID0gY29udGVudC50ZW1wbGF0ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0aWNreUNvbnRlbnQoKSB7XG4gICAgdGhpcy5zdGlja3lDb250ZW50VGVtcGxhdGUgPSB0aGlzLnN0aWNreUNvbnRlbnRSZWY7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcbiAgICBjb25zdCBvcHRpb25zOiBJbnRlcnNlY3Rpb25PYnNlcnZlckluaXQgPSB7XG4gICAgICByb290OiB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGxiYWNrOiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrID0gKGVudHJpZXMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3RpY2t5Q29udGVudFBpbm5lZCAhPT0gIWVudHJpZXNbMF0uaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5pc1N0aWNreUNvbnRlbnRQaW5uZWQgPSAhdGhpcy5pc1N0aWNreUNvbnRlbnRQaW5uZWQ7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhdGhuYW1lKHVybDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHVybC5zcGxpdCgnPycpWzBdO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWJvYXJkV2lsbFNob3cnLCBbJyRldmVudCddKVxuICBfb25LZXlib2FyZFdpbGxTaG93KGluZm8/OiB7IGtleWJvYXJkSGVpZ2h0OiBudW1iZXIgfSkge1xuICAgIGlmIChpbmZvICYmIGluZm8ua2V5Ym9hcmRIZWlnaHQpIHtcbiAgICAgIHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0ta2V5Ym9hcmQtb2Zmc2V0JyxcbiAgICAgICAgYCR7aW5mby5rZXlib2FyZEhlaWdodH1weGBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWJvYXJkV2lsbEhpZGUnKVxuICBfb25LZXlib2FyZFdpbGxIaWRlKCkge1xuICAgIHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1rZXlib2FyZC1vZmZzZXQnLCAnMHB4Jyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKGB3aW5kb3c6JHtzZWxlY3RlZFRhYkNsaWNrRXZlbnR9YClcbiAgX29uU2VsZWN0ZWRUYWJDbGljaygpIHtcbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICB0aGlzLmNvbnRlbnQuc2Nyb2xsVG9Ub3AoS2lyYnlBbmltYXRpb24uRHVyYXRpb24uTE9ORyk7XG4gICAgfVxuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyXG4gICAgW2NsYXNzLmNvbnRlbnQtc2Nyb2xsZWRdPVwiaXNDb250ZW50U2Nyb2xsZWRcIlxuICAgIFtjbGFzcy5jb250ZW50LXBpbm5lZF09XCJpc1N0aWNreUNvbnRlbnRQaW5uZWRcIlxuICA+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1iYWNrLWJ1dHRvblxuICAgICAgICB0ZXh0PVwiXCJcbiAgICAgICAgW2RlZmF1bHRIcmVmXT1cImRlZmF1bHRCYWNrSHJlZlwiXG4gICAgICAgIGljb249XCJhc3NldHMva2lyYnkvaWNvbnMvc3ZnL2Fycm93LWJhY2suc3ZnXCJcbiAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiaGlkZUJhY2tCdXR0b24gPyAnaGlkZGVuJyA6IG51bGxcIlxuICAgICAgPjwvaW9uLWJhY2stYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPGlvbi10aXRsZSBbY2xhc3Muc2xpZGUtYW5kLWZhZGUtaW5dPVwidG9vbGJhclRpdGxlVmlzaWJsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItdGl0bGVcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbY2xhc3MuY2xpY2thYmxlXT1cImhhc0ludGVyYWN0aXZlVGl0bGVcIlxuICAgICAgICAgIFtjbGFzcy5oYXMtaWNvbl09XCIhIXRpdGxlQWN0aW9uSWNvblRlbXBsYXRlXCJcbiAgICAgICAgICAoY2xpY2spPVwib25UaXRsZUNsaWNrKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvb2xiYXJUaXRsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRpdGxlQWN0aW9uSWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLXRpdGxlPlxuICAgIDxpb24tYnV0dG9uc1xuICAgICAgKm5nSWY9XCIhIWhlYWRlckFjdGlvbnNUZW1wbGF0ZVwiXG4gICAgICBjbGFzcz1cImhpZGVcIlxuICAgICAgc2xvdD1cInByaW1hcnlcIlxuICAgICAgW2NsYXNzLmZhZGUtaW5dPVwidG9vbGJhckFjdGlvbnNWaXNpYmxlXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyQWN0aW9uc1RlbXBsYXRlOyBpbmplY3RvcjogdG9vbGJhckFjdGlvbkdyb3VwSW5qZWN0b3JcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPGlvbi1idXR0b25zICpuZ0lmPVwiISFzdGlja3lBY3Rpb25zVGVtcGxhdGVcIiBjbGFzcz1cImxlZ2FjeS1hY3Rpb25zXCIgc2xvdD1cInByaW1hcnlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGlja3lBY3Rpb25zVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2lvbi1idXR0b25zPlxuICAgIDxpb24tYnV0dG9ucyAqbmdJZj1cIiEhZml4ZWRBY3Rpb25zVGVtcGxhdGVcIiBjbGFzcz1cImxlZ2FjeS1hY3Rpb25zXCIgc2xvdD1cInNlY29uZGFyeVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpeGVkQWN0aW9uc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50IHNjcm9sbEV2ZW50cz1cInRydWVcIiBmb3JjZU92ZXJzY3JvbGw9XCJmYWxzZVwiIFtjbGFzc109XCJnZXRNYXhXaWR0aENsYXNzZXMoKVwiPlxuICA8aW9uLXJlZnJlc2hlclxuICAgICpuZ0lmPVwicmVmcmVzaC5vYnNlcnZlcnMubGVuZ3RoID4gMFwiXG4gICAgKGlvblJlZnJlc2gpPVwiZGVsZWdhdGVSZWZyZXNoRXZlbnQoJGV2ZW50KVwiXG4gICAgc2xvdD1cImZpeGVkXCJcbiAgPlxuICAgIDxraXJieS1zcGlubmVyPjwva2lyYnktc3Bpbm5lcj5cbiAgPC9pb24tcmVmcmVzaGVyPlxuXG4gIDwhLS0gUGFnZSBoZWFkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJwYWdlLWhlYWRlci1jb250YWluZXJcIiAqbmdJZj1cImhhc1BhZ2VUaXRsZSAmJiAhaGFzSGVhZGVyXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwYWdlLWhlYWRlclwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICd0ZXh0LWNlbnRlcic6IHRpdGxlQWxpZ25tZW50ID09PSAnY2VudGVyJyxcbiAgICAgICAgJ3RleHQtcmlnaHQnOiB0aXRsZUFsaWdubWVudCA9PT0gJ3JpZ2h0J1xuICAgICAgfVwiXG4gICAgPlxuICAgICAgPGRpdiAjcGFnZVRpdGxlIGNsYXNzPVwicGFnZS10aXRsZVwiIFtjbGFzcy5oYXMtYWN0aW9uc109XCIhIXBhZ2VBY3Rpb25zVGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tVGl0bGVUZW1wbGF0ZSB8fCBkZWZhdWx0UGFnZVRpdGxlVGVtcGxhdGVcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VBY3Rpb25zVGVtcGxhdGUgfHwgZGVmYXVsdFBhZ2VBY3Rpb25zVGVtcGxhdGVcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJoYXNQYWdlU3VidGl0bGVcIiBjbGFzcz1cInBhZ2Utc3VidGl0bGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU3VidGl0bGVUZW1wbGF0ZSB8fCBkZWZhdWx0UGFnZVN1YnRpdGxlVGVtcGxhdGVcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJwYWdlLWhlYWRlci1jb250YWluZXJcIiAqbmdJZj1cImhhc0hlYWRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImtpcmJ5LWhlYWRlclwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbiAgPCEtLSAgU3RpY2t5IGNvbnRlbnQgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGlja3lDb250ZW50VGVtcGxhdGVcIj5cbiAgICA8ZGl2XG4gICAgICAjc3RpY2t5Q29udGVudENvbnRhaW5lclxuICAgICAgY2xhc3M9XCJzdGlja3ktY29udGVudC1jb250YWluZXJcIlxuICAgICAgW2NsYXNzLmNvbnRlbnQtcGlubmVkXT1cImlzU3RpY2t5Q29udGVudFBpbm5lZFwiXG4gICAgPlxuICAgICAgPGRpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0aWNreUNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gQ29udGVudCAtLT5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnQtaW5uZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUNvbnRlbnRUZW1wbGF0ZSB8fCBkZWZhdWx0Q29udGVudFRlbXBsYXRlXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXYgc2xvdD1cImZpeGVkXCIgY2xhc3M9XCJmaXhlZC1jb250ZW50XCIgKm5nSWY9XCJmaXhlZENvbnRlbnRUZW1wbGF0ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWlubmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZml4ZWRDb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2lvbi1jb250ZW50PlxuXG48aW9uLWZvb3Rlcj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2lyYnktcGFnZS1mb290ZXJcIj48L25nLWNvbnRlbnQ+XG48L2lvbi1mb290ZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBhZ2VUaXRsZVRlbXBsYXRlPlxuICA8aDEgW2tpcmJ5Rml0SGVhZGluZ109XCJmaXRIZWFkaW5nQ29uZmlnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpbXBsZVRpdGxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9oMT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRQYWdlU3VidGl0bGVUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpbXBsZVN1YnRpdGxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRQYWdlQWN0aW9uc1RlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJraXJieS1wYWdlLWFjdGlvbnNcIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb250ZW50VGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImtpcmJ5LXBhZ2UtY29udGVudFwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2ltcGxlVGl0bGVUZW1wbGF0ZT57eyB0aXRsZSB9fTwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3NpbXBsZVN1YnRpdGxlVGVtcGxhdGU+e3sgc3VidGl0bGUgfX08L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzaW1wbGVUb29sYmFyVGl0bGVUZW1wbGF0ZT57eyB0b29sYmFyVGl0bGUgfX08L25nLXRlbXBsYXRlPlxuIl19
@@ -92,3 +92,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
92
92
 
93
93
  export { AccordionDirective, AccordionItemComponent, AccordionModule };
94
94
  //# sourceMappingURL=kirbydesign-designsystem-accordion.mjs.map
95
+ //# sourceMappingURL=kirbydesign-designsystem-accordion.mjs.map
@@ -122,3 +122,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
122
122
 
123
123
  export { ACTIONGROUP_CONFIG, ActionGroupComponent };
124
124
  //# sourceMappingURL=kirbydesign-designsystem-action-group.mjs.map
125
+ //# sourceMappingURL=kirbydesign-designsystem-action-group.mjs.map
@@ -148,3 +148,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
148
148
 
149
149
  export { AlertExperimentalComponent, AlertExperimentalController, AlertExperimentalModule };
150
150
  //# sourceMappingURL=kirbydesign-designsystem-alert-experimental.mjs.map
151
+ //# sourceMappingURL=kirbydesign-designsystem-alert-experimental.mjs.map
@@ -58,3 +58,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
58
58
 
59
59
  export { AvatarComponent, AvatarSize };
60
60
  //# sourceMappingURL=kirbydesign-designsystem-avatar.mjs.map
61
+ //# sourceMappingURL=kirbydesign-designsystem-avatar.mjs.map
@@ -164,3 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
164
164
 
165
165
  export { ButtonComponent, ButtonSize };
166
166
  //# sourceMappingURL=kirbydesign-designsystem-button.mjs.map
167
+ //# sourceMappingURL=kirbydesign-designsystem-button.mjs.map
@@ -523,3 +523,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
523
523
 
524
524
  export { CalendarComponent };
525
525
  //# sourceMappingURL=kirbydesign-designsystem-calendar.mjs.map
526
+ //# sourceMappingURL=kirbydesign-designsystem-calendar.mjs.map
@@ -222,3 +222,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
222
222
 
223
223
  export { CardAsButtonDirective, CardComponent, CardFooterComponent, CardHeaderComponent, CardModule };
224
224
  //# sourceMappingURL=kirbydesign-designsystem-card.mjs.map
225
+ //# sourceMappingURL=kirbydesign-designsystem-card.mjs.map
@@ -1516,3 +1516,4 @@ const getChartStockShortDateTime = (dateInMiliseconds, locale) => {
1516
1516
 
1517
1517
  export { BarChartConfig, BaseChartComponent, ChartComponent, ChartConfigService, ChartJSService, ChartsModule, StockChartComponent, StockChartConfig, TEST_CHART_ANNOTATIONS_CONFIG, TEST_CHART_TYPES_CONFIG, isNumberArray };
1518
1518
  //# sourceMappingURL=kirbydesign-designsystem-chart.mjs.map
1519
+ //# sourceMappingURL=kirbydesign-designsystem-chart.mjs.map
@@ -75,3 +75,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
75
75
 
76
76
  export { CheckboxComponent };
77
77
  //# sourceMappingURL=kirbydesign-designsystem-checkbox.mjs.map
78
+ //# sourceMappingURL=kirbydesign-designsystem-checkbox.mjs.map
@@ -70,3 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
70
70
 
71
71
  export { DataTableModule, TableComponent, TableRowComponent };
72
72
  //# sourceMappingURL=kirbydesign-designsystem-data-table.mjs.map
73
+ //# sourceMappingURL=kirbydesign-designsystem-data-table.mjs.map