@hmcts/media-viewer 4.1.10 → 4.2.0

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 (370) hide show
  1. package/fesm2022/hmcts-media-viewer.mjs +297 -285
  2. package/fesm2022/hmcts-media-viewer.mjs.map +1 -1
  3. package/index.d.ts +2316 -4
  4. package/index.d.ts.map +1 -0
  5. package/package.json +10 -12
  6. package/esm2022/hmcts-media-viewer.mjs +0 -5
  7. package/esm2022/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +0 -122
  8. package/esm2022/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.mjs +0 -120
  9. package/esm2022/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.mjs +0 -101
  10. package/esm2022/lib/annotations/annotation-set/annotation-set.component.mjs +0 -50
  11. package/esm2022/lib/annotations/annotation-set/annotation-set.model.mjs +0 -2
  12. package/esm2022/lib/annotations/annotation-set/annotation-view/annotation-view.component.mjs +0 -94
  13. package/esm2022/lib/annotations/annotation-set/annotation-view/annotation.model.mjs +0 -2
  14. package/esm2022/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.mjs +0 -116
  15. package/esm2022/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.mjs +0 -2
  16. package/esm2022/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.mjs +0 -119
  17. package/esm2022/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.mjs +0 -86
  18. package/esm2022/lib/annotations/annotations.module.mjs +0 -162
  19. package/esm2022/lib/annotations/comment-set/comment/comment.component.mjs +0 -178
  20. package/esm2022/lib/annotations/comment-set/comment/comment.model.mjs +0 -2
  21. package/esm2022/lib/annotations/comment-set/comment/comment.service.mjs +0 -50
  22. package/esm2022/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.mjs +0 -47
  23. package/esm2022/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.mjs +0 -31
  24. package/esm2022/lib/annotations/comment-set/comment-navigate/comments-navigate.component.mjs +0 -91
  25. package/esm2022/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.mjs +0 -62
  26. package/esm2022/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.mjs +0 -54
  27. package/esm2022/lib/annotations/comment-set/comment-set-header/comment-set-header.component.mjs +0 -72
  28. package/esm2022/lib/annotations/comment-set/comment-set-render.service.mjs +0 -55
  29. package/esm2022/lib/annotations/comment-set/comment-set.component.mjs +0 -123
  30. package/esm2022/lib/annotations/comments-summary/comments-summary.component.mjs +0 -120
  31. package/esm2022/lib/annotations/models/api-persisted.model.mjs +0 -2
  32. package/esm2022/lib/annotations/models/event-select.model.mjs +0 -2
  33. package/esm2022/lib/annotations/models/tags.model.mjs +0 -2
  34. package/esm2022/lib/annotations/models/user.model.mjs +0 -2
  35. package/esm2022/lib/annotations/pipes/date/date.pipe.mjs +0 -26
  36. package/esm2022/lib/annotations/pipes/filter/filter.pipe.mjs +0 -32
  37. package/esm2022/lib/annotations/pipes/unsnake/unsnake.pipe.mjs +0 -16
  38. package/esm2022/lib/annotations/services/annotation-api/annotation-api.service.mjs +0 -58
  39. package/esm2022/lib/annotations/services/bookmarks-api/bookmarks-api.service.mjs +0 -45
  40. package/esm2022/lib/annotations/services/tags/tags.services.mjs +0 -41
  41. package/esm2022/lib/annotations/tags/tags.component.mjs +0 -53
  42. package/esm2022/lib/bookmark/components/bookmark-icons.component.mjs +0 -25
  43. package/esm2022/lib/icp/confirm-exit/confirm-action-dialog.component.mjs +0 -30
  44. package/esm2022/lib/icp/icp-follower.service.mjs +0 -65
  45. package/esm2022/lib/icp/icp-presenter.service.mjs +0 -56
  46. package/esm2022/lib/icp/icp-session-api.service.mjs +0 -28
  47. package/esm2022/lib/icp/icp-update.service.mjs +0 -73
  48. package/esm2022/lib/icp/icp.events.mjs +0 -15
  49. package/esm2022/lib/icp/icp.interfaces.mjs +0 -2
  50. package/esm2022/lib/icp/icp.service.mjs +0 -98
  51. package/esm2022/lib/icp/participants-list/participants-list.component.mjs +0 -32
  52. package/esm2022/lib/icp/socket.service.mjs +0 -128
  53. package/esm2022/lib/media-viewer.component.mjs +0 -247
  54. package/esm2022/lib/media-viewer.module.mjs +0 -139
  55. package/esm2022/lib/print.service.mjs +0 -32
  56. package/esm2022/lib/redaction/components/redaction.component.mjs +0 -91
  57. package/esm2022/lib/redaction/services/redaction-api.service.mjs +0 -50
  58. package/esm2022/lib/redaction/services/redaction.model.mjs +0 -2
  59. package/esm2022/lib/shared/directives/tooltip-dismiss.directive.mjs +0 -36
  60. package/esm2022/lib/shared/gov-uk-date/gov-uk-date.component.mjs +0 -28
  61. package/esm2022/lib/shared/gov-uk-error-message/gov-uk-error-message.component.mjs +0 -34
  62. package/esm2022/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.mjs +0 -63
  63. package/esm2022/lib/shared/gov-uk-label/gov-uk-label.component.mjs +0 -44
  64. package/esm2022/lib/shared/shared.module.mjs +0 -53
  65. package/esm2022/lib/shared/util/helpers/html-templates.helper.mjs +0 -29
  66. package/esm2022/lib/shared/util/services/number.helper.service.mjs +0 -23
  67. package/esm2022/lib/store/actions/annotation.actions.mjs +0 -119
  68. package/esm2022/lib/store/actions/bookmark.actions.mjs +0 -112
  69. package/esm2022/lib/store/actions/document.actions.mjs +0 -91
  70. package/esm2022/lib/store/actions/icp.actions.mjs +0 -56
  71. package/esm2022/lib/store/actions/redaction.actions.mjs +0 -132
  72. package/esm2022/lib/store/actions/tag.actions.mjs +0 -21
  73. package/esm2022/lib/store/bookmarks-store-utils.mjs +0 -49
  74. package/esm2022/lib/store/effects/annotation.effects.mjs +0 -51
  75. package/esm2022/lib/store/effects/bookmarks.effects.mjs +0 -44
  76. package/esm2022/lib/store/effects/document.effects.mjs +0 -44
  77. package/esm2022/lib/store/effects/icp.effects.mjs +0 -26
  78. package/esm2022/lib/store/effects/index.mjs +0 -7
  79. package/esm2022/lib/store/effects/redaction.effects.mjs +0 -67
  80. package/esm2022/lib/store/models/bookmarks.interface.mjs +0 -2
  81. package/esm2022/lib/store/models/filters.interface.mjs +0 -2
  82. package/esm2022/lib/store/reducers/annotations.reducer.mjs +0 -208
  83. package/esm2022/lib/store/reducers/bookmarks.reducer.mjs +0 -125
  84. package/esm2022/lib/store/reducers/document.reducer.mjs +0 -158
  85. package/esm2022/lib/store/reducers/icp.reducer.mjs +0 -56
  86. package/esm2022/lib/store/reducers/redaction.reducer.mjs +0 -116
  87. package/esm2022/lib/store/reducers/reducers.mjs +0 -23
  88. package/esm2022/lib/store/reducers/tags.reducer.mjs +0 -93
  89. package/esm2022/lib/store/selectors/annotation.selectors.mjs +0 -81
  90. package/esm2022/lib/store/selectors/bookmark.selectors.mjs +0 -37
  91. package/esm2022/lib/store/selectors/document.selectors.mjs +0 -13
  92. package/esm2022/lib/store/selectors/icp.selectors.mjs +0 -13
  93. package/esm2022/lib/store/selectors/redaction.selectors.mjs +0 -26
  94. package/esm2022/lib/store/selectors/tag.selectors.mjs +0 -15
  95. package/esm2022/lib/store/store-utils.mjs +0 -131
  96. package/esm2022/lib/toolbar/highlight-toolbar/highlight-toolbar.component.mjs +0 -46
  97. package/esm2022/lib/toolbar/icp-event.service.mjs +0 -44
  98. package/esm2022/lib/toolbar/icp-toolbar/icp-toolbar.component.mjs +0 -43
  99. package/esm2022/lib/toolbar/main-toolbar/main-toolbar.component.mjs +0 -207
  100. package/esm2022/lib/toolbar/redaction-search-bar/redaction-search-bar.component.mjs +0 -237
  101. package/esm2022/lib/toolbar/redaction-search-bar/redaction-search.model.mjs +0 -2
  102. package/esm2022/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +0 -69
  103. package/esm2022/lib/toolbar/search-bar/search-bar.component.mjs +0 -109
  104. package/esm2022/lib/toolbar/toolbar-button-visibility.service.mjs +0 -94
  105. package/esm2022/lib/toolbar/toolbar-event.service.mjs +0 -178
  106. package/esm2022/lib/toolbar/toolbar.module.mjs +0 -75
  107. package/esm2022/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.mjs +0 -82
  108. package/esm2022/lib/viewers/convertible-content-viewer/document-conversion-api.service.mjs +0 -22
  109. package/esm2022/lib/viewers/grab-n-drag.directive.mjs +0 -57
  110. package/esm2022/lib/viewers/image-viewer/image-viewer.component.mjs +0 -166
  111. package/esm2022/lib/viewers/multimedia-player/multimedia-player.component.mjs +0 -59
  112. package/esm2022/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.mjs +0 -266
  113. package/esm2022/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.mjs +0 -40
  114. package/esm2022/lib/viewers/pdf-viewer/pdf-viewer.component.mjs +0 -242
  115. package/esm2022/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.mjs +0 -379
  116. package/esm2022/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.mjs +0 -2
  117. package/esm2022/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.mjs +0 -49
  118. package/esm2022/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.mjs +0 -2
  119. package/esm2022/lib/viewers/pdf-viewer/side-bar/side-bar.component.mjs +0 -99
  120. package/esm2022/lib/viewers/rotation-persist/rotation-api.service.mjs +0 -27
  121. package/esm2022/lib/viewers/rotation-persist/rotation-persist.directive.mjs +0 -61
  122. package/esm2022/lib/viewers/rotation-persist/rotation.model.mjs +0 -2
  123. package/esm2022/lib/viewers/unsupported-viewer/unsupported-viewer.component.mjs +0 -49
  124. package/esm2022/lib/viewers/viewer-event.service.mjs +0 -34
  125. package/esm2022/lib/viewers/viewer-exception.model.mjs +0 -13
  126. package/esm2022/lib/viewers/viewer-util.service.mjs +0 -20
  127. package/esm2022/public_api.mjs +0 -33
  128. package/hmcts-media-viewer.d.ts.map +0 -1
  129. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts +0 -48
  130. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts.map +0 -1
  131. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts +0 -32
  132. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts.map +0 -1
  133. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts +0 -18
  134. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts.map +0 -1
  135. package/lib/annotations/annotation-set/annotation-set.component.d.ts +0 -27
  136. package/lib/annotations/annotation-set/annotation-set.component.d.ts.map +0 -1
  137. package/lib/annotations/annotation-set/annotation-set.model.d.ts +0 -7
  138. package/lib/annotations/annotation-set/annotation-set.model.d.ts.map +0 -1
  139. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts +0 -34
  140. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts.map +0 -1
  141. package/lib/annotations/annotation-set/annotation-view/annotation.model.d.ts +0 -16
  142. package/lib/annotations/annotation-set/annotation-view/annotation.model.d.ts.map +0 -1
  143. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts +0 -41
  144. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts.map +0 -1
  145. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.d.ts +0 -9
  146. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.d.ts.map +0 -1
  147. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts +0 -37
  148. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts.map +0 -1
  149. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts +0 -37
  150. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts.map +0 -1
  151. package/lib/annotations/annotations.module.d.ts +0 -36
  152. package/lib/annotations/annotations.module.d.ts.map +0 -1
  153. package/lib/annotations/comment-set/comment/comment.component.d.ts +0 -69
  154. package/lib/annotations/comment-set/comment/comment.component.d.ts.map +0 -1
  155. package/lib/annotations/comment-set/comment/comment.model.d.ts +0 -13
  156. package/lib/annotations/comment-set/comment/comment.model.d.ts.map +0 -1
  157. package/lib/annotations/comment-set/comment/comment.service.d.ts +0 -22
  158. package/lib/annotations/comment-set/comment/comment.service.d.ts.map +0 -1
  159. package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts +0 -14
  160. package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts.map +0 -1
  161. package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.d.ts +0 -12
  162. package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.d.ts.map +0 -1
  163. package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts +0 -28
  164. package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts.map +0 -1
  165. package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.d.ts +0 -26
  166. package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.d.ts.map +0 -1
  167. package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts +0 -21
  168. package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts.map +0 -1
  169. package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts +0 -36
  170. package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts.map +0 -1
  171. package/lib/annotations/comment-set/comment-set-render.service.d.ts +0 -15
  172. package/lib/annotations/comment-set/comment-set-render.service.d.ts.map +0 -1
  173. package/lib/annotations/comment-set/comment-set.component.d.ts +0 -56
  174. package/lib/annotations/comment-set/comment-set.component.d.ts.map +0 -1
  175. package/lib/annotations/comments-summary/comments-summary.component.d.ts +0 -42
  176. package/lib/annotations/comments-summary/comments-summary.component.d.ts.map +0 -1
  177. package/lib/annotations/models/api-persisted.model.d.ts +0 -11
  178. package/lib/annotations/models/api-persisted.model.d.ts.map +0 -1
  179. package/lib/annotations/models/event-select.model.d.ts +0 -6
  180. package/lib/annotations/models/event-select.model.d.ts.map +0 -1
  181. package/lib/annotations/models/tags.model.d.ts +0 -7
  182. package/lib/annotations/models/tags.model.d.ts.map +0 -1
  183. package/lib/annotations/models/user.model.d.ts +0 -6
  184. package/lib/annotations/models/user.model.d.ts.map +0 -1
  185. package/lib/annotations/pipes/date/date.pipe.d.ts +0 -16
  186. package/lib/annotations/pipes/date/date.pipe.d.ts.map +0 -1
  187. package/lib/annotations/pipes/filter/filter.pipe.d.ts +0 -8
  188. package/lib/annotations/pipes/filter/filter.pipe.d.ts.map +0 -1
  189. package/lib/annotations/pipes/unsnake/unsnake.pipe.d.ts +0 -8
  190. package/lib/annotations/pipes/unsnake/unsnake.pipe.d.ts.map +0 -1
  191. package/lib/annotations/services/annotation-api/annotation-api.service.d.ts +0 -28
  192. package/lib/annotations/services/annotation-api/annotation-api.service.d.ts.map +0 -1
  193. package/lib/annotations/services/bookmarks-api/bookmarks-api.service.d.ts +0 -21
  194. package/lib/annotations/services/bookmarks-api/bookmarks-api.service.d.ts.map +0 -1
  195. package/lib/annotations/services/tags/tags.services.d.ts +0 -18
  196. package/lib/annotations/services/tags/tags.services.d.ts.map +0 -1
  197. package/lib/annotations/tags/tags.component.d.ts +0 -28
  198. package/lib/annotations/tags/tags.component.d.ts.map +0 -1
  199. package/lib/bookmark/components/bookmark-icons.component.d.ts +0 -19
  200. package/lib/bookmark/components/bookmark-icons.component.d.ts.map +0 -1
  201. package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts +0 -14
  202. package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts.map +0 -1
  203. package/lib/icp/icp-follower.service.d.ts +0 -26
  204. package/lib/icp/icp-follower.service.d.ts.map +0 -1
  205. package/lib/icp/icp-presenter.service.d.ts +0 -25
  206. package/lib/icp/icp-presenter.service.d.ts.map +0 -1
  207. package/lib/icp/icp-session-api.service.d.ts +0 -15
  208. package/lib/icp/icp-session-api.service.d.ts.map +0 -1
  209. package/lib/icp/icp-update.service.d.ts +0 -22
  210. package/lib/icp/icp-update.service.d.ts.map +0 -1
  211. package/lib/icp/icp.events.d.ts +0 -14
  212. package/lib/icp/icp.events.d.ts.map +0 -1
  213. package/lib/icp/icp.interfaces.d.ts +0 -23
  214. package/lib/icp/icp.interfaces.d.ts.map +0 -1
  215. package/lib/icp/icp.service.d.ts +0 -40
  216. package/lib/icp/icp.service.d.ts.map +0 -1
  217. package/lib/icp/participants-list/participants-list.component.d.ts +0 -23
  218. package/lib/icp/participants-list/participants-list.component.d.ts.map +0 -1
  219. package/lib/icp/socket.service.d.ts +0 -29
  220. package/lib/icp/socket.service.d.ts.map +0 -1
  221. package/lib/media-viewer.component.d.ts +0 -72
  222. package/lib/media-viewer.component.d.ts.map +0 -1
  223. package/lib/media-viewer.module.d.ts +0 -36
  224. package/lib/media-viewer.module.d.ts.map +0 -1
  225. package/lib/print.service.d.ts +0 -8
  226. package/lib/print.service.d.ts.map +0 -1
  227. package/lib/redaction/components/redaction.component.d.ts +0 -42
  228. package/lib/redaction/components/redaction.component.d.ts.map +0 -1
  229. package/lib/redaction/services/redaction-api.service.d.ts +0 -20
  230. package/lib/redaction/services/redaction-api.service.d.ts.map +0 -1
  231. package/lib/redaction/services/redaction.model.d.ts +0 -11
  232. package/lib/redaction/services/redaction.model.d.ts.map +0 -1
  233. package/lib/shared/directives/tooltip-dismiss.directive.d.ts +0 -11
  234. package/lib/shared/directives/tooltip-dismiss.directive.d.ts.map +0 -1
  235. package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts +0 -15
  236. package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts.map +0 -1
  237. package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts +0 -11
  238. package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts.map +0 -1
  239. package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts +0 -16
  240. package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts.map +0 -1
  241. package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts +0 -14
  242. package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts.map +0 -1
  243. package/lib/shared/shared.module.d.ts +0 -14
  244. package/lib/shared/shared.module.d.ts.map +0 -1
  245. package/lib/shared/util/helpers/html-templates.helper.d.ts +0 -9
  246. package/lib/shared/util/helpers/html-templates.helper.d.ts.map +0 -1
  247. package/lib/shared/util/services/number.helper.service.d.ts +0 -11
  248. package/lib/shared/util/services/number.helper.service.d.ts.map +0 -1
  249. package/lib/store/actions/annotation.actions.d.ts +0 -126
  250. package/lib/store/actions/annotation.actions.d.ts.map +0 -1
  251. package/lib/store/actions/bookmark.actions.d.ts +0 -117
  252. package/lib/store/actions/bookmark.actions.d.ts.map +0 -1
  253. package/lib/store/actions/document.actions.d.ts +0 -90
  254. package/lib/store/actions/document.actions.d.ts.map +0 -1
  255. package/lib/store/actions/icp.actions.d.ts +0 -75
  256. package/lib/store/actions/icp.actions.d.ts.map +0 -1
  257. package/lib/store/actions/redaction.actions.d.ts +0 -127
  258. package/lib/store/actions/redaction.actions.d.ts.map +0 -1
  259. package/lib/store/actions/tag.actions.d.ts +0 -30
  260. package/lib/store/actions/tag.actions.d.ts.map +0 -1
  261. package/lib/store/bookmarks-store-utils.d.ts +0 -9
  262. package/lib/store/bookmarks-store-utils.d.ts.map +0 -1
  263. package/lib/store/effects/annotation.effects.d.ts +0 -16
  264. package/lib/store/effects/annotation.effects.d.ts.map +0 -1
  265. package/lib/store/effects/bookmarks.effects.d.ts +0 -21
  266. package/lib/store/effects/bookmarks.effects.d.ts.map +0 -1
  267. package/lib/store/effects/document.effects.d.ts +0 -17
  268. package/lib/store/effects/document.effects.d.ts.map +0 -1
  269. package/lib/store/effects/icp.effects.d.ts +0 -16
  270. package/lib/store/effects/icp.effects.d.ts.map +0 -1
  271. package/lib/store/effects/index.d.ts +0 -2
  272. package/lib/store/effects/index.d.ts.map +0 -1
  273. package/lib/store/effects/redaction.effects.d.ts +0 -20
  274. package/lib/store/effects/redaction.effects.d.ts.map +0 -1
  275. package/lib/store/models/bookmarks.interface.d.ts +0 -31
  276. package/lib/store/models/bookmarks.interface.d.ts.map +0 -1
  277. package/lib/store/models/filters.interface.d.ts +0 -8
  278. package/lib/store/models/filters.interface.d.ts.map +0 -1
  279. package/lib/store/reducers/annotations.reducer.d.ts +0 -48
  280. package/lib/store/reducers/annotations.reducer.d.ts.map +0 -1
  281. package/lib/store/reducers/bookmarks.reducer.d.ts +0 -27
  282. package/lib/store/reducers/bookmarks.reducer.d.ts.map +0 -1
  283. package/lib/store/reducers/document.reducer.d.ts +0 -52
  284. package/lib/store/reducers/document.reducer.d.ts.map +0 -1
  285. package/lib/store/reducers/icp.reducer.d.ts +0 -9
  286. package/lib/store/reducers/icp.reducer.d.ts.map +0 -1
  287. package/lib/store/reducers/redaction.reducer.d.ts +0 -32
  288. package/lib/store/reducers/redaction.reducer.d.ts.map +0 -1
  289. package/lib/store/reducers/reducers.d.ts +0 -24
  290. package/lib/store/reducers/reducers.d.ts.map +0 -1
  291. package/lib/store/reducers/tags.reducer.d.ts +0 -32
  292. package/lib/store/reducers/tags.reducer.d.ts.map +0 -1
  293. package/lib/store/selectors/annotation.selectors.d.ts +0 -136
  294. package/lib/store/selectors/annotation.selectors.d.ts.map +0 -1
  295. package/lib/store/selectors/bookmark.selectors.d.ts +0 -38
  296. package/lib/store/selectors/bookmark.selectors.d.ts.map +0 -1
  297. package/lib/store/selectors/document.selectors.d.ts +0 -23
  298. package/lib/store/selectors/document.selectors.d.ts.map +0 -1
  299. package/lib/store/selectors/icp.selectors.d.ts +0 -10
  300. package/lib/store/selectors/icp.selectors.d.ts.map +0 -1
  301. package/lib/store/selectors/redaction.selectors.d.ts +0 -35
  302. package/lib/store/selectors/redaction.selectors.d.ts.map +0 -1
  303. package/lib/store/selectors/tag.selectors.d.ts +0 -28
  304. package/lib/store/selectors/tag.selectors.d.ts.map +0 -1
  305. package/lib/store/store-utils.d.ts +0 -25
  306. package/lib/store/store-utils.d.ts.map +0 -1
  307. package/lib/toolbar/highlight-toolbar/highlight-toolbar.component.d.ts +0 -20
  308. package/lib/toolbar/highlight-toolbar/highlight-toolbar.component.d.ts.map +0 -1
  309. package/lib/toolbar/icp-event.service.d.ts +0 -21
  310. package/lib/toolbar/icp-event.service.d.ts.map +0 -1
  311. package/lib/toolbar/icp-toolbar/icp-toolbar.component.d.ts +0 -24
  312. package/lib/toolbar/icp-toolbar/icp-toolbar.component.d.ts.map +0 -1
  313. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts +0 -69
  314. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts.map +0 -1
  315. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts +0 -60
  316. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts.map +0 -1
  317. package/lib/toolbar/redaction-search-bar/redaction-search.model.d.ts +0 -12
  318. package/lib/toolbar/redaction-search-bar/redaction-search.model.d.ts.map +0 -1
  319. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts +0 -30
  320. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts.map +0 -1
  321. package/lib/toolbar/search-bar/search-bar.component.d.ts +0 -34
  322. package/lib/toolbar/search-bar/search-bar.component.d.ts.map +0 -1
  323. package/lib/toolbar/toolbar-button-visibility.service.d.ts +0 -67
  324. package/lib/toolbar/toolbar-button-visibility.service.d.ts.map +0 -1
  325. package/lib/toolbar/toolbar-event.service.d.ts +0 -96
  326. package/lib/toolbar/toolbar-event.service.d.ts.map +0 -1
  327. package/lib/toolbar/toolbar.module.d.ts +0 -20
  328. package/lib/toolbar/toolbar.module.d.ts.map +0 -1
  329. package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts +0 -31
  330. package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts.map +0 -1
  331. package/lib/viewers/convertible-content-viewer/document-conversion-api.service.d.ts +0 -12
  332. package/lib/viewers/convertible-content-viewer/document-conversion-api.service.d.ts.map +0 -1
  333. package/lib/viewers/grab-n-drag.directive.d.ts +0 -19
  334. package/lib/viewers/grab-n-drag.directive.d.ts.map +0 -1
  335. package/lib/viewers/image-viewer/image-viewer.component.d.ts +0 -57
  336. package/lib/viewers/image-viewer/image-viewer.component.d.ts.map +0 -1
  337. package/lib/viewers/multimedia-player/multimedia-player.component.d.ts +0 -25
  338. package/lib/viewers/multimedia-player/multimedia-player.component.d.ts.map +0 -1
  339. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.d.ts +0 -69
  340. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.d.ts.map +0 -1
  341. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.d.ts +0 -17
  342. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.d.ts.map +0 -1
  343. package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts +0 -82
  344. package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts.map +0 -1
  345. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts +0 -82
  346. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts.map +0 -1
  347. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.d.ts +0 -22
  348. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.d.ts.map +0 -1
  349. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts +0 -20
  350. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts.map +0 -1
  351. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.d.ts +0 -14
  352. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.d.ts.map +0 -1
  353. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts +0 -42
  354. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts.map +0 -1
  355. package/lib/viewers/rotation-persist/rotation-api.service.d.ts +0 -14
  356. package/lib/viewers/rotation-persist/rotation-api.service.d.ts.map +0 -1
  357. package/lib/viewers/rotation-persist/rotation-persist.directive.d.ts +0 -27
  358. package/lib/viewers/rotation-persist/rotation-persist.directive.d.ts.map +0 -1
  359. package/lib/viewers/rotation-persist/rotation.model.d.ts +0 -5
  360. package/lib/viewers/rotation-persist/rotation.model.d.ts.map +0 -1
  361. package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts +0 -23
  362. package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts.map +0 -1
  363. package/lib/viewers/viewer-event.service.d.ts +0 -23
  364. package/lib/viewers/viewer-event.service.d.ts.map +0 -1
  365. package/lib/viewers/viewer-exception.model.d.ts +0 -15
  366. package/lib/viewers/viewer-exception.model.d.ts.map +0 -1
  367. package/lib/viewers/viewer-util.service.d.ts +0 -10
  368. package/lib/viewers/viewer-util.service.d.ts.map +0 -1
  369. package/public_api.d.ts +0 -30
  370. package/public_api.d.ts.map +0 -1
@@ -1,207 +0,0 @@
1
- import { ConnectionPositionPair } from '@angular/cdk/overlay';
2
- import { Component, HostListener, Input, ViewChild } from '@angular/core';
3
- import { HtmlTemplatesHelper } from '../../shared/util/helpers/html-templates.helper';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../toolbar-event.service";
6
- import * as i2 from "../toolbar-button-visibility.service";
7
- import * as i3 from "../../../lib/shared/util/services/number.helper.service";
8
- import * as i4 from "../icp-event.service";
9
- import * as i5 from "@angular/common";
10
- import * as i6 from "@angular/forms";
11
- import * as i7 from "@angular/cdk/overlay";
12
- import * as i8 from "../search-bar/search-bar.component";
13
- import * as i9 from "../../shared/directives/tooltip-dismiss.directive";
14
- import * as i10 from "rpx-xui-translation";
15
- export class MainToolbarComponent {
16
- constructor(toolbarEvents, toolbarButtons, cdr, numberHelper, icpEventService) {
17
- this.toolbarEvents = toolbarEvents;
18
- this.toolbarButtons = toolbarButtons;
19
- this.cdr = cdr;
20
- this.numberHelper = numberHelper;
21
- this.icpEventService = icpEventService;
22
- this.enableAnnotations = false;
23
- this.enableRedactions = false;
24
- this.enableICP = false;
25
- this.contentType = null;
26
- this.subscriptions = [];
27
- this.icpEnabled = false;
28
- this.redactionEnabled = false;
29
- this.pageNumber = 1;
30
- this.pageCount = 0;
31
- this.isDropdownMenuOpen = false;
32
- this.isBookmarksOpen = false;
33
- this.isIndexOpen = false;
34
- this.isRedactOpen = false;
35
- this.isCommentsOpen = false;
36
- this.dropdownMenuPositions = [
37
- new ConnectionPositionPair({
38
- originX: 'end',
39
- originY: 'bottom'
40
- }, {
41
- overlayX: 'end',
42
- overlayY: 'top'
43
- }, 0, 3)
44
- ];
45
- this.zoomScales = [0.1, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 2.5, 3, 5];
46
- this.allButtonsWidth = 0;
47
- this.widthRequiredForBtn = {};
48
- }
49
- ngOnInit() {
50
- this.subscriptions.push(this.toolbarEvents.setCurrentPageSubject.subscribe(pageNumber => this.setCurrentPage(pageNumber)), this.toolbarEvents.setCurrentPageInputValueSubject.subscribe(pageNumber => this.pageNumber = pageNumber), this.toolbarEvents.getPageCount().subscribe(count => this.pageCount = count), this.icpEventService.enabled.subscribe(enabled => {
51
- this.icpEnabled = enabled;
52
- if (this.icpEnabled) {
53
- this.toolbarEvents.toggleCommentsPanel(!enabled);
54
- this.toolbarEvents.sidebarOpen.next(false);
55
- }
56
- }), this.toolbarEvents.redactionMode.subscribe(enabled => {
57
- this.redactionEnabled = enabled;
58
- }), this.toolbarEvents.redactAllInProgressSubject.subscribe(disable => {
59
- this.redactAllInProgress = disable;
60
- }));
61
- }
62
- ngOnDestroy() {
63
- for (const subscription of this.subscriptions) {
64
- subscription.unsubscribe();
65
- }
66
- }
67
- ngAfterViewInit() {
68
- Array.from(this.mvToolbarMain.nativeElement.children).forEach((button) => {
69
- this.allButtonsWidth += HtmlTemplatesHelper.getAdjustedBoundingRect(button).width;
70
- this.widthRequiredForBtn[button.id] = this.allButtonsWidth;
71
- });
72
- this.cdr.detectChanges();
73
- }
74
- onResize() {
75
- this.cdr.detectChanges();
76
- }
77
- onControlPrint(event) {
78
- event.preventDefault();
79
- this.printFile();
80
- }
81
- onClickHighlightToggle() {
82
- this.toolbarEvents.toggleHighlightToolbar();
83
- }
84
- onClickDrawToggle() {
85
- this.toolbarEvents.toggleDrawMode();
86
- }
87
- toggleIndexSideBar() {
88
- const sidebarOpen = this.toolbarEvents.sidebarOpen.getValue();
89
- const sidebarView = this.toolbarEvents.sidebarOutlineView.getValue();
90
- if (!(sidebarOpen && !sidebarView)) {
91
- this.toolbarEvents.toggleSideBar(!sidebarOpen);
92
- }
93
- this.toolbarEvents.toggleSideBarView(true);
94
- this.isIndexOpen = !this.isIndexOpen;
95
- }
96
- onToolBarOffSetChange(buttonId) {
97
- if (this.mvToolbarMain && this.mvToolbarMain.nativeElement.offsetWidth < this.widthRequiredForBtn[buttonId]) {
98
- return "button-hidden-on-toolbar";
99
- }
100
- return "button-hidden-on-dropdown";
101
- }
102
- toggleBookmarksSideBar() {
103
- const sidebarOpen = this.toolbarEvents.sidebarOpen.getValue();
104
- const sidebarView = this.toolbarEvents.sidebarOutlineView.getValue();
105
- if (!(sidebarOpen && sidebarView)) {
106
- this.toolbarEvents.toggleSideBar(!sidebarOpen);
107
- }
108
- this.toolbarEvents.toggleSideBarView(false);
109
- this.isBookmarksOpen = !this.isBookmarksOpen;
110
- }
111
- togglePresentBar() {
112
- this.toolbarEvents.searchBarHidden.next(true);
113
- this.icpEventService.enable();
114
- }
115
- increasePageNumber() {
116
- this.toolbarEvents.incrementPage(1);
117
- }
118
- decreasePageNumber() {
119
- this.toolbarEvents.incrementPage(-1);
120
- }
121
- onPageNumberInputChange(pageNumber) {
122
- if (Number(pageNumber) < 1) {
123
- pageNumber = '1';
124
- }
125
- if (Number(pageNumber) > this.pageCount) {
126
- pageNumber = this.pageCount.toString();
127
- }
128
- this.toolbarEvents.setPage(Number.parseInt(pageNumber, 10));
129
- }
130
- setCurrentPage(pageNumber) {
131
- this.pageNumber = pageNumber;
132
- }
133
- rotate(rotation) {
134
- this.toolbarEvents.rotate(rotation);
135
- }
136
- printFile() {
137
- this.toolbarEvents.print();
138
- }
139
- downloadFile() {
140
- this.toolbarEvents.download();
141
- }
142
- zoom(zoomFactor) {
143
- this.toolbarEvents.zoom(+zoomFactor);
144
- }
145
- stepZoom(zoomFactor) {
146
- this.toolbarEvents.stepZoom(zoomFactor);
147
- this.zoomSelect.nativeElement.selected = 'selected';
148
- }
149
- toggleCommentsPanel() {
150
- this.toolbarEvents.toggleCommentsPanel(!this.toolbarEvents.commentsPanelVisible.getValue());
151
- this.isCommentsOpen = !this.isCommentsOpen;
152
- }
153
- toggleRedactBar() {
154
- this.toolbarEvents.toggleRedactionMode();
155
- this.isRedactOpen = !this.isRedactOpen;
156
- }
157
- toggleGrabNDrag() {
158
- this.toolbarEvents.toggleGrabNDrag();
159
- }
160
- isPdf() {
161
- return this.contentType === 'pdf';
162
- }
163
- toggleSearchBar() {
164
- this.toolbarEvents.searchBarHidden.next(!this.toolbarEvents.searchBarHidden.getValue());
165
- }
166
- toggleMoreOptions() {
167
- this.isDropdownMenuOpen = !this.isDropdownMenuOpen;
168
- setTimeout(() => {
169
- if (this.mvMenuItems) {
170
- this.mvMenuItems.nativeElement.focus();
171
- }
172
- }, 100);
173
- }
174
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MainToolbarComponent, deps: [{ token: i1.ToolbarEventService }, { token: i2.ToolbarButtonVisibilityService }, { token: i0.ChangeDetectorRef }, { token: i3.NumberHelperService }, { token: i4.IcpEventService }], target: i0.ɵɵFactoryTarget.Component }); }
175
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MainToolbarComponent, selector: "mv-main-toolbar", inputs: { enableAnnotations: "enableAnnotations", enableRedactions: "enableRedactions", enableICP: "enableICP", contentType: "contentType" }, host: { listeners: { "window:resize": "onResize()", "document:keydown.control.p": "onControlPrint($event)", "document:keydown.meta.p": "onControlPrint($event)" } }, viewQueries: [{ propertyName: "zoomSelect", first: true, predicate: ["zoomSelect"], descendants: true }, { propertyName: "mvToolbarMain", first: true, predicate: ["mvToolbarMain"], descendants: true }, { propertyName: "mvMenuItems", first: true, predicate: ["dropdownMenu"], descendants: true }], ngImport: i0, template: "<div class=\"toolbar\">\n <div id=\"toolbarContainer\">\n <div class=\"mv-toolbar__container\">\n <div #mvToolbar class=\"mv-toolbar\" [class.notSupported]=\"!contentType\">\n <!-- The mvToolbarMain div contains all toolbar buttons except the \"More options\" button. This allows for calculation of the available space to display buttons -->\n <div id=\"mvToolbarMain\" class=\"mv-toolbar-main\" #mvToolbarMain>\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n <!-- The mvToolbarMoreOptions div contains the \"More options\" toolbar button (and the overlay template for the dropdown menu).\n The space occupied by the button (if visible) is excluded from the toolbar space available calculation -->\n <div id=\"mvToolbarMoreOptions\" class=\"mv-toolbar-more-options\">\n <button\n id=\"mvMoreOptionsBtn\"\n class=\"mv-button mv-toolbar__menu-button--more-options mv-tooltip\"\n [class.mv-toolbar__menu-button--more-options__hidden]=\"\n mvToolbar.offsetWidth >= allButtonsWidth\n \"\n [attr.aria-expanded]=\"isDropdownMenuOpen\"\n [attr.data-tooltip]=\"'More options' | rpxTranslate\"\n (click)=\"toggleMoreOptions()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"redactAllInProgress\"\n >\n <span>{{ \"More options\" | rpxTranslate }}</span>\n </button>\n <!-- This template displays the overlay content for the dropdown menu and is connected to the \"More options\" button -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownMenuOpen\"\n [cdkConnectedOverlayPositions]=\"dropdownMenuPositions\"\n >\n <div class=\"dropdown-menu\" #dropdownMenu tabindex=\"0\">\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n </ng-template>\n </div>\n </div>\n <div id=\"mvMenuItems\" #mvMenuItems>\n <ng-template #menuItems>\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvIndexBtn\"\n data-l10n-id=\"index\"\n [attr.data-tooltip]=\"'Index' | rpxTranslate\"\n #mvIndexBtn\n class=\"mv-button mv-toolbar__menu-button--index mv-tooltip\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvIndexBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvIndexBtn']\n \"\n [attr.aria-expanded]=\"isIndexOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleIndexSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Index\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvBookmarksBtn\"\n data-l10n-id=\"bookmarks\"\n [attr.data-tooltip]=\"'Bookmarks' | rpxTranslate\"\n #mvBookmarksBtn\n [ngClass]=\"{\n 'mv-button mv-tooltip mv-toolbar__menu-button--bookmarks': true,\n 'button-hidden-on-toolbar':\n mvToolbarMain.offsetWidth <\n widthRequiredForBtn['mvBookmarksBtn'],\n 'button-hidden-on-dropdown':\n mvToolbarMain.offsetWidth >=\n widthRequiredForBtn['mvBookmarksBtn']\n }\"\n [attr.aria-expanded]=\"isBookmarksOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleBookmarksSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Bookmarks\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDrawButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw mv-tooltip\"\n [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDrawBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDrawBtn']\n \"\n [class.toggled]=\"toolbarEvents.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"toggleDrawButton\"\n (click)=\"onClickDrawToggle(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"draw_label\">{{\n \"Draw a box\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showHighlightButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvHighlightBtn\"\n #mvHighlightBtn\n class=\"mv-button mv-toolbar__menu-button--highlight mv-tooltip\"\n [attr.data-tooltip]=\"'Highlight' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.toggled]=\"toolbarEvents.highlightToolbarSubject | async\"\n aria-pressed=\"false\"\n (click)=\"onClickHighlightToggle(); isDropdownMenuOpen = false\"\n data-l10n-id=\"toggleHighlightButton\"\n >\n <span data-l10n-id=\"highlight_label\">{{\n \"Highlight\" | rpxTranslate\n }}</span>\n </button>\n\n <ng-container *ngIf=\"toolbarButtons.showNavigation\">\n <div\n id=\"mvPageBtn\"\n #mvPageBtn\n class=\"mv-toolbar__menu-button--page\"\n [attr.data-tooltip]=\"'Page' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPageBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPageBtn']\n \"\n >\n <span>{{ \"Page\" | rpxTranslate }}</span>\n\n <button\n id=\"mvUpBtn\"\n [disabled]=\"pageNumber === 1 || redactAllInProgress\"\n [attr.data-tooltip]=\"'Previous page' | rpxTranslate\"\n [attr.aria-label]=\"'Previous page' | rpxTranslate\"\n class=\"mv-toolbar__menu-button--up button-image mv-tooltip\"\n data-l10n-id=\"previous\"\n (click)=\"decreasePageNumber()\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvDownBtn\"\n [disabled]=\"pageNumber === pageCount || redactAllInProgress\"\n [attr.data-tooltip]=\"'Next page' | rpxTranslate\"\n [attr.aria-label]=\"'Next page' | rpxTranslate\"\n class=\"mv-toolbar__menu-button--down button-image mv-tooltip\"\n data-l10n-id=\"next\"\n (click)=\"increasePageNumber()\"\n >\n <span></span>\n </button>\n\n <span class=\"mv-tooltip\" [attr.data-tooltip]=\"'Page number' | rpxTranslate\">\n <input\n type=\"number\"\n id=\"pageNumber\"\n class=\"hmcts-toolbar-input govuk-input--width-2\"\n [attr.aria-label]=\"'Page number' | rpxTranslate\"\n value=\"1\"\n size=\"4\"\n min=\"1\"\n [value]=\"pageNumber\"\n tabindex=\"0\"\n data-l10n-id=\"page\"\n (change)=\"onPageNumberInputChange(pageNumberInput.value)\"\n [disabled]=\"redactAllInProgress\"\n #pageNumberInput\n />\n </span>\n <span id=\"numPages\" class=\"toolbarLabel\">/ {{ pageCount }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"toolbarButtons.showZoom\">\n <div\n id=\"mvZoomBtn\"\n #mvZoomBtn\n class=\"mv-toolbar__menu-button--zoom\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvZoomBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvZoomBtn']\n \"\n >\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 0.1 ||\n redactAllInProgress\n \"\n id=\"mvMinusBtn\"\n class=\"mv-toolbar__menu-button--zoom-out button-image mv-tooltip\"\n [attr.data-tooltip]=\"'Zoom out' | rpxTranslate\"\n data-l10n-id=\"zoom_out\"\n (click)=\"stepZoom(-0.1)\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom Out\" | rpxTranslate\n }}</span>\n </button>\n <span class=\"mv-tooltip\" [attr.data-tooltip]=\"'Zoom' | rpxTranslate\"> \n <select\n id=\"scaleSelect\"\n class=\"hmcts-toolbar-select\"\n data-l10n-id=\"zoom\"\n (change)=\"zoom($event.target.value)\"\n tabindex=\"0\"\n [disabled]=\"redactAllInProgress\"\n >\n <option\n #zoomSelect\n id=\"customScaleOption\"\n title=\"\"\n [value]=\"toolbarEvents.zoomValueSubject.value\"\n >\n {{\n toolbarEvents.zoomValueSubject.value * 100\n | number : \"1.0-0\"\n }}%\n </option>\n <option\n *ngFor=\"let zoomScale of zoomScales\"\n title=\"\"\n [value]=\"zoomScale\"\n [attr.data-l10n-id]=\"'page_scale_percent_' + zoomScale * 100\"\n >\n {{ zoomScale * 100 }}%\n </option>\n </select>\n </span>\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 5 ||\n redactAllInProgress\n \"\n id=\"mvPlusBtn\"\n class=\"mv-toolbar__menu-button--zoom-in button-image mv-tooltip\"\n (click)=\"stepZoom(0.1)\"\n [attr.data-tooltip]=\"'Zoom in' | rpxTranslate\"\n data-l10n-id=\"zoom_in\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom In\" | rpxTranslate\n }}</span>\n </button>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"toolbarButtons.showRotate\"\n id=\"mvRotateBtn\"\n #mvRotateBtn\n class=\"mv-toolbar__menu-button--rotate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRotateBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRotateBtn']\n \"\n >\n <button\n id=\"mvRotateLeftBtn\"\n class=\"mv-toolbar__menu-button--rotate_left button-image mv-tooltip\"\n [attr.aria-label]=\"'Rotate counterclockwise' | rpxTranslate\"\n [attr.data-tooltip]=\"'Rotate counterclockwise' | rpxTranslate\"\n data-l10n-id=\"page_rotate_ccw\"\n (click)=\"rotate(270)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvRotateRightBtn\"\n class=\"mv-toolbar__menu-button--rotate_right button-image mv-tooltip\"\n [attr.aria-label]=\"'Rotate clockwise' | rpxTranslate\"\n [attr.data-tooltip]=\"'Rotate clockwise' | rpxTranslate\"\n data-l10n-id=\"page_rotate_cw\"\n (click)=\"rotate(90)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <span>{{ \"Rotate\" | rpxTranslate }}</span>\n </div>\n\n <button\n *ngIf=\"toolbarButtons.showSearchBar\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvSearchBtn\"\n #mvSearchBtn\n [attr.data-tooltip]=\"'Search' | rpxTranslate\"\n data-l10n-id=\"searchbar\"\n class=\"mv-button mv-toolbar__menu-button--search mv-tooltip\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvSearchBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvSearchBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleSearchBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Search\" | rpxTranslate }}</span>\n </button>\n <mv-search-bar\n *ngIf=\"!toolbarEvents.searchBarHidden.getValue()\"\n ></mv-search-bar>\n\n <button\n *ngIf=\"enableICP && toolbarButtons.showPresentationMode && isPdf()\"\n [disabled]=\"icpEnabled || !contentType || redactionEnabled\"\n id=\"mvPresentBtn\"\n #mvPresentBtn\n class=\"mv-button mv-toolbar__menu-button--present mv-tooltip\"\n [attr.data-tooltip]=\"'In-Court presentation mode' | rpxTranslate\"\n data-l10n-id=\"icpMode_label\"\n [ngClass]=\"onToolBarOffSetChange('mvPresentBtn')\"\n aria-pressed=\"false\"\n (click)=\"togglePresentBar(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"icpMode_label\">{{\n \"Present\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"enableRedactions && toolbarButtons.showRedact\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvRedactBtn\"\n #mvRedactBtn\n [attr.data-tooltip]=\"'Redact' | rpxTranslate\"\n data-l10n-id=\"redact\"\n class=\"mv-button mv-toolbar__menu-button--redact mv-tooltip\"\n [ngClass]=\"onToolBarOffSetChange('mvRedactBtn')\"\n [attr.aria-expanded]=\"isRedactOpen\"\n (click)=\"toggleRedactBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Redact\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showGrabNDragButton\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvGrabBtn\"\n #mvGrabBtn\n class=\"mv-button mv-toolbar__menu-button--grab mv-tooltip\"\n data-tooltip=\"Grab and drag\"\n [ngClass]=\"onToolBarOffSetChange('mvGrabBtn')\"\n aria-pressed=\"false\"\n (click)=\"toggleGrabNDrag(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Grab and drag\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDownload\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDownloadBtn\"\n #mvDownloadBtn\n class=\"mv-button mv-toolbar__menu-button--download mv-tooltip\"\n [attr.data-tooltip]=\"'Download' | rpxTranslate\"\n data-l10n-id=\"download\"\n [ngClass]=\"onToolBarOffSetChange('mvDownloadBtn')\"\n aria-pressed=\"false\"\n (click)=\"downloadFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Download\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showPrint\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvPrintBtn\"\n #mvPrintBtn\n data-l10n-id=\"print\"\n aria-label=\"Print\"\n [attr.data-tooltip]=\"'Print' | rpxTranslate\"\n data-l10n-id=\"print\"\n class=\"mv-button mv-toolbar__menu-button--print mv-tooltip\"\n [ngClass]=\"onToolBarOffSetChange('mvPrintBtn')\"\n aria-pressed=\"false\"\n (click)=\"printFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Print\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"enableAnnotations && toolbarButtons.showCommentSummary\"\n [disabled]=\"redactionEnabled\"\n id=\"mvCommentsBtn\"\n #mvCommentsBtn\n class=\"mv-button mv-toolbar__menu-button--comments mv-tooltip\"\n [attr.data-tooltip]=\"'Comments' | rpxTranslate\"\n data-l10n-id=\"comments\"\n [ngClass]=\"onToolBarOffSetChange('mvCommentsBtn')\"\n [attr.aria-expanded]=\"isCommentsOpen\"\n (click)=\"toggleCommentsPanel(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Comments\" | rpxTranslate }}</span>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i7.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i8.SearchBarComponent, selector: "mv-search-bar" }, { kind: "directive", type: i9.TooltipDismissDirective, selector: ".mv-tooltip, [mvTooltipDismiss]" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.DecimalPipe, name: "number" }, { kind: "pipe", type: i10.RpxTranslatePipe, name: "rpxTranslate" }] }); }
176
- }
177
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MainToolbarComponent, decorators: [{
178
- type: Component,
179
- args: [{ selector: 'mv-main-toolbar', template: "<div class=\"toolbar\">\n <div id=\"toolbarContainer\">\n <div class=\"mv-toolbar__container\">\n <div #mvToolbar class=\"mv-toolbar\" [class.notSupported]=\"!contentType\">\n <!-- The mvToolbarMain div contains all toolbar buttons except the \"More options\" button. This allows for calculation of the available space to display buttons -->\n <div id=\"mvToolbarMain\" class=\"mv-toolbar-main\" #mvToolbarMain>\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n <!-- The mvToolbarMoreOptions div contains the \"More options\" toolbar button (and the overlay template for the dropdown menu).\n The space occupied by the button (if visible) is excluded from the toolbar space available calculation -->\n <div id=\"mvToolbarMoreOptions\" class=\"mv-toolbar-more-options\">\n <button\n id=\"mvMoreOptionsBtn\"\n class=\"mv-button mv-toolbar__menu-button--more-options mv-tooltip\"\n [class.mv-toolbar__menu-button--more-options__hidden]=\"\n mvToolbar.offsetWidth >= allButtonsWidth\n \"\n [attr.aria-expanded]=\"isDropdownMenuOpen\"\n [attr.data-tooltip]=\"'More options' | rpxTranslate\"\n (click)=\"toggleMoreOptions()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"redactAllInProgress\"\n >\n <span>{{ \"More options\" | rpxTranslate }}</span>\n </button>\n <!-- This template displays the overlay content for the dropdown menu and is connected to the \"More options\" button -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownMenuOpen\"\n [cdkConnectedOverlayPositions]=\"dropdownMenuPositions\"\n >\n <div class=\"dropdown-menu\" #dropdownMenu tabindex=\"0\">\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n </ng-template>\n </div>\n </div>\n <div id=\"mvMenuItems\" #mvMenuItems>\n <ng-template #menuItems>\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvIndexBtn\"\n data-l10n-id=\"index\"\n [attr.data-tooltip]=\"'Index' | rpxTranslate\"\n #mvIndexBtn\n class=\"mv-button mv-toolbar__menu-button--index mv-tooltip\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvIndexBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvIndexBtn']\n \"\n [attr.aria-expanded]=\"isIndexOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleIndexSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Index\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvBookmarksBtn\"\n data-l10n-id=\"bookmarks\"\n [attr.data-tooltip]=\"'Bookmarks' | rpxTranslate\"\n #mvBookmarksBtn\n [ngClass]=\"{\n 'mv-button mv-tooltip mv-toolbar__menu-button--bookmarks': true,\n 'button-hidden-on-toolbar':\n mvToolbarMain.offsetWidth <\n widthRequiredForBtn['mvBookmarksBtn'],\n 'button-hidden-on-dropdown':\n mvToolbarMain.offsetWidth >=\n widthRequiredForBtn['mvBookmarksBtn']\n }\"\n [attr.aria-expanded]=\"isBookmarksOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleBookmarksSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Bookmarks\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDrawButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw mv-tooltip\"\n [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDrawBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDrawBtn']\n \"\n [class.toggled]=\"toolbarEvents.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"toggleDrawButton\"\n (click)=\"onClickDrawToggle(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"draw_label\">{{\n \"Draw a box\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showHighlightButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvHighlightBtn\"\n #mvHighlightBtn\n class=\"mv-button mv-toolbar__menu-button--highlight mv-tooltip\"\n [attr.data-tooltip]=\"'Highlight' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.toggled]=\"toolbarEvents.highlightToolbarSubject | async\"\n aria-pressed=\"false\"\n (click)=\"onClickHighlightToggle(); isDropdownMenuOpen = false\"\n data-l10n-id=\"toggleHighlightButton\"\n >\n <span data-l10n-id=\"highlight_label\">{{\n \"Highlight\" | rpxTranslate\n }}</span>\n </button>\n\n <ng-container *ngIf=\"toolbarButtons.showNavigation\">\n <div\n id=\"mvPageBtn\"\n #mvPageBtn\n class=\"mv-toolbar__menu-button--page\"\n [attr.data-tooltip]=\"'Page' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPageBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPageBtn']\n \"\n >\n <span>{{ \"Page\" | rpxTranslate }}</span>\n\n <button\n id=\"mvUpBtn\"\n [disabled]=\"pageNumber === 1 || redactAllInProgress\"\n [attr.data-tooltip]=\"'Previous page' | rpxTranslate\"\n [attr.aria-label]=\"'Previous page' | rpxTranslate\"\n class=\"mv-toolbar__menu-button--up button-image mv-tooltip\"\n data-l10n-id=\"previous\"\n (click)=\"decreasePageNumber()\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvDownBtn\"\n [disabled]=\"pageNumber === pageCount || redactAllInProgress\"\n [attr.data-tooltip]=\"'Next page' | rpxTranslate\"\n [attr.aria-label]=\"'Next page' | rpxTranslate\"\n class=\"mv-toolbar__menu-button--down button-image mv-tooltip\"\n data-l10n-id=\"next\"\n (click)=\"increasePageNumber()\"\n >\n <span></span>\n </button>\n\n <span class=\"mv-tooltip\" [attr.data-tooltip]=\"'Page number' | rpxTranslate\">\n <input\n type=\"number\"\n id=\"pageNumber\"\n class=\"hmcts-toolbar-input govuk-input--width-2\"\n [attr.aria-label]=\"'Page number' | rpxTranslate\"\n value=\"1\"\n size=\"4\"\n min=\"1\"\n [value]=\"pageNumber\"\n tabindex=\"0\"\n data-l10n-id=\"page\"\n (change)=\"onPageNumberInputChange(pageNumberInput.value)\"\n [disabled]=\"redactAllInProgress\"\n #pageNumberInput\n />\n </span>\n <span id=\"numPages\" class=\"toolbarLabel\">/ {{ pageCount }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"toolbarButtons.showZoom\">\n <div\n id=\"mvZoomBtn\"\n #mvZoomBtn\n class=\"mv-toolbar__menu-button--zoom\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvZoomBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvZoomBtn']\n \"\n >\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 0.1 ||\n redactAllInProgress\n \"\n id=\"mvMinusBtn\"\n class=\"mv-toolbar__menu-button--zoom-out button-image mv-tooltip\"\n [attr.data-tooltip]=\"'Zoom out' | rpxTranslate\"\n data-l10n-id=\"zoom_out\"\n (click)=\"stepZoom(-0.1)\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom Out\" | rpxTranslate\n }}</span>\n </button>\n <span class=\"mv-tooltip\" [attr.data-tooltip]=\"'Zoom' | rpxTranslate\"> \n <select\n id=\"scaleSelect\"\n class=\"hmcts-toolbar-select\"\n data-l10n-id=\"zoom\"\n (change)=\"zoom($event.target.value)\"\n tabindex=\"0\"\n [disabled]=\"redactAllInProgress\"\n >\n <option\n #zoomSelect\n id=\"customScaleOption\"\n title=\"\"\n [value]=\"toolbarEvents.zoomValueSubject.value\"\n >\n {{\n toolbarEvents.zoomValueSubject.value * 100\n | number : \"1.0-0\"\n }}%\n </option>\n <option\n *ngFor=\"let zoomScale of zoomScales\"\n title=\"\"\n [value]=\"zoomScale\"\n [attr.data-l10n-id]=\"'page_scale_percent_' + zoomScale * 100\"\n >\n {{ zoomScale * 100 }}%\n </option>\n </select>\n </span>\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 5 ||\n redactAllInProgress\n \"\n id=\"mvPlusBtn\"\n class=\"mv-toolbar__menu-button--zoom-in button-image mv-tooltip\"\n (click)=\"stepZoom(0.1)\"\n [attr.data-tooltip]=\"'Zoom in' | rpxTranslate\"\n data-l10n-id=\"zoom_in\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom In\" | rpxTranslate\n }}</span>\n </button>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"toolbarButtons.showRotate\"\n id=\"mvRotateBtn\"\n #mvRotateBtn\n class=\"mv-toolbar__menu-button--rotate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRotateBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRotateBtn']\n \"\n >\n <button\n id=\"mvRotateLeftBtn\"\n class=\"mv-toolbar__menu-button--rotate_left button-image mv-tooltip\"\n [attr.aria-label]=\"'Rotate counterclockwise' | rpxTranslate\"\n [attr.data-tooltip]=\"'Rotate counterclockwise' | rpxTranslate\"\n data-l10n-id=\"page_rotate_ccw\"\n (click)=\"rotate(270)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvRotateRightBtn\"\n class=\"mv-toolbar__menu-button--rotate_right button-image mv-tooltip\"\n [attr.aria-label]=\"'Rotate clockwise' | rpxTranslate\"\n [attr.data-tooltip]=\"'Rotate clockwise' | rpxTranslate\"\n data-l10n-id=\"page_rotate_cw\"\n (click)=\"rotate(90)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <span>{{ \"Rotate\" | rpxTranslate }}</span>\n </div>\n\n <button\n *ngIf=\"toolbarButtons.showSearchBar\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvSearchBtn\"\n #mvSearchBtn\n [attr.data-tooltip]=\"'Search' | rpxTranslate\"\n data-l10n-id=\"searchbar\"\n class=\"mv-button mv-toolbar__menu-button--search mv-tooltip\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvSearchBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvSearchBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleSearchBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Search\" | rpxTranslate }}</span>\n </button>\n <mv-search-bar\n *ngIf=\"!toolbarEvents.searchBarHidden.getValue()\"\n ></mv-search-bar>\n\n <button\n *ngIf=\"enableICP && toolbarButtons.showPresentationMode && isPdf()\"\n [disabled]=\"icpEnabled || !contentType || redactionEnabled\"\n id=\"mvPresentBtn\"\n #mvPresentBtn\n class=\"mv-button mv-toolbar__menu-button--present mv-tooltip\"\n [attr.data-tooltip]=\"'In-Court presentation mode' | rpxTranslate\"\n data-l10n-id=\"icpMode_label\"\n [ngClass]=\"onToolBarOffSetChange('mvPresentBtn')\"\n aria-pressed=\"false\"\n (click)=\"togglePresentBar(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"icpMode_label\">{{\n \"Present\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"enableRedactions && toolbarButtons.showRedact\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvRedactBtn\"\n #mvRedactBtn\n [attr.data-tooltip]=\"'Redact' | rpxTranslate\"\n data-l10n-id=\"redact\"\n class=\"mv-button mv-toolbar__menu-button--redact mv-tooltip\"\n [ngClass]=\"onToolBarOffSetChange('mvRedactBtn')\"\n [attr.aria-expanded]=\"isRedactOpen\"\n (click)=\"toggleRedactBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Redact\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showGrabNDragButton\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvGrabBtn\"\n #mvGrabBtn\n class=\"mv-button mv-toolbar__menu-button--grab mv-tooltip\"\n data-tooltip=\"Grab and drag\"\n [ngClass]=\"onToolBarOffSetChange('mvGrabBtn')\"\n aria-pressed=\"false\"\n (click)=\"toggleGrabNDrag(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Grab and drag\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDownload\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDownloadBtn\"\n #mvDownloadBtn\n class=\"mv-button mv-toolbar__menu-button--download mv-tooltip\"\n [attr.data-tooltip]=\"'Download' | rpxTranslate\"\n data-l10n-id=\"download\"\n [ngClass]=\"onToolBarOffSetChange('mvDownloadBtn')\"\n aria-pressed=\"false\"\n (click)=\"downloadFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Download\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showPrint\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvPrintBtn\"\n #mvPrintBtn\n data-l10n-id=\"print\"\n aria-label=\"Print\"\n [attr.data-tooltip]=\"'Print' | rpxTranslate\"\n data-l10n-id=\"print\"\n class=\"mv-button mv-toolbar__menu-button--print mv-tooltip\"\n [ngClass]=\"onToolBarOffSetChange('mvPrintBtn')\"\n aria-pressed=\"false\"\n (click)=\"printFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Print\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"enableAnnotations && toolbarButtons.showCommentSummary\"\n [disabled]=\"redactionEnabled\"\n id=\"mvCommentsBtn\"\n #mvCommentsBtn\n class=\"mv-button mv-toolbar__menu-button--comments mv-tooltip\"\n [attr.data-tooltip]=\"'Comments' | rpxTranslate\"\n data-l10n-id=\"comments\"\n [ngClass]=\"onToolBarOffSetChange('mvCommentsBtn')\"\n [attr.aria-expanded]=\"isCommentsOpen\"\n (click)=\"toggleCommentsPanel(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Comments\" | rpxTranslate }}</span>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n" }]
180
- }], ctorParameters: () => [{ type: i1.ToolbarEventService }, { type: i2.ToolbarButtonVisibilityService }, { type: i0.ChangeDetectorRef }, { type: i3.NumberHelperService }, { type: i4.IcpEventService }], propDecorators: { enableAnnotations: [{
181
- type: Input
182
- }], enableRedactions: [{
183
- type: Input
184
- }], enableICP: [{
185
- type: Input
186
- }], contentType: [{
187
- type: Input
188
- }], zoomSelect: [{
189
- type: ViewChild,
190
- args: ['zoomSelect', { static: false }]
191
- }], mvToolbarMain: [{
192
- type: ViewChild,
193
- args: ['mvToolbarMain', { static: false }]
194
- }], mvMenuItems: [{
195
- type: ViewChild,
196
- args: ['dropdownMenu', { static: false }]
197
- }], onResize: [{
198
- type: HostListener,
199
- args: ['window:resize', []]
200
- }], onControlPrint: [{
201
- type: HostListener,
202
- args: ['document:keydown.control.p', ['$event']]
203
- }, {
204
- type: HostListener,
205
- args: ['document:keydown.meta.p', ['$event']]
206
- }] } });
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3Rvb2xiYXIvbWFpbi10b29sYmFyL21haW4tdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL21haW4tdG9vbGJhci9tYWluLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQU12QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7Ozs7Ozs7O0FBTXRGLE1BQU0sT0FBTyxvQkFBb0I7SUE0Qy9CLFlBQ2tCLGFBQWtDLEVBQ2xDLGNBQThDLEVBQzdDLEdBQXNCLEVBQ3RCLFlBQWlDLEVBQ2pDLGVBQWdDO1FBSmpDLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUNsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0M7UUFDN0MsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQS9DMUMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBTVgsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBRTdDLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBSXpCLGVBQVUsR0FB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TzFCLGNBQWM7c0JBRnBCLFlBQVk7dUJBQUMsNEJBQTRCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUNyRCxZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGlvblBvc2l0aW9uUGFpciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRvb2xiYXJFdmVudFNlcnZpY2UgfSBmcm9tICcuLi90b29sYmFyLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9vbGJhckJ1dHRvblZpc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vdG9vbGJhci1idXR0b24tdmlzaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IE51bWJlckhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9saWIvc2hhcmVkL3V0aWwvc2VydmljZXMvbnVtYmVyLmhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IEljcEV2ZW50U2VydmljZSB9IGZyb20gJy4uL2ljcC1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEh0bWxUZW1wbGF0ZXNIZWxwZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbC9oZWxwZXJzL2h0bWwtdGVtcGxhdGVzLmhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ212LW1haW4tdG9vbGJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYWluLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1haW5Ub29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gIEBJbnB1dCgpIGVuYWJsZUFubm90YXRpb25zID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVJlZGFjdGlvbnMgPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlSUNQID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbnRlbnRUeXBlID0gbnVsbDtcblxuICBAVmlld0NoaWxkKCd6b29tU2VsZWN0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyB6b29tU2VsZWN0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtdlRvb2xiYXJNYWluJywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBtdlRvb2xiYXJNYWluOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25NZW51JywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBtdk1lbnVJdGVtczogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHB1YmxpYyBpY3BFbmFibGVkID0gZmFsc2U7XG4gIHB1YmxpYyByZWRhY3Rpb25FbmFibGVkID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93Q29tbWVudHNQYW5lbDogYm9vbGVhbjtcbiAgcHVibGljIHJlZGFjdEFsbEluUHJvZ3Jlc3M6IGJvb2xlYW47XG5cbiAgcHVibGljIHBhZ2VOdW1iZXIgPSAxO1xuICBwdWJsaWMgcGFnZUNvdW50ID0gMDtcbiAgcHVibGljIGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlO1xuICBwdWJsaWMgaXNCb29rbWFya3NPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBpc0luZGV4T3BlbiA9IGZhbHNlO1xuICBwdWJsaWMgaXNSZWRhY3RPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBpc0NvbW1lbnRzT3BlbiA9IGZhbHNlO1xuICBwdWJsaWMgZHJvcGRvd25NZW51UG9zaXRpb25zID0gW1xuICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxuICAgICAge1xuICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIDMpXG4gIF07XG5cbiAgcHVibGljIHpvb21TY2FsZXMgPSBbMC4xLCAwLjI1LCAwLjUsIDAuNzUsIDEsIDEuMjUsIDEuNSwgMi41LCAzLCA1XTtcblxuICBhbGxCdXR0b25zV2lkdGggPSAwO1xuICB3aWR0aFJlcXVpcmVkRm9yQnRuOiB7IFtpZDogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHRvb2xiYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IHRvb2xiYXJCdXR0b25zOiBUb29sYmFyQnV0dG9uVmlzaWJpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtYmVySGVscGVyOiBOdW1iZXJIZWxwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNwRXZlbnRTZXJ2aWNlOiBJY3BFdmVudFNlcnZpY2VcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2V0Q3VycmVudFBhZ2VTdWJqZWN0LnN1YnNjcmliZShwYWdlTnVtYmVyID0+IHRoaXMuc2V0Q3VycmVudFBhZ2UocGFnZU51bWJlcikpLFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnNldEN1cnJlbnRQYWdlSW5wdXRWYWx1ZVN1YmplY3Quc3Vic2NyaWJlKHBhZ2VOdW1iZXIgPT4gdGhpcy5wYWdlTnVtYmVyID0gcGFnZU51bWJlciksXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMuZ2V0UGFnZUNvdW50KCkuc3Vic2NyaWJlKGNvdW50ID0+IHRoaXMucGFnZUNvdW50ID0gY291bnQpLFxuICAgICAgdGhpcy5pY3BFdmVudFNlcnZpY2UuZW5hYmxlZC5zdWJzY3JpYmUoZW5hYmxlZCA9PiB7XG4gICAgICAgIHRoaXMuaWNwRW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICAgIGlmICh0aGlzLmljcEVuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlQ29tbWVudHNQYW5lbCghZW5hYmxlZCk7XG4gICAgICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnNpZGViYXJPcGVuLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5yZWRhY3Rpb25Nb2RlLnN1YnNjcmliZShlbmFibGVkID0+IHtcbiAgICAgICAgdGhpcy5yZWRhY3Rpb25FbmFibGVkID0gZW5hYmxlZDtcbiAgICAgIH0pLFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnJlZGFjdEFsbEluUHJvZ3Jlc3NTdWJqZWN0LnN1YnNjcmliZShkaXNhYmxlID0+IHtcbiAgICAgICAgdGhpcy5yZWRhY3RBbGxJblByb2dyZXNzID0gZGlzYWJsZTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgdGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIEFycmF5LmZyb20odGhpcy5tdlRvb2xiYXJNYWluLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pLmZvckVhY2goKGJ1dHRvbjogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgIHRoaXMuYWxsQnV0dG9uc1dpZHRoICs9IEh0bWxUZW1wbGF0ZXNIZWxwZXIuZ2V0QWRqdXN0ZWRCb3VuZGluZ1JlY3QoYnV0dG9uKS53aWR0aDtcbiAgICAgIHRoaXMud2lkdGhSZXF1aXJlZEZvckJ0bltidXR0b24uaWRdID0gdGhpcy5hbGxCdXR0b25zV2lkdGg7XG4gICAgfSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFtdKVxuICBwdWJsaWMgb25SZXNpemUoKSB7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5jb250cm9sLnAnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLm1ldGEucCcsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbkNvbnRyb2xQcmludChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcmludEZpbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsaWNrSGlnaGxpZ2h0VG9nZ2xlKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVIaWdobGlnaHRUb29sYmFyKCk7XG4gIH1cbiAgcHVibGljIG9uQ2xpY2tEcmF3VG9nZ2xlKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVEcmF3TW9kZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUluZGV4U2lkZUJhcigpIHtcbiAgICBjb25zdCBzaWRlYmFyT3BlbiA9IHRoaXMudG9vbGJhckV2ZW50cy5zaWRlYmFyT3Blbi5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHNpZGViYXJWaWV3ID0gdGhpcy50b29sYmFyRXZlbnRzLnNpZGViYXJPdXRsaW5lVmlldy5nZXRWYWx1ZSgpO1xuICAgIGlmICghKHNpZGViYXJPcGVuICYmICFzaWRlYmFyVmlldykpIHtcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVTaWRlQmFyKCFzaWRlYmFyT3Blbik7XG4gICAgfVxuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVTaWRlQmFyVmlldyh0cnVlKTtcbiAgICB0aGlzLmlzSW5kZXhPcGVuID0gIXRoaXMuaXNJbmRleE9wZW47XG4gIH1cblxuICBwdWJsaWMgb25Ub29sQmFyT2ZmU2V0Q2hhbmdlKGJ1dHRvbklkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tdlRvb2xiYXJNYWluICYmIHRoaXMubXZUb29sYmFyTWFpbi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgdGhpcy53aWR0aFJlcXVpcmVkRm9yQnRuW2J1dHRvbklkXSkge1xuICAgICAgcmV0dXJuIFwiYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXCI7XG5cbiAgICB9XG4gICAgcmV0dXJuIFwiYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93blwiO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUJvb2ttYXJrc1NpZGVCYXIoKSB7XG4gICAgY29uc3Qgc2lkZWJhck9wZW4gPSB0aGlzLnRvb2xiYXJFdmVudHMuc2lkZWJhck9wZW4uZ2V0VmFsdWUoKTtcbiAgICBjb25zdCBzaWRlYmFyVmlldyA9IHRoaXMudG9vbGJhckV2ZW50cy5zaWRlYmFyT3V0bGluZVZpZXcuZ2V0VmFsdWUoKTtcbiAgICBpZiAoIShzaWRlYmFyT3BlbiAmJiBzaWRlYmFyVmlldykpIHtcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVTaWRlQmFyKCFzaWRlYmFyT3Blbik7XG4gICAgfVxuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVTaWRlQmFyVmlldyhmYWxzZSk7XG4gICAgdGhpcy5pc0Jvb2ttYXJrc09wZW4gPSAhdGhpcy5pc0Jvb2ttYXJrc09wZW47XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlUHJlc2VudEJhcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoQmFySGlkZGVuLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5pY3BFdmVudFNlcnZpY2UuZW5hYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgaW5jcmVhc2VQYWdlTnVtYmVyKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5pbmNyZW1lbnRQYWdlKDEpO1xuICB9XG5cbiAgcHVibGljIGRlY3JlYXNlUGFnZU51bWJlcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuaW5jcmVtZW50UGFnZSgtMSk7XG4gIH1cblxuICBwdWJsaWMgb25QYWdlTnVtYmVySW5wdXRDaGFuZ2UocGFnZU51bWJlcjogc3RyaW5nKSB7XG4gICAgaWYgKE51bWJlcihwYWdlTnVtYmVyKSA8IDEpIHtcbiAgICAgIHBhZ2VOdW1iZXIgPSAnMSc7XG4gICAgfVxuICAgIGlmIChOdW1iZXIocGFnZU51bWJlcikgPiB0aGlzLnBhZ2VDb3VudCkge1xuICAgICAgcGFnZU51bWJlciA9IHRoaXMucGFnZUNvdW50LnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnNldFBhZ2UoTnVtYmVyLnBhcnNlSW50KHBhZ2VOdW1iZXIsIDEwKSk7XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnJlbnRQYWdlKHBhZ2VOdW1iZXI6IG51bWJlcikge1xuICAgIHRoaXMucGFnZU51bWJlciA9IHBhZ2VOdW1iZXI7XG4gIH1cblxuICBwdWJsaWMgcm90YXRlKHJvdGF0aW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMucm90YXRlKHJvdGF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludEZpbGUoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnByaW50KCk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRGaWxlKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5kb3dubG9hZCgpO1xuICB9XG5cbiAgcHVibGljIHpvb20oem9vbUZhY3Rvcjogc3RyaW5nKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnpvb20oK3pvb21GYWN0b3IpO1xuICB9XG5cbiAgcHVibGljIHN0ZXBab29tKHpvb21GYWN0b3I6IG51bWJlcikge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5zdGVwWm9vbSh6b29tRmFjdG9yKTtcbiAgICB0aGlzLnpvb21TZWxlY3QubmF0aXZlRWxlbWVudC5zZWxlY3RlZCA9ICdzZWxlY3RlZCc7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ29tbWVudHNQYW5lbCgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlQ29tbWVudHNQYW5lbCghdGhpcy50b29sYmFyRXZlbnRzLmNvbW1lbnRzUGFuZWxWaXNpYmxlLmdldFZhbHVlKCkpO1xuICAgIHRoaXMuaXNDb21tZW50c09wZW4gPSAhdGhpcy5pc0NvbW1lbnRzT3BlbjtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVSZWRhY3RCYXIoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZVJlZGFjdGlvbk1vZGUoKTtcbiAgICB0aGlzLmlzUmVkYWN0T3BlbiA9ICF0aGlzLmlzUmVkYWN0T3BlbjtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVHcmFiTkRyYWcoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZUdyYWJORHJhZygpO1xuICB9XG5cbiAgcHVibGljIGlzUGRmKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRUeXBlID09PSAncGRmJztcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVTZWFyY2hCYXIoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnNlYXJjaEJhckhpZGRlbi5uZXh0KCF0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoQmFySGlkZGVuLmdldFZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZU1vcmVPcHRpb25zKCkge1xuICAgIHRoaXMuaXNEcm9wZG93bk1lbnVPcGVuID0gIXRoaXMuaXNEcm9wZG93bk1lbnVPcGVuO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubXZNZW51SXRlbXMpIHtcbiAgICAgICAgdGhpcy5tdk1lbnVJdGVtcy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRvb2xiYXJcIj5cbiAgPGRpdiBpZD1cInRvb2xiYXJDb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXYtdG9vbGJhcl9fY29udGFpbmVyXCI+XG4gICAgICA8ZGl2ICNtdlRvb2xiYXIgY2xhc3M9XCJtdi10b29sYmFyXCIgW2NsYXNzLm5vdFN1cHBvcnRlZF09XCIhY29udGVudFR5cGVcIj5cbiAgICAgICAgPCEtLSBUaGUgbXZUb29sYmFyTWFpbiBkaXYgY29udGFpbnMgYWxsIHRvb2xiYXIgYnV0dG9ucyBleGNlcHQgdGhlIFwiTW9yZSBvcHRpb25zXCIgYnV0dG9uLiBUaGlzIGFsbG93cyBmb3IgY2FsY3VsYXRpb24gb2YgdGhlIGF2YWlsYWJsZSBzcGFjZSB0byBkaXNwbGF5IGJ1dHRvbnMgLS0+XG4gICAgICAgIDxkaXYgaWQ9XCJtdlRvb2xiYXJNYWluXCIgY2xhc3M9XCJtdi10b29sYmFyLW1haW5cIiAjbXZUb29sYmFyTWFpbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudUl0ZW1zXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIFRoZSBtdlRvb2xiYXJNb3JlT3B0aW9ucyBkaXYgY29udGFpbnMgdGhlIFwiTW9yZSBvcHRpb25zXCIgdG9vbGJhciBidXR0b24gKGFuZCB0aGUgb3ZlcmxheSB0ZW1wbGF0ZSBmb3IgdGhlIGRyb3Bkb3duIG1lbnUpLlxuICAgICAgICAgICAgVGhlIHNwYWNlIG9jY3VwaWVkIGJ5IHRoZSBidXR0b24gKGlmIHZpc2libGUpIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIHRvb2xiYXIgc3BhY2UgYXZhaWxhYmxlIGNhbGN1bGF0aW9uIC0tPlxuICAgICAgICA8ZGl2IGlkPVwibXZUb29sYmFyTW9yZU9wdGlvbnNcIiBjbGFzcz1cIm12LXRvb2xiYXItbW9yZS1vcHRpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgaWQ9XCJtdk1vcmVPcHRpb25zQnRuXCJcbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1tb3JlLW9wdGlvbnMgbXYtdG9vbHRpcFwiXG4gICAgICAgICAgICBbY2xhc3MubXYtdG9vbGJhcl9fbWVudS1idXR0b24tLW1vcmUtb3B0aW9uc19faGlkZGVuXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXIub2Zmc2V0V2lkdGggPj0gYWxsQnV0dG9uc1dpZHRoXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0Ryb3Bkb3duTWVudU9wZW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidNb3JlIG9wdGlvbnMnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNb3JlT3B0aW9ucygpXCJcbiAgICAgICAgICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAgICAgICAgICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJNb3JlIG9wdGlvbnNcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8IS0tIFRoaXMgdGVtcGxhdGUgZGlzcGxheXMgdGhlIG92ZXJsYXkgY29udGVudCBmb3IgdGhlIGRyb3Bkb3duIG1lbnUgYW5kIGlzIGNvbm5lY3RlZCB0byB0aGUgXCJNb3JlIG9wdGlvbnNcIiBidXR0b24gLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJpc0Ryb3Bkb3duTWVudU9wZW5cIlxuICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwiZHJvcGRvd25NZW51UG9zaXRpb25zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiICNkcm9wZG93bk1lbnUgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGlkPVwibXZNZW51SXRlbXNcIiAjbXZNZW51SXRlbXM+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbWVudUl0ZW1zPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1NpZGViYXJcIlxuICAgICAgICAgICAgaWQ9XCJtdkluZGV4QnRuXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cImluZGV4XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInSW5kZXgnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgICNtdkluZGV4QnRuXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0taW5kZXggbXYtdG9vbHRpcFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZJbmRleEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZJbmRleEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0luZGV4T3BlblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlSW5kZXhTaWRlQmFyKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57eyBcIkluZGV4XCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dTaWRlYmFyXCJcbiAgICAgICAgICAgIGlkPVwibXZCb29rbWFya3NCdG5cIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiYm9va21hcmtzXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQm9va21hcmtzJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAjbXZCb29rbWFya3NCdG5cbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ212LWJ1dHRvbiBtdi10b29sdGlwIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1ib29rbWFya3MnOiB0cnVlLFxuICAgICAgICAgICAgICAnYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyJzpcbiAgICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDxcbiAgICAgICAgICAgICAgICB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkJvb2ttYXJrc0J0biddLFxuICAgICAgICAgICAgICAnYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bic6XG4gICAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PVxuICAgICAgICAgICAgICAgIHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212Qm9va21hcmtzQnRuJ11cbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0Jvb2ttYXJrc09wZW5cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUJvb2ttYXJrc1NpZGVCYXIoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7IFwiQm9va21hcmtzXCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dEcmF3QnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpY3BFbmFibGVkIHx8IHJlZGFjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgaWQ9XCJtdkRyYXdCdG5cIlxuICAgICAgICAgICAgI212RHJhd0J0blxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLWRyYXcgbXYtdG9vbHRpcFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0RyYXcgYSBib3gnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLXRvb2xiYXJdPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkRyYXdCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLWRyb3Bkb3duXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoID49IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212RHJhd0J0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnRvZ2dsZWRdPVwidG9vbGJhckV2ZW50cy5kcmF3TW9kZVN1YmplY3QgfCBhc3luY1wiXG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJ0b2dnbGVEcmF3QnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRHJhd1RvZ2dsZSgpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gZGF0YS1sMTBuLWlkPVwiZHJhd19sYWJlbFwiPnt7XG4gICAgICAgICAgICAgIFwiRHJhdyBhIGJveFwiIHwgcnB4VHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd0hpZ2hsaWdodEJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3Rpb25FbmFibGVkXCJcbiAgICAgICAgICAgIGlkPVwibXZIaWdobGlnaHRCdG5cIlxuICAgICAgICAgICAgI212SGlnaGxpZ2h0QnRuXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0taGlnaGxpZ2h0IG12LXRvb2x0aXBcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidIaWdobGlnaHQnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLXRvb2xiYXJdPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkhpZ2hsaWdodEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZIaWdobGlnaHRCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy50b2dnbGVkXT1cInRvb2xiYXJFdmVudHMuaGlnaGxpZ2h0VG9vbGJhclN1YmplY3QgfCBhc3luY1wiXG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0hpZ2hsaWdodFRvZ2dsZSgpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJ0b2dnbGVIaWdobGlnaHRCdXR0b25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cImhpZ2hsaWdodF9sYWJlbFwiPnt7XG4gICAgICAgICAgICAgIFwiSGlnaGxpZ2h0XCIgfCBycHhUcmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dOYXZpZ2F0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPVwibXZQYWdlQnRuXCJcbiAgICAgICAgICAgICAgI212UGFnZUJ0blxuICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1wYWdlXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidQYWdlJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLXRvb2xiYXJdPVwiXG4gICAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA8IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212UGFnZUJ0biddXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLWRyb3Bkb3duXT1cIlxuICAgICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZQYWdlQnRuJ11cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgXCJQYWdlXCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwibXZVcEJ0blwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2VOdW1iZXIgPT09IDEgfHwgcmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidQcmV2aW91cyBwYWdlJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUHJldmlvdXMgcGFnZScgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXVwIGJ1dHRvbi1pbWFnZSBtdi10b29sdGlwXCJcbiAgICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJwcmV2aW91c1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlY3JlYXNlUGFnZU51bWJlcigpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJtdkRvd25CdG5cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdlTnVtYmVyID09PSBwYWdlQ291bnQgfHwgcmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidOZXh0IHBhZ2UnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidOZXh0IHBhZ2UnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1kb3duIGJ1dHRvbi1pbWFnZSBtdi10b29sdGlwXCJcbiAgICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJuZXh0XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5jcmVhc2VQYWdlTnVtYmVyKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm12LXRvb2x0aXBcIiBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ1BhZ2UgbnVtYmVyJyB8IHJweFRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBpZD1cInBhZ2VOdW1iZXJcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJobWN0cy10b29sYmFyLWlucHV0IGdvdnVrLWlucHV0LS13aWR0aC0yXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1BhZ2UgbnVtYmVyJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT1cIjFcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cIjRcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicGFnZU51bWJlclwiXG4gICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwicGFnZVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUGFnZU51bWJlcklucHV0Q2hhbmdlKHBhZ2VOdW1iZXJJbnB1dC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgICAgI3BhZ2VOdW1iZXJJbnB1dFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJudW1QYWdlc1wiIGNsYXNzPVwidG9vbGJhckxhYmVsXCI+LyB7eyBwYWdlQ291bnQgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93Wm9vbVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBpZD1cIm12Wm9vbUJ0blwiXG4gICAgICAgICAgICAgICNtdlpvb21CdG5cbiAgICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tem9vbVwiXG4gICAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZab29tQnRuJ11cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlpvb21CdG4nXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgdG9vbGJhckV2ZW50cy56b29tVmFsdWVTdWJqZWN0LnZhbHVlID09PSAwLjEgfHxcbiAgICAgICAgICAgICAgICAgIHJlZGFjdEFsbEluUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGlkPVwibXZNaW51c0J0blwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tem9vbS1vdXQgYnV0dG9uLWltYWdlIG12LXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInWm9vbSBvdXQnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJ6b29tX291dFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0ZXBab29tKC0wLjEpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXpvb20tb3V0LXRleHRcIj57e1xuICAgICAgICAgICAgICAgICAgXCJab29tIE91dFwiIHwgcnB4VHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm12LXRvb2x0aXBcIiBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ1pvb20nIHwgcnB4VHJhbnNsYXRlXCI+IFxuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgIGlkPVwic2NhbGVTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJobWN0cy10b29sYmFyLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJ6b29tXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiem9vbSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgI3pvb21TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJjdXN0b21TY2FsZU9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRvb2xiYXJFdmVudHMuem9vbVZhbHVlU3ViamVjdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgdG9vbGJhckV2ZW50cy56b29tVmFsdWVTdWJqZWN0LnZhbHVlICogMTAwXG4gICAgICAgICAgICAgICAgICAgICAgICB8IG51bWJlciA6IFwiMS4wLTBcIlxuICAgICAgICAgICAgICAgICAgICB9fSVcbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgem9vbVNjYWxlIG9mIHpvb21TY2FsZXNcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ6b29tU2NhbGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWwxMG4taWRdPVwiJ3BhZ2Vfc2NhbGVfcGVyY2VudF8nICsgem9vbVNjYWxlICogMTAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgem9vbVNjYWxlICogMTAwIH19JVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgIHRvb2xiYXJFdmVudHMuem9vbVZhbHVlU3ViamVjdC52YWx1ZSA9PT0gNSB8fFxuICAgICAgICAgICAgICAgICAgcmVkYWN0QWxsSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJtdlBsdXNCdG5cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXpvb20taW4gYnV0dG9uLWltYWdlIG12LXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzdGVwWm9vbSgwLjEpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ1pvb20gaW4nIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJ6b29tX2luXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXpvb20tb3V0LXRleHRcIj57e1xuICAgICAgICAgICAgICAgICAgXCJab29tIEluXCIgfCBycHhUcmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1JvdGF0ZVwiXG4gICAgICAgICAgICBpZD1cIm12Um90YXRlQnRuXCJcbiAgICAgICAgICAgICNtdlJvdGF0ZUJ0blxuICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tcm90YXRlXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLXRvb2xiYXJdPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlJvdGF0ZUJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZSb3RhdGVCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwibXZSb3RhdGVMZWZ0QnRuXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tcm90YXRlX2xlZnQgYnV0dG9uLWltYWdlIG12LXRvb2x0aXBcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSb3RhdGUgY291bnRlcmNsb2Nrd2lzZScgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ1JvdGF0ZSBjb3VudGVyY2xvY2t3aXNlJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInBhZ2Vfcm90YXRlX2Njd1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGUoMjcwKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwibXZSb3RhdGVSaWdodEJ0blwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXJvdGF0ZV9yaWdodCBidXR0b24taW1hZ2UgbXYtdG9vbHRpcFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JvdGF0ZSBjbG9ja3dpc2UnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidSb3RhdGUgY2xvY2t3aXNlJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInBhZ2Vfcm90YXRlX2N3XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJvdGF0ZSg5MClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJSb3RhdGVcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1NlYXJjaEJhclwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgIGlkPVwibXZTZWFyY2hCdG5cIlxuICAgICAgICAgICAgI212U2VhcmNoQnRuXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ1NlYXJjaCcgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwic2VhcmNoYmFyXCJcbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1zZWFyY2ggbXYtdG9vbHRpcFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZTZWFyY2hCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLWRyb3Bkb3duXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoID49IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212U2VhcmNoQnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VhcmNoQmFyKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57eyBcIlNlYXJjaFwiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxtdi1zZWFyY2gtYmFyXG4gICAgICAgICAgICAqbmdJZj1cIiF0b29sYmFyRXZlbnRzLnNlYXJjaEJhckhpZGRlbi5nZXRWYWx1ZSgpXCJcbiAgICAgICAgICA+PC9tdi1zZWFyY2gtYmFyPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVJQ1AgJiYgdG9vbGJhckJ1dHRvbnMuc2hvd1ByZXNlbnRhdGlvbk1vZGUgJiYgaXNQZGYoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCAhY29udGVudFR5cGUgfHwgcmVkYWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBpZD1cIm12UHJlc2VudEJ0blwiXG4gICAgICAgICAgICAjbXZQcmVzZW50QnRuXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tcHJlc2VudCBtdi10b29sdGlwXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInSW4tQ291cnQgcHJlc2VudGF0aW9uIG1vZGUnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cImljcE1vZGVfbGFiZWxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwib25Ub29sQmFyT2ZmU2V0Q2hhbmdlKCdtdlByZXNlbnRCdG4nKVwiXG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUHJlc2VudEJhcigpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gZGF0YS1sMTBuLWlkPVwiaWNwTW9kZV9sYWJlbFwiPnt7XG4gICAgICAgICAgICAgIFwiUHJlc2VudFwiIHwgcnB4VHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlUmVkYWN0aW9ucyAmJiB0b29sYmFyQnV0dG9ucy5zaG93UmVkYWN0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpY3BFbmFibGVkIHx8IHJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgaWQ9XCJtdlJlZGFjdEJ0blwiXG4gICAgICAgICAgICAjbXZSZWRhY3RCdG5cbiAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInUmVkYWN0JyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJyZWRhY3RcIlxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXJlZGFjdCBtdi10b29sdGlwXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9uVG9vbEJhck9mZlNldENoYW5nZSgnbXZSZWRhY3RCdG4nKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzUmVkYWN0T3BlblwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUmVkYWN0QmFyKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57eyBcIlJlZGFjdFwiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93R3JhYk5EcmFnQnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpY3BFbmFibGVkIHx8IHJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgaWQ9XCJtdkdyYWJCdG5cIlxuICAgICAgICAgICAgI212R3JhYkJ0blxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLWdyYWIgbXYtdG9vbHRpcFwiXG4gICAgICAgICAgICBkYXRhLXRvb2x0aXA9XCJHcmFiIGFuZCBkcmFnXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9uVG9vbEJhck9mZlNldENoYW5nZSgnbXZHcmFiQnRuJylcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUdyYWJORHJhZygpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJHcmFiIGFuZCBkcmFnXCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dEb3dubG9hZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3Rpb25FbmFibGVkXCJcbiAgICAgICAgICAgIGlkPVwibXZEb3dubG9hZEJ0blwiXG4gICAgICAgICAgICAjbXZEb3dubG9hZEJ0blxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLWRvd25sb2FkIG12LXRvb2x0aXBcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidEb3dubG9hZCcgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwib25Ub29sQmFyT2ZmU2V0Q2hhbmdlKCdtdkRvd25sb2FkQnRuJylcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkRmlsZSgpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJEb3dubG9hZFwiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93UHJpbnRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImljcEVuYWJsZWQgfHwgcmVkYWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBpZD1cIm12UHJpbnRCdG5cIlxuICAgICAgICAgICAgI212UHJpbnRCdG5cbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInByaW50XCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQcmludFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ1ByaW50JyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJwcmludFwiXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tcHJpbnQgbXYtdG9vbHRpcFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJvblRvb2xCYXJPZmZTZXRDaGFuZ2UoJ212UHJpbnRCdG4nKVwiXG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwicHJpbnRGaWxlKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57eyBcIlByaW50XCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZUFubm90YXRpb25zICYmIHRvb2xiYXJCdXR0b25zLnNob3dDb21tZW50U3VtbWFyeVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBpZD1cIm12Q29tbWVudHNCdG5cIlxuICAgICAgICAgICAgI212Q29tbWVudHNCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1jb21tZW50cyBtdi10b29sdGlwXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQ29tbWVudHMnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cImNvbW1lbnRzXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9uVG9vbEJhck9mZlNldENoYW5nZSgnbXZDb21tZW50c0J0bicpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNDb21tZW50c09wZW5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbW1lbnRzUGFuZWwoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7IFwiQ29tbWVudHNcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBpZD1cImxvYWRpbmdCYXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2xpbW1lclwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=