@colijnit/sharedcomponents 1.0.61 → 1.0.62

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 (479) hide show
  1. package/README.md +24 -24
  2. package/bundles/colijnit-sharedcomponents.umd.js +9848 -9843
  3. package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
  4. package/colijnit-sharedcomponents.d.ts +91 -91
  5. package/colijnit-sharedcomponents.metadata.json +1 -1
  6. package/esm2015/colijnit-sharedcomponents.js +91 -91
  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/stock-location.component.js +240 -240
  90. package/esm2015/lib/components/stock/components/stock-prognose/stock-prognose.component.js +52 -52
  91. package/esm2015/lib/components/stock/components/stock-tab/stock-tab.component.js +39 -41
  92. package/esm2015/lib/components/stock/localization/translation.js +63 -63
  93. package/esm2015/lib/components/stock/stock-history-tabs/stock-history-tabs.component.js +33 -33
  94. package/esm2015/lib/components/stock/stock-information/stock-information.component.js +49 -48
  95. package/esm2015/lib/components/stock/stock-information-grid/stock-information-grid.component.js +457 -457
  96. package/esm2015/lib/components/stock/stock-tabs/stock-tabs.component.js +243 -241
  97. package/esm2015/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.js +2 -2
  98. package/esm2015/lib/components/stock/stock-transfer/stock-change-amount.component.js +72 -72
  99. package/esm2015/lib/components/stock/stock-transfer/stock-transfer.component.js +149 -149
  100. package/esm2015/lib/components/stock/stock.component.js +197 -193
  101. package/esm2015/lib/components/stock/stock.module.js +80 -80
  102. package/esm2015/lib/components/stock-statusbar/stock-statusbar.component.js +23 -23
  103. package/esm2015/lib/components/stock-statusbar/stock-statusbar.module.js +19 -19
  104. package/esm2015/lib/components/tab-bar/tab-bar.component.js +90 -88
  105. package/esm2015/lib/components/tab-bar/tab-bar.module.js +21 -21
  106. package/esm2015/lib/components/tab-bar/tab.interface.js +2 -2
  107. package/esm2015/lib/components/tile-renderer/tile-render.component.js +80 -80
  108. package/esm2015/lib/components/tile-renderer/tile-render.module.js +26 -26
  109. package/esm2015/lib/decorator/input-boolean.decorator.js +34 -34
  110. package/esm2015/lib/enum/calendar-view.enum.js +9 -9
  111. package/esm2015/lib/enum/document-email-report.enum.js +18 -18
  112. package/esm2015/lib/enum/domain-multiple-name.enum.js +13 -13
  113. package/esm2015/lib/enum/file-type.js +14 -14
  114. package/esm2015/lib/enum/files-upload-config-objects.js +3 -3
  115. package/esm2015/lib/enum/gauge-color.enum.js +10 -10
  116. package/esm2015/lib/enum/icon.enum.js +44 -44
  117. package/esm2015/lib/enum/internal-param.enum.js +38 -38
  118. package/esm2015/lib/enum/keyboard-code.enum.js +32 -32
  119. package/esm2015/lib/enum/language-code.enum.js +8 -8
  120. package/esm2015/lib/enum/month.enum.js +17 -17
  121. package/esm2015/lib/enum/read-write-access-config-names.enum.js +2 -2
  122. package/esm2015/lib/enum/table-name.enum.js +86 -86
  123. package/esm2015/lib/enum/tag-category.enum.js +22 -22
  124. package/esm2015/lib/enum/tags-component-config-names.js +2 -2
  125. package/esm2015/lib/enum/thumb-three-way-state.js +19 -19
  126. package/esm2015/lib/enum/tile-size-type.js +7 -7
  127. package/esm2015/lib/enum/time-period.enum.js +11 -11
  128. package/esm2015/lib/event/co-drag-event.js +2 -2
  129. package/esm2015/lib/event/co-drop-event.js +2 -2
  130. package/esm2015/lib/interface/key-value-pair.js +2 -2
  131. package/esm2015/lib/interface/operation-callback-simple-function.js +4 -4
  132. package/esm2015/lib/localization/localization.module.js +19 -19
  133. package/esm2015/lib/localization/localize.pipe.js +26 -26
  134. package/esm2015/lib/localization/localize.service.js +30 -30
  135. package/esm2015/lib/localization/translation.js +3 -3
  136. package/esm2015/lib/model/agenda-event-per-day.model.js +6 -6
  137. package/esm2015/lib/model/agenda-event.model.js +8 -8
  138. package/esm2015/lib/model/agenda-null-objects.js +11 -11
  139. package/esm2015/lib/model/constant/all-months.js +17 -17
  140. package/esm2015/lib/model/date-range.js +5 -5
  141. package/esm2015/lib/model/day.model.js +7 -7
  142. package/esm2015/lib/model/icon-svg.js +43 -43
  143. package/esm2015/lib/model/month.model.js +11 -11
  144. package/esm2015/lib/model/send-method.js +8 -8
  145. package/esm2015/lib/model/settings.js +4 -4
  146. package/esm2015/lib/model/tag-tree-item.bo.js +16 -16
  147. package/esm2015/lib/model/time-window.bo.js +26 -26
  148. package/esm2015/lib/model/tree-object.js +15 -15
  149. package/esm2015/lib/model/week.model.js +6 -6
  150. package/esm2015/lib/model/weekday.model.js +10 -10
  151. package/esm2015/lib/pipe/array-number.pipe.js +15 -15
  152. package/esm2015/lib/pipe/file-type-image.pipe.js +51 -51
  153. package/esm2015/lib/pipe/master-pipes.js +9 -9
  154. package/esm2015/lib/pipe/ucfirst.pipe.js +16 -16
  155. package/esm2015/lib/service/dictionary.service.js +76 -76
  156. package/esm2015/lib/service/drag-drop.service.js +365 -365
  157. package/esm2015/lib/service/icon-cache.service.js +51 -51
  158. package/esm2015/lib/service/options.service.js +48 -48
  159. package/esm2015/lib/service/shared-connector.service.js +433 -433
  160. package/esm2015/lib/service/shared.service.js +60 -60
  161. package/esm2015/lib/service/stock.service.js +110 -110
  162. package/esm2015/lib/utils/array-utils.js +202 -202
  163. package/esm2015/lib/utils/calendar.utils.js +68 -68
  164. package/esm2015/lib/utils/check-precision-and-scale-result.js +2 -2
  165. package/esm2015/lib/utils/check-within-stepped-bounds-result.js +2 -2
  166. package/esm2015/lib/utils/co-document-shared-field-logic.js +50 -50
  167. package/esm2015/lib/utils/date-utils.js +264 -264
  168. package/esm2015/lib/utils/enum-utils.js +128 -128
  169. package/esm2015/lib/utils/function/not-nill.function.js +5 -5
  170. package/esm2015/lib/utils/is-nill.function.js +5 -5
  171. package/esm2015/lib/utils/map-utils.js +41 -41
  172. package/esm2015/lib/utils/number-utils.js +390 -390
  173. package/esm2015/lib/utils/object-utils.js +278 -278
  174. package/esm2015/lib/utils/ref-code-utils.js +49 -49
  175. package/esm2015/lib/utils/string-utils.js +93 -93
  176. package/esm2015/public-api.js +31 -31
  177. package/fesm2015/colijnit-sharedcomponents.js +10332 -10326
  178. package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
  179. package/lib/assets/dictionary/text.properties.d.ts +3 -3
  180. package/lib/businessobject/build-images-and-documentation-result.d.ts +5 -5
  181. package/lib/businessobject/co-document-right.bo.d.ts +6 -6
  182. package/lib/businessobject/drag-drop-container-element.d.ts +6 -6
  183. package/lib/businessobject/drag-drop-container.d.ts +6 -6
  184. package/lib/components/access/read-write-access.scss +25 -25
  185. package/lib/components/access/style/_layout.scss +23 -23
  186. package/lib/components/access/style/_material-definition.scss +12 -12
  187. package/lib/components/access/style/_theme.scss +4 -4
  188. package/lib/components/access/style/material.scss +4 -4
  189. package/lib/components/activity-list/activity-list.component.d.ts +33 -33
  190. package/lib/components/activity-list/activity-list.module.d.ts +2 -2
  191. package/lib/components/activity-list/style/_layout.scss +68 -68
  192. package/lib/components/activity-list/style/_theme.scss +4 -4
  193. package/lib/components/activity-list/style/material.scss +4 -4
  194. package/lib/components/app-file-dropzone/app-file-dropzone.component.d.ts +14 -14
  195. package/lib/components/app-file-dropzone/app-file-dropzone.module.d.ts +2 -2
  196. package/lib/components/app-file-dropzone/style/_layout.scss +61 -61
  197. package/lib/components/app-file-dropzone/style/_theme.scss +4 -4
  198. package/lib/components/app-file-dropzone/style/material.scss +4 -4
  199. package/lib/components/date-planning/component/agenda/agenda-base-view.component.d.ts +21 -21
  200. package/lib/components/date-planning/component/agenda/agenda-day-view.component.d.ts +7 -7
  201. package/lib/components/date-planning/component/agenda/agenda-event.component.d.ts +18 -18
  202. package/lib/components/date-planning/component/agenda/agenda-events.component.d.ts +13 -13
  203. package/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.d.ts +18 -18
  204. package/lib/components/date-planning/component/agenda/agenda-header.component.d.ts +48 -48
  205. package/lib/components/date-planning/component/agenda/agenda-hour-cell.component.d.ts +9 -9
  206. package/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.d.ts +8 -8
  207. package/lib/components/date-planning/component/agenda/agenda-hour-view.component.d.ts +7 -7
  208. package/lib/components/date-planning/component/agenda/agenda-month-view.component.d.ts +10 -10
  209. package/lib/components/date-planning/component/agenda/agenda-select-event.component.d.ts +12 -12
  210. package/lib/components/date-planning/component/agenda/agenda-view.component.d.ts +12 -12
  211. package/lib/components/date-planning/component/agenda/agenda-week-select-view.component.d.ts +10 -10
  212. package/lib/components/date-planning/component/agenda/agenda-week-view.component.d.ts +9 -9
  213. package/lib/components/date-planning/component/agenda/style/_layout.scss +443 -443
  214. package/lib/components/date-planning/component/agenda/style/_material-definition.scss +12 -12
  215. package/lib/components/date-planning/component/agenda/style/_theme.scss +7 -7
  216. package/lib/components/date-planning/component/agenda/style/material.scss +5 -5
  217. package/lib/components/date-planning/component/agenda/view-select.component.d.ts +11 -11
  218. package/lib/components/date-planning/component/calendar/calendar-all-months.component.d.ts +9 -9
  219. package/lib/components/date-planning/component/calendar/calendar-all-years.component.d.ts +9 -9
  220. package/lib/components/date-planning/component/calendar/calendar-header.component.d.ts +23 -23
  221. package/lib/components/date-planning/component/calendar/calendar-view.component.d.ts +31 -31
  222. package/lib/components/date-planning/component/calendar/calendar.component.d.ts +10 -10
  223. package/lib/components/date-planning/component/calendar/style/_layout.scss +167 -167
  224. package/lib/components/date-planning/component/calendar/style/_material-definition.scss +7 -7
  225. package/lib/components/date-planning/component/calendar/style/_theme.scss +7 -7
  226. package/lib/components/date-planning/component/calendar/style/material.scss +5 -5
  227. package/lib/components/date-planning/date-planning.component.d.ts +28 -28
  228. package/lib/components/date-planning/date-planning.module.d.ts +2 -2
  229. package/lib/components/date-planning/style/_layout.scss +45 -45
  230. package/lib/components/date-planning/style/_theme.scss +5 -5
  231. package/lib/components/date-planning/style/material.scss +7 -7
  232. package/lib/components/docsign/component/signature/signature.component.d.ts +16 -16
  233. package/lib/components/docsign/component/signature/style/_layout.scss +40 -40
  234. package/lib/components/docsign/component/signature/style/_material-definition.scss +11 -11
  235. package/lib/components/docsign/component/signature/style/_theme.scss +13 -13
  236. package/lib/components/docsign/component/signature/style/material.scss +4 -4
  237. package/lib/components/docsign/component/signatures/signatures.component.d.ts +12 -12
  238. package/lib/components/docsign/component/signatures/style/_layout.scss +13 -13
  239. package/lib/components/docsign/component/signatures/style/_material-definition.scss +1 -1
  240. package/lib/components/docsign/component/signatures/style/_theme.scss +4 -4
  241. package/lib/components/docsign/component/signatures/style/material.scss +5 -5
  242. package/lib/components/docsign/docsign.component.d.ts +94 -94
  243. package/lib/components/docsign/docsign.module.d.ts +2 -2
  244. package/lib/components/docsign/style/_layout.scss +40 -40
  245. package/lib/components/docsign/style/_material-definition.scss +12 -12
  246. package/lib/components/docsign/style/_theme.scss +12 -12
  247. package/lib/components/docsign/style/material.scss +15 -15
  248. package/lib/components/file-upload/file-upload.component.d.ts +42 -42
  249. package/lib/components/file-upload/file-upload.module.d.ts +2 -2
  250. package/lib/components/file-upload/style/_layout.scss +59 -59
  251. package/lib/components/file-upload/style/_material-definition.scss +2 -2
  252. package/lib/components/file-upload/style/_theme.scss +4 -4
  253. package/lib/components/file-upload/style/material.scss +4 -4
  254. package/lib/components/file-upload-popup/file-upload-popup.component.d.ts +75 -75
  255. package/lib/components/file-upload-popup/file-upload-popup.module.d.ts +2 -2
  256. package/lib/components/file-upload-popup/style/_layout.scss +48 -48
  257. package/lib/components/file-upload-popup/style/_material-definition.scss +2 -2
  258. package/lib/components/file-upload-popup/style/_theme.scss +5 -5
  259. package/lib/components/file-upload-popup/style/material.scss +4 -4
  260. package/lib/components/files-upload/components/base-file-upload.component.d.ts +98 -98
  261. package/lib/components/files-upload/components/drag-drop-container.component.d.ts +34 -34
  262. package/lib/components/files-upload/files-upload.component.d.ts +32 -32
  263. package/lib/components/files-upload/files-upload.module.d.ts +2 -2
  264. package/lib/components/files-upload/style/_layout.scss +49 -49
  265. package/lib/components/files-upload/style/_theme.scss +5 -5
  266. package/lib/components/files-upload/style/material.scss +4 -4
  267. package/lib/components/image-display/image-display.component.d.ts +14 -14
  268. package/lib/components/image-display/image-display.module.d.ts +2 -2
  269. package/lib/components/image-display/style/_layout.scss +56 -56
  270. package/lib/components/image-display/style/_material-definition.scss +4 -4
  271. package/lib/components/image-display/style/_theme.scss +6 -6
  272. package/lib/components/image-display/style/material.scss +3 -3
  273. package/lib/components/key-pad/key-pad.component.d.ts +38 -38
  274. package/lib/components/key-pad/key-pad.module.d.ts +2 -2
  275. package/lib/components/key-pad/style/_layout.scss +160 -160
  276. package/lib/components/key-pad/style/_material-definition.scss +19 -19
  277. package/lib/components/key-pad/style/_theme.scss +35 -35
  278. package/lib/components/key-pad/style/material.scss +4 -4
  279. package/lib/components/layout-switcher/layout-switcher.component.d.ts +16 -16
  280. package/lib/components/layout-switcher/layout-switcher.module.d.ts +2 -2
  281. package/lib/components/layout-switcher/style/_layout.scss +94 -94
  282. package/lib/components/layout-switcher/style/_material-definition.scss +16 -16
  283. package/lib/components/layout-switcher/style/_theme.scss +4 -4
  284. package/lib/components/layout-switcher/style/material.scss +6 -6
  285. package/lib/components/linear-gauge/co-linear-gauge.component.d.ts +11 -11
  286. package/lib/components/linear-gauge/co-linear-gauge.module.d.ts +2 -2
  287. package/lib/components/linear-gauge/style/_layout.scss +20 -20
  288. package/lib/components/linear-gauge/style/_material-definition.scss +8 -8
  289. package/lib/components/linear-gauge/style/_theme.scss +4 -4
  290. package/lib/components/linear-gauge/style/material.scss +6 -6
  291. package/lib/components/login/style/_layout.scss +57 -57
  292. package/lib/components/login/style/_material-definition.scss +23 -23
  293. package/lib/components/login/style/_theme.scss +7 -7
  294. package/lib/components/login/style/material.scss +4 -4
  295. package/lib/components/multi-property-toggler/multiple-property-toggler.component.d.ts +27 -27
  296. package/lib/components/multi-property-toggler/multiple-property-toggler.module.d.ts +2 -2
  297. package/lib/components/multi-property-toggler/style/_layout.scss +24 -24
  298. package/lib/components/multi-property-toggler/style/_theme.scss +4 -4
  299. package/lib/components/multi-property-toggler/style/material.scss +4 -4
  300. package/lib/components/screen-config-generator/style/_layout.scss +95 -95
  301. package/lib/components/screen-config-generator/style/_theme.scss +4 -4
  302. package/lib/components/screen-config-generator/style/material.scss +4 -4
  303. package/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.d.ts +19 -19
  304. package/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.d.ts +2 -2
  305. package/lib/components/send-method-dialog/components/layout-selection/style/_layout.scss +44 -44
  306. package/lib/components/send-method-dialog/components/layout-selection/style/_material-definition.scss +19 -19
  307. package/lib/components/send-method-dialog/components/layout-selection/style/_theme.scss +17 -17
  308. package/lib/components/send-method-dialog/components/layout-selection/style/material.scss +4 -4
  309. package/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.d.ts +19 -19
  310. package/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.d.ts +2 -2
  311. package/lib/components/send-method-dialog/components/printer-selection/style/_layout.scss +69 -69
  312. package/lib/components/send-method-dialog/components/printer-selection/style/_material-definition.scss +37 -37
  313. package/lib/components/send-method-dialog/components/printer-selection/style/_theme.scss +23 -23
  314. package/lib/components/send-method-dialog/components/printer-selection/style/material.scss +4 -4
  315. package/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.d.ts +14 -14
  316. package/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.d.ts +2 -2
  317. package/lib/components/send-method-dialog/components/send-method-email/style/_layout.scss +29 -29
  318. package/lib/components/send-method-dialog/components/send-method-email/style/_material-definition.scss +8 -8
  319. package/lib/components/send-method-dialog/components/send-method-email/style/_theme.scss +5 -5
  320. package/lib/components/send-method-dialog/components/send-method-email/style/material.scss +4 -4
  321. package/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.component.d.ts +8 -8
  322. package/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.module.d.ts +2 -2
  323. package/lib/components/send-method-dialog/components/send-method-pdf/style/_layout.scss +25 -25
  324. package/lib/components/send-method-dialog/components/send-method-pdf/style/_material-definition.scss +5 -5
  325. package/lib/components/send-method-dialog/components/send-method-pdf/style/_theme.scss +5 -5
  326. package/lib/components/send-method-dialog/components/send-method-pdf/style/material.scss +4 -4
  327. package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.d.ts +13 -13
  328. package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.d.ts +2 -2
  329. package/lib/components/send-method-dialog/components/send-method-printer/style/_layout.scss +30 -30
  330. package/lib/components/send-method-dialog/components/send-method-printer/style/_material-definition.scss +5 -5
  331. package/lib/components/send-method-dialog/components/send-method-printer/style/_theme.scss +5 -5
  332. package/lib/components/send-method-dialog/components/send-method-printer/style/material.scss +4 -4
  333. package/lib/components/send-method-dialog/components/signature-button/signature-button.component.d.ts +12 -12
  334. package/lib/components/send-method-dialog/components/signature-button/signature-button.module.d.ts +2 -2
  335. package/lib/components/send-method-dialog/components/signature-button/style/_layout.scss +28 -28
  336. package/lib/components/send-method-dialog/components/signature-button/style/_material-definition.scss +8 -8
  337. package/lib/components/send-method-dialog/components/signature-button/style/_theme.scss +4 -4
  338. package/lib/components/send-method-dialog/components/signature-button/style/material.scss +4 -4
  339. package/lib/components/send-method-dialog/model/email-address-viewmodel.d.ts +5 -5
  340. package/lib/components/send-method-dialog/send-method-dialog.component.d.ts +71 -71
  341. package/lib/components/send-method-dialog/send-method-dialog.module.d.ts +2 -2
  342. package/lib/components/send-method-dialog/send-method-params.interface.d.ts +13 -13
  343. package/lib/components/send-method-dialog/service/send-method.service.d.ts +23 -23
  344. package/lib/components/send-method-dialog/style/_layout.scss +165 -165
  345. package/lib/components/send-method-dialog/style/_material-definition.scss +48 -48
  346. package/lib/components/send-method-dialog/style/_theme.scss +33 -33
  347. package/lib/components/send-method-dialog/style/material.scss +10 -10
  348. package/lib/components/simple-tags/simple-tags.component.d.ts +31 -31
  349. package/lib/components/simple-tags/simple-tags.module.d.ts +2 -2
  350. package/lib/components/simple-tags/style/_layout.scss +272 -272
  351. package/lib/components/simple-tags/style/_material-definition.scss +39 -39
  352. package/lib/components/simple-tags/style/_theme.scss +4 -4
  353. package/lib/components/simple-tags/style/material.scss +4 -4
  354. package/lib/components/statusbar/statusbar-popup.component.d.ts +21 -21
  355. package/lib/components/statusbar/statusbar.component.d.ts +26 -26
  356. package/lib/components/statusbar/statusbar.module.d.ts +2 -2
  357. package/lib/components/statusbar/style/_layout.scss +70 -70
  358. package/lib/components/statusbar/style/_material-definition.scss +23 -23
  359. package/lib/components/statusbar/style/_theme.scss +13 -13
  360. package/lib/components/statusbar/style/material.scss +5 -5
  361. package/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.d.ts +9 -9
  362. package/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.d.ts +9 -9
  363. package/lib/components/stock/components/order-stock-history/order-stock-history.component.d.ts +9 -9
  364. package/lib/components/stock/components/order-stock-tab/order-stock-tab.component.d.ts +11 -11
  365. package/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.d.ts +9 -9
  366. package/lib/components/stock/components/order-tab/order-tab.component.d.ts +20 -20
  367. package/lib/components/stock/components/stock-history/stock-history.component.d.ts +13 -13
  368. package/lib/components/stock/components/stock-location/stock-location.component.d.ts +50 -50
  369. package/lib/components/stock/components/stock-prognose/stock-prognose.component.d.ts +11 -11
  370. package/lib/components/stock/components/stock-tab/stock-tab.component.d.ts +7 -9
  371. package/lib/components/stock/localization/translation.d.ts +60 -60
  372. package/lib/components/stock/stock-history-tabs/stock-history-tabs.component.d.ts +7 -7
  373. package/lib/components/stock/stock-information/stock-information.component.d.ts +9 -8
  374. package/lib/components/stock/stock-information-grid/stock-information-grid.component.d.ts +75 -75
  375. package/lib/components/stock/stock-tabs/stock-tabs.component.d.ts +56 -56
  376. package/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.d.ts +4 -4
  377. package/lib/components/stock/stock-transfer/stock-change-amount.component.d.ts +18 -18
  378. package/lib/components/stock/stock-transfer/stock-transfer.component.d.ts +42 -42
  379. package/lib/components/stock/stock.component.d.ts +58 -57
  380. package/lib/components/stock/stock.module.d.ts +2 -2
  381. package/lib/components/stock/style/_layout.scss +286 -286
  382. package/lib/components/stock/style/_material-definition.scss +25 -25
  383. package/lib/components/stock/style/_theme.scss +5 -5
  384. package/lib/components/stock/style/material.scss +4 -4
  385. package/lib/components/stock-statusbar/stock-statusbar.component.d.ts +4 -4
  386. package/lib/components/stock-statusbar/stock-statusbar.module.d.ts +2 -2
  387. package/lib/components/stock-statusbar/style/_layout.scss +24 -24
  388. package/lib/components/stock-statusbar/style/material.scss +4 -4
  389. package/lib/components/tab-bar/style/_layout.scss +78 -78
  390. package/lib/components/tab-bar/style/_material-definition.scss +6 -6
  391. package/lib/components/tab-bar/style/material.scss +4 -4
  392. package/lib/components/tab-bar/tab-bar.component.d.ts +21 -21
  393. package/lib/components/tab-bar/tab-bar.module.d.ts +2 -2
  394. package/lib/components/tab-bar/tab.interface.d.ts +5 -5
  395. package/lib/components/tags/component/style/_layout.scss +67 -67
  396. package/lib/components/tags/component/style/_material-definition.scss +1 -1
  397. package/lib/components/tags/component/style/_theme.scss +8 -8
  398. package/lib/components/tags/component/style/material.scss +3 -3
  399. package/lib/components/tags/component/tag-join-label/style/_layout.scss +97 -97
  400. package/lib/components/tags/component/tag-join-label/style/_material-definition.scss +4 -4
  401. package/lib/components/tags/component/tag-join-label/style/_theme.scss +8 -8
  402. package/lib/components/tags/component/tag-join-label/style/material.scss +3 -3
  403. package/lib/components/tile-renderer/style/_layout.scss +90 -90
  404. package/lib/components/tile-renderer/style/_theme.scss +4 -4
  405. package/lib/components/tile-renderer/style/material.scss +4 -4
  406. package/lib/components/tile-renderer/tile-render.component.d.ts +31 -31
  407. package/lib/components/tile-renderer/tile-render.module.d.ts +2 -2
  408. package/lib/decorator/input-boolean.decorator.d.ts +8 -8
  409. package/lib/enum/calendar-view.enum.d.ts +7 -7
  410. package/lib/enum/document-email-report.enum.d.ts +15 -15
  411. package/lib/enum/domain-multiple-name.enum.d.ts +10 -10
  412. package/lib/enum/file-type.d.ts +7 -7
  413. package/lib/enum/files-upload-config-objects.d.ts +22 -22
  414. package/lib/enum/gauge-color.enum.d.ts +8 -8
  415. package/lib/enum/icon.enum.d.ts +42 -42
  416. package/lib/enum/internal-param.enum.d.ts +34 -34
  417. package/lib/enum/keyboard-code.enum.d.ts +30 -30
  418. package/lib/enum/language-code.enum.d.ts +6 -6
  419. package/lib/enum/month.enum.d.ts +14 -14
  420. package/lib/enum/read-write-access-config-names.enum.d.ts +4 -4
  421. package/lib/enum/table-name.enum.d.ts +84 -84
  422. package/lib/enum/tag-category.enum.d.ts +19 -19
  423. package/lib/enum/tags-component-config-names.d.ts +4 -4
  424. package/lib/enum/thumb-three-way-state.d.ts +6 -6
  425. package/lib/enum/tile-size-type.d.ts +4 -4
  426. package/lib/enum/time-period.enum.d.ts +8 -8
  427. package/lib/event/co-drag-event.d.ts +5 -5
  428. package/lib/event/co-drop-event.d.ts +8 -8
  429. package/lib/interface/key-value-pair.d.ts +4 -4
  430. package/lib/interface/operation-callback-simple-function.d.ts +4 -4
  431. package/lib/localization/localization.module.d.ts +2 -2
  432. package/lib/localization/localize.pipe.d.ts +7 -7
  433. package/lib/localization/localize.service.d.ts +7 -7
  434. package/lib/localization/translation.d.ts +2 -2
  435. package/lib/model/agenda-event-per-day.model.d.ts +5 -5
  436. package/lib/model/agenda-event.model.d.ts +17 -17
  437. package/lib/model/agenda-null-objects.d.ts +10 -10
  438. package/lib/model/constant/all-months.d.ts +2 -2
  439. package/lib/model/date-range.d.ts +7 -7
  440. package/lib/model/day.model.d.ts +8 -8
  441. package/lib/model/icon-svg.d.ts +4 -4
  442. package/lib/model/month.model.d.ts +5 -5
  443. package/lib/model/send-method.d.ts +7 -7
  444. package/lib/model/settings.d.ts +3 -3
  445. package/lib/model/tag-tree-item.bo.d.ts +18 -18
  446. package/lib/model/time-window.bo.d.ts +13 -13
  447. package/lib/model/tree-object.d.ts +8 -8
  448. package/lib/model/week.model.d.ts +4 -4
  449. package/lib/model/weekday.model.d.ts +16 -16
  450. package/lib/pipe/array-number.pipe.d.ts +4 -4
  451. package/lib/pipe/file-type-image.pipe.d.ts +12 -12
  452. package/lib/pipe/master-pipes.d.ts +1 -1
  453. package/lib/pipe/ucfirst.pipe.d.ts +4 -4
  454. package/lib/service/dictionary.service.d.ts +21 -21
  455. package/lib/service/drag-drop.service.d.ts +86 -86
  456. package/lib/service/icon-cache.service.d.ts +18 -18
  457. package/lib/service/options.service.d.ts +13 -13
  458. package/lib/service/shared-connector.service.d.ts +55 -55
  459. package/lib/service/shared.service.d.ts +18 -18
  460. package/lib/service/stock.service.d.ts +41 -41
  461. package/lib/style/_mixin.scss +14 -14
  462. package/lib/style/_variables.scss +21 -21
  463. package/lib/style/sharedcomponents-globals.scss +10 -10
  464. package/lib/utils/array-utils.d.ts +63 -63
  465. package/lib/utils/calendar.utils.d.ts +10 -10
  466. package/lib/utils/check-precision-and-scale-result.d.ts +4 -4
  467. package/lib/utils/check-within-stepped-bounds-result.d.ts +8 -8
  468. package/lib/utils/co-document-shared-field-logic.d.ts +7 -7
  469. package/lib/utils/date-utils.d.ts +44 -44
  470. package/lib/utils/enum-utils.d.ts +31 -31
  471. package/lib/utils/function/not-nill.function.d.ts +1 -1
  472. package/lib/utils/is-nill.function.d.ts +1 -1
  473. package/lib/utils/map-utils.d.ts +16 -16
  474. package/lib/utils/number-utils.d.ts +125 -125
  475. package/lib/utils/object-utils.d.ts +40 -40
  476. package/lib/utils/ref-code-utils.d.ts +10 -10
  477. package/lib/utils/string-utils.d.ts +38 -38
  478. package/package.json +1 -1
  479. package/public-api.d.ts +27 -27
@@ -1,397 +1,397 @@
1
- import { __awaiter, __decorate } from "tslib";
2
- import { Component, EventEmitter, HostBinding, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
3
- import { FormComponent } from '@colijnit/corecomponents_v12';
4
- import { DocumentPublication } from "@colijnit/articleapi/build/enum/refcode/document-publication.enum";
5
- import { ObjectRightType } from "@colijnit/sharedapi/build/enum/object-right-type.enum";
6
- import { PromptService } from "@colijnit/corecomponents_v12";
7
- import { BusinessObjectFactory } from "@colijnit/ioneconnector/build/service/business-object-factory";
8
- import { InputBoolean } from "../../decorator/input-boolean.decorator";
9
- import { CoDocument } from "@colijnit/mainapi/build/model/co-document";
10
- import { CoDocumentRight } from "@colijnit/mainapi/build/model/co-document-right";
11
- import { FileType } from "../../enum/file-type";
12
- import { DocumentEmailReport } from "../../enum/document-email-report.enum";
13
- import { DomainMultipleName } from "../../enum/domain-multiple-name.enum";
14
- import { FileTypeImagePipe } from "../../pipe/file-type-image.pipe";
15
- import { FileUtils } from "@colijnit/mainapi/build/utils/file-utils";
16
- // Component that shows a popup when the user wants to upload a CoDocument
17
- export class FileUploadPopupComponent {
18
- constructor(
19
- //private _workabilityService: AppWorkabilityService,
20
- _promptService, _fileTypeImgPipe) {
21
- this._promptService = _promptService;
22
- this._fileTypeImgPipe = _fileTypeImgPipe;
23
- this.useWithoutSettingProps = false;
24
- this.hasPublicAccessVisible = false;
25
- this.showDocumentReportPicker = true;
26
- this.displayReadWriteAccess = true;
27
- this.documentChangeEvent = new EventEmitter();
28
- this.popupCloseEvent = new EventEmitter();
29
- this.documentPublication = DocumentPublication;
30
- this.documentEmailReports = DocumentEmailReport;
31
- this.domain = DomainMultipleName;
32
- this.fileTypes = FileType;
33
- this.hideCancel = false;
34
- this.storeGroups = [];
35
- this.userGroupsForWrite = [];
36
- this.userGroupsForRead = [];
37
- this.documentTags = [];
38
- this._filesUploadConfigObjects = {}; // Instantiate with empty object to avoid nullpointers in the template
39
- this._boFactory = new BusinessObjectFactory();
40
- this._readonly = false;
41
- }
42
- set documentUnderEdit(doc) {
43
- this._documentUnderEdit = doc ? this._boFactory.makeWithRawBackendData(CoDocument, doc) : undefined;
44
- }
45
- get documentUnderEdit() {
46
- return this._documentUnderEdit;
47
- }
48
- set readonly(value) {
49
- this._readonly = value;
50
- if (value) {
51
- //this._toastService.spawnToast("MESSAGE_DOCUMENT_LOCK_SINGLE");
52
- }
53
- }
54
- set filesUploadConfigObjects(value) {
55
- this._filesUploadConfigObjects = value;
56
- }
57
- showClass() {
58
- return true;
59
- }
60
- get showReadWriteAccess() {
61
- //TODO get userrights
62
- return true;
63
- //return this._userRights.workabilityParameterEnabled && this.displayReadWriteAccess;
64
- }
65
- get filesUploadConfigObjects() {
66
- return this._filesUploadConfigObjects;
67
- }
68
- get isWorkability() {
69
- //TODO fix workability
70
- return false;
71
- //return this._workabilityService.workabilitySystemEnabled;
72
- }
73
- get docUnderEditIsReadOnly() {
74
- return this.documentUnderEdit.readonly || this._readonly;
75
- }
76
- get thumbnail() {
77
- if (this.documentUnderEdit.isImageDocument()) {
78
- return this._thumbnail;
79
- }
80
- return this._fileTypeImgPipe.transform(this.documentUnderEdit.fileTypeInternal);
81
- }
82
- get popupHeader() {
83
- if (this.documentUnderEdit && this.documentUnderEdit.isImageDocument()) {
84
- return "IMAGE";
85
- }
86
- else {
87
- return "DOCUMENT";
88
- }
89
- }
90
- get publicationConfigName() {
91
- if (this.filesUploadConfigObjects) {
92
- return this.documentUnderEdit.isImageDocument() ?
93
- this.filesUploadConfigObjects.ImageDocumentPublishTo :
94
- this.filesUploadConfigObjects.TextDocumentPublishTo;
95
- }
96
- else {
97
- return; // No configname found
98
- }
99
- }
100
- get tagsConfigName() {
101
- if (this.filesUploadConfigObjects) {
102
- return this.documentUnderEdit.isImageDocument() ?
103
- this.filesUploadConfigObjects.TagsImageConfigNames :
104
- this.filesUploadConfigObjects.TagsTextConfigNames;
105
- }
106
- else {
107
- return; // No configname found
108
- }
109
- }
110
- ngOnInit() {
111
- this.loadCollection();
112
- if (this.documentUnderEdit.isImageDocument()) {
113
- this._thumbnail = this.documentUnderEdit.documentBodyAsDataUri;
114
- }
115
- }
116
- loadCollection() {
117
- return __awaiter(this, void 0, void 0, function* () {
118
- //this.documentTags = await this._tagsRepo.getJoinedTags(this.tagReferenceTable, this.documentKey);
119
- //this.storeGroups = await this._baseDataRepo.getStoreGroupList();
120
- });
121
- }
122
- onPreviewClick() {
123
- if (this.documentUnderEdit.isImageDocument()) { //preview image
124
- this._promptService.showImage(this.documentUnderEdit.documentBodyAsDataUri, "Preview");
125
- }
126
- else { //download document
127
- try {
128
- FileUtils.DownloadFromDataUri(this.documentUnderEdit.bodyAsDataUri, this.documentUnderEdit.fileName);
129
- }
130
- catch (error) {
131
- }
132
- }
133
- }
134
- saveDocumentUnderEditRights() {
135
- this.documentUnderEdit.rights = [];
136
- const forWriteLength = this.userGroupsForWrite.length;
137
- for (let i = 0; i < forWriteLength; i++) {
138
- const rights = new CoDocumentRight();
139
- rights.userGroupId = this.userGroupsForWrite[i];
140
- rights.rightLevel = ObjectRightType.ReadWrite;
141
- this.documentUnderEdit.rights.push(rights);
142
- }
143
- const forReadLength = this.userGroupsForRead.length;
144
- for (let i = 0; i < forReadLength; i++) {
145
- const rights = new CoDocumentRight();
146
- rights.userGroupId = this.userGroupsForRead[i];
147
- rights.rightLevel = ObjectRightType.ReadOnly;
148
- this.documentUnderEdit.rights.push(rights);
149
- }
150
- }
151
- onPopupOkClick() {
152
- if (this.form) {
153
- this.form.submit();
154
- }
155
- }
156
- handlePropertyChange(refSumOfEnabledItems) {
157
- this._publicationNumber = refSumOfEnabledItems;
158
- }
159
- handleReportsPropertyChange(refSumOfEnabledItems) {
160
- this._reportsNumber = refSumOfEnabledItems;
161
- }
162
- onValidSubmit() {
163
- return __awaiter(this, void 0, void 0, function* () {
164
- this._publicationNumber ? this.documentUnderEdit.publication = this._publicationNumber : this.documentUnderEdit.publication = 0;
165
- this._reportsNumber ? this.documentUnderEdit.reports = this._reportsNumber : this.documentUnderEdit.reports = 0;
166
- this.documentUnderEdit.retailFormulas = this.storeGroupIds;
167
- this.saveDocumentUnderEditRights();
168
- this.documentChangeEvent.emit(this.documentUnderEdit);
169
- this.onPopupClose();
170
- });
171
- }
172
- onPopupCancelClick() {
173
- return __awaiter(this, void 0, void 0, function* () {
174
- this.onPopupClose();
175
- });
176
- }
177
- onPopupClose() {
178
- this.userGroupsForWrite.length = 0;
179
- this.userGroupsForRead.length = 0;
180
- this.documentUnderEdit = undefined;
181
- this.popupCloseEvent.next();
182
- }
183
- }
184
- FileUploadPopupComponent.decorators = [
185
- { type: Component, args: [{
186
- selector: "co-file-upload-popup",
187
- template: `
188
- <co-dialog *ngIf="!useWithoutSettingProps && documentUnderEdit" cssId="popup_files_upload_content"
189
- [headerTemplate]="headerTemplate" contentSize noClickOutside
190
- (close)="onPopupClose()">
191
- <div class="co-dialog-wrapper">
192
- <div class="file-upload-form-wrapper" fxLayout="column" fxLayoutGap="10px">
193
- <co-form class="narrow-scrollbar" (validSubmit)="onValidSubmit()">
194
- <div class="horizontal-layout-column">
195
- <div class="document-thumb column-left" *ngIf="!addDocumentByUrl">
196
- <a (click)="onPreviewClick()"><img [src]="thumbnail"/></a>
197
- </div>
198
- <div class="column-right">
199
- <co-input-text
200
- [model]="documentUnderEdit.fileSize"
201
- [screenConfigurationObject]="documentUnderEdit.isImageDocument() ?
202
- filesUploadConfigObjects?.ImageDocumentFileSize :
203
- filesUploadConfigObjects?.TextDocumentFileSize"
204
- [placeholder]="'SIZE' | localize"
205
- forceReadonly
206
- noValidation>
207
- </co-input-text>
208
- <ng-container *ngIf="documentUnderEdit.isImageDocument()">
209
- <co-input-text [placeholder]="'DIMENSIONS' | localize"
210
- [model]="documentUnderEdit.imageDimensions"
211
- [screenConfigurationObject]="filesUploadConfigObjects?.ImageDocumentDimensions"
212
- forceReadonly noValidation></co-input-text>
213
- </ng-container>
214
- <co-input-text
215
- [(model)]="documentUnderEdit.title"
216
- [screenConfigurationObject]="documentUnderEdit.isImageDocument() ?
217
- filesUploadConfigObjects?.ImageDocumentTitle :
218
- filesUploadConfigObjects?.TextDocumentTitle"
219
- [placeholder]="'TITLE2' | localize"
220
- noValidation forceReadonly></co-input-text>
221
- </div>
222
- </div>
223
-
224
- <div>
225
- <!--<sc-tags
226
- [tagCategory]="tagCategory"
227
- [readonly]="docUnderEditIsReadOnly"-->
228
-
229
- <!-- ></sc-tags>--><!-- [myCfgNames]="tagsConfigName" | [(joinedTags)]="this.documentUnderEdit.tags"-->
230
- </div>
231
- <!--<div>
232
- <read-write-access *ngIf="showReadWriteAccess"
233
- [readWriteCfgNames]="filesUploadConfigObjects?.readWriteAccess"
234
- [layoutHorizontal]="true"
235
- [medicalUserGroups]="medicalUserGroups"
236
- [(userGroupsForWrite)]="userGroupsForWrite"
237
- [(userGroupsForRead)]="userGroupsForRead"
238
- [readonly]="docUnderEditIsReadOnly"
239
- ></read-write-access>
240
- </div>-->
241
- <!--<div class="horizontal-layout-column">
242
- <ng-container *ngIf="addDocumentByUrl">
243
- <co-input-text required [placeholder]="'URL' | localize" [(model)]="documentUnderEdit.filePath"
244
- [readonly]="docUnderEditIsReadOnly"></co-input-text>
245
- </ng-container>
246
- </div>-->
247
- <div class="horizontal-layout-column">
248
- <div class="column-left">
249
- <co-input-text [placeholder]="'DESCRIPTION' | localize" [(model)]="documentUnderEdit.description"
250
- [screenConfigurationObject]="documentUnderEdit.isImageDocument() ?
251
- filesUploadConfigObjects?.ImageDocumentDescription :
252
- filesUploadConfigObjects?.TextDocumentDescription"
253
- [readonly]="docUnderEditIsReadOnly"
254
- ></co-input-text>
255
-
256
- </div>
257
- <!--<div *ngIf="hasPublicAccessVisible" class="column-right">
258
- <input-switcher-yes-no label="PUBLIC_ACCESS"
259
- [(model)]="documentUnderEdit.hasPublicAccess"
260
- [readonly]="docUnderEditIsReadOnly"
261
- ></input-switcher-yes-no>
262
- </div>-->
263
- </div>
264
- <div class="horizontal-layout-column">
265
- <ng-container *ngIf="!documentUnderEdit.isImageDocument()">
266
- <div class="column-left">
267
- <!-- <input-switcher-yes-no label="DOWNLOADABLE"
268
- [(model)]="documentUnderEdit.downloadable"
269
- [cfgName]="filesUploadConfigObjects?.TextDocumentDownloadable"
270
- [readonly]="docUnderEditIsReadOnly"
271
- ></input-switcher-yes-no>-->
272
- </div>
273
- </ng-container>
274
- </div>
275
- <div class="horizontal-layout-column">
276
- <ng-container *ngIf="fileType === fileTypes.ThreeDFile">
277
- <div class="column-left">
278
- <!-- <input-switcher-yes-no label="ALSO_AS_USDZ"
279
- [(model)]="documentUnderEdit.convertToUSDZ"
280
- [readonly]="docUnderEditIsReadOnly"
281
- ></input-switcher-yes-no>-->
282
- </div>
283
- </ng-container>
284
- </div>
285
- <div class="horizontal-layout-column">
286
- <ng-container *ngIf="documentUnderEdit.isImageDocument()">
287
- <div class="column-left"><!--
288
- <input-switcher-yes-no label="ATTACH_TO_NOTIFICATION"
289
- [(model)]="documentUnderEdit.attachToNotification"
290
- [cfgName]="filesUploadConfigObjects?.ImageDocumentAttachNotification"
291
- [readonly]="docUnderEditIsReadOnly"
292
- ></input-switcher-yes-no>-->
293
- </div>
294
- <div class="column-right"><!--
295
- <image-type-select
296
- [cfgName]="filesUploadConfigObjects?.ImageDocumentDisplayType"
297
- [(selectedModelId)]="this.documentUnderEdit.imageDisplayKind"
298
- [readonly]="docUnderEditIsReadOnly"
299
- label="DISPLAY_TYPE"
300
- ></image-type-select>-->
301
- </div>
302
- </ng-container>
303
- </div>
304
- <div *ngIf="!isWorkability">
305
- <!-- <multiple-property-toggler *ngIf="!showDocumentReportPicker"
306
- [propertyNamesToToggle]="documentPublication"
307
- [(enableditems)]="this.documentUnderEdit.publication"
308
- (onPropertyItemChange)="handlePropertyChange($event)"
309
- label="PUBLISH_TO"
310
- [readonly]="docUnderEditIsReadOnly"
311
- ></multiple-property-toggler>-->
312
- <co-multiple-property-toggler *ngIf="showDocumentReportPicker"
313
- [propertyNamesToToggle]="documentEmailReports"
314
- [(enableditems)]="documentUnderEdit.reports"
315
- (onPropertyItemChange)="handleReportsPropertyChange($event)"
316
- label="REPORTS_TO_ATTACH_TO"
317
- [readonly]="docUnderEditIsReadOnly"
318
- ></co-multiple-property-toggler>
319
-
320
- <!--<ng-container *ngIf="documentUnderEdit.isImageDocument()"
321
- [templateWrapper]="templateImage"></ng-container>-->
322
- </div>
323
- </co-form>
324
- <div class="ok-cancel-buttons">
325
- <co-button [disabled]="docUnderEditIsReadOnly" [textContent]="'OK' | localize" (click)="onPopupOkClick()"></co-button>
326
- <co-button *ngIf="hideCancel" [textContent]="'STICKER' | localize" (click)="onPopupCancelClick()"></co-button>
327
- </div>
328
- <!-- <default-ok-cancel-buttons class="justify-center"
329
- [okDisabled]="docUnderEditIsReadOnly"
330
- [hideCancel]="hideCancel"
331
- (okClick)="onPopupOkClick()"
332
- (cancelClick)="onPopupCancelClick()">
333
- </default-ok-cancel-buttons>-->
334
- </div>
335
- </div>
336
- </co-dialog>
337
- <ng-template #headerTemplate>
338
- <div [textContent]="popupHeader | localize"></div>
339
- </ng-template>
340
- <ng-template #templateImage *ngIf="!isWorkability">
341
- <!-- <div class="column-right">
342
- <input-lov-multi-select
343
- [cfgName]="filesUploadConfigObjects.ImageDocumentStoreGroups"
344
- [(selectedModelIds)]="storeGroupIds"
345
- [collection]="storeGroups"
346
- [readonly]="docUnderEditIsReadOnly"
347
- descriptionField="description"
348
- doNotLoadCollection
349
- customWidth
350
- label="RETAIL_FORMULAS"
351
- ></input-lov-multi-select>
352
- </div>-->
353
- </ng-template>
354
- `,
355
- encapsulation: ViewEncapsulation.None
356
- },] }
357
- ];
358
- FileUploadPopupComponent.ctorParameters = () => [
359
- { type: PromptService },
360
- { type: FileTypeImagePipe }
361
- ];
362
- FileUploadPopupComponent.propDecorators = {
363
- form: [{ type: ViewChild, args: [FormComponent,] }],
364
- useWithoutSettingProps: [{ type: Input }],
365
- hasPublicAccessVisible: [{ type: Input }],
366
- showDocumentReportPicker: [{ type: Input }],
367
- documentUnderEdit: [{ type: Input }],
368
- readonly: [{ type: Input }],
369
- filesUploadConfigObjects: [{ type: Input }],
370
- tagCategory: [{ type: Input }],
371
- medicalUserGroups: [{ type: Input }],
372
- displayReadWriteAccess: [{ type: Input }],
373
- tagReferenceTable: [{ type: Input }],
374
- documentKey: [{ type: Input }],
375
- documentTable: [{ type: Input }],
376
- fileType: [{ type: Input }],
377
- addDocumentByUrl: [{ type: Input }],
378
- documentChangeEvent: [{ type: Output }],
379
- popupCloseEvent: [{ type: Output }],
380
- showClass: [{ type: HostBinding, args: ['class.co-file-upload-popup',] }]
381
- };
382
- __decorate([
383
- InputBoolean()
384
- ], FileUploadPopupComponent.prototype, "useWithoutSettingProps", void 0);
385
- __decorate([
386
- InputBoolean()
387
- ], FileUploadPopupComponent.prototype, "hasPublicAccessVisible", void 0);
388
- __decorate([
389
- InputBoolean()
390
- ], FileUploadPopupComponent.prototype, "showDocumentReportPicker", void 0);
391
- __decorate([
392
- InputBoolean()
393
- ], FileUploadPopupComponent.prototype, "medicalUserGroups", void 0);
394
- __decorate([
395
- InputBoolean()
396
- ], FileUploadPopupComponent.prototype, "addDocumentByUrl", void 0);
397
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQtcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS11cGxvYWQtcG9wdXAvZmlsZS11cGxvYWQtcG9wdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEgsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBRXRHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1REFBdUQsQ0FBQztBQUN0RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDcEcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUNyRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saURBQWlELENBQUM7QUFJaEYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRTFFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRXhFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQStLbkUsMEVB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QkFBaUIsR0FBRyxTQUFTLENBQUM7UUFFbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzs7WUFwYUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F1S1Q7Z0JBQ0EsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDekM7OztZQTVMTyxhQUFhO1lBYWIsaUJBQWlCOzs7bUJBa0xwQixTQUFTLFNBQUMsYUFBYTtxQ0FHdkIsS0FBSztxQ0FJTCxLQUFLO3VDQUlMLEtBQUs7Z0NBTUwsS0FBSzt1QkFTTCxLQUFLO3VDQVNMLEtBQUs7MEJBS0wsS0FBSztnQ0FHTCxLQUFLO3FDQUlMLEtBQUs7Z0NBR0wsS0FBSzswQkFHTCxLQUFLOzRCQUdMLEtBQUs7dUJBR0wsS0FBSzsrQkFHTCxLQUFLO2tDQUlMLE1BQU07OEJBR04sTUFBTTt3QkFHTixXQUFXLFNBQUMsNEJBQTRCOztBQW5FekM7SUFEQyxZQUFZLEVBQUU7d0VBQ2dDO0FBSS9DO0lBREMsWUFBWSxFQUFFO3dFQUNnQztBQUsvQztJQUZDLFlBQVksRUFBRTswRUFFaUM7QUErQmhEO0lBREMsWUFBWSxFQUFFO21FQUNtQjtBQW1CbEM7SUFEQyxZQUFZLEVBQUU7a0VBQ2tCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1Db21wb25lbnR9IGZyb20gJ0Bjb2xpam5pdC9jb3JlY29tcG9uZW50c192MTInO1xuaW1wb3J0IHtEb2N1bWVudFB1YmxpY2F0aW9ufSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9yZWZjb2RlL2RvY3VtZW50LXB1YmxpY2F0aW9uLmVudW1cIjtcbmltcG9ydCB7U3RvcmVHcm91cH0gZnJvbSBcIkBjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3N0b3JlLWdyb3VwLmJvXCI7XG5pbXBvcnQge09iamVjdFJpZ2h0VHlwZX0gZnJvbSBcIkBjb2xpam5pdC9zaGFyZWRhcGkvYnVpbGQvZW51bS9vYmplY3QtcmlnaHQtdHlwZS5lbnVtXCI7XG5pbXBvcnQge1Byb21wdFNlcnZpY2V9IGZyb20gXCJAY29saWpuaXQvY29yZWNvbXBvbmVudHNfdjEyXCI7XG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSBcIkBjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3NlcnZpY2UvYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnlcIjtcbmltcG9ydCB7SW5wdXRCb29sZWFufSBmcm9tIFwiLi4vLi4vZGVjb3JhdG9yL2lucHV0LWJvb2xlYW4uZGVjb3JhdG9yXCI7XG5pbXBvcnQge0NvRG9jdW1lbnR9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudFwiO1xuaW1wb3J0IHtDb0RvY3VtZW50UmlnaHR9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudC1yaWdodFwiO1xuaW1wb3J0IHtUYWdDYXRlZ29yeX0gZnJvbSBcIi4uLy4uL2VudW0vdGFnLWNhdGVnb3J5LmVudW1cIjtcbmltcG9ydCB7RmlsZXNVcGxvYWRDb25maWdPYmplY3RzfSBmcm9tIFwiLi4vLi4vZW51bS9maWxlcy11cGxvYWQtY29uZmlnLW9iamVjdHNcIjtcbmltcG9ydCB7VGFibGVOYW1lfSBmcm9tIFwiLi4vLi4vZW51bS90YWJsZS1uYW1lLmVudW1cIjtcbmltcG9ydCB7RmlsZVR5cGV9IGZyb20gXCIuLi8uLi9lbnVtL2ZpbGUtdHlwZVwiO1xuaW1wb3J0IHtEb2N1bWVudEVtYWlsUmVwb3J0fSBmcm9tIFwiLi4vLi4vZW51bS9kb2N1bWVudC1lbWFpbC1yZXBvcnQuZW51bVwiO1xuaW1wb3J0IHtUYWdzQ29tcG9uZW50Q29uZmlnTmFtZXN9IGZyb20gXCIuLi8uLi9lbnVtL3RhZ3MtY29tcG9uZW50LWNvbmZpZy1uYW1lc1wiO1xuaW1wb3J0IHtEb21haW5NdWx0aXBsZU5hbWV9IGZyb20gXCIuLi8uLi9lbnVtL2RvbWFpbi1tdWx0aXBsZS1uYW1lLmVudW1cIjtcbmltcG9ydCB7VGFnVHJlZUl0ZW19IGZyb20gXCIuLi8uLi9tb2RlbC90YWctdHJlZS1pdGVtLmJvXCI7XG5pbXBvcnQge0ZpbGVUeXBlSW1hZ2VQaXBlfSBmcm9tIFwiLi4vLi4vcGlwZS9maWxlLXR5cGUtaW1hZ2UucGlwZVwiO1xuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC91dGlscy9maWxlLXV0aWxzXCI7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwiY28tZmlsZS11cGxvYWQtcG9wdXBcIixcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8Y28tZGlhbG9nICpuZ0lmPVwiIXVzZVdpdGhvdXRTZXR0aW5nUHJvcHMgJiYgZG9jdW1lbnRVbmRlckVkaXRcIiBjc3NJZD1cInBvcHVwX2ZpbGVzX3VwbG9hZF9jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICBbaGVhZGVyVGVtcGxhdGVdPVwiaGVhZGVyVGVtcGxhdGVcIiBjb250ZW50U2l6ZSBub0NsaWNrT3V0c2lkZVxuICAgICAgICAgICAgICAgICAgIChjbG9zZSk9XCJvblBvcHVwQ2xvc2UoKVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWRpYWxvZy13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtdXBsb2FkLWZvcm0td3JhcHBlclwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIxMHB4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxjby1mb3JtIGNsYXNzPVwibmFycm93LXNjcm9sbGJhclwiICh2YWxpZFN1Ym1pdCk9XCJvblZhbGlkU3VibWl0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWxheW91dC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnQtdGh1bWIgY29sdW1uLWxlZnRcIiAqbmdJZj1cIiFhZGREb2N1bWVudEJ5VXJsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJvblByZXZpZXdDbGljaygpXCI+PGltZyBbc3JjXT1cInRodW1ibmFpbFwiLz48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJkb2N1bWVudFVuZGVyRWRpdC5maWxlU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NjcmVlbkNvbmZpZ3VyYXRpb25PYmplY3RdPVwiZG9jdW1lbnRVbmRlckVkaXQuaXNJbWFnZURvY3VtZW50KCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5JbWFnZURvY3VtZW50RmlsZVNpemUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5UZXh0RG9jdW1lbnRGaWxlU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTSVpFJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9WYWxpZGF0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvLWlucHV0LXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0IFtwbGFjZWhvbGRlcl09XCInRElNRU5TSU9OUycgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwiZG9jdW1lbnRVbmRlckVkaXQuaW1hZ2VEaW1lbnNpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JlZW5Db25maWd1cmF0aW9uT2JqZWN0XT1cImZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cz8uSW1hZ2VEb2N1bWVudERpbWVuc2lvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VSZWFkb25seSBub1ZhbGlkYXRpb24+PC9jby1pbnB1dC10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJkb2N1bWVudFVuZGVyRWRpdC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NjcmVlbkNvbmZpZ3VyYXRpb25PYmplY3RdPVwiZG9jdW1lbnRVbmRlckVkaXQuaXNJbWFnZURvY3VtZW50KCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5JbWFnZURvY3VtZW50VGl0bGUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5UZXh0RG9jdW1lbnRUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUSVRMRTInIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vVmFsaWRhdGlvbiBmb3JjZVJlYWRvbmx5PjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLTxzYy10YWdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhZ0NhdGVnb3J5XT1cInRhZ0NhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZG9jVW5kZXJFZGl0SXNSZWFkT25seVwiLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPjwvc2MtdGFncz4tLT48IS0tIFtteUNmZ05hbWVzXT1cInRhZ3NDb25maWdOYW1lXCIgfCBbKGpvaW5lZFRhZ3MpXT1cInRoaXMuZG9jdW1lbnRVbmRlckVkaXQudGFnc1wiLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS08ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVhZC13cml0ZS1hY2Nlc3MgKm5nSWY9XCJzaG93UmVhZFdyaXRlQWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRXcml0ZUNmZ05hbWVzXT1cImZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cz8ucmVhZFdyaXRlQWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xheW91dEhvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttZWRpY2FsVXNlckdyb3Vwc109XCJtZWRpY2FsVXNlckdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsodXNlckdyb3Vwc0ZvcldyaXRlKV09XCJ1c2VyR3JvdXBzRm9yV3JpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHVzZXJHcm91cHNGb3JSZWFkKV09XCJ1c2VyR3JvdXBzRm9yUmVhZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9yZWFkLXdyaXRlLWFjY2Vzcz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLTxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWxheW91dC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWRkRG9jdW1lbnRCeVVybFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dCByZXF1aXJlZCBbcGxhY2Vob2xkZXJdPVwiJ1VSTCcgfCBsb2NhbGl6ZVwiIFsobW9kZWwpXT1cImRvY3VtZW50VW5kZXJFZGl0LmZpbGVQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRvY1VuZGVyRWRpdElzUmVhZE9ubHlcIj48L2NvLWlucHV0LXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWxheW91dC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHQgW3BsYWNlaG9sZGVyXT1cIidERVNDUklQVElPTicgfCBsb2NhbGl6ZVwiIFsobW9kZWwpXT1cImRvY3VtZW50VW5kZXJFZGl0LmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NjcmVlbkNvbmZpZ3VyYXRpb25PYmplY3RdPVwiZG9jdW1lbnRVbmRlckVkaXQuaXNJbWFnZURvY3VtZW50KCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5JbWFnZURvY3VtZW50RGVzY3JpcHRpb24gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5UZXh0RG9jdW1lbnREZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvY28taW5wdXQtdGV4dD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS08ZGl2ICpuZ0lmPVwiaGFzUHVibGljQWNjZXNzVmlzaWJsZVwiIGNsYXNzPVwiY29sdW1uLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dC1zd2l0Y2hlci15ZXMtbm8gbGFiZWw9XCJQVUJMSUNfQUNDRVNTXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJkb2N1bWVudFVuZGVyRWRpdC5oYXNQdWJsaWNBY2Nlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaW5wdXQtc3dpdGNoZXIteWVzLW5vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG9yaXpvbnRhbC1sYXlvdXQtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQtc3dpdGNoZXIteWVzLW5vIGxhYmVsPVwiRE9XTkxPQURBQkxFXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwiZG9jdW1lbnRVbmRlckVkaXQuZG93bmxvYWRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NmZ05hbWVdPVwiZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5UZXh0RG9jdW1lbnREb3dubG9hZGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZG9jVW5kZXJFZGl0SXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pbnB1dC1zd2l0Y2hlci15ZXMtbm8+LS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG9yaXpvbnRhbC1sYXlvdXQtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGVUeXBlID09PSBmaWxlVHlwZXMuVGhyZWVERmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQtc3dpdGNoZXIteWVzLW5vIGxhYmVsPVwiQUxTT19BU19VU0RaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwiZG9jdW1lbnRVbmRlckVkaXQuY29udmVydFRvVVNEWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2lucHV0LXN3aXRjaGVyLXllcy1ubz4tLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWxheW91dC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZG9jdW1lbnRVbmRlckVkaXQuaXNJbWFnZURvY3VtZW50KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1sZWZ0XCI+PCEtLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0LXN3aXRjaGVyLXllcy1ubyBsYWJlbD1cIkFUVEFDSF9UT19OT1RJRklDQVRJT05cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJkb2N1bWVudFVuZGVyRWRpdC5hdHRhY2hUb05vdGlmaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZmdOYW1lXT1cImZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cz8uSW1hZ2VEb2N1bWVudEF0dGFjaE5vdGlmaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2lucHV0LXN3aXRjaGVyLXllcy1ubz4tLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tcmlnaHRcIj48IS0tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1hZ2UtdHlwZS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NmZ05hbWVdPVwiZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5JbWFnZURvY3VtZW50RGlzcGxheVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTW9kZWxJZCldPVwidGhpcy5kb2N1bWVudFVuZGVyRWRpdC5pbWFnZURpc3BsYXlLaW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRvY1VuZGVyRWRpdElzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkRJU1BMQVlfVFlQRVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pbWFnZS10eXBlLXNlbGVjdD4tLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNXb3JrYWJpbGl0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bXVsdGlwbGUtcHJvcGVydHktdG9nZ2xlciAqbmdJZj1cIiFzaG93RG9jdW1lbnRSZXBvcnRQaWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnR5TmFtZXNUb1RvZ2dsZV09XCJkb2N1bWVudFB1YmxpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoZW5hYmxlZGl0ZW1zKV09XCJ0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnB1YmxpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblByb3BlcnR5SXRlbUNoYW5nZSk9XCJoYW5kbGVQcm9wZXJ0eUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiUFVCTElTSF9UT1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZG9jVW5kZXJFZGl0SXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbXVsdGlwbGUtcHJvcGVydHktdG9nZ2xlcj4tLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28tbXVsdGlwbGUtcHJvcGVydHktdG9nZ2xlciAqbmdJZj1cInNob3dEb2N1bWVudFJlcG9ydFBpY2tlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydHlOYW1lc1RvVG9nZ2xlXT1cImRvY3VtZW50RW1haWxSZXBvcnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoZW5hYmxlZGl0ZW1zKV09XCJkb2N1bWVudFVuZGVyRWRpdC5yZXBvcnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblByb3BlcnR5SXRlbUNoYW5nZSk9XCJoYW5kbGVSZXBvcnRzUHJvcGVydHlDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlJFUE9SVFNfVE9fQVRUQUNIX1RPXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1tdWx0aXBsZS1wcm9wZXJ0eS10b2dnbGVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLTxuZy1jb250YWluZXIgKm5nSWY9XCJkb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVXcmFwcGVyXT1cInRlbXBsYXRlSW1hZ2VcIj48L25nLWNvbnRhaW5lcj4tLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2NvLWZvcm0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2stY2FuY2VsLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGNvLWJ1dHRvbiBbZGlzYWJsZWRdPVwiZG9jVW5kZXJFZGl0SXNSZWFkT25seVwiIFt0ZXh0Q29udGVudF09XCInT0snIHwgbG9jYWxpemVcIiAoY2xpY2spPVwib25Qb3B1cE9rQ2xpY2soKVwiPjwvY28tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8Y28tYnV0dG9uICpuZ0lmPVwiaGlkZUNhbmNlbFwiIFt0ZXh0Q29udGVudF09XCInU1RJQ0tFUicgfCBsb2NhbGl6ZVwiIChjbGljayk9XCJvblBvcHVwQ2FuY2VsQ2xpY2soKVwiPjwvY28tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8IS0tICA8ZGVmYXVsdC1vay1jYW5jZWwtYnV0dG9ucyBjbGFzcz1cImp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29rRGlzYWJsZWRdPVwiZG9jVW5kZXJFZGl0SXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlQ2FuY2VsXT1cImhpZGVDYW5jZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2tDbGljayk9XCJvblBvcHVwT2tDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbmNlbENsaWNrKT1cIm9uUG9wdXBDYW5jZWxDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGVmYXVsdC1vay1jYW5jZWwtYnV0dG9ucz4tLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2NvLWRpYWxvZz5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgW3RleHRDb250ZW50XT1cInBvcHVwSGVhZGVyIHwgbG9jYWxpemVcIj48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZUltYWdlICpuZ0lmPVwiIWlzV29ya2FiaWxpdHlcIj5cbiAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sdW1uLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0LWxvdi1tdWx0aS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjZmdOYW1lXT1cImZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cy5JbWFnZURvY3VtZW50U3RvcmVHcm91cHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE1vZGVsSWRzKV09XCJzdG9yZUdyb3VwSWRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xsZWN0aW9uXT1cInN0b3JlR3JvdXBzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uRmllbGQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkb05vdExvYWRDb2xsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21XaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJSRVRBSUxfRk9STVVMQVNcIlxuICAgICAgICAgICAgICAgID48L2lucHV0LWxvdi1tdWx0aS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj4tLT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgLFxuICAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuLy8gQ29tcG9uZW50IHRoYXQgc2hvd3MgYSBwb3B1cCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIHVwbG9hZCBhIENvRG9jdW1lbnRcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkUG9wdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoRm9ybUNvbXBvbmVudClcbiAgICBwdWJsaWMgZm9ybTogRm9ybUNvbXBvbmVudDtcblxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgcHVibGljIHVzZVdpdGhvdXRTZXR0aW5nUHJvcHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgcHVibGljIGhhc1B1YmxpY0FjY2Vzc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgLy90b2RvIHRoaXMgaXMgdXN1YWxseSBzZXQgdG8gZmFsc2Ugb24gaW5pdFxuICAgIHB1YmxpYyBzaG93RG9jdW1lbnRSZXBvcnRQaWNrZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZG9jdW1lbnRVbmRlckVkaXQoZG9jOiBDb0RvY3VtZW50KSB7XG4gICAgICAgIHRoaXMuX2RvY3VtZW50VW5kZXJFZGl0ID0gZG9jID8gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ29Eb2N1bWVudCwgZG9jKSBhcyB1bmtub3duIGFzIENvRG9jdW1lbnQgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkb2N1bWVudFVuZGVyRWRpdCgpOiBDb0RvY3VtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50VW5kZXJFZGl0O1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgLy90aGlzLl90b2FzdFNlcnZpY2Uuc3Bhd25Ub2FzdChcIk1FU1NBR0VfRE9DVU1FTlRfTE9DS19TSU5HTEVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzKHZhbHVlOiBGaWxlc1VwbG9hZENvbmZpZ09iamVjdHMpIHtcbiAgICAgICAgdGhpcy5fZmlsZXNVcGxvYWRDb25maWdPYmplY3RzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGFnQ2F0ZWdvcnk6IFRhZ0NhdGVnb3J5O1xuXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBwdWJsaWMgbWVkaWNhbFVzZXJHcm91cHM6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5UmVhZFdyaXRlQWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRhZ1JlZmVyZW5jZVRhYmxlOiBUYWJsZU5hbWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkb2N1bWVudEtleTogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZG9jdW1lbnRUYWJsZTogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmlsZVR5cGU6IEZpbGVUeXBlO1xuXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBwdWJsaWMgYWRkRG9jdW1lbnRCeVVybDogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBkb2N1bWVudENoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8Q29Eb2N1bWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENvRG9jdW1lbnQ+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgcG9wdXBDbG9zZUV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvLWZpbGUtdXBsb2FkLXBvcHVwJylcbiAgICBwdWJsaWMgc2hvd0NsYXNzKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnRQdWJsaWNhdGlvbjogdHlwZW9mIERvY3VtZW50UHVibGljYXRpb24gPSBEb2N1bWVudFB1YmxpY2F0aW9uO1xuICAgIHB1YmxpYyByZWFkb25seSBkb2N1bWVudEVtYWlsUmVwb3J0czogdHlwZW9mIERvY3VtZW50RW1haWxSZXBvcnQgPSBEb2N1bWVudEVtYWlsUmVwb3J0O1xuXG4gICAgcHVibGljIGdldCBzaG93UmVhZFdyaXRlQWNjZXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICAvL1RPRE8gZ2V0IHVzZXJyaWdodHNcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vcmV0dXJuIHRoaXMuX3VzZXJSaWdodHMud29ya2FiaWxpdHlQYXJhbWV0ZXJFbmFibGVkICYmIHRoaXMuZGlzcGxheVJlYWRXcml0ZUFjY2VzcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cygpOiBGaWxlc1VwbG9hZENvbmZpZ09iamVjdHMge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZXNVcGxvYWRDb25maWdPYmplY3RzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNXb3JrYWJpbGl0eSgpOiBib29sZWFuIHtcbiAgICAgIC8vVE9ETyBmaXggd29ya2FiaWxpdHlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgLy9yZXR1cm4gdGhpcy5fd29ya2FiaWxpdHlTZXJ2aWNlLndvcmthYmlsaXR5U3lzdGVtRW5hYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRvY1VuZGVyRWRpdElzUmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnJlYWRvbmx5IHx8IHRoaXMuX3JlYWRvbmx5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGh1bWJuYWlsKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50VW5kZXJFZGl0LmlzSW1hZ2VEb2N1bWVudCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGh1bWJuYWlsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVUeXBlSW1nUGlwZS50cmFuc2Zvcm0odGhpcy5kb2N1bWVudFVuZGVyRWRpdC5maWxlVHlwZUludGVybmFsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBvcHVwSGVhZGVyKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50VW5kZXJFZGl0ICYmIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQuaXNJbWFnZURvY3VtZW50KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBcIklNQUdFXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXCJET0NVTUVOVFwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwdWJsaWNhdGlvbkNvbmZpZ05hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZXNVcGxvYWRDb25maWdPYmplY3RzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKSA/XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlc1VwbG9hZENvbmZpZ09iamVjdHMuSW1hZ2VEb2N1bWVudFB1Ymxpc2hUbyA6XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlc1VwbG9hZENvbmZpZ09iamVjdHMuVGV4dERvY3VtZW50UHVibGlzaFRvO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBObyBjb25maWduYW1lIGZvdW5kXG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHB1YmxpYyBnZXQgdGFnc0NvbmZpZ05hbWUoKTogVGFnc0NvbXBvbmVudENvbmZpZ05hbWVzIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZXNVcGxvYWRDb25maWdPYmplY3RzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKSA/XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlc1VwbG9hZENvbmZpZ09iamVjdHMuVGFnc0ltYWdlQ29uZmlnTmFtZXMgOlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNVcGxvYWRDb25maWdPYmplY3RzLlRhZ3NUZXh0Q29uZmlnTmFtZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIE5vIGNvbmZpZ25hbWUgZm91bmRcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWFkb25seSBkb21haW46IHR5cGVvZiBEb21haW5NdWx0aXBsZU5hbWUgPSBEb21haW5NdWx0aXBsZU5hbWU7XG4gICAgcHVibGljIHJlYWRvbmx5IGZpbGVUeXBlczogdHlwZW9mIEZpbGVUeXBlID0gRmlsZVR5cGU7XG5cbiAgICBwdWJsaWMgX2RvY3VtZW50VW5kZXJFZGl0OiBDb0RvY3VtZW50O1xuICAgIHB1YmxpYyBoaWRlQ2FuY2VsOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHN0b3JlR3JvdXBzOiBTdG9yZUdyb3VwW10gPSBbXTtcbiAgICBwdWJsaWMgcHVibGljYXRpb25JZHM6IG51bWJlcltdO1xuICAgIHB1YmxpYyBzdG9yZUdyb3VwSWRzOiBzdHJpbmdbXTtcbiAgICBwdWJsaWMgdXNlckdyb3Vwc0ZvcldyaXRlOiBudW1iZXJbXSA9IFtdO1xuICAgIHB1YmxpYyB1c2VyR3JvdXBzRm9yUmVhZDogbnVtYmVyW10gPSBbXTtcbiAgICBwdWJsaWMgZG9jdW1lbnRUYWdzOiBUYWdUcmVlSXRlbVtdID0gW107XG5cbiAgICBwcml2YXRlIF9maWxlc1VwbG9hZENvbmZpZ09iamVjdHM6IEZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cyA9IHt9OyAvLyBJbnN0YW50aWF0ZSB3aXRoIGVtcHR5IG9iamVjdCB0byBhdm9pZCBudWxscG9pbnRlcnMgaW4gdGhlIHRlbXBsYXRlXG4gICAgcHJpdmF0ZSBfYm9GYWN0b3J5OiBCdXNpbmVzc09iamVjdEZhY3RvcnkgPSBuZXcgQnVzaW5lc3NPYmplY3RGYWN0b3J5KCk7XG4gICAgcHJpdmF0ZSBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9wdWJsaWNhdGlvbk51bWJlcjogbnVtYmVyO1xuICAgIHByaXZhdGUgX3JlcG9ydHNOdW1iZXI6IG51bWJlcjtcblxuICAgIHByaXZhdGUgX3RodW1ibmFpbDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIC8vcHJpdmF0ZSBfd29ya2FiaWxpdHlTZXJ2aWNlOiBBcHBXb3JrYWJpbGl0eVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3Byb21wdFNlcnZpY2U6IFByb21wdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVUeXBlSW1nUGlwZTogRmlsZVR5cGVJbWFnZVBpcGUsXG4gICAgICAgIC8vcHJpdmF0ZSBfdXNlclJpZ2h0czogVXNlclJpZ2h0c1NlcnZpY2UsXG4gICAgICAgIC8vcHJpdmF0ZSBfYmFzZURhdGFSZXBvOiBCYXNlRGF0YURhbFJlcG9zaXRvcnksXG4gICAgICAgIC8vcHJpdmF0ZSBfdGFnc1JlcG86IFRhZ3NEYWxSZXBvc2l0b3J5LFxuICAgICAgICAvL3ByaXZhdGUgX2RhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICAgICAgLy9wcml2YXRlIF90b2FzdFNlcnZpY2U6IEFwcFRvYXN0U2VydmljZVxuICAgICkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRDb2xsZWN0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50VW5kZXJFZGl0LmlzSW1hZ2VEb2N1bWVudCgpKSB7XG4gICAgICAgICAgICB0aGlzLl90aHVtYm5haWwgPSB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LmRvY3VtZW50Qm9keUFzRGF0YVVyaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkQ29sbGVjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy90aGlzLmRvY3VtZW50VGFncyA9IGF3YWl0IHRoaXMuX3RhZ3NSZXBvLmdldEpvaW5lZFRhZ3ModGhpcy50YWdSZWZlcmVuY2VUYWJsZSwgdGhpcy5kb2N1bWVudEtleSk7XG4gICAgICAgIC8vdGhpcy5zdG9yZUdyb3VwcyA9IGF3YWl0IHRoaXMuX2Jhc2VEYXRhUmVwby5nZXRTdG9yZUdyb3VwTGlzdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblByZXZpZXdDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRVbmRlckVkaXQuaXNJbWFnZURvY3VtZW50KCkpIHsgLy9wcmV2aWV3IGltYWdlXG4gICAgICAgICAgICB0aGlzLl9wcm9tcHRTZXJ2aWNlLnNob3dJbWFnZSh0aGlzLmRvY3VtZW50VW5kZXJFZGl0LmRvY3VtZW50Qm9keUFzRGF0YVVyaSwgXCJQcmV2aWV3XCIpO1xuICAgICAgICB9IGVsc2UgeyAvL2Rvd25sb2FkIGRvY3VtZW50XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIEZpbGVVdGlscy5Eb3dubG9hZEZyb21EYXRhVXJpKHRoaXMuZG9jdW1lbnRVbmRlckVkaXQuYm9keUFzRGF0YVVyaSwgdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5maWxlTmFtZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZURvY3VtZW50VW5kZXJFZGl0UmlnaHRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnJpZ2h0cyA9IFtdO1xuICAgICAgICBjb25zdCBmb3JXcml0ZUxlbmd0aDogbnVtYmVyID0gdGhpcy51c2VyR3JvdXBzRm9yV3JpdGUubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZm9yV3JpdGVMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmlnaHRzOiBDb0RvY3VtZW50UmlnaHQgPSBuZXcgQ29Eb2N1bWVudFJpZ2h0KCk7XG4gICAgICAgICAgICByaWdodHMudXNlckdyb3VwSWQgPSB0aGlzLnVzZXJHcm91cHNGb3JXcml0ZVtpXTtcbiAgICAgICAgICAgIHJpZ2h0cy5yaWdodExldmVsID0gT2JqZWN0UmlnaHRUeXBlLlJlYWRXcml0ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQucmlnaHRzLnB1c2gocmlnaHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvclJlYWRMZW5ndGg6IG51bWJlciA9IHRoaXMudXNlckdyb3Vwc0ZvclJlYWQubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZm9yUmVhZExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByaWdodHM6IENvRG9jdW1lbnRSaWdodCA9IG5ldyBDb0RvY3VtZW50UmlnaHQoKTtcbiAgICAgICAgICAgIHJpZ2h0cy51c2VyR3JvdXBJZCA9IHRoaXMudXNlckdyb3Vwc0ZvclJlYWRbaV07XG4gICAgICAgICAgICByaWdodHMucmlnaHRMZXZlbCA9IE9iamVjdFJpZ2h0VHlwZS5SZWFkT25seTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQucmlnaHRzLnB1c2gocmlnaHRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblBvcHVwT2tDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnN1Ym1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVByb3BlcnR5Q2hhbmdlKHJlZlN1bU9mRW5hYmxlZEl0ZW1zOiBudW1iZXIpOiBhbnkge1xuICAgICAgICB0aGlzLl9wdWJsaWNhdGlvbk51bWJlciA9IHJlZlN1bU9mRW5hYmxlZEl0ZW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVSZXBvcnRzUHJvcGVydHlDaGFuZ2UocmVmU3VtT2ZFbmFibGVkSXRlbXM6IG51bWJlcik6IGFueSB7XG4gICAgICAgIHRoaXMuX3JlcG9ydHNOdW1iZXIgPSByZWZTdW1PZkVuYWJsZWRJdGVtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25WYWxpZFN1Ym1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fcHVibGljYXRpb25OdW1iZXIgPyB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnB1YmxpY2F0aW9uID0gdGhpcy5fcHVibGljYXRpb25OdW1iZXIgOiB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnB1YmxpY2F0aW9uID0gMDtcbiAgICAgICAgdGhpcy5fcmVwb3J0c051bWJlciA/IHRoaXMuZG9jdW1lbnRVbmRlckVkaXQucmVwb3J0cyA9IHRoaXMuX3JlcG9ydHNOdW1iZXIgOiB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnJlcG9ydHMgPSAwO1xuICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnJldGFpbEZvcm11bGFzID0gdGhpcy5zdG9yZUdyb3VwSWRzO1xuICAgICAgICB0aGlzLnNhdmVEb2N1bWVudFVuZGVyRWRpdFJpZ2h0cygpO1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlRXZlbnQuZW1pdCh0aGlzLmRvY3VtZW50VW5kZXJFZGl0KTtcbiAgICAgICAgdGhpcy5vblBvcHVwQ2xvc2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25Qb3B1cENhbmNlbENsaWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLm9uUG9wdXBDbG9zZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBvcHVwQ2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlckdyb3Vwc0ZvcldyaXRlLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMudXNlckdyb3Vwc0ZvclJlYWQubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5kb2N1bWVudFVuZGVyRWRpdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnBvcHVwQ2xvc2VFdmVudC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLypwcml2YXRlIF91bmxvY2tEb2N1bWVudChkb2M6IENvRG9jdW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkb2MucmVhZG9ubHkgJiYgIXRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTZXJ2aWNlLnVubG9jayhDb0RvY3VtZW50LCBkb2MuZG9jdW1lbnRJZCk7XG4gICAgICAgIH1cbiAgICB9Ki9cbn1cbiJdfQ==
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { Component, EventEmitter, HostBinding, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
3
+ import { FormComponent } from '@colijnit/corecomponents_v12';
4
+ import { DocumentPublication } from "@colijnit/articleapi/build/enum/refcode/document-publication.enum";
5
+ import { ObjectRightType } from "@colijnit/sharedapi/build/enum/object-right-type.enum";
6
+ import { PromptService } from "@colijnit/corecomponents_v12";
7
+ import { BusinessObjectFactory } from "@colijnit/ioneconnector/build/service/business-object-factory";
8
+ import { InputBoolean } from "../../decorator/input-boolean.decorator";
9
+ import { CoDocument } from "@colijnit/mainapi/build/model/co-document";
10
+ import { CoDocumentRight } from "@colijnit/mainapi/build/model/co-document-right";
11
+ import { FileType } from "../../enum/file-type";
12
+ import { DocumentEmailReport } from "../../enum/document-email-report.enum";
13
+ import { DomainMultipleName } from "../../enum/domain-multiple-name.enum";
14
+ import { FileTypeImagePipe } from "../../pipe/file-type-image.pipe";
15
+ import { FileUtils } from "@colijnit/mainapi/build/utils/file-utils";
16
+ // Component that shows a popup when the user wants to upload a CoDocument
17
+ export class FileUploadPopupComponent {
18
+ constructor(
19
+ //private _workabilityService: AppWorkabilityService,
20
+ _promptService, _fileTypeImgPipe) {
21
+ this._promptService = _promptService;
22
+ this._fileTypeImgPipe = _fileTypeImgPipe;
23
+ this.useWithoutSettingProps = false;
24
+ this.hasPublicAccessVisible = false;
25
+ this.showDocumentReportPicker = true;
26
+ this.displayReadWriteAccess = true;
27
+ this.documentChangeEvent = new EventEmitter();
28
+ this.popupCloseEvent = new EventEmitter();
29
+ this.documentPublication = DocumentPublication;
30
+ this.documentEmailReports = DocumentEmailReport;
31
+ this.domain = DomainMultipleName;
32
+ this.fileTypes = FileType;
33
+ this.hideCancel = false;
34
+ this.storeGroups = [];
35
+ this.userGroupsForWrite = [];
36
+ this.userGroupsForRead = [];
37
+ this.documentTags = [];
38
+ this._filesUploadConfigObjects = {}; // Instantiate with empty object to avoid nullpointers in the template
39
+ this._boFactory = new BusinessObjectFactory();
40
+ this._readonly = false;
41
+ }
42
+ set documentUnderEdit(doc) {
43
+ this._documentUnderEdit = doc ? this._boFactory.makeWithRawBackendData(CoDocument, doc) : undefined;
44
+ }
45
+ get documentUnderEdit() {
46
+ return this._documentUnderEdit;
47
+ }
48
+ set readonly(value) {
49
+ this._readonly = value;
50
+ if (value) {
51
+ //this._toastService.spawnToast("MESSAGE_DOCUMENT_LOCK_SINGLE");
52
+ }
53
+ }
54
+ set filesUploadConfigObjects(value) {
55
+ this._filesUploadConfigObjects = value;
56
+ }
57
+ showClass() {
58
+ return true;
59
+ }
60
+ get showReadWriteAccess() {
61
+ //TODO get userrights
62
+ return true;
63
+ //return this._userRights.workabilityParameterEnabled && this.displayReadWriteAccess;
64
+ }
65
+ get filesUploadConfigObjects() {
66
+ return this._filesUploadConfigObjects;
67
+ }
68
+ get isWorkability() {
69
+ //TODO fix workability
70
+ return false;
71
+ //return this._workabilityService.workabilitySystemEnabled;
72
+ }
73
+ get docUnderEditIsReadOnly() {
74
+ return this.documentUnderEdit.readonly || this._readonly;
75
+ }
76
+ get thumbnail() {
77
+ if (this.documentUnderEdit.isImageDocument()) {
78
+ return this._thumbnail;
79
+ }
80
+ return this._fileTypeImgPipe.transform(this.documentUnderEdit.fileTypeInternal);
81
+ }
82
+ get popupHeader() {
83
+ if (this.documentUnderEdit && this.documentUnderEdit.isImageDocument()) {
84
+ return "IMAGE";
85
+ }
86
+ else {
87
+ return "DOCUMENT";
88
+ }
89
+ }
90
+ get publicationConfigName() {
91
+ if (this.filesUploadConfigObjects) {
92
+ return this.documentUnderEdit.isImageDocument() ?
93
+ this.filesUploadConfigObjects.ImageDocumentPublishTo :
94
+ this.filesUploadConfigObjects.TextDocumentPublishTo;
95
+ }
96
+ else {
97
+ return; // No configname found
98
+ }
99
+ }
100
+ get tagsConfigName() {
101
+ if (this.filesUploadConfigObjects) {
102
+ return this.documentUnderEdit.isImageDocument() ?
103
+ this.filesUploadConfigObjects.TagsImageConfigNames :
104
+ this.filesUploadConfigObjects.TagsTextConfigNames;
105
+ }
106
+ else {
107
+ return; // No configname found
108
+ }
109
+ }
110
+ ngOnInit() {
111
+ this.loadCollection();
112
+ if (this.documentUnderEdit.isImageDocument()) {
113
+ this._thumbnail = this.documentUnderEdit.documentBodyAsDataUri;
114
+ }
115
+ }
116
+ loadCollection() {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ //this.documentTags = await this._tagsRepo.getJoinedTags(this.tagReferenceTable, this.documentKey);
119
+ //this.storeGroups = await this._baseDataRepo.getStoreGroupList();
120
+ });
121
+ }
122
+ onPreviewClick() {
123
+ if (this.documentUnderEdit.isImageDocument()) { //preview image
124
+ this._promptService.showImage(this.documentUnderEdit.documentBodyAsDataUri, "Preview");
125
+ }
126
+ else { //download document
127
+ try {
128
+ FileUtils.DownloadFromDataUri(this.documentUnderEdit.bodyAsDataUri, this.documentUnderEdit.fileName);
129
+ }
130
+ catch (error) {
131
+ }
132
+ }
133
+ }
134
+ saveDocumentUnderEditRights() {
135
+ this.documentUnderEdit.rights = [];
136
+ const forWriteLength = this.userGroupsForWrite.length;
137
+ for (let i = 0; i < forWriteLength; i++) {
138
+ const rights = new CoDocumentRight();
139
+ rights.userGroupId = this.userGroupsForWrite[i];
140
+ rights.rightLevel = ObjectRightType.ReadWrite;
141
+ this.documentUnderEdit.rights.push(rights);
142
+ }
143
+ const forReadLength = this.userGroupsForRead.length;
144
+ for (let i = 0; i < forReadLength; i++) {
145
+ const rights = new CoDocumentRight();
146
+ rights.userGroupId = this.userGroupsForRead[i];
147
+ rights.rightLevel = ObjectRightType.ReadOnly;
148
+ this.documentUnderEdit.rights.push(rights);
149
+ }
150
+ }
151
+ onPopupOkClick() {
152
+ if (this.form) {
153
+ this.form.submit();
154
+ }
155
+ }
156
+ handlePropertyChange(refSumOfEnabledItems) {
157
+ this._publicationNumber = refSumOfEnabledItems;
158
+ }
159
+ handleReportsPropertyChange(refSumOfEnabledItems) {
160
+ this._reportsNumber = refSumOfEnabledItems;
161
+ }
162
+ onValidSubmit() {
163
+ return __awaiter(this, void 0, void 0, function* () {
164
+ this._publicationNumber ? this.documentUnderEdit.publication = this._publicationNumber : this.documentUnderEdit.publication = 0;
165
+ this._reportsNumber ? this.documentUnderEdit.reports = this._reportsNumber : this.documentUnderEdit.reports = 0;
166
+ this.documentUnderEdit.retailFormulas = this.storeGroupIds;
167
+ this.saveDocumentUnderEditRights();
168
+ this.documentChangeEvent.emit(this.documentUnderEdit);
169
+ this.onPopupClose();
170
+ });
171
+ }
172
+ onPopupCancelClick() {
173
+ return __awaiter(this, void 0, void 0, function* () {
174
+ this.onPopupClose();
175
+ });
176
+ }
177
+ onPopupClose() {
178
+ this.userGroupsForWrite.length = 0;
179
+ this.userGroupsForRead.length = 0;
180
+ this.documentUnderEdit = undefined;
181
+ this.popupCloseEvent.next();
182
+ }
183
+ }
184
+ FileUploadPopupComponent.decorators = [
185
+ { type: Component, args: [{
186
+ selector: "co-file-upload-popup",
187
+ template: `
188
+ <co-dialog *ngIf="!useWithoutSettingProps && documentUnderEdit" cssId="popup_files_upload_content"
189
+ [headerTemplate]="headerTemplate" contentSize noClickOutside
190
+ (close)="onPopupClose()">
191
+ <div class="co-dialog-wrapper">
192
+ <div class="file-upload-form-wrapper" fxLayout="column" fxLayoutGap="10px">
193
+ <co-form class="narrow-scrollbar" (validSubmit)="onValidSubmit()">
194
+ <div class="horizontal-layout-column">
195
+ <div class="document-thumb column-left" *ngIf="!addDocumentByUrl">
196
+ <a (click)="onPreviewClick()"><img [src]="thumbnail"/></a>
197
+ </div>
198
+ <div class="column-right">
199
+ <co-input-text
200
+ [model]="documentUnderEdit.fileSize"
201
+ [screenConfigurationObject]="documentUnderEdit.isImageDocument() ?
202
+ filesUploadConfigObjects?.ImageDocumentFileSize :
203
+ filesUploadConfigObjects?.TextDocumentFileSize"
204
+ [placeholder]="'SIZE' | localize"
205
+ forceReadonly
206
+ noValidation>
207
+ </co-input-text>
208
+ <ng-container *ngIf="documentUnderEdit.isImageDocument()">
209
+ <co-input-text [placeholder]="'DIMENSIONS' | localize"
210
+ [model]="documentUnderEdit.imageDimensions"
211
+ [screenConfigurationObject]="filesUploadConfigObjects?.ImageDocumentDimensions"
212
+ forceReadonly noValidation></co-input-text>
213
+ </ng-container>
214
+ <co-input-text
215
+ [(model)]="documentUnderEdit.title"
216
+ [screenConfigurationObject]="documentUnderEdit.isImageDocument() ?
217
+ filesUploadConfigObjects?.ImageDocumentTitle :
218
+ filesUploadConfigObjects?.TextDocumentTitle"
219
+ [placeholder]="'TITLE2' | localize"
220
+ noValidation forceReadonly></co-input-text>
221
+ </div>
222
+ </div>
223
+
224
+ <div>
225
+ <!--<sc-tags
226
+ [tagCategory]="tagCategory"
227
+ [readonly]="docUnderEditIsReadOnly"-->
228
+
229
+ <!-- ></sc-tags>--><!-- [myCfgNames]="tagsConfigName" | [(joinedTags)]="this.documentUnderEdit.tags"-->
230
+ </div>
231
+ <!--<div>
232
+ <read-write-access *ngIf="showReadWriteAccess"
233
+ [readWriteCfgNames]="filesUploadConfigObjects?.readWriteAccess"
234
+ [layoutHorizontal]="true"
235
+ [medicalUserGroups]="medicalUserGroups"
236
+ [(userGroupsForWrite)]="userGroupsForWrite"
237
+ [(userGroupsForRead)]="userGroupsForRead"
238
+ [readonly]="docUnderEditIsReadOnly"
239
+ ></read-write-access>
240
+ </div>-->
241
+ <!--<div class="horizontal-layout-column">
242
+ <ng-container *ngIf="addDocumentByUrl">
243
+ <co-input-text required [placeholder]="'URL' | localize" [(model)]="documentUnderEdit.filePath"
244
+ [readonly]="docUnderEditIsReadOnly"></co-input-text>
245
+ </ng-container>
246
+ </div>-->
247
+ <div class="horizontal-layout-column">
248
+ <div class="column-left">
249
+ <co-input-text [placeholder]="'DESCRIPTION' | localize" [(model)]="documentUnderEdit.description"
250
+ [screenConfigurationObject]="documentUnderEdit.isImageDocument() ?
251
+ filesUploadConfigObjects?.ImageDocumentDescription :
252
+ filesUploadConfigObjects?.TextDocumentDescription"
253
+ [readonly]="docUnderEditIsReadOnly"
254
+ ></co-input-text>
255
+
256
+ </div>
257
+ <!--<div *ngIf="hasPublicAccessVisible" class="column-right">
258
+ <input-switcher-yes-no label="PUBLIC_ACCESS"
259
+ [(model)]="documentUnderEdit.hasPublicAccess"
260
+ [readonly]="docUnderEditIsReadOnly"
261
+ ></input-switcher-yes-no>
262
+ </div>-->
263
+ </div>
264
+ <div class="horizontal-layout-column">
265
+ <ng-container *ngIf="!documentUnderEdit.isImageDocument()">
266
+ <div class="column-left">
267
+ <!-- <input-switcher-yes-no label="DOWNLOADABLE"
268
+ [(model)]="documentUnderEdit.downloadable"
269
+ [cfgName]="filesUploadConfigObjects?.TextDocumentDownloadable"
270
+ [readonly]="docUnderEditIsReadOnly"
271
+ ></input-switcher-yes-no>-->
272
+ </div>
273
+ </ng-container>
274
+ </div>
275
+ <div class="horizontal-layout-column">
276
+ <ng-container *ngIf="fileType === fileTypes.ThreeDFile">
277
+ <div class="column-left">
278
+ <!-- <input-switcher-yes-no label="ALSO_AS_USDZ"
279
+ [(model)]="documentUnderEdit.convertToUSDZ"
280
+ [readonly]="docUnderEditIsReadOnly"
281
+ ></input-switcher-yes-no>-->
282
+ </div>
283
+ </ng-container>
284
+ </div>
285
+ <div class="horizontal-layout-column">
286
+ <ng-container *ngIf="documentUnderEdit.isImageDocument()">
287
+ <div class="column-left"><!--
288
+ <input-switcher-yes-no label="ATTACH_TO_NOTIFICATION"
289
+ [(model)]="documentUnderEdit.attachToNotification"
290
+ [cfgName]="filesUploadConfigObjects?.ImageDocumentAttachNotification"
291
+ [readonly]="docUnderEditIsReadOnly"
292
+ ></input-switcher-yes-no>-->
293
+ </div>
294
+ <div class="column-right"><!--
295
+ <image-type-select
296
+ [cfgName]="filesUploadConfigObjects?.ImageDocumentDisplayType"
297
+ [(selectedModelId)]="this.documentUnderEdit.imageDisplayKind"
298
+ [readonly]="docUnderEditIsReadOnly"
299
+ label="DISPLAY_TYPE"
300
+ ></image-type-select>-->
301
+ </div>
302
+ </ng-container>
303
+ </div>
304
+ <div *ngIf="!isWorkability">
305
+ <!-- <multiple-property-toggler *ngIf="!showDocumentReportPicker"
306
+ [propertyNamesToToggle]="documentPublication"
307
+ [(enableditems)]="this.documentUnderEdit.publication"
308
+ (onPropertyItemChange)="handlePropertyChange($event)"
309
+ label="PUBLISH_TO"
310
+ [readonly]="docUnderEditIsReadOnly"
311
+ ></multiple-property-toggler>-->
312
+ <co-multiple-property-toggler *ngIf="showDocumentReportPicker"
313
+ [propertyNamesToToggle]="documentEmailReports"
314
+ [(enableditems)]="documentUnderEdit.reports"
315
+ (onPropertyItemChange)="handleReportsPropertyChange($event)"
316
+ label="REPORTS_TO_ATTACH_TO"
317
+ [readonly]="docUnderEditIsReadOnly"
318
+ ></co-multiple-property-toggler>
319
+
320
+ <!--<ng-container *ngIf="documentUnderEdit.isImageDocument()"
321
+ [templateWrapper]="templateImage"></ng-container>-->
322
+ </div>
323
+ </co-form>
324
+ <div class="ok-cancel-buttons">
325
+ <co-button [disabled]="docUnderEditIsReadOnly" [textContent]="'OK' | localize" (click)="onPopupOkClick()"></co-button>
326
+ <co-button *ngIf="hideCancel" [textContent]="'STICKER' | localize" (click)="onPopupCancelClick()"></co-button>
327
+ </div>
328
+ <!-- <default-ok-cancel-buttons class="justify-center"
329
+ [okDisabled]="docUnderEditIsReadOnly"
330
+ [hideCancel]="hideCancel"
331
+ (okClick)="onPopupOkClick()"
332
+ (cancelClick)="onPopupCancelClick()">
333
+ </default-ok-cancel-buttons>-->
334
+ </div>
335
+ </div>
336
+ </co-dialog>
337
+ <ng-template #headerTemplate>
338
+ <div [textContent]="popupHeader | localize"></div>
339
+ </ng-template>
340
+ <ng-template #templateImage *ngIf="!isWorkability">
341
+ <!-- <div class="column-right">
342
+ <input-lov-multi-select
343
+ [cfgName]="filesUploadConfigObjects.ImageDocumentStoreGroups"
344
+ [(selectedModelIds)]="storeGroupIds"
345
+ [collection]="storeGroups"
346
+ [readonly]="docUnderEditIsReadOnly"
347
+ descriptionField="description"
348
+ doNotLoadCollection
349
+ customWidth
350
+ label="RETAIL_FORMULAS"
351
+ ></input-lov-multi-select>
352
+ </div>-->
353
+ </ng-template>
354
+ `,
355
+ encapsulation: ViewEncapsulation.None
356
+ },] }
357
+ ];
358
+ FileUploadPopupComponent.ctorParameters = () => [
359
+ { type: PromptService },
360
+ { type: FileTypeImagePipe }
361
+ ];
362
+ FileUploadPopupComponent.propDecorators = {
363
+ form: [{ type: ViewChild, args: [FormComponent,] }],
364
+ useWithoutSettingProps: [{ type: Input }],
365
+ hasPublicAccessVisible: [{ type: Input }],
366
+ showDocumentReportPicker: [{ type: Input }],
367
+ documentUnderEdit: [{ type: Input }],
368
+ readonly: [{ type: Input }],
369
+ filesUploadConfigObjects: [{ type: Input }],
370
+ tagCategory: [{ type: Input }],
371
+ medicalUserGroups: [{ type: Input }],
372
+ displayReadWriteAccess: [{ type: Input }],
373
+ tagReferenceTable: [{ type: Input }],
374
+ documentKey: [{ type: Input }],
375
+ documentTable: [{ type: Input }],
376
+ fileType: [{ type: Input }],
377
+ addDocumentByUrl: [{ type: Input }],
378
+ documentChangeEvent: [{ type: Output }],
379
+ popupCloseEvent: [{ type: Output }],
380
+ showClass: [{ type: HostBinding, args: ['class.co-file-upload-popup',] }]
381
+ };
382
+ __decorate([
383
+ InputBoolean()
384
+ ], FileUploadPopupComponent.prototype, "useWithoutSettingProps", void 0);
385
+ __decorate([
386
+ InputBoolean()
387
+ ], FileUploadPopupComponent.prototype, "hasPublicAccessVisible", void 0);
388
+ __decorate([
389
+ InputBoolean()
390
+ ], FileUploadPopupComponent.prototype, "showDocumentReportPicker", void 0);
391
+ __decorate([
392
+ InputBoolean()
393
+ ], FileUploadPopupComponent.prototype, "medicalUserGroups", void 0);
394
+ __decorate([
395
+ InputBoolean()
396
+ ], FileUploadPopupComponent.prototype, "addDocumentByUrl", void 0);
397
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQtcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS11cGxvYWQtcG9wdXAvZmlsZS11cGxvYWQtcG9wdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEgsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBRXRHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1REFBdUQsQ0FBQztBQUN0RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDcEcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUNyRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saURBQWlELENBQUM7QUFJaEYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRTFFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRXhFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQStLbkUsMEVB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QkFBaUIsR0FBRyxTQUFTLENBQUM7UUFFbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzs7WUFwYUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F1S1Q7Z0JBQ0EsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDekM7OztZQTVMTyxhQUFhO1lBYWIsaUJBQWlCOzs7bUJBa0xwQixTQUFTLFNBQUMsYUFBYTtxQ0FHdkIsS0FBSztxQ0FJTCxLQUFLO3VDQUlMLEtBQUs7Z0NBTUwsS0FBSzt1QkFTTCxLQUFLO3VDQVNMLEtBQUs7MEJBS0wsS0FBSztnQ0FHTCxLQUFLO3FDQUlMLEtBQUs7Z0NBR0wsS0FBSzswQkFHTCxLQUFLOzRCQUdMLEtBQUs7dUJBR0wsS0FBSzsrQkFHTCxLQUFLO2tDQUlMLE1BQU07OEJBR04sTUFBTTt3QkFHTixXQUFXLFNBQUMsNEJBQTRCOztBQW5FekM7SUFEQyxZQUFZLEVBQUU7d0VBQ2dDO0FBSS9DO0lBREMsWUFBWSxFQUFFO3dFQUNnQztBQUsvQztJQUZDLFlBQVksRUFBRTswRUFFaUM7QUErQmhEO0lBREMsWUFBWSxFQUFFO21FQUNtQjtBQW1CbEM7SUFEQyxZQUFZLEVBQUU7a0VBQ2tCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybUNvbXBvbmVudH0gZnJvbSAnQGNvbGlqbml0L2NvcmVjb21wb25lbnRzX3YxMic7XHJcbmltcG9ydCB7RG9jdW1lbnRQdWJsaWNhdGlvbn0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2VudW0vcmVmY29kZS9kb2N1bWVudC1wdWJsaWNhdGlvbi5lbnVtXCI7XHJcbmltcG9ydCB7U3RvcmVHcm91cH0gZnJvbSBcIkBjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3N0b3JlLWdyb3VwLmJvXCI7XHJcbmltcG9ydCB7T2JqZWN0UmlnaHRUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3NoYXJlZGFwaS9idWlsZC9lbnVtL29iamVjdC1yaWdodC10eXBlLmVudW1cIjtcclxuaW1wb3J0IHtQcm9tcHRTZXJ2aWNlfSBmcm9tIFwiQGNvbGlqbml0L2NvcmVjb21wb25lbnRzX3YxMlwiO1xyXG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSBcIkBjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3NlcnZpY2UvYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnlcIjtcclxuaW1wb3J0IHtJbnB1dEJvb2xlYW59IGZyb20gXCIuLi8uLi9kZWNvcmF0b3IvaW5wdXQtYm9vbGVhbi5kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHtDb0RvY3VtZW50fSBmcm9tIFwiQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvY28tZG9jdW1lbnRcIjtcclxuaW1wb3J0IHtDb0RvY3VtZW50UmlnaHR9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudC1yaWdodFwiO1xyXG5pbXBvcnQge1RhZ0NhdGVnb3J5fSBmcm9tIFwiLi4vLi4vZW51bS90YWctY2F0ZWdvcnkuZW51bVwiO1xyXG5pbXBvcnQge0ZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0c30gZnJvbSBcIi4uLy4uL2VudW0vZmlsZXMtdXBsb2FkLWNvbmZpZy1vYmplY3RzXCI7XHJcbmltcG9ydCB7VGFibGVOYW1lfSBmcm9tIFwiLi4vLi4vZW51bS90YWJsZS1uYW1lLmVudW1cIjtcclxuaW1wb3J0IHtGaWxlVHlwZX0gZnJvbSBcIi4uLy4uL2VudW0vZmlsZS10eXBlXCI7XHJcbmltcG9ydCB7RG9jdW1lbnRFbWFpbFJlcG9ydH0gZnJvbSBcIi4uLy4uL2VudW0vZG9jdW1lbnQtZW1haWwtcmVwb3J0LmVudW1cIjtcclxuaW1wb3J0IHtUYWdzQ29tcG9uZW50Q29uZmlnTmFtZXN9IGZyb20gXCIuLi8uLi9lbnVtL3RhZ3MtY29tcG9uZW50LWNvbmZpZy1uYW1lc1wiO1xyXG5pbXBvcnQge0RvbWFpbk11bHRpcGxlTmFtZX0gZnJvbSBcIi4uLy4uL2VudW0vZG9tYWluLW11bHRpcGxlLW5hbWUuZW51bVwiO1xyXG5pbXBvcnQge1RhZ1RyZWVJdGVtfSBmcm9tIFwiLi4vLi4vbW9kZWwvdGFnLXRyZWUtaXRlbS5ib1wiO1xyXG5pbXBvcnQge0ZpbGVUeXBlSW1hZ2VQaXBlfSBmcm9tIFwiLi4vLi4vcGlwZS9maWxlLXR5cGUtaW1hZ2UucGlwZVwiO1xyXG5pbXBvcnQge0ZpbGVVdGlsc30gZnJvbSBcIkBjb2xpam5pdC9tYWluYXBpL2J1aWxkL3V0aWxzL2ZpbGUtdXRpbHNcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImNvLWZpbGUtdXBsb2FkLXBvcHVwXCIsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxjby1kaWFsb2cgKm5nSWY9XCIhdXNlV2l0aG91dFNldHRpbmdQcm9wcyAmJiBkb2N1bWVudFVuZGVyRWRpdFwiIGNzc0lkPVwicG9wdXBfZmlsZXNfdXBsb2FkX2NvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgW2hlYWRlclRlbXBsYXRlXT1cImhlYWRlclRlbXBsYXRlXCIgY29udGVudFNpemUgbm9DbGlja091dHNpZGVcclxuICAgICAgICAgICAgICAgICAgIChjbG9zZSk9XCJvblBvcHVwQ2xvc2UoKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZGlhbG9nLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXVwbG9hZC1mb3JtLXdyYXBwZXJcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwPVwiMTBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjby1mb3JtIGNsYXNzPVwibmFycm93LXNjcm9sbGJhclwiICh2YWxpZFN1Ym1pdCk9XCJvblZhbGlkU3VibWl0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvcml6b250YWwtbGF5b3V0LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50LXRodW1iIGNvbHVtbi1sZWZ0XCIgKm5nSWY9XCIhYWRkRG9jdW1lbnRCeVVybFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJvblByZXZpZXdDbGljaygpXCI+PGltZyBbc3JjXT1cInRodW1ibmFpbFwiLz48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cImRvY3VtZW50VW5kZXJFZGl0LmZpbGVTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JlZW5Db25maWd1cmF0aW9uT2JqZWN0XT1cImRvY3VtZW50VW5kZXJFZGl0LmlzSW1hZ2VEb2N1bWVudCgpID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5JbWFnZURvY3VtZW50RmlsZVNpemUgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1VwbG9hZENvbmZpZ09iamVjdHM/LlRleHREb2N1bWVudEZpbGVTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU0laRScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVJlYWRvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub1ZhbGlkYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHQgW3BsYWNlaG9sZGVyXT1cIidESU1FTlNJT05TJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cImRvY3VtZW50VW5kZXJFZGl0LmltYWdlRGltZW5zaW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JlZW5Db25maWd1cmF0aW9uT2JqZWN0XT1cImZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cz8uSW1hZ2VEb2N1bWVudERpbWVuc2lvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVJlYWRvbmx5IG5vVmFsaWRhdGlvbj48L2NvLWlucHV0LXRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cImRvY3VtZW50VW5kZXJFZGl0LnRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JlZW5Db25maWd1cmF0aW9uT2JqZWN0XT1cImRvY3VtZW50VW5kZXJFZGl0LmlzSW1hZ2VEb2N1bWVudCgpID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5JbWFnZURvY3VtZW50VGl0bGUgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1VwbG9hZENvbmZpZ09iamVjdHM/LlRleHREb2N1bWVudFRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVElUTEUyJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vVmFsaWRhdGlvbiBmb3JjZVJlYWRvbmx5PjwvY28taW5wdXQtdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS08c2MtdGFnc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhZ0NhdGVnb3J5XT1cInRhZ0NhdGVnb3J5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCItLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPjwvc2MtdGFncz4tLT48IS0tIFtteUNmZ05hbWVzXT1cInRhZ3NDb25maWdOYW1lXCIgfCBbKGpvaW5lZFRhZ3MpXT1cInRoaXMuZG9jdW1lbnRVbmRlckVkaXQudGFnc1wiLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVhZC13cml0ZS1hY2Nlc3MgKm5nSWY9XCJzaG93UmVhZFdyaXRlQWNjZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZFdyaXRlQ2ZnTmFtZXNdPVwiZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5yZWFkV3JpdGVBY2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYXlvdXRIb3Jpem9udGFsXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttZWRpY2FsVXNlckdyb3Vwc109XCJtZWRpY2FsVXNlckdyb3Vwc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh1c2VyR3JvdXBzRm9yV3JpdGUpXT1cInVzZXJHcm91cHNGb3JXcml0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh1c2VyR3JvdXBzRm9yUmVhZCldPVwidXNlckdyb3Vwc0ZvclJlYWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3JlYWQtd3JpdGUtYWNjZXNzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLTxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWxheW91dC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZGREb2N1bWVudEJ5VXJsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHQgcmVxdWlyZWQgW3BsYWNlaG9sZGVyXT1cIidVUkwnIHwgbG9jYWxpemVcIiBbKG1vZGVsKV09XCJkb2N1bWVudFVuZGVyRWRpdC5maWxlUGF0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRvY1VuZGVyRWRpdElzUmVhZE9ubHlcIj48L2NvLWlucHV0LXRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWxheW91dC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0IFtwbGFjZWhvbGRlcl09XCInREVTQ1JJUFRJT04nIHwgbG9jYWxpemVcIiBbKG1vZGVsKV09XCJkb2N1bWVudFVuZGVyRWRpdC5kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NjcmVlbkNvbmZpZ3VyYXRpb25PYmplY3RdPVwiZG9jdW1lbnRVbmRlckVkaXQuaXNJbWFnZURvY3VtZW50KCkgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1VwbG9hZENvbmZpZ09iamVjdHM/LkltYWdlRG9jdW1lbnREZXNjcmlwdGlvbiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cz8uVGV4dERvY3VtZW50RGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLTxkaXYgKm5nSWY9XCJoYXNQdWJsaWNBY2Nlc3NWaXNpYmxlXCIgY2xhc3M9XCJjb2x1bW4tcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQtc3dpdGNoZXIteWVzLW5vIGxhYmVsPVwiUFVCTElDX0FDQ0VTU1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJkb2N1bWVudFVuZGVyRWRpdC5oYXNQdWJsaWNBY2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRvY1VuZGVyRWRpdElzUmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2lucHV0LXN3aXRjaGVyLXllcy1ubz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvcml6b250YWwtbGF5b3V0LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0LXN3aXRjaGVyLXllcy1ubyBsYWJlbD1cIkRPV05MT0FEQUJMRVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwiZG9jdW1lbnRVbmRlckVkaXQuZG93bmxvYWRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2ZnTmFtZV09XCJmaWxlc1VwbG9hZENvbmZpZ09iamVjdHM/LlRleHREb2N1bWVudERvd25sb2FkYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRvY1VuZGVyRWRpdElzUmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pbnB1dC1zd2l0Y2hlci15ZXMtbm8+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWxheW91dC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWxlVHlwZSA9PT0gZmlsZVR5cGVzLlRocmVlREZpbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dC1zd2l0Y2hlci15ZXMtbm8gbGFiZWw9XCJBTFNPX0FTX1VTRFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cImRvY3VtZW50VW5kZXJFZGl0LmNvbnZlcnRUb1VTRFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaW5wdXQtc3dpdGNoZXIteWVzLW5vPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG9yaXpvbnRhbC1sYXlvdXQtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZG9jdW1lbnRVbmRlckVkaXQuaXNJbWFnZURvY3VtZW50KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWxlZnRcIj48IS0tXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dC1zd2l0Y2hlci15ZXMtbm8gbGFiZWw9XCJBVFRBQ0hfVE9fTk9USUZJQ0FUSU9OXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJkb2N1bWVudFVuZGVyRWRpdC5hdHRhY2hUb05vdGlmaWNhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NmZ05hbWVdPVwiZmlsZXNVcGxvYWRDb25maWdPYmplY3RzPy5JbWFnZURvY3VtZW50QXR0YWNoTm90aWZpY2F0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZG9jVW5kZXJFZGl0SXNSZWFkT25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2lucHV0LXN3aXRjaGVyLXllcy1ubz4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLXJpZ2h0XCI+PCEtLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1hZ2UtdHlwZS1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2ZnTmFtZV09XCJmaWxlc1VwbG9hZENvbmZpZ09iamVjdHM/LkltYWdlRG9jdW1lbnREaXNwbGF5VHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE1vZGVsSWQpXT1cInRoaXMuZG9jdW1lbnRVbmRlckVkaXQuaW1hZ2VEaXNwbGF5S2luZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRvY1VuZGVyRWRpdElzUmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRElTUExBWV9UWVBFXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaW1hZ2UtdHlwZS1zZWxlY3Q+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNXb3JrYWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtdWx0aXBsZS1wcm9wZXJ0eS10b2dnbGVyICpuZ0lmPVwiIXNob3dEb2N1bWVudFJlcG9ydFBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0eU5hbWVzVG9Ub2dnbGVdPVwiZG9jdW1lbnRQdWJsaWNhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoZW5hYmxlZGl0ZW1zKV09XCJ0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnB1YmxpY2F0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uUHJvcGVydHlJdGVtQ2hhbmdlKT1cImhhbmRsZVByb3BlcnR5Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlBVQkxJU0hfVE9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZG9jVW5kZXJFZGl0SXNSZWFkT25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9tdWx0aXBsZS1wcm9wZXJ0eS10b2dnbGVyPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLW11bHRpcGxlLXByb3BlcnR5LXRvZ2dsZXIgKm5nSWY9XCJzaG93RG9jdW1lbnRSZXBvcnRQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydHlOYW1lc1RvVG9nZ2xlXT1cImRvY3VtZW50RW1haWxSZXBvcnRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhlbmFibGVkaXRlbXMpXT1cImRvY3VtZW50VW5kZXJFZGl0LnJlcG9ydHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Qcm9wZXJ0eUl0ZW1DaGFuZ2UpPVwiaGFuZGxlUmVwb3J0c1Byb3BlcnR5Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlJFUE9SVFNfVE9fQVRUQUNIX1RPXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRvY1VuZGVyRWRpdElzUmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvY28tbXVsdGlwbGUtcHJvcGVydHktdG9nZ2xlcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvY3VtZW50VW5kZXJFZGl0LmlzSW1hZ2VEb2N1bWVudCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlV3JhcHBlcl09XCJ0ZW1wbGF0ZUltYWdlXCI+PC9uZy1jb250YWluZXI+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY28tZm9ybT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9rLWNhbmNlbC1idXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNvLWJ1dHRvbiBbZGlzYWJsZWRdPVwiZG9jVW5kZXJFZGl0SXNSZWFkT25seVwiIFt0ZXh0Q29udGVudF09XCInT0snIHwgbG9jYWxpemVcIiAoY2xpY2spPVwib25Qb3B1cE9rQ2xpY2soKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjby1idXR0b24gKm5nSWY9XCJoaWRlQ2FuY2VsXCIgW3RleHRDb250ZW50XT1cIidTVElDS0VSJyB8IGxvY2FsaXplXCIgKGNsaWNrKT1cIm9uUG9wdXBDYW5jZWxDbGljaygpXCI+PC9jby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICA8ZGVmYXVsdC1vay1jYW5jZWwtYnV0dG9ucyBjbGFzcz1cImp1c3RpZnktY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb2tEaXNhYmxlZF09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZUNhbmNlbF09XCJoaWRlQ2FuY2VsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2tDbGljayk9XCJvblBvcHVwT2tDbGljaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FuY2VsQ2xpY2spPVwib25Qb3B1cENhbmNlbENsaWNrKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2RlZmF1bHQtb2stY2FuY2VsLWJ1dHRvbnM+LS0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9jby1kaWFsb2c+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cclxuICAgICAgICAgICAgPGRpdiBbdGV4dENvbnRlbnRdPVwicG9wdXBIZWFkZXIgfCBsb2NhbGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZUltYWdlICpuZ0lmPVwiIWlzV29ya2FiaWxpdHlcIj5cclxuICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2x1bW4tcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dC1sb3YtbXVsdGktc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjZmdOYW1lXT1cImZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cy5JbWFnZURvY3VtZW50U3RvcmVHcm91cHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTW9kZWxJZHMpXT1cInN0b3JlR3JvdXBJZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sbGVjdGlvbl09XCJzdG9yZUdyb3Vwc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkb2NVbmRlckVkaXRJc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25GaWVsZD1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9Ob3RMb2FkQ29sbGVjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21XaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlJFVEFJTF9GT1JNVUxBU1wiXHJcbiAgICAgICAgICAgICAgICA+PC9pbnB1dC1sb3YtbXVsdGktc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj4tLT5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgYCxcclxuICAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbi8vIENvbXBvbmVudCB0aGF0IHNob3dzIGEgcG9wdXAgd2hlbiB0aGUgdXNlciB3YW50cyB0byB1cGxvYWQgYSBDb0RvY3VtZW50XHJcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkUG9wdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQFZpZXdDaGlsZChGb3JtQ29tcG9uZW50KVxyXG4gICAgcHVibGljIGZvcm06IEZvcm1Db21wb25lbnQ7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBJbnB1dEJvb2xlYW4oKVxyXG4gICAgcHVibGljIHVzZVdpdGhvdXRTZXR0aW5nUHJvcHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgQElucHV0Qm9vbGVhbigpXHJcbiAgICBwdWJsaWMgaGFzUHVibGljQWNjZXNzVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBASW5wdXRCb29sZWFuKClcclxuICAgIC8vdG9kbyB0aGlzIGlzIHVzdWFsbHkgc2V0IHRvIGZhbHNlIG9uIGluaXRcclxuICAgIHB1YmxpYyBzaG93RG9jdW1lbnRSZXBvcnRQaWNrZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBkb2N1bWVudFVuZGVyRWRpdChkb2M6IENvRG9jdW1lbnQpIHtcclxuICAgICAgICB0aGlzLl9kb2N1bWVudFVuZGVyRWRpdCA9IGRvYyA/IHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKENvRG9jdW1lbnQsIGRvYykgYXMgdW5rbm93biBhcyBDb0RvY3VtZW50IDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZG9jdW1lbnRVbmRlckVkaXQoKTogQ29Eb2N1bWVudCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50VW5kZXJFZGl0O1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fcmVhZG9ubHkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5fdG9hc3RTZXJ2aWNlLnNwYXduVG9hc3QoXCJNRVNTQUdFX0RPQ1VNRU5UX0xPQ0tfU0lOR0xFXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBmaWxlc1VwbG9hZENvbmZpZ09iamVjdHModmFsdWU6IEZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cykge1xyXG4gICAgICAgIHRoaXMuX2ZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cyA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdGFnQ2F0ZWdvcnk6IFRhZ0NhdGVnb3J5O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBASW5wdXRCb29sZWFuKClcclxuICAgIHB1YmxpYyBtZWRpY2FsVXNlckdyb3VwczogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc3BsYXlSZWFkV3JpdGVBY2Nlc3M6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdGFnUmVmZXJlbmNlVGFibGU6IFRhYmxlTmFtZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRvY3VtZW50S2V5OiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkb2N1bWVudFRhYmxlOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmaWxlVHlwZTogRmlsZVR5cGU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBJbnB1dEJvb2xlYW4oKVxyXG4gICAgcHVibGljIGFkZERvY3VtZW50QnlVcmw6IGJvb2xlYW47XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnRDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPENvRG9jdW1lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb0RvY3VtZW50PigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IHBvcHVwQ2xvc2VFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuY28tZmlsZS11cGxvYWQtcG9wdXAnKVxyXG4gICAgcHVibGljIHNob3dDbGFzcygpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBkb2N1bWVudFB1YmxpY2F0aW9uOiB0eXBlb2YgRG9jdW1lbnRQdWJsaWNhdGlvbiA9IERvY3VtZW50UHVibGljYXRpb247XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnRFbWFpbFJlcG9ydHM6IHR5cGVvZiBEb2N1bWVudEVtYWlsUmVwb3J0ID0gRG9jdW1lbnRFbWFpbFJlcG9ydDtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNob3dSZWFkV3JpdGVBY2Nlc3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy9UT0RPIGdldCB1c2VycmlnaHRzXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgLy9yZXR1cm4gdGhpcy5fdXNlclJpZ2h0cy53b3JrYWJpbGl0eVBhcmFtZXRlckVuYWJsZWQgJiYgdGhpcy5kaXNwbGF5UmVhZFdyaXRlQWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzKCk6IEZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlzV29ya2FiaWxpdHkoKTogYm9vbGVhbiB7XHJcbiAgICAgIC8vVE9ETyBmaXggd29ya2FiaWxpdHlcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgLy9yZXR1cm4gdGhpcy5fd29ya2FiaWxpdHlTZXJ2aWNlLndvcmthYmlsaXR5U3lzdGVtRW5hYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRvY1VuZGVyRWRpdElzUmVhZE9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQucmVhZG9ubHkgfHwgdGhpcy5fcmVhZG9ubHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB0aHVtYm5haWwoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGh1bWJuYWlsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlVHlwZUltZ1BpcGUudHJhbnNmb3JtKHRoaXMuZG9jdW1lbnRVbmRlckVkaXQuZmlsZVR5cGVJbnRlcm5hbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwb3B1cEhlYWRlcigpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50VW5kZXJFZGl0ICYmIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQuaXNJbWFnZURvY3VtZW50KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiSU1BR0VcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJET0NVTUVOVFwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHB1YmxpY2F0aW9uQ29uZmlnTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKSA/XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cy5JbWFnZURvY3VtZW50UHVibGlzaFRvIDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNVcGxvYWRDb25maWdPYmplY3RzLlRleHREb2N1bWVudFB1Ymxpc2hUbztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vIGNvbmZpZ25hbWUgZm91bmRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBnZXQgdGFnc0NvbmZpZ05hbWUoKTogVGFnc0NvbXBvbmVudENvbmZpZ05hbWVzIHtcclxuICAgICAgICBpZiAodGhpcy5maWxlc1VwbG9hZENvbmZpZ09iamVjdHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQuaXNJbWFnZURvY3VtZW50KCkgP1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlc1VwbG9hZENvbmZpZ09iamVjdHMuVGFnc0ltYWdlQ29uZmlnTmFtZXMgOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlc1VwbG9hZENvbmZpZ09iamVjdHMuVGFnc1RleHRDb25maWdOYW1lcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vIGNvbmZpZ25hbWUgZm91bmRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlYWRvbmx5IGRvbWFpbjogdHlwZW9mIERvbWFpbk11bHRpcGxlTmFtZSA9IERvbWFpbk11bHRpcGxlTmFtZTtcclxuICAgIHB1YmxpYyByZWFkb25seSBmaWxlVHlwZXM6IHR5cGVvZiBGaWxlVHlwZSA9IEZpbGVUeXBlO1xyXG5cclxuICAgIHB1YmxpYyBfZG9jdW1lbnRVbmRlckVkaXQ6IENvRG9jdW1lbnQ7XHJcbiAgICBwdWJsaWMgaGlkZUNhbmNlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHN0b3JlR3JvdXBzOiBTdG9yZUdyb3VwW10gPSBbXTtcclxuICAgIHB1YmxpYyBwdWJsaWNhdGlvbklkczogbnVtYmVyW107XHJcbiAgICBwdWJsaWMgc3RvcmVHcm91cElkczogc3RyaW5nW107XHJcbiAgICBwdWJsaWMgdXNlckdyb3Vwc0ZvcldyaXRlOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgcHVibGljIHVzZXJHcm91cHNGb3JSZWFkOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgcHVibGljIGRvY3VtZW50VGFnczogVGFnVHJlZUl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgX2ZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0czogRmlsZXNVcGxvYWRDb25maWdPYmplY3RzID0ge307IC8vIEluc3RhbnRpYXRlIHdpdGggZW1wdHkgb2JqZWN0IHRvIGF2b2lkIG51bGxwb2ludGVycyBpbiB0aGUgdGVtcGxhdGVcclxuICAgIHByaXZhdGUgX2JvRmFjdG9yeTogQnVzaW5lc3NPYmplY3RGYWN0b3J5ID0gbmV3IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSgpO1xyXG4gICAgcHJpdmF0ZSBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX3B1YmxpY2F0aW9uTnVtYmVyOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIF9yZXBvcnRzTnVtYmVyOiBudW1iZXI7XHJcblxyXG4gICAgcHJpdmF0ZSBfdGh1bWJuYWlsOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgLy9wcml2YXRlIF93b3JrYWJpbGl0eVNlcnZpY2U6IEFwcFdvcmthYmlsaXR5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9wcm9tcHRTZXJ2aWNlOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2ZpbGVUeXBlSW1nUGlwZTogRmlsZVR5cGVJbWFnZVBpcGUsXHJcbiAgICAgICAgLy9wcml2YXRlIF91c2VyUmlnaHRzOiBVc2VyUmlnaHRzU2VydmljZSxcclxuICAgICAgICAvL3ByaXZhdGUgX2Jhc2VEYXRhUmVwbzogQmFzZURhdGFEYWxSZXBvc2l0b3J5LFxyXG4gICAgICAgIC8vcHJpdmF0ZSBfdGFnc1JlcG86IFRhZ3NEYWxSZXBvc2l0b3J5LFxyXG4gICAgICAgIC8vcHJpdmF0ZSBfZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIC8vcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBBcHBUb2FzdFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubG9hZENvbGxlY3Rpb24oKTtcclxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90aHVtYm5haWwgPSB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LmRvY3VtZW50Qm9keUFzRGF0YVVyaTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGxvYWRDb2xsZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIC8vdGhpcy5kb2N1bWVudFRhZ3MgPSBhd2FpdCB0aGlzLl90YWdzUmVwby5nZXRKb2luZWRUYWdzKHRoaXMudGFnUmVmZXJlbmNlVGFibGUsIHRoaXMuZG9jdW1lbnRLZXkpO1xyXG4gICAgICAgIC8vdGhpcy5zdG9yZUdyb3VwcyA9IGF3YWl0IHRoaXMuX2Jhc2VEYXRhUmVwby5nZXRTdG9yZUdyb3VwTGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblByZXZpZXdDbGljaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudFVuZGVyRWRpdC5pc0ltYWdlRG9jdW1lbnQoKSkgeyAvL3ByZXZpZXcgaW1hZ2VcclxuICAgICAgICAgICAgdGhpcy5fcHJvbXB0U2VydmljZS5zaG93SW1hZ2UodGhpcy5kb2N1bWVudFVuZGVyRWRpdC5kb2N1bWVudEJvZHlBc0RhdGFVcmksIFwiUHJldmlld1wiKTtcclxuICAgICAgICB9IGVsc2UgeyAvL2Rvd25sb2FkIGRvY3VtZW50XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBGaWxlVXRpbHMuRG93bmxvYWRGcm9tRGF0YVVyaSh0aGlzLmRvY3VtZW50VW5kZXJFZGl0LmJvZHlBc0RhdGFVcmksIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQuZmlsZU5hbWUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZURvY3VtZW50VW5kZXJFZGl0UmlnaHRzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQucmlnaHRzID0gW107XHJcbiAgICAgICAgY29uc3QgZm9yV3JpdGVMZW5ndGg6IG51bWJlciA9IHRoaXMudXNlckdyb3Vwc0ZvcldyaXRlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZm9yV3JpdGVMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCByaWdodHM6IENvRG9jdW1lbnRSaWdodCA9IG5ldyBDb0RvY3VtZW50UmlnaHQoKTtcclxuICAgICAgICAgICAgcmlnaHRzLnVzZXJHcm91cElkID0gdGhpcy51c2VyR3JvdXBzRm9yV3JpdGVbaV07XHJcbiAgICAgICAgICAgIHJpZ2h0cy5yaWdodExldmVsID0gT2JqZWN0UmlnaHRUeXBlLlJlYWRXcml0ZTtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5yaWdodHMucHVzaChyaWdodHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZm9yUmVhZExlbmd0aDogbnVtYmVyID0gdGhpcy51c2VyR3JvdXBzRm9yUmVhZC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGZvclJlYWRMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCByaWdodHM6IENvRG9jdW1lbnRSaWdodCA9IG5ldyBDb0RvY3VtZW50UmlnaHQoKTtcclxuICAgICAgICAgICAgcmlnaHRzLnVzZXJHcm91cElkID0gdGhpcy51c2VyR3JvdXBzRm9yUmVhZFtpXTtcclxuICAgICAgICAgICAgcmlnaHRzLnJpZ2h0TGV2ZWwgPSBPYmplY3RSaWdodFR5cGUuUmVhZE9ubHk7XHJcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQucmlnaHRzLnB1c2gocmlnaHRzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUG9wdXBPa0NsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLnN1Ym1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlUHJvcGVydHlDaGFuZ2UocmVmU3VtT2ZFbmFibGVkSXRlbXM6IG51bWJlcik6IGFueSB7XHJcbiAgICAgICAgdGhpcy5fcHVibGljYXRpb25OdW1iZXIgPSByZWZTdW1PZkVuYWJsZWRJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlUmVwb3J0c1Byb3BlcnR5Q2hhbmdlKHJlZlN1bU9mRW5hYmxlZEl0ZW1zOiBudW1iZXIpOiBhbnkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydHNOdW1iZXIgPSByZWZTdW1PZkVuYWJsZWRJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgb25WYWxpZFN1Ym1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLl9wdWJsaWNhdGlvbk51bWJlciA/IHRoaXMuZG9jdW1lbnRVbmRlckVkaXQucHVibGljYXRpb24gPSB0aGlzLl9wdWJsaWNhdGlvbk51bWJlciA6IHRoaXMuZG9jdW1lbnRVbmRlckVkaXQucHVibGljYXRpb24gPSAwO1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydHNOdW1iZXIgPyB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnJlcG9ydHMgPSB0aGlzLl9yZXBvcnRzTnVtYmVyIDogdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5yZXBvcnRzID0gMDtcclxuICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnJldGFpbEZvcm11bGFzID0gdGhpcy5zdG9yZUdyb3VwSWRzO1xyXG4gICAgICAgIHRoaXMuc2F2ZURvY3VtZW50VW5kZXJFZGl0UmlnaHRzKCk7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZUV2ZW50LmVtaXQodGhpcy5kb2N1bWVudFVuZGVyRWRpdCk7XHJcbiAgICAgICAgdGhpcy5vblBvcHVwQ2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgb25Qb3B1cENhbmNlbENsaWNrKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMub25Qb3B1cENsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUG9wdXBDbG9zZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJHcm91cHNGb3JXcml0ZS5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMudXNlckdyb3Vwc0ZvclJlYWQubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0ID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICB0aGlzLnBvcHVwQ2xvc2VFdmVudC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLypwcml2YXRlIF91bmxvY2tEb2N1bWVudChkb2M6IENvRG9jdW1lbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWRvYy5yZWFkb25seSAmJiAhdGhpcy5yZWFkb25seSkge1xyXG4gICAgICAgICAgICB0aGlzLl9kYXRhU2VydmljZS51bmxvY2soQ29Eb2N1bWVudCwgZG9jLmRvY3VtZW50SWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0qL1xyXG59XHJcbiJdfQ==