@vendure/admin-ui 1.5.0 → 2.0.0-next.2

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 (1151) hide show
  1. package/catalog/catalog.module.d.ts +30 -0
  2. package/catalog/components/apply-facet-dialog/apply-facet-dialog.component.d.ts +5 -2
  3. package/catalog/components/asset-detail/asset-detail.component.d.ts +6 -4
  4. package/catalog/components/asset-list/asset-list.component.d.ts +5 -2
  5. package/catalog/components/assets/assets.component.d.ts +3 -0
  6. package/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.d.ts +9 -7
  7. package/catalog/components/collection-contents/collection-contents.component.d.ts +5 -3
  8. package/catalog/components/collection-detail/collection-detail.component.d.ts +6 -3
  9. package/catalog/components/collection-list/collection-list.component.d.ts +6 -3
  10. package/catalog/components/collection-tree/collection-tree-node.component.d.ts +7 -3
  11. package/catalog/components/collection-tree/collection-tree.component.d.ts +10 -25
  12. package/catalog/components/collection-tree/collection-tree.service.d.ts +33 -0
  13. package/catalog/components/collection-tree/collection-tree.types.d.ts +7 -0
  14. package/catalog/components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component.d.ts +5 -2
  15. package/catalog/components/facet-detail/facet-detail.component.d.ts +7 -4
  16. package/catalog/components/facet-list/facet-list.component.d.ts +6 -3
  17. package/catalog/components/generate-product-variants/generate-product-variants.component.d.ts +3 -0
  18. package/catalog/components/option-value-input/option-value-input.component.d.ts +3 -0
  19. package/catalog/components/product-detail/product-detail.component.d.ts +16 -37
  20. package/catalog/components/product-detail/product-detail.types.d.ts +26 -0
  21. package/catalog/components/product-list/product-list.component.d.ts +6 -3
  22. package/catalog/components/product-options-editor/product-options-editor.component.d.ts +9 -4
  23. package/catalog/components/product-search-input/product-search-input.component.d.ts +9 -4
  24. package/catalog/components/product-variants-editor/product-variants-editor.component.d.ts +5 -2
  25. package/catalog/components/product-variants-list/product-variants-list.component.d.ts +23 -16
  26. package/catalog/components/product-variants-table/product-variants-table.component.d.ts +24 -11
  27. package/catalog/components/update-product-option-dialog/update-product-option-dialog.component.d.ts +5 -2
  28. package/catalog/components/variant-price-detail/variant-price-detail.component.d.ts +3 -0
  29. package/catalog/package.json +5 -6
  30. package/catalog/providers/product-detail/product-detail.service.d.ts +214 -93
  31. package/catalog/providers/routing/asset-resolver.d.ts +5 -3
  32. package/catalog/providers/routing/collection-resolver.d.ts +5 -2
  33. package/catalog/providers/routing/facet-resolver.d.ts +5 -4
  34. package/catalog/providers/routing/product-resolver.d.ts +5 -2
  35. package/catalog/providers/routing/product-variants-resolver.d.ts +5 -2
  36. package/catalog/public_api.d.ts +3 -0
  37. package/catalog/vendure-admin-ui-catalog.d.ts +1 -0
  38. package/core/app.component.d.ts +3 -0
  39. package/core/app.component.module.d.ts +7 -0
  40. package/core/common/base-detail.component.d.ts +2 -2
  41. package/core/common/base-entity-resolver.d.ts +1 -1
  42. package/core/common/base-list.component.d.ts +10 -0
  43. package/core/common/generated-types.d.ts +12072 -4235
  44. package/core/common/utilities/flatten-facet-values.d.ts +2 -2
  45. package/core/common/version.d.ts +1 -1
  46. package/core/components/app-shell/app-shell.component.d.ts +3 -0
  47. package/core/components/breadcrumb/breadcrumb.component.d.ts +3 -0
  48. package/core/components/channel-switcher/channel-switcher.component.d.ts +3 -0
  49. package/core/components/main-nav/main-nav.component.d.ts +3 -0
  50. package/core/components/notification/notification.component.d.ts +3 -0
  51. package/core/components/overlay-host/overlay-host.component.d.ts +3 -0
  52. package/core/components/theme-switcher/theme-switcher.component.d.ts +3 -0
  53. package/core/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.d.ts +4 -1
  54. package/core/components/user-menu/user-menu.component.d.ts +3 -0
  55. package/core/core.module.d.ts +18 -0
  56. package/core/data/client-state/client-defaults.d.ts +19 -7
  57. package/core/data/data.module.d.ts +6 -0
  58. package/core/data/definitions/administrator-definitions.d.ts +15 -15
  59. package/core/data/definitions/auth-definitions.d.ts +4 -4
  60. package/core/data/definitions/client-definitions.d.ts +16 -16
  61. package/core/data/definitions/collection-definitions.d.ts +9 -9
  62. package/core/data/definitions/customer-definitions.d.ts +22 -22
  63. package/core/data/definitions/facet-definitions.d.ts +10 -10
  64. package/core/data/definitions/order-definitions.d.ts +25 -25
  65. package/core/data/definitions/product-definitions.d.ts +44 -44
  66. package/core/data/definitions/promotion-definitions.d.ts +7 -7
  67. package/core/data/definitions/settings-definitions.d.ts +65 -65
  68. package/core/data/definitions/shared-definitions.d.ts +3 -3
  69. package/core/data/definitions/shipping-definitions.d.ts +9 -9
  70. package/core/data/providers/administrator-data.service.d.ts +15 -15
  71. package/core/data/providers/auth-data.service.d.ts +4 -3
  72. package/core/data/providers/base-data.service.d.ts +3 -0
  73. package/core/data/providers/client-data.service.d.ts +15 -14
  74. package/core/data/providers/collection-data.service.d.ts +11 -11
  75. package/core/data/providers/customer-data.service.d.ts +25 -25
  76. package/core/data/providers/data.service.d.ts +5 -2
  77. package/core/data/providers/facet-data.service.d.ts +12 -12
  78. package/core/data/providers/fetch-adapter.d.ts +3 -0
  79. package/core/data/providers/interceptor.d.ts +3 -0
  80. package/core/data/providers/order-data.service.d.ts +21 -21
  81. package/core/data/providers/product-data.service.d.ts +51 -51
  82. package/core/data/providers/promotion-data.service.d.ts +8 -8
  83. package/core/data/providers/settings-data.service.d.ts +52 -51
  84. package/core/data/providers/shipping-method-data.service.d.ts +12 -12
  85. package/core/data/query-result.d.ts +1 -1
  86. package/core/data/server-config.d.ts +5 -2
  87. package/core/package.json +5 -6
  88. package/core/providers/auth/auth.service.d.ts +5 -2
  89. package/core/providers/component-registry/component-registry.service.d.ts +3 -0
  90. package/core/providers/custom-detail-component/custom-detail-component.service.d.ts +3 -0
  91. package/core/providers/custom-field-component/custom-field-component.service.d.ts +3 -0
  92. package/core/providers/dashboard-widget/dashboard-widget.service.d.ts +3 -0
  93. package/core/providers/guard/auth.guard.d.ts +3 -0
  94. package/core/providers/health-check/health-check.service.d.ts +3 -0
  95. package/core/providers/i18n/custom-message-format-compiler.d.ts +3 -0
  96. package/core/providers/i18n/i18n.service.d.ts +3 -0
  97. package/core/providers/job-queue/job-queue.service.d.ts +3 -0
  98. package/core/providers/local-storage/local-storage.service.d.ts +3 -0
  99. package/core/providers/modal/modal.service.d.ts +4 -67
  100. package/core/providers/modal/modal.types.d.ts +67 -0
  101. package/core/providers/nav-builder/nav-builder.service.d.ts +3 -0
  102. package/core/providers/notification/notification.service.d.ts +3 -0
  103. package/core/providers/overlay-host/overlay-host.service.d.ts +3 -0
  104. package/core/public_api.d.ts +3 -1
  105. package/core/shared/components/action-bar/action-bar.component.d.ts +7 -0
  106. package/core/shared/components/action-bar-items/action-bar-items.component.d.ts +3 -0
  107. package/core/shared/components/address-form/address-form.component.d.ts +5 -2
  108. package/core/shared/components/affixed-input/affixed-input.component.d.ts +3 -0
  109. package/core/shared/components/affixed-input/percentage-suffix-input.component.d.ts +3 -0
  110. package/core/shared/components/asset-file-input/asset-file-input.component.d.ts +3 -0
  111. package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +46 -26
  112. package/core/shared/components/asset-gallery/asset-gallery.types.d.ts +3 -0
  113. package/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.d.ts +7 -3
  114. package/core/shared/components/asset-preview/asset-preview.component.d.ts +5 -3
  115. package/core/shared/components/asset-preview-dialog/asset-preview-dialog.component.d.ts +7 -5
  116. package/core/shared/components/asset-preview-links/asset-preview-links.component.d.ts +4 -1
  117. package/core/shared/components/asset-search-input/asset-search-input.component.d.ts +5 -2
  118. package/core/shared/components/channel-assignment-control/channel-assignment-control.component.d.ts +3 -0
  119. package/core/shared/components/channel-badge/channel-badge.component.d.ts +3 -0
  120. package/core/shared/components/chip/chip.component.d.ts +3 -0
  121. package/core/shared/components/configurable-input/configurable-input.component.d.ts +3 -0
  122. package/core/shared/components/currency-input/currency-input.component.d.ts +3 -0
  123. package/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.d.ts +3 -0
  124. package/core/shared/components/custom-field-control/custom-field-control.component.d.ts +3 -0
  125. package/core/shared/components/customer-label/customer-label.component.d.ts +5 -2
  126. package/core/shared/components/data-table/data-table-column.component.d.ts +3 -0
  127. package/core/shared/components/data-table/data-table.component.d.ts +3 -0
  128. package/core/shared/components/datetime-picker/datetime-picker.component.d.ts +3 -0
  129. package/core/shared/components/datetime-picker/datetime-picker.service.d.ts +3 -0
  130. package/core/shared/components/dropdown/dropdown-item.directive.d.ts +3 -0
  131. package/core/shared/components/dropdown/dropdown-menu.component.d.ts +3 -0
  132. package/core/shared/components/dropdown/dropdown-trigger.directive.d.ts +3 -0
  133. package/core/shared/components/dropdown/dropdown.component.d.ts +3 -0
  134. package/core/shared/components/edit-note-dialog/edit-note-dialog.component.d.ts +4 -1
  135. package/core/shared/components/empty-placeholder/empty-placeholder.component.d.ts +3 -0
  136. package/core/shared/components/entity-info/entity-info.component.d.ts +3 -0
  137. package/core/shared/components/extension-host/extension-host.component.d.ts +3 -0
  138. package/core/shared/components/extension-host/extension-host.service.d.ts +3 -0
  139. package/core/shared/components/facet-value-chip/facet-value-chip.component.d.ts +5 -2
  140. package/core/shared/components/facet-value-selector/facet-value-selector.component.d.ts +8 -5
  141. package/core/shared/components/focal-point-control/focal-point-control.component.d.ts +3 -0
  142. package/core/shared/components/form-field/form-field-control.directive.d.ts +3 -0
  143. package/core/shared/components/form-field/form-field.component.d.ts +3 -0
  144. package/core/shared/components/form-item/form-item.component.d.ts +3 -0
  145. package/core/shared/components/formatted-address/formatted-address.component.d.ts +3 -0
  146. package/core/shared/components/help-tooltip/help-tooltip.component.d.ts +3 -0
  147. package/core/shared/components/history-entry-detail/history-entry-detail.component.d.ts +3 -0
  148. package/core/shared/components/items-per-page-controls/items-per-page-controls.component.d.ts +3 -0
  149. package/core/shared/components/labeled-data/labeled-data.component.d.ts +3 -0
  150. package/core/shared/components/language-selector/language-selector.component.d.ts +3 -0
  151. package/core/shared/components/manage-tags-dialog/manage-tags-dialog.component.d.ts +6 -3
  152. package/core/shared/components/modal-dialog/dialog-buttons.directive.d.ts +3 -0
  153. package/core/shared/components/modal-dialog/dialog-component-outlet.component.d.ts +3 -0
  154. package/core/shared/components/modal-dialog/dialog-title.directive.d.ts +3 -0
  155. package/core/shared/components/modal-dialog/modal-dialog.component.d.ts +4 -1
  156. package/core/shared/components/object-tree/object-tree.component.d.ts +3 -0
  157. package/core/shared/components/order-state-label/order-state-label.component.d.ts +4 -1
  158. package/core/shared/components/pagination-controls/pagination-controls.component.d.ts +3 -0
  159. package/core/shared/components/product-variant-selector/product-variant-selector.component.d.ts +58 -0
  160. package/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.d.ts +4 -1
  161. package/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.d.ts +4 -1
  162. package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +3 -0
  163. package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +3 -0
  164. package/core/shared/components/select-toggle/select-toggle.component.d.ts +3 -0
  165. package/core/shared/components/simple-dialog/simple-dialog.component.d.ts +4 -1
  166. package/core/shared/components/status-badge/status-badge.component.d.ts +3 -0
  167. package/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.d.ts +3 -0
  168. package/core/shared/components/table-row-action/table-row-action.component.d.ts +3 -0
  169. package/core/shared/components/tag-selector/tag-selector.component.d.ts +3 -0
  170. package/core/shared/components/timeline-entry/timeline-entry.component.d.ts +3 -0
  171. package/core/shared/components/title-input/title-input.component.d.ts +3 -0
  172. package/core/shared/components/ui-extension-point/ui-extension-point.component.d.ts +3 -0
  173. package/core/shared/directives/disabled.directive.d.ts +3 -0
  174. package/core/shared/directives/if-default-channel-active.directive.d.ts +3 -0
  175. package/core/shared/directives/if-directive-base.d.ts +3 -0
  176. package/core/shared/directives/if-multichannel.directive.d.ts +3 -0
  177. package/core/shared/directives/if-permissions.directive.d.ts +3 -0
  178. package/core/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.d.ts +3 -0
  179. package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +3 -0
  180. package/core/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.d.ts +3 -0
  181. package/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.d.ts +7 -3
  182. package/core/shared/dynamic-form-inputs/date-form-input/date-form-input.component.d.ts +3 -0
  183. package/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.d.ts +3 -0
  184. package/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.d.ts +5 -2
  185. package/core/shared/dynamic-form-inputs/number-form-input/number-form-input.component.d.ts +3 -0
  186. package/core/shared/dynamic-form-inputs/password-form-input/password-form-input.component.d.ts +3 -0
  187. package/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.d.ts +6 -3
  188. package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +1 -1
  189. package/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.d.ts +6 -3
  190. package/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.d.ts +6 -2
  191. package/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.d.ts +3 -0
  192. package/core/shared/dynamic-form-inputs/relation-form-input/product/relation-product-input.component.d.ts +7 -3
  193. package/core/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.d.ts +7 -3
  194. package/core/shared/dynamic-form-inputs/relation-form-input/relation-card/relation-card.component.d.ts +7 -0
  195. package/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.d.ts +3 -0
  196. package/core/shared/dynamic-form-inputs/relation-form-input/relation-selector-dialog/relation-selector-dialog.component.d.ts +4 -1
  197. package/core/shared/dynamic-form-inputs/rich-text-form-input/rich-text-form-input.component.d.ts +3 -0
  198. package/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.d.ts +3 -0
  199. package/core/shared/dynamic-form-inputs/text-form-input/text-form-input.component.d.ts +3 -0
  200. package/core/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.d.ts +3 -0
  201. package/core/shared/pipes/asset-preview.pipe.d.ts +3 -0
  202. package/core/shared/pipes/channel-label.pipe.d.ts +3 -0
  203. package/core/shared/pipes/custom-field-label.pipe.d.ts +3 -0
  204. package/core/shared/pipes/duration.pipe.d.ts +3 -0
  205. package/core/shared/pipes/file-size.pipe.d.ts +3 -0
  206. package/core/shared/pipes/has-permission.pipe.d.ts +3 -0
  207. package/core/shared/pipes/locale-base.pipe.d.ts +3 -0
  208. package/core/shared/pipes/locale-currency-name.pipe.d.ts +3 -0
  209. package/core/shared/pipes/locale-currency.pipe.d.ts +3 -0
  210. package/core/shared/pipes/locale-date.pipe.d.ts +3 -0
  211. package/core/shared/pipes/locale-language-name.pipe.d.ts +3 -0
  212. package/core/shared/pipes/locale-region-name.pipe.d.ts +3 -0
  213. package/core/shared/pipes/sentence-case.pipe.d.ts +3 -0
  214. package/core/shared/pipes/sort.pipe.d.ts +3 -0
  215. package/core/shared/pipes/state-i18n-token.pipe.d.ts +3 -0
  216. package/core/shared/pipes/string-to-color.pipe.d.ts +3 -0
  217. package/core/shared/pipes/time-ago.pipe.d.ts +3 -0
  218. package/core/shared/providers/routing/can-deactivate-detail-guard.d.ts +3 -0
  219. package/core/shared/shared.module.d.ts +119 -0
  220. package/core/vendure-admin-ui-core.d.ts +1 -0
  221. package/customer/components/add-customer-to-group-dialog/add-customer-to-group-dialog.component.d.ts +6 -3
  222. package/customer/components/address-card/address-card.component.d.ts +5 -2
  223. package/customer/components/address-detail-dialog/address-detail-dialog.component.d.ts +5 -2
  224. package/customer/components/customer-detail/customer-detail.component.d.ts +8 -5
  225. package/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.d.ts +3 -0
  226. package/customer/components/customer-group-list/customer-group-list.component.d.ts +10 -7
  227. package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +3 -0
  228. package/customer/components/customer-history/customer-history.component.d.ts +12 -7
  229. package/customer/components/customer-list/customer-list.component.d.ts +6 -3
  230. package/customer/components/customer-status-label/customer-status-label.component.d.ts +5 -2
  231. package/customer/components/select-customer-group-dialog/select-customer-group-dialog.component.d.ts +5 -2
  232. package/customer/customer.module.d.ts +17 -0
  233. package/customer/package.json +5 -6
  234. package/customer/providers/routing/customer-resolver.d.ts +5 -4
  235. package/customer/vendure-admin-ui-customer.d.ts +1 -0
  236. package/dashboard/components/dashboard/dashboard.component.d.ts +3 -0
  237. package/dashboard/components/dashboard-widget/dashboard-widget.component.d.ts +3 -0
  238. package/dashboard/dashboard.module.d.ts +8 -0
  239. package/dashboard/package.json +5 -6
  240. package/dashboard/vendure-admin-ui-dashboard.d.ts +1 -0
  241. package/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.d.ts +9 -2
  242. package/dashboard/widgets/order-summary-widget/order-summary-widget.component.d.ts +7 -0
  243. package/dashboard/widgets/test-widget/test-widget.component.d.ts +6 -0
  244. package/dashboard/widgets/welcome-widget/welcome-widget.component.d.ts +9 -2
  245. package/esm2020/catalog/catalog.module.mjs +116 -0
  246. package/esm2020/catalog/catalog.routes.mjs +174 -0
  247. package/esm2020/catalog/components/apply-facet-dialog/apply-facet-dialog.component.mjs +30 -0
  248. package/esm2020/catalog/components/asset-detail/asset-detail.component.mjs +66 -0
  249. package/esm2020/catalog/components/asset-list/asset-list.component.mjs +120 -0
  250. package/esm2020/catalog/components/assets/assets.component.mjs +100 -0
  251. package/esm2020/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.mjs +104 -0
  252. package/esm2020/catalog/components/collection-contents/collection-contents.component.mjs +76 -0
  253. package/esm2020/catalog/components/collection-detail/collection-detail.component.mjs +212 -0
  254. package/esm2020/catalog/components/collection-list/collection-list.component.mjs +120 -0
  255. package/esm2020/catalog/components/collection-tree/array-to-tree.mjs +56 -0
  256. package/esm2020/catalog/components/collection-tree/collection-tree-node.component.mjs +99 -0
  257. package/esm2020/catalog/components/collection-tree/collection-tree.component.mjs +44 -0
  258. package/esm2020/catalog/components/collection-tree/collection-tree.service.mjs +68 -0
  259. package/esm2020/catalog/components/collection-tree/collection-tree.types.mjs +2 -0
  260. package/esm2020/catalog/components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component.mjs +23 -0
  261. package/esm2020/catalog/components/facet-detail/facet-detail.component.mjs +321 -0
  262. package/esm2020/catalog/components/facet-list/facet-list.component.mjs +104 -0
  263. package/esm2020/catalog/components/generate-product-variants/generate-product-variants.component.mjs +79 -0
  264. package/esm2020/catalog/components/option-value-input/option-value-input.component.mjs +97 -0
  265. package/esm2020/catalog/components/product-detail/product-detail.component.mjs +520 -0
  266. package/esm2020/catalog/components/product-detail/product-detail.types.mjs +2 -0
  267. package/esm2020/catalog/components/product-list/product-list.component.mjs +150 -0
  268. package/esm2020/catalog/components/product-options-editor/product-options-editor.component.mjs +151 -0
  269. package/esm2020/catalog/components/product-search-input/product-search-input.component.mjs +107 -0
  270. package/esm2020/catalog/components/product-variants-editor/product-variants-editor.component.mjs +313 -0
  271. package/esm2020/catalog/components/product-variants-list/product-variants-list.component.mjs +226 -0
  272. package/esm2020/catalog/components/product-variants-table/product-variants-table.component.mjs +72 -0
  273. package/esm2020/catalog/components/update-product-option-dialog/update-product-option-dialog.component.mjs +64 -0
  274. package/esm2020/catalog/components/variant-price-detail/variant-price-detail.component.mjs +61 -0
  275. package/esm2020/catalog/providers/product-detail/product-detail.service.mjs +224 -0
  276. package/{esm2015/catalog/providers/product-detail/replace-last.js → esm2020/catalog/providers/product-detail/replace-last.mjs} +0 -0
  277. package/esm2020/catalog/providers/routing/asset-resolver.mjs +33 -0
  278. package/esm2020/catalog/providers/routing/collection-resolver.mjs +36 -0
  279. package/esm2020/catalog/providers/routing/facet-resolver.mjs +30 -0
  280. package/esm2020/catalog/providers/routing/product-resolver.mjs +39 -0
  281. package/esm2020/catalog/providers/routing/product-variants-resolver.mjs +27 -0
  282. package/esm2020/catalog/public_api.mjs +39 -0
  283. package/{esm2015/catalog/vendure-admin-ui-catalog.js → esm2020/catalog/vendure-admin-ui-catalog.mjs} +0 -0
  284. package/esm2020/core/app.component.mjs +79 -0
  285. package/esm2020/core/app.component.module.mjs +19 -0
  286. package/{esm2015/core/app.config.js → esm2020/core/app.config.mjs} +0 -0
  287. package/esm2020/core/common/base-detail.component.mjs +108 -0
  288. package/esm2020/core/common/base-entity-resolver.mjs +60 -0
  289. package/esm2020/core/common/base-list.component.mjs +159 -0
  290. package/{esm2015/core/common/component-registry-types.js → esm2020/core/common/component-registry-types.mjs} +0 -0
  291. package/{esm2015/core/common/deactivate-aware.js → esm2020/core/common/deactivate-aware.mjs} +0 -0
  292. package/{esm2015/core/common/detail-breadcrumb.js → esm2020/core/common/detail-breadcrumb.mjs} +0 -0
  293. package/esm2020/core/common/generated-types.mjs +957 -0
  294. package/{esm2015/core/common/introspection-result-wrapper.js → esm2020/core/common/introspection-result-wrapper.mjs} +0 -0
  295. package/esm2020/core/common/introspection-result.mjs +193 -0
  296. package/{esm2015/core/common/single-search-selection-model.js → esm2020/core/common/single-search-selection-model.mjs} +0 -0
  297. package/esm2020/core/common/utilities/configurable-operation-utils.mjs +83 -0
  298. package/esm2020/core/common/utilities/create-updated-translatable.mjs +75 -0
  299. package/esm2020/core/common/utilities/find-translation.mjs +9 -0
  300. package/esm2020/core/common/utilities/flatten-facet-values.mjs +4 -0
  301. package/esm2020/core/common/utilities/get-default-ui-language.mjs +12 -0
  302. package/{esm2015/core/common/utilities/interpolate-description.js → esm2020/core/common/utilities/interpolate-description.mjs} +0 -0
  303. package/{esm2015/core/common/utilities/string-to-color.js → esm2020/core/common/utilities/string-to-color.mjs} +0 -0
  304. package/esm2020/core/common/version.mjs +3 -0
  305. package/esm2020/core/components/app-shell/app-shell.component.mjs +76 -0
  306. package/esm2020/core/components/breadcrumb/breadcrumb.component.mjs +124 -0
  307. package/esm2020/core/components/channel-switcher/channel-switcher.component.mjs +58 -0
  308. package/esm2020/core/components/main-nav/main-nav.component.mjs +270 -0
  309. package/esm2020/core/components/notification/notification.component.mjs +76 -0
  310. package/esm2020/core/components/overlay-host/overlay-host.component.mjs +22 -0
  311. package/esm2020/core/components/theme-switcher/theme-switcher.component.mjs +29 -0
  312. package/esm2020/core/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.mjs +305 -0
  313. package/esm2020/core/components/user-menu/user-menu.component.mjs +37 -0
  314. package/esm2020/core/core.module.mjs +145 -0
  315. package/{esm2015/core/data/check-jobs-link.js → esm2020/core/data/check-jobs-link.mjs} +0 -0
  316. package/esm2020/core/data/client-state/client-defaults.mjs +31 -0
  317. package/esm2020/core/data/client-state/client-resolvers.mjs +131 -0
  318. package/esm2020/core/data/data.module.mjs +126 -0
  319. package/{esm2015/core/data/definitions/administrator-definitions.js → esm2020/core/data/definitions/administrator-definitions.mjs} +0 -0
  320. package/{esm2015/core/data/definitions/auth-definitions.js → esm2020/core/data/definitions/auth-definitions.mjs} +0 -0
  321. package/{esm2015/core/data/definitions/client-definitions.js → esm2020/core/data/definitions/client-definitions.mjs} +0 -0
  322. package/esm2020/core/data/definitions/collection-definitions.mjs +128 -0
  323. package/{esm2015/core/data/definitions/customer-definitions.js → esm2020/core/data/definitions/customer-definitions.mjs} +0 -0
  324. package/{esm2015/core/data/definitions/facet-definitions.js → esm2020/core/data/definitions/facet-definitions.mjs} +0 -0
  325. package/esm2020/core/data/definitions/order-definitions.mjs +457 -0
  326. package/{esm2015/core/data/definitions/product-definitions.js → esm2020/core/data/definitions/product-definitions.mjs} +0 -0
  327. package/{esm2015/core/data/definitions/promotion-definitions.js → esm2020/core/data/definitions/promotion-definitions.mjs} +0 -0
  328. package/{esm2015/core/data/definitions/settings-definitions.js → esm2020/core/data/definitions/settings-definitions.mjs} +0 -0
  329. package/{esm2015/core/data/definitions/shared-definitions.js → esm2020/core/data/definitions/shared-definitions.mjs} +0 -0
  330. package/{esm2015/core/data/definitions/shipping-definitions.js → esm2020/core/data/definitions/shipping-definitions.mjs} +0 -0
  331. package/{esm2015/core/data/omit-typename-link.js → esm2020/core/data/omit-typename-link.mjs} +0 -0
  332. package/esm2020/core/data/providers/administrator-data.service.mjs +63 -0
  333. package/esm2020/core/data/providers/auth-data.service.mjs +20 -0
  334. package/esm2020/core/data/providers/base-data.service.mjs +69 -0
  335. package/esm2020/core/data/providers/client-data.service.mjs +75 -0
  336. package/esm2020/core/data/providers/collection-data.service.mjs +74 -0
  337. package/esm2020/core/data/providers/customer-data.service.mjs +120 -0
  338. package/esm2020/core/data/providers/data.service.mjs +90 -0
  339. package/esm2020/core/data/providers/facet-data.service.mjs +60 -0
  340. package/esm2020/core/data/providers/fetch-adapter.mjs +36 -0
  341. package/esm2020/core/data/providers/interceptor.mjs +136 -0
  342. package/esm2020/core/data/providers/order-data.service.mjs +100 -0
  343. package/esm2020/core/data/providers/product-data.service.mjs +240 -0
  344. package/esm2020/core/data/providers/promotion-data.service.mjs +37 -0
  345. package/esm2020/core/data/providers/settings-data.service.mjs +235 -0
  346. package/esm2020/core/data/providers/shipping-method-data.service.mjs +66 -0
  347. package/esm2020/core/data/query-result.mjs +77 -0
  348. package/esm2020/core/data/server-config.mjs +74 -0
  349. package/esm2020/core/data/utils/add-custom-fields.mjs +84 -0
  350. package/{esm2015/core/data/utils/get-server-location.js → esm2020/core/data/utils/get-server-location.mjs} +0 -0
  351. package/{esm2015/core/data/utils/remove-readonly-custom-fields.js → esm2020/core/data/utils/remove-readonly-custom-fields.mjs} +0 -0
  352. package/esm2020/core/data/utils/transform-relation-custom-field-inputs.mjs +46 -0
  353. package/esm2020/core/providers/auth/auth.service.mjs +104 -0
  354. package/esm2020/core/providers/component-registry/component-registry.service.mjs +25 -0
  355. package/{esm2015/core/providers/custom-detail-component/custom-detail-component-types.js → esm2020/core/providers/custom-detail-component/custom-detail-component-types.mjs} +0 -0
  356. package/esm2020/core/providers/custom-detail-component/custom-detail-component.service.mjs +44 -0
  357. package/esm2020/core/providers/custom-field-component/custom-field-component.service.mjs +45 -0
  358. package/{esm2015/core/providers/dashboard-widget/dashboard-widget-types.js → esm2020/core/providers/dashboard-widget/dashboard-widget-types.mjs} +0 -0
  359. package/esm2020/core/providers/dashboard-widget/dashboard-widget.service.mjs +98 -0
  360. package/{esm2015/core/providers/dashboard-widget/register-dashboard-widget.js → esm2020/core/providers/dashboard-widget/register-dashboard-widget.mjs} +0 -0
  361. package/esm2020/core/providers/guard/auth.guard.mjs +38 -0
  362. package/esm2020/core/providers/health-check/health-check.service.mjs +36 -0
  363. package/{esm2015/core/providers/i18n/custom-http-loader.js → esm2020/core/providers/i18n/custom-http-loader.mjs} +0 -0
  364. package/esm2020/core/providers/i18n/custom-message-format-compiler.mjs +31 -0
  365. package/esm2020/core/providers/i18n/i18n.service.mjs +54 -0
  366. package/esm2020/core/providers/job-queue/job-queue.service.mjs +91 -0
  367. package/esm2020/core/providers/local-storage/local-storage.service.mjs +77 -0
  368. package/esm2020/core/providers/modal/modal.service.mjs +97 -0
  369. package/esm2020/core/providers/modal/modal.types.mjs +2 -0
  370. package/{esm2015/core/providers/nav-builder/nav-builder-types.js → esm2020/core/providers/nav-builder/nav-builder-types.mjs} +0 -0
  371. package/esm2020/core/providers/nav-builder/nav-builder.service.mjs +268 -0
  372. package/esm2020/core/providers/notification/notification.service.mjs +157 -0
  373. package/esm2020/core/providers/overlay-host/overlay-host.service.mjs +48 -0
  374. package/esm2020/core/public_api.mjs +221 -0
  375. package/esm2020/core/shared/components/action-bar/action-bar.component.mjs +57 -0
  376. package/esm2020/core/shared/components/action-bar-items/action-bar-items.component.mjs +78 -0
  377. package/esm2020/core/shared/components/address-form/address-form.component.mjs +23 -0
  378. package/esm2020/core/shared/components/affixed-input/affixed-input.component.mjs +19 -0
  379. package/esm2020/core/shared/components/affixed-input/percentage-suffix-input.component.mjs +97 -0
  380. package/esm2020/core/shared/components/asset-file-input/asset-file-input.component.mjs +97 -0
  381. package/esm2020/core/shared/components/asset-gallery/asset-gallery.component.mjs +110 -0
  382. package/esm2020/core/shared/components/asset-gallery/asset-gallery.types.mjs +2 -0
  383. package/esm2020/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.mjs +144 -0
  384. package/esm2020/core/shared/components/asset-preview/asset-preview.component.mjs +189 -0
  385. package/esm2020/core/shared/components/asset-preview-dialog/asset-preview-dialog.component.mjs +34 -0
  386. package/esm2020/core/shared/components/asset-preview-links/asset-preview-links.component.mjs +26 -0
  387. package/esm2020/core/shared/components/asset-search-input/asset-search-input.component.mjs +106 -0
  388. package/esm2020/core/shared/components/channel-assignment-control/channel-assignment-control.component.mjs +116 -0
  389. package/esm2020/core/shared/components/channel-badge/channel-badge.component.mjs +19 -0
  390. package/esm2020/core/shared/components/chip/chip.component.mjs +47 -0
  391. package/esm2020/core/shared/components/configurable-input/configurable-input.component.mjs +144 -0
  392. package/esm2020/core/shared/components/currency-input/currency-input.component.mjs +152 -0
  393. package/esm2020/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.mjs +40 -0
  394. package/esm2020/core/shared/components/custom-field-control/custom-field-control.component.mjs +83 -0
  395. package/esm2020/core/shared/components/customer-label/customer-label.component.mjs +17 -0
  396. package/esm2020/core/shared/components/data-table/data-table-column.component.mjs +29 -0
  397. package/esm2020/core/shared/components/data-table/data-table.component.mjs +124 -0
  398. package/{esm2015/core/shared/components/datetime-picker/constants.js → esm2020/core/shared/components/datetime-picker/constants.mjs} +0 -0
  399. package/esm2020/core/shared/components/datetime-picker/datetime-picker.component.mjs +226 -0
  400. package/esm2020/core/shared/components/datetime-picker/datetime-picker.service.mjs +201 -0
  401. package/{esm2015/core/shared/components/datetime-picker/types.js → esm2020/core/shared/components/datetime-picker/types.mjs} +0 -0
  402. package/esm2020/core/shared/components/dropdown/dropdown-item.directive.mjs +25 -0
  403. package/esm2020/core/shared/components/dropdown/dropdown-menu.component.mjs +127 -0
  404. package/esm2020/core/shared/components/dropdown/dropdown-trigger.directive.mjs +25 -0
  405. package/esm2020/core/shared/components/dropdown/dropdown.component.mjs +58 -0
  406. package/esm2020/core/shared/components/edit-note-dialog/edit-note-dialog.component.mjs +32 -0
  407. package/esm2020/core/shared/components/empty-placeholder/empty-placeholder.component.mjs +16 -0
  408. package/esm2020/core/shared/components/entity-info/entity-info.component.mjs +26 -0
  409. package/{esm2015/core/shared/components/extension-host/extension-host-config.js → esm2020/core/shared/components/extension-host/extension-host-config.mjs} +0 -0
  410. package/esm2020/core/shared/components/extension-host/extension-host.component.mjs +80 -0
  411. package/esm2020/core/shared/components/extension-host/extension-host.service.mjs +99 -0
  412. package/{esm2015/core/shared/components/extension-host/host-external-frame.js → esm2020/core/shared/components/extension-host/host-external-frame.mjs} +0 -0
  413. package/esm2020/core/shared/components/facet-value-chip/facet-value-chip.component.mjs +26 -0
  414. package/esm2020/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +121 -0
  415. package/esm2020/core/shared/components/focal-point-control/focal-point-control.component.mjs +71 -0
  416. package/esm2020/core/shared/components/form-field/form-field-control.directive.mjs +37 -0
  417. package/esm2020/core/shared/components/form-field/form-field.component.mjs +70 -0
  418. package/esm2020/core/shared/components/form-item/form-item.component.mjs +18 -0
  419. package/esm2020/core/shared/components/formatted-address/formatted-address.component.mjs +38 -0
  420. package/esm2020/core/shared/components/help-tooltip/help-tooltip.component.mjs +16 -0
  421. package/esm2020/core/shared/components/history-entry-detail/history-entry-detail.component.mjs +16 -0
  422. package/esm2020/core/shared/components/items-per-page-controls/items-per-page-controls.component.mjs +25 -0
  423. package/esm2020/core/shared/components/labeled-data/labeled-data.component.mjs +13 -0
  424. package/esm2020/core/shared/components/language-selector/language-selector.component.mjs +31 -0
  425. package/esm2020/core/shared/components/manage-tags-dialog/manage-tags-dialog.component.mjs +61 -0
  426. package/esm2020/core/shared/components/modal-dialog/dialog-buttons.directive.mjs +23 -0
  427. package/esm2020/core/shared/components/modal-dialog/dialog-component-outlet.component.mjs +31 -0
  428. package/esm2020/core/shared/components/modal-dialog/dialog-title.directive.mjs +23 -0
  429. package/esm2020/core/shared/components/modal-dialog/modal-dialog.component.mjs +60 -0
  430. package/esm2020/core/shared/components/object-tree/object-tree.component.mjs +56 -0
  431. package/esm2020/core/shared/components/order-state-label/order-state-label.component.mjs +46 -0
  432. package/esm2020/core/shared/components/pagination-controls/pagination-controls.component.mjs +26 -0
  433. package/esm2020/core/shared/components/product-variant-selector/product-variant-selector.component.mjs +62 -0
  434. package/esm2020/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +37 -0
  435. package/esm2020/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.mjs +34 -0
  436. package/{esm2015/core/shared/components/rich-text-editor/prosemirror/inputrules.js → esm2020/core/shared/components/rich-text-editor/prosemirror/inputrules.mjs} +0 -0
  437. package/{esm2015/core/shared/components/rich-text-editor/prosemirror/keymap.js → esm2020/core/shared/components/rich-text-editor/prosemirror/keymap.mjs} +0 -0
  438. package/{esm2015/core/shared/components/rich-text-editor/prosemirror/menu/images.js → esm2020/core/shared/components/rich-text-editor/prosemirror/menu/images.mjs} +0 -0
  439. package/{esm2015/core/shared/components/rich-text-editor/prosemirror/menu/links.js → esm2020/core/shared/components/rich-text-editor/prosemirror/menu/links.mjs} +0 -0
  440. package/{esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.js → esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.mjs} +0 -0
  441. package/{esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu.js → esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu.mjs} +0 -0
  442. package/{esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.js → esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.mjs} +0 -0
  443. package/esm2020/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +112 -0
  444. package/{esm2015/core/shared/components/rich-text-editor/prosemirror/types.js → esm2020/core/shared/components/rich-text-editor/prosemirror/types.mjs} +0 -0
  445. package/{esm2015/core/shared/components/rich-text-editor/prosemirror/utils.js → esm2020/core/shared/components/rich-text-editor/prosemirror/utils.mjs} +0 -0
  446. package/esm2020/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +93 -0
  447. package/esm2020/core/shared/components/select-toggle/select-toggle.component.mjs +32 -0
  448. package/esm2020/core/shared/components/simple-dialog/simple-dialog.component.mjs +24 -0
  449. package/esm2020/core/shared/components/status-badge/status-badge.component.mjs +16 -0
  450. package/esm2020/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.mjs +54 -0
  451. package/esm2020/core/shared/components/table-row-action/table-row-action.component.mjs +28 -0
  452. package/esm2020/core/shared/components/tag-selector/tag-selector.component.mjs +60 -0
  453. package/esm2020/core/shared/components/timeline-entry/timeline-entry.component.mjs +52 -0
  454. package/esm2020/core/shared/components/title-input/title-input.component.mjs +21 -0
  455. package/esm2020/core/shared/components/ui-extension-point/ui-extension-point.component.mjs +34 -0
  456. package/esm2020/core/shared/directives/disabled.directive.mjs +41 -0
  457. package/esm2020/core/shared/directives/if-default-channel-active.directive.mjs +39 -0
  458. package/esm2020/core/shared/directives/if-directive-base.mjs +73 -0
  459. package/esm2020/core/shared/directives/if-multichannel.directive.mjs +45 -0
  460. package/esm2020/core/shared/directives/if-permissions.directive.mjs +76 -0
  461. package/esm2020/core/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.mjs +23 -0
  462. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.mjs +120 -0
  463. package/esm2020/core/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.mjs +31 -0
  464. package/esm2020/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.mjs +42 -0
  465. package/esm2020/core/shared/dynamic-form-inputs/date-form-input/date-form-input.component.mjs +32 -0
  466. package/esm2020/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +265 -0
  467. package/esm2020/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.mjs +35 -0
  468. package/esm2020/core/shared/dynamic-form-inputs/number-form-input/number-form-input.component.mjs +39 -0
  469. package/esm2020/core/shared/dynamic-form-inputs/password-form-input/password-form-input.component.mjs +21 -0
  470. package/esm2020/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.mjs +61 -0
  471. package/{esm2015/core/shared/dynamic-form-inputs/register-dynamic-input-components.js → esm2020/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs} +0 -0
  472. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +69 -0
  473. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.mjs +70 -0
  474. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.mjs +54 -0
  475. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/product/relation-product-input.component.mjs +89 -0
  476. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.mjs +89 -0
  477. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/relation-card/relation-card.component.mjs +60 -0
  478. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.mjs +29 -0
  479. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/relation-selector-dialog/relation-selector-dialog.component.mjs +14 -0
  480. package/esm2020/core/shared/dynamic-form-inputs/rich-text-form-input/rich-text-form-input.component.mjs +21 -0
  481. package/esm2020/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.mjs +31 -0
  482. package/esm2020/core/shared/dynamic-form-inputs/text-form-input/text-form-input.component.mjs +28 -0
  483. package/esm2020/core/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.mjs +24 -0
  484. package/esm2020/core/shared/pipes/asset-preview.pipe.mjs +42 -0
  485. package/esm2020/core/shared/pipes/channel-label.pipe.mjs +23 -0
  486. package/esm2020/core/shared/pipes/custom-field-label.pipe.mjs +47 -0
  487. package/esm2020/core/shared/pipes/duration.pipe.mjs +49 -0
  488. package/esm2020/core/shared/pipes/file-size.pipe.mjs +47 -0
  489. package/esm2020/core/shared/pipes/has-permission.pipe.mjs +65 -0
  490. package/esm2020/core/shared/pipes/locale-base.pipe.mjs +55 -0
  491. package/esm2020/core/shared/pipes/locale-currency-name.pipe.mjs +61 -0
  492. package/esm2020/core/shared/pipes/locale-currency.pipe.mjs +44 -0
  493. package/esm2020/core/shared/pipes/locale-date.pipe.mjs +84 -0
  494. package/esm2020/core/shared/pipes/locale-language-name.pipe.mjs +51 -0
  495. package/esm2020/core/shared/pipes/locale-region-name.pipe.mjs +51 -0
  496. package/esm2020/core/shared/pipes/sentence-case.pipe.mjs +30 -0
  497. package/esm2020/core/shared/pipes/sort.pipe.mjs +34 -0
  498. package/esm2020/core/shared/pipes/state-i18n-token.pipe.mjs +50 -0
  499. package/esm2020/core/shared/pipes/string-to-color.pipe.mjs +18 -0
  500. package/esm2020/core/shared/pipes/time-ago.pipe.mjs +52 -0
  501. package/esm2020/core/shared/providers/routing/can-deactivate-detail-guard.mjs +35 -0
  502. package/esm2020/core/shared/shared.module.mjs +524 -0
  503. package/{esm2015/core/validators/unicode-pattern.validator.js → esm2020/core/validators/unicode-pattern.validator.mjs} +0 -0
  504. package/{esm2015/core/vendure-admin-ui-core.js → esm2020/core/vendure-admin-ui-core.mjs} +0 -0
  505. package/esm2020/customer/components/add-customer-to-group-dialog/add-customer-to-group-dialog.component.mjs +41 -0
  506. package/esm2020/customer/components/address-card/address-card.component.mjs +97 -0
  507. package/esm2020/customer/components/address-detail-dialog/address-detail-dialog.component.mjs +28 -0
  508. package/esm2020/customer/components/customer-detail/customer-detail.component.mjs +414 -0
  509. package/esm2020/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.mjs +45 -0
  510. package/esm2020/customer/components/customer-group-list/customer-group-list.component.mjs +181 -0
  511. package/esm2020/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +103 -0
  512. package/esm2020/customer/components/customer-history/customer-history.component.mjs +83 -0
  513. package/esm2020/customer/components/customer-list/customer-list.component.mjs +80 -0
  514. package/esm2020/customer/components/customer-status-label/customer-status-label.component.mjs +17 -0
  515. package/esm2020/customer/components/select-customer-group-dialog/select-customer-group-dialog.component.mjs +31 -0
  516. package/esm2020/customer/customer.module.mjs +53 -0
  517. package/esm2020/customer/customer.routes.mjs +42 -0
  518. package/esm2020/customer/providers/routing/customer-resolver.mjs +31 -0
  519. package/{esm2015/customer/public_api.js → esm2020/customer/public_api.mjs} +0 -0
  520. package/{esm2015/customer/vendure-admin-ui-customer.js → esm2020/customer/vendure-admin-ui-customer.mjs} +0 -0
  521. package/esm2020/dashboard/components/dashboard/dashboard.component.mjs +121 -0
  522. package/esm2020/dashboard/components/dashboard-widget/dashboard-widget.component.mjs +35 -0
  523. package/esm2020/dashboard/dashboard.module.mjs +29 -0
  524. package/{esm2015/dashboard/dashboard.routes.js → esm2020/dashboard/dashboard.routes.mjs} +0 -0
  525. package/esm2020/dashboard/default-widgets.mjs +32 -0
  526. package/{esm2015/dashboard/public_api.js → esm2020/dashboard/public_api.mjs} +0 -0
  527. package/{esm2015/dashboard/vendure-admin-ui-dashboard.js → esm2020/dashboard/vendure-admin-ui-dashboard.mjs} +0 -0
  528. package/esm2020/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +45 -0
  529. package/esm2020/dashboard/widgets/order-summary-widget/order-summary-widget.component.mjs +59 -0
  530. package/esm2020/dashboard/widgets/test-widget/test-widget.component.mjs +22 -0
  531. package/esm2020/dashboard/widgets/welcome-widget/welcome-widget.component.mjs +39 -0
  532. package/esm2020/login/components/login/login.component.mjs +62 -0
  533. package/esm2020/login/login.module.mjs +21 -0
  534. package/{esm2015/login/login.routes.js → esm2020/login/login.routes.mjs} +0 -0
  535. package/esm2020/login/providers/login.guard.mjs +31 -0
  536. package/{esm2015/login/public_api.js → esm2020/login/public_api.mjs} +0 -0
  537. package/{esm2015/login/vendure-admin-ui-login.js → esm2020/login/vendure-admin-ui-login.mjs} +0 -0
  538. package/esm2020/marketing/components/promotion-detail/promotion-detail.component.mjs +242 -0
  539. package/esm2020/marketing/components/promotion-list/promotion-list.component.mjs +81 -0
  540. package/esm2020/marketing/marketing.module.mjs +21 -0
  541. package/esm2020/marketing/marketing.routes.mjs +33 -0
  542. package/esm2020/marketing/providers/routing/promotion-resolver.mjs +31 -0
  543. package/{esm2015/marketing/public_api.js → esm2020/marketing/public_api.mjs} +0 -0
  544. package/{esm2015/marketing/vendure-admin-ui-marketing.js → esm2020/marketing/vendure-admin-ui-marketing.mjs} +0 -0
  545. package/esm2020/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.mjs +39 -0
  546. package/esm2020/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +82 -0
  547. package/esm2020/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +73 -0
  548. package/esm2020/order/components/fulfillment-card/fulfillment-card.component.mjs +48 -0
  549. package/esm2020/order/components/fulfillment-detail/fulfillment-detail.component.mjs +62 -0
  550. package/esm2020/order/components/fulfillment-state-label/fulfillment-state-label.component.mjs +28 -0
  551. package/esm2020/order/components/line-fulfillment/line-fulfillment.component.mjs +68 -0
  552. package/esm2020/order/components/line-refunds/line-refunds.component.mjs +37 -0
  553. package/esm2020/order/components/modification-detail/modification-detail.component.mjs +68 -0
  554. package/esm2020/order/components/order-custom-fields-card/order-custom-fields-card.component.mjs +40 -0
  555. package/esm2020/order/components/order-detail/order-detail.component.mjs +504 -0
  556. package/esm2020/order/components/order-editor/order-editor.component.mjs +381 -0
  557. package/esm2020/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.mjs +55 -0
  558. package/esm2020/order/components/order-history/order-history.component.mjs +166 -0
  559. package/esm2020/order/components/order-list/order-list.component.mjs +192 -0
  560. package/esm2020/order/components/order-payment-card/order-payment-card.component.mjs +43 -0
  561. package/{esm2015/order/components/order-process-graph/constants.js → esm2020/order/components/order-process-graph/constants.mjs} +0 -0
  562. package/esm2020/order/components/order-process-graph/order-process-edge.component.mjs +45 -0
  563. package/esm2020/order/components/order-process-graph/order-process-graph.component.mjs +96 -0
  564. package/esm2020/order/components/order-process-graph/order-process-node.component.mjs +53 -0
  565. package/{esm2015/order/components/order-process-graph/types.js → esm2020/order/components/order-process-graph/types.mjs} +0 -0
  566. package/esm2020/order/components/order-process-graph-dialog/order-process-graph-dialog.component.mjs +21 -0
  567. package/esm2020/order/components/order-state-select-dialog/order-state-select-dialog.component.mjs +29 -0
  568. package/esm2020/order/components/order-table/order-table.component.mjs +73 -0
  569. package/esm2020/order/components/payment-detail/payment-detail.component.mjs +18 -0
  570. package/esm2020/order/components/payment-state-label/payment-state-label.component.mjs +28 -0
  571. package/esm2020/order/components/refund-order-dialog/refund-order-dialog.component.mjs +142 -0
  572. package/esm2020/order/components/refund-state-label/refund-state-label.component.mjs +27 -0
  573. package/esm2020/order/components/settle-refund-dialog/settle-refund-dialog.component.mjs +24 -0
  574. package/esm2020/order/components/simple-item-list/simple-item-list.component.mjs +15 -0
  575. package/esm2020/order/order.module.mjs +103 -0
  576. package/esm2020/order/order.routes.mjs +52 -0
  577. package/esm2020/order/providers/order-transition.service.mjs +112 -0
  578. package/esm2020/order/providers/routing/order-resolver.mjs +29 -0
  579. package/{esm2015/order/public_api.js → esm2020/order/public_api.mjs} +0 -0
  580. package/{esm2015/order/vendure-admin-ui-order.js → esm2020/order/vendure-admin-ui-order.mjs} +0 -0
  581. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  582. package/esm2020/settings/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.mjs +34 -0
  583. package/esm2020/settings/components/admin-detail/admin-detail.component.mjs +192 -0
  584. package/esm2020/settings/components/administrator-list/administrator-list.component.mjs +49 -0
  585. package/esm2020/settings/components/channel-detail/channel-detail.component.mjs +154 -0
  586. package/esm2020/settings/components/channel-list/channel-list.component.mjs +53 -0
  587. package/esm2020/settings/components/country-detail/country-detail.component.mjs +115 -0
  588. package/esm2020/settings/components/country-list/country-list.component.mjs +84 -0
  589. package/esm2020/settings/components/global-settings/global-settings.component.mjs +85 -0
  590. package/esm2020/settings/components/payment-method-detail/payment-method-detail.component.mjs +199 -0
  591. package/esm2020/settings/components/payment-method-list/payment-method-list.component.mjs +62 -0
  592. package/esm2020/settings/components/permission-grid/permission-grid.component.mjs +83 -0
  593. package/esm2020/settings/components/profile/profile.component.mjs +77 -0
  594. package/esm2020/settings/components/role-detail/role-detail.component.mjs +105 -0
  595. package/esm2020/settings/components/role-list/role-list.component.mjs +66 -0
  596. package/esm2020/settings/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.mjs +30 -0
  597. package/esm2020/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +240 -0
  598. package/esm2020/settings/components/shipping-method-list/shipping-method-list.component.mjs +92 -0
  599. package/esm2020/settings/components/shipping-method-test-result/shipping-method-test-result.component.mjs +30 -0
  600. package/esm2020/settings/components/tax-category-detail/tax-category-detail.component.mjs +107 -0
  601. package/esm2020/settings/components/tax-category-list/tax-category-list.component.mjs +56 -0
  602. package/esm2020/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +126 -0
  603. package/esm2020/settings/components/tax-rate-list/tax-rate-list.component.mjs +56 -0
  604. package/esm2020/settings/components/test-address-form/test-address-form.component.mjs +49 -0
  605. package/esm2020/settings/components/test-order-builder/test-order-builder.component.mjs +71 -0
  606. package/esm2020/settings/components/zone-detail-dialog/zone-detail-dialog.component.mjs +44 -0
  607. package/esm2020/settings/components/zone-list/zone-list.component.mjs +158 -0
  608. package/esm2020/settings/components/zone-member-list/zone-member-controls.directive.mjs +16 -0
  609. package/esm2020/settings/components/zone-member-list/zone-member-list-header.directive.mjs +16 -0
  610. package/esm2020/settings/components/zone-member-list/zone-member-list.component.mjs +72 -0
  611. package/esm2020/settings/providers/routing/administrator-resolver.mjs +28 -0
  612. package/esm2020/settings/providers/routing/channel-resolver.mjs +34 -0
  613. package/esm2020/settings/providers/routing/country-resolver.mjs +31 -0
  614. package/esm2020/settings/providers/routing/global-settings-resolver.mjs +24 -0
  615. package/esm2020/settings/providers/routing/payment-method-resolver.mjs +33 -0
  616. package/esm2020/settings/providers/routing/profile-resolver.mjs +30 -0
  617. package/esm2020/settings/providers/routing/role-resolver.mjs +28 -0
  618. package/esm2020/settings/providers/routing/shipping-method-resolver.mjs +34 -0
  619. package/esm2020/settings/providers/routing/tax-category-resolver.mjs +29 -0
  620. package/esm2020/settings/providers/routing/tax-rate-resolver.mjs +33 -0
  621. package/{esm2015/settings/public_api.js → esm2020/settings/public_api.mjs} +0 -0
  622. package/esm2020/settings/settings.module.mjs +106 -0
  623. package/esm2020/settings/settings.routes.mjs +253 -0
  624. package/{esm2015/settings/vendure-admin-ui-settings.js → esm2020/settings/vendure-admin-ui-settings.mjs} +0 -0
  625. package/esm2020/system/components/health-check/health-check.component.mjs +18 -0
  626. package/esm2020/system/components/job-list/job-list.component.mjs +76 -0
  627. package/esm2020/system/components/job-state-label/job-state-label.component.mjs +46 -0
  628. package/{esm2015/system/public_api.js → esm2020/system/public_api.mjs} +0 -0
  629. package/esm2020/system/system.module.mjs +22 -0
  630. package/esm2020/system/system.routes.mjs +20 -0
  631. package/{esm2015/system/vendure-admin-ui-system.js → esm2020/system/vendure-admin-ui-system.mjs} +0 -0
  632. package/{esm2015/vendure-admin-ui.js → esm2020/vendure-admin-ui.mjs} +0 -0
  633. package/fesm2015/vendure-admin-ui-catalog.mjs +3735 -0
  634. package/fesm2015/vendure-admin-ui-catalog.mjs.map +1 -0
  635. package/fesm2015/vendure-admin-ui-core.mjs +16057 -0
  636. package/fesm2015/vendure-admin-ui-core.mjs.map +1 -0
  637. package/fesm2015/vendure-admin-ui-customer.mjs +1134 -0
  638. package/fesm2015/vendure-admin-ui-customer.mjs.map +1 -0
  639. package/fesm2015/vendure-admin-ui-dashboard.mjs +365 -0
  640. package/fesm2015/vendure-admin-ui-dashboard.mjs.map +1 -0
  641. package/fesm2015/vendure-admin-ui-login.mjs +122 -0
  642. package/fesm2015/vendure-admin-ui-login.mjs.map +1 -0
  643. package/fesm2015/vendure-admin-ui-marketing.mjs +388 -0
  644. package/fesm2015/vendure-admin-ui-marketing.mjs.map +1 -0
  645. package/fesm2015/vendure-admin-ui-order.mjs +2470 -0
  646. package/fesm2015/vendure-admin-ui-order.mjs.map +1 -0
  647. package/fesm2015/vendure-admin-ui-settings.mjs +2784 -0
  648. package/fesm2015/vendure-admin-ui-settings.mjs.map +1 -0
  649. package/fesm2015/vendure-admin-ui-system.mjs +165 -0
  650. package/fesm2015/vendure-admin-ui-system.mjs.map +1 -0
  651. package/fesm2015/vendure-admin-ui.mjs +11 -0
  652. package/fesm2015/vendure-admin-ui.mjs.map +1 -0
  653. package/fesm2020/vendure-admin-ui-catalog.mjs +3750 -0
  654. package/fesm2020/vendure-admin-ui-catalog.mjs.map +1 -0
  655. package/fesm2020/vendure-admin-ui-core.mjs +16053 -0
  656. package/fesm2020/vendure-admin-ui-core.mjs.map +1 -0
  657. package/fesm2020/vendure-admin-ui-customer.mjs +1135 -0
  658. package/fesm2020/vendure-admin-ui-customer.mjs.map +1 -0
  659. package/fesm2020/vendure-admin-ui-dashboard.mjs +361 -0
  660. package/fesm2020/vendure-admin-ui-dashboard.mjs.map +1 -0
  661. package/fesm2020/vendure-admin-ui-login.mjs +122 -0
  662. package/fesm2020/vendure-admin-ui-login.mjs.map +1 -0
  663. package/fesm2020/vendure-admin-ui-marketing.mjs +388 -0
  664. package/fesm2020/vendure-admin-ui-marketing.mjs.map +1 -0
  665. package/fesm2020/vendure-admin-ui-order.mjs +2483 -0
  666. package/fesm2020/vendure-admin-ui-order.mjs.map +1 -0
  667. package/fesm2020/vendure-admin-ui-settings.mjs +2791 -0
  668. package/fesm2020/vendure-admin-ui-settings.mjs.map +1 -0
  669. package/fesm2020/vendure-admin-ui-system.mjs +168 -0
  670. package/fesm2020/vendure-admin-ui-system.mjs.map +1 -0
  671. package/fesm2020/vendure-admin-ui.mjs +11 -0
  672. package/fesm2020/vendure-admin-ui.mjs.map +1 -0
  673. package/login/components/login/login.component.d.ts +3 -0
  674. package/login/login.module.d.ts +7 -0
  675. package/login/package.json +5 -6
  676. package/login/providers/login.guard.d.ts +3 -0
  677. package/login/vendure-admin-ui-login.d.ts +1 -0
  678. package/marketing/components/promotion-detail/promotion-detail.component.d.ts +7 -4
  679. package/marketing/components/promotion-list/promotion-list.component.d.ts +5 -6
  680. package/marketing/marketing.module.d.ts +8 -0
  681. package/marketing/package.json +5 -6
  682. package/marketing/providers/routing/promotion-resolver.d.ts +5 -2
  683. package/marketing/vendure-admin-ui-marketing.d.ts +1 -0
  684. package/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.d.ts +5 -2
  685. package/order/components/cancel-order-dialog/cancel-order-dialog.component.d.ts +3 -0
  686. package/order/components/fulfill-order-dialog/fulfill-order-dialog.component.d.ts +6 -3
  687. package/order/components/fulfillment-card/fulfillment-card.component.d.ts +6 -3
  688. package/order/components/fulfillment-detail/fulfillment-detail.component.d.ts +6 -3
  689. package/order/components/fulfillment-state-label/fulfillment-state-label.component.d.ts +3 -0
  690. package/order/components/line-fulfillment/line-fulfillment.component.d.ts +8 -3
  691. package/order/components/line-refunds/line-refunds.component.d.ts +6 -3
  692. package/order/components/modification-detail/modification-detail.component.d.ts +13 -4
  693. package/order/components/order-custom-fields-card/order-custom-fields-card.component.d.ts +3 -0
  694. package/order/components/order-detail/order-detail.component.d.ts +15 -10
  695. package/order/components/order-editor/order-editor.component.d.ts +16 -12
  696. package/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.d.ts +6 -3
  697. package/order/components/order-history/order-history.component.d.ts +36 -20
  698. package/order/components/order-list/order-list.component.d.ts +5 -2
  699. package/order/components/order-payment-card/order-payment-card.component.d.ts +48 -14
  700. package/order/components/order-process-graph/order-process-edge.component.d.ts +3 -0
  701. package/order/components/order-process-graph/order-process-graph.component.d.ts +3 -0
  702. package/order/components/order-process-graph/order-process-node.component.d.ts +3 -0
  703. package/order/components/order-process-graph-dialog/order-process-graph-dialog.component.d.ts +3 -0
  704. package/order/components/order-state-select-dialog/order-state-select-dialog.component.d.ts +3 -0
  705. package/order/components/order-table/order-table.component.d.ts +14 -8
  706. package/order/components/payment-detail/payment-detail.component.d.ts +5 -2
  707. package/order/components/payment-state-label/payment-state-label.component.d.ts +3 -0
  708. package/order/components/refund-order-dialog/refund-order-dialog.component.d.ts +8 -4
  709. package/order/components/refund-state-label/refund-state-label.component.d.ts +3 -0
  710. package/order/components/settle-refund-dialog/settle-refund-dialog.component.d.ts +5 -3
  711. package/order/components/simple-item-list/simple-item-list.component.d.ts +3 -0
  712. package/order/order.module.d.ts +34 -0
  713. package/order/package.json +5 -6
  714. package/order/providers/order-transition.service.d.ts +3 -0
  715. package/order/providers/routing/order-resolver.d.ts +5 -4
  716. package/order/vendure-admin-ui-order.d.ts +1 -0
  717. package/package.json +120 -36
  718. package/settings/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.d.ts +6 -3
  719. package/settings/components/admin-detail/admin-detail.component.d.ts +9 -10
  720. package/settings/components/administrator-list/administrator-list.component.d.ts +6 -3
  721. package/settings/components/channel-detail/channel-detail.component.d.ts +7 -8
  722. package/settings/components/channel-list/channel-list.component.d.ts +5 -5
  723. package/settings/components/country-detail/country-detail.component.d.ts +7 -4
  724. package/settings/components/country-list/country-list.component.d.ts +7 -4
  725. package/settings/components/global-settings/global-settings.component.d.ts +3 -0
  726. package/settings/components/payment-method-detail/payment-method-detail.component.d.ts +6 -3
  727. package/settings/components/payment-method-list/payment-method-list.component.d.ts +5 -2
  728. package/settings/components/permission-grid/permission-grid.component.d.ts +3 -0
  729. package/settings/components/profile/profile.component.d.ts +5 -2
  730. package/settings/components/role-detail/role-detail.component.d.ts +3 -0
  731. package/settings/components/role-list/role-list.component.d.ts +8 -5
  732. package/settings/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.d.ts +3 -0
  733. package/settings/components/shipping-method-detail/shipping-method-detail.component.d.ts +7 -4
  734. package/settings/components/shipping-method-list/shipping-method-list.component.d.ts +6 -3
  735. package/settings/components/shipping-method-test-result/shipping-method-test-result.component.d.ts +3 -0
  736. package/settings/components/tax-category-detail/tax-category-detail.component.d.ts +7 -8
  737. package/settings/components/tax-category-list/tax-category-list.component.d.ts +6 -6
  738. package/settings/components/tax-rate-detail/tax-rate-detail.component.d.ts +8 -5
  739. package/settings/components/tax-rate-list/tax-rate-list.component.d.ts +6 -7
  740. package/settings/components/test-address-form/test-address-form.component.d.ts +5 -2
  741. package/settings/components/test-order-builder/test-order-builder.component.d.ts +7 -2
  742. package/settings/components/zone-detail-dialog/zone-detail-dialog.component.d.ts +3 -0
  743. package/settings/components/zone-list/zone-list.component.d.ts +10 -7
  744. package/settings/components/zone-member-list/zone-member-controls.directive.d.ts +3 -0
  745. package/settings/components/zone-member-list/zone-member-list-header.directive.d.ts +3 -0
  746. package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -0
  747. package/settings/package.json +5 -6
  748. package/settings/providers/routing/administrator-resolver.d.ts +5 -4
  749. package/settings/providers/routing/channel-resolver.d.ts +5 -4
  750. package/settings/providers/routing/country-resolver.d.ts +5 -4
  751. package/settings/providers/routing/global-settings-resolver.d.ts +5 -4
  752. package/settings/providers/routing/payment-method-resolver.d.ts +5 -4
  753. package/settings/providers/routing/profile-resolver.d.ts +5 -4
  754. package/settings/providers/routing/role-resolver.d.ts +5 -4
  755. package/settings/providers/routing/shipping-method-resolver.d.ts +5 -4
  756. package/settings/providers/routing/tax-category-resolver.d.ts +5 -2
  757. package/settings/providers/routing/tax-rate-resolver.d.ts +5 -2
  758. package/settings/settings.module.d.ts +35 -0
  759. package/settings/vendure-admin-ui-settings.d.ts +1 -0
  760. package/static/i18n-messages/cs.json +4 -1
  761. package/static/i18n-messages/de.json +1 -1
  762. package/static/i18n-messages/en.json +3 -0
  763. package/static/i18n-messages/es.json +4 -1
  764. package/static/i18n-messages/fr.json +4 -1
  765. package/static/i18n-messages/it.json +4 -1
  766. package/static/i18n-messages/pl.json +4 -1
  767. package/static/i18n-messages/pt_BR.json +4 -1
  768. package/static/i18n-messages/pt_PT.json +4 -1
  769. package/static/i18n-messages/ru.json +4 -1
  770. package/static/i18n-messages/uk.json +4 -1
  771. package/static/i18n-messages/zh_Hans.json +4 -1
  772. package/static/i18n-messages/zh_Hant.json +4 -1
  773. package/static/polyfills.ts +0 -10
  774. package/static/styles/styles.scss +1 -1
  775. package/static/theme.min.css +1 -1
  776. package/system/components/health-check/health-check.component.d.ts +3 -0
  777. package/system/components/job-list/job-list.component.d.ts +7 -4
  778. package/system/components/job-state-label/job-state-label.component.d.ts +3 -0
  779. package/system/package.json +5 -6
  780. package/system/system.module.d.ts +9 -0
  781. package/system/vendure-admin-ui-system.d.ts +1 -0
  782. package/vendure-admin-ui.d.ts +1 -0
  783. package/bundles/vendure-admin-ui-catalog.umd.js +0 -4622
  784. package/bundles/vendure-admin-ui-catalog.umd.js.map +0 -1
  785. package/bundles/vendure-admin-ui-core.umd.js +0 -14777
  786. package/bundles/vendure-admin-ui-core.umd.js.map +0 -1
  787. package/bundles/vendure-admin-ui-customer.umd.js +0 -1657
  788. package/bundles/vendure-admin-ui-customer.umd.js.map +0 -1
  789. package/bundles/vendure-admin-ui-dashboard.umd.js +0 -757
  790. package/bundles/vendure-admin-ui-dashboard.umd.js.map +0 -1
  791. package/bundles/vendure-admin-ui-login.umd.js +0 -157
  792. package/bundles/vendure-admin-ui-login.umd.js.map +0 -1
  793. package/bundles/vendure-admin-ui-marketing.umd.js +0 -783
  794. package/bundles/vendure-admin-ui-marketing.umd.js.map +0 -1
  795. package/bundles/vendure-admin-ui-order.umd.js +0 -3377
  796. package/bundles/vendure-admin-ui-order.umd.js.map +0 -1
  797. package/bundles/vendure-admin-ui-settings.umd.js +0 -3697
  798. package/bundles/vendure-admin-ui-settings.umd.js.map +0 -1
  799. package/bundles/vendure-admin-ui-system.umd.js +0 -524
  800. package/bundles/vendure-admin-ui-system.umd.js.map +0 -1
  801. package/bundles/vendure-admin-ui.umd.js +0 -21
  802. package/bundles/vendure-admin-ui.umd.js.map +0 -1
  803. package/catalog/vendure-admin-ui-catalog.metadata.json +0 -1
  804. package/core/shared/components/product-selector/product-selector.component.d.ts +0 -48
  805. package/core/vendure-admin-ui-core.metadata.json +0 -1
  806. package/customer/vendure-admin-ui-customer.metadata.json +0 -1
  807. package/dashboard/vendure-admin-ui-dashboard.metadata.json +0 -1
  808. package/esm2015/catalog/catalog.module.js +0 -64
  809. package/esm2015/catalog/catalog.routes.js +0 -176
  810. package/esm2015/catalog/components/apply-facet-dialog/apply-facet-dialog.component.js +0 -32
  811. package/esm2015/catalog/components/asset-detail/asset-detail.component.js +0 -74
  812. package/esm2015/catalog/components/asset-list/asset-list.component.js +0 -119
  813. package/esm2015/catalog/components/assets/assets.component.js +0 -93
  814. package/esm2015/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.js +0 -109
  815. package/esm2015/catalog/components/collection-contents/collection-contents.component.js +0 -78
  816. package/esm2015/catalog/components/collection-detail/collection-detail.component.js +0 -206
  817. package/esm2015/catalog/components/collection-list/collection-list.component.js +0 -119
  818. package/esm2015/catalog/components/collection-tree/array-to-tree.js +0 -57
  819. package/esm2015/catalog/components/collection-tree/collection-tree-node.component.js +0 -94
  820. package/esm2015/catalog/components/collection-tree/collection-tree.component.js +0 -74
  821. package/esm2015/catalog/components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component.js +0 -21
  822. package/esm2015/catalog/components/facet-detail/facet-detail.component.js +0 -326
  823. package/esm2015/catalog/components/facet-list/facet-list.component.js +0 -107
  824. package/esm2015/catalog/components/generate-product-variants/generate-product-variants.component.js +0 -78
  825. package/esm2015/catalog/components/option-value-input/option-value-input.component.js +0 -98
  826. package/esm2015/catalog/components/product-detail/product-detail.component.js +0 -515
  827. package/esm2015/catalog/components/product-list/product-list.component.js +0 -153
  828. package/esm2015/catalog/components/product-options-editor/product-options-editor.component.js +0 -157
  829. package/esm2015/catalog/components/product-search-input/product-search-input.component.js +0 -104
  830. package/esm2015/catalog/components/product-variants-editor/product-variants-editor.component.js +0 -316
  831. package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +0 -207
  832. package/esm2015/catalog/components/product-variants-table/product-variants-table.component.js +0 -66
  833. package/esm2015/catalog/components/update-product-option-dialog/update-product-option-dialog.component.js +0 -61
  834. package/esm2015/catalog/components/variant-price-detail/variant-price-detail.component.js +0 -60
  835. package/esm2015/catalog/providers/product-detail/product-detail.service.js +0 -224
  836. package/esm2015/catalog/providers/routing/asset-resolver.js +0 -37
  837. package/esm2015/catalog/providers/routing/collection-resolver.js +0 -38
  838. package/esm2015/catalog/providers/routing/facet-resolver.js +0 -35
  839. package/esm2015/catalog/providers/routing/product-resolver.js +0 -42
  840. package/esm2015/catalog/providers/routing/product-variants-resolver.js +0 -31
  841. package/esm2015/catalog/public_api.js +0 -36
  842. package/esm2015/core/app.component.js +0 -80
  843. package/esm2015/core/app.component.module.js +0 -14
  844. package/esm2015/core/common/base-detail.component.js +0 -106
  845. package/esm2015/core/common/base-entity-resolver.js +0 -60
  846. package/esm2015/core/common/base-list.component.js +0 -156
  847. package/esm2015/core/common/generated-types.js +0 -957
  848. package/esm2015/core/common/introspection-result.js +0 -193
  849. package/esm2015/core/common/utilities/configurable-operation-utils.js +0 -78
  850. package/esm2015/core/common/utilities/create-updated-translatable.js +0 -72
  851. package/esm2015/core/common/utilities/find-translation.js +0 -9
  852. package/esm2015/core/common/utilities/flatten-facet-values.js +0 -4
  853. package/esm2015/core/common/utilities/get-default-ui-language.js +0 -13
  854. package/esm2015/core/common/version.js +0 -3
  855. package/esm2015/core/components/app-shell/app-shell.component.js +0 -78
  856. package/esm2015/core/components/breadcrumb/breadcrumb.component.js +0 -126
  857. package/esm2015/core/components/channel-switcher/channel-switcher.component.js +0 -52
  858. package/esm2015/core/components/main-nav/main-nav.component.js +0 -272
  859. package/esm2015/core/components/notification/notification.component.js +0 -71
  860. package/esm2015/core/components/overlay-host/overlay-host.component.js +0 -22
  861. package/esm2015/core/components/theme-switcher/theme-switcher.component.js +0 -31
  862. package/esm2015/core/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.js +0 -294
  863. package/esm2015/core/components/user-menu/user-menu.component.js +0 -24
  864. package/esm2015/core/core.module.js +0 -115
  865. package/esm2015/core/data/client-state/client-defaults.js +0 -31
  866. package/esm2015/core/data/client-state/client-resolvers.js +0 -123
  867. package/esm2015/core/data/data.module.js +0 -106
  868. package/esm2015/core/data/definitions/collection-definitions.js +0 -127
  869. package/esm2015/core/data/definitions/order-definitions.js +0 -457
  870. package/esm2015/core/data/providers/administrator-data.service.js +0 -55
  871. package/esm2015/core/data/providers/auth-data.service.js +0 -20
  872. package/esm2015/core/data/providers/base-data.service.js +0 -72
  873. package/esm2015/core/data/providers/client-data.service.js +0 -75
  874. package/esm2015/core/data/providers/collection-data.service.js +0 -72
  875. package/esm2015/core/data/providers/customer-data.service.js +0 -117
  876. package/esm2015/core/data/providers/data.service.js +0 -90
  877. package/esm2015/core/data/providers/facet-data.service.js +0 -60
  878. package/esm2015/core/data/providers/fetch-adapter.js +0 -38
  879. package/esm2015/core/data/providers/interceptor.js +0 -142
  880. package/esm2015/core/data/providers/order-data.service.js +0 -98
  881. package/esm2015/core/data/providers/product-data.service.js +0 -232
  882. package/esm2015/core/data/providers/promotion-data.service.js +0 -37
  883. package/esm2015/core/data/providers/settings-data.service.js +0 -231
  884. package/esm2015/core/data/providers/shipping-method-data.service.js +0 -66
  885. package/esm2015/core/data/query-result.js +0 -77
  886. package/esm2015/core/data/server-config.js +0 -76
  887. package/esm2015/core/data/utils/add-custom-fields.js +0 -78
  888. package/esm2015/core/data/utils/transform-relation-custom-field-inputs.js +0 -46
  889. package/esm2015/core/providers/auth/auth.service.js +0 -110
  890. package/esm2015/core/providers/component-registry/component-registry.service.js +0 -23
  891. package/esm2015/core/providers/custom-detail-component/custom-detail-component.service.js +0 -44
  892. package/esm2015/core/providers/custom-field-component/custom-field-component.service.js +0 -47
  893. package/esm2015/core/providers/dashboard-widget/dashboard-widget.service.js +0 -97
  894. package/esm2015/core/providers/guard/auth.guard.js +0 -42
  895. package/esm2015/core/providers/health-check/health-check.service.js +0 -38
  896. package/esm2015/core/providers/i18n/custom-message-format-compiler.js +0 -30
  897. package/esm2015/core/providers/i18n/i18n.service.js +0 -56
  898. package/esm2015/core/providers/job-queue/job-queue.service.js +0 -93
  899. package/esm2015/core/providers/local-storage/local-storage.service.js +0 -79
  900. package/esm2015/core/providers/modal/modal.service.js +0 -100
  901. package/esm2015/core/providers/nav-builder/nav-builder.service.js +0 -264
  902. package/esm2015/core/providers/notification/notification.service.js +0 -165
  903. package/esm2015/core/providers/overlay-host/overlay-host.service.js +0 -46
  904. package/esm2015/core/public_api.js +0 -219
  905. package/esm2015/core/shared/components/action-bar/action-bar.component.js +0 -47
  906. package/esm2015/core/shared/components/action-bar-items/action-bar-items.component.js +0 -78
  907. package/esm2015/core/shared/components/address-form/address-form.component.js +0 -17
  908. package/esm2015/core/shared/components/affixed-input/affixed-input.component.js +0 -19
  909. package/esm2015/core/shared/components/affixed-input/percentage-suffix-input.component.js +0 -70
  910. package/esm2015/core/shared/components/asset-file-input/asset-file-input.component.js +0 -92
  911. package/esm2015/core/shared/components/asset-gallery/asset-gallery.component.js +0 -102
  912. package/esm2015/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.js +0 -138
  913. package/esm2015/core/shared/components/asset-preview/asset-preview.component.js +0 -176
  914. package/esm2015/core/shared/components/asset-preview-dialog/asset-preview-dialog.component.js +0 -35
  915. package/esm2015/core/shared/components/asset-preview-links/asset-preview-links.component.js +0 -18
  916. package/esm2015/core/shared/components/asset-search-input/asset-search-input.component.js +0 -102
  917. package/esm2015/core/shared/components/channel-assignment-control/channel-assignment-control.component.js +0 -109
  918. package/esm2015/core/shared/components/channel-badge/channel-badge.component.js +0 -19
  919. package/esm2015/core/shared/components/chip/chip.component.js +0 -42
  920. package/esm2015/core/shared/components/configurable-input/configurable-input.component.js +0 -128
  921. package/esm2015/core/shared/components/currency-input/currency-input.component.js +0 -145
  922. package/esm2015/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.js +0 -44
  923. package/esm2015/core/shared/components/custom-field-control/custom-field-control.component.js +0 -55
  924. package/esm2015/core/shared/components/customer-label/customer-label.component.js +0 -15
  925. package/esm2015/core/shared/components/data-table/data-table-column.component.js +0 -22
  926. package/esm2015/core/shared/components/data-table/data-table.component.js +0 -106
  927. package/esm2015/core/shared/components/datetime-picker/datetime-picker.component.js +0 -205
  928. package/esm2015/core/shared/components/datetime-picker/datetime-picker.service.js +0 -199
  929. package/esm2015/core/shared/components/dropdown/dropdown-item.directive.js +0 -24
  930. package/esm2015/core/shared/components/dropdown/dropdown-menu.component.js +0 -121
  931. package/esm2015/core/shared/components/dropdown/dropdown-trigger.directive.js +0 -25
  932. package/esm2015/core/shared/components/dropdown/dropdown.component.js +0 -60
  933. package/esm2015/core/shared/components/edit-note-dialog/edit-note-dialog.component.js +0 -26
  934. package/esm2015/core/shared/components/empty-placeholder/empty-placeholder.component.js +0 -15
  935. package/esm2015/core/shared/components/entity-info/entity-info.component.js +0 -19
  936. package/esm2015/core/shared/components/extension-host/extension-host.component.js +0 -83
  937. package/esm2015/core/shared/components/extension-host/extension-host.service.js +0 -100
  938. package/esm2015/core/shared/components/facet-value-chip/facet-value-chip.component.js +0 -23
  939. package/esm2015/core/shared/components/facet-value-selector/facet-value-selector.component.js +0 -114
  940. package/esm2015/core/shared/components/focal-point-control/focal-point-control.component.js +0 -56
  941. package/esm2015/core/shared/components/form-field/form-field-control.directive.js +0 -35
  942. package/esm2015/core/shared/components/form-field/form-field.component.js +0 -61
  943. package/esm2015/core/shared/components/form-item/form-item.component.js +0 -19
  944. package/esm2015/core/shared/components/formatted-address/formatted-address.component.js +0 -37
  945. package/esm2015/core/shared/components/help-tooltip/help-tooltip.component.js +0 -16
  946. package/esm2015/core/shared/components/history-entry-detail/history-entry-detail.component.js +0 -12
  947. package/esm2015/core/shared/components/items-per-page-controls/items-per-page-controls.component.js +0 -23
  948. package/esm2015/core/shared/components/labeled-data/labeled-data.component.js +0 -15
  949. package/esm2015/core/shared/components/language-selector/language-selector.component.js +0 -21
  950. package/esm2015/core/shared/components/manage-tags-dialog/manage-tags-dialog.component.js +0 -58
  951. package/esm2015/core/shared/components/modal-dialog/dialog-buttons.directive.js +0 -23
  952. package/esm2015/core/shared/components/modal-dialog/dialog-component-outlet.component.js +0 -31
  953. package/esm2015/core/shared/components/modal-dialog/dialog-title.directive.js +0 -23
  954. package/esm2015/core/shared/components/modal-dialog/modal-dialog.component.js +0 -57
  955. package/esm2015/core/shared/components/object-tree/object-tree.component.js +0 -53
  956. package/esm2015/core/shared/components/order-state-label/order-state-label.component.js +0 -43
  957. package/esm2015/core/shared/components/pagination-controls/pagination-controls.component.js +0 -22
  958. package/esm2015/core/shared/components/product-selector/product-selector.component.js +0 -61
  959. package/esm2015/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.js +0 -32
  960. package/esm2015/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.js +0 -28
  961. package/esm2015/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.js +0 -112
  962. package/esm2015/core/shared/components/rich-text-editor/rich-text-editor.component.js +0 -86
  963. package/esm2015/core/shared/components/select-toggle/select-toggle.component.js +0 -28
  964. package/esm2015/core/shared/components/simple-dialog/simple-dialog.component.js +0 -21
  965. package/esm2015/core/shared/components/status-badge/status-badge.component.js +0 -18
  966. package/esm2015/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.js +0 -49
  967. package/esm2015/core/shared/components/table-row-action/table-row-action.component.js +0 -23
  968. package/esm2015/core/shared/components/tag-selector/tag-selector.component.js +0 -55
  969. package/esm2015/core/shared/components/timeline-entry/timeline-entry.component.js +0 -40
  970. package/esm2015/core/shared/components/title-input/title-input.component.js +0 -18
  971. package/esm2015/core/shared/components/ui-extension-point/ui-extension-point.component.js +0 -31
  972. package/esm2015/core/shared/directives/disabled.directive.js +0 -38
  973. package/esm2015/core/shared/directives/if-default-channel-active.directive.js +0 -42
  974. package/esm2015/core/shared/directives/if-directive-base.js +0 -75
  975. package/esm2015/core/shared/directives/if-multichannel.directive.js +0 -47
  976. package/esm2015/core/shared/directives/if-permissions.directive.js +0 -78
  977. package/esm2015/core/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.js +0 -20
  978. package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.js +0 -125
  979. package/esm2015/core/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.js +0 -33
  980. package/esm2015/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.js +0 -43
  981. package/esm2015/core/shared/dynamic-form-inputs/date-form-input/date-form-input.component.js +0 -35
  982. package/esm2015/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.js +0 -266
  983. package/esm2015/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.js +0 -36
  984. package/esm2015/core/shared/dynamic-form-inputs/number-form-input/number-form-input.component.js +0 -43
  985. package/esm2015/core/shared/dynamic-form-inputs/password-form-input/password-form-input.component.js +0 -20
  986. package/esm2015/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.js +0 -60
  987. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.js +0 -69
  988. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.js +0 -66
  989. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.js +0 -48
  990. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/product/relation-product-input.component.js +0 -81
  991. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.js +0 -81
  992. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/relation-card/relation-card.component.js +0 -43
  993. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.js +0 -25
  994. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/relation-selector-dialog/relation-selector-dialog.component.js +0 -12
  995. package/esm2015/core/shared/dynamic-form-inputs/rich-text-form-input/rich-text-form-input.component.js +0 -20
  996. package/esm2015/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.js +0 -28
  997. package/esm2015/core/shared/dynamic-form-inputs/text-form-input/text-form-input.component.js +0 -28
  998. package/esm2015/core/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.js +0 -23
  999. package/esm2015/core/shared/pipes/asset-preview.pipe.js +0 -38
  1000. package/esm2015/core/shared/pipes/channel-label.pipe.js +0 -19
  1001. package/esm2015/core/shared/pipes/custom-field-label.pipe.js +0 -46
  1002. package/esm2015/core/shared/pipes/duration.pipe.js +0 -48
  1003. package/esm2015/core/shared/pipes/file-size.pipe.js +0 -43
  1004. package/esm2015/core/shared/pipes/has-permission.pipe.js +0 -65
  1005. package/esm2015/core/shared/pipes/locale-base.pipe.js +0 -57
  1006. package/esm2015/core/shared/pipes/locale-currency-name.pipe.js +0 -58
  1007. package/esm2015/core/shared/pipes/locale-currency.pipe.js +0 -40
  1008. package/esm2015/core/shared/pipes/locale-date.pipe.js +0 -80
  1009. package/esm2015/core/shared/pipes/locale-language-name.pipe.js +0 -47
  1010. package/esm2015/core/shared/pipes/locale-region-name.pipe.js +0 -47
  1011. package/esm2015/core/shared/pipes/sentence-case.pipe.js +0 -26
  1012. package/esm2015/core/shared/pipes/sort.pipe.js +0 -30
  1013. package/esm2015/core/shared/pipes/state-i18n-token.pipe.js +0 -46
  1014. package/esm2015/core/shared/pipes/string-to-color.pipe.js +0 -14
  1015. package/esm2015/core/shared/pipes/time-ago.pipe.js +0 -51
  1016. package/esm2015/core/shared/providers/routing/can-deactivate-detail-guard.js +0 -36
  1017. package/esm2015/core/shared/shared.module.js +0 -267
  1018. package/esm2015/customer/components/add-customer-to-group-dialog/add-customer-to-group-dialog.component.js +0 -42
  1019. package/esm2015/customer/components/address-card/address-card.component.js +0 -92
  1020. package/esm2015/customer/components/address-detail-dialog/address-detail-dialog.component.js +0 -28
  1021. package/esm2015/customer/components/customer-detail/customer-detail.component.js +0 -415
  1022. package/esm2015/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.js +0 -47
  1023. package/esm2015/customer/components/customer-group-list/customer-group-list.component.js +0 -184
  1024. package/esm2015/customer/components/customer-group-member-list/customer-group-member-list.component.js +0 -101
  1025. package/esm2015/customer/components/customer-history/customer-history.component.js +0 -76
  1026. package/esm2015/customer/components/customer-list/customer-list.component.js +0 -81
  1027. package/esm2015/customer/components/customer-status-label/customer-status-label.component.js +0 -15
  1028. package/esm2015/customer/components/select-customer-group-dialog/select-customer-group-dialog.component.js +0 -31
  1029. package/esm2015/customer/customer.module.js +0 -37
  1030. package/esm2015/customer/customer.routes.js +0 -44
  1031. package/esm2015/customer/providers/routing/customer-resolver.js +0 -35
  1032. package/esm2015/dashboard/components/dashboard/dashboard.component.js +0 -124
  1033. package/esm2015/dashboard/components/dashboard-widget/dashboard-widget.component.js +0 -39
  1034. package/esm2015/dashboard/dashboard.module.js +0 -25
  1035. package/esm2015/dashboard/default-widgets.js +0 -34
  1036. package/esm2015/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.js +0 -42
  1037. package/esm2015/dashboard/widgets/order-summary-widget/order-summary-widget.component.js +0 -56
  1038. package/esm2015/dashboard/widgets/test-widget/test-widget.component.js +0 -19
  1039. package/esm2015/dashboard/widgets/welcome-widget/welcome-widget.component.js +0 -36
  1040. package/esm2015/login/components/login/login.component.js +0 -61
  1041. package/esm2015/login/login.module.js +0 -15
  1042. package/esm2015/login/providers/login.guard.js +0 -35
  1043. package/esm2015/marketing/components/promotion-detail/promotion-detail.component.js +0 -247
  1044. package/esm2015/marketing/components/promotion-list/promotion-list.component.js +0 -87
  1045. package/esm2015/marketing/marketing.module.js +0 -15
  1046. package/esm2015/marketing/marketing.routes.js +0 -35
  1047. package/esm2015/marketing/providers/routing/promotion-resolver.js +0 -34
  1048. package/esm2015/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.js +0 -39
  1049. package/esm2015/order/components/cancel-order-dialog/cancel-order-dialog.component.js +0 -82
  1050. package/esm2015/order/components/fulfill-order-dialog/fulfill-order-dialog.component.js +0 -71
  1051. package/esm2015/order/components/fulfillment-card/fulfillment-card.component.js +0 -43
  1052. package/esm2015/order/components/fulfillment-detail/fulfillment-detail.component.js +0 -64
  1053. package/esm2015/order/components/fulfillment-state-label/fulfillment-state-label.component.js +0 -26
  1054. package/esm2015/order/components/line-fulfillment/line-fulfillment.component.js +0 -65
  1055. package/esm2015/order/components/line-refunds/line-refunds.component.js +0 -35
  1056. package/esm2015/order/components/modification-detail/modification-detail.component.js +0 -66
  1057. package/esm2015/order/components/order-custom-fields-card/order-custom-fields-card.component.js +0 -39
  1058. package/esm2015/order/components/order-detail/order-detail.component.js +0 -509
  1059. package/esm2015/order/components/order-editor/order-editor.component.js +0 -377
  1060. package/esm2015/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.js +0 -50
  1061. package/esm2015/order/components/order-history/order-history.component.js +0 -154
  1062. package/esm2015/order/components/order-list/order-list.component.js +0 -188
  1063. package/esm2015/order/components/order-payment-card/order-payment-card.component.js +0 -33
  1064. package/esm2015/order/components/order-process-graph/order-process-edge.component.js +0 -37
  1065. package/esm2015/order/components/order-process-graph/order-process-graph.component.js +0 -94
  1066. package/esm2015/order/components/order-process-graph/order-process-node.component.js +0 -53
  1067. package/esm2015/order/components/order-process-graph-dialog/order-process-graph-dialog.component.js +0 -23
  1068. package/esm2015/order/components/order-state-select-dialog/order-state-select-dialog.component.js +0 -25
  1069. package/esm2015/order/components/order-table/order-table.component.js +0 -68
  1070. package/esm2015/order/components/payment-detail/payment-detail.component.js +0 -16
  1071. package/esm2015/order/components/payment-state-label/payment-state-label.component.js +0 -26
  1072. package/esm2015/order/components/refund-order-dialog/refund-order-dialog.component.js +0 -138
  1073. package/esm2015/order/components/refund-state-label/refund-state-label.component.js +0 -25
  1074. package/esm2015/order/components/settle-refund-dialog/settle-refund-dialog.component.js +0 -21
  1075. package/esm2015/order/components/simple-item-list/simple-item-list.component.js +0 -15
  1076. package/esm2015/order/order.module.js +0 -70
  1077. package/esm2015/order/order.routes.js +0 -54
  1078. package/esm2015/order/providers/order-transition.service.js +0 -116
  1079. package/esm2015/order/providers/routing/order-resolver.js +0 -33
  1080. package/esm2015/settings/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.js +0 -35
  1081. package/esm2015/settings/components/admin-detail/admin-detail.component.js +0 -199
  1082. package/esm2015/settings/components/administrator-list/administrator-list.component.js +0 -52
  1083. package/esm2015/settings/components/channel-detail/channel-detail.component.js +0 -163
  1084. package/esm2015/settings/components/channel-list/channel-list.component.js +0 -57
  1085. package/esm2015/settings/components/country-detail/country-detail.component.js +0 -120
  1086. package/esm2015/settings/components/country-list/country-list.component.js +0 -82
  1087. package/esm2015/settings/components/global-settings/global-settings.component.js +0 -89
  1088. package/esm2015/settings/components/payment-method-detail/payment-method-detail.component.js +0 -204
  1089. package/esm2015/settings/components/payment-method-list/payment-method-list.component.js +0 -66
  1090. package/esm2015/settings/components/permission-grid/permission-grid.component.js +0 -80
  1091. package/esm2015/settings/components/profile/profile.component.js +0 -82
  1092. package/esm2015/settings/components/role-detail/role-detail.component.js +0 -109
  1093. package/esm2015/settings/components/role-list/role-list.component.js +0 -73
  1094. package/esm2015/settings/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.js +0 -24
  1095. package/esm2015/settings/components/shipping-method-detail/shipping-method-detail.component.js +0 -235
  1096. package/esm2015/settings/components/shipping-method-list/shipping-method-list.component.js +0 -94
  1097. package/esm2015/settings/components/shipping-method-test-result/shipping-method-test-result.component.js +0 -24
  1098. package/esm2015/settings/components/tax-category-detail/tax-category-detail.component.js +0 -115
  1099. package/esm2015/settings/components/tax-category-list/tax-category-list.component.js +0 -60
  1100. package/esm2015/settings/components/tax-rate-detail/tax-rate-detail.component.js +0 -131
  1101. package/esm2015/settings/components/tax-rate-list/tax-rate-list.component.js +0 -64
  1102. package/esm2015/settings/components/test-address-form/test-address-form.component.js +0 -53
  1103. package/esm2015/settings/components/test-order-builder/test-order-builder.component.js +0 -73
  1104. package/esm2015/settings/components/zone-detail-dialog/zone-detail-dialog.component.js +0 -47
  1105. package/esm2015/settings/components/zone-list/zone-list.component.js +0 -160
  1106. package/esm2015/settings/components/zone-member-list/zone-member-controls.directive.js +0 -15
  1107. package/esm2015/settings/components/zone-member-list/zone-member-list-header.directive.js +0 -15
  1108. package/esm2015/settings/components/zone-member-list/zone-member-list.component.js +0 -63
  1109. package/esm2015/settings/providers/routing/administrator-resolver.js +0 -32
  1110. package/esm2015/settings/providers/routing/channel-resolver.js +0 -40
  1111. package/esm2015/settings/providers/routing/country-resolver.js +0 -35
  1112. package/esm2015/settings/providers/routing/global-settings-resolver.js +0 -28
  1113. package/esm2015/settings/providers/routing/payment-method-resolver.js +0 -37
  1114. package/esm2015/settings/providers/routing/profile-resolver.js +0 -34
  1115. package/esm2015/settings/providers/routing/role-resolver.js +0 -32
  1116. package/esm2015/settings/providers/routing/shipping-method-resolver.js +0 -38
  1117. package/esm2015/settings/providers/routing/tax-category-resolver.js +0 -32
  1118. package/esm2015/settings/providers/routing/tax-rate-resolver.js +0 -36
  1119. package/esm2015/settings/settings.module.js +0 -72
  1120. package/esm2015/settings/settings.routes.js +0 -255
  1121. package/esm2015/system/components/health-check/health-check.component.js +0 -19
  1122. package/esm2015/system/components/job-list/job-list.component.js +0 -74
  1123. package/esm2015/system/components/job-state-label/job-state-label.component.js +0 -45
  1124. package/esm2015/system/system.module.js +0 -16
  1125. package/esm2015/system/system.routes.js +0 -22
  1126. package/fesm2015/vendure-admin-ui-catalog.js +0 -3787
  1127. package/fesm2015/vendure-admin-ui-catalog.js.map +0 -1
  1128. package/fesm2015/vendure-admin-ui-core.js +0 -15776
  1129. package/fesm2015/vendure-admin-ui-core.js.map +0 -1
  1130. package/fesm2015/vendure-admin-ui-customer.js +0 -1171
  1131. package/fesm2015/vendure-admin-ui-customer.js.map +0 -1
  1132. package/fesm2015/vendure-admin-ui-dashboard.js +0 -371
  1133. package/fesm2015/vendure-admin-ui-dashboard.js.map +0 -1
  1134. package/fesm2015/vendure-admin-ui-login.js +0 -121
  1135. package/fesm2015/vendure-admin-ui-login.js.map +0 -1
  1136. package/fesm2015/vendure-admin-ui-marketing.js +0 -403
  1137. package/fesm2015/vendure-admin-ui-marketing.js.map +0 -1
  1138. package/fesm2015/vendure-admin-ui-order.js +0 -2542
  1139. package/fesm2015/vendure-admin-ui-order.js.map +0 -1
  1140. package/fesm2015/vendure-admin-ui-settings.js +0 -2975
  1141. package/fesm2015/vendure-admin-ui-settings.js.map +0 -1
  1142. package/fesm2015/vendure-admin-ui-system.js +0 -171
  1143. package/fesm2015/vendure-admin-ui-system.js.map +0 -1
  1144. package/fesm2015/vendure-admin-ui.js +0 -11
  1145. package/fesm2015/vendure-admin-ui.js.map +0 -1
  1146. package/login/vendure-admin-ui-login.metadata.json +0 -1
  1147. package/marketing/vendure-admin-ui-marketing.metadata.json +0 -1
  1148. package/order/vendure-admin-ui-order.metadata.json +0 -1
  1149. package/settings/vendure-admin-ui-settings.metadata.json +0 -1
  1150. package/system/vendure-admin-ui-system.metadata.json +0 -1
  1151. package/vendure-admin-ui.metadata.json +0 -1
@@ -0,0 +1,381 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
3
+ import { BaseDetailComponent, HistoryEntryType, SortOrder, } from '@vendure/admin-ui/core';
4
+ import { assertNever, notNullOrUndefined } from '@vendure/common/lib/shared-utils';
5
+ import { concat, EMPTY, of, Subject } from 'rxjs';
6
+ import { distinctUntilChanged, map, mapTo, shareReplay, startWith, switchMap, takeUntil, } from 'rxjs/operators';
7
+ import { OrderEditResultType, OrderEditsPreviewDialogComponent, } from '../order-edits-preview-dialog/order-edits-preview-dialog.component';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/router";
10
+ import * as i2 from "@vendure/admin-ui/core";
11
+ import * as i3 from "../../providers/order-transition.service";
12
+ import * as i4 from "../line-refunds/line-refunds.component";
13
+ import * as i5 from "../line-fulfillment/line-fulfillment.component";
14
+ import * as i6 from "@clr/angular";
15
+ import * as i7 from "@ng-select/ng-select";
16
+ import * as i8 from "@angular/common";
17
+ import * as i9 from "@angular/forms";
18
+ import * as i10 from "@ngx-translate/core";
19
+ export class OrderEditorComponent extends BaseDetailComponent {
20
+ constructor(router, route, serverConfigService, changeDetector, dataService, notificationService, modalService, orderTransitionService) {
21
+ super(route, router, serverConfigService, dataService);
22
+ this.changeDetector = changeDetector;
23
+ this.dataService = dataService;
24
+ this.notificationService = notificationService;
25
+ this.modalService = modalService;
26
+ this.orderTransitionService = orderTransitionService;
27
+ this.couponCodeInput$ = new Subject();
28
+ this.detailForm = new FormGroup({});
29
+ this.couponCodesControl = new FormControl();
30
+ this.modifyOrderInput = {
31
+ dryRun: true,
32
+ orderId: '',
33
+ addItems: [],
34
+ adjustOrderLines: [],
35
+ surcharges: [],
36
+ note: '',
37
+ updateShippingAddress: {},
38
+ updateBillingAddress: {},
39
+ };
40
+ this.note = '';
41
+ this.recalculateShipping = true;
42
+ this.addedVariants = new Map();
43
+ }
44
+ get addedLines() {
45
+ const getSinglePriceValue = (price) => price.__typename === 'SinglePrice' ? price.value : 0;
46
+ return (this.modifyOrderInput.addItems || [])
47
+ .map(row => {
48
+ const variantInfo = this.addedVariants.get(row.productVariantId);
49
+ if (variantInfo) {
50
+ return {
51
+ ...variantInfo,
52
+ price: getSinglePriceValue(variantInfo.price),
53
+ priceWithTax: getSinglePriceValue(variantInfo.priceWithTax),
54
+ quantity: row.quantity,
55
+ };
56
+ }
57
+ })
58
+ .filter(notNullOrUndefined);
59
+ }
60
+ ngOnInit() {
61
+ this.init();
62
+ this.addressCustomFields = this.getCustomFieldConfig('Address');
63
+ this.modifyOrderInput.orderId = this.route.snapshot.paramMap.get('id');
64
+ this.orderLineCustomFields = this.getCustomFieldConfig('OrderLine');
65
+ this.entity$.pipe(takeUntil(this.destroy$)).subscribe(order => {
66
+ if (order.couponCodes.length) {
67
+ this.couponCodesControl.setValue(order.couponCodes);
68
+ }
69
+ this.surchargeForm = new FormGroup({
70
+ description: new FormControl('', Validators.required),
71
+ sku: new FormControl(''),
72
+ price: new FormControl(0, Validators.required),
73
+ priceIncludesTax: new FormControl(true),
74
+ taxRate: new FormControl(0),
75
+ taxDescription: new FormControl(''),
76
+ });
77
+ if (!this.shippingAddressForm) {
78
+ this.shippingAddressForm = new FormGroup({
79
+ fullName: new FormControl(order.shippingAddress?.fullName),
80
+ company: new FormControl(order.shippingAddress?.company),
81
+ streetLine1: new FormControl(order.shippingAddress?.streetLine1),
82
+ streetLine2: new FormControl(order.shippingAddress?.streetLine2),
83
+ city: new FormControl(order.shippingAddress?.city),
84
+ province: new FormControl(order.shippingAddress?.province),
85
+ postalCode: new FormControl(order.shippingAddress?.postalCode),
86
+ countryCode: new FormControl(order.shippingAddress?.countryCode),
87
+ phoneNumber: new FormControl(order.shippingAddress?.phoneNumber),
88
+ });
89
+ this.addAddressCustomFieldsFormGroup(this.shippingAddressForm, order.shippingAddress);
90
+ }
91
+ if (!this.billingAddressForm) {
92
+ this.billingAddressForm = new FormGroup({
93
+ fullName: new FormControl(order.billingAddress?.fullName),
94
+ company: new FormControl(order.billingAddress?.company),
95
+ streetLine1: new FormControl(order.billingAddress?.streetLine1),
96
+ streetLine2: new FormControl(order.billingAddress?.streetLine2),
97
+ city: new FormControl(order.billingAddress?.city),
98
+ province: new FormControl(order.billingAddress?.province),
99
+ postalCode: new FormControl(order.billingAddress?.postalCode),
100
+ countryCode: new FormControl(order.billingAddress?.countryCode),
101
+ phoneNumber: new FormControl(order.billingAddress?.phoneNumber),
102
+ });
103
+ this.addAddressCustomFieldsFormGroup(this.billingAddressForm, order.billingAddress);
104
+ }
105
+ this.orderLineCustomFieldsFormArray = new FormArray([]);
106
+ for (const line of order.lines) {
107
+ const formGroup = new FormGroup({});
108
+ for (const { name } of this.orderLineCustomFields) {
109
+ formGroup.addControl(name, new FormControl(line.customFields[name]));
110
+ }
111
+ formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {
112
+ let modifyRow = this.modifyOrderInput.adjustOrderLines.find(l => l.orderLineId === line.id);
113
+ if (!modifyRow) {
114
+ modifyRow = {
115
+ orderLineId: line.id,
116
+ quantity: line.quantity,
117
+ };
118
+ this.modifyOrderInput.adjustOrderLines.push(modifyRow);
119
+ }
120
+ if (this.orderLineCustomFields.length) {
121
+ modifyRow.customFields = value;
122
+ }
123
+ });
124
+ this.orderLineCustomFieldsFormArray.push(formGroup);
125
+ }
126
+ });
127
+ this.availableCouponCodes$ = concat(this.couponCodeInput$.pipe(distinctUntilChanged(), switchMap(term => this.dataService.promotion.getPromotions(10, 0, {
128
+ couponCode: { contains: term },
129
+ }).single$), map(({ promotions }) =>
130
+ // tslint:disable-next-line:no-non-null-assertion
131
+ promotions.items.map(p => ({ code: p.couponCode, promotionName: p.name }))), startWith([])));
132
+ this.addItemCustomFieldsFormArray = new FormArray([]);
133
+ this.addItemCustomFieldsForm = new FormGroup({});
134
+ for (const customField of this.orderLineCustomFields) {
135
+ this.addItemCustomFieldsForm.addControl(customField.name, new FormControl());
136
+ }
137
+ this.availableCountries$ = this.dataService.settings
138
+ .getAvailableCountries()
139
+ .mapSingle(result => result.countries.items)
140
+ .pipe(shareReplay(1));
141
+ this.dataService.order
142
+ .getOrderHistory(this.id, {
143
+ take: 1,
144
+ sort: {
145
+ createdAt: SortOrder.DESC,
146
+ },
147
+ filter: { type: { eq: HistoryEntryType.ORDER_STATE_TRANSITION } },
148
+ })
149
+ .single$.subscribe(({ order }) => {
150
+ this.previousState = order?.history.items[0].data.from;
151
+ });
152
+ }
153
+ ngOnDestroy() {
154
+ this.destroy();
155
+ }
156
+ transitionToPriorState(order) {
157
+ this.orderTransitionService
158
+ .transitionToPreModifyingState(order.id, order.nextStates)
159
+ .subscribe(result => {
160
+ this.router.navigate(['..'], { relativeTo: this.route });
161
+ });
162
+ }
163
+ canPreviewChanges() {
164
+ const { addItems, adjustOrderLines, surcharges } = this.modifyOrderInput;
165
+ return (!!addItems?.length ||
166
+ !!surcharges?.length ||
167
+ !!adjustOrderLines?.length ||
168
+ (this.shippingAddressForm.dirty && this.shippingAddressForm.valid) ||
169
+ (this.billingAddressForm.dirty && this.billingAddressForm.valid) ||
170
+ this.couponCodesControl.dirty);
171
+ }
172
+ isLineModified(line) {
173
+ return !!this.modifyOrderInput.adjustOrderLines?.find(l => l.orderLineId === line.id && l.quantity !== line.quantity);
174
+ }
175
+ updateLineQuantity(line, quantity) {
176
+ const { adjustOrderLines } = this.modifyOrderInput;
177
+ let row = adjustOrderLines?.find(l => l.orderLineId === line.id);
178
+ if (row && +quantity === line.quantity) {
179
+ // Remove the modification if the quantity is the same as
180
+ // the original order
181
+ adjustOrderLines?.splice(adjustOrderLines?.indexOf(row), 1);
182
+ }
183
+ if (!row) {
184
+ row = { orderLineId: line.id, quantity: +quantity };
185
+ adjustOrderLines?.push(row);
186
+ }
187
+ row.quantity = +quantity;
188
+ }
189
+ updateAddedItemQuantity(item, quantity) {
190
+ const row = this.modifyOrderInput.addItems?.find(l => l.productVariantId === item.productVariantId);
191
+ if (row) {
192
+ row.quantity = +quantity;
193
+ }
194
+ }
195
+ trackByProductVariantId(index, item) {
196
+ return item.productVariantId;
197
+ }
198
+ getSelectedItemPrice(result) {
199
+ switch (result?.priceWithTax.__typename) {
200
+ case 'SinglePrice':
201
+ return result.priceWithTax.value;
202
+ default:
203
+ return 0;
204
+ }
205
+ }
206
+ addItemToOrder(result) {
207
+ if (!result) {
208
+ return;
209
+ }
210
+ const customFields = this.orderLineCustomFields.length
211
+ ? this.addItemCustomFieldsForm.value
212
+ : undefined;
213
+ let row = this.modifyOrderInput.addItems?.find(l => this.isMatchingAddItemRow(l, result, customFields));
214
+ if (!row) {
215
+ row = { productVariantId: result.productVariantId, quantity: 1 };
216
+ if (customFields) {
217
+ row.customFields = customFields;
218
+ }
219
+ this.modifyOrderInput.addItems?.push(row);
220
+ }
221
+ else {
222
+ row.quantity++;
223
+ }
224
+ if (customFields) {
225
+ const formGroup = new FormGroup({});
226
+ for (const [key, value] of Object.entries(customFields)) {
227
+ formGroup.addControl(key, new FormControl(value));
228
+ }
229
+ this.addItemCustomFieldsFormArray.push(formGroup);
230
+ formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {
231
+ if (row) {
232
+ row.customFields = value;
233
+ }
234
+ });
235
+ }
236
+ this.addItemCustomFieldsForm.reset({});
237
+ this.addItemSelectedVariant = undefined;
238
+ this.addedVariants.set(result.productVariantId, result);
239
+ }
240
+ isMatchingAddItemRow(row, result, customFields) {
241
+ return (row.productVariantId === result.productVariantId &&
242
+ JSON.stringify(row.customFields) === JSON.stringify(customFields));
243
+ }
244
+ removeAddedItem(index) {
245
+ this.modifyOrderInput.addItems.splice(index, 1);
246
+ if (-1 < index) {
247
+ this.addItemCustomFieldsFormArray.removeAt(index);
248
+ }
249
+ }
250
+ getSurchargePrices(surcharge) {
251
+ const priceWithTax = surcharge.priceIncludesTax
252
+ ? surcharge.price
253
+ : Math.round(surcharge.price * ((100 + (surcharge.taxRate || 0)) / 100));
254
+ const price = surcharge.priceIncludesTax
255
+ ? Math.round(surcharge.price / ((100 + (surcharge.taxRate || 0)) / 100))
256
+ : surcharge.price;
257
+ return {
258
+ price,
259
+ priceWithTax,
260
+ };
261
+ }
262
+ addSurcharge(value) {
263
+ this.modifyOrderInput.surcharges?.push(value);
264
+ this.surchargeForm.reset({
265
+ price: 0,
266
+ priceIncludesTax: true,
267
+ taxRate: 0,
268
+ });
269
+ }
270
+ removeSurcharge(index) {
271
+ this.modifyOrderInput.surcharges?.splice(index, 1);
272
+ }
273
+ previewAndModify(order) {
274
+ const input = {
275
+ ...this.modifyOrderInput,
276
+ ...(this.billingAddressForm.dirty ? { updateBillingAddress: this.billingAddressForm.value } : {}),
277
+ ...(this.shippingAddressForm.dirty
278
+ ? { updateShippingAddress: this.shippingAddressForm.value }
279
+ : {}),
280
+ dryRun: true,
281
+ couponCodes: this.couponCodesControl.dirty ? this.couponCodesControl.value : undefined,
282
+ note: this.note ?? '',
283
+ options: {
284
+ recalculateShipping: this.recalculateShipping,
285
+ },
286
+ };
287
+ const originalTotalWithTax = order.totalWithTax;
288
+ this.dataService.order
289
+ .modifyOrder(input)
290
+ .pipe(switchMap(({ modifyOrder }) => {
291
+ switch (modifyOrder.__typename) {
292
+ case 'Order':
293
+ return this.modalService.fromComponent(OrderEditsPreviewDialogComponent, {
294
+ size: 'xl',
295
+ closable: false,
296
+ locals: {
297
+ originalTotalWithTax,
298
+ order: modifyOrder,
299
+ orderLineCustomFields: this.orderLineCustomFields,
300
+ modifyOrderInput: input,
301
+ },
302
+ });
303
+ case 'InsufficientStockError':
304
+ case 'NegativeQuantityError':
305
+ case 'NoChangesSpecifiedError':
306
+ case 'OrderLimitError':
307
+ case 'OrderModificationStateError':
308
+ case 'PaymentMethodMissingError':
309
+ case 'RefundPaymentIdMissingError':
310
+ case 'CouponCodeLimitError':
311
+ case 'CouponCodeExpiredError':
312
+ case 'CouponCodeInvalidError': {
313
+ this.notificationService.error(modifyOrder.message);
314
+ return of(false);
315
+ }
316
+ case null:
317
+ case undefined:
318
+ return of(false);
319
+ default:
320
+ assertNever(modifyOrder);
321
+ }
322
+ }), switchMap(result => {
323
+ if (!result || result.result === OrderEditResultType.Cancel) {
324
+ // re-fetch so that the preview values get overwritten in the cache.
325
+ return this.dataService.order.getOrder(this.id).mapSingle(() => false);
326
+ }
327
+ else {
328
+ // Do the modification
329
+ const wetRunInput = {
330
+ ...input,
331
+ dryRun: false,
332
+ };
333
+ if (result.result === OrderEditResultType.Refund) {
334
+ wetRunInput.refund = {
335
+ paymentId: result.refundPaymentId,
336
+ reason: result.refundNote,
337
+ };
338
+ }
339
+ return this.dataService.order.modifyOrder(wetRunInput).pipe(switchMap(({ modifyOrder }) => {
340
+ if (modifyOrder.__typename === 'Order') {
341
+ const priceDelta = modifyOrder.totalWithTax - originalTotalWithTax;
342
+ const nextState = 0 < priceDelta ? 'ArrangingAdditionalPayment' : this.previousState;
343
+ return this.dataService.order
344
+ .transitionToState(order.id, nextState)
345
+ .pipe(mapTo(true));
346
+ }
347
+ else {
348
+ this.notificationService.error(modifyOrder.message);
349
+ return EMPTY;
350
+ }
351
+ }));
352
+ }
353
+ }))
354
+ .subscribe(result => {
355
+ if (result) {
356
+ this.router.navigate(['../'], { relativeTo: this.route });
357
+ }
358
+ });
359
+ }
360
+ addAddressCustomFieldsFormGroup(parentFormGroup, address) {
361
+ if (address && this.addressCustomFields.length) {
362
+ const addressCustomFieldsFormGroup = new FormGroup({});
363
+ for (const customFieldDef of this.addressCustomFields) {
364
+ const name = customFieldDef.name;
365
+ const value = address.customFields?.[name];
366
+ addressCustomFieldsFormGroup.addControl(name, new FormControl(value));
367
+ }
368
+ parentFormGroup.addControl('customFields', addressCustomFieldsFormGroup);
369
+ }
370
+ }
371
+ setFormValues(entity, languageCode) {
372
+ /* not used */
373
+ }
374
+ }
375
+ OrderEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: OrderEditorComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i2.NotificationService }, { token: i2.ModalService }, { token: i3.OrderTransitionService }], target: i0.ɵɵFactoryTarget.Component });
376
+ OrderEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: OrderEditorComponent, selector: "vdr-order-editor", usesInheritance: true, ngImport: i0, template: "<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button class=\"btn btn-secondary\" (click)=\"transitionToPriorState(order)\">\r\n {{ 'order.cancel-modification' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <table class=\"order-table table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th *ngIf=\"orderLineCustomFields.length\">{{ 'common.custom-fields' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let line of order.lines; let i = index\"\r\n class=\"order-line\"\r\n [class.is-cancelled]=\"line.quantity === 0\"\r\n [class.modified]=\"isLineModified(line)\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"line.featuredAsset\"\r\n [src]=\"line.featuredAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.unitPrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"line.quantity\"\r\n (input)=\"updateLineQuantity(line, $event.target.value)\"\r\n />\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n <vdr-line-fulfillment\r\n [line]=\"line\"\r\n [orderState]=\"order.state\"\r\n ></vdr-line-fulfillment>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"orderLineCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.linePriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.linePrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n *ngFor=\"let addedLine of addedLines; trackBy: trackByProductVariantId; let i = index\"\r\n class=\"modified\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"addedLine.productAsset\"\r\n [src]=\"addedLine.productAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ addedLine.productVariantName }}</td>\r\n <td class=\"align-middle sku\">{{ addedLine.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ addedLine.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ addedLine.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"addedLine.quantity\"\r\n (input)=\"updateAddedItemQuantity(addedLine, $event.target.value)\"\r\n />\r\n <button class=\"icon-button\" (click)=\"removeAddedItem(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{\r\n (addedLine.priceWithTax * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{\r\n (addedLine.price * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"surcharge\" *ngFor=\"let surcharge of order.surcharges\">\r\n <td class=\"align-middle name left\" colspan=\"2\">{{ surcharge.description }}</td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n {{ surcharge.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surcharge.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n class=\"surcharge modified\"\r\n *ngFor=\"let surcharge of modifyOrderInput.surcharges; let i = index\"\r\n >\r\n <td class=\"align-middle name left\" colspan=\"2\">\r\n {{ surcharge.description }}\r\n <button class=\"icon-button\" (click)=\"removeSurcharge(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n <ng-container *ngIf=\"getSurchargePrices(surcharge) as surchargePrice\">\r\n {{ surchargePrice.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surchargePrice.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr class=\"shipping\">\r\n <td class=\"left clr-align-middle\">{{ 'order.shipping' | translate }}</td>\r\n <td class=\"clr-align-middle\">{{ order.shippingLines[0]?.shippingMethod?.name }}</td>\r\n <td colspan=\"3\"></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.shippingWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.shipping | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <h4 class=\"mb2\">{{ 'order.modifications' | translate }}</h4>\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-item-to-order' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-product-variant-selector class=\"mb4\" (productSelected)=\"addItemSelectedVariant = $event\">\r\n </vdr-product-variant-selector>\r\n <div *ngIf=\"addItemSelectedVariant\" class=\"flex mb4\">\r\n <img\r\n *ngIf=\"addItemSelectedVariant.productAsset as asset\"\r\n [src]=\"asset | assetPreview: 'tiny'\"\r\n class=\"mr4\"\r\n />\r\n <div>\r\n <strong class=\"mr4\">{{ addItemSelectedVariant.productVariantName }}</strong>\r\n <small>{{ addItemSelectedVariant.sku }}</small>\r\n <div>\r\n {{\r\n getSelectedItemPrice(addItemSelectedVariant)\r\n | localeCurrency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [readonly]=\"!addItemSelectedVariant\"\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsForm\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"!addItemSelectedVariant || addItemCustomFieldsForm.invalid\"\r\n (click)=\"addItemToOrder(addItemSelectedVariant)\"\r\n >\r\n {{ 'order.add-item-to-order' | translate }}\r\n </button>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.set-coupon-codes' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <ng-select\r\n [items]=\"availableCouponCodes$ | async\"\r\n appendTo=\"body\"\r\n bindLabel=\"code\"\r\n bindValue=\"code\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n [minTermLength]=\"2\"\r\n typeToSearchText=\"\"\r\n [typeahead]=\"couponCodeInput$\"\r\n [formControl]=\"couponCodesControl\"\r\n >\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <vdr-chip>{{ item.code }}</vdr-chip> {{ item.promotionName }}\r\n </ng-template>\r\n </ng-select>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-surcharge' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <form [formGroup]=\"surchargeForm\" (submit)=\"addSurcharge(surchargeForm.value)\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\"\r\n ><input id=\"description\" type=\"text\" formControlName=\"description\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.product-sku' | translate\" for=\"sku\"\r\n ><input id=\"sku\" type=\"text\" formControlName=\"sku\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'common.price' | translate\" for=\"price\"\r\n ><vdr-currency-input\r\n [currencyCode]=\"order.currencyCode\"\r\n id=\"price\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input\r\n ></vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"\r\n 'catalog.price-includes-tax-at'\r\n | translate: { rate: surchargeForm.get('taxRate')?.value }\r\n \"\r\n for=\"priceIncludesTax\"\r\n ><input\r\n id=\"priceIncludesTax\"\r\n type=\"checkbox\"\r\n clrCheckbox\r\n formControlName=\"priceIncludesTax\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-rate' | translate\" for=\"taxRate\"\r\n ><vdr-affixed-input suffix=\"%\"\r\n ><input\r\n id=\"taxRate\"\r\n type=\"number\"\r\n min=\"0\"\r\n max=\"100\"\r\n formControlName=\"taxRate\" /></vdr-affixed-input\r\n ></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-description' | translate\" for=\"taxDescription\"\r\n ><input id=\"taxDescription\" type=\"text\" formControlName=\"taxDescription\"\r\n /></vdr-form-field>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"\r\n surchargeForm.invalid ||\r\n surchargeForm.pristine ||\r\n surchargeForm.get('price')?.value === 0\r\n \"\r\n >\r\n {{ 'order.add-surcharge' | translate }}\r\n </button>\r\n </form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-shipping-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"shippingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-billing-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"billingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'order.modification-summary' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <ul>\r\n <li *ngIf=\"modifyOrderInput.addItems?.length\">\r\n {{\r\n 'order.modification-adding-items'\r\n | translate: { count: modifyOrderInput.addItems?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.adjustOrderLines?.length\">\r\n {{\r\n 'order.modification-adjusting-lines'\r\n | translate: { count: modifyOrderInput.adjustOrderLines?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.surcharges?.length\">\r\n {{\r\n 'order.modification-adding-surcharges'\r\n | translate: { count: modifyOrderInput.surcharges?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"shippingAddressForm.dirty\">\r\n {{ 'order.modification-updating-shipping-address' | translate }}\r\n </li>\r\n <li *ngIf=\"billingAddressForm.dirty\">\r\n {{ 'order.modification-updating-billing-address' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"card-block\">\r\n <label class=\"clr-control-label\">{{ 'order.note' | translate }}</label>\r\n <textarea [(ngModel)]=\"note\" name=\"note\" clrTextarea required></textarea>\r\n <clr-checkbox-wrapper class=\"\">\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"recalculateShipping\" />\r\n <label>{{ 'order.modification-recalculate-shipping' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button\r\n class=\"btn btn-primary\"\r\n [disabled]=\"!canPreviewChanges()\"\r\n (click)=\"previewAndModify(order)\"\r\n >\r\n {{ 'order.preview-changes' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".order-table .is-cancelled td{text-decoration:line-through;background-color:var(--color-component-bg-200)}.order-table .sub-total td{border-top:1px dashed var(--color-component-border-200)}.order-table .total td{font-weight:700;border-top:1px dashed var(--color-component-border-200)}.order-table td.custom-fields-row{border-top-style:dashed;border-top-color:var(--color-grey-200)}.order-table .order-line-custom-fields{display:flex;flex-wrap:wrap}.order-table .order-line-custom-fields .custom-field{text-align:start;max-width:200px;overflow:hidden;text-overflow:ellipsis;margin-bottom:6px;margin-right:18px}.order-table .order-line-custom-field{background-color:var(--color-component-bg-100)}.order-table .order-line-custom-field .custom-field-ellipsis{color:var(--color-text-300)}.order-table .net-price{font-size:11px;color:var(--color-text-300)}.order-table .promotions-label{-webkit-text-decoration:underline dotted var(--color-text-200);text-decoration:underline dotted var(--color-text-200);font-size:11px;margin-top:6px;cursor:pointer;text-transform:lowercase}.order-table tr.modified td{background-color:var(--color-warning-100)}\n"], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.OrderStateLabelComponent, selector: "vdr-order-state-label", inputs: ["state"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i4.LineRefundsComponent, selector: "vdr-line-refunds", inputs: ["line", "payments"] }, { type: i5.LineFulfillmentComponent, selector: "vdr-line-fulfillment", inputs: ["line", "orderState"] }, { type: i2.CustomFieldControlComponent, selector: "vdr-custom-field-control", inputs: ["entityName", "customFieldsFormGroup", "customField", "compact", "showLabel", "readonly"] }, { type: i6.ClrAccordion, selector: "clr-accordion", inputs: ["clrAccordionMultiPanel"] }, { type: i6.ClrAccordionPanel, selector: "clr-accordion-panel", inputs: ["clrAccordionPanelDisabled", "clrAccordionPanelOpen"], outputs: ["clrAccordionPanelOpenChange"] }, { type: i6.ClrAccordionTitle, selector: "clr-accordion-title, clr-step-title" }, { type: i6.ClrAccordionContent, selector: "clr-accordion-content, clr-step-content" }, { type: i2.ProductVariantSelectorComponent, selector: "vdr-product-variant-selector", outputs: ["productSelected"] }, { type: i7.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i2.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i2.CurrencyInputComponent, selector: "vdr-currency-input", inputs: ["disabled", "readonly", "value", "currencyCode"], outputs: ["valueChange"] }, { type: i2.AffixedInputComponent, selector: "vdr-affixed-input", inputs: ["prefix", "suffix"] }, { type: i2.AddressFormComponent, selector: "vdr-address-form", inputs: ["customFields", "formGroup", "availableCountries"] }, { type: i6.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i6.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { type: i6.ClrIconCustomTag, selector: "clr-icon" }, { type: i6.ÇlrAccordionWillyWonka, selector: "clr-accordion" }, { type: i6.ÇlrAccordionOompaLoompa, selector: "clr-accordion-panel" }, { type: i6.ÇlrDatagridDetailRegisterer, selector: "[clrIfExpanded]" }, { type: i6.ClrIfExpanded, selector: "[clrIfExpanded]", inputs: ["clrIfExpanded"], outputs: ["clrIfExpandedChange"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i7.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.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: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i6.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i9.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i6.ClrLabel, selector: "label", inputs: ["for"] }, { type: i6.ClrTextarea, selector: "[clrTextarea]" }, { type: i9.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i8.AsyncPipe, "translate": i10.TranslatePipe, "assetPreview": i2.AssetPreviewPipe, "localeCurrency": i2.LocaleCurrencyPipe, "currency": i8.CurrencyPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
377
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: OrderEditorComponent, decorators: [{
378
+ type: Component,
379
+ args: [{ selector: 'vdr-order-editor', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button class=\"btn btn-secondary\" (click)=\"transitionToPriorState(order)\">\r\n {{ 'order.cancel-modification' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <table class=\"order-table table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th *ngIf=\"orderLineCustomFields.length\">{{ 'common.custom-fields' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let line of order.lines; let i = index\"\r\n class=\"order-line\"\r\n [class.is-cancelled]=\"line.quantity === 0\"\r\n [class.modified]=\"isLineModified(line)\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"line.featuredAsset\"\r\n [src]=\"line.featuredAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.unitPrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"line.quantity\"\r\n (input)=\"updateLineQuantity(line, $event.target.value)\"\r\n />\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n <vdr-line-fulfillment\r\n [line]=\"line\"\r\n [orderState]=\"order.state\"\r\n ></vdr-line-fulfillment>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"orderLineCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.linePriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.linePrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n *ngFor=\"let addedLine of addedLines; trackBy: trackByProductVariantId; let i = index\"\r\n class=\"modified\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"addedLine.productAsset\"\r\n [src]=\"addedLine.productAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ addedLine.productVariantName }}</td>\r\n <td class=\"align-middle sku\">{{ addedLine.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ addedLine.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ addedLine.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"addedLine.quantity\"\r\n (input)=\"updateAddedItemQuantity(addedLine, $event.target.value)\"\r\n />\r\n <button class=\"icon-button\" (click)=\"removeAddedItem(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{\r\n (addedLine.priceWithTax * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{\r\n (addedLine.price * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"surcharge\" *ngFor=\"let surcharge of order.surcharges\">\r\n <td class=\"align-middle name left\" colspan=\"2\">{{ surcharge.description }}</td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n {{ surcharge.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surcharge.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n class=\"surcharge modified\"\r\n *ngFor=\"let surcharge of modifyOrderInput.surcharges; let i = index\"\r\n >\r\n <td class=\"align-middle name left\" colspan=\"2\">\r\n {{ surcharge.description }}\r\n <button class=\"icon-button\" (click)=\"removeSurcharge(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n <ng-container *ngIf=\"getSurchargePrices(surcharge) as surchargePrice\">\r\n {{ surchargePrice.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surchargePrice.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr class=\"shipping\">\r\n <td class=\"left clr-align-middle\">{{ 'order.shipping' | translate }}</td>\r\n <td class=\"clr-align-middle\">{{ order.shippingLines[0]?.shippingMethod?.name }}</td>\r\n <td colspan=\"3\"></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.shippingWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.shipping | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <h4 class=\"mb2\">{{ 'order.modifications' | translate }}</h4>\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-item-to-order' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-product-variant-selector class=\"mb4\" (productSelected)=\"addItemSelectedVariant = $event\">\r\n </vdr-product-variant-selector>\r\n <div *ngIf=\"addItemSelectedVariant\" class=\"flex mb4\">\r\n <img\r\n *ngIf=\"addItemSelectedVariant.productAsset as asset\"\r\n [src]=\"asset | assetPreview: 'tiny'\"\r\n class=\"mr4\"\r\n />\r\n <div>\r\n <strong class=\"mr4\">{{ addItemSelectedVariant.productVariantName }}</strong>\r\n <small>{{ addItemSelectedVariant.sku }}</small>\r\n <div>\r\n {{\r\n getSelectedItemPrice(addItemSelectedVariant)\r\n | localeCurrency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [readonly]=\"!addItemSelectedVariant\"\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsForm\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"!addItemSelectedVariant || addItemCustomFieldsForm.invalid\"\r\n (click)=\"addItemToOrder(addItemSelectedVariant)\"\r\n >\r\n {{ 'order.add-item-to-order' | translate }}\r\n </button>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.set-coupon-codes' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <ng-select\r\n [items]=\"availableCouponCodes$ | async\"\r\n appendTo=\"body\"\r\n bindLabel=\"code\"\r\n bindValue=\"code\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n [minTermLength]=\"2\"\r\n typeToSearchText=\"\"\r\n [typeahead]=\"couponCodeInput$\"\r\n [formControl]=\"couponCodesControl\"\r\n >\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <vdr-chip>{{ item.code }}</vdr-chip> {{ item.promotionName }}\r\n </ng-template>\r\n </ng-select>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-surcharge' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <form [formGroup]=\"surchargeForm\" (submit)=\"addSurcharge(surchargeForm.value)\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\"\r\n ><input id=\"description\" type=\"text\" formControlName=\"description\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.product-sku' | translate\" for=\"sku\"\r\n ><input id=\"sku\" type=\"text\" formControlName=\"sku\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'common.price' | translate\" for=\"price\"\r\n ><vdr-currency-input\r\n [currencyCode]=\"order.currencyCode\"\r\n id=\"price\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input\r\n ></vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"\r\n 'catalog.price-includes-tax-at'\r\n | translate: { rate: surchargeForm.get('taxRate')?.value }\r\n \"\r\n for=\"priceIncludesTax\"\r\n ><input\r\n id=\"priceIncludesTax\"\r\n type=\"checkbox\"\r\n clrCheckbox\r\n formControlName=\"priceIncludesTax\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-rate' | translate\" for=\"taxRate\"\r\n ><vdr-affixed-input suffix=\"%\"\r\n ><input\r\n id=\"taxRate\"\r\n type=\"number\"\r\n min=\"0\"\r\n max=\"100\"\r\n formControlName=\"taxRate\" /></vdr-affixed-input\r\n ></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-description' | translate\" for=\"taxDescription\"\r\n ><input id=\"taxDescription\" type=\"text\" formControlName=\"taxDescription\"\r\n /></vdr-form-field>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"\r\n surchargeForm.invalid ||\r\n surchargeForm.pristine ||\r\n surchargeForm.get('price')?.value === 0\r\n \"\r\n >\r\n {{ 'order.add-surcharge' | translate }}\r\n </button>\r\n </form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-shipping-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"shippingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-billing-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"billingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'order.modification-summary' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <ul>\r\n <li *ngIf=\"modifyOrderInput.addItems?.length\">\r\n {{\r\n 'order.modification-adding-items'\r\n | translate: { count: modifyOrderInput.addItems?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.adjustOrderLines?.length\">\r\n {{\r\n 'order.modification-adjusting-lines'\r\n | translate: { count: modifyOrderInput.adjustOrderLines?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.surcharges?.length\">\r\n {{\r\n 'order.modification-adding-surcharges'\r\n | translate: { count: modifyOrderInput.surcharges?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"shippingAddressForm.dirty\">\r\n {{ 'order.modification-updating-shipping-address' | translate }}\r\n </li>\r\n <li *ngIf=\"billingAddressForm.dirty\">\r\n {{ 'order.modification-updating-billing-address' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"card-block\">\r\n <label class=\"clr-control-label\">{{ 'order.note' | translate }}</label>\r\n <textarea [(ngModel)]=\"note\" name=\"note\" clrTextarea required></textarea>\r\n <clr-checkbox-wrapper class=\"\">\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"recalculateShipping\" />\r\n <label>{{ 'order.modification-recalculate-shipping' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button\r\n class=\"btn btn-primary\"\r\n [disabled]=\"!canPreviewChanges()\"\r\n (click)=\"previewAndModify(order)\"\r\n >\r\n {{ 'order.preview-changes' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".order-table .is-cancelled td{text-decoration:line-through;background-color:var(--color-component-bg-200)}.order-table .sub-total td{border-top:1px dashed var(--color-component-border-200)}.order-table .total td{font-weight:700;border-top:1px dashed var(--color-component-border-200)}.order-table td.custom-fields-row{border-top-style:dashed;border-top-color:var(--color-grey-200)}.order-table .order-line-custom-fields{display:flex;flex-wrap:wrap}.order-table .order-line-custom-fields .custom-field{text-align:start;max-width:200px;overflow:hidden;text-overflow:ellipsis;margin-bottom:6px;margin-right:18px}.order-table .order-line-custom-field{background-color:var(--color-component-bg-100)}.order-table .order-line-custom-field .custom-field-ellipsis{color:var(--color-text-300)}.order-table .net-price{font-size:11px;color:var(--color-text-300)}.order-table .promotions-label{-webkit-text-decoration:underline dotted var(--color-text-200);text-decoration:underline dotted var(--color-text-200);font-size:11px;margin-top:6px;cursor:pointer;text-transform:lowercase}.order-table tr.modified td{background-color:var(--color-warning-100)}\n"] }]
380
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i2.NotificationService }, { type: i2.ModalService }, { type: i3.OrderTransitionService }]; } });
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvb3JkZXIvc3JjL2NvbXBvbmVudHMvb3JkZXItZWRpdG9yL29yZGVyLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWVkaXRvci9vcmRlci1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxPQUFPLEVBR0gsbUJBQW1CLEVBS25CLGdCQUFnQixFQVNoQixTQUFTLEdBRVosTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxHQUNaLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUNILG1CQUFtQixFQUNuQixnQ0FBZ0MsR0FDbkMsTUFBTSxvRUFBb0UsQ0FBQzs7Ozs7Ozs7Ozs7O0FBeUI1RSxNQUFNLE9BQU8sb0JBQ1QsU0FBUSxtQkFBd0M7SUFnQ2hELFlBQ0ksTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLG1CQUF3QyxFQUNoQyxjQUFpQyxFQUMvQixXQUF3QixFQUMxQixtQkFBd0MsRUFDeEMsWUFBMEIsRUFDMUIsc0JBQThDO1FBRXRELEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBTi9DLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUMvQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUMxQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFuQzFELHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFFekMsZUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLHVCQUFrQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFNdkMscUJBQWdCLEdBQW9CO1lBQ2hDLE1BQU0sRUFBRSxJQUFJO1lBQ1osT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsRUFBRTtZQUNaLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsVUFBVSxFQUFFLEVBQUU7WUFDZCxJQUFJLEVBQUUsRUFBRTtZQUNSLHFCQUFxQixFQUFFLEVBQUU7WUFDekIsb0JBQW9CLEVBQUUsRUFBRTtTQUMzQixDQUFDO1FBSUYsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUVuQixrQkFBYSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0lBYS9ELENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBbUMsRUFBRSxFQUFFLENBQ2hFLEtBQUssQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2FBQ3hDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNQLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2pFLElBQUksV0FBVyxFQUFFO2dCQUNiLE9BQU87b0JBQ0gsR0FBRyxXQUFXO29CQUNkLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO29CQUM3QyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztvQkFDM0QsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO2lCQUN6QixDQUFDO2FBQ0w7UUFDTCxDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBVyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxRCxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO2dCQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN2RDtZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxTQUFTLENBQUM7Z0JBQy9CLFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDckQsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUM5QyxnQkFBZ0IsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLGNBQWMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7YUFDdEMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksU0FBUyxDQUFDO29CQUNyQyxRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUM7b0JBQzFELE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQztvQkFDeEQsV0FBVyxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDO29CQUNoRSxXQUFXLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUM7b0JBQ2hFLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQztvQkFDbEQsUUFBUSxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDO29CQUMxRCxVQUFVLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUM7b0JBQzlELFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQztvQkFDaEUsV0FBVyxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDO2lCQUNuRSxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDekY7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUMxQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxTQUFTLENBQUM7b0JBQ3BDLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQztvQkFDekQsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDO29CQUN2RCxXQUFXLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7b0JBQy9ELFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQztvQkFDL0QsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDO29CQUNqRCxRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUM7b0JBQ3pELFVBQVUsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQztvQkFDN0QsV0FBVyxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO29CQUMvRCxXQUFXLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7aUJBQ2xFLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN2RjtZQUNELElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7b0JBQy9DLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFFLElBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNqRjtnQkFDRCxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNwRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN2RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FDakMsQ0FBQztvQkFDRixJQUFJLENBQUMsU0FBUyxFQUFFO3dCQUNaLFNBQVMsR0FBRzs0QkFDUixXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUU7NEJBQ3BCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTt5QkFDMUIsQ0FBQzt3QkFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMxRDtvQkFDRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUU7d0JBQ25DLFNBQVMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO3FCQUNsQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3ZEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN0QixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUM1QyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1NBQ2pDLENBQUMsQ0FBQyxPQUFPLENBQ2pCLEVBQ0QsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO1FBQ25CLGlEQUFpRDtRQUNqRCxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDOUUsRUFDRCxTQUFTLENBQUMsRUFBRSxDQUFDLENBQ2hCLENBQ0osQ0FBQztRQUNGLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDbEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztTQUNoRjtRQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7YUFDL0MscUJBQXFCLEVBQUU7YUFDdkIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7YUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSzthQUNqQixlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUN0QixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRTtnQkFDRixTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUk7YUFDNUI7WUFDRCxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsRUFBRTtTQUNwRSxDQUFDO2FBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBMEI7UUFDN0MsSUFBSSxDQUFDLHNCQUFzQjthQUN0Qiw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUM7YUFDekQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsTUFBTSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDekUsT0FBTyxDQUNILENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTTtZQUNsQixDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU07WUFDcEIsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLE1BQU07WUFDMUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7WUFDbEUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7WUFDaEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FDaEMsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBMEM7UUFDckQsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FDakQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUNqRSxDQUFDO0lBQ04sQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQTBDLEVBQUUsUUFBZ0I7UUFDM0UsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ25ELElBQUksR0FBRyxHQUFHLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDcEMseURBQXlEO1lBQ3pELHFCQUFxQjtZQUNyQixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLEdBQUcsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BELGdCQUFnQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQjtRQUNELEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQWUsRUFBRSxRQUFnQjtRQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRyxJQUFJLEdBQUcsRUFBRTtZQUNMLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBYSxFQUFFLElBQWU7UUFDbEQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQXVDO1FBQ3hELFFBQVEsTUFBTSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDckMsS0FBSyxhQUFhO2dCQUNkLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDckM7Z0JBQ0ksT0FBTyxDQUFDLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQXVDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTTtZQUNsRCxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUs7WUFDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUMvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FDckQsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixHQUFHLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksWUFBWSxFQUFFO2dCQUNkLEdBQUcsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0M7YUFBTTtZQUNILEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksWUFBWSxFQUFFO1lBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3JELFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDckQ7WUFDRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BFLElBQUksR0FBRyxFQUFFO29CQUNMLEdBQUcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2lCQUM1QjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUM7UUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxvQkFBb0IsQ0FDeEIsR0FBd0MsRUFDeEMsTUFBMkIsRUFDM0IsWUFBaUI7UUFFakIsT0FBTyxDQUNILEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNLENBQUMsZ0JBQWdCO1lBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQ3BFLENBQUM7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyRDtJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUF5QjtRQUN4QyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsZ0JBQWdCO1lBQzNDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSztZQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsZ0JBQWdCO1lBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN4RSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUN0QixPQUFPO1lBQ0gsS0FBSztZQUNMLFlBQVk7U0FDZixDQUFDO0lBQ04sQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEtBQUssRUFBRSxDQUFDO1lBQ1IsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixPQUFPLEVBQUUsQ0FBQztTQUNiLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQTBCO1FBQ3ZDLE1BQU0sS0FBSyxHQUFxQjtZQUM1QixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7WUFDeEIsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUM5QixDQUFDLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFO2dCQUMzRCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsTUFBTSxFQUFFLElBQUk7WUFDWixXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztZQUN0RixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ3JCLE9BQU8sRUFBRTtnQkFDTCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2FBQ2hEO1NBQ0osQ0FBQztRQUNGLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7YUFDakIsV0FBVyxDQUFDLEtBQUssQ0FBQzthQUNsQixJQUFJLENBQ0QsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1lBQzFCLFFBQVEsV0FBVyxDQUFDLFVBQVUsRUFBRTtnQkFDNUIsS0FBSyxPQUFPO29CQUNSLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLEVBQUU7d0JBQ3JFLElBQUksRUFBRSxJQUFJO3dCQUNWLFFBQVEsRUFBRSxLQUFLO3dCQUNmLE1BQU0sRUFBRTs0QkFDSixvQkFBb0I7NEJBQ3BCLEtBQUssRUFBRSxXQUFXOzRCQUNsQixxQkFBcUIsRUFBRSxJQUFJLENBQUMscUJBQXFCOzRCQUNqRCxnQkFBZ0IsRUFBRSxLQUFLO3lCQUMxQjtxQkFDSixDQUFDLENBQUM7Z0JBQ1AsS0FBSyx3QkFBd0IsQ0FBQztnQkFDOUIsS0FBSyx1QkFBdUIsQ0FBQztnQkFDN0IsS0FBSyx5QkFBeUIsQ0FBQztnQkFDL0IsS0FBSyxpQkFBaUIsQ0FBQztnQkFDdkIsS0FBSyw2QkFBNkIsQ0FBQztnQkFDbkMsS0FBSywyQkFBMkIsQ0FBQztnQkFDakMsS0FBSyw2QkFBNkIsQ0FBQztnQkFDbkMsS0FBSyxzQkFBc0IsQ0FBQztnQkFDNUIsS0FBSyx3QkFBd0IsQ0FBQztnQkFDOUIsS0FBSyx3QkFBd0IsQ0FBQyxDQUFDO29CQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEQsT0FBTyxFQUFFLENBQUMsS0FBYyxDQUFDLENBQUM7aUJBQzdCO2dCQUNELEtBQUssSUFBSSxDQUFDO2dCQUNWLEtBQUssU0FBUztvQkFDVixPQUFPLEVBQUUsQ0FBQyxLQUFjLENBQUMsQ0FBQztnQkFDOUI7b0JBQ0ksV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2hDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtnQkFDekQsb0VBQW9FO2dCQUNwRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzFFO2lCQUFNO2dCQUNILHNCQUFzQjtnQkFDdEIsTUFBTSxXQUFXLEdBQUc7b0JBQ2hCLEdBQUcsS0FBSztvQkFDUixNQUFNLEVBQUUsS0FBSztpQkFDaEIsQ0FBQztnQkFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUMsTUFBTSxFQUFFO29CQUM5QyxXQUFXLENBQUMsTUFBTSxHQUFHO3dCQUNqQixTQUFTLEVBQUUsTUFBTSxDQUFDLGVBQWU7d0JBQ2pDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVTtxQkFDNUIsQ0FBQztpQkFDTDtnQkFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ3ZELFNBQVMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtvQkFDMUIsSUFBSSxXQUFXLENBQUMsVUFBVSxLQUFLLE9BQU8sRUFBRTt3QkFDcEMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFlBQVksR0FBRyxvQkFBb0IsQ0FBQzt3QkFDbkUsTUFBTSxTQUFTLEdBQ1gsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7d0JBRXZFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLOzZCQUN4QixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQzs2QkFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3FCQUMxQjt5QkFBTTt3QkFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFFLFdBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3JFLE9BQU8sS0FBSyxDQUFDO3FCQUNoQjtnQkFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO2FBQ0w7UUFDTCxDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoQixJQUFJLE1BQU0sRUFBRTtnQkFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQzdEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sK0JBQStCLENBQ25DLGVBQTBCLEVBQzFCLE9BQXFDO1FBRXJDLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7WUFDNUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxLQUFLLE1BQU0sY0FBYyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbkQsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDakMsTUFBTSxLQUFLLEdBQUksT0FBZSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwRCw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDekU7WUFDRCxlQUFlLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVTLGFBQWEsQ0FBQyxNQUEyQixFQUFFLFlBQTBCO1FBQzNFLGNBQWM7SUFDbEIsQ0FBQzs7aUhBMWFRLG9CQUFvQjtxR0FBcEIsb0JBQW9CLCtFQ2hFakMsK21zQkEyWEE7MkZEM1RhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDSSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIEFkZEl0ZW1JbnB1dCxcbiAgICBBZGp1c3RPcmRlckxpbmVJbnB1dCxcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxuICAgIEN1c3RvbUZpZWxkQ29uZmlnLFxuICAgIERhdGFTZXJ2aWNlLFxuICAgIEVycm9yUmVzdWx0LFxuICAgIEdldEF2YWlsYWJsZUNvdW50cmllc1F1ZXJ5LFxuICAgIEhpc3RvcnlFbnRyeVR5cGUsXG4gICAgTGFuZ3VhZ2VDb2RlLFxuICAgIE1vZGFsU2VydmljZSxcbiAgICBNb2RpZnlPcmRlcklucHV0LFxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgT3JkZXJBZGRyZXNzRnJhZ21lbnQsXG4gICAgT3JkZXJEZXRhaWxGcmFnbWVudCxcbiAgICBQcm9kdWN0U2VsZWN0b3JTZWFyY2hRdWVyeSxcbiAgICBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxuICAgIFNvcnRPcmRlcixcbiAgICBTdXJjaGFyZ2VJbnB1dCxcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciwgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xuaW1wb3J0IHsgY29uY2F0LCBFTVBUWSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgbWFwLFxuICAgIG1hcFRvLFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIHN0YXJ0V2l0aCxcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE9yZGVyVHJhbnNpdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvb3JkZXItdHJhbnNpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgT3JkZXJFZGl0UmVzdWx0VHlwZSxcbiAgICBPcmRlckVkaXRzUHJldmlld0RpYWxvZ0NvbXBvbmVudCxcbn0gZnJvbSAnLi4vb3JkZXItZWRpdHMtcHJldmlldy1kaWFsb2cvb3JkZXItZWRpdHMtcHJldmlldy1kaWFsb2cuY29tcG9uZW50JztcblxudHlwZSBQcm9kdWN0U2VsZWN0b3JJdGVtID0gUHJvZHVjdFNlbGVjdG9yU2VhcmNoUXVlcnlbJ3NlYXJjaCddWydpdGVtcyddW251bWJlcl07XG5cbmludGVyZmFjZSBBZGRlZExpbmUge1xuICAgIHByb2R1Y3RWYXJpYW50SWQ6IHN0cmluZztcbiAgICBwcm9kdWN0QXNzZXQ/OiBQcm9kdWN0U2VsZWN0b3JJdGVtWydwcm9kdWN0QXNzZXQnXSB8IG51bGw7XG4gICAgcHJvZHVjdFZhcmlhbnROYW1lOiBzdHJpbmc7XG4gICAgc2t1OiBzdHJpbmc7XG4gICAgcHJpY2VXaXRoVGF4OiBudW1iZXI7XG4gICAgcHJpY2U6IG51bWJlcjtcbiAgICBxdWFudGl0eTogbnVtYmVyO1xufVxuXG50eXBlIE1vZGlmeU9yZGVyRGF0YSA9IE9taXQ8TW9kaWZ5T3JkZXJJbnB1dCwgJ2FkZEl0ZW1zJyB8ICdhZGp1c3RPcmRlckxpbmVzJz4gJiB7XG4gICAgYWRkSXRlbXM6IEFycmF5PEFkZEl0ZW1JbnB1dCAmIHsgY3VzdG9tRmllbGRzPzogYW55IH0+O1xuICAgIGFkanVzdE9yZGVyTGluZXM6IEFycmF5PEFkanVzdE9yZGVyTGluZUlucHV0ICYgeyBjdXN0b21GaWVsZHM/OiBhbnkgfT47XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Zkci1vcmRlci1lZGl0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmRlci1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL29yZGVyLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBPcmRlckVkaXRvckNvbXBvbmVudFxuICAgIGV4dGVuZHMgQmFzZURldGFpbENvbXBvbmVudDxPcmRlckRldGFpbEZyYWdtZW50PlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICBhdmFpbGFibGVDb3VudHJpZXMkOiBPYnNlcnZhYmxlPEdldEF2YWlsYWJsZUNvdW50cmllc1F1ZXJ5Wydjb3VudHJpZXMnXVsnaXRlbXMnXT47XG4gICAgYXZhaWxhYmxlQ291cG9uQ29kZXMkOiBPYnNlcnZhYmxlPEFycmF5PHsgY29kZTogc3RyaW5nOyBwcm9tb3Rpb25OYW1lOiBzdHJpbmcgfT4+O1xuICAgIGNvdXBvbkNvZGVJbnB1dCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gICAgYWRkcmVzc0N1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcbiAgICBkZXRhaWxGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgY291cG9uQ29kZXNDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgb3JkZXJMaW5lQ3VzdG9tRmllbGRzRm9ybUFycmF5OiBGb3JtQXJyYXk7XG4gICAgYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm1BcnJheTogRm9ybUFycmF5O1xuICAgIGFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtOiBGb3JtR3JvdXA7XG4gICAgYWRkSXRlbVNlbGVjdGVkVmFyaWFudDogUHJvZHVjdFNlbGVjdG9ySXRlbSB8IHVuZGVmaW5lZDtcbiAgICBvcmRlckxpbmVDdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XG4gICAgbW9kaWZ5T3JkZXJJbnB1dDogTW9kaWZ5T3JkZXJEYXRhID0ge1xuICAgICAgICBkcnlSdW46IHRydWUsXG4gICAgICAgIG9yZGVySWQ6ICcnLFxuICAgICAgICBhZGRJdGVtczogW10sXG4gICAgICAgIGFkanVzdE9yZGVyTGluZXM6IFtdLFxuICAgICAgICBzdXJjaGFyZ2VzOiBbXSxcbiAgICAgICAgbm90ZTogJycsXG4gICAgICAgIHVwZGF0ZVNoaXBwaW5nQWRkcmVzczoge30sXG4gICAgICAgIHVwZGF0ZUJpbGxpbmdBZGRyZXNzOiB7fSxcbiAgICB9O1xuICAgIHN1cmNoYXJnZUZvcm06IEZvcm1Hcm91cDtcbiAgICBzaGlwcGluZ0FkZHJlc3NGb3JtOiBGb3JtR3JvdXA7XG4gICAgYmlsbGluZ0FkZHJlc3NGb3JtOiBGb3JtR3JvdXA7XG4gICAgbm90ZSA9ICcnO1xuICAgIHJlY2FsY3VsYXRlU2hpcHBpbmcgPSB0cnVlO1xuICAgIHByZXZpb3VzU3RhdGU6IHN0cmluZztcbiAgICBwcml2YXRlIGFkZGVkVmFyaWFudHMgPSBuZXcgTWFwPHN0cmluZywgUHJvZHVjdFNlbGVjdG9ySXRlbT4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG9yZGVyVHJhbnNpdGlvblNlcnZpY2U6IE9yZGVyVHJhbnNpdGlvblNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBnZXQgYWRkZWRMaW5lcygpOiBBZGRlZExpbmVbXSB7XG4gICAgICAgIGNvbnN0IGdldFNpbmdsZVByaWNlVmFsdWUgPSAocHJpY2U6IFByb2R1Y3RTZWxlY3Rvckl0ZW1bJ3ByaWNlJ10pID0+XG4gICAgICAgICAgICBwcmljZS5fX3R5cGVuYW1lID09PSAnU2luZ2xlUHJpY2UnID8gcHJpY2UudmFsdWUgOiAwO1xuICAgICAgICByZXR1cm4gKHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcyB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAocm93ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50SW5mbyA9IHRoaXMuYWRkZWRWYXJpYW50cy5nZXQocm93LnByb2R1Y3RWYXJpYW50SWQpO1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50SW5mbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udmFyaWFudEluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogZ2V0U2luZ2xlUHJpY2VWYWx1ZSh2YXJpYW50SW5mby5wcmljZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZVdpdGhUYXg6IGdldFNpbmdsZVByaWNlVmFsdWUodmFyaWFudEluZm8ucHJpY2VXaXRoVGF4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiByb3cucXVhbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIHRoaXMuYWRkcmVzc0N1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0FkZHJlc3MnKTtcbiAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0Lm9yZGVySWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKSBhcyBzdHJpbmc7XG4gICAgICAgIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnT3JkZXJMaW5lJyk7XG4gICAgICAgIHRoaXMuZW50aXR5JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKG9yZGVyID0+IHtcbiAgICAgICAgICAgIGlmIChvcmRlci5jb3Vwb25Db2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXBvbkNvZGVzQ29udHJvbC5zZXRWYWx1ZShvcmRlci5jb3Vwb25Db2Rlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1cmNoYXJnZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgICAgICBza3U6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICAgICAgICAgICAgcHJpY2U6IG5ldyBGb3JtQ29udHJvbCgwLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgICAgICBwcmljZUluY2x1ZGVzVGF4OiBuZXcgRm9ybUNvbnRyb2wodHJ1ZSksXG4gICAgICAgICAgICAgICAgdGF4UmF0ZTogbmV3IEZvcm1Db250cm9sKDApLFxuICAgICAgICAgICAgICAgIHRheERlc2NyaXB0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hpcHBpbmdBZGRyZXNzRm9ybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hpcHBpbmdBZGRyZXNzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8uZnVsbE5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBjb21wYW55OiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5jb21wYW55KSxcbiAgICAgICAgICAgICAgICAgICAgc3RyZWV0TGluZTE6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LnN0cmVldExpbmUxKSxcbiAgICAgICAgICAgICAgICAgICAgc3RyZWV0TGluZTI6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LnN0cmVldExpbmUyKSxcbiAgICAgICAgICAgICAgICAgICAgY2l0eTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8uY2l0eSksXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpbmNlOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5wcm92aW5jZSksXG4gICAgICAgICAgICAgICAgICAgIHBvc3RhbENvZGU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUpLFxuICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8uY291bnRyeUNvZGUpLFxuICAgICAgICAgICAgICAgICAgICBwaG9uZU51bWJlcjogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8ucGhvbmVOdW1iZXIpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQWRkcmVzc0N1c3RvbUZpZWxkc0Zvcm1Hcm91cCh0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0sIG9yZGVyLnNoaXBwaW5nQWRkcmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuYmlsbGluZ0FkZHJlc3NGb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8uZnVsbE5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBjb21wYW55OiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LmNvbXBhbnkpLFxuICAgICAgICAgICAgICAgICAgICBzdHJlZXRMaW5lMTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5zdHJlZXRMaW5lMSksXG4gICAgICAgICAgICAgICAgICAgIHN0cmVldExpbmUyOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LnN0cmVldExpbmUyKSxcbiAgICAgICAgICAgICAgICAgICAgY2l0eTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5jaXR5KSxcbiAgICAgICAgICAgICAgICAgICAgcHJvdmluY2U6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8ucHJvdmluY2UpLFxuICAgICAgICAgICAgICAgICAgICBwb3N0YWxDb2RlOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LnBvc3RhbENvZGUpLFxuICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5jb3VudHJ5Q29kZSksXG4gICAgICAgICAgICAgICAgICAgIHBob25lTnVtYmVyOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LnBob25lTnVtYmVyKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAodGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0sIG9yZGVyLmJpbGxpbmdBZGRyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzRm9ybUFycmF5ID0gbmV3IEZvcm1BcnJheShbXSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3JkZXIubGluZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSB9IG9mIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5hZGRDb250cm9sKG5hbWUsIG5ldyBGb3JtQ29udHJvbCgobGluZSBhcyBhbnkpLmN1c3RvbUZpZWxkc1tuYW1lXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbW9kaWZ5Um93ID0gdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkanVzdE9yZGVyTGluZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPT4gbC5vcmRlckxpbmVJZCA9PT0gbGluZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2RpZnlSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeVJvdyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlckxpbmVJZDogbGluZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogbGluZS5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRqdXN0T3JkZXJMaW5lcy5wdXNoKG1vZGlmeVJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5Um93LmN1c3RvbUZpZWxkcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHNGb3JtQXJyYXkucHVzaChmb3JtR3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVDb3Vwb25Db2RlcyQgPSBjb25jYXQoXG4gICAgICAgICAgICB0aGlzLmNvdXBvbkNvZGVJbnB1dCQucGlwZShcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgICAgICAgICAgICAgdGVybSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9tb3Rpb24uZ2V0UHJvbW90aW9ucygxMCwgMCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXBvbkNvZGU6IHsgY29udGFpbnM6IHRlcm0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnNpbmdsZSQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtYXAoKHsgcHJvbW90aW9ucyB9KSA9PlxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgICAgIHByb21vdGlvbnMuaXRlbXMubWFwKHAgPT4gKHsgY29kZTogcC5jb3Vwb25Db2RlISwgcHJvbW90aW9uTmFtZTogcC5uYW1lIH0pKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChbXSksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtQXJyYXkgPSBuZXcgRm9ybUFycmF5KFtdKTtcbiAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgICBmb3IgKGNvbnN0IGN1c3RvbUZpZWxkIG9mIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtLmFkZENvbnRyb2woY3VzdG9tRmllbGQubmFtZSwgbmV3IEZvcm1Db250cm9sKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ291bnRyaWVzJCA9IHRoaXMuZGF0YVNlcnZpY2Uuc2V0dGluZ3NcbiAgICAgICAgICAgIC5nZXRBdmFpbGFibGVDb3VudHJpZXMoKVxuICAgICAgICAgICAgLm1hcFNpbmdsZShyZXN1bHQgPT4gcmVzdWx0LmNvdW50cmllcy5pdGVtcylcbiAgICAgICAgICAgIC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlclxuICAgICAgICAgICAgLmdldE9yZGVySGlzdG9yeSh0aGlzLmlkLCB7XG4gICAgICAgICAgICAgICAgdGFrZTogMSxcbiAgICAgICAgICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogU29ydE9yZGVyLkRFU0MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IHsgdHlwZTogeyBlcTogSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9TVEFURV9UUkFOU0lUSU9OIH0gfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc2luZ2xlJC5zdWJzY3JpYmUoKHsgb3JkZXIgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNTdGF0ZSA9IG9yZGVyPy5oaXN0b3J5Lml0ZW1zWzBdLmRhdGEuZnJvbTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0cmFuc2l0aW9uVG9QcmlvclN0YXRlKG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50KSB7XG4gICAgICAgIHRoaXMub3JkZXJUcmFuc2l0aW9uU2VydmljZVxuICAgICAgICAgICAgLnRyYW5zaXRpb25Ub1ByZU1vZGlmeWluZ1N0YXRlKG9yZGVyLmlkLCBvcmRlci5uZXh0U3RhdGVzKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FuUHJldmlld0NoYW5nZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgYWRkSXRlbXMsIGFkanVzdE9yZGVyTGluZXMsIHN1cmNoYXJnZXMgfSA9IHRoaXMubW9kaWZ5T3JkZXJJbnB1dDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICEhYWRkSXRlbXM/Lmxlbmd0aCB8fFxuICAgICAgICAgICAgISFzdXJjaGFyZ2VzPy5sZW5ndGggfHxcbiAgICAgICAgICAgICEhYWRqdXN0T3JkZXJMaW5lcz8ubGVuZ3RoIHx8XG4gICAgICAgICAgICAodGhpcy5zaGlwcGluZ0FkZHJlc3NGb3JtLmRpcnR5ICYmIHRoaXMuc2hpcHBpbmdBZGRyZXNzRm9ybS52YWxpZCkgfHxcbiAgICAgICAgICAgICh0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybS5kaXJ0eSAmJiB0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybS52YWxpZCkgfHxcbiAgICAgICAgICAgIHRoaXMuY291cG9uQ29kZXNDb250cm9sLmRpcnR5XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaXNMaW5lTW9kaWZpZWQobGluZTogT3JkZXJEZXRhaWxGcmFnbWVudFsnbGluZXMnXVtudW1iZXJdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGp1c3RPcmRlckxpbmVzPy5maW5kKFxuICAgICAgICAgICAgbCA9PiBsLm9yZGVyTGluZUlkID09PSBsaW5lLmlkICYmIGwucXVhbnRpdHkgIT09IGxpbmUucXVhbnRpdHksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlTGluZVF1YW50aXR5KGxpbmU6IE9yZGVyRGV0YWlsRnJhZ21lbnRbJ2xpbmVzJ11bbnVtYmVyXSwgcXVhbnRpdHk6IHN0cmluZykge1xuICAgICAgICBjb25zdCB7IGFkanVzdE9yZGVyTGluZXMgfSA9IHRoaXMubW9kaWZ5T3JkZXJJbnB1dDtcbiAgICAgICAgbGV0IHJvdyA9IGFkanVzdE9yZGVyTGluZXM/LmZpbmQobCA9PiBsLm9yZGVyTGluZUlkID09PSBsaW5lLmlkKTtcbiAgICAgICAgaWYgKHJvdyAmJiArcXVhbnRpdHkgPT09IGxpbmUucXVhbnRpdHkpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgbW9kaWZpY2F0aW9uIGlmIHRoZSBxdWFudGl0eSBpcyB0aGUgc2FtZSBhc1xuICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIG9yZGVyXG4gICAgICAgICAgICBhZGp1c3RPcmRlckxpbmVzPy5zcGxpY2UoYWRqdXN0T3JkZXJMaW5lcz8uaW5kZXhPZihyb3cpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcm93ID0geyBvcmRlckxpbmVJZDogbGluZS5pZCwgcXVhbnRpdHk6ICtxdWFudGl0eSB9O1xuICAgICAgICAgICAgYWRqdXN0T3JkZXJMaW5lcz8ucHVzaChyb3cpO1xuICAgICAgICB9XG4gICAgICAgIHJvdy5xdWFudGl0eSA9ICtxdWFudGl0eTtcbiAgICB9XG5cbiAgICB1cGRhdGVBZGRlZEl0ZW1RdWFudGl0eShpdGVtOiBBZGRlZExpbmUsIHF1YW50aXR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zPy5maW5kKGwgPT4gbC5wcm9kdWN0VmFyaWFudElkID09PSBpdGVtLnByb2R1Y3RWYXJpYW50SWQpO1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByb3cucXVhbnRpdHkgPSArcXVhbnRpdHk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja0J5UHJvZHVjdFZhcmlhbnRJZChpbmRleDogbnVtYmVyLCBpdGVtOiBBZGRlZExpbmUpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ucHJvZHVjdFZhcmlhbnRJZDtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZEl0ZW1QcmljZShyZXN1bHQ6IFByb2R1Y3RTZWxlY3Rvckl0ZW0gfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICAgICAgICBzd2l0Y2ggKHJlc3VsdD8ucHJpY2VXaXRoVGF4Ll9fdHlwZW5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1NpbmdsZVByaWNlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnByaWNlV2l0aFRheC52YWx1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRJdGVtVG9PcmRlcihyZXN1bHQ6IFByb2R1Y3RTZWxlY3Rvckl0ZW0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXN0b21GaWVsZHMgPSB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybS52YWx1ZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCByb3cgPSB0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRkSXRlbXM/LmZpbmQobCA9PlxuICAgICAgICAgICAgdGhpcy5pc01hdGNoaW5nQWRkSXRlbVJvdyhsLCByZXN1bHQsIGN1c3RvbUZpZWxkcyksXG4gICAgICAgICk7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByb3cgPSB7IHByb2R1Y3RWYXJpYW50SWQ6IHJlc3VsdC5wcm9kdWN0VmFyaWFudElkLCBxdWFudGl0eTogMSB9O1xuICAgICAgICAgICAgaWYgKGN1c3RvbUZpZWxkcykge1xuICAgICAgICAgICAgICAgIHJvdy5jdXN0b21GaWVsZHMgPSBjdXN0b21GaWVsZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRkSXRlbXM/LnB1c2gocm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdy5xdWFudGl0eSsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXN0b21GaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3VzdG9tRmllbGRzKSkge1xuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5hZGRDb250cm9sKGtleSwgbmV3IEZvcm1Db250cm9sKHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtQXJyYXkucHVzaChmb3JtR3JvdXApO1xuICAgICAgICAgICAgZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5jdXN0b21GaWVsZHMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtLnJlc2V0KHt9KTtcbiAgICAgICAgdGhpcy5hZGRJdGVtU2VsZWN0ZWRWYXJpYW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmFkZGVkVmFyaWFudHMuc2V0KHJlc3VsdC5wcm9kdWN0VmFyaWFudElkLCByZXN1bHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNYXRjaGluZ0FkZEl0ZW1Sb3coXG4gICAgICAgIHJvdzogTW9kaWZ5T3JkZXJEYXRhWydhZGRJdGVtcyddW251bWJlcl0sXG4gICAgICAgIHJlc3VsdDogUHJvZHVjdFNlbGVjdG9ySXRlbSxcbiAgICAgICAgY3VzdG9tRmllbGRzOiBhbnksXG4gICAgKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICByb3cucHJvZHVjdFZhcmlhbnRJZCA9PT0gcmVzdWx0LnByb2R1Y3RWYXJpYW50SWQgJiZcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHJvdy5jdXN0b21GaWVsZHMpID09PSBKU09OLnN0cmluZ2lmeShjdXN0b21GaWVsZHMpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQWRkZWRJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGlmICgtMSA8IGluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0U3VyY2hhcmdlUHJpY2VzKHN1cmNoYXJnZTogU3VyY2hhcmdlSW5wdXQpIHtcbiAgICAgICAgY29uc3QgcHJpY2VXaXRoVGF4ID0gc3VyY2hhcmdlLnByaWNlSW5jbHVkZXNUYXhcbiAgICAgICAgICAgID8gc3VyY2hhcmdlLnByaWNlXG4gICAgICAgICAgICA6IE1hdGgucm91bmQoc3VyY2hhcmdlLnByaWNlICogKCgxMDAgKyAoc3VyY2hhcmdlLnRheFJhdGUgfHwgMCkpIC8gMTAwKSk7XG4gICAgICAgIGNvbnN0IHByaWNlID0gc3VyY2hhcmdlLnByaWNlSW5jbHVkZXNUYXhcbiAgICAgICAgICAgID8gTWF0aC5yb3VuZChzdXJjaGFyZ2UucHJpY2UgLyAoKDEwMCArIChzdXJjaGFyZ2UudGF4UmF0ZSB8fCAwKSkgLyAxMDApKVxuICAgICAgICAgICAgOiBzdXJjaGFyZ2UucHJpY2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmljZSxcbiAgICAgICAgICAgIHByaWNlV2l0aFRheCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRTdXJjaGFyZ2UodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLm1vZGlmeU9yZGVySW5wdXQuc3VyY2hhcmdlcz8ucHVzaCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc3VyY2hhcmdlRm9ybS5yZXNldCh7XG4gICAgICAgICAgICBwcmljZTogMCxcbiAgICAgICAgICAgIHByaWNlSW5jbHVkZXNUYXg6IHRydWUsXG4gICAgICAgICAgICB0YXhSYXRlOiAwLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVTdXJjaGFyZ2UoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLm1vZGlmeU9yZGVySW5wdXQuc3VyY2hhcmdlcz8uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBwcmV2aWV3QW5kTW9kaWZ5KG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0OiBNb2RpZnlPcmRlcklucHV0ID0ge1xuICAgICAgICAgICAgLi4udGhpcy5tb2RpZnlPcmRlcklucHV0LFxuICAgICAgICAgICAgLi4uKHRoaXMuYmlsbGluZ0FkZHJlc3NGb3JtLmRpcnR5ID8geyB1cGRhdGVCaWxsaW5nQWRkcmVzczogdGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0udmFsdWUgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLih0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0uZGlydHlcbiAgICAgICAgICAgICAgICA/IHsgdXBkYXRlU2hpcHBpbmdBZGRyZXNzOiB0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0udmFsdWUgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgZHJ5UnVuOiB0cnVlLFxuICAgICAgICAgICAgY291cG9uQ29kZXM6IHRoaXMuY291cG9uQ29kZXNDb250cm9sLmRpcnR5ID8gdGhpcy5jb3Vwb25Db2Rlc0NvbnRyb2wudmFsdWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBub3RlOiB0aGlzLm5vdGUgPz8gJycsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVTaGlwcGluZzogdGhpcy5yZWNhbGN1bGF0ZVNoaXBwaW5nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUb3RhbFdpdGhUYXggPSBvcmRlci50b3RhbFdpdGhUYXg7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcbiAgICAgICAgICAgIC5tb2RpZnlPcmRlcihpbnB1dClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBtb2RpZnlPcmRlciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobW9kaWZ5T3JkZXIuX190eXBlbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3JkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5mcm9tQ29tcG9uZW50KE9yZGVyRWRpdHNQcmV2aWV3RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6ICd4bCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFRvdGFsV2l0aFRheCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBtb2RpZnlPcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyTGluZUN1c3RvbUZpZWxkczogdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZnlPcmRlcklucHV0OiBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0luc3VmZmljaWVudFN0b2NrRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTmVnYXRpdmVRdWFudGl0eUVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ05vQ2hhbmdlc1NwZWNpZmllZEVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ09yZGVyTGltaXRFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlck1vZGlmaWNhdGlvblN0YXRlRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGF5bWVudE1ldGhvZE1pc3NpbmdFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWZ1bmRQYXltZW50SWRNaXNzaW5nRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ291cG9uQ29kZUxpbWl0RXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ291cG9uQ29kZUV4cGlyZWRFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDb3Vwb25Db2RlSW52YWxpZEVycm9yJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihtb2RpZnlPcmRlci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UgYXMgY29uc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBudWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlIGFzIGNvbnN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0TmV2ZXIobW9kaWZ5T3JkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5yZXN1bHQgPT09IE9yZGVyRWRpdFJlc3VsdFR5cGUuQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZS1mZXRjaCBzbyB0aGF0IHRoZSBwcmV2aWV3IHZhbHVlcyBnZXQgb3ZlcndyaXR0ZW4gaW4gdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuZ2V0T3JkZXIodGhpcy5pZCkubWFwU2luZ2xlKCgpID0+IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHRoZSBtb2RpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdldFJ1bklucHV0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeVJ1bjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQgPT09IE9yZGVyRWRpdFJlc3VsdFR5cGUuUmVmdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2V0UnVuSW5wdXQucmVmdW5kID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXltZW50SWQ6IHJlc3VsdC5yZWZ1bmRQYXltZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVzdWx0LnJlZnVuZE5vdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLm1vZGlmeU9yZGVyKHdldFJ1bklucHV0KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBtb2RpZnlPcmRlciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZnlPcmRlci5fX3R5cGVuYW1lID09PSAnT3JkZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmljZURlbHRhID0gbW9kaWZ5T3JkZXIudG90YWxXaXRoVGF4IC0gb3JpZ2luYWxUb3RhbFdpdGhUYXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0U3RhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPCBwcmljZURlbHRhID8gJ0FycmFuZ2luZ0FkZGl0aW9uYWxQYXltZW50JyA6IHRoaXMucHJldmlvdXNTdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHJhbnNpdGlvblRvU3RhdGUob3JkZXIuaWQsIG5leHRTdGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShtYXBUbyh0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoKG1vZGlmeU9yZGVyIGFzIEVycm9yUmVzdWx0KS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQWRkcmVzc0N1c3RvbUZpZWxkc0Zvcm1Hcm91cChcbiAgICAgICAgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXAsXG4gICAgICAgIGFkZHJlc3M/OiBPcmRlckFkZHJlc3NGcmFnbWVudCB8IG51bGwsXG4gICAgKSB7XG4gICAgICAgIGlmIChhZGRyZXNzICYmIHRoaXMuYWRkcmVzc0N1c3RvbUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3VzdG9tRmllbGREZWYgb2YgdGhpcy5hZGRyZXNzQ3VzdG9tRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGN1c3RvbUZpZWxkRGVmLm5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoYWRkcmVzcyBhcyBhbnkpLmN1c3RvbUZpZWxkcz8uW25hbWVdO1xuICAgICAgICAgICAgICAgIGFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAuYWRkQ29udHJvbChuYW1lLCBuZXcgRm9ybUNvbnRyb2wodmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudEZvcm1Hcm91cC5hZGRDb250cm9sKCdjdXN0b21GaWVsZHMnLCBhZGRyZXNzQ3VzdG9tRmllbGRzRm9ybUdyb3VwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogT3JkZXJEZXRhaWxGcmFnbWVudCwgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpOiB2b2lkIHtcbiAgICAgICAgLyogbm90IHVzZWQgKi9cbiAgICB9XG59XG4iLCI8dmRyLWFjdGlvbi1iYXIgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgb3JkZXJcIj5cclxuICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBjbHItYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDx2ZHItZW50aXR5LWluZm8gW2VudGl0eV09XCJlbnRpdHkkIHwgYXN5bmNcIj48L3Zkci1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgPHZkci1vcmRlci1zdGF0ZS1sYWJlbCBbc3RhdGVdPVwib3JkZXIuc3RhdGVcIj48L3Zkci1vcmRlci1zdGF0ZS1sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdmRyLWFiLWxlZnQ+XHJcblxyXG4gICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwidHJhbnNpdGlvblRvUHJpb3JTdGF0ZShvcmRlcilcIj5cclxuICAgICAgICAgICAge3sgJ29yZGVyLmNhbmNlbC1tb2RpZmljYXRpb24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L3Zkci1hYi1yaWdodD5cclxuPC92ZHItYWN0aW9uLWJhcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgb3JkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbHItcm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNsci1jb2wtbGctOFwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJvcmRlci10YWJsZSB0YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIucHJvZHVjdC1uYW1lJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIucHJvZHVjdC1za3UnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci51bml0LXByaWNlJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIucXVhbnRpdHknIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwib3JkZXJMaW5lQ3VzdG9tRmllbGRzLmxlbmd0aFwiPnt7ICdjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnRvdGFsJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsaW5lIG9mIG9yZGVyLmxpbmVzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcmRlci1saW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWNhbmNlbGxlZF09XCJsaW5lLnF1YW50aXR5ID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1vZGlmaWVkXT1cImlzTGluZU1vZGlmaWVkKGxpbmUpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSB0aHVtYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGluZS5mZWF0dXJlZEFzc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImxpbmUuZmVhdHVyZWRBc3NldCB8IGFzc2V0UHJldmlldzogJ3RpbnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBuYW1lXCI+e3sgbGluZS5wcm9kdWN0VmFyaWFudC5uYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHNrdVwiPnt7IGxpbmUucHJvZHVjdFZhcmlhbnQuc2t1IH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHVuaXQtcHJpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxpbmUudW5pdFByaWNlV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXQtcHJpY2VcIiBbdGl0bGVdPVwiJ29yZGVyLm5ldC1wcmljZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5lLnVuaXRQcmljZSB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgcXVhbnRpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsaW5lLnF1YW50aXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlTGluZVF1YW50aXR5KGxpbmUsICRldmVudC50YXJnZXQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWxpbmUtcmVmdW5kcyBbbGluZV09XCJsaW5lXCIgW3BheW1lbnRzXT1cIm9yZGVyLnBheW1lbnRzXCI+PC92ZHItbGluZS1yZWZ1bmRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1saW5lLWZ1bGZpbGxtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmVdPVwibGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29yZGVyU3RhdGVdPVwib3JkZXIuc3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWxpbmUtZnVsZmlsbG1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGhcIiBjbGFzcz1cIm9yZGVyLWxpbmUtY3VzdG9tLWZpZWxkIGFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3VzdG9tRmllbGQgb2Ygb3JkZXJMaW5lQ3VzdG9tRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jdXN0b20tZmllbGQtY29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRdPVwiY3VzdG9tRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cIm9yZGVyTGluZUN1c3RvbUZpZWxkc0Zvcm1BcnJheS5nZXQoW2ldKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJPcmRlckxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItY3VzdG9tLWZpZWxkLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5lLmxpbmVQcmljZVdpdGhUYXggfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV0LXByaWNlXCIgW3RpdGxlXT1cIidvcmRlci5uZXQtcHJpY2UnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluZS5saW5lUHJpY2UgfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWRkZWRMaW5lIG9mIGFkZGVkTGluZXM7IHRyYWNrQnk6IHRyYWNrQnlQcm9kdWN0VmFyaWFudElkOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb2RpZmllZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgdGh1bWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFkZGVkTGluZS5wcm9kdWN0QXNzZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYWRkZWRMaW5lLnByb2R1Y3RBc3NldCB8IGFzc2V0UHJldmlldzogJ3RpbnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBuYW1lXCI+e3sgYWRkZWRMaW5lLnByb2R1Y3RWYXJpYW50TmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBza3VcIj57eyBhZGRlZExpbmUuc2t1IH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHVuaXQtcHJpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFkZGVkTGluZS5wcmljZVdpdGhUYXggfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV0LXByaWNlXCIgW3RpdGxlXT1cIidvcmRlci5uZXQtcHJpY2UnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWRkZWRMaW5lLnByaWNlIHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBxdWFudGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFkZGVkTGluZS5xdWFudGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZUFkZGVkSXRlbVF1YW50aXR5KGFkZGVkTGluZSwgJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVBZGRlZEl0ZW0oaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ0cmFzaFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwib3JkZXJMaW5lQ3VzdG9tRmllbGRzLmxlbmd0aFwiIGNsYXNzPVwib3JkZXItbGluZS1jdXN0b20tZmllbGQgYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjdXN0b21GaWVsZCBvZiBvcmRlckxpbmVDdXN0b21GaWVsZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWN1c3RvbS1maWVsZC1jb250cm9sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZF09XCJjdXN0b21GaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm1BcnJheS5nZXQoW2ldKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJPcmRlckxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItY3VzdG9tLWZpZWxkLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGRlZExpbmUucHJpY2VXaXRoVGF4ICogYWRkZWRMaW5lLnF1YW50aXR5KSAvIDEwMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV0LXByaWNlXCIgW3RpdGxlXT1cIidvcmRlci5uZXQtcHJpY2UnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZGVkTGluZS5wcmljZSAqIGFkZGVkTGluZS5xdWFudGl0eSkgLyAxMDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInN1cmNoYXJnZVwiICpuZ0Zvcj1cImxldCBzdXJjaGFyZ2Ugb2Ygb3JkZXIuc3VyY2hhcmdlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgbmFtZSBsZWZ0XCIgY29sc3Bhbj1cIjJcIj57eyBzdXJjaGFyZ2UuZGVzY3JpcHRpb24gfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgc2t1XCI+e3sgc3VyY2hhcmdlLnNrdSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJvcmRlckxpbmVDdXN0b21GaWVsZHMubGVuZ3RoXCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdXJjaGFyZ2UucHJpY2VXaXRoVGF4IHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldC1wcmljZVwiIFt0aXRsZV09XCInb3JkZXIubmV0LXByaWNlJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1cmNoYXJnZS5wcmljZSB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3VyY2hhcmdlIG1vZGlmaWVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN1cmNoYXJnZSBvZiBtb2RpZnlPcmRlcklucHV0LnN1cmNoYXJnZXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIG5hbWUgbGVmdFwiIGNvbHNwYW49XCIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdXJjaGFyZ2UuZGVzY3JpcHRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVTdXJjaGFyZ2UoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ0cmFzaFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHNrdVwiPnt7IHN1cmNoYXJnZS5za3UgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwib3JkZXJMaW5lQ3VzdG9tRmllbGRzLmxlbmd0aFwiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSB0b3RhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFN1cmNoYXJnZVByaWNlcyhzdXJjaGFyZ2UpIGFzIHN1cmNoYXJnZVByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3VyY2hhcmdlUHJpY2UucHJpY2VXaXRoVGF4IHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXQtcHJpY2VcIiBbdGl0bGVdPVwiJ29yZGVyLm5ldC1wcmljZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3VyY2hhcmdlUHJpY2UucHJpY2UgfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInNoaXBwaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImxlZnQgY2xyLWFsaWduLW1pZGRsZVwiPnt7ICdvcmRlci5zaGlwcGluZycgfCB0cmFuc2xhdGUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjbHItYWxpZ24tbWlkZGxlXCI+e3sgb3JkZXIuc2hpcHBpbmdMaW5lc1swXT8uc2hpcHBpbmdNZXRob2Q/Lm5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJvcmRlckxpbmVDdXN0b21GaWVsZHMubGVuZ3RoXCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2xyLWFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JkZXIuc2hpcHBpbmdXaXRoVGF4IHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldC1wcmljZVwiIFt0aXRsZV09XCInb3JkZXIubmV0LXByaWNlJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9yZGVyLnNoaXBwaW5nIHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJtYjJcIj57eyAnb3JkZXIubW9kaWZpY2F0aW9ucycgfCB0cmFuc2xhdGUgfX08L2g0PlxyXG4gICAgICAgICAgICA8Y2xyLWFjY29yZGlvbj5cclxuICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLXRpdGxlPnt7ICdvcmRlci5hZGQtaXRlbS10by1vcmRlcicgfCB0cmFuc2xhdGUgfX08L2Nsci1hY2NvcmRpb24tdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tY29udGVudCAqY2xySWZFeHBhbmRlZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1wcm9kdWN0LXZhcmlhbnQtc2VsZWN0b3IgY2xhc3M9XCJtYjRcIiAocHJvZHVjdFNlbGVjdGVkKT1cImFkZEl0ZW1TZWxlY3RlZFZhcmlhbnQgPSAkZXZlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItcHJvZHVjdC12YXJpYW50LXNlbGVjdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWRkSXRlbVNlbGVjdGVkVmFyaWFudFwiIGNsYXNzPVwiZmxleCBtYjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFkZEl0ZW1TZWxlY3RlZFZhcmlhbnQucHJvZHVjdEFzc2V0IGFzIGFzc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImFzc2V0IHwgYXNzZXRQcmV2aWV3OiAndGlueSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJtcjRcIj57eyBhZGRJdGVtU2VsZWN0ZWRWYXJpYW50LnByb2R1Y3RWYXJpYW50TmFtZSB9fTwvc3Ryb25nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD57eyBhZGRJdGVtU2VsZWN0ZWRWYXJpYW50LnNrdSB9fTwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNlbGVjdGVkSXRlbVByaWNlKGFkZEl0ZW1TZWxlY3RlZFZhcmlhbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGN1c3RvbUZpZWxkIG9mIG9yZGVyTGluZUN1c3RvbUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jdXN0b20tZmllbGQtY29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhYWRkSXRlbVNlbGVjdGVkVmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkXT1cImN1c3RvbUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cImFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiT3JkZXJMaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1jdXN0b20tZmllbGQtY29udHJvbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFhZGRJdGVtU2VsZWN0ZWRWYXJpYW50IHx8IGFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEl0ZW1Ub09yZGVyKGFkZEl0ZW1TZWxlY3RlZFZhcmlhbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLmFkZC1pdGVtLXRvLW9yZGVyJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvY2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLXRpdGxlPnt7ICdvcmRlci5zZXQtY291cG9uLWNvZGVzJyB8IHRyYW5zbGF0ZSB9fTwvY2xyLWFjY29yZGlvbi10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1jb250ZW50ICpjbHJJZkV4cGFuZGVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiYXZhaWxhYmxlQ291cG9uQ29kZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWRkVGFnXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlU2VsZWN0ZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluVGVybUxlbmd0aF09XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVUb1NlYXJjaFRleHQ9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVhaGVhZF09XCJjb3Vwb25Db2RlSW5wdXQkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb3Vwb25Db2Rlc0NvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXA+e3sgaXRlbS5jb2RlIH19PC92ZHItY2hpcD4ge3sgaXRlbS5wcm9tb3Rpb25OYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvY2xyLWFjY29yZGlvbi1wYW5lbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi10aXRsZT57eyAnb3JkZXIuYWRkLXN1cmNoYXJnZScgfCB0cmFuc2xhdGUgfX08L2Nsci1hY2NvcmRpb24tdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1hY2NvcmRpb24tY29udGVudCAqY2xySWZFeHBhbmRlZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzdXJjaGFyZ2VGb3JtXCIgKHN1Ym1pdCk9XCJhZGRTdXJjaGFyZ2Uoc3VyY2hhcmdlRm9ybS52YWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIiBmb3I9XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxpbnB1dCBpZD1cImRlc2NyaXB0aW9uXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPjwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidvcmRlci5wcm9kdWN0LXNrdScgfCB0cmFuc2xhdGVcIiBmb3I9XCJza3VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48aW5wdXQgaWQ9XCJza3VcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInNrdVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPjwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24ucHJpY2UnIHwgdHJhbnNsYXRlXCIgZm9yPVwicHJpY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48dmRyLWN1cnJlbmN5LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdPVwib3JkZXIuY3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwcmljZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByaWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItY3VycmVuY3ktaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0YWxvZy5wcmljZS1pbmNsdWRlcy10YXgtYXQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyByYXRlOiBzdXJjaGFyZ2VGb3JtLmdldCgndGF4UmF0ZScpPy52YWx1ZSB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJwcmljZUluY2x1ZGVzVGF4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicHJpY2VJbmNsdWRlc1RheFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByaWNlSW5jbHVkZXNUYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz48L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInb3JkZXIudGF4LXJhdGUnIHwgdHJhbnNsYXRlXCIgZm9yPVwidGF4UmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjx2ZHItYWZmaXhlZC1pbnB1dCBzdWZmaXg9XCIlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0YXhSYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGF4UmF0ZVwiIC8+PC92ZHItYWZmaXhlZC1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidvcmRlci50YXgtZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCIgZm9yPVwidGF4RGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48aW5wdXQgaWQ9XCJ0YXhEZXNjcmlwdGlvblwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGF4RGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz48L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VyY2hhcmdlRm9ybS5pbnZhbGlkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cmNoYXJnZUZvcm0ucHJpc3RpbmUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VyY2hhcmdlRm9ybS5nZXQoJ3ByaWNlJyk/LnZhbHVlID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIuYWRkLXN1cmNoYXJnZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItYWNjb3JkaW9uLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi10aXRsZT57eyAnb3JkZXIuZWRpdC1zaGlwcGluZy1hZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fTwvY2xyLWFjY29yZGlvbi10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1jb250ZW50ICpjbHJJZkV4cGFuZGVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWFkZHJlc3MtZm9ybVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJzaGlwcGluZ0FkZHJlc3NGb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVDb3VudHJpZXNdPVwiYXZhaWxhYmxlQ291bnRyaWVzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwiYWRkcmVzc0N1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1hZGRyZXNzLWZvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItYWNjb3JkaW9uLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFjY29yZGlvbi10aXRsZT57eyAnb3JkZXIuZWRpdC1iaWxsaW5nLWFkZHJlc3MnIHwgdHJhbnNsYXRlIH19PC9jbHItYWNjb3JkaW9uLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItYWNjb3JkaW9uLWNvbnRlbnQgKmNscklmRXhwYW5kZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItYWRkcmVzcy1mb3JtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImJpbGxpbmdBZGRyZXNzRm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlQ291bnRyaWVzXT1cImF2YWlsYWJsZUNvdW50cmllcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImFkZHJlc3NDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItYWRkcmVzcy1mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xyLWFjY29yZGlvbi1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPC9jbHItYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICA8L2Nsci1hY2NvcmRpb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNsci1jb2wtbGctNCBvcmRlci1jYXJkc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLm1vZGlmaWNhdGlvbi1zdW1tYXJ5JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwibW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlci5tb2RpZmljYXRpb24tYWRkaW5nLWl0ZW1zJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBjb3VudDogbW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcz8ubGVuZ3RoIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cIm1vZGlmeU9yZGVySW5wdXQuYWRqdXN0T3JkZXJMaW5lcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlci5tb2RpZmljYXRpb24tYWRqdXN0aW5nLWxpbmVzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBjb3VudDogbW9kaWZ5T3JkZXJJbnB1dC5hZGp1c3RPcmRlckxpbmVzPy5sZW5ndGggfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwibW9kaWZ5T3JkZXJJbnB1dC5zdXJjaGFyZ2VzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLm1vZGlmaWNhdGlvbi1hZGRpbmctc3VyY2hhcmdlcydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgY291bnQ6IG1vZGlmeU9yZGVySW5wdXQuc3VyY2hhcmdlcz8ubGVuZ3RoIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cInNoaXBwaW5nQWRkcmVzc0Zvcm0uZGlydHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5tb2RpZmljYXRpb24tdXBkYXRpbmctc2hpcHBpbmctYWRkcmVzcycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiYmlsbGluZ0FkZHJlc3NGb3JtLmRpcnR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIubW9kaWZpY2F0aW9uLXVwZGF0aW5nLWJpbGxpbmctYWRkcmVzcycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNsci1jb250cm9sLWxhYmVsXCI+e3sgJ29yZGVyLm5vdGUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJub3RlXCIgbmFtZT1cIm5vdGVcIiBjbHJUZXh0YXJlYSByZXF1aXJlZD48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItY2hlY2tib3gtd3JhcHBlciBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xyQ2hlY2tib3ggWyhuZ01vZGVsKV09XCJyZWNhbGN1bGF0ZVNoaXBwaW5nXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdvcmRlci5tb2RpZmljYXRpb24tcmVjYWxjdWxhdGUtc2hpcHBpbmcnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5QcmV2aWV3Q2hhbmdlcygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpZXdBbmRNb2RpZnkob3JkZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5wcmV2aWV3LWNoYW5nZXMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==