@lowcodeunit/applications-flow-common 1.33.150-lets-get-social-ish → 1.33.151-angular-13

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 (262) hide show
  1. package/esm2020/lcu.api.mjs +65 -0
  2. package/esm2020/lib/applications-flow.module.mjs +328 -0
  3. package/esm2020/lib/controls/build-pipeline-form/build-pipeline-form.component.mjs +245 -0
  4. package/esm2020/lib/controls/devops-source-control-form/devops-source-control-form.component.mjs +446 -0
  5. package/esm2020/lib/controls/edit-application-form/edit-application-form.component.mjs +67 -0
  6. package/esm2020/lib/controls/processor-details-form/processor-details-form.component.mjs +308 -0
  7. package/esm2020/lib/controls/security-toggle/security-toggle.component.mjs +54 -0
  8. package/esm2020/lib/controls/source-control-form/source-control-form.component.mjs +69 -0
  9. package/esm2020/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.mjs +29 -0
  10. package/esm2020/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.mjs +35 -0
  11. package/esm2020/lib/dialogs/edit-application-dialog/edit-application-dialog.component.mjs +33 -0
  12. package/esm2020/lib/dialogs/source-control-dialog/source-control-dialog.component.mjs +29 -0
  13. package/esm2020/lib/elements/analytics-card/analytics-card.component.mjs +28 -0
  14. package/esm2020/lib/elements/base-form/base-form.component.mjs +57 -0
  15. package/esm2020/lib/elements/breadcrumb/breadcrumb.component.mjs +117 -0
  16. package/esm2020/lib/elements/card-carousel/card-carousel.component.mjs +70 -0
  17. package/esm2020/lib/elements/dynamic-tabs/dynamic-tabs.component.mjs +74 -0
  18. package/esm2020/lib/elements/feed-card-sm/feed-card-sm.component.mjs +40 -0
  19. package/esm2020/lib/elements/flow-tool/flow-tool.component.mjs +75 -0
  20. package/esm2020/lib/elements/form-card/form-card.component.mjs +33 -0
  21. package/esm2020/lib/elements/gh-control/gh-control.component.mjs +78 -0
  22. package/esm2020/lib/elements/main-feed-card/main-feed-card.component.mjs +34 -0
  23. package/esm2020/lib/elements/project-info-card/project-info-card.component.mjs +54 -0
  24. package/esm2020/lib/elements/projects/controls/builds/builds.component.mjs +32 -0
  25. package/esm2020/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.mjs +145 -0
  26. package/esm2020/lib/elements/projects/controls/forms/source-control/source-control.component.mjs +285 -0
  27. package/esm2020/lib/elements/projects/controls/git-auth/git-auth.component.mjs +26 -0
  28. package/esm2020/lib/elements/projects/controls/header/header.component.mjs +83 -0
  29. package/esm2020/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.mjs +118 -0
  30. package/esm2020/lib/elements/projects/controls/project-items/project-items.component.mjs +54 -0
  31. package/esm2020/lib/elements/projects/controls/project-tabs/project-tabs.component.mjs +103 -0
  32. package/esm2020/lib/elements/projects/controls/recent-activities/recent-activities.component.mjs +14 -0
  33. package/esm2020/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.mjs +561 -0
  34. package/esm2020/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.mjs +72 -0
  35. package/esm2020/lib/elements/projects/controls/tabs/devops/devops.component.mjs +242 -0
  36. package/esm2020/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.mjs +179 -0
  37. package/esm2020/lib/elements/projects/controls/tabs/domains/domains.component.mjs +139 -0
  38. package/esm2020/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.mjs +90 -0
  39. package/esm2020/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.mjs +142 -0
  40. package/esm2020/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.mjs +124 -0
  41. package/esm2020/lib/elements/projects/controls/tabs/general/general.component.mjs +40 -0
  42. package/esm2020/lib/elements/projects/projects.component.mjs +98 -0
  43. package/esm2020/lib/elements/slotted-card/slotted-card.component.mjs +45 -0
  44. package/esm2020/lib/elements/three-column/three-column.component.mjs +30 -0
  45. package/esm2020/lib/elements/two-column-header/two-column-header.component.mjs +15 -0
  46. package/esm2020/lib/models/actions.model.mjs +3 -0
  47. package/esm2020/lib/models/base-form-config.model.mjs +6 -0
  48. package/esm2020/lib/models/card-form-config.model.mjs +6 -0
  49. package/esm2020/lib/models/dev-settings-preset.model.mjs +3 -0
  50. package/esm2020/lib/models/domain.model.mjs +3 -0
  51. package/esm2020/lib/models/dynamic-tabs.model.mjs +6 -0
  52. package/esm2020/lib/models/form-actions.model.mjs +3 -0
  53. package/esm2020/lib/models/form.model.mjs +6 -0
  54. package/esm2020/lib/models/form.values.model.mjs +11 -0
  55. package/esm2020/lib/models/project-actions.model.mjs +6 -0
  56. package/esm2020/lib/services/applications-flow.service.mjs +140 -0
  57. package/esm2020/lib/services/eac.service.mjs +173 -0
  58. package/esm2020/lib/services/forms.service.mjs +132 -0
  59. package/esm2020/lib/services/npm.service.mjs +77 -0
  60. package/esm2020/lib/services/project.service.mjs +303 -0
  61. package/esm2020/lib/state/applications-flow-state.context.mjs +36 -0
  62. package/esm2020/lib/state/applications-flow.state.mjs +72 -0
  63. package/esm2020/lowcodeunit-applications-flow-common.mjs +5 -0
  64. package/fesm2015/lowcodeunit-applications-flow-common.mjs +5544 -0
  65. package/fesm2015/lowcodeunit-applications-flow-common.mjs.map +1 -0
  66. package/fesm2020/lowcodeunit-applications-flow-common.mjs +5424 -0
  67. package/fesm2020/lowcodeunit-applications-flow-common.mjs.map +1 -0
  68. package/lcu.api.d.ts +39 -2
  69. package/lib/applications-flow.module.d.ts +53 -1
  70. package/lib/controls/build-pipeline-form/build-pipeline-form.component.d.ts +3 -1
  71. package/lib/controls/devops-source-control-form/devops-source-control-form.component.d.ts +3 -1
  72. package/lib/controls/edit-application-form/edit-application-form.component.d.ts +3 -1
  73. package/lib/controls/processor-details-form/processor-details-form.component.d.ts +5 -4
  74. package/lib/controls/security-toggle/security-toggle.component.d.ts +3 -2
  75. package/lib/controls/source-control-form/source-control-form.component.d.ts +3 -1
  76. package/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.d.ts +3 -1
  77. package/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.d.ts +3 -1
  78. package/lib/dialogs/edit-application-dialog/edit-application-dialog.component.d.ts +3 -1
  79. package/lib/dialogs/source-control-dialog/source-control-dialog.component.d.ts +3 -1
  80. package/lib/elements/analytics-card/analytics-card.component.d.ts +3 -1
  81. package/lib/elements/base-form/base-form.component.d.ts +3 -1
  82. package/lib/elements/breadcrumb/breadcrumb.component.d.ts +3 -1
  83. package/lib/elements/card-carousel/card-carousel.component.d.ts +3 -1
  84. package/lib/elements/dynamic-tabs/dynamic-tabs.component.d.ts +3 -1
  85. package/lib/elements/feed-card-sm/feed-card-sm.component.d.ts +3 -1
  86. package/lib/elements/flow-tool/flow-tool.component.d.ts +28 -0
  87. package/lib/elements/form-card/form-card.component.d.ts +3 -1
  88. package/lib/elements/gh-control/gh-control.component.d.ts +3 -1
  89. package/lib/elements/main-feed-card/main-feed-card.component.d.ts +3 -1
  90. package/lib/elements/project-info-card/project-info-card.component.d.ts +3 -2
  91. package/lib/elements/projects/controls/builds/builds.component.d.ts +3 -1
  92. package/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.d.ts +3 -1
  93. package/lib/elements/projects/controls/forms/source-control/source-control.component.d.ts +3 -1
  94. package/lib/elements/projects/controls/git-auth/git-auth.component.d.ts +3 -1
  95. package/lib/elements/projects/controls/header/header.component.d.ts +3 -1
  96. package/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.d.ts +3 -1
  97. package/lib/elements/projects/controls/project-items/project-items.component.d.ts +3 -1
  98. package/lib/elements/projects/controls/project-tabs/project-tabs.component.d.ts +3 -1
  99. package/lib/elements/projects/controls/recent-activities/recent-activities.component.d.ts +3 -1
  100. package/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.d.ts +3 -1
  101. package/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.d.ts +3 -1
  102. package/lib/elements/projects/controls/tabs/devops/devops.component.d.ts +3 -1
  103. package/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.d.ts +3 -1
  104. package/lib/elements/projects/controls/tabs/domains/domains.component.d.ts +3 -1
  105. package/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.d.ts +3 -1
  106. package/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.d.ts +3 -1
  107. package/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.d.ts +3 -1
  108. package/lib/elements/projects/controls/tabs/general/general.component.d.ts +3 -1
  109. package/lib/elements/projects/projects.component.d.ts +3 -1
  110. package/lib/elements/slotted-card/slotted-card.component.d.ts +3 -2
  111. package/lib/elements/three-column/three-column.component.d.ts +3 -1
  112. package/lib/elements/two-column-header/two-column-header.component.d.ts +3 -1
  113. package/lib/models/actions.model.d.ts +0 -1
  114. package/lib/models/base-form-config.model.d.ts +0 -1
  115. package/lib/models/card-form-config.model.d.ts +0 -1
  116. package/lib/models/dev-settings-preset.model.d.ts +0 -1
  117. package/lib/models/domain.model.d.ts +0 -1
  118. package/lib/models/dynamic-tabs.model.d.ts +0 -1
  119. package/lib/models/form-actions.model.d.ts +0 -1
  120. package/lib/models/form.model.d.ts +0 -1
  121. package/lib/models/form.values.model.d.ts +0 -1
  122. package/lib/models/project-actions.model.d.ts +0 -1
  123. package/lib/services/applications-flow.service.d.ts +3 -1
  124. package/lib/services/eac.service.d.ts +3 -1
  125. package/lib/services/forms.service.d.ts +3 -1
  126. package/lib/services/npm.service.d.ts +3 -1
  127. package/lib/services/project.service.d.ts +3 -1
  128. package/lib/state/applications-flow-state.context.d.ts +3 -1
  129. package/lib/state/applications-flow.state.d.ts +0 -1
  130. package/lowcodeunit-applications-flow-common.d.ts +1 -35
  131. package/package.json +20 -12
  132. package/bundles/lowcodeunit-applications-flow-common.umd.js +0 -6923
  133. package/bundles/lowcodeunit-applications-flow-common.umd.js.map +0 -1
  134. package/bundles/lowcodeunit-applications-flow-common.umd.min.js +0 -16
  135. package/bundles/lowcodeunit-applications-flow-common.umd.min.js.map +0 -1
  136. package/esm2015/lcu.api.js +0 -27
  137. package/esm2015/lib/applications-flow.module.js +0 -218
  138. package/esm2015/lib/controls/build-pipeline-form/build-pipeline-form.component.js +0 -213
  139. package/esm2015/lib/controls/devops-source-control-form/devops-source-control-form.component.js +0 -412
  140. package/esm2015/lib/controls/edit-application-form/edit-application-form.component.js +0 -60
  141. package/esm2015/lib/controls/processor-details-form/processor-details-form.component.js +0 -330
  142. package/esm2015/lib/controls/security-toggle/security-toggle.component.js +0 -51
  143. package/esm2015/lib/controls/source-control-form/source-control-form.component.js +0 -61
  144. package/esm2015/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.js +0 -25
  145. package/esm2015/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.js +0 -31
  146. package/esm2015/lib/dialogs/edit-application-dialog/edit-application-dialog.component.js +0 -29
  147. package/esm2015/lib/dialogs/source-control-dialog/source-control-dialog.component.js +0 -25
  148. package/esm2015/lib/elements/analytics-card/analytics-card.component.js +0 -21
  149. package/esm2015/lib/elements/base-form/base-form.component.js +0 -61
  150. package/esm2015/lib/elements/breadcrumb/breadcrumb.component.js +0 -115
  151. package/esm2015/lib/elements/card-carousel/card-carousel.component.js +0 -67
  152. package/esm2015/lib/elements/dynamic-tabs/dynamic-tabs.component.js +0 -69
  153. package/esm2015/lib/elements/feed-card-sm/feed-card-sm.component.js +0 -31
  154. package/esm2015/lib/elements/form-card/form-card.component.js +0 -22
  155. package/esm2015/lib/elements/gh-control/gh-control.component.js +0 -72
  156. package/esm2015/lib/elements/main-feed-card/main-feed-card.component.js +0 -24
  157. package/esm2015/lib/elements/project-info-card/project-info-card.component.js +0 -39
  158. package/esm2015/lib/elements/projects/controls/builds/builds.component.js +0 -26
  159. package/esm2015/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.js +0 -145
  160. package/esm2015/lib/elements/projects/controls/forms/source-control/source-control.component.js +0 -262
  161. package/esm2015/lib/elements/projects/controls/git-auth/git-auth.component.js +0 -25
  162. package/esm2015/lib/elements/projects/controls/header/header.component.js +0 -75
  163. package/esm2015/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.js +0 -102
  164. package/esm2015/lib/elements/projects/controls/project-items/project-items.component.js +0 -49
  165. package/esm2015/lib/elements/projects/controls/project-tabs/project-tabs.component.js +0 -91
  166. package/esm2015/lib/elements/projects/controls/recent-activities/recent-activities.component.js +0 -15
  167. package/esm2015/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.js +0 -590
  168. package/esm2015/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.js +0 -62
  169. package/esm2015/lib/elements/projects/controls/tabs/devops/devops.component.js +0 -202
  170. package/esm2015/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.js +0 -178
  171. package/esm2015/lib/elements/projects/controls/tabs/domains/domains.component.js +0 -133
  172. package/esm2015/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.js +0 -86
  173. package/esm2015/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.js +0 -129
  174. package/esm2015/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.js +0 -113
  175. package/esm2015/lib/elements/projects/controls/tabs/general/general.component.js +0 -46
  176. package/esm2015/lib/elements/projects/projects.component.js +0 -99
  177. package/esm2015/lib/elements/slotted-card/slotted-card.component.js +0 -30
  178. package/esm2015/lib/elements/three-column/three-column.component.js +0 -32
  179. package/esm2015/lib/elements/two-column-header/two-column-header.component.js +0 -15
  180. package/esm2015/lib/models/actions.model.js +0 -3
  181. package/esm2015/lib/models/base-form-config.model.js +0 -6
  182. package/esm2015/lib/models/card-form-config.model.js +0 -6
  183. package/esm2015/lib/models/dev-settings-preset.model.js +0 -3
  184. package/esm2015/lib/models/domain.model.js +0 -3
  185. package/esm2015/lib/models/dynamic-tabs.model.js +0 -6
  186. package/esm2015/lib/models/form-actions.model.js +0 -3
  187. package/esm2015/lib/models/form.model.js +0 -6
  188. package/esm2015/lib/models/form.values.model.js +0 -11
  189. package/esm2015/lib/models/project-actions.model.js +0 -6
  190. package/esm2015/lib/services/applications-flow.service.js +0 -146
  191. package/esm2015/lib/services/eac.service.js +0 -218
  192. package/esm2015/lib/services/forms.service.js +0 -131
  193. package/esm2015/lib/services/npm.service.js +0 -79
  194. package/esm2015/lib/services/project.service.js +0 -318
  195. package/esm2015/lib/state/applications-flow-state.context.js +0 -37
  196. package/esm2015/lib/state/applications-flow.state.js +0 -72
  197. package/esm2015/lowcodeunit-applications-flow-common.js +0 -39
  198. package/fesm2015/lowcodeunit-applications-flow-common.js +0 -5338
  199. package/fesm2015/lowcodeunit-applications-flow-common.js.map +0 -1
  200. package/lcu.api.d.ts.map +0 -1
  201. package/lib/applications-flow.module.d.ts.map +0 -1
  202. package/lib/controls/build-pipeline-form/build-pipeline-form.component.d.ts.map +0 -1
  203. package/lib/controls/devops-source-control-form/devops-source-control-form.component.d.ts.map +0 -1
  204. package/lib/controls/edit-application-form/edit-application-form.component.d.ts.map +0 -1
  205. package/lib/controls/processor-details-form/processor-details-form.component.d.ts.map +0 -1
  206. package/lib/controls/security-toggle/security-toggle.component.d.ts.map +0 -1
  207. package/lib/controls/source-control-form/source-control-form.component.d.ts.map +0 -1
  208. package/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.d.ts.map +0 -1
  209. package/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.d.ts.map +0 -1
  210. package/lib/dialogs/edit-application-dialog/edit-application-dialog.component.d.ts.map +0 -1
  211. package/lib/dialogs/source-control-dialog/source-control-dialog.component.d.ts.map +0 -1
  212. package/lib/elements/analytics-card/analytics-card.component.d.ts.map +0 -1
  213. package/lib/elements/base-form/base-form.component.d.ts.map +0 -1
  214. package/lib/elements/breadcrumb/breadcrumb.component.d.ts.map +0 -1
  215. package/lib/elements/card-carousel/card-carousel.component.d.ts.map +0 -1
  216. package/lib/elements/dynamic-tabs/dynamic-tabs.component.d.ts.map +0 -1
  217. package/lib/elements/feed-card-sm/feed-card-sm.component.d.ts.map +0 -1
  218. package/lib/elements/form-card/form-card.component.d.ts.map +0 -1
  219. package/lib/elements/gh-control/gh-control.component.d.ts.map +0 -1
  220. package/lib/elements/main-feed-card/main-feed-card.component.d.ts.map +0 -1
  221. package/lib/elements/project-info-card/project-info-card.component.d.ts.map +0 -1
  222. package/lib/elements/projects/controls/builds/builds.component.d.ts.map +0 -1
  223. package/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.d.ts.map +0 -1
  224. package/lib/elements/projects/controls/forms/source-control/source-control.component.d.ts.map +0 -1
  225. package/lib/elements/projects/controls/git-auth/git-auth.component.d.ts.map +0 -1
  226. package/lib/elements/projects/controls/header/header.component.d.ts.map +0 -1
  227. package/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.d.ts.map +0 -1
  228. package/lib/elements/projects/controls/project-items/project-items.component.d.ts.map +0 -1
  229. package/lib/elements/projects/controls/project-tabs/project-tabs.component.d.ts.map +0 -1
  230. package/lib/elements/projects/controls/recent-activities/recent-activities.component.d.ts.map +0 -1
  231. package/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.d.ts.map +0 -1
  232. package/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.d.ts.map +0 -1
  233. package/lib/elements/projects/controls/tabs/devops/devops.component.d.ts.map +0 -1
  234. package/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.d.ts.map +0 -1
  235. package/lib/elements/projects/controls/tabs/domains/domains.component.d.ts.map +0 -1
  236. package/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.d.ts.map +0 -1
  237. package/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.d.ts.map +0 -1
  238. package/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.d.ts.map +0 -1
  239. package/lib/elements/projects/controls/tabs/general/general.component.d.ts.map +0 -1
  240. package/lib/elements/projects/projects.component.d.ts.map +0 -1
  241. package/lib/elements/slotted-card/slotted-card.component.d.ts.map +0 -1
  242. package/lib/elements/three-column/three-column.component.d.ts.map +0 -1
  243. package/lib/elements/two-column-header/two-column-header.component.d.ts.map +0 -1
  244. package/lib/models/actions.model.d.ts.map +0 -1
  245. package/lib/models/base-form-config.model.d.ts.map +0 -1
  246. package/lib/models/card-form-config.model.d.ts.map +0 -1
  247. package/lib/models/dev-settings-preset.model.d.ts.map +0 -1
  248. package/lib/models/domain.model.d.ts.map +0 -1
  249. package/lib/models/dynamic-tabs.model.d.ts.map +0 -1
  250. package/lib/models/form-actions.model.d.ts.map +0 -1
  251. package/lib/models/form.model.d.ts.map +0 -1
  252. package/lib/models/form.values.model.d.ts.map +0 -1
  253. package/lib/models/project-actions.model.d.ts.map +0 -1
  254. package/lib/services/applications-flow.service.d.ts.map +0 -1
  255. package/lib/services/eac.service.d.ts.map +0 -1
  256. package/lib/services/forms.service.d.ts.map +0 -1
  257. package/lib/services/npm.service.d.ts.map +0 -1
  258. package/lib/services/project.service.d.ts.map +0 -1
  259. package/lib/state/applications-flow-state.context.d.ts.map +0 -1
  260. package/lib/state/applications-flow.state.d.ts.map +0 -1
  261. package/lowcodeunit-applications-flow-common.d.ts.map +0 -1
  262. package/lowcodeunit-applications-flow-common.metadata.json +0 -1
@@ -0,0 +1,561 @@
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
+ import { Validators, } from '@angular/forms';
3
+ import { Guid } from '@lcu/common';
4
+ import { SourceControlFormControlsComponent } from '../../forms/source-control/source-control.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ import * as i2 from "../../../../../services/applications-flow.service";
8
+ import * as i3 from "../../../../../services/eac.service";
9
+ import * as i4 from "@angular/material/button";
10
+ import * as i5 from "@angular/material/icon";
11
+ import * as i6 from "@angular/material/card";
12
+ import * as i7 from "@angular/material/form-field";
13
+ import * as i8 from "@angular/material/select";
14
+ import * as i9 from "@angular/material/core";
15
+ import * as i10 from "../../forms/source-control/source-control.component";
16
+ import * as i11 from "./npm-package-select/npm-package-select.component";
17
+ import * as i12 from "@angular/material/slide-toggle";
18
+ import * as i13 from "@angular/common";
19
+ import * as i14 from "@angular/material/tooltip";
20
+ import * as i15 from "@angular/flex-layout/flex";
21
+ import * as i16 from "@angular/material/input";
22
+ export class AppsFlowComponent {
23
+ // Constructors
24
+ constructor(formBldr, appsFlowSvc, eacSvc) {
25
+ this.formBldr = formBldr;
26
+ this.appsFlowSvc = appsFlowSvc;
27
+ this.eacSvc = eacSvc;
28
+ this.EditingApplicationLookup = null;
29
+ this.redirectTooltip = '';
30
+ // this.IsPermanent = false;
31
+ // this.IsPreserve = false;
32
+ }
33
+ // Fields
34
+ // Properties
35
+ get APIRootFormControl() {
36
+ return this.ApplicationFormGroup?.controls.apiRoot;
37
+ }
38
+ get ApplicationIDFormControl() {
39
+ return this.ApplicationFormGroup?.controls.applicationId;
40
+ }
41
+ get ApplicationLookups() {
42
+ return Object.keys(this.Applications || {});
43
+ }
44
+ get ApplicationRoutes() {
45
+ return Object.keys(this.RoutedApplications || {});
46
+ }
47
+ get ApplicationsBank() {
48
+ return this.Data?.Applications || {};
49
+ }
50
+ get Applications() {
51
+ const apps = {};
52
+ this.Project.ApplicationLookups.forEach((appLookup) => {
53
+ apps[appLookup] = this.ApplicationsBank[appLookup];
54
+ });
55
+ return apps;
56
+ }
57
+ get BuildFormControl() {
58
+ return this.ApplicationFormGroup?.controls.build;
59
+ }
60
+ get ClientIDFormControl() {
61
+ return this.ApplicationFormGroup?.controls.clientId;
62
+ }
63
+ get ClientSecretFormControl() {
64
+ return this.ApplicationFormGroup?.controls.clientSecret;
65
+ }
66
+ get CurrentRouteApplicationLookups() {
67
+ return Object.keys(this.RoutedApplications[this.CurrentApplicationRoute] || {});
68
+ }
69
+ get DefaultFileFormControl() {
70
+ return this.ApplicationFormGroup?.controls.defaultFile;
71
+ }
72
+ get DefaultSourceControl() {
73
+ return {
74
+ Organization: this.EditingApplication?.LowCodeUnit?.Organization,
75
+ Repository: this.EditingApplication?.LowCodeUnit?.Repository,
76
+ };
77
+ }
78
+ get DescriptionFormControl() {
79
+ return this.ApplicationFormGroup?.controls.description;
80
+ }
81
+ get EditingApplication() {
82
+ let app = this.Applications
83
+ ? this.Applications[this.EditingApplicationLookup]
84
+ : null;
85
+ if (app == null && this.EditingApplicationLookup) {
86
+ app = {};
87
+ }
88
+ return app;
89
+ }
90
+ get HasBuildFormControl() {
91
+ return this.ApplicationFormGroup?.controls.hasBuild;
92
+ }
93
+ get InboundPathFormControl() {
94
+ return this.ApplicationFormGroup?.controls.inboundPath;
95
+ }
96
+ get IsPrivateFormControl() {
97
+ return this.ApplicationFormGroup?.controls.isPrivate;
98
+ }
99
+ get IsTriggerSignInFormControl() {
100
+ return this.ApplicationFormGroup?.controls.isTriggerSignIn;
101
+ }
102
+ get MethodsFormControl() {
103
+ return this.ApplicationFormGroup?.controls.methods;
104
+ }
105
+ get NameFormControl() {
106
+ return this.ApplicationFormGroup?.controls.name;
107
+ }
108
+ get PackageFormControl() {
109
+ return this.ApplicationFormGroup?.controls.package;
110
+ }
111
+ get PermanentFormControl() {
112
+ return this.ApplicationFormGroup?.controls.permanent;
113
+ }
114
+ get PreserveMethodFormControl() {
115
+ return this.ApplicationFormGroup?.controls.preserveMethod;
116
+ }
117
+ get PrimaryHost() {
118
+ return this.Data.PrimaryHost;
119
+ }
120
+ get Project() {
121
+ return this.Data.Project;
122
+ }
123
+ get ProjectLookup() {
124
+ return this.Data.ProjectLookup;
125
+ }
126
+ get RedirectFormControl() {
127
+ return this.ApplicationFormGroup?.controls.redirect;
128
+ }
129
+ get RoutedApplications() {
130
+ const appLookups = Object.keys(this.Applications);
131
+ const apps = appLookups.map((appLookup) => this.Applications[appLookup]);
132
+ let appRoutes = apps.map((app) => {
133
+ return app.LookupConfig?.PathRegex.replace('.*', '');
134
+ }) || [];
135
+ appRoutes = appRoutes.filter((ar) => ar != null);
136
+ let routeBases = [];
137
+ appRoutes.forEach((appRoute) => {
138
+ const appRouteParts = appRoute.split('/');
139
+ const appRouteBase = `/${appRouteParts[1]}`;
140
+ if (routeBases.indexOf(appRouteBase) < 0) {
141
+ routeBases.push(appRouteBase);
142
+ }
143
+ });
144
+ let workingAppLookups = [...(appLookups || [])];
145
+ routeBases = routeBases.sort((a, b) => b.localeCompare(a));
146
+ const routeSet = routeBases.reduce((prevRouteMap, currentRouteBase) => {
147
+ const routeMap = {
148
+ ...prevRouteMap,
149
+ };
150
+ const filteredAppLookups = workingAppLookups.filter((wal) => {
151
+ const wa = this.Applications[wal];
152
+ return wa.LookupConfig?.PathRegex.startsWith(currentRouteBase);
153
+ });
154
+ routeMap[currentRouteBase] =
155
+ filteredAppLookups.reduce((prevAppMap, appLookup) => {
156
+ const appMap = {
157
+ ...prevAppMap,
158
+ };
159
+ appMap[appLookup] = this.Applications[appLookup];
160
+ return appMap;
161
+ }, {}) || {};
162
+ workingAppLookups = workingAppLookups.filter((wa) => {
163
+ return filteredAppLookups.indexOf(wa) < 0;
164
+ });
165
+ return routeMap;
166
+ }, {}) || {};
167
+ let routeSetKeys = Object.keys(routeSet);
168
+ routeSetKeys = routeSetKeys.sort((a, b) => a.localeCompare(b));
169
+ const routeSetResult = {};
170
+ routeSetKeys.forEach((rsk) => (routeSetResult[rsk] = routeSet[rsk]));
171
+ return routeSetResult;
172
+ }
173
+ get RouteFormControl() {
174
+ return this.ApplicationFormGroup?.controls.route;
175
+ }
176
+ get ScopesFormControl() {
177
+ return this.ApplicationFormGroup?.controls.scopes;
178
+ }
179
+ get SecurityFormControl() {
180
+ return this.ApplicationFormGroup?.controls.security;
181
+ }
182
+ get SourceControlLookupFormControl() {
183
+ return this.ApplicationFormGroup?.controls.sourceControlLookup;
184
+ }
185
+ get SourceControlLookups() {
186
+ return Object.keys(this.SourceControls || {});
187
+ }
188
+ get SourceControls() {
189
+ return this.Data.Environment.Sources || {};
190
+ }
191
+ get SPARootFormControl() {
192
+ return this.ApplicationFormGroup?.controls.spaRoot;
193
+ }
194
+ get TokenLookupFormControl() {
195
+ return this.ApplicationFormGroup?.controls.tokenLookup;
196
+ }
197
+ get VersionFormControl() {
198
+ return this.ApplicationFormGroup?.controls.version;
199
+ }
200
+ get ZipFileFormControl() {
201
+ return this.ApplicationFormGroup?.controls.zipFile;
202
+ }
203
+ // Life Cycle
204
+ ngOnInit() {
205
+ if (this.ApplicationLookups?.length <= 0) {
206
+ this.CreateNewApplication();
207
+ }
208
+ }
209
+ // API Methods
210
+ CreateNewApplication() {
211
+ this.SetEditingApplication(Guid.CreateRaw());
212
+ }
213
+ DeleteApplication(appLookup, appName) {
214
+ this.eacSvc.DeleteApplication(appLookup, appName);
215
+ }
216
+ LCUTypeChanged(event) {
217
+ this.LCUType = event.value;
218
+ this.setupLcuTypeSubForm();
219
+ }
220
+ ProcessorTypeChanged(event) {
221
+ this.ProcessorType = event.value;
222
+ this.setupProcessorTypeSubForm();
223
+ }
224
+ DetermineTooltipText() {
225
+ let permanentValue = this.PermanentFormControl.value;
226
+ let preserveValue = this.PreserveMethodFormControl.value;
227
+ if (permanentValue === true && preserveValue === false) {
228
+ this.redirectTooltip = '301 – Permanent and Not Preserve';
229
+ }
230
+ else if (permanentValue === false && preserveValue === false) {
231
+ this.redirectTooltip = '302 – Not Permanent and Not Preserve';
232
+ }
233
+ else if (permanentValue === false && preserveValue === true) {
234
+ this.redirectTooltip = '307 – Not Permanent and Preserve';
235
+ }
236
+ else if (permanentValue === true && preserveValue === true) {
237
+ this.redirectTooltip = '308 – Permanent and Preserve';
238
+ }
239
+ }
240
+ GetProcessorType(appLookup) {
241
+ let processorType = '';
242
+ processorType = this.Applications[appLookup].Processor.Type
243
+ ? this.Applications[appLookup].Processor.Type
244
+ : '';
245
+ // console.log("Ptype = ", processorType);
246
+ return processorType;
247
+ }
248
+ EditApplicationRouteClicked(appRoute) {
249
+ this.CurrentApplicationRoute = appRoute;
250
+ }
251
+ SaveApplication() {
252
+ const app = {
253
+ Application: {
254
+ Name: this.NameFormControl.value,
255
+ Description: this.DescriptionFormControl.value,
256
+ PriorityShift: this.EditingApplication?.Application?.PriorityShift || 0,
257
+ },
258
+ AccessRightLookups: [],
259
+ DataTokens: {},
260
+ LicenseConfigurationLookups: [],
261
+ LookupConfig: {
262
+ IsPrivate: this.IsPrivateFormControl.value,
263
+ IsTriggerSignIn: this.IsPrivateFormControl.value
264
+ ? this.IsTriggerSignInFormControl.value
265
+ : false,
266
+ PathRegex: `${this.RouteFormControl.value}.*`,
267
+ QueryRegex: this.EditingApplication?.LookupConfig?.QueryRegex || '',
268
+ HeaderRegex: this.EditingApplication?.LookupConfig?.HeaderRegex || '',
269
+ AllowedMethods: this.MethodsFormControl?.value
270
+ ?.split(' ')
271
+ .filter((v) => !!v),
272
+ },
273
+ Processor: {
274
+ Type: this.ProcessorType,
275
+ },
276
+ };
277
+ switch (app.Processor.Type) {
278
+ case 'DFS':
279
+ app.Processor.BaseHref = `${this.RouteFormControl.value}/`.replace('//', '/');
280
+ app.Processor.DefaultFile =
281
+ this.DefaultFileFormControl.value || 'index.html';
282
+ app.LowCodeUnit = {
283
+ Type: this.LCUType,
284
+ };
285
+ switch (app.LowCodeUnit.Type) {
286
+ case 'GitHub':
287
+ app.LowCodeUnit.Organization =
288
+ this.SourceControlFormControls.OrganizationFormControl.value;
289
+ app.LowCodeUnit.Repository =
290
+ this.SourceControlFormControls.RepositoryFormControl.value;
291
+ app.LowCodeUnit.Build = this.BuildFormControl.value;
292
+ app.LowCodeUnit.Path =
293
+ this.SourceControlFormControls.BuildPathFormControl.value;
294
+ break;
295
+ case 'NPM':
296
+ app.LowCodeUnit.Package = this.PackageFormControl.value;
297
+ app.LowCodeUnit.Version = this.VersionFormControl.value;
298
+ break;
299
+ case 'Zip':
300
+ app.LowCodeUnit.ZipFile = this.ZipFileFormControl.value;
301
+ break;
302
+ }
303
+ break;
304
+ case 'OAuth':
305
+ app.Processor.Scopes = this.ScopesFormControl.value.split(' ');
306
+ app.Processor.TokenLookup = this.TokenLookupFormControl.value;
307
+ app.LowCodeUnit = {
308
+ Type: this.LCUType,
309
+ };
310
+ switch (app.LowCodeUnit.Type) {
311
+ case 'GitHubOAuth':
312
+ app.LowCodeUnit.ClientID = this.ClientIDFormControl.value;
313
+ app.LowCodeUnit.ClientSecret = this.ClientSecretFormControl.value;
314
+ break;
315
+ }
316
+ break;
317
+ case 'Proxy':
318
+ app.Processor.InboundPath = this.InboundPathFormControl.value;
319
+ app.LowCodeUnit = {
320
+ Type: this.LCUType,
321
+ };
322
+ switch (app.LowCodeUnit.Type) {
323
+ case 'API':
324
+ app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
325
+ app.LowCodeUnit.Security = this.SecurityFormControl.value;
326
+ break;
327
+ case 'SPA':
328
+ app.LowCodeUnit.SPARoot = this.SPARootFormControl.value;
329
+ break;
330
+ }
331
+ break;
332
+ case 'Redirect':
333
+ app.Processor.Permanent = !!this.PermanentFormControl.value;
334
+ app.Processor.PreserveMethod = !!this.PreserveMethodFormControl.value;
335
+ app.Processor.Redirect = this.RedirectFormControl.value;
336
+ break;
337
+ }
338
+ if (!app.LookupConfig.PathRegex.startsWith('/')) {
339
+ app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
340
+ }
341
+ const saveAppReq = {
342
+ ProjectLookup: this.ProjectLookup,
343
+ Application: app,
344
+ ApplicationLookup: this.EditingApplicationLookup || Guid.CreateRaw(),
345
+ };
346
+ if (this.HasBuildFormControl.value && this.ProcessorType !== 'redirect') {
347
+ if (app) {
348
+ app.SourceControlLookup = this.SourceControlLookupFormControl.value;
349
+ }
350
+ }
351
+ else if (app) {
352
+ app.SourceControlLookup = null;
353
+ }
354
+ this.eacSvc.SaveApplicationAsCode(saveAppReq);
355
+ }
356
+ SetEditingApplication(appLookup) {
357
+ this.EditingApplicationLookup = appLookup;
358
+ this.setupApplicationForm();
359
+ }
360
+ SourceControlLookupChanged(event) {
361
+ // TODO: Anything to do here on change?
362
+ }
363
+ StartsWith(app, appRouteBase) {
364
+ if (appRouteBase === '/') {
365
+ return app?.LookupConfig?.PathRegex === '/.*';
366
+ }
367
+ else {
368
+ return app?.LookupConfig?.PathRegex.startsWith(appRouteBase);
369
+ }
370
+ }
371
+ Unpack(appLookup, app) {
372
+ this.eacSvc.UnpackLowCodeUnit({
373
+ ApplicationLookup: appLookup,
374
+ ApplicationName: app.Application?.Name,
375
+ Version: app.LowCodeUnit?.Version || app.LowCodeUnit?.Build,
376
+ });
377
+ }
378
+ // Helpers
379
+ cleanupLcuTypeSubForm() {
380
+ this.ApplicationFormGroup.removeControl('methods');
381
+ this.ApplicationFormGroup.removeControl('apiRoot');
382
+ this.ApplicationFormGroup.removeControl('security');
383
+ this.ApplicationFormGroup.removeControl('spaRoot');
384
+ this.ApplicationFormGroup.removeControl('applicationId');
385
+ this.ApplicationFormGroup.removeControl('build');
386
+ this.ApplicationFormGroup.removeControl('clientId');
387
+ this.ApplicationFormGroup.removeControl('clientSecret');
388
+ this.ApplicationFormGroup.removeControl('zipFile');
389
+ }
390
+ cleanupProcessorTypeSubForm() {
391
+ this.ApplicationFormGroup.removeControl('defaultFile');
392
+ this.ApplicationFormGroup.removeControl('dfsLcuType');
393
+ this.ApplicationFormGroup.removeControl('oauthLcuType');
394
+ this.ApplicationFormGroup.removeControl('scopes');
395
+ this.ApplicationFormGroup.removeControl('tokenLookup');
396
+ this.ApplicationFormGroup.removeControl('inboundPath');
397
+ this.ApplicationFormGroup.removeControl('proxyLcuType');
398
+ this.ApplicationFormGroup.removeControl('redirect');
399
+ this.ApplicationFormGroup.removeControl('permanent');
400
+ this.ApplicationFormGroup.removeControl('preserveMethod');
401
+ this.cleanupLcuTypeSubForm();
402
+ }
403
+ setupApplicationForm() {
404
+ this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
405
+ console.log('ProcessorType = ', this.ProcessorType);
406
+ if (this.EditingApplication != null) {
407
+ this.ApplicationFormGroup = this.formBldr.group({
408
+ name: [this.EditingApplication.Application?.Name, Validators.required],
409
+ description: [
410
+ this.EditingApplication.Application?.Description,
411
+ Validators.required,
412
+ ],
413
+ route: [
414
+ this.EditingApplication.LookupConfig?.PathRegex.replace('.*', '') ||
415
+ '/',
416
+ Validators.required,
417
+ ],
418
+ // priority: [
419
+ // this.EditingApplication.Application?.Priority || 10000,
420
+ // Validators.required,
421
+ // ],
422
+ procType: [this.ProcessorType, [Validators.required]],
423
+ });
424
+ this.setupBuildForm();
425
+ this.setupSecurityForm();
426
+ this.setupProcessorTypeSubForm();
427
+ }
428
+ }
429
+ setupBuildForm() {
430
+ this.ApplicationFormGroup.addControl('hasBuild', this.formBldr.control(!!this.EditingApplication.LowCodeUnit?.SourceControlLookup || false, [Validators.required]));
431
+ this.ApplicationFormGroup.addControl('sourceControlLookup', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SourceControlLookup || '', []));
432
+ }
433
+ setupDfsForm() {
434
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
435
+ this.ApplicationFormGroup.addControl('defaultFile', this.formBldr.control(this.EditingApplication.Processor?.DefaultFile || 'index.html', [Validators.required]));
436
+ this.ApplicationFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
437
+ }
438
+ setupLCUAPIForm() {
439
+ this.ApplicationFormGroup.addControl('methods', this.formBldr.control(this.EditingApplication.LookupConfig?.AllowedMethods?.join(' ') || '', []));
440
+ this.ApplicationFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
441
+ this.ApplicationFormGroup.addControl('security', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Security || '', [Validators.required]));
442
+ }
443
+ setupLCUApplicationPointerForm() {
444
+ this.ApplicationFormGroup.addControl('applicationId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ApplicationID || '', [Validators.required]));
445
+ }
446
+ setupLCUGitHubForm() {
447
+ this.ApplicationFormGroup.addControl('build', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Build || 'latest', [Validators.required]));
448
+ }
449
+ setupLCUGitHubOAuthForm() {
450
+ this.ApplicationFormGroup.addControl('clientId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientID || '', [Validators.required]));
451
+ this.ApplicationFormGroup.addControl('clientSecret', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientSecret || '', [Validators.required]));
452
+ }
453
+ setupLCUNPMForm() {
454
+ // this.ApplicationFormGroup.addControl(
455
+ // 'package',
456
+ // this.formBldr.control(
457
+ // this.EditingApplication.LowCodeUnit?.Package || '',
458
+ // [Validators.required]
459
+ // )
460
+ // );
461
+ // this.ApplicationFormGroup.addControl(
462
+ // 'version',
463
+ // this.formBldr.control(
464
+ // this.EditingApplication.LowCodeUnit?.Version || '',
465
+ // [Validators.required]
466
+ // )
467
+ // );
468
+ }
469
+ setupLCUSPAForm() {
470
+ this.ApplicationFormGroup.addControl('spaRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SPARoot || '', [Validators.required]));
471
+ }
472
+ setupLCUZipForm() {
473
+ this.ApplicationFormGroup.addControl('zipFile', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ZipFile || '', [Validators.required]));
474
+ }
475
+ setupLcuTypeSubForm() {
476
+ this.cleanupLcuTypeSubForm();
477
+ // this.ApplicationFormGroup.removeControl('package');
478
+ // this.ApplicationFormGroup.removeControl('version');
479
+ if (this.LCUType) {
480
+ switch (this.LCUType) {
481
+ case 'API':
482
+ this.setupLCUAPIForm();
483
+ break;
484
+ case 'ApplicationPointer':
485
+ this.setupLCUApplicationPointerForm();
486
+ break;
487
+ case 'GitHub':
488
+ this.setupLCUGitHubForm();
489
+ break;
490
+ case 'GitHubOAuth':
491
+ this.setupLCUGitHubOAuthForm();
492
+ break;
493
+ case 'NPM':
494
+ this.setupLCUNPMForm();
495
+ break;
496
+ case 'SPA':
497
+ this.setupLCUSPAForm();
498
+ break;
499
+ case 'Zip':
500
+ this.setupLCUZipForm();
501
+ break;
502
+ }
503
+ }
504
+ }
505
+ setupOAuthForm() {
506
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
507
+ this.ApplicationFormGroup.addControl('scopes', this.formBldr.control(this.EditingApplication.Processor?.Scopes?.Join(' ') || '', [Validators.required]));
508
+ this.ApplicationFormGroup.addControl('tokenLookup', this.formBldr.control(this.EditingApplication.Processor?.TokenLookup || '', [Validators.required]));
509
+ this.ApplicationFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
510
+ }
511
+ setupProxyForm() {
512
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
513
+ this.ApplicationFormGroup.addControl('inboundPath', this.formBldr.control(this.EditingApplication.Processor?.InboundPath || '', [Validators.required]));
514
+ this.ApplicationFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
515
+ }
516
+ setupProcessorTypeSubForm() {
517
+ this.cleanupProcessorTypeSubForm();
518
+ if (this.ProcessorType) {
519
+ switch (this.ProcessorType) {
520
+ case 'DFS':
521
+ this.setupDfsForm();
522
+ break;
523
+ case 'OAuth':
524
+ this.setupOAuthForm();
525
+ break;
526
+ case 'Proxy':
527
+ this.setupProxyForm();
528
+ break;
529
+ case 'Redirect':
530
+ this.setupRedirectForm();
531
+ break;
532
+ }
533
+ }
534
+ this.setupLcuTypeSubForm();
535
+ }
536
+ setupRedirectForm() {
537
+ this.ApplicationFormGroup.addControl('redirect', this.formBldr.control(this.EditingApplication.Processor?.Redirect || '', [
538
+ Validators.required,
539
+ ]));
540
+ this.ApplicationFormGroup.addControl('permanent', this.formBldr.control(this.EditingApplication.Processor?.Permanent || false, []));
541
+ this.ApplicationFormGroup.addControl('preserveMethod', this.formBldr.control(this.EditingApplication.Processor?.PreserveMethod || false, []));
542
+ this.DetermineTooltipText();
543
+ }
544
+ setupSecurityForm() {
545
+ this.ApplicationFormGroup.addControl('isPrivate', this.formBldr.control(this.EditingApplication.LookupConfig?.IsPrivate || false, [Validators.required]));
546
+ this.ApplicationFormGroup.addControl('isTriggerSignIn', this.formBldr.control(this.EditingApplication.LookupConfig?.IsTriggerSignIn || false, [Validators.required]));
547
+ }
548
+ }
549
+ AppsFlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AppsFlowComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ApplicationsFlowService }, { token: i3.EaCService }], target: i0.ɵɵFactoryTarget.Component });
550
+ AppsFlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: AppsFlowComponent, selector: "lcu-apps-flow", inputs: { Data: ["data", "Data"] }, viewQueries: [{ propertyName: "SourceControlFormControls", first: true, predicate: SourceControlFormControlsComponent, descendants: true }], ngImport: i0, template: "<div>\n <div *ngIf=\"EditingApplication?.Application\">\n <h2>\n <button\n mat-icon-button\n matTooltip=\"Back to Routes\"\n (click)=\"SetEditingApplication(null)\"\n >\n <mat-icon>arrow_back</mat-icon>\n </button>\n\n {{ CurrentApplicationRoute }} / {{ EditingApplication.Application?.Name }}\n </h2>\n </div>\n <form\n [formGroup]=\"ApplicationFormGroup\"\n (ngSubmit)=\"SaveApplication()\"\n *ngIf=\"EditingApplication\"\n >\n\n <div\n fxLayout=\"row wrap\"\n fxLayoutAlign=\"center start\"\n fxLayout.lt-md=\"column\"\n >\n <div class=\"form-card\" fxFlex=\"70%\" fxFlex.lt-md=\"100%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title>\n <ng-container *ngIf=\"EditingApplication?.Application\">\n Edit Application:\n {{ EditingApplication.Application?.Name }}\n </ng-container>\n\n <ng-container *ngIf=\"!EditingApplication?.Application\">\n Create an Application\n </ng-container>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Name\"\n formControlName=\"name\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <textarea\n matInput\n placeholder=\"Description\"\n formControlName=\"description\"\n rows=\"3\"\n required\n ></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Route\"\n formControlName=\"route\"\n required\n />\n </mat-form-field>\n </mat-card-content>\n </mat-card>\n </div>\n\n <div class=\"form-card\" fxFlex=\"35%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title> Processor Details </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"procType\"\n (selectionChange)=\"ProcessorTypeChanged($event)\"\n required\n >\n <mat-option value=\"DFS\">View Package</mat-option>\n\n <mat-option value=\"Redirect\">Redirect</mat-option>\n\n <mat-option value=\"Proxy\">Proxy</mat-option>\n\n <mat-option value=\"OAuth\">OAuth</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"ProcessorType\">\n <div *ngSwitchCase=\"'DFS'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Default File\"\n formControlName=\"defaultFile\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"NPM\">NPM</mat-option>\n\n <mat-option value=\"GitHub\">GitHub</mat-option>\n\n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHub'\">\n <lcu-source-control-form-controls\n [build-path]=\"EditingApplication?.LowCodeUnit?.Path\"\n [form-group]=\"ApplicationFormGroup\"\n [source-control]=\"DefaultSourceControl\"\n [use-branches]=\"false\"\n [use-build-path]=\"true\"\n ></lcu-source-control-form-controls>\n\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n SourceControlFormControls?.RepositoryFormControl?.valid\n \"\n >\n <input\n matInput\n placeholder=\"Build\"\n formControlName=\"build\"\n required\n />\n\n <mat-hint>\n Current Build:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'NPM'\">\n <lcu-npm-package-select\n [npm-package]=\"EditingApplication?.LowCodeUnit?.Package\"\n [npm-package-version]=\"\n EditingApplication?.LowCodeUnit?.Version\n \"\n [form-group]=\"ApplicationFormGroup\"\n ></lcu-npm-package-select>\n\n <mat-hint>\n Current Version:\n {{ EditingApplication?.LowCodeUnit?.CurrentVersion }}\n </mat-hint>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'OAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Scopes (space separated)\"\n formControlName=\"scopes\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Token Lookup\"\n formControlName=\"tokenLookup\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"GitHubOAuth\">GitHub</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHubOAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client ID\"\n formControlName=\"clientId\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client Secret\"\n formControlName=\"clientSecret\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Proxy'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Inbound Path\"\n formControlName=\"inboundPath\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"API\">API</mat-option>\n\n <mat-option value=\"SPA\">Single Page Application</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'API'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Allowed Methods (separate with spaces)\"\n formControlName=\"methods\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Security ({header}~{value})\"\n formControlName=\"security\"\n required\n />\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'SPA'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"SPA Root\"\n formControlName=\"spaRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Redirect'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Redirect URL\"\n formControlName=\"redirect\"\n required\n />\n </mat-form-field>\n\n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"permanent\">\n Is Permanent?\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"spread\"\n formControlName=\"preserveMethod\"\n >\n Preserve Method?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n (mouseenter)=\"DetermineTooltipText()\"\n matTooltip={{redirectTooltip}}\n >\n info_outline\n </mat-icon>\n\n <!-- <mat-icon\n *ngIf=\"!IsPermanent && !IsPreserve\"\n\n class=\"spread\"\n matSuffix\n matTooltip=\"302 \u2013 Not Permanent and Not Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n <!-- <mat-icon\n *ngIf=\"!IsPermanent && IsPreserve\"\n class=\"spread\"\n matSuffix\n matTooltip=\"307 \u2013 Not Permanent and Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n <!-- <mat-icon\n *ngIf=\"IsPermanent && IsPreserve\"\n class=\"spread\"\n matSuffix\n matTooltip=\"308 \u2013 Permanent and Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n \n\n <!-- <mat-icon\n class=\"spread\"\n matSuffix\n matTooltip=\"Values used to control the redirect type. Permanent and Not Preserve = 301; Not Permanent and Not Preserve = 302; Permanent and Preserve = 308; Not Permanent and Not Preserve = 307;\"\n >\n info_outline\n </mat-icon> -->\n </div>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n\n <div class=\"form-card\" fxFlex=\"35%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title> Security Settings </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"isPrivate\"\n matTooltip=\"Is Secure Application?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Secured Application is one that requires the user to be authenticated to use the application. The application is hosted behind an identity wall.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <div>\n <div *ngIf=\"IsPrivateFormControl.value\">\n <div>\n <mat-slide-toggle formControlName=\"isTriggerSignIn\">\n Is Trigger Sign In Application?\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Trigger Sign In Application will direct the user to sign in if they are not already.\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"spread flow-card\" *ngIf=\"ProcessorType != 'Redirect'\">\n <mat-card-header>\n <mat-card-title *ngIf=\"!HasBuildFormControl.value\">\n Build & Source\n </mat-card-title>\n\n <mat-card-title *ngIf=\"HasBuildFormControl.value\">\n Source Control\n </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"hasBuild\"\n matTooltip=\"Has Build?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"Configure source control, DevOps CI/CD, and artifacts.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n HasBuildFormControl.value && SourceControlLookups?.length > 0\n \"\n >\n <mat-select\n formControlName=\"sourceControlLookup\"\n placeholder=\"Source Control\"\n (selectionChange)=\"SourceControlLookupChanged($event)\"\n [disabled]=\"\n SourceControlFormControls?.Loading || HostingDetails?.Loading\n \"\n >\n <ng-container\n *ngFor=\"let srcCtrlLookup of SourceControlLookups\"\n >\n <mat-option\n [value]=\"srcCtrlLookup\"\n *ngIf=\"SourceControls[srcCtrlLookup]; let srcCtrl\"\n >\n {{ srcCtrl.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <div *ngIf=\"HasBuildFormControl?.value\">\n <h3>\n @{{\n SourceControlFormControls?.OrganizationFormControl?.value ||\n SourceControl?.Organization\n }}/{{\n SourceControlFormControls?.RepositoryFormControl?.value ||\n SourceControl?.Repository\n }}\n </h3>\n\n <p>Organization and Repository pulled from build settings</p>\n\n <mat-hint>\n CurrentBuild:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </div>\n </mat-form-field>\n\n <div *ngIf=\"SourceControlLookups?.length < 0\">\n <h3>\n Create source control locations under the DevOps tab above.\n </h3>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n\n <div class=\"spread\">\n <div fxFlex></div>\n\n <button mat-button type=\"button\" (click)=\"SetEditingApplication(null)\">\n <mat-icon>cancel</mat-icon> Cancel\n </button>\n\n <div fxFlex></div>\n\n <button\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"!ApplicationFormGroup.valid || !ApplicationFormGroup.dirty\"\n >\n <mat-icon>save</mat-icon> Save Application\n </button>\n\n <div fxFlex></div>\n </div>\n </form>\n\n <div class=\"spread\" *ngIf=\"!EditingApplication\">\n <span class=\"apps-actions\">\n <button mat-raised-button color=\"accent\" (click)=\"CreateNewApplication()\">\n <mat-icon color=\"primary\">add</mat-icon> Create New\n </button>\n </span>\n\n <div class=\"spread\" *ngIf=\"!CurrentApplicationRoute\">\n <div *ngIf=\"ApplicationRoutes?.length <= 0\">\n <h2>No applications created, create your first application.</h2>\n </div>\n\n <div *ngIf=\"ApplicationRoutes?.length > 0\">\n <h2>Project Routes</h2>\n\n <div\n fxLayout=\"row wrap\"\n fxLayout.lt-md=\"column\"\n *ngIf=\"ApplicationRoutes\"\n >\n <div\n fxFlex=\"20%\"\n fxFlex.lt-md=\"100%\"\n *ngFor=\"let appRoute of ApplicationRoutes\"\n >\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <!-- <img mat-card-avatar=\"/assets/images/project-icon.png\" /> -->\n\n <mat-card-title\n class=\"mat-subheading-2\"\n [matTooltip]=\"appRoute\"\n >\n {{ appRoute }}\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"spread\"></div>\n </mat-card-content>\n\n <mat-card-actions>\n <div class=\"data-app-actions\">\n <div fxFlex></div>\n\n <a\n mat-icon-button\n href=\"https://{{ PrimaryHost }}{{ appRoute }}\"\n target=\"_blank\"\n >\n <mat-icon matTooltip=\"Launch\">launch</mat-icon>\n </a>\n\n <button\n mat-icon-button\n color=\"accent\"\n (click)=\"EditApplicationRouteClicked(appRoute)\"\n >\n <mat-icon matTooltip=\"Edit Application Route\">\n settings\n </mat-icon>\n </button>\n </div>\n\n <div class=\"data-app-fakes\">\n <div fxFlex></div>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n </div>\n </mat-card-actions>\n </mat-card>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"CurrentApplicationRoute\">\n <h2>\n <button\n mat-icon-button\n matTooltip=\"Back to Routes\"\n (click)=\"CurrentApplicationRoute = null\"\n >\n <mat-icon>arrow_back</mat-icon>\n </button>\n\n {{ CurrentApplicationRoute }} Routes\n </h2>\n\n <div fxLayout=\"row wrap\" fxLayout.lt-md=\"column\">\n <ng-container *ngFor=\"let appLookup of CurrentRouteApplicationLookups\">\n <div\n fxFlex=\"30%\"\n fxFlex.lt-md=\"100%\"\n *ngIf=\"\n RoutedApplications[CurrentApplicationRoute][appLookup];\n let app\n \"\n >\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <!-- <img mat-card-avatar=\"/assets/images/project-icon.png\" /> -->\n\n <mat-card-title\n class=\"mat-subheading-2\"\n [matTooltip]=\"app.Application.Description\"\n >\n {{ app.Application.Name }}\n </mat-card-title>\n\n <mat-card-subtitle\n class=\"mat-subheading-1\"\n [matTooltip]=\"\n app.LowCodeUnit?.CurrentVersion ||\n app.LowCodeUnit?.CurrentBuild\n \"\n >\n @{{\n app.LowCodeUnit?.CurrentVersion ||\n app.LowCodeUnit?.CurrentBuild ||\n app.Processor?.Redirect ||\n \"No version deployed\"\n }}\n </mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"spread\"></div>\n </mat-card-content>\n\n <mat-card-actions>\n <div class=\"data-app-actions\">\n <div fxFlex></div>\n\n <a\n mat-icon-button\n href=\"https://{{ PrimaryHost }}{{\n app.LookupConfig.PathRegex.replace('.*', '')\n }}\"\n target=\"_blank\"\n >\n <mat-icon matTooltip=\"Launch\">launch</mat-icon>\n </a>\n\n <a\n *ngIf=\"GetProcessorType(appLookup) === 'DFS'\"\n mat-icon-button\n (click)=\"Unpack(appLookup, app)\"\n target=\"_blank\"\n matTooltip=\"Unpack {{\n app.LowCodeUnit?.Version || app.LowCodeUnit?.Build\n }}\"\n >\n <mat-icon>cloud_upload</mat-icon>\n </a>\n\n <button\n mat-icon-button\n (click)=\"SetEditingApplication(appLookup)\"\n >\n <mat-icon matTooltip=\"Edit Application\"> edit </mat-icon>\n </button>\n\n <button\n mat-icon-button\n color=\"warn\"\n (click)=\"DeleteApplication(appLookup, app.Application.Name)\"\n >\n <mat-icon matTooltip=\"Delete {{ app.Application.Name }}\">\n delete_forever\n </mat-icon>\n </button>\n </div>\n\n <div class=\"data-app-fakes\">\n <div fxFlex></div>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled \n *ngIf=\"GetProcessorType(appLookup) === 'DFS'\">\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n </div>\n </mat-card-actions>\n </mat-card>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";@import\"https://fonts.googleapis.com/css?family=Encode+Sans+Condensed:400,900&display=swap\";@import\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,700&display=swap\";.disable-autofill-background-default input:-webkit-autofill,.disable-autofill-background-default input:-webkit-autofill:hover,.disable-autofill-background-default input:-webkit-autofill:focus,.disable-autofill-background-default textarea:-webkit-autofill,.disable-autofill-background-default textarea:-webkit-autofill:hover,.disable-autofill-background-default textarea:-webkit-autofill:focus,.disable-autofill-background-default select:-webkit-autofill,.disable-autofill-background-default select:-webkit-autofill:hover,.disable-autofill-background-default select:-webkit-autofill:focus{-webkit-transition:background-color 5000s!important;transition:background-color 5000s!important}.list-item-disabled{opacity:.5;filter:alpha(opacity=50);cursor:not-allowed!important}.filler{flex:1 1 auto;display:inline-block!important}.sticky{position:sticky;z-index:750;top:0}.inline{display:inline-block}.contents,.page-element{display:contents}.mat-spinner{margin:auto}.mat-full-width{width:100%}.spread{margin:2rem}.spread-thin{margin:1rem}.overlay{position:sticky!important}.overlay.top{top:0}.overlay.bottom{bottom:0}.margin-0{margin:0!important}.margin-top-0,.margin-y-0{margin-top:0!important}.margin-right-0,.margin-x-0{margin-right:0!important}.margin-bottom-0,.margin-y-0{margin-bottom:0!important}.margin-left-0,.margin-x-0{margin-left:0!important}.margin-1{margin:.25rem!important}.margin-top-1,.margin-y-1{margin-top:.25rem!important}.margin-right-1,.margin-x-1{margin-right:.25rem!important}.margin-bottom-1,.margin-y-1{margin-bottom:.25rem!important}.margin-left-1,.margin-x-1{margin-left:.25rem!important}.margin-2{margin:.5rem!important}.margin-top-2,.margin-y-2{margin-top:.5rem!important}.margin-right-2,.margin-x-2{margin-right:.5rem!important}.margin-bottom-2,.margin-y-2{margin-bottom:.5rem!important}.margin-left-2,.margin-x-2{margin-left:.5rem!important}.margin-3{margin:1rem!important}.margin-top-3,.margin-y-3{margin-top:1rem!important}.margin-top-bottom-3{margin:1rem 0!important}.margin-right-3,.margin-x-3{margin-right:1rem!important}.margin-bottom-3,.margin-y-3{margin-bottom:1rem!important}.margin-left-3,.margin-x-3{margin-left:1rem!important}.margin-4{margin:2rem!important}.margin-top-4,.margin-y-4{margin-top:2rem!important}.margin-right-4,.margin-x-4{margin-right:2rem!important}.margin-bottom-4,.margin-y-4{margin-bottom:2rem!important}.margin-left-4,.margin-x-4{margin-left:2rem!important}.margin-right-5,.margin-x-5{margin-right:4rem!important}.margin-bottom-5,.margin-y-5{margin-bottom:4rem!important}.margin-left-5,.margin-x-5{margin-left:4rem!important}.margin-5{margin:4rem!important}.margin-top-5,.margin-y-5{margin-top:4rem!important}.margin-right-6,.margin-x-6{margin-right:4.5rem!important}.margin-bottom-6,.margin-y-6{margin-bottom:4.5rem!important}.margin-left-6,.margin-x-6{margin-left:4.5rem!important}.margin-7{margin:6rem!important}.margin-top-7,.margin-y-7{margin-top:6rem!important}.margin-right-7,.margin-x-7{margin-right:6rem!important}.margin-bottom-7,.margin-y-7{margin-bottom:6rem!important}.margin-left-7,.margin-x-7{margin-left:6rem!important}.margin-8{margin:7.5rem!important}.margin-top-8,.margin-y-8{margin-top:7.5rem!important}.margin-right-8,.margin-x-8{margin-right:7.5rem!important}.margin-bottom-8,.margin-y-8{margin-bottom:7.5rem!important}.margin-left-8,.margin-x-8{margin-left:7.5rem!important}.margin-9{margin:9rem!important}.margin-top-9,.margin-y-9{margin-top:9rem!important}.margin-right-9,.margin-x-9{margin-right:9rem!important}.margin-bottom-9,.margin-y-9{margin-bottom:9rem!important}.margin-left-9,.margin-x-9{margin-left:9rem!important}.padding-0{padding:0!important}.padding-top-0,.padding-y-0{padding-top:0!important}.padding-right-0,.padding-x-0{padding-right:0!important}.padding-bottom-0,.padding-y-0{padding-bottom:0!important}.padding-left-0,.padding-x-0{padding-left:0!important}.padding-1{padding:.25rem!important}.padding-top-1,.padding-y-1{padding-top:.25rem!important}.padding-right-1,.padding-x-1{padding-right:.25rem!important}.padding-bottom-1,.padding-y-1{padding-bottom:.25rem!important}.padding-left-1,.padding-x-1{padding-left:.25rem!important}.padding-2{padding:.5rem!important}.padding-top-2,.padding-y-2{padding-top:.5rem!important}.padding-right-2,.padding-x-2{padding-right:.5rem!important}.padding-bottom-2,.padding-y-2{padding-bottom:.5rem!important}.padding-left-2,.padding-x-2{padding-left:.5rem!important}.padding-3{padding:1rem!important}.padding-top-3,.padding-y-3{padding-top:1rem!important}.padding-right-3,.padding-x-3{padding-right:1rem!important}.padding-bottom-3,.padding-y-3{padding-bottom:1rem!important}.padding-left-3,.padding-x-3{padding-left:1rem!important}.padding-4{padding:2rem!important}.padding-top-4,.padding-y-4{padding-top:2rem!important}.padding-right-4,.padding-x-4{padding-right:2rem!important}.padding-bottom-4,.padding-y-4{padding-bottom:2rem!important}.padding-left-4,.padding-x-4{padding-left:2rem!important}.padding-5{padding:4rem!important}.padding-top-5,.padding-y-5{padding-top:4rem!important}.padding-right-5,.padding-x-5{padding-right:4rem!important}.padding-bottom-5,.padding-y-5{padding-bottom:4rem!important}.padding-left-5,.padding-x-5{padding-left:4rem!important}.margin-n1{margin:-.25rem!important}.margin-top-n1,.margin-y-n1{margin-top:-.25rem!important}.margin-right-n1,.margin-x-n1{margin-right:-.25rem!important}.margin-bottom-n1,.margin-y-n1{margin-bottom:-.25rem!important}.margin-left-n1,.margin-x-n1{margin-left:-.25rem!important}.margin-n2{margin:-.5rem!important}.margin-top-n2,.margin-y-n2{margin-top:-.5rem!important}.margin-right-n2,.margin-x-n2{margin-right:-.5rem!important}.margin-bottom-n2,.margin-y-n2{margin-bottom:-.5rem!important}.margin-left-n2,.margin-x-n2{margin-left:-.5rem!important}.margin-n3{margin:-1rem!important}.margin-top-n3,.margin-y-n3{margin-top:-1rem!important}.margin-right-n3,.margin-x-n3{margin-right:-1rem!important}.margin-bottom-n3,.margin-y-n3{margin-bottom:-1rem!important}.margin-left-n3,.margin-x-n3{margin-left:-1rem!important}.margin-n4{margin:-2rem!important}.margin-top-n4,.margin-y-n4{margin-top:-2rem!important}.margin-right-n4,.margin-x-n4{margin-right:-2rem!important}.margin-bottom-n4,.margin-y-n4{margin-bottom:-2rem!important}.margin-left-n4,.margin-x-n4{margin-left:-2rem!important}.margin-n5{margin:-4rem!important}.margin-top-n5,.margin-y-n5{margin-top:-4rem!important}.margin-right-n5,.margin-x-n5{margin-right:-4rem!important}.margin-bottom-n5,.margin-y-n5{margin-bottom:-4rem!important}.margin-left-n5,.margin-x-n5{margin-left:-4rem!important}.margin-auto{margin:auto!important}.margin-top-auto,.margin-y-auto{margin-top:auto!important}.margin-right-auto,.margin-x-auto{margin-right:auto!important}.margin-bottom-auto,.margin-y-auto{margin-bottom:auto!important}.margin-left-auto,.margin-x-auto{margin-left:auto!important}@media (min-width: 576px){.margin-sm-0{margin:0!important}.margin-top-sm-0,.margin-y-sm-0{margin-top:0!important}.margin-right-sm-0,.margin-x-sm-0{margin-right:0!important}.margin-bottom-sm-0,.margin-y-sm-0{margin-bottom:0!important}.margin-left-sm-0,.margin-x-sm-0{margin-left:0!important}.margin-sm-1{margin:.25rem!important}.margin-top-sm-1,.margin-y-sm-1{margin-top:.25rem!important}.margin-right-sm-1,.margin-x-sm-1{margin-right:.25rem!important}.margin-bottom-sm-1,.margin-y-sm-1{margin-bottom:.25rem!important}.margin-left-sm-1,.margin-x-sm-1{margin-left:.25rem!important}.margin-sm-2{margin:.5rem!important}.margin-top-sm-2,.margin-y-sm-2{margin-top:.5rem!important}.margin-right-sm-2,.margin-x-sm-2{margin-right:.5rem!important}.margin-bottom-sm-2,.margin-y-sm-2{margin-bottom:.5rem!important}.margin-left-sm-2,.margin-x-sm-2{margin-left:.5rem!important}.margin-sm-3{margin:1rem!important}.margin-top-sm-3,.margin-y-sm-3{margin-top:1rem!important}.margin-right-sm-3,.margin-x-sm-3{margin-right:1rem!important}.margin-bottom-sm-3,.margin-y-sm-3{margin-bottom:1rem!important}.margin-left-sm-3,.margin-x-sm-3{margin-left:1rem!important}.margin-sm-4{margin:2rem!important}.margin-top-sm-4,.margin-y-sm-4{margin-top:2rem!important}.margin-right-sm-4,.margin-x-sm-4{margin-right:2rem!important}.margin-bottom-sm-4,.margin-y-sm-4{margin-bottom:2rem!important}.margin-left-sm-4,.margin-x-sm-4{margin-left:2rem!important}.margin-sm-5{margin:4rem!important}.margin-top-sm-5,.margin-y-sm-5{margin-top:4rem!important}.margin-right-sm-5,.margin-x-sm-5{margin-right:4rem!important}.margin-bottom-sm-5,.margin-y-sm-5{margin-bottom:4rem!important}.margin-left-sm-5,.margin-x-sm-5{margin-left:4rem!important}.padding-sm-0{padding:0!important}.padding-top-sm-0,.padding-y-sm-0{padding-top:0!important}.padding-right-sm-0,.padding-x-sm-0{padding-right:0!important}.padding-bottom-sm-0,.padding-y-sm-0{padding-bottom:0!important}.padding-left-sm-0,.padding-x-sm-0{padding-left:0!important}.padding-sm-1{padding:.25rem!important}.padding-top-sm-1,.padding-y-sm-1{padding-top:.25rem!important}.padding-right-sm-1,.padding-x-sm-1{padding-right:.25rem!important}.padding-bottom-sm-1,.padding-y-sm-1{padding-bottom:.25rem!important}.padding-left-sm-1,.padding-x-sm-1{padding-left:.25rem!important}.padding-sm-2{padding:.5rem!important}.padding-top-sm-2,.padding-y-sm-2{padding-top:.5rem!important}.padding-right-sm-2,.padding-x-sm-2{padding-right:.5rem!important}.padding-bottom-sm-2,.padding-y-sm-2{padding-bottom:.5rem!important}.padding-left-sm-2,.padding-x-sm-2{padding-left:.5rem!important}.padding-sm-3{padding:1rem!important}.padding-top-sm-3,.padding-y-sm-3{padding-top:1rem!important}.padding-right-sm-3,.padding-x-sm-3{padding-right:1rem!important}.padding-bottom-sm-3,.padding-y-sm-3{padding-bottom:1rem!important}.padding-left-sm-3,.padding-x-sm-3{padding-left:1rem!important}.padding-sm-4{padding:2rem!important}.padding-top-sm-4,.padding-y-sm-4{padding-top:2rem!important}.padding-right-sm-4,.padding-x-sm-4{padding-right:2rem!important}.padding-bottom-sm-4,.padding-y-sm-4{padding-bottom:2rem!important}.padding-left-sm-4,.padding-x-sm-4{padding-left:2rem!important}.padding-sm-5{padding:4rem!important}.padding-top-sm-5,.padding-y-sm-5{padding-top:4rem!important}.padding-right-sm-5,.padding-x-sm-5{padding-right:4rem!important}.padding-bottom-sm-5,.padding-y-sm-5{padding-bottom:4rem!important}.padding-left-sm-5,.padding-x-sm-5{padding-left:4rem!important}.margin-sm-n1{margin:-.25rem!important}.margin-top-sm-n1,.margin-y-sm-n1{margin-top:-.25rem!important}.margin-right-sm-n1,.margin-x-sm-n1{margin-right:-.25rem!important}.margin-bottom-sm-n1,.margin-y-sm-n1{margin-bottom:-.25rem!important}.margin-left-sm-n1,.margin-x-sm-n1{margin-left:-.25rem!important}.margin-sm-n2{margin:-.5rem!important}.margin-top-sm-n2,.margin-y-sm-n2{margin-top:-.5rem!important}.margin-right-sm-n2,.margin-x-sm-n2{margin-right:-.5rem!important}.margin-bottom-sm-n2,.margin-y-sm-n2{margin-bottom:-.5rem!important}.margin-left-sm-n2,.margin-x-sm-n2{margin-left:-.5rem!important}.margin-sm-n3{margin:-1rem!important}.margin-top-sm-n3,.margin-y-sm-n3{margin-top:-1rem!important}.margin-right-sm-n3,.margin-x-sm-n3{margin-right:-1rem!important}.margin-bottom-sm-n3,.margin-y-sm-n3{margin-bottom:-1rem!important}.margin-left-sm-n3,.margin-x-sm-n3{margin-left:-1rem!important}.margin-sm-n4{margin:-2rem!important}.margin-top-sm-n4,.margin-y-sm-n4{margin-top:-2rem!important}.margin-right-sm-n4,.margin-x-sm-n4{margin-right:-2rem!important}.margin-bottom-sm-n4,.margin-y-sm-n4{margin-bottom:-2rem!important}.margin-left-sm-n4,.margin-x-sm-n4{margin-left:-2rem!important}.margin-sm-n5{margin:-4rem!important}.margin-top-sm-n5,.margin-y-sm-n5{margin-top:-4rem!important}.margin-right-sm-n5,.margin-x-sm-n5{margin-right:-4rem!important}.margin-bottom-sm-n5,.margin-y-sm-n5{margin-bottom:-4rem!important}.margin-left-sm-n5,.margin-x-sm-n5{margin-left:-4rem!important}.margin-sm-auto{margin:auto!important}.margin-top-sm-auto,.margin-y-sm-auto{margin-top:auto!important}.margin-right-sm-auto,.margin-x-sm-auto{margin-right:auto!important}.margin-bottom-sm-auto,.margin-y-sm-auto{margin-bottom:auto!important}.margin-left-sm-auto,.margin-x-sm-auto{margin-left:auto!important}}@media (min-width: 768px){.margin-md-0{margin:0!important}.margin-top-md-0,.margin-y-md-0{margin-top:0!important}.margin-right-md-0,.margin-x-md-0{margin-right:0!important}.margin-bottom-md-0,.margin-y-md-0{margin-bottom:0!important}.margin-left-md-0,.margin-x-md-0{margin-left:0!important}.margin-md-1{margin:.25rem!important}.margin-top-md-1,.margin-y-md-1{margin-top:.25rem!important}.margin-right-md-1,.margin-x-md-1{margin-right:.25rem!important}.margin-bottom-md-1,.margin-y-md-1{margin-bottom:.25rem!important}.margin-left-md-1,.margin-x-md-1{margin-left:.25rem!important}.margin-md-2{margin:.5rem!important}.margin-top-md-2,.margin-y-md-2{margin-top:.5rem!important}.margin-right-md-2,.margin-x-md-2{margin-right:.5rem!important}.margin-bottom-md-2,.margin-y-md-2{margin-bottom:.5rem!important}.margin-left-md-2,.margin-x-md-2{margin-left:.5rem!important}.margin-md-3{margin:1rem!important}.margin-top-md-3,.margin-y-md-3{margin-top:1rem!important}.margin-right-md-3,.margin-x-md-3{margin-right:1rem!important}.margin-bottom-md-3,.margin-y-md-3{margin-bottom:1rem!important}.margin-left-md-3,.margin-x-md-3{margin-left:1rem!important}.margin-md-4{margin:2rem!important}.margin-top-md-4,.margin-y-md-4{margin-top:2rem!important}.margin-right-md-4,.margin-x-md-4{margin-right:2rem!important}.margin-bottom-md-4,.margin-y-md-4{margin-bottom:2rem!important}.margin-left-md-4,.margin-x-md-4{margin-left:2rem!important}.margin-md-5{margin:4rem!important}.margin-top-md-5,.margin-y-md-5{margin-top:4rem!important}.margin-right-md-5,.margin-x-md-5{margin-right:4rem!important}.margin-bottom-md-5,.margin-y-md-5{margin-bottom:4rem!important}.margin-left-md-5,.margin-x-md-5{margin-left:4rem!important}.padding-md-0{padding:0!important}.padding-top-md-0,.padding-y-md-0{padding-top:0!important}.padding-right-md-0,.padding-x-md-0{padding-right:0!important}.padding-bottom-md-0,.padding-y-md-0{padding-bottom:0!important}.padding-left-md-0,.padding-x-md-0{padding-left:0!important}.padding-md-1{padding:.25rem!important}.padding-top-md-1,.padding-y-md-1{padding-top:.25rem!important}.padding-right-md-1,.padding-x-md-1{padding-right:.25rem!important}.padding-bottom-md-1,.padding-y-md-1{padding-bottom:.25rem!important}.padding-left-md-1,.padding-x-md-1{padding-left:.25rem!important}.padding-md-2{padding:.5rem!important}.padding-top-md-2,.padding-y-md-2{padding-top:.5rem!important}.padding-right-md-2,.padding-x-md-2{padding-right:.5rem!important}.padding-bottom-md-2,.padding-y-md-2{padding-bottom:.5rem!important}.padding-left-md-2,.padding-x-md-2{padding-left:.5rem!important}.padding-md-3{padding:1rem!important}.padding-top-md-3,.padding-y-md-3{padding-top:1rem!important}.padding-right-md-3,.padding-x-md-3{padding-right:1rem!important}.padding-bottom-md-3,.padding-y-md-3{padding-bottom:1rem!important}.padding-left-md-3,.padding-x-md-3{padding-left:1rem!important}.padding-md-4{padding:2rem!important}.padding-top-md-4,.padding-y-md-4{padding-top:2rem!important}.padding-right-md-4,.padding-x-md-4{padding-right:2rem!important}.padding-bottom-md-4,.padding-y-md-4{padding-bottom:2rem!important}.padding-left-md-4,.padding-x-md-4{padding-left:2rem!important}.padding-md-5{padding:4rem!important}.padding-top-md-5,.padding-y-md-5{padding-top:4rem!important}.padding-right-md-5,.padding-x-md-5{padding-right:4rem!important}.padding-bottom-md-5,.padding-y-md-5{padding-bottom:4rem!important}.padding-left-md-5,.padding-x-md-5{padding-left:4rem!important}.margin-md-n1{margin:-.25rem!important}.margin-top-md-n1,.margin-y-md-n1{margin-top:-.25rem!important}.margin-right-md-n1,.margin-x-md-n1{margin-right:-.25rem!important}.margin-bottom-md-n1,.margin-y-md-n1{margin-bottom:-.25rem!important}.margin-left-md-n1,.margin-x-md-n1{margin-left:-.25rem!important}.margin-md-n2{margin:-.5rem!important}.margin-top-md-n2,.margin-y-md-n2{margin-top:-.5rem!important}.margin-right-md-n2,.margin-x-md-n2{margin-right:-.5rem!important}.margin-bottom-md-n2,.margin-y-md-n2{margin-bottom:-.5rem!important}.margin-left-md-n2,.margin-x-md-n2{margin-left:-.5rem!important}.margin-md-n3{margin:-1rem!important}.margin-top-md-n3,.margin-y-md-n3{margin-top:-1rem!important}.margin-right-md-n3,.margin-x-md-n3{margin-right:-1rem!important}.margin-bottom-md-n3,.margin-y-md-n3{margin-bottom:-1rem!important}.margin-left-md-n3,.margin-x-md-n3{margin-left:-1rem!important}.margin-md-n4{margin:-2rem!important}.margin-top-md-n4,.margin-y-md-n4{margin-top:-2rem!important}.margin-right-md-n4,.margin-x-md-n4{margin-right:-2rem!important}.margin-bottom-md-n4,.margin-y-md-n4{margin-bottom:-2rem!important}.margin-left-md-n4,.margin-x-md-n4{margin-left:-2rem!important}.margin-md-n5{margin:-4rem!important}.margin-top-md-n5,.margin-y-md-n5{margin-top:-4rem!important}.margin-right-md-n5,.margin-x-md-n5{margin-right:-4rem!important}.margin-bottom-md-n5,.margin-y-md-n5{margin-bottom:-4rem!important}.margin-left-md-n5,.margin-x-md-n5{margin-left:-4rem!important}.margin-md-auto{margin:auto!important}.margin-top-md-auto,.margin-y-md-auto{margin-top:auto!important}.margin-right-md-auto,.margin-x-md-auto{margin-right:auto!important}.margin-bottom-md-auto,.margin-y-md-auto{margin-bottom:auto!important}.margin-left-md-auto,.margin-x-md-auto{margin-left:auto!important}}@media (min-width: 992px){.margin-lg-0{margin:0!important}.margin-top-lg-0,.margin-y-lg-0{margin-top:0!important}.margin-right-lg-0,.margin-x-lg-0{margin-right:0!important}.margin-bottom-lg-0,.margin-y-lg-0{margin-bottom:0!important}.margin-left-lg-0,.margin-x-lg-0{margin-left:0!important}.margin-lg-1{margin:.25rem!important}.margin-top-lg-1,.margin-y-lg-1{margin-top:.25rem!important}.margin-right-lg-1,.margin-x-lg-1{margin-right:.25rem!important}.margin-bottom-lg-1,.margin-y-lg-1{margin-bottom:.25rem!important}.margin-left-lg-1,.margin-x-lg-1{margin-left:.25rem!important}.margin-lg-2{margin:.5rem!important}.margin-top-lg-2,.margin-y-lg-2{margin-top:.5rem!important}.margin-right-lg-2,.margin-x-lg-2{margin-right:.5rem!important}.margin-bottom-lg-2,.margin-y-lg-2{margin-bottom:.5rem!important}.margin-left-lg-2,.margin-x-lg-2{margin-left:.5rem!important}.margin-lg-3{margin:1rem!important}.margin-top-lg-3,.margin-y-lg-3{margin-top:1rem!important}.margin-right-lg-3,.margin-x-lg-3{margin-right:1rem!important}.margin-bottom-lg-3,.margin-y-lg-3{margin-bottom:1rem!important}.margin-left-lg-3,.margin-x-lg-3{margin-left:1rem!important}.margin-lg-4{margin:2rem!important}.margin-top-lg-4,.margin-y-lg-4{margin-top:2rem!important}.margin-right-lg-4,.margin-x-lg-4{margin-right:2rem!important}.margin-bottom-lg-4,.margin-y-lg-4{margin-bottom:2rem!important}.margin-left-lg-4,.margin-x-lg-4{margin-left:2rem!important}.margin-lg-5{margin:4rem!important}.margin-top-lg-5,.margin-y-lg-5{margin-top:4rem!important}.margin-right-lg-5,.margin-x-lg-5{margin-right:4rem!important}.margin-bottom-lg-5,.margin-y-lg-5{margin-bottom:4rem!important}.margin-left-lg-5,.margin-x-lg-5{margin-left:4rem!important}.padding-lg-0{padding:0!important}.padding-top-lg-0,.padding-y-lg-0{padding-top:0!important}.padding-right-lg-0,.padding-x-lg-0{padding-right:0!important}.padding-bottom-lg-0,.padding-y-lg-0{padding-bottom:0!important}.padding-left-lg-0,.padding-x-lg-0{padding-left:0!important}.padding-lg-1{padding:.25rem!important}.padding-top-lg-1,.padding-y-lg-1{padding-top:.25rem!important}.padding-right-lg-1,.padding-x-lg-1{padding-right:.25rem!important}.padding-bottom-lg-1,.padding-y-lg-1{padding-bottom:.25rem!important}.padding-left-lg-1,.padding-x-lg-1{padding-left:.25rem!important}.padding-lg-2{padding:.5rem!important}.padding-top-lg-2,.padding-y-lg-2{padding-top:.5rem!important}.padding-right-lg-2,.padding-x-lg-2{padding-right:.5rem!important}.padding-bottom-lg-2,.padding-y-lg-2{padding-bottom:.5rem!important}.padding-left-lg-2,.padding-x-lg-2{padding-left:.5rem!important}.padding-lg-3{padding:1rem!important}.padding-top-lg-3,.padding-y-lg-3{padding-top:1rem!important}.padding-right-lg-3,.padding-x-lg-3{padding-right:1rem!important}.padding-bottom-lg-3,.padding-y-lg-3{padding-bottom:1rem!important}.padding-left-lg-3,.padding-x-lg-3{padding-left:1rem!important}.padding-lg-4{padding:2rem!important}.padding-top-lg-4,.padding-y-lg-4{padding-top:2rem!important}.padding-right-lg-4,.padding-x-lg-4{padding-right:2rem!important}.padding-bottom-lg-4,.padding-y-lg-4{padding-bottom:2rem!important}.padding-left-lg-4,.padding-x-lg-4{padding-left:2rem!important}.padding-lg-5{padding:4rem!important}.padding-top-lg-5,.padding-y-lg-5{padding-top:4rem!important}.padding-right-lg-5,.padding-x-lg-5{padding-right:4rem!important}.padding-bottom-lg-5,.padding-y-lg-5{padding-bottom:4rem!important}.padding-left-lg-5,.padding-x-lg-5{padding-left:4rem!important}.margin-lg-n1{margin:-.25rem!important}.margin-top-lg-n1,.margin-y-lg-n1{margin-top:-.25rem!important}.margin-right-lg-n1,.margin-x-lg-n1{margin-right:-.25rem!important}.margin-bottom-lg-n1,.margin-y-lg-n1{margin-bottom:-.25rem!important}.margin-left-lg-n1,.margin-x-lg-n1{margin-left:-.25rem!important}.margin-lg-n2{margin:-.5rem!important}.margin-top-lg-n2,.margin-y-lg-n2{margin-top:-.5rem!important}.margin-right-lg-n2,.margin-x-lg-n2{margin-right:-.5rem!important}.margin-bottom-lg-n2,.margin-y-lg-n2{margin-bottom:-.5rem!important}.margin-left-lg-n2,.margin-x-lg-n2{margin-left:-.5rem!important}.margin-lg-n3{margin:-1rem!important}.margin-top-lg-n3,.margin-y-lg-n3{margin-top:-1rem!important}.margin-right-lg-n3,.margin-x-lg-n3{margin-right:-1rem!important}.margin-bottom-lg-n3,.margin-y-lg-n3{margin-bottom:-1rem!important}.margin-left-lg-n3,.margin-x-lg-n3{margin-left:-1rem!important}.margin-lg-n4{margin:-2rem!important}.margin-top-lg-n4,.margin-y-lg-n4{margin-top:-2rem!important}.margin-right-lg-n4,.margin-x-lg-n4{margin-right:-2rem!important}.margin-bottom-lg-n4,.margin-y-lg-n4{margin-bottom:-2rem!important}.margin-left-lg-n4,.margin-x-lg-n4{margin-left:-2rem!important}.margin-lg-n5{margin:-4rem!important}.margin-top-lg-n5,.margin-y-lg-n5{margin-top:-4rem!important}.margin-right-lg-n5,.margin-x-lg-n5{margin-right:-4rem!important}.margin-bottom-lg-n5,.margin-y-lg-n5{margin-bottom:-4rem!important}.margin-left-lg-n5,.margin-x-lg-n5{margin-left:-4rem!important}.margin-lg-auto{margin:auto!important}.margin-top-lg-auto,.margin-y-lg-auto{margin-top:auto!important}.margin-right-lg-auto,.margin-x-lg-auto{margin-right:auto!important}.margin-bottom-lg-auto,.margin-y-lg-auto{margin-bottom:auto!important}.margin-left-lg-auto,.margin-x-lg-auto{margin-left:auto!important}}@media (min-width: 1200px){.margin-xl-0{margin:0!important}.margin-top-xl-0,.margin-y-xl-0{margin-top:0!important}.margin-right-xl-0,.margin-x-xl-0{margin-right:0!important}.margin-bottom-xl-0,.margin-y-xl-0{margin-bottom:0!important}.margin-left-xl-0,.margin-x-xl-0{margin-left:0!important}.margin-xl-1{margin:.25rem!important}.margin-top-xl-1,.margin-y-xl-1{margin-top:.25rem!important}.margin-right-xl-1,.margin-x-xl-1{margin-right:.25rem!important}.margin-bottom-xl-1,.margin-y-xl-1{margin-bottom:.25rem!important}.margin-left-xl-1,.margin-x-xl-1{margin-left:.25rem!important}.margin-xl-2{margin:.5rem!important}.margin-top-xl-2,.margin-y-xl-2{margin-top:.5rem!important}.margin-right-xl-2,.margin-x-xl-2{margin-right:.5rem!important}.margin-bottom-xl-2,.margin-y-xl-2{margin-bottom:.5rem!important}.margin-left-xl-2,.margin-x-xl-2{margin-left:.5rem!important}.margin-xl-3{margin:1rem!important}.margin-top-xl-3,.margin-y-xl-3{margin-top:1rem!important}.margin-right-xl-3,.margin-x-xl-3{margin-right:1rem!important}.margin-bottom-xl-3,.margin-y-xl-3{margin-bottom:1rem!important}.margin-left-xl-3,.margin-x-xl-3{margin-left:1rem!important}.margin-xl-4{margin:2rem!important}.margin-top-xl-4,.margin-y-xl-4{margin-top:2rem!important}.margin-right-xl-4,.margin-x-xl-4{margin-right:2rem!important}.margin-bottom-xl-4,.margin-y-xl-4{margin-bottom:2rem!important}.margin-left-xl-4,.margin-x-xl-4{margin-left:2rem!important}.margin-xl-5{margin:4rem!important}.margin-top-xl-5,.margin-y-xl-5{margin-top:4rem!important}.margin-right-xl-5,.margin-x-xl-5{margin-right:4rem!important}.margin-bottom-xl-5,.margin-y-xl-5{margin-bottom:4rem!important}.margin-left-xl-5,.margin-x-xl-5{margin-left:4rem!important}.padding-xl-0{padding:0!important}.padding-top-xl-0,.padding-y-xl-0{padding-top:0!important}.padding-right-xl-0,.padding-x-xl-0{padding-right:0!important}.padding-bottom-xl-0,.padding-y-xl-0{padding-bottom:0!important}.padding-left-xl-0,.padding-x-xl-0{padding-left:0!important}.padding-xl-1{padding:.25rem!important}.padding-top-xl-1,.padding-y-xl-1{padding-top:.25rem!important}.padding-right-xl-1,.padding-x-xl-1{padding-right:.25rem!important}.padding-bottom-xl-1,.padding-y-xl-1{padding-bottom:.25rem!important}.padding-left-xl-1,.padding-x-xl-1{padding-left:.25rem!important}.padding-xl-2{padding:.5rem!important}.padding-top-xl-2,.padding-y-xl-2{padding-top:.5rem!important}.padding-right-xl-2,.padding-x-xl-2{padding-right:.5rem!important}.padding-bottom-xl-2,.padding-y-xl-2{padding-bottom:.5rem!important}.padding-left-xl-2,.padding-x-xl-2{padding-left:.5rem!important}.padding-xl-3{padding:1rem!important}.padding-top-xl-3,.padding-y-xl-3{padding-top:1rem!important}.padding-right-xl-3,.padding-x-xl-3{padding-right:1rem!important}.padding-bottom-xl-3,.padding-y-xl-3{padding-bottom:1rem!important}.padding-left-xl-3,.padding-x-xl-3{padding-left:1rem!important}.padding-xl-4{padding:2rem!important}.padding-top-xl-4,.padding-y-xl-4{padding-top:2rem!important}.padding-right-xl-4,.padding-x-xl-4{padding-right:2rem!important}.padding-bottom-xl-4,.padding-y-xl-4{padding-bottom:2rem!important}.padding-left-xl-4,.padding-x-xl-4{padding-left:2rem!important}.padding-xl-5{padding:4rem!important}.padding-top-xl-5,.padding-y-xl-5{padding-top:4rem!important}.padding-right-xl-5,.padding-x-xl-5{padding-right:4rem!important}.padding-bottom-xl-5,.padding-y-xl-5{padding-bottom:4rem!important}.padding-left-xl-5,.padding-x-xl-5{padding-left:4rem!important}.margin-xl-n1{margin:-.25rem!important}.margin-top-xl-n1,.margin-y-xl-n1{margin-top:-.25rem!important}.margin-right-xl-n1,.margin-x-xl-n1{margin-right:-.25rem!important}.margin-bottom-xl-n1,.margin-y-xl-n1{margin-bottom:-.25rem!important}.margin-left-xl-n1,.margin-x-xl-n1{margin-left:-.25rem!important}.margin-xl-n2{margin:-.5rem!important}.margin-top-xl-n2,.margin-y-xl-n2{margin-top:-.5rem!important}.margin-right-xl-n2,.margin-x-xl-n2{margin-right:-.5rem!important}.margin-bottom-xl-n2,.margin-y-xl-n2{margin-bottom:-.5rem!important}.margin-left-xl-n2,.margin-x-xl-n2{margin-left:-.5rem!important}.margin-xl-n3{margin:-1rem!important}.margin-top-xl-n3,.margin-y-xl-n3{margin-top:-1rem!important}.margin-right-xl-n3,.margin-x-xl-n3{margin-right:-1rem!important}.margin-bottom-xl-n3,.margin-y-xl-n3{margin-bottom:-1rem!important}.margin-left-xl-n3,.margin-x-xl-n3{margin-left:-1rem!important}.margin-xl-n4{margin:-2rem!important}.margin-top-xl-n4,.margin-y-xl-n4{margin-top:-2rem!important}.margin-right-xl-n4,.margin-x-xl-n4{margin-right:-2rem!important}.margin-bottom-xl-n4,.margin-y-xl-n4{margin-bottom:-2rem!important}.margin-left-xl-n4,.margin-x-xl-n4{margin-left:-2rem!important}.margin-xl-n5{margin:-4rem!important}.margin-top-xl-n5,.margin-y-xl-n5{margin-top:-4rem!important}.margin-right-xl-n5,.margin-x-xl-n5{margin-right:-4rem!important}.margin-bottom-xl-n5,.margin-y-xl-n5{margin-bottom:-4rem!important}.margin-left-xl-n5,.margin-x-xl-n5{margin-left:-4rem!important}.margin-xl-auto{margin:auto!important}.margin-top-xl-auto,.margin-y-xl-auto{margin-top:auto!important}.margin-right-xl-auto,.margin-x-xl-auto{margin-right:auto!important}.margin-bottom-xl-auto,.margin-y-xl-auto{margin-bottom:auto!important}.margin-left-xl-auto,.margin-x-xl-auto{margin-left:auto!important}}.h1{font-size:2em}.h2{font-size:1.5em}.h3{font-size:1.17em}.h4{font-size:1em}.h5{font-size:.83em}.h6{font-size:.67em}.cursor-alias{cursor:alias}.cursor-all-scroll{cursor:all-scroll}.cursor-auto{cursor:auto}.cursor-cell{cursor:cell}.cursor-context-menu{cursor:context-menu}.cursor-col-resize{cursor:col-resize}.cursor-copy{cursor:copy}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-e-resize{cursor:e-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-help{cursor:help}.cursor-move{cursor:move}.cursor-n-resize{cursor:n-resize}.cursor-ne-resize{cursor:ne-resize}.cursor-nesw-resize{cursor:nesw-resize}.cursor-ns-resize{cursor:ns-resize}.cursor-nw-resize{cursor:nw-resize}.cursor-nwse-resize{cursor:nwse-resize}.cursor-no-drop{cursor:no-drop}.cursor-none{cursor:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-row-resize{cursor:row-resize}.cursor-s-resize{cursor:s-resize}.cursor-se-resize{cursor:se-resize}.cursor-sw-resize{cursor:sw-resize}.cursor-text{cursor:text}.cursor-w-resize{cursor:w-resize}.cursor-wait{cursor:wait}.cursor-zoom-in{cursor:zoom-in}.cursor-zoom-out{cursor:zoom-out}.mat-tooltip{font-size:16px!important}html,body{height:100%}body{margin:0;padding:0;font-family:opens sans regular,sans-serif}iframe{border:none}.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,Helvetica Neue,sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,Helvetica Neue,sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-subtitle,.mat-card-content{font-size:14px}.mat-checkbox{font-family:Roboto,Helvetica Neue,sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto,Helvetica Neue,sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto,Helvetica Neue,sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-expansion-panel-header{font-family:Roboto,Helvetica Neue,sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(.75);width:133.3333333333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(.75);width:133.3333433333%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.6666666667em;top:calc(100% - 1.7916666667em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);width:133.3333333333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);width:133.3333433333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);width:133.3333533333%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.5416666667em;top:calc(100% - 1.6666666667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59374em) scale(.75);width:133.3333433333%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(.75);width:133.3333433333%}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,Helvetica Neue,sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto,Helvetica Neue,sans-serif}.mat-slider-thumb-label-text{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto,Helvetica Neue,sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:400}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0}.mat-tooltip{font-family:Roboto,Helvetica Neue,sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item,.mat-list-option{font-family:Roboto,Helvetica Neue,sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-simple-snackbar{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale(0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator,.mat-mdc-focus-indicator{position:relative}.title,.header{font-family:Encode Sans Condensed,sans-serif;font-weight:900}.paragraph-title,.tagline{font-family:Open Sans,sans-serif;font-weight:400}.paragraph-title-bold .tagLine-bold{font-family:Open Sans,sans-serif;font-weight:700}.plain-text,.remarks{font-family:Open Sans,sans-serif;font-weight:300}.plain-text-bold{font-family:Open Sans,sans-serif;font-weight:700}.flex-column{box-sizing:border-box;display:flex;flex-direction:column}.flex-row{box-sizing:border-box;display:flex;flex-direction:row}.flex-row-center{align-items:center;justify-content:center}.mat-button-large{line-height:48px;font-size:18px;font-weight:700;padding:0 24px!important}.mat-round{border-radius:.5em}:root{--initial-primary: #4a918e;--initial-accent: #9cd8d7;--initial-warn: #ef4351;--initial-dark-background: #222222;--initial-light-background: #f2f2f2;--initial-light-background: white;--initial-light-text: rgba(0, 0, 0, .87);--initial-dark-text: rgba(255, 255, 255, .87);--background: #050505;--orange-accent: #ff9800;--green-accent: #00e676;--yellow-accent: #fdd835;--purple-accent: #9c27b0;--cyan-accent: rgba(132, 255, 255, .75);--pink-accent: #e91e63;--success: #00e676}body{background-color:var(--initial-dark-background)}::ng-deep .mat-tooltip{font-size:16px!important}:host .valid-control{color:var(--green-accent)}:host .invalid-control{color:var(--theme-warn-500)}:host .actions .item:not(:last-child){margin-right:0}:host .project-thumbnail img{height:50px;width:auto}:host .active{background-color:var(--theme-accent-400);transition:background-color 1s linear}:host .inactive{background-color:#f2f5a900;transition:background-color 1s linear}:host .expansion-panel{width:100%;margin-bottom:10px}:host .expansion-container{max-height:300px;overflow-y:auto}:host .divider-fill-vert{background-color:var(--theme-accent-500);min-height:100%;top:10%;bottom:10%;min-width:5px}:host .divider-fill-hor{background-color:var(--theme-accent-500);height:5px;width:100%}:host .form-disabled{background-color:#797979;opacity:.5;border-radius:4px}::ng-deep input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s;-webkit-text-fill-color:#FFFFFFDE}@media (max-width: 768px){.spread{margin:1em!important}}@media (max-width: 480px){.spread{margin:.5em!important}}.spinner-logo{display:none!important}.flow-card{background-color:#2f2f2f!important}:host ::ng-deep #app-back-button{margin-left:-37px;margin-top:15px}:host ::ng-deep .apps-actions{float:right}:host ::ng-deep .mat-card .mat-card-content{text-align:center;overflow:hidden}:host ::ng-deep .mat-card .mat-card-actions .data-app-actions{display:none!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes{display:flex!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes .mat-icon{font-size:8px}:host ::ng-deep .mat-card:hover .mat-card-actions .data-app-actions{display:flex!important}:host ::ng-deep .mat-card:hover .mat-card-actions .data-app-fakes{display:none!important}:host ::ng-deep .mat-subtitle .mat-chip-list{display:inline-block}:host ::ng-deep .mat-form-field{margin-top:.5em;margin-bottom:.5em}:host ::ng-deep .mat-form-field.with-hint{margin-bottom:1em}@media (max-width: 768px){:host ::ng-deep .form-card{width:100%}:host ::ng-deep .mat-card .mat-card-actions .data-app-actions{display:flex!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes{display:none!important}}:host ::ng-deep .domain-item{border-radius:5;border:var(--theme-accent-500) solid 1px}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i6.MatCardHeader, selector: "mat-card-header" }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.SourceControlFormControlsComponent, selector: "lcu-source-control-form-controls", inputs: ["branches-disabled", "build-path", "build-path-disabled", "form-group", "org-disabled", "repo-disabled", "source-control", "source-control-root", "use-branches", "use-build-path"], outputs: ["branches-changed"] }, { type: i11.NpmPackageSelectComponent, selector: "lcu-npm-package-select", inputs: ["npm-package", "npm-package-version", "form-group"] }, { type: i12.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i15.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i15.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i15.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i6.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i16.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i13.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i13.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i7.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i7.MatSuffix, selector: "[matSuffix]" }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i6.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }] });
551
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AppsFlowComponent, decorators: [{
552
+ type: Component,
553
+ args: [{ selector: 'lcu-apps-flow', template: "<div>\n <div *ngIf=\"EditingApplication?.Application\">\n <h2>\n <button\n mat-icon-button\n matTooltip=\"Back to Routes\"\n (click)=\"SetEditingApplication(null)\"\n >\n <mat-icon>arrow_back</mat-icon>\n </button>\n\n {{ CurrentApplicationRoute }} / {{ EditingApplication.Application?.Name }}\n </h2>\n </div>\n <form\n [formGroup]=\"ApplicationFormGroup\"\n (ngSubmit)=\"SaveApplication()\"\n *ngIf=\"EditingApplication\"\n >\n\n <div\n fxLayout=\"row wrap\"\n fxLayoutAlign=\"center start\"\n fxLayout.lt-md=\"column\"\n >\n <div class=\"form-card\" fxFlex=\"70%\" fxFlex.lt-md=\"100%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title>\n <ng-container *ngIf=\"EditingApplication?.Application\">\n Edit Application:\n {{ EditingApplication.Application?.Name }}\n </ng-container>\n\n <ng-container *ngIf=\"!EditingApplication?.Application\">\n Create an Application\n </ng-container>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Name\"\n formControlName=\"name\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <textarea\n matInput\n placeholder=\"Description\"\n formControlName=\"description\"\n rows=\"3\"\n required\n ></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Route\"\n formControlName=\"route\"\n required\n />\n </mat-form-field>\n </mat-card-content>\n </mat-card>\n </div>\n\n <div class=\"form-card\" fxFlex=\"35%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title> Processor Details </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"procType\"\n (selectionChange)=\"ProcessorTypeChanged($event)\"\n required\n >\n <mat-option value=\"DFS\">View Package</mat-option>\n\n <mat-option value=\"Redirect\">Redirect</mat-option>\n\n <mat-option value=\"Proxy\">Proxy</mat-option>\n\n <mat-option value=\"OAuth\">OAuth</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"ProcessorType\">\n <div *ngSwitchCase=\"'DFS'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Default File\"\n formControlName=\"defaultFile\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"NPM\">NPM</mat-option>\n\n <mat-option value=\"GitHub\">GitHub</mat-option>\n\n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHub'\">\n <lcu-source-control-form-controls\n [build-path]=\"EditingApplication?.LowCodeUnit?.Path\"\n [form-group]=\"ApplicationFormGroup\"\n [source-control]=\"DefaultSourceControl\"\n [use-branches]=\"false\"\n [use-build-path]=\"true\"\n ></lcu-source-control-form-controls>\n\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n SourceControlFormControls?.RepositoryFormControl?.valid\n \"\n >\n <input\n matInput\n placeholder=\"Build\"\n formControlName=\"build\"\n required\n />\n\n <mat-hint>\n Current Build:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'NPM'\">\n <lcu-npm-package-select\n [npm-package]=\"EditingApplication?.LowCodeUnit?.Package\"\n [npm-package-version]=\"\n EditingApplication?.LowCodeUnit?.Version\n \"\n [form-group]=\"ApplicationFormGroup\"\n ></lcu-npm-package-select>\n\n <mat-hint>\n Current Version:\n {{ EditingApplication?.LowCodeUnit?.CurrentVersion }}\n </mat-hint>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'OAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Scopes (space separated)\"\n formControlName=\"scopes\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Token Lookup\"\n formControlName=\"tokenLookup\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"GitHubOAuth\">GitHub</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHubOAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client ID\"\n formControlName=\"clientId\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client Secret\"\n formControlName=\"clientSecret\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Proxy'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Inbound Path\"\n formControlName=\"inboundPath\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"API\">API</mat-option>\n\n <mat-option value=\"SPA\">Single Page Application</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'API'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Allowed Methods (separate with spaces)\"\n formControlName=\"methods\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Security ({header}~{value})\"\n formControlName=\"security\"\n required\n />\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'SPA'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"SPA Root\"\n formControlName=\"spaRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Redirect'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Redirect URL\"\n formControlName=\"redirect\"\n required\n />\n </mat-form-field>\n\n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"permanent\">\n Is Permanent?\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"spread\"\n formControlName=\"preserveMethod\"\n >\n Preserve Method?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n (mouseenter)=\"DetermineTooltipText()\"\n matTooltip={{redirectTooltip}}\n >\n info_outline\n </mat-icon>\n\n <!-- <mat-icon\n *ngIf=\"!IsPermanent && !IsPreserve\"\n\n class=\"spread\"\n matSuffix\n matTooltip=\"302 \u2013 Not Permanent and Not Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n <!-- <mat-icon\n *ngIf=\"!IsPermanent && IsPreserve\"\n class=\"spread\"\n matSuffix\n matTooltip=\"307 \u2013 Not Permanent and Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n <!-- <mat-icon\n *ngIf=\"IsPermanent && IsPreserve\"\n class=\"spread\"\n matSuffix\n matTooltip=\"308 \u2013 Permanent and Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n \n\n <!-- <mat-icon\n class=\"spread\"\n matSuffix\n matTooltip=\"Values used to control the redirect type. Permanent and Not Preserve = 301; Not Permanent and Not Preserve = 302; Permanent and Preserve = 308; Not Permanent and Not Preserve = 307;\"\n >\n info_outline\n </mat-icon> -->\n </div>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n\n <div class=\"form-card\" fxFlex=\"35%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title> Security Settings </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"isPrivate\"\n matTooltip=\"Is Secure Application?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Secured Application is one that requires the user to be authenticated to use the application. The application is hosted behind an identity wall.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <div>\n <div *ngIf=\"IsPrivateFormControl.value\">\n <div>\n <mat-slide-toggle formControlName=\"isTriggerSignIn\">\n Is Trigger Sign In Application?\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Trigger Sign In Application will direct the user to sign in if they are not already.\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"spread flow-card\" *ngIf=\"ProcessorType != 'Redirect'\">\n <mat-card-header>\n <mat-card-title *ngIf=\"!HasBuildFormControl.value\">\n Build & Source\n </mat-card-title>\n\n <mat-card-title *ngIf=\"HasBuildFormControl.value\">\n Source Control\n </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"hasBuild\"\n matTooltip=\"Has Build?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"Configure source control, DevOps CI/CD, and artifacts.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n HasBuildFormControl.value && SourceControlLookups?.length > 0\n \"\n >\n <mat-select\n formControlName=\"sourceControlLookup\"\n placeholder=\"Source Control\"\n (selectionChange)=\"SourceControlLookupChanged($event)\"\n [disabled]=\"\n SourceControlFormControls?.Loading || HostingDetails?.Loading\n \"\n >\n <ng-container\n *ngFor=\"let srcCtrlLookup of SourceControlLookups\"\n >\n <mat-option\n [value]=\"srcCtrlLookup\"\n *ngIf=\"SourceControls[srcCtrlLookup]; let srcCtrl\"\n >\n {{ srcCtrl.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <div *ngIf=\"HasBuildFormControl?.value\">\n <h3>\n @{{\n SourceControlFormControls?.OrganizationFormControl?.value ||\n SourceControl?.Organization\n }}/{{\n SourceControlFormControls?.RepositoryFormControl?.value ||\n SourceControl?.Repository\n }}\n </h3>\n\n <p>Organization and Repository pulled from build settings</p>\n\n <mat-hint>\n CurrentBuild:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </div>\n </mat-form-field>\n\n <div *ngIf=\"SourceControlLookups?.length < 0\">\n <h3>\n Create source control locations under the DevOps tab above.\n </h3>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n\n <div class=\"spread\">\n <div fxFlex></div>\n\n <button mat-button type=\"button\" (click)=\"SetEditingApplication(null)\">\n <mat-icon>cancel</mat-icon> Cancel\n </button>\n\n <div fxFlex></div>\n\n <button\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"!ApplicationFormGroup.valid || !ApplicationFormGroup.dirty\"\n >\n <mat-icon>save</mat-icon> Save Application\n </button>\n\n <div fxFlex></div>\n </div>\n </form>\n\n <div class=\"spread\" *ngIf=\"!EditingApplication\">\n <span class=\"apps-actions\">\n <button mat-raised-button color=\"accent\" (click)=\"CreateNewApplication()\">\n <mat-icon color=\"primary\">add</mat-icon> Create New\n </button>\n </span>\n\n <div class=\"spread\" *ngIf=\"!CurrentApplicationRoute\">\n <div *ngIf=\"ApplicationRoutes?.length <= 0\">\n <h2>No applications created, create your first application.</h2>\n </div>\n\n <div *ngIf=\"ApplicationRoutes?.length > 0\">\n <h2>Project Routes</h2>\n\n <div\n fxLayout=\"row wrap\"\n fxLayout.lt-md=\"column\"\n *ngIf=\"ApplicationRoutes\"\n >\n <div\n fxFlex=\"20%\"\n fxFlex.lt-md=\"100%\"\n *ngFor=\"let appRoute of ApplicationRoutes\"\n >\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <!-- <img mat-card-avatar=\"/assets/images/project-icon.png\" /> -->\n\n <mat-card-title\n class=\"mat-subheading-2\"\n [matTooltip]=\"appRoute\"\n >\n {{ appRoute }}\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"spread\"></div>\n </mat-card-content>\n\n <mat-card-actions>\n <div class=\"data-app-actions\">\n <div fxFlex></div>\n\n <a\n mat-icon-button\n href=\"https://{{ PrimaryHost }}{{ appRoute }}\"\n target=\"_blank\"\n >\n <mat-icon matTooltip=\"Launch\">launch</mat-icon>\n </a>\n\n <button\n mat-icon-button\n color=\"accent\"\n (click)=\"EditApplicationRouteClicked(appRoute)\"\n >\n <mat-icon matTooltip=\"Edit Application Route\">\n settings\n </mat-icon>\n </button>\n </div>\n\n <div class=\"data-app-fakes\">\n <div fxFlex></div>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n </div>\n </mat-card-actions>\n </mat-card>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"CurrentApplicationRoute\">\n <h2>\n <button\n mat-icon-button\n matTooltip=\"Back to Routes\"\n (click)=\"CurrentApplicationRoute = null\"\n >\n <mat-icon>arrow_back</mat-icon>\n </button>\n\n {{ CurrentApplicationRoute }} Routes\n </h2>\n\n <div fxLayout=\"row wrap\" fxLayout.lt-md=\"column\">\n <ng-container *ngFor=\"let appLookup of CurrentRouteApplicationLookups\">\n <div\n fxFlex=\"30%\"\n fxFlex.lt-md=\"100%\"\n *ngIf=\"\n RoutedApplications[CurrentApplicationRoute][appLookup];\n let app\n \"\n >\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <!-- <img mat-card-avatar=\"/assets/images/project-icon.png\" /> -->\n\n <mat-card-title\n class=\"mat-subheading-2\"\n [matTooltip]=\"app.Application.Description\"\n >\n {{ app.Application.Name }}\n </mat-card-title>\n\n <mat-card-subtitle\n class=\"mat-subheading-1\"\n [matTooltip]=\"\n app.LowCodeUnit?.CurrentVersion ||\n app.LowCodeUnit?.CurrentBuild\n \"\n >\n @{{\n app.LowCodeUnit?.CurrentVersion ||\n app.LowCodeUnit?.CurrentBuild ||\n app.Processor?.Redirect ||\n \"No version deployed\"\n }}\n </mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"spread\"></div>\n </mat-card-content>\n\n <mat-card-actions>\n <div class=\"data-app-actions\">\n <div fxFlex></div>\n\n <a\n mat-icon-button\n href=\"https://{{ PrimaryHost }}{{\n app.LookupConfig.PathRegex.replace('.*', '')\n }}\"\n target=\"_blank\"\n >\n <mat-icon matTooltip=\"Launch\">launch</mat-icon>\n </a>\n\n <a\n *ngIf=\"GetProcessorType(appLookup) === 'DFS'\"\n mat-icon-button\n (click)=\"Unpack(appLookup, app)\"\n target=\"_blank\"\n matTooltip=\"Unpack {{\n app.LowCodeUnit?.Version || app.LowCodeUnit?.Build\n }}\"\n >\n <mat-icon>cloud_upload</mat-icon>\n </a>\n\n <button\n mat-icon-button\n (click)=\"SetEditingApplication(appLookup)\"\n >\n <mat-icon matTooltip=\"Edit Application\"> edit </mat-icon>\n </button>\n\n <button\n mat-icon-button\n color=\"warn\"\n (click)=\"DeleteApplication(appLookup, app.Application.Name)\"\n >\n <mat-icon matTooltip=\"Delete {{ app.Application.Name }}\">\n delete_forever\n </mat-icon>\n </button>\n </div>\n\n <div class=\"data-app-fakes\">\n <div fxFlex></div>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled \n *ngIf=\"GetProcessorType(appLookup) === 'DFS'\">\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n </div>\n </mat-card-actions>\n </mat-card>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";@import\"https://fonts.googleapis.com/css?family=Encode+Sans+Condensed:400,900&display=swap\";@import\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,700&display=swap\";.disable-autofill-background-default input:-webkit-autofill,.disable-autofill-background-default input:-webkit-autofill:hover,.disable-autofill-background-default input:-webkit-autofill:focus,.disable-autofill-background-default textarea:-webkit-autofill,.disable-autofill-background-default textarea:-webkit-autofill:hover,.disable-autofill-background-default textarea:-webkit-autofill:focus,.disable-autofill-background-default select:-webkit-autofill,.disable-autofill-background-default select:-webkit-autofill:hover,.disable-autofill-background-default select:-webkit-autofill:focus{-webkit-transition:background-color 5000s!important;transition:background-color 5000s!important}.list-item-disabled{opacity:.5;filter:alpha(opacity=50);cursor:not-allowed!important}.filler{flex:1 1 auto;display:inline-block!important}.sticky{position:sticky;z-index:750;top:0}.inline{display:inline-block}.contents,.page-element{display:contents}.mat-spinner{margin:auto}.mat-full-width{width:100%}.spread{margin:2rem}.spread-thin{margin:1rem}.overlay{position:sticky!important}.overlay.top{top:0}.overlay.bottom{bottom:0}.margin-0{margin:0!important}.margin-top-0,.margin-y-0{margin-top:0!important}.margin-right-0,.margin-x-0{margin-right:0!important}.margin-bottom-0,.margin-y-0{margin-bottom:0!important}.margin-left-0,.margin-x-0{margin-left:0!important}.margin-1{margin:.25rem!important}.margin-top-1,.margin-y-1{margin-top:.25rem!important}.margin-right-1,.margin-x-1{margin-right:.25rem!important}.margin-bottom-1,.margin-y-1{margin-bottom:.25rem!important}.margin-left-1,.margin-x-1{margin-left:.25rem!important}.margin-2{margin:.5rem!important}.margin-top-2,.margin-y-2{margin-top:.5rem!important}.margin-right-2,.margin-x-2{margin-right:.5rem!important}.margin-bottom-2,.margin-y-2{margin-bottom:.5rem!important}.margin-left-2,.margin-x-2{margin-left:.5rem!important}.margin-3{margin:1rem!important}.margin-top-3,.margin-y-3{margin-top:1rem!important}.margin-top-bottom-3{margin:1rem 0!important}.margin-right-3,.margin-x-3{margin-right:1rem!important}.margin-bottom-3,.margin-y-3{margin-bottom:1rem!important}.margin-left-3,.margin-x-3{margin-left:1rem!important}.margin-4{margin:2rem!important}.margin-top-4,.margin-y-4{margin-top:2rem!important}.margin-right-4,.margin-x-4{margin-right:2rem!important}.margin-bottom-4,.margin-y-4{margin-bottom:2rem!important}.margin-left-4,.margin-x-4{margin-left:2rem!important}.margin-right-5,.margin-x-5{margin-right:4rem!important}.margin-bottom-5,.margin-y-5{margin-bottom:4rem!important}.margin-left-5,.margin-x-5{margin-left:4rem!important}.margin-5{margin:4rem!important}.margin-top-5,.margin-y-5{margin-top:4rem!important}.margin-right-6,.margin-x-6{margin-right:4.5rem!important}.margin-bottom-6,.margin-y-6{margin-bottom:4.5rem!important}.margin-left-6,.margin-x-6{margin-left:4.5rem!important}.margin-7{margin:6rem!important}.margin-top-7,.margin-y-7{margin-top:6rem!important}.margin-right-7,.margin-x-7{margin-right:6rem!important}.margin-bottom-7,.margin-y-7{margin-bottom:6rem!important}.margin-left-7,.margin-x-7{margin-left:6rem!important}.margin-8{margin:7.5rem!important}.margin-top-8,.margin-y-8{margin-top:7.5rem!important}.margin-right-8,.margin-x-8{margin-right:7.5rem!important}.margin-bottom-8,.margin-y-8{margin-bottom:7.5rem!important}.margin-left-8,.margin-x-8{margin-left:7.5rem!important}.margin-9{margin:9rem!important}.margin-top-9,.margin-y-9{margin-top:9rem!important}.margin-right-9,.margin-x-9{margin-right:9rem!important}.margin-bottom-9,.margin-y-9{margin-bottom:9rem!important}.margin-left-9,.margin-x-9{margin-left:9rem!important}.padding-0{padding:0!important}.padding-top-0,.padding-y-0{padding-top:0!important}.padding-right-0,.padding-x-0{padding-right:0!important}.padding-bottom-0,.padding-y-0{padding-bottom:0!important}.padding-left-0,.padding-x-0{padding-left:0!important}.padding-1{padding:.25rem!important}.padding-top-1,.padding-y-1{padding-top:.25rem!important}.padding-right-1,.padding-x-1{padding-right:.25rem!important}.padding-bottom-1,.padding-y-1{padding-bottom:.25rem!important}.padding-left-1,.padding-x-1{padding-left:.25rem!important}.padding-2{padding:.5rem!important}.padding-top-2,.padding-y-2{padding-top:.5rem!important}.padding-right-2,.padding-x-2{padding-right:.5rem!important}.padding-bottom-2,.padding-y-2{padding-bottom:.5rem!important}.padding-left-2,.padding-x-2{padding-left:.5rem!important}.padding-3{padding:1rem!important}.padding-top-3,.padding-y-3{padding-top:1rem!important}.padding-right-3,.padding-x-3{padding-right:1rem!important}.padding-bottom-3,.padding-y-3{padding-bottom:1rem!important}.padding-left-3,.padding-x-3{padding-left:1rem!important}.padding-4{padding:2rem!important}.padding-top-4,.padding-y-4{padding-top:2rem!important}.padding-right-4,.padding-x-4{padding-right:2rem!important}.padding-bottom-4,.padding-y-4{padding-bottom:2rem!important}.padding-left-4,.padding-x-4{padding-left:2rem!important}.padding-5{padding:4rem!important}.padding-top-5,.padding-y-5{padding-top:4rem!important}.padding-right-5,.padding-x-5{padding-right:4rem!important}.padding-bottom-5,.padding-y-5{padding-bottom:4rem!important}.padding-left-5,.padding-x-5{padding-left:4rem!important}.margin-n1{margin:-.25rem!important}.margin-top-n1,.margin-y-n1{margin-top:-.25rem!important}.margin-right-n1,.margin-x-n1{margin-right:-.25rem!important}.margin-bottom-n1,.margin-y-n1{margin-bottom:-.25rem!important}.margin-left-n1,.margin-x-n1{margin-left:-.25rem!important}.margin-n2{margin:-.5rem!important}.margin-top-n2,.margin-y-n2{margin-top:-.5rem!important}.margin-right-n2,.margin-x-n2{margin-right:-.5rem!important}.margin-bottom-n2,.margin-y-n2{margin-bottom:-.5rem!important}.margin-left-n2,.margin-x-n2{margin-left:-.5rem!important}.margin-n3{margin:-1rem!important}.margin-top-n3,.margin-y-n3{margin-top:-1rem!important}.margin-right-n3,.margin-x-n3{margin-right:-1rem!important}.margin-bottom-n3,.margin-y-n3{margin-bottom:-1rem!important}.margin-left-n3,.margin-x-n3{margin-left:-1rem!important}.margin-n4{margin:-2rem!important}.margin-top-n4,.margin-y-n4{margin-top:-2rem!important}.margin-right-n4,.margin-x-n4{margin-right:-2rem!important}.margin-bottom-n4,.margin-y-n4{margin-bottom:-2rem!important}.margin-left-n4,.margin-x-n4{margin-left:-2rem!important}.margin-n5{margin:-4rem!important}.margin-top-n5,.margin-y-n5{margin-top:-4rem!important}.margin-right-n5,.margin-x-n5{margin-right:-4rem!important}.margin-bottom-n5,.margin-y-n5{margin-bottom:-4rem!important}.margin-left-n5,.margin-x-n5{margin-left:-4rem!important}.margin-auto{margin:auto!important}.margin-top-auto,.margin-y-auto{margin-top:auto!important}.margin-right-auto,.margin-x-auto{margin-right:auto!important}.margin-bottom-auto,.margin-y-auto{margin-bottom:auto!important}.margin-left-auto,.margin-x-auto{margin-left:auto!important}@media (min-width: 576px){.margin-sm-0{margin:0!important}.margin-top-sm-0,.margin-y-sm-0{margin-top:0!important}.margin-right-sm-0,.margin-x-sm-0{margin-right:0!important}.margin-bottom-sm-0,.margin-y-sm-0{margin-bottom:0!important}.margin-left-sm-0,.margin-x-sm-0{margin-left:0!important}.margin-sm-1{margin:.25rem!important}.margin-top-sm-1,.margin-y-sm-1{margin-top:.25rem!important}.margin-right-sm-1,.margin-x-sm-1{margin-right:.25rem!important}.margin-bottom-sm-1,.margin-y-sm-1{margin-bottom:.25rem!important}.margin-left-sm-1,.margin-x-sm-1{margin-left:.25rem!important}.margin-sm-2{margin:.5rem!important}.margin-top-sm-2,.margin-y-sm-2{margin-top:.5rem!important}.margin-right-sm-2,.margin-x-sm-2{margin-right:.5rem!important}.margin-bottom-sm-2,.margin-y-sm-2{margin-bottom:.5rem!important}.margin-left-sm-2,.margin-x-sm-2{margin-left:.5rem!important}.margin-sm-3{margin:1rem!important}.margin-top-sm-3,.margin-y-sm-3{margin-top:1rem!important}.margin-right-sm-3,.margin-x-sm-3{margin-right:1rem!important}.margin-bottom-sm-3,.margin-y-sm-3{margin-bottom:1rem!important}.margin-left-sm-3,.margin-x-sm-3{margin-left:1rem!important}.margin-sm-4{margin:2rem!important}.margin-top-sm-4,.margin-y-sm-4{margin-top:2rem!important}.margin-right-sm-4,.margin-x-sm-4{margin-right:2rem!important}.margin-bottom-sm-4,.margin-y-sm-4{margin-bottom:2rem!important}.margin-left-sm-4,.margin-x-sm-4{margin-left:2rem!important}.margin-sm-5{margin:4rem!important}.margin-top-sm-5,.margin-y-sm-5{margin-top:4rem!important}.margin-right-sm-5,.margin-x-sm-5{margin-right:4rem!important}.margin-bottom-sm-5,.margin-y-sm-5{margin-bottom:4rem!important}.margin-left-sm-5,.margin-x-sm-5{margin-left:4rem!important}.padding-sm-0{padding:0!important}.padding-top-sm-0,.padding-y-sm-0{padding-top:0!important}.padding-right-sm-0,.padding-x-sm-0{padding-right:0!important}.padding-bottom-sm-0,.padding-y-sm-0{padding-bottom:0!important}.padding-left-sm-0,.padding-x-sm-0{padding-left:0!important}.padding-sm-1{padding:.25rem!important}.padding-top-sm-1,.padding-y-sm-1{padding-top:.25rem!important}.padding-right-sm-1,.padding-x-sm-1{padding-right:.25rem!important}.padding-bottom-sm-1,.padding-y-sm-1{padding-bottom:.25rem!important}.padding-left-sm-1,.padding-x-sm-1{padding-left:.25rem!important}.padding-sm-2{padding:.5rem!important}.padding-top-sm-2,.padding-y-sm-2{padding-top:.5rem!important}.padding-right-sm-2,.padding-x-sm-2{padding-right:.5rem!important}.padding-bottom-sm-2,.padding-y-sm-2{padding-bottom:.5rem!important}.padding-left-sm-2,.padding-x-sm-2{padding-left:.5rem!important}.padding-sm-3{padding:1rem!important}.padding-top-sm-3,.padding-y-sm-3{padding-top:1rem!important}.padding-right-sm-3,.padding-x-sm-3{padding-right:1rem!important}.padding-bottom-sm-3,.padding-y-sm-3{padding-bottom:1rem!important}.padding-left-sm-3,.padding-x-sm-3{padding-left:1rem!important}.padding-sm-4{padding:2rem!important}.padding-top-sm-4,.padding-y-sm-4{padding-top:2rem!important}.padding-right-sm-4,.padding-x-sm-4{padding-right:2rem!important}.padding-bottom-sm-4,.padding-y-sm-4{padding-bottom:2rem!important}.padding-left-sm-4,.padding-x-sm-4{padding-left:2rem!important}.padding-sm-5{padding:4rem!important}.padding-top-sm-5,.padding-y-sm-5{padding-top:4rem!important}.padding-right-sm-5,.padding-x-sm-5{padding-right:4rem!important}.padding-bottom-sm-5,.padding-y-sm-5{padding-bottom:4rem!important}.padding-left-sm-5,.padding-x-sm-5{padding-left:4rem!important}.margin-sm-n1{margin:-.25rem!important}.margin-top-sm-n1,.margin-y-sm-n1{margin-top:-.25rem!important}.margin-right-sm-n1,.margin-x-sm-n1{margin-right:-.25rem!important}.margin-bottom-sm-n1,.margin-y-sm-n1{margin-bottom:-.25rem!important}.margin-left-sm-n1,.margin-x-sm-n1{margin-left:-.25rem!important}.margin-sm-n2{margin:-.5rem!important}.margin-top-sm-n2,.margin-y-sm-n2{margin-top:-.5rem!important}.margin-right-sm-n2,.margin-x-sm-n2{margin-right:-.5rem!important}.margin-bottom-sm-n2,.margin-y-sm-n2{margin-bottom:-.5rem!important}.margin-left-sm-n2,.margin-x-sm-n2{margin-left:-.5rem!important}.margin-sm-n3{margin:-1rem!important}.margin-top-sm-n3,.margin-y-sm-n3{margin-top:-1rem!important}.margin-right-sm-n3,.margin-x-sm-n3{margin-right:-1rem!important}.margin-bottom-sm-n3,.margin-y-sm-n3{margin-bottom:-1rem!important}.margin-left-sm-n3,.margin-x-sm-n3{margin-left:-1rem!important}.margin-sm-n4{margin:-2rem!important}.margin-top-sm-n4,.margin-y-sm-n4{margin-top:-2rem!important}.margin-right-sm-n4,.margin-x-sm-n4{margin-right:-2rem!important}.margin-bottom-sm-n4,.margin-y-sm-n4{margin-bottom:-2rem!important}.margin-left-sm-n4,.margin-x-sm-n4{margin-left:-2rem!important}.margin-sm-n5{margin:-4rem!important}.margin-top-sm-n5,.margin-y-sm-n5{margin-top:-4rem!important}.margin-right-sm-n5,.margin-x-sm-n5{margin-right:-4rem!important}.margin-bottom-sm-n5,.margin-y-sm-n5{margin-bottom:-4rem!important}.margin-left-sm-n5,.margin-x-sm-n5{margin-left:-4rem!important}.margin-sm-auto{margin:auto!important}.margin-top-sm-auto,.margin-y-sm-auto{margin-top:auto!important}.margin-right-sm-auto,.margin-x-sm-auto{margin-right:auto!important}.margin-bottom-sm-auto,.margin-y-sm-auto{margin-bottom:auto!important}.margin-left-sm-auto,.margin-x-sm-auto{margin-left:auto!important}}@media (min-width: 768px){.margin-md-0{margin:0!important}.margin-top-md-0,.margin-y-md-0{margin-top:0!important}.margin-right-md-0,.margin-x-md-0{margin-right:0!important}.margin-bottom-md-0,.margin-y-md-0{margin-bottom:0!important}.margin-left-md-0,.margin-x-md-0{margin-left:0!important}.margin-md-1{margin:.25rem!important}.margin-top-md-1,.margin-y-md-1{margin-top:.25rem!important}.margin-right-md-1,.margin-x-md-1{margin-right:.25rem!important}.margin-bottom-md-1,.margin-y-md-1{margin-bottom:.25rem!important}.margin-left-md-1,.margin-x-md-1{margin-left:.25rem!important}.margin-md-2{margin:.5rem!important}.margin-top-md-2,.margin-y-md-2{margin-top:.5rem!important}.margin-right-md-2,.margin-x-md-2{margin-right:.5rem!important}.margin-bottom-md-2,.margin-y-md-2{margin-bottom:.5rem!important}.margin-left-md-2,.margin-x-md-2{margin-left:.5rem!important}.margin-md-3{margin:1rem!important}.margin-top-md-3,.margin-y-md-3{margin-top:1rem!important}.margin-right-md-3,.margin-x-md-3{margin-right:1rem!important}.margin-bottom-md-3,.margin-y-md-3{margin-bottom:1rem!important}.margin-left-md-3,.margin-x-md-3{margin-left:1rem!important}.margin-md-4{margin:2rem!important}.margin-top-md-4,.margin-y-md-4{margin-top:2rem!important}.margin-right-md-4,.margin-x-md-4{margin-right:2rem!important}.margin-bottom-md-4,.margin-y-md-4{margin-bottom:2rem!important}.margin-left-md-4,.margin-x-md-4{margin-left:2rem!important}.margin-md-5{margin:4rem!important}.margin-top-md-5,.margin-y-md-5{margin-top:4rem!important}.margin-right-md-5,.margin-x-md-5{margin-right:4rem!important}.margin-bottom-md-5,.margin-y-md-5{margin-bottom:4rem!important}.margin-left-md-5,.margin-x-md-5{margin-left:4rem!important}.padding-md-0{padding:0!important}.padding-top-md-0,.padding-y-md-0{padding-top:0!important}.padding-right-md-0,.padding-x-md-0{padding-right:0!important}.padding-bottom-md-0,.padding-y-md-0{padding-bottom:0!important}.padding-left-md-0,.padding-x-md-0{padding-left:0!important}.padding-md-1{padding:.25rem!important}.padding-top-md-1,.padding-y-md-1{padding-top:.25rem!important}.padding-right-md-1,.padding-x-md-1{padding-right:.25rem!important}.padding-bottom-md-1,.padding-y-md-1{padding-bottom:.25rem!important}.padding-left-md-1,.padding-x-md-1{padding-left:.25rem!important}.padding-md-2{padding:.5rem!important}.padding-top-md-2,.padding-y-md-2{padding-top:.5rem!important}.padding-right-md-2,.padding-x-md-2{padding-right:.5rem!important}.padding-bottom-md-2,.padding-y-md-2{padding-bottom:.5rem!important}.padding-left-md-2,.padding-x-md-2{padding-left:.5rem!important}.padding-md-3{padding:1rem!important}.padding-top-md-3,.padding-y-md-3{padding-top:1rem!important}.padding-right-md-3,.padding-x-md-3{padding-right:1rem!important}.padding-bottom-md-3,.padding-y-md-3{padding-bottom:1rem!important}.padding-left-md-3,.padding-x-md-3{padding-left:1rem!important}.padding-md-4{padding:2rem!important}.padding-top-md-4,.padding-y-md-4{padding-top:2rem!important}.padding-right-md-4,.padding-x-md-4{padding-right:2rem!important}.padding-bottom-md-4,.padding-y-md-4{padding-bottom:2rem!important}.padding-left-md-4,.padding-x-md-4{padding-left:2rem!important}.padding-md-5{padding:4rem!important}.padding-top-md-5,.padding-y-md-5{padding-top:4rem!important}.padding-right-md-5,.padding-x-md-5{padding-right:4rem!important}.padding-bottom-md-5,.padding-y-md-5{padding-bottom:4rem!important}.padding-left-md-5,.padding-x-md-5{padding-left:4rem!important}.margin-md-n1{margin:-.25rem!important}.margin-top-md-n1,.margin-y-md-n1{margin-top:-.25rem!important}.margin-right-md-n1,.margin-x-md-n1{margin-right:-.25rem!important}.margin-bottom-md-n1,.margin-y-md-n1{margin-bottom:-.25rem!important}.margin-left-md-n1,.margin-x-md-n1{margin-left:-.25rem!important}.margin-md-n2{margin:-.5rem!important}.margin-top-md-n2,.margin-y-md-n2{margin-top:-.5rem!important}.margin-right-md-n2,.margin-x-md-n2{margin-right:-.5rem!important}.margin-bottom-md-n2,.margin-y-md-n2{margin-bottom:-.5rem!important}.margin-left-md-n2,.margin-x-md-n2{margin-left:-.5rem!important}.margin-md-n3{margin:-1rem!important}.margin-top-md-n3,.margin-y-md-n3{margin-top:-1rem!important}.margin-right-md-n3,.margin-x-md-n3{margin-right:-1rem!important}.margin-bottom-md-n3,.margin-y-md-n3{margin-bottom:-1rem!important}.margin-left-md-n3,.margin-x-md-n3{margin-left:-1rem!important}.margin-md-n4{margin:-2rem!important}.margin-top-md-n4,.margin-y-md-n4{margin-top:-2rem!important}.margin-right-md-n4,.margin-x-md-n4{margin-right:-2rem!important}.margin-bottom-md-n4,.margin-y-md-n4{margin-bottom:-2rem!important}.margin-left-md-n4,.margin-x-md-n4{margin-left:-2rem!important}.margin-md-n5{margin:-4rem!important}.margin-top-md-n5,.margin-y-md-n5{margin-top:-4rem!important}.margin-right-md-n5,.margin-x-md-n5{margin-right:-4rem!important}.margin-bottom-md-n5,.margin-y-md-n5{margin-bottom:-4rem!important}.margin-left-md-n5,.margin-x-md-n5{margin-left:-4rem!important}.margin-md-auto{margin:auto!important}.margin-top-md-auto,.margin-y-md-auto{margin-top:auto!important}.margin-right-md-auto,.margin-x-md-auto{margin-right:auto!important}.margin-bottom-md-auto,.margin-y-md-auto{margin-bottom:auto!important}.margin-left-md-auto,.margin-x-md-auto{margin-left:auto!important}}@media (min-width: 992px){.margin-lg-0{margin:0!important}.margin-top-lg-0,.margin-y-lg-0{margin-top:0!important}.margin-right-lg-0,.margin-x-lg-0{margin-right:0!important}.margin-bottom-lg-0,.margin-y-lg-0{margin-bottom:0!important}.margin-left-lg-0,.margin-x-lg-0{margin-left:0!important}.margin-lg-1{margin:.25rem!important}.margin-top-lg-1,.margin-y-lg-1{margin-top:.25rem!important}.margin-right-lg-1,.margin-x-lg-1{margin-right:.25rem!important}.margin-bottom-lg-1,.margin-y-lg-1{margin-bottom:.25rem!important}.margin-left-lg-1,.margin-x-lg-1{margin-left:.25rem!important}.margin-lg-2{margin:.5rem!important}.margin-top-lg-2,.margin-y-lg-2{margin-top:.5rem!important}.margin-right-lg-2,.margin-x-lg-2{margin-right:.5rem!important}.margin-bottom-lg-2,.margin-y-lg-2{margin-bottom:.5rem!important}.margin-left-lg-2,.margin-x-lg-2{margin-left:.5rem!important}.margin-lg-3{margin:1rem!important}.margin-top-lg-3,.margin-y-lg-3{margin-top:1rem!important}.margin-right-lg-3,.margin-x-lg-3{margin-right:1rem!important}.margin-bottom-lg-3,.margin-y-lg-3{margin-bottom:1rem!important}.margin-left-lg-3,.margin-x-lg-3{margin-left:1rem!important}.margin-lg-4{margin:2rem!important}.margin-top-lg-4,.margin-y-lg-4{margin-top:2rem!important}.margin-right-lg-4,.margin-x-lg-4{margin-right:2rem!important}.margin-bottom-lg-4,.margin-y-lg-4{margin-bottom:2rem!important}.margin-left-lg-4,.margin-x-lg-4{margin-left:2rem!important}.margin-lg-5{margin:4rem!important}.margin-top-lg-5,.margin-y-lg-5{margin-top:4rem!important}.margin-right-lg-5,.margin-x-lg-5{margin-right:4rem!important}.margin-bottom-lg-5,.margin-y-lg-5{margin-bottom:4rem!important}.margin-left-lg-5,.margin-x-lg-5{margin-left:4rem!important}.padding-lg-0{padding:0!important}.padding-top-lg-0,.padding-y-lg-0{padding-top:0!important}.padding-right-lg-0,.padding-x-lg-0{padding-right:0!important}.padding-bottom-lg-0,.padding-y-lg-0{padding-bottom:0!important}.padding-left-lg-0,.padding-x-lg-0{padding-left:0!important}.padding-lg-1{padding:.25rem!important}.padding-top-lg-1,.padding-y-lg-1{padding-top:.25rem!important}.padding-right-lg-1,.padding-x-lg-1{padding-right:.25rem!important}.padding-bottom-lg-1,.padding-y-lg-1{padding-bottom:.25rem!important}.padding-left-lg-1,.padding-x-lg-1{padding-left:.25rem!important}.padding-lg-2{padding:.5rem!important}.padding-top-lg-2,.padding-y-lg-2{padding-top:.5rem!important}.padding-right-lg-2,.padding-x-lg-2{padding-right:.5rem!important}.padding-bottom-lg-2,.padding-y-lg-2{padding-bottom:.5rem!important}.padding-left-lg-2,.padding-x-lg-2{padding-left:.5rem!important}.padding-lg-3{padding:1rem!important}.padding-top-lg-3,.padding-y-lg-3{padding-top:1rem!important}.padding-right-lg-3,.padding-x-lg-3{padding-right:1rem!important}.padding-bottom-lg-3,.padding-y-lg-3{padding-bottom:1rem!important}.padding-left-lg-3,.padding-x-lg-3{padding-left:1rem!important}.padding-lg-4{padding:2rem!important}.padding-top-lg-4,.padding-y-lg-4{padding-top:2rem!important}.padding-right-lg-4,.padding-x-lg-4{padding-right:2rem!important}.padding-bottom-lg-4,.padding-y-lg-4{padding-bottom:2rem!important}.padding-left-lg-4,.padding-x-lg-4{padding-left:2rem!important}.padding-lg-5{padding:4rem!important}.padding-top-lg-5,.padding-y-lg-5{padding-top:4rem!important}.padding-right-lg-5,.padding-x-lg-5{padding-right:4rem!important}.padding-bottom-lg-5,.padding-y-lg-5{padding-bottom:4rem!important}.padding-left-lg-5,.padding-x-lg-5{padding-left:4rem!important}.margin-lg-n1{margin:-.25rem!important}.margin-top-lg-n1,.margin-y-lg-n1{margin-top:-.25rem!important}.margin-right-lg-n1,.margin-x-lg-n1{margin-right:-.25rem!important}.margin-bottom-lg-n1,.margin-y-lg-n1{margin-bottom:-.25rem!important}.margin-left-lg-n1,.margin-x-lg-n1{margin-left:-.25rem!important}.margin-lg-n2{margin:-.5rem!important}.margin-top-lg-n2,.margin-y-lg-n2{margin-top:-.5rem!important}.margin-right-lg-n2,.margin-x-lg-n2{margin-right:-.5rem!important}.margin-bottom-lg-n2,.margin-y-lg-n2{margin-bottom:-.5rem!important}.margin-left-lg-n2,.margin-x-lg-n2{margin-left:-.5rem!important}.margin-lg-n3{margin:-1rem!important}.margin-top-lg-n3,.margin-y-lg-n3{margin-top:-1rem!important}.margin-right-lg-n3,.margin-x-lg-n3{margin-right:-1rem!important}.margin-bottom-lg-n3,.margin-y-lg-n3{margin-bottom:-1rem!important}.margin-left-lg-n3,.margin-x-lg-n3{margin-left:-1rem!important}.margin-lg-n4{margin:-2rem!important}.margin-top-lg-n4,.margin-y-lg-n4{margin-top:-2rem!important}.margin-right-lg-n4,.margin-x-lg-n4{margin-right:-2rem!important}.margin-bottom-lg-n4,.margin-y-lg-n4{margin-bottom:-2rem!important}.margin-left-lg-n4,.margin-x-lg-n4{margin-left:-2rem!important}.margin-lg-n5{margin:-4rem!important}.margin-top-lg-n5,.margin-y-lg-n5{margin-top:-4rem!important}.margin-right-lg-n5,.margin-x-lg-n5{margin-right:-4rem!important}.margin-bottom-lg-n5,.margin-y-lg-n5{margin-bottom:-4rem!important}.margin-left-lg-n5,.margin-x-lg-n5{margin-left:-4rem!important}.margin-lg-auto{margin:auto!important}.margin-top-lg-auto,.margin-y-lg-auto{margin-top:auto!important}.margin-right-lg-auto,.margin-x-lg-auto{margin-right:auto!important}.margin-bottom-lg-auto,.margin-y-lg-auto{margin-bottom:auto!important}.margin-left-lg-auto,.margin-x-lg-auto{margin-left:auto!important}}@media (min-width: 1200px){.margin-xl-0{margin:0!important}.margin-top-xl-0,.margin-y-xl-0{margin-top:0!important}.margin-right-xl-0,.margin-x-xl-0{margin-right:0!important}.margin-bottom-xl-0,.margin-y-xl-0{margin-bottom:0!important}.margin-left-xl-0,.margin-x-xl-0{margin-left:0!important}.margin-xl-1{margin:.25rem!important}.margin-top-xl-1,.margin-y-xl-1{margin-top:.25rem!important}.margin-right-xl-1,.margin-x-xl-1{margin-right:.25rem!important}.margin-bottom-xl-1,.margin-y-xl-1{margin-bottom:.25rem!important}.margin-left-xl-1,.margin-x-xl-1{margin-left:.25rem!important}.margin-xl-2{margin:.5rem!important}.margin-top-xl-2,.margin-y-xl-2{margin-top:.5rem!important}.margin-right-xl-2,.margin-x-xl-2{margin-right:.5rem!important}.margin-bottom-xl-2,.margin-y-xl-2{margin-bottom:.5rem!important}.margin-left-xl-2,.margin-x-xl-2{margin-left:.5rem!important}.margin-xl-3{margin:1rem!important}.margin-top-xl-3,.margin-y-xl-3{margin-top:1rem!important}.margin-right-xl-3,.margin-x-xl-3{margin-right:1rem!important}.margin-bottom-xl-3,.margin-y-xl-3{margin-bottom:1rem!important}.margin-left-xl-3,.margin-x-xl-3{margin-left:1rem!important}.margin-xl-4{margin:2rem!important}.margin-top-xl-4,.margin-y-xl-4{margin-top:2rem!important}.margin-right-xl-4,.margin-x-xl-4{margin-right:2rem!important}.margin-bottom-xl-4,.margin-y-xl-4{margin-bottom:2rem!important}.margin-left-xl-4,.margin-x-xl-4{margin-left:2rem!important}.margin-xl-5{margin:4rem!important}.margin-top-xl-5,.margin-y-xl-5{margin-top:4rem!important}.margin-right-xl-5,.margin-x-xl-5{margin-right:4rem!important}.margin-bottom-xl-5,.margin-y-xl-5{margin-bottom:4rem!important}.margin-left-xl-5,.margin-x-xl-5{margin-left:4rem!important}.padding-xl-0{padding:0!important}.padding-top-xl-0,.padding-y-xl-0{padding-top:0!important}.padding-right-xl-0,.padding-x-xl-0{padding-right:0!important}.padding-bottom-xl-0,.padding-y-xl-0{padding-bottom:0!important}.padding-left-xl-0,.padding-x-xl-0{padding-left:0!important}.padding-xl-1{padding:.25rem!important}.padding-top-xl-1,.padding-y-xl-1{padding-top:.25rem!important}.padding-right-xl-1,.padding-x-xl-1{padding-right:.25rem!important}.padding-bottom-xl-1,.padding-y-xl-1{padding-bottom:.25rem!important}.padding-left-xl-1,.padding-x-xl-1{padding-left:.25rem!important}.padding-xl-2{padding:.5rem!important}.padding-top-xl-2,.padding-y-xl-2{padding-top:.5rem!important}.padding-right-xl-2,.padding-x-xl-2{padding-right:.5rem!important}.padding-bottom-xl-2,.padding-y-xl-2{padding-bottom:.5rem!important}.padding-left-xl-2,.padding-x-xl-2{padding-left:.5rem!important}.padding-xl-3{padding:1rem!important}.padding-top-xl-3,.padding-y-xl-3{padding-top:1rem!important}.padding-right-xl-3,.padding-x-xl-3{padding-right:1rem!important}.padding-bottom-xl-3,.padding-y-xl-3{padding-bottom:1rem!important}.padding-left-xl-3,.padding-x-xl-3{padding-left:1rem!important}.padding-xl-4{padding:2rem!important}.padding-top-xl-4,.padding-y-xl-4{padding-top:2rem!important}.padding-right-xl-4,.padding-x-xl-4{padding-right:2rem!important}.padding-bottom-xl-4,.padding-y-xl-4{padding-bottom:2rem!important}.padding-left-xl-4,.padding-x-xl-4{padding-left:2rem!important}.padding-xl-5{padding:4rem!important}.padding-top-xl-5,.padding-y-xl-5{padding-top:4rem!important}.padding-right-xl-5,.padding-x-xl-5{padding-right:4rem!important}.padding-bottom-xl-5,.padding-y-xl-5{padding-bottom:4rem!important}.padding-left-xl-5,.padding-x-xl-5{padding-left:4rem!important}.margin-xl-n1{margin:-.25rem!important}.margin-top-xl-n1,.margin-y-xl-n1{margin-top:-.25rem!important}.margin-right-xl-n1,.margin-x-xl-n1{margin-right:-.25rem!important}.margin-bottom-xl-n1,.margin-y-xl-n1{margin-bottom:-.25rem!important}.margin-left-xl-n1,.margin-x-xl-n1{margin-left:-.25rem!important}.margin-xl-n2{margin:-.5rem!important}.margin-top-xl-n2,.margin-y-xl-n2{margin-top:-.5rem!important}.margin-right-xl-n2,.margin-x-xl-n2{margin-right:-.5rem!important}.margin-bottom-xl-n2,.margin-y-xl-n2{margin-bottom:-.5rem!important}.margin-left-xl-n2,.margin-x-xl-n2{margin-left:-.5rem!important}.margin-xl-n3{margin:-1rem!important}.margin-top-xl-n3,.margin-y-xl-n3{margin-top:-1rem!important}.margin-right-xl-n3,.margin-x-xl-n3{margin-right:-1rem!important}.margin-bottom-xl-n3,.margin-y-xl-n3{margin-bottom:-1rem!important}.margin-left-xl-n3,.margin-x-xl-n3{margin-left:-1rem!important}.margin-xl-n4{margin:-2rem!important}.margin-top-xl-n4,.margin-y-xl-n4{margin-top:-2rem!important}.margin-right-xl-n4,.margin-x-xl-n4{margin-right:-2rem!important}.margin-bottom-xl-n4,.margin-y-xl-n4{margin-bottom:-2rem!important}.margin-left-xl-n4,.margin-x-xl-n4{margin-left:-2rem!important}.margin-xl-n5{margin:-4rem!important}.margin-top-xl-n5,.margin-y-xl-n5{margin-top:-4rem!important}.margin-right-xl-n5,.margin-x-xl-n5{margin-right:-4rem!important}.margin-bottom-xl-n5,.margin-y-xl-n5{margin-bottom:-4rem!important}.margin-left-xl-n5,.margin-x-xl-n5{margin-left:-4rem!important}.margin-xl-auto{margin:auto!important}.margin-top-xl-auto,.margin-y-xl-auto{margin-top:auto!important}.margin-right-xl-auto,.margin-x-xl-auto{margin-right:auto!important}.margin-bottom-xl-auto,.margin-y-xl-auto{margin-bottom:auto!important}.margin-left-xl-auto,.margin-x-xl-auto{margin-left:auto!important}}.h1{font-size:2em}.h2{font-size:1.5em}.h3{font-size:1.17em}.h4{font-size:1em}.h5{font-size:.83em}.h6{font-size:.67em}.cursor-alias{cursor:alias}.cursor-all-scroll{cursor:all-scroll}.cursor-auto{cursor:auto}.cursor-cell{cursor:cell}.cursor-context-menu{cursor:context-menu}.cursor-col-resize{cursor:col-resize}.cursor-copy{cursor:copy}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-e-resize{cursor:e-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-help{cursor:help}.cursor-move{cursor:move}.cursor-n-resize{cursor:n-resize}.cursor-ne-resize{cursor:ne-resize}.cursor-nesw-resize{cursor:nesw-resize}.cursor-ns-resize{cursor:ns-resize}.cursor-nw-resize{cursor:nw-resize}.cursor-nwse-resize{cursor:nwse-resize}.cursor-no-drop{cursor:no-drop}.cursor-none{cursor:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-row-resize{cursor:row-resize}.cursor-s-resize{cursor:s-resize}.cursor-se-resize{cursor:se-resize}.cursor-sw-resize{cursor:sw-resize}.cursor-text{cursor:text}.cursor-w-resize{cursor:w-resize}.cursor-wait{cursor:wait}.cursor-zoom-in{cursor:zoom-in}.cursor-zoom-out{cursor:zoom-out}.mat-tooltip{font-size:16px!important}html,body{height:100%}body{margin:0;padding:0;font-family:opens sans regular,sans-serif}iframe{border:none}.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,Helvetica Neue,sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,Helvetica Neue,sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-subtitle,.mat-card-content{font-size:14px}.mat-checkbox{font-family:Roboto,Helvetica Neue,sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto,Helvetica Neue,sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto,Helvetica Neue,sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-expansion-panel-header{font-family:Roboto,Helvetica Neue,sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(.75);width:133.3333333333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(.75);width:133.3333433333%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.6666666667em;top:calc(100% - 1.7916666667em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);width:133.3333333333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);width:133.3333433333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);width:133.3333533333%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.5416666667em;top:calc(100% - 1.6666666667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59374em) scale(.75);width:133.3333433333%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(.75);width:133.3333433333%}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,Helvetica Neue,sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto,Helvetica Neue,sans-serif}.mat-slider-thumb-label-text{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto,Helvetica Neue,sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:400}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0}.mat-tooltip{font-family:Roboto,Helvetica Neue,sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item,.mat-list-option{font-family:Roboto,Helvetica Neue,sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-simple-snackbar{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale(0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator,.mat-mdc-focus-indicator{position:relative}.title,.header{font-family:Encode Sans Condensed,sans-serif;font-weight:900}.paragraph-title,.tagline{font-family:Open Sans,sans-serif;font-weight:400}.paragraph-title-bold .tagLine-bold{font-family:Open Sans,sans-serif;font-weight:700}.plain-text,.remarks{font-family:Open Sans,sans-serif;font-weight:300}.plain-text-bold{font-family:Open Sans,sans-serif;font-weight:700}.flex-column{box-sizing:border-box;display:flex;flex-direction:column}.flex-row{box-sizing:border-box;display:flex;flex-direction:row}.flex-row-center{align-items:center;justify-content:center}.mat-button-large{line-height:48px;font-size:18px;font-weight:700;padding:0 24px!important}.mat-round{border-radius:.5em}:root{--initial-primary: #4a918e;--initial-accent: #9cd8d7;--initial-warn: #ef4351;--initial-dark-background: #222222;--initial-light-background: #f2f2f2;--initial-light-background: white;--initial-light-text: rgba(0, 0, 0, .87);--initial-dark-text: rgba(255, 255, 255, .87);--background: #050505;--orange-accent: #ff9800;--green-accent: #00e676;--yellow-accent: #fdd835;--purple-accent: #9c27b0;--cyan-accent: rgba(132, 255, 255, .75);--pink-accent: #e91e63;--success: #00e676}body{background-color:var(--initial-dark-background)}::ng-deep .mat-tooltip{font-size:16px!important}:host .valid-control{color:var(--green-accent)}:host .invalid-control{color:var(--theme-warn-500)}:host .actions .item:not(:last-child){margin-right:0}:host .project-thumbnail img{height:50px;width:auto}:host .active{background-color:var(--theme-accent-400);transition:background-color 1s linear}:host .inactive{background-color:#f2f5a900;transition:background-color 1s linear}:host .expansion-panel{width:100%;margin-bottom:10px}:host .expansion-container{max-height:300px;overflow-y:auto}:host .divider-fill-vert{background-color:var(--theme-accent-500);min-height:100%;top:10%;bottom:10%;min-width:5px}:host .divider-fill-hor{background-color:var(--theme-accent-500);height:5px;width:100%}:host .form-disabled{background-color:#797979;opacity:.5;border-radius:4px}::ng-deep input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s;-webkit-text-fill-color:#FFFFFFDE}@media (max-width: 768px){.spread{margin:1em!important}}@media (max-width: 480px){.spread{margin:.5em!important}}.spinner-logo{display:none!important}.flow-card{background-color:#2f2f2f!important}:host ::ng-deep #app-back-button{margin-left:-37px;margin-top:15px}:host ::ng-deep .apps-actions{float:right}:host ::ng-deep .mat-card .mat-card-content{text-align:center;overflow:hidden}:host ::ng-deep .mat-card .mat-card-actions .data-app-actions{display:none!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes{display:flex!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes .mat-icon{font-size:8px}:host ::ng-deep .mat-card:hover .mat-card-actions .data-app-actions{display:flex!important}:host ::ng-deep .mat-card:hover .mat-card-actions .data-app-fakes{display:none!important}:host ::ng-deep .mat-subtitle .mat-chip-list{display:inline-block}:host ::ng-deep .mat-form-field{margin-top:.5em;margin-bottom:.5em}:host ::ng-deep .mat-form-field.with-hint{margin-bottom:1em}@media (max-width: 768px){:host ::ng-deep .form-card{width:100%}:host ::ng-deep .mat-card .mat-card-actions .data-app-actions{display:flex!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes{display:none!important}}:host ::ng-deep .domain-item{border-radius:5;border:var(--theme-accent-500) solid 1px}\n"] }]
554
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ApplicationsFlowService }, { type: i3.EaCService }]; }, propDecorators: { Data: [{
555
+ type: Input,
556
+ args: ['data']
557
+ }], SourceControlFormControls: [{
558
+ type: ViewChild,
559
+ args: [SourceControlFormControlsComponent]
560
+ }] } });
561
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcy1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi9zcmMvbGliL2VsZW1lbnRzL3Byb2plY3RzL2NvbnRyb2xzL3RhYnMvYXBwcy1mbG93L2FwcHMtZmxvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9lbGVtZW50cy9wcm9qZWN0cy9jb250cm9scy90YWJzL2FwcHMtZmxvdy9hcHBzLWZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFJTCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQVN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRekcsTUFBTSxPQUFPLGlCQUFpQjtJQTZRNUIsZ0JBQWdCO0lBQ2hCLFlBQ1ksUUFBcUIsRUFDckIsV0FBb0MsRUFDcEMsTUFBa0I7UUFGbEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUU1QixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBRTFCLDRCQUE0QjtRQUU1QiwyQkFBMkI7SUFDN0IsQ0FBQztJQXhSRCxVQUFVO0lBRVYsY0FBYztJQUNkLElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUM7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QUMsU0FBUyxFQUFFLGNBQWMsSUFBSSxLQUFLLEVBQzFELEVBQUUsQ0FDSCxDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRVMsaUJBQWlCO1FBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQ2xDLFdBQVcsRUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDbkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxTQUFTLElBQUksS0FBSyxFQUN4RCxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FDdEIsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FDbEMsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUNuQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLGVBQWUsSUFBSSxLQUFLLEVBQzlELENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUN0QixDQUNGLENBQUM7SUFDSixDQUFDOzs4R0F0MUJVLGlCQUFpQjtrR0FBakIsaUJBQWlCLG9KQThPakIsa0NBQWtDLGdEQ3ZRL0Msd3d3QkE4c0JBOzJGRHJyQmEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWU7aUtBNERsQixJQUFJO3NCQURWLEtBQUs7dUJBQUMsTUFBTTtnQkF3TE4seUJBQXlCO3NCQUQvQixTQUFTO3VCQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtR3JvdXAsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RWFDU2VydmljZSwgU2F2ZUFwcGxpY2F0aW9uQXNDb2RlRXZlbnRSZXF1ZXN0fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9lYWMuc2VydmljZSc7XG5pbXBvcnQge1xuICBFYUNBcHBsaWNhdGlvbkFzQ29kZSxcbiAgRWFDRW52aXJvbm1lbnRBc0NvZGUsXG4gIEVhQ1Byb2Nlc3NvcixcbiAgRWFDUHJvamVjdEFzQ29kZSxcbiAgRWFDU291cmNlQ29udHJvbCxcbn0gZnJvbSAnQHNlbWFudGljanMvY29tbW9uJztcbmltcG9ydCB7IEd1aWQgfSBmcm9tICdAbGN1L2NvbW1vbic7XG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgU291cmNlQ29udHJvbEZvcm1Db250cm9sc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Zvcm1zL3NvdXJjZS1jb250cm9sL3NvdXJjZS1jb250cm9sLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbnNGbG93U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9ucy1mbG93LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsY3UtYXBwcy1mbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcHMtZmxvdy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcHMtZmxvdy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBzRmxvd0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vICBGaWVsZHNcblxuICAvLyAgUHJvcGVydGllc1xuICBwdWJsaWMgZ2V0IEFQSVJvb3RGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5hcGlSb290O1xuICB9XG5cbiAgcHVibGljIEFwcGxpY2F0aW9uRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgcHVibGljIGdldCBBcHBsaWNhdGlvbklERm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMuYXBwbGljYXRpb25JZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQXBwbGljYXRpb25Mb29rdXBzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLkFwcGxpY2F0aW9ucyB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEFwcGxpY2F0aW9uUm91dGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLlJvdXRlZEFwcGxpY2F0aW9ucyB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEFwcGxpY2F0aW9uc0JhbmsoKTogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSB9IHtcbiAgICByZXR1cm4gdGhpcy5EYXRhPy5BcHBsaWNhdGlvbnMgfHwge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IEFwcGxpY2F0aW9ucygpOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0FwcGxpY2F0aW9uQXNDb2RlIH0ge1xuICAgIGNvbnN0IGFwcHM6IHsgW2xvb2t1cDogc3RyaW5nXTogRWFDQXBwbGljYXRpb25Bc0NvZGUgfSA9IHt9O1xuXG4gICAgdGhpcy5Qcm9qZWN0LkFwcGxpY2F0aW9uTG9va3Vwcy5mb3JFYWNoKChhcHBMb29rdXApID0+IHtcbiAgICAgIGFwcHNbYXBwTG9va3VwXSA9IHRoaXMuQXBwbGljYXRpb25zQmFua1thcHBMb29rdXBdO1xuICAgIH0pO1xuICAgIHJldHVybiBhcHBzO1xuICB9XG5cbiAgcHVibGljIGdldCBCdWlsZEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLmJ1aWxkO1xuICB9XG5cbiAgcHVibGljIGdldCBDbGllbnRJREZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLmNsaWVudElkO1xuICB9XG5cbiAgcHVibGljIGdldCBDbGllbnRTZWNyZXRGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5jbGllbnRTZWNyZXQ7XG4gIH1cblxuICBwdWJsaWMgQ3VycmVudEFwcGxpY2F0aW9uUm91dGU6IHN0cmluZztcblxuICBwdWJsaWMgZ2V0IEN1cnJlbnRSb3V0ZUFwcGxpY2F0aW9uTG9va3VwcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoXG4gICAgICB0aGlzLlJvdXRlZEFwcGxpY2F0aW9uc1t0aGlzLkN1cnJlbnRBcHBsaWNhdGlvblJvdXRlXSB8fCB7fVxuICAgICk7XG4gIH1cblxuICBASW5wdXQoJ2RhdGEnKVxuICBwdWJsaWMgRGF0YToge1xuICAgIEFwcGxpY2F0aW9uczogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSB9O1xuICAgIEVudmlyb25tZW50OiBFYUNFbnZpcm9ubWVudEFzQ29kZTtcbiAgICBQcmltYXJ5SG9zdDogc3RyaW5nO1xuICAgIFByb2plY3Q6IEVhQ1Byb2plY3RBc0NvZGU7XG4gICAgUHJvamVjdExvb2t1cDogc3RyaW5nO1xuICB9O1xuXG4gIHB1YmxpYyBnZXQgRGVmYXVsdEZpbGVGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5kZWZhdWx0RmlsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRGVmYXVsdFNvdXJjZUNvbnRyb2woKTogRWFDU291cmNlQ29udHJvbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIE9yZ2FuaXphdGlvbjogdGhpcy5FZGl0aW5nQXBwbGljYXRpb24/Lkxvd0NvZGVVbml0Py5Pcmdhbml6YXRpb24sXG4gICAgICBSZXBvc2l0b3J5OiB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbj8uTG93Q29kZVVuaXQ/LlJlcG9zaXRvcnksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRGVzY3JpcHRpb25Gb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRWRpdGluZ0FwcGxpY2F0aW9uKCk6IEVhQ0FwcGxpY2F0aW9uQXNDb2RlIHtcbiAgICBsZXQgYXBwID0gdGhpcy5BcHBsaWNhdGlvbnNcbiAgICAgID8gdGhpcy5BcHBsaWNhdGlvbnNbdGhpcy5FZGl0aW5nQXBwbGljYXRpb25Mb29rdXBdXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoYXBwID09IG51bGwgJiYgdGhpcy5FZGl0aW5nQXBwbGljYXRpb25Mb29rdXApIHtcbiAgICAgIGFwcCA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICBwdWJsaWMgRWRpdGluZ0FwcGxpY2F0aW9uTG9va3VwOiBzdHJpbmc7XG5cbiAgcHVibGljIGdldCBIYXNCdWlsZEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLmhhc0J1aWxkO1xuICB9XG5cbiAgcHVibGljIGdldCBJbmJvdW5kUGF0aEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLmluYm91bmRQYXRoO1xuICB9XG5cbiAgcHVibGljIGdldCBJc1ByaXZhdGVGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5pc1ByaXZhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IElzVHJpZ2dlclNpZ25JbkZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLmlzVHJpZ2dlclNpZ25JbjtcbiAgfVxuXG4gIHB1YmxpYyBMQ1VUeXBlOiBzdHJpbmc7XG5cbiAgcHVibGljIGdldCBNZXRob2RzRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMubWV0aG9kcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgTmFtZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFBhY2thZ2VGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5wYWNrYWdlO1xuICB9XG5cbiAgcHVibGljIElzUGVybWFuZW50OiBib29sZWFuO1xuXG4gIHB1YmxpYyBJc1ByZXNlcnZlOiBib29sZWFuO1xuXG4gIHB1YmxpYyByZWRpcmVjdFRvb2x0aXA6IHN0cmluZztcblxuICBwdWJsaWMgZ2V0IFBlcm1hbmVudEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLnBlcm1hbmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgUHJlc2VydmVNZXRob2RGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5wcmVzZXJ2ZU1ldGhvZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgUHJpbWFyeUhvc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5EYXRhLlByaW1hcnlIb3N0O1xuICB9XG5cbiAgcHVibGljIFByb2Nlc3NvclR5cGU6IHN0cmluZztcblxuICBwdWJsaWMgZ2V0IFByb2plY3QoKTogRWFDUHJvamVjdEFzQ29kZSB7XG4gICAgcmV0dXJuIHRoaXMuRGF0YS5Qcm9qZWN0O1xuICB9XG5cbiAgcHVibGljIGdldCBQcm9qZWN0TG9va3VwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuRGF0YS5Qcm9qZWN0TG9va3VwO1xuICB9XG5cbiAgcHVibGljIGdldCBSZWRpcmVjdEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLnJlZGlyZWN0O1xuICB9XG5cbiAgcHVibGljIGdldCBSb3V0ZWRBcHBsaWNhdGlvbnMoKToge1xuICAgIFtyb3V0ZTogc3RyaW5nXTogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSB9O1xuICB9IHtcbiAgICBjb25zdCBhcHBMb29rdXBzID0gT2JqZWN0LmtleXModGhpcy5BcHBsaWNhdGlvbnMpO1xuXG4gICAgY29uc3QgYXBwcyA9IGFwcExvb2t1cHMubWFwKChhcHBMb29rdXApID0+IHRoaXMuQXBwbGljYXRpb25zW2FwcExvb2t1cF0pO1xuXG4gICAgbGV0IGFwcFJvdXRlcyA9XG4gICAgICBhcHBzLm1hcCgoYXBwKSA9PiB7XG4gICAgICAgIHJldHVybiBhcHAuTG9va3VwQ29uZmlnPy5QYXRoUmVnZXgucmVwbGFjZSgnLionLCAnJyk7XG4gICAgICB9KSB8fCBbXTtcblxuICAgIGFwcFJvdXRlcyA9IGFwcFJvdXRlcy5maWx0ZXIoKGFyKSA9PiBhciAhPSBudWxsKTtcblxuICAgIGxldCByb3V0ZUJhc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgYXBwUm91dGVzLmZvckVhY2goKGFwcFJvdXRlKSA9PiB7XG4gICAgICBjb25zdCBhcHBSb3V0ZVBhcnRzID0gYXBwUm91dGUuc3BsaXQoJy8nKTtcblxuICAgICAgY29uc3QgYXBwUm91dGVCYXNlID0gYC8ke2FwcFJvdXRlUGFydHNbMV19YDtcblxuICAgICAgaWYgKHJvdXRlQmFzZXMuaW5kZXhPZihhcHBSb3V0ZUJhc2UpIDwgMCkge1xuICAgICAgICByb3V0ZUJhc2VzLnB1c2goYXBwUm91dGVCYXNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCB3b3JraW5nQXBwTG9va3VwcyA9IFsuLi4oYXBwTG9va3VwcyB8fCBbXSldO1xuXG4gICAgcm91dGVCYXNlcyA9IHJvdXRlQmFzZXMuc29ydCgoYSwgYikgPT4gYi5sb2NhbGVDb21wYXJlKGEpKTtcblxuICAgIGNvbnN0IHJvdXRlU2V0ID1cbiAgICAgIHJvdXRlQmFzZXMucmVkdWNlKChwcmV2Um91dGVNYXAsIGN1cnJlbnRSb3V0ZUJhc2UpID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGVNYXAgPSB7XG4gICAgICAgICAgLi4ucHJldlJvdXRlTWFwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQXBwTG9va3VwcyA9IHdvcmtpbmdBcHBMb29rdXBzLmZpbHRlcigod2FsKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2EgPSB0aGlzLkFwcGxpY2F0aW9uc1t3YWxdO1xuXG4gICAgICAgICAgcmV0dXJuIHdhLkxvb2t1cENvbmZpZz8uUGF0aFJlZ2V4LnN0YXJ0c1dpdGgoY3VycmVudFJvdXRlQmFzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlTWFwW2N1cnJlbnRSb3V0ZUJhc2VdID1cbiAgICAgICAgICBmaWx0ZXJlZEFwcExvb2t1cHMucmVkdWNlKChwcmV2QXBwTWFwLCBhcHBMb29rdXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcE1hcCA9IHtcbiAgICAgICAgICAgICAgLi4ucHJldkFwcE1hcCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGFwcE1hcFthcHBMb29rdXBdID0gdGhpcy5BcHBsaWNhdGlvbnNbYXBwTG9va3VwXTtcblxuICAgICAgICAgICAgcmV0dXJuIGFwcE1hcDtcbiAgICAgICAgICB9LCB7fSkgfHwge307XG5cbiAgICAgICAgd29ya2luZ0FwcExvb2t1cHMgPSB3b3JraW5nQXBwTG9va3Vwcy5maWx0ZXIoKHdhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZpbHRlcmVkQXBwTG9va3Vwcy5pbmRleE9mKHdhKSA8IDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByb3V0ZU1hcDtcbiAgICAgIH0sIHt9KSB8fCB7fTtcblxuICAgIGxldCByb3V0ZVNldEtleXMgPSBPYmplY3Qua2V5cyhyb3V0ZVNldCk7XG5cbiAgICByb3V0ZVNldEtleXMgPSByb3V0ZVNldEtleXMuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuICAgIGNvbnN0IHJvdXRlU2V0UmVzdWx0ID0ge307XG5cbiAgICByb3V0ZVNldEtleXMuZm9yRWFjaCgocnNrKSA9PiAocm91dGVTZXRSZXN1bHRbcnNrXSA9IHJvdXRlU2V0W3Jza10pKTtcblxuICAgIHJldHVybiByb3V0ZVNldFJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgUm91dGVGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5yb3V0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU2NvcGVzRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMuc2NvcGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBTZWN1cml0eUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLnNlY3VyaXR5O1xuICB9XG5cbiAgQFZpZXdDaGlsZChTb3VyY2VDb250cm9sRm9ybUNvbnRyb2xzQ29tcG9uZW50KVxuICBwdWJsaWMgU291cmNlQ29udHJvbEZvcm1Db250cm9sczogU291cmNlQ29udHJvbEZvcm1Db250cm9sc0NvbXBvbmVudDtcblxuICBwdWJsaWMgZ2V0IFNvdXJjZUNvbnRyb2xMb29rdXBGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5zb3VyY2VDb250cm9sTG9va3VwO1xuICB9XG5cbiAgcHVibGljIGdldCBTb3VyY2VDb250cm9sTG9va3VwcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5Tb3VyY2VDb250cm9scyB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFNvdXJjZUNvbnRyb2xzKCk6IHsgW2xvb2t1cDogc3RyaW5nXTogRWFDU291cmNlQ29udHJvbCB9IHtcbiAgICByZXR1cm4gdGhpcy5EYXRhLkVudmlyb25tZW50LlNvdXJjZXMgfHwge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IFNQQVJvb3RGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5zcGFSb290O1xuICB9XG5cbiAgcHVibGljIGdldCBUb2tlbkxvb2t1cEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLnRva2VuTG9va3VwO1xuICB9XG5cbiAgcHVibGljIGdldCBWZXJzaW9uRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMudmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgWmlwRmlsZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLnppcEZpbGU7XG4gIH1cblxuICAvLyAgQ29uc3RydWN0b3JzXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtQmxkcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIGFwcHNGbG93U3ZjOiBBcHBsaWNhdGlvbnNGbG93U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZWFjU3ZjOiBFYUNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uTG9va3VwID0gbnVsbDtcbiAgICB0aGlzLnJlZGlyZWN0VG9vbHRpcCA9ICcnO1xuXG4gICAgLy8gdGhpcy5Jc1Blcm1hbmVudCA9IGZhbHNlO1xuXG4gICAgLy8gdGhpcy5Jc1ByZXNlcnZlID0gZmFsc2U7XG4gIH1cblxuICAvLyAgTGlmZSBDeWNsZVxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuQXBwbGljYXRpb25Mb29rdXBzPy5sZW5ndGggPD0gMCkge1xuICAgICAgdGhpcy5DcmVhdGVOZXdBcHBsaWNhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vICBBUEkgTWV0aG9kc1xuICBwdWJsaWMgQ3JlYXRlTmV3QXBwbGljYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5TZXRFZGl0aW5nQXBwbGljYXRpb24oR3VpZC5DcmVhdGVSYXcoKSk7XG4gIH1cblxuICBwdWJsaWMgRGVsZXRlQXBwbGljYXRpb24oYXBwTG9va3VwOiBzdHJpbmcsIGFwcE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZWFjU3ZjLkRlbGV0ZUFwcGxpY2F0aW9uKGFwcExvb2t1cCwgYXBwTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgTENVVHlwZUNoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMuTENVVHlwZSA9IGV2ZW50LnZhbHVlO1xuXG4gICAgdGhpcy5zZXR1cExjdVR5cGVTdWJGb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgUHJvY2Vzc29yVHlwZUNoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMuUHJvY2Vzc29yVHlwZSA9IGV2ZW50LnZhbHVlO1xuXG4gICAgdGhpcy5zZXR1cFByb2Nlc3NvclR5cGVTdWJGb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgRGV0ZXJtaW5lVG9vbHRpcFRleHQoKSB7XG4gICAgbGV0IHBlcm1hbmVudFZhbHVlID0gdGhpcy5QZXJtYW5lbnRGb3JtQ29udHJvbC52YWx1ZTtcbiAgICBsZXQgcHJlc2VydmVWYWx1ZSA9IHRoaXMuUHJlc2VydmVNZXRob2RGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgIGlmIChwZXJtYW5lbnRWYWx1ZSA9PT0gdHJ1ZSAmJiBwcmVzZXJ2ZVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5yZWRpcmVjdFRvb2x0aXAgPSAnMzAxIOKAkyBQZXJtYW5lbnQgYW5kIE5vdCBQcmVzZXJ2ZSc7XG4gICAgfSBlbHNlIGlmIChwZXJtYW5lbnRWYWx1ZSA9PT0gZmFsc2UgJiYgcHJlc2VydmVWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucmVkaXJlY3RUb29sdGlwID0gJzMwMiDigJMgTm90IFBlcm1hbmVudCBhbmQgTm90IFByZXNlcnZlJztcbiAgICB9IGVsc2UgaWYgKHBlcm1hbmVudFZhbHVlID09PSBmYWxzZSAmJiBwcmVzZXJ2ZVZhbHVlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnJlZGlyZWN0VG9vbHRpcCA9ICczMDcg4oCTIE5vdCBQZXJtYW5lbnQgYW5kIFByZXNlcnZlJztcbiAgICB9IGVsc2UgaWYgKHBlcm1hbmVudFZhbHVlID09PSB0cnVlICYmIHByZXNlcnZlVmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMucmVkaXJlY3RUb29sdGlwID0gJzMwOCDigJMgUGVybWFuZW50IGFuZCBQcmVzZXJ2ZSc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIEdldFByb2Nlc3NvclR5cGUoYXBwTG9va3VwOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBwcm9jZXNzb3JUeXBlID0gJyc7XG4gICAgcHJvY2Vzc29yVHlwZSA9IHRoaXMuQXBwbGljYXRpb25zW2FwcExvb2t1cF0uUHJvY2Vzc29yLlR5cGVcbiAgICAgID8gdGhpcy5BcHBsaWNhdGlvbnNbYXBwTG9va3VwXS5Qcm9jZXNzb3IuVHlwZVxuICAgICAgOiAnJztcbiAgICAvLyBjb25zb2xlLmxvZyhcIlB0eXBlID0gXCIsIHByb2Nlc3NvclR5cGUpO1xuXG4gICAgcmV0dXJuIHByb2Nlc3NvclR5cGU7XG4gIH1cblxuICBwdWJsaWMgRWRpdEFwcGxpY2F0aW9uUm91dGVDbGlja2VkKGFwcFJvdXRlOiBhbnkpIHtcbiAgICB0aGlzLkN1cnJlbnRBcHBsaWNhdGlvblJvdXRlID0gYXBwUm91dGU7XG4gIH1cblxuICBwdWJsaWMgU2F2ZUFwcGxpY2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGFwcDogRWFDQXBwbGljYXRpb25Bc0NvZGUgPSB7XG4gICAgICBBcHBsaWNhdGlvbjoge1xuICAgICAgICBOYW1lOiB0aGlzLk5hbWVGb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuRGVzY3JpcHRpb25Gb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgUHJpb3JpdHlTaGlmdDogdGhpcy5FZGl0aW5nQXBwbGljYXRpb24/LkFwcGxpY2F0aW9uPy5Qcmlvcml0eVNoaWZ0IHx8IDAsXG4gICAgICB9LFxuICAgICAgQWNjZXNzUmlnaHRMb29rdXBzOiBbXSxcbiAgICAgIERhdGFUb2tlbnM6IHt9LFxuICAgICAgTGljZW5zZUNvbmZpZ3VyYXRpb25Mb29rdXBzOiBbXSxcbiAgICAgIExvb2t1cENvbmZpZzoge1xuICAgICAgICBJc1ByaXZhdGU6IHRoaXMuSXNQcml2YXRlRm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgIElzVHJpZ2dlclNpZ25JbjogdGhpcy5Jc1ByaXZhdGVGb3JtQ29udHJvbC52YWx1ZVxuICAgICAgICAgID8gdGhpcy5Jc1RyaWdnZXJTaWduSW5Gb3JtQ29udHJvbC52YWx1ZVxuICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgIFBhdGhSZWdleDogYCR7dGhpcy5Sb3V0ZUZvcm1Db250cm9sLnZhbHVlfS4qYCxcbiAgICAgICAgUXVlcnlSZWdleDogdGhpcy5FZGl0aW5nQXBwbGljYXRpb24/Lkxvb2t1cENvbmZpZz8uUXVlcnlSZWdleCB8fCAnJyxcbiAgICAgICAgSGVhZGVyUmVnZXg6IHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uPy5Mb29rdXBDb25maWc/LkhlYWRlclJlZ2V4IHx8ICcnLFxuICAgICAgICBBbGxvd2VkTWV0aG9kczogdGhpcy5NZXRob2RzRm9ybUNvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgPy5zcGxpdCgnICcpXG4gICAgICAgICAgLmZpbHRlcigodjogc3RyaW5nKSA9PiAhIXYpLFxuICAgICAgfSxcbiAgICAgIFByb2Nlc3Nvcjoge1xuICAgICAgICBUeXBlOiB0aGlzLlByb2Nlc3NvclR5cGUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKGFwcC5Qcm9jZXNzb3IuVHlwZSkge1xuICAgICAgY2FzZSAnREZTJzpcbiAgICAgICAgYXBwLlByb2Nlc3Nvci5CYXNlSHJlZiA9IGAke3RoaXMuUm91dGVGb3JtQ29udHJvbC52YWx1ZX0vYC5yZXBsYWNlKFxuICAgICAgICAgICcvLycsXG4gICAgICAgICAgJy8nXG4gICAgICAgICk7XG5cbiAgICAgICAgYXBwLlByb2Nlc3Nvci5EZWZhdWx0RmlsZSA9XG4gICAgICAgICAgdGhpcy5EZWZhdWx0RmlsZUZvcm1Db250cm9sLnZhbHVlIHx8ICdpbmRleC5odG1sJztcblxuICAgICAgICBhcHAuTG93Q29kZVVuaXQgPSB7XG4gICAgICAgICAgVHlwZTogdGhpcy5MQ1VUeXBlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHN3aXRjaCAoYXBwLkxvd0NvZGVVbml0LlR5cGUpIHtcbiAgICAgICAgICBjYXNlICdHaXRIdWInOlxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0Lk9yZ2FuaXphdGlvbiA9XG4gICAgICAgICAgICAgIHRoaXMuU291cmNlQ29udHJvbEZvcm1Db250cm9scy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LlJlcG9zaXRvcnkgPVxuICAgICAgICAgICAgICB0aGlzLlNvdXJjZUNvbnRyb2xGb3JtQ29udHJvbHMuUmVwb3NpdG9yeUZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQuQnVpbGQgPSB0aGlzLkJ1aWxkRm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5QYXRoID1cbiAgICAgICAgICAgICAgdGhpcy5Tb3VyY2VDb250cm9sRm9ybUNvbnRyb2xzLkJ1aWxkUGF0aEZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdOUE0nOlxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LlBhY2thZ2UgPSB0aGlzLlBhY2thZ2VGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LlZlcnNpb24gPSB0aGlzLlZlcnNpb25Gb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnWmlwJzpcbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5aaXBGaWxlID0gdGhpcy5aaXBGaWxlRm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnT0F1dGgnOlxuICAgICAgICBhcHAuUHJvY2Vzc29yLlNjb3BlcyA9IHRoaXMuU2NvcGVzRm9ybUNvbnRyb2wudmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICBhcHAuUHJvY2Vzc29yLlRva2VuTG9va3VwID0gdGhpcy5Ub2tlbkxvb2t1cEZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgIGFwcC5Mb3dDb2RlVW5pdCA9IHtcbiAgICAgICAgICBUeXBlOiB0aGlzLkxDVVR5cGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoIChhcHAuTG93Q29kZVVuaXQuVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ0dpdEh1Yk9BdXRoJzpcbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5DbGllbnRJRCA9IHRoaXMuQ2xpZW50SURGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LkNsaWVudFNlY3JldCA9IHRoaXMuQ2xpZW50U2VjcmV0Rm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUHJveHknOlxuICAgICAgICBhcHAuUHJvY2Vzc29yLkluYm91bmRQYXRoID0gdGhpcy5JbmJvdW5kUGF0aEZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgIGFwcC5Mb3dDb2RlVW5pdCA9IHtcbiAgICAgICAgICBUeXBlOiB0aGlzLkxDVVR5cGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoIChhcHAuTG93Q29kZVVuaXQuVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ0FQSSc6XG4gICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQuQVBJUm9vdCA9IHRoaXMuQVBJUm9vdEZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQuU2VjdXJpdHkgPSB0aGlzLlNlY3VyaXR5Rm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnU1BBJzpcbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5TUEFSb290ID0gdGhpcy5TUEFSb290Rm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUmVkaXJlY3QnOlxuICAgICAgICBhcHAuUHJvY2Vzc29yLlBlcm1hbmVudCA9ICEhdGhpcy5QZXJtYW5lbnRGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICBhcHAuUHJvY2Vzc29yLlByZXNlcnZlTWV0aG9kID0gISF0aGlzLlByZXNlcnZlTWV0aG9kRm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgYXBwLlByb2Nlc3Nvci5SZWRpcmVjdCA9IHRoaXMuUmVkaXJlY3RGb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKCFhcHAuTG9va3VwQ29uZmlnLlBhdGhSZWdleC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIGFwcC5Mb29rdXBDb25maWcuUGF0aFJlZ2V4ID0gYC8ke2FwcC5Mb29rdXBDb25maWcuUGF0aFJlZ2V4fWA7XG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZUFwcFJlcTogU2F2ZUFwcGxpY2F0aW9uQXNDb2RlRXZlbnRSZXF1ZXN0ID0ge1xuICAgICAgUHJvamVjdExvb2t1cDogdGhpcy5Qcm9qZWN0TG9va3VwLFxuICAgICAgQXBwbGljYXRpb246IGFwcCxcbiAgICAgIEFwcGxpY2F0aW9uTG9va3VwOiB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbkxvb2t1cCB8fCBHdWlkLkNyZWF0ZVJhdygpLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5IYXNCdWlsZEZvcm1Db250cm9sLnZhbHVlICYmIHRoaXMuUHJvY2Vzc29yVHlwZSAhPT0gJ3JlZGlyZWN0Jykge1xuICAgICAgaWYgKGFwcCkge1xuICAgICAgICBhcHAuU291cmNlQ29udHJvbExvb2t1cCA9IHRoaXMuU291cmNlQ29udHJvbExvb2t1cEZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXBwKSB7XG4gICAgICBhcHAuU291cmNlQ29udHJvbExvb2t1cCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5lYWNTdmMuU2F2ZUFwcGxpY2F0aW9uQXNDb2RlKHNhdmVBcHBSZXEpO1xuICB9XG5cbiAgcHVibGljIFNldEVkaXRpbmdBcHBsaWNhdGlvbihhcHBMb29rdXA6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uTG9va3VwID0gYXBwTG9va3VwO1xuXG4gICAgdGhpcy5zZXR1cEFwcGxpY2F0aW9uRm9ybSgpO1xuICB9XG5cbiAgcHVibGljIFNvdXJjZUNvbnRyb2xMb29rdXBDaGFuZ2VkKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpOiB2b2lkIHtcbiAgICAvLyAgVE9ETzogIEFueXRoaW5nIHRvIGRvIGhlcmUgb24gY2hhbmdlP1xuICB9XG5cbiAgcHVibGljIFN0YXJ0c1dpdGgoYXBwOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSwgYXBwUm91dGVCYXNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoYXBwUm91dGVCYXNlID09PSAnLycpIHtcbiAgICAgIHJldHVybiBhcHA/Lkxvb2t1cENvbmZpZz8uUGF0aFJlZ2V4ID09PSAnLy4qJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFwcD8uTG9va3VwQ29uZmlnPy5QYXRoUmVnZXguc3RhcnRzV2l0aChhcHBSb3V0ZUJhc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBVbnBhY2soYXBwTG9va3VwOiBzdHJpbmcsIGFwcDogRWFDQXBwbGljYXRpb25Bc0NvZGUpOiB2b2lkIHtcbiAgICB0aGlzLmVhY1N2Yy5VbnBhY2tMb3dDb2RlVW5pdCh7XG4gICAgICBBcHBsaWNhdGlvbkxvb2t1cDogYXBwTG9va3VwLFxuICAgICAgQXBwbGljYXRpb25OYW1lOiBhcHAuQXBwbGljYXRpb24/Lk5hbWUsXG4gICAgICBWZXJzaW9uOiBhcHAuTG93Q29kZVVuaXQ/LlZlcnNpb24gfHwgYXBwLkxvd0NvZGVVbml0Py5CdWlsZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vICBIZWxwZXJzXG4gIHByb3RlY3RlZCBjbGVhbnVwTGN1VHlwZVN1YkZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdtZXRob2RzJyk7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdhcGlSb290Jyk7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdzZWN1cml0eScpO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdzcGFSb290Jyk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ2FwcGxpY2F0aW9uSWQnKTtcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnYnVpbGQnKTtcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnY2xpZW50SWQnKTtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ2NsaWVudFNlY3JldCcpO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCd6aXBGaWxlJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW51cFByb2Nlc3NvclR5cGVTdWJGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnZGVmYXVsdEZpbGUnKTtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ2Rmc0xjdVR5cGUnKTtcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnb2F1dGhMY3VUeXBlJyk7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdzY29wZXMnKTtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3Rva2VuTG9va3VwJyk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ2luYm91bmRQYXRoJyk7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdwcm94eUxjdVR5cGUnKTtcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgncmVkaXJlY3QnKTtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3Blcm1hbmVudCcpO1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgncHJlc2VydmVNZXRob2QnKTtcblxuICAgIHRoaXMuY2xlYW51cExjdVR5cGVTdWJGb3JtKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBBcHBsaWNhdGlvbkZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5Qcm9jZXNzb3JUeXBlID0gdGhpcy5FZGl0aW5nQXBwbGljYXRpb24/LlByb2Nlc3Nvcj8uVHlwZSB8fCAnJztcbiAgICBjb25zb2xlLmxvZygnUHJvY2Vzc29yVHlwZSA9ICcsIHRoaXMuUHJvY2Vzc29yVHlwZSk7XG5cbiAgICBpZiAodGhpcy5FZGl0aW5nQXBwbGljYXRpb24gIT0gbnVsbCkge1xuICAgICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cCA9IHRoaXMuZm9ybUJsZHIuZ3JvdXAoe1xuICAgICAgICBuYW1lOiBbdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uQXBwbGljYXRpb24/Lk5hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBkZXNjcmlwdGlvbjogW1xuICAgICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkFwcGxpY2F0aW9uPy5EZXNjcmlwdGlvbixcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBdLFxuICAgICAgICByb3V0ZTogW1xuICAgICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvb2t1cENvbmZpZz8uUGF0aFJlZ2V4LnJlcGxhY2UoJy4qJywgJycpIHx8XG4gICAgICAgICAgICAnLycsXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gcHJpb3JpdHk6IFtcbiAgICAgICAgLy8gICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5BcHBsaWNhdGlvbj8uUHJpb3JpdHkgfHwgMTAwMDAsXG4gICAgICAgIC8vICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgLy8gXSxcbiAgICAgICAgcHJvY1R5cGU6IFt0aGlzLlByb2Nlc3NvclR5cGUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXR1cEJ1aWxkRm9ybSgpO1xuXG4gICAgICB0aGlzLnNldHVwU2VjdXJpdHlGb3JtKCk7XG5cbiAgICAgIHRoaXMuc2V0dXBQcm9jZXNzb3JUeXBlU3ViRm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cEJ1aWxkRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnaGFzQnVpbGQnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICAhIXRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5Tb3VyY2VDb250cm9sTG9va3VwIHx8IGZhbHNlLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ3NvdXJjZUNvbnRyb2xMb29rdXAnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb3dDb2RlVW5pdD8uU291cmNlQ29udHJvbExvb2t1cCB8fCAnJyxcbiAgICAgICAgW11cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwRGZzRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLkxDVVR5cGUgPSB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb3dDb2RlVW5pdD8uVHlwZSB8fCAnJztcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdkZWZhdWx0RmlsZScsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLlByb2Nlc3Nvcj8uRGVmYXVsdEZpbGUgfHwgJ2luZGV4Lmh0bWwnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ2xjdVR5cGUnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKHRoaXMuTENVVHlwZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBMQ1VBUElGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdtZXRob2RzJyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG9va3VwQ29uZmlnPy5BbGxvd2VkTWV0aG9kcz8uam9pbignICcpIHx8ICcnLFxuICAgICAgICBbXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnYXBpUm9vdCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5BUElSb290IHx8ICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ3NlY3VyaXR5JyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG93Q29kZVVuaXQ/LlNlY3VyaXR5IHx8ICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwTENVQXBwbGljYXRpb25Qb2ludGVyRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnYXBwbGljYXRpb25JZCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5BcHBsaWNhdGlvbklEIHx8ICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwTENVR2l0SHViRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnYnVpbGQnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb3dDb2RlVW5pdD8uQnVpbGQgfHwgJ2xhdGVzdCcsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBMQ1VHaXRIdWJPQXV0aEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ2NsaWVudElkJyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG93Q29kZVVuaXQ/LkNsaWVudElEIHx8ICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ2NsaWVudFNlY3JldCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5DbGllbnRTZWNyZXQgfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBMQ1VOUE1Gb3JtKCk6IHZvaWQge1xuICAgIC8vIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAvLyAgICdwYWNrYWdlJyxcbiAgICAvLyAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAvLyAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG93Q29kZVVuaXQ/LlBhY2thZ2UgfHwgJycsXG4gICAgLy8gICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgIC8vICAgKVxuICAgIC8vICk7XG4gICAgLy8gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgIC8vICAgJ3ZlcnNpb24nLFxuICAgIC8vICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgIC8vICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb3dDb2RlVW5pdD8uVmVyc2lvbiB8fCAnJyxcbiAgICAvLyAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgLy8gICApXG4gICAgLy8gKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cExDVVNQQUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ3NwYVJvb3QnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb3dDb2RlVW5pdD8uU1BBUm9vdCB8fCAnJyxcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cExDVVppcEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ3ppcEZpbGUnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb3dDb2RlVW5pdD8uWmlwRmlsZSB8fCAnJyxcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cExjdVR5cGVTdWJGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cExjdVR5cGVTdWJGb3JtKCk7XG5cbiAgICAvLyB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3BhY2thZ2UnKTtcbiAgICAvLyB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3ZlcnNpb24nKTtcblxuICAgIGlmICh0aGlzLkxDVVR5cGUpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5MQ1VUeXBlKSB7XG4gICAgICAgIGNhc2UgJ0FQSSc6XG4gICAgICAgICAgdGhpcy5zZXR1cExDVUFQSUZvcm0oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdBcHBsaWNhdGlvblBvaW50ZXInOlxuICAgICAgICAgIHRoaXMuc2V0dXBMQ1VBcHBsaWNhdGlvblBvaW50ZXJGb3JtKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnR2l0SHViJzpcbiAgICAgICAgICB0aGlzLnNldHVwTENVR2l0SHViRm9ybSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ0dpdEh1Yk9BdXRoJzpcbiAgICAgICAgICB0aGlzLnNldHVwTENVR2l0SHViT0F1dGhGb3JtKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnTlBNJzpcbiAgICAgICAgICB0aGlzLnNldHVwTENVTlBNRm9ybSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1NQQSc6XG4gICAgICAgICAgdGhpcy5zZXR1cExDVVNQQUZvcm0oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdaaXAnOlxuICAgICAgICAgIHRoaXMuc2V0dXBMQ1VaaXBGb3JtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwT0F1dGhGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuTENVVHlwZSA9IHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5UeXBlIHx8ICcnO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ3Njb3BlcycsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLlByb2Nlc3Nvcj8uU2NvcGVzPy5Kb2luKCcgJykgfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAndG9rZW5Mb29rdXAnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Qcm9jZXNzb3I/LlRva2VuTG9va3VwIHx8ICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ2xjdVR5cGUnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKHRoaXMuTENVVHlwZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBQcm94eUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5MQ1VUeXBlID0gdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG93Q29kZVVuaXQ/LlR5cGUgfHwgJyc7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnaW5ib3VuZFBhdGgnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Qcm9jZXNzb3I/LkluYm91bmRQYXRoIHx8ICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ2xjdVR5cGUnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKHRoaXMuTENVVHlwZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBQcm9jZXNzb3JUeXBlU3ViRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXBQcm9jZXNzb3JUeXBlU3ViRm9ybSgpO1xuXG4gICAgaWYgKHRoaXMuUHJvY2Vzc29yVHlwZSkge1xuICAgICAgc3dpdGNoICh0aGlzLlByb2Nlc3NvclR5cGUpIHtcbiAgICAgICAgY2FzZSAnREZTJzpcbiAgICAgICAgICB0aGlzLnNldHVwRGZzRm9ybSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ09BdXRoJzpcbiAgICAgICAgICB0aGlzLnNldHVwT0F1dGhGb3JtKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnUHJveHknOlxuICAgICAgICAgIHRoaXMuc2V0dXBQcm94eUZvcm0oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdSZWRpcmVjdCc6XG4gICAgICAgICAgdGhpcy5zZXR1cFJlZGlyZWN0Rm9ybSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2V0dXBMY3VUeXBlU3ViRm9ybSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwUmVkaXJlY3RGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdyZWRpcmVjdCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2wodGhpcy5FZGl0aW5nQXBwbGljYXRpb24uUHJvY2Vzc29yPy5SZWRpcmVjdCB8fCAnJywgW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgXSlcbiAgICApO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ3Blcm1hbmVudCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLlByb2Nlc3Nvcj8uUGVybWFuZW50IHx8IGZhbHNlLFxuICAgICAgICBbXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAncHJlc2VydmVNZXRob2QnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Qcm9jZXNzb3I/LlByZXNlcnZlTWV0aG9kIHx8IGZhbHNlLFxuICAgICAgICBbXVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5EZXRlcm1pbmVUb29sdGlwVGV4dCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwU2VjdXJpdHlGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdpc1ByaXZhdGUnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb29rdXBDb25maWc/LklzUHJpdmF0ZSB8fCBmYWxzZSxcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdpc1RyaWdnZXJTaWduSW4nLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb29rdXBDb25maWc/LklzVHJpZ2dlclNpZ25JbiB8fCBmYWxzZSxcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPGRpdiAqbmdJZj1cIkVkaXRpbmdBcHBsaWNhdGlvbj8uQXBwbGljYXRpb25cIj5cbiAgICA8aDI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBtYXRUb29sdGlwPVwiQmFjayB0byBSb3V0ZXNcIlxuICAgICAgICAoY2xpY2spPVwiU2V0RWRpdGluZ0FwcGxpY2F0aW9uKG51bGwpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIHt7IEN1cnJlbnRBcHBsaWNhdGlvblJvdXRlIH19IC8ge3sgRWRpdGluZ0FwcGxpY2F0aW9uLkFwcGxpY2F0aW9uPy5OYW1lIH19XG4gICAgPC9oMj5cbiAgICA8L2Rpdj5cbiAgPGZvcm1cbiAgICBbZm9ybUdyb3VwXT1cIkFwcGxpY2F0aW9uRm9ybUdyb3VwXCJcbiAgICAobmdTdWJtaXQpPVwiU2F2ZUFwcGxpY2F0aW9uKClcIlxuICAgICpuZ0lmPVwiRWRpdGluZ0FwcGxpY2F0aW9uXCJcbiAgPlxuXG4gICAgPGRpdlxuICAgICAgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiXG4gICAgICBmeExheW91dEFsaWduPVwiY2VudGVyIHN0YXJ0XCJcbiAgICAgIGZ4TGF5b3V0Lmx0LW1kPVwiY29sdW1uXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jYXJkXCIgZnhGbGV4PVwiNzAlXCIgZnhGbGV4Lmx0LW1kPVwiMTAwJVwiPlxuICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJzcHJlYWQgZmxvdy1jYXJkXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkVkaXRpbmdBcHBsaWNhdGlvbj8uQXBwbGljYXRpb25cIj5cbiAgICAgICAgICAgICAgICBFZGl0IEFwcGxpY2F0aW9uOlxuICAgICAgICAgICAgICAgIHt7IEVkaXRpbmdBcHBsaWNhdGlvbi5BcHBsaWNhdGlvbj8uTmFtZSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIUVkaXRpbmdBcHBsaWNhdGlvbj8uQXBwbGljYXRpb25cIj5cbiAgICAgICAgICAgICAgICBDcmVhdGUgYW4gQXBwbGljYXRpb25cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuXG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIHJvd3M9XCIzXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJSb3V0ZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicm91dGVcIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jYXJkXCIgZnhGbGV4PVwiMzUlXCI+XG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInNwcmVhZCBmbG93LWNhcmRcIj5cbiAgICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlPiBQcm9jZXNzb3IgRGV0YWlscyA8L21hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuXG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvY1R5cGVcIlxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiUHJvY2Vzc29yVHlwZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiREZTXCI+VmlldyBQYWNrYWdlPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJSZWRpcmVjdFwiPlJlZGlyZWN0PC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJQcm94eVwiPlByb3h5PC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJPQXV0aFwiPk9BdXRoPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJQcm9jZXNzb3JUeXBlXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidERlMnXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRlZmF1bHQgRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlZmF1bHRGaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGVcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsY3VUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJMQ1VUeXBlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJOUE1cIj5OUE08L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJHaXRIdWJcIj5HaXRIdWI8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LW9wdGlvbiB2YWx1ZT1cIlppcFwiPlppcDwvbWF0LW9wdGlvbj4gLS0+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cIkxDVVR5cGVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidHaXRIdWInXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsY3Utc291cmNlLWNvbnRyb2wtZm9ybS1jb250cm9sc1xuICAgICAgICAgICAgICAgICAgICAgIFtidWlsZC1wYXRoXT1cIkVkaXRpbmdBcHBsaWNhdGlvbj8uTG93Q29kZVVuaXQ/LlBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtLWdyb3VwXT1cIkFwcGxpY2F0aW9uRm9ybUdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc291cmNlLWNvbnRyb2xdPVwiRGVmYXVsdFNvdXJjZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgIFt1c2UtYnJhbmNoZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFt1c2UtYnVpbGQtcGF0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGN1LXNvdXJjZS1jb250cm9sLWZvcm0tY29udHJvbHM+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRyb2xGb3JtQ29udHJvbHM/LlJlcG9zaXRvcnlGb3JtQ29udHJvbD8udmFsaWRcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJCdWlsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJidWlsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50IEJ1aWxkOlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgRWRpdGluZ0FwcGxpY2F0aW9uPy5Mb3dDb2RlVW5pdD8uQ3VycmVudEJ1aWxkIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInTlBNJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGN1LW5wbS1wYWNrYWdlLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgIFtucG0tcGFja2FnZV09XCJFZGl0aW5nQXBwbGljYXRpb24/Lkxvd0NvZGVVbml0Py5QYWNrYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbnBtLXBhY2thZ2UtdmVyc2lvbl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRpbmdBcHBsaWNhdGlvbj8uTG93Q29kZVVuaXQ/LlZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtLWdyb3VwXT1cIkFwcGxpY2F0aW9uRm9ybUdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGN1LW5wbS1wYWNrYWdlLXNlbGVjdD5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCBWZXJzaW9uOlxuICAgICAgICAgICAgICAgICAgICAgIHt7IEVkaXRpbmdBcHBsaWNhdGlvbj8uTG93Q29kZVVuaXQ/LkN1cnJlbnRWZXJzaW9uIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ09BdXRoJ1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTY29wZXMgKHNwYWNlIHNlcGFyYXRlZClcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzY29wZXNcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlRva2VuIExvb2t1cFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRva2VuTG9va3VwXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGVcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsY3VUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJMQ1VUeXBlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJHaXRIdWJPQXV0aFwiPkdpdEh1YjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiTENVVHlwZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0dpdEh1Yk9BdXRoJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2xpZW50IElEXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNsaWVudElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2xpZW50IFNlY3JldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjbGllbnRTZWNyZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidQcm94eSdcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSW5ib3VuZCBQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW5ib3VuZFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxjdVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIkxDVVR5cGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkFQSVwiPkFQSTwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNQQVwiPlNpbmdsZSBQYWdlIEFwcGxpY2F0aW9uPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJMQ1VUeXBlXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInQVBJJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQVBJIFJvb3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYXBpUm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFsbG93ZWQgTWV0aG9kcyAoc2VwYXJhdGUgd2l0aCBzcGFjZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1ldGhvZHNcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlY3VyaXR5ICh7aGVhZGVyfX57dmFsdWV9KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWN1cml0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1NQQSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNQQSBSb290XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNwYVJvb3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidSZWRpcmVjdCdcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUmVkaXJlY3QgVVJMXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVkaXJlY3RcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNwcmVhZFwiIFxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwZXJtYW5lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgSXMgUGVybWFuZW50P1xuICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNwcmVhZFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByZXNlcnZlTWV0aG9kXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgUHJlc2VydmUgTWV0aG9kP1xuICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcHJlYWRcIlxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiRGV0ZXJtaW5lVG9vbHRpcFRleHQoKVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9e3tyZWRpcmVjdFRvb2x0aXB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFJc1Blcm1hbmVudCAmJiAhSXNQcmVzZXJ2ZVwiXG5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcHJlYWRcIlxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIjMwMiDigJMgTm90IFBlcm1hbmVudCBhbmQgTm90IFByZXNlcnZlXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgaW5mb19vdXRsaW5lXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPiAtLT5cblxuICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIUlzUGVybWFuZW50ICYmIElzUHJlc2VydmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNwcmVhZFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiMzA3IOKAkyBOb3QgUGVybWFuZW50IGFuZCBQcmVzZXJ2ZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIGluZm9fb3V0bGluZVxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj4gLS0+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIklzUGVybWFuZW50ICYmIElzUHJlc2VydmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNwcmVhZFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiMzA4IOKAkyBQZXJtYW5lbnQgYW5kIFByZXNlcnZlXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgaW5mb19vdXRsaW5lXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPiAtLT5cblxuICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ByZWFkXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJWYWx1ZXMgdXNlZCB0byBjb250cm9sIHRoZSByZWRpcmVjdCB0eXBlLiAgUGVybWFuZW50IGFuZCBOb3QgUHJlc2VydmUgPSAzMDE7IE5vdCBQZXJtYW5lbnQgYW5kIE5vdCBQcmVzZXJ2ZSA9IDMwMjsgUGVybWFuZW50IGFuZCBQcmVzZXJ2ZSA9IDMwODsgTm90IFBlcm1hbmVudCBhbmQgTm90IFByZXNlcnZlID0gMzA3O1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIGluZm9fb3V0bGluZVxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNhcmRcIiBmeEZsZXg9XCIzNSVcIj5cbiAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwic3ByZWFkIGZsb3ctY2FyZFwiPlxuICAgICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGU+IFNlY3VyaXR5IFNldHRpbmdzIDwvbWF0LWNhcmQtdGl0bGU+XG5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpc1ByaXZhdGVcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSXMgU2VjdXJlIEFwcGxpY2F0aW9uP1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkEgU2VjdXJlZCBBcHBsaWNhdGlvbiBpcyBvbmUgdGhhdCByZXF1aXJlcyB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkIHRvIHVzZSB0aGUgYXBwbGljYXRpb24uIFRoZSBhcHBsaWNhdGlvbiBpcyBob3N0ZWQgYmVoaW5kIGFuIGlkZW50aXR5IHdhbGwuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgaW5mb19vdXRsaW5lXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuXG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiSXNQcml2YXRlRm9ybUNvbnRyb2wudmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiaXNUcmlnZ2VyU2lnbkluXCI+XG4gICAgICAgICAgICAgICAgICAgIElzIFRyaWdnZXIgU2lnbiBJbiBBcHBsaWNhdGlvbj9cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cblxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQSBUcmlnZ2VyIFNpZ24gSW4gQXBwbGljYXRpb24gd2lsbCBkaXJlY3QgdGhlIHVzZXIgdG8gc2lnbiBpbiBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeS5cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8L21hdC1jYXJkPlxuXG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInNwcmVhZCBmbG93LWNhcmRcIiAqbmdJZj1cIlByb2Nlc3NvclR5cGUgIT0gJ1JlZGlyZWN0J1wiPlxuICAgICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCIhSGFzQnVpbGRGb3JtQ29udHJvbC52YWx1ZVwiPlxuICAgICAgICAgICAgICBCdWlsZCAmIFNvdXJjZVxuICAgICAgICAgICAgPC9tYXQtY2FyZC10aXRsZT5cblxuICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlICpuZ0lmPVwiSGFzQnVpbGRGb3JtQ29udHJvbC52YWx1ZVwiPlxuICAgICAgICAgICAgICBTb3VyY2UgQ29udHJvbFxuICAgICAgICAgICAgPC9tYXQtY2FyZC10aXRsZT5cblxuICAgICAgICAgICAgPGRpdiBmeEZsZXg+PC9kaXY+XG5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImhhc0J1aWxkXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkhhcyBCdWlsZD9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDb25maWd1cmUgc291cmNlIGNvbnRyb2wsIERldk9wcyBDSS9DRCwgYW5kIGFydGlmYWN0cy5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG5cbiAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBIYXNCdWlsZEZvcm1Db250cm9sLnZhbHVlICYmIFNvdXJjZUNvbnRyb2xMb29rdXBzPy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic291cmNlQ29udHJvbExvb2t1cFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTb3VyY2UgQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJTb3VyY2VDb250cm9sTG9va3VwQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICBTb3VyY2VDb250cm9sRm9ybUNvbnRyb2xzPy5Mb2FkaW5nIHx8IEhvc3RpbmdEZXRhaWxzPy5Mb2FkaW5nXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzcmNDdHJsTG9va3VwIG9mIFNvdXJjZUNvbnRyb2xMb29rdXBzXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3JjQ3RybExvb2t1cFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiU291cmNlQ29udHJvbHNbc3JjQ3RybExvb2t1cF07IGxldCBzcmNDdHJsXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgc3JjQ3RybC5OYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiSGFzQnVpbGRGb3JtQ29udHJvbD8udmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8aDM+XG4gICAgICAgICAgICAgICAgICBAe3tcbiAgICAgICAgICAgICAgICAgICAgU291cmNlQ29udHJvbEZvcm1Db250cm9scz8uT3JnYW5pemF0aW9uRm9ybUNvbnRyb2w/LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgU291cmNlQ29udHJvbD8uT3JnYW5pemF0aW9uXG4gICAgICAgICAgICAgICAgICB9fS97e1xuICAgICAgICAgICAgICAgICAgICBTb3VyY2VDb250cm9sRm9ybUNvbnRyb2xzPy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2w/LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgU291cmNlQ29udHJvbD8uUmVwb3NpdG9yeVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L2gzPlxuXG4gICAgICAgICAgICAgICAgPHA+T3JnYW5pemF0aW9uIGFuZCBSZXBvc2l0b3J5IHB1bGxlZCBmcm9tIGJ1aWxkIHNldHRpbmdzPC9wPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1oaW50PlxuICAgICAgICAgICAgICAgICAgQ3VycmVudEJ1aWxkOlxuICAgICAgICAgICAgICAgICAge3sgRWRpdGluZ0FwcGxpY2F0aW9uPy5Mb3dDb2RlVW5pdD8uQ3VycmVudEJ1aWxkIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiU291cmNlQ29udHJvbExvb2t1cHM/Lmxlbmd0aCA8IDBcIj5cbiAgICAgICAgICAgICAgPGgzPlxuICAgICAgICAgICAgICAgIENyZWF0ZSBzb3VyY2UgY29udHJvbCBsb2NhdGlvbnMgdW5kZXIgdGhlIERldk9wcyB0YWIgYWJvdmUuXG4gICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJzcHJlYWRcIj5cbiAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJTZXRFZGl0aW5nQXBwbGljYXRpb24obnVsbClcIj5cbiAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+IENhbmNlbFxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIUFwcGxpY2F0aW9uRm9ybUdyb3VwLnZhbGlkIHx8ICFBcHBsaWNhdGlvbkZvcm1Hcm91cC5kaXJ0eVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj4gU2F2ZSBBcHBsaWNhdGlvblxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG5cbiAgPGRpdiBjbGFzcz1cInNwcmVhZFwiICpuZ0lmPVwiIUVkaXRpbmdBcHBsaWNhdGlvblwiPlxuICAgIDxzcGFuIGNsYXNzPVwiYXBwcy1hY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cIkNyZWF0ZU5ld0FwcGxpY2F0aW9uKClcIj5cbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmFkZDwvbWF0LWljb24+IENyZWF0ZSBOZXdcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj5cblxuICAgIDxkaXYgY2xhc3M9XCJzcHJlYWRcIiAqbmdJZj1cIiFDdXJyZW50QXBwbGljYXRpb25Sb3V0ZVwiPlxuICAgICAgPGRpdiAqbmdJZj1cIkFwcGxpY2F0aW9uUm91dGVzPy5sZW5ndGggPD0gMFwiPlxuICAgICAgICA8aDI+Tm8gYXBwbGljYXRpb25zIGNyZWF0ZWQsIGNyZWF0ZSB5b3VyIGZpcnN0IGFwcGxpY2F0aW9uLjwvaDI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cIkFwcGxpY2F0aW9uUm91dGVzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxoMj5Qcm9qZWN0IFJvdXRlczwvaDI+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGZ4TGF5b3V0PVwicm93IHdyYXBcIlxuICAgICAgICAgIGZ4TGF5b3V0Lmx0LW1kPVwiY29sdW1uXCJcbiAgICAgICAgICAqbmdJZj1cIkFwcGxpY2F0aW9uUm91dGVzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGZ4RmxleD1cIjIwJVwiXG4gICAgICAgICAgICBmeEZsZXgubHQtbWQ9XCIxMDAlXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhcHBSb3V0ZSBvZiBBcHBsaWNhdGlvblJvdXRlc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwic3ByZWFkIGZsb3ctY2FyZFwiPlxuICAgICAgICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDwhLS0gPGltZyBtYXQtY2FyZC1hdmF0YXI9XCIvYXNzZXRzL2ltYWdlcy9wcm9qZWN0LWljb24ucG5nXCIgLz4gLS0+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGVcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMlwiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJhcHBSb3V0ZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgYXBwUm91dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cblxuICAgICAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ByZWFkXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cblxuICAgICAgICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YS1hcHAtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly97eyBQcmltYXJ5SG9zdCB9fXt7IGFwcFJvdXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFRvb2x0aXA9XCJMYXVuY2hcIj5sYXVuY2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImFjY2VudFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJFZGl0QXBwbGljYXRpb25Sb3V0ZUNsaWNrZWQoYXBwUm91dGUpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFRvb2x0aXA9XCJFZGl0IEFwcGxpY2F0aW9uIFJvdXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3NcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGEtYXBwLWZha2VzXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5maWJlcl9tYW51YWxfcmVjb3JkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmZpYmVyX21hbnVhbF9yZWNvcmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiQ3VycmVudEFwcGxpY2F0aW9uUm91dGVcIj5cbiAgICAgIDxoMj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIG1hdFRvb2x0aXA9XCJCYWNrIHRvIFJvdXRlc1wiXG4gICAgICAgICAgKGNsaWNrKT1cIkN1cnJlbnRBcHBsaWNhdGlvblJvdXRlID0gbnVsbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWljb24+YXJyb3dfYmFjazwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIHt7IEN1cnJlbnRBcHBsaWNhdGlvblJvdXRlIH19IFJvdXRlc1xuICAgICAgPC9oMj5cblxuICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXQubHQtbWQ9XCJjb2x1bW5cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXBwTG9va3VwIG9mIEN1cnJlbnRSb3V0ZUFwcGxpY2F0aW9uTG9va3Vwc1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGZ4RmxleD1cIjMwJVwiXG4gICAgICAgICAgICBmeEZsZXgubHQtbWQ9XCIxMDAlXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIFJvdXRlZEFwcGxpY2F0aW9uc1tDdXJyZW50QXBwbGljYXRpb25Sb3V0ZV1bYXBwTG9va3VwXTtcbiAgICAgICAgICAgICAgbGV0IGFwcFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJzcHJlYWQgZmxvdy1jYXJkXCI+XG4gICAgICAgICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPCEtLSA8aW1nIG1hdC1jYXJkLWF2YXRhcj1cIi9hc3NldHMvaW1hZ2VzL3Byb2plY3QtaWNvbi5wbmdcIiAvPiAtLT5cblxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImFwcC5BcHBsaWNhdGlvbi5EZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgYXBwLkFwcGxpY2F0aW9uLk5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jYXJkLXRpdGxlPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkLXN1YnRpdGxlXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTFcIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdD8uQ3VycmVudFZlcnNpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0Py5DdXJyZW50QnVpbGRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQHt7XG4gICAgICAgICAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdD8uQ3VycmVudFZlcnNpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQ/LkN1cnJlbnRCdWlsZCB8fFxuICAgICAgICAgICAgICAgICAgICAgIGFwcC5Qcm9jZXNzb3I/LlJlZGlyZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgXCJObyB2ZXJzaW9uIGRlcGxveWVkXCJcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG5cbiAgICAgICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwcmVhZFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1jYXJkLWFjdGlvbnM+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGEtYXBwLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8ve3sgUHJpbWFyeUhvc3QgfX17e1xuICAgICAgICAgICAgICAgICAgICAgIGFwcC5Mb29rdXBDb25maWcuUGF0aFJlZ2V4LnJlcGxhY2UoJy4qJywgJycpXG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFRvb2x0aXA9XCJMYXVuY2hcIj5sYXVuY2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJHZXRQcm9jZXNzb3JUeXBlKGFwcExvb2t1cCkgPT09ICdERlMnXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJVbnBhY2soYXBwTG9va3VwLCBhcHApXCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlVucGFjayB7e1xuICAgICAgICAgICAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdD8uVmVyc2lvbiB8fCBhcHAuTG93Q29kZVVuaXQ/LkJ1aWxkXG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3VkX3VwbG9hZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJTZXRFZGl0aW5nQXBwbGljYXRpb24oYXBwTG9va3VwKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRUb29sdGlwPVwiRWRpdCBBcHBsaWNhdGlvblwiPiBlZGl0IDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIkRlbGV0ZUFwcGxpY2F0aW9uKGFwcExvb2t1cCwgYXBwLkFwcGxpY2F0aW9uLk5hbWUpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFRvb2x0aXA9XCJEZWxldGUge3sgYXBwLkFwcGxpY2F0aW9uLk5hbWUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICBkZWxldGVfZm9yZXZlclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YS1hcHAtZmFrZXNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmZpYmVyX21hbnVhbF9yZWNvcmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZmliZXJfbWFudWFsX3JlY29yZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5maWJlcl9tYW51YWxfcmVjb3JkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZCBcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiR2V0UHJvY2Vzc29yVHlwZShhcHBMb29rdXApID09PSAnREZTJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZmliZXJfbWFudWFsX3JlY29yZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuICAgICAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==