@grafana/scenes 6.7.0 → 6.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +33 -0
  3. package/dist/esm/dist/esm/behaviors/CursorSync.js +76 -0
  4. package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +44 -0
  5. package/dist/esm/dist/esm/behaviors/SceneQueryController.js +14 -0
  6. package/dist/esm/dist/esm/components/EmbeddedScene.js +59 -0
  7. package/dist/esm/dist/esm/components/NestedScene.js +95 -0
  8. package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +27 -0
  9. package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +176 -0
  10. package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +104 -0
  11. package/dist/esm/dist/esm/components/SceneApp/utils.js +42 -0
  12. package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +41 -0
  13. package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +55 -0
  14. package/dist/esm/dist/esm/components/SceneCanvasText.js +32 -0
  15. package/dist/esm/dist/esm/components/SceneControlsSpacer.js +17 -0
  16. package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +82 -0
  17. package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +72 -0
  18. package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +77 -0
  19. package/dist/esm/dist/esm/components/SceneReactObject.js +34 -0
  20. package/dist/esm/dist/esm/components/SceneRefreshPicker.js +205 -0
  21. package/dist/esm/dist/esm/components/SceneTimePicker.js +139 -0
  22. package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +240 -0
  23. package/dist/esm/dist/esm/components/SceneToolbarButton.js +33 -0
  24. package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +406 -0
  25. package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +44 -0
  26. package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +59 -0
  27. package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +285 -0
  28. package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  29. package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  30. package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +11 -0
  31. package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  32. package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  33. package/dist/esm/dist/esm/components/layout/LazyLoader.js +103 -0
  34. package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +135 -0
  35. package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +30 -0
  36. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +283 -0
  37. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  38. package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +190 -0
  39. package/dist/esm/dist/esm/components/layout/grid/constants.js +7 -0
  40. package/dist/esm/dist/esm/components/layout/grid/utils.js +36 -0
  41. package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +17 -0
  42. package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +29 -0
  43. package/dist/esm/dist/esm/components/layout/split/Splitter.js +386 -0
  44. package/dist/esm/dist/esm/core/SceneComponentWrapper.js +57 -0
  45. package/dist/esm/dist/esm/core/SceneDataNode.js +43 -0
  46. package/dist/esm/dist/esm/core/SceneObjectBase.js +286 -0
  47. package/dist/esm/dist/esm/core/SceneObjectRef.js +32 -0
  48. package/dist/esm/dist/esm/core/SceneTimeRange.js +231 -0
  49. package/dist/esm/dist/esm/core/events.js +11 -0
  50. package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +10 -0
  51. package/dist/esm/dist/esm/core/sceneGraph/index.js +25 -0
  52. package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +178 -0
  53. package/dist/esm/dist/esm/core/sceneGraph/utils.js +64 -0
  54. package/dist/esm/dist/esm/core/types.js +15 -0
  55. package/dist/esm/dist/esm/querying/DataLayersMerger.js +46 -0
  56. package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +6 -0
  57. package/dist/esm/dist/esm/querying/RuntimeDataSource.js +6 -0
  58. package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +100 -0
  59. package/dist/esm/dist/esm/querying/SceneQueryRunner.js +468 -0
  60. package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +46 -0
  61. package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +12 -0
  62. package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +112 -0
  63. package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +51 -0
  64. package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  65. package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +85 -0
  66. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  67. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  68. package/dist/esm/dist/esm/querying/layers/annotations/utils.js +77 -0
  69. package/dist/esm/dist/esm/querying/registerQueryWithController.js +41 -0
  70. package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +30 -0
  71. package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +45 -0
  72. package/dist/esm/dist/esm/services/UrlSyncManager.js +167 -0
  73. package/dist/esm/dist/esm/services/useUrlSync.js +29 -0
  74. package/dist/esm/dist/esm/services/utils.js +71 -0
  75. package/dist/esm/dist/esm/utils/ControlsLabel.js +107 -0
  76. package/dist/esm/dist/esm/utils/LoadingIndicator.js +19 -0
  77. package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +39 -0
  78. package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  79. package/dist/esm/dist/esm/utils/date.js +15 -0
  80. package/dist/esm/dist/esm/utils/evaluateTimeRange.js +16 -0
  81. package/dist/esm/dist/esm/utils/explore.js +47 -0
  82. package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +4 -0
  83. package/dist/esm/dist/esm/utils/getDataSource.js +18 -0
  84. package/dist/esm/dist/esm/utils/getMessageFromError.js +24 -0
  85. package/dist/esm/dist/esm/utils/metricTree.js +53 -0
  86. package/dist/esm/dist/esm/utils/parseUrlParam.js +41 -0
  87. package/dist/esm/dist/esm/utils/utils.js +11 -0
  88. package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +30 -0
  89. package/dist/esm/dist/esm/utils/writeSceneLog.js +12 -0
  90. package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +150 -0
  91. package/dist/esm/dist/esm/variables/VariableValueRecorder.js +71 -0
  92. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +24 -0
  93. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +303 -0
  94. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  95. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  96. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  97. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  98. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  99. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  100. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  101. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  102. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +289 -0
  103. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  104. package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  105. package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +47 -0
  106. package/dist/esm/dist/esm/variables/components/VariableValueControl.js +23 -0
  107. package/dist/esm/dist/esm/variables/components/VariableValueInput.js +33 -0
  108. package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +228 -0
  109. package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +72 -0
  110. package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +15 -0
  111. package/dist/esm/dist/esm/variables/constants.js +9 -0
  112. package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +12 -0
  113. package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +259 -0
  114. package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  115. package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  116. package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +40 -0
  117. package/dist/esm/dist/esm/variables/interpolation/defaults.js +21 -0
  118. package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +13 -0
  119. package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +296 -0
  120. package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +87 -0
  121. package/dist/esm/dist/esm/variables/lookupVariable.js +20 -0
  122. package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +57 -0
  123. package/dist/esm/dist/esm/variables/macros/contextMacros.js +43 -0
  124. package/dist/esm/dist/esm/variables/macros/dataMacros.js +134 -0
  125. package/dist/esm/dist/esm/variables/macros/index.js +26 -0
  126. package/dist/esm/dist/esm/variables/macros/templateProxies.js +51 -0
  127. package/dist/esm/dist/esm/variables/macros/timeMacros.js +86 -0
  128. package/dist/esm/dist/esm/variables/macros/types.js +11 -0
  129. package/dist/esm/dist/esm/variables/macros/urlMacros.js +56 -0
  130. package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +254 -0
  131. package/dist/esm/dist/esm/variables/types.js +11 -0
  132. package/dist/esm/dist/esm/variables/utils.js +172 -0
  133. package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +38 -0
  134. package/dist/esm/dist/esm/variables/variants/CustomVariable.js +60 -0
  135. package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +88 -0
  136. package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +117 -0
  137. package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +295 -0
  138. package/dist/esm/dist/esm/variables/variants/TestVariable.js +117 -0
  139. package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +61 -0
  140. package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +139 -0
  141. package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +129 -0
  142. package/dist/esm/dist/esm/variables/variants/query/guards.js +28 -0
  143. package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +96 -0
  144. package/dist/esm/dist/esm/variables/variants/query/utils.js +124 -0
  145. package/dist/esm/index.js +1 -1
  146. package/dist/esm/index.js.map +1 -1
  147. package/dist/esm/querying/DataProviderSharer.js +39 -0
  148. package/dist/esm/src/behaviors/ActWhenVariableChanged.js +27 -0
  149. package/dist/esm/src/behaviors/CursorSync.js +76 -0
  150. package/dist/esm/src/behaviors/LiveNowTimer.js +44 -0
  151. package/dist/esm/src/behaviors/SceneQueryController.js +60 -0
  152. package/dist/esm/src/behaviors/index.js +5 -0
  153. package/dist/esm/src/components/EmbeddedScene.js +59 -0
  154. package/dist/esm/src/components/NestedScene.js +95 -0
  155. package/dist/esm/src/components/SceneApp/SceneApp.js +37 -0
  156. package/dist/esm/src/components/SceneApp/SceneAppPage.js +176 -0
  157. package/dist/esm/src/components/SceneApp/SceneAppPageView.js +104 -0
  158. package/dist/esm/src/components/SceneApp/utils.js +42 -0
  159. package/dist/esm/src/components/SceneByFrameRepeater.js +41 -0
  160. package/dist/esm/src/components/SceneByVariableRepeater.js +55 -0
  161. package/dist/esm/src/components/SceneCanvasText.js +32 -0
  162. package/dist/esm/src/components/SceneControlsSpacer.js +17 -0
  163. package/dist/esm/src/components/SceneDebugger/DebugDetails.js +82 -0
  164. package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +72 -0
  165. package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +77 -0
  166. package/dist/esm/src/components/SceneReactObject.js +34 -0
  167. package/dist/esm/src/components/SceneRefreshPicker.js +205 -0
  168. package/dist/esm/src/components/SceneTimePicker.js +139 -0
  169. package/dist/esm/src/components/SceneTimeRangeCompare.js +240 -0
  170. package/dist/esm/src/components/SceneToolbarButton.js +33 -0
  171. package/dist/esm/src/components/VizPanel/VizPanel.js +406 -0
  172. package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +44 -0
  173. package/dist/esm/src/components/VizPanel/VizPanelMenu.js +59 -0
  174. package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +285 -0
  175. package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  176. package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  177. package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +56 -0
  178. package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  179. package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  180. package/dist/esm/src/components/layout/LazyLoader.js +103 -0
  181. package/dist/esm/src/components/layout/SceneFlexLayout.js +135 -0
  182. package/dist/esm/src/components/layout/grid/SceneGridItem.js +30 -0
  183. package/dist/esm/src/components/layout/grid/SceneGridLayout.js +283 -0
  184. package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  185. package/dist/esm/src/components/layout/grid/SceneGridRow.js +190 -0
  186. package/dist/esm/src/components/layout/grid/constants.js +7 -0
  187. package/dist/esm/src/components/layout/grid/utils.js +36 -0
  188. package/dist/esm/src/components/layout/split/SplitLayout.js +17 -0
  189. package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +29 -0
  190. package/dist/esm/src/components/layout/split/Splitter.js +386 -0
  191. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +100 -0
  192. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +75 -0
  193. package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +75 -0
  194. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +22 -0
  195. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +85 -0
  196. package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +52 -0
  197. package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +78 -0
  198. package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +114 -0
  199. package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +162 -0
  200. package/dist/esm/src/core/PanelBuilders/index.js +116 -0
  201. package/dist/esm/src/core/SceneComponentWrapper.js +57 -0
  202. package/dist/esm/src/core/SceneDataNode.js +43 -0
  203. package/dist/esm/src/core/SceneObjectBase.js +286 -0
  204. package/dist/esm/src/core/SceneObjectRef.js +32 -0
  205. package/dist/esm/src/core/SceneTimeRange.js +231 -0
  206. package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +35 -0
  207. package/dist/esm/src/core/SceneTimeZoneOverride.js +63 -0
  208. package/dist/esm/src/core/events.js +11 -0
  209. package/dist/esm/src/core/sceneGraph/getTimeRange.js +10 -0
  210. package/dist/esm/src/core/sceneGraph/index.js +25 -0
  211. package/dist/esm/src/core/sceneGraph/sceneGraph.js +178 -0
  212. package/dist/esm/src/core/sceneGraph/utils.js +64 -0
  213. package/dist/esm/src/core/types.js +15 -0
  214. package/dist/esm/src/index.js +108 -0
  215. package/dist/esm/src/querying/DataLayersMerger.js +46 -0
  216. package/dist/esm/src/querying/DataProviderProxy.js +37 -0
  217. package/dist/esm/src/querying/DataProviderSharer.js +108 -0
  218. package/dist/esm/src/querying/ExtraQueryProvider.js +6 -0
  219. package/dist/esm/src/querying/RuntimeDataSource.js +49 -0
  220. package/dist/esm/src/querying/SceneDataLayerSet.js +100 -0
  221. package/dist/esm/src/querying/SceneDataTransformer.js +178 -0
  222. package/dist/esm/src/querying/SceneQueryRunner.js +468 -0
  223. package/dist/esm/src/querying/extraQueryProcessingOperator.js +46 -0
  224. package/dist/esm/src/querying/getEnrichedDataRequest.js +12 -0
  225. package/dist/esm/src/querying/layers/SceneDataLayerBase.js +112 -0
  226. package/dist/esm/src/querying/layers/SceneDataLayerControls.js +51 -0
  227. package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  228. package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +85 -0
  229. package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  230. package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  231. package/dist/esm/src/querying/layers/annotations/utils.js +77 -0
  232. package/dist/esm/src/querying/layers/index.js +2 -0
  233. package/dist/esm/src/querying/registerQueryWithController.js +41 -0
  234. package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +30 -0
  235. package/dist/esm/src/services/UniqueUrlKeyMapper.js +45 -0
  236. package/dist/esm/src/services/UrlSyncContextProvider.js +17 -0
  237. package/dist/esm/src/services/UrlSyncManager.js +167 -0
  238. package/dist/esm/src/services/useUrlSync.js +29 -0
  239. package/dist/esm/src/services/utils.js +75 -0
  240. package/dist/esm/src/utils/ControlsLabel.js +107 -0
  241. package/dist/esm/src/utils/LoadingIndicator.js +19 -0
  242. package/dist/esm/src/utils/SafeSerializableSceneObject.js +39 -0
  243. package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  244. package/dist/esm/src/utils/date.js +15 -0
  245. package/dist/esm/src/utils/evaluateTimeRange.js +16 -0
  246. package/dist/esm/src/utils/explore.js +47 -0
  247. package/dist/esm/src/utils/getCompareSeriesRefId.js +4 -0
  248. package/dist/esm/src/utils/getDataSource.js +18 -0
  249. package/dist/esm/src/utils/getMessageFromError.js +24 -0
  250. package/dist/esm/src/utils/metricTree.js +53 -0
  251. package/dist/esm/src/utils/parseUrlParam.js +41 -0
  252. package/dist/esm/src/utils/utils.js +11 -0
  253. package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +30 -0
  254. package/dist/esm/src/utils/writeSceneLog.js +12 -0
  255. package/dist/esm/src/variables/VariableDependencyConfig.js +150 -0
  256. package/dist/esm/src/variables/VariableValueRecorder.js +71 -0
  257. package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +24 -0
  258. package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +303 -0
  259. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  260. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  261. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  262. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  263. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  264. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  265. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  266. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  267. package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +289 -0
  268. package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  269. package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  270. package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +47 -0
  271. package/dist/esm/src/variables/components/VariableValueControl.js +23 -0
  272. package/dist/esm/src/variables/components/VariableValueInput.js +33 -0
  273. package/dist/esm/src/variables/components/VariableValueSelect.js +228 -0
  274. package/dist/esm/src/variables/components/VariableValueSelectors.js +72 -0
  275. package/dist/esm/src/variables/components/getOptionSearcher.js +15 -0
  276. package/dist/esm/src/variables/constants.js +9 -0
  277. package/dist/esm/src/variables/getEnrichedFiltersRequest.js +12 -0
  278. package/dist/esm/src/variables/groupby/GroupByVariable.js +259 -0
  279. package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  280. package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  281. package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +40 -0
  282. package/dist/esm/src/variables/interpolation/defaults.js +21 -0
  283. package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +13 -0
  284. package/dist/esm/src/variables/interpolation/formatRegistry.js +296 -0
  285. package/dist/esm/src/variables/interpolation/sceneInterpolator.js +87 -0
  286. package/dist/esm/src/variables/lookupVariable.js +20 -0
  287. package/dist/esm/src/variables/macros/AllVariablesMacro.js +57 -0
  288. package/dist/esm/src/variables/macros/contextMacros.js +43 -0
  289. package/dist/esm/src/variables/macros/dataMacros.js +134 -0
  290. package/dist/esm/src/variables/macros/index.js +35 -0
  291. package/dist/esm/src/variables/macros/templateProxies.js +51 -0
  292. package/dist/esm/src/variables/macros/timeMacros.js +86 -0
  293. package/dist/esm/src/variables/macros/types.js +11 -0
  294. package/dist/esm/src/variables/macros/urlMacros.js +56 -0
  295. package/dist/esm/src/variables/sets/SceneVariableSet.js +254 -0
  296. package/dist/esm/src/variables/types.js +11 -0
  297. package/dist/esm/src/variables/utils.js +172 -0
  298. package/dist/esm/src/variables/variants/ConstantVariable.js +38 -0
  299. package/dist/esm/src/variables/variants/CustomVariable.js +60 -0
  300. package/dist/esm/src/variables/variants/DataSourceVariable.js +88 -0
  301. package/dist/esm/src/variables/variants/IntervalVariable.js +117 -0
  302. package/dist/esm/src/variables/variants/JsonVariable.js +193 -0
  303. package/dist/esm/src/variables/variants/LocalValueVariable.js +56 -0
  304. package/dist/esm/src/variables/variants/MultiValueVariable.js +295 -0
  305. package/dist/esm/src/variables/variants/TestVariable.js +117 -0
  306. package/dist/esm/src/variables/variants/TextBoxVariable.js +61 -0
  307. package/dist/esm/src/variables/variants/guards.js +27 -0
  308. package/dist/esm/src/variables/variants/query/QueryVariable.js +139 -0
  309. package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +129 -0
  310. package/dist/esm/src/variables/variants/query/guards.js +28 -0
  311. package/dist/esm/src/variables/variants/query/toMetricFindValues.js +96 -0
  312. package/dist/esm/src/variables/variants/query/utils.js +124 -0
  313. package/dist/esm/variables/components/VariableValueSelect.js +13 -9
  314. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  315. package/dist/esm/variables/variants/ConstantVariable.js +22 -0
  316. package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
  317. package/dist/esm/variables/variants/CustomVariable.js +3 -2
  318. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  319. package/dist/esm/variables/variants/DataSourceVariable.js +3 -2
  320. package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
  321. package/dist/esm/variables/variants/JsonVariable.js +96 -0
  322. package/dist/esm/variables/variants/TestVariable.js +3 -2
  323. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  324. package/dist/esm/variables/variants/json/JsonVariable.js +95 -0
  325. package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +70 -0
  326. package/dist/esm/variables/variants/query/QueryVariable.js +3 -2
  327. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  328. package/dist/index.d.ts +14 -6
  329. package/dist/index.js +35 -13
  330. package/dist/index.js.map +1 -1
  331. package/package.json +2 -2
@@ -0,0 +1,178 @@
1
+ import React, { useRef, useEffect } from 'react';
2
+ import ReactGridLayout from 'react-grid-layout';
3
+ import { GRID_CELL_VMARGIN, GRID_COLUMN_COUNT, GRID_CELL_HEIGHT } from './constants.js';
4
+ import { LazyLoader } from '../LazyLoader.js';
5
+ import { useStyles2 } from '@grafana/ui';
6
+ import { cx, css } from '@emotion/css';
7
+ import { useMeasure } from 'react-use';
8
+
9
+ var __defProp = Object.defineProperty;
10
+ var __defProps = Object.defineProperties;
11
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
12
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
15
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
16
+ var __spreadValues = (a, b) => {
17
+ for (var prop in b || (b = {}))
18
+ if (__hasOwnProp.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ if (__getOwnPropSymbols)
21
+ for (var prop of __getOwnPropSymbols(b)) {
22
+ if (__propIsEnum.call(b, prop))
23
+ __defNormalProp(a, prop, b[prop]);
24
+ }
25
+ return a;
26
+ };
27
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
28
+ var __objRest = (source, exclude) => {
29
+ var target = {};
30
+ for (var prop in source)
31
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
32
+ target[prop] = source[prop];
33
+ if (source != null && __getOwnPropSymbols)
34
+ for (var prop of __getOwnPropSymbols(source)) {
35
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
36
+ target[prop] = source[prop];
37
+ }
38
+ return target;
39
+ };
40
+ function SceneGridLayoutRenderer({ model }) {
41
+ const { children, isLazy, isDraggable, isResizable } = model.useState();
42
+ const [outerDivRef, { width, height }] = useMeasure();
43
+ const ref = useRef(null);
44
+ useEffect(() => {
45
+ updateAnimationClass(ref, !!isDraggable);
46
+ }, [isDraggable]);
47
+ validateChildrenSize(children);
48
+ const renderGrid = (width2, height2) => {
49
+ if (!width2 || !height2) {
50
+ return null;
51
+ }
52
+ const layout = model.buildGridLayout(width2, height2);
53
+ return /* @__PURE__ */ React.createElement("div", {
54
+ ref,
55
+ style: { width: `${width2}px`, height: "100%" },
56
+ className: "react-grid-layout"
57
+ }, /* @__PURE__ */ React.createElement(ReactGridLayout, {
58
+ width: width2,
59
+ isDraggable: isDraggable && width2 > 768,
60
+ isResizable: isResizable != null ? isResizable : false,
61
+ containerPadding: [0, 0],
62
+ useCSSTransforms: true,
63
+ margin: [GRID_CELL_VMARGIN, GRID_CELL_VMARGIN],
64
+ cols: GRID_COLUMN_COUNT,
65
+ rowHeight: GRID_CELL_HEIGHT,
66
+ draggableHandle: `.grid-drag-handle-${model.state.key}`,
67
+ draggableCancel: ".grid-drag-cancel",
68
+ layout,
69
+ onDragStart: model.onDragStart,
70
+ onDragStop: model.onDragStop,
71
+ onResizeStop: model.onResizeStop,
72
+ onLayoutChange: model.onLayoutChange,
73
+ isBounded: false,
74
+ resizeHandle: /* @__PURE__ */ React.createElement(ResizeHandle, null)
75
+ }, layout.map((gridItem, index) => /* @__PURE__ */ React.createElement(GridItemWrapper, {
76
+ key: gridItem.i,
77
+ grid: model,
78
+ layoutItem: gridItem,
79
+ index,
80
+ isLazy,
81
+ totalCount: layout.length
82
+ }))));
83
+ };
84
+ return /* @__PURE__ */ React.createElement("div", {
85
+ ref: outerDivRef,
86
+ style: { flex: "1 1 auto", position: "relative", zIndex: 1, width: "100%" }
87
+ }, renderGrid(width, height));
88
+ }
89
+ const GridItemWrapper = React.forwardRef((props, ref) => {
90
+ var _b;
91
+ const _a = props, { grid, layoutItem, index, totalCount, isLazy, style, onLoad, onChange, children } = _a, divProps = __objRest(_a, ["grid", "layoutItem", "index", "totalCount", "isLazy", "style", "onLoad", "onChange", "children"]);
92
+ const sceneChild = grid.getSceneLayoutChild(layoutItem.i);
93
+ const className = (_b = sceneChild.getClassName) == null ? void 0 : _b.call(sceneChild);
94
+ const innerContent = /* @__PURE__ */ React.createElement(sceneChild.Component, {
95
+ model: sceneChild,
96
+ key: sceneChild.state.key
97
+ });
98
+ if (isLazy) {
99
+ return /* @__PURE__ */ React.createElement(LazyLoader, __spreadProps(__spreadValues({}, divProps), {
100
+ key: sceneChild.state.key,
101
+ "data-griditem-key": sceneChild.state.key,
102
+ className: cx(className, props.className),
103
+ style,
104
+ ref
105
+ }), innerContent, children);
106
+ }
107
+ return /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, divProps), {
108
+ ref,
109
+ key: sceneChild.state.key,
110
+ "data-griditem-key": sceneChild.state.key,
111
+ className: cx(className, props.className),
112
+ style
113
+ }), innerContent, children);
114
+ });
115
+ GridItemWrapper.displayName = "GridItemWrapper";
116
+ function validateChildrenSize(children) {
117
+ if (children.some(
118
+ (c) => c.state.height === void 0 || c.state.width === void 0 || c.state.x === void 0 || c.state.y === void 0
119
+ )) {
120
+ throw new Error("All children must have a size specified");
121
+ }
122
+ }
123
+ function updateAnimationClass(ref, isDraggable, retry) {
124
+ if (ref.current) {
125
+ if (isDraggable) {
126
+ ref.current.classList.add("react-grid-layout--enable-move-animations");
127
+ } else {
128
+ ref.current.classList.remove("react-grid-layout--enable-move-animations");
129
+ }
130
+ } else if (!retry) {
131
+ setTimeout(() => updateAnimationClass(ref, isDraggable, true), 50);
132
+ }
133
+ }
134
+ const ResizeHandle = React.forwardRef((_a, ref) => {
135
+ var _b = _a, divProps = __objRest(_b, ["handleAxis"]);
136
+ const customCssClass = useStyles2(getResizeHandleStyles);
137
+ return /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({
138
+ ref
139
+ }, divProps), {
140
+ className: `${customCssClass} scene-resize-handle`
141
+ }), /* @__PURE__ */ React.createElement("svg", {
142
+ width: "16px",
143
+ height: "16px",
144
+ viewBox: "0 0 24 24",
145
+ fill: "none",
146
+ xmlns: "http://www.w3.org/2000/svg"
147
+ }, /* @__PURE__ */ React.createElement("path", {
148
+ d: "M21 15L15 21M21 8L8 21",
149
+ stroke: "currentColor",
150
+ strokeWidth: "2",
151
+ strokeLinecap: "round",
152
+ strokeLinejoin: "round"
153
+ })));
154
+ });
155
+ ResizeHandle.displayName = "ResizeHandle";
156
+ function getResizeHandleStyles(theme) {
157
+ return css({
158
+ position: "absolute",
159
+ bottom: 0,
160
+ right: 0,
161
+ zIndex: 999,
162
+ padding: theme.spacing(1.5, 0, 0, 1.5),
163
+ color: theme.colors.border.strong,
164
+ cursor: "se-resize",
165
+ "&:hover": {
166
+ color: theme.colors.text.link
167
+ },
168
+ svg: {
169
+ display: "block"
170
+ },
171
+ ".react-resizable-hide &": {
172
+ display: "none"
173
+ }
174
+ });
175
+ }
176
+
177
+ export { SceneGridLayoutRenderer };
178
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVHcmlkTGF5b3V0UmVuZGVyZXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvbGF5b3V0L2dyaWQvU2NlbmVHcmlkTGF5b3V0UmVuZGVyZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0R3JpZExheW91dCBmcm9tICdyZWFjdC1ncmlkLWxheW91dCc7XG5pbXBvcnQgeyBHUklEX0NFTExfVk1BUkdJTiwgR1JJRF9DT0xVTU5fQ09VTlQsIEdSSURfQ0VMTF9IRUlHSFQgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBMYXp5TG9hZGVyIH0gZnJvbSAnLi4vTGF6eUxvYWRlci5qcyc7XG5pbXBvcnQgeyB1c2VTdHlsZXMyIH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuaW1wb3J0IHsgY3gsIGNzcyB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyB1c2VNZWFzdXJlIH0gZnJvbSAncmVhY3QtdXNlJztcblxudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMgPSAoYSwgYikgPT4gX19kZWZQcm9wcyhhLCBfX2dldE93blByb3BEZXNjcyhiKSk7XG52YXIgX19vYmpSZXN0ID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChzb3VyY2UsIHByb3ApICYmIGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDApXG4gICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0uY2FsbChzb3VyY2UsIHByb3ApKVxuICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgfVxuICByZXR1cm4gdGFyZ2V0O1xufTtcbmZ1bmN0aW9uIFNjZW5lR3JpZExheW91dFJlbmRlcmVyKHsgbW9kZWwgfSkge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpc0xhenksIGlzRHJhZ2dhYmxlLCBpc1Jlc2l6YWJsZSB9ID0gbW9kZWwudXNlU3RhdGUoKTtcbiAgY29uc3QgW291dGVyRGl2UmVmLCB7IHdpZHRoLCBoZWlnaHQgfV0gPSB1c2VNZWFzdXJlKCk7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB1cGRhdGVBbmltYXRpb25DbGFzcyhyZWYsICEhaXNEcmFnZ2FibGUpO1xuICB9LCBbaXNEcmFnZ2FibGVdKTtcbiAgdmFsaWRhdGVDaGlsZHJlblNpemUoY2hpbGRyZW4pO1xuICBjb25zdCByZW5kZXJHcmlkID0gKHdpZHRoMiwgaGVpZ2h0MikgPT4ge1xuICAgIGlmICghd2lkdGgyIHx8ICFoZWlnaHQyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbGF5b3V0ID0gbW9kZWwuYnVpbGRHcmlkTGF5b3V0KHdpZHRoMiwgaGVpZ2h0Mik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIHJlZixcbiAgICAgIHN0eWxlOiB7IHdpZHRoOiBgJHt3aWR0aDJ9cHhgLCBoZWlnaHQ6IFwiMTAwJVwiIH0sXG4gICAgICBjbGFzc05hbWU6IFwicmVhY3QtZ3JpZC1sYXlvdXRcIlxuICAgIH0sIC8qIEBfX1BVUkVfXyAqLyBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0R3JpZExheW91dCwge1xuICAgICAgd2lkdGg6IHdpZHRoMixcbiAgICAgIGlzRHJhZ2dhYmxlOiBpc0RyYWdnYWJsZSAmJiB3aWR0aDIgPiA3NjgsXG4gICAgICBpc1Jlc2l6YWJsZTogaXNSZXNpemFibGUgIT0gbnVsbCA/IGlzUmVzaXphYmxlIDogZmFsc2UsXG4gICAgICBjb250YWluZXJQYWRkaW5nOiBbMCwgMF0sXG4gICAgICB1c2VDU1NUcmFuc2Zvcm1zOiB0cnVlLFxuICAgICAgbWFyZ2luOiBbR1JJRF9DRUxMX1ZNQVJHSU4sIEdSSURfQ0VMTF9WTUFSR0lOXSxcbiAgICAgIGNvbHM6IEdSSURfQ09MVU1OX0NPVU5ULFxuICAgICAgcm93SGVpZ2h0OiBHUklEX0NFTExfSEVJR0hULFxuICAgICAgZHJhZ2dhYmxlSGFuZGxlOiBgLmdyaWQtZHJhZy1oYW5kbGUtJHttb2RlbC5zdGF0ZS5rZXl9YCxcbiAgICAgIGRyYWdnYWJsZUNhbmNlbDogXCIuZ3JpZC1kcmFnLWNhbmNlbFwiLFxuICAgICAgbGF5b3V0LFxuICAgICAgb25EcmFnU3RhcnQ6IG1vZGVsLm9uRHJhZ1N0YXJ0LFxuICAgICAgb25EcmFnU3RvcDogbW9kZWwub25EcmFnU3RvcCxcbiAgICAgIG9uUmVzaXplU3RvcDogbW9kZWwub25SZXNpemVTdG9wLFxuICAgICAgb25MYXlvdXRDaGFuZ2U6IG1vZGVsLm9uTGF5b3V0Q2hhbmdlLFxuICAgICAgaXNCb3VuZGVkOiBmYWxzZSxcbiAgICAgIHJlc2l6ZUhhbmRsZTogLyogQF9fUFVSRV9fICovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVzaXplSGFuZGxlLCBudWxsKVxuICAgIH0sIGxheW91dC5tYXAoKGdyaWRJdGVtLCBpbmRleCkgPT4gLyogQF9fUFVSRV9fICovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3JpZEl0ZW1XcmFwcGVyLCB7XG4gICAgICBrZXk6IGdyaWRJdGVtLmksXG4gICAgICBncmlkOiBtb2RlbCxcbiAgICAgIGxheW91dEl0ZW06IGdyaWRJdGVtLFxuICAgICAgaW5kZXgsXG4gICAgICBpc0xhenksXG4gICAgICB0b3RhbENvdW50OiBsYXlvdXQubGVuZ3RoXG4gICAgfSkpKSk7XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgcmVmOiBvdXRlckRpdlJlZixcbiAgICBzdHlsZTogeyBmbGV4OiBcIjEgMSBhdXRvXCIsIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsIHpJbmRleDogMSwgd2lkdGg6IFwiMTAwJVwiIH1cbiAgfSwgcmVuZGVyR3JpZCh3aWR0aCwgaGVpZ2h0KSk7XG59XG5jb25zdCBHcmlkSXRlbVdyYXBwZXIgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gIHZhciBfYjtcbiAgY29uc3QgX2EgPSBwcm9wcywgeyBncmlkLCBsYXlvdXRJdGVtLCBpbmRleCwgdG90YWxDb3VudCwgaXNMYXp5LCBzdHlsZSwgb25Mb2FkLCBvbkNoYW5nZSwgY2hpbGRyZW4gfSA9IF9hLCBkaXZQcm9wcyA9IF9fb2JqUmVzdChfYSwgW1wiZ3JpZFwiLCBcImxheW91dEl0ZW1cIiwgXCJpbmRleFwiLCBcInRvdGFsQ291bnRcIiwgXCJpc0xhenlcIiwgXCJzdHlsZVwiLCBcIm9uTG9hZFwiLCBcIm9uQ2hhbmdlXCIsIFwiY2hpbGRyZW5cIl0pO1xuICBjb25zdCBzY2VuZUNoaWxkID0gZ3JpZC5nZXRTY2VuZUxheW91dENoaWxkKGxheW91dEl0ZW0uaSk7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IChfYiA9IHNjZW5lQ2hpbGQuZ2V0Q2xhc3NOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChzY2VuZUNoaWxkKTtcbiAgY29uc3QgaW5uZXJDb250ZW50ID0gLyogQF9fUFVSRV9fICovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc2NlbmVDaGlsZC5Db21wb25lbnQsIHtcbiAgICBtb2RlbDogc2NlbmVDaGlsZCxcbiAgICBrZXk6IHNjZW5lQ2hpbGQuc3RhdGUua2V5XG4gIH0pO1xuICBpZiAoaXNMYXp5KSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBSZWFjdC5jcmVhdGVFbGVtZW50KExhenlMb2FkZXIsIF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMoe30sIGRpdlByb3BzKSwge1xuICAgICAga2V5OiBzY2VuZUNoaWxkLnN0YXRlLmtleSxcbiAgICAgIFwiZGF0YS1ncmlkaXRlbS1rZXlcIjogc2NlbmVDaGlsZC5zdGF0ZS5rZXksXG4gICAgICBjbGFzc05hbWU6IGN4KGNsYXNzTmFtZSwgcHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgIHN0eWxlLFxuICAgICAgcmVmXG4gICAgfSksIGlubmVyQ29udGVudCwgY2hpbGRyZW4pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBkaXZQcm9wcyksIHtcbiAgICByZWYsXG4gICAga2V5OiBzY2VuZUNoaWxkLnN0YXRlLmtleSxcbiAgICBcImRhdGEtZ3JpZGl0ZW0ta2V5XCI6IHNjZW5lQ2hpbGQuc3RhdGUua2V5LFxuICAgIGNsYXNzTmFtZTogY3goY2xhc3NOYW1lLCBwcm9wcy5jbGFzc05hbWUpLFxuICAgIHN0eWxlXG4gIH0pLCBpbm5lckNvbnRlbnQsIGNoaWxkcmVuKTtcbn0pO1xuR3JpZEl0ZW1XcmFwcGVyLmRpc3BsYXlOYW1lID0gXCJHcmlkSXRlbVdyYXBwZXJcIjtcbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRyZW5TaXplKGNoaWxkcmVuKSB7XG4gIGlmIChjaGlsZHJlbi5zb21lKFxuICAgIChjKSA9PiBjLnN0YXRlLmhlaWdodCA9PT0gdm9pZCAwIHx8IGMuc3RhdGUud2lkdGggPT09IHZvaWQgMCB8fCBjLnN0YXRlLnggPT09IHZvaWQgMCB8fCBjLnN0YXRlLnkgPT09IHZvaWQgMFxuICApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxsIGNoaWxkcmVuIG11c3QgaGF2ZSBhIHNpemUgc3BlY2lmaWVkXCIpO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVBbmltYXRpb25DbGFzcyhyZWYsIGlzRHJhZ2dhYmxlLCByZXRyeSkge1xuICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICBpZiAoaXNEcmFnZ2FibGUpIHtcbiAgICAgIHJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQoXCJyZWFjdC1ncmlkLWxheW91dC0tZW5hYmxlLW1vdmUtYW5pbWF0aW9uc1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcInJlYWN0LWdyaWQtbGF5b3V0LS1lbmFibGUtbW92ZS1hbmltYXRpb25zXCIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcmV0cnkpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHVwZGF0ZUFuaW1hdGlvbkNsYXNzKHJlZiwgaXNEcmFnZ2FibGUsIHRydWUpLCA1MCk7XG4gIH1cbn1cbmNvbnN0IFJlc2l6ZUhhbmRsZSA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcbiAgdmFyIF9iID0gX2EsIGRpdlByb3BzID0gX19vYmpSZXN0KF9iLCBbXCJoYW5kbGVBeGlzXCJdKTtcbiAgY29uc3QgY3VzdG9tQ3NzQ2xhc3MgPSB1c2VTdHlsZXMyKGdldFJlc2l6ZUhhbmRsZVN0eWxlcyk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHtcbiAgICByZWZcbiAgfSwgZGl2UHJvcHMpLCB7XG4gICAgY2xhc3NOYW1lOiBgJHtjdXN0b21Dc3NDbGFzc30gc2NlbmUtcmVzaXplLWhhbmRsZWBcbiAgfSksIC8qIEBfX1BVUkVfXyAqLyBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICB3aWR0aDogXCIxNnB4XCIsXG4gICAgaGVpZ2h0OiBcIjE2cHhcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgfSwgLyogQF9fUFVSRV9fICovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxNUwxNSAyMU0yMSA4TDggMjFcIixcbiAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0pKSk7XG59KTtcblJlc2l6ZUhhbmRsZS5kaXNwbGF5TmFtZSA9IFwiUmVzaXplSGFuZGxlXCI7XG5mdW5jdGlvbiBnZXRSZXNpemVIYW5kbGVTdHlsZXModGhlbWUpIHtcbiAgcmV0dXJuIGNzcyh7XG4gICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICBib3R0b206IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgekluZGV4OiA5OTksXG4gICAgcGFkZGluZzogdGhlbWUuc3BhY2luZygxLjUsIDAsIDAsIDEuNSksXG4gICAgY29sb3I6IHRoZW1lLmNvbG9ycy5ib3JkZXIuc3Ryb25nLFxuICAgIGN1cnNvcjogXCJzZS1yZXNpemVcIixcbiAgICBcIiY6aG92ZXJcIjoge1xuICAgICAgY29sb3I6IHRoZW1lLmNvbG9ycy50ZXh0LmxpbmtcbiAgICB9LFxuICAgIHN2Zzoge1xuICAgICAgZGlzcGxheTogXCJibG9ja1wiXG4gICAgfSxcbiAgICBcIi5yZWFjdC1yZXNpemFibGUtaGlkZSAmXCI6IHtcbiAgICAgIGRpc3BsYXk6IFwibm9uZVwiXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IHsgU2NlbmVHcmlkTGF5b3V0UmVuZGVyZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVTJObGJtVkhjbWxrVEdGNWIzVjBVbVZ1WkdWeVpYSXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMeTR1TDNOeVl5OWpiMjF3YjI1bGJuUnpMMnhoZVc5MWRDOW5jbWxrTDFOalpXNWxSM0pwWkV4aGVXOTFkRkpsYm1SbGNtVnlMblJ6ZUNKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ1VtVmhZM1FzSUhzZ1VtVm1RMkZzYkdKaFkyc3NJSFZ6WlVWbVptVmpkQ3dnZFhObFVtVm1JSDBnWm5KdmJTQW5jbVZoWTNRbk8xeHVhVzF3YjNKMElGSmxZV04wUjNKcFpFeGhlVzkxZENCbWNtOXRJQ2R5WldGamRDMW5jbWxrTFd4aGVXOTFkQ2M3WEc1cGJYQnZjblFnZXlCVFkyVnVaVU52YlhCdmJtVnVkRkJ5YjNCeklIMGdabkp2YlNBbkxpNHZMaTR2TGk0dlkyOXlaUzkwZVhCbGN5YzdYRzVwYlhCdmNuUWdleUJIVWtsRVgwTkZURXhmU0VWSlIwaFVMQ0JIVWtsRVgwTkZURXhmVmsxQlVrZEpUaXdnUjFKSlJGOURUMHhWVFU1ZlEwOVZUbFFnZlNCbWNtOXRJQ2N1TDJOdmJuTjBZVzUwY3ljN1hHNXBiWEJ2Y25RZ2V5Qk1ZWHA1VEc5aFpHVnlJSDBnWm5KdmJTQW5MaTR2VEdGNmVVeHZZV1JsY2ljN1hHNXBiWEJ2Y25RZ2V5QlRZMlZ1WlVkeWFXUk1ZWGx2ZFhRZ2ZTQm1jbTl0SUNjdUwxTmpaVzVsUjNKcFpFeGhlVzkxZENjN1hHNXBiWEJ2Y25RZ2V5QlRZMlZ1WlVkeWFXUkpkR1Z0VEdsclpTQjlJR1p5YjIwZ0p5NHZkSGx3WlhNbk8xeHVhVzF3YjNKMElIc2dkWE5sVTNSNWJHVnpNaUI5SUdaeWIyMGdKMEJuY21GbVlXNWhMM1ZwSnp0Y2JtbHRjRzl5ZENCN0lHTnpjeXdnWTNnZ2ZTQm1jbTl0SUNkQVpXMXZkR2x2Ymk5amMzTW5PMXh1YVcxd2IzSjBJSHNnUjNKaFptRnVZVlJvWlcxbE1pQjlJR1p5YjIwZ0owQm5jbUZtWVc1aEwyUmhkR0VuTzF4dWFXMXdiM0owSUhzZ2RYTmxUV1ZoYzNWeVpTQjlJR1p5YjIwZ0ozSmxZV04wTFhWelpTYzdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJUWTJWdVpVZHlhV1JNWVhsdmRYUlNaVzVrWlhKbGNpaDdJRzF2WkdWc0lIMDZJRk5qWlc1bFEyOXRjRzl1Wlc1MFVISnZjSE04VTJObGJtVkhjbWxrVEdGNWIzVjBQaWtnZTF4dUlDQmpiMjV6ZENCN0lHTm9hV3hrY21WdUxDQnBjMHhoZW5rc0lHbHpSSEpoWjJkaFlteGxMQ0JwYzFKbGMybDZZV0pzWlNCOUlEMGdiVzlrWld3dWRYTmxVM1JoZEdVb0tUdGNiaUFnWTI5dWMzUWdXMjkxZEdWeVJHbDJVbVZtTENCN0lIZHBaSFJvTENCb1pXbG5hSFFnZlYwZ1BTQjFjMlZOWldGemRYSmxLQ2s3WEc0Z0lHTnZibk4wSUhKbFppQTlJSFZ6WlZKbFpqeElWRTFNUkdsMlJXeGxiV1Z1ZENCOElHNTFiR3crS0c1MWJHd3BPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlVhR1VnWTJ4aGMzTWdkR2hoZENCbGJtRmliR1Z6SUdSeVlXY2dZVzVwYldGMGFXOXVjeUJ1WldWa2N5QjBieUJpWlNCaFpHUmxaQ0JoWm5SbGNpQnRiM1Z1ZENCdmRHaGxjbmRwYzJVZ2NHRnVaV3h6SUcxdmRtVWdiMjRnYlc5MWJuUWdkRzhnZEdobGFYSWdjMlYwSUhCdmMybDBhVzl1Y3lCM2FHbGphQ0JwY3lCaGJtNXZlV2x1WjF4dUlDQWdLaTljYmlBZ2RYTmxSV1ptWldOMEtDZ3BJRDArSUh0Y2JpQWdJQ0IxY0dSaGRHVkJibWx0WVhScGIyNURiR0Z6Y3loeVpXWXNJQ0VoYVhORWNtRm5aMkZpYkdVcE8xeHVJQ0I5TENCYmFYTkVjbUZuWjJGaWJHVmRLVHRjYmx4dUlDQjJZV3hwWkdGMFpVTm9hV3hrY21WdVUybDZaU2hqYUdsc1pISmxiaWs3WEc1Y2JpQWdZMjl1YzNRZ2NtVnVaR1Z5UjNKcFpDQTlJQ2gzYVdSMGFEb2diblZ0WW1WeUxDQm9aV2xuYUhRNklHNTFiV0psY2lrZ1BUNGdlMXh1SUNBZ0lHbG1JQ2doZDJsa2RHZ2dmSHdnSVdobGFXZG9kQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWTI5dWMzUWdiR0Y1YjNWMElEMGdiVzlrWld3dVluVnBiR1JIY21sa1RHRjViM1YwS0hkcFpIUm9MQ0JvWldsbmFIUXBPMXh1WEc0Z0lDQWdjbVYwZFhKdUlDaGNiaUFnSUNBZ0lDOHFLbHh1SUNBZ0lDQWdJQ29nVkdobElHTm9hV3hrY21WdUlHbHpJSFZ6YVc1bklHRWdkMmxrZEdnZ2IyWWdNVEF3SlNCemJ5QjNaU0J1WldWa0lIUnZJR2QxWVhKaGJuUmxaU0IwYUdGMElHbDBJR2x6SUhkeVlYQndaV1JjYmlBZ0lDQWdJQ0FxSUdsdUlHRnVJR1ZzWlcxbGJuUWdkR2hoZENCb1lYTWdkR2hsSUdOaGJHTjFiR0YwWldRZ2MybDZaU0JuYVhabGJpQmllU0IwYUdVZ1FYVjBiMU5wZW1WeUxpQlVhR1VnUVhWMGIxTnBlbVZ5WEc0Z0lDQWdJQ0FnS2lCb1lYTWdZU0IzYVdSMGFDQnZaaUF3SUdGdVpDQjNhV3hzSUd4bGRDQnBkSE1nWTI5dWRHVnVkQ0J2ZG1WeVpteHZkeUJwZEhNZ1pHbDJMbHh1SUNBZ0lDQWdJQ292WEc0Z0lDQWdJQ0E4WkdsMklISmxaajE3Y21WbWZTQnpkSGxzWlQxN2V5QjNhV1IwYURvZ1lDUjdkMmxrZEdoOWNIaGdMQ0JvWldsbmFIUTZJQ2N4TURBbEp5QjlmU0JqYkdGemMwNWhiV1U5WENKeVpXRmpkQzFuY21sa0xXeGhlVzkxZEZ3aVBseHVJQ0FnSUNBZ0lDQThVbVZoWTNSSGNtbGtUR0Y1YjNWMFhHNGdJQ0FnSUNBZ0lDQWdkMmxrZEdnOWUzZHBaSFJvZlZ4dUlDQWdJQ0FnSUNBZ0lDOHFLbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRVJwYzJGaWJHVWdaSEpoWjJkaFlteGxJR2xtSUcxdlltbHNaU0JrWlhacFkyVXNJSE52YkhacGJtY2dZVzRnYVhOemRXVWdkMmwwYUNCMWJtbHVkR1Z1ZEdsdmJtRnNiSGxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J0YjNacGJtY2djR0Z1Wld4ekxpQm9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZaM0poWm1GdVlTOW5jbUZtWVc1aEwybHpjM1ZsY3k4eE9EUTVOMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvWlcxbExtSnlaV0ZyY0c5cGJuUnpMbTFrSUQwZ056WTVYRzRnSUNBZ0lDQWdJQ0FnSUNvdlhHNGdJQ0FnSUNBZ0lDQWdhWE5FY21GbloyRmliR1U5ZTJselJISmhaMmRoWW14bElDWW1JSGRwWkhSb0lENGdOelk0ZlZ4dUlDQWdJQ0FnSUNBZ0lHbHpVbVZ6YVhwaFlteGxQWHRwYzFKbGMybDZZV0pzWlNBL1B5Qm1ZV3h6WlgxY2JpQWdJQ0FnSUNBZ0lDQmpiMjUwWVdsdVpYSlFZV1JrYVc1blBYdGJNQ3dnTUYxOVhHNGdJQ0FnSUNBZ0lDQWdkWE5sUTFOVFZISmhibk5tYjNKdGN6MTdkSEoxWlgxY2JpQWdJQ0FnSUNBZ0lDQnRZWEpuYVc0OWUxdEhVa2xFWDBORlRFeGZWazFCVWtkSlRpd2dSMUpKUkY5RFJVeE1YMVpOUVZKSFNVNWRmVnh1SUNBZ0lDQWdJQ0FnSUdOdmJITTllMGRTU1VSZlEwOU1WVTFPWDBOUFZVNVVmVnh1SUNBZ0lDQWdJQ0FnSUhKdmQwaGxhV2RvZEQxN1IxSkpSRjlEUlV4TVgwaEZTVWRJVkgxY2JpQWdJQ0FnSUNBZ0lDQmtjbUZuWjJGaWJHVklZVzVrYkdVOWUyQXVaM0pwWkMxa2NtRm5MV2hoYm1Sc1pTMGtlMjF2WkdWc0xuTjBZWFJsTG10bGVYMWdmVnh1SUNBZ0lDQWdJQ0FnSUdSeVlXZG5ZV0pzWlVOaGJtTmxiRDFjSWk1bmNtbGtMV1J5WVdjdFkyRnVZMlZzWENKY2JpQWdJQ0FnSUNBZ0lDQnNZWGx2ZFhROWUyeGhlVzkxZEgxY2JpQWdJQ0FnSUNBZ0lDQnZia1J5WVdkVGRHRnlkRDE3Ylc5a1pXd3ViMjVFY21GblUzUmhjblI5WEc0Z0lDQWdJQ0FnSUNBZ2IyNUVjbUZuVTNSdmNEMTdiVzlrWld3dWIyNUVjbUZuVTNSdmNIMWNiaUFnSUNBZ0lDQWdJQ0J2YmxKbGMybDZaVk4wYjNBOWUyMXZaR1ZzTG05dVVtVnphWHBsVTNSdmNIMWNiaUFnSUNBZ0lDQWdJQ0J2Ymt4aGVXOTFkRU5vWVc1blpUMTdiVzlrWld3dWIyNU1ZWGx2ZFhSRGFHRnVaMlY5WEc0Z0lDQWdJQ0FnSUNBZ2FYTkNiM1Z1WkdWa1BYdG1ZV3h6WlgxY2JpQWdJQ0FnSUNBZ0lDQnlaWE5wZW1WSVlXNWtiR1U5ZXp4U1pYTnBlbVZJWVc1a2JHVWdMejU5WEc0Z0lDQWdJQ0FnSUQ1Y2JpQWdJQ0FnSUNBZ0lDQjdiR0Y1YjNWMExtMWhjQ2dvWjNKcFpFbDBaVzBzSUdsdVpHVjRLU0E5UGlBb1hHNGdJQ0FnSUNBZ0lDQWdJQ0E4UjNKcFpFbDBaVzFYY21Gd2NHVnlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHdGxlVDE3WjNKcFpFbDBaVzB1YVgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWjNKcFpEMTdiVzlrWld4OVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUd4aGVXOTFkRWwwWlcwOWUyZHlhV1JKZEdWdGZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJtUmxlRDE3YVc1a1pYaDlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHpUR0Y2ZVQxN2FYTk1ZWHA1ZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IwYjNSaGJFTnZkVzUwUFh0c1lYbHZkWFF1YkdWdVozUm9mVnh1SUNBZ0lDQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lDQWdJQ0FwS1gxY2JpQWdJQ0FnSUNBZ1BDOVNaV0ZqZEVkeWFXUk1ZWGx2ZFhRK1hHNGdJQ0FnSUNBOEwyUnBkajVjYmlBZ0lDQXBPMXh1SUNCOU8xeHVYRzRnSUhKbGRIVnliaUFvWEc0Z0lDQWdQR1JwZGx4dUlDQWdJQ0FnY21WbVBYdHZkWFJsY2tScGRsSmxaaUJoY3lCU1pXWkRZV3hzWW1GamF6eElWRTFNUkdsMlJXeGxiV1Z1ZEQ1OVhHNGdJQ0FnSUNCemRIbHNaVDE3ZXlCbWJHVjRPaUFuTVNBeElHRjFkRzhuTENCd2IzTnBkR2x2YmpvZ0ozSmxiR0YwYVhabEp5d2dla2x1WkdWNE9pQXhMQ0IzYVdSMGFEb2dKekV3TUNVbklIMTlYRzRnSUNBZ1BseHVJQ0FnSUNBZ2UzSmxibVJsY2tkeWFXUW9kMmxrZEdnc0lHaGxhV2RvZENsOVhHNGdJQ0FnUEM5a2FYWStYRzRnSUNrN1hHNTlYRzVjYm1sdWRHVnlabUZqWlNCSGNtbGtTWFJsYlZkeVlYQndaWEpRY205d2N5QmxlSFJsYm1SeklGSmxZV04wTGtoVVRVeEJkSFJ5YVdKMWRHVnpQRWhVVFV4RWFYWkZiR1Z0Wlc1MFBpQjdYRzRnSUdkeWFXUTZJRk5qWlc1bFIzSnBaRXhoZVc5MWREdGNiaUFnYkdGNWIzVjBTWFJsYlRvZ1VtVmhZM1JIY21sa1RHRjViM1YwTGt4aGVXOTFkRHRjYmlBZ2FXNWtaWGc2SUc1MWJXSmxjanRjYmlBZ2RHOTBZV3hEYjNWdWREb2diblZ0WW1WeU8xeHVJQ0JwYzB4aGVuay9PaUJpYjI5c1pXRnVPMXh1ZlZ4dVhHNWpiMjV6ZENCSGNtbGtTWFJsYlZkeVlYQndaWElnUFNCU1pXRmpkQzVtYjNKM1lYSmtVbVZtUEVoVVRVeEVhWFpGYkdWdFpXNTBMQ0JIY21sa1NYUmxiVmR5WVhCd1pYSlFjbTl3Y3o0b0tIQnliM0J6TENCeVpXWXBJRDArSUh0Y2JpQWdZMjl1YzNRZ2V5Qm5jbWxrTENCc1lYbHZkWFJKZEdWdExDQnBibVJsZUN3Z2RHOTBZV3hEYjNWdWRDd2dhWE5NWVhwNUxDQnpkSGxzWlN3Z2IyNU1iMkZrTENCdmJrTm9ZVzVuWlN3Z1kyaHBiR1J5Wlc0c0lDNHVMbVJwZGxCeWIzQnpJSDBnUFNCd2NtOXdjenRjYmlBZ1kyOXVjM1FnYzJObGJtVkRhR2xzWkNBOUlHZHlhV1F1WjJWMFUyTmxibVZNWVhsdmRYUkRhR2xzWkNoc1lYbHZkWFJKZEdWdExta3BJVHRjYmlBZ1kyOXVjM1FnWTJ4aGMzTk9ZVzFsSUQwZ2MyTmxibVZEYUdsc1pDNW5aWFJEYkdGemMwNWhiV1UvTGlncE8xeHVYRzRnSUdOdmJuTjBJR2x1Ym1WeVEyOXVkR1Z1ZENBOUlEeHpZMlZ1WlVOb2FXeGtMa052YlhCdmJtVnVkQ0J0YjJSbGJEMTdjMk5sYm1WRGFHbHNaSDBnYTJWNVBYdHpZMlZ1WlVOb2FXeGtMbk4wWVhSbExtdGxlWDBnTHo0N1hHNWNiaUFnYVdZZ0tHbHpUR0Y2ZVNrZ2UxeHVJQ0FnSUhKbGRIVnliaUFvWEc0Z0lDQWdJQ0E4VEdGNmVVeHZZV1JsY2x4dUlDQWdJQ0FnSUNCN0xpNHVaR2wyVUhKdmNITjlYRzRnSUNBZ0lDQWdJR3RsZVQxN2MyTmxibVZEYUdsc1pDNXpkR0YwWlM1clpYa2hmVnh1SUNBZ0lDQWdJQ0JrWVhSaExXZHlhV1JwZEdWdExXdGxlVDE3YzJObGJtVkRhR2xzWkM1emRHRjBaUzVyWlhsOVhHNGdJQ0FnSUNBZ0lHTnNZWE56VG1GdFpUMTdZM2dvWTJ4aGMzTk9ZVzFsTENCd2NtOXdjeTVqYkdGemMwNWhiV1VwZlZ4dUlDQWdJQ0FnSUNCemRIbHNaVDE3YzNSNWJHVjlYRzRnSUNBZ0lDQWdJSEpsWmoxN2NtVm1mVnh1SUNBZ0lDQWdQbHh1SUNBZ0lDQWdJQ0I3YVc1dVpYSkRiMjUwWlc1MGZWeHVJQ0FnSUNBZ0lDQjdZMmhwYkdSeVpXNTlYRzRnSUNBZ0lDQThMMHhoZW5sTWIyRmtaWEkrWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUFvWEc0Z0lDQWdQR1JwZGx4dUlDQWdJQ0FnZXk0dUxtUnBkbEJ5YjNCemZWeHVJQ0FnSUNBZ2NtVm1QWHR5WldaOVhHNGdJQ0FnSUNCclpYazllM05qWlc1bFEyaHBiR1F1YzNSaGRHVXVhMlY1ZlZ4dUlDQWdJQ0FnWkdGMFlTMW5jbWxrYVhSbGJTMXJaWGs5ZTNOalpXNWxRMmhwYkdRdWMzUmhkR1V1YTJWNWZWeHVJQ0FnSUNBZ1kyeGhjM05PWVcxbFBYdGplQ2hqYkdGemMwNWhiV1VzSUhCeWIzQnpMbU5zWVhOelRtRnRaU2w5WEc0Z0lDQWdJQ0J6ZEhsc1pUMTdjM1I1YkdWOVhHNGdJQ0FnUGx4dUlDQWdJQ0FnZTJsdWJtVnlRMjl1ZEdWdWRIMWNiaUFnSUNBZ0lIdGphR2xzWkhKbGJuMWNiaUFnSUNBOEwyUnBkajVjYmlBZ0tUdGNibjBwTzF4dVhHNUhjbWxrU1hSbGJWZHlZWEJ3WlhJdVpHbHpjR3hoZVU1aGJXVWdQU0FuUjNKcFpFbDBaVzFYY21Gd2NHVnlKenRjYmx4dVpuVnVZM1JwYjI0Z2RtRnNhV1JoZEdWRGFHbHNaSEpsYmxOcGVtVW9ZMmhwYkdSeVpXNDZJRk5qWlc1bFIzSnBaRWwwWlcxTWFXdGxXMTBwSUh0Y2JpQWdhV1lnS0Z4dUlDQWdJR05vYVd4a2NtVnVMbk52YldVb1hHNGdJQ0FnSUNBb1l5a2dQVDVjYmlBZ0lDQWdJQ0FnWXk1emRHRjBaUzVvWldsbmFIUWdQVDA5SUhWdVpHVm1hVzVsWkNCOGZGeHVJQ0FnSUNBZ0lDQmpMbk4wWVhSbExuZHBaSFJvSUQwOVBTQjFibVJsWm1sdVpXUWdmSHhjYmlBZ0lDQWdJQ0FnWXk1emRHRjBaUzU0SUQwOVBTQjFibVJsWm1sdVpXUWdmSHhjYmlBZ0lDQWdJQ0FnWXk1emRHRjBaUzU1SUQwOVBTQjFibVJsWm1sdVpXUmNiaUFnSUNBcFhHNGdJQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RV3hzSUdOb2FXeGtjbVZ1SUcxMWMzUWdhR0YyWlNCaElITnBlbVVnYzNCbFkybG1hV1ZrSnlrN1hHNGdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdkWEJrWVhSbFFXNXBiV0YwYVc5dVEyeGhjM01vWEc0Z0lISmxaam9nVW1WaFkzUXVUWFYwWVdKc1pWSmxaazlpYW1WamREeElWRTFNUkdsMlJXeGxiV1Z1ZENCOElHNTFiR3crTEZ4dUlDQnBjMFJ5WVdkbllXSnNaVG9nWW05dmJHVmhiaXhjYmlBZ2NtVjBjbmsvT2lCaWIyOXNaV0Z1WEc0cElIdGNiaUFnYVdZZ0tISmxaaTVqZFhKeVpXNTBLU0I3WEc0Z0lDQWdhV1lnS0dselJISmhaMmRoWW14bEtTQjdYRzRnSUNBZ0lDQnlaV1l1WTNWeWNtVnVkQzVqYkdGemMweHBjM1F1WVdSa0tDZHlaV0ZqZEMxbmNtbGtMV3hoZVc5MWRDMHRaVzVoWW14bExXMXZkbVV0WVc1cGJXRjBhVzl1Y3ljcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J5WldZdVkzVnljbVZ1ZEM1amJHRnpjMHhwYzNRdWNtVnRiM1psS0NkeVpXRmpkQzFuY21sa0xXeGhlVzkxZEMwdFpXNWhZbXhsTFcxdmRtVXRZVzVwYldGMGFXOXVjeWNwTzF4dUlDQWdJSDFjYmlBZ2ZTQmxiSE5sSUdsbUlDZ2hjbVYwY25rcElIdGNiaUFnSUNCelpYUlVhVzFsYjNWMEtDZ3BJRDArSUhWd1pHRjBaVUZ1YVcxaGRHbHZia05zWVhOektISmxaaXdnYVhORWNtRm5aMkZpYkdVc0lIUnlkV1VwTENBMU1DazdYRzRnSUgxY2JuMWNibHh1YVc1MFpYSm1ZV05sSUZKbGMybDZaVWhoYm1Sc1pWQnliM0J6SUdWNGRHVnVaSE1nVW1WaFkzUXVTRlJOVEVGMGRISnBZblYwWlhNOFNGUk5URVJwZGtWc1pXMWxiblErSUh0Y2JpQWdhR0Z1Wkd4bFFYaHBjejg2SUhOMGNtbHVaenRjYm4xY2JseHVZMjl1YzNRZ1VtVnphWHBsU0dGdVpHeGxJRDBnVW1WaFkzUXVabTl5ZDJGeVpGSmxaanhJVkUxTVJHbDJSV3hsYldWdWRDd2dVbVZ6YVhwbFNHRnVaR3hsVUhKdmNITStLQ2g3SUdoaGJtUnNaVUY0YVhNc0lDNHVMbVJwZGxCeWIzQnpJSDBzSUhKbFppa2dQVDRnZTF4dUlDQmpiMjV6ZENCamRYTjBiMjFEYzNORGJHRnpjeUE5SUhWelpWTjBlV3hsY3pJb1oyVjBVbVZ6YVhwbFNHRnVaR3hsVTNSNWJHVnpLVHRjYmx4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWWdjbVZtUFh0eVpXWjlJSHN1TGk1a2FYWlFjbTl3YzMwZ1kyeGhjM05PWVcxbFBYdGdKSHRqZFhOMGIyMURjM05EYkdGemMzMGdjMk5sYm1VdGNtVnphWHBsTFdoaGJtUnNaV0I5UGx4dUlDQWdJQ0FnUEhOMlp5QjNhV1IwYUQxY0lqRTJjSGhjSWlCb1pXbG5hSFE5WENJeE5uQjRYQ0lnZG1sbGQwSnZlRDFjSWpBZ01DQXlOQ0F5TkZ3aUlHWnBiR3c5WENKdWIyNWxYQ0lnZUcxc2JuTTlYQ0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaMXdpUGx4dUlDQWdJQ0FnSUNBOGNHRjBhRnh1SUNBZ0lDQWdJQ0FnSUdROVhDSk5NakVnTVRWTU1UVWdNakZOTWpFZ09FdzRJREl4WENKY2JpQWdJQ0FnSUNBZ0lDQnpkSEp2YTJVOVhDSmpkWEp5Wlc1MFEyOXNiM0pjSWx4dUlDQWdJQ0FnSUNBZ0lITjBjbTlyWlZkcFpIUm9QVndpTWx3aVhHNGdJQ0FnSUNBZ0lDQWdjM1J5YjJ0bFRHbHVaV05oY0QxY0luSnZkVzVrWENKY2JpQWdJQ0FnSUNBZ0lDQnpkSEp2YTJWTWFXNWxhbTlwYmoxY0luSnZkVzVrWENKY2JpQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lEd3ZjM1puUGx4dUlDQWdJRHd2WkdsMlBseHVJQ0FwTzF4dWZTazdYRzVjYmxKbGMybDZaVWhoYm1Sc1pTNWthWE53YkdGNVRtRnRaU0E5SUNkU1pYTnBlbVZJWVc1a2JHVW5PMXh1WEc1bWRXNWpkR2x2YmlCblpYUlNaWE5wZW1WSVlXNWtiR1ZUZEhsc1pYTW9kR2hsYldVNklFZHlZV1poYm1GVWFHVnRaVElwSUh0Y2JpQWdjbVYwZFhKdUlHTnpjeWg3WEc0Z0lDQWdjRzl6YVhScGIyNDZJQ2RoWW5OdmJIVjBaU2NzWEc0Z0lDQWdZbTkwZEc5dE9pQXdMRnh1SUNBZ0lISnBaMmgwT2lBd0xGeHVJQ0FnSUhwSmJtUmxlRG9nT1RrNUxGeHVJQ0FnSUhCaFpHUnBibWM2SUhSb1pXMWxMbk53WVdOcGJtY29NUzQxTENBd0xDQXdMQ0F4TGpVcExGeHVJQ0FnSUdOdmJHOXlPaUIwYUdWdFpTNWpiMnh2Y25NdVltOXlaR1Z5TG5OMGNtOXVaeXhjYmlBZ0lDQmpkWEp6YjNJNklDZHpaUzF5WlhOcGVtVW5MRnh1SUNBZ0lDY21PbWh2ZG1WeUp6b2dlMXh1SUNBZ0lDQWdZMjlzYjNJNklIUm9aVzFsTG1OdmJHOXljeTUwWlhoMExteHBibXNzWEc0Z0lDQWdmU3hjYmlBZ0lDQnpkbWM2SUh0Y2JpQWdJQ0FnSUdScGMzQnNZWGs2SUNkaWJHOWpheWNzWEc0Z0lDQWdmU3hjYmlBZ0lDQW5MbkpsWVdOMExYSmxjMmw2WVdKc1pTMW9hV1JsSUNZbk9pQjdYRzRnSUNBZ0lDQmthWE53YkdGNU9pQW5ibTl1WlNjc1hHNGdJQ0FnZlN4Y2JpQWdmU2s3WEc1OVhHNGlYU3dpYm1GdFpYTWlPbHNpZDJsa2RHZ2lMQ0pvWldsbmFIUWlYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dEJRVmxuUWl4VFFVRkJMSFZDUVVGQkxFTkJRWGRDTEVWQlFVVXNTMEZCUVN4RlFVRXJReXhGUVVGQk8wRkJRM1pHTEVWQlFVRXNUVUZCVFN4RlFVRkZMRkZCUVZVc1JVRkJRU3hOUVVGQkxFVkJRVkVzWVVGQllTeFhRVUZaTEVWQlFVRXNSMEZCU1N4TlFVRk5MRkZCUVZNc1JVRkJRU3hEUVVGQk8wRkJRM1JGTEVWQlFVRXNUVUZCVFN4RFFVRkRMRmRCUVdFc1JVRkJRU3hGUVVGRkxFOUJRVThzVFVGQlR5eEZRVUZETEVsQlFVa3NWVUZCVnl4RlFVRkJMRU5CUVVFN1FVRkRjRVFzUlVGQlRTeE5RVUZCTEVkQlFVRXNSMEZCVFN4UFFVRTRRaXhKUVVGSkxFTkJRVUVzUTBGQlFUdEJRVXM1UXl4RlFVRkJMRk5CUVVFc1EwRkJWU3hOUVVGTk8wRkJRMlFzU1VGQmNVSXNiMEpCUVVFc1EwRkJRU3hIUVVGQkxFVkJRVXNzUTBGQlF5eERRVUZETEZkQlFWY3NRMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRla01zUlVGQlJ5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkJMRU5CUVVFN1FVRkZhRUlzUlVGQlFTeHZRa0ZCUVN4RFFVRnhRaXhSUVVGUkxFTkJRVUVzUTBGQlFUdEJRVVUzUWl4RlFVRk5MRTFCUVVFc1ZVRkJRU3hIUVVGaExFTkJRVU5CTEUxQlFVRkJMRVZCUVdWRExFOUJRVzFDTEV0QlFVRTdRVUZEY0VRc1NVRkJTU3hKUVVGQkxFTkJRVU5FTEUxQlFWTXNTVUZCUVN4RFFVRkRReXhQUVVGUkxFVkJRVUU3UVVGRGNrSXNUVUZCVHl4UFFVRkJMRWxCUVVFc1EwRkJRVHRCUVVGQkxFdEJRMVE3UVVGRlFTeEpRVUZCTEUxQlFVMHNUVUZCVXl4SFFVRkJMRXRCUVVFc1EwRkJUU3hsUVVGblFrUXNRMEZCUVVFc1RVRkJRVUVzUlVGQlQwTXNUMEZCVFN4RFFVRkJMRU5CUVVFN1FVRkZiRVFzU1VGQlFTeDFRa0ZOUnl4TFFVRkJMRU5CUVVFc1lVRkJRU3hEUVVGQkxFdEJRVUVzUlVGQlFUdEJRVUZCTEUxQlFVa3NSMEZCUVR0QlFVRkJMRTFCUVZVc1QwRkJUeXhGUVVGRkxFdEJRVUVzUlVGQlR5eERRVUZIUkN4RlFVRkJRU3hOUVVGQlFTeERRVUZCUVN4RlFVRkJRU3hEUVVGQlFTeEZRVUZYTEZGQlFWRXNUVUZCVHl4RlFVRkJPMEZCUVVFc1RVRkJSeXhUUVVGVkxFVkJRVUVzYlVKQlFVRTdRVUZCUVN4TFFVRkJMR3RDUVVOMFJTeExRVUZCTEVOQlFVRXNZVUZCUVN4RFFVRkJMR1ZCUVVFc1JVRkJRVHRCUVVGQkxFMUJRME1zUzBGQlQwRXNSVUZCUVVFc1RVRkJRVUU3UVVGQlFTeE5RVTFRTEZkQlFVRXNSVUZCWVN4bFFVRmxRU3hOUVVGUkxFZEJRVUVzUjBGQlFUdEJRVUZCTEUxQlEzQkRMR0ZCUVdFc1YwRkJaU3hKUVVGQkxFbEJRVUVzUjBGQlFTeFhRVUZCTEVkQlFVRXNTMEZCUVR0QlFVRkJMRTFCUXpWQ0xHZENRVUZCTEVWQlFXdENMRU5CUVVNc1EwRkJRU3hGUVVGSExFTkJRVU1zUTBGQlFUdEJRVUZCTEUxQlEzWkNMR2RDUVVGclFpeEZRVUZCTEVsQlFVRTdRVUZCUVN4TlFVTnNRaXhOUVVGQkxFVkJRVkVzUTBGQlF5eHBRa0ZCUVN4RlFVRnRRaXhwUWtGQmFVSXNRMEZCUVR0QlFVRkJMRTFCUXpkRExFbEJRVTBzUlVGQlFTeHBRa0ZCUVR0QlFVRkJMRTFCUTA0c1UwRkJWeXhGUVVGQkxHZENRVUZCTzBGQlFVRXNUVUZEV0N4bFFVRkJMRVZCUVdsQ0xFTkJRWEZDTEd0Q1FVRkJMRVZCUVVFc1MwRkJRU3hEUVVGTkxFdEJRVTBzUTBGQlFTeEhRVUZCTEVOQlFVRXNRMEZCUVR0QlFVRkJMRTFCUTJ4RUxHVkJRV2RDTEVWQlFVRXNiVUpCUVVFN1FVRkJRU3hOUVVOb1FpeE5RVUZCTzBGQlFVRXNUVUZEUVN4aFFVRmhMRXRCUVUwc1EwRkJRU3hYUVVGQk8wRkJRVUVzVFVGRGJrSXNXVUZCV1N4TFFVRk5MRU5CUVVFc1ZVRkJRVHRCUVVGQkxFMUJRMnhDTEdOQlFXTXNTMEZCVFN4RFFVRkJMRmxCUVVFN1FVRkJRU3hOUVVOd1FpeG5Ra0ZCWjBJc1MwRkJUU3hEUVVGQkxHTkJRVUU3UVVGQlFTeE5RVU4wUWl4VFFVRlhMRVZCUVVFc1MwRkJRVHRCUVVGQkxFMUJRMWdzV1VGQlFTeHpRMEZCWlN4WlFVRmhMRVZCUVVFc1NVRkJRU3hEUVVGQk8wRkJRVUVzUzBGQlFTeEZRVVV6UWl4TlFVRlBMRU5CUVVFc1IwRkJRU3hEUVVGSkxFTkJRVU1zVVVGQlFTeEZRVUZWTERCQ1FVTndRaXhMUVVGQkxFTkJRVUVzWVVGQlFTeERRVUZCTEdWQlFVRXNSVUZCUVR0QlFVRkJMRTFCUTBNc1MwRkJTeXhSUVVGVExFTkJRVUVzUTBGQlFUdEJRVUZCTEUxQlEyUXNTVUZCVFN4RlFVRkJMRXRCUVVFN1FVRkJRU3hOUVVOT0xGVkJRVmtzUlVGQlFTeFJRVUZCTzBGQlFVRXNUVUZEV2l4TFFVRkJPMEZCUVVFc1RVRkRRU3hOUVVGQk8wRkJRVUVzVFVGRFFTeFpRVUZaTEUxQlFVOHNRMEZCUVN4TlFVRkJPMEZCUVVFc1MwRkRja0lzUTBGRFJDeERRVU5JTEVOQlEwWXNRMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkZTaXhEUVVGQk8wRkJSVUVzUlVGQlFTeDFRa0ZEUnl4TFFVRkJMRU5CUVVFc1lVRkJRU3hEUVVGQkxFdEJRVUVzUlVGQlFUdEJRVUZCTEVsQlEwTXNSMEZCU3l4RlFVRkJMRmRCUVVFN1FVRkJRU3hKUVVOTUxFdEJRVUVzUlVGQlR5eEZRVUZGTEVsQlFVMHNSVUZCUVN4VlFVRkJMRVZCUVZrc1ZVRkJWU3hWUVVGWkxFVkJRVUVzVFVGQlFTeEZRVUZSTEVOQlFVY3NSVUZCUVN4TFFVRkJMRVZCUVU4c1RVRkJUeXhGUVVGQk8wRkJRVUVzUjBGRmVrVXNSVUZCUVN4VlFVRkJMRU5CUVZjc1MwRkJUeXhGUVVGQkxFMUJRVTBzUTBGRE0wSXNRMEZCUVN4RFFVRkJPMEZCUlVvc1EwRkJRVHRCUVZWQkxFMUJRVTBzWlVGQmEwSXNSMEZCUVN4TFFVRkJMRU5CUVUwc1ZVRkJhVVFzUTBGQlFTeERRVUZETEU5QlFVOHNSMEZCVVN4TFFVRkJPMEZCYWtjdlJpeEZRVUZCTEVsQlFVRXNSVUZCUVN4RFFVRkJPMEZCYTBkRkxFVkJRWGRITEUxQlFVRXNSVUZCUVN4SFFVRkJMRXRCUVVFc1JVRkJhRWNzVVVGQlRTeFZRVUZaTEVWQlFVRXNTMEZCUVN4RlFVRlBMRmxCUVZrc1RVRkJVU3hGUVVGQkxFdEJRVUVzUlVGQlR5eE5RVUZSTEVWQlFVRXNVVUZCUVN4RlFVRlZMRkZCYkVkb1JpeEZRVUZCTEVkQmEwY3dSeXhKUVVGaUxGRkJRV0VzUjBGQlFTeFRRVUZCTEVOQlFVRXNSVUZCUVN4RlFVRmlMRU5CUVc1R0xFMUJRVTBzUlVGQlFTeFpRVUZCTEVWQlFWa3NVMEZCVHl4WlFVRlpMRVZCUVVFc1VVRkJRU3hGUVVGUkxFOUJRVThzUlVGQlFTeFJRVUZCTEVWQlFWRXNWVUZCVlN4RlFVRkJMRlZCUVVFc1EwRkJRU3hEUVVGQkxFTkJRVUU3UVVGRE9VVXNSVUZCUVN4TlFVRk5MRlZCUVdFc1IwRkJRU3hKUVVGQkxFTkJRVXNzYlVKQlFXOUNMRU5CUVVFc1ZVRkJRU3hEUVVGWExFTkJRVU1zUTBGQlFTeERRVUZCTzBGQlEzaEVMRVZCUVUwc1RVRkJRU3hUUVVGQkxFZEJRVUVzUTBGQldTeG5Ra0ZCVnl4WlFVRllMRXRCUVVFc1NVRkJRU3hIUVVGQkxFdEJRVUVzUTBGQlFTeEhRVUZCTEVWQlFVRXNRMEZCUVN4SlFVRkJMRU5CUVVFc1ZVRkJRU3hEUVVGQkxFTkJRVUU3UVVGRmJFSXNSVUZCVFN4TlFVRkJMRmxCUVVFc2JVSkJRV2RDTEV0QlFVRXNRMEZCUVN4aFFVRkJMRU5CUVVFc1ZVRkJRU3hEUVVGWExGTkJRVmdzUlVGQlFUdEJRVUZCTEVsQlFYRkNMRXRCUVU4c1JVRkJRU3hWUVVGQk8wRkJRVUVzU1VGQldTeEhRVUZCTEVWQlFVc3NWMEZCVnl4TFFVRk5MRU5CUVVFc1IwRkJRVHRCUVVGQkxFZEJRVXNzUTBGQlFTeERRVUZCTzBGQlJYcEdMRVZCUVVFc1NVRkJTU3hOUVVGUkxFVkJRVUU3UVVGRFZpeEpRVU5GTEhWQ1FVRkJMRXRCUVVFc1EwRkJRU3hoUVVGQkxFTkJRVU1zTmtOQlEwc3NVVUZFVEN4RFFVRkJMRVZCUVVFN1FVRkJRU3hOUVVWRExFZEJRVUVzUlVGQlN5eFhRVUZYTEV0QlFVMHNRMEZCUVN4SFFVRkJPMEZCUVVFc1RVRkRkRUlzYlVKQlFVRXNSVUZCYlVJc1YwRkJWeXhMUVVGTkxFTkJRVUVzUjBGQlFUdEJRVUZCTEUxQlEzQkRMRk5CUVZjc1JVRkJRU3hGUVVGQkxFTkJRVWNzVTBGQlZ5eEZRVUZCTEV0QlFVRXNRMEZCVFN4VFFVRlRMRU5CUVVFN1FVRkJRU3hOUVVONFF5eExRVUZCTzBGQlFVRXNUVUZEUVN4SFFVRkJPMEZCUVVFc1MwRkJRU3hEUVVGQkxFVkJSVU1zWTBGRFFTeFJRVU5JTEVOQlFVRXNRMEZCUVR0QlFVRkJMRWRCUlVvN1FVRkZRU3hGUVVORkxIVkNRVUZCTEV0QlFVRXNRMEZCUVN4aFFVRkJMRU5CUVVNc2QwTkJRMHNzVVVGRVRDeERRVUZCTEVWQlFVRTdRVUZCUVN4SlFVVkRMRWRCUVVFN1FVRkJRU3hKUVVOQkxFZEJRVUVzUlVGQlN5eFhRVUZYTEV0QlFVMHNRMEZCUVN4SFFVRkJPMEZCUVVFc1NVRkRkRUlzYlVKQlFVRXNSVUZCYlVJc1YwRkJWeXhMUVVGTkxFTkJRVUVzUjBGQlFUdEJRVUZCTEVsQlEzQkRMRk5CUVZjc1JVRkJRU3hGUVVGQkxFTkJRVWNzVTBGQlZ5eEZRVUZCTEV0QlFVRXNRMEZCVFN4VFFVRlRMRU5CUVVFN1FVRkJRU3hKUVVONFF5eExRVUZCTzBGQlFVRXNSMEZCUVN4RFFVRkJMRVZCUlVNc1kwRkRRU3hSUVVOSUxFTkJRVUVzUTBGQlFUdEJRVVZLTEVOQlFVTXNRMEZCUVN4RFFVRkJPMEZCUlVRc1pVRkJRU3hEUVVGblFpeFhRVUZqTEVkQlFVRXNhVUpCUVVFc1EwRkJRVHRCUVVVNVFpeFRRVUZUTEhGQ1FVRnhRaXhSUVVFclFpeEZRVUZCTzBGQlF6TkVMRVZCUVVFc1NVRkRSU3hSUVVGVExFTkJRVUVzU1VGQlFUdEJRVUZCTEVsQlExQXNRMEZCUXl4RFFVTkRMRXRCUVVFc1EwRkJRU3hEUVVGRkxFdEJRVTBzUTBGQlFTeE5RVUZCTEV0QlFWY3NWVUZEYmtJc1EwRkJSU3hEUVVGQkxFdEJRVUVzUTBGQlRTeExRVUZWTEV0QlFVRXNTMEZCUVN4RFFVRkJMRWxCUTJ4Q0xFVkJRVVVzUzBGQlRTeERRVUZCTEVOQlFVRXNTMEZCVFN4TFFVTmtMRU5CUVVFc1NVRkJRU3hEUVVGQkxFTkJRVVVzVFVGQlRTeERRVUZOTEV0QlFVRXNTMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkZiRUlzUlVGQlFUdEJRVU5CTEVsQlFVMHNUVUZCUVN4SlFVRkpMRTFCUVUwc2VVTkJRWGxETEVOQlFVRXNRMEZCUVR0QlFVRkJMRWRCUXpORU8wRkJRMFlzUTBGQlFUdEJRVVZCTEZOQlFWTXNiMEpCUVVFc1EwRkRVQ3hIUVVOQkxFVkJRVUVzVjBGQlFTeEZRVU5CTEV0QlEwRXNSVUZCUVR0QlFVTkJMRVZCUVVFc1NVRkJTU3hKUVVGSkxFOUJRVk1zUlVGQlFUdEJRVU5tTEVsQlFVRXNTVUZCU1N4WFFVRmhMRVZCUVVFN1FVRkRaaXhOUVVGSkxFZEJRVUVzUTBGQlFTeFBRVUZCTEVOQlFWRXNVMEZCVlN4RFFVRkJMRWRCUVVFc1EwRkJTU3d5UTBGQk1rTXNRMEZCUVN4RFFVRkJPMEZCUVVFc1MwRkRhRVVzVFVGQlFUdEJRVU5NTEUxQlFVa3NSMEZCUVN4RFFVRkJMRTlCUVVFc1EwRkJVU3hUUVVGVkxFTkJRVUVzVFVGQlFTeERRVUZQTERKRFFVRXlReXhEUVVGQkxFTkJRVUU3UVVGQlFTeExRVU14UlR0QlFVRkJMRWRCUTBZc1RVRkJRU3hKUVVGWExFTkJRVU1zUzBGQlR5eEZRVUZCTzBGQlEycENMRWxCUVVFc1ZVRkJRU3hEUVVGWExFMUJRVTBzYjBKQlFYRkNMRU5CUVVFc1IwRkJRU3hGUVVGTExGZEJRV0VzUlVGQlFTeEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkJMRU5CUVVFN1FVRkJRU3hIUVVOdVJUdEJRVU5HTEVOQlFVRTdRVUZOUVN4TlFVRk5MRmxCUVdVc1IwRkJRU3hMUVVGQkxFTkJRVTBzVlVGQk9FTXNRMEZCUVN4RFFVRkRMRWxCUVRaQ0xFZEJRVkVzUzBGQlFUdEJRVUZ5UXl4RlFVRkJMRWxCUVVFc1JVRkJRU3hIUVVGQkxFVkJRVUVzUTBGQlFTeERRVUZwUWl4UlFVRkJMRWRCUVVFc1UwRkJRU3hEUVVGcVFpeEpRVUZwUWl4RFFVRm1MRmxCUVVFc1EwRkJRU3hGUVVGQk8wRkJRekZGTEVWQlFVMHNUVUZCUVN4alFVRkJMRWRCUVdsQ0xGZEJRVmNzY1VKQlFYRkNMRU5CUVVFc1EwRkJRVHRCUVVWMlJDeEZRVUZCTEhWQ1FVTkhMRXRCUVVFc1EwRkJRU3hoUVVGQkxFTkJRVUVzUzBGQlFTeEZRVUZCTEdGQlFVRXNRMEZCUVN4alFVRkJMRU5CUVVFN1FVRkJRU3hKUVVGSkxFZEJRVUU3UVVGQlFTeEhRVUZCTEVWQlFXTXNVVUZCYkVJc1EwRkJRU3hGUVVGQk8wRkJRVUVzU1VGQk5FSXNWMEZCVnl4RFFVRkhMRVZCUVVFc1kwRkJRU3hEUVVGQkxHOUNRVUZCTEVOQlFVRTdRVUZCUVN4SFFVRkJMRU5CUVVFc2EwSkJRM2hETEV0QlFVRXNRMEZCUVN4aFFVRkJMRU5CUVVFc1MwRkJRU3hGUVVGQk8wRkJRVUVzU1VGQlNTeExRVUZOTEVWQlFVRXNUVUZCUVR0QlFVRkJMRWxCUVU4c1RVRkJUeXhGUVVGQkxFMUJRVUU3UVVGQlFTeEpRVUZQTEU5QlFWRXNSVUZCUVN4WFFVRkJPMEZCUVVFc1NVRkJXU3hKUVVGTExFVkJRVUVzVFVGQlFUdEJRVUZCTEVsQlFVOHNTMEZCVFN4RlFVRkJMRFJDUVVGQk8wRkJRVUVzUjBGQlFTeHJRa0ZEYmtVc1MwRkJRU3hEUVVGQkxHRkJRVUVzUTBGQlFTeE5RVUZCTEVWQlFVRTdRVUZCUVN4SlFVTkRMRU5CUVVVc1JVRkJRU3gzUWtGQlFUdEJRVUZCTEVsQlEwWXNUVUZCVHl4RlFVRkJMR05CUVVFN1FVRkJRU3hKUVVOUUxGZEJRVmtzUlVGQlFTeEhRVUZCTzBGQlFVRXNTVUZEV2l4aFFVRmpMRVZCUVVFc1QwRkJRVHRCUVVGQkxFbEJRMlFzWTBGQlpTeEZRVUZCTEU5QlFVRTdRVUZCUVN4SFFVTnFRaXhEUVVOR0xFTkJRMFlzUTBGQlFTeERRVUZCTzBGQlJVb3NRMEZCUXl4RFFVRkJMRU5CUVVFN1FVRkZSQ3haUVVGQkxFTkJRV0VzVjBGQll5eEhRVUZCTEdOQlFVRXNRMEZCUVR0QlFVVXpRaXhUUVVGVExITkNRVUZ6UWl4TFFVRnpRaXhGUVVGQk8wRkJRMjVFTEVWQlFVRXNUMEZCVHl4SFFVRkpMRU5CUVVFN1FVRkJRU3hKUVVOVUxGRkJRVlVzUlVGQlFTeFZRVUZCTzBGQlFVRXNTVUZEVml4TlFVRlJMRVZCUVVFc1EwRkJRVHRCUVVGQkxFbEJRMUlzUzBGQlR5eEZRVUZCTEVOQlFVRTdRVUZCUVN4SlFVTlFMRTFCUVZFc1JVRkJRU3hIUVVGQk8wRkJRVUVzU1VGRFVpeFRRVUZUTEV0QlFVMHNRMEZCUVN4UFFVRkJMRU5CUVZFc1IwRkJTeXhGUVVGQkxFTkJRVUVzUlVGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUVR0QlFVRkJMRWxCUTNKRExFdEJRVUVzUlVGQlR5eExRVUZOTEVOQlFVRXNUVUZCUVN4RFFVRlBMRTFCUVU4c1EwRkJRU3hOUVVGQk8wRkJRVUVzU1VGRE0wSXNUVUZCVVN4RlFVRkJMRmRCUVVFN1FVRkJRU3hKUVVOU0xGTkJRVmNzUlVGQlFUdEJRVUZCTEUxQlExUXNTMEZCUVN4RlFVRlBMRXRCUVUwc1EwRkJRU3hOUVVGQkxFTkJRVThzU1VGQlN5eERRVUZCTEVsQlFVRTdRVUZCUVN4TFFVTXpRanRCUVVGQkxFbEJRMEVzUjBGQlN5eEZRVUZCTzBGQlFVRXNUVUZEU0N4UFFVRlRMRVZCUVVFc1QwRkJRVHRCUVVGQkxFdEJRMWc3UVVGQlFTeEpRVU5CTEhsQ1FVRXlRaXhGUVVGQk8wRkJRVUVzVFVGRGVrSXNUMEZCVXl4RlFVRkJMRTFCUVVFN1FVRkJRU3hMUVVOWU8wRkJRVUVzUjBGRFJDeERRVUZCTEVOQlFVRTdRVUZEU0RzN096c2lmUT09XG4iXSwibmFtZXMiOlsid2lkdGgiLCJoZWlnaHQiXSwibWFwcGluZ3MiOiI7Ozs7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
@@ -0,0 +1,190 @@
1
+ import { cx, css } from '@emotion/css';
2
+ import React from 'react';
3
+ import { useStyles2, Icon } from '@grafana/ui';
4
+ import { SceneObjectBase } from '../../../core/SceneObjectBase.js';
5
+ import { SceneGridLayout } from './SceneGridLayout.js';
6
+ import { GRID_COLUMN_COUNT } from './constants.js';
7
+ import { sceneGraph } from '../../../core/sceneGraph/index.js';
8
+ import { selectors } from '@grafana/e2e-selectors';
9
+ import { VariableDependencyConfig } from '../../../variables/VariableDependencyConfig.js';
10
+
11
+ var __defProp = Object.defineProperty;
12
+ var __defProps = Object.defineProperties;
13
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
14
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
17
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
18
+ var __spreadValues = (a, b) => {
19
+ for (var prop in b || (b = {}))
20
+ if (__hasOwnProp.call(b, prop))
21
+ __defNormalProp(a, prop, b[prop]);
22
+ if (__getOwnPropSymbols)
23
+ for (var prop of __getOwnPropSymbols(b)) {
24
+ if (__propIsEnum.call(b, prop))
25
+ __defNormalProp(a, prop, b[prop]);
26
+ }
27
+ return a;
28
+ };
29
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
30
+ class SceneGridRow extends SceneObjectBase {
31
+ constructor(state) {
32
+ super(__spreadProps(__spreadValues({
33
+ children: state.children || [],
34
+ isCollapsible: state.isCollapsible || true,
35
+ title: state.title || ""
36
+ }, state), {
37
+ x: 0,
38
+ height: 1,
39
+ width: GRID_COLUMN_COUNT
40
+ }));
41
+ this._variableDependency = new VariableDependencyConfig(this, {
42
+ statePaths: ["title"],
43
+ handleTimeMacros: true
44
+ });
45
+ this.onCollapseToggle = () => {
46
+ if (!this.state.isCollapsible) {
47
+ return;
48
+ }
49
+ this.getGridLayout().toggleRow(this);
50
+ };
51
+ }
52
+ getGridLayout() {
53
+ const layout = this.parent;
54
+ if (!layout || !(layout instanceof SceneGridLayout)) {
55
+ throw new Error("SceneGridRow must be a child of SceneGridLayout");
56
+ }
57
+ return layout;
58
+ }
59
+ getUrlState() {
60
+ return { rowc: this.state.isCollapsed ? "1" : "0" };
61
+ }
62
+ updateFromUrl(values) {
63
+ if (values.rowc == null) {
64
+ return;
65
+ }
66
+ if (values.rowc !== this.getUrlState().rowc) {
67
+ this.onCollapseToggle();
68
+ }
69
+ }
70
+ }
71
+ SceneGridRow.Component = SceneGridRowRenderer;
72
+ function SceneGridRowRenderer({ model }) {
73
+ const styles = useStyles2(getSceneGridRowStyles);
74
+ const { isCollapsible, isCollapsed, title, actions, children } = model.useState();
75
+ const layout = model.getGridLayout();
76
+ const layoutDragClass = layout.getDragClass();
77
+ const isDraggable = layout.isDraggable();
78
+ const count = children ? children.length : 0;
79
+ const panels = count === 1 ? "panel" : "panels";
80
+ return /* @__PURE__ */ React.createElement("div", {
81
+ className: cx(styles.row, isCollapsed && styles.rowCollapsed)
82
+ }, /* @__PURE__ */ React.createElement("div", {
83
+ className: styles.rowTitleAndActionsGroup
84
+ }, /* @__PURE__ */ React.createElement("button", {
85
+ onClick: model.onCollapseToggle,
86
+ className: styles.rowTitleButton,
87
+ "aria-label": isCollapsed ? "Expand row" : "Collapse row",
88
+ "data-testid": selectors.components.DashboardRow.title(sceneGraph.interpolate(model, title, void 0, "text"))
89
+ }, isCollapsible && /* @__PURE__ */ React.createElement(Icon, {
90
+ name: isCollapsed ? "angle-right" : "angle-down"
91
+ }), /* @__PURE__ */ React.createElement("span", {
92
+ className: styles.rowTitle,
93
+ role: "heading"
94
+ }, sceneGraph.interpolate(model, title, void 0, "text"))), /* @__PURE__ */ React.createElement("span", {
95
+ className: cx(styles.panelCount, isCollapsed && styles.panelCountCollapsed)
96
+ }, "(", count, " ", panels, ")"), actions && /* @__PURE__ */ React.createElement("div", {
97
+ className: styles.rowActions
98
+ }, /* @__PURE__ */ React.createElement(actions.Component, {
99
+ model: actions
100
+ }))), isDraggable && isCollapsed && /* @__PURE__ */ React.createElement("div", {
101
+ className: cx(styles.dragHandle, layoutDragClass)
102
+ }, /* @__PURE__ */ React.createElement(Icon, {
103
+ name: "draggabledots"
104
+ })));
105
+ }
106
+ const getSceneGridRowStyles = (theme) => {
107
+ return {
108
+ row: css({
109
+ width: "100%",
110
+ height: "30px",
111
+ display: "flex",
112
+ justifyContent: "space-between",
113
+ gap: theme.spacing(1)
114
+ }),
115
+ rowTitleButton: css({
116
+ display: "flex",
117
+ alignItems: "center",
118
+ cursor: "pointer",
119
+ background: "transparent",
120
+ border: "none",
121
+ minWidth: 0,
122
+ gap: theme.spacing(1)
123
+ }),
124
+ rowCollapsed: css({
125
+ borderBottom: `1px solid ${theme.colors.border.weak}`
126
+ }),
127
+ rowTitle: css({
128
+ fontSize: theme.typography.h5.fontSize,
129
+ fontWeight: theme.typography.fontWeightMedium,
130
+ whiteSpace: "nowrap",
131
+ overflow: "hidden",
132
+ textOverflow: "ellipsis",
133
+ maxWidth: "100%",
134
+ flexGrow: 1,
135
+ minWidth: 0
136
+ }),
137
+ collapsedInfo: css({
138
+ fontSize: theme.typography.bodySmall.fontSize,
139
+ color: theme.colors.text.secondary,
140
+ display: "flex",
141
+ alignItems: "center",
142
+ flexGrow: 1
143
+ }),
144
+ rowTitleAndActionsGroup: css({
145
+ display: "flex",
146
+ minWidth: 0,
147
+ "&:hover, &:focus-within": {
148
+ "& > div": {
149
+ opacity: 1
150
+ }
151
+ }
152
+ }),
153
+ rowActions: css({
154
+ display: "flex",
155
+ whiteSpace: "nowrap",
156
+ opacity: 0,
157
+ transition: "200ms opacity ease-in 200ms",
158
+ "&:hover, &:focus-within": {
159
+ opacity: 1
160
+ }
161
+ }),
162
+ dragHandle: css({
163
+ display: "flex",
164
+ padding: theme.spacing(0, 1),
165
+ alignItems: "center",
166
+ justifyContent: "flex-end",
167
+ cursor: "move",
168
+ color: theme.colors.text.secondary,
169
+ "&:hover": {
170
+ color: theme.colors.text.primary
171
+ }
172
+ }),
173
+ panelCount: css({
174
+ whiteSpace: "nowrap",
175
+ paddingLeft: theme.spacing(2),
176
+ color: theme.colors.text.secondary,
177
+ fontStyle: "italic",
178
+ fontSize: theme.typography.size.sm,
179
+ fontWeight: "normal",
180
+ display: "none",
181
+ lineHeight: "30px"
182
+ }),
183
+ panelCountCollapsed: css({
184
+ display: "inline-block"
185
+ })
186
+ };
187
+ };
188
+
189
+ export { SceneGridRow, SceneGridRowRenderer, getSceneGridRowStyles };
190
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVHcmlkUm93LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb21wb25lbnRzL2xheW91dC9ncmlkL1NjZW5lR3JpZFJvdy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjeCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTdHlsZXMyLCBJY29uIH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9TY2VuZU9iamVjdEJhc2UuanMnO1xuaW1wb3J0IHsgU2NlbmVHcmlkTGF5b3V0IH0gZnJvbSAnLi9TY2VuZUdyaWRMYXlvdXQuanMnO1xuaW1wb3J0IHsgR1JJRF9DT0xVTU5fQ09VTlQgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBzY2VuZUdyYXBoIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zY2VuZUdyYXBoL2luZGV4LmpzJztcbmltcG9ydCB7IHNlbGVjdG9ycyB9IGZyb20gJ0BncmFmYW5hL2UyZS1zZWxlY3RvcnMnO1xuaW1wb3J0IHsgVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vdmFyaWFibGVzL1ZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZy5qcyc7XG5cbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzID0gKGEsIGIpID0+IF9fZGVmUHJvcHMoYSwgX19nZXRPd25Qcm9wRGVzY3MoYikpO1xuY2xhc3MgU2NlbmVHcmlkUm93IGV4dGVuZHMgU2NlbmVPYmplY3RCYXNlIHtcbiAgY29uc3RydWN0b3Ioc3RhdGUpIHtcbiAgICBzdXBlcihfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHtcbiAgICAgIGNoaWxkcmVuOiBzdGF0ZS5jaGlsZHJlbiB8fCBbXSxcbiAgICAgIGlzQ29sbGFwc2libGU6IHN0YXRlLmlzQ29sbGFwc2libGUgfHwgdHJ1ZSxcbiAgICAgIHRpdGxlOiBzdGF0ZS50aXRsZSB8fCBcIlwiXG4gICAgfSwgc3RhdGUpLCB7XG4gICAgICB4OiAwLFxuICAgICAgaGVpZ2h0OiAxLFxuICAgICAgd2lkdGg6IEdSSURfQ09MVU1OX0NPVU5UXG4gICAgfSkpO1xuICAgIHRoaXMuX3ZhcmlhYmxlRGVwZW5kZW5jeSA9IG5ldyBWYXJpYWJsZURlcGVuZGVuY3lDb25maWcodGhpcywge1xuICAgICAgc3RhdGVQYXRoczogW1widGl0bGVcIl0sXG4gICAgICBoYW5kbGVUaW1lTWFjcm9zOiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5vbkNvbGxhcHNlVG9nZ2xlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnN0YXRlLmlzQ29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5nZXRHcmlkTGF5b3V0KCkudG9nZ2xlUm93KHRoaXMpO1xuICAgIH07XG4gIH1cbiAgZ2V0R3JpZExheW91dCgpIHtcbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLnBhcmVudDtcbiAgICBpZiAoIWxheW91dCB8fCAhKGxheW91dCBpbnN0YW5jZW9mIFNjZW5lR3JpZExheW91dCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjZW5lR3JpZFJvdyBtdXN0IGJlIGEgY2hpbGQgb2YgU2NlbmVHcmlkTGF5b3V0XCIpO1xuICAgIH1cbiAgICByZXR1cm4gbGF5b3V0O1xuICB9XG4gIGdldFVybFN0YXRlKCkge1xuICAgIHJldHVybiB7IHJvd2M6IHRoaXMuc3RhdGUuaXNDb2xsYXBzZWQgPyBcIjFcIiA6IFwiMFwiIH07XG4gIH1cbiAgdXBkYXRlRnJvbVVybCh2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWVzLnJvd2MgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsdWVzLnJvd2MgIT09IHRoaXMuZ2V0VXJsU3RhdGUoKS5yb3djKSB7XG4gICAgICB0aGlzLm9uQ29sbGFwc2VUb2dnbGUoKTtcbiAgICB9XG4gIH1cbn1cblNjZW5lR3JpZFJvdy5Db21wb25lbnQgPSBTY2VuZUdyaWRSb3dSZW5kZXJlcjtcbmZ1bmN0aW9uIFNjZW5lR3JpZFJvd1JlbmRlcmVyKHsgbW9kZWwgfSkge1xuICBjb25zdCBzdHlsZXMgPSB1c2VTdHlsZXMyKGdldFNjZW5lR3JpZFJvd1N0eWxlcyk7XG4gIGNvbnN0IHsgaXNDb2xsYXBzaWJsZSwgaXNDb2xsYXBzZWQsIHRpdGxlLCBhY3Rpb25zLCBjaGlsZHJlbiB9ID0gbW9kZWwudXNlU3RhdGUoKTtcbiAgY29uc3QgbGF5b3V0ID0gbW9kZWwuZ2V0R3JpZExheW91dCgpO1xuICBjb25zdCBsYXlvdXREcmFnQ2xhc3MgPSBsYXlvdXQuZ2V0RHJhZ0NsYXNzKCk7XG4gIGNvbnN0IGlzRHJhZ2dhYmxlID0gbGF5b3V0LmlzRHJhZ2dhYmxlKCk7XG4gIGNvbnN0IGNvdW50ID0gY2hpbGRyZW4gPyBjaGlsZHJlbi5sZW5ndGggOiAwO1xuICBjb25zdCBwYW5lbHMgPSBjb3VudCA9PT0gMSA/IFwicGFuZWxcIiA6IFwicGFuZWxzXCI7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjeChzdHlsZXMucm93LCBpc0NvbGxhcHNlZCAmJiBzdHlsZXMucm93Q29sbGFwc2VkKVxuICB9LCAvKiBAX19QVVJFX18gKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBzdHlsZXMucm93VGl0bGVBbmRBY3Rpb25zR3JvdXBcbiAgfSwgLyogQF9fUFVSRV9fICovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgIG9uQ2xpY2s6IG1vZGVsLm9uQ29sbGFwc2VUb2dnbGUsXG4gICAgY2xhc3NOYW1lOiBzdHlsZXMucm93VGl0bGVCdXR0b24sXG4gICAgXCJhcmlhLWxhYmVsXCI6IGlzQ29sbGFwc2VkID8gXCJFeHBhbmQgcm93XCIgOiBcIkNvbGxhcHNlIHJvd1wiLFxuICAgIFwiZGF0YS10ZXN0aWRcIjogc2VsZWN0b3JzLmNvbXBvbmVudHMuRGFzaGJvYXJkUm93LnRpdGxlKHNjZW5lR3JhcGguaW50ZXJwb2xhdGUobW9kZWwsIHRpdGxlLCB2b2lkIDAsIFwidGV4dFwiKSlcbiAgfSwgaXNDb2xsYXBzaWJsZSAmJiAvKiBAX19QVVJFX18gKi8gUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgbmFtZTogaXNDb2xsYXBzZWQgPyBcImFuZ2xlLXJpZ2h0XCIgOiBcImFuZ2xlLWRvd25cIlxuICB9KSwgLyogQF9fUFVSRV9fICovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IHN0eWxlcy5yb3dUaXRsZSxcbiAgICByb2xlOiBcImhlYWRpbmdcIlxuICB9LCBzY2VuZUdyYXBoLmludGVycG9sYXRlKG1vZGVsLCB0aXRsZSwgdm9pZCAwLCBcInRleHRcIikpKSwgLyogQF9fUFVSRV9fICovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IGN4KHN0eWxlcy5wYW5lbENvdW50LCBpc0NvbGxhcHNlZCAmJiBzdHlsZXMucGFuZWxDb3VudENvbGxhcHNlZClcbiAgfSwgXCIoXCIsIGNvdW50LCBcIiBcIiwgcGFuZWxzLCBcIilcIiksIGFjdGlvbnMgJiYgLyogQF9fUFVSRV9fICovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogc3R5bGVzLnJvd0FjdGlvbnNcbiAgfSwgLyogQF9fUFVSRV9fICovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoYWN0aW9ucy5Db21wb25lbnQsIHtcbiAgICBtb2RlbDogYWN0aW9uc1xuICB9KSkpLCBpc0RyYWdnYWJsZSAmJiBpc0NvbGxhcHNlZCAmJiAvKiBAX19QVVJFX18gKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjeChzdHlsZXMuZHJhZ0hhbmRsZSwgbGF5b3V0RHJhZ0NsYXNzKVxuICB9LCAvKiBAX19QVVJFX18gKi8gUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgbmFtZTogXCJkcmFnZ2FibGVkb3RzXCJcbiAgfSkpKTtcbn1cbmNvbnN0IGdldFNjZW5lR3JpZFJvd1N0eWxlcyA9ICh0aGVtZSkgPT4ge1xuICByZXR1cm4ge1xuICAgIHJvdzogY3NzKHtcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogXCIzMHB4XCIsXG4gICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIixcbiAgICAgIGdhcDogdGhlbWUuc3BhY2luZygxKVxuICAgIH0pLFxuICAgIHJvd1RpdGxlQnV0dG9uOiBjc3Moe1xuICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICBtaW5XaWR0aDogMCxcbiAgICAgIGdhcDogdGhlbWUuc3BhY2luZygxKVxuICAgIH0pLFxuICAgIHJvd0NvbGxhcHNlZDogY3NzKHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke3RoZW1lLmNvbG9ycy5ib3JkZXIud2Vha31gXG4gICAgfSksXG4gICAgcm93VGl0bGU6IGNzcyh7XG4gICAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5oNS5mb250U2l6ZSxcbiAgICAgIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodE1lZGl1bSxcbiAgICAgIHdoaXRlU3BhY2U6IFwibm93cmFwXCIsXG4gICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgIHRleHRPdmVyZmxvdzogXCJlbGxpcHNpc1wiLFxuICAgICAgbWF4V2lkdGg6IFwiMTAwJVwiLFxuICAgICAgZmxleEdyb3c6IDEsXG4gICAgICBtaW5XaWR0aDogMFxuICAgIH0pLFxuICAgIGNvbGxhcHNlZEluZm86IGNzcyh7XG4gICAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5ib2R5U21hbGwuZm9udFNpemUsXG4gICAgICBjb2xvcjogdGhlbWUuY29sb3JzLnRleHQuc2Vjb25kYXJ5LFxuICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgZmxleEdyb3c6IDFcbiAgICB9KSxcbiAgICByb3dUaXRsZUFuZEFjdGlvbnNHcm91cDogY3NzKHtcbiAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgbWluV2lkdGg6IDAsXG4gICAgICBcIiY6aG92ZXIsICY6Zm9jdXMtd2l0aGluXCI6IHtcbiAgICAgICAgXCImID4gZGl2XCI6IHtcbiAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcbiAgICByb3dBY3Rpb25zOiBjc3Moe1xuICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHRyYW5zaXRpb246IFwiMjAwbXMgb3BhY2l0eSBlYXNlLWluIDIwMG1zXCIsXG4gICAgICBcIiY6aG92ZXIsICY6Zm9jdXMtd2l0aGluXCI6IHtcbiAgICAgICAgb3BhY2l0eTogMVxuICAgICAgfVxuICAgIH0pLFxuICAgIGRyYWdIYW5kbGU6IGNzcyh7XG4gICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMCwgMSksXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAganVzdGlmeUNvbnRlbnQ6IFwiZmxleC1lbmRcIixcbiAgICAgIGN1cnNvcjogXCJtb3ZlXCIsXG4gICAgICBjb2xvcjogdGhlbWUuY29sb3JzLnRleHQuc2Vjb25kYXJ5LFxuICAgICAgXCImOmhvdmVyXCI6IHtcbiAgICAgICAgY29sb3I6IHRoZW1lLmNvbG9ycy50ZXh0LnByaW1hcnlcbiAgICAgIH1cbiAgICB9KSxcbiAgICBwYW5lbENvdW50OiBjc3Moe1xuICAgICAgd2hpdGVTcGFjZTogXCJub3dyYXBcIixcbiAgICAgIHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDIpLFxuICAgICAgY29sb3I6IHRoZW1lLmNvbG9ycy50ZXh0LnNlY29uZGFyeSxcbiAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIixcbiAgICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnNpemUuc20sXG4gICAgICBmb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgICAgZGlzcGxheTogXCJub25lXCIsXG4gICAgICBsaW5lSGVpZ2h0OiBcIjMwcHhcIlxuICAgIH0pLFxuICAgIHBhbmVsQ291bnRDb2xsYXBzZWQ6IGNzcyh7XG4gICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiXG4gICAgfSlcbiAgfTtcbn07XG5cbmV4cG9ydCB7IFNjZW5lR3JpZFJvdywgU2NlbmVHcmlkUm93UmVuZGVyZXIsIGdldFNjZW5lR3JpZFJvd1N0eWxlcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVMk5sYm1WSGNtbGtVbTkzTG1weklpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOHVMaTh1TGk4dUxpOXpjbU12WTI5dGNHOXVaVzUwY3k5c1lYbHZkWFF2WjNKcFpDOVRZMlZ1WlVkeWFXUlNiM2N1ZEhONElsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdJR056Y3l3Z1kzZ2dmU0JtY205dElDZEFaVzF2ZEdsdmJpOWpjM01uTzF4dWFXMXdiM0owSUZKbFlXTjBJR1p5YjIwZ0ozSmxZV04wSnp0Y2JseHVhVzF3YjNKMElIc2dSM0poWm1GdVlWUm9aVzFsTWlCOUlHWnliMjBnSjBCbmNtRm1ZVzVoTDJSaGRHRW5PMXh1YVcxd2IzSjBJSHNnU1dOdmJpd2dkWE5sVTNSNWJHVnpNaUI5SUdaeWIyMGdKMEJuY21GbVlXNWhMM1ZwSnp0Y2JseHVhVzF3YjNKMElIc2dVMk5sYm1WUFltcGxZM1JDWVhObElIMGdabkp2YlNBbkxpNHZMaTR2TGk0dlkyOXlaUzlUWTJWdVpVOWlhbVZqZEVKaGMyVW5PMXh1YVcxd2IzSjBJSHNnVTJObGJtVkRiMjF3YjI1bGJuUlFjbTl3Y3l3Z1UyTmxibVZQWW1wbFkzUXNJRk5qWlc1bFQySnFaV04wVlhKc1ZtRnNkV1Z6SUgwZ1puSnZiU0FuTGk0dkxpNHZMaTR2WTI5eVpTOTBlWEJsY3ljN1hHNWNibWx0Y0c5eWRDQjdJRk5qWlc1bFIzSnBaRXhoZVc5MWRDQjlJR1p5YjIwZ0p5NHZVMk5sYm1WSGNtbGtUR0Y1YjNWMEp6dGNibWx0Y0c5eWRDQjdJRWRTU1VSZlEwOU1WVTFPWDBOUFZVNVVJSDBnWm5KdmJTQW5MaTlqYjI1emRHRnVkSE1uTzF4dWFXMXdiM0owSUhzZ1UyTmxibVZIY21sa1NYUmxiVXhwYTJVc0lGTmpaVzVsUjNKcFpFbDBaVzFUZEdGMFpVeHBhMlVnZlNCbWNtOXRJQ2N1TDNSNWNHVnpKenRjYm1sdGNHOXlkQ0I3SUhOalpXNWxSM0poY0dnZ2ZTQm1jbTl0SUNjdUxpOHVMaTh1TGk5amIzSmxMM05qWlc1bFIzSmhjR2duTzF4dWFXMXdiM0owSUhzZ2MyVnNaV04wYjNKeklIMGdabkp2YlNBblFHZHlZV1poYm1FdlpUSmxMWE5sYkdWamRHOXljeWM3WEc1cGJYQnZjblFnZXlCV1lYSnBZV0pzWlVSbGNHVnVaR1Z1WTNsRGIyNW1hV2NnZlNCbWNtOXRJQ2N1TGk4dUxpOHVMaTkyWVhKcFlXSnNaWE12Vm1GeWFXRmliR1ZFWlhCbGJtUmxibU41UTI5dVptbG5KenRjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCVFkyVnVaVWR5YVdSU2IzZFRkR0YwWlNCbGVIUmxibVJ6SUZOalpXNWxSM0pwWkVsMFpXMVRkR0YwWlV4cGEyVWdlMXh1SUNCMGFYUnNaVG9nYzNSeWFXNW5PMXh1SUNCcGMwTnZiR3hoY0hOcFlteGxQem9nWW05dmJHVmhianRjYmlBZ2FYTkRiMnhzWVhCelpXUS9PaUJpYjI5c1pXRnVPMXh1SUNCaFkzUnBiMjV6UHpvZ1UyTmxibVZQWW1wbFkzUTdYRzRnSUdOb2FXeGtjbVZ1T2lCVFkyVnVaVWR5YVdSSmRHVnRUR2xyWlZ0ZE8xeHVmVnh1WEc1bGVIQnZjblFnWTJ4aGMzTWdVMk5sYm1WSGNtbGtVbTkzSUdWNGRHVnVaSE1nVTJObGJtVlBZbXBsWTNSQ1lYTmxQRk5qWlc1bFIzSnBaRkp2ZDFOMFlYUmxQaUI3WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nUTI5dGNHOXVaVzUwSUQwZ1UyTmxibVZIY21sa1VtOTNVbVZ1WkdWeVpYSTdYRzVjYmlBZ2NISnZkR1ZqZEdWa0lGOTJZWEpwWVdKc1pVUmxjR1Z1WkdWdVkza2dQU0J1WlhjZ1ZtRnlhV0ZpYkdWRVpYQmxibVJsYm1ONVEyOXVabWxuS0hSb2FYTXNJSHRjYmlBZ0lDQnpkR0YwWlZCaGRHaHpPaUJiSjNScGRHeGxKMTBzWEc0Z0lDQWdhR0Z1Wkd4bFZHbHRaVTFoWTNKdmN6b2dkSEoxWlN4Y2JpQWdmU2s3WEc1Y2JpQWdjSFZpYkdsaklHTnZibk4wY25WamRHOXlLSE4wWVhSbE9pQlFZWEowYVdGc1BGTmpaVzVsUjNKcFpGSnZkMU4wWVhSbFBpa2dlMXh1SUNBZ0lITjFjR1Z5S0h0Y2JpQWdJQ0FnSUdOb2FXeGtjbVZ1T2lCemRHRjBaUzVqYUdsc1pISmxiaUI4ZkNCYlhTeGNiaUFnSUNBZ0lHbHpRMjlzYkdGd2MybGliR1U2SUhOMFlYUmxMbWx6UTI5c2JHRndjMmxpYkdVZ2ZId2dkSEoxWlN4Y2JpQWdJQ0FnSUhScGRHeGxPaUJ6ZEdGMFpTNTBhWFJzWlNCOGZDQW5KeXhjYmlBZ0lDQWdJQzR1TG5OMFlYUmxMRnh1SUNBZ0lDQWdlRG9nTUN4Y2JpQWdJQ0FnSUdobGFXZG9kRG9nTVN4Y2JpQWdJQ0FnSUhkcFpIUm9PaUJIVWtsRVgwTlBURlZOVGw5RFQxVk9WQ3hjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUhCMVlteHBZeUJuWlhSSGNtbGtUR0Y1YjNWMEtDazZJRk5qWlc1bFIzSnBaRXhoZVc5MWRDQjdYRzRnSUNBZ1kyOXVjM1FnYkdGNWIzVjBJRDBnZEdocGN5NXdZWEpsYm5RN1hHNWNiaUFnSUNCcFppQW9JV3hoZVc5MWRDQjhmQ0FoS0d4aGVXOTFkQ0JwYm5OMFlXNWpaVzltSUZOalpXNWxSM0pwWkV4aGVXOTFkQ2twSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVTJObGJtVkhjbWxrVW05M0lHMTFjM1FnWW1VZ1lTQmphR2xzWkNCdlppQlRZMlZ1WlVkeWFXUk1ZWGx2ZFhRbktUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnYkdGNWIzVjBPMXh1SUNCOVhHNWNiaUFnY0hWaWJHbGpJRzl1UTI5c2JHRndjMlZVYjJkbmJHVWdQU0FvS1NBOVBpQjdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxuTjBZWFJsTG1selEyOXNiR0Z3YzJsaWJHVXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbWRsZEVkeWFXUk1ZWGx2ZFhRb0tTNTBiMmRuYkdWU2IzY29kR2hwY3lrN1hHNGdJSDA3WEc1Y2JpQWdjSFZpYkdsaklHZGxkRlZ5YkZOMFlYUmxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjdJSEp2ZDJNNklIUm9hWE11YzNSaGRHVXVhWE5EYjJ4c1lYQnpaV1FnUHlBbk1TY2dPaUFuTUNjZ2ZUdGNiaUFnZlZ4dVhHNGdJSEIxWW14cFl5QjFjR1JoZEdWR2NtOXRWWEpzS0haaGJIVmxjem9nVTJObGJtVlBZbXBsWTNSVmNteFdZV3gxWlhNcElIdGNiaUFnSUNCcFppQW9kbUZzZFdWekxuSnZkMk1nUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2gyWVd4MVpYTXVjbTkzWXlBaFBUMGdkR2hwY3k1blpYUlZjbXhUZEdGMFpTZ3BMbkp2ZDJNcElIdGNiaUFnSUNBZ0lIUm9hWE11YjI1RGIyeHNZWEJ6WlZSdloyZHNaU2dwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnVTJObGJtVkhjbWxrVW05M1VtVnVaR1Z5WlhJb2V5QnRiMlJsYkNCOU9pQlRZMlZ1WlVOdmJYQnZibVZ1ZEZCeWIzQnpQRk5qWlc1bFIzSnBaRkp2ZHo0cElIdGNiaUFnWTI5dWMzUWdjM1I1YkdWeklEMGdkWE5sVTNSNWJHVnpNaWhuWlhSVFkyVnVaVWR5YVdSU2IzZFRkSGxzWlhNcE8xeHVJQ0JqYjI1emRDQjdJR2x6UTI5c2JHRndjMmxpYkdVc0lHbHpRMjlzYkdGd2MyVmtMQ0IwYVhSc1pTd2dZV04wYVc5dWN5d2dZMmhwYkdSeVpXNGdmU0E5SUcxdlpHVnNMblZ6WlZOMFlYUmxLQ2s3WEc0Z0lHTnZibk4wSUd4aGVXOTFkQ0E5SUcxdlpHVnNMbWRsZEVkeWFXUk1ZWGx2ZFhRb0tUdGNiaUFnWTI5dWMzUWdiR0Y1YjNWMFJISmhaME5zWVhOeklEMGdiR0Y1YjNWMExtZGxkRVJ5WVdkRGJHRnpjeWdwTzF4dUlDQmpiMjV6ZENCcGMwUnlZV2RuWVdKc1pTQTlJR3hoZVc5MWRDNXBjMFJ5WVdkbllXSnNaU2dwTzF4dVhHNGdJR052Ym5OMElHTnZkVzUwSUQwZ1kyaHBiR1J5Wlc0Z1B5QmphR2xzWkhKbGJpNXNaVzVuZEdnZ09pQXdPMXh1SUNCamIyNXpkQ0J3WVc1bGJITWdQU0JqYjNWdWRDQTlQVDBnTVNBL0lDZHdZVzVsYkNjZ09pQW5jR0Z1Wld4ekp6dGNibHh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHhrYVhZZ1kyeGhjM05PWVcxbFBYdGplQ2h6ZEhsc1pYTXVjbTkzTENCcGMwTnZiR3hoY0hObFpDQW1KaUJ6ZEhsc1pYTXVjbTkzUTI5c2JHRndjMlZrS1gwK1hHNGdJQ0FnSUNBOFpHbDJJR05zWVhOelRtRnRaVDE3YzNSNWJHVnpMbkp2ZDFScGRHeGxRVzVrUVdOMGFXOXVjMGR5YjNWd2ZUNWNiaUFnSUNBZ0lDQWdQR0oxZEhSdmJseHVJQ0FnSUNBZ0lDQWdJRzl1UTJ4cFkyczllMjF2WkdWc0xtOXVRMjlzYkdGd2MyVlViMmRuYkdWOVhHNGdJQ0FnSUNBZ0lDQWdZMnhoYzNOT1lXMWxQWHR6ZEhsc1pYTXVjbTkzVkdsMGJHVkNkWFIwYjI1OVhHNGdJQ0FnSUNBZ0lDQWdZWEpwWVMxc1lXSmxiRDE3YVhORGIyeHNZWEJ6WldRZ1B5QW5SWGh3WVc1a0lISnZkeWNnT2lBblEyOXNiR0Z3YzJVZ2NtOTNKMzFjYmlBZ0lDQWdJQ0FnSUNCa1lYUmhMWFJsYzNScFpEMTdjMlZzWldOMGIzSnpMbU52YlhCdmJtVnVkSE11UkdGemFHSnZZWEprVW05M0xuUnBkR3hsS0hOalpXNWxSM0poY0dndWFXNTBaWEp3YjJ4aGRHVW9iVzlrWld3c0lIUnBkR3hsTENCMWJtUmxabWx1WldRc0lDZDBaWGgwSnlrcGZWeHVJQ0FnSUNBZ0lDQStYRzRnSUNBZ0lDQWdJQ0FnZTJselEyOXNiR0Z3YzJsaWJHVWdKaVlnUEVsamIyNGdibUZ0WlQxN2FYTkRiMnhzWVhCelpXUWdQeUFuWVc1bmJHVXRjbWxuYUhRbklEb2dKMkZ1WjJ4bExXUnZkMjRuZlNBdlBuMWNiaUFnSUNBZ0lDQWdJQ0E4YzNCaGJpQmpiR0Z6YzA1aGJXVTllM04wZVd4bGN5NXliM2RVYVhSc1pYMGdjbTlzWlQxY0ltaGxZV1JwYm1kY0lqNWNiaUFnSUNBZ0lDQWdJQ0FnSUh0elkyVnVaVWR5WVhCb0xtbHVkR1Z5Y0c5c1lYUmxLRzF2WkdWc0xDQjBhWFJzWlN3Z2RXNWtaV1pwYm1Wa0xDQW5kR1Y0ZENjcGZWeHVJQ0FnSUNBZ0lDQWdJRHd2YzNCaGJqNWNiaUFnSUNBZ0lDQWdQQzlpZFhSMGIyNCtYRzRnSUNBZ0lDQWdJRHh6Y0dGdUlHTnNZWE56VG1GdFpUMTdZM2dvYzNSNWJHVnpMbkJoYm1Wc1EyOTFiblFzSUdselEyOXNiR0Z3YzJWa0lDWW1JSE4wZVd4bGN5NXdZVzVsYkVOdmRXNTBRMjlzYkdGd2MyVmtLWDArWEc0Z0lDQWdJQ0FnSUNBZ0tIdGpiM1Z1ZEgwZ2UzQmhibVZzYzMwcFhHNGdJQ0FnSUNBZ0lEd3ZjM0JoYmo1Y2JpQWdJQ0FnSUNBZ2UyRmpkR2x2Ym5NZ0ppWWdLRnh1SUNBZ0lDQWdJQ0FnSUR4a2FYWWdZMnhoYzNOT1lXMWxQWHR6ZEhsc1pYTXVjbTkzUVdOMGFXOXVjMzArWEc0Z0lDQWdJQ0FnSUNBZ0lDQThZV04wYVc5dWN5NURiMjF3YjI1bGJuUWdiVzlrWld3OWUyRmpkR2x2Ym5OOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnUEM5a2FYWStYRzRnSUNBZ0lDQWdJQ2w5WEc0Z0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lIdHBjMFJ5WVdkbllXSnNaU0FtSmlCcGMwTnZiR3hoY0hObFpDQW1KaUFvWEc0Z0lDQWdJQ0FnSUR4a2FYWWdZMnhoYzNOT1lXMWxQWHRqZUNoemRIbHNaWE11WkhKaFowaGhibVJzWlN3Z2JHRjViM1YwUkhKaFowTnNZWE56S1gwK1hHNGdJQ0FnSUNBZ0lDQWdQRWxqYjI0Z2JtRnRaVDFjSW1SeVlXZG5ZV0pzWldSdmRITmNJaUF2UGx4dUlDQWdJQ0FnSUNBOEwyUnBkajVjYmlBZ0lDQWdJQ2w5WEc0Z0lDQWdQQzlrYVhZK1hHNGdJQ2s3WEc1OVhHNWNibVY0Y0c5eWRDQmpiMjV6ZENCblpYUlRZMlZ1WlVkeWFXUlNiM2RUZEhsc1pYTWdQU0FvZEdobGJXVTZJRWR5WVdaaGJtRlVhR1Z0WlRJcElEMCtJSHRjYmlBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0J5YjNjNklHTnpjeWg3WEc0Z0lDQWdJQ0IzYVdSMGFEb2dKekV3TUNVbkxGeHVJQ0FnSUNBZ2FHVnBaMmgwT2lBbk16QndlQ2NzWEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUNBZ0lDQnFkWE4wYVdaNVEyOXVkR1Z1ZERvZ0ozTndZV05sTFdKbGRIZGxaVzRuTEZ4dUlDQWdJQ0FnWjJGd09pQjBhR1Z0WlM1emNHRmphVzVuS0RFcExGeHVJQ0FnSUgwcExGeHVJQ0FnSUhKdmQxUnBkR3hsUW5WMGRHOXVPaUJqYzNNb2UxeHVJQ0FnSUNBZ1pHbHpjR3hoZVRvZ0oyWnNaWGduTEZ4dUlDQWdJQ0FnWVd4cFoyNUpkR1Z0Y3pvZ0oyTmxiblJsY2ljc1hHNGdJQ0FnSUNCamRYSnpiM0k2SUNkd2IybHVkR1Z5Snl4Y2JpQWdJQ0FnSUdKaFkydG5jbTkxYm1RNklDZDBjbUZ1YzNCaGNtVnVkQ2NzWEc0Z0lDQWdJQ0JpYjNKa1pYSTZJQ2R1YjI1bEp5eGNiaUFnSUNBZ0lHMXBibGRwWkhSb09pQXdMRnh1SUNBZ0lDQWdaMkZ3T2lCMGFHVnRaUzV6Y0dGamFXNW5LREVwTEZ4dUlDQWdJSDBwTEZ4dUlDQWdJSEp2ZDBOdmJHeGhjSE5sWkRvZ1kzTnpLSHRjYmlBZ0lDQWdJR0p2Y21SbGNrSnZkSFJ2YlRvZ1lERndlQ0J6YjJ4cFpDQWtlM1JvWlcxbExtTnZiRzl5Y3k1aWIzSmtaWEl1ZDJWaGEzMWdMRnh1SUNBZ0lIMHBMRnh1SUNBZ0lISnZkMVJwZEd4bE9pQmpjM01vZTF4dUlDQWdJQ0FnWm05dWRGTnBlbVU2SUhSb1pXMWxMblI1Y0c5bmNtRndhSGt1YURVdVptOXVkRk5wZW1Vc1hHNGdJQ0FnSUNCbWIyNTBWMlZwWjJoME9pQjBhR1Z0WlM1MGVYQnZaM0poY0doNUxtWnZiblJYWldsbmFIUk5aV1JwZFcwc1hHNGdJQ0FnSUNCM2FHbDBaVk53WVdObE9pQW5ibTkzY21Gd0p5eGNiaUFnSUNBZ0lHOTJaWEptYkc5M09pQW5hR2xrWkdWdUp5eGNiaUFnSUNBZ0lIUmxlSFJQZG1WeVpteHZkem9nSjJWc2JHbHdjMmx6Snl4Y2JpQWdJQ0FnSUcxaGVGZHBaSFJvT2lBbk1UQXdKU2NzWEc0Z0lDQWdJQ0JtYkdWNFIzSnZkem9nTVN4Y2JpQWdJQ0FnSUcxcGJsZHBaSFJvT2lBd0xGeHVJQ0FnSUgwcExGeHVJQ0FnSUdOdmJHeGhjSE5sWkVsdVptODZJR056Y3loN1hHNGdJQ0FnSUNCbWIyNTBVMmw2WlRvZ2RHaGxiV1V1ZEhsd2IyZHlZWEJvZVM1aWIyUjVVMjFoYkd3dVptOXVkRk5wZW1Vc1hHNGdJQ0FnSUNCamIyeHZjam9nZEdobGJXVXVZMjlzYjNKekxuUmxlSFF1YzJWamIyNWtZWEo1TEZ4dUlDQWdJQ0FnWkdsemNHeGhlVG9nSjJac1pYZ25MRnh1SUNBZ0lDQWdZV3hwWjI1SmRHVnRjem9nSjJObGJuUmxjaWNzWEc0Z0lDQWdJQ0JtYkdWNFIzSnZkem9nTVN4Y2JpQWdJQ0I5S1N4Y2JpQWdJQ0J5YjNkVWFYUnNaVUZ1WkVGamRHbHZibk5IY205MWNEb2dZM056S0h0Y2JpQWdJQ0FnSUdScGMzQnNZWGs2SUNkbWJHVjRKeXhjYmlBZ0lDQWdJRzFwYmxkcFpIUm9PaUF3TEZ4dVhHNGdJQ0FnSUNBbkpqcG9iM1psY2l3Z0pqcG1iMk4xY3kxM2FYUm9hVzRuT2lCN1hHNGdJQ0FnSUNBZ0lDY21JRDRnWkdsMkp6b2dlMXh1SUNBZ0lDQWdJQ0FnSUc5d1lXTnBkSGs2SURFc1hHNGdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lIMHBMRnh1SUNBZ0lISnZkMEZqZEdsdmJuTTZJR056Y3loN1hHNGdJQ0FnSUNCa2FYTndiR0Y1T2lBblpteGxlQ2NzWEc0Z0lDQWdJQ0IzYUdsMFpWTndZV05sT2lBbmJtOTNjbUZ3Snl4Y2JpQWdJQ0FnSUc5d1lXTnBkSGs2SURBc1hHNGdJQ0FnSUNCMGNtRnVjMmwwYVc5dU9pQW5NakF3YlhNZ2IzQmhZMmwwZVNCbFlYTmxMV2x1SURJd01HMXpKeXhjYmx4dUlDQWdJQ0FnSnlZNmFHOTJaWElzSUNZNlptOWpkWE10ZDJsMGFHbHVKem9nZTF4dUlDQWdJQ0FnSUNCdmNHRmphWFI1T2lBeExGeHVJQ0FnSUNBZ2ZTeGNiaUFnSUNCOUtTeGNiaUFnSUNCa2NtRm5TR0Z1Wkd4bE9pQmpjM01vZTF4dUlDQWdJQ0FnWkdsemNHeGhlVG9nSjJac1pYZ25MRnh1SUNBZ0lDQWdjR0ZrWkdsdVp6b2dkR2hsYldVdWMzQmhZMmx1Wnlnd0xDQXhLU3hjYmlBZ0lDQWdJR0ZzYVdkdVNYUmxiWE02SUNkalpXNTBaWEluTEZ4dUlDQWdJQ0FnYW5WemRHbG1lVU52Ym5SbGJuUTZJQ2RtYkdWNExXVnVaQ2NzWEc0Z0lDQWdJQ0JqZFhKemIzSTZJQ2R0YjNabEp5eGNiaUFnSUNBZ0lHTnZiRzl5T2lCMGFHVnRaUzVqYjJ4dmNuTXVkR1Y0ZEM1elpXTnZibVJoY25rc1hHNGdJQ0FnSUNBbkpqcG9iM1psY2ljNklIdGNiaUFnSUNBZ0lDQWdZMjlzYjNJNklIUm9aVzFsTG1OdmJHOXljeTUwWlhoMExuQnlhVzFoY25rc1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUgwcExGeHVJQ0FnSUhCaGJtVnNRMjkxYm5RNklHTnpjeWg3WEc0Z0lDQWdJQ0IzYUdsMFpWTndZV05sT2lBbmJtOTNjbUZ3Snl4Y2JpQWdJQ0FnSUhCaFpHUnBibWRNWldaME9pQjBhR1Z0WlM1emNHRmphVzVuS0RJcExGeHVJQ0FnSUNBZ1kyOXNiM0k2SUhSb1pXMWxMbU52Ykc5eWN5NTBaWGgwTG5ObFkyOXVaR0Z5ZVN4Y2JpQWdJQ0FnSUdadmJuUlRkSGxzWlRvZ0oybDBZV3hwWXljc1hHNGdJQ0FnSUNCbWIyNTBVMmw2WlRvZ2RHaGxiV1V1ZEhsd2IyZHlZWEJvZVM1emFYcGxMbk50TEZ4dUlDQWdJQ0FnWm05dWRGZGxhV2RvZERvZ0oyNXZjbTFoYkNjc1hHNGdJQ0FnSUNCa2FYTndiR0Y1T2lBbmJtOXVaU2NzWEc0Z0lDQWdJQ0JzYVc1bFNHVnBaMmgwT2lBbk16QndlQ2NzWEc0Z0lDQWdmU2tzWEc0Z0lDQWdjR0Z1Wld4RGIzVnVkRU52Ykd4aGNITmxaRG9nWTNOektIdGNiaUFnSUNBZ0lHUnBjM0JzWVhrNklDZHBibXhwYm1VdFlteHZZMnNuTEZ4dUlDQWdJSDBwTEZ4dUlDQjlPMXh1ZlR0Y2JpSmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dEJRWGRDVHl4TlFVRk5MSEZDUVVGeFFpeGxRVUZ0UXl4RFFVRkJPMEZCUVVFc1JVRlJOVVFzV1VGQldTeExRVUZ0UXl4RlFVRkJPMEZCUTNCRUxFbEJRVTBzUzBGQlFTeERRVUZCTEdGQlFVRXNRMEZCUVN4alFVRkJMRU5CUVVFN1FVRkJRU3hOUVVOS0xGRkJRVUVzUlVGQlZTeExRVUZOTEVOQlFVRXNVVUZCUVN4SlFVRlpMRVZCUVVNN1FVRkJRU3hOUVVNM1FpeGhRVUZCTEVWQlFXVXNUVUZCVFN4aFFVRnBRaXhKUVVGQkxFbEJRVUU3UVVGQlFTeE5RVU4wUXl4TFFVRkJMRVZCUVU4c1RVRkJUU3hMUVVGVExFbEJRVUVzUlVGQlFUdEJRVUZCTEV0QlFVRXNSVUZEYmtJc1MwRktReXhEUVVGQkxFVkJRVUU3UVVGQlFTeE5RVXRLTEVOQlFVY3NSVUZCUVN4RFFVRkJPMEZCUVVFc1RVRkRTQ3hOUVVGUkxFVkJRVUVzUTBGQlFUdEJRVUZCTEUxQlExSXNTMEZCVHl4RlFVRkJMR2xDUVVGQk8wRkJRVUVzUzBGRFVpeERRVUZCTEVOQlFVRXNRMEZCUVR0QlFXUklMRWxCUVZVc1NVRkJRU3hEUVVGQkxHMUNRVUZCTEVkQlFYTkNMRWxCUVVrc2QwSkJRVUVzUTBGQmVVSXNTVUZCVFN4RlFVRkJPMEZCUVVFc1RVRkRha1VzVlVGQlFTeEZRVUZaTEVOQlFVTXNUMEZCVHl4RFFVRkJPMEZCUVVFc1RVRkRjRUlzWjBKQlFXdENMRVZCUVVFc1NVRkJRVHRCUVVGQkxFdEJRMjVDTEVOQlFVRXNRMEZCUVR0QlFYZENSQ3hKUVVGQkxFbEJRVUVzUTBGQlR5eHRRa0ZCYlVJc1RVRkJUVHRCUVVNNVFpeE5RVUZKTEVsQlFVRXNRMEZCUXl4SlFVRkxMRU5CUVVFc1MwRkJRU3hEUVVGTkxHRkJRV1VzUlVGQlFUdEJRVU0zUWl4UlFVRkJMRTlCUVVFN1FVRkJRU3hQUVVOR08wRkJSVUVzVFVGQlN5eEpRVUZCTEVOQlFVRXNZVUZCUVN4RlFVRm5RaXhEUVVGQkxGTkJRVUVzUTBGQlZTeEpRVUZKTEVOQlFVRXNRMEZCUVR0QlFVRkJMRXRCUTNKRExFTkJRVUU3UVVGQlFTeEhRV3hDUVR0QlFVRkJMRVZCUlU4c1lVRkJhVU1zUjBGQlFUdEJRVU4wUXl4SlFVRkJMRTFCUVUwc1UwRkJVeXhKUVVGTExFTkJRVUVzVFVGQlFTeERRVUZCTzBGQlJYQkNMRWxCUVVFc1NVRkJTU3hEUVVGRExFMUJRVUVzU1VGQlZTeEZRVUZGTEUxQlFVRXNXVUZCYTBJc1pVRkJhMElzUTBGQlFTeEZRVUZCTzBGQlEyNUVMRTFCUVUwc1RVRkJRU3hKUVVGSkxFMUJRVTBzYVVSQlFXbEVMRU5CUVVFc1EwRkJRVHRCUVVGQkxFdEJRMjVGTzBGQlJVRXNTVUZCVHl4UFFVRkJMRTFCUVVFc1EwRkJRVHRCUVVGQkxFZEJRMVE3UVVGQlFTeEZRVlZQTEZkQlFXTXNSMEZCUVR0QlFVTnVRaXhKUVVGQkxFOUJRVThzUlVGQlJTeEpRVUZOTEVWQlFVRXNTVUZCUVN4RFFVRkxMRXRCUVUwc1EwRkJRU3hYUVVGQkxFZEJRV01zVFVGQlRTeEhRVUZKTEVWQlFVRXNRMEZCUVR0QlFVRkJMRWRCUTNCRU8wRkJRVUVzUlVGRlR5eGpRVUZqTEUxQlFUaENMRVZCUVVFN1FVRkRha1FzU1VGQlNTeEpRVUZCTEUxQlFVRXNRMEZCVHl4UlFVRlJMRWxCUVUwc1JVRkJRVHRCUVVOMlFpeE5RVUZCTEU5QlFVRTdRVUZCUVN4TFFVTkdPMEZCUlVFc1NVRkJRU3hKUVVGSkxFMUJRVThzUTBGQlFTeEpRVUZCTEV0QlFWTXNTVUZCU3l4RFFVRkJMRmRCUVVFc1IwRkJZeXhKUVVGTkxFVkJRVUU3UVVGRE0wTXNUVUZCUVN4SlFVRkJMRU5CUVVzc1owSkJRV2xDTEVWQlFVRXNRMEZCUVR0QlFVRkJMRXRCUTNoQ08wRkJRVUVzUjBGRFJqdEJRVU5HTEVOQlFVRTdRVUZ1UkdFc1dVRkJRU3hEUVVOSExGTkJRVmtzUjBGQlFTeHZRa0ZCUVN4RFFVRkJPMEZCYjBSYUxGTkJRVUVzYjBKQlFVRXNRMEZCY1VJc1JVRkJSU3hMUVVGQkxFVkJRVFJETEVWQlFVRTdRVUZEYWtZc1JVRkJUU3hOUVVGQkxFMUJRVUVzUjBGQlV5eFhRVUZYTEhGQ1FVRnhRaXhEUVVGQkxFTkJRVUU3UVVGREwwTXNSVUZCVFN4TlFVRkJMRVZCUVVVc1pVRkJaU3hYUVVGaExFVkJRVUVzUzBGQlFTeEZRVUZQTEZOQlFWTXNVVUZCVXl4RlFVRkJMRWRCUVVrc1RVRkJUU3hSUVVGVExFVkJRVUVzUTBGQlFUdEJRVU5vUml4RlFVRk5MRTFCUVVFc1RVRkJRU3hIUVVGVExFMUJRVTBzWVVGQll5eEZRVUZCTEVOQlFVRTdRVUZEYmtNc1JVRkJUU3hOUVVGQkxHVkJRVUVzUjBGQmEwSXNUMEZCVHl4WlFVRmhMRVZCUVVFc1EwRkJRVHRCUVVNMVF5eEZRVUZOTEUxQlFVRXNWMEZCUVN4SFFVRmpMRTlCUVU4c1YwRkJXU3hGUVVGQkxFTkJRVUU3UVVGRmRrTXNSVUZCVFN4TlFVRkJMRXRCUVVFc1IwRkJVU3hSUVVGWExFZEJRVUVzVVVGQlFTeERRVUZUTEUxQlFWTXNSMEZCUVN4RFFVRkJMRU5CUVVFN1FVRkRNME1zUlVGQlRTeE5RVUZCTEUxQlFVRXNSMEZCVXl4TFFVRlZMRXRCUVVFc1EwRkJRU3hIUVVGSkxFOUJRVlVzUjBGQlFTeFJRVUZCTEVOQlFVRTdRVUZGZGtNc1JVRkJRU3gxUWtGRFJ5eExRVUZCTEVOQlFVRXNZVUZCUVN4RFFVRkJMRXRCUVVFc1JVRkJRVHRCUVVGQkxFbEJRVWtzVjBGQlZ5eEZRVUZITEVOQlFVRXNUVUZCUVN4RFFVRlBMRWRCUVVzc1JVRkJRU3hYUVVGQkxFbEJRV1VzVDBGQlR5eFpRVUZaTEVOQlFVRTdRVUZCUVN4SFFVRkJMR3RDUVVNNVJDeExRVUZCTEVOQlFVRXNZVUZCUVN4RFFVRkJMRXRCUVVFc1JVRkJRVHRCUVVGQkxFbEJRVWtzVjBGQlZ5eE5RVUZQTEVOQlFVRXNkVUpCUVVFN1FVRkJRU3hIUVVGQkxHdENRVU53UWl4TFFVRkJMRU5CUVVFc1lVRkJRU3hEUVVGQkxGRkJRVUVzUlVGQlFUdEJRVUZCTEVsQlEwTXNVMEZCVXl4TFFVRk5MRU5CUVVFc1owSkJRVUU3UVVGQlFTeEpRVU5tTEZkQlFWY3NUVUZCVHl4RFFVRkJMR05CUVVFN1FVRkJRU3hKUVVOc1FpeFpRVUZCTEVWQlFWa3NZMEZCWXl4WlFVRmxMRWRCUVVFc1kwRkJRVHRCUVVGQkxFbEJRM3BETEdGQlFVRXNSVUZCWVN4VFFVRlZMRU5CUVVFc1ZVRkJRU3hEUVVGWExGbEJRV0VzUTBGQlFTeExRVUZCTEVOQlFVMHNWVUZCVnl4RFFVRkJMRmRCUVVFc1EwRkJXU3hMUVVGUExFVkJRVUVzUzBGQlFTeEZRVUZQTEV0QlFWY3NRMEZCUVN4RlFVRkJMRTFCUVUwc1EwRkJReXhEUVVGQk8wRkJRVUVzUjBGQlFTeEZRVVV6Unl4cFEwRkJhMElzUzBGQlFTeERRVUZCTEdGQlFVRXNRMEZCUVN4SlFVRkJMRVZCUVVFN1FVRkJRU3hKUVVGTExFbEJRVUVzUlVGQlRTeGpRVUZqTEdGQlFXZENMRWRCUVVFc1dVRkJRVHRCUVVGQkxFZEJRV01zYlVKQlEzcEZMRXRCUVVFc1EwRkJRU3hoUVVGQkxFTkJRVUVzVFVGQlFTeEZRVUZCTzBGQlFVRXNTVUZCU3l4WFFVRlhMRTFCUVU4c1EwRkJRU3hSUVVGQk8wRkJRVUVzU1VGQlZTeEpRVUZMTEVWQlFVRXNVMEZCUVR0QlFVRkJMRWRCUTNCRExFVkJRVUVzVlVGQlFTeERRVUZYTEZsQlFWa3NTMEZCVHl4RlFVRkJMRXRCUVVFc1JVRkJUeXhSUVVGWExFMUJRVTBzUTBGRGVrUXNRMEZEUml4RFFVRkJMR3RDUVVORExFdEJRVUVzUTBGQlFTeGhRVUZCTEVOQlFVRXNUVUZCUVN4RlFVRkJPMEZCUVVFc1NVRkJTeXhYUVVGWExFVkJRVWNzUTBGQlFTeE5RVUZCTEVOQlFVOHNWVUZCV1N4RlFVRkJMRmRCUVVFc1NVRkJaU3hQUVVGUExHMUNRVUZ0UWl4RFFVRkJPMEZCUVVFc1IwRkJRU3hGUVVGSExFdEJReTlGTEV0QlFVMHNSVUZCUVN4SFFVRkJMRVZCUVVVc1VVRkJUeXhIUVVOdVFpeERRVUZCTEVWQlEwTXNNa0pCUTBVc1MwRkJRU3hEUVVGQkxHRkJRVUVzUTBGQlFTeExRVUZCTEVWQlFVRTdRVUZCUVN4SlFVRkpMRmRCUVZjc1RVRkJUeXhEUVVGQkxGVkJRVUU3UVVGQlFTeEhRVU55UWl4clFrRkJRU3hMUVVGQkxFTkJRVUVzWVVGQlFTeERRVUZETEZGQlFWRXNVMEZCVWl4RlFVRkJPMEZCUVVFc1NVRkJhMElzUzBGQlR5eEZRVUZCTEU5QlFVRTdRVUZCUVN4SFFVRlRMRU5CUTNKRExFTkJSVW9zUTBGRFF5eEZRVUZCTEZkQlFVRXNTVUZCWlN3clFrRkRZaXhMUVVGQkxFTkJRVUVzWVVGQlFTeERRVUZCTEV0QlFVRXNSVUZCUVR0QlFVRkJMRWxCUVVrc1UwRkJWeXhGUVVGQkxFVkJRVUVzUTBGQlJ5eE5RVUZQTEVOQlFVRXNWVUZCUVN4RlFVRlpMR1ZCUVdVc1EwRkJRVHRCUVVGQkxFZEJRVUVzYTBKQlEyeEVMRXRCUVVFc1EwRkJRU3hoUVVGQkxFTkJRVUVzU1VGQlFTeEZRVUZCTzBGQlFVRXNTVUZCU3l4SlFVRkxMRVZCUVVFc1pVRkJRVHRCUVVGQkxFZEJRV2RDTEVOQlF6ZENMRU5CUlVvc1EwRkJRU3hEUVVGQk8wRkJSVW9zUTBGQlFUdEJRVVZoTEUxQlFVRXNjVUpCUVVFc1IwRkJkMElzUTBGQlF5eExRVUY1UWl4TFFVRkJPMEZCUXpkRUxFVkJRVThzVDBGQlFUdEJRVUZCTEVsQlEwd3NTMEZCU3l4SFFVRkpMRU5CUVVFN1FVRkJRU3hOUVVOUUxFdEJRVThzUlVGQlFTeE5RVUZCTzBGQlFVRXNUVUZEVUN4TlFVRlJMRVZCUVVFc1RVRkJRVHRCUVVGQkxFMUJRMUlzVDBGQlV5eEZRVUZCTEUxQlFVRTdRVUZCUVN4TlFVTlVMR05CUVdkQ0xFVkJRVUVzWlVGQlFUdEJRVUZCTEUxQlEyaENMRWRCUVVFc1JVRkJTeXhMUVVGTkxFTkJRVUVzVDBGQlFTeERRVUZSTEVOQlFVTXNRMEZCUVR0QlFVRkJMRXRCUTNKQ0xFTkJRVUU3UVVGQlFTeEpRVU5FTEdkQ1FVRm5RaXhIUVVGSkxFTkJRVUU3UVVGQlFTeE5RVU5zUWl4UFFVRlRMRVZCUVVFc1RVRkJRVHRCUVVGQkxFMUJRMVFzVlVGQldTeEZRVUZCTEZGQlFVRTdRVUZCUVN4TlFVTmFMRTFCUVZFc1JVRkJRU3hUUVVGQk8wRkJRVUVzVFVGRFVpeFZRVUZaTEVWQlFVRXNZVUZCUVR0QlFVRkJMRTFCUTFvc1RVRkJVU3hGUVVGQkxFMUJRVUU3UVVGQlFTeE5RVU5TTEZGQlFWVXNSVUZCUVN4RFFVRkJPMEZCUVVFc1RVRkRWaXhIUVVGQkxFVkJRVXNzUzBGQlRTeERRVUZCTEU5QlFVRXNRMEZCVVN4RFFVRkRMRU5CUVVFN1FVRkJRU3hMUVVOeVFpeERRVUZCTzBGQlFVRXNTVUZEUkN4alFVRmpMRWRCUVVrc1EwRkJRVHRCUVVGQkxFMUJRMmhDTEZsQlFXTXNSVUZCUVN4RFFVRkJMRlZCUVVFc1JVRkJZU3hMUVVGTkxFTkJRVUVzVFVGQlFTeERRVUZQTEUxQlFVOHNRMEZCUVN4SlFVRkJMRU5CUVVFc1EwRkJRVHRCUVVGQkxFdEJRMmhFTEVOQlFVRTdRVUZCUVN4SlFVTkVMRlZCUVZVc1IwRkJTU3hEUVVGQk8wRkJRVUVzVFVGRFdpeFJRVUZCTEVWQlFWVXNTMEZCVFN4RFFVRkJMRlZCUVVFc1EwRkJWeXhGUVVGSExFTkJRVUVzVVVGQlFUdEJRVUZCTEUxQlF6bENMRlZCUVVFc1JVRkJXU3hOUVVGTkxGVkJRVmNzUTBGQlFTeG5Ra0ZCUVR0QlFVRkJMRTFCUXpkQ0xGVkJRVmtzUlVGQlFTeFJRVUZCTzBGQlFVRXNUVUZEV2l4UlFVRlZMRVZCUVVFc1VVRkJRVHRCUVVGQkxFMUJRMVlzV1VGQll5eEZRVUZCTEZWQlFVRTdRVUZCUVN4TlFVTmtMRkZCUVZVc1JVRkJRU3hOUVVGQk8wRkJRVUVzVFVGRFZpeFJRVUZWTEVWQlFVRXNRMEZCUVR0QlFVRkJMRTFCUTFZc1VVRkJWU3hGUVVGQkxFTkJRVUU3UVVGQlFTeExRVU5ZTEVOQlFVRTdRVUZCUVN4SlFVTkVMR1ZCUVdVc1IwRkJTU3hEUVVGQk8wRkJRVUVzVFVGRGFrSXNVVUZCUVN4RlFVRlZMRXRCUVUwc1EwRkJRU3hWUVVGQkxFTkJRVmNzVTBGQlZTeERRVUZCTEZGQlFVRTdRVUZCUVN4TlFVTnlReXhMUVVGQkxFVkJRVThzUzBGQlRTeERRVUZCTEUxQlFVRXNRMEZCVHl4SlFVRkxMRU5CUVVFc1UwRkJRVHRCUVVGQkxFMUJRM3BDTEU5QlFWTXNSVUZCUVN4TlFVRkJPMEZCUVVFc1RVRkRWQ3hWUVVGWkxFVkJRVUVzVVVGQlFUdEJRVUZCTEUxQlExb3NVVUZCVlN4RlFVRkJMRU5CUVVFN1FVRkJRU3hMUVVOWUxFTkJRVUU3UVVGQlFTeEpRVU5FTEhsQ1FVRjVRaXhIUVVGSkxFTkJRVUU3UVVGQlFTeE5RVU16UWl4UFFVRlRMRVZCUVVFc1RVRkJRVHRCUVVGQkxFMUJRMVFzVVVGQlZTeEZRVUZCTEVOQlFVRTdRVUZCUVN4TlFVVldMSGxDUVVFeVFpeEZRVUZCTzBGQlFVRXNVVUZEZWtJc1UwRkJWeXhGUVVGQk8wRkJRVUVzVlVGRFZDeFBRVUZUTEVWQlFVRXNRMEZCUVR0QlFVRkJMRk5CUTFnN1FVRkJRU3hQUVVOR08wRkJRVUVzUzBGRFJDeERRVUZCTzBGQlFVRXNTVUZEUkN4WlFVRlpMRWRCUVVrc1EwRkJRVHRCUVVGQkxFMUJRMlFzVDBGQlV5eEZRVUZCTEUxQlFVRTdRVUZCUVN4TlFVTlVMRlZCUVZrc1JVRkJRU3hSUVVGQk8wRkJRVUVzVFVGRFdpeFBRVUZUTEVWQlFVRXNRMEZCUVR0QlFVRkJMRTFCUTFRc1ZVRkJXU3hGUVVGQkxEWkNRVUZCTzBGQlFVRXNUVUZGV2l4NVFrRkJNa0lzUlVGQlFUdEJRVUZCTEZGQlEzcENMRTlCUVZNc1JVRkJRU3hEUVVGQk8wRkJRVUVzVDBGRFdEdEJRVUZCTEV0QlEwUXNRMEZCUVR0QlFVRkJMRWxCUTBRc1dVRkJXU3hIUVVGSkxFTkJRVUU3UVVGQlFTeE5RVU5rTEU5QlFWTXNSVUZCUVN4TlFVRkJPMEZCUVVFc1RVRkRWQ3hQUVVGVExFVkJRVUVzUzBGQlFTeERRVUZOTEU5QlFWRXNRMEZCUVN4RFFVRkJMRVZCUVVjc1EwRkJReXhEUVVGQk8wRkJRVUVzVFVGRE0wSXNWVUZCV1N4RlFVRkJMRkZCUVVFN1FVRkJRU3hOUVVOYUxHTkJRV2RDTEVWQlFVRXNWVUZCUVR0QlFVRkJMRTFCUTJoQ0xFMUJRVkVzUlVGQlFTeE5RVUZCTzBGQlFVRXNUVUZEVWl4TFFVRkJMRVZCUVU4c1MwRkJUU3hEUVVGQkxFMUJRVUVzUTBGQlR5eEpRVUZMTEVOQlFVRXNVMEZCUVR0QlFVRkJMRTFCUTNwQ0xGTkJRVmNzUlVGQlFUdEJRVUZCTEZGQlExUXNTMEZCUVN4RlFVRlBMRXRCUVUwc1EwRkJRU3hOUVVGQkxFTkJRVThzU1VGQlN5eERRVUZCTEU5QlFVRTdRVUZCUVN4UFFVTXpRanRCUVVGQkxFdEJRMFFzUTBGQlFUdEJRVUZCTEVsQlEwUXNXVUZCV1N4SFFVRkpMRU5CUVVFN1FVRkJRU3hOUVVOa0xGVkJRVmtzUlVGQlFTeFJRVUZCTzBGQlFVRXNUVUZEV2l4WFFVRkJMRVZCUVdFc1MwRkJUU3hEUVVGQkxFOUJRVUVzUTBGQlVTeERRVUZETEVOQlFVRTdRVUZCUVN4TlFVTTFRaXhMUVVGQkxFVkJRVThzUzBGQlRTeERRVUZCTEUxQlFVRXNRMEZCVHl4SlFVRkxMRU5CUVVFc1UwRkJRVHRCUVVGQkxFMUJRM3BDTEZOQlFWY3NSVUZCUVN4UlFVRkJPMEZCUVVFc1RVRkRXQ3hSUVVGQkxFVkJRVlVzUzBGQlRTeERRVUZCTEZWQlFVRXNRMEZCVnl4SlFVRkxMRU5CUVVFc1JVRkJRVHRCUVVGQkxFMUJRMmhETEZWQlFWa3NSVUZCUVN4UlFVRkJPMEZCUVVFc1RVRkRXaXhQUVVGVExFVkJRVUVzVFVGQlFUdEJRVUZCTEUxQlExUXNWVUZCV1N4RlFVRkJMRTFCUVVFN1FVRkJRU3hMUVVOaUxFTkJRVUU3UVVGQlFTeEpRVU5FTEhGQ1FVRnhRaXhIUVVGSkxFTkJRVUU3UVVGQlFTeE5RVU4yUWl4UFFVRlRMRVZCUVVFc1kwRkJRVHRCUVVGQkxFdEJRMVlzUTBGQlFUdEJRVUZCTEVkQlEwZ3NRMEZCUVR0QlFVTkdPenM3T3lKOVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JPLE1BQU0scUJBQXFCLGVBQW1DLENBQUE7QUFRNUQsRUFBQSxXQUFBLENBQVksS0FBbUMsRUFBQTtBQUM5QyxJQUFBLEtBQUEsQ0FBQSxjQUFBLGNBQUEsQ0FBQTtNQUNKLFFBQVUsRUFBQSxLQUFBLENBQU0sWUFBWSxFQUFBO0FBQzVCLE1BQUEsYUFBQSxFQUFlLE1BQU0sYUFBaUIsSUFBQSxJQUFBO0FBQ3RDLE1BQUEsS0FBQSxFQUFPLE1BQU0sS0FBUyxJQUFBLEVBQUE7QUFBQSxLQUFBLEVBQ25CLEtBSkMsQ0FBQSxFQUFBO01BS0osQ0FBRyxFQUFBLENBQUE7TUFDSCxNQUFRLEVBQUEsQ0FBQTtN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
@@ -0,0 +1,7 @@
1
+ const DEFAULT_PANEL_SPAN = 4;
2
+ const GRID_CELL_HEIGHT = 30;
3
+ const GRID_CELL_VMARGIN = 8;
4
+ const GRID_COLUMN_COUNT = 24;
5
+
6
+ export { DEFAULT_PANEL_SPAN, GRID_CELL_HEIGHT, GRID_CELL_VMARGIN, GRID_COLUMN_COUNT };
7
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb21wb25lbnRzL2xheW91dC9ncmlkL2NvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBERUZBVUxUX1BBTkVMX1NQQU4gPSA0O1xuY29uc3QgR1JJRF9DRUxMX0hFSUdIVCA9IDMwO1xuY29uc3QgR1JJRF9DRUxMX1ZNQVJHSU4gPSA4O1xuY29uc3QgR1JJRF9DT0xVTU5fQ09VTlQgPSAyNDtcblxuZXhwb3J0IHsgREVGQVVMVF9QQU5FTF9TUEFOLCBHUklEX0NFTExfSEVJR0hULCBHUklEX0NFTExfVk1BUkdJTiwgR1JJRF9DT0xVTU5fQ09VTlQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dWMzUmhiblJ6TG1weklpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOHVMaTh1TGk4dUxpOXpjbU12WTI5dGNHOXVaVzUwY3k5c1lYbHZkWFF2WjNKcFpDOWpiMjV6ZEdGdWRITXVkSE1pWFN3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdOdmJuTjBJRVJGUmtGVlRGUmZVRUZPUlV4ZlUxQkJUaUE5SURRN1hHNWxlSEJ2Y25RZ1kyOXVjM1FnUjFKSlJGOURSVXhNWDBoRlNVZElWQ0E5SURNd08xeHVaWGh3YjNKMElHTnZibk4wSUVkU1NVUmZRMFZNVEY5V1RVRlNSMGxPSUQwZ09EdGNibVY0Y0c5eWRDQmpiMjV6ZENCSFVrbEVYME5QVEZWTlRsOURUMVZPVkNBOUlESTBPMXh1SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGUExFMUJRVTBzYTBKQlFYRkNMRWRCUVVFc1JVRkJRVHRCUVVNelFpeE5RVUZOTEdkQ1FVRnRRaXhIUVVGQkxFZEJRVUU3UVVGRGVrSXNUVUZCVFN4cFFrRkJiMElzUjBGQlFTeEZRVUZCTzBGQlF6RkNMRTFCUVUwc2FVSkJRVzlDTEVkQlFVRTdPenM3SW4wPVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFPLE1BQU0sa0JBQXFCLEdBQUEsRUFBQTtBQUMzQixNQUFNLGdCQUFtQixHQUFBLEdBQUE7QUFDekIsTUFBTSxpQkFBb0IsR0FBQSxFQUFBO0FBQzFCLE1BQU0saUJBQW9CLEdBQUE7Ozs7In0=
@@ -0,0 +1,36 @@
1
+ import { GRID_CELL_HEIGHT, GRID_CELL_VMARGIN } from './constants.js';
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
9
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __spreadValues = (a, b) => {
11
+ for (var prop in b || (b = {}))
12
+ if (__hasOwnProp.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ if (__getOwnPropSymbols)
15
+ for (var prop of __getOwnPropSymbols(b)) {
16
+ if (__propIsEnum.call(b, prop))
17
+ __defNormalProp(a, prop, b[prop]);
18
+ }
19
+ return a;
20
+ };
21
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
22
+ function fitPanelsInHeight(cells, height) {
23
+ const visibleHeight = height - GRID_CELL_VMARGIN * 4;
24
+ const currentGridHeight = Math.max(...cells.map((cell) => cell.h + cell.y));
25
+ const visibleGridHeight = Math.floor(visibleHeight / (GRID_CELL_HEIGHT + GRID_CELL_VMARGIN));
26
+ const scaleFactor = currentGridHeight / visibleGridHeight;
27
+ return cells.map((cell) => {
28
+ return __spreadProps(__spreadValues({}, cell), {
29
+ y: Math.round(cell.y / scaleFactor) || 0,
30
+ h: Math.round(cell.h / scaleFactor) || 1
31
+ });
32
+ });
33
+ }
34
+
35
+ export { fitPanelsInHeight };
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvbGF5b3V0L2dyaWQvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR1JJRF9DRUxMX0hFSUdIVCwgR1JJRF9DRUxMX1ZNQVJHSU4gfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzID0gKGEsIGIpID0+IF9fZGVmUHJvcHMoYSwgX19nZXRPd25Qcm9wRGVzY3MoYikpO1xuZnVuY3Rpb24gZml0UGFuZWxzSW5IZWlnaHQoY2VsbHMsIGhlaWdodCkge1xuICBjb25zdCB2aXNpYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gR1JJRF9DRUxMX1ZNQVJHSU4gKiA0O1xuICBjb25zdCBjdXJyZW50R3JpZEhlaWdodCA9IE1hdGgubWF4KC4uLmNlbGxzLm1hcCgoY2VsbCkgPT4gY2VsbC5oICsgY2VsbC55KSk7XG4gIGNvbnN0IHZpc2libGVHcmlkSGVpZ2h0ID0gTWF0aC5mbG9vcih2aXNpYmxlSGVpZ2h0IC8gKEdSSURfQ0VMTF9IRUlHSFQgKyBHUklEX0NFTExfVk1BUkdJTikpO1xuICBjb25zdCBzY2FsZUZhY3RvciA9IGN1cnJlbnRHcmlkSGVpZ2h0IC8gdmlzaWJsZUdyaWRIZWlnaHQ7XG4gIHJldHVybiBjZWxscy5tYXAoKGNlbGwpID0+IHtcbiAgICByZXR1cm4gX19zcHJlYWRQcm9wcyhfX3NwcmVhZFZhbHVlcyh7fSwgY2VsbCksIHtcbiAgICAgIHk6IE1hdGgucm91bmQoY2VsbC55IC8gc2NhbGVGYWN0b3IpIHx8IDAsXG4gICAgICBoOiBNYXRoLnJvdW5kKGNlbGwuaCAvIHNjYWxlRmFjdG9yKSB8fCAxXG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgeyBmaXRQYW5lbHNJbkhlaWdodCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUx5NHVMM055WXk5amIyMXdiMjVsYm5SekwyeGhlVzkxZEM5bmNtbGtMM1YwYVd4ekxuUnpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUVkU1NVUmZRMFZNVEY5SVJVbEhTRlFzSUVkU1NVUmZRMFZNVEY5V1RVRlNSMGxPSUgwZ1puSnZiU0FuTGk5amIyNXpkR0Z1ZEhNbk8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdabWwwVUdGdVpXeHpTVzVJWldsbmFIUW9ZMlZzYkhNNklGSmxZV04wUjNKcFpFeGhlVzkxZEM1TVlYbHZkWFJiWFN3Z2FHVnBaMmgwT2lCdWRXMWlaWElwSUh0Y2JpQWdMeThnVkdGclpTQnBiblJ2SUdGalkyOTFiblFnWTJWc2JDQnRZWEpuYVc1MElIUnZjQ0FySUdObGJHd2diV0Z5WjJsdUlHSnZkSFJ2YlNBcklHRmtaR2x1WnlCemIyMWxJRzFoY21kcGJtY2dZWFFnZEdobElHSnZkSFJ2YlZ4dUlDQmpiMjV6ZENCMmFYTnBZbXhsU0dWcFoyaDBJRDBnYUdWcFoyaDBJQzBnUjFKSlJGOURSVXhNWDFaTlFWSkhTVTRnS2lBME8xeHVJQ0JqYjI1emRDQmpkWEp5Wlc1MFIzSnBaRWhsYVdkb2RDQTlJRTFoZEdndWJXRjRLQzR1TG1ObGJHeHpMbTFoY0Nnb1kyVnNiQ2tnUFQ0Z1kyVnNiQzVvSUNzZ1kyVnNiQzU1S1NrN1hHNWNiaUFnWTI5dWMzUWdkbWx6YVdKc1pVZHlhV1JJWldsbmFIUWdQU0JOWVhSb0xtWnNiMjl5S0hacGMybGliR1ZJWldsbmFIUWdMeUFvUjFKSlJGOURSVXhNWDBoRlNVZElWQ0FySUVkU1NVUmZRMFZNVEY5V1RVRlNSMGxPS1NrN1hHNGdJR052Ym5OMElITmpZV3hsUm1GamRHOXlJRDBnWTNWeWNtVnVkRWR5YVdSSVpXbG5hSFFnTHlCMmFYTnBZbXhsUjNKcFpFaGxhV2RvZER0Y2JseHVJQ0J5WlhSMWNtNGdZMlZzYkhNdWJXRndLQ2hqWld4c0tTQTlQaUI3WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lDNHVMbU5sYkd3c1hHNGdJQ0FnSUNCNU9pQk5ZWFJvTG5KdmRXNWtLR05sYkd3dWVTQXZJSE5qWVd4bFJtRmpkRzl5S1NCOGZDQXdMRnh1SUNBZ0lDQWdhRG9nVFdGMGFDNXliM1Z1WkNoalpXeHNMbWdnTHlCelkyRnNaVVpoWTNSdmNpa2dmSHdnTVN4Y2JpQWdJQ0I5TzF4dUlDQjlLVHRjYm4xY2JpSmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN096czdPenM3T3pzN096czdRVUZGWjBJc1UwRkJRU3hwUWtGQlFTeERRVUZyUWl4UFFVRnBReXhOUVVGblFpeEZRVUZCTzBGQlJXcEdMRVZCUVUwc1RVRkJRU3hoUVVGQkxFZEJRV2RDTEZOQlFWTXNhVUpCUVc5Q0xFZEJRVUVzUTBGQlFTeERRVUZCTzBGQlEyNUVMRVZCUVVFc1RVRkJUU3hwUWtGQmIwSXNSMEZCUVN4SlFVRkJMRU5CUVVzc1IwRkJTU3hEUVVGQkxFZEJRVWNzUzBGQlRTeERRVUZCTEVkQlFVRXNRMEZCU1N4RFFVRkRMRWxCUVVFc1MwRkJVeXhKUVVGTExFTkJRVUVzUTBGQlFTeEhRVUZKTEVsQlFVc3NRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJRU3hEUVVGQk8wRkJSVEZGTEVWQlFVRXNUVUZCVFN4cFFrRkJiMElzUjBGQlFTeEpRVUZCTEVOQlFVc3NTMEZCVFN4RFFVRkJMR0ZCUVVFc1NVRkJhVUlzYlVKQlFXMUNMR2xDUVVGclFpeERRVUZCTEVOQlFVRXNRMEZCUVR0QlFVTXpSaXhGUVVGQkxFMUJRVTBzWTBGQll5eHBRa0ZCYjBJc1IwRkJRU3hwUWtGQlFTeERRVUZCTzBGQlJYaERMRVZCUVU4c1QwRkJRU3hMUVVGQkxFTkJRVTBzUjBGQlNTeERRVUZCTEVOQlFVTXNTVUZCVXl4TFFVRkJPMEZCUTNwQ0xFbEJRVUVzVDBGQlR5eHBRMEZEUml4SlFVUkZMRU5CUVVFc1JVRkJRVHRCUVVGQkxFMUJSVXdzUjBGQlJ5eEpRVUZMTEVOQlFVRXNTMEZCUVN4RFFVRk5MRWxCUVVzc1EwRkJRU3hEUVVGQkxFZEJRVWtzVjBGQlZ5eERRVUZMTEVsQlFVRXNRMEZCUVR0QlFVRkJMRTFCUTNaRExFZEJRVWNzU1VGQlN5eERRVUZCTEV0QlFVRXNRMEZCVFN4SlFVRkxMRU5CUVVFc1EwRkJRU3hIUVVGSkxGZEJRVmNzUTBGQlN5eEpRVUZCTEVOQlFVRTdRVUZCUVN4TFFVTjZReXhEUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU5FTEVOQlFVRXNRMEZCUVR0QlFVTklPenM3T3lKOVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVnQixTQUFBLGlCQUFBLENBQWtCLE9BQWlDLE1BQWdCLEVBQUE7QUFFM0UsRUFBQSxNQUFBLGFBQUEsR0FBZ0IsU0FBUyxpQkFBb0IsR0FBQSxDQUFBLENBQUE7QUFDbkQsRUFBQSxNQUFNLGlCQUFvQixHQUFBLElBQUEsQ0FBSyxHQUFJLENBQUEsR0FBRyxLQUFNLENBQUEsR0FBQSxDQUFJLENBQUMsSUFBQSxLQUFTLElBQUssQ0FBQSxDQUFBLEdBQUksSUFBSyxDQUFBLENBQUMsQ0FBQyxDQUFBLENBQUE7QUFFMUUsRUFBQSxNQUFNLGlCQUFvQixHQUFBLElBQUEsQ0FBSyxLQUFNLENBQUEsYUFBQSxJQUFpQixtQkFBbUIsaUJBQWtCLENBQUEsQ0FBQSxDQUFBO0FBQzNGLEVBQUEsTUFBTSxjQUFjLGlCQUFvQixHQUFBLGlCQUFBLENBQUE7QUFFakMsRUFBQSxPQUFBLEtBQUEsQ0FBTSxHQUFJLENBQUEsQ0FBQyxJQUFTLEtBQUE7QUFDekIsSUFBQSxPQUFPLGFBQUEsQ0FBQSxjQUFBLENBQUEsRUFBQSxFQUNGLElBREUsQ0FBQSxFQUFBO0FBRUwsTUFBQSxDQUFBLEVBQUcsSUFBSyxDQUFBLEtBQUEsQ0FBTSxJQUFLLENBQUEsQ0FBQSxHQUFJLFdBQVcsQ0FBSyxJQUFBLENBQUE7QUFDdkMsTUFBQSxDQUFBLEVBQUcsSUFBSyxDQUFBLEtBQUEsQ0FBTSxJQUFLLENBQUEsQ0FBQSxHQUFJLFdBQVcsQ0FBSyxJQUFBLENBQUE7S0FDekMsQ0FBQSxDQUFBO0dBQ0QsQ0FBQSxDQUFBO0FBQ0g7Ozs7In0=
@@ -0,0 +1,17 @@
1
+ import { SceneObjectBase } from '../../../core/SceneObjectBase.js';
2
+ import { SplitLayoutRenderer } from './SplitLayoutRenderer.js';
3
+
4
+ class SplitLayout extends SceneObjectBase {
5
+ toggleDirection() {
6
+ this.setState({
7
+ direction: this.state.direction === "row" ? "column" : "row"
8
+ });
9
+ }
10
+ isDraggable() {
11
+ return false;
12
+ }
13
+ }
14
+ SplitLayout.Component = SplitLayoutRenderer;
15
+
16
+ export { SplitLayout };
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BsaXRMYXlvdXQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0L1NwbGl0TGF5b3V0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjZW5lT2JqZWN0QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvU2NlbmVPYmplY3RCYXNlLmpzJztcbmltcG9ydCB7IFNwbGl0TGF5b3V0UmVuZGVyZXIgfSBmcm9tICcuL1NwbGl0TGF5b3V0UmVuZGVyZXIuanMnO1xuXG5jbGFzcyBTcGxpdExheW91dCBleHRlbmRzIFNjZW5lT2JqZWN0QmFzZSB7XG4gIHRvZ2dsZURpcmVjdGlvbigpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5zdGF0ZS5kaXJlY3Rpb24gPT09IFwicm93XCIgPyBcImNvbHVtblwiIDogXCJyb3dcIlxuICAgIH0pO1xuICB9XG4gIGlzRHJhZ2dhYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuU3BsaXRMYXlvdXQuQ29tcG9uZW50ID0gU3BsaXRMYXlvdXRSZW5kZXJlcjtcblxuZXhwb3J0IHsgU3BsaXRMYXlvdXQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVTNCc2FYUk1ZWGx2ZFhRdWFuTWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUx5NHVMM055WXk5amIyMXdiMjVsYm5SekwyeGhlVzkxZEM5emNHeHBkQzlUY0d4cGRFeGhlVzkxZEM1MGN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdleUJEVTFOUWNtOXdaWEowYVdWeklIMGdabkp2YlNBbmNtVmhZM1FuTzF4dWFXMXdiM0owSUhzZ1UyTmxibVZQWW1wbFkzUkNZWE5sSUgwZ1puSnZiU0FuTGk0dkxpNHZMaTR2WTI5eVpTOVRZMlZ1WlU5aWFtVmpkRUpoYzJVbk8xeHVhVzF3YjNKMElIc2dVMk5sYm1WUFltcGxZM1JUZEdGMFpTQjlJR1p5YjIwZ0p5NHVMeTR1THk0dUwyTnZjbVV2ZEhsd1pYTW5PMXh1YVcxd2IzSjBJSHNnVTJObGJtVkdiR1Y0U1hSbGJWQnNZV05sYldWdWRDd2dVMk5sYm1WR2JHVjRTWFJsYlV4cGEyVWdmU0JtY205dElDY3VMaTlUWTJWdVpVWnNaWGhNWVhsdmRYUW5PMXh1YVcxd2IzSjBJSHNnVTNCc2FYUk1ZWGx2ZFhSU1pXNWtaWEpsY2lCOUlHWnliMjBnSnk0dlUzQnNhWFJNWVhsdmRYUlNaVzVrWlhKbGNpYzdYRzVjYm1sdWRHVnlabUZqWlNCVGNHeHBkRXhoZVc5MWRGTjBZWFJsSUdWNGRHVnVaSE1nVTJObGJtVlBZbXBsWTNSVGRHRjBaU3dnVTJObGJtVkdiR1Y0U1hSbGJWQnNZV05sYldWdWRDQjdYRzRnSUhCeWFXMWhjbms2SUZOalpXNWxSbXhsZUVsMFpXMU1hV3RsTzF4dUlDQnpaV052Ym1SaGNuay9PaUJUWTJWdVpVWnNaWGhKZEdWdFRHbHJaVHRjYmlBZ1pHbHlaV04wYVc5dU9pQW5jbTkzSnlCOElDZGpiMngxYlc0bk8xeHVJQ0JwYm1sMGFXRnNVMmw2WlQ4NklHNTFiV0psY2p0Y2JpQWdjSEpwYldGeWVWQmhibVZUZEhsc1pYTS9PaUJEVTFOUWNtOXdaWEowYVdWek8xeHVJQ0J6WldOdmJtUmhjbmxRWVc1bFUzUjViR1Z6UHpvZ1ExTlRVSEp2Y0dWeWRHbGxjenRjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUZOd2JHbDBUR0Y1YjNWMElHVjRkR1Z1WkhNZ1UyTmxibVZQWW1wbFkzUkNZWE5sUEZOd2JHbDBUR0Y1YjNWMFUzUmhkR1UrSUh0Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCRGIyMXdiMjVsYm5RZ1BTQlRjR3hwZEV4aGVXOTFkRkpsYm1SbGNtVnlPMXh1WEc0Z0lIQjFZbXhwWXlCMGIyZG5iR1ZFYVhKbFkzUnBiMjRvS1NCN1hHNGdJQ0FnZEdocGN5NXpaWFJUZEdGMFpTaDdYRzRnSUNBZ0lDQmthWEpsWTNScGIyNDZJSFJvYVhNdWMzUmhkR1V1WkdseVpXTjBhVzl1SUQwOVBTQW5jbTkzSnlBL0lDZGpiMngxYlc0bklEb2dKM0p2ZHljc1hHNGdJQ0FnZlNrN1hHNGdJSDFjYmx4dUlDQndkV0pzYVdNZ2FYTkVjbUZuWjJGaWJHVW9LVG9nWW05dmJHVmhiaUI3WEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQjlYRzU5WEc0aVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN08wRkJaVThzVFVGQlRTeHZRa0ZCYjBJc1pVRkJhME1zUTBGQlFUdEJRVUZCTEVWQlJ6RkVMR1ZCUVd0Q0xFZEJRVUU3UVVGRGRrSXNTVUZCUVN4SlFVRkJMRU5CUVVzc1VVRkJVeXhEUVVGQk8wRkJRVUVzVFVGRFdpeFRRVUZYTEVWQlFVRXNTVUZCUVN4RFFVRkxMRXRCUVUwc1EwRkJRU3hUUVVGQkxFdEJRV01zVVVGQlVTeFJRVUZYTEVkQlFVRXNTMEZCUVR0QlFVRkJMRXRCUTNoRUxFTkJRVUVzUTBGQlFUdEJRVUZCTEVkQlEwZzdRVUZCUVN4RlFVVlBMRmRCUVhWQ0xFZEJRVUU3UVVGRE5VSXNTVUZCVHl4UFFVRkJMRXRCUVVFc1EwRkJRVHRCUVVGQkxFZEJRMVE3UVVGRFJpeERRVUZCTzBGQldtRXNWMEZCUVN4RFFVTkhMRk5CUVZrc1IwRkJRU3h0UWtGQlFUczdPenNpZlE9PVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWVPLE1BQU0sb0JBQW9CLGVBQWtDLENBQUE7RUFHMUQsZUFBa0IsR0FBQTtBQUN2QixJQUFBLElBQUEsQ0FBSyxRQUFTLENBQUE7QUFDWixNQUFBLFNBQUEsRUFBVyxJQUFLLENBQUEsS0FBQSxDQUFNLFNBQWMsS0FBQSxLQUFBLEdBQVEsUUFBVyxHQUFBLEtBQUE7S0FDeEQsQ0FBQSxDQUFBO0FBQUEsR0FBQTtFQUdJLFdBQXVCLEdBQUE7QUFDckIsSUFBQSxPQUFBLEtBQUEsQ0FBQTtBQUFBLEdBQUE7QUFFWCxDQUFBO0FBWmEsV0FBQSxDQUNHLFNBQVksR0FBQSxtQkFBQTs7OzsifQ==