@eui/components 18.0.0-next.63 → 18.0.0-next.64

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 (143) hide show
  1. package/docs/components/CollapsedBreadcrumbComponent.html +1 -1
  2. package/docs/components/EuiAppSidebarHeaderUserProfileComponent.html +1 -1
  3. package/docs/components/EuiAppTopMessageComponent.html +1 -1
  4. package/docs/components/EuiBreadcrumbItemComponent.html +1 -1
  5. package/docs/components/EuiCardFooterMenuContentComponent.html +1 -1
  6. package/docs/components/EuiCardHeaderComponent.html +1 -1
  7. package/docs/components/EuiChipListComponent.html +1 -1
  8. package/docs/components/EuiDialogContainerComponent.html +1 -1
  9. package/docs/components/EuiDiscussionThreadItemComponent.html +1 -1
  10. package/docs/components/EuiDropdownItemComponent.html +1 -1
  11. package/docs/components/EuiEditorComponent.html +1 -1
  12. package/docs/components/EuiFilePreviewComponent.html +1 -1
  13. package/docs/components/EuiGrowlComponent.html +1 -1
  14. package/docs/components/EuiIconButtonExpanderComponent.html +1 -1
  15. package/docs/components/EuiListItemComponent.html +1 -1
  16. package/docs/components/EuiMenuComponent.html +1 -1
  17. package/docs/components/EuiMenuItemComponent.html +1 -1
  18. package/docs/components/EuiNotificationItemComponent.html +1 -1
  19. package/docs/components/EuiNotificationItemV2Component.html +1 -1
  20. package/docs/components/EuiNotificationsComponent.html +1 -1
  21. package/docs/components/EuiNotificationsV2Component.html +1 -1
  22. package/docs/components/EuiOverlayHeaderTitleComponent.html +1 -1
  23. package/docs/components/EuiPageColumnComponent.html +1 -1
  24. package/docs/components/EuiPageHeaderComponent.html +1 -1
  25. package/docs/components/EuiPaginatorComponent.html +1 -1
  26. package/docs/components/EuiPopoverComponent.html +1 -1
  27. package/docs/components/EuiSearchComponent.html +1 -1
  28. package/docs/components/EuiTableFilterComponent.html +1 -1
  29. package/docs/components/EuiTableSortableColComponent.html +1 -1
  30. package/docs/components/EuiTableV2FilterComponent.html +1 -1
  31. package/docs/components/EuiTableV2SortableColComponent.html +1 -1
  32. package/docs/components/EuiTabsComponent.html +1 -1
  33. package/docs/components/EuiTimebarComponent.html +1 -1
  34. package/docs/components/EuiTimepickerComponent.html +1 -1
  35. package/docs/components/EuiToolbarMenuComponent.html +1 -1
  36. package/docs/components/EuiToolbarNavbarComponent.html +1 -1
  37. package/docs/components/EuiTreeComponent.html +3 -3
  38. package/docs/components/EuiTreeListToolbarComponent.html +1 -1
  39. package/docs/components/EuiUserProfileCardComponent.html +1 -1
  40. package/docs/components/EuiUserProfileComponent.html +1 -1
  41. package/docs/components/EuiWizardComponent.html +1 -1
  42. package/docs/dependencies.html +1 -1
  43. package/docs/js/menu-wc.js +3 -3
  44. package/docs/js/menu-wc_es5.js +1 -1
  45. package/docs/js/search/search_index.js +2 -2
  46. package/esm2022/eui-card/components/eui-card-footer/eui-card-footer-menu-content.component.mjs +3 -3
  47. package/esm2022/eui-card/components/eui-card-header/eui-card-header.component.mjs +3 -3
  48. package/esm2022/eui-card/eui-card.component.mjs +2 -2
  49. package/esm2022/eui-chip-list/eui-chip-list.component.mjs +3 -3
  50. package/esm2022/eui-dialog/container/eui-dialog-container.component.mjs +3 -3
  51. package/esm2022/eui-dialog/eui-dialog.component.mjs +2 -2
  52. package/esm2022/eui-discussion-thread/eui-discussion-thread-item.component.mjs +3 -3
  53. package/esm2022/eui-dropdown/dropdown-item/eui-dropdown-item.component.mjs +3 -3
  54. package/esm2022/eui-file-upload/file-preview/file-preview.component.mjs +3 -3
  55. package/esm2022/eui-growl/eui-growl.component.mjs +3 -3
  56. package/esm2022/eui-icon/eui-icon-button-expander/eui-icon-button-expander.component.mjs +3 -3
  57. package/esm2022/eui-icon/eui-icon-svg.component.mjs +2 -2
  58. package/esm2022/eui-list/eui-list-item/eui-list-item.component.mjs +3 -3
  59. package/esm2022/eui-list/eui-list.component.mjs +2 -2
  60. package/esm2022/eui-menu/eui-menu-item.component.mjs +3 -3
  61. package/esm2022/eui-menu/eui-menu.component.mjs +3 -3
  62. package/esm2022/eui-overlay/components/eui-overlay-header/eui-overlay-header-title/eui-overlay-header-title.component.mjs +3 -3
  63. package/esm2022/eui-page/components/eui-page-column/eui-page-column.component.mjs +3 -3
  64. package/esm2022/eui-page/components/eui-page-header/eui-page-header.component.mjs +3 -3
  65. package/esm2022/eui-paginator/eui-paginator.component.mjs +3 -3
  66. package/esm2022/eui-popover/eui-popover.component.mjs +3 -3
  67. package/esm2022/eui-table/filter/eui-table-filter.component.mjs +3 -3
  68. package/esm2022/eui-table/sortable-col/eui-table-sortable-col.component.mjs +3 -3
  69. package/esm2022/eui-table-v2/filter/eui-table-v2-filter.component.mjs +3 -3
  70. package/esm2022/eui-table-v2/sortable-col/eui-table-v2-sortable-col.component.mjs +3 -3
  71. package/esm2022/eui-tabs/eui-tabs.component.mjs +3 -3
  72. package/esm2022/eui-timebar/eui-timebar.component.mjs +3 -3
  73. package/esm2022/eui-timepicker/eui-timepicker.component.mjs +3 -3
  74. package/esm2022/eui-tree/eui-tree.component.mjs +5 -5
  75. package/esm2022/eui-tree-list/toolbar/toolbar.component.mjs +3 -3
  76. package/esm2022/eui-user-profile/user-profile-card/user-profile-card.component.mjs +3 -3
  77. package/esm2022/eui-user-profile/user-profile.component.mjs +3 -3
  78. package/esm2022/eui-wizard/eui-wizard.component.mjs +3 -3
  79. package/esm2022/externals/eui-editor/eui-editor.component.mjs +3 -3
  80. package/esm2022/layout/eui-app/eui-app-sidebar/sidebar-header-user-profile/sidebar-header-user-profile.component.mjs +3 -3
  81. package/esm2022/layout/eui-app/eui-app-top-message/top-message.component.mjs +3 -3
  82. package/esm2022/layout/eui-breadcrumb/collapsed-breadcrumb/collapsed-breadcrumb.component.mjs +3 -3
  83. package/esm2022/layout/eui-breadcrumb/item/breadcrumb-item.component.mjs +3 -3
  84. package/esm2022/layout/eui-notifications/eui-notification-item.component.mjs +3 -3
  85. package/esm2022/layout/eui-notifications/eui-notifications.component.mjs +3 -3
  86. package/esm2022/layout/eui-notifications-v2/eui-notification-item.component.mjs +3 -3
  87. package/esm2022/layout/eui-notifications-v2/eui-notifications.component.mjs +3 -3
  88. package/esm2022/layout/eui-search/search.component.mjs +3 -3
  89. package/esm2022/layout/eui-toolbar/toolbar-menu/toolbar-menu.component.mjs +3 -3
  90. package/esm2022/layout/eui-toolbar/toolbar-navbar/toolbar-navbar.component.mjs +3 -3
  91. package/eui-list/eui-list-item/eui-list-item.component.d.ts +1 -1
  92. package/eui-tree/eui-tree.component.d.ts.map +1 -1
  93. package/fesm2022/eui-components-eui-card.mjs +6 -6
  94. package/fesm2022/eui-components-eui-card.mjs.map +2 -2
  95. package/fesm2022/eui-components-eui-chip-list.mjs +4 -4
  96. package/fesm2022/eui-components-eui-chip-list.mjs.map +1 -1
  97. package/fesm2022/eui-components-eui-dialog.mjs +18 -18
  98. package/fesm2022/eui-components-eui-dialog.mjs.map +2 -2
  99. package/fesm2022/eui-components-eui-discussion-thread.mjs +8 -8
  100. package/fesm2022/eui-components-eui-discussion-thread.mjs.map +1 -1
  101. package/fesm2022/eui-components-eui-dropdown.mjs +2 -2
  102. package/fesm2022/eui-components-eui-dropdown.mjs.map +2 -2
  103. package/fesm2022/eui-components-eui-file-upload.mjs +2 -2
  104. package/fesm2022/eui-components-eui-file-upload.mjs.map +2 -2
  105. package/fesm2022/eui-components-eui-growl.mjs +2 -2
  106. package/fesm2022/eui-components-eui-growl.mjs.map +1 -1
  107. package/fesm2022/eui-components-eui-icon.mjs +10 -10
  108. package/fesm2022/eui-components-eui-icon.mjs.map +2 -2
  109. package/fesm2022/eui-components-eui-list.mjs +4 -4
  110. package/fesm2022/eui-components-eui-list.mjs.map +2 -2
  111. package/fesm2022/eui-components-eui-menu.mjs +18 -18
  112. package/fesm2022/eui-components-eui-menu.mjs.map +2 -2
  113. package/fesm2022/eui-components-eui-overlay.mjs +2 -2
  114. package/fesm2022/eui-components-eui-overlay.mjs.map +2 -2
  115. package/fesm2022/eui-components-eui-page.mjs +4 -4
  116. package/fesm2022/eui-components-eui-page.mjs.map +2 -2
  117. package/fesm2022/eui-components-eui-paginator.mjs +8 -8
  118. package/fesm2022/eui-components-eui-paginator.mjs.map +1 -1
  119. package/fesm2022/eui-components-eui-popover.mjs +2 -2
  120. package/fesm2022/eui-components-eui-popover.mjs.map +2 -2
  121. package/fesm2022/eui-components-eui-table-v2.mjs +8 -8
  122. package/fesm2022/eui-components-eui-table-v2.mjs.map +1 -1
  123. package/fesm2022/eui-components-eui-table.mjs +14 -14
  124. package/fesm2022/eui-components-eui-table.mjs.map +1 -1
  125. package/fesm2022/eui-components-eui-tabs.mjs +2 -2
  126. package/fesm2022/eui-components-eui-tabs.mjs.map +2 -2
  127. package/fesm2022/eui-components-eui-timebar.mjs +6 -6
  128. package/fesm2022/eui-components-eui-timebar.mjs.map +1 -1
  129. package/fesm2022/eui-components-eui-timepicker.mjs +12 -12
  130. package/fesm2022/eui-components-eui-timepicker.mjs.map +1 -1
  131. package/fesm2022/eui-components-eui-tree-list.mjs +6 -6
  132. package/fesm2022/eui-components-eui-tree-list.mjs.map +1 -1
  133. package/fesm2022/eui-components-eui-tree.mjs +6 -6
  134. package/fesm2022/eui-components-eui-tree.mjs.map +1 -1
  135. package/fesm2022/eui-components-eui-user-profile.mjs +4 -4
  136. package/fesm2022/eui-components-eui-user-profile.mjs.map +2 -2
  137. package/fesm2022/eui-components-eui-wizard.mjs +2 -2
  138. package/fesm2022/eui-components-eui-wizard.mjs.map +2 -2
  139. package/fesm2022/eui-components-externals-eui-editor.mjs +8 -8
  140. package/fesm2022/eui-components-externals-eui-editor.mjs.map +1 -1
  141. package/fesm2022/eui-components-layout.mjs +36 -36
  142. package/fesm2022/eui-components-layout.mjs.map +2 -2
  143. package/package.json +21 -21
@@ -250,11 +250,11 @@ export class EuiTimebarComponent {
250
250
  }
251
251
  }
252
252
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-rc.1", ngImport: i0, type: EuiTimebarComponent, deps: [{ token: i1.EuiAppShellService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
253
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.0-rc.1", type: EuiTimebarComponent, selector: "eui-timebar", inputs: { e2eAttr: "e2eAttr", markedDate: "markedDate", items: "items", startLabel: "startLabel", endLabel: "endLabel", dateFormat: "dateFormat", isShowLegend: ["isShowLegend", "isShowLegend", booleanAttribute], isShowLegendAsIndex: ["isShowLegendAsIndex", "isShowLegendAsIndex", booleanAttribute], isShowCurrentDateMarker: ["isShowCurrentDateMarker", "isShowCurrentDateMarker", booleanAttribute], isCurrentDateMarkerAlwaysInRange: ["isCurrentDateMarkerAlwaysInRange", "isCurrentDateMarkerAlwaysInRange", booleanAttribute], isGroupOverlappingLabels: ["isGroupOverlappingLabels", "isGroupOverlappingLabels", booleanAttribute] }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row eui-u-flex\" #container>\n <div *ngIf=\"startLabel\" class=\"col-2 eui-timebar__start-label\">\n {{ startLabel }}\n </div>\n <div class=\"{{ timebarColumnClass }}\">\n <div class=\"eui-timebar\" [style.marginBottom.px]=\"extraTimelineLabelSpace\" attr.data-e2e=\"{{ e2eAttr }}\">\n <div\n *ngIf=\"isShowCurrentDateMarker\"\n class=\"eui-timebar__current-progress\"\n [style.width.%]=\"currentPerc >= 100 ? 100 : currentPerc\"></div>\n <div *ngIf=\"markedDate\" class=\"eui-timebar__current-progress\" [style.width.%]=\"markedPerc >= 100 ? 100 : markedPerc\"></div>\n <ng-template [ngIf]=\"!isMobile\">\n <ng-container *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <ng-container *ngIf=\"!item.isGrouped\">\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n <div class=\"eui-timebar__step-date-item\" [class.eui-timebar__step-date-item--with-end-date]=\"item.groupEndDate\">\n <span\n *ngIf=\"item.groupEndDate\"\n class=\"eui-timebar__grouped__step {{\n item.stepTypeClass ? 'eui-timebar__step--' + item.stepTypeClass : ''\n }}\">\n {{ item.groupEndDate | date: dateFormat }}\n </span>\n <span\n class=\"{{ item.tooltipColor ? 'eui-timebar__step--' + item.tooltipColor : '' }}\"\n [class.eui-timebar__grouped__step]=\"item.groupEndDate\">\n {{ item.item.date | date: dateFormat }}\n </span>\n </div>\n <div *ngIf=\"!isShowLegendGenerated\" [style.left.%]=\"item.perc\" class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n <span title=\"{{ item.groupLabel }}\">{{ item.groupLabel }}</span>\n </ng-container>\n </div>\n <div\n *ngIf=\"isShowLegendGenerated && isShowLegendAsIndexGenerated\"\n [style.left.%]=\"item.perc\"\n class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n {{ i + 1 }}\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template [ngIf]=\"isMobile\">\n <ng-container *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <ng-container *ngIf=\"!item.isGrouped\">\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n <div *ngIf=\"!isShowLegendGenerated\" class=\"eui-timebar__step-label\" title=\"{{ item.item.label }}\">\n <ng-container *ngIf=\"!item.groupLabel\">\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n <div *ngIf=\"isShowLegendGenerated && isShowLegendAsIndexGenerated\" class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n {{ i + 1 }}\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <div\n *ngIf=\"isShowCurrentDateMarker\"\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"currentPerc\"\n title=\"{{ currentDate | date: dateFormat }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div *ngIf=\"isShowCurrentDateMarker\" class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"currentPerc\">\n <eui-icon-svg icon=\"eui-ellipse\" set=\"eui\" size=\"s\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div\n *ngIf=\"markedDate\"\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"markedPerc\"\n title=\"{{ markedDate | date: dateFormat }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div *ngIf=\"markedDate\" class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"markedPerc\">\n <eui-icon-svg icon=\"eui-ellipse\" set=\"eui\" size=\"s\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n </div>\n </div>\n <div *ngIf=\"endLabel\" class=\"col-2 eui-timebar__end-label\">\n {{ endLabel }}\n </div>\n</div>\n<div class=\"row eui-u-flex\">\n <div *ngIf=\"startLabel\" class=\"col-2\"></div>\n <div class=\"{{ timebarColumnClass }}\">\n <div *ngIf=\"isShowLegendGenerated || isSomeStepsAreGrouped\" class=\"eui-timebar__legend\">\n <ng-container *ngIf=\"isShowLegendGenerated\">\n <div class=\"eui-timebar__legend-item\" *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <div *ngIf=\"!isShowLegendAsIndexGenerated\" class=\"eui-timebar__legend-item-icon\">\n <eui-icon-svg icon=\"eui-ellipse\" set=\"eui\" size=\"s\" fillColor=\"{{ item.item.stepType }}\"></eui-icon-svg>\n </div>\n <div *ngIf=\"isShowLegendAsIndexGenerated\" class=\"eui-timebar__legend-item-index-wrapper\">\n {{ i + 1 }}\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <ng-template [ngIf]=\"isMobile\">\n <strong>{{ item.item.date | date: dateFormat }}</strong> - {{ item.item.label }}\n </ng-template>\n <ng-template [ngIf]=\"!isMobile\">\n {{ item.item.label }}\n </ng-template>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isShowLegendGenerated\">\n <ng-container *ngFor=\"let item of itemsUI; trackBy: trackByFn\">\n <div *ngIf=\"item.groupLabel || item.isGrouped\" class=\"eui-timebar__legend-item\">\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n {{ item.groupIndex }}\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <strong>{{ item.item.date | date: dateFormat }}</strong> - {{ item.item.label }}\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"endLabel\" class=\"col-2\"></div>\n</div>\n", styles: [".eui-timebar{border-bottom:2px solid var(--eui-c-neutral-lightest);margin:6rem 3rem;padding:5px;position:relative}.eui-timebar__step{border:7px solid var(--eui-c-primary);border-radius:var(--eui-br-max);height:14px;position:absolute;width:14px}.eui-timebar__step-date-item{background-color:var(--eui-c-neutral-light);border-radius:var(--eui-br-max);color:var(--eui-c-white);max-width:8rem;min-width:6rem;padding:var(--eui-s-xs);position:absolute;text-align:center;top:-2.5rem;transform:rotate(65deg);transform-origin:50% -175%;white-space:normal;font:var(--eui-f-s)}.eui-timebar__step-date-item--with-end-date{left:2.5rem;top:-1.75rem}.eui-timebar__step--with-current-date-marker.hint--top:before,.eui-timebar__step--with-current-date-marker.hint--top:after{bottom:25px}.eui-timebar__current-progress{border-bottom:3px solid var(--eui-c-primary);padding-top:5px;position:absolute}.eui-timebar__current-date-marker{color:var(--eui-c-danger);margin-left:-2px;position:absolute;top:calc(-1 * var(--eui-s-m) - var(--eui-s-2xs))}.eui-timebar__current-date-marker-step{bottom:calc(-1 * var(--eui-s-m) - 2px);color:var(--eui-c-danger);position:absolute}.eui-timebar__start-label,.eui-timebar__end-label{margin-top:6.5rem;font:var(--eui-f-s-bold)}.eui-timebar__start-label{text-align:right}.eui-timebar__step-date-item--with-end-date{margin:0;padding:0}.eui-timebar__step-label{margin-left:-4rem;margin-top:.7rem;overflow:hidden;position:absolute;text-align:center;width:8rem}.eui-timebar__legend{margin-left:var(--eui-s-s);margin-top:3rem}.eui-timebar__legend-item{align-items:center;display:flex;padding:var(--eui-s-xs) var(--eui-s-xs) var(--eui-s-xs) 0;width:100%}.eui-timebar__legend-item-label{flex:1}.eui-timebar__legend-item-index-wrapper{background-color:var(--eui-c-primary);border-radius:var(--eui-br-max);color:var(--eui-c-white);margin-right:var(--eui-s-m);padding:var(--eui-s-xs) var(--eui-s-s)}.eui-timebar__grouped__step{border-radius:var(--eui-br-m);display:block;padding:3px 8px}.eui-timebar__grouped__step.eui-timebar__step--info{background-color:var(--eui-c-info)}.eui-timebar__grouped__step.eui-timebar__step--success{background-color:var(--eui-c-success)}.eui-timebar__grouped__step.eui-timebar__step--warning{background-color:var(--eui-c-warning)}.eui-timebar__grouped__step.eui-timebar__step--danger{background-color:var(--eui-c-danger)}.eui-timebar__step--info{border-color:var(--eui-c-info)}.eui-timebar__step--info .eui-timebar__step-date-item{background-color:var(--eui-c-info)}.eui-timebar__step--success{border-color:var(--eui-c-success)}.eui-timebar__step--success .eui-timebar__step-date-item{background-color:var(--eui-c-success)}.eui-timebar__step--warning{border-color:var(--eui-c-warning)}.eui-timebar__step--warning .eui-timebar__step-date-item{background-color:var(--eui-c-warning)}.eui-timebar__step--danger{border-color:var(--eui-c-danger)}.eui-timebar__step--danger .eui-timebar__step-date-item{background-color:var(--eui-c-danger)}.eui-timebar__legend-item-icon{color:var(--eui-c-primary);fill:var(--eui-c-primary);width:var(--eui-s-3xl);height:var(--eui-s-3xl)}.eui-timebar__legend-item-icon--info{color:var(--eui-c-info)}.eui-timebar__legend-item-icon--success{color:var(--eui-c-success)}.eui-timebar__legend-item-icon--warning{color:var(--eui-c-warning)}.eui-timebar__legend-item-icon--danger{color:var(--eui-c-danger)}@media screen and (max-width: 767px){.eui-timebar{margin:5rem var(--eui-s-m)}.eui-timebar__legend{margin-bottom:var(--eui-s-l);margin-left:18px}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "ariaLabelledby", "role", "style", "iconUrl", "transform", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }], encapsulation: i0.ViewEncapsulation.None }); }
253
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.0-rc.1", type: EuiTimebarComponent, selector: "eui-timebar", inputs: { e2eAttr: "e2eAttr", markedDate: "markedDate", items: "items", startLabel: "startLabel", endLabel: "endLabel", dateFormat: "dateFormat", isShowLegend: ["isShowLegend", "isShowLegend", booleanAttribute], isShowLegendAsIndex: ["isShowLegendAsIndex", "isShowLegendAsIndex", booleanAttribute], isShowCurrentDateMarker: ["isShowCurrentDateMarker", "isShowCurrentDateMarker", booleanAttribute], isCurrentDateMarkerAlwaysInRange: ["isCurrentDateMarkerAlwaysInRange", "isCurrentDateMarkerAlwaysInRange", booleanAttribute], isGroupOverlappingLabels: ["isGroupOverlappingLabels", "isGroupOverlappingLabels", booleanAttribute] }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row eui-u-flex\" #container>\n <div *ngIf=\"startLabel\" class=\"col-2 eui-timebar__start-label\">\n {{ startLabel }}\n </div>\n <div class=\"{{ timebarColumnClass }}\">\n <div class=\"eui-timebar\" [style.marginBottom.px]=\"extraTimelineLabelSpace\" attr.data-e2e=\"{{ e2eAttr }}\">\n <div\n *ngIf=\"isShowCurrentDateMarker\"\n class=\"eui-timebar__current-progress\"\n [style.width.%]=\"currentPerc >= 100 ? 100 : currentPerc\"></div>\n <div *ngIf=\"markedDate\" class=\"eui-timebar__current-progress\" [style.width.%]=\"markedPerc >= 100 ? 100 : markedPerc\"></div>\n <ng-template [ngIf]=\"!isMobile\">\n <ng-container *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <ng-container *ngIf=\"!item.isGrouped\">\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n <div class=\"eui-timebar__step-date-item\" [class.eui-timebar__step-date-item--with-end-date]=\"item.groupEndDate\">\n <span\n *ngIf=\"item.groupEndDate\"\n class=\"eui-timebar__grouped__step {{\n item.stepTypeClass ? 'eui-timebar__step--' + item.stepTypeClass : ''\n }}\">\n {{ item.groupEndDate | date: dateFormat }}\n </span>\n <span\n class=\"{{ item.tooltipColor ? 'eui-timebar__step--' + item.tooltipColor : '' }}\"\n [class.eui-timebar__grouped__step]=\"item.groupEndDate\">\n {{ item.item.date | date: dateFormat }}\n </span>\n </div>\n <div *ngIf=\"!isShowLegendGenerated\" [style.left.%]=\"item.perc\" class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n <span title=\"{{ item.groupLabel }}\">{{ item.groupLabel }}</span>\n </ng-container>\n </div>\n <div\n *ngIf=\"isShowLegendGenerated && isShowLegendAsIndexGenerated\"\n [style.left.%]=\"item.perc\"\n class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n {{ i + 1 }}\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template [ngIf]=\"isMobile\">\n <ng-container *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <ng-container *ngIf=\"!item.isGrouped\">\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n <div *ngIf=\"!isShowLegendGenerated\" class=\"eui-timebar__step-label\" title=\"{{ item.item.label }}\">\n <ng-container *ngIf=\"!item.groupLabel\">\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n <div *ngIf=\"isShowLegendGenerated && isShowLegendAsIndexGenerated\" class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n {{ i + 1 }}\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <div\n *ngIf=\"isShowCurrentDateMarker\"\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"currentPerc\"\n title=\"{{ currentDate | date: dateFormat }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div *ngIf=\"isShowCurrentDateMarker\" class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"currentPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div\n *ngIf=\"markedDate\"\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"markedPerc\"\n title=\"{{ markedDate | date: dateFormat }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div *ngIf=\"markedDate\" class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"markedPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n </div>\n </div>\n <div *ngIf=\"endLabel\" class=\"col-2 eui-timebar__end-label\">\n {{ endLabel }}\n </div>\n</div>\n<div class=\"row eui-u-flex\">\n <div *ngIf=\"startLabel\" class=\"col-2\"></div>\n <div class=\"{{ timebarColumnClass }}\">\n <div *ngIf=\"isShowLegendGenerated || isSomeStepsAreGrouped\" class=\"eui-timebar__legend\">\n <ng-container *ngIf=\"isShowLegendGenerated\">\n <div class=\"eui-timebar__legend-item\" *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <div *ngIf=\"!isShowLegendAsIndexGenerated\" class=\"eui-timebar__legend-item-icon\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"{{ item.item.stepType }}\"></eui-icon-svg>\n </div>\n <div *ngIf=\"isShowLegendAsIndexGenerated\" class=\"eui-timebar__legend-item-index-wrapper\">\n {{ i + 1 }}\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <ng-template [ngIf]=\"isMobile\">\n <strong>{{ item.item.date | date: dateFormat }}</strong> - {{ item.item.label }}\n </ng-template>\n <ng-template [ngIf]=\"!isMobile\">\n {{ item.item.label }}\n </ng-template>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isShowLegendGenerated\">\n <ng-container *ngFor=\"let item of itemsUI; trackBy: trackByFn\">\n <div *ngIf=\"item.groupLabel || item.isGrouped\" class=\"eui-timebar__legend-item\">\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n {{ item.groupIndex }}\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <strong>{{ item.item.date | date: dateFormat }}</strong> - {{ item.item.label }}\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"endLabel\" class=\"col-2\"></div>\n</div>\n", styles: [".eui-timebar{border-bottom:2px solid var(--eui-c-neutral-lightest);margin:6rem 3rem;padding:5px;position:relative}.eui-timebar__step{border:7px solid var(--eui-c-primary);border-radius:var(--eui-br-max);height:14px;position:absolute;width:14px}.eui-timebar__step-date-item{background-color:var(--eui-c-neutral-light);border-radius:var(--eui-br-max);color:var(--eui-c-white);max-width:8rem;min-width:6rem;padding:var(--eui-s-xs);position:absolute;text-align:center;top:-2.5rem;transform:rotate(65deg);transform-origin:50% -175%;white-space:normal;font:var(--eui-f-s)}.eui-timebar__step-date-item--with-end-date{left:2.5rem;top:-1.75rem}.eui-timebar__step--with-current-date-marker.hint--top:before,.eui-timebar__step--with-current-date-marker.hint--top:after{bottom:25px}.eui-timebar__current-progress{border-bottom:3px solid var(--eui-c-primary);padding-top:5px;position:absolute}.eui-timebar__current-date-marker{color:var(--eui-c-danger);margin-left:-2px;position:absolute;top:calc(-1 * var(--eui-s-m) - var(--eui-s-2xs))}.eui-timebar__current-date-marker-step{bottom:calc(-1 * var(--eui-s-m) - 2px);color:var(--eui-c-danger);position:absolute}.eui-timebar__start-label,.eui-timebar__end-label{margin-top:6.5rem;font:var(--eui-f-s-bold)}.eui-timebar__start-label{text-align:right}.eui-timebar__step-date-item--with-end-date{margin:0;padding:0}.eui-timebar__step-label{margin-left:-4rem;margin-top:.7rem;overflow:hidden;position:absolute;text-align:center;width:8rem}.eui-timebar__legend{margin-left:var(--eui-s-s);margin-top:3rem}.eui-timebar__legend-item{align-items:center;display:flex;padding:var(--eui-s-xs) var(--eui-s-xs) var(--eui-s-xs) 0;width:100%}.eui-timebar__legend-item-label{flex:1}.eui-timebar__legend-item-index-wrapper{background-color:var(--eui-c-primary);border-radius:var(--eui-br-max);color:var(--eui-c-white);margin-right:var(--eui-s-m);padding:var(--eui-s-xs) var(--eui-s-s)}.eui-timebar__grouped__step{border-radius:var(--eui-br-m);display:block;padding:3px 8px}.eui-timebar__grouped__step.eui-timebar__step--info{background-color:var(--eui-c-info)}.eui-timebar__grouped__step.eui-timebar__step--success{background-color:var(--eui-c-success)}.eui-timebar__grouped__step.eui-timebar__step--warning{background-color:var(--eui-c-warning)}.eui-timebar__grouped__step.eui-timebar__step--danger{background-color:var(--eui-c-danger)}.eui-timebar__step--info{border-color:var(--eui-c-info)}.eui-timebar__step--info .eui-timebar__step-date-item{background-color:var(--eui-c-info)}.eui-timebar__step--success{border-color:var(--eui-c-success)}.eui-timebar__step--success .eui-timebar__step-date-item{background-color:var(--eui-c-success)}.eui-timebar__step--warning{border-color:var(--eui-c-warning)}.eui-timebar__step--warning .eui-timebar__step-date-item{background-color:var(--eui-c-warning)}.eui-timebar__step--danger{border-color:var(--eui-c-danger)}.eui-timebar__step--danger .eui-timebar__step-date-item{background-color:var(--eui-c-danger)}.eui-timebar__legend-item-icon{color:var(--eui-c-primary);fill:var(--eui-c-primary);width:var(--eui-s-3xl);height:var(--eui-s-3xl)}.eui-timebar__legend-item-icon--info{color:var(--eui-c-info)}.eui-timebar__legend-item-icon--success{color:var(--eui-c-success)}.eui-timebar__legend-item-icon--warning{color:var(--eui-c-warning)}.eui-timebar__legend-item-icon--danger{color:var(--eui-c-danger)}@media screen and (max-width: 767px){.eui-timebar{margin:5rem var(--eui-s-m)}.eui-timebar__legend{margin-bottom:var(--eui-s-l);margin-left:18px}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "ariaLabelledby", "role", "style", "iconUrl", "transform", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }], encapsulation: i0.ViewEncapsulation.None }); }
254
254
  }
255
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-rc.1", ngImport: i0, type: EuiTimebarComponent, decorators: [{
256
256
  type: Component,
257
- args: [{ selector: 'eui-timebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"row eui-u-flex\" #container>\n <div *ngIf=\"startLabel\" class=\"col-2 eui-timebar__start-label\">\n {{ startLabel }}\n </div>\n <div class=\"{{ timebarColumnClass }}\">\n <div class=\"eui-timebar\" [style.marginBottom.px]=\"extraTimelineLabelSpace\" attr.data-e2e=\"{{ e2eAttr }}\">\n <div\n *ngIf=\"isShowCurrentDateMarker\"\n class=\"eui-timebar__current-progress\"\n [style.width.%]=\"currentPerc >= 100 ? 100 : currentPerc\"></div>\n <div *ngIf=\"markedDate\" class=\"eui-timebar__current-progress\" [style.width.%]=\"markedPerc >= 100 ? 100 : markedPerc\"></div>\n <ng-template [ngIf]=\"!isMobile\">\n <ng-container *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <ng-container *ngIf=\"!item.isGrouped\">\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n <div class=\"eui-timebar__step-date-item\" [class.eui-timebar__step-date-item--with-end-date]=\"item.groupEndDate\">\n <span\n *ngIf=\"item.groupEndDate\"\n class=\"eui-timebar__grouped__step {{\n item.stepTypeClass ? 'eui-timebar__step--' + item.stepTypeClass : ''\n }}\">\n {{ item.groupEndDate | date: dateFormat }}\n </span>\n <span\n class=\"{{ item.tooltipColor ? 'eui-timebar__step--' + item.tooltipColor : '' }}\"\n [class.eui-timebar__grouped__step]=\"item.groupEndDate\">\n {{ item.item.date | date: dateFormat }}\n </span>\n </div>\n <div *ngIf=\"!isShowLegendGenerated\" [style.left.%]=\"item.perc\" class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n <span title=\"{{ item.groupLabel }}\">{{ item.groupLabel }}</span>\n </ng-container>\n </div>\n <div\n *ngIf=\"isShowLegendGenerated && isShowLegendAsIndexGenerated\"\n [style.left.%]=\"item.perc\"\n class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n {{ i + 1 }}\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template [ngIf]=\"isMobile\">\n <ng-container *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <ng-container *ngIf=\"!item.isGrouped\">\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n <div *ngIf=\"!isShowLegendGenerated\" class=\"eui-timebar__step-label\" title=\"{{ item.item.label }}\">\n <ng-container *ngIf=\"!item.groupLabel\">\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n <div *ngIf=\"isShowLegendGenerated && isShowLegendAsIndexGenerated\" class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n {{ i + 1 }}\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <div\n *ngIf=\"isShowCurrentDateMarker\"\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"currentPerc\"\n title=\"{{ currentDate | date: dateFormat }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div *ngIf=\"isShowCurrentDateMarker\" class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"currentPerc\">\n <eui-icon-svg icon=\"eui-ellipse\" set=\"eui\" size=\"s\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div\n *ngIf=\"markedDate\"\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"markedPerc\"\n title=\"{{ markedDate | date: dateFormat }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div *ngIf=\"markedDate\" class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"markedPerc\">\n <eui-icon-svg icon=\"eui-ellipse\" set=\"eui\" size=\"s\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n </div>\n </div>\n <div *ngIf=\"endLabel\" class=\"col-2 eui-timebar__end-label\">\n {{ endLabel }}\n </div>\n</div>\n<div class=\"row eui-u-flex\">\n <div *ngIf=\"startLabel\" class=\"col-2\"></div>\n <div class=\"{{ timebarColumnClass }}\">\n <div *ngIf=\"isShowLegendGenerated || isSomeStepsAreGrouped\" class=\"eui-timebar__legend\">\n <ng-container *ngIf=\"isShowLegendGenerated\">\n <div class=\"eui-timebar__legend-item\" *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <div *ngIf=\"!isShowLegendAsIndexGenerated\" class=\"eui-timebar__legend-item-icon\">\n <eui-icon-svg icon=\"eui-ellipse\" set=\"eui\" size=\"s\" fillColor=\"{{ item.item.stepType }}\"></eui-icon-svg>\n </div>\n <div *ngIf=\"isShowLegendAsIndexGenerated\" class=\"eui-timebar__legend-item-index-wrapper\">\n {{ i + 1 }}\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <ng-template [ngIf]=\"isMobile\">\n <strong>{{ item.item.date | date: dateFormat }}</strong> - {{ item.item.label }}\n </ng-template>\n <ng-template [ngIf]=\"!isMobile\">\n {{ item.item.label }}\n </ng-template>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isShowLegendGenerated\">\n <ng-container *ngFor=\"let item of itemsUI; trackBy: trackByFn\">\n <div *ngIf=\"item.groupLabel || item.isGrouped\" class=\"eui-timebar__legend-item\">\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n {{ item.groupIndex }}\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <strong>{{ item.item.date | date: dateFormat }}</strong> - {{ item.item.label }}\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"endLabel\" class=\"col-2\"></div>\n</div>\n", styles: [".eui-timebar{border-bottom:2px solid var(--eui-c-neutral-lightest);margin:6rem 3rem;padding:5px;position:relative}.eui-timebar__step{border:7px solid var(--eui-c-primary);border-radius:var(--eui-br-max);height:14px;position:absolute;width:14px}.eui-timebar__step-date-item{background-color:var(--eui-c-neutral-light);border-radius:var(--eui-br-max);color:var(--eui-c-white);max-width:8rem;min-width:6rem;padding:var(--eui-s-xs);position:absolute;text-align:center;top:-2.5rem;transform:rotate(65deg);transform-origin:50% -175%;white-space:normal;font:var(--eui-f-s)}.eui-timebar__step-date-item--with-end-date{left:2.5rem;top:-1.75rem}.eui-timebar__step--with-current-date-marker.hint--top:before,.eui-timebar__step--with-current-date-marker.hint--top:after{bottom:25px}.eui-timebar__current-progress{border-bottom:3px solid var(--eui-c-primary);padding-top:5px;position:absolute}.eui-timebar__current-date-marker{color:var(--eui-c-danger);margin-left:-2px;position:absolute;top:calc(-1 * var(--eui-s-m) - var(--eui-s-2xs))}.eui-timebar__current-date-marker-step{bottom:calc(-1 * var(--eui-s-m) - 2px);color:var(--eui-c-danger);position:absolute}.eui-timebar__start-label,.eui-timebar__end-label{margin-top:6.5rem;font:var(--eui-f-s-bold)}.eui-timebar__start-label{text-align:right}.eui-timebar__step-date-item--with-end-date{margin:0;padding:0}.eui-timebar__step-label{margin-left:-4rem;margin-top:.7rem;overflow:hidden;position:absolute;text-align:center;width:8rem}.eui-timebar__legend{margin-left:var(--eui-s-s);margin-top:3rem}.eui-timebar__legend-item{align-items:center;display:flex;padding:var(--eui-s-xs) var(--eui-s-xs) var(--eui-s-xs) 0;width:100%}.eui-timebar__legend-item-label{flex:1}.eui-timebar__legend-item-index-wrapper{background-color:var(--eui-c-primary);border-radius:var(--eui-br-max);color:var(--eui-c-white);margin-right:var(--eui-s-m);padding:var(--eui-s-xs) var(--eui-s-s)}.eui-timebar__grouped__step{border-radius:var(--eui-br-m);display:block;padding:3px 8px}.eui-timebar__grouped__step.eui-timebar__step--info{background-color:var(--eui-c-info)}.eui-timebar__grouped__step.eui-timebar__step--success{background-color:var(--eui-c-success)}.eui-timebar__grouped__step.eui-timebar__step--warning{background-color:var(--eui-c-warning)}.eui-timebar__grouped__step.eui-timebar__step--danger{background-color:var(--eui-c-danger)}.eui-timebar__step--info{border-color:var(--eui-c-info)}.eui-timebar__step--info .eui-timebar__step-date-item{background-color:var(--eui-c-info)}.eui-timebar__step--success{border-color:var(--eui-c-success)}.eui-timebar__step--success .eui-timebar__step-date-item{background-color:var(--eui-c-success)}.eui-timebar__step--warning{border-color:var(--eui-c-warning)}.eui-timebar__step--warning .eui-timebar__step-date-item{background-color:var(--eui-c-warning)}.eui-timebar__step--danger{border-color:var(--eui-c-danger)}.eui-timebar__step--danger .eui-timebar__step-date-item{background-color:var(--eui-c-danger)}.eui-timebar__legend-item-icon{color:var(--eui-c-primary);fill:var(--eui-c-primary);width:var(--eui-s-3xl);height:var(--eui-s-3xl)}.eui-timebar__legend-item-icon--info{color:var(--eui-c-info)}.eui-timebar__legend-item-icon--success{color:var(--eui-c-success)}.eui-timebar__legend-item-icon--warning{color:var(--eui-c-warning)}.eui-timebar__legend-item-icon--danger{color:var(--eui-c-danger)}@media screen and (max-width: 767px){.eui-timebar{margin:5rem var(--eui-s-m)}.eui-timebar__legend{margin-bottom:var(--eui-s-l);margin-left:18px}}\n"] }]
257
+ args: [{ selector: 'eui-timebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"row eui-u-flex\" #container>\n <div *ngIf=\"startLabel\" class=\"col-2 eui-timebar__start-label\">\n {{ startLabel }}\n </div>\n <div class=\"{{ timebarColumnClass }}\">\n <div class=\"eui-timebar\" [style.marginBottom.px]=\"extraTimelineLabelSpace\" attr.data-e2e=\"{{ e2eAttr }}\">\n <div\n *ngIf=\"isShowCurrentDateMarker\"\n class=\"eui-timebar__current-progress\"\n [style.width.%]=\"currentPerc >= 100 ? 100 : currentPerc\"></div>\n <div *ngIf=\"markedDate\" class=\"eui-timebar__current-progress\" [style.width.%]=\"markedPerc >= 100 ? 100 : markedPerc\"></div>\n <ng-template [ngIf]=\"!isMobile\">\n <ng-container *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <ng-container *ngIf=\"!item.isGrouped\">\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n <div class=\"eui-timebar__step-date-item\" [class.eui-timebar__step-date-item--with-end-date]=\"item.groupEndDate\">\n <span\n *ngIf=\"item.groupEndDate\"\n class=\"eui-timebar__grouped__step {{\n item.stepTypeClass ? 'eui-timebar__step--' + item.stepTypeClass : ''\n }}\">\n {{ item.groupEndDate | date: dateFormat }}\n </span>\n <span\n class=\"{{ item.tooltipColor ? 'eui-timebar__step--' + item.tooltipColor : '' }}\"\n [class.eui-timebar__grouped__step]=\"item.groupEndDate\">\n {{ item.item.date | date: dateFormat }}\n </span>\n </div>\n <div *ngIf=\"!isShowLegendGenerated\" [style.left.%]=\"item.perc\" class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n <span title=\"{{ item.groupLabel }}\">{{ item.groupLabel }}</span>\n </ng-container>\n </div>\n <div\n *ngIf=\"isShowLegendGenerated && isShowLegendAsIndexGenerated\"\n [style.left.%]=\"item.perc\"\n class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n {{ i + 1 }}\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template [ngIf]=\"isMobile\">\n <ng-container *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <ng-container *ngIf=\"!item.isGrouped\">\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n <div *ngIf=\"!isShowLegendGenerated\" class=\"eui-timebar__step-label\" title=\"{{ item.item.label }}\">\n <ng-container *ngIf=\"!item.groupLabel\">\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n <div *ngIf=\"isShowLegendGenerated && isShowLegendAsIndexGenerated\" class=\"eui-timebar__step-label\">\n <ng-container *ngIf=\"!item.groupLabel\">\n {{ i + 1 }}\n </ng-container>\n <ng-container *ngIf=\"item.groupLabel\">\n {{ item.groupLabel }}\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <div\n *ngIf=\"isShowCurrentDateMarker\"\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"currentPerc\"\n title=\"{{ currentDate | date: dateFormat }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div *ngIf=\"isShowCurrentDateMarker\" class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"currentPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div\n *ngIf=\"markedDate\"\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"markedPerc\"\n title=\"{{ markedDate | date: dateFormat }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n <div *ngIf=\"markedDate\" class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"markedPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"danger-100\"></eui-icon-svg>\n </div>\n </div>\n </div>\n <div *ngIf=\"endLabel\" class=\"col-2 eui-timebar__end-label\">\n {{ endLabel }}\n </div>\n</div>\n<div class=\"row eui-u-flex\">\n <div *ngIf=\"startLabel\" class=\"col-2\"></div>\n <div class=\"{{ timebarColumnClass }}\">\n <div *ngIf=\"isShowLegendGenerated || isSomeStepsAreGrouped\" class=\"eui-timebar__legend\">\n <ng-container *ngIf=\"isShowLegendGenerated\">\n <div class=\"eui-timebar__legend-item\" *ngFor=\"let item of itemsUI; let i = index; trackBy: trackByFn\">\n <div *ngIf=\"!isShowLegendAsIndexGenerated\" class=\"eui-timebar__legend-item-icon\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"{{ item.item.stepType }}\"></eui-icon-svg>\n </div>\n <div *ngIf=\"isShowLegendAsIndexGenerated\" class=\"eui-timebar__legend-item-index-wrapper\">\n {{ i + 1 }}\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <ng-template [ngIf]=\"isMobile\">\n <strong>{{ item.item.date | date: dateFormat }}</strong> - {{ item.item.label }}\n </ng-template>\n <ng-template [ngIf]=\"!isMobile\">\n {{ item.item.label }}\n </ng-template>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isShowLegendGenerated\">\n <ng-container *ngFor=\"let item of itemsUI; trackBy: trackByFn\">\n <div *ngIf=\"item.groupLabel || item.isGrouped\" class=\"eui-timebar__legend-item\">\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n {{ item.groupIndex }}\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <strong>{{ item.item.date | date: dateFormat }}</strong> - {{ item.item.label }}\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"endLabel\" class=\"col-2\"></div>\n</div>\n", styles: [".eui-timebar{border-bottom:2px solid var(--eui-c-neutral-lightest);margin:6rem 3rem;padding:5px;position:relative}.eui-timebar__step{border:7px solid var(--eui-c-primary);border-radius:var(--eui-br-max);height:14px;position:absolute;width:14px}.eui-timebar__step-date-item{background-color:var(--eui-c-neutral-light);border-radius:var(--eui-br-max);color:var(--eui-c-white);max-width:8rem;min-width:6rem;padding:var(--eui-s-xs);position:absolute;text-align:center;top:-2.5rem;transform:rotate(65deg);transform-origin:50% -175%;white-space:normal;font:var(--eui-f-s)}.eui-timebar__step-date-item--with-end-date{left:2.5rem;top:-1.75rem}.eui-timebar__step--with-current-date-marker.hint--top:before,.eui-timebar__step--with-current-date-marker.hint--top:after{bottom:25px}.eui-timebar__current-progress{border-bottom:3px solid var(--eui-c-primary);padding-top:5px;position:absolute}.eui-timebar__current-date-marker{color:var(--eui-c-danger);margin-left:-2px;position:absolute;top:calc(-1 * var(--eui-s-m) - var(--eui-s-2xs))}.eui-timebar__current-date-marker-step{bottom:calc(-1 * var(--eui-s-m) - 2px);color:var(--eui-c-danger);position:absolute}.eui-timebar__start-label,.eui-timebar__end-label{margin-top:6.5rem;font:var(--eui-f-s-bold)}.eui-timebar__start-label{text-align:right}.eui-timebar__step-date-item--with-end-date{margin:0;padding:0}.eui-timebar__step-label{margin-left:-4rem;margin-top:.7rem;overflow:hidden;position:absolute;text-align:center;width:8rem}.eui-timebar__legend{margin-left:var(--eui-s-s);margin-top:3rem}.eui-timebar__legend-item{align-items:center;display:flex;padding:var(--eui-s-xs) var(--eui-s-xs) var(--eui-s-xs) 0;width:100%}.eui-timebar__legend-item-label{flex:1}.eui-timebar__legend-item-index-wrapper{background-color:var(--eui-c-primary);border-radius:var(--eui-br-max);color:var(--eui-c-white);margin-right:var(--eui-s-m);padding:var(--eui-s-xs) var(--eui-s-s)}.eui-timebar__grouped__step{border-radius:var(--eui-br-m);display:block;padding:3px 8px}.eui-timebar__grouped__step.eui-timebar__step--info{background-color:var(--eui-c-info)}.eui-timebar__grouped__step.eui-timebar__step--success{background-color:var(--eui-c-success)}.eui-timebar__grouped__step.eui-timebar__step--warning{background-color:var(--eui-c-warning)}.eui-timebar__grouped__step.eui-timebar__step--danger{background-color:var(--eui-c-danger)}.eui-timebar__step--info{border-color:var(--eui-c-info)}.eui-timebar__step--info .eui-timebar__step-date-item{background-color:var(--eui-c-info)}.eui-timebar__step--success{border-color:var(--eui-c-success)}.eui-timebar__step--success .eui-timebar__step-date-item{background-color:var(--eui-c-success)}.eui-timebar__step--warning{border-color:var(--eui-c-warning)}.eui-timebar__step--warning .eui-timebar__step-date-item{background-color:var(--eui-c-warning)}.eui-timebar__step--danger{border-color:var(--eui-c-danger)}.eui-timebar__step--danger .eui-timebar__step-date-item{background-color:var(--eui-c-danger)}.eui-timebar__legend-item-icon{color:var(--eui-c-primary);fill:var(--eui-c-primary);width:var(--eui-s-3xl);height:var(--eui-s-3xl)}.eui-timebar__legend-item-icon--info{color:var(--eui-c-info)}.eui-timebar__legend-item-icon--success{color:var(--eui-c-success)}.eui-timebar__legend-item-icon--warning{color:var(--eui-c-warning)}.eui-timebar__legend-item-icon--danger{color:var(--eui-c-danger)}@media screen and (max-width: 767px){.eui-timebar{margin:5rem var(--eui-s-m)}.eui-timebar__legend{margin-bottom:var(--eui-s-l);margin-left:18px}}\n"] }]
258
258
  }], ctorParameters: () => [{ type: i1.EuiAppShellService }, { type: i0.ChangeDetectorRef }], propDecorators: { container: [{
259
259
  type: ViewChild,
260
260
  args: ['container']
@@ -299,4 +299,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-rc.1", ng
299
299
  declarations: [EuiTimebarComponent],
300
300
  }]
301
301
  }] });
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRpbWViYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRpbWViYXIvZXVpLXRpbWViYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRpbWViYXIvZXVpLXRpbWViYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILFNBQVMsRUFFVCxLQUFLLEVBQ0wsUUFBUSxFQU1SLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQXNCLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBR3pELE1BQU0sT0FBTyxnQkFBZ0I7Q0FTNUI7QUFRRCxNQUFNLE9BQU8sbUJBQW1CO0lBOEI1QixZQUNZLFNBQTZCLEVBQzdCLEVBQXFCO1FBRHJCLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBQzdCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBL0JqQyxZQUFPLEdBQXVCLEVBQUUsQ0FBQztRQUNqQyxnQkFBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFHekIsdUJBQWtCLEdBQUcsUUFBUSxDQUFDO1FBSzlCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUdwQixZQUFPLEdBQUcsYUFBYSxDQUFDO1FBS3hCLGVBQVUsR0FBRyxZQUFZLENBQUM7UUFFSyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQix3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDM0IsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLHFDQUFnQyxHQUFHLEtBQUssQ0FBQztRQUN6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LFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBFdWlBcHBTaGVsbFNlcnZpY2UsIGZvcm1hdE51bWJlciB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBFdWlJY29uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pY29uJztcbmltcG9ydCB7IEV1aVRpbWViYXJJdGVtIH0gZnJvbSAnLi9ldWktdGltZWJhci1pdGVtLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIEV1aVRpbWViYXJJdGVtVUkge1xuICAgIHBlcmM6IG51bWJlcjtcbiAgICBzdGVwVHlwZUNsYXNzOiBzdHJpbmc7XG4gICAgdG9vbHRpcENvbG9yOiBzdHJpbmc7XG4gICAgaXNHcm91cGVkPzogYm9vbGVhbjtcbiAgICBncm91cEluZGV4PzogbnVtYmVyO1xuICAgIGdyb3VwTGFiZWw/OiBzdHJpbmc7XG4gICAgZ3JvdXBFbmREYXRlPzogRGF0ZTtcbiAgICBpdGVtOiBFdWlUaW1lYmFySXRlbTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdGltZWJhcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10aW1lYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUaW1lYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgaXRlbXNVSTogRXVpVGltZWJhckl0ZW1VSVtdID0gW107XG4gICAgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGN1cnJlbnRQZXJjOiBudW1iZXI7XG4gICAgbWFya2VkUGVyYzogbnVtYmVyO1xuICAgIHRpbWViYXJDb2x1bW5DbGFzcyA9ICdjb2wtMTInO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIGlzU2hvd0xlZ2VuZEdlbmVyYXRlZDogYm9vbGVhbjtcbiAgICBpc1Nob3dMZWdlbmRBc0luZGV4R2VuZXJhdGVkOiBib29sZWFuO1xuICAgIGlzR3JvdXBPdmVybGFwcGluZ0xhYmVsc0dlbmVyYXRlZDogYm9vbGVhbjtcbiAgICBpc01vYmlsZSA9IGZhbHNlO1xuICAgIGlzU29tZVN0ZXBzQXJlR3JvdXBlZCA9IGZhbHNlO1xuICAgIGV4dHJhVGltZWxpbmVMYWJlbFNwYWNlID0gMjE7XG5cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIEBJbnB1dCgpIGUyZUF0dHIgPSAnZXVpLXRpbWViYXInO1xuICAgIEBJbnB1dCgpIG1hcmtlZERhdGU6IERhdGU7XG4gICAgQElucHV0KCkgaXRlbXM6IEV1aVRpbWViYXJJdGVtW107XG4gICAgQElucHV0KCkgc3RhcnRMYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVuZExhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0ZUZvcm1hdCA9ICd5eXl5LU1NLWRkJztcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1Nob3dMZWdlbmQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNTaG93TGVnZW5kQXNJbmRleCA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzU2hvd0N1cnJlbnREYXRlTWFya2VyID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ3VycmVudERhdGVNYXJrZXJBbHdheXNJblJhbmdlID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzR3JvdXBPdmVybGFwcGluZ0xhYmVscyA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIG1heFN0ZXBXaWR0aCA9IDExMjsgLy8gMTEycHggPSA4cmVtID0gMiB4IDRyZW0gbWFyZ2luIGFyb3VuZCBzdGFydGluZyBhbmQgZW5kaW5nIGJ1bGxldC5cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFzU2VydmljZTogRXVpQXBwU2hlbGxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFzU2VydmljZS5icmVha3BvaW50cyQuc3Vic2NyaWJlKChia3BzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQnJlYWtwb2ludENoYW5nZShia3BzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZU51bGxJdGVtcygpO1xuICAgICAgICB0aGlzLnNvcnRJdGVtcygpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZTogRGF0ZSA9IHRoaXMuaXRlbXNbMF0uZGF0ZTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZTogRGF0ZSA9IHRoaXMuaXRlbXNbdGhpcy5pdGVtcy5sZW5ndGggLSAxXS5kYXRlO1xuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdGVwVHlwZUNsYXNzID0gJyc7XG4gICAgICAgICAgICBsZXQgdG9vbHRpcENvbG9yID0gJ25vbmUnO1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5zdGVwVHlwZSkge1xuICAgICAgICAgICAgICAgIHN0ZXBUeXBlQ2xhc3MgPSAnZXVpLXRpbWViYXJfX3N0ZXAtLScgKyBpdGVtLnN0ZXBUeXBlO1xuICAgICAgICAgICAgICAgIHRvb2x0aXBDb2xvciA9IGl0ZW0uc3RlcFR5cGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTnVtYmVyID0gL15cXGQrXFwuXFxkKyQvLnRlc3QoaXRlbS5sYWJlbCkgfHwgL15cXGQrJC8udGVzdChpdGVtLmxhYmVsKTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5sYWJlbCA9IGZvcm1hdE51bWJlcihpdGVtLmxhYmVsLCAyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pdGVtc1VJLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcmM6IHRoaXMuY2FsY3VsYXRlUGVyY2VudGFnZShpdGVtLmRhdGUsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSksXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBzdGVwVHlwZUNsYXNzLFxuICAgICAgICAgICAgICAgIHRvb2x0aXBDb2xvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRQZXJjID0gdGhpcy5jYWxjdWxhdGVQZXJjZW50YWdlKHRoaXMuY3VycmVudERhdGUsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMubWFya2VkUGVyYyA9IHRoaXMuY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLm1hcmtlZERhdGUsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhcnRMYWJlbCAmJiB0aGlzLmVuZExhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWViYXJDb2x1bW5DbGFzcyA9ICdjb2wtOCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGFydExhYmVsIHx8IHRoaXMuZW5kTGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWViYXJDb2x1bW5DbGFzcyA9ICdjb2wtMTAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhdHRyaWJ1dGVzXG4gICAgICAgIHRoaXMuaXNTaG93TGVnZW5kR2VuZXJhdGVkID0gdGhpcy5pc1Nob3dMZWdlbmQ7XG4gICAgICAgIHRoaXMuaXNTaG93TGVnZW5kQXNJbmRleEdlbmVyYXRlZCA9IHRoaXMuaXNTaG93TGVnZW5kQXNJbmRleDtcbiAgICAgICAgdGhpcy5pc0dyb3VwT3ZlcmxhcHBpbmdMYWJlbHNHZW5lcmF0ZWQgPSB0aGlzLmlzR3JvdXBPdmVybGFwcGluZ0xhYmVscztcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ncm91cE92ZXJsYXBwaW5nTGFiZWxzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlc1snbWFya2VkRGF0ZSddO1xuICAgICAgICAgICAgaWYgKGNoYW5nZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZTogRGF0ZSA9IHRoaXMuaXRlbXNbMF0uZGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmREYXRlOiBEYXRlID0gdGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aCAtIDFdLmRhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrZWRQZXJjID0gdGhpcy5jYWxjdWxhdGVQZXJjZW50YWdlKGNoYW5nZS5jdXJyZW50VmFsdWUgYXMgRGF0ZSwgc3RhcnREYXRlLCBlbmREYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG9uQnJlYWtwb2ludENoYW5nZShia3BzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGJrcHMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93TGVnZW5kR2VuZXJhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93TGVnZW5kQXNJbmRleEdlbmVyYXRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzTW9iaWxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93TGVnZW5kR2VuZXJhdGVkID0gdGhpcy5pc1Nob3dMZWdlbmQ7XG4gICAgICAgICAgICB0aGlzLmlzU2hvd0xlZ2VuZEFzSW5kZXhHZW5lcmF0ZWQgPSB0aGlzLmlzU2hvd0xlZ2VuZEFzSW5kZXg7XG4gICAgICAgICAgICB0aGlzLmlzTW9iaWxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogRXVpVGltZWJhckl0ZW1VSSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLml0ZW0ubGFiZWw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbW92ZU51bGxJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pdGVtc1tpXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBzb3J0SXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICAvLyBTb3J0IGJ5IGFzY2VuZGluZyBkYXRlOlxuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuc29ydCgoYTogRXVpVGltZWJhckl0ZW0sIGI6IEV1aVRpbWViYXJJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGEgJiYgYikge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8YW55PmEuZGF0ZSAtIDxhbnk+Yi5kYXRlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdyb3VwT3ZlcmxhcHBpbmdMYWJlbHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXBPdmVybGFwcGluZ0xhYmVsc0dlbmVyYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckdyb3VwaW5nKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lciAmJiB0aGlzLml0ZW1zVUkgJiYgdGhpcy5pc1Nob3dMZWdlbmRBc0luZGV4R2VuZXJhdGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXJFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IGdyb3VwaW5nVGhyZXNob2xkID0gdGhpcy5tYXhTdGVwV2lkdGggLyAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwaW5nVGhyZXNob2xkID0gKHRoaXMubWF4U3RlcFdpZHRoICogMTAwKSAvIGNvbnRhaW5lcldpZHRoO1xuICAgICAgICAgICAgICAgIGxldCBncm91cGluZ0NvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIGxldCBtb2JpbGVJbmRleERpc3BsYWNlbWVudCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzVWlJdGVtID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdE1vYmlsZUluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pdGVtc1VJLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpSXRlbSA9IHRoaXMuaXRlbXNVSVtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVWlJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHVpSXRlbS5wZXJjIC0gcHJldmlvdXNVaUl0ZW0ucGVyYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPD0gZ3JvdXBpbmdUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHcm91cCB0aGUgMiBpdGVtczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgdGhpcy5pdGVtc1VJW2kgLSAxXS5pc0dyb3VwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlSW5kZXhEaXNwbGFjZW1lbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dMZWdlbmRHZW5lcmF0ZWQgJiYgbW9iaWxlSW5kZXhEaXNwbGFjZW1lbnQgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlSW5kZXhEaXNwbGFjZW1lbnQgPSBncm91cGluZ0NvdW50ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW9iaWxlSW5kZXggPSBtb2JpbGVJbmRleERpc3BsYWNlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZ0NvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nQ291bnRlcisrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1VpSXRlbS5ncm91cExhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVWlJdGVtLmdyb3VwSW5kZXggPSBncm91cGluZ0NvdW50ZXIgKyBsYXN0TW9iaWxlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dMZWdlbmRHZW5lcmF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVWlJdGVtLmdyb3VwTGFiZWwgPSAnJyArIChsYXN0TW9iaWxlSW5kZXggKyBncm91cGluZ0NvdW50ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNVaUl0ZW0uZ3JvdXBMYWJlbCA9ICcnICsgaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZ0NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzU2hvd0xlZ2VuZEdlbmVyYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1VpSXRlbS5ncm91cExhYmVsICs9ICcsICcgKyAobGFzdE1vYmlsZUluZGV4ICsgZ3JvdXBpbmdDb3VudGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1VpSXRlbS5ncm91cExhYmVsICs9ICcsICcgKyAoaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1VpSXRlbS5ncm91cEVuZERhdGUgPSB1aUl0ZW0uaXRlbS5kYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVWlJdGVtLnN0ZXBUeXBlQ2xhc3MgPSB1aUl0ZW0uaXRlbS5zdGVwVHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpSXRlbS5pc0dyb3VwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpSXRlbS5ncm91cEluZGV4ID0gZ3JvdXBpbmdDb3VudGVyICsgbGFzdE1vYmlsZUluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTb21lU3RlcHNBcmVHcm91cGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNVaUl0ZW0gPSB1aUl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1VpSXRlbSA9IHVpSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbGVhckdyb3VwaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU29tZVN0ZXBzQXJlR3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pdGVtc1VJKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtc1VJKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW0uaXNHcm91cGVkO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLmdyb3VwSW5kZXg7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW0uZ3JvdXBMYWJlbDtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXRlbS5ncm91cEVuZERhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leHRyYVRpbWVsaW5lTGFiZWxTcGFjZSA9IDIxO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjYWxjdWxhdGVFeHRyYVRpbWVsaW5lTGFiZWxTcGFjZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNVSSkge1xuICAgICAgICAgICAgbGV0IG1heExhYmVsTGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zVUkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pdGVtICYmIGl0ZW0uaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBtYXhMYWJlbExlbmd0aCA9IE1hdGgubWF4KG1heExhYmVsTGVuZ3RoLCBpdGVtLml0ZW0ubGFiZWwubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtYXhMYWJlbExlbmd0aCA+IDU2KSB7XG4gICAgICAgICAgICAgICAgLy8gNTZweCA9IDRyZW0gbWFyZ2luIG9mIHRoZSB0aW1lbGluZSBpdHNlbGYuXG4gICAgICAgICAgICAgICAgdGhpcy5leHRyYVRpbWVsaW5lTGFiZWxTcGFjZSA9IG1heExhYmVsTGVuZ3RoICsgMjg7IC8vIDI4cHggPSAycmVtID0gMSBsaW5lIG9mIHRleHQgaW4gaGVpZ2h0ICsgbWFyZ2luc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNhbGN1bGF0ZVBlcmNlbnRhZ2UoZGF0ZTogRGF0ZSwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBjb21wZW5zYXRlRm9yUmFuZ2UgPSBmYWxzZSk6IG51bWJlciB7XG4gICAgICAgIGlmIChkYXRlICYmIHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XG4gICAgICAgICAgICBsZXQgcGVyY2VudGFnZSA9ICgoZGF0ZS5nZXRUaW1lKCkgLSBzdGFydERhdGUuZ2V0VGltZSgpKSAvIChlbmREYXRlLmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCkpKSAqIDEwMDtcblxuICAgICAgICAgICAgaWYgKGNvbXBlbnNhdGVGb3JSYW5nZSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRlIGlzIG92ZXIgdGhlIGVuZCBkYXRlLCBvciBiZWxvdyB0aGUgc3RhcnQgZGF0ZVxuICAgICAgICAgICAgICAgIC8vIHNpbXVsYXRlIGl0cyBwb3NpdGlvbmluZyB0byBub3QgbWVzcyB1cCB0aGUgdGltZWJhciBnbG9iYWwgd2lkdGhcbiAgICAgICAgICAgICAgICBpZiAocGVyY2VudGFnZSA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnREYXRlTWFya2VyQWx3YXlzSW5SYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSAxMDM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnRhZ2UgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnREYXRlTWFya2VyQWx3YXlzSW5SYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gLTM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwZXJjZW50YWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRXVpSWNvbk1vZHVsZV0sXG4gICAgZXhwb3J0czogW0V1aVRpbWViYXJDb21wb25lbnRdLFxuICAgIGRlY2xhcmF0aW9uczogW0V1aVRpbWViYXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUaW1lYmFyTW9kdWxlIHt9XG4iLCI8ZGl2IGNsYXNzPVwicm93IGV1aS11LWZsZXhcIiAjY29udGFpbmVyPlxuICAgIDxkaXYgKm5nSWY9XCJzdGFydExhYmVsXCIgY2xhc3M9XCJjb2wtMiBldWktdGltZWJhcl9fc3RhcnQtbGFiZWxcIj5cbiAgICAgICAge3sgc3RhcnRMYWJlbCB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ7eyB0aW1lYmFyQ29sdW1uQ2xhc3MgfX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lYmFyXCIgW3N0eWxlLm1hcmdpbkJvdHRvbS5weF09XCJleHRyYVRpbWVsaW5lTGFiZWxTcGFjZVwiIGF0dHIuZGF0YS1lMmU9XCJ7eyBlMmVBdHRyIH19XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc1Nob3dDdXJyZW50RGF0ZU1hcmtlclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdGltZWJhcl9fY3VycmVudC1wcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiY3VycmVudFBlcmMgPj0gMTAwID8gMTAwIDogY3VycmVudFBlcmNcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtYXJrZWREYXRlXCIgY2xhc3M9XCJldWktdGltZWJhcl9fY3VycmVudC1wcm9ncmVzc1wiIFtzdHlsZS53aWR0aC4lXT1cIm1hcmtlZFBlcmMgPj0gMTAwID8gMTAwIDogbWFya2VkUGVyY1wiPjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc01vYmlsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNVSTsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5pc0dyb3VwZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lYmFyX19zdGVwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLnN0ZXBUeXBlQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwiaXRlbS5wZXJjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXRpbWViYXJfX3N0ZXAtLXdpdGgtY3VycmVudC1kYXRlLW1hcmtlcl09XCJpc1Nob3dDdXJyZW50RGF0ZU1hcmtlciB8fCBtYXJrZWREYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lYmFyX19zdGVwLWRhdGUtaXRlbVwiIFtjbGFzcy5ldWktdGltZWJhcl9fc3RlcC1kYXRlLWl0ZW0tLXdpdGgtZW5kLWRhdGVdPVwiaXRlbS5ncm91cEVuZERhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5ncm91cEVuZERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdGltZWJhcl9fZ3JvdXBlZF9fc3RlcCB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RlcFR5cGVDbGFzcyA/ICdldWktdGltZWJhcl9fc3RlcC0tJyArIGl0ZW0uc3RlcFR5cGVDbGFzcyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5ncm91cEVuZERhdGUgfCBkYXRlOiBkYXRlRm9ybWF0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaXRlbS50b29sdGlwQ29sb3IgPyAnZXVpLXRpbWViYXJfX3N0ZXAtLScgKyBpdGVtLnRvb2x0aXBDb2xvciA6ICcnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdGltZWJhcl9fZ3JvdXBlZF9fc3RlcF09XCJpdGVtLmdyb3VwRW5kRGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5pdGVtLmRhdGUgfCBkYXRlOiBkYXRlRm9ybWF0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzU2hvd0xlZ2VuZEdlbmVyYXRlZFwiIFtzdHlsZS5sZWZ0LiVdPVwiaXRlbS5wZXJjXCIgY2xhc3M9XCJldWktdGltZWJhcl9fc3RlcC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uZ3JvdXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBpdGVtLml0ZW0ubGFiZWwgfX1cIj57eyBpdGVtLml0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5ncm91cExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGl0ZW0uZ3JvdXBMYWJlbCB9fVwiPnt7IGl0ZW0uZ3JvdXBMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzU2hvd0xlZ2VuZEdlbmVyYXRlZCAmJiBpc1Nob3dMZWdlbmRBc0luZGV4R2VuZXJhdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJpdGVtLnBlcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lYmFyX19zdGVwLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5ncm91cExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uZ3JvdXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5ncm91cExhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzTW9iaWxlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1VJOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLmlzR3JvdXBlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXRpbWViYXJfX3N0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uc3RlcFR5cGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJpdGVtLnBlcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdGltZWJhcl9fc3RlcC0td2l0aC1jdXJyZW50LWRhdGUtbWFya2VyXT1cImlzU2hvd0N1cnJlbnREYXRlTWFya2VyIHx8IG1hcmtlZERhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzU2hvd0xlZ2VuZEdlbmVyYXRlZFwiIGNsYXNzPVwiZXVpLXRpbWViYXJfX3N0ZXAtbGFiZWxcIiB0aXRsZT1cInt7IGl0ZW0uaXRlbS5sYWJlbCB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uZ3JvdXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBpdGVtLml0ZW0ubGFiZWwgfX1cIj57eyBpdGVtLml0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5ncm91cExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmdyb3VwTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU2hvd0xlZ2VuZEdlbmVyYXRlZCAmJiBpc1Nob3dMZWdlbmRBc0luZGV4R2VuZXJhdGVkXCIgY2xhc3M9XCJldWktdGltZWJhcl9fc3RlcC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uZ3JvdXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmdyb3VwTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZ3JvdXBMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzU2hvd0N1cnJlbnREYXRlTWFya2VyXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lYmFyX19jdXJyZW50LWRhdGUtbWFya2VyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImN1cnJlbnRQZXJjXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGN1cnJlbnREYXRlIHwgZGF0ZTogZGF0ZUZvcm1hdCB9fVwiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImxvY2F0aW9uXCIgc2V0PVwic2hhcnBcIiBzaXplPVwibVwiIGZpbGxDb2xvcj1cImRhbmdlci0xMDBcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU2hvd0N1cnJlbnREYXRlTWFya2VyXCIgY2xhc3M9XCJldWktdGltZWJhcl9fY3VycmVudC1kYXRlLW1hcmtlci1zdGVwXCIgW3N0eWxlLmxlZnQuJV09XCJjdXJyZW50UGVyY1wiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImV1aS1lbGxpcHNlXCIgc2V0PVwiZXVpXCIgc2l6ZT1cInNcIiBmaWxsQ29sb3I9XCJkYW5nZXItMTAwXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1hcmtlZERhdGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXRpbWViYXJfX2N1cnJlbnQtZGF0ZS1tYXJrZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwibWFya2VkUGVyY1wiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBtYXJrZWREYXRlIHwgZGF0ZTogZGF0ZUZvcm1hdCB9fVwiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImxvY2F0aW9uXCIgc2V0PVwic2hhcnBcIiBzaXplPVwibVwiIGZpbGxDb2xvcj1cImRhbmdlci0xMDBcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1hcmtlZERhdGVcIiBjbGFzcz1cImV1aS10aW1lYmFyX19jdXJyZW50LWRhdGUtbWFya2VyLXN0ZXBcIiBbc3R5bGUubGVmdC4lXT1cIm1hcmtlZFBlcmNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJldWktZWxsaXBzZVwiIHNldD1cImV1aVwiIHNpemU9XCJzXCIgZmlsbENvbG9yPVwiZGFuZ2VyLTEwMFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJlbmRMYWJlbFwiIGNsYXNzPVwiY29sLTIgZXVpLXRpbWViYXJfX2VuZC1sYWJlbFwiPlxuICAgICAgICB7eyBlbmRMYWJlbCB9fVxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicm93IGV1aS11LWZsZXhcIj5cbiAgICA8ZGl2ICpuZ0lmPVwic3RhcnRMYWJlbFwiIGNsYXNzPVwiY29sLTJcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwie3sgdGltZWJhckNvbHVtbkNsYXNzIH19XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc1Nob3dMZWdlbmRHZW5lcmF0ZWQgfHwgaXNTb21lU3RlcHNBcmVHcm91cGVkXCIgY2xhc3M9XCJldWktdGltZWJhcl9fbGVnZW5kXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTaG93TGVnZW5kR2VuZXJhdGVkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lYmFyX19sZWdlbmQtaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zVUk7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzU2hvd0xlZ2VuZEFzSW5kZXhHZW5lcmF0ZWRcIiBjbGFzcz1cImV1aS10aW1lYmFyX19sZWdlbmQtaXRlbS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJldWktZWxsaXBzZVwiIHNldD1cImV1aVwiIHNpemU9XCJzXCIgZmlsbENvbG9yPVwie3sgaXRlbS5pdGVtLnN0ZXBUeXBlIH19XCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNTaG93TGVnZW5kQXNJbmRleEdlbmVyYXRlZFwiIGNsYXNzPVwiZXVpLXRpbWViYXJfX2xlZ2VuZC1pdGVtLWluZGV4LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRpbWViYXJfX2xlZ2VuZC1pdGVtLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNNb2JpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGl0ZW0uaXRlbS5kYXRlIHwgZGF0ZTogZGF0ZUZvcm1hdCB9fTwvc3Ryb25nPiAtIHt7IGl0ZW0uaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNNb2JpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLml0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzU2hvd0xlZ2VuZEdlbmVyYXRlZFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNVSTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmdyb3VwTGFiZWwgfHwgaXRlbS5pc0dyb3VwZWRcIiBjbGFzcz1cImV1aS10aW1lYmFyX19sZWdlbmQtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lYmFyX19sZWdlbmQtaXRlbS1pbmRleC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5ncm91cEluZGV4IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdGltZWJhcl9fbGVnZW5kLWl0ZW0tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGl0ZW0uaXRlbS5kYXRlIHwgZGF0ZTogZGF0ZUZvcm1hdCB9fTwvc3Ryb25nPiAtIHt7IGl0ZW0uaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJlbmRMYWJlbFwiIGNsYXNzPVwiY29sLTJcIj48L2Rpdj5cbjwvZGl2PlxuIl19
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRpbWViYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRpbWViYXIvZXVpLXRpbWViYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRpbWViYXIvZXVpLXRpbWViYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILFNBQVMsRUFFVCxLQUFLLEVBQ0wsUUFBUSxFQU1SLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQXNCLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBR3pELE1BQU0sT0FBTyxnQkFBZ0I7Q0FTNUI7QUFRRCxNQUFNLE9BQU8sbUJBQW1CO0lBOEI1QixZQUNZLFNBQTZCLEVBQzdCLEVBQXFCO1FBRHJCLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBQzdCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBL0JqQyxZQUFPLEdBQXVCLEVBQUUsQ0FBQztRQUNqQyxnQkFBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFHekIsdUJBQWtCLEdBQUcsUUFBUSxDQUFDO1FBSzlCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUdwQixZQUFPLEdBQUcsYUFBYSxDQUFDO1FBS3hCLGVBQVUsR0FBRyxZQUFZLENBQUM7UUFFSyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQix3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDM0IsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLHFDQUFnQyxHQUFHLEtBQUssQ0FBQztRQUN6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LFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBFdWlBcHBTaGVsbFNlcnZpY2UsIGZvcm1hdE51bWJlciB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBFdWlJY29uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pY29uJztcbmltcG9ydCB7IEV1aVRpbWViYXJJdGVtIH0gZnJvbSAnLi9ldWktdGltZWJhci1pdGVtLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIEV1aVRpbWViYXJJdGVtVUkge1xuICAgIHBlcmM6IG51bWJlcjtcbiAgICBzdGVwVHlwZUNsYXNzOiBzdHJpbmc7XG4gICAgdG9vbHRpcENvbG9yOiBzdHJpbmc7XG4gICAgaXNHcm91cGVkPzogYm9vbGVhbjtcbiAgICBncm91cEluZGV4PzogbnVtYmVyO1xuICAgIGdyb3VwTGFiZWw/OiBzdHJpbmc7XG4gICAgZ3JvdXBFbmREYXRlPzogRGF0ZTtcbiAgICBpdGVtOiBFdWlUaW1lYmFySXRlbTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdGltZWJhcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10aW1lYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUaW1lYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgaXRlbXNVSTogRXVpVGltZWJhckl0ZW1VSVtdID0gW107XG4gICAgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGN1cnJlbnRQZXJjOiBudW1iZXI7XG4gICAgbWFya2VkUGVyYzogbnVtYmVyO1xuICAgIHRpbWViYXJDb2x1bW5DbGFzcyA9ICdjb2wtMTInO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIGlzU2hvd0xlZ2VuZEdlbmVyYXRlZDogYm9vbGVhbjtcbiAgICBpc1Nob3dMZWdlbmRBc0luZGV4R2VuZXJhdGVkOiBib29sZWFuO1xuICAgIGlzR3JvdXBPdmVybGFwcGluZ0xhYmVsc0dlbmVyYXRlZDogYm9vbGVhbjtcbiAgICBpc01vYmlsZSA9IGZhbHNlO1xuICAgIGlzU29tZVN0ZXBzQXJlR3JvdXBlZCA9IGZhbHNlO1xuICAgIGV4dHJhVGltZWxpbmVMYWJlbFNwYWNlID0gMjE7XG5cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIEBJbnB1dCgpIGUyZUF0dHIgPSAnZXVpLXRpbWViYXInO1xuICAgIEBJbnB1dCgpIG1hcmtlZERhdGU6IERhdGU7XG4gICAgQElucHV0KCkgaXRlbXM6IEV1aVRpbWViYXJJdGVtW107XG4gICAgQElucHV0KCkgc3RhcnRMYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVuZExhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0ZUZvcm1hdCA9ICd5eXl5LU1NLWRkJztcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1Nob3dMZWdlbmQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNTaG93TGVnZW5kQXNJbmRleCA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzU2hvd0N1cnJlbnREYXRlTWFya2VyID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ3VycmVudERhdGVNYXJrZXJBbHdheXNJblJhbmdlID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzR3JvdXBPdmVybGFwcGluZ0xhYmVscyA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIG1heFN0ZXBXaWR0aCA9IDExMjsgLy8gMTEycHggPSA4cmVtID0gMiB4IDRyZW0gbWFyZ2luIGFyb3VuZCBzdGFydGluZyBhbmQgZW5kaW5nIGJ1bGxldC5cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFzU2VydmljZTogRXVpQXBwU2hlbGxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFzU2VydmljZS5icmVha3BvaW50cyQuc3Vic2NyaWJlKChia3BzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQnJlYWtwb2ludENoYW5nZShia3BzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZU51bGxJdGVtcygpO1xuICAgICAgICB0aGlzLnNvcnRJdGVtcygpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZTogRGF0ZSA9IHRoaXMuaXRlbXNbMF0uZGF0ZTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZTogRGF0ZSA9IHRoaXMuaXRlbXNbdGhpcy5pdGVtcy5sZW5ndGggLSAxXS5kYXRlO1xuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdGVwVHlwZUNsYXNzID0gJyc7XG4gICAgICAgICAgICBsZXQgdG9vbHRpcENvbG9yID0gJ25vbmUnO1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5zdGVwVHlwZSkge1xuICAgICAgICAgICAgICAgIHN0ZXBUeXBlQ2xhc3MgPSAnZXVpLXRpbWViYXJfX3N0ZXAtLScgKyBpdGVtLnN0ZXBUeXBlO1xuICAgICAgICAgICAgICAgIHRvb2x0aXBDb2xvciA9IGl0ZW0uc3RlcFR5cGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTnVtYmVyID0gL15cXGQrXFwuXFxkKyQvLnRlc3QoaXRlbS5sYWJlbCkgfHwgL15cXGQrJC8udGVzdChpdGVtLmxhYmVsKTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5sYWJlbCA9IGZvcm1hdE51bWJlcihpdGVtLmxhYmVsLCAyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pdGVtc1VJLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcmM6IHRoaXMuY2FsY3VsYXRlUGVyY2VudGFnZShpdGVtLmRhdGUsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSksXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBzdGVwVHlwZUNsYXNzLFxuICAgICAgICAgICAgICAgIHRvb2x0aXBDb2xvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRQZXJjID0gdGhpcy5jYWxjdWxhdGVQZXJjZW50YWdlKHRoaXMuY3VycmVudERhdGUsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMubWFya2VkUGVyYyA9IHRoaXMuY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLm1hcmtlZERhdGUsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhcnRMYWJlbCAmJiB0aGlzLmVuZExhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWViYXJDb2x1bW5DbGFzcyA9ICdjb2wtOCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGFydExhYmVsIHx8IHRoaXMuZW5kTGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWViYXJDb2x1bW5DbGFzcyA9ICdjb2wtMTAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhdHRyaWJ1dGVzXG4gICAgICAgIHRoaXMuaXNTaG93TGVnZW5kR2VuZXJhdGVkID0gdGhpcy5pc1Nob3dMZWdlbmQ7XG4gICAgICAgIHRoaXMuaXNTaG93TGVnZW5kQXNJbmRleEdlbmVyYXRlZCA9IHRoaXMuaXNTaG93TGVnZW5kQXNJbmRleDtcbiAgICAgICAgdGhpcy5pc0dyb3VwT3ZlcmxhcHBpbmdMYWJlbHNHZW5lcmF0ZWQgPSB0aGlzLmlzR3JvdXBPdmVybGFwcGluZ0xhYmVscztcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ncm91cE92ZXJsYXBwaW5nTGFiZWxzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlc1snbWFya2VkRGF0ZSddO1xuICAgICAgICAgICAgaWYgKGNoYW5nZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZTogRGF0ZSA9IHRoaXMuaXRlbXNbMF0uZGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmREYXRlOiBEYXRlID0gdGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aCAtIDFdLmRhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrZWRQZXJjID0gdGhpcy5jYWxjdWxhdGVQZXJjZW50YWdlKGNoYW5nZS5jdXJyZW50VmFsdWUgYXMgRGF0ZSwgc3RhcnREYXRlLCBlbmREYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG9uQnJlYWtwb2ludENoYW5nZShia3BzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGJrcHMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93TGVnZW5kR2VuZXJhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93TGVnZW5kQXNJbmRleEdlbmVyYXRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzTW9iaWxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93TGVnZW5kR2VuZXJhdGVkID0gdGhpcy5pc1Nob3dMZWdlbmQ7XG4gICAgICAgICAgICB0aGlzLmlzU2hvd0xlZ2VuZEFzSW5kZXhHZW5lcmF0ZWQgPSB0aGlzLmlzU2hvd0xlZ2VuZEFzSW5kZXg7XG4gICAgICAgICAgICB0aGlzLmlzTW9iaWxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogRXVpVGltZWJhckl0ZW1VSSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLml0ZW0ubGFiZWw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbW92ZU51bGxJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pdGVtc1tpXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBzb3J0SXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICAvLyBTb3J0IGJ5IGFzY2VuZGluZyBkYXRlOlxuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuc29ydCgoYTogRXVpVGltZWJhckl0ZW0sIGI6IEV1aVRpbWViYXJJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGEgJiYgYikge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8YW55PmEuZGF0ZSAtIDxhbnk+Yi5kYXRlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdyb3VwT3ZlcmxhcHBpbmdMYWJlbHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXBPdmVybGFwcGluZ0xhYmVsc0dlbmVyYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckdyb3VwaW5nKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lciAmJiB0aGlzLml0ZW1zVUkgJiYgdGhpcy5pc1Nob3dMZWdlbmRBc0luZGV4R2VuZXJhdGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXJFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IGdyb3VwaW5nVGhyZXNob2xkID0gdGhpcy5tYXhTdGVwV2lkdGggLyAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwaW5nVGhyZXNob2xkID0gKHRoaXMubWF4U3RlcFdpZHRoICogMTAwKSAvIGNvbnRhaW5lcldpZHRoO1xuICAgICAgICAgICAgICAgIGxldCBncm91cGluZ0NvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIGxldCBtb2JpbGVJbmRleERpc3BsYWNlbWVudCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzVWlJdGVtID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdE1vYmlsZUluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pdGVtc1VJLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpSXRlbSA9IHRoaXMuaXRlbXNVSVtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVWlJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHVpSXRlbS5wZXJjIC0gcHJldmlvdXNVaUl0ZW0ucGVyYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPD0gZ3JvdXBpbmdUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHcm91cCB0aGUgMiBpdGVtczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgdGhpcy5pdGVtc1VJW2kgLSAxXS5pc0dyb3VwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlSW5kZXhEaXNwbGFjZW1lbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dMZWdlbmRHZW5lcmF0ZWQgJiYgbW9iaWxlSW5kZXhEaXNwbGFjZW1lbnQgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlSW5kZXhEaXNwbGFjZW1lbnQgPSBncm91cGluZ0NvdW50ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW9iaWxlSW5kZXggPSBtb2JpbGVJbmRleERpc3BsYWNlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZ0NvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nQ291bnRlcisrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1VpSXRlbS5ncm91cExhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVWlJdGVtLmdyb3VwSW5kZXggPSBncm91cGluZ0NvdW50ZXIgKyBsYXN0TW9iaWxlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dMZWdlbmRHZW5lcmF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVWlJdGVtLmdyb3VwTGFiZWwgPSAnJyArIChsYXN0TW9iaWxlSW5kZXggKyBncm91cGluZ0NvdW50ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNVaUl0ZW0uZ3JvdXBMYWJlbCA9ICcnICsgaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZ0NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzU2hvd0xlZ2VuZEdlbmVyYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1VpSXRlbS5ncm91cExhYmVsICs9ICcsICcgKyAobGFzdE1vYmlsZUluZGV4ICsgZ3JvdXBpbmdDb3VudGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1VpSXRlbS5ncm91cExhYmVsICs9ICcsICcgKyAoaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1VpSXRlbS5ncm91cEVuZERhdGUgPSB1aUl0ZW0uaXRlbS5kYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVWlJdGVtLnN0ZXBUeXBlQ2xhc3MgPSB1aUl0ZW0uaXRlbS5zdGVwVHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpSXRlbS5pc0dyb3VwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpSXRlbS5ncm91cEluZGV4ID0gZ3JvdXBpbmdDb3VudGVyICsgbGFzdE1vYmlsZUluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTb21lU3RlcHNBcmVHcm91cGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNVaUl0ZW0gPSB1aUl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1VpSXRlbSA9IHVpSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbGVhckdyb3VwaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU29tZVN0ZXBzQXJlR3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pdGVtc1VJKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtc1VJKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW0uaXNHcm91cGVkO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLmdyb3VwSW5kZXg7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW0uZ3JvdXBMYWJlbDtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXRlbS5ncm91cEVuZERhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leHRyYVRpbWVsaW5lTGFiZWxTcGFjZSA9IDIxO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjYWxjdWxhdGVFeHRyYVRpbWVsaW5lTGFiZWxTcGFjZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNVSSkge1xuICAgICAgICAgICAgbGV0IG1heExhYmVsTGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zVUkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pdGVtICYmIGl0ZW0uaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBtYXhMYWJlbExlbmd0aCA9IE1hdGgubWF4KG1heExhYmVsTGVuZ3RoLCBpdGVtLml0ZW0ubGFiZWwubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtYXhMYWJlbExlbmd0aCA+IDU2KSB7XG4gICAgICAgICAgICAgICAgLy8gNTZweCA9IDRyZW0gbWFyZ2luIG9mIHRoZSB0aW1lbGluZSBpdHNlbGYuXG4gICAgICAgICAgICAgICAgdGhpcy5leHRyYVRpbWVsaW5lTGFiZWxTcGFjZSA9IG1heExhYmVsTGVuZ3RoICsgMjg7IC8vIDI4cHggPSAycmVtID0gMSBsaW5lIG9mIHRleHQgaW4gaGVpZ2h0ICsgbWFyZ2luc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNhbGN1bGF0ZVBlcmNlbnRhZ2UoZGF0ZTogRGF0ZSwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBjb21wZW5zYXRlRm9yUmFuZ2UgPSBmYWxzZSk6IG51bWJlciB7XG4gICAgICAgIGlmIChkYXRlICYmIHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XG4gICAgICAgICAgICBsZXQgcGVyY2VudGFnZSA9ICgoZGF0ZS5nZXRUaW1lKCkgLSBzdGFydERhdGUuZ2V0VGltZSgpKSAvIChlbmREYXRlLmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCkpKSAqIDEwMDtcblxuICAgICAgICAgICAgaWYgKGNvbXBlbnNhdGVGb3JSYW5nZSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRlIGlzIG92ZXIgdGhlIGVuZCBkYXRlLCBvciBiZWxvdyB0aGUgc3RhcnQgZGF0ZVxuICAgICAgICAgICAgICAgIC8vIHNpbXVsYXRlIGl0cyBwb3NpdGlvbmluZyB0byBub3QgbWVzcyB1cCB0aGUgdGltZWJhciBnbG9iYWwgd2lkdGhcbiAgICAgICAgICAgICAgICBpZiAocGVyY2VudGFnZSA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnREYXRlTWFya2VyQWx3YXlzSW5SYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSAxMDM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnRhZ2UgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnREYXRlTWFya2VyQWx3YXlzSW5SYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gLTM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwZXJjZW50YWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRXVpSWNvbk1vZHVsZV0sXG4gICAgZXhwb3J0czogW0V1aVRpbWViYXJDb21wb25lbnRdLFxuICAgIGRlY2xhcmF0aW9uczogW0V1aVRpbWViYXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUaW1lYmFyTW9kdWxlIHt9XG4iLCI8ZGl2IGNsYXNzPVwicm93IGV1aS11LWZsZXhcIiAjY29udGFpbmVyPlxuICAgIDxkaXYgKm5nSWY9XCJzdGFydExhYmVsXCIgY2xhc3M9XCJjb2wtMiBldWktdGltZWJhcl9fc3RhcnQtbGFiZWxcIj5cbiAgICAgICAge3sgc3RhcnRMYWJlbCB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ7eyB0aW1lYmFyQ29sdW1uQ2xhc3MgfX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lYmFyXCIgW3N0eWxlLm1hcmdpbkJvdHRvbS5weF09XCJleHRyYVRpbWVsaW5lTGFiZWxTcGFjZVwiIGF0dHIuZGF0YS1lMmU9XCJ7eyBlMmVBdHRyIH19XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc1Nob3dDdXJyZW50RGF0ZU1hcmtlclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdGltZWJhcl9fY3VycmVudC1wcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiY3VycmVudFBlcmMgPj0gMTAwID8gMTAwIDogY3VycmVudFBlcmNcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtYXJrZWREYXRlXCIgY2xhc3M9XCJldWktdGltZWJhcl9fY3VycmVudC1wcm9ncmVzc1wiIFtzdHlsZS53aWR0aC4lXT1cIm1hcmtlZFBlcmMgPj0gMTAwID8gMTAwIDogbWFya2VkUGVyY1wiPjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc01vYmlsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNVSTsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5pc0dyb3VwZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lYmFyX19zdGVwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLnN0ZXBUeXBlQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwiaXRlbS5wZXJjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXRpbWViYXJfX3N0ZXAtLXdpdGgtY3VycmVudC1kYXRlLW1hcmtlcl09XCJpc1Nob3dDdXJyZW50RGF0ZU1hcmtlciB8fCBtYXJrZWREYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lYmFyX19zdGVwLWRhdGUtaXRlbVwiIFtjbGFzcy5ldWktdGltZWJhcl9fc3RlcC1kYXRlLWl0ZW0tLXdpdGgtZW5kLWRhdGVdPVwiaXRlbS5ncm91cEVuZERhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5ncm91cEVuZERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdGltZWJhcl9fZ3JvdXBlZF9fc3RlcCB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RlcFR5cGVDbGFzcyA/ICdldWktdGltZWJhcl9fc3RlcC0tJyArIGl0ZW0uc3RlcFR5cGVDbGFzcyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5ncm91cEVuZERhdGUgfCBkYXRlOiBkYXRlRm9ybWF0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaXRlbS50b29sdGlwQ29sb3IgPyAnZXVpLXRpbWViYXJfX3N0ZXAtLScgKyBpdGVtLnRvb2x0aXBDb2xvciA6ICcnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdGltZWJhcl9fZ3JvdXBlZF9fc3RlcF09XCJpdGVtLmdyb3VwRW5kRGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5pdGVtLmRhdGUgfCBkYXRlOiBkYXRlRm9ybWF0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzU2hvd0xlZ2VuZEdlbmVyYXRlZFwiIFtzdHlsZS5sZWZ0LiVdPVwiaXRlbS5wZXJjXCIgY2xhc3M9XCJldWktdGltZWJhcl9fc3RlcC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uZ3JvdXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBpdGVtLml0ZW0ubGFiZWwgfX1cIj57eyBpdGVtLml0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5ncm91cExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGl0ZW0uZ3JvdXBMYWJlbCB9fVwiPnt7IGl0ZW0uZ3JvdXBMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzU2hvd0xlZ2VuZEdlbmVyYXRlZCAmJiBpc1Nob3dMZWdlbmRBc0luZGV4R2VuZXJhdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJpdGVtLnBlcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lYmFyX19zdGVwLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5ncm91cExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uZ3JvdXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5ncm91cExhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzTW9iaWxlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1VJOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLmlzR3JvdXBlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXRpbWViYXJfX3N0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uc3RlcFR5cGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJpdGVtLnBlcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdGltZWJhcl9fc3RlcC0td2l0aC1jdXJyZW50LWRhdGUtbWFya2VyXT1cImlzU2hvd0N1cnJlbnREYXRlTWFya2VyIHx8IG1hcmtlZERhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzU2hvd0xlZ2VuZEdlbmVyYXRlZFwiIGNsYXNzPVwiZXVpLXRpbWViYXJfX3N0ZXAtbGFiZWxcIiB0aXRsZT1cInt7IGl0ZW0uaXRlbS5sYWJlbCB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uZ3JvdXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBpdGVtLml0ZW0ubGFiZWwgfX1cIj57eyBpdGVtLml0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5ncm91cExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmdyb3VwTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU2hvd0xlZ2VuZEdlbmVyYXRlZCAmJiBpc1Nob3dMZWdlbmRBc0luZGV4R2VuZXJhdGVkXCIgY2xhc3M9XCJldWktdGltZWJhcl9fc3RlcC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uZ3JvdXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmdyb3VwTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZ3JvdXBMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzU2hvd0N1cnJlbnREYXRlTWFya2VyXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lYmFyX19jdXJyZW50LWRhdGUtbWFya2VyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImN1cnJlbnRQZXJjXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGN1cnJlbnREYXRlIHwgZGF0ZTogZGF0ZUZvcm1hdCB9fVwiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImxvY2F0aW9uXCIgc2V0PVwic2hhcnBcIiBzaXplPVwibVwiIGZpbGxDb2xvcj1cImRhbmdlci0xMDBcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU2hvd0N1cnJlbnREYXRlTWFya2VyXCIgY2xhc3M9XCJldWktdGltZWJhcl9fY3VycmVudC1kYXRlLW1hcmtlci1zdGVwXCIgW3N0eWxlLmxlZnQuJV09XCJjdXJyZW50UGVyY1wiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImVsbGlwc2U6c2hhcnBcIiBzaXplPVwic1wiIGZpbGxDb2xvcj1cImRhbmdlci0xMDBcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWFya2VkRGF0ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdGltZWJhcl9fY3VycmVudC1kYXRlLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJtYXJrZWRQZXJjXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7IG1hcmtlZERhdGUgfCBkYXRlOiBkYXRlRm9ybWF0IH19XCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBpY29uPVwibG9jYXRpb25cIiBzZXQ9XCJzaGFycFwiIHNpemU9XCJtXCIgZmlsbENvbG9yPVwiZGFuZ2VyLTEwMFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWFya2VkRGF0ZVwiIGNsYXNzPVwiZXVpLXRpbWViYXJfX2N1cnJlbnQtZGF0ZS1tYXJrZXItc3RlcFwiIFtzdHlsZS5sZWZ0LiVdPVwibWFya2VkUGVyY1wiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImVsbGlwc2U6c2hhcnBcIiBzaXplPVwic1wiIGZpbGxDb2xvcj1cImRhbmdlci0xMDBcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZW5kTGFiZWxcIiBjbGFzcz1cImNvbC0yIGV1aS10aW1lYmFyX19lbmQtbGFiZWxcIj5cbiAgICAgICAge3sgZW5kTGFiZWwgfX1cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInJvdyBldWktdS1mbGV4XCI+XG4gICAgPGRpdiAqbmdJZj1cInN0YXJ0TGFiZWxcIiBjbGFzcz1cImNvbC0yXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInt7IHRpbWViYXJDb2x1bW5DbGFzcyB9fVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNTaG93TGVnZW5kR2VuZXJhdGVkIHx8IGlzU29tZVN0ZXBzQXJlR3JvdXBlZFwiIGNsYXNzPVwiZXVpLXRpbWViYXJfX2xlZ2VuZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2hvd0xlZ2VuZEdlbmVyYXRlZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdGltZWJhcl9fbGVnZW5kLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1VJOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc1Nob3dMZWdlbmRBc0luZGV4R2VuZXJhdGVkXCIgY2xhc3M9XCJldWktdGltZWJhcl9fbGVnZW5kLWl0ZW0taWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBpY29uPVwiZWxsaXBzZTpzaGFycFwiIHNpemU9XCJzXCIgZmlsbENvbG9yPVwie3sgaXRlbS5pdGVtLnN0ZXBUeXBlIH19XCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNTaG93TGVnZW5kQXNJbmRleEdlbmVyYXRlZFwiIGNsYXNzPVwiZXVpLXRpbWViYXJfX2xlZ2VuZC1pdGVtLWluZGV4LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRpbWViYXJfX2xlZ2VuZC1pdGVtLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNNb2JpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGl0ZW0uaXRlbS5kYXRlIHwgZGF0ZTogZGF0ZUZvcm1hdCB9fTwvc3Ryb25nPiAtIHt7IGl0ZW0uaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNNb2JpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLml0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzU2hvd0xlZ2VuZEdlbmVyYXRlZFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNVSTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmdyb3VwTGFiZWwgfHwgaXRlbS5pc0dyb3VwZWRcIiBjbGFzcz1cImV1aS10aW1lYmFyX19sZWdlbmQtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lYmFyX19sZWdlbmQtaXRlbS1pbmRleC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5ncm91cEluZGV4IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdGltZWJhcl9fbGVnZW5kLWl0ZW0tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGl0ZW0uaXRlbS5kYXRlIHwgZGF0ZTogZGF0ZUZvcm1hdCB9fTwvc3Ryb25nPiAtIHt7IGl0ZW0uaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJlbmRMYWJlbFwiIGNsYXNzPVwiY29sLTJcIj48L2Rpdj5cbjwvZGl2PlxuIl19