ngx-hana-nameserver-history-viewer 1.1.2 → 1.1.9-2.beta

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 (241) hide show
  1. package/README.md +6 -5
  2. package/esm2020/ngx-hana-nameserver-history-viewer.mjs +5 -0
  3. package/esm2020/public-api.mjs +2 -0
  4. package/esm2020/src/nameserver-history-viewer/components/alert/alert.component.mjs +68 -0
  5. package/esm2020/src/nameserver-history-viewer/components/alert/alert.module.mjs +22 -0
  6. package/esm2020/src/nameserver-history-viewer/components/alert/index.mjs +3 -0
  7. package/esm2020/src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.mjs +112 -0
  8. package/esm2020/src/nameserver-history-viewer/components/file-drop-input/index.mjs +2 -0
  9. package/esm2020/src/nameserver-history-viewer/components/index.mjs +9 -0
  10. package/esm2020/src/nameserver-history-viewer/components/instruction/index.mjs +2 -0
  11. package/esm2020/src/nameserver-history-viewer/components/instruction/instruction.component.mjs +42 -0
  12. package/esm2020/src/nameserver-history-viewer/components/nameserver-history.component.mjs +550 -0
  13. package/esm2020/src/nameserver-history-viewer/components/port-selector/index.mjs +2 -0
  14. package/esm2020/src/nameserver-history-viewer/components/port-selector/port-selector.component.mjs +69 -0
  15. package/esm2020/src/nameserver-history-viewer/components/port-selector/port-selector.service.mjs +41 -0
  16. package/esm2020/src/nameserver-history-viewer/components/progress-bar/index.mjs +2 -0
  17. package/esm2020/src/nameserver-history-viewer/components/progress-bar/progress-bar.component.mjs +40 -0
  18. package/esm2020/src/nameserver-history-viewer/components/time-range-selector/index.mjs +2 -0
  19. package/esm2020/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.mjs +70 -0
  20. package/esm2020/src/nameserver-history-viewer/components/timezone-selector/index.mjs +2 -0
  21. package/esm2020/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.mjs +90 -0
  22. package/esm2020/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.mjs +49 -0
  23. package/esm2020/src/nameserver-history-viewer/index.mjs +3 -0
  24. package/esm2020/src/nameserver-history-viewer/nameserver-history.module.mjs +63 -0
  25. package/esm2020/src/nameserver-history-viewer/services/chart.service.mjs +323 -0
  26. package/esm2020/src/nameserver-history-viewer/services/file.service.mjs +390 -0
  27. package/esm2020/src/nameserver-history-viewer/services/index.mjs +4 -0
  28. package/esm2020/src/nameserver-history-viewer/services/ui.service.mjs +557 -0
  29. package/esm2020/src/nameserver-history-viewer/types/abort.types.mjs +6 -0
  30. package/esm2020/src/nameserver-history-viewer/types/alert.types.mjs +8 -0
  31. package/esm2020/src/nameserver-history-viewer/types/chart-content-data-item.types.mjs +2 -0
  32. package/esm2020/src/nameserver-history-viewer/types/chart-content-data.types.mjs +2 -0
  33. package/esm2020/src/nameserver-history-viewer/types/chart-content-header.types.mjs +2 -0
  34. package/esm2020/src/nameserver-history-viewer/types/chart-content-time.types.mjs +2 -0
  35. package/esm2020/src/nameserver-history-viewer/types/chart-content.types.mjs +2 -0
  36. package/esm2020/src/nameserver-history-viewer/types/color-rgba.types.mjs +2 -0
  37. package/esm2020/src/nameserver-history-viewer/types/html-element.type.mjs +9 -0
  38. package/esm2020/src/nameserver-history-viewer/types/index.mjs +28 -0
  39. package/esm2020/src/nameserver-history-viewer/types/item.types.mjs +14 -0
  40. package/esm2020/src/nameserver-history-viewer/types/legend-color.types.mjs +2 -0
  41. package/esm2020/src/nameserver-history-viewer/types/load-history-info-backup.types.mjs +2 -0
  42. package/esm2020/src/nameserver-history-viewer/types/load-history-info-columnstore.types.mjs +2 -0
  43. package/esm2020/src/nameserver-history-viewer/types/load-history-info-host.types.mjs +2 -0
  44. package/esm2020/src/nameserver-history-viewer/types/load-history-info-item.types.mjs +2 -0
  45. package/esm2020/src/nameserver-history-viewer/types/load-history-info-persistence.types.mjs +2 -0
  46. package/esm2020/src/nameserver-history-viewer/types/load-history-info-rowstore.types.mjs +2 -0
  47. package/esm2020/src/nameserver-history-viewer/types/load-history-info-server.types.mjs +2 -0
  48. package/esm2020/src/nameserver-history-viewer/types/load-history-info-session-admission-control.types.mjs +2 -0
  49. package/esm2020/src/nameserver-history-viewer/types/load-history-info-sql.types.mjs +2 -0
  50. package/esm2020/src/nameserver-history-viewer/types/load-history-info-sync-primitives.types.mjs +2 -0
  51. package/esm2020/src/nameserver-history-viewer/types/load-history-info-threads.types.mjs +2 -0
  52. package/esm2020/src/nameserver-history-viewer/types/load-history-info.types.mjs +2 -0
  53. package/esm2020/src/nameserver-history-viewer/types/port.types.mjs +2 -0
  54. package/esm2020/src/nameserver-history-viewer/types/scale-group.types.mjs +17 -0
  55. package/esm2020/src/nameserver-history-viewer/types/unit-category.types.mjs +10 -0
  56. package/esm2020/src/nameserver-history-viewer/types/unit.types.mjs +14 -0
  57. package/esm2020/src/nameserver-history-viewer/utils/chart-util.mjs +25 -0
  58. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/chartjs_ext.mjs +2 -0
  59. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/data_culling.mjs +57 -0
  60. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/data_mipmap.mjs +139 -0
  61. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/index.mjs +41 -0
  62. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.mjs +106 -0
  63. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/responsive_downsample_plugin.mjs +168 -0
  64. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/utils.mjs +114 -0
  65. package/esm2020/src/nameserver-history-viewer/utils/chartjs-zoom/chart.zoom.mjs +527 -0
  66. package/esm2020/src/nameserver-history-viewer/utils/chartjs-zoom/index.mjs +2 -0
  67. package/esm2020/src/nameserver-history-viewer/utils/file-util.mjs +154 -0
  68. package/esm2020/src/nameserver-history-viewer/utils/index.mjs +5 -0
  69. package/esm2020/src/nameserver-history-viewer/utils/time-util.mjs +101 -0
  70. package/esm2020/src/nameserver-history-viewer/utils/ui-util.mjs +162 -0
  71. package/fesm2015/{ngx-hana-nameserver-history-viewer.js → ngx-hana-nameserver-history-viewer.mjs} +971 -2679
  72. package/fesm2015/ngx-hana-nameserver-history-viewer.mjs.map +1 -0
  73. package/fesm2020/ngx-hana-nameserver-history-viewer.mjs +4081 -0
  74. package/fesm2020/ngx-hana-nameserver-history-viewer.mjs.map +1 -0
  75. package/ngx-hana-nameserver-history-viewer.d.ts +1 -1
  76. package/package.json +33 -57
  77. package/src/nameserver-history-viewer/components/alert/alert.component.d.ts +4 -1
  78. package/src/nameserver-history-viewer/components/alert/alert.module.d.ts +6 -0
  79. package/src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.d.ts +3 -0
  80. package/src/nameserver-history-viewer/components/instruction/instruction.component.d.ts +3 -0
  81. package/src/nameserver-history-viewer/components/nameserver-history.component.d.ts +33 -14
  82. package/src/nameserver-history-viewer/components/port-selector/port-selector.component.d.ts +4 -1
  83. package/src/nameserver-history-viewer/components/port-selector/port-selector.service.d.ts +3 -0
  84. package/src/nameserver-history-viewer/components/progress-bar/progress-bar.component.d.ts +3 -0
  85. package/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.d.ts +3 -0
  86. package/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.d.ts +3 -0
  87. package/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.d.ts +3 -0
  88. package/src/nameserver-history-viewer/index.d.ts +1 -0
  89. package/src/nameserver-history-viewer/nameserver-history.module.d.ts +17 -0
  90. package/src/nameserver-history-viewer/services/chart.service.d.ts +4 -1
  91. package/src/nameserver-history-viewer/services/file.service.d.ts +4 -0
  92. package/src/nameserver-history-viewer/services/ui.service.d.ts +5 -2
  93. package/src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.d.ts +1 -1
  94. package/src/nameserver-history-viewer/utils/file-util.d.ts +11 -0
  95. package/bundles/ngx-hana-nameserver-history-viewer.umd.js +0 -6735
  96. package/bundles/ngx-hana-nameserver-history-viewer.umd.js.map +0 -1
  97. package/bundles/ngx-hana-nameserver-history-viewer.umd.min.js +0 -2
  98. package/bundles/ngx-hana-nameserver-history-viewer.umd.min.js.map +0 -1
  99. package/esm2015/ngx-hana-nameserver-history-viewer.js +0 -10
  100. package/esm2015/public-api.js +0 -6
  101. package/esm2015/src/nameserver-history-viewer/components/alert/alert.component.js +0 -114
  102. package/esm2015/src/nameserver-history-viewer/components/alert/alert.module.js +0 -21
  103. package/esm2015/src/nameserver-history-viewer/components/alert/index.js +0 -7
  104. package/esm2015/src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.js +0 -141
  105. package/esm2015/src/nameserver-history-viewer/components/file-drop-input/index.js +0 -6
  106. package/esm2015/src/nameserver-history-viewer/components/index.js +0 -13
  107. package/esm2015/src/nameserver-history-viewer/components/instruction/index.js +0 -6
  108. package/esm2015/src/nameserver-history-viewer/components/instruction/instruction.component.js +0 -62
  109. package/esm2015/src/nameserver-history-viewer/components/nameserver-history.component.js +0 -868
  110. package/esm2015/src/nameserver-history-viewer/components/port-selector/index.js +0 -6
  111. package/esm2015/src/nameserver-history-viewer/components/port-selector/port-selector.component.js +0 -93
  112. package/esm2015/src/nameserver-history-viewer/components/port-selector/port-selector.service.js +0 -60
  113. package/esm2015/src/nameserver-history-viewer/components/progress-bar/index.js +0 -6
  114. package/esm2015/src/nameserver-history-viewer/components/progress-bar/progress-bar.component.js +0 -35
  115. package/esm2015/src/nameserver-history-viewer/components/time-range-selector/index.js +0 -6
  116. package/esm2015/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.js +0 -68
  117. package/esm2015/src/nameserver-history-viewer/components/timezone-selector/index.js +0 -6
  118. package/esm2015/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.js +0 -151
  119. package/esm2015/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.js +0 -80
  120. package/esm2015/src/nameserver-history-viewer/index.js +0 -6
  121. package/esm2015/src/nameserver-history-viewer/nameserver-history.module.js +0 -42
  122. package/esm2015/src/nameserver-history-viewer/services/chart.service.js +0 -504
  123. package/esm2015/src/nameserver-history-viewer/services/file.service.js +0 -487
  124. package/esm2015/src/nameserver-history-viewer/services/index.js +0 -8
  125. package/esm2015/src/nameserver-history-viewer/services/ui.service.js +0 -922
  126. package/esm2015/src/nameserver-history-viewer/types/abort.types.js +0 -13
  127. package/esm2015/src/nameserver-history-viewer/types/alert.types.js +0 -13
  128. package/esm2015/src/nameserver-history-viewer/types/chart-content-data-item.types.js +0 -15
  129. package/esm2015/src/nameserver-history-viewer/types/chart-content-data.types.js +0 -9
  130. package/esm2015/src/nameserver-history-viewer/types/chart-content-header.types.js +0 -15
  131. package/esm2015/src/nameserver-history-viewer/types/chart-content-time.types.js +0 -9
  132. package/esm2015/src/nameserver-history-viewer/types/chart-content.types.js +0 -21
  133. package/esm2015/src/nameserver-history-viewer/types/color-rgba.types.js +0 -19
  134. package/esm2015/src/nameserver-history-viewer/types/html-element.type.js +0 -19
  135. package/esm2015/src/nameserver-history-viewer/types/index.js +0 -32
  136. package/esm2015/src/nameserver-history-viewer/types/item.types.js +0 -19
  137. package/esm2015/src/nameserver-history-viewer/types/legend-color.types.js +0 -9
  138. package/esm2015/src/nameserver-history-viewer/types/load-history-info-backup.types.js +0 -19
  139. package/esm2015/src/nameserver-history-viewer/types/load-history-info-columnstore.types.js +0 -19
  140. package/esm2015/src/nameserver-history-viewer/types/load-history-info-host.types.js +0 -35
  141. package/esm2015/src/nameserver-history-viewer/types/load-history-info-item.types.js +0 -31
  142. package/esm2015/src/nameserver-history-viewer/types/load-history-info-persistence.types.js +0 -27
  143. package/esm2015/src/nameserver-history-viewer/types/load-history-info-rowstore.types.js +0 -15
  144. package/esm2015/src/nameserver-history-viewer/types/load-history-info-server.types.js +0 -25
  145. package/esm2015/src/nameserver-history-viewer/types/load-history-info-session-admission-control.types.js +0 -25
  146. package/esm2015/src/nameserver-history-viewer/types/load-history-info-sql.types.js +0 -37
  147. package/esm2015/src/nameserver-history-viewer/types/load-history-info-sync-primitives.types.js +0 -15
  148. package/esm2015/src/nameserver-history-viewer/types/load-history-info-threads.types.js +0 -23
  149. package/esm2015/src/nameserver-history-viewer/types/load-history-info.types.js +0 -31
  150. package/esm2015/src/nameserver-history-viewer/types/port.types.js +0 -17
  151. package/esm2015/src/nameserver-history-viewer/types/scale-group.types.js +0 -35
  152. package/esm2015/src/nameserver-history-viewer/types/unit-category.types.js +0 -21
  153. package/esm2015/src/nameserver-history-viewer/types/unit.types.js +0 -19
  154. package/esm2015/src/nameserver-history-viewer/utils/chart-util.js +0 -38
  155. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/chartjs_ext.js +0 -100
  156. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/data_culling.js +0 -88
  157. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/data_mipmap.js +0 -222
  158. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/index.js +0 -46
  159. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.js +0 -166
  160. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/responsive_downsample_plugin.js +0 -311
  161. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/utils.js +0 -130
  162. package/esm2015/src/nameserver-history-viewer/utils/chartjs-zoom/chart.zoom.js +0 -827
  163. package/esm2015/src/nameserver-history-viewer/utils/chartjs-zoom/index.js +0 -6
  164. package/esm2015/src/nameserver-history-viewer/utils/file-util.js +0 -162
  165. package/esm2015/src/nameserver-history-viewer/utils/index.js +0 -9
  166. package/esm2015/src/nameserver-history-viewer/utils/time-util.js +0 -139
  167. package/esm2015/src/nameserver-history-viewer/utils/ui-util.js +0 -239
  168. package/esm5/ngx-hana-nameserver-history-viewer.js +0 -10
  169. package/esm5/public-api.js +0 -6
  170. package/esm5/src/nameserver-history-viewer/components/alert/alert.component.js +0 -146
  171. package/esm5/src/nameserver-history-viewer/components/alert/alert.module.js +0 -25
  172. package/esm5/src/nameserver-history-viewer/components/alert/index.js +0 -7
  173. package/esm5/src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.js +0 -155
  174. package/esm5/src/nameserver-history-viewer/components/file-drop-input/index.js +0 -6
  175. package/esm5/src/nameserver-history-viewer/components/index.js +0 -13
  176. package/esm5/src/nameserver-history-viewer/components/instruction/index.js +0 -6
  177. package/esm5/src/nameserver-history-viewer/components/instruction/instruction.component.js +0 -67
  178. package/esm5/src/nameserver-history-viewer/components/nameserver-history.component.js +0 -1116
  179. package/esm5/src/nameserver-history-viewer/components/port-selector/index.js +0 -6
  180. package/esm5/src/nameserver-history-viewer/components/port-selector/port-selector.component.js +0 -93
  181. package/esm5/src/nameserver-history-viewer/components/port-selector/port-selector.service.js +0 -85
  182. package/esm5/src/nameserver-history-viewer/components/progress-bar/index.js +0 -6
  183. package/esm5/src/nameserver-history-viewer/components/progress-bar/progress-bar.component.js +0 -26
  184. package/esm5/src/nameserver-history-viewer/components/time-range-selector/index.js +0 -6
  185. package/esm5/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.js +0 -58
  186. package/esm5/src/nameserver-history-viewer/components/timezone-selector/index.js +0 -6
  187. package/esm5/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.js +0 -180
  188. package/esm5/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.js +0 -110
  189. package/esm5/src/nameserver-history-viewer/index.js +0 -6
  190. package/esm5/src/nameserver-history-viewer/nameserver-history.module.js +0 -46
  191. package/esm5/src/nameserver-history-viewer/services/chart.service.js +0 -659
  192. package/esm5/src/nameserver-history-viewer/services/file.service.js +0 -606
  193. package/esm5/src/nameserver-history-viewer/services/index.js +0 -8
  194. package/esm5/src/nameserver-history-viewer/services/ui.service.js +0 -1141
  195. package/esm5/src/nameserver-history-viewer/types/abort.types.js +0 -13
  196. package/esm5/src/nameserver-history-viewer/types/alert.types.js +0 -13
  197. package/esm5/src/nameserver-history-viewer/types/chart-content-data-item.types.js +0 -15
  198. package/esm5/src/nameserver-history-viewer/types/chart-content-data.types.js +0 -9
  199. package/esm5/src/nameserver-history-viewer/types/chart-content-header.types.js +0 -15
  200. package/esm5/src/nameserver-history-viewer/types/chart-content-time.types.js +0 -9
  201. package/esm5/src/nameserver-history-viewer/types/chart-content.types.js +0 -21
  202. package/esm5/src/nameserver-history-viewer/types/color-rgba.types.js +0 -19
  203. package/esm5/src/nameserver-history-viewer/types/html-element.type.js +0 -19
  204. package/esm5/src/nameserver-history-viewer/types/index.js +0 -32
  205. package/esm5/src/nameserver-history-viewer/types/item.types.js +0 -19
  206. package/esm5/src/nameserver-history-viewer/types/legend-color.types.js +0 -9
  207. package/esm5/src/nameserver-history-viewer/types/load-history-info-backup.types.js +0 -19
  208. package/esm5/src/nameserver-history-viewer/types/load-history-info-columnstore.types.js +0 -19
  209. package/esm5/src/nameserver-history-viewer/types/load-history-info-host.types.js +0 -35
  210. package/esm5/src/nameserver-history-viewer/types/load-history-info-item.types.js +0 -31
  211. package/esm5/src/nameserver-history-viewer/types/load-history-info-persistence.types.js +0 -27
  212. package/esm5/src/nameserver-history-viewer/types/load-history-info-rowstore.types.js +0 -15
  213. package/esm5/src/nameserver-history-viewer/types/load-history-info-server.types.js +0 -25
  214. package/esm5/src/nameserver-history-viewer/types/load-history-info-session-admission-control.types.js +0 -25
  215. package/esm5/src/nameserver-history-viewer/types/load-history-info-sql.types.js +0 -37
  216. package/esm5/src/nameserver-history-viewer/types/load-history-info-sync-primitives.types.js +0 -15
  217. package/esm5/src/nameserver-history-viewer/types/load-history-info-threads.types.js +0 -23
  218. package/esm5/src/nameserver-history-viewer/types/load-history-info.types.js +0 -31
  219. package/esm5/src/nameserver-history-viewer/types/port.types.js +0 -17
  220. package/esm5/src/nameserver-history-viewer/types/scale-group.types.js +0 -35
  221. package/esm5/src/nameserver-history-viewer/types/unit-category.types.js +0 -21
  222. package/esm5/src/nameserver-history-viewer/types/unit.types.js +0 -19
  223. package/esm5/src/nameserver-history-viewer/utils/chart-util.js +0 -39
  224. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/chartjs_ext.js +0 -100
  225. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/data_culling.js +0 -88
  226. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/data_mipmap.js +0 -316
  227. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/index.js +0 -46
  228. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.js +0 -240
  229. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/responsive_downsample_plugin.js +0 -366
  230. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/utils.js +0 -142
  231. package/esm5/src/nameserver-history-viewer/utils/chartjs-zoom/chart.zoom.js +0 -827
  232. package/esm5/src/nameserver-history-viewer/utils/chartjs-zoom/index.js +0 -6
  233. package/esm5/src/nameserver-history-viewer/utils/file-util.js +0 -163
  234. package/esm5/src/nameserver-history-viewer/utils/index.js +0 -9
  235. package/esm5/src/nameserver-history-viewer/utils/time-util.js +0 -139
  236. package/esm5/src/nameserver-history-viewer/utils/ui-util.js +0 -241
  237. package/fesm2015/ngx-hana-nameserver-history-viewer.js.map +0 -1
  238. package/fesm5/ngx-hana-nameserver-history-viewer.js +0 -6861
  239. package/fesm5/ngx-hana-nameserver-history-viewer.js.map +0 -1
  240. package/ngx-hana-nameserver-history-viewer-1.1.2.tgz +0 -0
  241. package/ngx-hana-nameserver-history-viewer.metadata.json +0 -1
@@ -1,46 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- /**
6
- * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample
7
- * for controlling the radius of point.
8
- *
9
- * MIT License
10
- * Copyright (c) 2018 3D Content Logistics
11
- *
12
- * Permission is hereby granted, free of charge, to any person obtaining a copy
13
- * of this software and associated documentation files (the "Software"), to deal
14
- * in the Software without restriction, including without limitation the rights
15
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
- * copies of the Software, and to permit persons to whom the Software is
17
- * furnished to do so, subject to the following conditions:
18
- * The above copyright notice and this permission notice shall be included in all
19
- * copies or substantial portions of the Software.
20
- *
21
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
- * SOFTWARE.
28
- */
29
- import * as chartjs from 'chart.js';
30
- /** @type {?} */
31
- var Chart = window && ((/** @type {?} */ (window))).Chart ? ((/** @type {?} */ (window))).Chart : chartjs.Chart;
32
- import { ResponsiveDownsamplePlugin } from './responsive_downsample_plugin';
33
- export { ResponsiveDownsamplePlugin } from './responsive_downsample_plugin';
34
- // comment this because this plugin is only used internally, merge ChartOptions interface is unnecessary
35
- // and causes build error: "error TS2665: Invalid module name in augmentation.".
36
- // // Extend chart.js options interface
37
- // declare module 'chart.js' {
38
- // interface ChartOptions {
39
- // /**
40
- // * Options for responsive downsample plugin
41
- // */
42
- // responsiveDownsample?: ResponsiveDownsamplePluginOptions;
43
- // }
44
- // }
45
- Chart.pluginService.register(new ResponsiveDownsamplePlugin());
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtaGFuYS1uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyLyIsInNvdXJjZXMiOlsic3JjL25hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXIvdXRpbHMvY2hhcnRqcy1kb3duc2FtcGxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3QkEsT0FBTyxLQUFLLE9BQU8sTUFBTSxVQUFVLENBQUM7O0lBQzlCLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBQSxNQUFNLEVBQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxNQUFNLEVBQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUs7QUFFckYsT0FBTyxFQUFFLDBCQUEwQixFQUFxQyxNQUFNLGdDQUFnQyxDQUFDO0FBQy9HLE9BQU8sRUFBRSwwQkFBMEIsRUFBcUMsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7O0FBZS9HLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksMEJBQTBCLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFRoaXMgcGx1Z2luIGlzIGFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tLzNkY2wvY2hhcnRqcy1wbHVnaW4tcmVzcG9uc2l2ZS1kb3duc2FtcGxlXHJcbiAqIGZvciBjb250cm9sbGluZyB0aGUgcmFkaXVzIG9mIHBvaW50LlxyXG4gKlxyXG4gKiBNSVQgTGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggM0QgQ29udGVudCBMb2dpc3RpY3NcclxuICpcclxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxyXG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXHJcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcclxuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxyXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcclxuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcclxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXHJcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXHJcbiAqXHJcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcclxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXHJcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxyXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXHJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXHJcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXHJcbiAqIFNPRlRXQVJFLlxyXG4gKi9cclxuaW1wb3J0ICogYXMgY2hhcnRqcyBmcm9tICdjaGFydC5qcyc7XHJcbmNvbnN0IENoYXJ0ID0gd2luZG93ICYmICh3aW5kb3cgYXMgYW55KS5DaGFydCA/ICh3aW5kb3cgYXMgYW55KS5DaGFydCA6IGNoYXJ0anMuQ2hhcnQ7XHJcblxyXG5pbXBvcnQgeyBSZXNwb25zaXZlRG93bnNhbXBsZVBsdWdpbiwgUmVzcG9uc2l2ZURvd25zYW1wbGVQbHVnaW5PcHRpb25zIH0gZnJvbSAnLi9yZXNwb25zaXZlX2Rvd25zYW1wbGVfcGx1Z2luJztcclxuZXhwb3J0IHsgUmVzcG9uc2l2ZURvd25zYW1wbGVQbHVnaW4sIFJlc3BvbnNpdmVEb3duc2FtcGxlUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4vcmVzcG9uc2l2ZV9kb3duc2FtcGxlX3BsdWdpbic7XHJcblxyXG5cclxuLy8gY29tbWVudCB0aGlzIGJlY2F1c2UgdGhpcyBwbHVnaW4gaXMgb25seSB1c2VkIGludGVybmFsbHksIG1lcmdlIENoYXJ0T3B0aW9ucyBpbnRlcmZhY2UgaXMgdW5uZWNlc3NhcnlcclxuLy8gYW5kIGNhdXNlcyBidWlsZCBlcnJvcjogXCJlcnJvciBUUzI2NjU6IEludmFsaWQgbW9kdWxlIG5hbWUgaW4gYXVnbWVudGF0aW9uLlwiLlxyXG4vLyAvLyBFeHRlbmQgY2hhcnQuanMgb3B0aW9ucyBpbnRlcmZhY2VcclxuLy8gZGVjbGFyZSBtb2R1bGUgJ2NoYXJ0LmpzJyB7XHJcbi8vICAgICBpbnRlcmZhY2UgQ2hhcnRPcHRpb25zIHtcclxuLy8gICAgICAgICAvKipcclxuLy8gICAgICAgICAgKiBPcHRpb25zIGZvciByZXNwb25zaXZlIGRvd25zYW1wbGUgcGx1Z2luXHJcbi8vICAgICAgICAgICovXHJcbi8vICAgICAgICAgcmVzcG9uc2l2ZURvd25zYW1wbGU/OiBSZXNwb25zaXZlRG93bnNhbXBsZVBsdWdpbk9wdGlvbnM7XHJcbi8vICAgICB9XHJcbi8vIH1cclxuXHJcbkNoYXJ0LnBsdWdpblNlcnZpY2UucmVnaXN0ZXIobmV3IFJlc3BvbnNpdmVEb3duc2FtcGxlUGx1Z2luKCkpO1xyXG4iXX0=
@@ -1,240 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import * as tslib_1 from "tslib";
6
- import * as utils from './utils';
7
- import { DataMipmap } from './data_mipmap';
8
- /**
9
- * A mipmap data structure that uses Largest-Triangle-Three-Buckets algorithm to downsample data
10
- */
11
- var /**
12
- * A mipmap data structure that uses Largest-Triangle-Three-Buckets algorithm to downsample data
13
- */
14
- LTTBDataMipmap = /** @class */ (function (_super) {
15
- tslib_1.__extends(LTTBDataMipmap, _super);
16
- function LTTBDataMipmap() {
17
- return _super !== null && _super.apply(this, arguments) || this;
18
- }
19
- /**
20
- * @param {?} resolution
21
- * @return {?}
22
- */
23
- LTTBDataMipmap.prototype.getMipMapIndexForResolution = /**
24
- * @param {?} resolution
25
- * @return {?}
26
- */
27
- function (resolution) {
28
- if (utils.isNil(resolution)) {
29
- return 0;
30
- }
31
- /** @type {?} */
32
- var index = utils.findIndexInArray(this.resolutions, (/**
33
- * @param {?} levelResolution
34
- * @return {?}
35
- */
36
- function (levelResolution) { return levelResolution >= resolution; }));
37
- if (index === -1) {
38
- // use smallest mipmap as fallback
39
- index = this.resolutions.length - 1;
40
- }
41
- return index;
42
- };
43
- /**
44
- * @protected
45
- * @return {?}
46
- */
47
- LTTBDataMipmap.prototype.createMipMap = /**
48
- * @protected
49
- * @return {?}
50
- */
51
- function () {
52
- var _this = this;
53
- _super.prototype.createMipMap.call(this);
54
- this.resolutions = this.mipMaps.map((/**
55
- * @param {?} level
56
- * @return {?}
57
- */
58
- function (level) { return _this.computeAverageResolution(level); }));
59
- };
60
- /**
61
- * This method is adapted from: https://github.com/sveinn-steinarsson/flot-downsample
62
- *
63
- * The MIT License
64
- * Copyright (c) 2013 by Sveinn Steinarsson
65
- * Permission is hereby granted, free of charge, to any person obtaining a copy
66
- * of this software and associated documentation files (the "Software"), to deal
67
- * in the Software without restriction, including without limitation the rights
68
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
69
- * copies of the Software, and to permit persons to whom the Software is
70
- * furnished to do so, subject to the following conditions:
71
- * The above copyright notice and this permission notice shall be included in
72
- * all copies or substantial portions of the Software.
73
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
74
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
75
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
76
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
77
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
78
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
79
- * THE SOFTWARE.
80
- */
81
- /**
82
- * This method is adapted from: https://github.com/sveinn-steinarsson/flot-downsample
83
- *
84
- * The MIT License
85
- * Copyright (c) 2013 by Sveinn Steinarsson
86
- * Permission is hereby granted, free of charge, to any person obtaining a copy
87
- * of this software and associated documentation files (the "Software"), to deal
88
- * in the Software without restriction, including without limitation the rights
89
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
90
- * copies of the Software, and to permit persons to whom the Software is
91
- * furnished to do so, subject to the following conditions:
92
- * The above copyright notice and this permission notice shall be included in
93
- * all copies or substantial portions of the Software.
94
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
95
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
96
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
97
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
98
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
99
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
100
- * THE SOFTWARE.
101
- * @protected
102
- * @param {?} data
103
- * @param {?} targetResolution
104
- * @param {?} targetLength
105
- * @return {?}
106
- */
107
- LTTBDataMipmap.prototype.downsampleToResolution = /**
108
- * This method is adapted from: https://github.com/sveinn-steinarsson/flot-downsample
109
- *
110
- * The MIT License
111
- * Copyright (c) 2013 by Sveinn Steinarsson
112
- * Permission is hereby granted, free of charge, to any person obtaining a copy
113
- * of this software and associated documentation files (the "Software"), to deal
114
- * in the Software without restriction, including without limitation the rights
115
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
116
- * copies of the Software, and to permit persons to whom the Software is
117
- * furnished to do so, subject to the following conditions:
118
- * The above copyright notice and this permission notice shall be included in
119
- * all copies or substantial portions of the Software.
120
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
121
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
122
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
123
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
124
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
125
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
126
- * THE SOFTWARE.
127
- * @protected
128
- * @param {?} data
129
- * @param {?} targetResolution
130
- * @param {?} targetLength
131
- * @return {?}
132
- */
133
- function (data, targetResolution, targetLength) {
134
- /** @type {?} */
135
- var dataLength = data.length;
136
- if (targetLength >= dataLength || targetLength === 0) {
137
- return data; // data has target size
138
- }
139
- /** @type {?} */
140
- var output = [];
141
- // bucket size, leave room for start and end data points
142
- /** @type {?} */
143
- var bucksetSize = (dataLength - 2) / (targetLength - 2);
144
- /** @type {?} */
145
- var a = 0;
146
- // initially a is the first point in the triangle
147
- /** @type {?} */
148
- var maxAreaPoint;
149
- /** @type {?} */
150
- var maxArea;
151
- /** @type {?} */
152
- var area;
153
- /** @type {?} */
154
- var nextA;
155
- // always add the first point
156
- output.push(data[a]);
157
- for (var i = 0; i < targetLength - 2; ++i) {
158
- // Calculate point average for next bucket (containing c)
159
- /** @type {?} */
160
- var avgX = 0;
161
- /** @type {?} */
162
- var avgY = 0;
163
- /** @type {?} */
164
- var avgRangeStart = Math.floor((i + 1) * bucksetSize) + 1;
165
- /** @type {?} */
166
- var avgRangeEnd = Math.floor((i + 2) * bucksetSize) + 1;
167
- avgRangeEnd = avgRangeEnd < dataLength ? avgRangeEnd : dataLength;
168
- /** @type {?} */
169
- var avgRangeLength = avgRangeEnd - avgRangeStart;
170
- for (; avgRangeStart < avgRangeEnd; avgRangeStart++) {
171
- avgX += this.getTime(data[avgRangeStart]);
172
- avgY += (/** @type {?} */ (data[avgRangeStart].y)) * 1;
173
- }
174
- avgX /= avgRangeLength;
175
- avgY /= avgRangeLength;
176
- // Get the range for this bucket
177
- /** @type {?} */
178
- var rangeOffs = Math.floor((i + 0) * bucksetSize) + 1;
179
- /** @type {?} */
180
- var rangeTo = Math.floor((i + 1) * bucksetSize) + 1;
181
- // Point a
182
- /** @type {?} */
183
- var pointA = data[a];
184
- /** @type {?} */
185
- var pointAX = this.getTime(pointA);
186
- /** @type {?} */
187
- var pointAY = (/** @type {?} */ (pointA.y)) * 1;
188
- maxArea = area = -1;
189
- for (; rangeOffs < rangeTo; rangeOffs++) {
190
- // Calculate triangle area over three buckets
191
- area = Math.abs((pointAX - avgX) * ((/** @type {?} */ (data[rangeOffs].y)) - pointAY) -
192
- (pointAX - this.getTime(data[rangeOffs])) * (avgY - pointAY)) * 0.5;
193
- if (area > maxArea) {
194
- maxArea = area;
195
- maxAreaPoint = data[rangeOffs];
196
- nextA = rangeOffs; // Next a is this b
197
- }
198
- }
199
- output.push(maxAreaPoint); // Pick this point from the bucket
200
- a = nextA; // This a is the next a (chosen b)
201
- }
202
- output.push(data[dataLength - 1]); // Always add last
203
- return output;
204
- };
205
- /**
206
- * @protected
207
- * @param {?} data
208
- * @return {?}
209
- */
210
- LTTBDataMipmap.prototype.computeAverageResolution = /**
211
- * @protected
212
- * @param {?} data
213
- * @return {?}
214
- */
215
- function (data) {
216
- /** @type {?} */
217
- var timeDistances = 0;
218
- for (var i = 0, end = this.originalData.length - 1; i < end; ++i) {
219
- /** @type {?} */
220
- var current = this.originalData[i];
221
- /** @type {?} */
222
- var next = this.originalData[i + 1];
223
- timeDistances += Math.abs(this.getTime(current) - this.getTime(next));
224
- }
225
- return timeDistances / (data.length - 1);
226
- };
227
- return LTTBDataMipmap;
228
- }(DataMipmap));
229
- /**
230
- * A mipmap data structure that uses Largest-Triangle-Three-Buckets algorithm to downsample data
231
- */
232
- export { LTTBDataMipmap };
233
- if (false) {
234
- /**
235
- * @type {?}
236
- * @protected
237
- */
238
- LTTBDataMipmap.prototype.resolutions;
239
- }
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHR0Yl9kYXRhX21pcG1hcC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1oYW5hLW5hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXIvIiwic291cmNlcyI6WyJzcmMvbmFtZXNlcnZlci1oaXN0b3J5LXZpZXdlci91dGlscy9jaGFydGpzLWRvd25zYW1wbGUvbHR0Yl9kYXRhX21pcG1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXlCQSxPQUFPLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBSzNDOzs7O0lBQW9DLDBDQUFVO0lBQTlDOztJQThIQSxDQUFDOzs7OztJQTNIRyxvREFBMkI7Ozs7SUFBM0IsVUFBNEIsVUFBa0I7UUFDMUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUM7U0FBRTs7WUFFdEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVzs7OztRQUFFLFVBQUMsZUFBZSxJQUFLLE9BQUEsZUFBZSxJQUFJLFVBQVUsRUFBN0IsQ0FBNkIsRUFBQztRQUN4RyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNkLGtDQUFrQztZQUNsQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7Ozs7SUFFUyxxQ0FBWTs7OztJQUF0QjtRQUFBLGlCQUdDO1FBRkcsaUJBQU0sWUFBWSxXQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7Ozs7UUFBQyxVQUFDLEtBQUssSUFBSyxPQUFBLEtBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsRUFBcEMsQ0FBb0MsRUFBQyxDQUFDO0lBQ3pGLENB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O0lBN0hHLHFDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUaGlzIHBsdWdpbiBpcyBhZGFwdGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS8zZGNsL2NoYXJ0anMtcGx1Z2luLXJlc3BvbnNpdmUtZG93bnNhbXBsZVxyXG4gKiBmb3IgY29udHJvbGxpbmcgdGhlIHJhZGl1cyBvZiBwb2ludC5cclxuICpcclxuICogTUlUIExpY2Vuc2VcclxuICogQ29weXJpZ2h0IChjKSAyMDE4IDNEIENvbnRlbnQgTG9naXN0aWNzXHJcbiAqXHJcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcclxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxyXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXHJcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcclxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXHJcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XHJcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxyXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxyXG4gKlxyXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXHJcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxyXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcclxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxyXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxyXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxyXG4gKiBTT0ZUV0FSRS5cclxuICovXHJcbmltcG9ydCB7IENoYXJ0UG9pbnQgfSBmcm9tICdjaGFydC5qcyc7XHJcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgeyBEYXRhTWlwbWFwIH0gZnJvbSAnLi9kYXRhX21pcG1hcCc7XHJcblxyXG4vKipcclxuICogQSBtaXBtYXAgZGF0YSBzdHJ1Y3R1cmUgdGhhdCB1c2VzIExhcmdlc3QtVHJpYW5nbGUtVGhyZWUtQnVja2V0cyBhbGdvcml0aG0gdG8gZG93bnNhbXBsZSBkYXRhXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTFRUQkRhdGFNaXBtYXAgZXh0ZW5kcyBEYXRhTWlwbWFwIHtcclxuICAgIHByb3RlY3RlZCByZXNvbHV0aW9uczogbnVtYmVyW107XHJcblxyXG4gICAgZ2V0TWlwTWFwSW5kZXhGb3JSZXNvbHV0aW9uKHJlc29sdXRpb246IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHV0aWxzLmlzTmlsKHJlc29sdXRpb24pKSB7IHJldHVybiAwOyB9XHJcblxyXG4gICAgICAgIGxldCBpbmRleCA9IHV0aWxzLmZpbmRJbmRleEluQXJyYXkodGhpcy5yZXNvbHV0aW9ucywgKGxldmVsUmVzb2x1dGlvbikgPT4gbGV2ZWxSZXNvbHV0aW9uID49IHJlc29sdXRpb24pO1xyXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgLy8gdXNlIHNtYWxsZXN0IG1pcG1hcCBhcyBmYWxsYmFja1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMucmVzb2x1dGlvbnMubGVuZ3RoIC0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlTWlwTWFwKCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLmNyZWF0ZU1pcE1hcCgpO1xyXG4gICAgICAgIHRoaXMucmVzb2x1dGlvbnMgPSB0aGlzLm1pcE1hcHMubWFwKChsZXZlbCkgPT4gdGhpcy5jb21wdXRlQXZlcmFnZVJlc29sdXRpb24obGV2ZWwpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3N2ZWlubi1zdGVpbmFyc3Nvbi9mbG90LWRvd25zYW1wbGVcclxuICAgICAqXHJcbiAgICAgKiBUaGUgTUlUIExpY2Vuc2VcclxuICAgICAqIENvcHlyaWdodCAoYykgMjAxMyBieSBTdmVpbm4gU3RlaW5hcnNzb25cclxuICAgICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcclxuICAgICAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcclxuICAgICAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcclxuICAgICAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcclxuICAgICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xyXG4gICAgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcclxuICAgICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXHJcbiAgICAgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICAgICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcclxuICAgICAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxyXG4gICAgICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXHJcbiAgICAgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXHJcbiAgICAgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxyXG4gICAgICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxyXG4gICAgICogVEhFIFNPRlRXQVJFLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZG93bnNhbXBsZVRvUmVzb2x1dGlvbihcclxuICAgICAgICBkYXRhOiBDaGFydFBvaW50W10sXHJcbiAgICAgICAgdGFyZ2V0UmVzb2x1dGlvbjogbnVtYmVyLFxyXG4gICAgICAgIHRhcmdldExlbmd0aDogbnVtYmVyXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHRhcmdldExlbmd0aCA+PSBkYXRhTGVuZ3RoIHx8IHRhcmdldExlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTsgLy8gZGF0YSBoYXMgdGFyZ2V0IHNpemVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG91dHB1dDogQ2hhcnRQb2ludFtdID0gW107XHJcblxyXG4gICAgICAgIC8vIGJ1Y2tldCBzaXplLCBsZWF2ZSByb29tIGZvciBzdGFydCBhbmQgZW5kIGRhdGEgcG9pbnRzXHJcbiAgICAgICAgY29uc3QgYnVja3NldFNpemUgPSAoZGF0YUxlbmd0aCAtIDIpIC8gKHRhcmdldExlbmd0aCAtIDIpO1xyXG5cclxuICAgICAgICBsZXQgYSA9IDA7ICAvLyBpbml0aWFsbHkgYSBpcyB0aGUgZmlyc3QgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlXHJcbiAgICAgICAgbGV0IG1heEFyZWFQb2ludDogQ2hhcnRQb2ludDtcclxuICAgICAgICBsZXQgbWF4QXJlYTogbnVtYmVyO1xyXG4gICAgICAgIGxldCBhcmVhOiBudW1iZXI7XHJcbiAgICAgICAgbGV0IG5leHRBOiBudW1iZXI7XHJcblxyXG4gICAgICAgIC8vIGFsd2F5cyBhZGQgdGhlIGZpcnN0IHBvaW50XHJcbiAgICAgICAgb3V0cHV0LnB1c2goZGF0YVthXSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFyZ2V0TGVuZ3RoIC0gMjsgKytpKSB7XHJcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwb2ludCBhdmVyYWdlIGZvciBuZXh0IGJ1Y2tldCAoY29udGFpbmluZyBjKVxyXG4gICAgICAgICAgICBsZXQgYXZnWCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBhdmdZID0gMDtcclxuICAgICAgICAgICAgbGV0IGF2Z1JhbmdlU3RhcnQgPSBNYXRoLmZsb29yKChpICsgMSkgKiBidWNrc2V0U2l6ZSkgKyAxO1xyXG4gICAgICAgICAgICBsZXQgYXZnUmFuZ2VFbmQgPSBNYXRoLmZsb29yKChpICsgMikgKiBidWNrc2V0U2l6ZSkgKyAxO1xyXG4gICAgICAgICAgICBhdmdSYW5nZUVuZCA9IGF2Z1JhbmdlRW5kIDwgZGF0YUxlbmd0aCA/IGF2Z1JhbmdlRW5kIDogZGF0YUxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGF2Z1JhbmdlTGVuZ3RoID0gYXZnUmFuZ2VFbmQgLSBhdmdSYW5nZVN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGF2Z1JhbmdlU3RhcnQgPCBhdmdSYW5nZUVuZDsgYXZnUmFuZ2VTdGFydCsrKSB7XHJcbiAgICAgICAgICAgICAgICBhdmdYICs9IHRoaXMuZ2V0VGltZShkYXRhW2F2Z1JhbmdlU3RhcnRdKTtcclxuICAgICAgICAgICAgICAgIGF2Z1kgKz0gZGF0YVthdmdSYW5nZVN0YXJ0XS55IGFzIG51bWJlciAqIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXZnWCAvPSBhdmdSYW5nZUxlbmd0aDtcclxuICAgICAgICAgICAgYXZnWSAvPSBhdmdSYW5nZUxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB0aGUgcmFuZ2UgZm9yIHRoaXMgYnVja2V0XHJcbiAgICAgICAgICAgIGxldCByYW5nZU9mZnMgPSBNYXRoLmZsb29yKChpICsgMCkgKiBidWNrc2V0U2l6ZSkgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZVRvID0gTWF0aC5mbG9vcigoaSArIDEpICogYnVja3NldFNpemUpICsgMTtcclxuXHJcbiAgICAgICAgICAgIC8vIFBvaW50IGFcclxuICAgICAgICAgICAgY29uc3QgcG9pbnRBID0gZGF0YVthXTtcclxuICAgICAgICAgICAgY29uc3QgcG9pbnRBWCA9IHRoaXMuZ2V0VGltZShwb2ludEEpO1xyXG4gICAgICAgICAgICBjb25zdCBwb2ludEFZID0gcG9pbnRBLnkgYXMgbnVtYmVyICogMTtcclxuXHJcbiAgICAgICAgICAgIG1heEFyZWEgPSBhcmVhID0gLTE7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgcmFuZ2VPZmZzIDwgcmFuZ2VUbzsgcmFuZ2VPZmZzKyspIHtcclxuICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0cmlhbmdsZSBhcmVhIG92ZXIgdGhyZWUgYnVja2V0c1xyXG4gICAgICAgICAgICAgICAgYXJlYSA9IE1hdGguYWJzKChwb2ludEFYIC0gYXZnWCkgKiAoZGF0YVtyYW5nZU9mZnNdLnkgYXMgbnVtYmVyIC0gcG9pbnRBWSkgLVxyXG4gICAgICAgICAgICAgICAgICAgIChwb2ludEFYIC0gdGhpcy5nZXRUaW1lKGRhdGFbcmFuZ2VPZmZzXSkpICogKGF2Z1kgLSBwb2ludEFZKVxyXG4gICAgICAgICAgICAgICAgKSAqIDAuNTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXJlYSA+IG1heEFyZWEpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXhBcmVhID0gYXJlYTtcclxuICAgICAgICAgICAgICAgICAgICBtYXhBcmVhUG9pbnQgPSBkYXRhW3JhbmdlT2Zmc107XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dEEgPSByYW5nZU9mZnM7IC8vIE5leHQgYSBpcyB0aGlzIGJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb3V0cHV0LnB1c2gobWF4QXJlYVBvaW50KTsgLy8gUGljayB0aGlzIHBvaW50IGZyb20gdGhlIGJ1Y2tldFxyXG4gICAgICAgICAgICBhID0gbmV4dEE7IC8vIFRoaXMgYSBpcyB0aGUgbmV4dCBhIChjaG9zZW4gYilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG91dHB1dC5wdXNoKGRhdGFbZGF0YUxlbmd0aCAtIDFdKTsgLy8gQWx3YXlzIGFkZCBsYXN0XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbXB1dGVBdmVyYWdlUmVzb2x1dGlvbihkYXRhOiBDaGFydFBvaW50W10pOiBudW1iZXIge1xyXG4gICAgICAgIGxldCB0aW1lRGlzdGFuY2VzID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGVuZCA9IHRoaXMub3JpZ2luYWxEYXRhLmxlbmd0aCAtIDE7IGkgPCBlbmQ7ICsraSkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5vcmlnaW5hbERhdGFbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLm9yaWdpbmFsRGF0YVtpICsgMV07XHJcblxyXG4gICAgICAgICAgICB0aW1lRGlzdGFuY2VzICs9IE1hdGguYWJzKHRoaXMuZ2V0VGltZShjdXJyZW50KSAtIHRoaXMuZ2V0VGltZShuZXh0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aW1lRGlzdGFuY2VzIC8gKGRhdGEubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcbn1cclxuIl19