ng-virtual-list 18.11.2 → 18.12.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 (274) hide show
  1. package/README.md +115 -111
  2. package/esm2022/lib/components/ng-list-item/base/base-virtual-list-item-component.mjs +170 -61
  3. package/esm2022/lib/components/ng-list-item/const/index.mjs +41 -2
  4. package/esm2022/lib/components/ng-list-item/interfaces/template-context.mjs +1 -1
  5. package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +55 -51
  6. package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.module.mjs +5 -5
  7. package/esm2022/lib/components/ng-list-item/utils/create-display-id.mjs +7 -1
  8. package/esm2022/lib/components/ng-list-item/utils/get-element-by-index.mjs +17 -3
  9. package/esm2022/lib/components/ng-list-item/utils/index.mjs +3 -2
  10. package/esm2022/lib/components/ng-list-item/utils/matrix-3d.mjs +18 -0
  11. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.mjs +172 -47
  12. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.mjs +32 -16
  13. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.mjs +5 -5
  14. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.mjs +58 -34
  15. package/esm2022/lib/components/ng-prerender-container/core/prerender-track-box.mjs +37 -7
  16. package/esm2022/lib/components/ng-prerender-container/interfaces/refresh-params.mjs +1 -1
  17. package/esm2022/lib/components/ng-prerender-container/ng-prerender-container.component.mjs +58 -28
  18. package/esm2022/lib/components/ng-scroll-bar/const/index.mjs +8 -1
  19. package/esm2022/lib/components/ng-scroll-bar/interfaces/scroll-bar-template-context.mjs +1 -1
  20. package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +236 -88
  21. package/esm2022/lib/components/ng-scroll-view/base/base-scroll-view.component.mjs +170 -44
  22. package/esm2022/lib/components/ng-scroll-view/const/index.mjs +4 -2
  23. package/esm2022/lib/components/ng-scroll-view/interfaces/scroll-to-params.mjs +1 -1
  24. package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +610 -99
  25. package/esm2022/lib/components/ng-scroll-view/utils/calculate-direction.mjs +7 -1
  26. package/esm2022/lib/components/ng-scroll-view/utils/calculate-velocity.mjs +12 -0
  27. package/esm2022/lib/components/ng-scroll-view/utils/get-dir.mjs +10 -0
  28. package/esm2022/lib/components/ng-scroll-view/utils/index.mjs +4 -2
  29. package/esm2022/lib/components/ng-scroll-view/utils/matrix-3d.mjs +15 -0
  30. package/esm2022/lib/components/ng-scroller/enums/scroller-directions.mjs +1 -1
  31. package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +342 -160
  32. package/esm2022/lib/const/index.mjs +50 -10
  33. package/esm2022/lib/core/cache-map.mjs +1 -54
  34. package/esm2022/lib/core/const/index.mjs +3 -0
  35. package/esm2022/lib/core/enums/index.mjs +3 -0
  36. package/esm2022/lib/core/enums/item-display-methods.mjs +14 -0
  37. package/esm2022/lib/core/events/index.mjs +3 -0
  38. package/esm2022/lib/core/events/track-box-events.mjs +12 -0
  39. package/esm2022/lib/core/interfaces/get-item-position-options.mjs +2 -0
  40. package/esm2022/lib/core/interfaces/get-metrics-returns.mjs +2 -0
  41. package/esm2022/lib/core/interfaces/index.mjs +2 -0
  42. package/esm2022/lib/core/interfaces/item.mjs +2 -0
  43. package/esm2022/lib/core/interfaces/metrics.mjs +2 -0
  44. package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +2 -0
  45. package/esm2022/lib/core/interfaces/update-collection-options.mjs +2 -0
  46. package/esm2022/lib/core/interfaces/update-collection-returns.mjs +2 -0
  47. package/esm2022/lib/core/track-box.mjs +601 -191
  48. package/esm2022/lib/core/tracker.mjs +14 -8
  49. package/esm2022/lib/core/types/cache-map-events.mjs +2 -0
  50. package/esm2022/lib/core/types/cache-map-listeners.mjs +2 -0
  51. package/esm2022/lib/core/types/cache.mjs +2 -0
  52. package/esm2022/lib/core/types/index.mjs +2 -0
  53. package/esm2022/lib/core/types/on-change-event-listener.mjs +2 -0
  54. package/esm2022/lib/core/types/on-tick-event-listener.mjs +2 -0
  55. package/esm2022/lib/core/utils/get-service-id-prop.mjs +10 -0
  56. package/esm2022/lib/core/utils/index.mjs +3 -0
  57. package/esm2022/lib/directives/index.mjs +3 -3
  58. package/esm2022/lib/directives/locale-sensitive/locale-sensitive.directive.mjs +34 -13
  59. package/esm2022/lib/directives/virtual-click/virtual-click.directive.mjs +67 -0
  60. package/esm2022/lib/directives/virtual-click/virtual-click.module.mjs +19 -0
  61. package/esm2022/lib/enums/alignments.mjs +12 -0
  62. package/esm2022/lib/enums/collapsing-modes.mjs +22 -0
  63. package/esm2022/lib/enums/index.mjs +8 -4
  64. package/esm2022/lib/enums/selecting-modes-types.mjs +22 -0
  65. package/esm2022/lib/enums/selecting-modes.mjs +22 -0
  66. package/esm2022/lib/enums/snap-to-item-aligns.mjs +22 -0
  67. package/esm2022/lib/enums/spreading-modes.mjs +18 -0
  68. package/esm2022/lib/interfaces/animation-params.mjs +1 -1
  69. package/esm2022/lib/interfaces/base-virtual-list-item-component.mjs +2 -9
  70. package/esm2022/lib/interfaces/index.mjs +1 -1
  71. package/esm2022/lib/interfaces/item-transformation.mjs +2 -0
  72. package/esm2022/lib/interfaces/point.mjs +2 -0
  73. package/esm2022/lib/interfaces/scroll-options.mjs +1 -1
  74. package/esm2022/lib/interfaces/scroll-params.mjs +1 -1
  75. package/esm2022/lib/models/item-config-map.model.mjs +1 -1
  76. package/esm2022/lib/models/item.model.mjs +1 -1
  77. package/esm2022/lib/models/render-item-config.model.mjs +1 -1
  78. package/esm2022/lib/models/render-item-measures.model.mjs +1 -1
  79. package/esm2022/lib/ng-virtual-list-public.service.mjs +6 -7
  80. package/esm2022/lib/ng-virtual-list.component.mjs +2033 -903
  81. package/esm2022/lib/ng-virtual-list.service.mjs +91 -30
  82. package/esm2022/lib/transformations/deck-of-cards-3d.mjs +57 -0
  83. package/esm2022/lib/transformations/deck-of-cards.mjs +54 -0
  84. package/esm2022/lib/transformations/event-horizon.mjs +47 -0
  85. package/esm2022/lib/transformations/index.mjs +13 -0
  86. package/esm2022/lib/transformations/linear.mjs +47 -0
  87. package/esm2022/lib/transformations/swipe-3d.mjs +51 -0
  88. package/esm2022/lib/types/alignment.mjs +2 -0
  89. package/esm2022/lib/types/arithmetic-expression.mjs +2 -0
  90. package/esm2022/lib/types/collapsing-mode.mjs +2 -0
  91. package/esm2022/lib/types/collection-mode.mjs +2 -0
  92. package/esm2022/lib/types/color.mjs +2 -0
  93. package/esm2022/lib/types/direction.mjs +2 -0
  94. package/esm2022/lib/types/float-or-persentage-value.mjs +2 -0
  95. package/esm2022/lib/types/focus-item-params.mjs +1 -1
  96. package/esm2022/lib/types/gradient-color-position.mjs +1 -1
  97. package/esm2022/lib/types/index.mjs +1 -1
  98. package/esm2022/lib/types/item-transform.mjs +2 -0
  99. package/esm2022/lib/types/scroll-direction.mjs +1 -1
  100. package/esm2022/lib/types/selecting-mode.mjs +2 -0
  101. package/esm2022/lib/types/snap-to-item-align.mjs +2 -0
  102. package/esm2022/lib/types/snapping-distance.mjs +2 -0
  103. package/esm2022/lib/types/snapping-method.mjs +2 -0
  104. package/esm2022/lib/types/spreading-mode.mjs +2 -0
  105. package/esm2022/lib/types/text-direction.mjs +2 -0
  106. package/esm2022/lib/utils/animator/animator.mjs +28 -8
  107. package/esm2022/lib/utils/animator/const/index.mjs +2 -0
  108. package/esm2022/lib/utils/animator/index.mjs +3 -2
  109. package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +2 -0
  110. package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +2 -0
  111. package/esm2022/lib/utils/animator/interfaces/index.mjs +2 -0
  112. package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
  113. package/esm2022/lib/utils/disposable-component.mjs +27 -0
  114. package/esm2022/lib/utils/event-emitter/event-emitter.mjs +1 -1
  115. package/esm2022/lib/utils/get-scroll-state-version.mjs +12 -0
  116. package/esm2022/lib/utils/is-collapse-mode.mjs +18 -0
  117. package/esm2022/lib/utils/is-collection-mode.mjs +1 -1
  118. package/esm2022/lib/utils/is-direction.mjs +1 -1
  119. package/esm2022/lib/utils/is-persentage-value.mjs +14 -0
  120. package/esm2022/lib/utils/is-select-mode.mjs +18 -0
  121. package/esm2022/lib/utils/is-spreading-mode.mjs +15 -0
  122. package/esm2022/lib/utils/list-validators.mjs +1 -1
  123. package/esm2022/lib/utils/normalize-collection.mjs +42 -0
  124. package/esm2022/lib/utils/object.mjs +1 -1
  125. package/esm2022/lib/utils/parse-arithmetic-expression.mjs +53 -0
  126. package/esm2022/lib/utils/parse-float-or-persentage-value.mjs +17 -0
  127. package/esm2022/lib/utils/scrolling-direction.mjs +29 -0
  128. package/esm2022/lib/utils/snapping-method.mjs +1 -1
  129. package/esm2022/public-api.mjs +4 -1
  130. package/fesm2022/ng-virtual-list.mjs +7545 -3904
  131. package/fesm2022/ng-virtual-list.mjs.map +1 -1
  132. package/lib/components/ng-list-item/base/base-virtual-list-item-component.d.ts +40 -16
  133. package/lib/components/ng-list-item/const/index.d.ts +3 -1
  134. package/lib/components/ng-list-item/interfaces/template-context.d.ts +1 -1
  135. package/lib/components/ng-list-item/ng-virtual-list-item.component.d.ts +5 -2
  136. package/lib/components/ng-list-item/ng-virtual-list-item.module.d.ts +2 -2
  137. package/lib/components/ng-list-item/utils/create-display-id.d.ts +6 -0
  138. package/lib/components/ng-list-item/utils/get-element-by-index.d.ts +15 -1
  139. package/lib/components/ng-list-item/utils/index.d.ts +2 -1
  140. package/lib/components/ng-list-item/utils/matrix-3d.d.ts +7 -0
  141. package/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.d.ts +69 -26
  142. package/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.d.ts +2 -2
  143. package/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.d.ts +2 -2
  144. package/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.d.ts +33 -12
  145. package/lib/components/ng-prerender-container/interfaces/refresh-params.d.ts +1 -0
  146. package/lib/components/ng-prerender-container/ng-prerender-container.component.d.ts +20 -17
  147. package/lib/components/ng-scroll-bar/const/index.d.ts +2 -0
  148. package/lib/components/ng-scroll-bar/interfaces/scroll-bar-template-context.d.ts +2 -2
  149. package/lib/components/ng-scroll-bar/ng-scroll-bar.component.d.ts +75 -24
  150. package/lib/components/ng-scroll-view/base/base-scroll-view.component.d.ts +49 -16
  151. package/lib/components/ng-scroll-view/const/index.d.ts +3 -1
  152. package/lib/components/ng-scroll-view/interfaces/scroll-to-params.d.ts +4 -1
  153. package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +79 -11
  154. package/lib/components/ng-scroll-view/utils/calculate-direction.d.ts +6 -0
  155. package/lib/components/ng-scroll-view/utils/calculate-velocity.d.ts +7 -0
  156. package/lib/components/ng-scroll-view/utils/get-dir.d.ts +7 -0
  157. package/lib/components/ng-scroll-view/utils/index.d.ts +3 -1
  158. package/lib/components/ng-scroll-view/utils/matrix-3d.d.ts +7 -0
  159. package/lib/components/ng-scroller/enums/scroller-directions.d.ts +2 -1
  160. package/lib/components/ng-scroller/ng-scroller.component.d.ts +111 -47
  161. package/lib/const/index.d.ts +46 -5
  162. package/lib/core/cache-map.d.ts +0 -10
  163. package/lib/core/const/index.d.ts +1 -0
  164. package/lib/core/enums/index.d.ts +2 -0
  165. package/lib/core/enums/item-display-methods.d.ts +12 -0
  166. package/lib/core/events/index.d.ts +2 -0
  167. package/lib/core/events/track-box-events.d.ts +10 -0
  168. package/lib/core/interfaces/get-item-position-options.d.ts +10 -0
  169. package/lib/core/interfaces/get-metrics-returns.d.ts +11 -0
  170. package/lib/core/interfaces/index.d.ts +8 -0
  171. package/lib/core/interfaces/item.d.ts +9 -0
  172. package/lib/core/interfaces/metrics.d.ts +51 -0
  173. package/lib/core/interfaces/recalculate-metrics-options.d.ts +32 -0
  174. package/lib/core/interfaces/update-collection-options.d.ts +10 -0
  175. package/lib/core/interfaces/update-collection-returns.d.ts +14 -0
  176. package/lib/core/track-box.d.ts +25 -95
  177. package/lib/core/tracker.d.ts +1 -1
  178. package/lib/core/types/cache-map-events.d.ts +8 -0
  179. package/lib/core/types/cache-map-listeners.d.ts +9 -0
  180. package/lib/core/types/cache.d.ts +12 -0
  181. package/lib/core/types/index.d.ts +6 -0
  182. package/lib/core/types/on-change-event-listener.d.ts +7 -0
  183. package/lib/core/types/on-tick-event-listener.d.ts +7 -0
  184. package/lib/core/utils/get-service-id-prop.d.ts +7 -0
  185. package/lib/core/utils/index.d.ts +2 -0
  186. package/lib/directives/index.d.ts +2 -2
  187. package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +16 -6
  188. package/lib/directives/virtual-click/virtual-click.directive.d.ts +22 -0
  189. package/lib/directives/virtual-click/virtual-click.module.d.ts +8 -0
  190. package/lib/enums/alignments.d.ts +10 -0
  191. package/lib/enums/collapsing-modes.d.ts +20 -0
  192. package/lib/enums/index.d.ts +7 -9
  193. package/lib/enums/{method-for-selecting-types.d.ts → selecting-modes-types.d.ts} +3 -3
  194. package/lib/enums/{methods-for-selecting.d.ts → selecting-modes.d.ts} +3 -3
  195. package/lib/enums/snap-to-item-aligns.d.ts +20 -0
  196. package/lib/enums/spreading-modes.d.ts +16 -0
  197. package/lib/interfaces/animation-params.d.ts +1 -0
  198. package/lib/interfaces/base-virtual-list-item-component.d.ts +13 -13
  199. package/lib/interfaces/index.d.ts +3 -2
  200. package/lib/interfaces/item-transformation.d.ts +22 -0
  201. package/lib/interfaces/point.d.ts +16 -0
  202. package/lib/interfaces/scroll-options.d.ts +4 -0
  203. package/lib/interfaces/scroll-params.d.ts +3 -2
  204. package/lib/models/item-config-map.model.d.ts +5 -0
  205. package/lib/models/item.model.d.ts +7 -0
  206. package/lib/models/render-item-config.model.d.ts +50 -0
  207. package/lib/models/render-item-measures.model.d.ts +71 -0
  208. package/lib/ng-virtual-list-public.service.d.ts +4 -5
  209. package/lib/ng-virtual-list.component.d.ts +462 -135
  210. package/lib/ng-virtual-list.service.d.ts +33 -12
  211. package/lib/transformations/deck-of-cards-3d.d.ts +54 -0
  212. package/lib/transformations/deck-of-cards.d.ts +50 -0
  213. package/lib/transformations/event-horizon.d.ts +26 -0
  214. package/lib/transformations/index.d.ts +7 -0
  215. package/lib/transformations/linear.d.ts +26 -0
  216. package/lib/transformations/swipe-3d.d.ts +38 -0
  217. package/lib/types/alignment.d.ts +8 -0
  218. package/lib/types/arithmetic-expression.d.ts +10 -0
  219. package/lib/types/collapsing-mode.d.ts +8 -0
  220. package/lib/{enums → types}/collection-mode.d.ts +1 -1
  221. package/lib/types/color.d.ts +4 -0
  222. package/lib/{enums → types}/direction.d.ts +1 -1
  223. package/lib/types/float-or-persentage-value.d.ts +7 -0
  224. package/lib/types/focus-item-params.d.ts +6 -0
  225. package/lib/types/gradient-color-position.d.ts +1 -1
  226. package/lib/types/index.d.ts +15 -1
  227. package/lib/types/item-transform.d.ts +9 -0
  228. package/lib/types/scroll-direction.d.ts +2 -0
  229. package/lib/types/selecting-mode.d.ts +8 -0
  230. package/lib/types/snap-to-item-align.d.ts +8 -0
  231. package/lib/types/snapping-distance.d.ts +8 -0
  232. package/lib/{enums → types}/snapping-method.d.ts +1 -1
  233. package/lib/types/spreading-mode.d.ts +8 -0
  234. package/lib/{enums → types}/text-direction.d.ts +1 -1
  235. package/lib/utils/animator/animator.d.ts +10 -17
  236. package/lib/utils/animator/const/index.d.ts +1 -0
  237. package/lib/utils/animator/index.d.ts +2 -1
  238. package/lib/utils/animator/interfaces/animator-params.d.ts +18 -0
  239. package/lib/utils/animator/interfaces/animator-update-data.d.ts +13 -0
  240. package/lib/utils/animator/interfaces/index.d.ts +3 -0
  241. package/lib/utils/animator/types/easing.d.ts +6 -0
  242. package/lib/utils/disposable-component.d.ts +15 -0
  243. package/lib/utils/get-scroll-state-version.d.ts +1 -0
  244. package/lib/utils/is-collapse-mode.d.ts +8 -0
  245. package/lib/utils/is-collection-mode.d.ts +1 -1
  246. package/lib/utils/is-direction.d.ts +1 -1
  247. package/lib/utils/is-persentage-value.d.ts +7 -0
  248. package/lib/utils/is-select-mode.d.ts +8 -0
  249. package/lib/utils/is-spreading-mode.d.ts +8 -0
  250. package/lib/utils/list-validators.d.ts +1 -1
  251. package/lib/utils/normalize-collection.d.ts +8 -0
  252. package/lib/utils/object.d.ts +1 -1
  253. package/lib/utils/parse-arithmetic-expression.d.ts +8 -0
  254. package/lib/utils/parse-float-or-persentage-value.d.ts +7 -0
  255. package/lib/utils/scrolling-direction.d.ts +17 -0
  256. package/lib/utils/snapping-method.d.ts +1 -1
  257. package/package.json +1 -1
  258. package/public-api.d.ts +3 -0
  259. package/esm2022/lib/components/ng-scroller/const/index.mjs +0 -2
  260. package/esm2022/lib/directives/item-click/item-click.directive.mjs +0 -59
  261. package/esm2022/lib/directives/item-click/item-click.module.mjs +0 -19
  262. package/esm2022/lib/enums/collection-mode.mjs +0 -2
  263. package/esm2022/lib/enums/direction.mjs +0 -2
  264. package/esm2022/lib/enums/method-for-selecting-types.mjs +0 -22
  265. package/esm2022/lib/enums/method-for-selecting.mjs +0 -2
  266. package/esm2022/lib/enums/methods-for-selecting.mjs +0 -22
  267. package/esm2022/lib/enums/snapping-method.mjs +0 -2
  268. package/esm2022/lib/enums/text-direction.mjs +0 -2
  269. package/esm2022/lib/utils/is-method-for-selecting.mjs +0 -18
  270. package/lib/components/ng-scroller/const/index.d.ts +0 -1
  271. package/lib/directives/item-click/item-click.directive.d.ts +0 -19
  272. package/lib/directives/item-click/item-click.module.d.ts +0 -8
  273. package/lib/enums/method-for-selecting.d.ts +0 -8
  274. package/lib/utils/is-method-for-selecting.d.ts +0 -8
@@ -1,7 +1,8 @@
1
- import { Component, computed, DestroyRef, inject, input, signal, viewChild, } from '@angular/core';
2
- import { Subject } from 'rxjs';
1
+ import { Component, inject, Input, ViewChild, } from '@angular/core';
2
+ import { BehaviorSubject, distinctUntilChanged, Subject, takeUntil, tap } from 'rxjs';
3
3
  import { ScrollerDirection } from '../enums';
4
- import { SCROLL_VIEW_INVERSION } from '../const';
4
+ import { SCROLL_VIEW_INVERSION, SCROLL_VIEW_OVERSCROLL_ENABLED } from '../const';
5
+ import { DisposableComponent } from '../../../utils/disposable-component';
5
6
  import * as i0 from "@angular/core";
6
7
  /**
7
8
  * BaseScrollView
@@ -11,33 +12,83 @@ import * as i0 from "@angular/core";
11
12
  * @author Evgenii Alexandrovich Grebennikov
12
13
  * @email djonnyx@gmail.com
13
14
  */
14
- export class BaseScrollView {
15
- scrollContent = viewChild('scrollContent');
16
- scrollViewport = viewChild('scrollViewport');
17
- direction = input(ScrollerDirection.VERTICAL);
18
- startOffset = input(0);
19
- endOffset = input(0);
20
- isVertical;
21
- grabbing = signal(false);
15
+ export class BaseScrollView extends DisposableComponent {
16
+ scrollContent;
17
+ scrollViewport;
18
+ _$direction = new BehaviorSubject(ScrollerDirection.VERTICAL);
19
+ $direction = this._$direction.asObservable();
20
+ set direction(v) {
21
+ if (this._$direction.getValue() !== v) {
22
+ this._$direction.next(v);
23
+ }
24
+ }
25
+ get direction() { return this._$direction.getValue(); }
26
+ _$startOffset = new BehaviorSubject(0);
27
+ $startOffset = this._$startOffset.asObservable();
28
+ set startOffset(v) {
29
+ if (this._$startOffset.getValue() !== v) {
30
+ this._$startOffset.next(v);
31
+ }
32
+ }
33
+ get startOffset() { return this._$startOffset.getValue(); }
34
+ _$endOffset = new BehaviorSubject(0);
35
+ $endOffset = this._$endOffset.asObservable();
36
+ set endOffset(v) {
37
+ if (this._$endOffset.getValue() !== v) {
38
+ this._$endOffset.next(v);
39
+ }
40
+ }
41
+ get endOffset() { return this._$endOffset.getValue(); }
42
+ _$alignmentStartOffset = new BehaviorSubject(0);
43
+ $alignmentStartOffset = this._$alignmentStartOffset.asObservable();
44
+ set alignmentStartOffset(v) {
45
+ if (this._$alignmentStartOffset.getValue() !== v) {
46
+ this._$alignmentStartOffset.next(v);
47
+ }
48
+ }
49
+ get alignmentStartOffset() { return this._$alignmentStartOffset.getValue(); }
50
+ _$alignmentEndOffset = new BehaviorSubject(0);
51
+ $alignmentEndOffset = this._$alignmentEndOffset.asObservable();
52
+ set alignmentEndOffset(v) {
53
+ if (this._$alignmentEndOffset.getValue() !== v) {
54
+ this._$alignmentEndOffset.next(v);
55
+ }
56
+ }
57
+ get alignmentEndOffset() { return this._$alignmentEndOffset.getValue(); }
58
+ _$isInfinity = new BehaviorSubject(false);
59
+ $isInfinity = this._$isInfinity.asObservable();
60
+ set isInfinity(v) {
61
+ if (this._$isInfinity.getValue() !== v) {
62
+ this._$isInfinity.next(v);
63
+ }
64
+ }
65
+ get isInfinity() { return this._$isInfinity.getValue(); }
66
+ _$isVertical = new BehaviorSubject(true);
67
+ $isVertical = this._$isVertical.asObservable();
68
+ _$grabbing = new BehaviorSubject(false);
69
+ $grabbing = this._$grabbing.asObservable();
70
+ _inversion = inject(SCROLL_VIEW_INVERSION);
71
+ _overscrollEnabled = inject(SCROLL_VIEW_OVERSCROLL_ENABLED);
22
72
  _$updateScrollBar = new Subject();
23
73
  $updateScrollBar = this._$updateScrollBar.asObservable();
24
74
  get scrollable() {
25
- const { width, height } = this.viewportBounds(), isVertical = this.isVertical(), viewportSize = isVertical ? height : width, totalSize = this._totalSize;
26
- return totalSize > viewportSize;
75
+ const { width, height } = this._$viewportBounds.getValue(), isVertical = this._$isVertical.getValue(), viewportSize = isVertical ? height : width, totalSize = this._totalSize;
76
+ return this._inversion ? (totalSize < viewportSize) : (totalSize > viewportSize);
27
77
  }
28
- _destroyRef = inject(DestroyRef);
29
78
  _isMoving = false;
30
79
  get isMoving() {
31
80
  return this._isMoving;
32
81
  }
33
- _x = this.startOffset();
82
+ _x = 0;
34
83
  set x(v) {
35
84
  this._x = this._actualX = v;
85
+ this.normalizeScrollSize();
36
86
  }
37
87
  get x() { return this._x; }
38
- _y = this.endOffset();
88
+ _y = 0;
39
89
  set y(v) {
40
90
  this._y = this._actualY = v;
91
+ this.normalizeScrollSize();
41
92
  }
42
93
  get y() { return this._y; }
43
94
  _actualTotalSize = 0;
@@ -45,19 +96,30 @@ export class BaseScrollView {
45
96
  set totalSize(v) {
46
97
  if (this._totalSize !== v) {
47
98
  this._totalSize = v;
48
- const startOffset = this.startOffset();
49
- this._actualTotalSize = v + startOffset;
99
+ const startOffset = this._$startOffset.getValue(), endOffset = this._$alignmentEndOffset.getValue();
100
+ this._actualTotalSize = v + startOffset + endOffset;
101
+ this.normalizeScrollSize();
102
+ }
103
+ }
104
+ get totalSize() {
105
+ return this._totalSize;
106
+ }
107
+ _startLayoutOffset = 0;
108
+ set startLayoutOffset(v) {
109
+ if (this._startLayoutOffset !== v) {
110
+ this._startLayoutOffset = v;
50
111
  }
51
112
  }
113
+ get startLayoutOffset() { return this._startLayoutOffset; }
52
114
  get actualScrollHeight() {
53
- const { height: viewportHeight } = this.viewportBounds(), totalSize = this._actualTotalSize, isVertical = this.isVertical(), startOffset = this.startOffset(), endOffset = this.endOffset();
115
+ const { height: viewportHeight } = this._$viewportBounds.getValue(), totalSize = this._actualTotalSize, isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), endOffset = this._$endOffset.getValue();
54
116
  if (this._inversion) {
55
117
  return totalSize > viewportHeight ? isVertical ? endOffset : 0 : viewportHeight - totalSize;
56
118
  }
57
119
  return totalSize < viewportHeight ? isVertical ? startOffset : 0 : totalSize - viewportHeight;
58
120
  }
59
121
  get actualScrollWidth() {
60
- const { width: viewportWidth } = this.viewportBounds(), totalSize = this._actualTotalSize, isVertical = this.isVertical(), startOffset = this.startOffset(), endOffset = this.endOffset();
122
+ const { width: viewportWidth } = this._$viewportBounds.getValue(), totalSize = this._actualTotalSize, isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), endOffset = this._$endOffset.getValue();
61
123
  if (this._inversion) {
62
124
  return totalSize > viewportWidth ? isVertical ? 0 : endOffset : viewportWidth - totalSize;
63
125
  }
@@ -78,53 +140,99 @@ export class BaseScrollView {
78
140
  return this._y;
79
141
  }
80
142
  get scrollWidth() {
81
- const { width: viewportWidth } = this.viewportBounds(), { width: contentWidth } = this.contentBounds(), isVertical = this.isVertical(), startOffset = this.startOffset(), endOffset = this.endOffset();
143
+ const { width: viewportWidth } = this._$viewportBounds.getValue(), { width: contentWidth } = this._$contentBounds.getValue(), isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), endOffset = this._$endOffset.getValue();
82
144
  if (this._inversion) {
83
- return contentWidth > viewportWidth ? isVertical ? 0 : endOffset : (viewportWidth - contentWidth);
145
+ return contentWidth > viewportWidth ? isVertical ? 0 : endOffset : (viewportWidth - (contentWidth + this._$alignmentEndOffset.getValue()));
84
146
  }
85
- return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : (contentWidth - viewportWidth);
147
+ return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : ((contentWidth + this._$alignmentEndOffset.getValue()) - viewportWidth);
86
148
  }
87
149
  get scrollHeight() {
88
- const { height: viewportHeight } = this.viewportBounds(), { height: contentHeight } = this.contentBounds(), isVertical = this.isVertical(), startOffset = this.startOffset(), endOffset = this.endOffset();
150
+ const { height: viewportHeight } = this._$viewportBounds.getValue(), { height: contentHeight } = this._$contentBounds.getValue(), isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), endOffset = this._$endOffset.getValue();
89
151
  if (this._inversion) {
90
- return contentHeight > viewportHeight ? isVertical ? endOffset : 0 : (viewportHeight - contentHeight);
152
+ return contentHeight > viewportHeight ? isVertical ? endOffset : 0 : (viewportHeight - (contentHeight + this._$alignmentEndOffset.getValue()));
91
153
  }
92
- return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : (contentHeight - viewportHeight);
154
+ return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : ((contentHeight + this._$alignmentEndOffset.getValue()) - viewportHeight);
93
155
  }
94
- viewportBounds = signal({ width: 0, height: 0 });
95
- contentBounds = signal({ width: 0, height: 0 });
96
- _inversion = inject(SCROLL_VIEW_INVERSION);
156
+ _$viewportBounds = new BehaviorSubject({ width: 0, height: 0 });
157
+ $viewportBounds = this._$viewportBounds.asObservable();
158
+ _$contentBounds = new BehaviorSubject({ width: 0, height: 0 });
159
+ $contentBounds = this._$contentBounds.asObservable();
160
+ _isCoordinatesOverrided = false;
97
161
  constructor() {
98
- this.isVertical = computed(() => {
99
- return this.direction() === ScrollerDirection.VERTICAL;
100
- });
162
+ super();
163
+ const $direction = this.$direction;
164
+ $direction.pipe(takeUntil(this._$unsubscribe), distinctUntilChanged(), tap(v => {
165
+ this._$isVertical.next(v === ScrollerDirection.VERTICAL);
166
+ })).subscribe();
101
167
  }
102
168
  tick() {
103
169
  this.onResizeContent();
104
170
  this.onResizeViewport();
105
171
  }
172
+ overrideCoordinates(x, y) { }
173
+ normalizeScrollSize() {
174
+ if (this._$isInfinity.getValue()) {
175
+ const isVertical = this._$isVertical.getValue();
176
+ if (isVertical) {
177
+ const scrollSize = (this._totalSize - this._$viewportBounds.getValue().height);
178
+ if (this._y < 0) {
179
+ this._isCoordinatesOverrided = true;
180
+ const currentPosition = scrollSize;
181
+ this.overrideCoordinates(this._x, currentPosition);
182
+ this._y = currentPosition;
183
+ return true;
184
+ }
185
+ else if (this._y > scrollSize) {
186
+ this._isCoordinatesOverrided = true;
187
+ const currentPosition = 0;
188
+ this.overrideCoordinates(this._x, currentPosition);
189
+ this._y = currentPosition;
190
+ return true;
191
+ }
192
+ }
193
+ else {
194
+ const scrollSize = (this._totalSize - this._$viewportBounds.getValue().width);
195
+ if (this._x < 0) {
196
+ this._isCoordinatesOverrided = true;
197
+ const currentPosition = scrollSize;
198
+ this.overrideCoordinates(currentPosition, this._y);
199
+ this._x = currentPosition;
200
+ return true;
201
+ }
202
+ else if (this._x > scrollSize) {
203
+ this._isCoordinatesOverrided = true;
204
+ const currentPosition = 0;
205
+ this.overrideCoordinates(currentPosition, this._y);
206
+ this._x = currentPosition;
207
+ return true;
208
+ }
209
+ }
210
+ }
211
+ this._isCoordinatesOverrided = false;
212
+ return false;
213
+ }
106
214
  onResizeViewport() {
107
- const viewport = this.scrollViewport()?.nativeElement;
108
- if (viewport) {
109
- const isVertical = this.isVertical(), startOffset = this.startOffset(), endOffset = this.endOffset(), w = viewport.offsetWidth, h = viewport.offsetHeight, width = isVertical ? w : w - startOffset - endOffset, height = isVertical ? h - startOffset - endOffset : h, bounds = this.viewportBounds();
215
+ const viewport = this.scrollViewport?.nativeElement;
216
+ if (!!viewport) {
217
+ const isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), endOffset = this._$endOffset.getValue(), w = viewport.offsetWidth, h = viewport.offsetHeight, width = isVertical ? w : (w - startOffset - endOffset), height = isVertical ? (h - startOffset - endOffset) : h, bounds = this._$viewportBounds.getValue();
110
218
  if (bounds.width === width && bounds.height === height) {
111
219
  return;
112
220
  }
113
- this.viewportBounds.set({ width, height });
221
+ this._$viewportBounds.next({ width, height });
114
222
  }
115
223
  }
116
- onResizeContent() {
117
- const content = this.scrollContent()?.nativeElement;
118
- if (content) {
119
- const isVertical = this.isVertical(), startOffset = this.startOffset(), w = content.offsetWidth, h = content.offsetHeight, width = isVertical ? w : w - startOffset, height = isVertical ? h - startOffset : h, bounds = this.contentBounds();
224
+ onResizeContent(value = null) {
225
+ const content = this.scrollContent?.nativeElement;
226
+ if (!!content) {
227
+ const isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), w = content.offsetWidth, h = content.offsetHeight, width = isVertical ? w : value ?? (w - startOffset), height = isVertical ? value ?? (h - startOffset) : h, bounds = this._$contentBounds.getValue();
120
228
  if (bounds.width === width && bounds.height === height) {
121
229
  return;
122
230
  }
123
- this.contentBounds.set({ width, height });
231
+ this._$contentBounds.next({ width, height });
124
232
  }
125
233
  }
126
234
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaseScrollView, deps: [], target: i0.ɵɵFactoryTarget.Component });
127
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: BaseScrollView, selector: "base-scroll-view", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, startOffset: { classPropertyName: "startOffset", publicName: "startOffset", isSignal: true, isRequired: false, transformFunction: null }, endOffset: { classPropertyName: "endOffset", publicName: "endOffset", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "scrollContent", first: true, predicate: ["scrollContent"], descendants: true, isSignal: true }, { propertyName: "scrollViewport", first: true, predicate: ["scrollViewport"], descendants: true, isSignal: true }], ngImport: i0, template: '', isInline: true });
235
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: BaseScrollView, selector: "base-scroll-view", inputs: { direction: "direction", startOffset: "startOffset", endOffset: "endOffset", alignmentStartOffset: "alignmentStartOffset", alignmentEndOffset: "alignmentEndOffset", isInfinity: "isInfinity" }, viewQueries: [{ propertyName: "scrollContent", first: true, predicate: ["scrollContent"], descendants: true }, { propertyName: "scrollViewport", first: true, predicate: ["scrollViewport"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
128
236
  }
129
237
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaseScrollView, decorators: [{
130
238
  type: Component,
@@ -132,5 +240,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
132
240
  selector: 'base-scroll-view',
133
241
  template: '',
134
242
  }]
135
- }], ctorParameters: () => [] });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2Jhc2UvYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsR0FDeEYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sVUFBVSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFFakQ7Ozs7Ozs7R0FPRztBQUtILE1BQU0sT0FBTyxjQUFjO0lBQ2QsYUFBYSxHQUFHLFNBQVMsQ0FBNkIsZUFBZSxDQUFDLENBQUM7SUFFdkUsY0FBYyxHQUFHLFNBQVMsQ0FBNkIsZ0JBQWdCLENBQUMsQ0FBQztJQUV6RSxTQUFTLEdBQUcsS0FBSyxDQUFxQixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVsRSxXQUFXLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBRS9CLFNBQVMsR0FBRyxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFFN0IsVUFBVSxDQUFrQjtJQUU1QixRQUFRLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRWpDLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDeEMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRW5FLElBQUksVUFBVTtRQUNWLE1BQU0sRUFBRSxLQUFLLEVBQUUs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QUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFUyxlQUFlO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxhQUFhLENBQUM7UUFDcEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFDaEMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFDaEMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQ3ZCLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUN4QixLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQ3hDLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNsQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3JELE9BQU87WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQzt3R0EzS1EsY0FBYzs0RkFBZCxjQUFjLHlzQkFGYixFQUFFOzs0RkFFSCxjQUFjO2tCQUoxQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxFQUFFO2lCQUNmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIFNpZ25hbCwgc2lnbmFsLCB2aWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2Nyb2xsZXJEaXJlY3Rpb24sIFNjcm9sbGVyRGlyZWN0aW9ucyB9IGZyb20gJy4uL2VudW1zJztcclxuaW1wb3J0IHsgSVNpemUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgU0NST0xMX1ZJRVdfSU5WRVJTSU9OIH0gZnJvbSAnLi4vY29uc3QnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2VTY3JvbGxWaWV3XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE4LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy1zY3JvbGwtdmlldy9iYXNlL2Jhc2Utc2Nyb2xsLXZpZXcuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2Jhc2Utc2Nyb2xsLXZpZXcnLFxyXG4gICAgdGVtcGxhdGU6ICcnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVNjcm9sbFZpZXcge1xyXG4gICAgcmVhZG9ubHkgc2Nyb2xsQ29udGVudCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ3Njcm9sbENvbnRlbnQnKTtcclxuXHJcbiAgICByZWFkb25seSBzY3JvbGxWaWV3cG9ydCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ3Njcm9sbFZpZXdwb3J0Jyk7XHJcblxyXG4gICAgcmVhZG9ubHkgZGlyZWN0aW9uID0gaW5wdXQ8U2Nyb2xsZXJEaXJlY3Rpb25zPihTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTCk7XHJcblxyXG4gICAgcmVhZG9ubHkgc3RhcnRPZmZzZXQgPSBpbnB1dDxudW1iZXI+KDApO1xyXG5cclxuICAgIHJlYWRvbmx5IGVuZE9mZnNldCA9IGlucHV0PG51bWJlcj4oMCk7XHJcblxyXG4gICAgcmVhZG9ubHkgaXNWZXJ0aWNhbDogU2lnbmFsPGJvb2xlYW4+O1xyXG5cclxuICAgIHJlYWRvbmx5IGdyYWJiaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgXyR1cGRhdGVTY3JvbGxCYXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJvdGVjdGVkICR1cGRhdGVTY3JvbGxCYXIgPSB0aGlzLl8kdXBkYXRlU2Nyb2xsQmFyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIGdldCBzY3JvbGxhYmxlKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsKCksXHJcbiAgICAgICAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICAgICAgdG90YWxTaXplID0gdGhpcy5fdG90YWxTaXplO1xyXG4gICAgICAgIHJldHVybiB0b3RhbFNpemUgPiB2aWV3cG9ydFNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICAgIHByb3RlY3RlZCBfaXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgIGdldCBpc01vdmluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNNb3Zpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF94OiBudW1iZXIgPSB0aGlzLnN0YXJ0T2Zmc2V0KCk7XHJcbiAgICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl94ID0gdGhpcy5fYWN0dWFsWCA9IHY7XHJcbiAgICB9XHJcbiAgICBnZXQgeCgpIHsgcmV0dXJuIHRoaXMuX3g7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3k6IG51bWJlciA9IHRoaXMuZW5kT2Zmc2V0KCk7XHJcbiAgICBzZXQgeSh2OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl95ID0gdGhpcy5fYWN0dWFsWSA9IHY7XHJcbiAgICB9XHJcbiAgICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMuX3k7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFRvdGFsU2l6ZTogbnVtYmVyID0gMDtcclxuICAgIHByb3RlY3RlZCBfdG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgc2V0IHRvdGFsU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fdG90YWxTaXplICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvdGFsU2l6ZSA9IHY7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gdGhpcy5zdGFydE9mZnNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY3R1YWxUb3RhbFNpemUgPSB2ICsgc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBhY3R1YWxTY3JvbGxIZWlnaHQoKSB7XHJcbiAgICAgICAgY29uc3QgeyBoZWlnaHQ6IHZpZXdwb3J0SGVpZ2h0IH0gPSB0aGlzLnZpZXdwb3J0Qm91bmRzKCksXHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX2FjdHVhbFRvdGFsU2l6ZSxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQoKSxcclxuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gdGhpcy5lbmRPZmZzZXQoKTtcclxuICAgICAgICBpZiAodGhpcy5faW52ZXJzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b3RhbFNpemUgPiB2aWV3cG9ydEhlaWdodCA/IGlzVmVydGljYWwgPyBlbmRPZmZzZXQgOiAwIDogdmlld3BvcnRIZWlnaHQgLSB0b3RhbFNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0b3RhbFNpemUgPCB2aWV3cG9ydEhlaWdodCA/IGlzVmVydGljYWwgPyBzdGFydE9mZnNldCA6IDAgOiB0b3RhbFNpemUgLSB2aWV3cG9ydEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsV2lkdGgoKSB7XHJcbiAgICAgICAgY29uc3QgeyB3aWR0aDogdmlld3BvcnRXaWR0aCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9hY3R1YWxUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwoKSxcclxuICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLnN0YXJ0T2Zmc2V0KCksXHJcbiAgICAgICAgICAgIGVuZE9mZnNldCA9IHRoaXMuZW5kT2Zmc2V0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRXaWR0aCA/IGlzVmVydGljYWwgPyAwIDogZW5kT2Zmc2V0IDogdmlld3BvcnRXaWR0aCAtIHRvdGFsU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZSA8IHZpZXdwb3J0V2lkdGggPyBpc1ZlcnRpY2FsID8gMCA6IHN0YXJ0T2Zmc2V0IDogdG90YWxTaXplIC0gdmlld3BvcnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFg6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsTGVmdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0dWFsWDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFk6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsVG9wKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3R1YWxZO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxMZWZ0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxUb3AoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjcm9sbFdpZHRoKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMudmlld3BvcnRCb3VuZHMoKSxcclxuICAgICAgICAgICAgeyB3aWR0aDogY29udGVudFdpZHRoIH0gPSB0aGlzLmNvbnRlbnRCb3VuZHMoKSxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQoKSxcclxuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gdGhpcy5lbmRPZmZzZXQoKTtcclxuICAgICAgICBpZiAodGhpcy5faW52ZXJzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50V2lkdGggPiB2aWV3cG9ydFdpZHRoID8gaXNWZXJ0aWNhbCA/IDAgOiBlbmRPZmZzZXQgOiAodmlld3BvcnRXaWR0aCAtIGNvbnRlbnRXaWR0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250ZW50V2lkdGggPCB2aWV3cG9ydFdpZHRoID8gaXNWZXJ0aWNhbCA/IDAgOiBzdGFydE9mZnNldCA6IChjb250ZW50V2lkdGggLSB2aWV3cG9ydFdpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2Nyb2xsSGVpZ2h0KCkge1xyXG4gICAgICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICAgICAgICB7IGhlaWdodDogY29udGVudEhlaWdodCB9ID0gdGhpcy5jb250ZW50Qm91bmRzKCksXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwoKSxcclxuICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLnN0YXJ0T2Zmc2V0KCksXHJcbiAgICAgICAgICAgIGVuZE9mZnNldCA9IHRoaXMuZW5kT2Zmc2V0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0ID8gaXNWZXJ0aWNhbCA/IGVuZE9mZnNldCA6IDAgOiAodmlld3BvcnRIZWlnaHQgLSBjb250ZW50SGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQgPCB2aWV3cG9ydEhlaWdodCA/IGlzVmVydGljYWwgPyBzdGFydE9mZnNldCA6IDAgOiAoY29udGVudEhlaWdodCAtIHZpZXdwb3J0SGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkb25seSB2aWV3cG9ydEJvdW5kcyA9IHNpZ25hbDxJU2l6ZT4oeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xyXG5cclxuICAgIHJlYWRvbmx5IGNvbnRlbnRCb3VuZHMgPSBzaWduYWw8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2ludmVyc2lvbiA9IGluamVjdChTQ1JPTExfVklFV19JTlZFUlNJT04pO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXNWZXJ0aWNhbCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uKCkgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRpY2soKSB7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZUNvbnRlbnQoKTtcclxuICAgICAgICB0aGlzLm9uUmVzaXplVmlld3BvcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25SZXNpemVWaWV3cG9ydCgpIHtcclxuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuc2Nyb2xsVmlld3BvcnQoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCgpLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLnN0YXJ0T2Zmc2V0KCksXHJcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLmVuZE9mZnNldCgpLFxyXG4gICAgICAgICAgICAgICAgdyA9IHZpZXdwb3J0Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaCA9IHZpZXdwb3J0Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gaXNWZXJ0aWNhbCA/IHcgOiB3IC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBpc1ZlcnRpY2FsID8gaCAtIHN0YXJ0T2Zmc2V0IC0gZW5kT2Zmc2V0IDogaCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMudmlld3BvcnRCb3VuZHMoKTtcclxuICAgICAgICAgICAgaWYgKGJvdW5kcy53aWR0aCA9PT0gd2lkdGggJiYgYm91bmRzLmhlaWdodCA9PT0gaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aWV3cG9ydEJvdW5kcy5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25SZXNpemVDb250ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoY29udGVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsKCksXHJcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQoKSxcclxuICAgICAgICAgICAgICAgIHcgPSBjb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaCA9IGNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBpc1ZlcnRpY2FsID8gdyA6IHcgLSBzdGFydE9mZnNldCxcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGlzVmVydGljYWwgPyBoIC0gc3RhcnRPZmZzZXQgOiBoLFxyXG4gICAgICAgICAgICAgICAgYm91bmRzID0gdGhpcy5jb250ZW50Qm91bmRzKCk7XHJcbiAgICAgICAgICAgIGlmIChib3VuZHMud2lkdGggPT09IHdpZHRoICYmIGJvdW5kcy5oZWlnaHQgPT09IGhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudEJvdW5kcy5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
243
+ }], ctorParameters: () => [], propDecorators: { scrollContent: [{
244
+ type: ViewChild,
245
+ args: ['scrollContent']
246
+ }], scrollViewport: [{
247
+ type: ViewChild,
248
+ args: ['scrollViewport']
249
+ }], direction: [{
250
+ type: Input
251
+ }], startOffset: [{
252
+ type: Input
253
+ }], endOffset: [{
254
+ type: Input
255
+ }], alignmentStartOffset: [{
256
+ type: Input
257
+ }], alignmentEndOffset: [{
258
+ type: Input
259
+ }], isInfinity: [{
260
+ type: Input
261
+ }] } });
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2Jhc2UvYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FDbEQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sVUFBVSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFFMUU7Ozs7Ozs7R0FPRztBQUtILE1BQU0sT0FBTyxjQUFlLFNBQVEsbUJBQW1CO0lBRW5ELGFBQWEsQ0FBeUM7SUFHdEQsY0FBYyxDQUF5QztJQUU3QyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQTJCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RELElBQ0ksU0FBUyxDQUFDLENBQTJCO1FBQ3JDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFN0MsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFELElBQ0ksV0FBVyxDQUFDLENBQVM7UUFDckIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVqRCxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsSUFDSSxTQUFTLENBQUMsQ0FBUztRQUNuQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLFNBQVMsS0FBSyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTdDLHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pELHFCQUFxQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1RSxJQUNJLG9CQUFvQixDQUFDLENBQVM7UUFDOUIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksb0JBQW9CLEtBQUssT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRW5FLG9CQUFvQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4RSxJQUNJLGtCQUFrQixDQUFDLENBQVM7UUFDNUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksa0JBQWtCLEtBQUssT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRS9ELFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNwRCxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4RCxJQUNJLFVBQVUsQ0FBQyxDQUFVO1FBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0MsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ25ELFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTlDLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNsRCxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxQyxVQUFVLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFM0Msa0JBQWtCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFNUQsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUN4QyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFbkUsSUFBSSxVQUFVO1FBQ1YsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEVBQ3RELFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUN6QyxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDMUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVTLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDNUIsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFUyxFQUFFLEdBQVcsQ0FBQyxDQUFDO0lBQ3pCLElBQUksQ0FBQyxDQUFDLENBQVM7UUFDWCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWpCLEVBQUUsR0FBVyxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLENBQUMsQ0FBUztRQUNYLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFakIsZ0JBQWdCLEdBQVcsQ0FBQyxDQUFDO0lBQzdCLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDakMsSUFBSSxTQUFTLENBQUMsQ0FBUztRQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztZQUVwRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRVMsa0JBQWtCLEdBQVcsQ0FBQyxDQUFDO0lBQ3pDLElBQUksaUJBQWlCLENBQUMsQ0FBUztRQUMzQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsS0FBSyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFFM0QsSUFBSSxrQkFBa0I7UUFDbEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEVBQy9ELFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQ2pDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUN6QyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFDM0MsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsT0FBTyxTQUFTLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxPQUFPLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFDbEcsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ2pCLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxFQUM3RCxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUNqQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFDekMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQzNDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsT0FBTyxTQUFTLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO0lBQ2hHLENBQUM7SUFFUyxRQUFRLEdBQVcsQ0FBQyxDQUFDO0lBQy9CLElBQUksZ0JBQWdCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRVMsUUFBUSxHQUFXLENBQUMsQ0FBQztJQUMvQixJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsRUFDN0QsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsRUFDekQsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQ3pDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUMzQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixPQUFPLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0ksQ0FBQztRQUNELE9BQU8sWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztJQUNqSixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEVBQy9ELEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQzNELFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUN6QyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFDM0MsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsT0FBTyxhQUFhLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25KLENBQUM7UUFDRCxPQUFPLGFBQWEsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDckosQ0FBQztJQUVTLGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RSxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXRELGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkUsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFcEQsdUJBQXVCLEdBQVksS0FBSyxDQUFDO0lBRW5EO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFFUixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLFVBQVUsQ0FBQyxJQUFJLENBQ1gsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUNMLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUk7UUFDQSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVTLG1CQUFtQixDQUFDLENBQVMsRUFBRSxDQUFTLElBQUksQ0FBQztJQUU3QyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNiLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9FLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDZCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO29CQUNwQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUM7b0JBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO29CQUNuRCxJQUFJLENBQUMsRUFBRSxHQUFHLGVBQWUsQ0FBQztvQkFDMUIsT0FBTyxJQUFJLENBQUM7Z0JBQ2hCLENBQUM7cUJBQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO29CQUNwQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7b0JBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO29CQUNuRCxJQUFJLENBQUMsRUFBRSxHQUFHLGVBQWUsQ0FBQztvQkFDMUIsT0FBTyxJQUFJLENBQUM7Z0JBQ2hCLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNkLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7b0JBQ3BDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25ELElBQUksQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDO29CQUMxQixPQUFPLElBQUksQ0FBQztnQkFDaEIsQ0FBQztxQkFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7b0JBQ3BDLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25ELElBQUksQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDO29CQUMxQixPQUFPLElBQUksQ0FBQztnQkFDaEIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNyQyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRVMsZ0JBQWdCO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDO1FBQ3BELElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFDM0MsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQzNDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUN2QyxDQUFDLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFDeEIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQ3pCLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQyxFQUN0RCxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdkQsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3JELE9BQU87WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDTCxDQUFDO0lBRVMsZUFBZSxDQUFDLFFBQXVCLElBQUk7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUM7UUFDbEQsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUMzQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFDM0MsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQ3ZCLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUN4QixLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsRUFDbkQsTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3BELE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdDLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDckQsT0FBTztZQUNYLENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDTCxDQUFDO3dHQTFTUSxjQUFjOzRGQUFkLGNBQWMsNGVBRmIsRUFBRTs7NEZBRUgsY0FBYztrQkFKMUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsRUFBRTtpQkFDZjt3REFHRyxhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZTtnQkFJMUIsY0FBYztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQjtnQkFNdkIsU0FBUztzQkFEWixLQUFLO2dCQVdGLFdBQVc7c0JBRGQsS0FBSztnQkFXRixTQUFTO3NCQURaLEtBQUs7Z0JBV0Ysb0JBQW9CO3NCQUR2QixLQUFLO2dCQVdGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFXRixVQUFVO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNjcm9sbGVyRGlyZWN0aW9uLCBTY3JvbGxlckRpcmVjdGlvbnMgfSBmcm9tICcuLi9lbnVtcyc7XHJcbmltcG9ydCB7IElTaXplIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFNDUk9MTF9WSUVXX0lOVkVSU0lPTiwgU0NST0xMX1ZJRVdfT1ZFUlNDUk9MTF9FTkFCTEVEIH0gZnJvbSAnLi4vY29uc3QnO1xyXG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZGlzcG9zYWJsZS1jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2VTY3JvbGxWaWV3XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE4LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy1zY3JvbGwtdmlldy9iYXNlL2Jhc2Utc2Nyb2xsLXZpZXcuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2Jhc2Utc2Nyb2xsLXZpZXcnLFxyXG4gICAgdGVtcGxhdGU6ICcnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVNjcm9sbFZpZXcgZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRlbnQnKVxyXG4gICAgc2Nyb2xsQ29udGVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsVmlld3BvcnQnKVxyXG4gICAgc2Nyb2xsVmlld3BvcnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHByb3RlY3RlZCBfJGRpcmVjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Nyb2xsZXJEaXJlY3Rpb25zIHwgYW55PihTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTCk7XHJcbiAgICByZWFkb25seSAkZGlyZWN0aW9uID0gdGhpcy5fJGRpcmVjdGlvbi5hc09ic2VydmFibGUoKTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlyZWN0aW9uKHY6IFNjcm9sbGVyRGlyZWN0aW9ucyB8IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fJGRpcmVjdGlvbi5uZXh0KHYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBkaXJlY3Rpb24oKSB7IHJldHVybiB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgXyRzdGFydE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICAgIHJlYWRvbmx5ICRzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgc3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzdGFydE9mZnNldC5uZXh0KHYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBzdGFydE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kZW5kT2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gICAgcmVhZG9ubHkgJGVuZE9mZnNldCA9IHRoaXMuXyRlbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGVuZE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fJGVuZE9mZnNldC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRlbmRPZmZzZXQubmV4dCh2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgZW5kT2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJGVuZE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kYWxpZ25tZW50U3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgICByZWFkb25seSAkYWxpZ25tZW50U3RhcnRPZmZzZXQgPSB0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGFsaWdubWVudFN0YXJ0T2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICAgICAgICB0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQubmV4dCh2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgYWxpZ25tZW50U3RhcnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfJGFsaWdubWVudEVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICAgIHJlYWRvbmx5ICRhbGlnbm1lbnRFbmRPZmZzZXQgPSB0aGlzLl8kYWxpZ25tZW50RW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgQElucHV0KClcclxuICAgIHNldCBhbGlnbm1lbnRFbmRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICAgICAgICB0aGlzLl8kYWxpZ25tZW50RW5kT2Zmc2V0Lm5leHQodik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGFsaWdubWVudEVuZE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfJGlzSW5maW5pdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHJlYWRvbmx5ICRpc0luZmluaXR5ID0gdGhpcy5fJGlzSW5maW5pdHkuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGlzSW5maW5pdHkodjogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRpc0luZmluaXR5Lm5leHQodik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGlzSW5maW5pdHkoKSB7IHJldHVybiB0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kaXNWZXJ0aWNhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICByZWFkb25seSAkaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIHByb3RlY3RlZCBfJGdyYWJiaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICByZWFkb25seSAkZ3JhYmJpbmcgPSB0aGlzLl8kZ3JhYmJpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbnZlcnNpb24gPSBpbmplY3QoU0NST0xMX1ZJRVdfSU5WRVJTSU9OKTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX292ZXJzY3JvbGxFbmFibGVkID0gaW5qZWN0KFNDUk9MTF9WSUVXX09WRVJTQ1JPTExfRU5BQkxFRCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kdXBkYXRlU2Nyb2xsQmFyID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByb3RlY3RlZCAkdXBkYXRlU2Nyb2xsQmFyID0gdGhpcy5fJHVwZGF0ZVNjcm9sbEJhci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBnZXQgc2Nyb2xsYWJsZSgpIHtcclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl90b3RhbFNpemU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmVyc2lvbiA/ICh0b3RhbFNpemUgPCB2aWV3cG9ydFNpemUpIDogKHRvdGFsU2l6ZSA+IHZpZXdwb3J0U2l6ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgZ2V0IGlzTW92aW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc01vdmluZztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3g6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl94ID0gdGhpcy5fYWN0dWFsWCA9IHY7XHJcblxyXG4gICAgICAgIHRoaXMubm9ybWFsaXplU2Nyb2xsU2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHgoKSB7IHJldHVybiB0aGlzLl94OyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF95OiBudW1iZXIgPSAwO1xyXG4gICAgc2V0IHkodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5feSA9IHRoaXMuX2FjdHVhbFkgPSB2O1xyXG5cclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKTtcclxuICAgIH1cclxuICAgIGdldCB5KCkgeyByZXR1cm4gdGhpcy5feTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfYWN0dWFsVG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgcHJvdGVjdGVkIF90b3RhbFNpemU6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgdG90YWxTaXplKHY6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl90b3RhbFNpemUgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG90YWxTaXplID0gdjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSwgZW5kT2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY3R1YWxUb3RhbFNpemUgPSB2ICsgc3RhcnRPZmZzZXQgKyBlbmRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgdG90YWxTaXplKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90b3RhbFNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9zdGFydExheW91dE9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIHNldCBzdGFydExheW91dE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgPSB2O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBzdGFydExheW91dE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuX3N0YXJ0TGF5b3V0T2Zmc2V0OyB9XHJcblxyXG4gICAgZ2V0IGFjdHVhbFNjcm9sbEhlaWdodCgpIHtcclxuICAgICAgICBjb25zdCB7IGhlaWdodDogdmlld3BvcnRIZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9hY3R1YWxUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRIZWlnaHQgPyBpc1ZlcnRpY2FsID8gZW5kT2Zmc2V0IDogMCA6IHZpZXdwb3J0SGVpZ2h0IC0gdG90YWxTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG90YWxTaXplIDwgdmlld3BvcnRIZWlnaHQgPyBpc1ZlcnRpY2FsID8gc3RhcnRPZmZzZXQgOiAwIDogdG90YWxTaXplIC0gdmlld3BvcnRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGFjdHVhbFNjcm9sbFdpZHRoKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9hY3R1YWxUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRXaWR0aCA/IGlzVmVydGljYWwgPyAwIDogZW5kT2Zmc2V0IDogdmlld3BvcnRXaWR0aCAtIHRvdGFsU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZSA8IHZpZXdwb3J0V2lkdGggPyBpc1ZlcnRpY2FsID8gMCA6IHN0YXJ0T2Zmc2V0IDogdG90YWxTaXplIC0gdmlld3BvcnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFg6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsTGVmdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0dWFsWDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFk6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsVG9wKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3R1YWxZO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxMZWZ0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxUb3AoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjcm9sbFdpZHRoKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB7IHdpZHRoOiBjb250ZW50V2lkdGggfSA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudFdpZHRoID4gdmlld3BvcnRXaWR0aCA/IGlzVmVydGljYWwgPyAwIDogZW5kT2Zmc2V0IDogKHZpZXdwb3J0V2lkdGggLSAoY29udGVudFdpZHRoICsgdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250ZW50V2lkdGggPCB2aWV3cG9ydFdpZHRoID8gaXNWZXJ0aWNhbCA/IDAgOiBzdGFydE9mZnNldCA6ICgoY29udGVudFdpZHRoICsgdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpKSAtIHZpZXdwb3J0V2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxIZWlnaHQoKSB7XHJcbiAgICAgICAgY29uc3QgeyBoZWlnaHQ6IHZpZXdwb3J0SGVpZ2h0IH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgeyBoZWlnaHQ6IGNvbnRlbnRIZWlnaHQgfSA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0ID8gaXNWZXJ0aWNhbCA/IGVuZE9mZnNldCA6IDAgOiAodmlld3BvcnRIZWlnaHQgLSAoY29udGVudEhlaWdodCArIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCA8IHZpZXdwb3J0SGVpZ2h0ID8gaXNWZXJ0aWNhbCA/IHN0YXJ0T2Zmc2V0IDogMCA6ICgoY29udGVudEhlaWdodCArIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSkgLSB2aWV3cG9ydEhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kdmlld3BvcnRCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplPih7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcbiAgICByZWFkb25seSAkdmlld3BvcnRCb3VuZHMgPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kY29udGVudEJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuICAgIHJlYWRvbmx5ICRjb250ZW50Qm91bmRzID0gdGhpcy5fJGNvbnRlbnRCb3VuZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0Nvb3JkaW5hdGVzT3ZlcnJpZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3QgJGRpcmVjdGlvbiA9IHRoaXMuJGRpcmVjdGlvbjtcclxuICAgICAgICAkZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kaXNWZXJ0aWNhbC5uZXh0KHYgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aWNrKCkge1xyXG4gICAgICAgIHRoaXMub25SZXNpemVDb250ZW50KCk7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZVZpZXdwb3J0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlQ29vcmRpbmF0ZXMoeDogbnVtYmVyLCB5OiBudW1iZXIpIHsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBub3JtYWxpemVTY3JvbGxTaXplKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9ICh0aGlzLl90b3RhbFNpemUgLSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3kgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNDb29yZGluYXRlc092ZXJyaWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQ29vcmRpbmF0ZXModGhpcy5feCwgY3VycmVudFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl95ID0gY3VycmVudFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl95ID4gc2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQ29vcmRpbmF0ZXNPdmVycmlkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZUNvb3JkaW5hdGVzKHRoaXMuX3gsIGN1cnJlbnRQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IGN1cnJlbnRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5fdG90YWxTaXplIC0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCkud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNDb29yZGluYXRlc092ZXJyaWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQ29vcmRpbmF0ZXMoY3VycmVudFBvc2l0aW9uLCB0aGlzLl95KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl94ID0gY3VycmVudFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl94ID4gc2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQ29vcmRpbmF0ZXNPdmVycmlkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZUNvb3JkaW5hdGVzKGN1cnJlbnRQb3NpdGlvbiwgdGhpcy5feSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IGN1cnJlbnRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9pc0Nvb3JkaW5hdGVzT3ZlcnJpZGVkID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblJlc2l6ZVZpZXdwb3J0KCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoISF2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHN0YXJ0T2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICB3ID0gdmlld3BvcnQub2Zmc2V0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoID0gdmlld3BvcnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBpc1ZlcnRpY2FsID8gdyA6ICh3IC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQpLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaXNWZXJ0aWNhbCA/IChoIC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQpIDogaCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAoYm91bmRzLndpZHRoID09PSB3aWR0aCAmJiBib3VuZHMuaGVpZ2h0ID09PSBoZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl8kdmlld3BvcnRCb3VuZHMubmV4dCh7IHdpZHRoLCBoZWlnaHQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblJlc2l6ZUNvbnRlbnQodmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoISFjb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgIHcgPSBjb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaCA9IGNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBpc1ZlcnRpY2FsID8gdyA6IHZhbHVlID8/ICh3IC0gc3RhcnRPZmZzZXQpLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaXNWZXJ0aWNhbCA/IHZhbHVlID8/IChoIC0gc3RhcnRPZmZzZXQpIDogaCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmIChib3VuZHMud2lkdGggPT09IHdpZHRoICYmIGJvdW5kcy5oZWlnaHQgPT09IGhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuXyRjb250ZW50Qm91bmRzLm5leHQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
@@ -1,7 +1,9 @@
1
1
  import { InjectionToken } from "@angular/core";
2
2
  import { SCROLLER_SCROLL } from "../../../const";
3
3
  export const SCROLL_VIEW_INVERSION = new InjectionToken('ScrollViewInversion');
4
+ export const SCROLL_VIEW_OVERSCROLL_ENABLED = new InjectionToken('ScrollViewOverscrollEnabled');
4
5
  export const SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO = new InjectionToken('ScrollViewNormalizeValueFromZero');
5
- export const TOP = 'top', LEFT = 'left', INSTANT = 'instant', AUTO = 'auto', SMOOTH = 'smooth', DURATION = 2000, FRICTION_FORCE = .035, MAX_DURATION = 4000, ANIMATION_DURATION = 50, MASS = .005, MAX_DIST = 12500, MAX_VELOCITY_TIMESTAMP = 100, SPEED_SCALE = 15, OVERSCROLL_START_ITERATION = 2;
6
+ export const TOP = 'top', LEFT = 'left', INSTANT = 'instant', AUTO = 'auto', SMOOTH = 'smooth', DURATION = 2000, FRICTION_FORCE = .035, MAX_DURATION = 4000, ANIMATION_DURATION = 50, MASS = .005, MAX_DIST = 12500, MAX_VELOCITY_TIMESTAMP = 100, SPEED_SCALE = 15, OVERSCROLL_START_ITERATION = 2, INTERSECTION_DISTANCE = 1;
7
+ export const MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS = 5, INSTANT_VELOCITY_SCALE = 1000;
6
8
  export const SCROLL_EVENT = new Event(SCROLLER_SCROLL);
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2NvbnN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFVLHFCQUFxQixDQUFDLENBQUM7QUFFeEYsTUFBTSxDQUFDLE1BQU0scUNBQXFDLEdBQUcsSUFBSSxjQUFjLENBQVUsa0NBQWtDLENBQUMsQ0FBQztBQUVySCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUNwQixJQUFJLEdBQUcsTUFBTSxFQUNiLE9BQU8sR0FBRyxTQUFTLEVBQ25CLElBQUksR0FBRyxNQUFNLEVBQ2IsTUFBTSxHQUFHLFFBQVEsRUFDakIsUUFBUSxHQUFHLElBQUksRUFDZixjQUFjLEdBQUcsSUFBSSxFQUNyQixZQUFZLEdBQUcsSUFBSSxFQUNuQixrQkFBa0IsR0FBRyxFQUFFLEVBQ3ZCLElBQUksR0FBRyxJQUFJLEVBQ1gsUUFBUSxHQUFHLEtBQUssRUFDaEIsc0JBQXNCLEdBQUcsR0FBRyxFQUM1QixXQUFXLEdBQUcsRUFBRSxFQUNoQiwwQkFBMEIsR0FBRyxDQUFDLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTQ1JPTExFUl9TQ1JPTEwgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfVklFV19JTlZFUlNJT04gPSBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oJ1Njcm9sbFZpZXdJbnZlcnNpb24nKTtcclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfVklFV19OT1JNQUxJWkVfVkFMVUVfRlJPTV9aRVJPID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdTY3JvbGxWaWV3Tm9ybWFsaXplVmFsdWVGcm9tWmVybycpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRPUCA9ICd0b3AnLFxyXG4gICAgTEVGVCA9ICdsZWZ0JyxcclxuICAgIElOU1RBTlQgPSAnaW5zdGFudCcsXHJcbiAgICBBVVRPID0gJ2F1dG8nLFxyXG4gICAgU01PT1RIID0gJ3Ntb290aCcsXHJcbiAgICBEVVJBVElPTiA9IDIwMDAsXHJcbiAgICBGUklDVElPTl9GT1JDRSA9IC4wMzUsXHJcbiAgICBNQVhfRFVSQVRJT04gPSA0MDAwLFxyXG4gICAgQU5JTUFUSU9OX0RVUkFUSU9OID0gNTAsXHJcbiAgICBNQVNTID0gLjAwNSxcclxuICAgIE1BWF9ESVNUID0gMTI1MDAsXHJcbiAgICBNQVhfVkVMT0NJVFlfVElNRVNUQU1QID0gMTAwLFxyXG4gICAgU1BFRURfU0NBTEUgPSAxNSxcclxuICAgIE9WRVJTQ1JPTExfU1RBUlRfSVRFUkFUSU9OID0gMjtcclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlQgPSBuZXcgRXZlbnQoU0NST0xMRVJfU0NST0xMKTtcclxuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2NvbnN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFVLHFCQUFxQixDQUFDLENBQUM7QUFFeEYsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQVUsNkJBQTZCLENBQUMsQ0FBQztBQUV6RyxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxJQUFJLGNBQWMsQ0FBVSxrQ0FBa0MsQ0FBQyxDQUFDO0FBRXJILE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3BCLElBQUksR0FBRyxNQUFNLEVBQ2IsT0FBTyxHQUFHLFNBQVMsRUFDbkIsSUFBSSxHQUFHLE1BQU0sRUFDYixNQUFNLEdBQUcsUUFBUSxFQUNqQixRQUFRLEdBQUcsSUFBSSxFQUNmLGNBQWMsR0FBRyxJQUFJLEVBQ3JCLFlBQVksR0FBRyxJQUFJLEVBQ25CLGtCQUFrQixHQUFHLEVBQUUsRUFDdkIsSUFBSSxHQUFHLElBQUksRUFDWCxRQUFRLEdBQUcsS0FBSyxFQUNoQixzQkFBc0IsR0FBRyxHQUFHLEVBQzVCLFdBQVcsR0FBRyxFQUFFLEVBQ2hCLDBCQUEwQixHQUFHLENBQUMsRUFDOUIscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBRTlCLE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLENBQUMsRUFDcEQsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU0NST0xMRVJfU0NST0xMIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgU0NST0xMX1ZJRVdfSU5WRVJTSU9OID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdTY3JvbGxWaWV3SW52ZXJzaW9uJyk7XHJcblxyXG5leHBvcnQgY29uc3QgU0NST0xMX1ZJRVdfT1ZFUlNDUk9MTF9FTkFCTEVEID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdTY3JvbGxWaWV3T3ZlcnNjcm9sbEVuYWJsZWQnKTtcclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfVklFV19OT1JNQUxJWkVfVkFMVUVfRlJPTV9aRVJPID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdTY3JvbGxWaWV3Tm9ybWFsaXplVmFsdWVGcm9tWmVybycpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRPUCA9ICd0b3AnLFxyXG4gICAgTEVGVCA9ICdsZWZ0JyxcclxuICAgIElOU1RBTlQgPSAnaW5zdGFudCcsXHJcbiAgICBBVVRPID0gJ2F1dG8nLFxyXG4gICAgU01PT1RIID0gJ3Ntb290aCcsXHJcbiAgICBEVVJBVElPTiA9IDIwMDAsXHJcbiAgICBGUklDVElPTl9GT1JDRSA9IC4wMzUsXHJcbiAgICBNQVhfRFVSQVRJT04gPSA0MDAwLFxyXG4gICAgQU5JTUFUSU9OX0RVUkFUSU9OID0gNTAsXHJcbiAgICBNQVNTID0gLjAwNSxcclxuICAgIE1BWF9ESVNUID0gMTI1MDAsXHJcbiAgICBNQVhfVkVMT0NJVFlfVElNRVNUQU1QID0gMTAwLFxyXG4gICAgU1BFRURfU0NBTEUgPSAxNSxcclxuICAgIE9WRVJTQ1JPTExfU1RBUlRfSVRFUkFUSU9OID0gMixcclxuICAgIElOVEVSU0VDVElPTl9ESVNUQU5DRSA9IDE7XHJcblxyXG5leHBvcnQgY29uc3QgTUFYX0lURVJBVElPTlNfRk9SX0FWRVJBR0VfQ0FMQ1VMQVRJT05TID0gNSxcclxuICAgIElOU1RBTlRfVkVMT0NJVFlfU0NBTEUgPSAxMDAwO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNDUk9MTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9TQ1JPTEwpO1xyXG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXRvLXBhcmFtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvbXBvbmVudHMvbmctc2Nyb2xsLXZpZXcvaW50ZXJmYWNlcy9zY3JvbGwtdG8tcGFyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFYXNpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvYW5pbWF0b3JcIjtcclxuXHJcbi8qKlxyXG4gKiBJU2Nyb2xsVG9QYXJhbXNcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2ludGVyZmFjZXMvc2Nyb2xsLXRvLXBhcmFtcy50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNjcm9sbFRvUGFyYW1zIHtcclxuICAgIHg/OiBudW1iZXI7XHJcbiAgICB5PzogbnVtYmVyO1xyXG4gICAgbGVmdD86IG51bWJlcjtcclxuICAgIHRvcD86IG51bWJlcjtcclxuICAgIGJsZW5kaW5nPzogYm9vbGVhbjtcclxuICAgIGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3I7XHJcbiAgICBlYXNlPzogRWFzaW5nO1xyXG4gICAgZmlyZVVwZGF0ZT86IGJvb2xlYW47XHJcbiAgICB1c2VyQWN0aW9uPzogYm9vbGVhbjtcclxuICAgIGR1cmF0aW9uPzogbnVtYmVyO1xyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXRvLXBhcmFtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvbXBvbmVudHMvbmctc2Nyb2xsLXZpZXcvaW50ZXJmYWNlcy9zY3JvbGwtdG8tcGFyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFYXNpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvYW5pbWF0b3JcIjtcclxuXHJcbi8qKlxyXG4gKiBJU2Nyb2xsVG9QYXJhbXNcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2ludGVyZmFjZXMvc2Nyb2xsLXRvLXBhcmFtcy50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNjcm9sbFRvUGFyYW1zIHtcclxuICAgIHg/OiBudW1iZXI7XHJcbiAgICB5PzogbnVtYmVyO1xyXG4gICAgbGVmdD86IG51bWJlcjtcclxuICAgIHRvcD86IG51bWJlcjtcclxuICAgIHNuYXA/OiBib29sZWFuO1xyXG4gICAgbm9ybWFsaXplPzogYm9vbGVhbjtcclxuICAgIGZvcmNlPzogYm9vbGVhbjtcclxuICAgIGJsZW5kaW5nPzogYm9vbGVhbjtcclxuICAgIGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3IgfCBcImF1dG9cIiB8IFwiaW5zdGFudFwiIHwgXCJzbW9vdGhcIjtcclxuICAgIGVhc2U/OiBFYXNpbmc7XHJcbiAgICBmaXJlVXBkYXRlPzogYm9vbGVhbjtcclxuICAgIHVzZXJBY3Rpb24/OiBib29sZWFuO1xyXG4gICAgZHVyYXRpb24/OiBudW1iZXI7XHJcbn1cclxuIl19