@colijnit/sharedcomponents 1.0.64 → 1.0.65

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 (481) hide show
  1. package/README.md +24 -24
  2. package/bundles/colijnit-sharedcomponents.umd.js +10078 -9926
  3. package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
  4. package/colijnit-sharedcomponents.d.ts +92 -91
  5. package/colijnit-sharedcomponents.metadata.json +1 -1
  6. package/esm2015/colijnit-sharedcomponents.js +93 -92
  7. package/esm2015/lib/assets/dictionary/text.properties.js +11 -11
  8. package/esm2015/lib/businessobject/build-images-and-documentation-result.js +2 -2
  9. package/esm2015/lib/businessobject/co-document-right.bo.js +3 -3
  10. package/esm2015/lib/businessobject/drag-drop-container-element.js +2 -2
  11. package/esm2015/lib/businessobject/drag-drop-container.js +7 -7
  12. package/esm2015/lib/components/activity-list/activity-list.component.js +130 -130
  13. package/esm2015/lib/components/activity-list/activity-list.module.js +24 -24
  14. package/esm2015/lib/components/app-file-dropzone/app-file-dropzone.component.js +47 -47
  15. package/esm2015/lib/components/app-file-dropzone/app-file-dropzone.module.js +20 -20
  16. package/esm2015/lib/components/date-planning/component/agenda/agenda-base-view.component.js +61 -61
  17. package/esm2015/lib/components/date-planning/component/agenda/agenda-day-view.component.js +36 -36
  18. package/esm2015/lib/components/date-planning/component/agenda/agenda-event.component.js +56 -56
  19. package/esm2015/lib/components/date-planning/component/agenda/agenda-events.component.js +47 -47
  20. package/esm2015/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.js +68 -68
  21. package/esm2015/lib/components/date-planning/component/agenda/agenda-header.component.js +243 -243
  22. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-cell.component.js +36 -36
  23. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.js +50 -50
  24. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-view.component.js +46 -46
  25. package/esm2015/lib/components/date-planning/component/agenda/agenda-month-view.component.js +61 -61
  26. package/esm2015/lib/components/date-planning/component/agenda/agenda-select-event.component.js +39 -39
  27. package/esm2015/lib/components/date-planning/component/agenda/agenda-view.component.js +35 -35
  28. package/esm2015/lib/components/date-planning/component/agenda/agenda-week-select-view.component.js +64 -64
  29. package/esm2015/lib/components/date-planning/component/agenda/agenda-week-view.component.js +48 -48
  30. package/esm2015/lib/components/date-planning/component/agenda/view-select.component.js +42 -42
  31. package/esm2015/lib/components/date-planning/component/calendar/calendar-all-months.component.js +34 -34
  32. package/esm2015/lib/components/date-planning/component/calendar/calendar-all-years.component.js +48 -48
  33. package/esm2015/lib/components/date-planning/component/calendar/calendar-header.component.js +107 -107
  34. package/esm2015/lib/components/date-planning/component/calendar/calendar-view.component.js +178 -178
  35. package/esm2015/lib/components/date-planning/component/calendar/calendar.component.js +34 -34
  36. package/esm2015/lib/components/date-planning/date-planning.component.js +113 -113
  37. package/esm2015/lib/components/date-planning/date-planning.module.js +63 -63
  38. package/esm2015/lib/components/docsign/component/signature/signature.component.js +75 -75
  39. package/esm2015/lib/components/docsign/component/signatures/signatures.component.js +44 -44
  40. package/esm2015/lib/components/docsign/docsign.component.js +242 -242
  41. package/esm2015/lib/components/docsign/docsign.module.js +23 -23
  42. package/esm2015/lib/components/file-upload/file-upload.component.js +189 -189
  43. package/esm2015/lib/components/file-upload/file-upload.module.js +25 -25
  44. package/esm2015/lib/components/file-upload-popup/file-upload-popup.component.js +397 -397
  45. package/esm2015/lib/components/file-upload-popup/file-upload-popup.module.js +30 -30
  46. package/esm2015/lib/components/files-upload/components/base-file-upload.component.js +469 -469
  47. package/esm2015/lib/components/files-upload/components/drag-drop-container.component.js +115 -115
  48. package/esm2015/lib/components/files-upload/files-upload.component.js +131 -131
  49. package/esm2015/lib/components/files-upload/files-upload.module.js +47 -47
  50. package/esm2015/lib/components/image-display/image-display.component.js +36 -36
  51. package/esm2015/lib/components/image-display/image-display.module.js +23 -23
  52. package/esm2015/lib/components/key-pad/key-pad.component.js +200 -200
  53. package/esm2015/lib/components/key-pad/key-pad.module.js +22 -22
  54. package/esm2015/lib/components/layout-switcher/layout-switcher.component.js +74 -74
  55. package/esm2015/lib/components/layout-switcher/layout-switcher.module.js +21 -21
  56. package/esm2015/lib/components/linear-gauge/co-linear-gauge.component.js +59 -59
  57. package/esm2015/lib/components/linear-gauge/co-linear-gauge.module.js +19 -19
  58. package/esm2015/lib/components/multi-property-toggler/multiple-property-toggler.component.js +89 -89
  59. package/esm2015/lib/components/multi-property-toggler/multiple-property-toggler.module.js +21 -21
  60. package/esm2015/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.js +79 -79
  61. package/esm2015/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.js +21 -21
  62. package/esm2015/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.js +85 -85
  63. package/esm2015/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.js +21 -21
  64. package/esm2015/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.js +64 -64
  65. package/esm2015/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.js +26 -26
  66. package/esm2015/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.component.js +40 -40
  67. package/esm2015/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.module.js +23 -23
  68. package/esm2015/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.js +61 -61
  69. package/esm2015/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.js +28 -28
  70. package/esm2015/lib/components/send-method-dialog/components/signature-button/signature-button.component.js +38 -38
  71. package/esm2015/lib/components/send-method-dialog/components/signature-button/signature-button.module.js +21 -21
  72. package/esm2015/lib/components/send-method-dialog/model/email-address-viewmodel.js +7 -7
  73. package/esm2015/lib/components/send-method-dialog/send-method-dialog.component.js +258 -258
  74. package/esm2015/lib/components/send-method-dialog/send-method-dialog.module.js +35 -35
  75. package/esm2015/lib/components/send-method-dialog/send-method-params.interface.js +2 -2
  76. package/esm2015/lib/components/send-method-dialog/service/send-method.service.js +59 -59
  77. package/esm2015/lib/components/simple-tags/simple-tags.component.js +229 -229
  78. package/esm2015/lib/components/simple-tags/simple-tags.module.js +26 -26
  79. package/esm2015/lib/components/statusbar/statusbar-popup.component.js +97 -97
  80. package/esm2015/lib/components/statusbar/statusbar.component.js +81 -81
  81. package/esm2015/lib/components/statusbar/statusbar.module.js +27 -27
  82. package/esm2015/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.js +47 -47
  83. package/esm2015/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.js +47 -47
  84. package/esm2015/lib/components/stock/components/order-stock-history/order-stock-history.component.js +47 -47
  85. package/esm2015/lib/components/stock/components/order-stock-tab/order-stock-tab.component.js +47 -47
  86. package/esm2015/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.js +47 -47
  87. package/esm2015/lib/components/stock/components/order-tab/order-tab.component.js +67 -67
  88. package/esm2015/lib/components/stock/components/stock-history/stock-history.component.js +53 -53
  89. package/esm2015/lib/components/stock/components/stock-location/components/stock-location-popup/stock-location-popup.component.js +210 -0
  90. package/esm2015/lib/components/stock/components/stock-location/stock-location.component.js +248 -251
  91. package/esm2015/lib/components/stock/components/stock-prognose/stock-prognose.component.js +52 -52
  92. package/esm2015/lib/components/stock/components/stock-tab/stock-tab.component.js +39 -39
  93. package/esm2015/lib/components/stock/localization/translation.js +74 -72
  94. package/esm2015/lib/components/stock/stock-history-tabs/stock-history-tabs.component.js +33 -33
  95. package/esm2015/lib/components/stock/stock-information/stock-information.component.js +48 -48
  96. package/esm2015/lib/components/stock/stock-information-grid/stock-information-grid.component.js +457 -457
  97. package/esm2015/lib/components/stock/stock-tabs/stock-tabs.component.js +251 -243
  98. package/esm2015/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.js +2 -2
  99. package/esm2015/lib/components/stock/stock-transfer/stock-change-amount.component.js +72 -72
  100. package/esm2015/lib/components/stock/stock-transfer/stock-transfer.component.js +160 -160
  101. package/esm2015/lib/components/stock/stock.component.js +237 -237
  102. package/esm2015/lib/components/stock/stock.module.js +82 -80
  103. package/esm2015/lib/components/stock-statusbar/stock-statusbar.component.js +23 -23
  104. package/esm2015/lib/components/stock-statusbar/stock-statusbar.module.js +19 -19
  105. package/esm2015/lib/components/tab-bar/tab-bar.component.js +90 -90
  106. package/esm2015/lib/components/tab-bar/tab-bar.module.js +21 -21
  107. package/esm2015/lib/components/tab-bar/tab.interface.js +2 -2
  108. package/esm2015/lib/components/tile-renderer/tile-render.component.js +80 -80
  109. package/esm2015/lib/components/tile-renderer/tile-render.module.js +26 -26
  110. package/esm2015/lib/decorator/input-boolean.decorator.js +34 -34
  111. package/esm2015/lib/enum/calendar-view.enum.js +9 -9
  112. package/esm2015/lib/enum/document-email-report.enum.js +18 -18
  113. package/esm2015/lib/enum/domain-multiple-name.enum.js +13 -13
  114. package/esm2015/lib/enum/file-type.js +14 -14
  115. package/esm2015/lib/enum/files-upload-config-objects.js +3 -3
  116. package/esm2015/lib/enum/gauge-color.enum.js +10 -10
  117. package/esm2015/lib/enum/icon.enum.js +49 -48
  118. package/esm2015/lib/enum/internal-param.enum.js +38 -38
  119. package/esm2015/lib/enum/keyboard-code.enum.js +32 -32
  120. package/esm2015/lib/enum/language-code.enum.js +8 -8
  121. package/esm2015/lib/enum/month.enum.js +17 -17
  122. package/esm2015/lib/enum/read-write-access-config-names.enum.js +2 -2
  123. package/esm2015/lib/enum/table-name.enum.js +86 -86
  124. package/esm2015/lib/enum/tag-category.enum.js +22 -22
  125. package/esm2015/lib/enum/tags-component-config-names.js +2 -2
  126. package/esm2015/lib/enum/thumb-three-way-state.js +19 -19
  127. package/esm2015/lib/enum/tile-size-type.js +7 -7
  128. package/esm2015/lib/enum/time-period.enum.js +11 -11
  129. package/esm2015/lib/event/co-drag-event.js +2 -2
  130. package/esm2015/lib/event/co-drop-event.js +2 -2
  131. package/esm2015/lib/interface/key-value-pair.js +2 -2
  132. package/esm2015/lib/interface/operation-callback-simple-function.js +4 -4
  133. package/esm2015/lib/localization/localization.module.js +19 -19
  134. package/esm2015/lib/localization/localize.pipe.js +26 -26
  135. package/esm2015/lib/localization/localize.service.js +30 -30
  136. package/esm2015/lib/localization/translation.js +3 -3
  137. package/esm2015/lib/model/agenda-event-per-day.model.js +6 -6
  138. package/esm2015/lib/model/agenda-event.model.js +8 -8
  139. package/esm2015/lib/model/agenda-null-objects.js +11 -11
  140. package/esm2015/lib/model/constant/all-months.js +17 -17
  141. package/esm2015/lib/model/date-range.js +5 -5
  142. package/esm2015/lib/model/day.model.js +7 -7
  143. package/esm2015/lib/model/icon-svg.js +48 -47
  144. package/esm2015/lib/model/month.model.js +11 -11
  145. package/esm2015/lib/model/send-method.js +8 -8
  146. package/esm2015/lib/model/settings.js +4 -4
  147. package/esm2015/lib/model/tag-tree-item.bo.js +16 -16
  148. package/esm2015/lib/model/time-window.bo.js +26 -26
  149. package/esm2015/lib/model/tree-object.js +15 -15
  150. package/esm2015/lib/model/week.model.js +6 -6
  151. package/esm2015/lib/model/weekday.model.js +10 -10
  152. package/esm2015/lib/pipe/array-number.pipe.js +15 -15
  153. package/esm2015/lib/pipe/file-type-image.pipe.js +51 -51
  154. package/esm2015/lib/pipe/master-pipes.js +9 -9
  155. package/esm2015/lib/pipe/ucfirst.pipe.js +16 -16
  156. package/esm2015/lib/service/dictionary.service.js +76 -76
  157. package/esm2015/lib/service/drag-drop.service.js +365 -365
  158. package/esm2015/lib/service/icon-cache.service.js +51 -51
  159. package/esm2015/lib/service/options.service.js +48 -48
  160. package/esm2015/lib/service/shared-connector.service.js +433 -433
  161. package/esm2015/lib/service/shared.service.js +60 -60
  162. package/esm2015/lib/service/stock.service.js +110 -110
  163. package/esm2015/lib/utils/array-utils.js +202 -202
  164. package/esm2015/lib/utils/calendar.utils.js +68 -68
  165. package/esm2015/lib/utils/check-precision-and-scale-result.js +2 -2
  166. package/esm2015/lib/utils/check-within-stepped-bounds-result.js +2 -2
  167. package/esm2015/lib/utils/co-document-shared-field-logic.js +50 -50
  168. package/esm2015/lib/utils/date-utils.js +264 -264
  169. package/esm2015/lib/utils/enum-utils.js +128 -128
  170. package/esm2015/lib/utils/function/not-nill.function.js +5 -5
  171. package/esm2015/lib/utils/is-nill.function.js +5 -5
  172. package/esm2015/lib/utils/map-utils.js +41 -41
  173. package/esm2015/lib/utils/number-utils.js +390 -390
  174. package/esm2015/lib/utils/object-utils.js +278 -278
  175. package/esm2015/lib/utils/ref-code-utils.js +49 -49
  176. package/esm2015/lib/utils/string-utils.js +93 -93
  177. package/esm2015/public-api.js +31 -31
  178. package/fesm2015/colijnit-sharedcomponents.js +10622 -10408
  179. package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
  180. package/lib/assets/dictionary/text.properties.d.ts +3 -3
  181. package/lib/businessobject/build-images-and-documentation-result.d.ts +5 -5
  182. package/lib/businessobject/co-document-right.bo.d.ts +6 -6
  183. package/lib/businessobject/drag-drop-container-element.d.ts +6 -6
  184. package/lib/businessobject/drag-drop-container.d.ts +6 -6
  185. package/lib/components/access/read-write-access.scss +25 -25
  186. package/lib/components/access/style/_layout.scss +23 -23
  187. package/lib/components/access/style/_material-definition.scss +12 -12
  188. package/lib/components/access/style/_theme.scss +4 -4
  189. package/lib/components/access/style/material.scss +4 -4
  190. package/lib/components/activity-list/activity-list.component.d.ts +33 -33
  191. package/lib/components/activity-list/activity-list.module.d.ts +2 -2
  192. package/lib/components/activity-list/style/_layout.scss +68 -68
  193. package/lib/components/activity-list/style/_theme.scss +4 -4
  194. package/lib/components/activity-list/style/material.scss +4 -4
  195. package/lib/components/app-file-dropzone/app-file-dropzone.component.d.ts +14 -14
  196. package/lib/components/app-file-dropzone/app-file-dropzone.module.d.ts +2 -2
  197. package/lib/components/app-file-dropzone/style/_layout.scss +61 -61
  198. package/lib/components/app-file-dropzone/style/_theme.scss +4 -4
  199. package/lib/components/app-file-dropzone/style/material.scss +4 -4
  200. package/lib/components/date-planning/component/agenda/agenda-base-view.component.d.ts +21 -21
  201. package/lib/components/date-planning/component/agenda/agenda-day-view.component.d.ts +7 -7
  202. package/lib/components/date-planning/component/agenda/agenda-event.component.d.ts +18 -18
  203. package/lib/components/date-planning/component/agenda/agenda-events.component.d.ts +13 -13
  204. package/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.d.ts +18 -18
  205. package/lib/components/date-planning/component/agenda/agenda-header.component.d.ts +48 -48
  206. package/lib/components/date-planning/component/agenda/agenda-hour-cell.component.d.ts +9 -9
  207. package/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.d.ts +8 -8
  208. package/lib/components/date-planning/component/agenda/agenda-hour-view.component.d.ts +7 -7
  209. package/lib/components/date-planning/component/agenda/agenda-month-view.component.d.ts +10 -10
  210. package/lib/components/date-planning/component/agenda/agenda-select-event.component.d.ts +12 -12
  211. package/lib/components/date-planning/component/agenda/agenda-view.component.d.ts +12 -12
  212. package/lib/components/date-planning/component/agenda/agenda-week-select-view.component.d.ts +10 -10
  213. package/lib/components/date-planning/component/agenda/agenda-week-view.component.d.ts +9 -9
  214. package/lib/components/date-planning/component/agenda/style/_layout.scss +443 -443
  215. package/lib/components/date-planning/component/agenda/style/_material-definition.scss +12 -12
  216. package/lib/components/date-planning/component/agenda/style/_theme.scss +7 -7
  217. package/lib/components/date-planning/component/agenda/style/material.scss +5 -5
  218. package/lib/components/date-planning/component/agenda/view-select.component.d.ts +11 -11
  219. package/lib/components/date-planning/component/calendar/calendar-all-months.component.d.ts +9 -9
  220. package/lib/components/date-planning/component/calendar/calendar-all-years.component.d.ts +9 -9
  221. package/lib/components/date-planning/component/calendar/calendar-header.component.d.ts +23 -23
  222. package/lib/components/date-planning/component/calendar/calendar-view.component.d.ts +31 -31
  223. package/lib/components/date-planning/component/calendar/calendar.component.d.ts +10 -10
  224. package/lib/components/date-planning/component/calendar/style/_layout.scss +167 -167
  225. package/lib/components/date-planning/component/calendar/style/_material-definition.scss +7 -7
  226. package/lib/components/date-planning/component/calendar/style/_theme.scss +7 -7
  227. package/lib/components/date-planning/component/calendar/style/material.scss +5 -5
  228. package/lib/components/date-planning/date-planning.component.d.ts +28 -28
  229. package/lib/components/date-planning/date-planning.module.d.ts +2 -2
  230. package/lib/components/date-planning/style/_layout.scss +45 -45
  231. package/lib/components/date-planning/style/_theme.scss +5 -5
  232. package/lib/components/date-planning/style/material.scss +7 -7
  233. package/lib/components/docsign/component/signature/signature.component.d.ts +16 -16
  234. package/lib/components/docsign/component/signature/style/_layout.scss +40 -40
  235. package/lib/components/docsign/component/signature/style/_material-definition.scss +11 -11
  236. package/lib/components/docsign/component/signature/style/_theme.scss +13 -13
  237. package/lib/components/docsign/component/signature/style/material.scss +4 -4
  238. package/lib/components/docsign/component/signatures/signatures.component.d.ts +12 -12
  239. package/lib/components/docsign/component/signatures/style/_layout.scss +13 -13
  240. package/lib/components/docsign/component/signatures/style/_material-definition.scss +1 -1
  241. package/lib/components/docsign/component/signatures/style/_theme.scss +4 -4
  242. package/lib/components/docsign/component/signatures/style/material.scss +5 -5
  243. package/lib/components/docsign/docsign.component.d.ts +94 -94
  244. package/lib/components/docsign/docsign.module.d.ts +2 -2
  245. package/lib/components/docsign/style/_layout.scss +40 -40
  246. package/lib/components/docsign/style/_material-definition.scss +12 -12
  247. package/lib/components/docsign/style/_theme.scss +12 -12
  248. package/lib/components/docsign/style/material.scss +15 -15
  249. package/lib/components/file-upload/file-upload.component.d.ts +42 -42
  250. package/lib/components/file-upload/file-upload.module.d.ts +2 -2
  251. package/lib/components/file-upload/style/_layout.scss +59 -59
  252. package/lib/components/file-upload/style/_material-definition.scss +2 -2
  253. package/lib/components/file-upload/style/_theme.scss +4 -4
  254. package/lib/components/file-upload/style/material.scss +4 -4
  255. package/lib/components/file-upload-popup/file-upload-popup.component.d.ts +75 -75
  256. package/lib/components/file-upload-popup/file-upload-popup.module.d.ts +2 -2
  257. package/lib/components/file-upload-popup/style/_layout.scss +48 -48
  258. package/lib/components/file-upload-popup/style/_material-definition.scss +2 -2
  259. package/lib/components/file-upload-popup/style/_theme.scss +5 -5
  260. package/lib/components/file-upload-popup/style/material.scss +4 -4
  261. package/lib/components/files-upload/components/base-file-upload.component.d.ts +98 -98
  262. package/lib/components/files-upload/components/drag-drop-container.component.d.ts +34 -34
  263. package/lib/components/files-upload/files-upload.component.d.ts +32 -32
  264. package/lib/components/files-upload/files-upload.module.d.ts +2 -2
  265. package/lib/components/files-upload/style/_layout.scss +49 -49
  266. package/lib/components/files-upload/style/_theme.scss +5 -5
  267. package/lib/components/files-upload/style/material.scss +4 -4
  268. package/lib/components/image-display/image-display.component.d.ts +14 -14
  269. package/lib/components/image-display/image-display.module.d.ts +2 -2
  270. package/lib/components/image-display/style/_layout.scss +56 -56
  271. package/lib/components/image-display/style/_material-definition.scss +4 -4
  272. package/lib/components/image-display/style/_theme.scss +6 -6
  273. package/lib/components/image-display/style/material.scss +3 -3
  274. package/lib/components/key-pad/key-pad.component.d.ts +38 -38
  275. package/lib/components/key-pad/key-pad.module.d.ts +2 -2
  276. package/lib/components/key-pad/style/_layout.scss +160 -160
  277. package/lib/components/key-pad/style/_material-definition.scss +19 -19
  278. package/lib/components/key-pad/style/_theme.scss +35 -35
  279. package/lib/components/key-pad/style/material.scss +4 -4
  280. package/lib/components/layout-switcher/layout-switcher.component.d.ts +16 -16
  281. package/lib/components/layout-switcher/layout-switcher.module.d.ts +2 -2
  282. package/lib/components/layout-switcher/style/_layout.scss +94 -94
  283. package/lib/components/layout-switcher/style/_material-definition.scss +16 -16
  284. package/lib/components/layout-switcher/style/_theme.scss +4 -4
  285. package/lib/components/layout-switcher/style/material.scss +6 -6
  286. package/lib/components/linear-gauge/co-linear-gauge.component.d.ts +11 -11
  287. package/lib/components/linear-gauge/co-linear-gauge.module.d.ts +2 -2
  288. package/lib/components/linear-gauge/style/_layout.scss +20 -20
  289. package/lib/components/linear-gauge/style/_material-definition.scss +8 -8
  290. package/lib/components/linear-gauge/style/_theme.scss +4 -4
  291. package/lib/components/linear-gauge/style/material.scss +6 -6
  292. package/lib/components/login/style/_layout.scss +57 -57
  293. package/lib/components/login/style/_material-definition.scss +23 -23
  294. package/lib/components/login/style/_theme.scss +7 -7
  295. package/lib/components/login/style/material.scss +4 -4
  296. package/lib/components/multi-property-toggler/multiple-property-toggler.component.d.ts +27 -27
  297. package/lib/components/multi-property-toggler/multiple-property-toggler.module.d.ts +2 -2
  298. package/lib/components/multi-property-toggler/style/_layout.scss +24 -24
  299. package/lib/components/multi-property-toggler/style/_theme.scss +4 -4
  300. package/lib/components/multi-property-toggler/style/material.scss +4 -4
  301. package/lib/components/screen-config-generator/style/_layout.scss +95 -95
  302. package/lib/components/screen-config-generator/style/_theme.scss +4 -4
  303. package/lib/components/screen-config-generator/style/material.scss +4 -4
  304. package/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.d.ts +19 -19
  305. package/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.d.ts +2 -2
  306. package/lib/components/send-method-dialog/components/layout-selection/style/_layout.scss +44 -44
  307. package/lib/components/send-method-dialog/components/layout-selection/style/_material-definition.scss +19 -19
  308. package/lib/components/send-method-dialog/components/layout-selection/style/_theme.scss +17 -17
  309. package/lib/components/send-method-dialog/components/layout-selection/style/material.scss +4 -4
  310. package/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.d.ts +19 -19
  311. package/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.d.ts +2 -2
  312. package/lib/components/send-method-dialog/components/printer-selection/style/_layout.scss +69 -69
  313. package/lib/components/send-method-dialog/components/printer-selection/style/_material-definition.scss +37 -37
  314. package/lib/components/send-method-dialog/components/printer-selection/style/_theme.scss +23 -23
  315. package/lib/components/send-method-dialog/components/printer-selection/style/material.scss +4 -4
  316. package/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.d.ts +14 -14
  317. package/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.d.ts +2 -2
  318. package/lib/components/send-method-dialog/components/send-method-email/style/_layout.scss +29 -29
  319. package/lib/components/send-method-dialog/components/send-method-email/style/_material-definition.scss +8 -8
  320. package/lib/components/send-method-dialog/components/send-method-email/style/_theme.scss +5 -5
  321. package/lib/components/send-method-dialog/components/send-method-email/style/material.scss +4 -4
  322. package/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.component.d.ts +8 -8
  323. package/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.module.d.ts +2 -2
  324. package/lib/components/send-method-dialog/components/send-method-pdf/style/_layout.scss +25 -25
  325. package/lib/components/send-method-dialog/components/send-method-pdf/style/_material-definition.scss +5 -5
  326. package/lib/components/send-method-dialog/components/send-method-pdf/style/_theme.scss +5 -5
  327. package/lib/components/send-method-dialog/components/send-method-pdf/style/material.scss +4 -4
  328. package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.d.ts +13 -13
  329. package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.d.ts +2 -2
  330. package/lib/components/send-method-dialog/components/send-method-printer/style/_layout.scss +30 -30
  331. package/lib/components/send-method-dialog/components/send-method-printer/style/_material-definition.scss +5 -5
  332. package/lib/components/send-method-dialog/components/send-method-printer/style/_theme.scss +5 -5
  333. package/lib/components/send-method-dialog/components/send-method-printer/style/material.scss +4 -4
  334. package/lib/components/send-method-dialog/components/signature-button/signature-button.component.d.ts +12 -12
  335. package/lib/components/send-method-dialog/components/signature-button/signature-button.module.d.ts +2 -2
  336. package/lib/components/send-method-dialog/components/signature-button/style/_layout.scss +28 -28
  337. package/lib/components/send-method-dialog/components/signature-button/style/_material-definition.scss +8 -8
  338. package/lib/components/send-method-dialog/components/signature-button/style/_theme.scss +4 -4
  339. package/lib/components/send-method-dialog/components/signature-button/style/material.scss +4 -4
  340. package/lib/components/send-method-dialog/model/email-address-viewmodel.d.ts +5 -5
  341. package/lib/components/send-method-dialog/send-method-dialog.component.d.ts +71 -71
  342. package/lib/components/send-method-dialog/send-method-dialog.module.d.ts +2 -2
  343. package/lib/components/send-method-dialog/send-method-params.interface.d.ts +13 -13
  344. package/lib/components/send-method-dialog/service/send-method.service.d.ts +23 -23
  345. package/lib/components/send-method-dialog/style/_layout.scss +165 -165
  346. package/lib/components/send-method-dialog/style/_material-definition.scss +48 -48
  347. package/lib/components/send-method-dialog/style/_theme.scss +33 -33
  348. package/lib/components/send-method-dialog/style/material.scss +10 -10
  349. package/lib/components/simple-tags/simple-tags.component.d.ts +31 -31
  350. package/lib/components/simple-tags/simple-tags.module.d.ts +2 -2
  351. package/lib/components/simple-tags/style/_layout.scss +272 -272
  352. package/lib/components/simple-tags/style/_material-definition.scss +39 -39
  353. package/lib/components/simple-tags/style/_theme.scss +4 -4
  354. package/lib/components/simple-tags/style/material.scss +4 -4
  355. package/lib/components/statusbar/statusbar-popup.component.d.ts +21 -21
  356. package/lib/components/statusbar/statusbar.component.d.ts +26 -26
  357. package/lib/components/statusbar/statusbar.module.d.ts +2 -2
  358. package/lib/components/statusbar/style/_layout.scss +70 -70
  359. package/lib/components/statusbar/style/_material-definition.scss +23 -23
  360. package/lib/components/statusbar/style/_theme.scss +13 -13
  361. package/lib/components/statusbar/style/material.scss +5 -5
  362. package/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.d.ts +9 -9
  363. package/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.d.ts +9 -9
  364. package/lib/components/stock/components/order-stock-history/order-stock-history.component.d.ts +9 -9
  365. package/lib/components/stock/components/order-stock-tab/order-stock-tab.component.d.ts +11 -11
  366. package/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.d.ts +9 -9
  367. package/lib/components/stock/components/order-tab/order-tab.component.d.ts +20 -20
  368. package/lib/components/stock/components/stock-history/stock-history.component.d.ts +13 -13
  369. package/lib/components/stock/components/stock-location/components/stock-location-popup/stock-location-popup.component.d.ts +41 -0
  370. package/lib/components/stock/components/stock-location/stock-location.component.d.ts +54 -52
  371. package/lib/components/stock/components/stock-prognose/stock-prognose.component.d.ts +11 -11
  372. package/lib/components/stock/components/stock-tab/stock-tab.component.d.ts +7 -7
  373. package/lib/components/stock/localization/translation.d.ts +71 -69
  374. package/lib/components/stock/stock-history-tabs/stock-history-tabs.component.d.ts +7 -7
  375. package/lib/components/stock/stock-information/stock-information.component.d.ts +9 -9
  376. package/lib/components/stock/stock-information-grid/stock-information-grid.component.d.ts +75 -75
  377. package/lib/components/stock/stock-tabs/stock-tabs.component.d.ts +59 -56
  378. package/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.d.ts +4 -4
  379. package/lib/components/stock/stock-transfer/stock-change-amount.component.d.ts +18 -18
  380. package/lib/components/stock/stock-transfer/stock-transfer.component.d.ts +38 -38
  381. package/lib/components/stock/stock.component.d.ts +64 -64
  382. package/lib/components/stock/stock.module.d.ts +2 -2
  383. package/lib/components/stock/style/_layout.scss +519 -473
  384. package/lib/components/stock/style/_material-definition.scss +28 -28
  385. package/lib/components/stock/style/_theme.scss +5 -5
  386. package/lib/components/stock/style/material.scss +4 -4
  387. package/lib/components/stock-statusbar/stock-statusbar.component.d.ts +4 -4
  388. package/lib/components/stock-statusbar/stock-statusbar.module.d.ts +2 -2
  389. package/lib/components/stock-statusbar/style/_layout.scss +24 -24
  390. package/lib/components/stock-statusbar/style/material.scss +4 -4
  391. package/lib/components/tab-bar/style/_layout.scss +83 -83
  392. package/lib/components/tab-bar/style/_material-definition.scss +6 -6
  393. package/lib/components/tab-bar/style/material.scss +4 -4
  394. package/lib/components/tab-bar/tab-bar.component.d.ts +21 -21
  395. package/lib/components/tab-bar/tab-bar.module.d.ts +2 -2
  396. package/lib/components/tab-bar/tab.interface.d.ts +5 -5
  397. package/lib/components/tags/component/style/_layout.scss +67 -67
  398. package/lib/components/tags/component/style/_material-definition.scss +1 -1
  399. package/lib/components/tags/component/style/_theme.scss +8 -8
  400. package/lib/components/tags/component/style/material.scss +3 -3
  401. package/lib/components/tags/component/tag-join-label/style/_layout.scss +97 -97
  402. package/lib/components/tags/component/tag-join-label/style/_material-definition.scss +4 -4
  403. package/lib/components/tags/component/tag-join-label/style/_theme.scss +8 -8
  404. package/lib/components/tags/component/tag-join-label/style/material.scss +3 -3
  405. package/lib/components/tile-renderer/style/_layout.scss +90 -90
  406. package/lib/components/tile-renderer/style/_theme.scss +4 -4
  407. package/lib/components/tile-renderer/style/material.scss +4 -4
  408. package/lib/components/tile-renderer/tile-render.component.d.ts +31 -31
  409. package/lib/components/tile-renderer/tile-render.module.d.ts +2 -2
  410. package/lib/decorator/input-boolean.decorator.d.ts +8 -8
  411. package/lib/enum/calendar-view.enum.d.ts +7 -7
  412. package/lib/enum/document-email-report.enum.d.ts +15 -15
  413. package/lib/enum/domain-multiple-name.enum.d.ts +10 -10
  414. package/lib/enum/file-type.d.ts +7 -7
  415. package/lib/enum/files-upload-config-objects.d.ts +22 -22
  416. package/lib/enum/gauge-color.enum.d.ts +8 -8
  417. package/lib/enum/icon.enum.d.ts +47 -46
  418. package/lib/enum/internal-param.enum.d.ts +34 -34
  419. package/lib/enum/keyboard-code.enum.d.ts +30 -30
  420. package/lib/enum/language-code.enum.d.ts +6 -6
  421. package/lib/enum/month.enum.d.ts +14 -14
  422. package/lib/enum/read-write-access-config-names.enum.d.ts +4 -4
  423. package/lib/enum/table-name.enum.d.ts +84 -84
  424. package/lib/enum/tag-category.enum.d.ts +19 -19
  425. package/lib/enum/tags-component-config-names.d.ts +4 -4
  426. package/lib/enum/thumb-three-way-state.d.ts +6 -6
  427. package/lib/enum/tile-size-type.d.ts +4 -4
  428. package/lib/enum/time-period.enum.d.ts +8 -8
  429. package/lib/event/co-drag-event.d.ts +5 -5
  430. package/lib/event/co-drop-event.d.ts +8 -8
  431. package/lib/interface/key-value-pair.d.ts +4 -4
  432. package/lib/interface/operation-callback-simple-function.d.ts +4 -4
  433. package/lib/localization/localization.module.d.ts +2 -2
  434. package/lib/localization/localize.pipe.d.ts +7 -7
  435. package/lib/localization/localize.service.d.ts +7 -7
  436. package/lib/localization/translation.d.ts +2 -2
  437. package/lib/model/agenda-event-per-day.model.d.ts +5 -5
  438. package/lib/model/agenda-event.model.d.ts +17 -17
  439. package/lib/model/agenda-null-objects.d.ts +10 -10
  440. package/lib/model/constant/all-months.d.ts +2 -2
  441. package/lib/model/date-range.d.ts +7 -7
  442. package/lib/model/day.model.d.ts +8 -8
  443. package/lib/model/icon-svg.d.ts +4 -4
  444. package/lib/model/month.model.d.ts +5 -5
  445. package/lib/model/send-method.d.ts +7 -7
  446. package/lib/model/settings.d.ts +3 -3
  447. package/lib/model/tag-tree-item.bo.d.ts +18 -18
  448. package/lib/model/time-window.bo.d.ts +13 -13
  449. package/lib/model/tree-object.d.ts +8 -8
  450. package/lib/model/week.model.d.ts +4 -4
  451. package/lib/model/weekday.model.d.ts +16 -16
  452. package/lib/pipe/array-number.pipe.d.ts +4 -4
  453. package/lib/pipe/file-type-image.pipe.d.ts +12 -12
  454. package/lib/pipe/master-pipes.d.ts +1 -1
  455. package/lib/pipe/ucfirst.pipe.d.ts +4 -4
  456. package/lib/service/dictionary.service.d.ts +21 -21
  457. package/lib/service/drag-drop.service.d.ts +86 -86
  458. package/lib/service/icon-cache.service.d.ts +18 -18
  459. package/lib/service/options.service.d.ts +13 -13
  460. package/lib/service/shared-connector.service.d.ts +55 -55
  461. package/lib/service/shared.service.d.ts +18 -18
  462. package/lib/service/stock.service.d.ts +41 -41
  463. package/lib/style/_mixin.scss +14 -14
  464. package/lib/style/_variables.scss +21 -21
  465. package/lib/style/sharedcomponents-globals.scss +10 -10
  466. package/lib/utils/array-utils.d.ts +63 -63
  467. package/lib/utils/calendar.utils.d.ts +10 -10
  468. package/lib/utils/check-precision-and-scale-result.d.ts +4 -4
  469. package/lib/utils/check-within-stepped-bounds-result.d.ts +8 -8
  470. package/lib/utils/co-document-shared-field-logic.d.ts +7 -7
  471. package/lib/utils/date-utils.d.ts +44 -44
  472. package/lib/utils/enum-utils.d.ts +31 -31
  473. package/lib/utils/function/not-nill.function.d.ts +1 -1
  474. package/lib/utils/is-nill.function.d.ts +1 -1
  475. package/lib/utils/map-utils.d.ts +16 -16
  476. package/lib/utils/number-utils.d.ts +125 -125
  477. package/lib/utils/object-utils.d.ts +40 -40
  478. package/lib/utils/ref-code-utils.d.ts +10 -10
  479. package/lib/utils/string-utils.d.ts +38 -38
  480. package/package.json +1 -1
  481. package/public-api.d.ts +27 -27
@@ -1,457 +1,457 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from "@angular/core";
3
- import { StockService } from "../../../service/stock.service";
4
- import { IconCacheService } from "../../../service/icon-cache.service";
5
- import { Icon } from "../../../enum/icon.enum";
6
- import { ArticleStock } from "@colijnit/articleapi/build/model/article-stock";
7
- import { ArticleStockManagement } from "@colijnit/articleapi/build/model/article-stock-management";
8
- import { ArticleDetailsBo } from "@colijnit/articleapi/build/model/article-details.bo";
9
- import { ArticleTransaction } from "@colijnit/articleapi/build/model/article-transaction";
10
- import { PrintPriceStickers } from "@colijnit/sharedapi/build/model/print-price-stickers.bo";
11
- export class StockInformationGridComponent {
12
- constructor(iconCacheService, _stockService) {
13
- this.iconCacheService = iconCacheService;
14
- this._stockService = _stockService;
15
- this.icons = Icon;
16
- this.transferIconClicked = new EventEmitter();
17
- this.historyClicked = new EventEmitter();
18
- this.cancelButtonClicked = new EventEmitter();
19
- this.okButtonClicked = new EventEmitter();
20
- this.show = false;
21
- this.hideOrShowLocationTab = false;
22
- this.showStockHistory = false;
23
- this.showSendMethodDialog = false;
24
- this.hideOrShowTabs = true;
25
- this.dataWareHouseFields = { text: "warehouseDescription", value: "warehouseNo" };
26
- this.dataLocationFields = { text: "locationNo", value: "locationNo" };
27
- this.articleStockSearchInfo = new ArticleStock();
28
- this.selectedArticleDetailsData = new ArticleDetailsBo();
29
- this.showChangeStockDetails = false;
30
- this.articleDetailsInformation = new ArticleStockManagement();
31
- this.tabs = [
32
- "STOCK",
33
- "IN_ORDER2",
34
- "ORDERS1"
35
- ];
36
- this.activeTab = this.tabs[0];
37
- }
38
- get activeTabText() {
39
- switch (this.activeTab) {
40
- case this.tabs[0]:
41
- return "Voorraadregels";
42
- case this.tabs[1]:
43
- return "Gevonden in order(s)";
44
- case this.tabs[2]:
45
- return "Gevonden in bestellingen";
46
- default:
47
- return "Voorraadlocatie regels";
48
- }
49
- }
50
- handleTabClick(tabData) {
51
- this.activeTab = tabData;
52
- if (this.activeTab === "IN_ORDER2") {
53
- this.getInOrderData();
54
- }
55
- if (this.activeTab === "ORDERS1") {
56
- this.getOrderData();
57
- }
58
- }
59
- onLocationClick(data) {
60
- this.articleStockSearchInfo.goodId = data.goodId.toString();
61
- this.articleStockSearchInfo.wareHouseNo = data.warehouseNo.toString();
62
- this.articleStockSearchInfo.viewKind = "D";
63
- this.selectedWarehouse = data.warehouseNo;
64
- if (!this.dataWareHouseCode) {
65
- this.getStockManagementWarehouses(data);
66
- }
67
- this.getArticleDetails(data);
68
- this.hideOrShowTabs = false;
69
- this.hideOrShowLocationTab = true;
70
- }
71
- handleHistoryClick() {
72
- this.historyClicked.emit();
73
- this.hideOrShowLocationTab = false;
74
- this.showChangeStockDetails = false;
75
- this.hideOrShowTabs = false;
76
- this.showStockHistory = true;
77
- }
78
- backToStockInformation() {
79
- this.showStockHistory = false;
80
- this.hideOrShowTabs = true;
81
- }
82
- handleStockTransferClick(event) {
83
- this.transferIconClicked.emit(event);
84
- }
85
- handleBackToStockClick() {
86
- return __awaiter(this, void 0, void 0, function* () {
87
- this.activeTab = this.tabs[0];
88
- this.hideOrShowTabs = true;
89
- this.hideOrShowLocationTab = false;
90
- this.articleDetails = undefined;
91
- });
92
- }
93
- openSendMethodDialog(data) {
94
- if (!(this._stockService.printLayoutParams instanceof PrintPriceStickers)) {
95
- this._stockService.printLayoutParams.goodId = data.goodId;
96
- this._stockService.printLayoutParams.warehouse = data.warehouseNo;
97
- }
98
- this.showSendMethodDialog = true;
99
- }
100
- printStockStickers() {
101
- // this._stockService.getPrintStockStickers(this._stockService.printLayoutParams);
102
- }
103
- onOkClick() {
104
- this.okButtonClicked.emit();
105
- }
106
- onCancelClick() {
107
- this.cancelButtonClicked.emit();
108
- }
109
- openDialogClick(data) {
110
- this.selectedArticleDetailsData = data;
111
- this.showChangeStockDetails = true;
112
- }
113
- getArticleDetails(data) {
114
- // const info = new ArticleStockManagement();
115
- this.articleDetailsInformation.goodId = data.goodId;
116
- this.articleDetailsInformation.lineId = data.lineId;
117
- this.articleDetailsInformation.warehouseNumber = data.warehouseNo;
118
- this._stockService.getArticleDetails(this.articleDetailsInformation).then((details) => {
119
- this.articleDetails = details;
120
- });
121
- }
122
- getStockManagementWarehouses(data) {
123
- this._stockService.getStockManagementWarehouses().then((warehouses) => {
124
- this.dataWareHouseCode = warehouses;
125
- this.selectedWarehouse = data.warehouseNo;
126
- });
127
- }
128
- onSelectWarehouse(event) {
129
- this.articleDetailsInformation.warehouseNumber = event;
130
- if (this.selectedWarehouse || this.selectedWarehouse === 0) {
131
- this._stockService.getArticleDetails(this.articleDetailsInformation).then((details) => {
132
- this.articleDetails = details;
133
- });
134
- }
135
- }
136
- getInOrderData() {
137
- return __awaiter(this, void 0, void 0, function* () {
138
- const inOrderData = new ArticleTransaction();
139
- inOrderData.type = "V";
140
- inOrderData.goodId = this.articleStockInformation[0].goodId.toString();
141
- this.inOrderInformation = yield this._stockService.getArticleTransaction(inOrderData);
142
- });
143
- }
144
- getOrderData() {
145
- return __awaiter(this, void 0, void 0, function* () {
146
- const orderData = new ArticleTransaction();
147
- orderData.type = "I";
148
- orderData.goodId = this.articleStockInformation[0].goodId.toString();
149
- this.orderInformation = yield this._stockService.getArticleTransaction(orderData);
150
- });
151
- }
152
- onLocationDropdownClick() {
153
- this._stockService.getStockManagementLocations(this.selectedWarehouse).then((locations) => {
154
- this.stockLocations = locations;
155
- });
156
- }
157
- onLocationSelected(location) {
158
- this.selectedArticleDetailsData.locationNo = location;
159
- }
160
- onOkClickSendLocations() {
161
- return __awaiter(this, void 0, void 0, function* () {
162
- this.selectedArticleDetailsData.selected = true;
163
- this.selectedArticleDetailsData.goodId = this.article.goodId;
164
- this.selectedArticleDetailsData.entryDate = new Date();
165
- this.selectedArticleDetailsData.warehouseNo = this.selectedWarehouse;
166
- yield this._stockService.updateArticleDetails(this.selectedArticleDetailsData);
167
- yield this._stockService.getArticleDetails(this.articleDetailsInformation).then((details) => {
168
- this.articleDetails = details;
169
- });
170
- });
171
- }
172
- onCancelClickSendLocations() {
173
- }
174
- amountInStockChanged(data) {
175
- this.selectedArticleDetailsData.amountInStock = data;
176
- }
177
- lockSelectedRow(row) {
178
- this._stockService.lockArticleDetails(row);
179
- }
180
- }
181
- StockInformationGridComponent.decorators = [
182
- { type: Component, args: [{
183
- selector: "co-stock-information-grid",
184
- template: `
185
- <div class="tab-link show" *ngIf="hideOrShowTabs">
186
- <span class="tab-link-buttons"
187
- *ngFor="let tab of tabs"
188
- (click)="handleTabClick(tab)"
189
- [textContent]="tab"
190
- [class.active]="tab === activeTab"
191
- ></span>
192
- </div>
193
-
194
- <div class="stock-line">
195
- <div [textContent]="activeTabText"></div>
196
-
197
- </div>
198
-
199
- <div class="stock-grid">
200
- <co-simple-grid *ngIf="activeTab === tabs[0] && hideOrShowTabs"
201
- [data]="articleStockInformation"
202
- class="simple-grid"
203
- [rowsPerPage]="20"
204
- >
205
- <co-simple-grid-column [headerText]="'WAREHOUSE' | localize" [field]="'warehouseNo'" [order]="10"></co-simple-grid-column>
206
- <co-simple-grid-column [headerText]="'DESCRIPTION' | localize" [field]="'warehouseName'" [order]="11"></co-simple-grid-column>
207
- <co-simple-grid-column [headerText]="'STOCK' | localize" [field]="'technicalStock'" [order]="12"></co-simple-grid-column>
208
- <co-simple-grid-column [headerText]="'AVAILABLE_STOCK' | localize" [field]="'availableStock'" [order]="13"></co-simple-grid-column>
209
- <co-simple-grid-column [headerText]="'ECONOMICAL_STOCK' | localize" [field]="'economicalStock'" [order]="14"></co-simple-grid-column>
210
- <co-simple-grid-column [headerText]="'LOCATION' | localize" [field]="'locationNo'" [order]="15">
211
- <ng-template #template let-row="row">
212
- <span class="location-link" [textContent]="'LOOK_AT' | localize" (click)="onLocationClick(row)"></span>
213
- </ng-template>
214
- </co-simple-grid-column>
215
- </co-simple-grid>
216
-
217
- <co-simple-grid *ngIf="activeTab === tabs[1]"
218
- [data]="inOrderInformation"
219
- class="simple-grid"
220
- [rowsPerPage]="20"
221
- >
222
- <co-simple-grid-column [headerText]="'IN_ORDER' | localize" [field]="'transactionNr'"></co-simple-grid-column>
223
- <co-simple-grid-column [headerText]="'CUSTOMER' | localize" [field]="'customerName'"></co-simple-grid-column>
224
- <co-simple-grid-column [headerText]="'DATE' | localize">
225
- <ng-template #template let-row="row">
226
- <span [textContent]="row.transactionDate | date:'dd-MM-yyyy'"></span>
227
- </ng-template>
228
- </co-simple-grid-column>
229
- <co-simple-grid-column [headerText]="'AMOUNT' | localize" [field]="'amountInOrder'"></co-simple-grid-column>
230
- <co-simple-grid-column [headerText]="'WAREHOUSE' | localize" [field]="'warehouseNumber'"></co-simple-grid-column>
231
- <co-simple-grid-column [headerText]="'DESCRIPTION' | localize" [field]="'warehouseDescription'"></co-simple-grid-column>
232
- <co-simple-grid-column [headerText]="'TRANSFER' | localize" [field]="'transfer'">
233
- <ng-template #template let-row="row">
234
- <co-icon class="menu-icon" [iconData]="iconCacheService.getIcon(icons.DeliveryTruck)" (click)="handleStockTransferClick($event)"></co-icon>
235
- </ng-template>
236
- </co-simple-grid-column>
237
- <co-simple-grid-column [headerText]="'STICKER' | localize" [field]="'sticker'">
238
- <ng-template #template let-row="row">
239
- <co-icon class="menu-icon" [iconData]="iconCacheService.getIcon(icons.Print)" (click)="openSendMethodDialog(row)"></co-icon>
240
- </ng-template>
241
- </co-simple-grid-column>
242
- </co-simple-grid>
243
-
244
- <co-simple-grid *ngIf="activeTab === tabs[2]"
245
- [data]="orderInformation"
246
- class="simple-grid"
247
- [rowsPerPage]="20"
248
- >
249
- <co-simple-grid-column [headerText]="'PURCHASE_ORDER_NR' | localize" [field]="'transactionNr'"></co-simple-grid-column>
250
- <co-simple-grid-column [headerText]="'DATE' | localize">
251
- <ng-template #template let-row="row">
252
- <span [textContent]="row.transactionDate | date:'dd-MM-yyyy'"></span>
253
- </ng-template>
254
- </co-simple-grid-column>
255
- <co-simple-grid-column [headerText]="'AMOUNT' | localize" [field]="'amountInOrder'"></co-simple-grid-column>
256
- <co-simple-grid-column [headerText]="'RESERVED' | localize" [field]="'reserved'"></co-simple-grid-column>
257
- <co-simple-grid-column [headerText]="'FREE_STOCK' | localize" [field]="'InOrderForStock'"></co-simple-grid-column>
258
- <co-simple-grid-column [headerText]="'DELIVERY_DATE' | localize">
259
- <ng-template #template let-row="row">
260
- <span [textContent]="row.deliveryDate | date:'dd-MM-yyyy'"></span>
261
- </ng-template>
262
- </co-simple-grid-column>
263
- </co-simple-grid>
264
- </div>
265
-
266
- <div class="stock-grid" *ngIf="hideOrShowLocationTab">
267
- <div class="stock-location-group">
268
- <div class="stock-location-left-group">
269
- <span class="stock-button-back" [textContent]="'BACK_TO_STOCK_LINES' | localize" (click)="handleBackToStockClick()"></span>
270
- </div>
271
- <div class="stock-location-right-group">
272
- <!--
273
- <co-drop-down-list [(model)]="selectedWarehouse"
274
- [collection]="dataWareHouseCode"
275
- [fields]="dataWareHouseFields"
276
- [placeholder]="'WAREHOUSE' | localize"
277
- (modelChange)="onSelectWarehouse($event)"
278
- [required]="true"
279
- ></co-drop-down-list>
280
- -->
281
- </div>
282
- </div>
283
-
284
- <!-- TODO move to own component stock-location-->
285
- <co-simple-grid [data]="articleDetails"
286
- class="simple-grid"
287
- [rowsPerPage]="20"
288
- [showAdd]="true"
289
- [showToolbar]="true"
290
- [showDelete]="true"
291
- [inlineEdit]="true"
292
- (dblClickRow)="lockSelectedRow($event)"
293
- >
294
- <div class="stock-location-group">
295
- <div class="stock-location-left-group">
296
- <co-button class="stock-lines-button" [textContent]="'BACK_TO_STOCK_LINES' | localize" (click)="handleBackToStockClick()"></co-button>
297
- </div>
298
- </div>
299
- <co-simple-grid-column [headerText]="'LOCATION' | localize" [field]="'locationNo'">
300
- <ng-template #editTemplate let-row="row">
301
- <!--
302
- <co-drop-down-list [(model)]="row.locationNo"
303
- [collection]="stockLocations"
304
- [fields]="dataLocationFields"
305
- [placeholder]="'LOCATION' | localize"
306
- (click)="onLocationDropdownClick()"
307
- [required]="true"
308
- ></co-drop-down-list>
309
- -->
310
- </ng-template>
311
- </co-simple-grid-column>
312
- <co-simple-grid-column *ngIf="articleDetails" [headerText]="'BATCH' | localize" [field]="'batchNo'">
313
- <ng-template #editTemplate let-row="row">
314
- <co-input-text [(model)]="row.batchNo"
315
- [placeholder]="'BATCH' | localize"
316
- ></co-input-text>
317
- </ng-template>
318
- </co-simple-grid-column>
319
- <co-simple-grid-column *ngIf="articleDetails" [headerText]="'SERIAL_NO' | localize" [field]="'serialNo'">
320
- <ng-template #editTemplate let-row="row">
321
- <co-input-text [(model)]="row.serialNo"
322
- [placeholder]="'SERIAL_NO' | localize"
323
- ></co-input-text>
324
- </ng-template>
325
- </co-simple-grid-column>
326
- <co-simple-grid-column [headerText]="'STOCK' | localize" [field]="'amountInStock'">
327
- <ng-template #editTemplate let-row="row">
328
- <co-input-text [(model)]="row.amountInStock"
329
- [label]="'STOCK' | localize"
330
- (modelChange)="amountInStockChanged($event)"
331
- ></co-input-text>
332
- </ng-template>
333
- </co-simple-grid-column>
334
- <co-simple-grid-column [headerText]="'ALLOCATED' | localize" [field]="'stockAssigned'">
335
- <ng-template #editTemplate let-row="row">
336
- <span [textContent]="row.stockAssigned"></span>
337
- </ng-template>
338
- </co-simple-grid-column>
339
- <co-simple-grid-column [headerText]="'AVAILABLE_STOCK' | localize" [field]="'amountInStockFree'">
340
- <ng-template #editTemplate let-row="row">
341
- <span [textContent]="row.amountInStockFree"></span>
342
- </ng-template>
343
- </co-simple-grid-column>
344
- <co-simple-grid-column [headerText]="'VALUTA' | localize" [field]="'currency'">
345
- <ng-template #editTemplate let-row="row">
346
- <span [textContent]="row.currency"></span>
347
- </ng-template>
348
- </co-simple-grid-column>
349
- <co-simple-grid-column [headerText]="'PURCHASE_PRICE' | localize" [field]="'purchasePrice'">
350
- <ng-template #editTemplate let-row="row">
351
- <span [textContent]="row.purchasePrice"></span>
352
- </ng-template>
353
- </co-simple-grid-column>
354
- <co-simple-grid-column [headerText]="'SUPPLIER_NUMBER' | localize" [field]="'supplierNo'">
355
- <ng-template #editTemplate let-row="row">
356
- <span [textContent]="row.supplierNo"></span>
357
- </ng-template>
358
- </co-simple-grid-column>
359
- <co-simple-grid-column [headerText]="'TRANSFER' | localize" [field]="'transfer'">
360
- <ng-template #template let-row="row">
361
- <co-icon class="menu-icon" [iconData]="iconCacheService.getIcon(icons.DeliveryTruck)" (click)="handleStockTransferClick(row)"></co-icon>
362
- </ng-template>
363
- </co-simple-grid-column>
364
- <co-simple-grid-column [headerText]="'STICKER' | localize" [field]="'sticker'">
365
- <ng-template #template let-row="row">
366
- <co-icon class="menu-icon" [iconData]="iconCacheService.getIcon(icons.Print)" (click)="openSendMethodDialog(row)"></co-icon>
367
- </ng-template>
368
- </co-simple-grid-column>
369
- </co-simple-grid>
370
- </div>
371
-
372
- <co-stock-change-amount *ngIf="showChangeStockDetails"
373
- (closeStockChangeAmount)="showChangeStockDetails = false"
374
- [selectedArticleDetailsData]="selectedArticleDetailsData"
375
- >
376
- </co-stock-change-amount>
377
-
378
- <div class="stock-grid" *ngIf="showStockHistory">
379
- <div class="stock-button-left-group">
380
- <span class="stock-button-back" [textContent]="'BACK_TO_STOCK_LINES' | localize" (click)="backToStockInformation()"></span>
381
- </div>
382
- <co-simple-grid [data]="stockHistoryInformation"
383
- class="simple-grid"
384
- [rowsPerPage]="20"
385
- >
386
- <co-simple-grid-column [headerText]="'MUTATION_DATE' | localize">
387
- <ng-template #template let-row="row">
388
- <span [textContent]="row.mutationDate | date:'dd-MM-yyyy'"></span>
389
- </ng-template>
390
- </co-simple-grid-column>
391
- <co-simple-grid-column [headerText]="'MUTATION_TIME' | localize" [field]="'mutationTime'"></co-simple-grid-column>
392
- <co-simple-grid-column [headerText]="'AMOUNT' | localize" [field]="'amount'"></co-simple-grid-column>
393
- <co-simple-grid-column [headerText]="'WAREHOUSE' | localize" [field]="'wareHouseNr'"></co-simple-grid-column>
394
- <co-simple-grid-column [headerText]="'LOCATION' | localize" [field]="'locationNr'"></co-simple-grid-column>
395
- <co-simple-grid-column [headerText]="'TRANSACTION_TYPE' | localize" [field]="'transType'"></co-simple-grid-column>
396
- <co-simple-grid-column [headerText]="'DOCUMENT_NUMBER' | localize" [field]="'docNr'"></co-simple-grid-column>
397
- <co-simple-grid-column [headerText]="'LINE' | localize" [field]="'posLineNr'"></co-simple-grid-column>
398
- <co-simple-grid-column [headerText]="'STOCK_STATE' | localize" [field]="'stockStateId'"></co-simple-grid-column>
399
- <co-simple-grid-column [headerText]="'STOCK_REMARK' | localize" [field]="'stockStateRemarkId'"></co-simple-grid-column>
400
- <co-simple-grid-column [headerText]="'VALUTA' | localize" [field]="'currencyCode'"></co-simple-grid-column>
401
- <co-simple-grid-column [headerText]="'RELATION_ID' | localize" [field]="'relationId'"></co-simple-grid-column>
402
- <co-simple-grid-column [headerText]="'USER' | localize" [field]="'user'"></co-simple-grid-column>
403
- <co-simple-grid-column [headerText]="'MUTATION_TYPE' | localize" [field]="'mutationType'"></co-simple-grid-column>
404
- <co-simple-grid-column [headerText]="'STICKER' | localize" [field]="'sticker'">
405
- <ng-template #template let-row="row">
406
- <co-icon class="menu-icon" [iconData]="iconCacheService.getIcon(icons.Print)" (click)="openSendMethodDialog(row)"></co-icon>
407
- </ng-template>
408
- </co-simple-grid-column>
409
- </co-simple-grid>
410
- </div>
411
-
412
- <div class="stock-button-toolbar">
413
- <div class="stock-button-left-group">
414
- <co-button *ngIf="activeTab === tabs[0]" [label]="'HISTORY' | localize" (click)="handleHistoryClick()"></co-button>
415
- </div>
416
- <div class="stock-button-middle-group" *ngIf="activeTab !== tabs[0]">
417
- <div class="button-left">
418
- <co-button [textContent]="'OK' | localize" (click)="onOkClick()"></co-button>
419
- </div>
420
- <div class="button-right">
421
- <co-button [textContent]="'CANCEL' | localize" (click)="onCancelClick()"></co-button>
422
- </div>
423
- </div>
424
-
425
- <div class="stock-button-middle-group" *ngIf="hideOrShowLocationTab">
426
- <div class="button-left">
427
- <co-button [textContent]="'OK' | localize" (click)="onOkClickSendLocations()"></co-button>
428
- </div>
429
- <div class="button-right">
430
- <co-button [textContent]="'CANCEL' | localize" (click)="onCancelClickSendLocations()"></co-button>
431
- </div>
432
- </div>
433
- </div>
434
- <co-send-method-dialog *ngIf="showSendMethodDialog"
435
- (closeClick)="showSendMethodDialog = false"
436
- [visibleMethods]="sendMethod[1]"
437
- ></co-send-method-dialog>
438
- `,
439
- encapsulation: ViewEncapsulation.None
440
- },] }
441
- ];
442
- StockInformationGridComponent.ctorParameters = () => [
443
- { type: IconCacheService },
444
- { type: StockService }
445
- ];
446
- StockInformationGridComponent.propDecorators = {
447
- stock: [{ type: ViewChild, args: [StockInformationGridComponent,] }],
448
- articleStockInformation: [{ type: Input }],
449
- stockLocationData: [{ type: Input }],
450
- stockHistoryInformation: [{ type: Input }],
451
- article: [{ type: Input }],
452
- transferIconClicked: [{ type: Output }],
453
- historyClicked: [{ type: Output }],
454
- cancelButtonClicked: [{ type: Output }],
455
- okButtonClicked: [{ type: Output }]
456
- };
457
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staW5mb3JtYXRpb24tZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zdG9jay9zdG9jay1pbmZvcm1hdGlvbi1ncmlkL3N0b2NrLWluZm9ybWF0aW9uLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTdDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUU1RSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUNqRyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUdyRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUV4RixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQXlRM0YsTUFBTSxPQUFPLDZCQUE2QjtJQXdFeEMsWUFDUyxnQkFBa0MsRUFDakMsYUFBMkI7UUFENUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQXpFckIsVUFBSyxHQUFnQixJQUFJLENBQUM7UUFrQjFCLHdCQUFtQixHQUFpQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3ZFLG1CQUFjLEdBQXNCLElBQUksWUFBWSxF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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThQVDtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O1lBbFJPLGdCQUFnQjtZQURoQixZQUFZOzs7b0JBd1JqQixTQUFTLFNBQUMsNkJBQTZCO3NDQUd2QyxLQUFLO2dDQUdMLEtBQUs7c0NBR0wsS0FBSztzQkFHTCxLQUFLO2tDQUdMLE1BQU07NkJBR04sTUFBTTtrQ0FHTixNQUFNOzhCQUdOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtTdG9ja1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL3N0b2NrLnNlcnZpY2VcIjtcbmltcG9ydCB7SWNvbkNhY2hlU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2UvaWNvbi1jYWNoZS5zZXJ2aWNlXCI7XG5pbXBvcnQge0ljb259IGZyb20gXCIuLi8uLi8uLi9lbnVtL2ljb24uZW51bVwiO1xuaW1wb3J0IHtBcnRpY2xlU3RvY2sgYXMgQXJ0aWNsZVN0b2NrQm99IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLXN0b2NrLmJvXCI7XG5pbXBvcnQge0FydGljbGVTdG9ja30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtc3RvY2tcIjtcbmltcG9ydCB7U3RvY2tIaXN0b3J5Qm99IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9zdG9jay1oaXN0b3J5LmJvXCI7XG5pbXBvcnQge0FydGljbGVTdG9ja01hbmFnZW1lbnR9IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLXN0b2NrLW1hbmFnZW1lbnRcIjtcbmltcG9ydCB7QXJ0aWNsZURldGFpbHNCb30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZGV0YWlscy5ib1wiO1xuaW1wb3J0IHtTdG9ja01hbmFnZW1lbnRXYXJlaG91c2VzfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvc3RvY2stbWFuYWdlbWVudC13YXJlaG91c2VzLmJvXCI7XG5pbXBvcnQge0NvRHJvcERvd25MaXN0RmllbGRzfSBmcm9tIFwiLi4vc3RvY2stdHJhbnNmZXIvY28tZHJvcC1kb3duLWxpc3QtZmllbGRzLmludGVyZmFjZVwiO1xuaW1wb3J0IHtBcnRpY2xlVHJhbnNhY3Rpb259IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLXRyYW5zYWN0aW9uXCI7XG5pbXBvcnQge0FydGljbGVUcmFuc2FjdGlvbiBhcyBBcnRpY2xlVHJhbnNhY3Rpb25Cb30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtdHJhbnNhY3Rpb24uYm9cIjtcbmltcG9ydCB7UHJpbnRQcmljZVN0aWNrZXJzfSBmcm9tIFwiQGNvbGlqbml0L3NoYXJlZGFwaS9idWlsZC9tb2RlbC9wcmludC1wcmljZS1zdGlja2Vycy5ib1wiO1xuaW1wb3J0IHtTdG9ja0xvY2F0aW9ufSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvc3RvY2stbG9jYXRpb24uYm9cIjtcbmltcG9ydCB7QXJ0aWNsZUV4dGVuZGVkfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC5ib1wiO1xuaW1wb3J0IHtTZW5kTWV0aG9kVHlwZX0gZnJvbSBcIkBjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vc2VuZC1tZXRob2QtdHlwZS5lbnVtXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjby1zdG9jay1pbmZvcm1hdGlvbi1ncmlkXCIsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInRhYi1saW5rIHNob3dcIiAqbmdJZj1cImhpZGVPclNob3dUYWJzXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRhYi1saW5rLWJ1dHRvbnNcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVUYWJDbGljayh0YWIpXCJcbiAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJ0YWJcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJ0YWIgPT09IGFjdGl2ZVRhYlwiXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInN0b2NrLWxpbmVcIj5cbiAgICAgIDxkaXYgW3RleHRDb250ZW50XT1cImFjdGl2ZVRhYlRleHRcIj48L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInN0b2NrLWdyaWRcIj5cbiAgICAgIDxjby1zaW1wbGUtZ3JpZCAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gdGFic1swXSAmJiBoaWRlT3JTaG93VGFic1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiYXJ0aWNsZVN0b2NrSW5mb3JtYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3dzUGVyUGFnZV09XCIyMFwiXG4gICAgICA+XG4gICAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInV0FSRUhPVVNFJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIid3YXJlaG91c2VObydcIiBbb3JkZXJdPVwiMTBcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidERVNDUklQVElPTicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInd2FyZWhvdXNlTmFtZSdcIiBbb3JkZXJdPVwiMTFcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidTVE9DSycgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCIndGVjaG5pY2FsU3RvY2snXCIgW29yZGVyXT1cIjEyXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInQVZBSUxBQkxFX1NUT0NLJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidhdmFpbGFibGVTdG9jaydcIiBbb3JkZXJdPVwiMTNcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidFQ09OT01JQ0FMX1NUT0NLJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidlY29ub21pY2FsU3RvY2snXCIgW29yZGVyXT1cIjE0XCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInTE9DQVRJT04nIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ2xvY2F0aW9uTm8nXCIgW29yZGVyXT1cIjE1XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2NhdGlvbi1saW5rXCIgW3RleHRDb250ZW50XT1cIidMT09LX0FUJyB8IGxvY2FsaXplXCIgKGNsaWNrKT1cIm9uTG9jYXRpb25DbGljayhyb3cpXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgIDwvY28tc2ltcGxlLWdyaWQ+XG5cbiAgICAgIDxjby1zaW1wbGUtZ3JpZCAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gdGFic1sxXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiaW5PcmRlckluZm9ybWF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcm93c1BlclBhZ2VdPVwiMjBcIlxuICAgICAgPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidJTl9PUkRFUicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCIndHJhbnNhY3Rpb25OcidcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInQ1VTVE9NRVInIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ2N1c3RvbWVyTmFtZSdcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInREFURScgfCBsb2NhbGl6ZVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cInJvdy50cmFuc2FjdGlvbkRhdGUgfCBkYXRlOidkZC1NTS15eXl5J1wiPjwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInQU1PVU5UJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidhbW91bnRJbk9yZGVyJ1wiPjwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidXQVJFSE9VU0UnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3dhcmVob3VzZU51bWJlcidcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInREVTQ1JJUFRJT04nIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3dhcmVob3VzZURlc2NyaXB0aW9uJ1wiPjwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidUUkFOU0ZFUicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCIndHJhbnNmZXInXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cIm1lbnUtaWNvblwiIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuRGVsaXZlcnlUcnVjaylcIiAoY2xpY2spPVwiaGFuZGxlU3RvY2tUcmFuc2ZlckNsaWNrKCRldmVudClcIj48L2NvLWljb24+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ1NUSUNLRVInIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3N0aWNrZXInXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cIm1lbnUtaWNvblwiIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuUHJpbnQpXCIgKGNsaWNrKT1cIm9wZW5TZW5kTWV0aG9kRGlhbG9nKHJvdylcIj48L2NvLWljb24+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICA8L2NvLXNpbXBsZS1ncmlkPlxuXG4gICAgICA8Y28tc2ltcGxlLWdyaWQgKm5nSWY9XCJhY3RpdmVUYWIgPT09IHRhYnNbMl1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cIm9yZGVySW5mb3JtYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3dzUGVyUGFnZV09XCIyMFwiXG4gICAgICA+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ1BVUkNIQVNFX09SREVSX05SJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIid0cmFuc2FjdGlvbk5yJ1wiPjwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidEQVRFJyB8IGxvY2FsaXplXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwicm93LnRyYW5zYWN0aW9uRGF0ZSB8IGRhdGU6J2RkLU1NLXl5eXknXCI+PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidBTU9VTlQnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ2Ftb3VudEluT3JkZXInXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ1JFU0VSVkVEJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidyZXNlcnZlZCdcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInRlJFRV9TVE9DSycgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInSW5PcmRlckZvclN0b2NrJ1wiPjwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidERUxJVkVSWV9EQVRFJyB8IGxvY2FsaXplXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwicm93LmRlbGl2ZXJ5RGF0ZSB8IGRhdGU6J2RkLU1NLXl5eXknXCI+PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgPC9jby1zaW1wbGUtZ3JpZD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJzdG9jay1ncmlkXCIgKm5nSWY9XCJoaWRlT3JTaG93TG9jYXRpb25UYWJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdG9jay1sb2NhdGlvbi1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RvY2stbG9jYXRpb24tbGVmdC1ncm91cFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RvY2stYnV0dG9uLWJhY2tcIiBbdGV4dENvbnRlbnRdPVwiJ0JBQ0tfVE9fU1RPQ0tfTElORVMnIHwgbG9jYWxpemVcIiAoY2xpY2spPVwiaGFuZGxlQmFja1RvU3RvY2tDbGljaygpXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0b2NrLWxvY2F0aW9uLXJpZ2h0LWdyb3VwXCI+XG48IS0tXG4gICAgICAgICAgPGNvLWRyb3AtZG93bi1saXN0ICBbKG1vZGVsKV09XCJzZWxlY3RlZFdhcmVob3VzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sbGVjdGlvbl09XCJkYXRhV2FyZUhvdXNlQ29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRzXT1cImRhdGFXYXJlSG91c2VGaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidXQVJFSE9VU0UnIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cIm9uU2VsZWN0V2FyZWhvdXNlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgID48L2NvLWRyb3AtZG93bi1saXN0PlxuLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbjwhLS0gICAgICBUT0RPIG1vdmUgdG8gb3duIGNvbXBvbmVudCBzdG9jay1sb2NhdGlvbi0tPlxuICAgICAgPGNvLXNpbXBsZS1ncmlkIFtkYXRhXT1cImFydGljbGVEZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcm93c1BlclBhZ2VdPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93QWRkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93VG9vbGJhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0RlbGV0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lRWRpdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZGJsQ2xpY2tSb3cpPVwibG9ja1NlbGVjdGVkUm93KCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RvY2stbG9jYXRpb24tZ3JvdXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RvY2stbG9jYXRpb24tbGVmdC1ncm91cFwiPlxuICAgICAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cInN0b2NrLWxpbmVzLWJ1dHRvblwiIFt0ZXh0Q29udGVudF09XCInQkFDS19UT19TVE9DS19MSU5FUycgfCBsb2NhbGl6ZVwiIChjbGljayk9XCJoYW5kbGVCYWNrVG9TdG9ja0NsaWNrKClcIj48L2NvLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0xPQ0FUSU9OJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidsb2NhdGlvbk5vJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cbjwhLS1cbiAgICAgICAgICAgIDxjby1kcm9wLWRvd24tbGlzdCBbKG1vZGVsKV09XCJyb3cubG9jYXRpb25Ob1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbGxlY3Rpb25dPVwic3RvY2tMb2NhdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZHNdPVwiZGF0YUxvY2F0aW9uRmllbGRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0xPQ0FUSU9OJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Mb2NhdGlvbkRyb3Bkb3duQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgPjwvY28tZHJvcC1kb3duLWxpc3Q+XG4tLT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiAqbmdJZj1cImFydGljbGVEZXRhaWxzXCIgW2hlYWRlclRleHRdPVwiJ0JBVENIJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidiYXRjaE5vJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0IFsobW9kZWwpXT1cInJvdy5iYXRjaE5vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQkFUQ0gnIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiAqbmdJZj1cImFydGljbGVEZXRhaWxzXCIgW2hlYWRlclRleHRdPVwiJ1NFUklBTF9OTycgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInc2VyaWFsTm8nXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgPGNvLWlucHV0LXRleHQgWyhtb2RlbCldPVwicm93LnNlcmlhbE5vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU0VSSUFMX05PJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgID48L2NvLWlucHV0LXRleHQ+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ1NUT0NLJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidhbW91bnRJblN0b2NrJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0ICBbKG1vZGVsKV09XCJyb3cuYW1vdW50SW5TdG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidTVE9DSycgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImFtb3VudEluU3RvY2tDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInQUxMT0NBVEVEJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidzdG9ja0Fzc2lnbmVkJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJyb3cuc3RvY2tBc3NpZ25lZFwiPjwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInQVZBSUxBQkxFX1NUT0NLJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidhbW91bnRJblN0b2NrRnJlZSdcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRUZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwicm93LmFtb3VudEluU3RvY2tGcmVlXCI+PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidWQUxVVEEnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ2N1cnJlbmN5J1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJyb3cuY3VycmVuY3lcIj48L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ1BVUkNIQVNFX1BSSUNFJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidwdXJjaGFzZVByaWNlJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJyb3cucHVyY2hhc2VQcmljZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInU1VQUExJRVJfTlVNQkVSJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidzdXBwbGllck5vJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJyb3cuc3VwcGxpZXJOb1wiPjwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInVFJBTlNGRVInIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3RyYW5zZmVyJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgPGNvLWljb24gY2xhc3M9XCJtZW51LWljb25cIiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb25zLkRlbGl2ZXJ5VHJ1Y2spXCIgKGNsaWNrKT1cImhhbmRsZVN0b2NrVHJhbnNmZXJDbGljayhyb3cpXCI+PC9jby1pY29uPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidTVElDS0VSJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidzdGlja2VyJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgPGNvLWljb24gY2xhc3M9XCJtZW51LWljb25cIiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb25zLlByaW50KVwiIChjbGljayk9XCJvcGVuU2VuZE1ldGhvZERpYWxvZyhyb3cpXCI+PC9jby1pY29uPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgPC9jby1zaW1wbGUtZ3JpZD5cbiAgICA8L2Rpdj5cblxuICAgIDxjby1zdG9jay1jaGFuZ2UtYW1vdW50ICpuZ0lmPVwic2hvd0NoYW5nZVN0b2NrRGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlU3RvY2tDaGFuZ2VBbW91bnQpPVwic2hvd0NoYW5nZVN0b2NrRGV0YWlscyA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGFdPVwic2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGFcIlxuICAgID5cbiAgICA8L2NvLXN0b2NrLWNoYW5nZS1hbW91bnQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwic3RvY2stZ3JpZFwiICpuZ0lmPVwic2hvd1N0b2NrSGlzdG9yeVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0b2NrLWJ1dHRvbi1sZWZ0LWdyb3VwXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3RvY2stYnV0dG9uLWJhY2tcIiBbdGV4dENvbnRlbnRdPVwiJ0JBQ0tfVE9fU1RPQ0tfTElORVMnIHwgbG9jYWxpemVcIiAoY2xpY2spPVwiYmFja1RvU3RvY2tJbmZvcm1hdGlvbigpXCI+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8Y28tc2ltcGxlLWdyaWQgW2RhdGFdPVwic3RvY2tIaXN0b3J5SW5mb3JtYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3dzUGVyUGFnZV09XCIyMFwiXG4gICAgICA+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ01VVEFUSU9OX0RBVEUnIHwgbG9jYWxpemVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJyb3cubXV0YXRpb25EYXRlIHwgZGF0ZTonZGQtTU0teXl5eSdcIj48L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ01VVEFUSU9OX1RJTUUnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ211dGF0aW9uVGltZSdcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInQU1PVU5UJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidhbW91bnQnXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ1dBUkVIT1VTRScgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInd2FyZUhvdXNlTnInXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0xPQ0FUSU9OJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidsb2NhdGlvbk5yJ1wiPjwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidUUkFOU0FDVElPTl9UWVBFJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIid0cmFuc1R5cGUnXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0RPQ1VNRU5UX05VTUJFUicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInZG9jTnInXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0xJTkUnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3Bvc0xpbmVOcidcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInU1RPQ0tfU1RBVEUnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3N0b2NrU3RhdGVJZCdcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInU1RPQ0tfUkVNQVJLJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidzdG9ja1N0YXRlUmVtYXJrSWQnXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ1ZBTFVUQScgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInY3VycmVuY3lDb2RlJ1wiPjwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidSRUxBVElPTl9JRCcgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCIncmVsYXRpb25JZCdcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInVVNFUicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCIndXNlcidcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInTVVUQVRJT05fVFlQRScgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInbXV0YXRpb25UeXBlJ1wiPjwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidTVElDS0VSJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidzdGlja2VyJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgPGNvLWljb24gY2xhc3M9XCJtZW51LWljb25cIiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb25zLlByaW50KVwiIChjbGljayk9XCJvcGVuU2VuZE1ldGhvZERpYWxvZyhyb3cpXCI+PC9jby1pY29uPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxuICAgICAgPC9jby1zaW1wbGUtZ3JpZD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJzdG9jay1idXR0b24tdG9vbGJhclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0b2NrLWJ1dHRvbi1sZWZ0LWdyb3VwXCI+XG4gICAgICAgIDxjby1idXR0b24gKm5nSWY9XCJhY3RpdmVUYWIgPT09IHRhYnNbMF1cIiBbbGFiZWxdPVwiJ0hJU1RPUlknIHwgbG9jYWxpemVcIiAoY2xpY2spPVwiaGFuZGxlSGlzdG9yeUNsaWNrKClcIj48L2NvLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN0b2NrLWJ1dHRvbi1taWRkbGUtZ3JvdXBcIiAqbmdJZj1cImFjdGl2ZVRhYiAhPT0gdGFic1swXVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWxlZnRcIj5cbiAgICAgICAgICA8Y28tYnV0dG9uIFt0ZXh0Q29udGVudF09XCInT0snIHwgbG9jYWxpemVcIiAoY2xpY2spPVwib25Pa0NsaWNrKClcIj48L2NvLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tcmlnaHRcIj5cbiAgICAgICAgICA8Y28tYnV0dG9uIFt0ZXh0Q29udGVudF09XCInQ0FOQ0VMJyB8IGxvY2FsaXplXCIgKGNsaWNrKT1cIm9uQ2FuY2VsQ2xpY2soKVwiPjwvY28tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic3RvY2stYnV0dG9uLW1pZGRsZS1ncm91cFwiICpuZ0lmPVwiaGlkZU9yU2hvd0xvY2F0aW9uVGFiXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tbGVmdFwiPlxuICAgICAgICAgIDxjby1idXR0b24gW3RleHRDb250ZW50XT1cIidPSycgfCBsb2NhbGl6ZVwiIChjbGljayk9XCJvbk9rQ2xpY2tTZW5kTG9jYXRpb25zKClcIj48L2NvLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tcmlnaHRcIj5cbiAgICAgICAgICA8Y28tYnV0dG9uIFt0ZXh0Q29udGVudF09XCInQ0FOQ0VMJyB8IGxvY2FsaXplXCIgKGNsaWNrKT1cIm9uQ2FuY2VsQ2xpY2tTZW5kTG9jYXRpb25zKClcIj48L2NvLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8Y28tc2VuZC1tZXRob2QtZGlhbG9nICpuZ0lmPVwic2hvd1NlbmRNZXRob2REaWFsb2dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlQ2xpY2spPVwic2hvd1NlbmRNZXRob2REaWFsb2cgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdmlzaWJsZU1ldGhvZHNdPVwic2VuZE1ldGhvZFsxXVwiXG4gICAgPjwvY28tc2VuZC1tZXRob2QtZGlhbG9nPlxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuXG5leHBvcnQgY2xhc3MgU3RvY2tJbmZvcm1hdGlvbkdyaWRDb21wb25lbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgaWNvbnM6IHR5cGVvZiBJY29uID0gSWNvbjtcblxuICBAVmlld0NoaWxkKFN0b2NrSW5mb3JtYXRpb25HcmlkQ29tcG9uZW50KVxuICBwdWJsaWMgc3RvY2s6IFN0b2NrSW5mb3JtYXRpb25HcmlkQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcnRpY2xlU3RvY2tJbmZvcm1hdGlvbjogQXJ0aWNsZVN0b2NrQm9bXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3RvY2tMb2NhdGlvbkRhdGE6IEFydGljbGVTdG9ja0JvW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN0b2NrSGlzdG9yeUluZm9ybWF0aW9uOiBTdG9ja0hpc3RvcnlCb1tdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcnRpY2xlOiBBcnRpY2xlRXh0ZW5kZWQ7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSB0cmFuc2Zlckljb25DbGlja2VkOiBFdmVudEVtaXR0ZXI8QXJ0aWNsZVN0b2NrQm8+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgaGlzdG9yeUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgY2FuY2VsQnV0dG9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBva0J1dHRvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyBpbWFnZTogc3RyaW5nO1xuICBwdWJsaWMgc2hvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaGlkZU9yU2hvd0xvY2F0aW9uVGFiOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93U3RvY2tIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93U2VuZE1ldGhvZERpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpbk9yZGVySW5mb3JtYXRpb246IEFydGljbGVUcmFuc2FjdGlvbkJvW107XG4gIHB1YmxpYyBvcmRlckluZm9ybWF0aW9uOiBBcnRpY2xlVHJhbnNhY3Rpb25Cb1tdXG4gIHB1YmxpYyBoaWRlT3JTaG93VGFiczogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBkYXRhV2FyZUhvdXNlQ29kZTogU3RvY2tNYW5hZ2VtZW50V2FyZWhvdXNlc1tdO1xuICBwdWJsaWMgZGF0YVdhcmVIb3VzZUZpZWxkczogQ29Ecm9wRG93bkxpc3RGaWVsZHMgPSB7IHRleHQ6IFwid2FyZWhvdXNlRGVzY3JpcHRpb25cIiwgdmFsdWU6IFwid2FyZWhvdXNlTm9cIiB9O1xuICBwdWJsaWMgZGF0YUxvY2F0aW9uRmllbGRzOiBDb0Ryb3BEb3duTGlzdEZpZWxkcyA9IHt0ZXh0OiBcImxvY2F0aW9uTm9cIiwgdmFsdWU6IFwibG9jYXRpb25Ob1wifTtcbiAgcHVibGljIHNlbGVjdGVkV2FyZWhvdXNlOiBhbnk7XG4gIHB1YmxpYyBzZWxlY3RlZExvY2F0aW9uOiBTdG9ja0xvY2F0aW9uO1xuICBwdWJsaWMgc3RvY2tMb2NhdGlvbnM6IFN0b2NrTG9jYXRpb25bXTtcbiAgcHVibGljIGFydGljbGVTdG9ja1NlYXJjaEluZm86IEFydGljbGVTdG9jayA9IG5ldyBBcnRpY2xlU3RvY2soKTtcbiAgcHVibGljIGFydGljbGVEZXRhaWxzOiBBcnRpY2xlRGV0YWlsc0JvW107XG4gIHB1YmxpYyBzZWxlY3RlZEFydGljbGVEZXRhaWxzRGF0YTogQXJ0aWNsZURldGFpbHNCbyA9IG5ldyBBcnRpY2xlRGV0YWlsc0JvKCk7XG4gIHB1YmxpYyBzaG93Q2hhbmdlU3RvY2tEZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBhcnRpY2xlRGV0YWlsc0luZm9ybWF0aW9uOiBBcnRpY2xlU3RvY2tNYW5hZ2VtZW50ID0gbmV3IEFydGljbGVTdG9ja01hbmFnZW1lbnQoKTtcbiAgcHVibGljIHNlbmRNZXRob2Q6IFNlbmRNZXRob2RUeXBlW107XG5cbiAgcHVibGljIHRhYnM6IHN0cmluZ1tdID0gW1xuICAgIFwiU1RPQ0tcIixcbiAgICBcIklOX09SREVSMlwiLFxuICAgIFwiT1JERVJTMVwiXG4gIF07XG4gIHB1YmxpYyBhY3RpdmVUYWI6IHN0cmluZyA9IHRoaXMudGFic1swXTtcblxuICBwdWJsaWMgZ2V0IGFjdGl2ZVRhYlRleHQoKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVGFiKSB7XG4gICAgICBjYXNlIHRoaXMudGFic1swXTpcbiAgICAgICAgcmV0dXJuIFwiVm9vcnJhYWRyZWdlbHNcIjtcbiAgICAgIGNhc2UgdGhpcy50YWJzWzFdOlxuICAgICAgICByZXR1cm4gXCJHZXZvbmRlbiBpbiBvcmRlcihzKVwiO1xuICAgICAgY2FzZSB0aGlzLnRhYnNbMl06XG4gICAgICAgIHJldHVybiBcIkdldm9uZGVuIGluIGJlc3RlbGxpbmdlblwiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiVm9vcnJhYWRsb2NhdGllIHJlZ2Vsc1wiO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpY29uQ2FjaGVTZXJ2aWNlOiBJY29uQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3N0b2NrU2VydmljZTogU3RvY2tTZXJ2aWNlLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVUYWJDbGljayh0YWJEYXRhKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWJEYXRhO1xuICAgIGlmICh0aGlzLmFjdGl2ZVRhYiA9PT0gXCJJTl9PUkRFUjJcIikge1xuICAgICAgdGhpcy5nZXRJbk9yZGVyRGF0YSgpO1xuICAgIH0gaWYgKHRoaXMuYWN0aXZlVGFiID09PSBcIk9SREVSUzFcIikge1xuICAgICAgdGhpcy5nZXRPcmRlckRhdGEoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Mb2NhdGlvbkNsaWNrKGRhdGE6IEFydGljbGVTdG9ja0JvKTogdm9pZCB7XG4gICAgdGhpcy5hcnRpY2xlU3RvY2tTZWFyY2hJbmZvLmdvb2RJZCA9IGRhdGEuZ29vZElkLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5hcnRpY2xlU3RvY2tTZWFyY2hJbmZvLndhcmVIb3VzZU5vID0gZGF0YS53YXJlaG91c2VOby50b1N0cmluZygpO1xuICAgIHRoaXMuYXJ0aWNsZVN0b2NrU2VhcmNoSW5mby52aWV3S2luZCA9IFwiRFwiO1xuICAgIHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UgPSBkYXRhLndhcmVob3VzZU5vO1xuICAgIGlmICghdGhpcy5kYXRhV2FyZUhvdXNlQ29kZSkge1xuICAgICAgdGhpcy5nZXRTdG9ja01hbmFnZW1lbnRXYXJlaG91c2VzKGRhdGEpO1xuICAgIH1cbiAgICB0aGlzLmdldEFydGljbGVEZXRhaWxzKGRhdGEpO1xuICAgIHRoaXMuaGlkZU9yU2hvd1RhYnMgPSBmYWxzZTtcbiAgICB0aGlzLmhpZGVPclNob3dMb2NhdGlvblRhYiA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlSGlzdG9yeUNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuaGlzdG9yeUNsaWNrZWQuZW1pdCgpXG4gICAgdGhpcy5oaWRlT3JTaG93TG9jYXRpb25UYWIgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dDaGFuZ2VTdG9ja0RldGFpbHMgPSBmYWxzZTtcbiAgICB0aGlzLmhpZGVPclNob3dUYWJzID0gZmFsc2U7XG4gICAgdGhpcy5zaG93U3RvY2tIaXN0b3J5ID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBiYWNrVG9TdG9ja0luZm9ybWF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1N0b2NrSGlzdG9yeSA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9yU2hvd1RhYnMgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVN0b2NrVHJhbnNmZXJDbGljayhldmVudCk6IHZvaWQge1xuICAgIHRoaXMudHJhbnNmZXJJY29uQ2xpY2tlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVCYWNrVG9TdG9ja0NsaWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzWzBdO1xuICAgIHRoaXMuaGlkZU9yU2hvd1RhYnMgPSB0cnVlO1xuICAgIHRoaXMuaGlkZU9yU2hvd0xvY2F0aW9uVGFiID0gZmFsc2U7XG4gICAgdGhpcy5hcnRpY2xlRGV0YWlscyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuU2VuZE1ldGhvZERpYWxvZyhkYXRhKTogdm9pZCB7XG4gICAgaWYgKCEodGhpcy5fc3RvY2tTZXJ2aWNlLnByaW50TGF5b3V0UGFyYW1zIGluc3RhbmNlb2YgUHJpbnRQcmljZVN0aWNrZXJzKSkge1xuICAgICAgdGhpcy5fc3RvY2tTZXJ2aWNlLnByaW50TGF5b3V0UGFyYW1zLmdvb2RJZCA9IGRhdGEuZ29vZElkO1xuICAgICAgdGhpcy5fc3RvY2tTZXJ2aWNlLnByaW50TGF5b3V0UGFyYW1zLndhcmVob3VzZSA9IGRhdGEud2FyZWhvdXNlTm87XG4gICAgfVxuICAgIHRoaXMuc2hvd1NlbmRNZXRob2REaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHByaW50U3RvY2tTdGlja2VycygpOiB2b2lkIHtcbiAgICAvLyB0aGlzLl9zdG9ja1NlcnZpY2UuZ2V0UHJpbnRTdG9ja1N0aWNrZXJzKHRoaXMuX3N0b2NrU2VydmljZS5wcmludExheW91dFBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgb25Pa0NsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub2tCdXR0b25DbGlja2VkLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNhbmNlbENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uQ2xpY2tlZC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkRpYWxvZ0NsaWNrKGRhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQXJ0aWNsZURldGFpbHNEYXRhID0gZGF0YTtcbiAgICB0aGlzLnNob3dDaGFuZ2VTdG9ja0RldGFpbHMgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldEFydGljbGVEZXRhaWxzKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIC8vIGNvbnN0IGluZm8gPSBuZXcgQXJ0aWNsZVN0b2NrTWFuYWdlbWVudCgpO1xuICAgIHRoaXMuYXJ0aWNsZURldGFpbHNJbmZvcm1hdGlvbi5nb29kSWQgPSBkYXRhLmdvb2RJZDtcbiAgICB0aGlzLmFydGljbGVEZXRhaWxzSW5mb3JtYXRpb24ubGluZUlkID0gZGF0YS5saW5lSWQ7XG4gICAgdGhpcy5hcnRpY2xlRGV0YWlsc0luZm9ybWF0aW9uLndhcmVob3VzZU51bWJlciA9IGRhdGEud2FyZWhvdXNlTm87XG4gICAgdGhpcy5fc3RvY2tTZXJ2aWNlLmdldEFydGljbGVEZXRhaWxzKHRoaXMuYXJ0aWNsZURldGFpbHNJbmZvcm1hdGlvbikudGhlbigoZGV0YWlscykgPT4ge1xuICAgICAgdGhpcy5hcnRpY2xlRGV0YWlscyA9IGRldGFpbHM7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RvY2tNYW5hZ2VtZW50V2FyZWhvdXNlcyhkYXRhOiBBcnRpY2xlU3RvY2tCbyk6IHZvaWQge1xuICAgIHRoaXMuX3N0b2NrU2VydmljZS5nZXRTdG9ja01hbmFnZW1lbnRXYXJlaG91c2VzKCkudGhlbigod2FyZWhvdXNlcykgPT4ge1xuICAgICAgdGhpcy5kYXRhV2FyZUhvdXNlQ29kZSA9IHdhcmVob3VzZXM7XG4gICAgICB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlID0gZGF0YS53YXJlaG91c2VObztcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0V2FyZWhvdXNlKGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5hcnRpY2xlRGV0YWlsc0luZm9ybWF0aW9uLndhcmVob3VzZU51bWJlciA9IGV2ZW50O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkV2FyZWhvdXNlIHx8IHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UgPT09IDApIHtcbiAgICAgIHRoaXMuX3N0b2NrU2VydmljZS5nZXRBcnRpY2xlRGV0YWlscyh0aGlzLmFydGljbGVEZXRhaWxzSW5mb3JtYXRpb24pLnRoZW4oKGRldGFpbHMpID0+IHtcbiAgICAgICAgdGhpcy5hcnRpY2xlRGV0YWlscyA9IGRldGFpbHM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SW5PcmRlckRhdGEoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW5PcmRlckRhdGE6IEFydGljbGVUcmFuc2FjdGlvbiA9IG5ldyBBcnRpY2xlVHJhbnNhY3Rpb24oKTtcbiAgICBpbk9yZGVyRGF0YS50eXBlID0gXCJWXCI7XG4gICAgaW5PcmRlckRhdGEuZ29vZElkID0gdGhpcy5hcnRpY2xlU3RvY2tJbmZvcm1hdGlvblswXS5nb29kSWQudG9TdHJpbmcoKTtcbiAgICB0aGlzLmluT3JkZXJJbmZvcm1hdGlvbiA9IGF3YWl0IHRoaXMuX3N0b2NrU2VydmljZS5nZXRBcnRpY2xlVHJhbnNhY3Rpb24oaW5PcmRlckRhdGEpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE9yZGVyRGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvcmRlckRhdGE6IEFydGljbGVUcmFuc2FjdGlvbiA9IG5ldyBBcnRpY2xlVHJhbnNhY3Rpb24oKTtcbiAgICBvcmRlckRhdGEudHlwZSA9IFwiSVwiO1xuICAgIG9yZGVyRGF0YS5nb29kSWQgPSB0aGlzLmFydGljbGVTdG9ja0luZm9ybWF0aW9uWzBdLmdvb2RJZC50b1N0cmluZygpO1xuICAgIHRoaXMub3JkZXJJbmZvcm1hdGlvbiA9IGF3YWl0IHRoaXMuX3N0b2NrU2VydmljZS5nZXRBcnRpY2xlVHJhbnNhY3Rpb24ob3JkZXJEYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkxvY2F0aW9uRHJvcGRvd25DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdG9ja1NlcnZpY2UuZ2V0U3RvY2tNYW5hZ2VtZW50TG9jYXRpb25zKHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UpLnRoZW4oKGxvY2F0aW9ucykgPT4ge1xuICAgICAgdGhpcy5zdG9ja0xvY2F0aW9ucyA9IGxvY2F0aW9ucztcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIG9uTG9jYXRpb25TZWxlY3RlZChsb2NhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGEubG9jYXRpb25ObyA9IGxvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uT2tDbGlja1NlbmRMb2NhdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zZWxlY3RlZEFydGljbGVEZXRhaWxzRGF0YS5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEFydGljbGVEZXRhaWxzRGF0YS5nb29kSWQgPSB0aGlzLmFydGljbGUuZ29vZElkO1xuICAgIHRoaXMuc2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGEuZW50cnlEYXRlID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnNlbGVjdGVkQXJ0aWNsZURldGFpbHNEYXRhLndhcmVob3VzZU5vID0gdGhpcy5zZWxlY3RlZFdhcmVob3VzZTtcbiAgICBhd2FpdCB0aGlzLl9zdG9ja1NlcnZpY2UudXBkYXRlQXJ0aWNsZURldGFpbHModGhpcy5zZWxlY3RlZEFydGljbGVEZXRhaWxzRGF0YSk7XG4gICAgYXdhaXQgdGhpcy5fc3RvY2tTZXJ2aWNlLmdldEFydGljbGVEZXRhaWxzKHRoaXMuYXJ0aWNsZURldGFpbHNJbmZvcm1hdGlvbikudGhlbigoZGV0YWlscykgPT4ge1xuICAgICAgdGhpcy5hcnRpY2xlRGV0YWlscyA9IGRldGFpbHM7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWxDbGlja1NlbmRMb2NhdGlvbnMoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBhbW91bnRJblN0b2NrQ2hhbmdlZChkYXRhKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEFydGljbGVEZXRhaWxzRGF0YS5hbW91bnRJblN0b2NrID0gZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBsb2NrU2VsZWN0ZWRSb3cocm93KTogdm9pZCB7XG4gICAgdGhpcy5fc3RvY2tTZXJ2aWNlLmxvY2tBcnRpY2xlRGV0YWlscyhyb3cpO1xuICB9XG59XG4iXX0=
1
+ import { __awaiter } from "tslib";
2
+ import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from "@angular/core";
3
+ import { StockService } from "../../../service/stock.service";
4
+ import { IconCacheService } from "../../../service/icon-cache.service";
5
+ import { Icon } from "../../../enum/icon.enum";
6
+ import { ArticleStock } from "@colijnit/articleapi/build/model/article-stock";
7
+ import { ArticleStockManagement } from "@colijnit/articleapi/build/model/article-stock-management";
8
+ import { ArticleDetailsBo } from "@colijnit/articleapi/build/model/article-details.bo";
9
+ import { ArticleTransaction } from "@colijnit/articleapi/build/model/article-transaction";
10
+ import { PrintPriceStickers } from "@colijnit/sharedapi/build/model/print-price-stickers.bo";
11
+ export class StockInformationGridComponent {
12
+ constructor(iconCacheService, _stockService) {
13
+ this.iconCacheService = iconCacheService;
14
+ this._stockService = _stockService;
15
+ this.icons = Icon;
16
+ this.transferIconClicked = new EventEmitter();
17
+ this.historyClicked = new EventEmitter();
18
+ this.cancelButtonClicked = new EventEmitter();
19
+ this.okButtonClicked = new EventEmitter();
20
+ this.show = false;
21
+ this.hideOrShowLocationTab = false;
22
+ this.showStockHistory = false;
23
+ this.showSendMethodDialog = false;
24
+ this.hideOrShowTabs = true;
25
+ this.dataWareHouseFields = { text: "warehouseDescription", value: "warehouseNo" };
26
+ this.dataLocationFields = { text: "locationNo", value: "locationNo" };
27
+ this.articleStockSearchInfo = new ArticleStock();
28
+ this.selectedArticleDetailsData = new ArticleDetailsBo();
29
+ this.showChangeStockDetails = false;
30
+ this.articleDetailsInformation = new ArticleStockManagement();
31
+ this.tabs = [
32
+ "STOCK",
33
+ "IN_ORDER2",
34
+ "ORDERS1"
35
+ ];
36
+ this.activeTab = this.tabs[0];
37
+ }
38
+ get activeTabText() {
39
+ switch (this.activeTab) {
40
+ case this.tabs[0]:
41
+ return "Voorraadregels";
42
+ case this.tabs[1]:
43
+ return "Gevonden in order(s)";
44
+ case this.tabs[2]:
45
+ return "Gevonden in bestellingen";
46
+ default:
47
+ return "Voorraadlocatie regels";
48
+ }
49
+ }
50
+ handleTabClick(tabData) {
51
+ this.activeTab = tabData;
52
+ if (this.activeTab === "IN_ORDER2") {
53
+ this.getInOrderData();
54
+ }
55
+ if (this.activeTab === "ORDERS1") {
56
+ this.getOrderData();
57
+ }
58
+ }
59
+ onLocationClick(data) {
60
+ this.articleStockSearchInfo.goodId = data.goodId.toString();
61
+ this.articleStockSearchInfo.wareHouseNo = data.warehouseNo.toString();
62
+ this.articleStockSearchInfo.viewKind = "D";
63
+ this.selectedWarehouse = data.warehouseNo;
64
+ if (!this.dataWareHouseCode) {
65
+ this.getStockManagementWarehouses(data);
66
+ }
67
+ this.getArticleDetails(data);
68
+ this.hideOrShowTabs = false;
69
+ this.hideOrShowLocationTab = true;
70
+ }
71
+ handleHistoryClick() {
72
+ this.historyClicked.emit();
73
+ this.hideOrShowLocationTab = false;
74
+ this.showChangeStockDetails = false;
75
+ this.hideOrShowTabs = false;
76
+ this.showStockHistory = true;
77
+ }
78
+ backToStockInformation() {
79
+ this.showStockHistory = false;
80
+ this.hideOrShowTabs = true;
81
+ }
82
+ handleStockTransferClick(event) {
83
+ this.transferIconClicked.emit(event);
84
+ }
85
+ handleBackToStockClick() {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ this.activeTab = this.tabs[0];
88
+ this.hideOrShowTabs = true;
89
+ this.hideOrShowLocationTab = false;
90
+ this.articleDetails = undefined;
91
+ });
92
+ }
93
+ openSendMethodDialog(data) {
94
+ if (!(this._stockService.printLayoutParams instanceof PrintPriceStickers)) {
95
+ this._stockService.printLayoutParams.goodId = data.goodId;
96
+ this._stockService.printLayoutParams.warehouse = data.warehouseNo;
97
+ }
98
+ this.showSendMethodDialog = true;
99
+ }
100
+ printStockStickers() {
101
+ // this._stockService.getPrintStockStickers(this._stockService.printLayoutParams);
102
+ }
103
+ onOkClick() {
104
+ this.okButtonClicked.emit();
105
+ }
106
+ onCancelClick() {
107
+ this.cancelButtonClicked.emit();
108
+ }
109
+ openDialogClick(data) {
110
+ this.selectedArticleDetailsData = data;
111
+ this.showChangeStockDetails = true;
112
+ }
113
+ getArticleDetails(data) {
114
+ // const info = new ArticleStockManagement();
115
+ this.articleDetailsInformation.goodId = data.goodId;
116
+ this.articleDetailsInformation.lineId = data.lineId;
117
+ this.articleDetailsInformation.warehouseNumber = data.warehouseNo;
118
+ this._stockService.getArticleDetails(this.articleDetailsInformation).then((details) => {
119
+ this.articleDetails = details;
120
+ });
121
+ }
122
+ getStockManagementWarehouses(data) {
123
+ this._stockService.getStockManagementWarehouses().then((warehouses) => {
124
+ this.dataWareHouseCode = warehouses;
125
+ this.selectedWarehouse = data.warehouseNo;
126
+ });
127
+ }
128
+ onSelectWarehouse(event) {
129
+ this.articleDetailsInformation.warehouseNumber = event;
130
+ if (this.selectedWarehouse || this.selectedWarehouse === 0) {
131
+ this._stockService.getArticleDetails(this.articleDetailsInformation).then((details) => {
132
+ this.articleDetails = details;
133
+ });
134
+ }
135
+ }
136
+ getInOrderData() {
137
+ return __awaiter(this, void 0, void 0, function* () {
138
+ const inOrderData = new ArticleTransaction();
139
+ inOrderData.type = "V";
140
+ inOrderData.goodId = this.articleStockInformation[0].goodId.toString();
141
+ this.inOrderInformation = yield this._stockService.getArticleTransaction(inOrderData);
142
+ });
143
+ }
144
+ getOrderData() {
145
+ return __awaiter(this, void 0, void 0, function* () {
146
+ const orderData = new ArticleTransaction();
147
+ orderData.type = "I";
148
+ orderData.goodId = this.articleStockInformation[0].goodId.toString();
149
+ this.orderInformation = yield this._stockService.getArticleTransaction(orderData);
150
+ });
151
+ }
152
+ onLocationDropdownClick() {
153
+ this._stockService.getStockManagementLocations(this.selectedWarehouse).then((locations) => {
154
+ this.stockLocations = locations;
155
+ });
156
+ }
157
+ onLocationSelected(location) {
158
+ this.selectedArticleDetailsData.locationNo = location;
159
+ }
160
+ onOkClickSendLocations() {
161
+ return __awaiter(this, void 0, void 0, function* () {
162
+ this.selectedArticleDetailsData.selected = true;
163
+ this.selectedArticleDetailsData.goodId = this.article.goodId;
164
+ this.selectedArticleDetailsData.entryDate = new Date();
165
+ this.selectedArticleDetailsData.warehouseNo = this.selectedWarehouse;
166
+ yield this._stockService.updateArticleDetails(this.selectedArticleDetailsData);
167
+ yield this._stockService.getArticleDetails(this.articleDetailsInformation).then((details) => {
168
+ this.articleDetails = details;
169
+ });
170
+ });
171
+ }
172
+ onCancelClickSendLocations() {
173
+ }
174
+ amountInStockChanged(data) {
175
+ this.selectedArticleDetailsData.amountInStock = data;
176
+ }
177
+ lockSelectedRow(row) {
178
+ this._stockService.lockArticleDetails(row);
179
+ }
180
+ }
181
+ StockInformationGridComponent.decorators = [
182
+ { type: Component, args: [{
183
+ selector: "co-stock-information-grid",
184
+ template: `
185
+ <div class="tab-link show" *ngIf="hideOrShowTabs">
186
+ <span class="tab-link-buttons"
187
+ *ngFor="let tab of tabs"
188
+ (click)="handleTabClick(tab)"
189
+ [textContent]="tab"
190
+ [class.active]="tab === activeTab"
191
+ ></span>
192
+ </div>
193
+
194
+ <div class="stock-line">
195
+ <div [textContent]="activeTabText"></div>
196
+
197
+ </div>
198
+
199
+ <div class="stock-grid">
200
+ <co-simple-grid *ngIf="activeTab === tabs[0] && hideOrShowTabs"
201
+ [data]="articleStockInformation"
202
+ class="simple-grid"
203
+ [rowsPerPage]="20"
204
+ >
205
+ <co-simple-grid-column [headerText]="'WAREHOUSE' | localize" [field]="'warehouseNo'" [order]="10"></co-simple-grid-column>
206
+ <co-simple-grid-column [headerText]="'DESCRIPTION' | localize" [field]="'warehouseName'" [order]="11"></co-simple-grid-column>
207
+ <co-simple-grid-column [headerText]="'STOCK' | localize" [field]="'technicalStock'" [order]="12"></co-simple-grid-column>
208
+ <co-simple-grid-column [headerText]="'AVAILABLE_STOCK' | localize" [field]="'availableStock'" [order]="13"></co-simple-grid-column>
209
+ <co-simple-grid-column [headerText]="'ECONOMICAL_STOCK' | localize" [field]="'economicalStock'" [order]="14"></co-simple-grid-column>
210
+ <co-simple-grid-column [headerText]="'LOCATION' | localize" [field]="'locationNo'" [order]="15">
211
+ <ng-template #template let-row="row">
212
+ <span class="location-link" [textContent]="'LOOK_AT' | localize" (click)="onLocationClick(row)"></span>
213
+ </ng-template>
214
+ </co-simple-grid-column>
215
+ </co-simple-grid>
216
+
217
+ <co-simple-grid *ngIf="activeTab === tabs[1]"
218
+ [data]="inOrderInformation"
219
+ class="simple-grid"
220
+ [rowsPerPage]="20"
221
+ >
222
+ <co-simple-grid-column [headerText]="'IN_ORDER' | localize" [field]="'transactionNr'"></co-simple-grid-column>
223
+ <co-simple-grid-column [headerText]="'CUSTOMER' | localize" [field]="'customerName'"></co-simple-grid-column>
224
+ <co-simple-grid-column [headerText]="'DATE' | localize">
225
+ <ng-template #template let-row="row">
226
+ <span [textContent]="row.transactionDate | date:'dd-MM-yyyy'"></span>
227
+ </ng-template>
228
+ </co-simple-grid-column>
229
+ <co-simple-grid-column [headerText]="'AMOUNT' | localize" [field]="'amountInOrder'"></co-simple-grid-column>
230
+ <co-simple-grid-column [headerText]="'WAREHOUSE' | localize" [field]="'warehouseNumber'"></co-simple-grid-column>
231
+ <co-simple-grid-column [headerText]="'DESCRIPTION' | localize" [field]="'warehouseDescription'"></co-simple-grid-column>
232
+ <co-simple-grid-column [headerText]="'TRANSFER' | localize" [field]="'transfer'">
233
+ <ng-template #template let-row="row">
234
+ <co-icon class="menu-icon" [iconData]="iconCacheService.getIcon(icons.DeliveryTruck)" (click)="handleStockTransferClick($event)"></co-icon>
235
+ </ng-template>
236
+ </co-simple-grid-column>
237
+ <co-simple-grid-column [headerText]="'STICKER' | localize" [field]="'sticker'">
238
+ <ng-template #template let-row="row">
239
+ <co-icon class="menu-icon" [iconData]="iconCacheService.getIcon(icons.Print)" (click)="openSendMethodDialog(row)"></co-icon>
240
+ </ng-template>
241
+ </co-simple-grid-column>
242
+ </co-simple-grid>
243
+
244
+ <co-simple-grid *ngIf="activeTab === tabs[2]"
245
+ [data]="orderInformation"
246
+ class="simple-grid"
247
+ [rowsPerPage]="20"
248
+ >
249
+ <co-simple-grid-column [headerText]="'PURCHASE_ORDER_NR' | localize" [field]="'transactionNr'"></co-simple-grid-column>
250
+ <co-simple-grid-column [headerText]="'DATE' | localize">
251
+ <ng-template #template let-row="row">
252
+ <span [textContent]="row.transactionDate | date:'dd-MM-yyyy'"></span>
253
+ </ng-template>
254
+ </co-simple-grid-column>
255
+ <co-simple-grid-column [headerText]="'AMOUNT' | localize" [field]="'amountInOrder'"></co-simple-grid-column>
256
+ <co-simple-grid-column [headerText]="'RESERVED' | localize" [field]="'reserved'"></co-simple-grid-column>
257
+ <co-simple-grid-column [headerText]="'FREE_STOCK' | localize" [field]="'InOrderForStock'"></co-simple-grid-column>
258
+ <co-simple-grid-column [headerText]="'DELIVERY_DATE' | localize">
259
+ <ng-template #template let-row="row">
260
+ <span [textContent]="row.deliveryDate | date:'dd-MM-yyyy'"></span>
261
+ </ng-template>
262
+ </co-simple-grid-column>
263
+ </co-simple-grid>
264
+ </div>
265
+
266
+ <div class="stock-grid" *ngIf="hideOrShowLocationTab">
267
+ <div class="stock-location-group">
268
+ <div class="stock-location-left-group">
269
+ <span class="stock-button-back" [textContent]="'BACK_TO_STOCK_LINES' | localize" (click)="handleBackToStockClick()"></span>
270
+ </div>
271
+ <div class="stock-location-right-group">
272
+ <!--
273
+ <co-drop-down-list [(model)]="selectedWarehouse"
274
+ [collection]="dataWareHouseCode"
275
+ [fields]="dataWareHouseFields"
276
+ [placeholder]="'WAREHOUSE' | localize"
277
+ (modelChange)="onSelectWarehouse($event)"
278
+ [required]="true"
279
+ ></co-drop-down-list>
280
+ -->
281
+ </div>
282
+ </div>
283
+
284
+ <!-- TODO move to own component stock-location-->
285
+ <co-simple-grid [data]="articleDetails"
286
+ class="simple-grid"
287
+ [rowsPerPage]="20"
288
+ [showAdd]="true"
289
+ [showToolbar]="true"
290
+ [showDelete]="true"
291
+ [inlineEdit]="true"
292
+ (dblClickRow)="lockSelectedRow($event)"
293
+ >
294
+ <div class="stock-location-group">
295
+ <div class="stock-location-left-group">
296
+ <co-button class="stock-lines-button" [textContent]="'BACK_TO_STOCK_LINES' | localize" (click)="handleBackToStockClick()"></co-button>
297
+ </div>
298
+ </div>
299
+ <co-simple-grid-column [headerText]="'LOCATION' | localize" [field]="'locationNo'">
300
+ <ng-template #editTemplate let-row="row">
301
+ <!--
302
+ <co-drop-down-list [(model)]="row.locationNo"
303
+ [collection]="stockLocations"
304
+ [fields]="dataLocationFields"
305
+ [placeholder]="'LOCATION' | localize"
306
+ (click)="onLocationDropdownClick()"
307
+ [required]="true"
308
+ ></co-drop-down-list>
309
+ -->
310
+ </ng-template>
311
+ </co-simple-grid-column>
312
+ <co-simple-grid-column *ngIf="articleDetails" [headerText]="'BATCH' | localize" [field]="'batchNo'">
313
+ <ng-template #editTemplate let-row="row">
314
+ <co-input-text [(model)]="row.batchNo"
315
+ [placeholder]="'BATCH' | localize"
316
+ ></co-input-text>
317
+ </ng-template>
318
+ </co-simple-grid-column>
319
+ <co-simple-grid-column *ngIf="articleDetails" [headerText]="'SERIAL_NO' | localize" [field]="'serialNo'">
320
+ <ng-template #editTemplate let-row="row">
321
+ <co-input-text [(model)]="row.serialNo"
322
+ [placeholder]="'SERIAL_NO' | localize"
323
+ ></co-input-text>
324
+ </ng-template>
325
+ </co-simple-grid-column>
326
+ <co-simple-grid-column [headerText]="'STOCK' | localize" [field]="'amountInStock'">
327
+ <ng-template #editTemplate let-row="row">
328
+ <co-input-text [(model)]="row.amountInStock"
329
+ [label]="'STOCK' | localize"
330
+ (modelChange)="amountInStockChanged($event)"
331
+ ></co-input-text>
332
+ </ng-template>
333
+ </co-simple-grid-column>
334
+ <co-simple-grid-column [headerText]="'ALLOCATED' | localize" [field]="'stockAssigned'">
335
+ <ng-template #editTemplate let-row="row">
336
+ <span [textContent]="row.stockAssigned"></span>
337
+ </ng-template>
338
+ </co-simple-grid-column>
339
+ <co-simple-grid-column [headerText]="'AVAILABLE_STOCK' | localize" [field]="'amountInStockFree'">
340
+ <ng-template #editTemplate let-row="row">
341
+ <span [textContent]="row.amountInStockFree"></span>
342
+ </ng-template>
343
+ </co-simple-grid-column>
344
+ <co-simple-grid-column [headerText]="'VALUTA' | localize" [field]="'currency'">
345
+ <ng-template #editTemplate let-row="row">
346
+ <span [textContent]="row.currency"></span>
347
+ </ng-template>
348
+ </co-simple-grid-column>
349
+ <co-simple-grid-column [headerText]="'PURCHASE_PRICE' | localize" [field]="'purchasePrice'">
350
+ <ng-template #editTemplate let-row="row">
351
+ <span [textContent]="row.purchasePrice"></span>
352
+ </ng-template>
353
+ </co-simple-grid-column>
354
+ <co-simple-grid-column [headerText]="'SUPPLIER_NUMBER' | localize" [field]="'supplierNo'">
355
+ <ng-template #editTemplate let-row="row">
356
+ <span [textContent]="row.supplierNo"></span>
357
+ </ng-template>
358
+ </co-simple-grid-column>
359
+ <co-simple-grid-column [headerText]="'TRANSFER' | localize" [field]="'transfer'">
360
+ <ng-template #template let-row="row">
361
+ <co-icon class="menu-icon" [iconData]="iconCacheService.getIcon(icons.DeliveryTruck)" (click)="handleStockTransferClick(row)"></co-icon>
362
+ </ng-template>
363
+ </co-simple-grid-column>
364
+ <co-simple-grid-column [headerText]="'STICKER' | localize" [field]="'sticker'">
365
+ <ng-template #template let-row="row">
366
+ <co-icon class="menu-icon" [iconData]="iconCacheService.getIcon(icons.Print)" (click)="openSendMethodDialog(row)"></co-icon>
367
+ </ng-template>
368
+ </co-simple-grid-column>
369
+ </co-simple-grid>
370
+ </div>
371
+
372
+ <co-stock-change-amount *ngIf="showChangeStockDetails"
373
+ (closeStockChangeAmount)="showChangeStockDetails = false"
374
+ [selectedArticleDetailsData]="selectedArticleDetailsData"
375
+ >
376
+ </co-stock-change-amount>
377
+
378
+ <div class="stock-grid" *ngIf="showStockHistory">
379
+ <div class="stock-button-left-group">
380
+ <span class="stock-button-back" [textContent]="'BACK_TO_STOCK_LINES' | localize" (click)="backToStockInformation()"></span>
381
+ </div>
382
+ <co-simple-grid [data]="stockHistoryInformation"
383
+ class="simple-grid"
384
+ [rowsPerPage]="20"
385
+ >
386
+ <co-simple-grid-column [headerText]="'MUTATION_DATE' | localize">
387
+ <ng-template #template let-row="row">
388
+ <span [textContent]="row.mutationDate | date:'dd-MM-yyyy'"></span>
389
+ </ng-template>
390
+ </co-simple-grid-column>
391
+ <co-simple-grid-column [headerText]="'MUTATION_TIME' | localize" [field]="'mutationTime'"></co-simple-grid-column>
392
+ <co-simple-grid-column [headerText]="'AMOUNT' | localize" [field]="'amount'"></co-simple-grid-column>
393
+ <co-simple-grid-column [headerText]="'WAREHOUSE' | localize" [field]="'wareHouseNr'"></co-simple-grid-column>
394
+ <co-simple-grid-column [headerText]="'LOCATION' | localize" [field]="'locationNr'"></co-simple-grid-column>
395
+ <co-simple-grid-column [headerText]="'TRANSACTION_TYPE' | localize" [field]="'transType'"></co-simple-grid-column>
396
+ <co-simple-grid-column [headerText]="'DOCUMENT_NUMBER' | localize" [field]="'docNr'"></co-simple-grid-column>
397
+ <co-simple-grid-column [headerText]="'LINE' | localize" [field]="'posLineNr'"></co-simple-grid-column>
398
+ <co-simple-grid-column [headerText]="'STOCK_STATE' | localize" [field]="'stockStateId'"></co-simple-grid-column>
399
+ <co-simple-grid-column [headerText]="'STOCK_REMARK' | localize" [field]="'stockStateRemarkId'"></co-simple-grid-column>
400
+ <co-simple-grid-column [headerText]="'VALUTA' | localize" [field]="'currencyCode'"></co-simple-grid-column>
401
+ <co-simple-grid-column [headerText]="'RELATION_ID' | localize" [field]="'relationId'"></co-simple-grid-column>
402
+ <co-simple-grid-column [headerText]="'USER' | localize" [field]="'user'"></co-simple-grid-column>
403
+ <co-simple-grid-column [headerText]="'MUTATION_TYPE' | localize" [field]="'mutationType'"></co-simple-grid-column>
404
+ <co-simple-grid-column [headerText]="'STICKER' | localize" [field]="'sticker'">
405
+ <ng-template #template let-row="row">
406
+ <co-icon class="menu-icon" [iconData]="iconCacheService.getIcon(icons.Print)" (click)="openSendMethodDialog(row)"></co-icon>
407
+ </ng-template>
408
+ </co-simple-grid-column>
409
+ </co-simple-grid>
410
+ </div>
411
+
412
+ <div class="stock-button-toolbar">
413
+ <div class="stock-button-left-group">
414
+ <co-button *ngIf="activeTab === tabs[0]" [label]="'HISTORY' | localize" (click)="handleHistoryClick()"></co-button>
415
+ </div>
416
+ <div class="stock-button-middle-group" *ngIf="activeTab !== tabs[0]">
417
+ <div class="button-left">
418
+ <co-button [textContent]="'OK' | localize" (click)="onOkClick()"></co-button>
419
+ </div>
420
+ <div class="button-right">
421
+ <co-button [textContent]="'CANCEL' | localize" (click)="onCancelClick()"></co-button>
422
+ </div>
423
+ </div>
424
+
425
+ <div class="stock-button-middle-group" *ngIf="hideOrShowLocationTab">
426
+ <div class="button-left">
427
+ <co-button [textContent]="'OK' | localize" (click)="onOkClickSendLocations()"></co-button>
428
+ </div>
429
+ <div class="button-right">
430
+ <co-button [textContent]="'CANCEL' | localize" (click)="onCancelClickSendLocations()"></co-button>
431
+ </div>
432
+ </div>
433
+ </div>
434
+ <co-send-method-dialog *ngIf="showSendMethodDialog"
435
+ (closeClick)="showSendMethodDialog = false"
436
+ [visibleMethods]="sendMethod[1]"
437
+ ></co-send-method-dialog>
438
+ `,
439
+ encapsulation: ViewEncapsulation.None
440
+ },] }
441
+ ];
442
+ StockInformationGridComponent.ctorParameters = () => [
443
+ { type: IconCacheService },
444
+ { type: StockService }
445
+ ];
446
+ StockInformationGridComponent.propDecorators = {
447
+ stock: [{ type: ViewChild, args: [StockInformationGridComponent,] }],
448
+ articleStockInformation: [{ type: Input }],
449
+ stockLocationData: [{ type: Input }],
450
+ stockHistoryInformation: [{ type: Input }],
451
+ article: [{ type: Input }],
452
+ transferIconClicked: [{ type: Output }],
453
+ historyClicked: [{ type: Output }],
454
+ cancelButtonClicked: [{ type: Output }],
455
+ okButtonClicked: [{ type: Output }]
456
+ };
457
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staW5mb3JtYXRpb24tZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zdG9jay9zdG9jay1pbmZvcm1hdGlvbi1ncmlkL3N0b2NrLWluZm9ybWF0aW9uLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTdDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUU1RSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUNqRyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUdyRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUV4RixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQXlRM0YsTUFBTSxPQUFPLDZCQUE2QjtJQXdFeEMsWUFDUyxnQkFBa0MsRUFDakMsYUFBMkI7UUFENUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQXpFckIsVUFBSyxHQUFnQixJQUFJLENBQUM7UUFrQjFCLHdCQUFtQixHQUFpQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3ZFLG1CQUFjLEdBQXNCLElBQUksWUFBWSxF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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThQVDtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O1lBbFJPLGdCQUFnQjtZQURoQixZQUFZOzs7b0JBd1JqQixTQUFTLFNBQUMsNkJBQTZCO3NDQUd2QyxLQUFLO2dDQUdMLEtBQUs7c0NBR0wsS0FBSztzQkFHTCxLQUFLO2tDQUdMLE1BQU07NkJBR04sTUFBTTtrQ0FHTixNQUFNOzhCQUdOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1N0b2NrU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2Uvc3RvY2suc2VydmljZVwiO1xyXG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL2ljb24tY2FjaGUuc2VydmljZVwiO1xyXG5pbXBvcnQge0ljb259IGZyb20gXCIuLi8uLi8uLi9lbnVtL2ljb24uZW51bVwiO1xyXG5pbXBvcnQge0FydGljbGVTdG9jayBhcyBBcnRpY2xlU3RvY2tCb30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtc3RvY2suYm9cIjtcclxuaW1wb3J0IHtBcnRpY2xlU3RvY2t9IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLXN0b2NrXCI7XHJcbmltcG9ydCB7U3RvY2tIaXN0b3J5Qm99IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9zdG9jay1oaXN0b3J5LmJvXCI7XHJcbmltcG9ydCB7QXJ0aWNsZVN0b2NrTWFuYWdlbWVudH0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtc3RvY2stbWFuYWdlbWVudFwiO1xyXG5pbXBvcnQge0FydGljbGVEZXRhaWxzQm99IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWRldGFpbHMuYm9cIjtcclxuaW1wb3J0IHtTdG9ja01hbmFnZW1lbnRXYXJlaG91c2VzfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvc3RvY2stbWFuYWdlbWVudC13YXJlaG91c2VzLmJvXCI7XHJcbmltcG9ydCB7Q29Ecm9wRG93bkxpc3RGaWVsZHN9IGZyb20gXCIuLi9zdG9jay10cmFuc2Zlci9jby1kcm9wLWRvd24tbGlzdC1maWVsZHMuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7QXJ0aWNsZVRyYW5zYWN0aW9ufSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS10cmFuc2FjdGlvblwiO1xyXG5pbXBvcnQge0FydGljbGVUcmFuc2FjdGlvbiBhcyBBcnRpY2xlVHJhbnNhY3Rpb25Cb30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtdHJhbnNhY3Rpb24uYm9cIjtcclxuaW1wb3J0IHtQcmludFByaWNlU3RpY2tlcnN9IGZyb20gXCJAY29saWpuaXQvc2hhcmVkYXBpL2J1aWxkL21vZGVsL3ByaW50LXByaWNlLXN0aWNrZXJzLmJvXCI7XHJcbmltcG9ydCB7U3RvY2tMb2NhdGlvbn0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL3N0b2NrLWxvY2F0aW9uLmJvXCI7XHJcbmltcG9ydCB7QXJ0aWNsZUV4dGVuZGVkfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC5ib1wiO1xyXG5pbXBvcnQge1NlbmRNZXRob2RUeXBlfSBmcm9tIFwiQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS9zZW5kLW1ldGhvZC10eXBlLmVudW1cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImNvLXN0b2NrLWluZm9ybWF0aW9uLWdyaWRcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cInRhYi1saW5rIHNob3dcIiAqbmdJZj1cImhpZGVPclNob3dUYWJzXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGFiLWxpbmstYnV0dG9uc1wiXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVUYWJDbGljayh0YWIpXCJcclxuICAgICAgICAgICAgW3RleHRDb250ZW50XT1cInRhYlwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwidGFiID09PSBhY3RpdmVUYWJcIlxyXG4gICAgICA+PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInN0b2NrLWxpbmVcIj5cclxuICAgICAgPGRpdiBbdGV4dENvbnRlbnRdPVwiYWN0aXZlVGFiVGV4dFwiPjwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzdG9jay1ncmlkXCI+XHJcbiAgICAgIDxjby1zaW1wbGUtZ3JpZCAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gdGFic1swXSAmJiBoaWRlT3JTaG93VGFic1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJhcnRpY2xlU3RvY2tJbmZvcm1hdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtyb3dzUGVyUGFnZV09XCIyMFwiXHJcbiAgICAgID5cclxuICAgICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ1dBUkVIT1VTRScgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInd2FyZWhvdXNlTm8nXCIgW29yZGVyXT1cIjEwXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidERVNDUklQVElPTicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInd2FyZWhvdXNlTmFtZSdcIiBbb3JkZXJdPVwiMTFcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ1NUT0NLJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIid0ZWNobmljYWxTdG9jaydcIiBbb3JkZXJdPVwiMTJcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0FWQUlMQUJMRV9TVE9DSycgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInYXZhaWxhYmxlU3RvY2snXCIgW29yZGVyXT1cIjEzXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidFQ09OT01JQ0FMX1NUT0NLJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidlY29ub21pY2FsU3RvY2snXCIgW29yZGVyXT1cIjE0XCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidMT0NBVElPTicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInbG9jYXRpb25ObydcIiBbb3JkZXJdPVwiMTVcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2NhdGlvbi1saW5rXCIgW3RleHRDb250ZW50XT1cIidMT09LX0FUJyB8IGxvY2FsaXplXCIgKGNsaWNrKT1cIm9uTG9jYXRpb25DbGljayhyb3cpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgIDwvY28tc2ltcGxlLWdyaWQ+XHJcblxyXG4gICAgICA8Y28tc2ltcGxlLWdyaWQgKm5nSWY9XCJhY3RpdmVUYWIgPT09IHRhYnNbMV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiaW5PcmRlckluZm9ybWF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3Jvd3NQZXJQYWdlXT1cIjIwXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0lOX09SREVSJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIid0cmFuc2FjdGlvbk5yJ1wiPjwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0NVU1RPTUVSJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidjdXN0b21lck5hbWUnXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInREFURScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJyb3cudHJhbnNhY3Rpb25EYXRlIHwgZGF0ZTonZGQtTU0teXl5eSdcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0FNT1VOVCcgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInYW1vdW50SW5PcmRlcidcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidXQVJFSE9VU0UnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3dhcmVob3VzZU51bWJlcidcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidERVNDUklQVElPTicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInd2FyZWhvdXNlRGVzY3JpcHRpb24nXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInVFJBTlNGRVInIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3RyYW5zZmVyJ1wiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgICAgICAgIDxjby1pY29uIGNsYXNzPVwibWVudS1pY29uXCIgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29ucy5EZWxpdmVyeVRydWNrKVwiIChjbGljayk9XCJoYW5kbGVTdG9ja1RyYW5zZmVyQ2xpY2soJGV2ZW50KVwiPjwvY28taWNvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInU1RJQ0tFUicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInc3RpY2tlcidcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cIm1lbnUtaWNvblwiIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuUHJpbnQpXCIgKGNsaWNrKT1cIm9wZW5TZW5kTWV0aG9kRGlhbG9nKHJvdylcIj48L2NvLWljb24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxyXG4gICAgICA8L2NvLXNpbXBsZS1ncmlkPlxyXG5cclxuICAgICAgPGNvLXNpbXBsZS1ncmlkICpuZ0lmPVwiYWN0aXZlVGFiID09PSB0YWJzWzJdXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cIm9yZGVySW5mb3JtYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcm93c1BlclBhZ2VdPVwiMjBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInUFVSQ0hBU0VfT1JERVJfTlInIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3RyYW5zYWN0aW9uTnInXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInREFURScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJyb3cudHJhbnNhY3Rpb25EYXRlIHwgZGF0ZTonZGQtTU0teXl5eSdcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0FNT1VOVCcgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInYW1vdW50SW5PcmRlcidcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidSRVNFUlZFRCcgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCIncmVzZXJ2ZWQnXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInRlJFRV9TVE9DSycgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInSW5PcmRlckZvclN0b2NrJ1wiPjwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0RFTElWRVJZX0RBVEUnIHwgbG9jYWxpemVcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwicm93LmRlbGl2ZXJ5RGF0ZSB8IGRhdGU6J2RkLU1NLXl5eXknXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgPC9jby1zaW1wbGUtZ3JpZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzdG9jay1ncmlkXCIgKm5nSWY9XCJoaWRlT3JTaG93TG9jYXRpb25UYWJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0b2NrLWxvY2F0aW9uLWdyb3VwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0b2NrLWxvY2F0aW9uLWxlZnQtZ3JvdXBcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RvY2stYnV0dG9uLWJhY2tcIiBbdGV4dENvbnRlbnRdPVwiJ0JBQ0tfVE9fU1RPQ0tfTElORVMnIHwgbG9jYWxpemVcIiAoY2xpY2spPVwiaGFuZGxlQmFja1RvU3RvY2tDbGljaygpXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdG9jay1sb2NhdGlvbi1yaWdodC1ncm91cFwiPlxyXG48IS0tXHJcbiAgICAgICAgICA8Y28tZHJvcC1kb3duLWxpc3QgIFsobW9kZWwpXT1cInNlbGVjdGVkV2FyZWhvdXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbGxlY3Rpb25dPVwiZGF0YVdhcmVIb3VzZUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRzXT1cImRhdGFXYXJlSG91c2VGaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1dBUkVIT1VTRScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJvblNlbGVjdFdhcmVob3VzZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgPjwvY28tZHJvcC1kb3duLWxpc3Q+XHJcbi0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbjwhLS0gICAgICBUT0RPIG1vdmUgdG8gb3duIGNvbXBvbmVudCBzdG9jay1sb2NhdGlvbi0tPlxyXG4gICAgICA8Y28tc2ltcGxlLWdyaWQgW2RhdGFdPVwiYXJ0aWNsZURldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcm93c1BlclBhZ2VdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dBZGRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2xiYXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0RlbGV0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVFZGl0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGRibENsaWNrUm93KT1cImxvY2tTZWxlY3RlZFJvdygkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdG9jay1sb2NhdGlvbi1ncm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0b2NrLWxvY2F0aW9uLWxlZnQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cInN0b2NrLWxpbmVzLWJ1dHRvblwiIFt0ZXh0Q29udGVudF09XCInQkFDS19UT19TVE9DS19MSU5FUycgfCBsb2NhbGl6ZVwiIChjbGljayk9XCJoYW5kbGVCYWNrVG9TdG9ja0NsaWNrKClcIj48L2NvLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0xPQ0FUSU9OJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidsb2NhdGlvbk5vJ1wiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG48IS0tXHJcbiAgICAgICAgICAgIDxjby1kcm9wLWRvd24tbGlzdCBbKG1vZGVsKV09XCJyb3cubG9jYXRpb25Ob1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sbGVjdGlvbl09XCJzdG9ja0xvY2F0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRzXT1cImRhdGFMb2NhdGlvbkZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0xPQ0FUSU9OJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkxvY2F0aW9uRHJvcGRvd25DbGljaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgPjwvY28tZHJvcC1kb3duLWxpc3Q+XHJcbi0tPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uICpuZ0lmPVwiYXJ0aWNsZURldGFpbHNcIiBbaGVhZGVyVGV4dF09XCInQkFUQ0gnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ2JhdGNoTm8nXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRUZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0IFsobW9kZWwpXT1cInJvdy5iYXRjaE5vXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidCQVRDSCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgID48L2NvLWlucHV0LXRleHQ+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gKm5nSWY9XCJhcnRpY2xlRGV0YWlsc1wiIFtoZWFkZXJUZXh0XT1cIidTRVJJQUxfTk8nIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3NlcmlhbE5vJ1wiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8Y28taW5wdXQtdGV4dCBbKG1vZGVsKV09XCJyb3cuc2VyaWFsTm9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NFUklBTF9OTycgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgID48L2NvLWlucHV0LXRleHQ+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ1NUT0NLJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidhbW91bnRJblN0b2NrJ1wiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8Y28taW5wdXQtdGV4dCAgWyhtb2RlbCldPVwicm93LmFtb3VudEluU3RvY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidTVE9DSycgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiYW1vdW50SW5TdG9ja0NoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2NvLWlucHV0LXRleHQ+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ0FMTE9DQVRFRCcgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInc3RvY2tBc3NpZ25lZCdcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cclxuICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cInJvdy5zdG9ja0Fzc2lnbmVkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidBVkFJTEFCTEVfU1RPQ0snIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ2Ftb3VudEluU3RvY2tGcmVlJ1wiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwicm93LmFtb3VudEluU3RvY2tGcmVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidWQUxVVEEnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwicm93LmN1cnJlbmN5XCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidQVVJDSEFTRV9QUklDRScgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCIncHVyY2hhc2VQcmljZSdcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdFRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cclxuICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cInJvdy5wdXJjaGFzZVByaWNlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidTVVBQTElFUl9OVU1CRVInIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3N1cHBsaWVyTm8nXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRUZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJyb3cuc3VwcGxpZXJOb1wiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInVFJBTlNGRVInIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3RyYW5zZmVyJ1wiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgICAgICAgIDxjby1pY29uIGNsYXNzPVwibWVudS1pY29uXCIgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29ucy5EZWxpdmVyeVRydWNrKVwiIChjbGljayk9XCJoYW5kbGVTdG9ja1RyYW5zZmVyQ2xpY2socm93KVwiPjwvY28taWNvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInU1RJQ0tFUicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInc3RpY2tlcidcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cIm1lbnUtaWNvblwiIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuUHJpbnQpXCIgKGNsaWNrKT1cIm9wZW5TZW5kTWV0aG9kRGlhbG9nKHJvdylcIj48L2NvLWljb24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxyXG4gICAgICA8L2NvLXNpbXBsZS1ncmlkPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGNvLXN0b2NrLWNoYW5nZS1hbW91bnQgKm5nSWY9XCJzaG93Q2hhbmdlU3RvY2tEZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZVN0b2NrQ2hhbmdlQW1vdW50KT1cInNob3dDaGFuZ2VTdG9ja0RldGFpbHMgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGFdPVwic2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGFcIlxyXG4gICAgPlxyXG4gICAgPC9jby1zdG9jay1jaGFuZ2UtYW1vdW50PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzdG9jay1ncmlkXCIgKm5nSWY9XCJzaG93U3RvY2tIaXN0b3J5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdG9jay1idXR0b24tbGVmdC1ncm91cFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3RvY2stYnV0dG9uLWJhY2tcIiBbdGV4dENvbnRlbnRdPVwiJ0JBQ0tfVE9fU1RPQ0tfTElORVMnIHwgbG9jYWxpemVcIiAoY2xpY2spPVwiYmFja1RvU3RvY2tJbmZvcm1hdGlvbigpXCI+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGNvLXNpbXBsZS1ncmlkIFtkYXRhXT1cInN0b2NrSGlzdG9yeUluZm9ybWF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3Jvd3NQZXJQYWdlXT1cIjIwXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ01VVEFUSU9OX0RBVEUnIHwgbG9jYWxpemVcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwicm93Lm11dGF0aW9uRGF0ZSB8IGRhdGU6J2RkLU1NLXl5eXknXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidNVVRBVElPTl9USU1FJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidtdXRhdGlvblRpbWUnXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInQU1PVU5UJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidhbW91bnQnXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInV0FSRUhPVVNFJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIid3YXJlSG91c2VOcidcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidMT0NBVElPTicgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCInbG9jYXRpb25OcidcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidUUkFOU0FDVElPTl9UWVBFJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIid0cmFuc1R5cGUnXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInRE9DVU1FTlRfTlVNQkVSJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidkb2NOcidcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidMSU5FJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidwb3NMaW5lTnInXCI+PC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNvbHVtbiBbaGVhZGVyVGV4dF09XCInU1RPQ0tfU1RBVEUnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3N0b2NrU3RhdGVJZCdcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidTVE9DS19SRU1BUksnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ3N0b2NrU3RhdGVSZW1hcmtJZCdcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidWQUxVVEEnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ2N1cnJlbmN5Q29kZSdcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidSRUxBVElPTl9JRCcgfCBsb2NhbGl6ZVwiIFtmaWVsZF09XCIncmVsYXRpb25JZCdcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidVU0VSJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIid1c2VyJ1wiPjwvY28tc2ltcGxlLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jb2x1bW4gW2hlYWRlclRleHRdPVwiJ01VVEFUSU9OX1RZUEUnIHwgbG9jYWxpemVcIiBbZmllbGRdPVwiJ211dGF0aW9uVHlwZSdcIj48L2NvLXNpbXBsZS1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY29sdW1uIFtoZWFkZXJUZXh0XT1cIidTVElDS0VSJyB8IGxvY2FsaXplXCIgW2ZpZWxkXT1cIidzdGlja2VyJ1wiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgICAgICAgIDxjby1pY29uIGNsYXNzPVwibWVudS1pY29uXCIgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29ucy5QcmludClcIiAoY2xpY2spPVwib3BlblNlbmRNZXRob2REaWFsb2cocm93KVwiPjwvY28taWNvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jb2x1bW4+XHJcbiAgICAgIDwvY28tc2ltcGxlLWdyaWQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwic3RvY2stYnV0dG9uLXRvb2xiYXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0b2NrLWJ1dHRvbi1sZWZ0LWdyb3VwXCI+XHJcbiAgICAgICAgPGNvLWJ1dHRvbiAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gdGFic1swXVwiIFtsYWJlbF09XCInSElTVE9SWScgfCBsb2NhbGl6ZVwiIChjbGljayk9XCJoYW5kbGVIaXN0b3J5Q2xpY2soKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0b2NrLWJ1dHRvbi1taWRkbGUtZ3JvdXBcIiAqbmdJZj1cImFjdGl2ZVRhYiAhPT0gdGFic1swXVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tbGVmdFwiPlxyXG4gICAgICAgICAgPGNvLWJ1dHRvbiBbdGV4dENvbnRlbnRdPVwiJ09LJyB8IGxvY2FsaXplXCIgKGNsaWNrKT1cIm9uT2tDbGljaygpXCI+PC9jby1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1yaWdodFwiPlxyXG4gICAgICAgICAgPGNvLWJ1dHRvbiBbdGV4dENvbnRlbnRdPVwiJ0NBTkNFTCcgfCBsb2NhbGl6ZVwiIChjbGljayk9XCJvbkNhbmNlbENsaWNrKClcIj48L2NvLWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RvY2stYnV0dG9uLW1pZGRsZS1ncm91cFwiICpuZ0lmPVwiaGlkZU9yU2hvd0xvY2F0aW9uVGFiXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1sZWZ0XCI+XHJcbiAgICAgICAgICA8Y28tYnV0dG9uIFt0ZXh0Q29udGVudF09XCInT0snIHwgbG9jYWxpemVcIiAoY2xpY2spPVwib25Pa0NsaWNrU2VuZExvY2F0aW9ucygpXCI+PC9jby1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1yaWdodFwiPlxyXG4gICAgICAgICAgPGNvLWJ1dHRvbiBbdGV4dENvbnRlbnRdPVwiJ0NBTkNFTCcgfCBsb2NhbGl6ZVwiIChjbGljayk9XCJvbkNhbmNlbENsaWNrU2VuZExvY2F0aW9ucygpXCI+PC9jby1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8Y28tc2VuZC1tZXRob2QtZGlhbG9nICpuZ0lmPVwic2hvd1NlbmRNZXRob2REaWFsb2dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2VDbGljayk9XCJzaG93U2VuZE1ldGhvZERpYWxvZyA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Zpc2libGVNZXRob2RzXT1cInNlbmRNZXRob2RbMV1cIlxyXG4gICAgPjwvY28tc2VuZC1tZXRob2QtZGlhbG9nPlxyXG4gIGAsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFN0b2NrSW5mb3JtYXRpb25HcmlkQ29tcG9uZW50IHtcclxuICBwdWJsaWMgcmVhZG9ubHkgaWNvbnM6IHR5cGVvZiBJY29uID0gSWNvbjtcclxuXHJcbiAgQFZpZXdDaGlsZChTdG9ja0luZm9ybWF0aW9uR3JpZENvbXBvbmVudClcclxuICBwdWJsaWMgc3RvY2s6IFN0b2NrSW5mb3JtYXRpb25HcmlkQ29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhcnRpY2xlU3RvY2tJbmZvcm1hdGlvbjogQXJ0aWNsZVN0b2NrQm9bXTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc3RvY2tMb2NhdGlvbkRhdGE6IEFydGljbGVTdG9ja0JvW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHN0b2NrSGlzdG9yeUluZm9ybWF0aW9uOiBTdG9ja0hpc3RvcnlCb1tdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhcnRpY2xlOiBBcnRpY2xlRXh0ZW5kZWQ7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSB0cmFuc2Zlckljb25DbGlja2VkOiBFdmVudEVtaXR0ZXI8QXJ0aWNsZVN0b2NrQm8+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgaGlzdG9yeUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgY2FuY2VsQnV0dG9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBva0J1dHRvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwdWJsaWMgaW1hZ2U6IHN0cmluZztcclxuICBwdWJsaWMgc2hvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBoaWRlT3JTaG93TG9jYXRpb25UYWI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1N0b2NrSGlzdG9yeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93U2VuZE1ldGhvZERpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgaW5PcmRlckluZm9ybWF0aW9uOiBBcnRpY2xlVHJhbnNhY3Rpb25Cb1tdO1xyXG4gIHB1YmxpYyBvcmRlckluZm9ybWF0aW9uOiBBcnRpY2xlVHJhbnNhY3Rpb25Cb1tdXHJcbiAgcHVibGljIGhpZGVPclNob3dUYWJzOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgZGF0YVdhcmVIb3VzZUNvZGU6IFN0b2NrTWFuYWdlbWVudFdhcmVob3VzZXNbXTtcclxuICBwdWJsaWMgZGF0YVdhcmVIb3VzZUZpZWxkczogQ29Ecm9wRG93bkxpc3RGaWVsZHMgPSB7IHRleHQ6IFwid2FyZWhvdXNlRGVzY3JpcHRpb25cIiwgdmFsdWU6IFwid2FyZWhvdXNlTm9cIiB9O1xyXG4gIHB1YmxpYyBkYXRhTG9jYXRpb25GaWVsZHM6IENvRHJvcERvd25MaXN0RmllbGRzID0ge3RleHQ6IFwibG9jYXRpb25Ob1wiLCB2YWx1ZTogXCJsb2NhdGlvbk5vXCJ9O1xyXG4gIHB1YmxpYyBzZWxlY3RlZFdhcmVob3VzZTogYW55O1xyXG4gIHB1YmxpYyBzZWxlY3RlZExvY2F0aW9uOiBTdG9ja0xvY2F0aW9uO1xyXG4gIHB1YmxpYyBzdG9ja0xvY2F0aW9uczogU3RvY2tMb2NhdGlvbltdO1xyXG4gIHB1YmxpYyBhcnRpY2xlU3RvY2tTZWFyY2hJbmZvOiBBcnRpY2xlU3RvY2sgPSBuZXcgQXJ0aWNsZVN0b2NrKCk7XHJcbiAgcHVibGljIGFydGljbGVEZXRhaWxzOiBBcnRpY2xlRGV0YWlsc0JvW107XHJcbiAgcHVibGljIHNlbGVjdGVkQXJ0aWNsZURldGFpbHNEYXRhOiBBcnRpY2xlRGV0YWlsc0JvID0gbmV3IEFydGljbGVEZXRhaWxzQm8oKTtcclxuICBwdWJsaWMgc2hvd0NoYW5nZVN0b2NrRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhcnRpY2xlRGV0YWlsc0luZm9ybWF0aW9uOiBBcnRpY2xlU3RvY2tNYW5hZ2VtZW50ID0gbmV3IEFydGljbGVTdG9ja01hbmFnZW1lbnQoKTtcclxuICBwdWJsaWMgc2VuZE1ldGhvZDogU2VuZE1ldGhvZFR5cGVbXTtcclxuXHJcbiAgcHVibGljIHRhYnM6IHN0cmluZ1tdID0gW1xyXG4gICAgXCJTVE9DS1wiLFxyXG4gICAgXCJJTl9PUkRFUjJcIixcclxuICAgIFwiT1JERVJTMVwiXHJcbiAgXTtcclxuICBwdWJsaWMgYWN0aXZlVGFiOiBzdHJpbmcgPSB0aGlzLnRhYnNbMF07XHJcblxyXG4gIHB1YmxpYyBnZXQgYWN0aXZlVGFiVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLmFjdGl2ZVRhYikge1xyXG4gICAgICBjYXNlIHRoaXMudGFic1swXTpcclxuICAgICAgICByZXR1cm4gXCJWb29ycmFhZHJlZ2Vsc1wiO1xyXG4gICAgICBjYXNlIHRoaXMudGFic1sxXTpcclxuICAgICAgICByZXR1cm4gXCJHZXZvbmRlbiBpbiBvcmRlcihzKVwiO1xyXG4gICAgICBjYXNlIHRoaXMudGFic1syXTpcclxuICAgICAgICByZXR1cm4gXCJHZXZvbmRlbiBpbiBiZXN0ZWxsaW5nZW5cIjtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gXCJWb29ycmFhZGxvY2F0aWUgcmVnZWxzXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpY29uQ2FjaGVTZXJ2aWNlOiBJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc3RvY2tTZXJ2aWNlOiBTdG9ja1NlcnZpY2UsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlVGFiQ2xpY2sodGFiRGF0YSk6IHZvaWQge1xyXG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWJEYXRhO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlVGFiID09PSBcIklOX09SREVSMlwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0SW5PcmRlckRhdGEoKTtcclxuICAgIH0gaWYgKHRoaXMuYWN0aXZlVGFiID09PSBcIk9SREVSUzFcIikge1xyXG4gICAgICB0aGlzLmdldE9yZGVyRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTG9jYXRpb25DbGljayhkYXRhOiBBcnRpY2xlU3RvY2tCbyk6IHZvaWQge1xyXG4gICAgdGhpcy5hcnRpY2xlU3RvY2tTZWFyY2hJbmZvLmdvb2RJZCA9IGRhdGEuZ29vZElkLnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLmFydGljbGVTdG9ja1NlYXJjaEluZm8ud2FyZUhvdXNlTm8gPSBkYXRhLndhcmVob3VzZU5vLnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLmFydGljbGVTdG9ja1NlYXJjaEluZm8udmlld0tpbmQgPSBcIkRcIjtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UgPSBkYXRhLndhcmVob3VzZU5vO1xyXG4gICAgaWYgKCF0aGlzLmRhdGFXYXJlSG91c2VDb2RlKSB7XHJcbiAgICAgIHRoaXMuZ2V0U3RvY2tNYW5hZ2VtZW50V2FyZWhvdXNlcyhkYXRhKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0QXJ0aWNsZURldGFpbHMoZGF0YSk7XHJcbiAgICB0aGlzLmhpZGVPclNob3dUYWJzID0gZmFsc2U7XHJcbiAgICB0aGlzLmhpZGVPclNob3dMb2NhdGlvblRhYiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlSGlzdG9yeUNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5oaXN0b3J5Q2xpY2tlZC5lbWl0KClcclxuICAgIHRoaXMuaGlkZU9yU2hvd0xvY2F0aW9uVGFiID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDaGFuZ2VTdG9ja0RldGFpbHMgPSBmYWxzZTtcclxuICAgIHRoaXMuaGlkZU9yU2hvd1RhYnMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1N0b2NrSGlzdG9yeSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmFja1RvU3RvY2tJbmZvcm1hdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd1N0b2NrSGlzdG9yeSA9IGZhbHNlO1xyXG4gICAgdGhpcy5oaWRlT3JTaG93VGFicyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlU3RvY2tUcmFuc2ZlckNsaWNrKGV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYW5zZmVySWNvbkNsaWNrZWQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlQmFja1RvU3RvY2tDbGljaygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzWzBdO1xyXG4gICAgdGhpcy5oaWRlT3JTaG93VGFicyA9IHRydWU7XHJcbiAgICB0aGlzLmhpZGVPclNob3dMb2NhdGlvblRhYiA9IGZhbHNlO1xyXG4gICAgdGhpcy5hcnRpY2xlRGV0YWlscyA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuU2VuZE1ldGhvZERpYWxvZyhkYXRhKTogdm9pZCB7XHJcbiAgICBpZiAoISh0aGlzLl9zdG9ja1NlcnZpY2UucHJpbnRMYXlvdXRQYXJhbXMgaW5zdGFuY2VvZiBQcmludFByaWNlU3RpY2tlcnMpKSB7XHJcbiAgICAgIHRoaXMuX3N0b2NrU2VydmljZS5wcmludExheW91dFBhcmFtcy5nb29kSWQgPSBkYXRhLmdvb2RJZDtcclxuICAgICAgdGhpcy5fc3RvY2tTZXJ2aWNlLnByaW50TGF5b3V0UGFyYW1zLndhcmVob3VzZSA9IGRhdGEud2FyZWhvdXNlTm87XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dTZW5kTWV0aG9kRGlhbG9nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmludFN0b2NrU3RpY2tlcnMoKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLl9zdG9ja1NlcnZpY2UuZ2V0UHJpbnRTdG9ja1N0aWNrZXJzKHRoaXMuX3N0b2NrU2VydmljZS5wcmludExheW91dFBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Pa0NsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5va0J1dHRvbkNsaWNrZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2FuY2VsQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbkNsaWNrZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5EaWFsb2dDbGljayhkYXRhKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQXJ0aWNsZURldGFpbHNEYXRhID0gZGF0YTtcclxuICAgIHRoaXMuc2hvd0NoYW5nZVN0b2NrRGV0YWlscyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QXJ0aWNsZURldGFpbHMoZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICAvLyBjb25zdCBpbmZvID0gbmV3IEFydGljbGVTdG9ja01hbmFnZW1lbnQoKTtcclxuICAgIHRoaXMuYXJ0aWNsZURldGFpbHNJbmZvcm1hdGlvbi5nb29kSWQgPSBkYXRhLmdvb2RJZDtcclxuICAgIHRoaXMuYXJ0aWNsZURldGFpbHNJbmZvcm1hdGlvbi5saW5lSWQgPSBkYXRhLmxpbmVJZDtcclxuICAgIHRoaXMuYXJ0aWNsZURldGFpbHNJbmZvcm1hdGlvbi53YXJlaG91c2VOdW1iZXIgPSBkYXRhLndhcmVob3VzZU5vO1xyXG4gICAgdGhpcy5fc3RvY2tTZXJ2aWNlLmdldEFydGljbGVEZXRhaWxzKHRoaXMuYXJ0aWNsZURldGFpbHNJbmZvcm1hdGlvbikudGhlbigoZGV0YWlscykgPT4ge1xyXG4gICAgICB0aGlzLmFydGljbGVEZXRhaWxzID0gZGV0YWlscztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFN0b2NrTWFuYWdlbWVudFdhcmVob3VzZXMoZGF0YTogQXJ0aWNsZVN0b2NrQm8pOiB2b2lkIHtcclxuICAgIHRoaXMuX3N0b2NrU2VydmljZS5nZXRTdG9ja01hbmFnZW1lbnRXYXJlaG91c2VzKCkudGhlbigod2FyZWhvdXNlcykgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFXYXJlSG91c2VDb2RlID0gd2FyZWhvdXNlcztcclxuICAgICAgdGhpcy5zZWxlY3RlZFdhcmVob3VzZSA9IGRhdGEud2FyZWhvdXNlTm87XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU2VsZWN0V2FyZWhvdXNlKGV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmFydGljbGVEZXRhaWxzSW5mb3JtYXRpb24ud2FyZWhvdXNlTnVtYmVyID0gZXZlbnQ7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFdhcmVob3VzZSB8fCB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlID09PSAwKSB7XHJcbiAgICAgIHRoaXMuX3N0b2NrU2VydmljZS5nZXRBcnRpY2xlRGV0YWlscyh0aGlzLmFydGljbGVEZXRhaWxzSW5mb3JtYXRpb24pLnRoZW4oKGRldGFpbHMpID0+IHtcclxuICAgICAgICB0aGlzLmFydGljbGVEZXRhaWxzID0gZGV0YWlscztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW5PcmRlckRhdGEoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBpbk9yZGVyRGF0YTogQXJ0aWNsZVRyYW5zYWN0aW9uID0gbmV3IEFydGljbGVUcmFuc2FjdGlvbigpO1xyXG4gICAgaW5PcmRlckRhdGEudHlwZSA9IFwiVlwiO1xyXG4gICAgaW5PcmRlckRhdGEuZ29vZElkID0gdGhpcy5hcnRpY2xlU3RvY2tJbmZvcm1hdGlvblswXS5nb29kSWQudG9TdHJpbmcoKTtcclxuICAgIHRoaXMuaW5PcmRlckluZm9ybWF0aW9uID0gYXdhaXQgdGhpcy5fc3RvY2tTZXJ2aWNlLmdldEFydGljbGVUcmFuc2FjdGlvbihpbk9yZGVyRGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJEYXRhKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgb3JkZXJEYXRhOiBBcnRpY2xlVHJhbnNhY3Rpb24gPSBuZXcgQXJ0aWNsZVRyYW5zYWN0aW9uKCk7XHJcbiAgICBvcmRlckRhdGEudHlwZSA9IFwiSVwiO1xyXG4gICAgb3JkZXJEYXRhLmdvb2RJZCA9IHRoaXMuYXJ0aWNsZVN0b2NrSW5mb3JtYXRpb25bMF0uZ29vZElkLnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLm9yZGVySW5mb3JtYXRpb24gPSBhd2FpdCB0aGlzLl9zdG9ja1NlcnZpY2UuZ2V0QXJ0aWNsZVRyYW5zYWN0aW9uKG9yZGVyRGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Mb2NhdGlvbkRyb3Bkb3duQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdG9ja1NlcnZpY2UuZ2V0U3RvY2tNYW5hZ2VtZW50TG9jYXRpb25zKHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UpLnRoZW4oKGxvY2F0aW9ucykgPT4ge1xyXG4gICAgICB0aGlzLnN0b2NrTG9jYXRpb25zID0gbG9jYXRpb25zO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkxvY2F0aW9uU2VsZWN0ZWQobG9jYXRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGEubG9jYXRpb25ObyA9IGxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uT2tDbGlja1NlbmRMb2NhdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQXJ0aWNsZURldGFpbHNEYXRhLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGEuZ29vZElkID0gdGhpcy5hcnRpY2xlLmdvb2RJZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGEuZW50cnlEYXRlID0gbmV3IERhdGUoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGEud2FyZWhvdXNlTm8gPSB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlO1xyXG4gICAgYXdhaXQgdGhpcy5fc3RvY2tTZXJ2aWNlLnVwZGF0ZUFydGljbGVEZXRhaWxzKHRoaXMuc2VsZWN0ZWRBcnRpY2xlRGV0YWlsc0RhdGEpO1xyXG4gICAgYXdhaXQgdGhpcy5fc3RvY2tTZXJ2aWNlLmdldEFydGljbGVEZXRhaWxzKHRoaXMuYXJ0aWNsZURldGFpbHNJbmZvcm1hdGlvbikudGhlbigoZGV0YWlscykgPT4ge1xyXG4gICAgICB0aGlzLmFydGljbGVEZXRhaWxzID0gZGV0YWlscztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2FuY2VsQ2xpY2tTZW5kTG9jYXRpb25zKCk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhbW91bnRJblN0b2NrQ2hhbmdlZChkYXRhKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQXJ0aWNsZURldGFpbHNEYXRhLmFtb3VudEluU3RvY2sgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvY2tTZWxlY3RlZFJvdyhyb3cpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N0b2NrU2VydmljZS5sb2NrQXJ0aWNsZURldGFpbHMocm93KTtcclxuICB9XHJcbn1cclxuIl19