slick-components 4.4.13 → 4.4.16

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 (346) hide show
  1. package/css/slick-components.css +598 -365
  2. package/css/slick-components.min.css +1 -1
  3. package/esm2020/public-api.mjs +43 -0
  4. package/esm2020/slick-accordion/slick-accordion-item-header.component.mjs +14 -0
  5. package/esm2020/slick-accordion/slick-accordion-item.component.mjs +86 -0
  6. package/esm2020/slick-accordion/slick-accordion.component.mjs +75 -0
  7. package/esm2020/slick-accordion/slick-accordion.module.mjs +23 -0
  8. package/esm2020/slick-auto-complete/slick-auto-complete-list-item-template.directive.mjs +22 -0
  9. package/esm2020/slick-auto-complete/slick-auto-complete.component.mjs +375 -0
  10. package/esm2020/slick-auto-complete/slick-auto-complete.module.mjs +24 -0
  11. package/esm2020/slick-button-spinner/slick-button-spinner.component.mjs +175 -0
  12. package/esm2020/slick-button-spinner/slick-button-spinner.module.mjs +19 -0
  13. package/esm2020/slick-calendar/slick-calendar.component.mjs +246 -0
  14. package/esm2020/slick-calendar/slick-calendar.module.mjs +19 -0
  15. package/esm2020/slick-card/slick-card-header.component.mjs +14 -0
  16. package/esm2020/slick-card/slick-card.component.mjs +42 -0
  17. package/esm2020/slick-card/slick-card.module.mjs +20 -0
  18. package/esm2020/slick-components.mjs +5 -0
  19. package/esm2020/slick-confirm-dialog/slick-confirm-dialog.component.mjs +65 -0
  20. package/esm2020/slick-confirm-dialog/slick-confirm-dialog.module.mjs +20 -0
  21. package/esm2020/slick-container/slick-container-body.component.mjs +24 -0
  22. package/esm2020/slick-container/slick-container-footer.component.mjs +20 -0
  23. package/esm2020/slick-container/slick-container-header.component.mjs +20 -0
  24. package/esm2020/slick-container/slick-container.component.mjs +21 -0
  25. package/esm2020/slick-container/slick-container.module.mjs +25 -0
  26. package/esm2020/slick-context-menu/slick-context-menu-item.component.mjs +14 -0
  27. package/esm2020/slick-context-menu/slick-context-menu.component.mjs +48 -0
  28. package/esm2020/slick-context-menu/slick-context-menu.module.mjs +20 -0
  29. package/{esm2015/slick-currency-mask/slick-currency-mask-options.model.js → esm2020/slick-currency-mask/slick-currency-mask-options.model.mjs} +0 -0
  30. package/esm2020/slick-currency-mask/slick-currency-mask.directive.mjs +233 -0
  31. package/esm2020/slick-currency-mask/slick-currency-mask.module.mjs +19 -0
  32. package/esm2020/slick-date-picker/slick-date-picker.component.mjs +278 -0
  33. package/esm2020/slick-date-picker/slick-date-picker.module.mjs +21 -0
  34. package/esm2020/slick-dialog/slick-dialog-footer.component.mjs +24 -0
  35. package/esm2020/slick-dialog/slick-dialog.component.mjs +294 -0
  36. package/esm2020/slick-dialog/slick-dialog.module.mjs +23 -0
  37. package/esm2020/slick-dialog/slick-dialog.service.mjs +68 -0
  38. package/esm2020/slick-drag-drop/slick-drag-drop.directive.mjs +13 -0
  39. package/esm2020/slick-drag-drop/slick-drag-drop.module.mjs +21 -0
  40. package/esm2020/slick-drag-drop/slick-draggable.directive.mjs +13 -0
  41. package/{esm2015/slick-drop-down/slick-drop-down-button.model.js → esm2020/slick-drop-down/slick-drop-down-button.model.mjs} +0 -0
  42. package/esm2020/slick-drop-down/slick-drop-down.component.mjs +479 -0
  43. package/esm2020/slick-drop-down/slick-drop-down.module.mjs +24 -0
  44. package/esm2020/slick-drop-down/slick-drop-down.service.mjs +55 -0
  45. package/esm2020/slick-drop-list/slick-drop-list-grab.directive.mjs +18 -0
  46. package/esm2020/slick-drop-list/slick-drop-list-item.directive.mjs +18 -0
  47. package/esm2020/slick-drop-list/slick-drop-list.directive.mjs +215 -0
  48. package/esm2020/slick-drop-list/slick-drop-list.module.mjs +23 -0
  49. package/esm2020/slick-email-viewer/slick-email-viewer-dialog.component.mjs +81 -0
  50. package/esm2020/slick-email-viewer/slick-email-viewer.component.mjs +42 -0
  51. package/esm2020/slick-email-viewer/slick-email-viewer.module.mjs +26 -0
  52. package/{esm2015/slick-emailer/slick-emailer-address.model.js → esm2020/slick-emailer/slick-emailer-address.model.mjs} +0 -0
  53. package/esm2020/slick-emailer/slick-emailer-dialog.component.mjs +153 -0
  54. package/esm2020/slick-emailer/slick-emailer.component.mjs +235 -0
  55. package/{esm2015/slick-emailer/slick-emailer.model.js → esm2020/slick-emailer/slick-emailer.model.mjs} +0 -0
  56. package/esm2020/slick-emailer/slick-emailer.module.mjs +29 -0
  57. package/esm2020/slick-file-drop/slick-file-drop.component.mjs +156 -0
  58. package/esm2020/slick-file-drop/slick-file-drop.module.mjs +20 -0
  59. package/esm2020/slick-file-list/slick-file-list-item.component.mjs +173 -0
  60. package/esm2020/slick-file-list/slick-file-list.component.mjs +130 -0
  61. package/esm2020/slick-file-list/slick-file-list.module.mjs +23 -0
  62. package/{esm2015/slick-file-model/slick-file.model.js → esm2020/slick-file-model/slick-file.model.mjs} +0 -0
  63. package/esm2020/slick-google-address-search/slick-google-address-search.directive.mjs +75 -0
  64. package/esm2020/slick-google-address-search/slick-google-address-search.module.mjs +19 -0
  65. package/esm2020/slick-google-map/slick-google-map-dialog.component.mjs +50 -0
  66. package/esm2020/slick-google-map/slick-google-map.component.mjs +48 -0
  67. package/esm2020/slick-google-map/slick-google-map.module.mjs +22 -0
  68. package/esm2020/slick-grid/slick-grid-column-template.directive.mjs +19 -0
  69. package/{esm2015/slick-grid/slick-grid-column.model.js → esm2020/slick-grid/slick-grid-column.model.mjs} +0 -0
  70. package/{esm2015/slick-grid/slick-grid-favorite.model.js → esm2020/slick-grid/slick-grid-favorite.model.mjs} +0 -0
  71. package/{esm2015/slick-grid/slick-grid-request.model.js → esm2020/slick-grid/slick-grid-request.model.mjs} +0 -0
  72. package/{esm2015/slick-grid/slick-grid-response.model.js → esm2020/slick-grid/slick-grid-response.model.mjs} +0 -0
  73. package/esm2020/slick-grid/slick-grid-sanitize.pipe.mjs +20 -0
  74. package/esm2020/slick-grid/slick-grid.component.mjs +793 -0
  75. package/esm2020/slick-grid/slick-grid.module.mjs +43 -0
  76. package/{esm2015/slick-grid/slick-grid.options.js → esm2020/slick-grid/slick-grid.options.mjs} +0 -0
  77. package/esm2020/slick-grid/slick-grid.service.mjs +66 -0
  78. package/esm2020/slick-multi-select/slick-multi-select.component.mjs +362 -0
  79. package/esm2020/slick-multi-select/slick-multi-select.module.mjs +20 -0
  80. package/esm2020/slick-multi-select/slick-multi-select.service.mjs +77 -0
  81. package/esm2020/slick-ordered-list/slick-ordered-list.component.mjs +200 -0
  82. package/esm2020/slick-ordered-list/slick-ordered-list.module.mjs +20 -0
  83. package/esm2020/slick-paging/slick-paging.component.mjs +185 -0
  84. package/esm2020/slick-paging/slick-paging.module.mjs +19 -0
  85. package/esm2020/slick-photo-gallery/slick-photo-gallery.component.mjs +98 -0
  86. package/{esm2015/slick-photo-gallery/slick-photo-gallery.model.js → esm2020/slick-photo-gallery/slick-photo-gallery.model.mjs} +0 -0
  87. package/esm2020/slick-photo-gallery/slick-photo-gallery.module.mjs +21 -0
  88. package/esm2020/slick-pick-list/slick-pick-list.component.mjs +84 -0
  89. package/esm2020/slick-pick-list/slick-pick-list.module.mjs +20 -0
  90. package/esm2020/slick-popover/slick-popover.component.mjs +204 -0
  91. package/esm2020/slick-popover/slick-popover.module.mjs +19 -0
  92. package/esm2020/slick-profile-picture/slick-profile-picture.component.mjs +267 -0
  93. package/esm2020/slick-profile-picture/slick-profile-picture.module.mjs +20 -0
  94. package/esm2020/slick-progress-bar/slick-progress-bar.module.mjs +18 -0
  95. package/esm2020/slick-progress-bar/slick-progress-bar.service.mjs +53 -0
  96. package/esm2020/slick-screen-blocker/slick-screen-blocker.module.mjs +18 -0
  97. package/esm2020/slick-screen-blocker/slick-screen-blocker.service.mjs +83 -0
  98. package/{esm2015/slick-slider/slick-slider-tick.model.js → esm2020/slick-slider/slick-slider-tick.model.mjs} +0 -0
  99. package/esm2020/slick-slider/slick-slider.component.mjs +90 -0
  100. package/esm2020/slick-slider/slick-slider.module.mjs +20 -0
  101. package/esm2020/slick-split-screen/slick-screen-split-left-content.component.mjs +15 -0
  102. package/esm2020/slick-split-screen/slick-screen-split-right-content.component.mjs +15 -0
  103. package/esm2020/slick-split-screen/slick-split-screen.component.mjs +159 -0
  104. package/esm2020/slick-split-screen/slick-split-screen.module.mjs +21 -0
  105. package/esm2020/slick-tabs/slick-tab-header.component.mjs +28 -0
  106. package/esm2020/slick-tabs/slick-tab.component.mjs +63 -0
  107. package/{esm2015/slick-tabs/slick-tab.model.js → esm2020/slick-tabs/slick-tab.model.mjs} +0 -0
  108. package/esm2020/slick-tabs/slick-tabs.component.mjs +107 -0
  109. package/esm2020/slick-tabs/slick-tabs.module.mjs +23 -0
  110. package/esm2020/slick-toast/slick-toast.module.mjs +18 -0
  111. package/esm2020/slick-toast/slick-toast.service.mjs +88 -0
  112. package/{esm2015/slick-tree-view/slick-tree-node.model.js → esm2020/slick-tree-view/slick-tree-node.model.mjs} +0 -0
  113. package/esm2020/slick-tree-view/slick-tree-view.component.mjs +293 -0
  114. package/esm2020/slick-tree-view/slick-tree-view.module.mjs +22 -0
  115. package/esm2020/slick-type-ahead/slick-type-ahead.directive.mjs +164 -0
  116. package/esm2020/slick-type-ahead/slick-type-ahead.module.mjs +18 -0
  117. package/esm2020/slick-validation-indicator/slick-validation-indicator.directive.mjs +63 -0
  118. package/esm2020/slick-validation-indicator/slick-validation-indicator.module.mjs +19 -0
  119. package/esm2020/utils/slick-function-lock.service.mjs +55 -0
  120. package/esm2020/utils/slick-init.service.mjs +49 -0
  121. package/esm2020/utils/slick-log.service.mjs +23 -0
  122. package/esm2020/utils/slick-sleep.service.mjs +14 -0
  123. package/esm2020/utils/slick-utils.service.mjs +247 -0
  124. package/fesm2015/{slick-components.js → slick-components.mjs} +2779 -2070
  125. package/fesm2015/slick-components.mjs.map +1 -0
  126. package/fesm2020/slick-components.mjs +8467 -0
  127. package/fesm2020/slick-components.mjs.map +1 -0
  128. package/package.json +20 -8
  129. package/public-api.d.ts +8 -8
  130. package/slick-accordion/slick-accordion-item-header.component.d.ts +3 -0
  131. package/slick-accordion/slick-accordion-item.component.d.ts +3 -0
  132. package/slick-accordion/slick-accordion.component.d.ts +3 -0
  133. package/slick-accordion/slick-accordion.module.d.ts +8 -0
  134. package/slick-auto-complete/slick-auto-complete-list-item-template.directive.d.ts +3 -0
  135. package/slick-auto-complete/slick-auto-complete.component.d.ts +3 -0
  136. package/slick-auto-complete/slick-auto-complete.module.d.ts +8 -0
  137. package/slick-button-spinner/slick-button-spinner.component.d.ts +3 -0
  138. package/slick-button-spinner/slick-button-spinner.module.d.ts +6 -0
  139. package/slick-calendar/slick-calendar.component.d.ts +3 -0
  140. package/slick-calendar/slick-calendar.module.d.ts +6 -0
  141. package/slick-card/slick-card-header.component.d.ts +3 -0
  142. package/slick-card/slick-card.component.d.ts +3 -0
  143. package/slick-card/slick-card.module.d.ts +10 -0
  144. package/slick-components.d.ts +1 -22
  145. package/slick-confirm-dialog/slick-confirm-dialog.component.d.ts +3 -0
  146. package/slick-confirm-dialog/slick-confirm-dialog.module.d.ts +7 -0
  147. package/slick-container/slick-container-body.component.d.ts +3 -0
  148. package/slick-container/slick-container-footer.component.d.ts +3 -0
  149. package/slick-container/slick-container-header.component.d.ts +3 -0
  150. package/slick-container/slick-container.component.d.ts +3 -0
  151. package/slick-container/slick-container.module.d.ts +9 -0
  152. package/slick-context-menu/slick-context-menu-item.component.d.ts +3 -0
  153. package/slick-context-menu/slick-context-menu.component.d.ts +3 -0
  154. package/slick-context-menu/slick-context-menu.module.d.ts +7 -0
  155. package/slick-currency-mask/slick-currency-mask.directive.d.ts +3 -0
  156. package/slick-currency-mask/slick-currency-mask.module.d.ts +5 -0
  157. package/slick-date-picker/slick-date-picker.component.d.ts +3 -0
  158. package/slick-date-picker/slick-date-picker.module.d.ts +8 -0
  159. package/slick-dialog/slick-dialog-footer.component.d.ts +3 -0
  160. package/slick-dialog/slick-dialog.component.d.ts +3 -0
  161. package/slick-dialog/slick-dialog.module.d.ts +10 -1
  162. package/slick-dialog/slick-dialog.service.d.ts +3 -0
  163. package/slick-drag-drop/slick-drag-drop.directive.d.ts +3 -0
  164. package/slick-drag-drop/slick-drag-drop.module.d.ts +11 -0
  165. package/slick-drag-drop/slick-draggable.directive.d.ts +3 -0
  166. package/slick-drop-down/slick-drop-down.component.d.ts +3 -0
  167. package/slick-drop-down/slick-drop-down.module.d.ts +9 -0
  168. package/slick-drop-down/slick-drop-down.service.d.ts +3 -0
  169. package/slick-drop-list/slick-drop-list-grab.directive.d.ts +3 -0
  170. package/slick-drop-list/slick-drop-list-item.directive.d.ts +3 -0
  171. package/slick-drop-list/slick-drop-list.directive.d.ts +13 -7
  172. package/slick-drop-list/slick-drop-list.module.d.ts +14 -0
  173. package/slick-email-viewer/slick-email-viewer-dialog.component.d.ts +3 -0
  174. package/slick-email-viewer/slick-email-viewer.component.d.ts +3 -0
  175. package/slick-email-viewer/slick-email-viewer.module.d.ts +10 -0
  176. package/slick-emailer/slick-emailer-dialog.component.d.ts +3 -0
  177. package/slick-emailer/slick-emailer.component.d.ts +3 -0
  178. package/slick-emailer/slick-emailer.module.d.ts +13 -0
  179. package/slick-file-drop/slick-file-drop.component.d.ts +3 -0
  180. package/slick-file-drop/slick-file-drop.module.d.ts +7 -0
  181. package/slick-file-list/slick-file-list-item.component.d.ts +3 -0
  182. package/slick-file-list/slick-file-list.component.d.ts +3 -0
  183. package/slick-file-list/slick-file-list.module.d.ts +10 -0
  184. package/slick-google-address-search/slick-google-address-search.directive.d.ts +3 -0
  185. package/slick-google-address-search/slick-google-address-search.module.d.ts +6 -0
  186. package/slick-google-map/slick-google-map-dialog.component.d.ts +3 -0
  187. package/slick-google-map/slick-google-map.component.d.ts +3 -0
  188. package/slick-google-map/slick-google-map.module.d.ts +8 -0
  189. package/slick-grid/slick-grid-column-template.directive.d.ts +3 -0
  190. package/slick-grid/slick-grid-sanitize.pipe.d.ts +3 -0
  191. package/slick-grid/slick-grid.component.d.ts +3 -0
  192. package/slick-grid/slick-grid.module.d.ts +16 -0
  193. package/slick-grid/slick-grid.service.d.ts +3 -0
  194. package/slick-multi-select/slick-multi-select.component.d.ts +3 -0
  195. package/slick-multi-select/slick-multi-select.module.d.ts +7 -0
  196. package/slick-multi-select/slick-multi-select.service.d.ts +3 -0
  197. package/slick-ordered-list/slick-ordered-list.component.d.ts +3 -0
  198. package/slick-ordered-list/slick-ordered-list.module.d.ts +7 -0
  199. package/slick-paging/slick-paging.component.d.ts +3 -0
  200. package/slick-paging/slick-paging.module.d.ts +6 -0
  201. package/slick-photo-gallery/slick-photo-gallery.component.d.ts +3 -0
  202. package/slick-photo-gallery/slick-photo-gallery.module.d.ts +6 -0
  203. package/slick-pick-list/slick-pick-list.component.d.ts +3 -0
  204. package/slick-pick-list/slick-pick-list.module.d.ts +7 -0
  205. package/slick-popover/slick-popover.component.d.ts +3 -0
  206. package/slick-popover/slick-popover.module.d.ts +6 -0
  207. package/slick-profile-picture/slick-profile-picture.component.d.ts +3 -0
  208. package/slick-profile-picture/slick-profile-picture.module.d.ts +7 -0
  209. package/slick-progress-bar/slick-progress-bar.module.d.ts +5 -0
  210. package/slick-progress-bar/slick-progress-bar.service.d.ts +3 -0
  211. package/slick-screen-blocker/slick-screen-blocker.module.d.ts +5 -0
  212. package/slick-screen-blocker/slick-screen-blocker.service.d.ts +3 -0
  213. package/slick-slider/slick-slider.component.d.ts +3 -0
  214. package/slick-slider/slick-slider.module.d.ts +6 -0
  215. package/slick-split-screen/slick-screen-split-left-content.component.d.ts +3 -0
  216. package/slick-split-screen/slick-screen-split-right-content.component.d.ts +3 -0
  217. package/slick-split-screen/slick-split-screen.component.d.ts +3 -0
  218. package/slick-split-screen/slick-split-screen.module.d.ts +8 -0
  219. package/slick-tabs/slick-tab-header.component.d.ts +3 -0
  220. package/slick-tabs/slick-tab.component.d.ts +3 -0
  221. package/slick-tabs/slick-tabs.component.d.ts +3 -0
  222. package/slick-tabs/slick-tabs.module.d.ts +10 -0
  223. package/slick-toast/slick-toast.module.d.ts +5 -0
  224. package/slick-toast/slick-toast.service.d.ts +3 -0
  225. package/slick-tree-view/slick-tree-view.component.d.ts +3 -0
  226. package/slick-tree-view/slick-tree-view.module.d.ts +8 -0
  227. package/slick-type-ahead/slick-type-ahead.directive.d.ts +3 -0
  228. package/slick-type-ahead/slick-type-ahead.module.d.ts +5 -0
  229. package/slick-validation-indicator/slick-validation-indicator.directive.d.ts +3 -0
  230. package/slick-validation-indicator/slick-validation-indicator.module.d.ts +6 -0
  231. package/utils/slick-function-lock.service.d.ts +3 -0
  232. package/utils/slick-init.service.d.ts +3 -0
  233. package/utils/slick-log.service.d.ts +3 -0
  234. package/utils/slick-sleep.service.d.ts +3 -0
  235. package/utils/slick-utils.service.d.ts +5 -0
  236. package/bundles/slick-components.umd.js +0 -9777
  237. package/bundles/slick-components.umd.js.map +0 -1
  238. package/esm2015/public-api.js +0 -43
  239. package/esm2015/slick-accordion/slick-accordion-item-header.component.js +0 -10
  240. package/esm2015/slick-accordion/slick-accordion-item.component.js +0 -80
  241. package/esm2015/slick-accordion/slick-accordion.component.js +0 -77
  242. package/esm2015/slick-accordion/slick-accordion.module.js +0 -18
  243. package/esm2015/slick-auto-complete/slick-auto-complete-list-item-template.directive.js +0 -21
  244. package/esm2015/slick-auto-complete/slick-auto-complete.component.js +0 -352
  245. package/esm2015/slick-auto-complete/slick-auto-complete.module.js +0 -19
  246. package/esm2015/slick-button-spinner/slick-button-spinner.component.js +0 -186
  247. package/esm2015/slick-button-spinner/slick-button-spinner.module.js +0 -14
  248. package/esm2015/slick-calendar/slick-calendar.component.js +0 -233
  249. package/esm2015/slick-calendar/slick-calendar.module.js +0 -14
  250. package/esm2015/slick-card/slick-card-header.component.js +0 -10
  251. package/esm2015/slick-card/slick-card.component.js +0 -37
  252. package/esm2015/slick-card/slick-card.module.js +0 -14
  253. package/esm2015/slick-components.js +0 -27
  254. package/esm2015/slick-confirm-dialog/slick-confirm-dialog.component.js +0 -62
  255. package/esm2015/slick-confirm-dialog/slick-confirm-dialog.module.js +0 -15
  256. package/esm2015/slick-container/slick-container-body.component.js +0 -18
  257. package/esm2015/slick-container/slick-container-footer.component.js +0 -16
  258. package/esm2015/slick-container/slick-container-header.component.js +0 -16
  259. package/esm2015/slick-container/slick-container.component.js +0 -19
  260. package/esm2015/slick-container/slick-container.module.js +0 -20
  261. package/esm2015/slick-context-menu/slick-context-menu-item.component.js +0 -10
  262. package/esm2015/slick-context-menu/slick-context-menu.component.js +0 -43
  263. package/esm2015/slick-context-menu/slick-context-menu.module.js +0 -15
  264. package/esm2015/slick-currency-mask/slick-currency-mask.directive.js +0 -234
  265. package/esm2015/slick-currency-mask/slick-currency-mask.module.js +0 -14
  266. package/esm2015/slick-date-picker/slick-date-picker.component.js +0 -267
  267. package/esm2015/slick-date-picker/slick-date-picker.module.js +0 -16
  268. package/esm2015/slick-dialog/slick-dialog-footer.component.js +0 -18
  269. package/esm2015/slick-dialog/slick-dialog.component.js +0 -282
  270. package/esm2015/slick-dialog/slick-dialog.module.js +0 -18
  271. package/esm2015/slick-dialog/slick-dialog.service.js +0 -67
  272. package/esm2015/slick-drag-drop/slick-drag-drop.directive.js +0 -9
  273. package/esm2015/slick-drag-drop/slick-drag-drop.module.js +0 -14
  274. package/esm2015/slick-drag-drop/slick-draggable.directive.js +0 -9
  275. package/esm2015/slick-drop-down/slick-drop-down.component.js +0 -465
  276. package/esm2015/slick-drop-down/slick-drop-down.module.js +0 -19
  277. package/esm2015/slick-drop-down/slick-drop-down.service.js +0 -59
  278. package/esm2015/slick-drop-list/slick-drop-list-grab.directive.js +0 -18
  279. package/esm2015/slick-drop-list/slick-drop-list-item.directive.js +0 -18
  280. package/esm2015/slick-drop-list/slick-drop-list.directive.js +0 -162
  281. package/esm2015/slick-drop-list/slick-drop-list.module.js +0 -15
  282. package/esm2015/slick-email-viewer/slick-email-viewer-dialog.component.js +0 -61
  283. package/esm2015/slick-email-viewer/slick-email-viewer.component.js +0 -39
  284. package/esm2015/slick-email-viewer/slick-email-viewer.module.js +0 -21
  285. package/esm2015/slick-emailer/slick-emailer-dialog.component.js +0 -122
  286. package/esm2015/slick-emailer/slick-emailer.component.js +0 -226
  287. package/esm2015/slick-emailer/slick-emailer.module.js +0 -24
  288. package/esm2015/slick-file-drop/slick-file-drop.component.js +0 -144
  289. package/esm2015/slick-file-drop/slick-file-drop.module.js +0 -15
  290. package/esm2015/slick-file-list/slick-file-list-item.component.js +0 -156
  291. package/esm2015/slick-file-list/slick-file-list.component.js +0 -114
  292. package/esm2015/slick-file-list/slick-file-list.module.js +0 -18
  293. package/esm2015/slick-google-address-search/slick-google-address-search.directive.js +0 -75
  294. package/esm2015/slick-google-address-search/slick-google-address-search.module.js +0 -14
  295. package/esm2015/slick-google-map/slick-google-map-dialog.component.js +0 -45
  296. package/esm2015/slick-google-map/slick-google-map.component.js +0 -45
  297. package/esm2015/slick-google-map/slick-google-map.module.js +0 -17
  298. package/esm2015/slick-grid/slick-grid-column-template.directive.js +0 -19
  299. package/esm2015/slick-grid/slick-grid-sanitize.pipe.js +0 -20
  300. package/esm2015/slick-grid/slick-grid.component.js +0 -792
  301. package/esm2015/slick-grid/slick-grid.module.js +0 -38
  302. package/esm2015/slick-grid/slick-grid.service.js +0 -72
  303. package/esm2015/slick-multi-select/slick-multi-select.component.js +0 -356
  304. package/esm2015/slick-multi-select/slick-multi-select.module.js +0 -15
  305. package/esm2015/slick-multi-select/slick-multi-select.service.js +0 -74
  306. package/esm2015/slick-ordered-list/slick-ordered-list.component.js +0 -198
  307. package/esm2015/slick-ordered-list/slick-ordered-list.module.js +0 -15
  308. package/esm2015/slick-paging/slick-paging.component.js +0 -180
  309. package/esm2015/slick-paging/slick-paging.module.js +0 -14
  310. package/esm2015/slick-photo-gallery/slick-photo-gallery.component.js +0 -101
  311. package/esm2015/slick-photo-gallery/slick-photo-gallery.module.js +0 -16
  312. package/esm2015/slick-pick-list/slick-pick-list.component.js +0 -78
  313. package/esm2015/slick-pick-list/slick-pick-list.module.js +0 -15
  314. package/esm2015/slick-popover/slick-popover.component.js +0 -199
  315. package/esm2015/slick-popover/slick-popover.module.js +0 -14
  316. package/esm2015/slick-profile-picture/slick-profile-picture.component.js +0 -242
  317. package/esm2015/slick-profile-picture/slick-profile-picture.module.js +0 -15
  318. package/esm2015/slick-progress-bar/slick-progress-bar.module.js +0 -13
  319. package/esm2015/slick-progress-bar/slick-progress-bar.service.js +0 -50
  320. package/esm2015/slick-screen-blocker/slick-screen-blocker.module.js +0 -13
  321. package/esm2015/slick-screen-blocker/slick-screen-blocker.service.js +0 -80
  322. package/esm2015/slick-slider/slick-slider.component.js +0 -88
  323. package/esm2015/slick-slider/slick-slider.module.js +0 -15
  324. package/esm2015/slick-split-screen/slick-screen-split-left-content.component.js +0 -13
  325. package/esm2015/slick-split-screen/slick-screen-split-right-content.component.js +0 -13
  326. package/esm2015/slick-split-screen/slick-split-screen.component.js +0 -148
  327. package/esm2015/slick-split-screen/slick-split-screen.module.js +0 -16
  328. package/esm2015/slick-tabs/slick-tab-header.component.js +0 -25
  329. package/esm2015/slick-tabs/slick-tab.component.js +0 -67
  330. package/esm2015/slick-tabs/slick-tabs.component.js +0 -104
  331. package/esm2015/slick-tabs/slick-tabs.module.js +0 -17
  332. package/esm2015/slick-toast/slick-toast.module.js +0 -13
  333. package/esm2015/slick-toast/slick-toast.service.js +0 -91
  334. package/esm2015/slick-tree-view/slick-tree-view.component.js +0 -287
  335. package/esm2015/slick-tree-view/slick-tree-view.module.js +0 -17
  336. package/esm2015/slick-type-ahead/slick-type-ahead.directive.js +0 -155
  337. package/esm2015/slick-type-ahead/slick-type-ahead.module.js +0 -13
  338. package/esm2015/slick-validation-indicator/slick-validation-indicator.directive.js +0 -61
  339. package/esm2015/slick-validation-indicator/slick-validation-indicator.module.js +0 -14
  340. package/esm2015/utils/slick-function-lock.service.js +0 -54
  341. package/esm2015/utils/slick-init.service.js +0 -48
  342. package/esm2015/utils/slick-log.service.js +0 -27
  343. package/esm2015/utils/slick-sleep.service.js +0 -14
  344. package/esm2015/utils/slick-utils.service.js +0 -229
  345. package/fesm2015/slick-components.js.map +0 -1
  346. package/slick-components.metadata.json +0 -1
@@ -0,0 +1,156 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild, HostListener } from "@angular/core";
2
+ import { SlickUtilsService } from "../utils/slick-utils.service";
3
+ import { SlickFileModel } from "../slick-file-model/slick-file.model";
4
+ import * as i0 from "@angular/core";
5
+ const imgExtensions = ['bmp', 'gif', 'jpeg', 'jpg', 'png', 'tif', 'tiff'];
6
+ export class SlickFileDropComponent {
7
+ constructor() {
8
+ this.displayText = "Drop Files Here...";
9
+ this.filesChangedEmitter = new EventEmitter();
10
+ this.fnOnFileInputChange = (e) => this.onFileInputChange(e);
11
+ this.uuid = SlickUtilsService.newGuid();
12
+ }
13
+ onClick(e) {
14
+ this.fileInput.nativeElement.click();
15
+ this.fileInput.nativeElement.removeEventListener("change", this.fnOnFileInputChange, true);
16
+ this.fileInput.nativeElement.addEventListener("change", this.fnOnFileInputChange, true);
17
+ }
18
+ ngOnDestroy() {
19
+ this.fileInput.nativeElement.removeEventListener("change", this.fnOnFileInputChange, true);
20
+ }
21
+ onFileInputChange(e) {
22
+ try {
23
+ this.processFileTimeout = setTimeout(() => {
24
+ alert("Processing files timed out");
25
+ }, 10000);
26
+ this.processFiles(this.fileInput.nativeElement.files);
27
+ // A validation to make sure the files all got processed
28
+ clearTimeout(this.processFileTimeout);
29
+ this.fileInput.nativeElement.value = '';
30
+ }
31
+ catch (err) {
32
+ alert("SlickFileDrop Error: " + err);
33
+ }
34
+ }
35
+ onDrop(e) {
36
+ e.preventDefault();
37
+ e.stopPropagation();
38
+ this.containerRef.nativeElement.classList.remove("slick-file-drop_drag-enter");
39
+ this.processFiles(e.dataTransfer.files);
40
+ }
41
+ onDragEnter(e) {
42
+ this.containerRef.nativeElement.classList.add("slick-file-drop_drag-enter");
43
+ }
44
+ onDragOver(e) {
45
+ e.preventDefault();
46
+ }
47
+ onDragLeave(e) {
48
+ this.containerRef.nativeElement.classList.remove("slick-file-drop_drag-enter");
49
+ }
50
+ async processFiles(files) {
51
+ let slickFileModels = [];
52
+ let imageLoadPromises = [];
53
+ let imgPromises = [];
54
+ for (let i = 0; i < files.length; i++) {
55
+ imageLoadPromises.push(new Promise(async (resolve) => {
56
+ let file = files.item(i);
57
+ let slickFileModel = new SlickFileModel();
58
+ slickFileModel.uuid = SlickUtilsService.newGuid();
59
+ slickFileModel.file = file;
60
+ slickFileModel.name = file.name;
61
+ slickFileModel.title = file.name;
62
+ let fileNameParts = slickFileModel.name.split('.');
63
+ let ext = fileNameParts[fileNameParts.length - 1].toLowerCase();
64
+ if (imgExtensions.indexOf(ext) >= 0) {
65
+ let img = new Image;
66
+ img.onload = () => {
67
+ slickFileModel.thumbnailBase64Image = this.resizeImageToBase64(img, 60, 60);
68
+ slickFileModel.base64Image = this.resizeImageToBase64(img, 1600, 1600);
69
+ slickFileModels.push(slickFileModel);
70
+ resolve(null);
71
+ };
72
+ img.src = await this.getBase64(file);
73
+ }
74
+ else {
75
+ slickFileModels.push(slickFileModel);
76
+ resolve(null);
77
+ }
78
+ }));
79
+ }
80
+ await Promise.all(imageLoadPromises);
81
+ this.filesChangedEmitter.emit(slickFileModels);
82
+ }
83
+ resizeImageToBase64(img, width, height) {
84
+ let scale = 1;
85
+ if (img.width > img.height) {
86
+ if (img.width > width)
87
+ scale = width / img.width;
88
+ }
89
+ else {
90
+ if (img.height > height)
91
+ scale = height / img.height;
92
+ }
93
+ let newWidth = img.width * scale;
94
+ let newHeight = img.height * scale;
95
+ // We create a canvas and get its context.
96
+ var canvas = document.createElement('canvas');
97
+ var ctx = canvas.getContext('2d');
98
+ // We set the dimensions at the wanted size.
99
+ canvas.width = newWidth;
100
+ canvas.height = newHeight;
101
+ // We resize the image with the canvas method drawImage();
102
+ ctx.drawImage(img, 0, 0, newWidth, newHeight);
103
+ return canvas.toDataURL("image/jpeg");
104
+ }
105
+ getBase64(file) {
106
+ return new Promise((resolve, reject) => {
107
+ // Capacitor fails on the FileReader, so we need to get _readReader
108
+ // See: https://github.com/ionic-team/ionic-native/issues/505#issuecomment-503316333
109
+ let fileReader = new FileReader();
110
+ // Get the original real FileReader. The polyfill saves a reference to it.
111
+ const realFileReader = fileReader._realReader;
112
+ // Make sure we were able to get the original FileReader
113
+ if (realFileReader) {
114
+ // Swap out the polyfill instance for the original instance.
115
+ fileReader = realFileReader;
116
+ }
117
+ fileReader.readAsDataURL(file);
118
+ fileReader.onload = () => resolve(fileReader.result);
119
+ fileReader.onerror = (error) => reject('Error: ' + error);
120
+ });
121
+ }
122
+ }
123
+ /** @nocollapse */ SlickFileDropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickFileDropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
124
+ /** @nocollapse */ SlickFileDropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: SlickFileDropComponent, selector: "slick-file-drop", inputs: { displayText: "displayText" }, outputs: { filesChangedEmitter: "filesChanged" }, host: { listeners: { "click": "onClick($event)", "drop": "onDrop($event)", "dragenter": "onDragEnter($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)" } }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<p #containerRef id=\"slick-file-drop_{{uuid}}\" class=\"slick-file-drop card\">\r\n\t{{displayText}}\r\n</p>\r\n<input type=\"file\" #fileInput style=\"display: none\" multiple />\r\n" });
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickFileDropComponent, decorators: [{
126
+ type: Component,
127
+ args: [{ selector: 'slick-file-drop', template: "<p #containerRef id=\"slick-file-drop_{{uuid}}\" class=\"slick-file-drop card\">\r\n\t{{displayText}}\r\n</p>\r\n<input type=\"file\" #fileInput style=\"display: none\" multiple />\r\n" }]
128
+ }], ctorParameters: function () { return []; }, propDecorators: { displayText: [{
129
+ type: Input,
130
+ args: ["displayText"]
131
+ }], filesChangedEmitter: [{
132
+ type: Output,
133
+ args: ["filesChanged"]
134
+ }], containerRef: [{
135
+ type: ViewChild,
136
+ args: ["containerRef"]
137
+ }], fileInput: [{
138
+ type: ViewChild,
139
+ args: ["fileInput"]
140
+ }], onClick: [{
141
+ type: HostListener,
142
+ args: ['click', ['$event']]
143
+ }], onDrop: [{
144
+ type: HostListener,
145
+ args: ['drop', ['$event']]
146
+ }], onDragEnter: [{
147
+ type: HostListener,
148
+ args: ['dragenter', ['$event']]
149
+ }], onDragOver: [{
150
+ type: HostListener,
151
+ args: ['dragover', ['$event']]
152
+ }], onDragLeave: [{
153
+ type: HostListener,
154
+ args: ['dragleave', ['$event']]
155
+ }] } });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stZmlsZS1kcm9wLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL3NsaWNrLWZpbGUtZHJvcC9zbGljay1maWxlLWRyb3AuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stZmlsZS1kcm9wL3NsaWNrLWZpbGUtZHJvcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFjLFNBQVMsRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFFdkYsTUFBTSxhQUFhLEdBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtBQU1uRixNQUFNLE9BQU8sc0JBQXNCO0lBZ0VsQztRQS9Ec0IsZ0JBQVcsR0FBVyxvQkFBb0IsQ0FBQztRQUN6Qyx3QkFBbUIsR0FBb0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUkxRix3QkFBbUIsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBMkQ5RCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUF4REQsT0FBTyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWMsQ0FB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RDtnQkFDNUQsVUFBVSxHQUFHLGNBQWMsQ0FBQzthQUM1QjtZQUVELFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQVMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOztzSUF6Slcsc0JBQXNCOzBIQUF0QixzQkFBc0IsaWhCQ1ZuQywwTEFJQTsyRkRNYSxzQkFBc0I7a0JBSmxDLFNBQVM7K0JBQ0MsaUJBQWlCOzBFQUlMLFdBQVc7c0JBQWhDLEtBQUs7dUJBQUMsYUFBYTtnQkFDSSxtQkFBbUI7c0JBQTFDLE1BQU07dUJBQUMsY0FBYztnQkFDSyxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0QsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQU10QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTZCakMsTUFBTTtzQkFETCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXaEMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNckMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNcEMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU2xpY2tVdGlsc1NlcnZpY2UgfSBmcm9tIFwiLi4vdXRpbHMvc2xpY2stdXRpbHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJU2xpY2tGaWxlTW9kZWwsIFNsaWNrRmlsZU1vZGVsIH0gZnJvbSBcIi4uL3NsaWNrLWZpbGUtbW9kZWwvc2xpY2stZmlsZS5tb2RlbFwiO1xyXG5cclxuY29uc3QgaW1nRXh0ZW5zaW9uczogc3RyaW5nW10gPSBbJ2JtcCcsICdnaWYnLCAnanBlZycsICdqcGcnLCAncG5nJywgJ3RpZicsICd0aWZmJ11cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnc2xpY2stZmlsZS1kcm9wJyxcclxuXHR0ZW1wbGF0ZVVybDogJ3NsaWNrLWZpbGUtZHJvcC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNsaWNrRmlsZURyb3BDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cdEBJbnB1dChcImRpc3BsYXlUZXh0XCIpIGRpc3BsYXlUZXh0OiBzdHJpbmcgPSBcIkRyb3AgRmlsZXMgSGVyZS4uLlwiO1xyXG5cdEBPdXRwdXQoXCJmaWxlc0NoYW5nZWRcIikgZmlsZXNDaGFuZ2VkRW1pdHRlcjogRXZlbnRFbWl0dGVyPElTbGlja0ZpbGVNb2RlbFtdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHRAVmlld0NoaWxkKFwiY29udGFpbmVyUmVmXCIpIGNvbnRhaW5lclJlZjogRWxlbWVudFJlZjtcclxuXHRAVmlld0NoaWxkKFwiZmlsZUlucHV0XCIpIGZpbGVJbnB1dDogRWxlbWVudFJlZjtcclxuXHJcblx0cHJpdmF0ZSBmbk9uRmlsZUlucHV0Q2hhbmdlID0gKGUpID0+IHRoaXMub25GaWxlSW5wdXRDaGFuZ2UoZSk7XHJcblx0cHJpdmF0ZSBwcm9jZXNzRmlsZVRpbWVvdXQ6IE5vZGVKUy5UaW1lcjtcclxuXHJcblx0QEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG5cdG9uQ2xpY2soZSkge1xyXG5cdFx0dGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG5cdFx0KDxIVE1MSW5wdXRFbGVtZW50PnRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgdGhpcy5mbk9uRmlsZUlucHV0Q2hhbmdlLCB0cnVlKTtcclxuXHRcdCg8SFRNTElucHV0RWxlbWVudD50aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50KS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMuZm5PbkZpbGVJbnB1dENoYW5nZSwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpIHtcclxuXHRcdCg8SFRNTElucHV0RWxlbWVudD50aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50KS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMuZm5PbkZpbGVJbnB1dENoYW5nZSwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG9uRmlsZUlucHV0Q2hhbmdlKGUpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMucHJvY2Vzc0ZpbGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0YWxlcnQoXCJQcm9jZXNzaW5nIGZpbGVzIHRpbWVkIG91dFwiKTtcclxuXHRcdFx0fSwgMTAwMDApO1xyXG5cclxuXHRcdFx0dGhpcy5wcm9jZXNzRmlsZXMoKDxIVE1MSW5wdXRFbGVtZW50PnRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQpLmZpbGVzKTtcclxuXHJcblx0XHRcdC8vIEEgdmFsaWRhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGZpbGVzIGFsbCBnb3QgcHJvY2Vzc2VkXHJcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnByb2Nlc3NGaWxlVGltZW91dCk7XHJcblx0XHRcdCg8SFRNTElucHV0RWxlbWVudD50aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50KS52YWx1ZSA9ICcnO1xyXG5cdFx0fVxyXG5cdFx0Y2F0Y2ggKGVycikge1xyXG5cdFx0XHRhbGVydChcIlNsaWNrRmlsZURyb3AgRXJyb3I6IFwiICsgZXJyKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxyXG5cdG9uRHJvcChlKSB7XHJcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuXHRcdHRoaXMuY29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcInNsaWNrLWZpbGUtZHJvcF9kcmFnLWVudGVyXCIpO1xyXG5cclxuXHRcdHRoaXMucHJvY2Vzc0ZpbGVzKCg8RGF0YVRyYW5zZmVyPmUuZGF0YVRyYW5zZmVyKS5maWxlcyk7XHJcblx0fVxyXG5cclxuXHRASG9zdExpc3RlbmVyKCdkcmFnZW50ZXInLCBbJyRldmVudCddKVxyXG5cdG9uRHJhZ0VudGVyKGUpIHtcclxuXHRcdHRoaXMuY29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInNsaWNrLWZpbGUtZHJvcF9kcmFnLWVudGVyXCIpO1xyXG5cdH1cclxuXHJcblx0QEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxyXG5cdG9uRHJhZ092ZXIoZSkge1xyXG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdH1cclxuXHJcblx0QEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSlcclxuXHRvbkRyYWdMZWF2ZShlKSB7XHJcblx0XHR0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJzbGljay1maWxlLWRyb3BfZHJhZy1lbnRlclwiKTtcclxuXHR9XHJcblxyXG5cdHV1aWQ6IHN0cmluZztcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLnV1aWQgPSBTbGlja1V0aWxzU2VydmljZS5uZXdHdWlkKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIHByb2Nlc3NGaWxlcyhmaWxlczogRmlsZUxpc3QpIHtcclxuXHRcdGxldCBzbGlja0ZpbGVNb2RlbHM6IElTbGlja0ZpbGVNb2RlbFtdID0gW107XHJcblx0XHRsZXQgaW1hZ2VMb2FkUHJvbWlzZXMgPSBbXTtcclxuXHJcblx0XHRsZXQgaW1nUHJvbWlzZXM6IFByb21pc2U8c3RyaW5nPltdID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGltYWdlTG9hZFByb21pc2VzLnB1c2gobmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuXHRcdFx0XHRsZXQgZmlsZTogRmlsZSA9IGZpbGVzLml0ZW0oaSk7XHJcblx0XHRcdFx0bGV0IHNsaWNrRmlsZU1vZGVsID0gbmV3IFNsaWNrRmlsZU1vZGVsKCk7XHJcblx0XHRcdFx0c2xpY2tGaWxlTW9kZWwudXVpZCA9IFNsaWNrVXRpbHNTZXJ2aWNlLm5ld0d1aWQoKTtcclxuXHRcdFx0XHRzbGlja0ZpbGVNb2RlbC5maWxlID0gZmlsZTtcclxuXHRcdFx0XHRzbGlja0ZpbGVNb2RlbC5uYW1lID0gZmlsZS5uYW1lO1xyXG5cdFx0XHRcdHNsaWNrRmlsZU1vZGVsLnRpdGxlID0gZmlsZS5uYW1lO1xyXG5cclxuXHRcdFx0XHRsZXQgZmlsZU5hbWVQYXJ0cyA9IHNsaWNrRmlsZU1vZGVsLm5hbWUuc3BsaXQoJy4nKTtcclxuXHRcdFx0XHRsZXQgZXh0ID0gZmlsZU5hbWVQYXJ0c1tmaWxlTmFtZVBhcnRzLmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKCk7XHJcblxyXG5cdFx0XHRcdGlmIChpbWdFeHRlbnNpb25zLmluZGV4T2YoZXh0KSA+PSAwKSB7XHJcblx0XHRcdFx0XHRsZXQgaW1nID0gbmV3IEltYWdlO1xyXG5cdFx0XHRcdFx0aW1nLm9ubG9hZCA9ICgpID0+IHtcdFxyXG5cdFx0XHRcdFx0XHRzbGlja0ZpbGVNb2RlbC50aHVtYm5haWxCYXNlNjRJbWFnZSA9IHRoaXMucmVzaXplSW1hZ2VUb0Jhc2U2NChpbWcsIDYwLCA2MCk7XHJcblx0XHRcdFx0XHRcdHNsaWNrRmlsZU1vZGVsLmJhc2U2NEltYWdlID0gdGhpcy5yZXNpemVJbWFnZVRvQmFzZTY0KGltZywgMTYwMCwgMTYwMCk7XHJcblx0XHRcdFx0XHRcdHNsaWNrRmlsZU1vZGVscy5wdXNoKHNsaWNrRmlsZU1vZGVsKTtcclxuXHRcdFx0XHRcdFx0cmVzb2x2ZShudWxsKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGltZy5zcmMgPSBhd2FpdCB0aGlzLmdldEJhc2U2NChmaWxlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRzbGlja0ZpbGVNb2RlbHMucHVzaChzbGlja0ZpbGVNb2RlbCk7XHJcblx0XHRcdFx0XHRyZXNvbHZlKG51bGwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGF3YWl0IFByb21pc2UuYWxsKGltYWdlTG9hZFByb21pc2VzKTtcclxuXHRcdHRoaXMuZmlsZXNDaGFuZ2VkRW1pdHRlci5lbWl0KHNsaWNrRmlsZU1vZGVscyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJlc2l6ZUltYWdlVG9CYXNlNjQoaW1nOiBIVE1MSW1hZ2VFbGVtZW50LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHN0cmluZyB7XHJcblx0XHRsZXQgc2NhbGU6IG51bWJlciA9IDE7XHJcblx0XHRpZiAoaW1nLndpZHRoID4gaW1nLmhlaWdodCkge1xyXG5cdFx0XHRpZiAoaW1nLndpZHRoID4gd2lkdGgpXHJcblx0XHRcdFx0c2NhbGUgPSB3aWR0aCAvIGltZy53aWR0aDtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRpZiAoaW1nLmhlaWdodCA+IGhlaWdodClcclxuXHRcdFx0XHRzY2FsZSA9IGhlaWdodCAvIGltZy5oZWlnaHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IG5ld1dpZHRoID0gaW1nLndpZHRoICogc2NhbGU7XHJcblx0XHRsZXQgbmV3SGVpZ2h0ID0gaW1nLmhlaWdodCAqIHNjYWxlO1xyXG5cclxuXHRcdC8vIFdlIGNyZWF0ZSBhIGNhbnZhcyBhbmQgZ2V0IGl0cyBjb250ZXh0LlxyXG5cdFx0dmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG5cdFx0dmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuXHRcdC8vIFdlIHNldCB0aGUgZGltZW5zaW9ucyBhdCB0aGUgd2FudGVkIHNpemUuXHJcblx0XHRjYW52YXMud2lkdGggPSBuZXdXaWR0aDtcclxuXHRcdGNhbnZhcy5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcblxyXG5cdFx0Ly8gV2UgcmVzaXplIHRoZSBpbWFnZSB3aXRoIHRoZSBjYW52YXMgbWV0aG9kIGRyYXdJbWFnZSgpO1xyXG5cdFx0Y3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xyXG5cclxuXHRcdHJldHVybiBjYW52YXMudG9EYXRhVVJMKFwiaW1hZ2UvanBlZ1wiKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0QmFzZTY0KGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHQvLyBDYXBhY2l0b3IgZmFpbHMgb24gdGhlIEZpbGVSZWFkZXIsIHNvIHdlIG5lZWQgdG8gZ2V0IF9yZWFkUmVhZGVyXHJcblx0XHRcdC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2lvbmljLXRlYW0vaW9uaWMtbmF0aXZlL2lzc3Vlcy81MDUjaXNzdWVjb21tZW50LTUwMzMxNjMzM1xyXG5cdFx0XHRsZXQgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG5cdFx0XHQvLyBHZXQgdGhlIG9yaWdpbmFsIHJlYWwgRmlsZVJlYWRlci4gVGhlIHBvbHlmaWxsIHNhdmVzIGEgcmVmZXJlbmNlIHRvIGl0LlxyXG5cdFx0XHRjb25zdCByZWFsRmlsZVJlYWRlciA9IChmaWxlUmVhZGVyIGFzIGFueSkuX3JlYWxSZWFkZXI7XHJcblxyXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugd2VyZSBhYmxlIHRvIGdldCB0aGUgb3JpZ2luYWwgRmlsZVJlYWRlciBcclxuXHRcdFx0aWYgKHJlYWxGaWxlUmVhZGVyKSB7XHJcblx0XHRcdFx0Ly8gU3dhcCBvdXQgdGhlIHBvbHlmaWxsIGluc3RhbmNlIGZvciB0aGUgb3JpZ2luYWwgaW5zdGFuY2UuXHJcblx0XHRcdFx0ZmlsZVJlYWRlciA9IHJlYWxGaWxlUmVhZGVyO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcblx0XHRcdGZpbGVSZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZSg8c3RyaW5nPmZpbGVSZWFkZXIucmVzdWx0KTtcclxuXHRcdFx0ZmlsZVJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoJ0Vycm9yOiAnICsgZXJyb3IpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiIsIjxwICNjb250YWluZXJSZWYgaWQ9XCJzbGljay1maWxlLWRyb3Bfe3t1dWlkfX1cIiBjbGFzcz1cInNsaWNrLWZpbGUtZHJvcCBjYXJkXCI+XHJcblx0e3tkaXNwbGF5VGV4dH19XHJcbjwvcD5cclxuPGlucHV0IHR5cGU9XCJmaWxlXCIgI2ZpbGVJbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiBtdWx0aXBsZSAvPlxyXG4iXX0=
@@ -0,0 +1,20 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from "@angular/core";
3
+ import { FormsModule } from "@angular/forms";
4
+ import { SlickFileDropComponent } from "./slick-file-drop.component";
5
+ import * as i0 from "@angular/core";
6
+ export class SlickFileDropModule {
7
+ }
8
+ /** @nocollapse */ SlickFileDropModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickFileDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ /** @nocollapse */ SlickFileDropModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickFileDropModule, declarations: [SlickFileDropComponent], imports: [CommonModule, FormsModule], exports: [CommonModule, FormsModule, SlickFileDropComponent] });
10
+ /** @nocollapse */ SlickFileDropModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickFileDropModule, imports: [[CommonModule, FormsModule], CommonModule, FormsModule] });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickFileDropModule, decorators: [{
12
+ type: NgModule,
13
+ args: [{
14
+ imports: [CommonModule, FormsModule],
15
+ declarations: [SlickFileDropComponent],
16
+ exports: [CommonModule, FormsModule, SlickFileDropComponent]
17
+ }]
18
+ }] });
19
+ export { SlickFileDropComponent };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stZmlsZS1kcm9wLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL3NsaWNrLWZpbGUtZHJvcC9zbGljay1maWxlLWRyb3AubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFPckUsTUFBTSxPQUFPLG1CQUFtQjs7bUlBQW5CLG1CQUFtQjtvSUFBbkIsbUJBQW1CLGlCQUhoQixzQkFBc0IsYUFEM0IsWUFBWSxFQUFFLFdBQVcsYUFFekIsWUFBWSxFQUFFLFdBQVcsRUFBRSxzQkFBc0I7b0lBRS9DLG1CQUFtQixZQUp0QixDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsRUFFMUIsWUFBWSxFQUFFLFdBQVc7MkZBRXZCLG1CQUFtQjtrQkFML0IsUUFBUTttQkFBQztvQkFDVCxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO29CQUNwQyxZQUFZLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDdEMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsQ0FBQztpQkFDNUQ7O0FBRUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFNsaWNrRmlsZURyb3BDb21wb25lbnQgfSBmcm9tIFwiLi9zbGljay1maWxlLWRyb3AuY29tcG9uZW50XCI7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG5cdGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcclxuXHRkZWNsYXJhdGlvbnM6IFtTbGlja0ZpbGVEcm9wQ29tcG9uZW50XSxcclxuXHRleHBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgU2xpY2tGaWxlRHJvcENvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNsaWNrRmlsZURyb3BNb2R1bGUgeyB9XHJcbmV4cG9ydCB7IFNsaWNrRmlsZURyb3BDb21wb25lbnQgfVxyXG4iXX0=
@@ -0,0 +1,173 @@
1
+ import { Component, Input, Output, ViewChild, EventEmitter } from "@angular/core";
2
+ import { SlickSleepService } from "../utils/slick-sleep.service";
3
+ import { SlickUtilsService } from "../utils/slick-utils.service";
4
+ import { SlickConfirmDialogResults } from "../slick-confirm-dialog/slick-confirm-dialog.module";
5
+ import * as moment from 'moment';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../slick-confirm-dialog/slick-confirm-dialog.component";
8
+ import * as i2 from "@angular/common";
9
+ import * as i3 from "@angular/forms";
10
+ const excelExtensions = ['xls', 'xlt', 'xlm', 'xlsx', 'xlsm', 'xltx', 'xltm', 'xlsb', 'xla', 'xlam', 'xll', 'xlw'];
11
+ const wordExtensions = ['doc', 'dot', 'wbk', 'docx', 'docm', 'dotx', 'dotm', 'docb'];
12
+ const pdfExtensions = ['pdf'];
13
+ export class SlickFileListItemComponent {
14
+ constructor() {
15
+ this.allowDelete = true;
16
+ this.showPhotoGallery = false;
17
+ this.showCheckbox = false;
18
+ this.confirmDelete = true;
19
+ this.fileChangeEmitter = new EventEmitter();
20
+ this.fileDeleteEmitter = new EventEmitter();
21
+ this.fileClicked = new EventEmitter();
22
+ this.checkChanged = new EventEmitter();
23
+ this.isEditing = false;
24
+ this.tempTitle = '';
25
+ this.fnDocumentClick = (e) => this.documentClick(e);
26
+ this.itemSize = 120;
27
+ this.itemImgSize = 90;
28
+ this.uuid = SlickUtilsService.newGuid();
29
+ }
30
+ ngOnChanges(changes) {
31
+ if (changes.thumbnailSize) {
32
+ this.itemImgSize = parseInt(this.thumbnailSize.toString());
33
+ this.itemSize = this.itemImgSize + 20;
34
+ }
35
+ if (changes.allowDelete && changes.allowDelete.currentValue)
36
+ this.allowDelete = (changes.allowDelete.currentValue.toString().toLowerCase() !== 'false');
37
+ if (changes.showPhotoGallery && changes.showPhotoGallery.currentValue)
38
+ this.showPhotoGallery = (changes.showPhotoGallery.currentValue.toString().toLowerCase() !== 'false');
39
+ if (changes.showCheckbox && changes.showCheckbox.currentValue)
40
+ this.showCheckbox = (changes.showCheckbox.currentValue.toString().toLowerCase() !== 'false');
41
+ this.confirmDelete = (this.confirmDelete.toString() === 'true') ? true : false;
42
+ if (this.file && this.file.name && !this.file.thumbnailBase64Image && !this.file.url) {
43
+ if (this.file.isChecked === null)
44
+ this.file.isChecked = false;
45
+ let fileNameParts = this.file.name.split('.');
46
+ if (fileNameParts.length > 1) {
47
+ let ext = fileNameParts[fileNameParts.length - 1].toLowerCase();
48
+ if (excelExtensions.indexOf(ext) >= 0) {
49
+ this.file.thumbnailBase64Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADsAAAA5CAYAAACI7VO4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhFQjQ5NUJFODUwNzExRTdBRTM4ODhEODFBNTAzMTU3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhFQjQ5NUJGODUwNzExRTdBRTM4ODhEODFBNTAzMTU3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OEVCNDk1QkM4NTA3MTFFN0FFMzg4OEQ4MUE1MDMxNTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OEVCNDk1QkQ4NTA3MTFFN0FFMzg4OEQ4MUE1MDMxNTciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7t+5xAAAAdSklEQVR42sxb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";
50
+ }
51
+ else if (wordExtensions.indexOf(ext) >= 0) {
52
+ this.file.thumbnailBase64Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA7CAYAAAAn+enKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkYzODkyMUVBODUwNzExRTc5MjkxQTlBRjg4QzFEQjY1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkYzODkyMUVCODUwNzExRTc5MjkxQTlBRjg4QzFEQjY1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjM4OTIxRTg4NTA3MTFFNzkyOTFBOUFGODhDMURCNjUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjM4OTIxRTk4NTA3MTFFNzkyOTFBOUFGODhDMURCNjUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4T4+oBAAAaRklEQVR42sxb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";
53
+ }
54
+ else if (pdfExtensions.indexOf(ext) >= 0) {
55
+ this.file.thumbnailBase64Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkYyRUQwREYxODUwODExRTdBN0NCQUZBNUY3NDBGRUMwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkYyRUQwREYyODUwODExRTdBN0NCQUZBNUY3NDBGRUMwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjJFRDBERUY4NTA4MTFFN0E3Q0JBRkE1Rjc0MEZFQzAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjJFRDBERjA4NTA4MTFFN0E3Q0JBRkE1Rjc0MEZFQzAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6x4oA3AAATPklEQVR42tRb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";
56
+ }
57
+ else {
58
+ this.file.thumbnailBase64Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAA8CAYAAAAgwDn8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA0OEFBMUY4ODUwQTExRTdCRTBEODA1RTkwQkYwRkEzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA0OEFBMUY5ODUwQTExRTdCRTBEODA1RTkwQkYwRkEzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDQ4QUExRjY4NTBBMTFFN0JFMEQ4MDVFOTBCRjBGQTMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDQ4QUExRjc4NTBBMTFFN0JFMEQ4MDVFOTBCRjBGQTMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4yP5ieAAAFD0lEQVR42uxayUsbURh/iaPGfQsKerGuuCAFL54KIip6sVIEe5MeRJHqX9NelCq1SCuFGoPiUpeDoh4UxZPe3SO4a+LW93v6hsmQmJkks0jzwTCTOGa+37f83vd9byxTU1NVa2trPx4fH6OsVuuNxWIh9NpKnoRePtrpOZ4ed/SaSEX+OVi5v7+30VN0RUXFp+zs7P7r62sSFRVFoqOjSVxcHLvGIQgCgX5SEdbX14f29vbeJCQkeP1BfqMvUXKPEsHvuN1usri4+K2qqiouLy/v69XVlaL/FS4uLuypqamiMrBquCyrRKjX2RkGvLm5IUtLS1+opT35+fl9SkAIcNPt7S0DgB87Pz9n1uA/rJXASHhGcnIyO+OzzWYjCJ+FhYVefFdUVNQHXV4E8Bzz5OHhgVmgrq6OFBQUEOoZTQHExsYyY01MTLBnxcTEMD3i4+PJ5eUlmZub66XfucvKygbPzs78A+AxCAA0mQh1HcnNzdUlfOD52dlZ9mxcw9rwCMIJIKanp79TEJ6SkpJfp6envkOQxzsHcXd3p1v8Q2k8D8rScCHl5eXk4OCA6cFJZWxs7OfW1taHjIwMn2FtJSYQJGtiYiJpa2tjIHZ2dlg4JSUlMcM6HI7fm5ubH9PT01mogVI5GFMA4OQB6ezs9AIBYFB4dHR0iFL+e1wj0eE90wCQS1dXF6FxT3Z3d0UQYEun0/lndXW1EbkKrzEm05PzlQqsDBCFhYUiCOQEwolS7JjL5apJS0t7AkBMKrB4d3c3o3RaKbDvkBOw/uTk5N/9/f13LLHNoCxf1HyB6OnpIcXFxeTo6EgEgfVqZGRkhubJW9N4wF9dBRAdHR2MZrGggWJR+ng8HoGy00/BDMqnpKQw1hkYGGAKSvMSIYN4h4cABoJ7sODRFTxbXImNSGY8E2UEQoLGNNne3hZDSeoRzkSolaA8khxnlCOC0WyTk5PDlEPdD2vLew1eHeMAKIDFfRygoQBg0fb2dvEzrOoPAJoZHP39/WRjY4OFleEAuBd8XfsTlBJSoKZdB/wJij9pfrw6AHK6fXUATFlO/9cAArIQuqXl5WVGZUpYIpxNDlpb2hOHBgD1x/DwMAOAlU8vQfGGAUPIAGB1u93OAICD9WQbVJ6BWCggACzbsIbeHjg8PCQvjVMUA0An1NDQoHilDJcg99CRhQwAZWtzc3OERg2l0ZWVFU1CiA+00PdqBkBLGkWz3traqgqAvPFSRKPo/rWgUVSWGOaqLb+lIBTRqMvl0sQDoEqEkaqkfR7FKwaAdq+xsVGTHMA4ERM4tX20dDELCACrYVNTU4RGDaNRuHlmZkZsrLUUTBwwQq+pqQkvgPHxcV1qoZOTE7ZDFFYAsHpmZqYu1SgMBMoOVKWqplHQnV4e8FVCh1yN1tbW6pID2HkJ5IGgqtGWlpYIjRpGo5gez8/PB70S8+a8srLSuHXA6XQGncRoR6urq8MKQFUpEWpT7685D0VU0+jx8XFAAPINCakHlL46o7QaVRVCsB56YnkVKFdUOs+Xjr9RLqutOFXnwEvbSyin6+vrIzQaAeAPQLjeezPcA3y3XM/pWzDit6mH8jiw4Yz6R8lcUldLU92wFQu9pHTuBQAjDjQvDodD85f+gl3AAAJbrJyqBemYAmds58NNZswNHuZeIUQR3WObH3z/GsTj8YgrP6oEobS09DONq0GbzXaLV49fCflY3G53YlZW1sI/AQYA/aOxmPzI7uUAAAAASUVORK5CYII=";
59
+ }
60
+ }
61
+ }
62
+ if (this.file && this.file.fileDate) {
63
+ const fileDateFormat = (this.file.fileDateFormat ?? '') !== '' ? this.file.fileDateFormat : 'M/D/YYYY h:mm:ss a';
64
+ this.fileDateFormatted = moment(this.file.fileDate).format(fileDateFormat);
65
+ }
66
+ }
67
+ onClick() {
68
+ if (this.fileClicked)
69
+ this.fileClicked.emit(this.file);
70
+ }
71
+ async deleteFile(e) {
72
+ e.stopPropagation();
73
+ e.preventDefault();
74
+ if (this.confirmDelete === false) {
75
+ this.fileDeleteEmitter.emit(this.file);
76
+ }
77
+ else {
78
+ const result = await this.deleteConfirmRef.confirm();
79
+ if (result === SlickConfirmDialogResults.Ok)
80
+ this.fileDeleteEmitter.emit(this.file);
81
+ }
82
+ }
83
+ async editTitle() {
84
+ this.isEditing = true;
85
+ this.tempTitle = this.file.title;
86
+ await SlickSleepService.sleep();
87
+ this.editTitleInputRef.nativeElement.setSelectionRange(0, this.editTitleInputRef.nativeElement.value.length);
88
+ this.editTitleInputRef.nativeElement.focus();
89
+ document.addEventListener("click", this.fnDocumentClick, true);
90
+ }
91
+ onKeyDown(e) {
92
+ if (e.which === 13) {
93
+ this.file.title = this.tempTitle;
94
+ this.fileChangeEmitter.emit(this.file);
95
+ this.isEditing = false;
96
+ document.removeEventListener("click", this.fnDocumentClick, true);
97
+ }
98
+ if (e.which === 27) {
99
+ this.tempTitle = null;
100
+ this.isEditing = false;
101
+ document.removeEventListener("click", this.fnDocumentClick, true);
102
+ }
103
+ }
104
+ async documentClick(e) {
105
+ await SlickSleepService.sleep();
106
+ const clickedInside = SlickUtilsService.checkParentClassExists(e.target, 'slick-file-list-item_title');
107
+ if (clickedInside)
108
+ return;
109
+ if (this.isEditing === true) {
110
+ this.file.title = this.tempTitle;
111
+ this.fileChangeEmitter.emit(this.file);
112
+ this.isEditing = false;
113
+ document.removeEventListener("click", this.fnDocumentClick, true);
114
+ }
115
+ }
116
+ async onCheckboxClicked(e) {
117
+ this.file.isChecked = !this.file.isChecked;
118
+ if (this.checkChanged)
119
+ this.checkChanged.emit(e);
120
+ }
121
+ ngOnDestroy() {
122
+ document.removeEventListener("click", this.fnDocumentClick, true);
123
+ }
124
+ }
125
+ /** @nocollapse */ SlickFileListItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickFileListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
126
+ /** @nocollapse */ SlickFileListItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: SlickFileListItemComponent, selector: "slick-file-list-item", inputs: { file: "file", allowDelete: "allowDelete", showPhotoGallery: "showPhotoGallery", showCheckbox: "showCheckbox", thumbnailSize: "thumbnailSize", confirmDelete: "confirmDelete" }, outputs: { fileChangeEmitter: "fileChange", fileDeleteEmitter: "fileDelete", fileClicked: "fileClicked", checkChanged: "checkChanged" }, viewQueries: [{ propertyName: "titleDivRef", first: true, predicate: ["titleDivRef"], descendants: true }, { propertyName: "editTitleDivRef", first: true, predicate: ["editTitleDivRef"], descendants: true }, { propertyName: "editTitleInputRef", first: true, predicate: ["editTitleInputRef"], descendants: true }, { propertyName: "deleteConfirmRef", first: true, predicate: ["deleteConfirmRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"slick-file-list-item\" id=\"slick-file-list-item_{{uuid}}\">\r\n\t<div class=\"slick-file-list-item_img card\" (click)=\"onClick()\" [ngStyle]=\"{ 'cursor': (showPhotoGallery === true) ? 'pointer' : 'default' }\" [style.minHeight.px]=\"itemSize + 2\" [style.minWidth.px]=\"itemSize\">\r\n\t\t<img *ngIf=\"file.thumbnailBase64Image\" [src]=\"file.thumbnailBase64Image\" [style.maxWidth.px]=\"itemImgSize\" [style.maxHeight.px]=\"itemImgSize\" />\r\n\t\t<img *ngIf=\"!file.thumbnailBase64Image && file.base64Image\" [src]=\"file.base64Image\" [style.maxWidth.px]=\"itemImgSize\" [style.maxHeight.px]=\"itemImgSize\" />\r\n\t\t<img *ngIf=\"!file.thumbnailBase64Image && !file.base64Image && file.thumbnailUrl\" [src]=\"file.thumbnailUrl\" [style.maxWidth.px]=\"itemImgSize\" [style.maxHeight.px]=\"itemImgSize\" />\r\n\t\t<img *ngIf=\"!file.thumbnailBase64Image && !file.base64Image && !file.thumbnailUrl && file.url\" [src]=\"file.url\" [style.maxWidth.px]=\"itemImgSize\" [style.maxHeight.px]=\"itemImgSize\" />\r\n\t\t<i *ngIf=\"allowDelete\" class=\"fas fa-times-circle bg-white text-danger\" (click)=\"deleteFile($event)\"></i>\r\n\t</div>\r\n\t<div class=\"slick-file-list-item_title\" *ngIf=\"fileDateFormatted\" [style.minWidth.px]=\"itemSize\" [style.maxWidth.px]=\"itemSize\">\r\n\t\t<div class=\"slick-file-list-item_date\" *ngIf=\"fileDateFormatted\" [style.minWidth.px]=\"itemSize\">{{fileDateFormatted}}</div>\r\n\t</div>\r\n\t<div class=\"slick-file-list-item_title\" [style.minWidth.px]=\"itemSize\" [style.maxWidth.px]=\"itemSize\">\r\n\t\t<div class=\"slick-file-list-item_display-title\" #titleDivRef style=\"cursor: pointer\" *ngIf=\"!isEditing\" (click)=\"editTitle()\">{{file.title}}</div>\r\n\t\t<div #editTitleDivRef class=\"slick-file-list-item_edit-title\" *ngIf=\"isEditing\"><input #editTitleInputRef type=\"text\" class=\"form-control\" [(ngModel)]=\"tempTitle\" (keydown)=\"onKeyDown($event)\" [style.width.px]=\"itemSize\" /></div>\r\n\t</div>\r\n\r\n\t<!-- We want the user to be able to click just a little outside of the checkbox and still have it check -->\r\n\t<div *ngIf=\"showCheckbox === true\" class=\"slick-file-checkbox\" (click)=\"onCheckboxClicked($event)\">\r\n\t\t<input type=\"checkbox\" [ngModel]=\"file.isChecked\" />\r\n\t</div>\r\n</div>\r\n\r\n<slick-confirm-dialog #deleteConfirmRef>\r\n\t<h4 class=\"p-0 m-0 text-danger\">Are you sure you want to delete?</h4>\r\n</slick-confirm-dialog>", components: [{ type: i1.SlickConfirmDialogComponent, selector: "slick-confirm-dialog", inputs: ["width", "okButtonText", "cancelButtonText", "showOkButton", "showCancelButton"] }], directives: [{ type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }] });
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickFileListItemComponent, decorators: [{
128
+ type: Component,
129
+ args: [{ selector: 'slick-file-list-item', template: "<div class=\"slick-file-list-item\" id=\"slick-file-list-item_{{uuid}}\">\r\n\t<div class=\"slick-file-list-item_img card\" (click)=\"onClick()\" [ngStyle]=\"{ 'cursor': (showPhotoGallery === true) ? 'pointer' : 'default' }\" [style.minHeight.px]=\"itemSize + 2\" [style.minWidth.px]=\"itemSize\">\r\n\t\t<img *ngIf=\"file.thumbnailBase64Image\" [src]=\"file.thumbnailBase64Image\" [style.maxWidth.px]=\"itemImgSize\" [style.maxHeight.px]=\"itemImgSize\" />\r\n\t\t<img *ngIf=\"!file.thumbnailBase64Image && file.base64Image\" [src]=\"file.base64Image\" [style.maxWidth.px]=\"itemImgSize\" [style.maxHeight.px]=\"itemImgSize\" />\r\n\t\t<img *ngIf=\"!file.thumbnailBase64Image && !file.base64Image && file.thumbnailUrl\" [src]=\"file.thumbnailUrl\" [style.maxWidth.px]=\"itemImgSize\" [style.maxHeight.px]=\"itemImgSize\" />\r\n\t\t<img *ngIf=\"!file.thumbnailBase64Image && !file.base64Image && !file.thumbnailUrl && file.url\" [src]=\"file.url\" [style.maxWidth.px]=\"itemImgSize\" [style.maxHeight.px]=\"itemImgSize\" />\r\n\t\t<i *ngIf=\"allowDelete\" class=\"fas fa-times-circle bg-white text-danger\" (click)=\"deleteFile($event)\"></i>\r\n\t</div>\r\n\t<div class=\"slick-file-list-item_title\" *ngIf=\"fileDateFormatted\" [style.minWidth.px]=\"itemSize\" [style.maxWidth.px]=\"itemSize\">\r\n\t\t<div class=\"slick-file-list-item_date\" *ngIf=\"fileDateFormatted\" [style.minWidth.px]=\"itemSize\">{{fileDateFormatted}}</div>\r\n\t</div>\r\n\t<div class=\"slick-file-list-item_title\" [style.minWidth.px]=\"itemSize\" [style.maxWidth.px]=\"itemSize\">\r\n\t\t<div class=\"slick-file-list-item_display-title\" #titleDivRef style=\"cursor: pointer\" *ngIf=\"!isEditing\" (click)=\"editTitle()\">{{file.title}}</div>\r\n\t\t<div #editTitleDivRef class=\"slick-file-list-item_edit-title\" *ngIf=\"isEditing\"><input #editTitleInputRef type=\"text\" class=\"form-control\" [(ngModel)]=\"tempTitle\" (keydown)=\"onKeyDown($event)\" [style.width.px]=\"itemSize\" /></div>\r\n\t</div>\r\n\r\n\t<!-- We want the user to be able to click just a little outside of the checkbox and still have it check -->\r\n\t<div *ngIf=\"showCheckbox === true\" class=\"slick-file-checkbox\" (click)=\"onCheckboxClicked($event)\">\r\n\t\t<input type=\"checkbox\" [ngModel]=\"file.isChecked\" />\r\n\t</div>\r\n</div>\r\n\r\n<slick-confirm-dialog #deleteConfirmRef>\r\n\t<h4 class=\"p-0 m-0 text-danger\">Are you sure you want to delete?</h4>\r\n</slick-confirm-dialog>" }]
130
+ }], ctorParameters: function () { return []; }, propDecorators: { file: [{
131
+ type: Input,
132
+ args: ["file"]
133
+ }], allowDelete: [{
134
+ type: Input,
135
+ args: ["allowDelete"]
136
+ }], showPhotoGallery: [{
137
+ type: Input,
138
+ args: ["showPhotoGallery"]
139
+ }], showCheckbox: [{
140
+ type: Input,
141
+ args: ["showCheckbox"]
142
+ }], thumbnailSize: [{
143
+ type: Input,
144
+ args: ["thumbnailSize"]
145
+ }], confirmDelete: [{
146
+ type: Input,
147
+ args: ["confirmDelete"]
148
+ }], fileChangeEmitter: [{
149
+ type: Output,
150
+ args: ["fileChange"]
151
+ }], fileDeleteEmitter: [{
152
+ type: Output,
153
+ args: ["fileDelete"]
154
+ }], fileClicked: [{
155
+ type: Output,
156
+ args: ["fileClicked"]
157
+ }], checkChanged: [{
158
+ type: Output,
159
+ args: ["checkChanged"]
160
+ }], titleDivRef: [{
161
+ type: ViewChild,
162
+ args: ["titleDivRef"]
163
+ }], editTitleDivRef: [{
164
+ type: ViewChild,
165
+ args: ["editTitleDivRef"]
166
+ }], editTitleInputRef: [{
167
+ type: ViewChild,
168
+ args: ["editTitleInputRef"]
169
+ }], deleteConfirmRef: [{
170
+ type: ViewChild,
171
+ args: ["deleteConfirmRef"]
172
+ }] } });
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stZmlsZS1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stZmlsZS1saXN0L3NsaWNrLWZpbGUtbGlzdC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL3NsaWNrLWZpbGUtbGlzdC9zbGljay1maWxlLWxpc3QtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBZ0UsTUFBTSxlQUFlLENBQUM7QUFDaEosT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFakUsT0FBTyxFQUErQix5QkFBeUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTdILE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7OztBQUVqQyxNQUFNLGVBQWUsR0FBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0gsTUFBTSxjQUFjLEdBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0YsTUFBTSxhQUFhLEdBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQU14QyxNQUFNLE9BQU8sMEJBQTBCO0lBMEJ0QztRQXhCc0IsZ0JBQVcsR0FBWSxJQUFJLENB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LENBQUM7SUFFRCxXQUFXO1FBQ1YsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7OzBJQTlJVywwQkFBMEI7OEhBQTFCLDBCQUEwQixxekJDaEJ2QyxvNUVBd0J1QjsyRkRSViwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0Msc0JBQXNCOzBFQUlqQixJQUFJO3NCQUFsQixLQUFLO3VCQUFDLE1BQU07Z0JBQ1MsV0FBVztzQkFBaEMsS0FBSzt1QkFBQyxhQUFhO2dCQUNPLGdCQUFnQjtzQkFBMUMsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBQ0YsWUFBWTtzQkFBbEMsS0FBSzt1QkFBQyxjQUFjO2dCQUNHLGFBQWE7c0JBQXBDLEtBQUs7dUJBQUMsZUFBZTtnQkFDRSxhQUFhO3NCQUFwQyxLQUFLO3VCQUFDLGVBQWU7Z0JBQ0EsaUJBQWlCO3NCQUF0QyxNQUFNO3VCQUFDLFlBQVk7Z0JBQ0UsaUJBQWlCO3NCQUF0QyxNQUFNO3VCQUFDLFlBQVk7Z0JBQ0csV0FBVztzQkFBakMsTUFBTTt1QkFBQyxhQUFhO2dCQUNHLFlBQVk7c0JBQW5DLE1BQU07dUJBQUMsY0FBYztnQkFFSSxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ00sZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ0ksaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDQyxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU2xpY2tTbGVlcFNlcnZpY2UgfSBmcm9tIFwiLi4vdXRpbHMvc2xpY2stc2xlZXAuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTbGlja1V0aWxzU2VydmljZSB9IGZyb20gXCIuLi91dGlscy9zbGljay11dGlscy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IElTbGlja0ZpbGVNb2RlbCB9IGZyb20gXCIuLi9zbGljay1maWxlLW1vZGVsL3NsaWNrLWZpbGUubW9kZWxcIjtcclxuaW1wb3J0IHsgU2xpY2tDb25maXJtRGlhbG9nQ29tcG9uZW50LCBTbGlja0NvbmZpcm1EaWFsb2dSZXN1bHRzIH0gZnJvbSBcIi4uL3NsaWNrLWNvbmZpcm0tZGlhbG9nL3NsaWNrLWNvbmZpcm0tZGlhbG9nLm1vZHVsZVwiO1xyXG5cclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5jb25zdCBleGNlbEV4dGVuc2lvbnM6IHN0cmluZ1tdID0gWyd4bHMnLCAneGx0JywgJ3hsbScsICd4bHN4JywgJ3hsc20nLCAneGx0eCcsICd4bHRtJywgJ3hsc2InLCAneGxhJywgJ3hsYW0nLCAneGxsJywgJ3hsdyddO1xyXG5jb25zdCB3b3JkRXh0ZW5zaW9uczogc3RyaW5nW10gPSBbJ2RvYycsICdkb3QnLCAnd2JrJywgJ2RvY3gnLCAnZG9jbScsICdkb3R4JywgJ2RvdG0nLCAnZG9jYiddO1xyXG5jb25zdCBwZGZFeHRlbnNpb25zOiBzdHJpbmdbXSA9IFsncGRmJ107XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ3NsaWNrLWZpbGUtbGlzdC1pdGVtJyxcclxuXHR0ZW1wbGF0ZVVybDogJ3NsaWNrLWZpbGUtbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xpY2tGaWxlTGlzdEl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblx0QElucHV0KFwiZmlsZVwiKSBmaWxlOiBJU2xpY2tGaWxlTW9kZWw7XHRcclxuXHRASW5wdXQoXCJhbGxvd0RlbGV0ZVwiKSBhbGxvd0RlbGV0ZTogYm9vbGVhbiA9IHRydWU7XHJcblx0QElucHV0KFwic2hvd1Bob3RvR2FsbGVyeVwiKSBzaG93UGhvdG9HYWxsZXJ5OiBib29sZWFuID0gZmFsc2U7XHJcblx0QElucHV0KFwic2hvd0NoZWNrYm94XCIpIHNob3dDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdEBJbnB1dChcInRodW1ibmFpbFNpemVcIikgdGh1bWJuYWlsU2l6ZTogbnVtYmVyO1xyXG5cdEBJbnB1dChcImNvbmZpcm1EZWxldGVcIikgY29uZmlybURlbGV0ZTogYm9vbGVhbiA9IHRydWU7XHJcblx0QE91dHB1dChcImZpbGVDaGFuZ2VcIikgZmlsZUNoYW5nZUVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxJU2xpY2tGaWxlTW9kZWw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdEBPdXRwdXQoXCJmaWxlRGVsZXRlXCIpIGZpbGVEZWxldGVFbWl0dGVyOiBFdmVudEVtaXR0ZXI8SVNsaWNrRmlsZU1vZGVsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHRAT3V0cHV0KFwiZmlsZUNsaWNrZWRcIikgZmlsZUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxJU2xpY2tGaWxlTW9kZWw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdEBPdXRwdXQoXCJjaGVja0NoYW5nZWRcIikgY2hlY2tDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG5cdEBWaWV3Q2hpbGQoXCJ0aXRsZURpdlJlZlwiKSB0aXRsZURpdlJlZjogRWxlbWVudFJlZjtcclxuXHRAVmlld0NoaWxkKFwiZWRpdFRpdGxlRGl2UmVmXCIpIGVkaXRUaXRsZURpdlJlZjogRWxlbWVudFJlZjtcclxuXHRAVmlld0NoaWxkKFwiZWRpdFRpdGxlSW5wdXRSZWZcIikgZWRpdFRpdGxlSW5wdXRSZWY6IEVsZW1lbnRSZWY7XHJcblx0QFZpZXdDaGlsZChcImRlbGV0ZUNvbmZpcm1SZWZcIikgZGVsZXRlQ29uZmlybVJlZjogU2xpY2tDb25maXJtRGlhbG9nQ29tcG9uZW50O1xyXG5cclxuXHR1dWlkOiBzdHJpbmc7XHJcblx0aXNFZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcblx0dGVtcFRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHRmaWxlRGF0ZUZvcm1hdHRlZDogc3RyaW5nO1xyXG5cdGZuRG9jdW1lbnRDbGljayA9IChlKSA9PiB0aGlzLmRvY3VtZW50Q2xpY2soZSk7XHJcblxyXG5cdGl0ZW1TaXplOiBudW1iZXIgPSAxMjA7XHJcblx0aXRlbUltZ1NpemU6IG51bWJlciA9IDkwO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMudXVpZCA9IFNsaWNrVXRpbHNTZXJ2aWNlLm5ld0d1aWQoKTtcclxuXHR9XHJcblxyXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuXHRcdGlmIChjaGFuZ2VzLnRodW1ibmFpbFNpemUpIHtcclxuXHRcdFx0dGhpcy5pdGVtSW1nU2l6ZSA9IHBhcnNlSW50KHRoaXMudGh1bWJuYWlsU2l6ZS50b1N0cmluZygpKTtcclxuXHRcdFx0dGhpcy5pdGVtU2l6ZSA9IHRoaXMuaXRlbUltZ1NpemUgKyAyMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoY2hhbmdlcy5hbGxvd0RlbGV0ZSAmJiBjaGFuZ2VzLmFsbG93RGVsZXRlLmN1cnJlbnRWYWx1ZSlcclxuXHRcdFx0dGhpcy5hbGxvd0RlbGV0ZSA9IChjaGFuZ2VzLmFsbG93RGVsZXRlLmN1cnJlbnRWYWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgIT09ICdmYWxzZScpO1x0XHRcclxuXHJcblx0XHRpZiAoY2hhbmdlcy5zaG93UGhvdG9HYWxsZXJ5ICYmIGNoYW5nZXMuc2hvd1Bob3RvR2FsbGVyeS5jdXJyZW50VmFsdWUpXHJcblx0XHRcdHRoaXMuc2hvd1Bob3RvR2FsbGVyeSA9IChjaGFuZ2VzLnNob3dQaG90b0dhbGxlcnkuY3VycmVudFZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSAhPT0gJ2ZhbHNlJyk7XHRcclxuXHJcblx0XHRpZiAoY2hhbmdlcy5zaG93Q2hlY2tib3ggJiYgY2hhbmdlcy5zaG93Q2hlY2tib3guY3VycmVudFZhbHVlKVxyXG5cdFx0XHR0aGlzLnNob3dDaGVja2JveCA9IChjaGFuZ2VzLnNob3dDaGVja2JveC5jdXJyZW50VmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpICE9PSAnZmFsc2UnKTtcclxuXHJcblx0XHR0aGlzLmNvbmZpcm1EZWxldGUgPSAodGhpcy5jb25maXJtRGVsZXRlLnRvU3RyaW5nKCkgPT09ICd0cnVlJykgPyB0cnVlIDogZmFsc2U7XHJcblxyXG5cdFx0aWYgKHRoaXMuZmlsZSAmJiB0aGlzLmZpbGUubmFtZSAmJiAhdGhpcy5maWxlLnRodW1ibmFpbEJhc2U2NEltYWdlICYmICF0aGlzLmZpbGUudXJsKSB7XHJcblx0XHRcdGlmICh0aGlzLmZpbGUuaXNDaGVja2VkID09PSBudWxsKVxyXG5cdFx0XHRcdHRoaXMuZmlsZS5pc0NoZWNrZWQgPSBmYWxzZTtcclxuXHJcblx0XHRcdGxldCBmaWxlTmFtZVBhcnRzID0gdGhpcy5maWxlLm5hbWUuc3BsaXQoJy4nKTtcclxuXHRcdFx0aWYgKGZpbGVOYW1lUGFydHMubGVuZ3RoID4gMSkge1xyXG5cdFx0XHRcdGxldCBleHQgPSBmaWxlTmFtZVBhcnRzW2ZpbGVOYW1lUGFydHMubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKTtcclxuXHJcblx0XHRcdFx0aWYgKGV4Y2VsRXh0ZW5zaW9ucy5pbmRleE9mKGV4dCkgPj0gMCkge1xyXG5cdFx0XHRcdFx0dGhpcy5maWxlLnRodW1ibmFpbEJhc2U2NEltYWdlID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURzQUFBQTVDQVlBQUFDSTdWTzRBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlacFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1UTTRJRGM1TGpFMU9UZ3lOQ3dnTWpBeE5pOHdPUzh4TkMwd01Ub3dPVG93TVNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVGNnS0ZkcGJtUnZkM01wSWlCNGJYQk5UVHBKYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT2poRlFqUTVOVUpGT0RVd056RXhSVGRCUlRNNE9EaEVPREZCTlRBek1UVTNJaUI0YlhCTlRUcEViMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPamhGUWpRNU5VSkdPRFV3TnpFeFJUZEJSVE00T0RoRU9ERkJOVEF6TVRVM0lqNGdQSGh0Y0UxTk9rUmxjbWwyWldSR2NtOXRJSE4wVW1WbU9tbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZPRVZDTkRrMVFrTTROVEEzTVRGRk4wRkZNemc0T0VRNE1VRTFNRE14TlRjaUlITjBVbVZtT21SdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk9FVkNORGsxUWtRNE5UQTNNVEZGTjBGRk16ZzRPRVE0TVVFMU1ETXhOVGNpTHo0Z1BDOXlaR1k2UkdWelkzSnBjSFJwYjI0K0lEd3ZjbVJtT2xKRVJqNGdQQzk0T25odGNHMWxkR0UrSUR3L2VIQmhZMnRsZENCbGJtUTlJbklpUHo3dCs1eEFBQUFkU2tsRVFWUjQyc3hiZVp3VTFiWCtxcnA2NyttZTZaNmRZVGFZUVJnMkFRRkZGQklCTlpxZ2NjRWxKdURQR0xQNDRtN1VwL0dweitTOVp6UW1lZW96SnU1N1hBSkdRRFpaWk45aFpvQmhodG4zdFh0NnE2NnFkKzZ0cWw1QVRmTCtlbzJYWWJxcnErNjU1NXp2Zk4rNVYwSFROUHl6cjZNdGUzT1A5TzN2YlJsdXhrQzRIM0VsQWdFYUJFR0FuRWdnb1NTZ2lmUU91elg5cFJrRCtuLzBFcUFhLzFKVmxWMUVuMXY0KzVxcUdiL1RaeHIvT2hUalduT3FtcVpmUjAva2Z4U04zWTMrcUFKOUtQQ3I0M0lNa2loaGJ2bGMvR0x4UFlDRVllRWZOZlprenpISGV3ZGUvc0dhNHg5YzBUZmFWZWgzWkUvMXV3dmd0THRoRngyUUJDczNVTlgwR1FxQ3haaGNwcUdhS3ZKRlNmRHA4VGVTaGdqR1JEVTJlVTNrRTJmM1UvaUNrQ0d3R05kcWZKR1kwWUlnMG1LbzdGS29DWHBmb2NVUkVwQXNUbXh0MklKQ2F3QTc3OW9HZjRGL1dQcEhETDN6THpjOTltSGQ2emVXNVZTVVgxRnpIZVpWWFl6S25FbncycjJRSkFuL1gxLy84dkY5ZUgvRGgxQW8wdGpyYTJmNjN0NC9mZVBlVDI5K3FTaXJ0T1g1Szk4dlgxeTlGSUlrOHMraWNSbEQ4Z2prV0Z3UFJjR01NVnBoNkVPalpkWTBlcEFnbVBFSE00NDBSYzE0bGhHQmFkZVlkOUZEVlRNanhIam5xMTdzR21iYTVOeUpFQ2s2Tklvd1VSUy8zdGg3UDFyKzZQL3NmUG1taHhiZlgzNzN3aWZMMlh1anNUQzZoM3RvWWdxRkNidUJxQnZIUWxFd0oyaUVtVEU1UFRkVEM4SGUwY1BUL0k3eGthb2J5YThYakpEWGs1N1dVVTI5bDU2OFgvb2kzTkRpeGdxS1BFM015Ny9VMk9XdmYvdDNhMDZ1dk95am0xZVZMeGovTFVRbzJkdERiYkNRaDJ3MmlXNW40YW1tOGR4a09XSk1VaFZNaTJCaEJnbUNicjRKVW55cWdnNUVsR3NaeG5LamFQa3lnSXc4d3pOUzRma3NHZ3VnbWJjeFZ6RE5VSUZ1SW1rV00xNlF0a1JuR252WGh6YytzYlp4NVdXclZtd3ZuekYyTG5xQ2ZSaEpqQkFJNlo1a1Jxb21xSnlHa2d3VjlaQ0dnYXowTzFSa1dDV2tQR2FpTlo4V1IxUTFQUWd5dkpzeVNqdlR4dlFsb3doUk5NVzRKME43TGZuMERHTmYzL0dIeS82OCs0M3IzLzMraDl6UXRvRk94SVFJbkpJMTZjblV3NWwzOUg4enhHU0dzUktoaWtaRzhZZXFFSFIzY0tlTHpOTjBINFZ5V1RTbW9CbzV5andJaHRIOEY0SG5MeDluV0pWdXZKaTVrQnlWVlNUVVJQSks3aGhOeURTMnNmZUU3ZUgxUC8zZC9SZmRWMzdSaEtYb0h1bUJacFhoa3h6MEJVbFBUMDNSSDg0bVRuOUZsUmdpaEhRU0FZRnF4SjVnUENicFVRNVlLZzlQaTJpQnhTSlEvYlBvT1EwZDExZ3BZbmdWaTlOMTdFR0N2b0JtQ3B6cFJUWHQ1Mm5HbnJZOG1wYjZQR25zTXhzZmZHS3NienlCMFJPVW8zRUUxU0N0a0FxclpvTmcxYWN1R3BjcmhMQXlyVmlXM1FjdE1vaXdHaWV2V1hRdktmcnE2dGpGdkVzNVJNYTRYRTZFRXpFSXNxcDdPRWtyOU1VWkNvZG9NUWdUS0lxWWdUeEtOS1RsZWlZSUdZbUNNNWVCME5nSVl5cjhkQitMNlZoOTlvZmI5dnMvT2ZIQmxiOWQraHFmZE9kb0M4cXpDL0gwaGpmeDJNci94c1RpRWdwSEhvY2M5a1V5cG9zOGY4WFpsK0cvTG44SWpVTU5HS1VGc3JDY0ZsS01pUWVib3FDd3NCZ3ZmN1lLNzY1ZWhZRFhaOXhIZHhpRGt1UHRwM0REd3F2eDBMVzNZR2ZuYmlJR0NYNk44cFhJbTRrVnAyVXRUNm4wVXBUaDJZK1B2SEY5cWEraWNrbjFGUWhGUjNrbWpNYWl1SHIyRXJ5dzhVWHMyck1LWW1FcGhhQktpRXloS0ZKK1VsNDg5ZG12OE0xeDUrQ1NTVXR3c1Bzd1JLdVlaRXZNbkFRWldsSlFpTDBuNnZEc0c2OGdFb21nMXoyWWpEekdmam9HdXhIdytISHI0bXZRRSs5REtCNkJ6U29sTGZrNmhxZXE2aGtlNXltaHlmcHZxcDRPNXZONHRWMS9jdVhsbDArOENsYXJBNzJSWGpKSUpNNDdnbkpQS1Y1YS9qUTMxR3Qzb2N5Ymo3SFpBUnA1cU1vdlFWRk9IdTViZFI5Q2tXR01DNHhEVkk2UUozVXF4NGJIYWtjNEdzVlRiLzRKOFZnTVpVVmprSlBsaFQvTEI3L0hpMnluaXhpWUhTLzg3QW5rNStSZ2YrZCsrdDNDRWRXOHg5Y05MWTEzNjRPOXI2UXRrSkNSQXVLQjVoMkYvYUh1d3ZPSUF2Sjg1UHhENEFEVU9IUUtGMWJPd3lPWC9oUkRvMjAwRWNwYVduUXIvUlRKeTZYWlJXZ2Ric0lqYXgrR1IzTEJKVGw1dnZEYW00Z2k0UGZoNVZWL3dhNmpSMUZNSG1ZcnpGYWVUVVlrVWxMWDFZTGxDNi9BcGJQbVlVdkhObHBreWNoWFZSK2E4Uk15L1ozZ2MxUFlIK0srYkRCeW80ckdFUFRCM2pkemx0bWdLa0l5eDhYNi9zT2RPUTd2MVBIK1NZakU5YnpqNFNQb2VjVThmZWVpSCtNYk5RdlFHbXlCelNFUmlJaHdTQUlacldKeWNUWGVPL3dxMXRldnhzVEFXWWlTa1RLRmVDQ1BDSGpkQWJ5eTVtUHltcDgvMkZ4eGlTS25mYUFYVlVWajhlL2Z1eDJ0NFZNWW9PaXdVbFl4MHMrVmoyb0FzV29ZclpucVNPRmxVRkIxNGNCcW1xZ0pmTjZVWUhRSGlhdWR6QlF3akcwZGJrU091eEErUnc1R2xTQlhLM3JPY1JtQzRmQWdyRVFvL20zcHcvQTdzeUZIUnVHazNMVFpMTENUd1I2ckZZWGVIRHk5K1ZHTVJrTVlsMTFKMkJMblV1L1pkOTZpUEpYaGRibVQ0Y1NXTUU2TE1VUnA4dXViN29IYjdjU0JqanE0N0E3dU5aV01ZWjVoeElDRnBZVkN5U0xhYVY0U241c29taFZCNHhXQmpiQVNSMGlKSXFpRU1Ld01ZeWdXTko1bFZBaWpWRW1Ea1g0NGJTN3lra1NrWHRhbGxpZ2sxME9rbXRqYzM0bzV4VE53K3dXM1VvbDZFb1U1WGdwRDhpd3RyMFFoVk9vdlFkTkFIWDY3NVFFOHNPaFoyTnpBazIvL0VkdnJhbEZkUERZRE5pMFdDNDYybnNCdFM2N0hrbG56c2JGdE02eXM5aHF5a0tXQXJnZklhRlVtd1JGRm5BQkhJYkNMcVRHZXF3azF5bk16b1ptaHprSll6MXNXR1F3N0dFR3hpcmFVNDVpeGpHM1lTZnVseURoVERZbVVabVIvNk9sZGc1MVlmdjdOMk5lNUJVZmFkNkFpdjRvelY0bEMyVUlHVDhnZGo3VW4zOEczcDE4Tm16SUJyL3h0SmNiazVHWXdPN2FJemYwZHFCbGJqU2UrZHlkT2hVNVI3UTNCWWJOei9wMlF5U0F5TEV4ZWtvbXd4TW00R0pVMHF1cDhQcktnejBjMCtJVEpuM2dkNVcvcW5EMm14WkpxaVMyS2lkbVN3RG1MbUFwdGc2THhzRE9wSWVYWWtESUNwK0REVHhmY2pRYy91QlZ4T1lRY2w0Y2tud1UyS2tWc3dUUkxFZDZxL1JWT2JxZFFqam5nQ1RoNHVKa2NScWFKajFENStjK2Yvd0tTVThXR0k1dm9leEppb1FSR3lWc0pDa2RXcnBJaVR6TUVnS0NieFNTYnFhNDA0VFMyYkpBcDVtZmR1bFEzeEx4TzFBd3RpYVNpVURpdlpRU2FBWmxpZEE0WXdMUVBObU5Td1F3c08vZG15czh1Q25HRkpxdFI3aktVSnZMZ0NTQVk2VVF3YXh2ODJibUV5SmFrNG1HYXNyNmpHWGRkZWpNdW5ENFR6eDMrRTlYVmJuUkYrakFRR3lUcUdVSGNDRWZCeUZkVElDZzhoeE1jbFJOMFZZS0ZOUTMyTXc3OUp4K3F6SGt4QzN2VmxKSUdnSEZqWlZrMmtFNWZBMEZRazZ1aEdNcEJSMGVCbDR2ZVlDY3VyYjRPTXl2bUV4QjBFRUFKY0ZoWU9XTDVLSFB2ejUzbFJ2bTRFSWFHV1ZBd1RpeWlwYjhMMDhzbTR0SHJmNHgxM2V2SXdDQjhsbXlPb3FMdWtpUTlUR2c2NVpNRlBYVFoxR1ZlaWhLY3pEQWhZUTVWVVRKK1o0TVpySnAwMHlpazNGajJBUThQZzFjU0orRDlJWVppZ29Ga3FxQVBOcUhSeENpUGtwL00rVmNVdVBNcDU0TGtXWWs4TFBCeVpHT0d4eTJZZlc0WXZyd1lSb01PeEtrY1JTTXhQTHZpUVJ3WTNZeTM5LzRaYnBVSmlUaWxnWlh1TGRFRUdhK1dPZGdrUkVYdkt5azZPak14TGhQL1pwNVRWTk9ETXVWMS9JeGhlbGRuYUlMUjRqTHFMdk13UTF6OVUyYWF6a2xURlVxWGNocFhJb1NFQ1JuQmFCL0c1MDNHc21tM0U5eDN3MExldGRHdzByRGJpU2FxRnVSa3F6aHZYb1RmNkVoTEcyNVpmQzNPbVR3Vm0rbzNJRVlhZVcvRGVoeHAzVTUwc1pIQWFZanVuNEJnNGVxZEk2cHVERTJjaGtxQWsyQ2d4VUFzSVJ2ZXBVSEdLV3lCMGdjdEN2T3VoalMxWkxTTUpFMUxFK09xWHNrRnBFQ0txeE16bE9rRFZqLzlkaDFsRjFYZmdNYndEcHpvM1VnZ2xVOTVxMUU1b2lnaDRSSWJ0V0xhV1JycTZ6c28vS2Zod2V0djRkLzUrWnhmb21OU00zYTFiY2UranQyb2JUdUFjQ3lPZ0s4UWVkNUN1QjFlV0owT2VwYUYxOUFFVTFGcXd1ZytJcW1mVHpja2xYdXEzc3BOOXFwU2JZME04VzRLYWZPbVpsdkQvQXBiRThscVF3NlJDL1AxemFMYjBOeTdCelo3bkc3bWdHUWhZUzVhK1FKRzRnbE1tZEdQMnkrK0Z6NlhML25jWW04WmxrNmlNWEVaR25ycXNhTjlPL2EyN1VKdDB3RUVFeEdVVU4zT0plTWRkaS9zVGhzMHlRWTVMbk5tQmlNWFR6ZkVyQ2FxcUhJWVkxaHNNZG96UXRKWVRVZmVWRWRNNzhkcUdhMFIrZ0lsYzV5NHA1UElmYmJUbmJ6L1V4OXZ3dXEyRVR4OHd4aU1ETkYzNmY2U1JTOWI4YmdWV1Q1YUxQOVd1dkt5NUlJeTRzQ2lpTW5KOFFWbjhYSDk5SnRRMTFlUGJjMWJzUFBFNXpoNGZBOU5XVVIrZGo1eUE4WHdlRHlVTGhhdWxEUWpaQVVJcDdlZ2VHWGh3SlVXbGVZMWtxa1dVdnBRNVNGa1NtYWRVeE9pVWk3MkRmZWd6RkxHYVJoWFMvVzc4ZnpxcCtoNlVpd25GTXlyMXRBemJDRkdwQmQ0RU5CNGhTS3NyWDhkYm1FQ0ZwWXRKMDRyNkN6SndBbXpyODl3b3lhL2hvOFZNMWJnUU5zK2JHemNUTWJ2eE83YTNhVERSWlRrRmhON3k0ZlQ3U0NQMjdtL1lxU21GTDV3WWpMNTVFVGM2SlNZUFhqRHM5cHByUXMxeVl2MWJyeVZXQTlqSkIzQkhveEVSeERJeitQWHhRa3BmL1RTNHdBdEFxdyt2TFUram9tbExuaWRETEhWWk4rSmRRdTg5a0tzcnZzZEp2blBSMEZXRlFjWHJuQUVQY1IwYnh2QnBySElzR0ZXMlZ3K2JpY1A3bXJlaGZYSDF1T0x4bDNZM0xLTlFOQ0JzYmtsOEFmODhIcmQzSENabFNBalgyVk5TYllEMHpzZGtwNldRcG8yTUhPVjZoK3hvekRWdzBFU0E3M2hIaFM1aTVEdjl1dEE4OGFUYURpMkF5aXJvUzhtME5jbTRwMU5DZHoySFN1RysvUndaWGpIU29wWHlrTlQ4QmplUFBvNDdwajdDdFZkQ1pHWXptOWREaGR2MDV6V2NVbSs3QllyNXBQTVpDTVlEbUpMOHc1c1BMWVptMDVzeGQ0VDljaHllMUE2cGhnRmdUeGtVYWhiblV3c21KUlN5T0Rsa3ZZbGJTd1dVcXkrallTSE1VakdLbnlqU2tLSnQ1Ui92dmJJRjNodTlVdkFtSEhHL0NpUDhrUjh2aWVCNnJGUnpCb3ZZU1RFbEU2Yzc3K3cxZlpubFpHSDFtQ04veVVzcWI0WjdhRXV1djhnN0RZSGNodys1THB6U1RyYXptaTljRWNZQzVEbHlzS2xFeGZ4TVJnSmtkRWI4VW50T214cjNJUGRSK3ZnOWJoUlhWSUtWN2FkejhuQitsbHBMMGtWMG5wMXZQVnA0WFYyZ05SUUtCN2lpUjRuenptSiswN3dWL1ByYm51UHd0Y3BrZ0VPUWs4eWhvV3RWUzlOSDM2bW9zZ1hnOVBCNUplZEV3T1p3aXRPbDNodHhYajk0Tk9ZVnZ4Tm9wYkY2QnZwSUdvWFErL29BSTROTmRMbkh1UTUvQ1FaQzRpYzJEUDZTSUtRNmZJY3B3ZFhUcitjai82UmZqSjZJMWJWZlk3TngzZWd1LzhrZnVYNE0zYWZPZ2FQTFpzMzkxTUFaY1kwa2ZJSVNhcEJlbmhZalhEREpmTEtBQms5THF1Q1gzUEhlMCtpc2VzZ1NrdkhFOXJLY0JGemtnazhaSTNLUS9Bb3Zqdi9YN0hzN0dvOHQzMEZQUFl5amdlS3dzc2ZYRlkvT29NbjhQdHREK0x4SlcrZ0tMc01iU090SEQyanBIQUdRNzFvU05RUlFYRWozNW1QMG13cVFWNENKSXN0dlRlcTk2czFYZFd3L3dMZUFHNmFleFVmVGYxdCtPRFFHa1JIRXpoOFpEZlVybFlqaDQzU1k3N2l4RWg2dzMyY3RWZ3NqTUt4bG9mR042ZG1sa3pGN3FhRGVHN1hpNmdhVTBvTEllcmVKTS9hQ0FsN3UxdFFQRzRTbnY3K3JWU2VCSXpQWG95OVhhdFI2SzdpNkpoUVJPN2hYRmNwMWpWK2lpa0hYOEMxMDI3bERZSE8wWFowRWRLSFNYeEhhV0tqa1VHMERyWmd3Nm1OdUxCaUlTNG9uNHRRbEVsQkIrOUNDRWJYZy9NOXdXanlHV0JYRVNqQlhRdHY1dllzcVo2RHovWnY1WXVaSkJVNmJFUGZXS1lWdHBIbzFkc2pyQXRBUmQ1WEJEV200b0cvUFlRY3R3WFpiaXNpNUM1V0p5VkNhOWFSQk1KNDRhYUh1S0hzZGUya0IzQ2thdytGYUQ5Y2twZDRNQkg1dU1CWlVZNjlHSC9ZOGhSbUZpM0UrUHhxWkRtcWFYSEdvU3ZjaFZPRGJTUWFXakdnOW5Ndm5wVlR5ZS8zM000WHViNmVVellMMHd1bklkdVZuZW9mQzVuSXBobThZVmIxZEQ0R0I0ZlEwZGxKWWF5SytvNDExL1lLVnltY2Q3STJOV3Rla1FhdENaeU5GM2Y4RWZWZE96RzVvQVlSNHEyTVpzWDVScG1Bd2FFQi9QcmFoM0RabEF1VDRGS1FYWTdMSjkyQjMyKy9HNFdVMjZBdzU2V0JKcHdsNWFJMVZvL0gxdDJQVjY3L0lBbUt4VmxqK0poWk9CT0h1Zy94cm1XK0x4OWJtcmJTNy90aHQyYmhZTTlCWkZ1OXFNcXR4b3pTc3pHbjVCd0NJa2RHZnB1WXhpb0NRL3FCd1Q3dUdNdU03MDc1SlNQY1Y1MTlIVnFHVy9YdFByNG5RN3BRaWFHRUp0M1NWWXZudC80YWhZRWlxcnNTNy9BTFJzTThSdVE4bDhyUmpiT3ZvQklWbzFwNEFGMkRQYWdNak1XRXZHazQxbmNFQjd2Mncyc05JRVpBSnRPcWh5a3EzRFkvZGpUdnB0TGl3dXl5T1Z5ZnNnbnAyQ0ZpREVWVFJVREhpY0hnQUlhalFZekdSeENNaHpFaWgxSGZkeFNyajYvRzZvWk5hQnBxSmV4d29zaFR5T2ZGeWgyVGxYeUhuN2g4VDNjUGlvdUtZc0x5MTVkcHJKYSt2V0lWdHJaOWdSQnJ1ckc5RzdhSEkxR3hWcU40Zjl2VDZBbTF3KzNLSlZCaVJ3UlV4Q2dOWXJLSWFGemoyZEFhSEVIbllBam9IMFJwOFRnY2Yzd2RlY0tGM3BGdS9PRDlSUmlWbytTUmZNcEpZcTRKa1hJWUdCb05rUkVoZkhycnB5akxLVU5kN3pGTUxaeEVxV0ZMN3ZId2RMVG85Ykt4N3dTMnRlL0R6cGE5cU91cFJUZytDaVlLKzZNRG5BZ1ZVbFE4cytRL01KczhicjZPTjU5RWREaUNxVk1uRDR2SnJVT3puMk5JSTc3S0JQODdqNzlMT1hrS1JZeW1VWWc3N1pyZW5lQWRDaG9NcEJCRG50Mk9xa0FCTExuNThIaHpXRUx3ZStaUkdWays0MTUwOXZZaFJFQVZreWx2S1hpaVpLMmRVTGMvRk1ROUgxR3VTMDZjSEdqRXkvdGV4WnJqNjlBOTBxZHZrMWlTMndlb3pLdkc5Nll2dzI4dWVReVBYUFFBTHFtK0JENWJGdGZMWGFGdUhPbmNTL2ZKM0lWZHRYTmRzdHVvNy8wYURJclZWS2JSMmZFQW04dVBSbEl6bmYyN1VaU2JTNGFCRytvazR4eFdrZi9PT2hST2k0VitrdDRocG1PamlUbFpQOW1pdHpCTktYSFY5QnR4U2MwMU9ON1pTQ1JEcFBTZ2NDYlBSdVVFU25NcXNPcmdKL2pEcGhkdzllUXIwUitKWUgzRDV4aU9EZkk1YlNCUjBOUjNLc01BbTlWQkNEMFBEMTkwSDk2LzdqWDhadkdUbUVHZ3RXTEdMWmhTUENYcHZBNUtwM1g3TjhIdnl6WkxqNUNxUHR4d21ZenhFN3ZwUm1QSEIzQzVCSkphZGlneXl6ZEJQL0pqN0ljemRGUlVLeXg4ODVXUmNVYi9CWjMrMGFxRjRrRXlTaU1DNE1NOUN4L0Fwb1l0YUIvdVJqYnBZZFk3WnVXSUhXL3grNHJ4czQ4ZXdhSUp4STZxTDhTbWsxK2dtbEQ2YUhjZFhqbndLbW5jTEpUN1NsQkQ0SGhleVJ5cUNQNFV1WEFIY08zMGEzRGw1S1VjL1BqcEdub20yN1g0NU9BbWZIN2lFSlcvWElOQnBSM000Q2hHK1pLZ3Vucm81QXNJaHZiQjdRa2dJZ2ZKSXhieWhJVkloNHd3ZVNkQ1NUdEtPUnVPaVp6NGowWkZoR0xBOFBBQUJpZ2tHUysyMDA4WFBUUWlSNGdWRmVGSDgrL0FUOTY1QTFtMk1QTVBGQ2JRNHdyaXNneXRveHZmZW1ZcHRqNzhPWDU4M2cvNWZIWTA3MEZZRHBGV3RtQnZ4eUZzYmZ3Q2I5dmZSVlZCRmM0dm5ZZDVwWE00M1dRdksxRk5LK3RkcVNvSEovYjZaUGQ2aEVlRHhQR05BeVJLY2x2WU5CWTA2VUZhN2FsWU11RUdCQWcxUnlrbkdOZFVWSXV1S3RqWkkwVkhQYmFLYk04c29VcGNGNGRwTVR4V0Q0V01sWjk1RWtudjlRLzNvNXZvNTRLSzgvSDhkNTlCdnp6Q1d6YzJLamNGdE9vNWpoeEtEemZxT2svUXRYMG84T1R3K1Z3NllURXFja3F3cTMwdkRrWU8wK0lvNklwMG82SCtGTjQvK2hHaGJ6NFpmUzdtbDErQTJjV3o0SEk2Q2NrdFNhK3picWJWNVlKbzdzK3lHcHVVZUZ4d000a2s0NXpTYXpHN2NNci8rUXdTQzNHVHozcnRIazRIdzdFd0xweDR2dEhua3NtamNRNWovcXdBS2FveFdEUnhudDZvWjVLYTZuZ2gxZGdpWHdHK1ViVVFqUVJlVzVxMllWUHJGemphZFl6cXY0ejZ3UWF1Z242LzY0L1lmc3NHVkRvcmtzOXY3K3RHTzVVc3Q4T2RMdDcxM3FvcDN0bkNKQWc0dkpMOTd4cWtKTGNQRTBucXh2ZzFPMDVnbmozaXhoTGI4YnA4Rk01UkFpQmlNOE50SkFLNlNVU0VxUlRGRVc2SklVWWx6aXJZOEowSmwxTnRMNlR3VHNCcVM2bVdTbjhsSDh1bUxxUFNzeE5yRzlaaGZkTW10TFFmdzlMSmw2TXl0eUpqYmtkYTY3bHk1MDBDNFVzT2tEQkhzSzZlazhLd09LdjQ3N3RQMEwvRFFJdVZFclpOeWVHY0ZzOUQzclRiMGhhTUZ0VnBkYUtFRGNyZllkS21yU050YUJvK1JSN3ZKRWs0akJ3cVdjelFwdDVUZU8zQVc1aGNNaEV6OHFlaFBKQXl4RzYxNG9KeDUvTnhkMmdBTHgxOEJiUEd6RW8yREJsbmJ4bHNKOW0zbS9lOVFwUXl5RGdIbFR3NUJtSXBjWlI2eHZMUSsvdTJDa1lEV3VGTk9pYWxJbVIwakFTRnorWGgvZHZPa1I1Q2R5Y1JmaC9mNURaUjMwZmExT2VhaUVuNUU5QkdudDdSdkFzVnVWWDg0ODhhMXFOdXNCYU53VVo4WExzR2xhUitaaFpOeGV5eGM1R2ZsWmQ4ZnJiSGo3dm0zWkdLTkUwMzZOT2o2M0M0NXdSSy9JV29IeGxNRSs5YTV0a0V0bGRTN0NuSzZBOTkxWXQzZmRpaEQwM2lXNWl4QkF0SEdUNnJqOExaVG1xRzhpYlV5ZmRyMmtVckVYNFhjaDI1WktRM3RXZEtuaWpOS2VVRHhobU1MSHNXcWFNQ0RKQ0lTR2hoN0d2Ymc0MG5OOExuZUFsVDgyYVFHSmlEaFpYektCODlHUTFHL2RRZEtDcitpck1EMHhFUW90aGJ0K2QwWS9XcldhdVNDZWdDb3k2ZDNxbE0zK0JON3gyWlRYWUgvYlJTcmt1Q3hERStHb3ZCd3RFNmhxQVNKa1R1d0hIbEJIbmFqVHlxajJYZU1jZ2lqNmMvaStYWWRUT3VJWG0yR0R2YmRtRnI2MDRjN1R4RUFLY2dRdEt2c1dFbFhqNzhGb3E4dWJpNDhpTDhZc0g5Y0thbHk4bnVKbXc3dkJaMy9uQUY5aDAvVHZnVFN6djBsZVpadHJsVVFDdnFJb1BOK1A5U3BOVlBnT204bFl6bGRVM1FEMit3TTA2YVFjMUtDVTE5ZGhkSnh3SDBNQzhsR05JbkVDUSszRUpJdWwremt6alBwUnd1SnRFd2dSaVlOYm00Zms4MkxqbHJNUi9IZW85amE5Tm1yRy9jU2hyNUFNVmVGTHVidDhGRElpTGRVUGI2cUhZZGlDQmdlblVOOXBLeHFiTlp2TTZ5SGV4VXpoYTVpcEVtRXMvTVUwSGYxMlJ5VFdkUjlIY3N3WFd0YUxXVDRWYTJEOHFEM0NJNjRIZXprWXRpSC9IWDBVN0s0UTUwRG5YU00wWEVoQkNhMnB0SU9tWmpTdUZrOUlYNjBUellqR2xqcHZGRk0xOFRpQk96OFlNWk4ySExxVzM0NlBobmVIUHYyL2pKbkZ1VHFTY2E3ZDJWQjlZUUlCQkFaaEd4U1NpWlBhajBjNEZacEJQenFWQ25qUHA2SkdhR3lrUXlHSUtQSm9oYVJLTzhSY0pxSlQ4d1prMkJ2WXVZVHFXdEFwWEVoWHZ6Qm5DS1FLbXA3eGc2NVhaTUh6dVpYN1B1NUhyODllamZVRjFZaFJvQ3E1bEZzNGo4VjZaMjdZa2xMUmkva0krN3p2c1o1YkFuMVNtazREcllYa3YwY0FmRTRqeDJPb01Ubm96dEQ0MGZVeFc1THMxMytFbk4yTDdXUm4zbm0yMWZTdnlRQ2VzdmtZN2grVzRsZ0dEbkwvcEhCNmlnZDhKTnVjbTJTdGdPZ2lpa2FtWWVpUXcyWmhUV1lITEJOSXpMR1F1WkNNZk81bjJ3VUcxdDdUK0pReDM3OEpmYWxieWpPYWYwSEZ4UU9oOEZ0SkRtYTJ4MmtkNzBWVk5uRTFjZTNnQ0VPNUdYWDJadXhTZTFYRklJTUEvWktRVC9rZHBxTnJtNCtpQWh6MDdQcUNxRmI5Uks5M0R3KzdJVE5zUHhFSWJDdzZSQkd4aE1VaW5MSWdOekNaZ0tLWUljL0I3c0FObWtmTDFqR2FHb3VIcmFsYWdsbmJxdjVRQXRYd2hCQXFSRFhiVjRiZC9ydkc1UExhN0Jndkw1dUtocUVXcnl6dUlzSzRrcmxJcXZmdkVhNEJaQTdCd1IraU14REVoRFdJbjFoMlBHaVRCMkZ2R2ZlWm1Semc2RlpMdTl5ZmZIZUFvUWNQZzRWNDZ4KzFOSlloTWZpUFp6Zm12UEtvSHROSWJtZERod1h0bHNQc0puaDdHcFpUTWF1ay93ODVLc2JvL0VoM2tuWlczalJnSWxCMnJ5ejhvdzVFaEhIVlNQaEhtVExvSFZKeU1iZWZ5Z0NkVFRtdVJhR3BHSzh4Mnd6RWExbUg2QXdZUzN0TElrcEFsL3hudXpITm5JZ3ZhbExmNkVHdUZOZHlZYytQZUUxUDM0UDhsVExzbUZTeXN2Sm81NDhWZmxFbEhWR0k5ZWZpS0VmcThJakVYdFhXc0owVzJVVW9RWHNLTXQySzRybXlSQVVjNXRPYmdhRlk5TzRhMFN6VHd2cXVtTk9GVTFUM1liVWxCTk5ldFZZOWRhRVl6RDhleDZoUkVGWFNObm5DaFZSR09QVmVNR0txcStHYXJ6NjdRa1lUMWUxaGFpd1hTeHpybU5MZzNyRlhOcHB1bUhPWTMvTFliTnlVSmc2QkpkZWdPQzFYalcvbWs1aHJMY0NWUlNpVDh3WTVlZiszMFVXUElKcHBuNGxxQ1prbzhkUFZCRjQ0eVJjZnJFOEFBVER1bG45UlZOWHlMOUVLRElhN1I1cEQ1Vng0WFVvc0ZvY2dzcEE5VFREbVNhVytFbUtlV3RJaVc5SkFvR3cwczdRQzJZaHlnRUhqMWkxUUxVakttQVpOZS84NzhDREFDMkVPamdOZmRXa3dBQUFBQkpSVTVFcmtKZ2dnPT1cIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpZiAod29yZEV4dGVuc2lvbnMuaW5kZXhPZihleHQpID49IDApIHtcclxuXHRcdFx0XHRcdHRoaXMuZmlsZS50aHVtYm5haWxCYXNlNjRJbWFnZSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEd0FBQUE3Q0FZQUFBQW4rZW5LQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5WnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU5pMWpNVE00SURjNUxqRTFPVGd5TkN3Z01qQXhOaTh3T1M4eE5DMHdNVG93T1Rvd01TQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTkRJREl3TVRjZ0tGZHBibVJ2ZDNNcElpQjRiWEJOVFRwSmJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09rWXpPRGt5TVVWQk9EVXdOekV4UlRjNU1qa3hRVGxCUmpnNFF6RkVRalkxSWlCNGJYQk5UVHBFYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2tZek9Ea3lNVVZDT0RVd056RXhSVGM1TWpreFFUbEJSamc0UXpGRVFqWTFJajRnUEhodGNFMU5Pa1JsY21sMlpXUkdjbTl0SUhOMFVtVm1PbWx1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UmpNNE9USXhSVGc0TlRBM01URkZOemt5T1RGQk9VRkdPRGhETVVSQ05qVWlJSE4wVW1WbU9tUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZSak00T1RJeFJUazROVEEzTVRGRk56a3lPVEZCT1VGR09EaERNVVJDTmpVaUx6NGdQQzl5WkdZNlJHVnpZM0pwY0hScGIyNCtJRHd2Y21SbU9sSkVSajRnUEM5NE9uaHRjRzFsZEdFK0lEdy9lSEJoWTJ0bGRDQmxibVE5SW5JaVB6NFQ0K29CQUFBYVJrbEVRVlI0MnN4YmFXeGMxM1grM2pMN2NCWU9ONUdpTmtxaVZzdVN2RlN4SGR0Sm5MaEkwclJOa0NhQXU2QUZBclJGZ2lKRzBSWDkwUTFvZ0M1SWl3WXBpcVJOZ0xacFVqaUY0NnkyNDlpMUxWdWJaVW1XcklXa2FKSWlLWXJrY0RqN1cvcmRjOTlzSkoyNnNWSDBBVStjdDkremZlYzc1MTRaeFlVeHhHd0hFNFVzeGxiVHVEQXpEVHNTeHRZdVlHSzJpRE0zeW5qWEZoTVBIZDZNNzUyZVRuN3p1UnNQcmZqaDk5WktLNSs0UGxkS0dvWmZoZWZBQU9CNEh1RDVDUGtHZktqZmdPRUF2czhqdjg0N2ZQaU8rdVBEOFBWZjMzVzVxM3M5OVFKMVMzRHN5enM4ejRYbG16Qmg4d0dYcDlVTHVKbThydTdodDJBWXZDNnZsM0dvWTA5K3U0aEV3M2pQUFZ2eHo1LzdoUlN2VE52WWNPT25QQU94aUkyK2RCamp0MVpIUC8zRlUzLzA3Uk0zUG03NnZqMjRLWWxkZlhGOFpQc2dQTlBtWFlZV2dzOVpmRHJDUTl2MDVad3RrdkhqdnFmSENWOEdwZVhWZzVhTmZ3MEs3eW1seUtPZUZrZ0U1N0VTd3FYSVZJWitEbkxOY3h2dkQ5N2pLK0VwS2crcnBvTi9mT3djZm5oaUVwWFZQS0xKZEplOVhsUjVIUDNaR0tibVZ5SXZucC83L0RQUGozMHFub3ZodDM1MlAzN3AzbUhzMjVLQWFVWmsrUC9mdDdISkpaeCtkUkxUMHpNWUdVMmpRMkNsSklPYXpLV2l1UFRHOHQyZi9jcXBiMVhLZnM4Zi85cnRlUFREbzRoSDRuTGZjczNEY29IV2NPcFVxQWZYTTdTaWduL0V6WlM5eFpWOU9lLzZqY3RhcFo2bkZkdjZ0cTkzZFpkNGRzTS9mWG0vUjdlR1dMMzFtTnd0SHVKM3ZNZmx1VERkN0o3UnJMaTJUMjh6REMycTNXNVprOElPOVNUdzFMbnhSNzd3YjY5K2RjdjJYdnpnZCsvQjdrMVpWQmc2VjI4NXFOWjk3WjRjc1dFcVFVMys5S0M5MnBMUmVMNnJBbEc3SnJTazZyNkdleG9pc0Jhd0tXelR6YjNXUGE0K1ozaml2d3dmNWJIYTVUMGVHd29yUkJHbS9rNmdUNEVBUjN1ZkJlM2lSdUNNZHVPRFBJV2huSTFubnAxKzVBdGZQdkhWaHg3WWhXLy93WU84d2NURXpUcUtEdVBUOVBnQ1g0T0N2TUJEWU1zbVdDaHJHTDYyc3RnOWVIZWdJeXBWcTFkZFU0TlhnM1Y5Qk1jSWxLUUZOZ0l0eUgzQmMxN3d2WWFaR3IvOXRyOUtIcnNaYllZYWxuaXVDQndQOFlkbFlYT1BqYjkrY3Z6WW4zenhsYTkrOE1GZCtOYnZQeWd4ZW5HMndvRVNJMDBORnZBRGFPTG9QUVBCT1cweEdJRmIrdEFDK25yb1J0Tnl5c1dONXFEOGhtLzdqWHRiYnFtT3ZVQUlaV21CTyszdE1QeFdDQUl0TDJuZlhLZHg3SFdjdDErZksyTnpOb3lwY2lINU8vLzA3TC9zMnAvQjQ0R3dseWlzY2cvYlVuSGFzQ2IvVlRIckd6S29EcmRVU0d0b3BKUU1GUnpyT1BaRnkzNXc3QWN1N1h2Nm5YN2dEUWlVcU1KRXZtaENsS1RqdWdub2ZNNExua09ud0Vid1hhL1Q4azJCSjBvcExES2dILzN5NmMvQnNMYjk0QThmRks4L04xMldBVnJxQmE0WHhLWVJ4SS9USEZ3VGdQeVdPNG8xbTFZdzJzNXJFeldBckRFZ3Q1R2VWRHlLVmsydFVPWlI5WEtGRGZxN3J1UmlmWk1wSHVBRkthd2RlQVcwbXZKM1poTDdBNGVHOEoxenMwZGVmTzc2cjMvdTBmdXdOWmZDMkh3Tk5ickVVTXBFYnhTb1M4RHlvNTRsSHpFc0gyTzNhbGl0K1lpSEF5VzRmaEJUQnVyOEhlUDV6Wm1JS01sdHVqOHhnTUtNelZkUUlnb21veFpxdkdZeVFvYTZvN3dXRW5IYUVkdFRwRVlRbHVTRFlWV3F1aGliS2lJYVlwemFocjVmdVZFZ3RMS3V5OSsycDYzUmlOMm13T2R2RmZFWFh6djltYjV0V1R6NmtiMVk1UXNMVlE0Z2FlUHB5UXBPM1hTUURXc1hWZ3AyK1UrZHBPbmorNklZVEJxWUt6aDBlYk9aaHBUM3hTTW1sb3N1L3Yza3ROeHJCY0k2cmkveCtNbGpPV3pxam1CdXVVYWhRMWdxVnZBUHowOUtKZ2laMmwzRjRvRTNORmhadVZMbi9UWWUrZUF3VmtvNk5acWg5cFFZL0ZWcHJPblNuZW5QUG5sbXF1OUhKNmQrL2k5LzR4NmxRMHd1VmhHeTZraEZRbmgxd2NOZmZiY0FkQmtORkpKMGc5azY5dVY2OGNpZE9jd3NGU21RR2lBL2JHcTh6aVZDZU9wU0FYLzJ0V2tnYkFWK1Q4a2R2bWQyRmZmdmp1Sm5qZzBTL1IzMHBDd1U1MTM4emRjblVDdlZLTEdodjZQQ3lBMWlSVkZPNVVGVHkzai93OE80L1RPMzRjbFhGdUNhcGlDYXNxTHJ0cXlvUXF4NTNCbkNzSjg0UHZ1aGREcmM5Y2k3dDhtTlZicHltQ290a0Z6YzBjdkJkcHV3YkI5UitwMHAzelpSVHJwNGZVbFV5VFJqQmFSQ21kOE1VTlFodXBlQlpBekpkSkNuWFV2eWQ3RWN3dkh4S2dXdVM1b3IxalhIN3VxTDBpc014SzBBbFdUM3RLVUV5VjBVQ3pGOCtBUERNdkRacFRvU2NWTXVHVWFROHhzc1ZlTGVEbHk2VTJEend2VEN1Ky9ZMVkrK1RJS3hWYUlBeklzSTA2MDliS05sTjhjcFNrMmpuaUNqa282eGMzNmhJZ00xV1hpNEFiRlF3bG9VYW9udWZIYU8xeTFxWHdvTFg2QkQ0b3J1ZnVwNlhqQWhHZEVPbzlPVW8ya0NBY29pVmlnQU03aGJ2cVhUV3AwM0ptemNjV0FBODRXYXhndFBDNmV0YVRROTEwREF6QkN3MzdhVVphNlVhejkzZUVkYURnbzFZcHJRTnc5bE1wVUJWa3k3MDN3TDQxcm5VRTgvektDOE11dGdwV0tnaTRPdU82NU9NL3h5TEdUaCttSWRsMi9XUkRqNWZLQisrV3pVeElXSk1oWlhIZlNuYkZaUGhpalpwRVdNQmlVMXRHa2F0SUppbzFTc1krZjJPRWEzSlRBK1UwSEV0dlQ3Sk5VWlFRYlFxYytrcXh1Tm9zVXcwRTQremNYbE1vNk05TWhCM2RINVQ5MnNHRlBDQ21Odk9nUlVYRnFINXgyZEptZ0NYRjJxWXI2NGloVHB0ZU1hbWk5ejRIR2krdGl0T3BhV0hZUnRWY1UxY3BKaVcxUUlsVEJOaEIrL1VVUi9Ud1JPblJhaUZVdkxWVGh6eTFncGxCa1pqV1RTcUp6NEQ4SHgySUYrWkx0aVdNelgrQjJMUW9NS0RyRzhEWW1pVlhVWElRWkVhQkRiMGlJNnJzNFFEZXZibmxzbnhGdXQ1QzJrTTZCK3ZIT2tXMTl6cWw2VFFzYkkyOHBpUlEvdjJ4R2hVSFd0VVFxbGhEdzd0d0xtTmNUaWRwczM2WlJsV3J5aFhNTFp5VlVjM2RXTk1ncXdtQVhlYzBjdnl2V01qT0hrNVR3NXV5ZUlyU0RhVXZoUTluSHZiVGw1MHh5VkhRMXI1dVc2RmZFdVI5RmRhSVN2RStTaUFWZ2E1aHJpQWIrTnIvaEdFUFNNUjdwbm9WYkhua3hJckZhaEFGRmIwMFNWTGN2Vk9zWnZNdHIzMkFTeU1qOFdRb0lBVnFsNGVHMm1MSUNtU1lmbW1XYkFUcXlBZkp3ZUwrRlhvY0UvVFd2OStTK1BZakFYeHZkT3pPRHBVL1A4VmdoR3dLTXJkVXBPTm5oc2Z4Wm5KNVp4ZVRhUFRDd1NzTEtBbVRXWU13VlhWbzJHYkRsbkt3VzNBWmR0ZExBUm8xVjArd3FwZ2MwTTcrMXBIeGZtUEVsYkhMa2VwZVBnNnB3U0xJdXBmQUUyRVhZd0c4ZU5CUmZYNXptS3FGS0VxOEZPS3BzQTlKUnU2WHBueG92Q21wSUpDMU0zSzdSYUNmUExDVHh4YWtsQ0tFTFNvc0xIcE5JcWRQYzkyeFBZTVp6QVk4Y1hSQWlqNFRWQmxXRjJjSEZQWkpKSWN2Mk8xR1MzbDJrS2xQU3h2bGhsYkE2bFFoaWhsUytNczRpZ3Z5cVVGaENpdjUyZExzdWd0dzdFY0drcXo5Z3M0Y0tzaWFrVkYvR1FHb1FwQTFHM20wMTZ5WC9vNnRmZUtPSVdTUThka0FCWVFoZWhvazdDYzNXNkpDV1ZMeDdoNnZwb3RZUUhidHVDQlBQNzlWbkZFK2prUkg4SlB5L0FoMVlXRm9KakI1MFFySFZwMTNQWFZScCtRUFNsUldPR3NKdXNDRzZlejdwTi9xRVErUEtOQ200U1RCN1kzWVBEZzBrYXZZNm5yNUpzckpaaDBnV2xadlphOU4zd2RScUpFRkRtYnBZRXlVZDZZM2k2dG9Kb3pFYWg1R0orc1lKR2JTZjFrdWxLRG4vZ1NBNkxaRmVMS3pWazA3YlF4d1lZTmlobHczTmRHa3BsTnFOQkxZMjJ0R1MyM2Rqb0x6WDVKMTlhY3gyTTlsRDlwSStlNHpVSkFiTUNwcGZybUZpb1NpaWtTVEp5bVpReWhyaTdMMzBsUmY5MW12T0k4SklCcE0vRjk1YzluTGxjd2dDOVJ6RzFFRlBKRFlMUmpjVWlJZ3I1Rkg3eWM3VUtmMlJ0SEI1TjRmeGtrZStrTU13bTFLMlVnQ3BlMWE3NHVpTzdPZ2ZoODFxY3p2SlE4ZkZtQkRjc3JRVFcrY3RIbnVpOGc3VnlMZ0dROHRLbE5ma0lxeEd0Vm5CeHV0SjhXYWxhd2NsclJPZ0lrWnVnWjZrT0psT0VXM1pRcjNtNnFnbmlVbW45eE5nQ1MzRUw2WWpGKzBLWVhDaWpXcW9qYk9vNlduVXZhNHRsSEI1SllIZ29nd3RYOHZRT1hSL1REcEpHSFJyQkNaVFoyaDNCRDEyaUsyODFwWnNqQWlzMDlueC9YV1hSNklLVWFoYUdHY2Q3VTd6RzVLOEdvUWlHb0c3Vng4WDVsc0RuS1B3NFl5eEdiellkVjFvelJWWWkzYVJVcVFpL0kvbGFDY0xSUmcyY3ZVS2VYaWR0alZsa1oyVk0zbHpsTVQxYTJrT3VKaUowNGZjYzZVZVVJWFJsdWtCbElCQkdVMXZseXA1WWRlM2VpS1BPOHRCVXZHeHRERGM0dHhKWXVVb3lGc0syUGpLTVNsWHpWRGZndUJ6MytGUkw0Rk9YT2VCQ25lN3BCcHpSUkMzdjRaTjN4bkY0YzVKc3FVS3J1OXBEbUZhdVRKWXhSNERyVHRYeDdNVUpUQytzd21BNjBjVUQ3eVZISm5mRmZiZjNZNGF4WFNCZUtBZFZvU1ZDT2dnYURZWUlXQk5YMXJ0VDk0T1MzV3JQU2dwRTI0cnhOc0dOb0dPbG1MVkN1ajE5TWJuUDVNZE1WL2VRRVRNSVBKVm1uSnk0VW15V2RENnRXVmNqb3ZBZnU3c2Iyd1lUb2d4SFZLOWkxc01xTGZyS1dBRWZ1M2NJdCsvb3hkUTh6NGY4Wm9la1FFb2J6WVp3ZERTRDgrT0ZvSEh2NkhqbDkvV3Vmdk9jTlBSZDRROXU0T0pONE91MHNOZEVPc05zcXlBVkp4V1lZNUZPWGozU2EzTXcxSEJkdTZxcG5xTi9YU2ZKV0Z6V09mWEV4SkxrWDlZTUV1dVZzbkpuQTNjZkhNVHVQcjY4N0lqRnhGV2x1QVpKeHF6aWJuam80QURLeXl2cVFZazdGZWNPUWV6SWFCZjZCc0k0L3RvOHdreUZxaG1ocUt6akJuOGRaVTMxMTVmZGJleU5CbjBUb1JzeDdMWHFxaldWbE55c3dycEk0TnFTaTZJL0hVYUpOYXV5cmhJb3hvdUwrUW9XR2N0TEs4eW5iNVFWWG1sVVZxWW1uOTQvRkpFMzcxR1ZDSzJ0OHFkcXdRZ3VFWm5QWE10cjc3aTRBQ3lWRWJKTnNhQmtqSlVxM245c0M0djlNcjc1N0JWTXpLemcxdklxcXJVYWhkSk5RWlZXSGRiYVlsbGxjVGwyZEJ1M2dVdHRKamF0WUE1SEMyaTJOQkUwMEZUcVh5RGxJb2hTYUtMUmFrM2lSUWtsTWJiSzFFVGljSDV5aFloYVJWeWhxeVBkS0ZxMGlrUGJ1dVI5ZS9rMzBaMUFqYzlieWpzY01TeXVrVk9yRVYxUkxzdkIyYTdPM1ZMZTJYVWNKTVBxNmNyaXN4L2RpMjM5RmtGeEVjY3ZUZVBLMUN6eUswVnk3cnJDUFNsQUJYTlVMTE1DcTlYYnNha2xzZTIzRVFQZHdOVjVXdld0S283RmdyMU9UM1F4bUFoakszUG1DNjdRczRESGVsSWtuQ1g0S0kycnpvUXVJWlc3R3RLbHVHdW5Gbmo3UUJRSCttMjhkSUZrUDJlS1Y0VUlYRE1zUWw0Nk80ZXJNd1ZWbFVpK1ZnTXFWb24ydVM3czM2Rm5PMzd4NFgxNDVPRWF6bzB0NDdrejh6aCtiaFpucjgxU1FKYXh1VGg2V0xaRm9qSHlnNkIrRGtpSjBTQ2hnZkMyNmtqNlhtZHl0dWh2UldxcFJGZXR1WDVBMTJpbEFSSnJZMDVjUnRXd29pbHl3dWRPejZQR1BJdUVLWjFGSlhPNVF0ZlBSSEZRYW0yRmRtSHNIK25DU3k4dndlaldMQ3hPRDhtekt2cVBaeWF4U09abHFYeldxSjJYS3pod2FCTkdkL2EyNVl3d2J0dlJKL3VuUHJ3Ykp4a0dUNTJad1hIK1BVR1V0LzBRK3ZxN2tPbEtvTi9vRW5La3FtWUZiSTJNYS91TitReVphdkUxZXRZdEZDcHVvQWhkNVJRWXUvZnVTWkFaMlpndk9Vam9PVU4wcWY3VmEzbUp1NjZFRGR2UmpWUy82R0wvY0JUN2h1SkJhOVhHVDQxbThTWC91amlBSVhtV0pTVExsMzk5Y29ZcDNwVk9wRFR0WkFLcmlydjJka2tYWkYxalNsVnNZVlpQaHdabEx6SmR2bkIrQ2srL1BJc1h6aTNoNWJQVGlNVk1mT1BwTE9Xd2tJemJ6VkMxRGJmVjRiWW9NRU9NdWQ1ck1uMEZhbVdlVSszWSsvZWxzWm04ZXBZeGk2enVDeXNrcjBsQllVcDNVb0dHTkh2eVZleTdmNEQ1TnRaTVc0ZEdNakJTcktWZHVxdmhTdzROa1Q4dUV0ek13Qm9xSkZ6VkZpYmFQM2lvdDhtVFRkTll4L2Y5b0ZwS1JDTjQ2STRSMmZNRTBTZFBUdUg3WnlieDFFdFRPSDU1QlpsUVV2cG51aDUydkNiZEpLdURhaHlhWnRBVER0b3lxb2U4cXpjRU14VEN2c0VvVHI1RVVUTzZjYVpzRjFFRE5JUG1tUnZNQURvMUhBbmlUNU5YRndkR2tveGxHMk52VUdHcHNKNzBWaThKNjBsd3FhNW9pYkxxV2ZmRWNQUzJ2b0QvcnArV0ZmcTdMcSt3dGs1SDhkSDM3cFM5VktwZ3owZ2NwODljdzYyRlBBWUc2N284dElMbmxzcWV0RWQwdDErbmJCV1BJYXAvRXdtQTJnN3pCVjloOGpQOGlHNlJTcFBlZys2MGUrS3FFdmNzNnUvY21XMmpiU3daYWUzOXcxbU1uVjhHa3Jha0o4UHpXMjJneG9UY3FvdERkL1JpMjlaTVovWDJGalk5YyttTGt1THhLRDc3aVNQQUp3NmlXQ3hoL1BxazloVDFqK29EcWpoVWNheGhTaFljb0VMM3pzWXQ5REFIcSszMmJTbjZOd2tBcldBNnVxblhBRDVQOVo0Wmx4WHk0azE5WWR3eG1tbkwrZnI1TzNjeExxczEzVWR3ZGI4NVJNdUdqTVkwQ3lRYzd0cWY2N0RtVzkxVTI5ZzA3YmJKZWw5Nk5MRllGNHFyaFVhdlRMZFJPNHNIdlJlcWRReXAzblRnVnZ1MlpkQ2JOWVJGR1NyMUtLb1QwRHFURE1kVWJXYVdqZnVHRTBnVHBkZHVkeDNxa2VhOFMwVXFEbUFHSlczRHdIVmhjQWJlZldqZ0hWa0IwSmlCbUoyZGJRWlhCMzl1dEVna2xaSlNxajZXbWhacDNOclhFOGYrelFrcERabTA2SkoxUGFzZ3UzWW5NSGNmM1pYYWNQYnU4UFlzY3YweFBsNGpZbHJyNHJOSUlPa2U3c0pkUjNQdmlNQkdVQzB0TFM0aWs4bDBDcXdiNGw3UXVmY0lWblVNcEN6MHBrTUl1Sk5zQjVWYjUrdTZENnk4UXhha2FEb29uUWdpN3AyajJhREwwZW1PZlFOSkhGRFBzL0pwdjlRc1loWnJPTFNuQzROOThYZElZQTUxWllXeVZMQnBZR0NEVlNtU2p2UVNBa1haTm5WSEJjd052M1hya1QwcHZhU0JwS0hCWWIxZ3lWS1plUzJlaVJDUmM5aVFvSE83YlUrM3BJUzFsMFFCVlBLeDBkN201Tnc3c2Izd3lnU1d5UjBpMGVnYWdmM0cyZ3NTY0NkTUltQmdLR3V0WGVLRDIraVdvVlFVVllJUFhHMWRRNFJuWVVDR05NcmFkOCt1ekpzTzRDNTF6VFNsWFdPMDdUWFZ0eUZBdnZ2b0FGb0xITjdlcGhMR1kwOWVRdFEwMm1JNG1JNFFZUTA5TDYzNnpyM0pFRktKYUV2U3dDUUhtVzYyOWtaUVkvbFdZeXFyS1FySzZsdVZhVmd1NCtDdWRHTlNCeDFHQ240ZlBramdTc2V4a2k5anRlckloTm9xT1hsNXlVSHYxaXp1UHB6cmlMK2ZDS3lDRHo5M2VoTFBrMzBONU5LZG9HVTBwelo4MGJ6dlY3RXRad1czR0cwSXpqUkNGblJvVnhLWXE4Q2xDenAwVDRlMWJwVkFCcFp5ZCsxTkJkMURmME5hT0xvamlZTWpmSGVoZ3JCYWFhY2FsU3o1Y0l0a2hXa3JrNGszdTV3LzZkWUloMjgrOHpwdTNzcXpsdDVnMlpJc0pQRlVhZVVqSGlFNlp5TWJhRTZ2eFBuYjM3c2J2LzByaDFqL2hqVEl5ZElGUjVZTEhkeVpDUmpTbWlnMWRPL2J0a040NHUvZXo5clc0VUJVVjg3VVU2bFVYbjkvdEpWTzFMZXNEbkNSOGJXdnlubXpUYWRSRno4Nk1ZOVVQSzRuRU5vRmJya2NjeXpkYkNkVFJ5d1draGwveTdEYUVydiswQ1pXVG1yLzhRaHBiRUFNVFBHYTRjRXM5emUzak9vODVvdDFLdCtUT1lRc0tXT1kxTmI4WDNqNTFUY1djWE94aFA2dXFGNzZ0TmJDalpVMENwRUh1eU1iUSt6YjNQd05PcVFiS2NrTTJzU0xySm9XbDJxc3lXOGhsUXhqSUJ2RFVIOEtvVkRMQ00xKytocVBPaisySXAxU3ZTRFZXRzlocFlRYVUweUsxSEZBelJ5b25wOWh2S1BDK3Y3NnltZERpbWpaNk9raThXRVpHRStVTURGWng2dVg4dmpld2lUTFVBdGJOcWZJeXpNWTJjS013ZmlVeWdrdEpkeFlXTUdwaS9OSUp5S0VsZFVtbHF4eGFaOUZ2NGM5bStrK3R2bW1nelorQWlWNFFVRWlPWnNlWlBQOWVqRU1Hc3Z0OUVJYzAyOVZRZnlPYWhFblkybHNIVWhoZEdRVnI0L0g4T3FGWmZ6bmR5ZndCV2FKdmR1VCtOTlBIMlhSbjI1TnBERnN2dlA4alBUWUVnemZwUVcxdk1KZUw3REhEMFNvL2MycDllN2NYRFZuNEcyNHVpOHpFQVdDVTUyeEdRbVpCRDFUaXZXd1RYSmpXWjBMVHRzS1FPWGlnejFkc3Q5M2V3MlhKbnJ4K0RNM3lCZHE5TWpZbXBCdzhmanowMGpGd2dUQ29xelZ0dTNJZW9ITFJPZkJwSW4rckluV2lzZVc5YjJBbUtqWjlYWXJlOEVLeUkwclZEUnJXaFcrMFVoWTBEenZWckN3eER6TVV0Qm1LYWtXcVBSMFJaaVNvclNHMVV5VmZqREhCRE5nWW1wZWl5NThZTmNROXUwY2tBWGtNRUp0VFFKRGVtVFBuWjdCYjM1MEZHZlArU2k2YlUyODlqenMxQ2h3T2taTjI3STZyak4rZlptc3FxaDg2N2lpOFFnTGkwUWlIQlFBeG5vbGJVRGtWZmN6RlFvalJzVjJFWVFLS3c3bUtmaTF5Ulc4eW9JaUdZdElVMjZnSjRyK0hLbWdHUXE2UExyYllMVEJ0SlNDbHJVdXpCNy9yM0hjbXMxano5WnVuQjNvd3VUMFhHdkpRME1ZVlJyRVNDVTM1YlIxemJVRFY4c1ErVEdiYmxnaHExTHJMRlJuVWFGbE1oeENKbTJ4SEl4MzJOaHY4dzVqVFNpRWVDSkRaYWw5Z0t4dGFTV0c2YmtpeG1jcmVPN3NEWm1PNmFHMXQyeUtZZXZtREFaN2t4VE9YRlBxb0VXS0FsMlg2ZzZlZUhFVzRXUU1PN2QyRWZSc3lkMmRGdWFBbUhyUlRhMTNwM1FwdUJhWWxDQzJXaXpDdUlqUkxaT3hDbTRWRGR5WUwyTnlwb2dxODNVWHJhTjZYbjBVb0R1VDZGam5xQmVmZDFDRHBrcENKQ0o5M1dwUFl2K0lnNm5aSk1abVZuRGhXaDRuWDdzSjA1NGlhQ1d4bDdYNDN1MFVucjlsclNXNXUybnFpV0JIcG5BdFBQWDhPRjY1dUVSaDA5ZzJsSlp5WFMyenNGcHBTUzlWVVhYM1FNWUtCdkkvcEF3aWFZSndueURQN21OZXZFbVhuSm1yNGZwMEhwZXVMa2kzWjZBM2poRU9iTWR3R2xteGZPZktlNzJzYXIzN2gybVJIVnR5c3Q5OXNJUXJVOHU0ZEcwWnB5OHM0WWN2VDlPYlRJenNTT1BPZlQxNCtGMWJaQjJtWW9nTlJ2WVkwVm4xNld5WkxEQmx4WDdIZW1uaHZHcjFLUi9ZaUVwdW5KcDBlbEp4SEdVOER2ZXBIVGl3UFlXSk9RN3dlaDRYTCtkeC9NUWNVblQxNFUxSjdOelNSYURKSVpkTzZLSmd2Y25id3NBUFdzQnhIQmxWK3lBZVBsYkV1V3Z6T0hIaEpyN3hnemRZMEJmeDAvZnRiQ3NJTEV6Tkw1Tkt2b0YwTG9GODJaT3FEMFlBZG1hYndGV2FOMG1CUThuUVd5eXFqUTF6Y1NJWndmNWtQL2J2Nk1ITS9qSmVHMXZFeGJFRlhKeFl3cG5YYitIN0wwNWg1MUFLUnc5MDQ4RHVUYkxnYk4yN055aWlsWEs3c3duY2Y4ZDIyVC93cm1GRW8zWWJMOUQzZmVucnIySHNoVm1nTjZXbXNvVStLd0NXQ3JCaFlkVjRpd1FmanRqMk8wT3BpSjZEL1VuWjMzZHN5NGI1K0grVHk5Y3E5K0N1VFJ0ZSs5QkR1M0gwMEZaNkhRVUxSZEhiRzJNSnVob3NRZzlBSzVGSTRObVhMeUtaTXBrWEszcSs2SzJVWlFiZWtuWENqQlhMTkpvMFFoYmU4Qk9WaXA3bi9iR3NyVzN0NU1ZZkQzcmdNR1RXZjNOZkFwc3lFU2xMVGF1S3g1K2V4cFhwWmFSU3NXWnRiZWU2STRYUGYrVms2dk4vZjN3Rjl2L0IvME42cTdUMDdiWjNnaVVSaUJBRGJ1OVg3V2RWcEJmK1c0QUJBSjJTek5ScXBoVVFBQUFBQUVsRlRrU3VRbUNDXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgaWYgKHBkZkV4dGVuc2lvbnMuaW5kZXhPZihleHQpID49IDApIHtcclxuXHRcdFx0XHRcdHRoaXMuZmlsZS50aHVtYm5haWxCYXNlNjRJbWFnZSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEd0FBQUE4Q0FZQUFBQTYvTmx5QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5WnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU5pMWpNVE00SURjNUxqRTFPVGd5TkN3Z01qQXhOaTh3T1M4eE5DMHdNVG93T1Rvd01TQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTkRJREl3TVRjZ0tGZHBibVJ2ZDNNcElpQjRiWEJOVFRwSmJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09rWXlSVVF3UkVZeE9EVXdPREV4UlRkQk4wTkNRVVpCTlVZM05EQkdSVU13SWlCNGJYQk5UVHBFYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2tZeVJVUXdSRVl5T0RVd09ERXhSVGRCTjBOQ1FVWkJOVVkzTkRCR1JVTXdJajRnUEhodGNFMU5Pa1JsY21sMlpXUkdjbTl0SUhOMFVtVm1PbWx1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UmpKRlJEQkVSVVk0TlRBNE1URkZOMEUzUTBKQlJrRTFSamMwTUVaRlF6QWlJSE4wVW1WbU9tUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZSakpGUkRCRVJqQTROVEE0TVRGRk4wRTNRMEpCUmtFMVJqYzBNRVpGUXpBaUx6NGdQQzl5WkdZNlJHVnpZM0pwY0hScGIyNCtJRHd2Y21SbU9sSkVSajRnUEM5NE9uaHRjRzFsZEdFK0lEdy9lSEJoWTJ0bGRDQmxibVE5SW5JaVB6Nng0b0EzQUFBVFBrbEVRVlI0MnRSYmVaUWN4WG4vVlhYUHNkclZyclJhdEVJZzY3Q2s1WDZTTURFUWtLVmdHOWtSSkVBd1lQUHdjMktISzRBaW5IOFNiSWdVSGdaTXdNOFAyeHdHRERqRzRRam1zTkRqWVFrd3NvMHR3REdFUXdMdG9nUGQwdDQ3MDkxVitiNnE2cG1lM3A3VkNvbndNays5TTlOVDNWM2Y5ZnQrMzFjbHNXYk5HbXpldkJsVHBreFpNbjc4K0VzOXoyc1hRb0JmU2lsSUtjSGZ0ZGJtWFBwejh0MmM1L0Y4emc2Qmh2dXduNi80R1NPZFM4NkYzK041cEY3Yk4yM2F0S3lycSt2QmpvNE8rR0VZNWxwYlc1K1lQWHYyb3VibVpwREErUC8rWWtQRnIzSzUzRUtHZklEa1BDK0tvak5aNEt0bnpKaXhpTFhUMzk5ZjBWSXNPQTJxWEJ4YnUrYWR4L0JEY2puSUYxY0JOOTBLMVRRVytvYmxLRXliQWU4Z1dKWUY0UFBwSTNtZVB5ZS94OWZ4L0htdTA2Wk5XMHlXL2tjVytLcDhQbThtejBMR3dtUzVOTDhuM1pnL1N1a2psQUxSVCs4SEx2d3E1TVFKaUxidmducms1OGgzZGdHSEhXWWNHeENqRWpqdGxyRUFOV0dUR3B1OEptbmQySEI4amUvN0dCb2EraWRaS3BVbThraytZcXNsajFqSTdQaGdpZWthcmVDVHNONkNoZkMyN1VSREdDSVhSaGc4K3l3RUJ4REhTYzlLQ3A2bGxLb1Jxci9IODQvbFkxa2xEZTVOQm4vNndscUxpc3diQ3hMT2ZGcTh5R3FaUGVXN044RjcrZmNJTjNYeG96KzBzT25uWnMydjN0eVR5bkRDOThyNGduUXN4UEdRMUdMc0FjTXN3UEhiMUFoSmlNL3h6RmFWWDc0SURUeUJwNTlDZUJDQUtPdTU5Y0lnNjdkWVBsa3YrRG5ZaytmcmFWZTRDQTNQUGh2NnlWK2E3em0yOHFIdENIeFN4T3JuY2FDNFAreVpLYmZPQ3Iyays5ZU16VUs1TkNxT3BFbkI0eG1wbHl4QkdKQnRuMTFaZ1NmZGNRVDB1eHVnRG9LRnN3QnFKR1JQajZ2RWRUS0JwNjBhSTE2ZGVIQlBzK1A5dWZPQVNZZEJYMzY1c1RqZjJKczZGWUpJalRoSStUWHQxdlhBTk11eU5RSW5mYnhlRE5kWHZZUlBZOWx0NVIwL1FMVHVYZUIzdnpkQ1I0VWM5STVkQjhYQyt4dTdXV05ObW8wMUZ4OXBnRXJtNEJyTHhnOTBzTTl4Szg4OEUyclNKSVRubld2QXk1czRFVkxwajBUUU5NWGRGM0JWTER3cUs0NkdJYmtqOTU4L0I3cTZvRjcvRS9USkowTkVBV3Z3WTZXYVNTeVNTUlN1cDdGNjJxczVyOW10S1F4T25ROXg4cWtvTEZ3QVVBNk94bzRGU2dNZmlaV1RYamxhd1dXNnlzaHlqNnp2V2VlaXlDbnNzVWNSN3R3TmRjT044Q2Exd3o5b3NIWGc4UzRQNGkyUkV4N3lUQ1RiRDBGNHk4M1FmZjNRcFJKVWNjei9tVkRwakpJMmpCeXRLNHpxZ2RMZVVPb0ljdWszSVk0NkNtckxWZ05nMnQ0by92U3hXTmU0ZEpLY2oxYmdOQ0ZKVzlxbnYwVTZDbGRmalNBTUVGNi8zTkRMY3FRT0toREY2VE5yWG1sS09hS0ZEeFM1SmJrMjMxanQzbVdpVjE3emJlaGZyWWIyUFZjbWZqeFdOZ1FweWFhUzJoaWhaVkpUZTJZQm1GSVJJa2wxNkN1dlFSeDlwS0dZcGRPb2RPemNnR0RxTkFqS3paNWswY1dIdHU2SE5ZcjhLTFNwS1poTnlmL0tXdml6WnNONzlESEk5blpJK2h4MGQwTzVUc25Ia1k5bHVtMlN0bll5UjZlTGk3b0VoTWZ6bDNYcm9DZE1OTUo1Yjd5T1NJZndQemtEb3FjUFpUcGJEc3FVdnZWK3hXeFdNWk8yZUZiaFV5a1AwMEcvTDdEYVo2eG9LN1RxZXA5OUcrSzBCWVpMNXlhMFFYWjJJdHE3bDBySFF4RzgreTdDWE41MFRBNmszN1cvWGMrYTRpRkc2M3BWVWpxMnN6UVorNnBjL1lKMTY0WHpiZVZFWDNLSGZZTFkxMmFFVFhuSW1UTnB6RXRHR2FxU3N2WXRRRllUcng1S3A3M1VBdW8raVBkb0FDSXp1VDl3TjNSckd4VVRoOE00dUdDaEkySmVrNEROVzRGVC94eHE0U2tvLy91dEtIRmx0UStBRkM1TWRDcDhhZ3lUb2JpMFFtUlNjL1UwbHRVNUhCYjc5SStacFhJUFZzODlEMXg4cVNQczFtTWlUZnkzSENEbjV5QmUrRFg4cFZkQlhyMFUrTnhub2JyM1ZLd2RKWVRSQ1Z5UXZtL2FTWm9PRkFxVTdJdFFEUTEwRkNrcldDRFVraTNMUjdhWCtpTjFFWkxuMHk0VnR6OHJkYVpIbmhKUk92SnlVSGYrMEV6Y1g3ckVsSTBRdHNuajhhVHkwcEFRdzhodXVRMktsZklYQ3hBZGVRU0M3MzhQM2pubmtWS0dFQXdPd2dzaitIUkVLb1FtMGlLMWNJcWo1MFloUFZNaUlOcXFKMHlBWU1GTkg1MnN1SGVYeVJSWk12bFpMcHZGVnRMbmsraHQzMWtDendnVC9mTTE4T2NkRDdTMW1rbklPRTc1dHgwN29RbXg4WWVYRWE1N0QxR1o3RWtXOHpvM0FuOXpBVEQyN3lCYjI2SENrSzRKRWUya3laZktsVFRHN3dWM1A4OGRLdDhJUGVkWVJGKytBUHFLeTZBSUlNV09IY2JxenM5cmlVYzlzbEdQZ0ZkL1orTGhWWHpQdU5XVHY0RFl0UnR5NHlaTEo3ZnRRTzdaWjZBZmZ3cjZoVjhCSkhEa2xDQUtPZmhUcHlQcU9BYmluUFBoRVdwSFAvMEpncTROeHZXaWVYTlFKbnBhL05TbkVaRG5ZUGQyb0xlSFBDQ2lYRTdWV1U4L3NHMGJWT2Q2UkMrK2dOeVNxOUQwSHcraSsvSEhFWTV2aFVmRmkwcko1R2ZscXl4S2xueUhpMWxETUZob21yNW1GMmR0ZitVaXlEbHpBQkpjWHJzTXViZmV0Tlp0b29wcC9tZmdmKzUweUpQK0RHSldCMFJycTduR1R3TGVEZitHNE9HSEllNjdCL3I1MVJBMzNRSjkvdG1JNkw1cThSa21SRUozNkFSUjVkYncwUHEzMFR6ckNCUy9mUzM2N3JvTHVyL1Bwc2tFMXZpanlXZnAxaWRyRFJSREl1Y2pJS3Z3VFl3TC9zczF4Z0xpdGRlZ3o3c0E4amh5c3h0dmhQenJzK0RObm1WNWRRYktWaGRpT0U5U21YbnV1U2pUb1Y5YkMzbkhIWWgrY0RlODIyNjNYbkhra1JBbm5BaWNmQkx5Ujh4R09HTUtSTEdKWXAwOGRjVnpHT0l4YythWk9SbTdHQytzdHE3OGRNN0tkdC9Zb3NMd1pGRm9JTE5ZaTRvMy9nZjZ6anNobjNnYzZPeEM5SmtGRUJkZENHL1JGNkFtVDdiYzJsbFJERitvcVhrM24zZ2V4TDU4QWlROTUzZ0VQN3dUaWc3ODVnWElGU3NSUHJNUy9nUDNvWGovdmVZNkg5WE13R0tWcnJnU0E1ZGZDciszMTl3blZ1YXdHRTYzZVdySUNEdXRDZ2p5S2NZYW02d2JQdk0wNUxldUkvRDVBM1RSUXpCRWlwZzNGLzdxVlpab3hOWlVHcmJYSjBiRmlreDY1SlFTc3VDRXpPU1RrcnhJblRRZmdnNjk3SHFFclBRMzN3UTJiQURlZVEreWZ6ZkN0b2tvbjNnaTlOemo0ZlVQUWc4TUdNNk9laTZkQlZDVmMvVGdvRmlBM3pBR2hSVUVRRmRlQWF4ZkQwMFVVYTE2RHZyZXV5RHVmd2o2c2Y4eXNlVUhRd2lGejZ6R0hQeFF0Wi8xdHVsM0MrdVhlbkRJemN1RkZPWGc4T2hqb09qdzRyenY4cmRIMUJVVVhoRXZEaHJsNmVFckQxbEVJNmFYNXZjODVWWVNGc3YrRmQ0WHZ3QlJMa005OFJTaUxWdE1Mc3lSc1BLZWV3aHhweUpYS3RFa1BBc203b0VxZzZpTWRGUlpVelhBdFd2NEc2em9JekFpbC9Yb2lMcUptKy90Z2Q2OUJ4NWxCMFZjUUR0Z3pTcUEvSkZvb3hsRUxzbHVYUHpaUThDMTEyR0l5SUg2aHl1Tk52MlhYb0kzZnlIS0ZMUHFhMTlEZ2F1ZldLc2ZjaUU4eWVPenVobW1Cb2VvMGtwK0VybTlFZ200eVFqUFlXdExXWVRjUEZBNGw5bXl6YVFFL1FuaXhydTJvM0RqcmNpZmNncWl6NThHL09RQmg5U1JOVXBXVVhFQXEvN0RLQzlxVjBqTTc2bnY2Yld5K0xNL1lqcUt0ZGcvZ1BKbEY4TjcvVlhrL3VvYzIzQm5VbkhaWllodXY5MENWSCsvWVZwcEFkSXI4dnZiMWNpeVZGYmxsQzUwMHQ1UjQ5STF2bzdFQTJLeVFjTG9jUzBZdlBjKzVFNWJCRy85V3hoY2REcWlFMDh5Z09iM1VTeHhRYURWc0xiTlNEdHY5bFVHeGhPdndaTlIzQ09aNE5NOHd0ZmF4a0ZNS0xSTC90S1ZZd1pkZVZ0RGR6ZDBnYXFTQzgrdllrbFBEOGVFUVVScGJpU01hN21sdmt6VUg4MENtTmE2bG80a3RvZ1l3eVFBVVNmaXZWSlp1VTBXT3JIWklyNm43NDhiUzM5Y0ZTdHBRaXljOENxYlZtb1d3Z244R1IzZEdxc2hIOExrT2l1c0ZGN0NrZzVTak9DVlRWdm0vbFhqNkdIN1hXekxSMWZHbURKUFZnRktPMkxDS2N1TERhTGR2Q3VscXIyZTh6bVA1Vnp1ZTBXaXR5M3dONzI2RnAxbm5Ja216bDFVbGttUk14MTF1M2JqbWdOc1pFOVdPaUw4WVA3Tml5bWJBemJ1MW9pNjNlbzBqUnk1V1Jzbko2VmRXT25xZFF5TlJtam5rVllKcWlKa0JUOGlCMVJrbUw1OEFUdmZmZ3YrNFRmZkFyVnhDOHJUWnFKTXRTb3ZiL29POW9YcE40a1UvYlBhWlg1YWFVZXg0RzdwMUpxMlZuTHJMYklxYmtWaU8xRmtrQjFVTEswZEtWWVYzNDRiRHJGM2FhY0FPSXZIdk55SVRrQWEwRVRWK25XWS9OQWpFTThEZStjRExSV3BwQ09HSW1FeTh5NTUwMVBWWEVaSXowNVd4dXIzN1ZqcDIvTThNVTlXT0hMMWU5Szh1dGJVU2xXWFpGaElvcEgyWGJrQTFmYXpwVy9WOFhIMzA0eU42VmRVNDBlcmdHNi9yNURIVUNsQXdTUnZpWWhMUHA0ekF4RVRlSTQ1bG8yRklDNXRER1NFNG5FMmhwV1JnK05JMlVqanNPRHIzTDFZMXdZWUUvV3p1YWVicC9sZFc2OHhKNklnaGxqNld6QnV6WkRFUFRIdWZQQVk0eG5jQ2VIdUMxVnVPcUVRNWdQc3ppWWtWYlZUV1NMRzZETmxZcU1xU1dsRmV0WndqRi9tcys5Nk1kYkNpb2s4STJMc3dTYkd0ZWt4bFlsdWhwdTJWSXpIb2hmcG5vVkRKMEsxTkNFWUxHSG8vVTBtWlBnNUlVMCtSdzl2YkI0SFRHaXp6WG1LdGY2ZHUxRGV1ZDArMXQxSEVhbzJIbjQ0Y1dSV2ZtakFreWNnNlA1d3FWQklGOGNzWUk3dnhRVUlIYXdnbzlrb0poNXVteUZkS0ltZkdZcW1oQ3UzbEttVVdOQTRrazBVS2VmQ3hrVUp2SHIzb056V2pqZVdMVU5BcGFPWVRFSU9oZ2hmZVJudFQ2L0FyUGM2TVhUc01YajlHMStueVl5QkdOZU1zQnhnc0hNREduNnpCaDFyZm90RDJ0dW9TQ2hqeDRKVHNXSGhaODF1UHQzVWdLRXhCYlM4L1M2T3UvMUhSaUhDa0p2SVd0bDRQZWRwVjJ4bzVhSkJ1VHJZV2JlQytQVG55VnhoYjVsK0NYMWZCemxmbDNJNVhTcm1kYm1oUVpmR05PcWdxVW1IemMwNkhEZk9IcTJ0dW56SUlUcVlPRkVIN2UwNm5EeEpsOGlmaDA0NFFmZVJDdmtZMkwxTEQ5TDdkanArL2VvcitoMjZqNTQ3VHcrNDMvdDVEQjI3NkhpTGpwVzMzS28zRmhyTS9BZStlNVA1bmNjTnVYRjcxNzZtK3d0RmVuYUxlVzQwa1o3ZjFxYWo4YTA2b0RrRnpTMjYzRFJXbHh2SDBKeUxPaWpTa1NNWlNCYVdpV1dMU01hbjgvN2V1TXRWeWJreHpKdWtIbFhoSDQ2dldtNGFuNCs0VFdncFpSQVluc29Wako0NUE2SjVMTnArK3pzY1AyY3VtaSs1aE56OWZhdm0zYnZnZFJ3RlNTN2FlT2tsNktCVG4xcTZCTHN2L1licFQzdFUrUmpZdlBmSEtJeHRRY1BVR1dnOGF6SEVoQmJiRVRXdTZSQytBbWJXb2pidktoZmZEcmtkbjRndDdBaVNaVWhSWEtsd25IR1JMU3hDTWxEb3VKQTNJQkdSKzBjT0piV0pFMGxIWlBaZEJoZ1RsSWlnOUdIYm80K1lHR3laT1oydXQvc3hCYmRScWZqd05tK0cvNk03TUxUMG02QW94cVN2WGdUZUNTS3BsbVo1U2xzK3dQYStIdXg4ZndNR0tQWjlBZzR2bmpDNXV6bmlBc01odWNjY2hXUFMxTklhTloxYXh4VjhXMlU3OEhHMDB1elhpT0ZmdUNZNHRFdXhMbThxMjZIU0RoQzRDYzhXSGlLeDM1eDBHTFpPeVdINjMxK01RM2p5VDYxQXpyTXRYTU9JeGpSU1RSMUM5bmJEZS9FbDlIT1BiL1lSRnFSNis4MTlQdmpMeFZqWFdBQU9uWUxwSzUvRnJKODlTR1ZxczdVYTE3eHgvbmE1bk5IR0FHTGtlRUpxemNxV2xOemlnYW9FZHMzbWxrcVVWNG03aW9TOUVhY2JBKzBxVVdkU1ljNEYrYmcyZU8rOGc5bDAxeWxjVVYyL0hMbGZQZzAxZDA2RlpRVmdhOWpuN2cwSGpDTEd1RXFMOHFMeGxNbEhINFhKeHgyRGlES0YyUEVCZ252TEVNV3dVdGhYWE5xc0NDWmNYS0F1M1RNV1ZnNTd6YlZlZGF5TU40bkhRbXZiUXBIa1drWm9wMkhodUluWmtGb3Nva2phUDNiWmRVRG5adlQvOTZzSS8vaEh1N21VcUoxWk5xVWI1ZnNHZ2Y1ZTlQS0s2dnlGcEJ4NnJYM0Zva2xUd1l3djNmZGo1Qys1QW1KOE0wVU0vZExTWWpxbFZZNXQ4b2R0K0NscjNTekxKZzNJMS9xeDFpTTV3cDUxNTk2U0hWNXFteFpFVEN5cXUrZk5tZzlWVmVYbDF4dTNOQ0RHeXlEY2VnbVY4WlZCMHV3R0lqUmxTamNEWC9vU1B2bTkyOEI3ZlBUeTVWWnhidlZDOEg0Mmp2czllK0RsR3dBaVNOcFpVamhTSWh5R0tGY1hqVlNJeFh6TEY3WSt0TEdZSVhKc2FaUFFLNHRta1dGWVpvSzgyNXdGbzNITWowS3lSQ052S3UzcWdqOXVIRTBtc0IwS1J5bWp0b2tJdDJ4RVBsZkFUUHJlUmlBMzhMZGZSOFBLWjh6dkFWMXYya2VURDdjdXlMMDBZbWVtbHhWcDE4aFRGbGhEUnlVOW1MVXRqRmk0bUQ0ejk2OUQ0bHM1UWtEbHV2bTZycEVqbm9yaGl0SjZPUVdQQVhLbW9IdDZrYi9wWnZLNklZVDlnOFlpeGlzWXpJdDV5TzFiSWEvL0RzWVhmSHg2d2lTU3JJVHluOWFpL0l1bmtOKzRFWXJTR0FZR29WZXRScDdLT1BYU0dtaGlXTFlZc0JsQnh1VmkzUHB4cEZsb3NZOUdnR1YzQVNsTlBEcDVjdW1MVzdia2VZRXFFTDRyQlBUdytpMVIwMG1PUkJPUThlcTNzR2tpaU15a29vWWlWQzV2VWhmM0wza1pSZ3lWb0VwRHd6YVZtRHVRVlUyRG4vbDVkdy9pLzBmamNRK2N6M08rVjNacUtybTh5eHk4M3FZZ0VYZm9CWEowZlpubStIQlRVK0R2UE9yb3V6ZDJkMTgyWmFBZnhHVmd1TVFJdTEyczQ5dnVRcnkzMzNCcUZrellnbCtTNEtCOEdxYzA0ZjZyQjYvdG1vckxMRXduT3BOa1dlbUlqeUJYOTEyYTBhUWtMamhrcGZ5ckZnTGFOZnRIMnVnYTgvR0E3dnNPZ2EyLytBenRiNXd3L2x1ck9qb3VYanhZOXRwNmVvZ0Q5NXBKQjNGTldtL2xzTExVSDllNnd0WEt3cldNclBjbml1WXFXcnFPUm5XVGVaeE50T1BGcUttWkVYY3ZHRHU0K2FCSDN0Y2IvOWVFZ0VrUzVlNnRCSkFydG03RFNlZGZjTHJmM0RwMjk1dEh6anE5cjN2d3p1a0RwUW5OZWM4c1plaFUyWi8xOHVMZE90cFdKS2JFRUtJYVp5SnU4ZFRMRTBnSm5PaFl1RW1MZUtVeWtXRDFpSHZiZE55dE51VmhEM2xicHhTcSs0THp2akkwZmVycS94VmdBUFl3MVozL01Pa25BQUFBQUVsRlRrU3VRbUNDXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5maWxlLnRodW1ibmFpbEJhc2U2NEltYWdlID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQThDQVlBQUFBZ3dEbjhBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlacFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1UTTRJRGM1TGpFMU9UZ3lOQ3dnTWpBeE5pOHdPUzh4TkMwd01Ub3dPVG93TVNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVGNnS0ZkcGJtUnZkM01wSWlCNGJYQk5UVHBKYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT2pBME9FRkJNVVk0T0RVd1FURXhSVGRDUlRCRU9EQTFSVGt3UWtZd1JrRXpJaUI0YlhCTlRUcEViMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPakEwT0VGQk1VWTVPRFV3UVRFeFJUZENSVEJFT0RBMVJUa3dRa1l3UmtFeklqNGdQSGh0Y0UxTk9rUmxjbWwyWldSR2NtOXRJSE4wVW1WbU9tbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZNRFE0UVVFeFJqWTROVEJCTVRGRk4wSkZNRVE0TURWRk9UQkNSakJHUVRNaUlITjBVbVZtT21SdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk1EUTRRVUV4UmpjNE5UQkJNVEZGTjBKRk1FUTRNRFZGT1RCQ1JqQkdRVE1pTHo0Z1BDOXlaR1k2UkdWelkzSnBjSFJwYjI0K0lEd3ZjbVJtT2xKRVJqNGdQQzk0T25odGNHMWxkR0UrSUR3L2VIQmhZMnRsZENCbGJtUTlJbklpUHo0eVA1aWVBQUFGRDBsRVFWUjQydXhheVVzYlVSaC9pYVBHZlFzS2VyR3V1Q0FGTDU0S0lpcDZzVklFZTVNZVJKSHFYOU5lbENxMVNDdUZHb1BpVXBlRG9oNFV4WlBlM1NPNGErTFc5M3Y2aHNtUW1Ka2tzMGp6d1RDVE9HYSszN2Y4M3ZkOWJ5eFRVMU5WYTJ0clB4NGZINk9zVnV1TnhXSWg5TnBLbm9SZVB0cnBPWjRlZC9TYVNFWCtPVmk1djcrMzBWTjBSVVhGcCt6czdQN3I2MnNTRlJWRm9xT2pTVnhjSEx2R0lRZ0NnWDVTRWRiWDE0ZjI5dmJlSkNRa2VQMUJmcU12VVhLUEVzSHZ1TjF1c3JpNCtLMnFxaW91THkvdjY5WFZsYUwvRlM0dUx1eXBxYW1pTXJCcXVDeXJSS2pYMlJrR3ZMbTVJVXRMUzErb3BUMzUrZmw5U2tBSWNOUHQ3UzBEZ0I4N1B6OW4xdUEvckpYQVNIaEdjbkl5TytPenpXWWpDSitGaFlWZWZGZFVWTlFIWFY0RThCeno1T0hoZ1ZtZ3JxNk9GQlFVRU9vWlRRSEV4c1l5WTAxTVRMQm54Y1RFTUQzaTQrUEo1ZVVsbVp1YjY2WGZ1Y3ZLeWdiUHpzNzhBK0F4Q0FBMG1RaDFIY25OemRVbGZPRDUyZGxaOW14Y3c5cndDTUlKSUthbnA3OVRFSjZTa3BKZnA2ZW52a09ReHpzSGNYZDNwMXY4UTJrOEQ4clNjQ0hsNWVYazRPQ0E2Y0ZKWld4czdPZlcxdGFIakl3TW4yRnRKU1lRSkd0aVlpSnBhMnRqSUhaMmRsZzRKU1VsTWNNNkhJN2ZtNXViSDlQVDAxbW9nVkk1R0ZNQTRPUUI2ZXpzOUFJQllGQjRkSFIwaUZMK2Uxd2owZUU5MHdDUVMxZFhGNkZ4VDNaM2QwVVFZRXVuMC9sbmRYVzFFYmtLcnpFbTA1UHpsUXFzREJDRmhZVWlDT1FFd29sUzdKakw1YXBKUzB0N0FrQk1LckI0ZDNjM28zUmFLYkR2a0JPdy91VGs1Ti85L2YxM0xMSE5vQ3hmMUh5QjZPbnBJY1hGeGVUbzZFZ0VnZlZxWkdSa2h1YkpXOU40d0Y5ZEJSQWRIUjJNWnJHZ2dXSlIrbmc4SG9HeTAwL0JETXFucEtRdzFoa1lHR0FLU3ZNU0lZTjRoNGNBQm9KN3NPRFJGVHhiWEltTlNHWThFMlVFUW9MR05ObmUzaFpEU2VvUnprU29sYUE4a2h4bmxDT0MwV3lUazVQRGxFUGREMnZMZXcxZUhlTUFLSURGZlJ5Z29RQmcwZmIyZHZFenJPb1BBSm9aSFAzOS9XUmpZNE9GbGVFQXVCZDhYZnNUbEJKU29LWmRCL3dKaWo5cGZydzZBSEs2ZlhVQVRGbE8vOWNBQXJJUXVxWGw1V1ZHWlVwWUlweE5EbHBiMmhPSEJnRDF4L0R3TUFPQWxVOHZRZkdHQVVQSUFHQjF1OTNPQUlDRDlXUWJWSjZCV0NnZ0FDemJzSWJlSGpnOFBDUXZqVk1VQTBBbjFORFFvSGlsREpjZzk5Q1JoUXdBWld0emMzT0VSZzJsMFpXVkZVMUNpQSswMFBkcUJrQkxHa1d6M3RyYXFncUF2UEZTUktQby9yV2dVVlNXR09hcUxiK2xJQlRScU12bDBzUURvRXFFa2Fxa2ZSN0ZLd2FBZHEreHNWR1RITUE0RVJNNHRYMjBkREVMQ0FDcllWTlRVNFJHRGFOUnVIbG1aa1pzckxVVVRCd3dRcStwcVFrdmdQSHhjVjFxb1pPVEU3WkRGRllBc0hwbVpxWXUxU2dNQk1vT1ZLV3FwbEhRblY0ZThGVkNoMXlOMXRiVzZwSUQySGtKNUlHZ3F0R1dscFlJalJwR281Z2V6OC9QQjcwUzgrYThzckxTdUhYQTZYUUduY1JvUjZ1cnE4TUtRRlVwRVdwVDc2ODVEMFZVMCtqeDhYRkFBUElOQ2FrSGxMNDZvN1FhVlJWQ3NCNTZZbmtWS0ZkVU9zK1hqcjlSTHF1dE9GWG53RXZiU3lpbjYrdnJJelFhQWVBUFFMamVlelBjQTN5M1hNL3BXekRpdDZtSDhqaXc0WXo2UjhsY1VsZExVOTJ3RlF1OXBIVHVCUUFqRGpRdkRvZEQ4NWYrZ2wzQUFBSmJySnlxQmVtWUFtZHM1OE5OWnN3Tkh1WmVJVVFSM1dPYkgzei9Hc1RqOFlnclA2b0VvYlMwOURPTnEwR2J6WGFMVjQ5ZkNmbFkzRzUzWWxaVzFzSS9BUVlBL2FPeG1Qekk3dVVBQUFBQVNVVk9SSzVDWUlJPVwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmZpbGUgJiYgdGhpcy5maWxlLmZpbGVEYXRlKSB7XHJcblx0XHRcdGNvbnN0IGZpbGVEYXRlRm9ybWF0ID0gKHRoaXMuZmlsZS5maWxlRGF0ZUZvcm1hdCA/PyAnJykgIT09ICcnID8gdGhpcy5maWxlLmZpbGVEYXRlRm9ybWF0IDogJ00vRC9ZWVlZIGg6bW06c3MgYSc7XHJcblx0XHRcdHRoaXMuZmlsZURhdGVGb3JtYXR0ZWQgPSBtb21lbnQodGhpcy5maWxlLmZpbGVEYXRlKS5mb3JtYXQoZmlsZURhdGVGb3JtYXQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0b25DbGljaygpIHtcclxuXHRcdGlmICh0aGlzLmZpbGVDbGlja2VkKVxyXG5cdFx0XHR0aGlzLmZpbGVDbGlja2VkLmVtaXQodGhpcy5maWxlKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGRlbGV0ZUZpbGUoZTogRXZlbnQpIHtcclxuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuY29uZmlybURlbGV0ZSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0dGhpcy5maWxlRGVsZXRlRW1pdHRlci5lbWl0KHRoaXMuZmlsZSk7XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc3QgcmVzdWx0OiBTbGlja0NvbmZpcm1EaWFsb2dSZXN1bHRzID0gYXdhaXQgdGhpcy5kZWxldGVDb25maXJtUmVmLmNvbmZpcm0oKTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHQgPT09IFNsaWNrQ29uZmlybURpYWxvZ1Jlc3VsdHMuT2spXHJcblx0XHRcdFx0dGhpcy5maWxlRGVsZXRlRW1pdHRlci5lbWl0KHRoaXMuZmlsZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBlZGl0VGl0bGUoKSB7XHJcblx0XHR0aGlzLmlzRWRpdGluZyA9IHRydWU7XHJcblx0XHR0aGlzLnRlbXBUaXRsZSA9IHRoaXMuZmlsZS50aXRsZTtcclxuXHRcdGF3YWl0IFNsaWNrU2xlZXBTZXJ2aWNlLnNsZWVwKCk7XHJcblx0XHR0aGlzLmVkaXRUaXRsZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgdGhpcy5lZGl0VGl0bGVJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aClcclxuXHRcdHRoaXMuZWRpdFRpdGxlSW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuZm5Eb2N1bWVudENsaWNrLCB0cnVlKTtcclxuXHR9XHJcblxyXG5cdG9uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KSB7XHJcblx0XHRpZiAoZS53aGljaCA9PT0gMTMpIHtcclxuXHRcdFx0dGhpcy5maWxlLnRpdGxlID0gdGhpcy50ZW1wVGl0bGU7XHJcblx0XHRcdHRoaXMuZmlsZUNoYW5nZUVtaXR0ZXIuZW1pdCh0aGlzLmZpbGUpO1xyXG5cdFx0XHR0aGlzLmlzRWRpdGluZyA9IGZhbHNlO1xyXG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5mbkRvY3VtZW50Q2xpY2ssIHRydWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLndoaWNoID09PSAyNykge1xyXG5cdFx0XHR0aGlzLnRlbXBUaXRsZSA9IG51bGw7XHJcblx0XHRcdHRoaXMuaXNFZGl0aW5nID0gZmFsc2U7XHJcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmZuRG9jdW1lbnRDbGljaywgdHJ1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBkb2N1bWVudENsaWNrKGU6IE1vdXNlRXZlbnQpIHtcclxuXHRcdGF3YWl0IFNsaWNrU2xlZXBTZXJ2aWNlLnNsZWVwKCk7XHJcblx0XHRjb25zdCBjbGlja2VkSW5zaWRlID0gU2xpY2tVdGlsc1NlcnZpY2UuY2hlY2tQYXJlbnRDbGFzc0V4aXN0cyg8SFRNTEVsZW1lbnQ+ZS50YXJnZXQsICdzbGljay1maWxlLWxpc3QtaXRlbV90aXRsZScpXHJcblx0XHRpZiAoY2xpY2tlZEluc2lkZSlcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzRWRpdGluZyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHR0aGlzLmZpbGUudGl0bGUgPSB0aGlzLnRlbXBUaXRsZTtcclxuXHRcdFx0dGhpcy5maWxlQ2hhbmdlRW1pdHRlci5lbWl0KHRoaXMuZmlsZSk7XHJcblx0XHRcdHRoaXMuaXNFZGl0aW5nID0gZmFsc2U7XHJcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmZuRG9jdW1lbnRDbGljaywgdHJ1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBvbkNoZWNrYm94Q2xpY2tlZChlOiBNb3VzZUV2ZW50KSB7XHJcblx0XHR0aGlzLmZpbGUuaXNDaGVja2VkID0gIXRoaXMuZmlsZS5pc0NoZWNrZWQ7XHJcblx0XHRpZiAodGhpcy5jaGVja0NoYW5nZWQpXHJcblx0XHRcdHRoaXMuY2hlY2tDaGFuZ2VkLmVtaXQoZSk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpIHtcclxuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmZuRG9jdW1lbnRDbGljaywgdHJ1ZSk7XHJcblx0fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbGljay1maWxlLWxpc3QtaXRlbVwiIGlkPVwic2xpY2stZmlsZS1saXN0LWl0ZW1fe3t1dWlkfX1cIj5cclxuXHQ8ZGl2IGNsYXNzPVwic2xpY2stZmlsZS1saXN0LWl0ZW1faW1nIGNhcmRcIiAoY2xpY2spPVwib25DbGljaygpXCIgW25nU3R5bGVdPVwieyAnY3Vyc29yJzogKHNob3dQaG90b0dhbGxlcnkgPT09IHRydWUpID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnIH1cIiBbc3R5bGUubWluSGVpZ2h0LnB4XT1cIml0ZW1TaXplICsgMlwiIFtzdHlsZS5taW5XaWR0aC5weF09XCJpdGVtU2l6ZVwiPlxyXG5cdFx0PGltZyAqbmdJZj1cImZpbGUudGh1bWJuYWlsQmFzZTY0SW1hZ2VcIiBbc3JjXT1cImZpbGUudGh1bWJuYWlsQmFzZTY0SW1hZ2VcIiBbc3R5bGUubWF4V2lkdGgucHhdPVwiaXRlbUltZ1NpemVcIiBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cIml0ZW1JbWdTaXplXCIgLz5cclxuXHRcdDxpbWcgKm5nSWY9XCIhZmlsZS50aHVtYm5haWxCYXNlNjRJbWFnZSAmJiBmaWxlLmJhc2U2NEltYWdlXCIgW3NyY109XCJmaWxlLmJhc2U2NEltYWdlXCIgW3N0eWxlLm1heFdpZHRoLnB4XT1cIml0ZW1JbWdTaXplXCIgW3N0eWxlLm1heEhlaWdodC5weF09XCJpdGVtSW1nU2l6ZVwiIC8+XHJcblx0XHQ8aW1nICpuZ0lmPVwiIWZpbGUudGh1bWJuYWlsQmFzZTY0SW1hZ2UgJiYgIWZpbGUuYmFzZTY0SW1hZ2UgJiYgZmlsZS50aHVtYm5haWxVcmxcIiBbc3JjXT1cImZpbGUudGh1bWJuYWlsVXJsXCIgW3N0eWxlLm1heFdpZHRoLnB4XT1cIml0ZW1JbWdTaXplXCIgW3N0eWxlLm1heEhlaWdodC5weF09XCJpdGVtSW1nU2l6ZVwiIC8+XHJcblx0XHQ8aW1nICpuZ0lmPVwiIWZpbGUudGh1bWJuYWlsQmFzZTY0SW1hZ2UgJiYgIWZpbGUuYmFzZTY0SW1hZ2UgJiYgIWZpbGUudGh1bWJuYWlsVXJsICYmIGZpbGUudXJsXCIgW3NyY109XCJmaWxlLnVybFwiIFtzdHlsZS5tYXhXaWR0aC5weF09XCJpdGVtSW1nU2l6ZVwiIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiaXRlbUltZ1NpemVcIiAvPlxyXG5cdFx0PGkgKm5nSWY9XCJhbGxvd0RlbGV0ZVwiIGNsYXNzPVwiZmFzIGZhLXRpbWVzLWNpcmNsZSBiZy13aGl0ZSB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJkZWxldGVGaWxlKCRldmVudClcIj48L2k+XHJcblx0PC9kaXY+XHJcblx0PGRpdiBjbGFzcz1cInNsaWNrLWZpbGUtbGlzdC1pdGVtX3RpdGxlXCIgKm5nSWY9XCJmaWxlRGF0ZUZvcm1hdHRlZFwiIFtzdHlsZS5taW5XaWR0aC5weF09XCJpdGVtU2l6ZVwiIFtzdHlsZS5tYXhXaWR0aC5weF09XCJpdGVtU2l6ZVwiPlxyXG5cdFx0PGRpdiBjbGFzcz1cInNsaWNrLWZpbGUtbGlzdC1pdGVtX2RhdGVcIiAqbmdJZj1cImZpbGVEYXRlRm9ybWF0dGVkXCIgW3N0eWxlLm1pbldpZHRoLnB4XT1cIml0ZW1TaXplXCI+e3tmaWxlRGF0ZUZvcm1hdHRlZH19PC9kaXY+XHJcblx0PC9kaXY+XHJcblx0PGRpdiBjbGFzcz1cInNsaWNrLWZpbGUtbGlzdC1pdGVtX3RpdGxlXCIgW3N0eWxlLm1pbldpZHRoLnB4XT1cIml0ZW1TaXplXCIgW3N0eWxlLm1heFdpZHRoLnB4XT1cIml0ZW1TaXplXCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwic2xpY2stZmlsZS1saXN0LWl0ZW1fZGlzcGxheS10aXRsZVwiICN0aXRsZURpdlJlZiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiICpuZ0lmPVwiIWlzRWRpdGluZ1wiIChjbGljayk9XCJlZGl0VGl0bGUoKVwiPnt7ZmlsZS50aXRsZX19PC9kaXY+XHJcblx0XHQ8ZGl2ICNlZGl0VGl0bGVEaXZSZWYgY2xhc3M9XCJzbGljay1maWxlLWxpc3QtaXRlbV9lZGl0LXRpdGxlXCIgKm5nSWY9XCJpc0VkaXRpbmdcIj48aW5wdXQgI2VkaXRUaXRsZUlucHV0UmVmIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInRlbXBUaXRsZVwiIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCIgW3N0eWxlLndpZHRoLnB4XT1cIml0ZW1TaXplXCIgLz48L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHJcblx0PCEtLSBXZSB3YW50IHRoZSB1c2VyIHRvIGJlIGFibGUgdG8gY2xpY2sganVzdCBhIGxpdHRsZSBvdXRzaWRlIG9mIHRoZSBjaGVja2JveCBhbmQgc3RpbGwgaGF2ZSBpdCBjaGVjayAtLT5cclxuXHQ8ZGl2ICpuZ0lmPVwic2hvd0NoZWNrYm94ID09PSB0cnVlXCIgY2xhc3M9XCJzbGljay1maWxlLWNoZWNrYm94XCIgKGNsaWNrKT1cIm9uQ2hlY2tib3hDbGlja2VkKCRldmVudClcIj5cclxuXHRcdDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbbmdNb2RlbF09XCJmaWxlLmlzQ2hlY2tlZFwiIC8+XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPHNsaWNrLWNvbmZpcm0tZGlhbG9nICNkZWxldGVDb25maXJtUmVmPlxyXG5cdDxoNCBjbGFzcz1cInAtMCBtLTAgdGV4dC1kYW5nZXJcIj5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlPzwvaDQ+XHJcbjwvc2xpY2stY29uZmlybS1kaWFsb2c+Il19