@simpleangularcontrols/sac-common 16.0.0-rc.1 → 16.0.0-rc.11

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 (283) hide show
  1. package/README.md +8 -16
  2. package/common/basedatetimecontrol.d.ts +116 -30
  3. package/common/basedatetimecontrol.d.ts.map +1 -1
  4. package/common/baseinputcontrol.d.ts +9 -13
  5. package/common/baseinputcontrol.d.ts.map +1 -1
  6. package/common/basemodelcontrol.d.ts +168 -85
  7. package/common/basemodelcontrol.d.ts.map +1 -1
  8. package/common/baseuploadcontrol.d.ts +136 -141
  9. package/common/baseuploadcontrol.d.ts.map +1 -1
  10. package/components/browser/browser.d.ts +11 -6
  11. package/components/browser/browser.d.ts.map +1 -1
  12. package/controls/buttons/button.d.ts +23 -22
  13. package/controls/buttons/button.d.ts.map +1 -1
  14. package/controls/checkbox/checkbox.d.ts +18 -5
  15. package/controls/checkbox/checkbox.d.ts.map +1 -1
  16. package/controls/checkbox/radiobutton.d.ts +68 -24
  17. package/controls/checkbox/radiobutton.d.ts.map +1 -1
  18. package/controls/checkbox/radiobuttons.d.ts +21 -20
  19. package/controls/checkbox/radiobuttons.d.ts.map +1 -1
  20. package/controls/confirm/confirm.button.d.ts +14 -8
  21. package/controls/confirm/confirm.button.d.ts.map +1 -1
  22. package/controls/confirm/confirm.service.d.ts +24 -19
  23. package/controls/confirm/confirm.service.d.ts.map +1 -1
  24. package/controls/contextmenu/contextmenu.d.ts +51 -44
  25. package/controls/contextmenu/contextmenu.d.ts.map +1 -1
  26. package/controls/contextmenu/contextmenu.interface.d.ts +4 -0
  27. package/controls/contextmenu/contextmenu.interface.d.ts.map +1 -0
  28. package/controls/contextmenu/contextmenuanchor.d.ts +2 -2
  29. package/controls/contextmenu/contextmenuanchor.d.ts.map +1 -1
  30. package/controls/contextmenu/contextmenucontainer.d.ts +2 -2
  31. package/controls/contextmenu/contextmenucontainer.d.ts.map +1 -1
  32. package/controls/contextmenu/contextmenuitem.d.ts +6 -1
  33. package/controls/contextmenu/contextmenuitem.d.ts.map +1 -1
  34. package/controls/contextmenu/contextmenuitembutton.d.ts +22 -21
  35. package/controls/contextmenu/contextmenuitembutton.d.ts.map +1 -1
  36. package/controls/datetime/date.d.ts +33 -36
  37. package/controls/datetime/date.d.ts.map +1 -1
  38. package/controls/datetime/datetime.d.ts +33 -37
  39. package/controls/datetime/datetime.d.ts.map +1 -1
  40. package/controls/datetime/time.d.ts +32 -36
  41. package/controls/datetime/time.d.ts.map +1 -1
  42. package/controls/dialog/dialog.d.ts +32 -44
  43. package/controls/dialog/dialog.d.ts.map +1 -1
  44. package/controls/form/form.d.ts +7 -43
  45. package/controls/form/form.d.ts.map +1 -1
  46. package/controls/grid/grid.d.ts +67 -62
  47. package/controls/grid/grid.d.ts.map +1 -1
  48. package/controls/grid/gridbutton.d.ts +14 -14
  49. package/controls/grid/gridbutton.d.ts.map +1 -1
  50. package/controls/grid/gridcolumn.d.ts +8 -8
  51. package/controls/grid/gridcolumn.d.ts.map +1 -1
  52. package/controls/grid/gridcolumnaction.d.ts +3 -3
  53. package/controls/grid/gridcolumnaction.d.ts.map +1 -1
  54. package/controls/grid/gridcolumnbase.d.ts +46 -38
  55. package/controls/grid/gridcolumnbase.d.ts.map +1 -1
  56. package/controls/grid/gridimage.d.ts +2 -2
  57. package/controls/grid/gridimage.d.ts.map +1 -1
  58. package/controls/grid/model.d.ts +51 -42
  59. package/controls/grid/model.d.ts.map +1 -1
  60. package/controls/grid/paging.d.ts +77 -76
  61. package/controls/grid/paging.d.ts.map +1 -1
  62. package/controls/input/input.d.ts +11 -11
  63. package/controls/input/input.d.ts.map +1 -1
  64. package/controls/input/inputcurrency.d.ts +6 -1
  65. package/controls/input/inputcurrency.d.ts.map +1 -1
  66. package/controls/input/inputdecimal.d.ts +21 -21
  67. package/controls/input/inputdecimal.d.ts.map +1 -1
  68. package/controls/input/inputemail.d.ts.map +1 -1
  69. package/controls/input/inputinteger.d.ts +21 -21
  70. package/controls/input/inputinteger.d.ts.map +1 -1
  71. package/controls/input/inputpassword.d.ts +5 -5
  72. package/controls/input/inputpassword.d.ts.map +1 -1
  73. package/controls/input/inputsearch.d.ts +14 -5
  74. package/controls/input/inputsearch.d.ts.map +1 -1
  75. package/controls/layout/formlayout.d.ts +66 -0
  76. package/controls/layout/formlayout.d.ts.map +1 -0
  77. package/controls/list/buildvaluestring.d.ts +7 -0
  78. package/controls/list/buildvaluestring.d.ts.map +1 -0
  79. package/controls/list/dropdown.d.ts +36 -80
  80. package/controls/list/dropdown.d.ts.map +1 -1
  81. package/controls/list/dropdownoptions.d.ts +42 -0
  82. package/controls/list/dropdownoptions.d.ts.map +1 -0
  83. package/controls/list/listbox.d.ts +20 -20
  84. package/controls/list/listbox.d.ts.map +1 -1
  85. package/controls/multilanguage/multilanguageinput.d.ts +36 -35
  86. package/controls/multilanguage/multilanguageinput.d.ts.map +1 -1
  87. package/controls/multilanguage/multilanguageinputarea.d.ts +39 -38
  88. package/controls/multilanguage/multilanguageinputarea.d.ts.map +1 -1
  89. package/controls/static/formcontainer.d.ts +8 -4
  90. package/controls/static/formcontainer.d.ts.map +1 -1
  91. package/controls/tinymce/tinymce.d.ts +63 -63
  92. package/controls/tinymce/tinymce.d.ts.map +1 -1
  93. package/controls/tooltip/tooltip.d.ts +76 -69
  94. package/controls/tooltip/tooltip.d.ts.map +1 -1
  95. package/controls/treeview/treeview.d.ts +89 -123
  96. package/controls/treeview/treeview.d.ts.map +1 -1
  97. package/controls/upload/dropzonemultiple.d.ts +24 -24
  98. package/controls/upload/dropzonemultiple.d.ts.map +1 -1
  99. package/controls/upload/uploadmultiple.d.ts +9 -9
  100. package/controls/upload/uploadmultiple.d.ts.map +1 -1
  101. package/controls/validation/validationsummary.d.ts +18 -13
  102. package/controls/validation/validationsummary.d.ts.map +1 -1
  103. package/enums/ButtonRoleType.d.ts +2 -0
  104. package/enums/ButtonRoleType.d.ts.map +1 -0
  105. package/enums/ControlHeight.d.ts +18 -0
  106. package/enums/ControlHeight.d.ts.map +1 -0
  107. package/esm2022/common/basedatetimecontrol.mjs +80 -164
  108. package/esm2022/common/baseinputcontrol.mjs +21 -80
  109. package/esm2022/common/baselistcontrol.mjs +11 -56
  110. package/esm2022/common/basemodelcontrol.mjs +134 -354
  111. package/esm2022/common/baseselectcontrol.mjs +6 -27
  112. package/esm2022/common/baseuploadcontrol.mjs +109 -433
  113. package/esm2022/components/browser/browser.mjs +66 -474
  114. package/esm2022/components/browser/models/browserfile.mjs +3 -2
  115. package/esm2022/components/browser/models/browserfiledeleterequest.mjs +5 -10
  116. package/esm2022/components/browser/models/browserfilerenamerequest.mjs +5 -10
  117. package/esm2022/components/browser/models/browserfileresponse.mjs +3 -2
  118. package/esm2022/components/browser/models/browserfilesaverequest.mjs +5 -10
  119. package/esm2022/components/browser/models/browsernode.mjs +3 -2
  120. package/esm2022/components/browser/models/browsernodedeleterequest.mjs +5 -10
  121. package/esm2022/components/browser/models/browsernodenewrequest.mjs +5 -10
  122. package/esm2022/components/browser/models/browsernoderenamerequest.mjs +5 -10
  123. package/esm2022/components/browser/models/browsernoderequest.mjs +5 -10
  124. package/esm2022/components/browser/models/browsernoderesponse.mjs +3 -2
  125. package/esm2022/controls/buttons/button.mjs +32 -131
  126. package/esm2022/controls/checkbox/checkbox.mjs +15 -30
  127. package/esm2022/controls/checkbox/radiobutton.mjs +45 -102
  128. package/esm2022/controls/checkbox/radiobuttons.mjs +29 -106
  129. package/esm2022/controls/confirm/confirm.button.mjs +17 -21
  130. package/esm2022/controls/confirm/confirm.mjs +19 -69
  131. package/esm2022/controls/confirm/confirm.service.mjs +29 -74
  132. package/esm2022/controls/contextmenu/contextmenu.interface.mjs +3 -0
  133. package/esm2022/controls/contextmenu/contextmenu.mjs +43 -171
  134. package/esm2022/controls/contextmenu/contextmenuanchor.mjs +8 -19
  135. package/esm2022/controls/contextmenu/contextmenucontainer.mjs +8 -19
  136. package/esm2022/controls/contextmenu/contextmenuitem.mjs +7 -13
  137. package/esm2022/controls/contextmenu/contextmenuitembutton.mjs +25 -93
  138. package/esm2022/controls/datetime/date.mjs +42 -206
  139. package/esm2022/controls/datetime/dateselector.mjs +65 -409
  140. package/esm2022/controls/datetime/datetime.mjs +43 -223
  141. package/esm2022/controls/datetime/time.mjs +40 -204
  142. package/esm2022/controls/dialog/dialog.mjs +35 -209
  143. package/esm2022/controls/form/form.mjs +27 -153
  144. package/esm2022/controls/grid/grid.mjs +48 -155
  145. package/esm2022/controls/grid/gridbutton.mjs +21 -59
  146. package/esm2022/controls/grid/gridcolumn.mjs +21 -46
  147. package/esm2022/controls/grid/gridcolumnaction.mjs +8 -22
  148. package/esm2022/controls/grid/gridcolumnbase.mjs +35 -124
  149. package/esm2022/controls/grid/gridimage.mjs +5 -16
  150. package/esm2022/controls/grid/model.mjs +49 -74
  151. package/esm2022/controls/grid/paging.mjs +82 -251
  152. package/esm2022/controls/input/input.mjs +17 -65
  153. package/esm2022/controls/input/inputarea.mjs +10 -53
  154. package/esm2022/controls/input/inputcurrency.mjs +9 -14
  155. package/esm2022/controls/input/inputdecimal.mjs +33 -143
  156. package/esm2022/controls/input/inputemail.mjs +10 -37
  157. package/esm2022/controls/input/inputinteger.mjs +32 -127
  158. package/esm2022/controls/input/inputpassword.mjs +12 -43
  159. package/esm2022/controls/input/inputsearch.mjs +16 -38
  160. package/esm2022/controls/layout/formlayout.mjs +31 -0
  161. package/esm2022/controls/list/buildvaluestring.mjs +10 -0
  162. package/esm2022/controls/list/dropdown.mjs +45 -236
  163. package/esm2022/controls/list/dropdownoptions.mjs +22 -0
  164. package/esm2022/controls/list/listbox.mjs +40 -159
  165. package/esm2022/controls/multilanguage/multilanguageinput.mjs +48 -215
  166. package/esm2022/controls/multilanguage/multilanguageinputarea.mjs +51 -217
  167. package/esm2022/controls/static/formcontainer.mjs +18 -45
  168. package/esm2022/controls/static/staticlabel.mjs +7 -28
  169. package/esm2022/controls/tabs/tab.mjs +14 -68
  170. package/esm2022/controls/tabs/tabitem.mjs +7 -37
  171. package/esm2022/controls/tinymce/tinymce.mjs +62 -232
  172. package/esm2022/controls/tinymce/tinymcedialogsettings.mjs +5 -10
  173. package/esm2022/controls/tinymce/tinymcedialogsettingsmeta.mjs +4 -4
  174. package/esm2022/controls/tinymce/tinymceinstance.mjs +3 -2
  175. package/esm2022/controls/tooltip/tooltip.mjs +74 -358
  176. package/esm2022/controls/treeview/treeview.mjs +79 -343
  177. package/esm2022/controls/upload/dropzonemultiple.mjs +32 -152
  178. package/esm2022/controls/upload/dropzonesingle.mjs +12 -91
  179. package/esm2022/controls/upload/uploadmultiple.mjs +21 -111
  180. package/esm2022/controls/upload/uploadsingle.mjs +8 -50
  181. package/esm2022/controls/validation/validationsummary.mjs +23 -120
  182. package/esm2022/controls/wizard/wizard.mjs +20 -128
  183. package/esm2022/controls/wizard/wizarditem.mjs +6 -31
  184. package/esm2022/enums/ButtonRoleType.mjs +3 -0
  185. package/esm2022/enums/ControlHeight.mjs +11 -0
  186. package/esm2022/enums/IconType.mjs +4 -8
  187. package/esm2022/interfaces/ISacConfigurationService.mjs +3 -0
  188. package/esm2022/interfaces/ISacFileBrowserService.mjs +3 -2
  189. package/esm2022/interfaces/ISacIconService.mjs +3 -2
  190. package/esm2022/interfaces/ISacLabelSizes.mjs +3 -0
  191. package/esm2022/interfaces/ISacLanguageService.mjs +3 -2
  192. package/esm2022/interfaces/ISacLocalisationService.mjs +3 -2
  193. package/esm2022/interfaces/ISacValidationKeyService.mjs +3 -0
  194. package/esm2022/interfaces/iabstractcontrollabel.mjs +3 -2
  195. package/esm2022/interfaces/iconfirmcomponent.mjs +3 -2
  196. package/esm2022/interfaces/idatetimecontrol.mjs +3 -2
  197. package/esm2022/interfaces/iuploadcontrol.mjs +3 -2
  198. package/esm2022/interfaces/treeviewaction.interface.mjs +3 -0
  199. package/esm2022/models/languagemodel.mjs +5 -11
  200. package/esm2022/public_api.mjs +25 -94
  201. package/esm2022/services/index.mjs +3 -5
  202. package/esm2022/services/sac-configuration.service.mjs +35 -0
  203. package/esm2022/services/sac-filebrowser.service.mjs +15 -167
  204. package/esm2022/services/sac-icon.service.mjs +61 -155
  205. package/esm2022/services/sac-language.service.mjs +7 -45
  206. package/esm2022/services/sac-localisation.service.mjs +33 -428
  207. package/esm2022/services/sac-validationkey.service.mjs +7 -0
  208. package/esm2022/simpleangularcontrols-sac-common.mjs +4 -4
  209. package/esm2022/utilities/convertion.mjs +6 -26
  210. package/esm2022/utilities/datatypes.mjs +4 -6
  211. package/esm2022/utilities/enums.mjs +10 -15
  212. package/esm2022/utilities/guid.mjs +8 -0
  213. package/esm2022/utilities/interpolation.mjs +7 -42
  214. package/esm2022/utilities/popuphelper.mjs +80 -0
  215. package/esm2022/utilities/positioning.mjs +23 -266
  216. package/esm2022/validation/email.validator.mjs +3 -13
  217. package/esm2022/validation/equals.validator.mjs +3 -0
  218. package/esm2022/validation/index.mjs +3 -3
  219. package/esm2022/validation/invaliddate.validator.mjs +3 -14
  220. package/esm2022/validation/isDateValid.mjs +9 -13
  221. package/esm2022/validation/maxdate.validator.mjs +4 -21
  222. package/esm2022/validation/maxtime.validator.mjs +4 -21
  223. package/esm2022/validation/maxvalue.validator.mjs +3 -16
  224. package/esm2022/validation/mindate.validator.mjs +4 -21
  225. package/esm2022/validation/minfiles.validator.mjs +4 -19
  226. package/esm2022/validation/minlength.validator.mjs +3 -21
  227. package/esm2022/validation/mintime.validator.mjs +4 -21
  228. package/esm2022/validation/minvalue.validator.mjs +3 -16
  229. package/esm2022/validation/multilanguagerequired.validator.mjs +3 -22
  230. package/esm2022/validation/multilanguagerequiredany.validator.mjs +3 -22
  231. package/esm2022/validation/notequals.validator.mjs +3 -0
  232. package/esm2022/validation/pattern.validator.mjs +3 -16
  233. package/esm2022/validation/required.validator.mjs +3 -13
  234. package/esm2022/validation/validation.mjs +41 -106
  235. package/esm2022/validation/validationerrorcreator.mjs +3 -11
  236. package/esm2022/validation/validationerroritem.mjs +7 -19
  237. package/fesm2022/simpleangularcontrols-sac-common.mjs +2276 -9240
  238. package/fesm2022/simpleangularcontrols-sac-common.mjs.map +1 -1
  239. package/interfaces/ISacConfigurationService.d.ts +59 -0
  240. package/interfaces/ISacConfigurationService.d.ts.map +1 -0
  241. package/interfaces/ISacIconService.d.ts +26 -2
  242. package/interfaces/ISacIconService.d.ts.map +1 -1
  243. package/interfaces/ISacLabelSizes.d.ts +27 -0
  244. package/interfaces/ISacLabelSizes.d.ts.map +1 -0
  245. package/interfaces/ISacValidationKeyService.d.ts +53 -0
  246. package/interfaces/ISacValidationKeyService.d.ts.map +1 -0
  247. package/interfaces/treeviewaction.interface.d.ts +5 -0
  248. package/interfaces/treeviewaction.interface.d.ts.map +1 -0
  249. package/package.json +2 -2
  250. package/public_api.d.ts +32 -21
  251. package/public_api.d.ts.map +1 -1
  252. package/services/index.d.ts +6 -4
  253. package/services/index.d.ts.map +1 -1
  254. package/services/sac-configuration.service.d.ts +127 -0
  255. package/services/sac-configuration.service.d.ts.map +1 -0
  256. package/services/sac-icon.service.d.ts +49 -1
  257. package/services/sac-icon.service.d.ts.map +1 -1
  258. package/services/sac-localisation.service.d.ts +103 -97
  259. package/services/sac-localisation.service.d.ts.map +1 -1
  260. package/services/sac-validationkey.service.d.ts +59 -0
  261. package/services/sac-validationkey.service.d.ts.map +1 -0
  262. package/simpleangularcontrols-sac-common-16.0.0-rc.11.tgz +0 -0
  263. package/utilities/enums.d.ts +3 -1
  264. package/utilities/enums.d.ts.map +1 -1
  265. package/utilities/guid.d.ts +5 -0
  266. package/utilities/guid.d.ts.map +1 -0
  267. package/utilities/popuphelper.d.ts +84 -0
  268. package/utilities/popuphelper.d.ts.map +1 -0
  269. package/validation/equals.validator.d.ts +3 -0
  270. package/validation/equals.validator.d.ts.map +1 -0
  271. package/validation/isDateValid.d.ts.map +1 -1
  272. package/validation/notequals.validator.d.ts +3 -0
  273. package/validation/notequals.validator.d.ts.map +1 -0
  274. package/validation/validation.d.ts +24 -6
  275. package/validation/validation.d.ts.map +1 -1
  276. package/controls/treeview/ngtreeitemaction.d.ts +0 -44
  277. package/controls/treeview/ngtreeitemaction.d.ts.map +0 -1
  278. package/controls/treeview/treeviewchild.d.ts +0 -16
  279. package/controls/treeview/treeviewchild.d.ts.map +0 -1
  280. package/esm2022/controls/treeview/ngtreeitemaction.mjs +0 -63
  281. package/esm2022/controls/treeview/treeviewchild.mjs +0 -22
  282. package/simpleangularcontrols-sac-common-13.0.0-rc.1.tgz +0 -0
  283. package/simpleangularcontrols-sac-common-16.0.0-rc.1.tgz +0 -0
@@ -1,366 +1,82 @@
1
- import { Directive, Input, ViewChild } from '@angular/core';
2
- import { convertToBoolean } from '../../utilities/convertion';
3
- import { TooltipPosition } from '../../utilities/enums';
4
- import * as i0 from "@angular/core";
5
- /**
1
+ function cov_vnuuxsm2m(){var path="C:\\Projekte\\simpleangularcontrols-ng16\\ch.jnetwork.sac-controls\\dist\\sac-common\\esm2022\\controls\\tooltip\\tooltip.mjs";var hash="def2c968776e4e72632bc6ae769533cb4d3b3745";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"C:\\Projekte\\simpleangularcontrols-ng16\\ch.jnetwork.sac-controls\\dist\\sac-common\\esm2022\\controls\\tooltip\\tooltip.mjs",statementMap:{"0":{start:{line:25,column:8},end:{line:25,column:27}},"1":{start:{line:26,column:8},end:{line:26,column:23}},"2":{start:{line:31,column:8},end:{line:31,column:45}},"3":{start:{line:35,column:8},end:{line:35,column:39}},"4":{start:{line:39,column:8},end:{line:39,column:45}},"5":{start:{line:43,column:8},end:{line:43,column:25}},"6":{start:{line:47,column:8},end:{line:47,column:47}},"7":{start:{line:51,column:8},end:{line:51,column:24}},"8":{start:{line:55,column:8},end:{line:55,column:33}},"9":{start:{line:59,column:8},end:{line:59,column:32}},"10":{start:{line:65,column:8},end:{line:65,column:37}},"11":{start:{line:69,column:8},end:{line:78,column:10}},"12":{start:{line:71,column:12},end:{line:73,column:13}},"13":{start:{line:72,column:16},end:{line:72,column:23}},"14":{start:{line:74,column:12},end:{line:77,column:15}},"15":{start:{line:75,column:16},end:{line:75,column:39}},"16":{start:{line:76,column:16},end:{line:76,column:38}},"17":{start:{line:86,column:8},end:{line:86,column:32}},"18":{start:{line:92,column:8},end:{line:92,column:51}},"19":{start:{line:98,column:8},end:{line:100,column:9}},"20":{start:{line:99,column:12},end:{line:99,column:61}},"21":{start:{line:101,column:8},end:{line:101,column:40}},"22":{start:{line:102,column:8},end:{line:102,column:31}},"23":{start:{line:103,column:8},end:{line:103,column:35}},"24":{start:{line:106,column:8},end:{line:106,column:37}},"25":{start:{line:114,column:8},end:{line:114,column:159}},"26":{start:{line:120,column:8},end:{line:120,column:39}},"27":{start:{line:121,column:8},end:{line:121,column:45}},"28":{start:{line:127,column:8},end:{line:127,column:38}},"29":{start:{line:133,column:8},end:{line:133,column:38}},"30":{start:{line:134,column:8},end:{line:134,column:35}},"31":{start:{line:135,column:8},end:{line:139,column:11}},"32":{start:{line:136,column:12},end:{line:136,column:35}},"33":{start:{line:137,column:12},end:{line:137,column:34}},"34":{start:{line:138,column:12},end:{line:138,column:48}},"35":{start:{line:145,column:8},end:{line:145,column:70}},"36":{start:{line:151,column:8},end:{line:151,column:69}},"37":{start:{line:158,column:8},end:{line:160,column:9}},"38":{start:{line:159,column:12},end:{line:159,column:19}},"39":{start:{line:161,column:8},end:{line:161,column:35}},"40":{start:{line:168,column:8},end:{line:170,column:9}},"41":{start:{line:169,column:12},end:{line:169,column:19}},"42":{start:{line:171,column:8},end:{line:171,column:31}},"43":{start:{line:172,column:8},end:{line:172,column:30}},"44":{start:{line:179,column:8},end:{line:179,column:73}},"45":{start:{line:180,column:8},end:{line:180,column:73}},"46":{start:{line:181,column:8},end:{line:183,column:9}},"47":{start:{line:182,column:12},end:{line:182,column:75}},"48":{start:{line:190,column:8},end:{line:190,column:70}},"49":{start:{line:191,column:8},end:{line:191,column:70}},"50":{start:{line:192,column:8},end:{line:194,column:9}},"51":{start:{line:193,column:12},end:{line:193,column:75}},"52":{start:{line:202,column:22},end:{line:202,column:172}},"53":{start:{line:203,column:8},end:{line:203,column:29}},"54":{start:{line:204,column:33},end:{line:204,column:58}},"55":{start:{line:205,column:8},end:{line:210,column:9}},"56":{start:{line:206,column:12},end:{line:206,column:65}},"57":{start:{line:209,column:12},end:{line:209,column:36}},"58":{start:{line:211,column:8},end:{line:211,column:21}},"59":{start:{line:217,column:22},end:{line:217,column:171}},"60":{start:{line:218,column:8},end:{line:218,column:28}},"61":{start:{line:219,column:33},end:{line:219,column:58}},"62":{start:{line:220,column:8},end:{line:225,column:9}},"63":{start:{line:221,column:12},end:{line:221,column:65}},"64":{start:{line:224,column:12},end:{line:224,column:37}},"65":{start:{line:226,column:8},end:{line:226,column:21}},"66":{start:{line:228,column:13},end:{line:228,column:236}},"67":{start:{line:229,column:13},end:{line:229,column:422}},"68":{start:{line:232,column:0},end:{line:246,column:20}},"69":{start:{line:234,column:42},end:{line:234,column:107}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:24,column:4},end:{line:24,column:5}},loc:{start:{line:24,column:28},end:{line:79,column:5}},line:24},"1":{name:"(anonymous_1)",decl:{start:{line:69,column:31},end:{line:69,column:32}},loc:{start:{line:69,column:37},end:{line:78,column:9}},line:69},"2":{name:"(anonymous_2)",decl:{start:{line:74,column:23},end:{line:74,column:24}},loc:{start:{line:74,column:29},end:{line:77,column:13}},line:74},"3":{name:"(anonymous_3)",decl:{start:{line:85,column:4},end:{line:85,column:5}},loc:{start:{line:85,column:21},end:{line:87,column:5}},line:85},"4":{name:"(anonymous_4)",decl:{start:{line:91,column:4},end:{line:91,column:5}},loc:{start:{line:91,column:26},end:{line:93,column:5}},line:91},"5":{name:"(anonymous_5)",decl:{start:{line:97,column:4},end:{line:97,column:5}},loc:{start:{line:97,column:25},end:{line:104,column:5}},line:97},"6":{name:"(anonymous_6)",decl:{start:{line:105,column:4},end:{line:105,column:5}},loc:{start:{line:105,column:18},end:{line:107,column:5}},line:105},"7":{name:"(anonymous_7)",decl:{start:{line:113,column:4},end:{line:113,column:5}},loc:{start:{line:113,column:25},end:{line:115,column:5}},line:113},"8":{name:"(anonymous_8)",decl:{start:{line:119,column:4},end:{line:119,column:5}},loc:{start:{line:119,column:18},end:{line:122,column:5}},line:119},"9":{name:"(anonymous_9)",decl:{start:{line:126,column:4},end:{line:126,column:5}},loc:{start:{line:126,column:23},end:{line:128,column:5}},line:126},"10":{name:"(anonymous_10)",decl:{start:{line:132,column:4},end:{line:132,column:5}},loc:{start:{line:132,column:18},end:{line:140,column:5}},line:132},"11":{name:"(anonymous_11)",decl:{start:{line:135,column:19},end:{line:135,column:20}},loc:{start:{line:135,column:25},end:{line:139,column:9}},line:135},"12":{name:"(anonymous_12)",decl:{start:{line:144,column:4},end:{line:144,column:5}},loc:{start:{line:144,column:23},end:{line:146,column:5}},line:144},"13":{name:"(anonymous_13)",decl:{start:{line:150,column:4},end:{line:150,column:5}},loc:{start:{line:150,column:22},end:{line:152,column:5}},line:150},"14":{name:"(anonymous_14)",decl:{start:{line:156,column:4},end:{line:156,column:5}},loc:{start:{line:156,column:25},end:{line:162,column:5}},line:156},"15":{name:"(anonymous_15)",decl:{start:{line:166,column:4},end:{line:166,column:5}},loc:{start:{line:166,column:16},end:{line:173,column:5}},line:166},"16":{name:"(anonymous_16)",decl:{start:{line:177,column:4},end:{line:177,column:5}},loc:{start:{line:177,column:18},end:{line:184,column:5}},line:177},"17":{name:"(anonymous_17)",decl:{start:{line:188,column:4},end:{line:188,column:5}},loc:{start:{line:188,column:15},end:{line:195,column:5}},line:188},"18":{name:"(anonymous_18)",decl:{start:{line:201,column:4},end:{line:201,column:5}},loc:{start:{line:201,column:22},end:{line:212,column:5}},line:201},"19":{name:"(anonymous_19)",decl:{start:{line:216,column:4},end:{line:216,column:5}},loc:{start:{line:216,column:21},end:{line:227,column:5}},line:216},"20":{name:"(anonymous_20)",decl:{start:{line:234,column:28},end:{line:234,column:29}},loc:{start:{line:234,column:40},end:{line:234,column:109}},line:234}},branchMap:{"0":{loc:{start:{line:71,column:12},end:{line:73,column:13}},type:"if",locations:[{start:{line:71,column:12},end:{line:73,column:13}},{start:{line:71,column:12},end:{line:73,column:13}}],line:71},"1":{loc:{start:{line:98,column:8},end:{line:100,column:9}},type:"if",locations:[{start:{line:98,column:8},end:{line:100,column:9}},{start:{line:98,column:8},end:{line:100,column:9}}],line:98},"2":{loc:{start:{line:158,column:8},end:{line:160,column:9}},type:"if",locations:[{start:{line:158,column:8},end:{line:160,column:9}},{start:{line:158,column:8},end:{line:160,column:9}}],line:158},"3":{loc:{start:{line:168,column:8},end:{line:170,column:9}},type:"if",locations:[{start:{line:168,column:8},end:{line:170,column:9}},{start:{line:168,column:8},end:{line:170,column:9}}],line:168},"4":{loc:{start:{line:181,column:8},end:{line:183,column:9}},type:"if",locations:[{start:{line:181,column:8},end:{line:183,column:9}},{start:{line:181,column:8},end:{line:183,column:9}}],line:181},"5":{loc:{start:{line:192,column:8},end:{line:194,column:9}},type:"if",locations:[{start:{line:192,column:8},end:{line:194,column:9}},{start:{line:192,column:8},end:{line:194,column:9}}],line:192},"6":{loc:{start:{line:205,column:8},end:{line:210,column:9}},type:"if",locations:[{start:{line:205,column:8},end:{line:210,column:9}},{start:{line:205,column:8},end:{line:210,column:9}}],line:205},"7":{loc:{start:{line:205,column:12},end:{line:205,column:99}},type:"binary-expr",locations:[{start:{line:205,column:12},end:{line:205,column:53}},{start:{line:205,column:57},end:{line:205,column:99}}],line:205},"8":{loc:{start:{line:220,column:8},end:{line:225,column:9}},type:"if",locations:[{start:{line:220,column:8},end:{line:225,column:9}},{start:{line:220,column:8},end:{line:225,column:9}}],line:220},"9":{loc:{start:{line:220,column:12},end:{line:220,column:99}},type:"binary-expr",locations:[{start:{line:220,column:12},end:{line:220,column:55}},{start:{line:220,column:59},end:{line:220,column:99}}],line:220}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0]},inputSourceMap:{version:3,file:"tooltip.js",sourceRoot:"",sources:["../../../../../projects/sac-common/src/controls/tooltip/tooltip.ts"],names:[],mappings:"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",sourcesContent:["import { convertToBoolean } from '../../utilities/convertion';\r\nimport { TooltipPosition } from '../../utilities/enums';\r\nimport { PopUpHelper } from '../../utilities/popuphelper';\r\nimport {\r\n AfterViewChecked,\r\n ChangeDetectorRef,\r\n Directive,\r\n DoCheck,\r\n ElementRef,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\n/**\r\n * Tooltip Component\r\n *\r\n * Requires the following identifiers in the HTML markup\r\n * - container: Container for ng-content in which the element is displayed where the tooltip is attached.\r\n * - tooltip: Container for tooltip\r\n *\r\n * Tooltip must be displayed in 2 steps. In a first step the tooltip markup is created with (ngIf). In a 2nd step\r\n * the tooltip can then be displayed via the CSS visibility. If this is not done, it can lead to a flickering effect in certain browsers.\r\n *\r\n */\r\n@Directive()\r\nexport abstract class SacTooltipCommon implements OnInit, OnDestroy, AfterViewChecked, DoCheck {\r\n // #region Properties\r\n\r\n /**\r\n * Helper class to display tooltip on correct position\r\n */\r\n private readonly popupHelper: PopUpHelper = new PopUpHelper();\r\n\r\n /**\r\n * Inline mode for tooltip\r\n */\r\n private _inlinemode: boolean;\r\n\r\n /**\r\n * Defines whether the tooltip is visible\r\n */\r\n private _isTooltipVisible: boolean = false;\r\n\r\n /**\r\n * Containers for the tooltip\r\n */\r\n private tooltipcontainer: ElementRef<HTMLElement>;\r\n\r\n /**\r\n * Position of the tooltip on the left\r\n */\r\n public IsTooltipContentVisible: boolean = false;\r\n\r\n /**\r\n * Position des Tooltips links\r\n */\r\n public LeftPos: number = 0;\r\n\r\n /**\r\n * Property for enum in Angular HTML template\r\n */\r\n public TooltipPosition = TooltipPosition;\r\n\r\n /**\r\n * Position of the tooltip at the top\r\n */\r\n public TopPos: number = 0;\r\n\r\n /**\r\n * Name of the container for content (e.g. icon) on which the tooltip is displayed.\r\n */\r\n @ViewChild('container', { static: true })\r\n public content: ElementRef<HTMLElement>;\r\n\r\n /**\r\n * Position of the picker arrow at the left\r\n */\r\n public posArrowLeft: number | null = null;\r\n\r\n /**\r\n * Position of the picker arrow at the top\r\n */\r\n public posArrowTop: number | null = null;\r\n\r\n /**\r\n * Position of the tooltip. Values: left|top|right|bottom|auto\r\n *\r\n * Value 'auto' can be combined with another value.\r\n */\r\n @Input()\r\n public position: string = 'right|auto';\r\n\r\n /**\r\n * Text for ToolTip\r\n */\r\n @Input()\r\n public tooltiptext: string;\r\n\r\n // #endregion Properties\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Konstruktor\r\n * @param ref Element Referenz\r\n */\r\n constructor(private readonly cdRef: ChangeDetectorRef, private readonly ref: ElementRef) {}\r\n\r\n // #endregion Constructors\r\n\r\n // #region Public Getters And Setters\r\n\r\n /**\r\n * Property for inline mode for tooltip. Sets the display mode on the wrapper element to `inline`\r\n */\r\n public get inlinemode(): boolean {\r\n return this._inlinemode;\r\n }\r\n\r\n /**\r\n * Setter for inline mode for tooltip\r\n */\r\n @Input()\r\n public set inlinemode(value: boolean) {\r\n this._inlinemode = convertToBoolean(value);\r\n }\r\n\r\n /**\r\n * Setter for the name of the container for the tooltip. Is required as the tooltip can be hidden via ngIf.\r\n */\r\n @ViewChild('tooltip', { static: false })\r\n public set tooltip(content: ElementRef) {\r\n if (content !== undefined) {\r\n document.body.appendChild(content.nativeElement);\r\n }\r\n\r\n this.tooltipcontainer = content;\r\n this.onContentChange();\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n public get tooltop(): ElementRef {\r\n return this.tooltipcontainer;\r\n }\r\n\r\n // #endregion Public Getters And Setters\r\n\r\n // #region Public Methods\r\n\r\n /**\r\n * Returns the position of the tooltip\r\n */\r\n public GetTooltipPosition(): TooltipPosition {\r\n return this.popupHelper.getDisplayPosition(\r\n this.content,\r\n this.tooltipcontainer,\r\n this.getTooltipOffset(),\r\n this.getTooltipOffset(),\r\n this.position,\r\n true\r\n );\r\n }\r\n\r\n /**\r\n * Hide tooltip\r\n */\r\n public HideTooltip(): void {\r\n this._isTooltipVisible = false;\r\n this.IsTooltipContentVisible = false;\r\n }\r\n\r\n /**\r\n * Defines whether the tooltip is present in the markup\r\n */\r\n public IsTooltipVisible(): boolean {\r\n return this._isTooltipVisible;\r\n }\r\n\r\n /**\r\n * Show tooltip\r\n */\r\n public ShowTooltip(): void {\r\n this._isTooltipVisible = true;\r\n this.cdRef.detectChanges();\r\n\r\n setTimeout(() => {\r\n this.getLeftPosition();\r\n this.getTopPosition();\r\n this.IsTooltipContentVisible = true;\r\n });\r\n }\r\n\r\n /**\r\n * Calculates the height of the tooltip\r\n */\r\n public getToolTipHeight(): number {\r\n return this.popupHelper.getPopupHeight(this.tooltipcontainer);\r\n }\r\n\r\n /**\r\n * Calculates the width of the tooltips\r\n */\r\n public getToolTipWidth(): number {\r\n return this.popupHelper.getPopupWidth(this.tooltipcontainer);\r\n }\r\n\r\n /**\r\n * Detect Changes after view checked. Prevent ExpressionChangedAfterItHasBeenCheckedError error\r\n */\r\n public ngAfterViewChecked(): void {\r\n // Do nothing if is not visibile\r\n if (!this._isTooltipVisible) {\r\n return;\r\n }\r\n\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Detect UI Changes to Calculate Tooltip correct\r\n */\r\n public ngDoCheck(): void {\r\n // Do nothing if is not visibile\r\n if (!this._isTooltipVisible) {\r\n return;\r\n }\r\n\r\n this.getLeftPosition();\r\n this.getTopPosition();\r\n }\r\n\r\n /**\r\n * Event when the control is destroyed.\r\n */\r\n public ngOnDestroy() {\r\n // Unregister Event Listener\r\n window.removeEventListener('scroll', this.onContentChange, true);\r\n window.removeEventListener('resize', this.onContentChange, true);\r\n\r\n if (this.tooltipcontainer !== undefined) {\r\n document.body.removeChild(this.tooltipcontainer.nativeElement);\r\n }\r\n }\r\n\r\n /**\r\n * Event when the control is initialized\r\n */\r\n public ngOnInit() {\r\n // Register Event Listener\r\n window.addEventListener('scroll', this.onContentChange, true);\r\n window.addEventListener('resize', this.onContentChange, true);\r\n\r\n if (this.tooltipcontainer !== undefined) {\r\n document.body.appendChild(this.tooltipcontainer.nativeElement);\r\n }\r\n }\r\n\r\n // #endregion Public Methods\r\n\r\n // #region Protected Methods\r\n\r\n /**\r\n * Offset for Tooltip. Required for BS4/BS5 to create padding\r\n */\r\n protected abstract getTooltipOffset(): number;\r\n\r\n // #endregion Protected Methods\r\n\r\n // #region Private Methods\r\n\r\n /**\r\n * Calculates the position of the tooltip from links\r\n */\r\n private getLeftPosition(): number {\r\n const value = this.popupHelper.getPositionLeft(\r\n this.content,\r\n this.tooltipcontainer,\r\n this.ref,\r\n this.getTooltipOffset(),\r\n this.getTooltipOffset(),\r\n this.position,\r\n true\r\n );\r\n this.LeftPos = value;\r\n\r\n const requiredPosition = this.GetTooltipPosition();\r\n if (requiredPosition === TooltipPosition.left || requiredPosition === TooltipPosition.right) {\r\n this.posArrowTop = this.getToolTipHeight() / 2 - 6.5;\r\n } else {\r\n this.posArrowTop = null;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Calculates the position of the tooltip from the top\r\n */\r\n private getTopPosition(): number {\r\n const value = this.popupHelper.getPositionTop(\r\n this.content,\r\n this.tooltipcontainer,\r\n this.ref,\r\n this.getTooltipOffset(),\r\n this.getTooltipOffset(),\r\n this.position,\r\n true\r\n );\r\n this.TopPos = value;\r\n\r\n const requiredPosition = this.GetTooltipPosition();\r\n if (requiredPosition === TooltipPosition.bottom || requiredPosition === TooltipPosition.top) {\r\n this.posArrowLeft = this.getToolTipWidth() / 2 - 6.5;\r\n } else {\r\n this.posArrowLeft = null;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * method if content has changed and proportions need to be reset in the UI.\r\n */\r\n private readonly onContentChange = (): void => {\r\n // Do nothing if is not visible\r\n if (!this._isTooltipVisible) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n this.getLeftPosition();\r\n this.getTopPosition();\r\n });\r\n };\r\n\r\n // #endregion Private Methods\r\n}\r\n"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"def2c968776e4e72632bc6ae769533cb4d3b3745"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore
2
+ cov_vnuuxsm2m=function(){return actualCoverage;};}return actualCoverage;}cov_vnuuxsm2m();import{convertToBoolean}from'../../utilities/convertion';import{TooltipPosition}from'../../utilities/enums';import{PopUpHelper}from'../../utilities/popuphelper';import{Directive,Input,ViewChild}from'@angular/core';import*as i0 from"@angular/core";/**
6
3
  * Tooltip Component
7
4
  *
8
- * Benötigt im HTML Markup folgende Identifier
9
- * - container: Container für ng-content in welchem das Element angezeigt wird, wo der Tooltip angehängt wird.
10
- * - tooltip: Container für Tooltip
5
+ * Requires the following identifiers in the HTML markup
6
+ * - container: Container for ng-content in which the element is displayed where the tooltip is attached.
7
+ * - tooltip: Container for tooltip
11
8
  *
12
- * Tooltip muss in 2 Schritten angezeigt werden. In einem ersten Schritt wird der Tooltip Markup erzeugt mit (ngIf). In einem 2. Schritt
13
- * kann der Tooltip dann über die CSS visibility angezeigt werden. Wird dies nicht so gemacht, kann es bei gewissen Browsern zu einem Flacker Effekt führen.
9
+ * Tooltip must be displayed in 2 steps. In a first step the tooltip markup is created with (ngIf). In a 2nd step
10
+ * the tooltip can then be displayed via the CSS visibility. If this is not done, it can lead to a flickering effect in certain browsers.
14
11
  *
15
- */
16
- class SacTooltipCommon {
17
- /**
18
- * Setter für Inline Mode für Tooltip
19
- */
20
- set inlinemode(value) {
21
- this._inlinemode = convertToBoolean(value);
22
- }
23
- /**
24
- * Getter für Inline Mode für Tooltip
25
- */
26
- get inlinemode() {
27
- return this._inlinemode;
28
- }
29
- /**
30
- * Setter für Name des Containers für den Tooltip. Wird benötigt, da Tooltip via NGIF ausgeblendet werden kann.
31
- */
32
- set tooltip(content) {
33
- if (content !== undefined) {
34
- document.body.appendChild(content.nativeElement);
35
- }
36
- this.tooltipcontainer = content;
37
- this.onContentChange();
38
- this.cdRef.detectChanges();
39
- }
40
- /**
12
+ */class SacTooltipCommon{// #endregion Properties
13
+ // #region Constructors
14
+ /**
41
15
  * Konstruktor
42
16
  * @param ref Element Referenz
43
- */
44
- constructor(cdRef, ref) {
45
- this.cdRef = cdRef;
46
- this.ref = ref;
47
- /**
48
- * Property für Enum in Angular HTML Template
49
- */
50
- this.TooltipPosition = TooltipPosition;
51
- /**
52
- * Definiert ob der Tooltip sichtbar ist
53
- */
54
- this._isTooltipVisible = false;
55
- /**
56
- * Position des Tooltips oben
57
- */
58
- this.TopPos = 0;
59
- /**
17
+ */constructor(cdRef,ref){cov_vnuuxsm2m().f[0]++;cov_vnuuxsm2m().s[0]++;this.cdRef=cdRef;cov_vnuuxsm2m().s[1]++;this.ref=ref;// #region Properties
18
+ /**
19
+ * Helper class to display tooltip on correct position
20
+ */cov_vnuuxsm2m().s[2]++;this.popupHelper=new PopUpHelper();/**
21
+ * Defines whether the tooltip is visible
22
+ */cov_vnuuxsm2m().s[3]++;this._isTooltipVisible=false;/**
23
+ * Position of the tooltip on the left
24
+ */cov_vnuuxsm2m().s[4]++;this.IsTooltipContentVisible=false;/**
60
25
  * Position des Tooltips links
61
- */
62
- this.LeftPos = 0;
63
- /**
64
- * Position des Tooltips. Werte: left|top|right|bottom|auto
26
+ */cov_vnuuxsm2m().s[5]++;this.LeftPos=0;/**
27
+ * Property for enum in Angular HTML template
28
+ */cov_vnuuxsm2m().s[6]++;this.TooltipPosition=TooltipPosition;/**
29
+ * Position of the tooltip at the top
30
+ */cov_vnuuxsm2m().s[7]++;this.TopPos=0;/**
31
+ * Position of the picker arrow at the left
32
+ */cov_vnuuxsm2m().s[8]++;this.posArrowLeft=null;/**
33
+ * Position of the picker arrow at the top
34
+ */cov_vnuuxsm2m().s[9]++;this.posArrowTop=null;/**
35
+ * Position of the tooltip. Values: left|top|right|bottom|auto
65
36
  *
66
- * Wert 'auto' kann mit einem anderen Wert kombiniert werden.
67
- */
68
- this.position = 'right|auto';
69
- /**
70
- * Definiert ob der Tooltip sichtbar sein soll
71
- */
72
- this.IsTooltipContentVisible = false;
73
- /**
74
- * Methode wenn Content geändert hat und Proporties im UI neu gesetzt werden müssen.
75
- */
76
- this.onContentChange = () => {
77
- setTimeout(() => {
78
- this.getLeftPosition();
79
- this.getTopPosition();
80
- });
81
- };
82
- }
83
- /**
84
- * Ervent wenn das Control initialisert wird
85
- */
86
- ngOnInit() {
87
- // Register Event Listener
88
- window.addEventListener('scroll', this.onContentChange, true);
89
- window.addEventListener('resize', this.onContentChange, true);
90
- if (this.tooltipcontainer !== undefined) {
91
- document.body.appendChild(this.tooltipcontainer.nativeElement);
92
- }
93
- }
94
- /**
95
- * Event wenn das Control zerstört wird.
96
- */
97
- ngOnDestroy() {
98
- // Unregister Event Listener
99
- window.removeEventListener('scroll', this.onContentChange, true);
100
- window.removeEventListener('resize', this.onContentChange, true);
101
- if (this.tooltipcontainer !== undefined) {
102
- document.body.removeChild(this.tooltipcontainer.nativeElement);
103
- }
104
- }
105
- /**
106
- * Berechnet die Position des Tooltips von Oben
107
- */
108
- getTopPosition() {
109
- if (this.content !== null && this.content !== undefined) {
110
- const item = this.content.nativeElement;
111
- if (item.children.length >= 1) {
112
- const childItem = item.firstElementChild;
113
- const contentPosition = childItem.getBoundingClientRect();
114
- switch (this.GetTooltipPosition()) {
115
- case TooltipPosition.top:
116
- this.TopPos = contentPosition.top - this.getToolTipHeight();
117
- return contentPosition.top - this.getToolTipHeight();
118
- case TooltipPosition.right:
119
- this.TopPos = contentPosition.top + (contentPosition.height / 2) - (this.getToolTipHeight() / 2);
120
- return contentPosition.top + (contentPosition.height / 2) - (this.getToolTipHeight() / 2);
121
- case TooltipPosition.bottom:
122
- this.TopPos = contentPosition.top + contentPosition.height;
123
- return contentPosition.top + contentPosition.height;
124
- case TooltipPosition.left:
125
- this.TopPos = contentPosition.top + (contentPosition.height / 2) - (this.getToolTipHeight() / 2);
126
- return contentPosition.top + (contentPosition.height / 2) - (this.getToolTipHeight() / 2);
127
- }
128
- return childItem.clientTop + childItem.offsetTop - ((this.getToolTipHeight() / 2) - (childItem.clientHeight / 2));
129
- }
130
- else {
131
- return this.content.nativeElement.offsetTop;
132
- }
133
- }
134
- else {
135
- return this.ref.nativeElement.offsetTop;
136
- }
137
- }
138
- /**
139
- * Berechnet die Position des Tooltips von Links
140
- */
141
- getLeftPosition() {
142
- if (this.content !== null && this.content !== undefined) {
143
- const item = this.content.nativeElement;
144
- if (item.children.length >= 1) {
145
- const childItem = item.firstElementChild;
146
- const contentPosition = childItem.getBoundingClientRect();
147
- switch (this.GetTooltipPosition()) {
148
- case TooltipPosition.top:
149
- this.LeftPos = contentPosition.left + (contentPosition.width / 2) - (this.getToolTipWidth() / 2);
150
- return contentPosition.left + (contentPosition.width / 2) - (this.getToolTipWidth() / 2);
151
- case TooltipPosition.right:
152
- this.LeftPos = contentPosition.left + contentPosition.width;
153
- return contentPosition.left + contentPosition.width;
154
- case TooltipPosition.bottom:
155
- this.LeftPos = contentPosition.left + (childItem.clientWidth / 2) - (this.getToolTipWidth() / 2);
156
- return contentPosition.left + (childItem.clientWidth / 2) - (this.getToolTipWidth() / 2);
157
- case TooltipPosition.left:
158
- this.LeftPos = contentPosition.left - this.getToolTipWidth();
159
- return contentPosition.left - this.getToolTipWidth();
160
- }
161
- return this.content.nativeElement.offsetTop;
162
- }
163
- else {
164
- return this.content.nativeElement.offsetTop;
165
- }
166
- }
167
- else {
168
- return this.ref.nativeElement.offsetLeft;
169
- }
170
- }
171
- /**
172
- * Berechnet die Höhe des Tooltips
173
- */
174
- getToolTipHeight() {
175
- if (this.tooltipcontainer) {
176
- return this.tooltipcontainer.nativeElement.clientHeight;
177
- }
178
- else {
179
- return 0;
180
- }
181
- }
182
- /**
183
- * Berechnet die Breite die Tooltips
184
- */
185
- getToolTipWidth() {
186
- if (this.tooltipcontainer) {
187
- return this.tooltipcontainer.nativeElement.clientWidth;
188
- }
189
- else {
190
- return 0;
191
- }
192
- }
193
- /**
194
- * Definiert ob der Tooltip im Markup vorhanden ist
195
- */
196
- IsTooltipVisible() {
197
- return this._isTooltipVisible;
198
- }
199
- /**
200
- * Tooltip anzeigen
201
- */
202
- ShowTooltip() {
203
- this._isTooltipVisible = true;
204
- setTimeout(() => {
205
- this.getLeftPosition();
206
- this.getTopPosition();
207
- this.IsTooltipContentVisible = true;
208
- });
209
- }
210
- /**
211
- * Tooltip ausblenden
212
- */
213
- HideTooltip() {
214
- this._isTooltipVisible = false;
215
- this.IsTooltipContentVisible = false;
216
- }
217
- /**
218
- * Gibt die Position des Tooltips zurück
219
- */
220
- GetTooltipPosition() {
221
- const validPositions = this.ValidatePositions();
222
- // tslint:disable-next-line:no-bitwise
223
- if (this.HasPosition(TooltipPosition.right) && (validPositions & TooltipPosition.right)) {
224
- return TooltipPosition.right;
225
- }
226
- // tslint:disable-next-line:no-bitwise
227
- if (this.HasPosition(TooltipPosition.top) && (validPositions & TooltipPosition.top)) {
228
- return TooltipPosition.top;
229
- }
230
- // tslint:disable-next-line:no-bitwise
231
- if (this.HasPosition(TooltipPosition.left) && (validPositions & TooltipPosition.left)) {
232
- return TooltipPosition.left;
233
- }
234
- // tslint:disable-next-line:no-bitwise
235
- if (this.HasPosition(TooltipPosition.bottom) && (validPositions & TooltipPosition.bottom)) {
236
- return TooltipPosition.bottom;
237
- }
238
- // Get Auto Position or Default
239
- if (this.IsAutoPosition()) {
240
- // tslint:disable-next-line:no-bitwise
241
- if (validPositions & TooltipPosition.right) {
242
- return TooltipPosition.right;
243
- }
244
- // tslint:disable-next-line:no-bitwise
245
- if (validPositions & TooltipPosition.top) {
246
- return TooltipPosition.top;
247
- }
248
- // tslint:disable-next-line:no-bitwise
249
- if (validPositions & TooltipPosition.left) {
250
- return TooltipPosition.left;
251
- }
252
- // tslint:disable-next-line:no-bitwise
253
- if (validPositions & TooltipPosition.bottom) {
254
- return TooltipPosition.bottom;
255
- }
256
- return TooltipPosition.right;
257
- }
258
- else {
259
- return this.GetPosition();
260
- }
261
- }
262
- /**
263
- * Definiert ob AutoPosition aktiv ist
264
- */
265
- IsAutoPosition() {
266
- const positions = this.position.split('|');
267
- return positions.indexOf('auto') >= 0;
268
- }
269
- /**
270
- * Gibt die definierte Position für den Tooltip zurück
271
- */
272
- GetPosition() {
273
- const positions = this.position.split('|');
274
- if (this.HasPosition(TooltipPosition.left)) {
275
- return TooltipPosition.left;
276
- }
277
- if (this.HasPosition(TooltipPosition.top)) {
278
- return TooltipPosition.top;
279
- }
280
- if (this.HasPosition(TooltipPosition.right)) {
281
- return TooltipPosition.right;
282
- }
283
- if (this.HasPosition(TooltipPosition.bottom)) {
284
- return TooltipPosition.bottom;
285
- }
286
- // Default Position if empty
287
- return TooltipPosition.right;
288
- }
289
- /**
290
- * Gibt zurück, ob die Position konfiguriert wurde
291
- *
292
- * @param position Position auf welche geprüft wird
293
- */
294
- HasPosition(position) {
295
- const positions = this.position.split('|');
296
- if (position === TooltipPosition.right && positions.indexOf('right') >= 0) {
297
- return true;
298
- }
299
- if (position === TooltipPosition.top && positions.indexOf('top') >= 0) {
300
- return true;
301
- }
302
- if (position === TooltipPosition.left && positions.indexOf('left') >= 0) {
303
- return true;
304
- }
305
- if (position === TooltipPosition.bottom && positions.indexOf('bottom') >= 0) {
306
- return true;
307
- }
308
- return false;
309
- }
310
- /**
311
- * Prüft ob die Position gültig ist, resp. der Tooltip auf die Position platz hat
312
- */
313
- ValidatePositions() {
314
- // Check if Container is false
315
- if (this.tooltipcontainer === undefined) {
316
- return TooltipPosition.right;
317
- }
318
- let allowedPositions = TooltipPosition.none;
319
- const basePosition = this.content.nativeElement.firstElementChild.getBoundingClientRect();
320
- const tooltipRect = this.tooltipcontainer.nativeElement.getBoundingClientRect();
321
- const leftPosOk = basePosition.left - tooltipRect.width > 0;
322
- const rightPosOk = basePosition.right + tooltipRect.width < window.innerWidth;
323
- const topPosOk = basePosition.top - tooltipRect.height > 0;
324
- const bottomPosOk = basePosition.bottom + tooltipRect.height < window.innerHeight;
325
- const leftHalfPosOk = basePosition.left - (tooltipRect.width / 2) > 0;
326
- const rightHalfPosOk = basePosition.right + (tooltipRect.width / 2) < window.innerWidth;
327
- const topHalfPosOk = basePosition.top - (tooltipRect.height / 2) > 0;
328
- const bottomHalfPosOk = basePosition.bottom + (tooltipRect.height / 2) < window.innerHeight;
329
- if (leftPosOk && topHalfPosOk && bottomHalfPosOk) {
330
- // tslint:disable-next-line:no-bitwise
331
- allowedPositions = allowedPositions | TooltipPosition.left;
332
- }
333
- if (rightPosOk && topHalfPosOk && bottomHalfPosOk) {
334
- // tslint:disable-next-line:no-bitwise
335
- allowedPositions = allowedPositions | TooltipPosition.right;
336
- }
337
- if (topPosOk && leftHalfPosOk && rightHalfPosOk) {
338
- // tslint:disable-next-line:no-bitwise
339
- allowedPositions = allowedPositions | TooltipPosition.top;
340
- }
341
- if (bottomPosOk && leftHalfPosOk && rightHalfPosOk) {
342
- // tslint:disable-next-line:no-bitwise
343
- allowedPositions = allowedPositions | TooltipPosition.bottom;
344
- }
345
- return allowedPositions;
346
- }
347
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacTooltipCommon, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
348
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SacTooltipCommon, inputs: { position: "position", tooltiptext: "tooltiptext", inlinemode: "inlinemode" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true, static: true }], ngImport: i0 }); }
349
- }
350
- export { SacTooltipCommon };
351
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacTooltipCommon, decorators: [{
352
- type: Directive
353
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { position: [{
354
- type: Input
355
- }], tooltiptext: [{
356
- type: Input
357
- }], inlinemode: [{
358
- type: Input
359
- }], content: [{
360
- type: ViewChild,
361
- args: ['container', { static: true }]
362
- }], tooltip: [{
363
- type: ViewChild,
364
- args: ['tooltip', { static: true }]
365
- }] } });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbnRyb2xzL3Rvb2x0aXAvdG9vbHRpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRXhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUNhLGdCQUFnQjtJQTZDM0I7O09BRUc7SUFDSCxJQUNJLFVBQVUsQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNEOztPQUVHO0lBQ0gsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFZRDs7T0FFRztJQUNILElBQ0ksT0FBTyxDQUFDLE9BQW1CO1FBQzdCLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUN6QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDbEQ7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFvQixLQUF3QixFQUFVLEdBQWU7UUFBakQsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFZO1FBdEZyRTs7V0FFRztRQUNILG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBRWxD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QUNqRCxzQ0FBc0M7WUFDdEMsZ0JBQWdCLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztTQUM3RDtRQUVELElBQUksUUFBUSxJQUFJLGFBQWEsSUFBSSxjQUFjLEVBQUU7WUFDL0Msc0NBQXNDO1lBQ3RDLGdCQUFnQixHQUFHLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUM7U0FDM0Q7UUFFRCxJQUFJLFdBQVcsSUFBSSxhQUFhLElBQUksY0FBYyxFQUFFO1lBQ2xELHNDQUFzQztZQUN0QyxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1NBQzlEO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDOytHQXhaVSxnQkFBZ0I7bUdBQWhCLGdCQUFnQjs7U0FBaEIsZ0JBQWdCOzRGQUFoQixnQkFBZ0I7a0JBRDVCLFNBQVM7aUlBNEJSLFFBQVE7c0JBRFAsS0FBSztnQkFPTixXQUFXO3NCQURWLEtBQUs7Z0JBaUJGLFVBQVU7c0JBRGIsS0FBSztnQkFjb0MsT0FBTztzQkFBaEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVdwQyxPQUFPO3NCQURWLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvY29udmVydGlvbic7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9lbnVtcyc7XHJcblxyXG4vKipcclxuICogVG9vbHRpcCBDb21wb25lbnRcclxuICpcclxuICogQmVuw7Z0aWd0IGltIEhUTUwgTWFya3VwIGZvbGdlbmRlIElkZW50aWZpZXJcclxuICogLSBjb250YWluZXI6IENvbnRhaW5lciBmw7xyIG5nLWNvbnRlbnQgaW4gd2VsY2hlbSBkYXMgRWxlbWVudCBhbmdlemVpZ3Qgd2lyZCwgd28gZGVyIFRvb2x0aXAgYW5nZWjDpG5ndCB3aXJkLlxyXG4gKiAtIHRvb2x0aXA6IENvbnRhaW5lciBmw7xyIFRvb2x0aXBcclxuICpcclxuICogVG9vbHRpcCBtdXNzIGluIDIgU2Nocml0dGVuIGFuZ2V6ZWlndCB3ZXJkZW4uIEluIGVpbmVtIGVyc3RlbiBTY2hyaXR0IHdpcmQgZGVyIFRvb2x0aXAgTWFya3VwIGVyemV1Z3QgbWl0IChuZ0lmKS4gSW4gZWluZW0gMi4gU2Nocml0dFxyXG4gKiBrYW5uIGRlciBUb29sdGlwIGRhbm4gw7xiZXIgZGllIENTUyB2aXNpYmlsaXR5IGFuZ2V6ZWlndCB3ZXJkZW4uIFdpcmQgZGllcyBuaWNodCBzbyBnZW1hY2h0LCBrYW5uIGVzIGJlaSBnZXdpc3NlbiBCcm93c2VybiB6dSBlaW5lbSBGbGFja2VyIEVmZmVrdCBmw7xocmVuLlxyXG4gKlxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBjbGFzcyBTYWNUb29sdGlwQ29tbW9uIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKlxyXG4gICAqIFByb3BlcnR5IGbDvHIgRW51bSBpbiBBbmd1bGFyIEhUTUwgVGVtcGxhdGVcclxuICAgKi9cclxuICBUb29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaWVydCBvYiBkZXIgVG9vbHRpcCBzaWNodGJhciBpc3RcclxuICAgKi9cclxuICBwcml2YXRlIF9pc1Rvb2x0aXBWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBvc2l0aW9uIGRlcyBUb29sdGlwcyBvYmVuXHJcbiAgICovXHJcbiAgVG9wUG9zOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBQb3NpdGlvbiBkZXMgVG9vbHRpcHMgbGlua3NcclxuICAgKi9cclxuICBMZWZ0UG9zOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBQb3NpdGlvbiBkZXMgVG9vbHRpcHMuIFdlcnRlOiBsZWZ0fHRvcHxyaWdodHxib3R0b218YXV0b1xyXG4gICAqXHJcbiAgICogV2VydCAnYXV0bycga2FubiBtaXQgZWluZW0gYW5kZXJlbiBXZXJ0IGtvbWJpbmllcnQgd2VyZGVuLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcG9zaXRpb246IHN0cmluZyA9ICdyaWdodHxhdXRvJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGV4dCBmw7xyIFRvb2xUaXBcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHRvb2x0aXB0ZXh0OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIElubGluZSBNb2RlIGbDvHIgVG9vbHRpcFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2lubGluZW1vZGU6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaWVydCBvYiBkZXIgVG9vbHRpcCBzaWNodGJhciBzZWluIHNvbGxcclxuICAgKi9cclxuICBJc1Rvb2x0aXBDb250ZW50VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTZXR0ZXIgZsO8ciBJbmxpbmUgTW9kZSBmw7xyIFRvb2x0aXBcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpbmxpbmVtb2RlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbmxpbmVtb2RlID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmw7xyIElubGluZSBNb2RlIGbDvHIgVG9vbHRpcFxyXG4gICAqL1xyXG4gIGdldCBpbmxpbmVtb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lubGluZW1vZGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOYW1lIGRlcyBDb250YWluZXJzIGbDvHIgQ29udGVudCAoei5CLiBJY29uKSBhdWYgd2VsY2hlbSBkZXIgVG9vbHRpcCBhbmdlemVpZ3Qgd2lyZC5cclxuICAgKi9cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250ZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgLyoqXHJcbiAgICogTmFtZSBkZXMgQ29udGFpbmVycyBmw7xyIGRlbiBUb29sdGlwXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB0b29sdGlwY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dGVyIGbDvHIgTmFtZSBkZXMgQ29udGFpbmVycyBmw7xyIGRlbiBUb29sdGlwLiBXaXJkIGJlbsO2dGlndCwgZGEgVG9vbHRpcCB2aWEgTkdJRiBhdXNnZWJsZW5kZXQgd2VyZGVuIGthbm4uXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgndG9vbHRpcCcsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgc2V0IHRvb2x0aXAoY29udGVudDogRWxlbWVudFJlZikge1xyXG4gICAgaWYgKGNvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRlbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b29sdGlwY29udGFpbmVyID0gY29udGVudDtcclxuICAgIHRoaXMub25Db250ZW50Q2hhbmdlKCk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEtvbnN0cnVrdG9yXHJcbiAgICogQHBhcmFtIHJlZiBFbGVtZW50IFJlZmVyZW56XHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXJ2ZW50IHdlbm4gZGFzIENvbnRyb2wgaW5pdGlhbGlzZXJ0IHdpcmRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIFJlZ2lzdGVyIEV2ZW50IExpc3RlbmVyXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbkNvbnRlbnRDaGFuZ2UsIHRydWUpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMub25Db250ZW50Q2hhbmdlLCB0cnVlKTtcclxuXHJcbiAgICBpZiAodGhpcy50b29sdGlwY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnRvb2x0aXBjb250YWluZXIubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFdmVudCB3ZW5uIGRhcyBDb250cm9sIHplcnN0w7ZydCB3aXJkLlxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgLy8gVW5yZWdpc3RlciBFdmVudCBMaXN0ZW5lclxyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25Db250ZW50Q2hhbmdlLCB0cnVlKTtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uQ29udGVudENoYW5nZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbHRpcGNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy50b29sdGlwY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmVyZWNobmV0IGRpZSBQb3NpdGlvbiBkZXMgVG9vbHRpcHMgdm9uIE9iZW5cclxuICAgKi9cclxuICBwcml2YXRlIGdldFRvcFBvc2l0aW9uKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50ICE9PSBudWxsICYmIHRoaXMuY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRJdGVtID0gaXRlbS5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBjb25zdCBjb250ZW50UG9zaXRpb246IENsaWVudFJlY3QgPSBjaGlsZEl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIHN3aXRjaCAodGhpcy5HZXRUb29sdGlwUG9zaXRpb24oKSkge1xyXG4gICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24udG9wOlxyXG4gICAgICAgICAgICB0aGlzLlRvcFBvcyA9IGNvbnRlbnRQb3NpdGlvbi50b3AgLSB0aGlzLmdldFRvb2xUaXBIZWlnaHQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvbi50b3AgLSB0aGlzLmdldFRvb2xUaXBIZWlnaHQoKTtcclxuICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnJpZ2h0OlxyXG4gICAgICAgICAgICB0aGlzLlRvcFBvcyA9IGNvbnRlbnRQb3NpdGlvbi50b3AgKyAoY29udGVudFBvc2l0aW9uLmhlaWdodCAvIDIpIC0gKHRoaXMuZ2V0VG9vbFRpcEhlaWdodCgpIC8gMik7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb24udG9wICsgKGNvbnRlbnRQb3NpdGlvbi5oZWlnaHQgLyAyKSAtICh0aGlzLmdldFRvb2xUaXBIZWlnaHQoKSAvIDIpO1xyXG4gICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24uYm90dG9tOlxyXG4gICAgICAgICAgICB0aGlzLlRvcFBvcyA9IGNvbnRlbnRQb3NpdGlvbi50b3AgKyBjb250ZW50UG9zaXRpb24uaGVpZ2h0O1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudFBvc2l0aW9uLnRvcCArIGNvbnRlbnRQb3NpdGlvbi5oZWlnaHQ7XHJcbiAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5sZWZ0OlxyXG4gICAgICAgICAgICB0aGlzLlRvcFBvcyA9IGNvbnRlbnRQb3NpdGlvbi50b3AgKyAoY29udGVudFBvc2l0aW9uLmhlaWdodCAvIDIpIC0gKHRoaXMuZ2V0VG9vbFRpcEhlaWdodCgpIC8gMik7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb24udG9wICsgKGNvbnRlbnRQb3NpdGlvbi5oZWlnaHQgLyAyKSAtICh0aGlzLmdldFRvb2xUaXBIZWlnaHQoKSAvIDIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoaWxkSXRlbS5jbGllbnRUb3AgKyBjaGlsZEl0ZW0ub2Zmc2V0VG9wIC0gKCh0aGlzLmdldFRvb2xUaXBIZWlnaHQoKSAvIDIpIC0gKGNoaWxkSXRlbS5jbGllbnRIZWlnaHQgLyAyKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJlcmVjaG5ldCBkaWUgUG9zaXRpb24gZGVzIFRvb2x0aXBzIHZvbiBMaW5rc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0TGVmdFBvc2l0aW9uKCk6IG51bWJlciB7XHJcblxyXG4gICAgaWYgKHRoaXMuY29udGVudCAhPT0gbnVsbCAmJiB0aGlzLmNvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkSXRlbSA9IGl0ZW0uZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY29udGVudFBvc2l0aW9uOiBDbGllbnRSZWN0ID0gY2hpbGRJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMuR2V0VG9vbHRpcFBvc2l0aW9uKCkpIHtcclxuICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcDpcclxuICAgICAgICAgICAgdGhpcy5MZWZ0UG9zID0gY29udGVudFBvc2l0aW9uLmxlZnQgKyAoY29udGVudFBvc2l0aW9uLndpZHRoIC8gMikgLSAodGhpcy5nZXRUb29sVGlwV2lkdGgoKSAvIDIpO1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudFBvc2l0aW9uLmxlZnQgKyAoY29udGVudFBvc2l0aW9uLndpZHRoIC8gMikgLSAodGhpcy5nZXRUb29sVGlwV2lkdGgoKSAvIDIpO1xyXG4gICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ucmlnaHQ6XHJcbiAgICAgICAgICAgIHRoaXMuTGVmdFBvcyA9IGNvbnRlbnRQb3NpdGlvbi5sZWZ0ICsgY29udGVudFBvc2l0aW9uLndpZHRoO1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudFBvc2l0aW9uLmxlZnQgKyBjb250ZW50UG9zaXRpb24ud2lkdGg7XHJcbiAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b206XHJcbiAgICAgICAgICAgIHRoaXMuTGVmdFBvcyA9IGNvbnRlbnRQb3NpdGlvbi5sZWZ0ICsgKGNoaWxkSXRlbS5jbGllbnRXaWR0aCAvIDIpIC0gKHRoaXMuZ2V0VG9vbFRpcFdpZHRoKCkgLyAyKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvbi5sZWZ0ICsgKGNoaWxkSXRlbS5jbGllbnRXaWR0aCAvIDIpIC0gKHRoaXMuZ2V0VG9vbFRpcFdpZHRoKCkgLyAyKTtcclxuICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmxlZnQ6XHJcbiAgICAgICAgICAgIHRoaXMuTGVmdFBvcyA9IGNvbnRlbnRQb3NpdGlvbi5sZWZ0IC0gdGhpcy5nZXRUb29sVGlwV2lkdGgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvbi5sZWZ0IC0gdGhpcy5nZXRUb29sVGlwV2lkdGgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBCZXJlY2huZXQgZGllIEjDtmhlIGRlcyBUb29sdGlwc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0VG9vbFRpcEhlaWdodCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMudG9vbHRpcGNvbnRhaW5lcikge1xyXG4gICAgICByZXR1cm4gdGhpcy50b29sdGlwY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCZXJlY2huZXQgZGllIEJyZWl0ZSBkaWUgVG9vbHRpcHNcclxuICAgKi9cclxuICBwcml2YXRlIGdldFRvb2xUaXBXaWR0aCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMudG9vbHRpcGNvbnRhaW5lcikge1xyXG4gICAgICByZXR1cm4gdGhpcy50b29sdGlwY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmllcnQgb2IgZGVyIFRvb2x0aXAgaW0gTWFya3VwIHZvcmhhbmRlbiBpc3RcclxuICAgKi9cclxuICBJc1Rvb2x0aXBWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzVG9vbHRpcFZpc2libGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb29sdGlwIGFuemVpZ2VuXHJcbiAgICovXHJcbiAgU2hvd1Rvb2x0aXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdldExlZnRQb3NpdGlvbigpO1xyXG4gICAgICB0aGlzLmdldFRvcFBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMuSXNUb29sdGlwQ29udGVudFZpc2libGUgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb29sdGlwIGF1c2JsZW5kZW5cclxuICAgKi9cclxuICBIaWRlVG9vbHRpcCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2lzVG9vbHRpcFZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNUb29sdGlwQ29udGVudFZpc2libGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgd2VubiBDb250ZW50IGdlw6RuZGVydCBoYXQgdW5kIFByb3BvcnRpZXMgaW0gVUkgbmV1IGdlc2V0enQgd2VyZGVuIG3DvHNzZW4uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbkNvbnRlbnRDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5nZXRMZWZ0UG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5nZXRUb3BQb3NpdGlvbigpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHaWJ0IGRpZSBQb3NpdGlvbiBkZXMgVG9vbHRpcHMgenVyw7xja1xyXG4gICAqL1xyXG4gIHB1YmxpYyBHZXRUb29sdGlwUG9zaXRpb24oKTogVG9vbHRpcFBvc2l0aW9uIHtcclxuICAgIGNvbnN0IHZhbGlkUG9zaXRpb25zOiBUb29sdGlwUG9zaXRpb24gPSB0aGlzLlZhbGlkYXRlUG9zaXRpb25zKCk7XHJcblxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcclxuICAgIGlmICh0aGlzLkhhc1Bvc2l0aW9uKFRvb2x0aXBQb3NpdGlvbi5yaWdodCkgJiYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLnJpZ2h0KSkge1xyXG4gICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICBpZiAodGhpcy5IYXNQb3NpdGlvbihUb29sdGlwUG9zaXRpb24udG9wKSAmJiAodmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24udG9wKSkge1xyXG4gICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgaWYgKHRoaXMuSGFzUG9zaXRpb24oVG9vbHRpcFBvc2l0aW9uLmxlZnQpICYmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5sZWZ0KSkge1xyXG4gICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLmxlZnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcclxuICAgIGlmICh0aGlzLkhhc1Bvc2l0aW9uKFRvb2x0aXBQb3NpdGlvbi5ib3R0b20pICYmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5ib3R0b20pKSB7XHJcbiAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdldCBBdXRvIFBvc2l0aW9uIG9yIERlZmF1bHRcclxuICAgIGlmICh0aGlzLklzQXV0b1Bvc2l0aW9uKCkpIHtcclxuXHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkge1xyXG4gICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcclxuICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcclxuICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmxlZnQpIHtcclxuICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLmxlZnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5ib3R0b20pIHtcclxuICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLmJvdHRvbTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLkdldFBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmllcnQgb2IgQXV0b1Bvc2l0aW9uIGFrdGl2IGlzdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgSXNBdXRvUG9zaXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9uLnNwbGl0KCd8Jyk7XHJcbiAgICByZXR1cm4gcG9zaXRpb25zLmluZGV4T2YoJ2F1dG8nKSA+PSAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2lidCBkaWUgZGVmaW5pZXJ0ZSBQb3NpdGlvbiBmw7xyIGRlbiBUb29sdGlwIHp1csO8Y2tcclxuICAgKi9cclxuICBwcml2YXRlIEdldFBvc2l0aW9uKCk6IFRvb2x0aXBQb3NpdGlvbiB7XHJcbiAgICBjb25zdCBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9uLnNwbGl0KCd8Jyk7XHJcblxyXG4gICAgaWYgKHRoaXMuSGFzUG9zaXRpb24oVG9vbHRpcFBvc2l0aW9uLmxlZnQpKSB7XHJcbiAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5IYXNQb3NpdGlvbihUb29sdGlwUG9zaXRpb24udG9wKSkge1xyXG4gICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5IYXNQb3NpdGlvbihUb29sdGlwUG9zaXRpb24ucmlnaHQpKSB7XHJcbiAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuSGFzUG9zaXRpb24oVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkpIHtcclxuICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGVmYXVsdCBQb3NpdGlvbiBpZiBlbXB0eVxyXG4gICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdpYnQgenVyw7xjaywgb2IgZGllIFBvc2l0aW9uIGtvbmZpZ3VyaWVydCB3dXJkZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFBvc2l0aW9uIGF1ZiB3ZWxjaGUgZ2VwcsO8ZnQgd2lyZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgSGFzUG9zaXRpb24ocG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbi5zcGxpdCgnfCcpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0ICYmIHBvc2l0aW9ucy5pbmRleE9mKCdyaWdodCcpID49IDApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24udG9wICYmIHBvc2l0aW9ucy5pbmRleE9mKCd0b3AnKSA+PSAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLmxlZnQgJiYgcG9zaXRpb25zLmluZGV4T2YoJ2xlZnQnKSA+PSAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSAmJiBwb3NpdGlvbnMuaW5kZXhPZignYm90dG9tJykgPj0gMCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcsO8ZnQgb2IgZGllIFBvc2l0aW9uIGfDvGx0aWcgaXN0LCByZXNwLiBkZXIgVG9vbHRpcCBhdWYgZGllIFBvc2l0aW9uIHBsYXR6IGhhdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgVmFsaWRhdGVQb3NpdGlvbnMoKTogVG9vbHRpcFBvc2l0aW9uIHtcclxuICAgIC8vIENoZWNrIGlmIENvbnRhaW5lciBpcyBmYWxzZVxyXG4gICAgaWYgKHRoaXMudG9vbHRpcGNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGFsbG93ZWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5ub25lO1xyXG4gICAgY29uc3QgYmFzZVBvc2l0aW9uOiBDbGllbnRSZWN0ID0gdGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCB0b29sdGlwUmVjdDogQ2xpZW50UmVjdCA9IHRoaXMudG9vbHRpcGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIGNvbnN0IGxlZnRQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5sZWZ0IC0gdG9vbHRpcFJlY3Qud2lkdGggPiAwO1xyXG4gICAgY29uc3QgcmlnaHRQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5yaWdodCArIHRvb2x0aXBSZWN0LndpZHRoIDwgd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICBjb25zdCB0b3BQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi50b3AgLSB0b29sdGlwUmVjdC5oZWlnaHQgPiAwO1xyXG4gICAgY29uc3QgYm90dG9tUG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24uYm90dG9tICsgdG9vbHRpcFJlY3QuaGVpZ2h0IDwgd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgIGNvbnN0IGxlZnRIYWxmUG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24ubGVmdCAtICh0b29sdGlwUmVjdC53aWR0aCAvIDIpID4gMDtcclxuICAgIGNvbnN0IHJpZ2h0SGFsZlBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnJpZ2h0ICsgKHRvb2x0aXBSZWN0LndpZHRoIC8gMikgPCB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIGNvbnN0IHRvcEhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi50b3AgLSAodG9vbHRpcFJlY3QuaGVpZ2h0IC8gMikgPiAwO1xyXG4gICAgY29uc3QgYm90dG9tSGFsZlBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLmJvdHRvbSArICh0b29sdGlwUmVjdC5oZWlnaHQgLyAyKSA8IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICBpZiAobGVmdFBvc09rICYmIHRvcEhhbGZQb3NPayAmJiBib3R0b21IYWxmUG9zT2spIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcclxuICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24ubGVmdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmlnaHRQb3NPayAmJiB0b3BIYWxmUG9zT2sgJiYgYm90dG9tSGFsZlBvc09rKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0b3BQb3NPayAmJiBsZWZ0SGFsZlBvc09rICYmIHJpZ2h0SGFsZlBvc09rKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYm90dG9tUG9zT2sgJiYgbGVmdEhhbGZQb3NPayAmJiByaWdodEhhbGZQb3NPaykge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICBhbGxvd2VkUG9zaXRpb25zID0gYWxsb3dlZFBvc2l0aW9ucyB8IFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFsbG93ZWRQb3NpdGlvbnM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
37
+ * Value 'auto' can be combined with another value.
38
+ */cov_vnuuxsm2m().s[10]++;this.position='right|auto';/**
39
+ * method if content has changed and proportions need to be reset in the UI.
40
+ */cov_vnuuxsm2m().s[11]++;this.onContentChange=()=>{cov_vnuuxsm2m().f[1]++;cov_vnuuxsm2m().s[12]++;// Do nothing if is not visible
41
+ if(!this._isTooltipVisible){cov_vnuuxsm2m().b[0][0]++;cov_vnuuxsm2m().s[13]++;return;}else{cov_vnuuxsm2m().b[0][1]++;}cov_vnuuxsm2m().s[14]++;setTimeout(()=>{cov_vnuuxsm2m().f[2]++;cov_vnuuxsm2m().s[15]++;this.getLeftPosition();cov_vnuuxsm2m().s[16]++;this.getTopPosition();});};}// #endregion Constructors
42
+ // #region Public Getters And Setters
43
+ /**
44
+ * Property for inline mode for tooltip. Sets the display mode on the wrapper element to `inline`
45
+ */get inlinemode(){cov_vnuuxsm2m().f[3]++;cov_vnuuxsm2m().s[17]++;return this._inlinemode;}/**
46
+ * Setter for inline mode for tooltip
47
+ */set inlinemode(value){cov_vnuuxsm2m().f[4]++;cov_vnuuxsm2m().s[18]++;this._inlinemode=convertToBoolean(value);}/**
48
+ * Setter for the name of the container for the tooltip. Is required as the tooltip can be hidden via ngIf.
49
+ */set tooltip(content){cov_vnuuxsm2m().f[5]++;cov_vnuuxsm2m().s[19]++;if(content!==undefined){cov_vnuuxsm2m().b[1][0]++;cov_vnuuxsm2m().s[20]++;document.body.appendChild(content.nativeElement);}else{cov_vnuuxsm2m().b[1][1]++;}cov_vnuuxsm2m().s[21]++;this.tooltipcontainer=content;cov_vnuuxsm2m().s[22]++;this.onContentChange();cov_vnuuxsm2m().s[23]++;this.cdRef.detectChanges();}get tooltop(){cov_vnuuxsm2m().f[6]++;cov_vnuuxsm2m().s[24]++;return this.tooltipcontainer;}// #endregion Public Getters And Setters
50
+ // #region Public Methods
51
+ /**
52
+ * Returns the position of the tooltip
53
+ */GetTooltipPosition(){cov_vnuuxsm2m().f[7]++;cov_vnuuxsm2m().s[25]++;return this.popupHelper.getDisplayPosition(this.content,this.tooltipcontainer,this.getTooltipOffset(),this.getTooltipOffset(),this.position,true);}/**
54
+ * Hide tooltip
55
+ */HideTooltip(){cov_vnuuxsm2m().f[8]++;cov_vnuuxsm2m().s[26]++;this._isTooltipVisible=false;cov_vnuuxsm2m().s[27]++;this.IsTooltipContentVisible=false;}/**
56
+ * Defines whether the tooltip is present in the markup
57
+ */IsTooltipVisible(){cov_vnuuxsm2m().f[9]++;cov_vnuuxsm2m().s[28]++;return this._isTooltipVisible;}/**
58
+ * Show tooltip
59
+ */ShowTooltip(){cov_vnuuxsm2m().f[10]++;cov_vnuuxsm2m().s[29]++;this._isTooltipVisible=true;cov_vnuuxsm2m().s[30]++;this.cdRef.detectChanges();cov_vnuuxsm2m().s[31]++;setTimeout(()=>{cov_vnuuxsm2m().f[11]++;cov_vnuuxsm2m().s[32]++;this.getLeftPosition();cov_vnuuxsm2m().s[33]++;this.getTopPosition();cov_vnuuxsm2m().s[34]++;this.IsTooltipContentVisible=true;});}/**
60
+ * Calculates the height of the tooltip
61
+ */getToolTipHeight(){cov_vnuuxsm2m().f[12]++;cov_vnuuxsm2m().s[35]++;return this.popupHelper.getPopupHeight(this.tooltipcontainer);}/**
62
+ * Calculates the width of the tooltips
63
+ */getToolTipWidth(){cov_vnuuxsm2m().f[13]++;cov_vnuuxsm2m().s[36]++;return this.popupHelper.getPopupWidth(this.tooltipcontainer);}/**
64
+ * Detect Changes after view checked. Prevent ExpressionChangedAfterItHasBeenCheckedError error
65
+ */ngAfterViewChecked(){cov_vnuuxsm2m().f[14]++;cov_vnuuxsm2m().s[37]++;// Do nothing if is not visibile
66
+ if(!this._isTooltipVisible){cov_vnuuxsm2m().b[2][0]++;cov_vnuuxsm2m().s[38]++;return;}else{cov_vnuuxsm2m().b[2][1]++;}cov_vnuuxsm2m().s[39]++;this.cdRef.detectChanges();}/**
67
+ * Detect UI Changes to Calculate Tooltip correct
68
+ */ngDoCheck(){cov_vnuuxsm2m().f[15]++;cov_vnuuxsm2m().s[40]++;// Do nothing if is not visibile
69
+ if(!this._isTooltipVisible){cov_vnuuxsm2m().b[3][0]++;cov_vnuuxsm2m().s[41]++;return;}else{cov_vnuuxsm2m().b[3][1]++;}cov_vnuuxsm2m().s[42]++;this.getLeftPosition();cov_vnuuxsm2m().s[43]++;this.getTopPosition();}/**
70
+ * Event when the control is destroyed.
71
+ */ngOnDestroy(){cov_vnuuxsm2m().f[16]++;cov_vnuuxsm2m().s[44]++;// Unregister Event Listener
72
+ window.removeEventListener('scroll',this.onContentChange,true);cov_vnuuxsm2m().s[45]++;window.removeEventListener('resize',this.onContentChange,true);cov_vnuuxsm2m().s[46]++;if(this.tooltipcontainer!==undefined){cov_vnuuxsm2m().b[4][0]++;cov_vnuuxsm2m().s[47]++;document.body.removeChild(this.tooltipcontainer.nativeElement);}else{cov_vnuuxsm2m().b[4][1]++;}}/**
73
+ * Event when the control is initialized
74
+ */ngOnInit(){cov_vnuuxsm2m().f[17]++;cov_vnuuxsm2m().s[48]++;// Register Event Listener
75
+ window.addEventListener('scroll',this.onContentChange,true);cov_vnuuxsm2m().s[49]++;window.addEventListener('resize',this.onContentChange,true);cov_vnuuxsm2m().s[50]++;if(this.tooltipcontainer!==undefined){cov_vnuuxsm2m().b[5][0]++;cov_vnuuxsm2m().s[51]++;document.body.appendChild(this.tooltipcontainer.nativeElement);}else{cov_vnuuxsm2m().b[5][1]++;}}// #endregion Protected Methods
76
+ // #region Private Methods
77
+ /**
78
+ * Calculates the position of the tooltip from links
79
+ */getLeftPosition(){cov_vnuuxsm2m().f[18]++;const value=(cov_vnuuxsm2m().s[52]++,this.popupHelper.getPositionLeft(this.content,this.tooltipcontainer,this.ref,this.getTooltipOffset(),this.getTooltipOffset(),this.position,true));cov_vnuuxsm2m().s[53]++;this.LeftPos=value;const requiredPosition=(cov_vnuuxsm2m().s[54]++,this.GetTooltipPosition());cov_vnuuxsm2m().s[55]++;if((cov_vnuuxsm2m().b[7][0]++,requiredPosition===TooltipPosition.left)||(cov_vnuuxsm2m().b[7][1]++,requiredPosition===TooltipPosition.right)){cov_vnuuxsm2m().b[6][0]++;cov_vnuuxsm2m().s[56]++;this.posArrowTop=this.getToolTipHeight()/2-6.5;}else{cov_vnuuxsm2m().b[6][1]++;cov_vnuuxsm2m().s[57]++;this.posArrowTop=null;}cov_vnuuxsm2m().s[58]++;return value;}/**
80
+ * Calculates the position of the tooltip from the top
81
+ */getTopPosition(){cov_vnuuxsm2m().f[19]++;const value=(cov_vnuuxsm2m().s[59]++,this.popupHelper.getPositionTop(this.content,this.tooltipcontainer,this.ref,this.getTooltipOffset(),this.getTooltipOffset(),this.position,true));cov_vnuuxsm2m().s[60]++;this.TopPos=value;const requiredPosition=(cov_vnuuxsm2m().s[61]++,this.GetTooltipPosition());cov_vnuuxsm2m().s[62]++;if((cov_vnuuxsm2m().b[9][0]++,requiredPosition===TooltipPosition.bottom)||(cov_vnuuxsm2m().b[9][1]++,requiredPosition===TooltipPosition.top)){cov_vnuuxsm2m().b[8][0]++;cov_vnuuxsm2m().s[63]++;this.posArrowLeft=this.getToolTipWidth()/2-6.5;}else{cov_vnuuxsm2m().b[8][1]++;cov_vnuuxsm2m().s[64]++;this.posArrowLeft=null;}cov_vnuuxsm2m().s[65]++;return value;}static{cov_vnuuxsm2m().s[66]++;this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"16.2.12",ngImport:i0,type:SacTooltipCommon,deps:[{token:i0.ChangeDetectorRef},{token:i0.ElementRef}],target:i0.ɵɵFactoryTarget.Directive});}static{cov_vnuuxsm2m().s[67]++;this.ɵdir=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"16.2.12",type:SacTooltipCommon,inputs:{position:"position",tooltiptext:"tooltiptext",inlinemode:"inlinemode"},viewQueries:[{propertyName:"content",first:true,predicate:["container"],descendants:true,static:true},{propertyName:"tooltip",first:true,predicate:["tooltip"],descendants:true}],ngImport:i0});}}export{SacTooltipCommon};cov_vnuuxsm2m().s[68]++;i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"16.2.12",ngImport:i0,type:SacTooltipCommon,decorators:[{type:Directive}],ctorParameters:function(){cov_vnuuxsm2m().f[20]++;cov_vnuuxsm2m().s[69]++;return[{type:i0.ChangeDetectorRef},{type:i0.ElementRef}];},propDecorators:{content:[{type:ViewChild,args:['container',{static:true}]}],position:[{type:Input}],tooltiptext:[{type:Input}],inlinemode:[{type:Input}],tooltip:[{type:ViewChild,args:['tooltip',{static:false}]}]}});//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbnRyb2xzL3Rvb2x0aXAvdG9vbHRpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFHSCxTQUFTLEVBR1QsS0FBSyxFQUdMLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQzs7QUFFdkI7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQ3NCLGdCQUFnQjtJQXlFbEMsd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7O09BR0c7SUFDSCxZQUE2QixLQUF3QixFQUFtQixHQUFlO1FBQTFELFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQW1CLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFoRnZGLHFCQUFxQjtRQUVyQjs7V0FFRztRQUNjLGdCQUFXLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFPOUQ7O1dBRUc7UUFDSyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFPM0M7O1dBRUc7UUFDSSw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFFaEQ7O1dBRUc7UUFDSSxZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBRTNCOztXQUVHO1FBQ0ksb0JBQWUsR0FBRyxlQUFlLENBQUM7UUFFekM7O1dBRUc7UUFDSSxXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBUTFCOztXQUVHO1FBQ0ksaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBRTFDOztXQUVHO1FBQ0ksZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO1FBRXpDOzs7O1dBSUc7UUFFSSxhQUFRLEdBQVcsWUFBWSxDQUFDO1FBc092Qzs7V0FFRztRQUNjLG9CQUFlLEdB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QUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOytHQXJTaUIsZ0JBQWdCO21HQUFoQixnQkFBZ0I7O1NBQWhCLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQURyQyxTQUFTO2lJQWdEQyxPQUFPO3NCQURiLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFtQmpDLFFBQVE7c0JBRGQsS0FBSztnQkFPQyxXQUFXO3NCQURqQixLQUFLO2dCQTRCSyxVQUFVO3NCQURwQixLQUFLO2dCQVNLLE9BQU87c0JBRGpCLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvY29udmVydGlvbic7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9lbnVtcyc7XHJcbmltcG9ydCB7IFBvcFVwSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3BvcHVwaGVscGVyJztcclxuaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIERpcmVjdGl2ZSxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogVG9vbHRpcCBDb21wb25lbnRcclxuICpcclxuICogUmVxdWlyZXMgdGhlIGZvbGxvd2luZyBpZGVudGlmaWVycyBpbiB0aGUgSFRNTCBtYXJrdXBcclxuICogLSBjb250YWluZXI6IENvbnRhaW5lciBmb3IgbmctY29udGVudCBpbiB3aGljaCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2hlcmUgdGhlIHRvb2x0aXAgaXMgYXR0YWNoZWQuXHJcbiAqIC0gdG9vbHRpcDogQ29udGFpbmVyIGZvciB0b29sdGlwXHJcbiAqXHJcbiAqIFRvb2x0aXAgbXVzdCBiZSBkaXNwbGF5ZWQgaW4gMiBzdGVwcy4gSW4gYSBmaXJzdCBzdGVwIHRoZSB0b29sdGlwIG1hcmt1cCBpcyBjcmVhdGVkIHdpdGggKG5nSWYpLiBJbiBhIDJuZCBzdGVwXHJcbiAqIHRoZSB0b29sdGlwIGNhbiB0aGVuIGJlIGRpc3BsYXllZCB2aWEgdGhlIENTUyB2aXNpYmlsaXR5LiBJZiB0aGlzIGlzIG5vdCBkb25lLCBpdCBjYW4gbGVhZCB0byBhIGZsaWNrZXJpbmcgZWZmZWN0IGluIGNlcnRhaW4gYnJvd3NlcnMuXHJcbiAqXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY1Rvb2x0aXBDb21tb24gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCwgRG9DaGVjayB7XHJcbiAgICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBjbGFzcyB0byBkaXNwbGF5IHRvb2x0aXAgb24gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcHVwSGVscGVyOiBQb3BVcEhlbHBlciA9IG5ldyBQb3BVcEhlbHBlcigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5saW5lIG1vZGUgZm9yIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaW5saW5lbW9kZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgdG9vbHRpcCBpcyB2aXNpYmxlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzVG9vbHRpcFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRhaW5lcnMgZm9yIHRoZSB0b29sdGlwXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdG9vbHRpcGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiBvZiB0aGUgdG9vbHRpcCBvbiB0aGUgbGVmdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgSXNUb29sdGlwQ29udGVudFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvc2l0aW9uIGRlcyBUb29sdGlwcyBsaW5rc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgTGVmdFBvczogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IGZvciBlbnVtIGluIEFuZ3VsYXIgSFRNTCB0ZW1wbGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgVG9vbHRpcFBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgYXQgdGhlIHRvcFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgVG9wUG9zOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmFtZSBvZiB0aGUgY29udGFpbmVyIGZvciBjb250ZW50IChlLmcuIGljb24pIG9uIHdoaWNoIHRoZSB0b29sdGlwIGlzIGRpc3BsYXllZC5cclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIHB1YmxpYyBjb250ZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvc2l0aW9uIG9mIHRoZSBwaWNrZXIgYXJyb3cgYXQgdGhlIGxlZnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBvc0Fycm93TGVmdDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiBvZiB0aGUgcGlja2VyIGFycm93IGF0IHRoZSB0b3BcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBvc0Fycm93VG9wOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvc2l0aW9uIG9mIHRoZSB0b29sdGlwLiBWYWx1ZXM6IGxlZnR8dG9wfHJpZ2h0fGJvdHRvbXxhdXRvXHJcbiAgICAgKlxyXG4gICAgICogVmFsdWUgJ2F1dG8nIGNhbiBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcG9zaXRpb246IHN0cmluZyA9ICdyaWdodHxhdXRvJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgZm9yIFRvb2xUaXBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0b29sdGlwdGV4dDogc3RyaW5nO1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAgIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBLb25zdHJ1a3RvclxyXG4gICAgICogQHBhcmFtIHJlZiBFbGVtZW50IFJlZmVyZW56XHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHJlYWRvbmx5IHJlZjogRWxlbWVudFJlZikge31cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAgIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IGZvciBpbmxpbmUgbW9kZSBmb3IgdG9vbHRpcC4gU2V0cyB0aGUgZGlzcGxheSBtb2RlIG9uIHRoZSB3cmFwcGVyIGVsZW1lbnQgdG8gYGlubGluZWBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbmxpbmVtb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmxpbmVtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0dGVyIGZvciBpbmxpbmUgbW9kZSBmb3IgdG9vbHRpcFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBpbmxpbmVtb2RlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5faW5saW5lbW9kZSA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0dGVyIGZvciB0aGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIGZvciB0aGUgdG9vbHRpcC4gSXMgcmVxdWlyZWQgYXMgdGhlIHRvb2x0aXAgY2FuIGJlIGhpZGRlbiB2aWEgbmdJZi5cclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZCgndG9vbHRpcCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gICAgcHVibGljIHNldCB0b29sdGlwKGNvbnRlbnQ6IEVsZW1lbnRSZWYpIHtcclxuICAgICAgICBpZiAoY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcGNvbnRhaW5lciA9IGNvbnRlbnQ7XHJcbiAgICAgICAgdGhpcy5vbkNvbnRlbnRDaGFuZ2UoKTtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvb2x0b3AoKTogRWxlbWVudFJlZiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcGNvbnRhaW5lcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIEdldFRvb2x0aXBQb3NpdGlvbigpOiBUb29sdGlwUG9zaXRpb24ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvcHVwSGVscGVyLmdldERpc3BsYXlQb3NpdGlvbihcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBjb250YWluZXIsXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9vbHRpcE9mZnNldCgpLFxyXG4gICAgICAgICAgICB0aGlzLmdldFRvb2x0aXBPZmZzZXQoKSxcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbixcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIaWRlIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIEhpZGVUb29sdGlwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2lzVG9vbHRpcFZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLklzVG9vbHRpcENvbnRlbnRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHRvb2x0aXAgaXMgcHJlc2VudCBpbiB0aGUgbWFya3VwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBJc1Rvb2x0aXBWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyB0b29sdGlwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBTaG93VG9vbHRpcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TGVmdFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9wUG9zaXRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5Jc1Rvb2x0aXBDb250ZW50VmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBoZWlnaHQgb2YgdGhlIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFRvb2xUaXBIZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3B1cEhlbHBlci5nZXRQb3B1cEhlaWdodCh0aGlzLnRvb2x0aXBjb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgdGhlIHRvb2x0aXBzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRUb29sVGlwV2lkdGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3B1cEhlbHBlci5nZXRQb3B1cFdpZHRoKHRoaXMudG9vbHRpcGNvbnRhaW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlY3QgQ2hhbmdlcyBhZnRlciB2aWV3IGNoZWNrZWQuIFByZXZlbnQgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvciBlcnJvclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgaXMgbm90IHZpc2liaWxlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZWN0IFVJIENoYW5nZXMgdG8gQ2FsY3VsYXRlIFRvb2x0aXAgY29ycmVjdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgaXMgbm90IHZpc2liaWxlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0TGVmdFBvc2l0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5nZXRUb3BQb3NpdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgd2hlbiB0aGUgY29udHJvbCBpcyBkZXN0cm95ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICAvLyBVbnJlZ2lzdGVyIEV2ZW50IExpc3RlbmVyXHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25Db250ZW50Q2hhbmdlLCB0cnVlKTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vbkNvbnRlbnRDaGFuZ2UsIHRydWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLnRvb2x0aXBjb250YWluZXIubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgd2hlbiB0aGUgY29udHJvbCBpcyBpbml0aWFsaXplZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLy8gUmVnaXN0ZXIgRXZlbnQgTGlzdGVuZXJcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbkNvbnRlbnRDaGFuZ2UsIHRydWUpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uQ29udGVudENoYW5nZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBjb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMudG9vbHRpcGNvbnRhaW5lci5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAgIC8vICNyZWdpb24gUHJvdGVjdGVkIE1ldGhvZHNcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9mZnNldCBmb3IgVG9vbHRpcC4gUmVxdWlyZWQgZm9yIEJTNC9CUzUgdG8gY3JlYXRlIHBhZGRpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFRvb2x0aXBPZmZzZXQoKTogbnVtYmVyO1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJvdGVjdGVkIE1ldGhvZHNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgZnJvbSBsaW5rc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldExlZnRQb3NpdGlvbigpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wb3B1cEhlbHBlci5nZXRQb3NpdGlvbkxlZnQoXHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudCxcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwY29udGFpbmVyLFxyXG4gICAgICAgICAgICB0aGlzLnJlZixcclxuICAgICAgICAgICAgdGhpcy5nZXRUb29sdGlwT2Zmc2V0KCksXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9vbHRpcE9mZnNldCgpLFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLkxlZnRQb3MgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVxdWlyZWRQb3NpdGlvbiA9IHRoaXMuR2V0VG9vbHRpcFBvc2l0aW9uKCk7XHJcbiAgICAgICAgaWYgKHJlcXVpcmVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5sZWZ0IHx8IHJlcXVpcmVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5yaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnBvc0Fycm93VG9wID0gdGhpcy5nZXRUb29sVGlwSGVpZ2h0KCkgLyAyIC0gNi41O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zQXJyb3dUb3AgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgZnJvbSB0aGUgdG9wXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VG9wUG9zaXRpb24oKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucG9wdXBIZWxwZXIuZ2V0UG9zaXRpb25Ub3AoXHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudCxcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwY29udGFpbmVyLFxyXG4gICAgICAgICAgICB0aGlzLnJlZixcclxuICAgICAgICAgICAgdGhpcy5nZXRUb29sdGlwT2Zmc2V0KCksXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9vbHRpcE9mZnNldCgpLFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLlRvcFBvcyA9IHZhbHVlO1xyXG5cclxuICAgICAgICBjb25zdCByZXF1aXJlZFBvc2l0aW9uID0gdGhpcy5HZXRUb29sdGlwUG9zaXRpb24oKTtcclxuICAgICAgICBpZiAocmVxdWlyZWRQb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSB8fCByZXF1aXJlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24udG9wKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zQXJyb3dMZWZ0ID0gdGhpcy5nZXRUb29sVGlwV2lkdGgoKSAvIDIgLSA2LjU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NBcnJvd0xlZnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogbWV0aG9kIGlmIGNvbnRlbnQgaGFzIGNoYW5nZWQgYW5kIHByb3BvcnRpb25zIG5lZWQgdG8gYmUgcmVzZXQgaW4gdGhlIFVJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9uQ29udGVudENoYW5nZSA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGlzIG5vdCB2aXNpYmxlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldExlZnRQb3NpdGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLmdldFRvcFBvc2l0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcbn1cclxuIl19
82
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3Zfdm51dXhzbTJtIiwiYWN0dWFsQ292ZXJhZ2UiLCJjb252ZXJ0VG9Cb29sZWFuIiwiVG9vbHRpcFBvc2l0aW9uIiwiUG9wVXBIZWxwZXIiLCJEaXJlY3RpdmUiLCJJbnB1dCIsIlZpZXdDaGlsZCIsIlNhY1Rvb2x0aXBDb21tb24iLCJjb25zdHJ1Y3RvciIsImNkUmVmIiwicmVmIiwiZiIsInMiLCJwb3B1cEhlbHBlciIsIl9pc1Rvb2x0aXBWaXNpYmxlIiwiSXNUb29sdGlwQ29udGVudFZpc2libGUiLCJMZWZ0UG9zIiwiVG9wUG9zIiwicG9zQXJyb3dMZWZ0IiwicG9zQXJyb3dUb3AiLCJwb3NpdGlvbiIsIm9uQ29udGVudENoYW5nZSIsImIiLCJzZXRUaW1lb3V0IiwiZ2V0TGVmdFBvc2l0aW9uIiwiZ2V0VG9wUG9zaXRpb24iLCJpbmxpbmVtb2RlIiwiX2lubGluZW1vZGUiLCJ2YWx1ZSIsInRvb2x0aXAiLCJjb250ZW50IiwidW5kZWZpbmVkIiwiZG9jdW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJuYXRpdmVFbGVtZW50IiwidG9vbHRpcGNvbnRhaW5lciIsImRldGVjdENoYW5nZXMiLCJ0b29sdG9wIiwiR2V0VG9vbHRpcFBvc2l0aW9uIiwiZ2V0RGlzcGxheVBvc2l0aW9uIiwiZ2V0VG9vbHRpcE9mZnNldCIsIkhpZGVUb29sdGlwIiwiSXNUb29sdGlwVmlzaWJsZSIsIlNob3dUb29sdGlwIiwiZ2V0VG9vbFRpcEhlaWdodCIsImdldFBvcHVwSGVpZ2h0IiwiZ2V0VG9vbFRpcFdpZHRoIiwiZ2V0UG9wdXBXaWR0aCIsIm5nQWZ0ZXJWaWV3Q2hlY2tlZCIsIm5nRG9DaGVjayIsIm5nT25EZXN0cm95Iiwid2luZG93IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbW92ZUNoaWxkIiwibmdPbkluaXQiLCJhZGRFdmVudExpc3RlbmVyIiwiZ2V0UG9zaXRpb25MZWZ0IiwicmVxdWlyZWRQb3NpdGlvbiIsImxlZnQiLCJyaWdodCIsImdldFBvc2l0aW9uVG9wIiwiYm90dG9tIiwidG9wIiwiZGVwcyIsInRva2VuIiwiaTAiLCJDaGFuZ2VEZXRlY3RvclJlZiIsIkVsZW1lbnRSZWYiLCJ0YXJnZXQiLCLJtcm1RmFjdG9yeVRhcmdldCIsImlucHV0cyIsInRvb2x0aXB0ZXh0Iiwidmlld1F1ZXJpZXMiLCJwcm9wZXJ0eU5hbWUiLCJmaXJzdCIsInByZWRpY2F0ZSIsImRlc2NlbmRhbnRzIiwic3RhdGljIiwibmdJbXBvcnQiLCJkZWNvcmF0b3JzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvY29udHJvbHMvdG9vbHRpcC90b29sdGlwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvY29udmVydGlvbic7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9lbnVtcyc7XHJcbmltcG9ydCB7IFBvcFVwSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3BvcHVwaGVscGVyJztcclxuaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIERpcmVjdGl2ZSxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogVG9vbHRpcCBDb21wb25lbnRcclxuICpcclxuICogUmVxdWlyZXMgdGhlIGZvbGxvd2luZyBpZGVudGlmaWVycyBpbiB0aGUgSFRNTCBtYXJrdXBcclxuICogLSBjb250YWluZXI6IENvbnRhaW5lciBmb3IgbmctY29udGVudCBpbiB3aGljaCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2hlcmUgdGhlIHRvb2x0aXAgaXMgYXR0YWNoZWQuXHJcbiAqIC0gdG9vbHRpcDogQ29udGFpbmVyIGZvciB0b29sdGlwXHJcbiAqXHJcbiAqIFRvb2x0aXAgbXVzdCBiZSBkaXNwbGF5ZWQgaW4gMiBzdGVwcy4gSW4gYSBmaXJzdCBzdGVwIHRoZSB0b29sdGlwIG1hcmt1cCBpcyBjcmVhdGVkIHdpdGggKG5nSWYpLiBJbiBhIDJuZCBzdGVwXHJcbiAqIHRoZSB0b29sdGlwIGNhbiB0aGVuIGJlIGRpc3BsYXllZCB2aWEgdGhlIENTUyB2aXNpYmlsaXR5LiBJZiB0aGlzIGlzIG5vdCBkb25lLCBpdCBjYW4gbGVhZCB0byBhIGZsaWNrZXJpbmcgZWZmZWN0IGluIGNlcnRhaW4gYnJvd3NlcnMuXHJcbiAqXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY1Rvb2x0aXBDb21tb24gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCwgRG9DaGVjayB7XHJcbiAgICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBjbGFzcyB0byBkaXNwbGF5IHRvb2x0aXAgb24gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcHVwSGVscGVyOiBQb3BVcEhlbHBlciA9IG5ldyBQb3BVcEhlbHBlcigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5saW5lIG1vZGUgZm9yIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaW5saW5lbW9kZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgdG9vbHRpcCBpcyB2aXNpYmxlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzVG9vbHRpcFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRhaW5lcnMgZm9yIHRoZSB0b29sdGlwXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdG9vbHRpcGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiBvZiB0aGUgdG9vbHRpcCBvbiB0aGUgbGVmdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgSXNUb29sdGlwQ29udGVudFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvc2l0aW9uIGRlcyBUb29sdGlwcyBsaW5rc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgTGVmdFBvczogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IGZvciBlbnVtIGluIEFuZ3VsYXIgSFRNTCB0ZW1wbGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgVG9vbHRpcFBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgYXQgdGhlIHRvcFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgVG9wUG9zOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmFtZSBvZiB0aGUgY29udGFpbmVyIGZvciBjb250ZW50IChlLmcuIGljb24pIG9uIHdoaWNoIHRoZSB0b29sdGlwIGlzIGRpc3BsYXllZC5cclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIHB1YmxpYyBjb250ZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvc2l0aW9uIG9mIHRoZSBwaWNrZXIgYXJyb3cgYXQgdGhlIGxlZnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBvc0Fycm93TGVmdDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiBvZiB0aGUgcGlja2VyIGFycm93IGF0IHRoZSB0b3BcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBvc0Fycm93VG9wOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvc2l0aW9uIG9mIHRoZSB0b29sdGlwLiBWYWx1ZXM6IGxlZnR8dG9wfHJpZ2h0fGJvdHRvbXxhdXRvXHJcbiAgICAgKlxyXG4gICAgICogVmFsdWUgJ2F1dG8nIGNhbiBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcG9zaXRpb246IHN0cmluZyA9ICdyaWdodHxhdXRvJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgZm9yIFRvb2xUaXBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0b29sdGlwdGV4dDogc3RyaW5nO1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAgIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBLb25zdHJ1a3RvclxyXG4gICAgICogQHBhcmFtIHJlZiBFbGVtZW50IFJlZmVyZW56XHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHJlYWRvbmx5IHJlZjogRWxlbWVudFJlZikge31cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAgIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IGZvciBpbmxpbmUgbW9kZSBmb3IgdG9vbHRpcC4gU2V0cyB0aGUgZGlzcGxheSBtb2RlIG9uIHRoZSB3cmFwcGVyIGVsZW1lbnQgdG8gYGlubGluZWBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbmxpbmVtb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmxpbmVtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0dGVyIGZvciBpbmxpbmUgbW9kZSBmb3IgdG9vbHRpcFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBpbmxpbmVtb2RlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5faW5saW5lbW9kZSA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0dGVyIGZvciB0aGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIGZvciB0aGUgdG9vbHRpcC4gSXMgcmVxdWlyZWQgYXMgdGhlIHRvb2x0aXAgY2FuIGJlIGhpZGRlbiB2aWEgbmdJZi5cclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZCgndG9vbHRpcCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gICAgcHVibGljIHNldCB0b29sdGlwKGNvbnRlbnQ6IEVsZW1lbnRSZWYpIHtcclxuICAgICAgICBpZiAoY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcGNvbnRhaW5lciA9IGNvbnRlbnQ7XHJcbiAgICAgICAgdGhpcy5vbkNvbnRlbnRDaGFuZ2UoKTtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvb2x0b3AoKTogRWxlbWVudFJlZiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcGNvbnRhaW5lcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIEdldFRvb2x0aXBQb3NpdGlvbigpOiBUb29sdGlwUG9zaXRpb24ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvcHVwSGVscGVyLmdldERpc3BsYXlQb3NpdGlvbihcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBjb250YWluZXIsXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9vbHRpcE9mZnNldCgpLFxyXG4gICAgICAgICAgICB0aGlzLmdldFRvb2x0aXBPZmZzZXQoKSxcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbixcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIaWRlIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIEhpZGVUb29sdGlwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2lzVG9vbHRpcFZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLklzVG9vbHRpcENvbnRlbnRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHRvb2x0aXAgaXMgcHJlc2VudCBpbiB0aGUgbWFya3VwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBJc1Rvb2x0aXBWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyB0b29sdGlwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBTaG93VG9vbHRpcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TGVmdFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9wUG9zaXRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5Jc1Rvb2x0aXBDb250ZW50VmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBoZWlnaHQgb2YgdGhlIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFRvb2xUaXBIZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3B1cEhlbHBlci5nZXRQb3B1cEhlaWdodCh0aGlzLnRvb2x0aXBjb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgdGhlIHRvb2x0aXBzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRUb29sVGlwV2lkdGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3B1cEhlbHBlci5nZXRQb3B1cFdpZHRoKHRoaXMudG9vbHRpcGNvbnRhaW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlY3QgQ2hhbmdlcyBhZnRlciB2aWV3IGNoZWNrZWQuIFByZXZlbnQgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvciBlcnJvclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgaXMgbm90IHZpc2liaWxlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZWN0IFVJIENoYW5nZXMgdG8gQ2FsY3VsYXRlIFRvb2x0aXAgY29ycmVjdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgaXMgbm90IHZpc2liaWxlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0TGVmdFBvc2l0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5nZXRUb3BQb3NpdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgd2hlbiB0aGUgY29udHJvbCBpcyBkZXN0cm95ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICAvLyBVbnJlZ2lzdGVyIEV2ZW50IExpc3RlbmVyXHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25Db250ZW50Q2hhbmdlLCB0cnVlKTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vbkNvbnRlbnRDaGFuZ2UsIHRydWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLnRvb2x0aXBjb250YWluZXIubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgd2hlbiB0aGUgY29udHJvbCBpcyBpbml0aWFsaXplZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLy8gUmVnaXN0ZXIgRXZlbnQgTGlzdGVuZXJcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbkNvbnRlbnRDaGFuZ2UsIHRydWUpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uQ29udGVudENoYW5nZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBjb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMudG9vbHRpcGNvbnRhaW5lci5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAgIC8vICNyZWdpb24gUHJvdGVjdGVkIE1ldGhvZHNcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9mZnNldCBmb3IgVG9vbHRpcC4gUmVxdWlyZWQgZm9yIEJTNC9CUzUgdG8gY3JlYXRlIHBhZGRpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFRvb2x0aXBPZmZzZXQoKTogbnVtYmVyO1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJvdGVjdGVkIE1ldGhvZHNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgZnJvbSBsaW5rc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldExlZnRQb3NpdGlvbigpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wb3B1cEhlbHBlci5nZXRQb3NpdGlvbkxlZnQoXHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudCxcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwY29udGFpbmVyLFxyXG4gICAgICAgICAgICB0aGlzLnJlZixcclxuICAgICAgICAgICAgdGhpcy5nZXRUb29sdGlwT2Zmc2V0KCksXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9vbHRpcE9mZnNldCgpLFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLkxlZnRQb3MgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVxdWlyZWRQb3NpdGlvbiA9IHRoaXMuR2V0VG9vbHRpcFBvc2l0aW9uKCk7XHJcbiAgICAgICAgaWYgKHJlcXVpcmVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5sZWZ0IHx8IHJlcXVpcmVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5yaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnBvc0Fycm93VG9wID0gdGhpcy5nZXRUb29sVGlwSGVpZ2h0KCkgLyAyIC0gNi41O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zQXJyb3dUb3AgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgZnJvbSB0aGUgdG9wXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VG9wUG9zaXRpb24oKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucG9wdXBIZWxwZXIuZ2V0UG9zaXRpb25Ub3AoXHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudCxcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwY29udGFpbmVyLFxyXG4gICAgICAgICAgICB0aGlzLnJlZixcclxuICAgICAgICAgICAgdGhpcy5nZXRUb29sdGlwT2Zmc2V0KCksXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9vbHRpcE9mZnNldCgpLFxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLlRvcFBvcyA9IHZhbHVlO1xyXG5cclxuICAgICAgICBjb25zdCByZXF1aXJlZFBvc2l0aW9uID0gdGhpcy5HZXRUb29sdGlwUG9zaXRpb24oKTtcclxuICAgICAgICBpZiAocmVxdWlyZWRQb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSB8fCByZXF1aXJlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24udG9wKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zQXJyb3dMZWZ0ID0gdGhpcy5nZXRUb29sVGlwV2lkdGgoKSAvIDIgLSA2LjU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NBcnJvd0xlZnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogbWV0aG9kIGlmIGNvbnRlbnQgaGFzIGNoYW5nZWQgYW5kIHByb3BvcnRpb25zIG5lZWQgdG8gYmUgcmVzZXQgaW4gdGhlIFVJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9uQ29udGVudENoYW5nZSA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGlzIG5vdCB2aXNpYmxlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldExlZnRQb3NpdGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLmdldFRvcFBvc2l0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiaW54QkF5Qkc7QUFBQUEsYUFBQSxTQUFBQSxDQUFBLFNBQUFDLGNBQUEsV0FBQUEsY0FBQSxFQUFBRCxhQUFBLEdBekJILE9BQVNFLGdCQUFnQixLQUFRLDRCQUE0QixDQUM3RCxPQUFTQyxlQUFlLEtBQVEsdUJBQXVCLENBQ3ZELE9BQVNDLFdBQVcsS0FBUSw2QkFBNkIsQ0FDekQsT0FHSUMsU0FBUyxDQUdUQyxLQUFLLENBR0xDLFNBQVMsS0FDTixlQUFlLEMsaUNBRXRCOzs7Ozs7Ozs7O0dBV0EsS0FDc0IsQ0FBQUMsZ0JBQWdCLENBeUVsQztBQUVBO0FBRUE7OztPQUlBQyxZQUE2QkMsS0FBd0IsQ0FBbUJDLEdBQWUsRUFBQVgsYUFBQSxHQUFBWSxDQUFBLE1BQUFaLGFBQUEsR0FBQWEsQ0FBQSxNQUExRCxLQUFBSCxLQUFLLENBQUxBLEtBQUssQ0FBbUJWLGFBQUEsR0FBQWEsQ0FBQSxNQUFtQixLQUFBRixHQUFHLENBQUhBLEdBQUcsQ0FoRjNFO0FBRUE7O1dBQUFYLGFBQUEsR0FBQWEsQ0FBQSxNQUdpQixLQUFBQyxXQUFXLENBQWdCLEdBQUksQ0FBQVYsV0FBVyxFQUFFLENBTzdEOztXQUFBSixhQUFBLEdBQUFhLENBQUEsTUFHUSxLQUFBRSxpQkFBaUIsQ0FBWSxLQUFLLENBTzFDOztXQUFBZixhQUFBLEdBQUFhLENBQUEsTUFHTyxLQUFBRyx1QkFBdUIsQ0FBWSxLQUFLLENBRS9DOztXQUFBaEIsYUFBQSxHQUFBYSxDQUFBLE1BR08sS0FBQUksT0FBTyxDQUFXLENBQUMsQ0FFMUI7O1dBQUFqQixhQUFBLEdBQUFhLENBQUEsTUFHTyxLQUFBVixlQUFl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