@vendure/admin-ui 3.1.0-next.2 → 3.1.0-next.4

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 (183) hide show
  1. package/catalog/components/collection-data-table/collection-data-table.component.d.ts +3 -5
  2. package/catalog/components/collection-detail/collection-detail.component.d.ts +1 -1
  3. package/catalog/components/collection-list/collection-list.component.d.ts +1 -0
  4. package/catalog/components/facet-detail/facet-detail.component.d.ts +1 -1
  5. package/catalog/components/facet-list/facet-list.component.d.ts +1 -0
  6. package/catalog/components/product-detail/product-detail.component.d.ts +1 -1
  7. package/catalog/components/product-list/product-list.component.d.ts +3 -1
  8. package/catalog/components/product-variant-list/product-variant-list.component.d.ts +1 -1
  9. package/core/common/base-list.component.d.ts +13 -0
  10. package/core/common/generated-types.d.ts +1188 -139
  11. package/core/common/utilities/custom-field-default-value.d.ts +1 -1
  12. package/core/common/version.d.ts +1 -1
  13. package/core/data/definitions/order-definitions.d.ts +2 -0
  14. package/core/data/definitions/settings-definitions.d.ts +1 -0
  15. package/core/data/providers/base-data.service.d.ts +19 -2
  16. package/core/data/providers/collection-data.service.d.ts +2 -2
  17. package/core/data/providers/data.service.d.ts +3 -3
  18. package/core/data/providers/order-data.service.d.ts +2 -0
  19. package/core/data/query-result.d.ts +60 -4
  20. package/core/data/utils/add-custom-fields.d.ts +1 -1
  21. package/core/providers/alerts/alerts.service.d.ts +3 -0
  22. package/core/providers/auth/auth.service.d.ts +3 -1
  23. package/core/providers/data-table/data-table-config.service.d.ts +12 -0
  24. package/core/public_api.d.ts +2 -0
  25. package/core/shared/components/asset-preview-links/asset-preview-links.component.d.ts +1 -0
  26. package/core/shared/components/assets/assets.component.d.ts +2 -1
  27. package/core/shared/components/data-table-2/data-table2.component.d.ts +5 -5
  28. package/core/shared/components/data-table-filter-presets/data-table-filter-presets.component.d.ts +1 -0
  29. package/core/shared/components/data-table-filter-presets/filter-preset.service.d.ts +3 -4
  30. package/core/shared/components/facet-value-chip/facet-value-chip.component.d.ts +4 -2
  31. package/core/shared/components/product-variant-selector/product-variant-selector.component.d.ts +1 -1
  32. package/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.d.ts +21 -2
  33. package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +2 -1
  34. package/core/shared/dynamic-form-inputs/default-form-inputs.d.ts +2 -1
  35. package/core/shared/dynamic-form-inputs/struct-form-input/struct-form-input.component.d.ts +34 -0
  36. package/core/shared/shared.module.d.ts +12 -11
  37. package/customer/components/customer-detail/customer-detail.component.d.ts +1 -1
  38. package/customer/components/customer-group-detail/customer-group-detail.component.d.ts +1 -1
  39. package/customer/components/customer-group-list/customer-group-list.component.d.ts +2 -0
  40. package/customer/components/customer-list/customer-list.component.d.ts +1 -0
  41. package/esm2022/catalog/components/collection-contents/collection-contents.component.mjs +1 -1
  42. package/esm2022/catalog/components/collection-data-table/collection-data-table.component.mjs +10 -12
  43. package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +1 -1
  44. package/esm2022/catalog/components/collection-list/collection-list.component.mjs +4 -3
  45. package/esm2022/catalog/components/facet-list/facet-list.component.mjs +4 -3
  46. package/esm2022/catalog/components/move-collections-dialog/move-collections-dialog.component.mjs +1 -1
  47. package/esm2022/catalog/components/product-detail/product-detail.component.mjs +1 -1
  48. package/esm2022/catalog/components/product-list/product-list.component.mjs +5 -3
  49. package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +1 -1
  50. package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +1 -1
  51. package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +1 -1
  52. package/esm2022/catalog/components/product-variant-quick-jump/product-variant-quick-jump.component.mjs +2 -2
  53. package/esm2022/catalog/components/product-variants-editor/product-variants-editor.component.mjs +1 -1
  54. package/esm2022/core/common/base-list.component.mjs +20 -4
  55. package/esm2022/core/common/generated-types.mjs +17 -13
  56. package/esm2022/core/common/introspection-result.mjs +22 -1
  57. package/esm2022/core/common/utilities/custom-field-default-value.mjs +3 -1
  58. package/esm2022/core/common/version.mjs +2 -2
  59. package/esm2022/core/components/app-shell/app-shell.component.mjs +3 -3
  60. package/esm2022/core/data/data.module.mjs +3 -3
  61. package/esm2022/core/data/definitions/facet-definitions.mjs +2 -1
  62. package/esm2022/core/data/definitions/order-definitions.mjs +17 -1
  63. package/esm2022/core/data/definitions/settings-definitions.mjs +52 -1
  64. package/esm2022/core/data/providers/base-data.service.mjs +7 -8
  65. package/esm2022/core/data/providers/collection-data.service.mjs +3 -3
  66. package/esm2022/core/data/providers/data.service.mjs +5 -5
  67. package/esm2022/core/data/providers/order-data.service.mjs +8 -2
  68. package/esm2022/core/data/providers/product-data.service.mjs +4 -2
  69. package/esm2022/core/data/query-result.mjs +98 -10
  70. package/esm2022/core/data/utils/add-custom-fields.mjs +59 -30
  71. package/esm2022/core/providers/alerts/alerts.service.mjs +13 -3
  72. package/esm2022/core/providers/auth/auth.service.mjs +11 -7
  73. package/esm2022/core/providers/data-table/data-table-config.service.mjs +43 -0
  74. package/esm2022/core/providers/data-table/data-table-filter-collection.mjs +3 -2
  75. package/esm2022/core/providers/data-table/data-table-sort-collection.mjs +2 -1
  76. package/esm2022/core/public_api.mjs +3 -1
  77. package/esm2022/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.mjs +1 -1
  78. package/esm2022/core/shared/components/asset-preview-links/asset-preview-links.component.mjs +3 -2
  79. package/esm2022/core/shared/components/assets/assets.component.mjs +10 -4
  80. package/esm2022/core/shared/components/card/card.component.mjs +1 -1
  81. package/esm2022/core/shared/components/currency-code-selector/currency-code-selector.component.mjs +1 -1
  82. package/esm2022/core/shared/components/data-table-2/data-table-custom-field-column.component.mjs +3 -3
  83. package/esm2022/core/shared/components/data-table-2/data-table2.component.mjs +44 -52
  84. package/esm2022/core/shared/components/data-table-filter-presets/data-table-filter-presets.component.mjs +23 -3
  85. package/esm2022/core/shared/components/data-table-filter-presets/filter-preset.service.mjs +23 -35
  86. package/esm2022/core/shared/components/dropdown/dropdown-trigger.directive.mjs +1 -1
  87. package/esm2022/core/shared/components/facet-value-chip/facet-value-chip.component.mjs +8 -3
  88. package/esm2022/core/shared/components/help-tooltip/help-tooltip.component.mjs +1 -1
  89. package/esm2022/core/shared/components/language-code-selector/language-code-selector.component.mjs +1 -1
  90. package/esm2022/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.mjs +2 -2
  91. package/esm2022/core/shared/components/product-variant-selector/product-variant-selector.component.mjs +2 -2
  92. package/esm2022/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +78 -13
  93. package/esm2022/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.mjs +33 -1
  94. package/esm2022/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +3 -2
  95. package/esm2022/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.mjs +2 -1
  96. package/esm2022/core/shared/directives/disabled.directive.mjs +1 -1
  97. package/esm2022/core/shared/dynamic-form-inputs/default-form-inputs.mjs +3 -1
  98. package/esm2022/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +9 -1
  99. package/esm2022/core/shared/dynamic-form-inputs/struct-form-input/struct-form-input.component.mjs +52 -0
  100. package/esm2022/core/shared/pipes/locale-base.pipe.mjs +2 -2
  101. package/esm2022/core/shared/pipes/state-i18n-token.pipe.mjs +1 -1
  102. package/esm2022/core/shared/shared.module.mjs +7 -3
  103. package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +1 -1
  104. package/esm2022/customer/components/customer-group-list/customer-group-list.component.mjs +5 -3
  105. package/esm2022/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +1 -1
  106. package/esm2022/customer/components/customer-list/customer-list.component.mjs +4 -3
  107. package/esm2022/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +1 -1
  108. package/esm2022/dashboard/widgets/test-widget/test-widget.component.mjs +1 -1
  109. package/esm2022/marketing/components/promotion-list/promotion-list.component.mjs +4 -3
  110. package/esm2022/order/components/draft-order-detail/draft-order-detail.component.mjs +34 -3
  111. package/esm2022/order/components/order-data-table/order-data-table.component.mjs +1 -14
  112. package/esm2022/order/components/order-editor/order-editor.component.mjs +1 -1
  113. package/esm2022/order/components/order-list/order-list.component.mjs +4 -3
  114. package/esm2022/order/components/order-payment-card/order-payment-card.component.mjs +1 -1
  115. package/esm2022/order/components/order-state-select-dialog/order-state-select-dialog.component.mjs +1 -1
  116. package/esm2022/order/components/refund-order-dialog/refund-order-dialog.component.mjs +3 -3
  117. package/esm2022/order/order.routes.mjs +1 -2
  118. package/esm2022/settings/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.mjs +3 -3
  119. package/esm2022/settings/components/administrator-list/administrator-list.component.mjs +4 -3
  120. package/esm2022/settings/components/channel-list/channel-list.component.mjs +4 -3
  121. package/esm2022/settings/components/country-list/country-list.component.mjs +4 -3
  122. package/esm2022/settings/components/payment-method-list/payment-method-list.component.mjs +4 -3
  123. package/esm2022/settings/components/role-list/role-list.component.mjs +4 -3
  124. package/esm2022/settings/components/seller-list/seller-list.component.mjs +4 -3
  125. package/esm2022/settings/components/shipping-method-list/shipping-method-list.component.mjs +4 -3
  126. package/esm2022/settings/components/stock-location-list/stock-location-list.component.mjs +4 -3
  127. package/esm2022/settings/components/tax-category-list/tax-category-list.component.mjs +4 -3
  128. package/esm2022/settings/components/tax-rate-list/tax-rate-list.component.mjs +4 -3
  129. package/esm2022/settings/components/zone-list/zone-list.component.mjs +4 -3
  130. package/esm2022/settings/components/zone-member-list/zone-member-list.component.mjs +1 -1
  131. package/esm2022/system/components/job-list/job-list.component.mjs +1 -1
  132. package/esm2022/system/components/job-state-label/job-state-label.component.mjs +1 -1
  133. package/fesm2022/vendure-admin-ui-catalog.mjs +26 -24
  134. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  135. package/fesm2022/vendure-admin-ui-core.mjs +750 -309
  136. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  137. package/fesm2022/vendure-admin-ui-customer.mjs +9 -6
  138. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  139. package/fesm2022/vendure-admin-ui-dashboard.mjs +1 -1
  140. package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
  141. package/fesm2022/vendure-admin-ui-marketing.mjs +3 -2
  142. package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
  143. package/fesm2022/vendure-admin-ui-order.mjs +38 -20
  144. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  145. package/fesm2022/vendure-admin-ui-react.mjs.map +1 -1
  146. package/fesm2022/vendure-admin-ui-settings.mjs +36 -25
  147. package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
  148. package/fesm2022/vendure-admin-ui-system.mjs +1 -1
  149. package/fesm2022/vendure-admin-ui-system.mjs.map +1 -1
  150. package/marketing/components/promotion-detail/promotion-detail.component.d.ts +1 -1
  151. package/marketing/components/promotion-list/promotion-list.component.d.ts +1 -0
  152. package/order/components/draft-order-detail/draft-order-detail.component.d.ts +1 -0
  153. package/order/components/order-data-table/order-data-table.component.d.ts +2 -3
  154. package/order/components/order-detail/order-detail.component.d.ts +1 -1
  155. package/order/components/order-list/order-list.component.d.ts +1 -0
  156. package/package.json +18 -18
  157. package/settings/components/admin-detail/admin-detail.component.d.ts +1 -1
  158. package/settings/components/administrator-list/administrator-list.component.d.ts +1 -0
  159. package/settings/components/channel-detail/channel-detail.component.d.ts +1 -1
  160. package/settings/components/channel-list/channel-list.component.d.ts +1 -0
  161. package/settings/components/country-detail/country-detail.component.d.ts +1 -1
  162. package/settings/components/country-list/country-list.component.d.ts +1 -0
  163. package/settings/components/global-settings/global-settings.component.d.ts +1 -1
  164. package/settings/components/payment-method-detail/payment-method-detail.component.d.ts +1 -1
  165. package/settings/components/payment-method-list/payment-method-list.component.d.ts +1 -0
  166. package/settings/components/profile/profile.component.d.ts +1 -1
  167. package/settings/components/role-list/role-list.component.d.ts +1 -0
  168. package/settings/components/seller-detail/seller-detail.component.d.ts +1 -1
  169. package/settings/components/seller-list/seller-list.component.d.ts +1 -0
  170. package/settings/components/shipping-method-detail/shipping-method-detail.component.d.ts +1 -1
  171. package/settings/components/shipping-method-list/shipping-method-list.component.d.ts +1 -0
  172. package/settings/components/stock-location-detail/stock-location-detail.component.d.ts +1 -1
  173. package/settings/components/stock-location-list/stock-location-list.component.d.ts +1 -0
  174. package/settings/components/tax-category-detail/tax-category-detail.component.d.ts +1 -1
  175. package/settings/components/tax-category-list/tax-category-list.component.d.ts +1 -0
  176. package/settings/components/tax-rate-detail/tax-rate-detail.component.d.ts +1 -1
  177. package/settings/components/tax-rate-list/tax-rate-list.component.d.ts +1 -0
  178. package/settings/components/zone-detail/zone-detail.component.d.ts +1 -1
  179. package/settings/components/zone-list/zone-list.component.d.ts +1 -0
  180. package/static/i18n-messages/en.json +6 -2
  181. package/static/i18n-messages/pt_PT.json +1 -0
  182. package/static/i18n-messages/sv.json +12 -12
  183. package/static/styles/component/prosemirror.scss +2 -0
@@ -1,4 +1,4 @@
1
- import { ADD_ITEM_TO_DRAFT_ORDER, ADD_MANUAL_PAYMENT_TO_ORDER, ADD_NOTE_TO_ORDER, ADJUST_DRAFT_ORDER_LINE, APPLY_COUPON_CODE_TO_DRAFT_ORDER, CANCEL_ORDER, CANCEL_PAYMENT, CREATE_DRAFT_ORDER, CREATE_FULFILLMENT, DELETE_DRAFT_ORDER, DELETE_ORDER_NOTE, DRAFT_ORDER_ELIGIBLE_SHIPPING_METHODS, GET_ORDER, GET_ORDER_HISTORY, GET_ORDERS_LIST, MODIFY_ORDER, REFUND_ORDER, REMOVE_COUPON_CODE_FROM_DRAFT_ORDER, REMOVE_DRAFT_ORDER_LINE, SET_BILLING_ADDRESS_FOR_DRAFT_ORDER, SET_CUSTOMER_FOR_DRAFT_ORDER, SET_DRAFT_ORDER_SHIPPING_METHOD, SET_SHIPPING_ADDRESS_FOR_DRAFT_ORDER, SETTLE_PAYMENT, SETTLE_REFUND, TRANSITION_FULFILLMENT_TO_STATE, TRANSITION_ORDER_TO_STATE, TRANSITION_PAYMENT_TO_STATE, UPDATE_ORDER_CUSTOM_FIELDS, UPDATE_ORDER_NOTE, } from '../definitions/order-definitions';
1
+ import { ADD_ITEM_TO_DRAFT_ORDER, ADD_MANUAL_PAYMENT_TO_ORDER, ADD_NOTE_TO_ORDER, ADJUST_DRAFT_ORDER_LINE, APPLY_COUPON_CODE_TO_DRAFT_ORDER, CANCEL_ORDER, CANCEL_PAYMENT, CREATE_DRAFT_ORDER, CREATE_FULFILLMENT, DELETE_DRAFT_ORDER, DELETE_ORDER_NOTE, DRAFT_ORDER_ELIGIBLE_SHIPPING_METHODS, GET_ORDER, GET_ORDER_HISTORY, GET_ORDERS_LIST, MODIFY_ORDER, REFUND_ORDER, REMOVE_COUPON_CODE_FROM_DRAFT_ORDER, REMOVE_DRAFT_ORDER_LINE, SET_BILLING_ADDRESS_FOR_DRAFT_ORDER, SET_CUSTOMER_FOR_DRAFT_ORDER, SET_DRAFT_ORDER_SHIPPING_METHOD, SET_SHIPPING_ADDRESS_FOR_DRAFT_ORDER, SETTLE_PAYMENT, SETTLE_REFUND, TRANSITION_FULFILLMENT_TO_STATE, TRANSITION_ORDER_TO_STATE, TRANSITION_PAYMENT_TO_STATE, UNSET_BILLING_ADDRESS_FOR_DRAFT_ORDER, UNSET_SHIPPING_ADDRESS_FOR_DRAFT_ORDER, UPDATE_ORDER_CUSTOM_FIELDS, UPDATE_ORDER_NOTE, } from '../definitions/order-definitions';
2
2
  export class OrderDataService {
3
3
  constructor(baseDataService) {
4
4
  this.baseDataService = baseDataService;
@@ -119,6 +119,12 @@ export class OrderDataService {
119
119
  setDraftOrderBillingAddress(orderId, input) {
120
120
  return this.baseDataService.mutate(SET_BILLING_ADDRESS_FOR_DRAFT_ORDER, { orderId, input });
121
121
  }
122
+ unsetDraftOrderShippingAddress(orderId) {
123
+ return this.baseDataService.mutate(UNSET_SHIPPING_ADDRESS_FOR_DRAFT_ORDER, { orderId });
124
+ }
125
+ unsetDraftOrderBillingAddress(orderId) {
126
+ return this.baseDataService.mutate(UNSET_BILLING_ADDRESS_FOR_DRAFT_ORDER, { orderId });
127
+ }
122
128
  applyCouponCodeToDraftOrder(orderId, couponCode) {
123
129
  return this.baseDataService.mutate(APPLY_COUPON_CODE_TO_DRAFT_ORDER, { orderId, couponCode });
124
130
  }
@@ -132,4 +138,4 @@ export class OrderDataService {
132
138
  return this.baseDataService.mutate(SET_DRAFT_ORDER_SHIPPING_METHOD, { orderId, shippingMethodId });
133
139
  }
134
140
  }
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9kYXRhL3Byb3ZpZGVycy9vcmRlci1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0IsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixnQ0FBZ0MsRUFDaEMsWUFBWSxFQUNaLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIscUNBQXFDLEVBQ3JDLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFlBQVksRUFDWixZQUFZLEVBQ1osbUNBQW1DLEVBQ25DLHVCQUF1QixFQUN2QixtQ0FBbUMsRUFDbkMsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQixvQ0FBb0MsRUFDcEMsY0FBYyxFQUNkLGFBQWEsRUFDYiwrQkFBK0IsRUFDL0IseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIsaUJBQWlCLEdBQ3BCLE1BQU0sa0NBQWtDLENBQUM7QUFJMUMsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixZQUFvQixlQUFnQztRQUFoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFBRyxDQUFDO0lBRXhELFNBQVMsQ0FBQyxVQUFvQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7UUFDdEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FDN0IsZUFBZSxFQUNmO1lBQ0ksT0FBTztTQUNWLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxRQUFRLENBQUMsRUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQXdELFNBQVMsRUFBRTtZQUNoRyxFQUFFO1NBQ0wsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxF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LEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxPQUFlLEVBQUUsS0FBaUM7UUFDMUUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FHaEMsbUNBQW1DLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsMkJBQTJCLENBQUMsT0FBZSxFQUFFLFVBQWtCO1FBQzNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBR2hDLGdDQUFnQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELDhCQUE4QixDQUFDLE9BQWUsRUFBRSxVQUFrQjtRQUM5RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUdoQyxtQ0FBbUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxvQ0FBb0MsQ0FBQyxPQUFlO1FBQ2hELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBRy9CLHFDQUFxQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsMkJBQTJCLENBQUMsT0FBZSxFQUFFLGdCQUF3QjtRQUNqRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUdoQywrQkFBK0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQ29kZWdlbiBmcm9tICcuLi8uLi9jb21tb24vZ2VuZXJhdGVkLXR5cGVzJztcclxuaW1wb3J0IHtcclxuICAgIEFERF9JVEVNX1RPX0RSQUZUX09SREVSLFxyXG4gICAgQUREX01BTlVBTF9QQVlNRU5UX1RPX09SREVSLFxyXG4gICAgQUREX05PVEVfVE9fT1JERVIsXHJcbiAgICBBREpVU1RfRFJBRlRfT1JERVJfTElORSxcclxuICAgIEFQUExZX0NPVVBPTl9DT0RFX1RPX0RSQUZUX09SREVSLFxyXG4gICAgQ0FOQ0VMX09SREVSLFxyXG4gICAgQ0FOQ0VMX1BBWU1FTlQsXHJcbiAgICBDUkVBVEVfRFJBRlRfT1JERVIsXHJcbiAgICBDUkVBVEVfRlVMRklMTE1FTlQsXHJcbiAgICBERUxFVEVfRFJBRlRfT1JERVIsXHJcbiAgICBERUxFVEVfT1JERVJfTk9URSxcclxuICAgIERSQUZUX09SREVSX0VMSUdJQkxFX1NISVBQSU5HX01FVEhPRFMsXHJcbiAgICBHRVRfT1JERVIsXHJcbiAgICBHRVRfT1JERVJfSElTVE9SWSxcclxuICAgIEdFVF9PUkRFUlNfTElTVCxcclxuICAgIE1PRElGWV9PUkRFUixcclxuICAgIFJFRlVORF9PUkRFUixcclxuICAgIFJFTU9WRV9DT1VQT05fQ09ERV9GUk9NX0RSQUZUX09SREVSLFxyXG4gICAgUkVNT1ZFX0RSQUZUX09SREVSX0xJTkUsXHJcbiAgICBTRVRfQklMTElOR19BRERSRVNTX0ZPUl9EUkFGVF9PUkRFUixcclxuICAgIFNFVF9DVVNUT01FUl9GT1JfRFJBRlRfT1JERVIsXHJcbiAgICBTRVRfRFJBRlRfT1JERVJfU0hJUFBJTkdfTUVUSE9ELFxyXG4gICAgU0VUX1NISVBQSU5HX0FERFJFU1NfRk9SX0RSQUZUX09SREVSLFxyXG4gICAgU0VUVExFX1BBWU1FTlQsXHJcbiAgICBTRVRUTEVfUkVGVU5ELFxyXG4gICAgVFJBTlNJVElPTl9GVUxGSUxMTUVOVF9UT19TVEFURSxcclxuICAgIFRSQU5TSVRJT05fT1JERVJfVE9fU1RBVEUsXHJcbiAgICBUUkFOU0lUSU9OX1BBWU1FTlRfVE9fU1RBVEUsXHJcbiAgICBVUERBVEVfT1JERVJfQ1VTVE9NX0ZJRUxEUyxcclxuICAgIFVQREFURV9PUkRFUl9OT1RFLFxyXG59IGZyb20gJy4uL2RlZmluaXRpb25zL29yZGVyLWRlZmluaXRpb25zJztcclxuXHJcbmltcG9ydCB7IEJhc2VEYXRhU2VydmljZSB9IGZyb20gJy4vYmFzZS1kYXRhLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE9yZGVyRGF0YVNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBiYXNlRGF0YVNlcnZpY2U6IEJhc2VEYXRhU2VydmljZSkge31cclxuXHJcbiAgICBnZXRPcmRlcnMob3B0aW9uczogQ29kZWdlbi5PcmRlckxpc3RPcHRpb25zID0geyB0YWtlOiAxMCB9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PENvZGVnZW4uR2V0T3JkZXJMaXN0UXVlcnksIENvZGVnZW4uR2V0T3JkZXJMaXN0UXVlcnlWYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBHRVRfT1JERVJTX0xJU1QsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPcmRlcihpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PENvZGVnZW4uR2V0T3JkZXJRdWVyeSwgQ29kZWdlbi5HZXRPcmRlclF1ZXJ5VmFyaWFibGVzPihHRVRfT1JERVIsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3JkZXJIaXN0b3J5KGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb2RlZ2VuLkhpc3RvcnlFbnRyeUxpc3RPcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldE9yZGVySGlzdG9yeVF1ZXJ5LFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldE9yZGVySGlzdG9yeVF1ZXJ5VmFyaWFibGVzXHJcbiAgICAgICAgPihHRVRfT1JERVJfSElTVE9SWSwge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR0bGVQYXltZW50KGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlNldHRsZVBheW1lbnRNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5TZXR0bGVQYXltZW50TXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFNFVFRMRV9QQVlNRU5ULCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbFBheW1lbnQoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uQ2FuY2VsUGF5bWVudE11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkNhbmNlbFBheW1lbnRNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQ0FOQ0VMX1BBWU1FTlQsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhbnNpdGlvblBheW1lbnRUb1N0YXRlKGlkOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlRyYW5zaXRpb25QYXltZW50VG9TdGF0ZU11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlRyYW5zaXRpb25QYXltZW50VG9TdGF0ZU11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihUUkFOU0lUSU9OX1BBWU1FTlRfVE9fU1RBVEUsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgIHN0YXRlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUZ1bGZpbGxtZW50KGlucHV0OiBDb2RlZ2VuLkZ1bGZpbGxPcmRlcklucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5DcmVhdGVGdWxmaWxsbWVudE11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkNyZWF0ZUZ1bGZpbGxtZW50TXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KENSRUFURV9GVUxGSUxMTUVOVCwge1xyXG4gICAgICAgICAgICBpbnB1dCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uRnVsZmlsbG1lbnRUb1N0YXRlKGlkOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlRyYW5zaXRpb25GdWxmaWxsbWVudFRvU3RhdGVNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5UcmFuc2l0aW9uRnVsZmlsbG1lbnRUb1N0YXRlTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFRSQU5TSVRJT05fRlVMRklMTE1FTlRfVE9fU1RBVEUsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgIHN0YXRlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbE9yZGVyKGlucHV0OiBDb2RlZ2VuLkNhbmNlbE9yZGVySW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPENvZGVnZW4uQ2FuY2VsT3JkZXJNdXRhdGlvbiwgQ29kZWdlbi5DYW5jZWxPcmRlck11dGF0aW9uVmFyaWFibGVzPihcclxuICAgICAgICAgICAgQ0FOQ0VMX09SREVSLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZnVuZE9yZGVyKGlucHV0OiBDb2RlZ2VuLlJlZnVuZE9yZGVySW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPENvZGVnZW4uUmVmdW5kT3JkZXJNdXRhdGlvbiwgQ29kZWdlbi5SZWZ1bmRPcmRlck11dGF0aW9uVmFyaWFibGVzPihcclxuICAgICAgICAgICAgUkVGVU5EX09SREVSLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHRsZVJlZnVuZChpbnB1dDogQ29kZWdlbi5TZXR0bGVSZWZ1bmRJbnB1dCwgb3JkZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5TZXR0bGVSZWZ1bmRNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5TZXR0bGVSZWZ1bmRNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oU0VUVExFX1JFRlVORCwge1xyXG4gICAgICAgICAgICBpbnB1dCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGROb3RlVG9PcmRlcihpbnB1dDogQ29kZWdlbi5BZGROb3RlVG9PcmRlcklucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5BZGROb3RlVG9PcmRlck11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFkZE5vdGVUb09yZGVyTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KEFERF9OT1RFX1RPX09SREVSLCB7XHJcbiAgICAgICAgICAgIGlucHV0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZU9yZGVyTm90ZShpbnB1dDogQ29kZWdlbi5VcGRhdGVPcmRlck5vdGVJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uVXBkYXRlT3JkZXJOb3RlTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uVXBkYXRlT3JkZXJOb3RlTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFVQREFURV9PUkRFUl9OT1RFLCB7XHJcbiAgICAgICAgICAgIGlucHV0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZU9yZGVyTm90ZShpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVPcmRlck5vdGVNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVPcmRlck5vdGVNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oREVMRVRFX09SREVSX05PVEUsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhbnNpdGlvblRvU3RhdGUoaWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uVHJhbnNpdGlvbk9yZGVyVG9TdGF0ZU11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlRyYW5zaXRpb25PcmRlclRvU3RhdGVNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oVFJBTlNJVElPTl9PUkRFUl9UT19TVEFURSwge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgc3RhdGUsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlT3JkZXJDdXN0b21GaWVsZHMoaW5wdXQ6IENvZGVnZW4uVXBkYXRlT3JkZXJJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uVXBkYXRlT3JkZXJDdXN0b21GaWVsZHNNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5VcGRhdGVPcmRlckN1c3RvbUZpZWxkc011dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihVUERBVEVfT1JERVJfQ1VTVE9NX0ZJRUxEUywge1xyXG4gICAgICAgICAgICBpbnB1dCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RpZnlPcmRlcihpbnB1dDogQ29kZWdlbi5Nb2RpZnlPcmRlcklucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxDb2RlZ2VuLk1vZGlmeU9yZGVyTXV0YXRpb24sIENvZGVnZW4uTW9kaWZ5T3JkZXJNdXRhdGlvblZhcmlhYmxlcz4oXHJcbiAgICAgICAgICAgIE1PRElGWV9PUkRFUixcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRNYW51YWxQYXltZW50VG9PcmRlcihpbnB1dDogQ29kZWdlbi5NYW51YWxQYXltZW50SW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFkZE1hbnVhbFBheW1lbnRNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5BZGRNYW51YWxQYXltZW50TXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KEFERF9NQU5VQUxfUEFZTUVOVF9UT19PUkRFUiwgeyBpbnB1dCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVEcmFmdE9yZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8Q29kZWdlbi5DcmVhdGVEcmFmdE9yZGVyTXV0YXRpb24+KENSRUFURV9EUkFGVF9PUkRFUik7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlRHJhZnRPcmRlcihvcmRlcklkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRlbGV0ZURyYWZ0T3JkZXJNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVEcmFmdE9yZGVyTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KERFTEVURV9EUkFGVF9PUkRFUiwgeyBvcmRlcklkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEl0ZW1Ub0RyYWZ0T3JkZXIob3JkZXJJZDogc3RyaW5nLCBpbnB1dDogQ29kZWdlbi5BZGRJdGVtVG9EcmFmdE9yZGVySW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFkZEl0ZW1Ub0RyYWZ0T3JkZXJNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5BZGRJdGVtVG9EcmFmdE9yZGVyTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KEFERF9JVEVNX1RPX0RSQUZUX09SREVSLCB7IG9yZGVySWQsIGlucHV0IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkanVzdERyYWZ0T3JkZXJMaW5lKG9yZGVySWQ6IHN0cmluZywgaW5wdXQ6IENvZGVnZW4uQWRqdXN0RHJhZnRPcmRlckxpbmVJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uQWRqdXN0RHJhZnRPcmRlckxpbmVNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5BZGp1c3REcmFmdE9yZGVyTGluZU11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihBREpVU1RfRFJBRlRfT1JERVJfTElORSwgeyBvcmRlcklkLCBpbnB1dCB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVEcmFmdE9yZGVyTGluZShvcmRlcklkOiBzdHJpbmcsIG9yZGVyTGluZUlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlJlbW92ZURyYWZ0T3JkZXJMaW5lTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uUmVtb3ZlRHJhZnRPcmRlckxpbmVNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oUkVNT1ZFX0RSQUZUX09SREVSX0xJTkUsIHsgb3JkZXJJZCwgb3JkZXJMaW5lSWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q3VzdG9tZXJGb3JEcmFmdE9yZGVyKFxyXG4gICAgICAgIG9yZGVySWQ6IHN0cmluZyxcclxuICAgICAgICB7IGN1c3RvbWVySWQsIGlucHV0IH06IHsgY3VzdG9tZXJJZD86IHN0cmluZzsgaW5wdXQ/OiBDb2RlZ2VuLkNyZWF0ZUN1c3RvbWVySW5wdXQgfSxcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uU2V0Q3VzdG9tZXJGb3JEcmFmdE9yZGVyTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uU2V0Q3VzdG9tZXJGb3JEcmFmdE9yZGVyTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFNFVF9DVVNUT01FUl9GT1JfRFJBRlRfT1JERVIsIHsgb3JkZXJJZCwgY3VzdG9tZXJJZCwgaW5wdXQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RHJhZnRPcmRlclNoaXBwaW5nQWRkcmVzcyhvcmRlcklkOiBzdHJpbmcsIGlucHV0OiBDb2RlZ2VuLkNyZWF0ZUFkZHJlc3NJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uU2V0RHJhZnRPcmRlclNoaXBwaW5nQWRkcmVzc011dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlNldERyYWZ0T3JkZXJTaGlwcGluZ0FkZHJlc3NNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oU0VUX1NISVBQSU5HX0FERFJFU1NfRk9SX0RSQUZUX09SREVSLCB7IG9yZGVySWQsIGlucHV0IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERyYWZ0T3JkZXJCaWxsaW5nQWRkcmVzcyhvcmRlcklkOiBzdHJpbmcsIGlucHV0OiBDb2RlZ2VuLkNyZWF0ZUFkZHJlc3NJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uU2V0RHJhZnRPcmRlckJpbGxpbmdBZGRyZXNzTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uU2V0RHJhZnRPcmRlckJpbGxpbmdBZGRyZXNzTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFNFVF9CSUxMSU5HX0FERFJFU1NfRk9SX0RSQUZUX09SREVSLCB7IG9yZGVySWQsIGlucHV0IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5Q291cG9uQ29kZVRvRHJhZnRPcmRlcihvcmRlcklkOiBzdHJpbmcsIGNvdXBvbkNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uQXBwbHlDb3Vwb25Db2RlVG9EcmFmdE9yZGVyTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQXBwbHlDb3Vwb25Db2RlVG9EcmFmdE9yZGVyTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KEFQUExZX0NPVVBPTl9DT0RFX1RPX0RSQUZUX09SREVSLCB7IG9yZGVySWQsIGNvdXBvbkNvZGUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ291cG9uQ29kZUZyb21EcmFmdE9yZGVyKG9yZGVySWQ6IHN0cmluZywgY291cG9uQ29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5SZW1vdmVDb3Vwb25Db2RlRnJvbURyYWZ0T3JkZXJNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5SZW1vdmVDb3Vwb25Db2RlRnJvbURyYWZ0T3JkZXJNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oUkVNT1ZFX0NPVVBPTl9DT0RFX0ZST01fRFJBRlRfT1JERVIsIHsgb3JkZXJJZCwgY291cG9uQ29kZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREcmFmdE9yZGVyRWxpZ2libGVTaGlwcGluZ01ldGhvZHMob3JkZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRyYWZ0T3JkZXJFbGlnaWJsZVNoaXBwaW5nTWV0aG9kc1F1ZXJ5LFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRyYWZ0T3JkZXJFbGlnaWJsZVNoaXBwaW5nTWV0aG9kc1F1ZXJ5VmFyaWFibGVzXHJcbiAgICAgICAgPihEUkFGVF9PUkRFUl9FTElHSUJMRV9TSElQUElOR19NRVRIT0RTLCB7IG9yZGVySWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RHJhZnRPcmRlclNoaXBwaW5nTWV0aG9kKG9yZGVySWQ6IHN0cmluZywgc2hpcHBpbmdNZXRob2RJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5TZXREcmFmdE9yZGVyU2hpcHBpbmdNZXRob2RNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5TZXREcmFmdE9yZGVyU2hpcHBpbmdNZXRob2RNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oU0VUX0RSQUZUX09SREVSX1NISVBQSU5HX01FVEhPRCwgeyBvcmRlcklkLCBzaGlwcGluZ01ldGhvZElkIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9kYXRhL3Byb3ZpZGVycy9vcmRlci1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0IsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixnQ0FBZ0MsRUFDaEMsWUFBWSxFQUNaLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIscUNBQXFDLEVBQ3JDLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFlBQVksRUFDWixZQUFZLEVBQ1osbUNBQW1DLEVBQ25DLHVCQUF1QixFQUN2QixtQ0FBbUMsRUFDbkMsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQixvQ0FBb0MsRUFDcEMsY0FBYyxFQUNkLGFBQWEsRUFDYiwrQkFBK0IsRUFDL0IseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQixxQ0FBcUMsRUFDckMsc0NBQXNDLEVBQ3RDLDBCQUEwQixFQUMxQixpQkFBaUIsR0FDcEIsTUFBTSxrQ0FBa0MsQ0FBQztBQUkxQyxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLFlBQW9CLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUFHLENBQUM7SUFFeEQsU0FBUyxDQUFDLFVBQW9DLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtRQUN0RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUM3QixlQUFlLEVBQ2Y7WUFDSSxPQUFPO1NBQ1YsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBd0QsU0FBUyxFQUFFO1lBQ2hHLEVBQUU7U0FDTCxDQUFDLENBQUM7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QUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIENvZGVnZW4gZnJvbSAnLi4vLi4vY29tbW9uL2dlbmVyYXRlZC10eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBBRERfSVRFTV9UT19EUkFGVF9PUkRFUixcclxuICAgIEFERF9NQU5VQUxfUEFZTUVOVF9UT19PUkRFUixcclxuICAgIEFERF9OT1RFX1RPX09SREVSLFxyXG4gICAgQURKVVNUX0RSQUZUX09SREVSX0xJTkUsXHJcbiAgICBBUFBMWV9DT1VQT05fQ09ERV9UT19EUkFGVF9PUkRFUixcclxuICAgIENBTkNFTF9PUkRFUixcclxuICAgIENBTkNFTF9QQVlNRU5ULFxyXG4gICAgQ1JFQVRFX0RSQUZUX09SREVSLFxyXG4gICAgQ1JFQVRFX0ZVTEZJTExNRU5ULFxyXG4gICAgREVMRVRFX0RSQUZUX09SREVSLFxyXG4gICAgREVMRVRFX09SREVSX05PVEUsXHJcbiAgICBEUkFGVF9PUkRFUl9FTElHSUJMRV9TSElQUElOR19NRVRIT0RTLFxyXG4gICAgR0VUX09SREVSLFxyXG4gICAgR0VUX09SREVSX0hJU1RPUlksXHJcbiAgICBHRVRfT1JERVJTX0xJU1QsXHJcbiAgICBNT0RJRllfT1JERVIsXHJcbiAgICBSRUZVTkRfT1JERVIsXHJcbiAgICBSRU1PVkVfQ09VUE9OX0NPREVfRlJPTV9EUkFGVF9PUkRFUixcclxuICAgIFJFTU9WRV9EUkFGVF9PUkRFUl9MSU5FLFxyXG4gICAgU0VUX0JJTExJTkdfQUREUkVTU19GT1JfRFJBRlRfT1JERVIsXHJcbiAgICBTRVRfQ1VTVE9NRVJfRk9SX0RSQUZUX09SREVSLFxyXG4gICAgU0VUX0RSQUZUX09SREVSX1NISVBQSU5HX01FVEhPRCxcclxuICAgIFNFVF9TSElQUElOR19BRERSRVNTX0ZPUl9EUkFGVF9PUkRFUixcclxuICAgIFNFVFRMRV9QQVlNRU5ULFxyXG4gICAgU0VUVExFX1JFRlVORCxcclxuICAgIFRSQU5TSVRJT05fRlVMRklMTE1FTlRfVE9fU1RBVEUsXHJcbiAgICBUUkFOU0lUSU9OX09SREVSX1RPX1NUQVRFLFxyXG4gICAgVFJBTlNJVElPTl9QQVlNRU5UX1RPX1NUQVRFLFxyXG4gICAgVU5TRVRfQklMTElOR19BRERSRVNTX0ZPUl9EUkFGVF9PUkRFUixcclxuICAgIFVOU0VUX1NISVBQSU5HX0FERFJFU1NfRk9SX0RSQUZUX09SREVSLFxyXG4gICAgVVBEQVRFX09SREVSX0NVU1RPTV9GSUVMRFMsXHJcbiAgICBVUERBVEVfT1JERVJfTk9URSxcclxufSBmcm9tICcuLi9kZWZpbml0aW9ucy9vcmRlci1kZWZpbml0aW9ucyc7XHJcblxyXG5pbXBvcnQgeyBCYXNlRGF0YVNlcnZpY2UgfSBmcm9tICcuL2Jhc2UtZGF0YS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBPcmRlckRhdGFTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYmFzZURhdGFTZXJ2aWNlOiBCYXNlRGF0YVNlcnZpY2UpIHt9XHJcblxyXG4gICAgZ2V0T3JkZXJzKG9wdGlvbnM6IENvZGVnZW4uT3JkZXJMaXN0T3B0aW9ucyA9IHsgdGFrZTogMTAgfSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxDb2RlZ2VuLkdldE9yZGVyTGlzdFF1ZXJ5LCBDb2RlZ2VuLkdldE9yZGVyTGlzdFF1ZXJ5VmFyaWFibGVzPihcclxuICAgICAgICAgICAgR0VUX09SREVSU19MSVNULFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3JkZXIoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxDb2RlZ2VuLkdldE9yZGVyUXVlcnksIENvZGVnZW4uR2V0T3JkZXJRdWVyeVZhcmlhYmxlcz4oR0VUX09SREVSLCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9yZGVySGlzdG9yeShpZDogc3RyaW5nLCBvcHRpb25zPzogQ29kZWdlbi5IaXN0b3J5RW50cnlMaXN0T3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRPcmRlckhpc3RvcnlRdWVyeSxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRPcmRlckhpc3RvcnlRdWVyeVZhcmlhYmxlc1xyXG4gICAgICAgID4oR0VUX09SREVSX0hJU1RPUlksIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dGxlUGF5bWVudChpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5TZXR0bGVQYXltZW50TXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uU2V0dGxlUGF5bWVudE11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihTRVRUTEVfUEFZTUVOVCwge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWxQYXltZW50KGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkNhbmNlbFBheW1lbnRNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5DYW5jZWxQYXltZW50TXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KENBTkNFTF9QQVlNRU5ULCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zaXRpb25QYXltZW50VG9TdGF0ZShpZDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5UcmFuc2l0aW9uUGF5bWVudFRvU3RhdGVNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5UcmFuc2l0aW9uUGF5bWVudFRvU3RhdGVNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oVFJBTlNJVElPTl9QQVlNRU5UX1RPX1NUQVRFLCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICBzdGF0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVGdWxmaWxsbWVudChpbnB1dDogQ29kZWdlbi5GdWxmaWxsT3JkZXJJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uQ3JlYXRlRnVsZmlsbG1lbnRNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5DcmVhdGVGdWxmaWxsbWVudE11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihDUkVBVEVfRlVMRklMTE1FTlQsIHtcclxuICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhbnNpdGlvbkZ1bGZpbGxtZW50VG9TdGF0ZShpZDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5UcmFuc2l0aW9uRnVsZmlsbG1lbnRUb1N0YXRlTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uVHJhbnNpdGlvbkZ1bGZpbGxtZW50VG9TdGF0ZU11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihUUkFOU0lUSU9OX0ZVTEZJTExNRU5UX1RPX1NUQVRFLCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICBzdGF0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWxPcmRlcihpbnB1dDogQ29kZWdlbi5DYW5jZWxPcmRlcklucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxDb2RlZ2VuLkNhbmNlbE9yZGVyTXV0YXRpb24sIENvZGVnZW4uQ2FuY2VsT3JkZXJNdXRhdGlvblZhcmlhYmxlcz4oXHJcbiAgICAgICAgICAgIENBTkNFTF9PUkRFUixcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZWZ1bmRPcmRlcihpbnB1dDogQ29kZWdlbi5SZWZ1bmRPcmRlcklucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxDb2RlZ2VuLlJlZnVuZE9yZGVyTXV0YXRpb24sIENvZGVnZW4uUmVmdW5kT3JkZXJNdXRhdGlvblZhcmlhYmxlcz4oXHJcbiAgICAgICAgICAgIFJFRlVORF9PUkRFUixcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR0bGVSZWZ1bmQoaW5wdXQ6IENvZGVnZW4uU2V0dGxlUmVmdW5kSW5wdXQsIG9yZGVySWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uU2V0dGxlUmVmdW5kTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uU2V0dGxlUmVmdW5kTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFNFVFRMRV9SRUZVTkQsIHtcclxuICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkTm90ZVRvT3JkZXIoaW5wdXQ6IENvZGVnZW4uQWRkTm90ZVRvT3JkZXJJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uQWRkTm90ZVRvT3JkZXJNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5BZGROb3RlVG9PcmRlck11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihBRERfTk9URV9UT19PUkRFUiwge1xyXG4gICAgICAgICAgICBpbnB1dCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVPcmRlck5vdGUoaW5wdXQ6IENvZGVnZW4uVXBkYXRlT3JkZXJOb3RlSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlVwZGF0ZU9yZGVyTm90ZU11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlVwZGF0ZU9yZGVyTm90ZU11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihVUERBVEVfT1JERVJfTk9URSwge1xyXG4gICAgICAgICAgICBpbnB1dCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVPcmRlck5vdGUoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uRGVsZXRlT3JkZXJOb3RlTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uRGVsZXRlT3JkZXJOb3RlTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KERFTEVURV9PUkRFUl9OT1RFLCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zaXRpb25Ub1N0YXRlKGlkOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlRyYW5zaXRpb25PcmRlclRvU3RhdGVNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5UcmFuc2l0aW9uT3JkZXJUb1N0YXRlTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFRSQU5TSVRJT05fT1JERVJfVE9fU1RBVEUsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgIHN0YXRlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZU9yZGVyQ3VzdG9tRmllbGRzKGlucHV0OiBDb2RlZ2VuLlVwZGF0ZU9yZGVySW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlVwZGF0ZU9yZGVyQ3VzdG9tRmllbGRzTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uVXBkYXRlT3JkZXJDdXN0b21GaWVsZHNNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oVVBEQVRFX09SREVSX0NVU1RPTV9GSUVMRFMsIHtcclxuICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kaWZ5T3JkZXIoaW5wdXQ6IENvZGVnZW4uTW9kaWZ5T3JkZXJJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8Q29kZWdlbi5Nb2RpZnlPcmRlck11dGF0aW9uLCBDb2RlZ2VuLk1vZGlmeU9yZGVyTXV0YXRpb25WYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBNT0RJRllfT1JERVIsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlucHV0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkTWFudWFsUGF5bWVudFRvT3JkZXIoaW5wdXQ6IENvZGVnZW4uTWFudWFsUGF5bWVudElucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5BZGRNYW51YWxQYXltZW50TXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQWRkTWFudWFsUGF5bWVudE11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihBRERfTUFOVUFMX1BBWU1FTlRfVE9fT1JERVIsIHsgaW5wdXQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlRHJhZnRPcmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPENvZGVnZW4uQ3JlYXRlRHJhZnRPcmRlck11dGF0aW9uPihDUkVBVEVfRFJBRlRfT1JERVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZURyYWZ0T3JkZXIob3JkZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVEcmFmdE9yZGVyTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uRGVsZXRlRHJhZnRPcmRlck11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihERUxFVEVfRFJBRlRfT1JERVIsIHsgb3JkZXJJZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRJdGVtVG9EcmFmdE9yZGVyKG9yZGVySWQ6IHN0cmluZywgaW5wdXQ6IENvZGVnZW4uQWRkSXRlbVRvRHJhZnRPcmRlcklucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5BZGRJdGVtVG9EcmFmdE9yZGVyTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQWRkSXRlbVRvRHJhZnRPcmRlck11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihBRERfSVRFTV9UT19EUkFGVF9PUkRFUiwgeyBvcmRlcklkLCBpbnB1dCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGp1c3REcmFmdE9yZGVyTGluZShvcmRlcklkOiBzdHJpbmcsIGlucHV0OiBDb2RlZ2VuLkFkanVzdERyYWZ0T3JkZXJMaW5lSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFkanVzdERyYWZ0T3JkZXJMaW5lTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQWRqdXN0RHJhZnRPcmRlckxpbmVNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQURKVVNUX0RSQUZUX09SREVSX0xJTkUsIHsgb3JkZXJJZCwgaW5wdXQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRHJhZnRPcmRlckxpbmUob3JkZXJJZDogc3RyaW5nLCBvcmRlckxpbmVJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5SZW1vdmVEcmFmdE9yZGVyTGluZU11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlJlbW92ZURyYWZ0T3JkZXJMaW5lTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFJFTU9WRV9EUkFGVF9PUkRFUl9MSU5FLCB7IG9yZGVySWQsIG9yZGVyTGluZUlkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEN1c3RvbWVyRm9yRHJhZnRPcmRlcihcclxuICAgICAgICBvcmRlcklkOiBzdHJpbmcsXHJcbiAgICAgICAgeyBjdXN0b21lcklkLCBpbnB1dCB9OiB7IGN1c3RvbWVySWQ/OiBzdHJpbmc7IGlucHV0PzogQ29kZWdlbi5DcmVhdGVDdXN0b21lcklucHV0IH0sXHJcbiAgICApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlNldEN1c3RvbWVyRm9yRHJhZnRPcmRlck11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlNldEN1c3RvbWVyRm9yRHJhZnRPcmRlck11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihTRVRfQ1VTVE9NRVJfRk9SX0RSQUZUX09SREVSLCB7IG9yZGVySWQsIGN1c3RvbWVySWQsIGlucHV0IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERyYWZ0T3JkZXJTaGlwcGluZ0FkZHJlc3Mob3JkZXJJZDogc3RyaW5nLCBpbnB1dDogQ29kZWdlbi5DcmVhdGVBZGRyZXNzSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlNldERyYWZ0T3JkZXJTaGlwcGluZ0FkZHJlc3NNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5TZXREcmFmdE9yZGVyU2hpcHBpbmdBZGRyZXNzTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFNFVF9TSElQUElOR19BRERSRVNTX0ZPUl9EUkFGVF9PUkRFUiwgeyBvcmRlcklkLCBpbnB1dCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREcmFmdE9yZGVyQmlsbGluZ0FkZHJlc3Mob3JkZXJJZDogc3RyaW5nLCBpbnB1dDogQ29kZWdlbi5DcmVhdGVBZGRyZXNzSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlNldERyYWZ0T3JkZXJCaWxsaW5nQWRkcmVzc011dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlNldERyYWZ0T3JkZXJCaWxsaW5nQWRkcmVzc011dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihTRVRfQklMTElOR19BRERSRVNTX0ZPUl9EUkFGVF9PUkRFUiwgeyBvcmRlcklkLCBpbnB1dCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bnNldERyYWZ0T3JkZXJTaGlwcGluZ0FkZHJlc3Mob3JkZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5VbnNldERyYWZ0T3JkZXJTaGlwcGluZ0FkZHJlc3NNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5VbnNldERyYWZ0T3JkZXJTaGlwcGluZ0FkZHJlc3NNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oVU5TRVRfU0hJUFBJTkdfQUREUkVTU19GT1JfRFJBRlRfT1JERVIsIHsgb3JkZXJJZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bnNldERyYWZ0T3JkZXJCaWxsaW5nQWRkcmVzcyhvcmRlcklkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlVuc2V0RHJhZnRPcmRlckJpbGxpbmdBZGRyZXNzTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uVW5zZXREcmFmdE9yZGVyQmlsbGluZ0FkZHJlc3NNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oVU5TRVRfQklMTElOR19BRERSRVNTX0ZPUl9EUkFGVF9PUkRFUiwgeyBvcmRlcklkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5Q291cG9uQ29kZVRvRHJhZnRPcmRlcihvcmRlcklkOiBzdHJpbmcsIGNvdXBvbkNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uQXBwbHlDb3Vwb25Db2RlVG9EcmFmdE9yZGVyTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQXBwbHlDb3Vwb25Db2RlVG9EcmFmdE9yZGVyTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KEFQUExZX0NPVVBPTl9DT0RFX1RPX0RSQUZUX09SREVSLCB7IG9yZGVySWQsIGNvdXBvbkNvZGUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ291cG9uQ29kZUZyb21EcmFmdE9yZGVyKG9yZGVySWQ6IHN0cmluZywgY291cG9uQ29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5SZW1vdmVDb3Vwb25Db2RlRnJvbURyYWZ0T3JkZXJNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5SZW1vdmVDb3Vwb25Db2RlRnJvbURyYWZ0T3JkZXJNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oUkVNT1ZFX0NPVVBPTl9DT0RFX0ZST01fRFJBRlRfT1JERVIsIHsgb3JkZXJJZCwgY291cG9uQ29kZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREcmFmdE9yZGVyRWxpZ2libGVTaGlwcGluZ01ldGhvZHMob3JkZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRyYWZ0T3JkZXJFbGlnaWJsZVNoaXBwaW5nTWV0aG9kc1F1ZXJ5LFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRyYWZ0T3JkZXJFbGlnaWJsZVNoaXBwaW5nTWV0aG9kc1F1ZXJ5VmFyaWFibGVzXHJcbiAgICAgICAgPihEUkFGVF9PUkRFUl9FTElHSUJMRV9TSElQUElOR19NRVRIT0RTLCB7IG9yZGVySWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RHJhZnRPcmRlclNoaXBwaW5nTWV0aG9kKG9yZGVySWQ6IHN0cmluZywgc2hpcHBpbmdNZXRob2RJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5TZXREcmFmdE9yZGVyU2hpcHBpbmdNZXRob2RNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5TZXREcmFmdE9yZGVyU2hpcHBpbmdNZXRob2RNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oU0VUX0RSQUZUX09SREVSX1NISVBQSU5HX01FVEhPRCwgeyBvcmRlcklkLCBzaGlwcGluZ01ldGhvZElkIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -185,7 +185,9 @@ export class ProductDataService {
185
185
  createdAt: SortOrder.DESC,
186
186
  },
187
187
  },
188
- });
188
+ }, undefined,
189
+ // By default do not load custom fields in the list view
190
+ { includeCustomFields: [] });
189
191
  }
190
192
  getAsset(id) {
191
193
  return this.baseDataService.query(GET_ASSET, {
@@ -254,4 +256,4 @@ export class ProductDataService {
254
256
  });
255
257
  }
256
258
  }
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL2RhdGEvcHJvdmlkZXJzL3Byb2R1Y3QtZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUNILDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQixhQUFhLEVBQ2IsY0FBYyxFQUNkLDJCQUEyQixFQUMzQix1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLGFBQWEsRUFDYixjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLFVBQVUsRUFDVixTQUFTLEVBQ1QsY0FBYyxFQUNkLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLG9DQUFvQyxFQUNwQywrQkFBK0IsRUFDL0IsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QixPQUFPLEVBQ1AsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixnQ0FBZ0MsRUFDaEMsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1QixlQUFlLEVBQ2YsWUFBWSxFQUNaLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixVQUFVLEdBQ2IsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQ0gsZ0NBQWdDLEVBQ2hDLE9BQU8sRUFDUCxnQ0FBZ0MsR0FDbkMsTUFBTSxxQ0FBcUMsQ0FBQztBQUk3QyxNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLFlBQW9CLGVBQWdDO1FBQWhDLG9CQUFlLEdB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SztTQUNSLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBVTtRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQW9ELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFnQztRQUN2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUM3QixZQUFZLEVBQ1o7WUFDSSxPQUFPO1NBQ1YsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUE2QjtRQUNuQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUM5QixVQUFVLEVBQ1Y7WUFDSSxLQUFLO1NBQ1IsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUE2QjtRQUNuQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUM5QixVQUFVLEVBQ1Y7WUFDSSxLQUFLO1NBQ1IsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELFNBQVMsQ0FBQyxFQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQzlCLFVBQVUsRUFDVjtZQUNJLEVBQUU7U0FDTCxDQUNKLENBQUM7SUFDTixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwaWNrIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9waWNrJztcclxuXHJcbmltcG9ydCAqIGFzIENvZGVnZW4gZnJvbSAnLi4vLi4vY29tbW9uL2dlbmVyYXRlZC10eXBlcyc7XHJcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gJy4uLy4uL2NvbW1vbi9nZW5lcmF0ZWQtdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gICAgQUREX09QVElPTl9HUk9VUF9UT19QUk9EVUNULFxyXG4gICAgQUREX09QVElPTl9UT19HUk9VUCxcclxuICAgIEFTU0lHTl9QUk9EVUNUU19UT19DSEFOTkVMLFxyXG4gICAgQVNTSUdOX1ZBUklBTlRTX1RPX0NIQU5ORUwsXHJcbiAgICBDUkVBVEVfQVNTRVRTLFxyXG4gICAgQ1JFQVRFX1BST0RVQ1QsXHJcbiAgICBDUkVBVEVfUFJPRFVDVF9PUFRJT05fR1JPVVAsXHJcbiAgICBDUkVBVEVfUFJPRFVDVF9WQVJJQU5UUyxcclxuICAgIENSRUFURV9UQUcsXHJcbiAgICBERUxFVEVfQVNTRVRTLFxyXG4gICAgREVMRVRFX1BST0RVQ1QsXHJcbiAgICBERUxFVEVfUFJPRFVDVF9PUFRJT04sXHJcbiAgICBERUxFVEVfUFJPRFVDVF9WQVJJQU5ULFxyXG4gICAgREVMRVRFX1BST0RVQ1RfVkFSSUFOVFMsXHJcbiAgICBERUxFVEVfUFJPRFVDVFMsXHJcbiAgICBERUxFVEVfVEFHLFxyXG4gICAgR0VUX0FTU0VULFxyXG4gICAgR0VUX0FTU0VUX0xJU1QsXHJcbiAgICBHRVRfUFJPRFVDVF9MSVNULFxyXG4gICAgR0VUX1BST0RVQ1RfT1BUSU9OX0dST1VQLFxyXG4gICAgR0VUX1BST0RVQ1RfT1BUSU9OX0dST1VQUyxcclxuICAgIEdFVF9QUk9EVUNUX1NJTVBMRSxcclxuICAgIEdFVF9QUk9EVUNUX1ZBUklBTlQsXHJcbiAgICBHRVRfUFJPRFVDVF9WQVJJQU5UX0xJU1QsXHJcbiAgICBHRVRfUFJPRFVDVF9WQVJJQU5UX0xJU1RfRk9SX1BST0RVQ1QsXHJcbiAgICBHRVRfUFJPRFVDVF9WQVJJQU5UX0xJU1RfU0lNUExFLFxyXG4gICAgR0VUX1BST0RVQ1RfVkFSSUFOVF9PUFRJT05TLFxyXG4gICAgR0VUX1BST0RVQ1RfV0lUSF9WQVJJQU5UUyxcclxuICAgIEdFVF9UQUcsXHJcbiAgICBHRVRfVEFHX0xJU1QsXHJcbiAgICBQUk9EVUNUX1NFTEVDVE9SX1NFQVJDSCxcclxuICAgIFJFTU9WRV9PUFRJT05fR1JPVVBfRlJPTV9QUk9EVUNULFxyXG4gICAgUkVNT1ZFX1BST0RVQ1RTX0ZST01fQ0hBTk5FTCxcclxuICAgIFJFTU9WRV9WQVJJQU5UU19GUk9NX0NIQU5ORUwsXHJcbiAgICBTRUFSQ0hfUFJPRFVDVFMsXHJcbiAgICBVUERBVEVfQVNTRVQsXHJcbiAgICBVUERBVEVfUFJPRFVDVCxcclxuICAgIFVQREFURV9QUk9EVUNUX09QVElPTixcclxuICAgIFVQREFURV9QUk9EVUNUX09QVElPTl9HUk9VUCxcclxuICAgIFVQREFURV9QUk9EVUNUX1ZBUklBTlRTLFxyXG4gICAgVVBEQVRFX1RBRyxcclxufSBmcm9tICcuLi9kZWZpbml0aW9ucy9wcm9kdWN0LWRlZmluaXRpb25zJztcclxuaW1wb3J0IHtcclxuICAgIEdFVF9QRU5ESU5HX1NFQVJDSF9JTkRFWF9VUERBVEVTLFxyXG4gICAgUkVJTkRFWCxcclxuICAgIFJVTl9QRU5ESU5HX1NFQVJDSF9JTkRFWF9VUERBVEVTLFxyXG59IGZyb20gJy4uL2RlZmluaXRpb25zL3NldHRpbmdzLWRlZmluaXRpb25zJztcclxuXHJcbmltcG9ydCB7IEJhc2VEYXRhU2VydmljZSB9IGZyb20gJy4vYmFzZS1kYXRhLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb2R1Y3REYXRhU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhc2VEYXRhU2VydmljZTogQmFzZURhdGFTZXJ2aWNlKSB7fVxyXG5cclxuICAgIHNlYXJjaFByb2R1Y3RzKHRlcm06IHN0cmluZywgdGFrZSA9IDEwLCBza2lwID0gMCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxDb2RlZ2VuLlNlYXJjaFByb2R1Y3RzUXVlcnksIENvZGVnZW4uU2VhcmNoUHJvZHVjdHNRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgICAgICAgIFNFQVJDSF9QUk9EVUNUUyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtLFxyXG4gICAgICAgICAgICAgICAgICAgIHRha2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc2tpcCxcclxuICAgICAgICAgICAgICAgICAgICBncm91cEJ5UHJvZHVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9kdWN0U2VsZWN0b3JTZWFyY2godGVybTogc3RyaW5nLCB0YWtlOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UucXVlcnk8XHJcbiAgICAgICAgICAgIENvZGVnZW4uUHJvZHVjdFNlbGVjdG9yU2VhcmNoUXVlcnksXHJcbiAgICAgICAgICAgIENvZGVnZW4uUHJvZHVjdFNlbGVjdG9yU2VhcmNoUXVlcnlWYXJpYWJsZXNcclxuICAgICAgICA+KFBST0RVQ1RfU0VMRUNUT1JfU0VBUkNILCB7XHJcbiAgICAgICAgICAgIHRha2UsXHJcbiAgICAgICAgICAgIHRlcm0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVpbmRleCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPENvZGVnZW4uUmVpbmRleE11dGF0aW9uPihSRUlOREVYKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZW5kaW5nU2VhcmNoSW5kZXhVcGRhdGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxDb2RlZ2VuLkdldFBlbmRpbmdTZWFyY2hJbmRleFVwZGF0ZXNRdWVyeT4oXHJcbiAgICAgICAgICAgIEdFVF9QRU5ESU5HX1NFQVJDSF9JTkRFWF9VUERBVEVTLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcnVuUGVuZGluZ1NlYXJjaEluZGV4VXBkYXRlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPENvZGVnZW4uUnVuUGVuZGluZ1NlYXJjaEluZGV4VXBkYXRlc011dGF0aW9uPihcclxuICAgICAgICAgICAgUlVOX1BFTkRJTkdfU0VBUkNIX0lOREVYX1VQREFURVMsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9kdWN0cyhvcHRpb25zOiBDb2RlZ2VuLlByb2R1Y3RMaXN0T3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxDb2RlZ2VuLkdldFByb2R1Y3RMaXN0UXVlcnksIENvZGVnZW4uR2V0UHJvZHVjdExpc3RRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgICAgICAgIEdFVF9QUk9EVUNUX0xJU1QsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9kdWN0KGlkOiBzdHJpbmcsIHZhcmlhbnRMaXN0T3B0aW9ucz86IENvZGVnZW4uUHJvZHVjdFZhcmlhbnRMaXN0T3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0V2l0aFZhcmlhbnRzUXVlcnksXHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdFdpdGhWYXJpYW50c1F1ZXJ5VmFyaWFibGVzXHJcbiAgICAgICAgPihHRVRfUFJPRFVDVF9XSVRIX1ZBUklBTlRTLCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICB2YXJpYW50TGlzdE9wdGlvbnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZHVjdFNpbXBsZShpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RTaW1wbGVRdWVyeSxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0U2ltcGxlUXVlcnlWYXJpYWJsZXNcclxuICAgICAgICA+KEdFVF9QUk9EVUNUX1NJTVBMRSwge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9kdWN0VmFyaWFudHNTaW1wbGUob3B0aW9uczogQ29kZWdlbi5Qcm9kdWN0VmFyaWFudExpc3RPcHRpb25zLCBwcm9kdWN0SWQ/OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UucXVlcnk8XHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdFZhcmlhbnRMaXN0U2ltcGxlUXVlcnksXHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdFZhcmlhbnRMaXN0U2ltcGxlUXVlcnlWYXJpYWJsZXNcclxuICAgICAgICA+KEdFVF9QUk9EVUNUX1ZBUklBTlRfTElTVF9TSU1QTEUsIHsgb3B0aW9ucywgcHJvZHVjdElkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y3RWYXJpYW50cyhvcHRpb25zOiBDb2RlZ2VuLlByb2R1Y3RWYXJpYW50TGlzdE9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UucXVlcnk8XHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdFZhcmlhbnRMaXN0UXVlcnksXHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdFZhcmlhbnRMaXN0UXVlcnlWYXJpYWJsZXNcclxuICAgICAgICA+KEdFVF9QUk9EVUNUX1ZBUklBTlRfTElTVCwgeyBvcHRpb25zIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y3RWYXJpYW50c0ZvclByb2R1Y3Qob3B0aW9uczogQ29kZWdlbi5Qcm9kdWN0VmFyaWFudExpc3RPcHRpb25zLCBwcm9kdWN0SWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0VmFyaWFudExpc3RGb3JQcm9kdWN0UXVlcnksXHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdFZhcmlhbnRMaXN0Rm9yUHJvZHVjdFF1ZXJ5VmFyaWFibGVzXHJcbiAgICAgICAgPihHRVRfUFJPRFVDVF9WQVJJQU5UX0xJU1RfRk9SX1BST0RVQ1QsIHsgb3B0aW9ucywgcHJvZHVjdElkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y3RWYXJpYW50KGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UucXVlcnk8XHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdFZhcmlhbnRRdWVyeSxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0VmFyaWFudFF1ZXJ5VmFyaWFibGVzXHJcbiAgICAgICAgPihHRVRfUFJPRFVDVF9WQVJJQU5ULCB7IGlkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y3RWYXJpYW50c09wdGlvbnMoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0VmFyaWFudE9wdGlvbnNRdWVyeSxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0VmFyaWFudE9wdGlvbnNRdWVyeVZhcmlhYmxlc1xyXG4gICAgICAgID4oR0VUX1BST0RVQ1RfVkFSSUFOVF9PUFRJT05TLCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y3RPcHRpb25Hcm91cChpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RPcHRpb25Hcm91cFF1ZXJ5LFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RPcHRpb25Hcm91cFF1ZXJ5VmFyaWFibGVzXHJcbiAgICAgICAgPihHRVRfUFJPRFVDVF9PUFRJT05fR1JPVVAsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlUHJvZHVjdChwcm9kdWN0OiBDb2RlZ2VuLkNyZWF0ZVByb2R1Y3RJbnB1dCkge1xyXG4gICAgICAgIGNvbnN0IGlucHV0OiBDb2RlZ2VuLkNyZWF0ZVByb2R1Y3RNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICAgICAgaW5wdXQ6IHBpY2socHJvZHVjdCwgW1xyXG4gICAgICAgICAgICAgICAgJ2VuYWJsZWQnLFxyXG4gICAgICAgICAgICAgICAgJ3RyYW5zbGF0aW9ucycsXHJcbiAgICAgICAgICAgICAgICAnY3VzdG9tRmllbGRzJyxcclxuICAgICAgICAgICAgICAgICdhc3NldElkcycsXHJcbiAgICAgICAgICAgICAgICAnZmVhdHVyZWRBc3NldElkJyxcclxuICAgICAgICAgICAgICAgICdmYWNldFZhbHVlSWRzJyxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkNyZWF0ZVByb2R1Y3RNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5DcmVhdGVQcm9kdWN0TXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KENSRUFURV9QUk9EVUNULCBpbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHJvZHVjdChwcm9kdWN0OiBDb2RlZ2VuLlVwZGF0ZVByb2R1Y3RJbnB1dCkge1xyXG4gICAgICAgIGNvbnN0IGlucHV0OiBDb2RlZ2VuLlVwZGF0ZVByb2R1Y3RNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICAgICAgaW5wdXQ6IHBpY2socHJvZHVjdCwgW1xyXG4gICAgICAgICAgICAgICAgJ2lkJyxcclxuICAgICAgICAgICAgICAgICdlbmFibGVkJyxcclxuICAgICAgICAgICAgICAgICd0cmFuc2xhdGlvbnMnLFxyXG4gICAgICAgICAgICAgICAgJ2N1c3RvbUZpZWxkcycsXHJcbiAgICAgICAgICAgICAgICAnYXNzZXRJZHMnLFxyXG4gICAgICAgICAgICAgICAgJ2ZlYXR1cmVkQXNzZXRJZCcsXHJcbiAgICAgICAgICAgICAgICAnZmFjZXRWYWx1ZUlkcycsXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5VcGRhdGVQcm9kdWN0TXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uVXBkYXRlUHJvZHVjdE11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihVUERBVEVfUFJPRFVDVCwgaW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVByb2R1Y3QoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uRGVsZXRlUHJvZHVjdE11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRlbGV0ZVByb2R1Y3RNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oREVMRVRFX1BST0RVQ1QsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUHJvZHVjdHMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uRGVsZXRlUHJvZHVjdHNNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVQcm9kdWN0c011dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihERUxFVEVfUFJPRFVDVFMsIHtcclxuICAgICAgICAgICAgaWRzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVByb2R1Y3RWYXJpYW50cyhpbnB1dDogQ29kZWdlbi5DcmVhdGVQcm9kdWN0VmFyaWFudElucHV0W10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkNyZWF0ZVByb2R1Y3RWYXJpYW50c011dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkNyZWF0ZVByb2R1Y3RWYXJpYW50c011dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihDUkVBVEVfUFJPRFVDVF9WQVJJQU5UUywge1xyXG4gICAgICAgICAgICBpbnB1dCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQcm9kdWN0VmFyaWFudHModmFyaWFudHM6IENvZGVnZW4uVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dFtdKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQ6IENvZGVnZW4uVXBkYXRlUHJvZHVjdFZhcmlhbnRzTXV0YXRpb25WYXJpYWJsZXMgPSB7XHJcbiAgICAgICAgICAgIGlucHV0OiB2YXJpYW50cy5tYXAoXHJcbiAgICAgICAgICAgICAgICBwaWNrKFtcclxuICAgICAgICAgICAgICAgICAgICAnaWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbmFibGVkJyxcclxuICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRpb25zJyxcclxuICAgICAgICAgICAgICAgICAgICAnc2t1JyxcclxuICAgICAgICAgICAgICAgICAgICAncHJpY2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICd0YXhDYXRlZ29yeUlkJyxcclxuICAgICAgICAgICAgICAgICAgICAnZmFjZXRWYWx1ZUlkcycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlYXR1cmVkQXNzZXRJZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2Fzc2V0SWRzJyxcclxuICAgICAgICAgICAgICAgICAgICAnb3B0aW9uSWRzJyxcclxuICAgICAgICAgICAgICAgICAgICAndHJhY2tJbnZlbnRvcnknLFxyXG4gICAgICAgICAgICAgICAgICAgICdvdXRPZlN0b2NrVGhyZXNob2xkJyxcclxuICAgICAgICAgICAgICAgICAgICAndXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3N0b2NrT25IYW5kJyxcclxuICAgICAgICAgICAgICAgICAgICAnY3VzdG9tRmllbGRzJyxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5VcGRhdGVQcm9kdWN0VmFyaWFudHNNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5VcGRhdGVQcm9kdWN0VmFyaWFudHNNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oVVBEQVRFX1BST0RVQ1RfVkFSSUFOVFMsIGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQcm9kdWN0VmFyaWFudChpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVQcm9kdWN0VmFyaWFudE11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRlbGV0ZVByb2R1Y3RWYXJpYW50TXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KERFTEVURV9QUk9EVUNUX1ZBUklBTlQsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUHJvZHVjdFZhcmlhbnRzKGlkczogc3RyaW5nW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRlbGV0ZVByb2R1Y3RWYXJpYW50c011dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRlbGV0ZVByb2R1Y3RWYXJpYW50c011dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihERUxFVEVfUFJPRFVDVF9WQVJJQU5UUywge1xyXG4gICAgICAgICAgICBpZHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlUHJvZHVjdE9wdGlvbkdyb3Vwcyhwcm9kdWN0T3B0aW9uR3JvdXA6IENvZGVnZW4uQ3JlYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQpIHtcclxuICAgICAgICBjb25zdCBpbnB1dDogQ29kZWdlbi5DcmVhdGVQcm9kdWN0T3B0aW9uR3JvdXBNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICAgICAgaW5wdXQ6IHByb2R1Y3RPcHRpb25Hcm91cCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uQ3JlYXRlUHJvZHVjdE9wdGlvbkdyb3VwTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQ3JlYXRlUHJvZHVjdE9wdGlvbkdyb3VwTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KENSRUFURV9QUk9EVUNUX09QVElPTl9HUk9VUCwgaW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZE9wdGlvbkdyb3VwVG9Qcm9kdWN0KHZhcmlhYmxlczogQ29kZWdlbi5BZGRPcHRpb25Hcm91cFRvUHJvZHVjdE11dGF0aW9uVmFyaWFibGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5BZGRPcHRpb25Hcm91cFRvUHJvZHVjdE11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFkZE9wdGlvbkdyb3VwVG9Qcm9kdWN0TXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KEFERF9PUFRJT05fR1JPVVBfVE9fUFJPRFVDVCwgdmFyaWFibGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRPcHRpb25Ub0dyb3VwKGlucHV0OiBDb2RlZ2VuLkNyZWF0ZVByb2R1Y3RPcHRpb25JbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uQWRkT3B0aW9uVG9Hcm91cE11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFkZE9wdGlvblRvR3JvdXBNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQUREX09QVElPTl9UT19HUk9VUCwgeyBpbnB1dCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQcm9kdWN0T3B0aW9uKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRlbGV0ZVByb2R1Y3RPcHRpb25NdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVQcm9kdWN0T3B0aW9uTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KERFTEVURV9QUk9EVUNUX09QVElPTiwgeyBpZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVPcHRpb25Hcm91cEZyb21Qcm9kdWN0KHZhcmlhYmxlczogQ29kZWdlbi5SZW1vdmVPcHRpb25Hcm91cEZyb21Qcm9kdWN0TXV0YXRpb25WYXJpYWJsZXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlJlbW92ZU9wdGlvbkdyb3VwRnJvbVByb2R1Y3RNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5SZW1vdmVPcHRpb25Hcm91cEZyb21Qcm9kdWN0TXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFJFTU9WRV9PUFRJT05fR1JPVVBfRlJPTV9QUk9EVUNULCB2YXJpYWJsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByb2R1Y3RPcHRpb24oaW5wdXQ6IENvZGVnZW4uVXBkYXRlUHJvZHVjdE9wdGlvbklucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5VcGRhdGVQcm9kdWN0T3B0aW9uTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uVXBkYXRlUHJvZHVjdE9wdGlvbk11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihVUERBVEVfUFJPRFVDVF9PUFRJT04sIHtcclxuICAgICAgICAgICAgaW5wdXQ6IHBpY2soaW5wdXQsIFsnaWQnLCAnY29kZScsICd0cmFuc2xhdGlvbnMnLCAnY3VzdG9tRmllbGRzJ10pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByb2R1Y3RPcHRpb25Hcm91cChpbnB1dDogQ29kZWdlbi5VcGRhdGVQcm9kdWN0T3B0aW9uR3JvdXBJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFVQREFURV9QUk9EVUNUX09QVElPTl9HUk9VUCwge1xyXG4gICAgICAgICAgICBpbnB1dDogcGljayhpbnB1dCwgWydpZCcsICdjb2RlJywgJ3RyYW5zbGF0aW9ucycsICdjdXN0b21GaWVsZHMnXSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZHVjdE9wdGlvbkdyb3VwcyhmaWx0ZXJUZXJtPzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RPcHRpb25Hcm91cHNRdWVyeSxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0T3B0aW9uR3JvdXBzUXVlcnlWYXJpYWJsZXNcclxuICAgICAgICA+KEdFVF9QUk9EVUNUX09QVElPTl9HUk9VUFMsIHtcclxuICAgICAgICAgICAgZmlsdGVyVGVybSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBc3NldExpc3QodGFrZSA9IDEwLCBza2lwID0gMCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxDb2RlZ2VuLkdldEFzc2V0TGlzdFF1ZXJ5LCBDb2RlZ2VuLkdldEFzc2V0TGlzdFF1ZXJ5VmFyaWFibGVzPihcclxuICAgICAgICAgICAgR0VUX0FTU0VUX0xJU1QsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBza2lwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRha2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFNvcnRPcmRlci5ERVNDLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXNzZXQoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxDb2RlZ2VuLkdldEFzc2V0UXVlcnksIENvZGVnZW4uR2V0QXNzZXRRdWVyeVZhcmlhYmxlcz4oR0VUX0FTU0VULCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUFzc2V0cyhmaWxlczogRmlsZVtdKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5DcmVhdGVBc3NldHNNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5DcmVhdGVBc3NldHNNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQ1JFQVRFX0FTU0VUUywge1xyXG4gICAgICAgICAgICBpbnB1dDogZmlsZXMubWFwKGZpbGUgPT4gKHsgZmlsZSB9KSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQXNzZXQoaW5wdXQ6IENvZGVnZW4uVXBkYXRlQXNzZXRJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8Q29kZWdlbi5VcGRhdGVBc3NldE11dGF0aW9uLCBDb2RlZ2VuLlVwZGF0ZUFzc2V0TXV0YXRpb25WYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBVUERBVEVfQVNTRVQsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlucHV0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQXNzZXRzKGlkczogc3RyaW5nW10sIGZvcmNlOiBib29sZWFuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVBc3NldHNNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVBc3NldHNNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oREVMRVRFX0FTU0VUUywge1xyXG4gICAgICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgICAgICAgYXNzZXRJZHM6IGlkcyxcclxuICAgICAgICAgICAgICAgIGZvcmNlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2lnblByb2R1Y3RzVG9DaGFubmVsKGlucHV0OiBDb2RlZ2VuLkFzc2lnblByb2R1Y3RzVG9DaGFubmVsSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFzc2lnblByb2R1Y3RzVG9DaGFubmVsTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQXNzaWduUHJvZHVjdHNUb0NoYW5uZWxNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQVNTSUdOX1BST0RVQ1RTX1RPX0NIQU5ORUwsIHtcclxuICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlUHJvZHVjdHNGcm9tQ2hhbm5lbChpbnB1dDogQ29kZWdlbi5SZW1vdmVQcm9kdWN0c0Zyb21DaGFubmVsSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlJlbW92ZVByb2R1Y3RzRnJvbUNoYW5uZWxNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5SZW1vdmVQcm9kdWN0c0Zyb21DaGFubmVsTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFJFTU9WRV9QUk9EVUNUU19GUk9NX0NIQU5ORUwsIHtcclxuICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzaWduVmFyaWFudHNUb0NoYW5uZWwoaW5wdXQ6IENvZGVnZW4uQXNzaWduUHJvZHVjdFZhcmlhbnRzVG9DaGFubmVsSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFzc2lnblZhcmlhbnRzVG9DaGFubmVsTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQXNzaWduVmFyaWFudHNUb0NoYW5uZWxNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQVNTSUdOX1ZBUklBTlRTX1RPX0NIQU5ORUwsIHtcclxuICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVmFyaWFudHNGcm9tQ2hhbm5lbChpbnB1dDogQ29kZWdlbi5SZW1vdmVQcm9kdWN0VmFyaWFudHNGcm9tQ2hhbm5lbElucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5SZW1vdmVWYXJpYW50c0Zyb21DaGFubmVsTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uUmVtb3ZlVmFyaWFudHNGcm9tQ2hhbm5lbE11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihSRU1PVkVfVkFSSUFOVFNfRlJPTV9DSEFOTkVMLCB7XHJcbiAgICAgICAgICAgIGlucHV0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRhZyhpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PENvZGVnZW4uR2V0VGFnUXVlcnksIENvZGVnZW4uR2V0VGFnUXVlcnlWYXJpYWJsZXM+KEdFVF9UQUcsIHsgaWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFnTGlzdChvcHRpb25zPzogQ29kZWdlbi5UYWdMaXN0T3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxDb2RlZ2VuLkdldFRhZ0xpc3RRdWVyeSwgQ29kZWdlbi5HZXRUYWdMaXN0UXVlcnlWYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBHRVRfVEFHX0xJU1QsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVUYWcoaW5wdXQ6IENvZGVnZW4uQ3JlYXRlVGFnSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPENvZGVnZW4uQ3JlYXRlVGFnTXV0YXRpb24sIENvZGVnZW4uQ3JlYXRlVGFnTXV0YXRpb25WYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBDUkVBVEVfVEFHLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVRhZyhpbnB1dDogQ29kZWdlbi5VcGRhdGVUYWdJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8Q29kZWdlbi5VcGRhdGVUYWdNdXRhdGlvbiwgQ29kZWdlbi5VcGRhdGVUYWdNdXRhdGlvblZhcmlhYmxlcz4oXHJcbiAgICAgICAgICAgIFVQREFURV9UQUcsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlucHV0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlVGFnKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPENvZGVnZW4uRGVsZXRlVGFnTXV0YXRpb24sIENvZGVnZW4uRGVsZXRlVGFnTXV0YXRpb25WYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBERUxFVEVfVEFHLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL2RhdGEvcHJvdmlkZXJzL3Byb2R1Y3QtZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUNILDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQixhQUFhLEVBQ2IsY0FBYyxFQUNkLDJCQUEyQixFQUMzQix1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLGFBQWEsRUFDYixjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLFVBQVUsRUFDVixTQUFTLEVBQ1QsY0FBYyxFQUNkLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLG9DQUFvQyxFQUNwQywrQkFBK0IsRUFDL0IsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QixPQUFPLEVBQ1AsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixnQ0FBZ0MsRUFDaEMsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1QixlQUFlLEVBQ2YsWUFBWSxFQUNaLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixVQUFVLEdBQ2IsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQ0gsZ0NBQWdDLEVBQ2hDLE9BQU8sRUFDUCxnQ0FBZ0MsR0FDbkMsTUFBTSxxQ0FBcUMsQ0FBQztBQUk3QyxNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLFlBQW9CLGVBQWdDO1FBQWhDLG9CQUFlLEdB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QUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUdoQyw0QkFBNEIsRUFBRTtZQUM1QixLQUFLO1NBQ1IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFVO1FBQ2IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBb0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWdDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQzdCLFlBQVksRUFDWjtZQUNJLE9BQU87U0FDVixDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQTZCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQzlCLFVBQVUsRUFDVjtZQUNJLEtBQUs7U0FDUixDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQTZCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQzlCLFVBQVUsRUFDVjtZQUNJLEtBQUs7U0FDUixDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsU0FBUyxDQUFDLEVBQVU7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FDOUIsVUFBVSxFQUNWO1lBQ0ksRUFBRTtTQUNMLENBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBpY2sgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3BpY2snO1xyXG5cclxuaW1wb3J0ICogYXMgQ29kZWdlbiBmcm9tICcuLi8uLi9jb21tb24vZ2VuZXJhdGVkLXR5cGVzJztcclxuaW1wb3J0IHsgU29ydE9yZGVyIH0gZnJvbSAnLi4vLi4vY29tbW9uL2dlbmVyYXRlZC10eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBBRERfT1BUSU9OX0dST1VQX1RPX1BST0RVQ1QsXHJcbiAgICBBRERfT1BUSU9OX1RPX0dST1VQLFxyXG4gICAgQVNTSUdOX1BST0RVQ1RTX1RPX0NIQU5ORUwsXHJcbiAgICBBU1NJR05fVkFSSUFOVFNfVE9fQ0hBTk5FTCxcclxuICAgIENSRUFURV9BU1NFVFMsXHJcbiAgICBDUkVBVEVfUFJPRFVDVCxcclxuICAgIENSRUFURV9QUk9EVUNUX09QVElPTl9HUk9VUCxcclxuICAgIENSRUFURV9QUk9EVUNUX1ZBUklBTlRTLFxyXG4gICAgQ1JFQVRFX1RBRyxcclxuICAgIERFTEVURV9BU1NFVFMsXHJcbiAgICBERUxFVEVfUFJPRFVDVCxcclxuICAgIERFTEVURV9QUk9EVUNUX09QVElPTixcclxuICAgIERFTEVURV9QUk9EVUNUX1ZBUklBTlQsXHJcbiAgICBERUxFVEVfUFJPRFVDVF9WQVJJQU5UUyxcclxuICAgIERFTEVURV9QUk9EVUNUUyxcclxuICAgIERFTEVURV9UQUcsXHJcbiAgICBHRVRfQVNTRVQsXHJcbiAgICBHRVRfQVNTRVRfTElTVCxcclxuICAgIEdFVF9QUk9EVUNUX0xJU1QsXHJcbiAgICBHRVRfUFJPRFVDVF9PUFRJT05fR1JPVVAsXHJcbiAgICBHRVRfUFJPRFVDVF9PUFRJT05fR1JPVVBTLFxyXG4gICAgR0VUX1BST0RVQ1RfU0lNUExFLFxyXG4gICAgR0VUX1BST0RVQ1RfVkFSSUFOVCxcclxuICAgIEdFVF9QUk9EVUNUX1ZBUklBTlRfTElTVCxcclxuICAgIEdFVF9QUk9EVUNUX1ZBUklBTlRfTElTVF9GT1JfUFJPRFVDVCxcclxuICAgIEdFVF9QUk9EVUNUX1ZBUklBTlRfTElTVF9TSU1QTEUsXHJcbiAgICBHRVRfUFJPRFVDVF9WQVJJQU5UX09QVElPTlMsXHJcbiAgICBHRVRfUFJPRFVDVF9XSVRIX1ZBUklBTlRTLFxyXG4gICAgR0VUX1RBRyxcclxuICAgIEdFVF9UQUdfTElTVCxcclxuICAgIFBST0RVQ1RfU0VMRUNUT1JfU0VBUkNILFxyXG4gICAgUkVNT1ZFX09QVElPTl9HUk9VUF9GUk9NX1BST0RVQ1QsXHJcbiAgICBSRU1PVkVfUFJPRFVDVFNfRlJPTV9DSEFOTkVMLFxyXG4gICAgUkVNT1ZFX1ZBUklBTlRTX0ZST01fQ0hBTk5FTCxcclxuICAgIFNFQVJDSF9QUk9EVUNUUyxcclxuICAgIFVQREFURV9BU1NFVCxcclxuICAgIFVQREFURV9QUk9EVUNULFxyXG4gICAgVVBEQVRFX1BST0RVQ1RfT1BUSU9OLFxyXG4gICAgVVBEQVRFX1BST0RVQ1RfT1BUSU9OX0dST1VQLFxyXG4gICAgVVBEQVRFX1BST0RVQ1RfVkFSSUFOVFMsXHJcbiAgICBVUERBVEVfVEFHLFxyXG59IGZyb20gJy4uL2RlZmluaXRpb25zL3Byb2R1Y3QtZGVmaW5pdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gICAgR0VUX1BFTkRJTkdfU0VBUkNIX0lOREVYX1VQREFURVMsXHJcbiAgICBSRUlOREVYLFxyXG4gICAgUlVOX1BFTkRJTkdfU0VBUkNIX0lOREVYX1VQREFURVMsXHJcbn0gZnJvbSAnLi4vZGVmaW5pdGlvbnMvc2V0dGluZ3MtZGVmaW5pdGlvbnMnO1xyXG5cclxuaW1wb3J0IHsgQmFzZURhdGFTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLWRhdGEuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdERhdGFTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYmFzZURhdGFTZXJ2aWNlOiBCYXNlRGF0YVNlcnZpY2UpIHt9XHJcblxyXG4gICAgc2VhcmNoUHJvZHVjdHModGVybTogc3RyaW5nLCB0YWtlID0gMTAsIHNraXAgPSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PENvZGVnZW4uU2VhcmNoUHJvZHVjdHNRdWVyeSwgQ29kZWdlbi5TZWFyY2hQcm9kdWN0c1F1ZXJ5VmFyaWFibGVzPihcclxuICAgICAgICAgICAgU0VBUkNIX1BST0RVQ1RTLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgICAgICAgICBza2lwLFxyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwQnlQcm9kdWN0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2R1Y3RTZWxlY3RvclNlYXJjaCh0ZXJtOiBzdHJpbmcsIHRha2U6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxcclxuICAgICAgICAgICAgQ29kZWdlbi5Qcm9kdWN0U2VsZWN0b3JTZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgQ29kZWdlbi5Qcm9kdWN0U2VsZWN0b3JTZWFyY2hRdWVyeVZhcmlhYmxlc1xyXG4gICAgICAgID4oUFJPRFVDVF9TRUxFQ1RPUl9TRUFSQ0gsIHtcclxuICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgdGVybSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWluZGV4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8Q29kZWdlbi5SZWluZGV4TXV0YXRpb24+KFJFSU5ERVgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlbmRpbmdTZWFyY2hJbmRleFVwZGF0ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PENvZGVnZW4uR2V0UGVuZGluZ1NlYXJjaEluZGV4VXBkYXRlc1F1ZXJ5PihcclxuICAgICAgICAgICAgR0VUX1BFTkRJTkdfU0VBUkNIX0lOREVYX1VQREFURVMsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBydW5QZW5kaW5nU2VhcmNoSW5kZXhVcGRhdGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8Q29kZWdlbi5SdW5QZW5kaW5nU2VhcmNoSW5kZXhVcGRhdGVzTXV0YXRpb24+KFxyXG4gICAgICAgICAgICBSVU5fUEVORElOR19TRUFSQ0hfSU5ERVhfVVBEQVRFUyxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y3RzKG9wdGlvbnM6IENvZGVnZW4uUHJvZHVjdExpc3RPcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PENvZGVnZW4uR2V0UHJvZHVjdExpc3RRdWVyeSwgQ29kZWdlbi5HZXRQcm9kdWN0TGlzdFF1ZXJ5VmFyaWFibGVzPihcclxuICAgICAgICAgICAgR0VUX1BST0RVQ1RfTElTVCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y3QoaWQ6IHN0cmluZywgdmFyaWFudExpc3RPcHRpb25zPzogQ29kZWdlbi5Qcm9kdWN0VmFyaWFudExpc3RPcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RXaXRoVmFyaWFudHNRdWVyeSxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0V2l0aFZhcmlhbnRzUXVlcnlWYXJpYWJsZXNcclxuICAgICAgICA+KEdFVF9QUk9EVUNUX1dJVEhfVkFSSUFOVFMsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgIHZhcmlhbnRMaXN0T3B0aW9ucyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9kdWN0U2ltcGxlKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UucXVlcnk8XHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdFNpbXBsZVF1ZXJ5LFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RTaW1wbGVRdWVyeVZhcmlhYmxlc1xyXG4gICAgICAgID4oR0VUX1BST0RVQ1RfU0lNUExFLCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y3RWYXJpYW50c1NpbXBsZShvcHRpb25zOiBDb2RlZ2VuLlByb2R1Y3RWYXJpYW50TGlzdE9wdGlvbnMsIHByb2R1Y3RJZD86IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0VmFyaWFudExpc3RTaW1wbGVRdWVyeSxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0VmFyaWFudExpc3RTaW1wbGVRdWVyeVZhcmlhYmxlc1xyXG4gICAgICAgID4oR0VUX1BST0RVQ1RfVkFSSUFOVF9MSVNUX1NJTVBMRSwgeyBvcHRpb25zLCBwcm9kdWN0SWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZHVjdFZhcmlhbnRzKG9wdGlvbnM6IENvZGVnZW4uUHJvZHVjdFZhcmlhbnRMaXN0T3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0VmFyaWFudExpc3RRdWVyeSxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0VmFyaWFudExpc3RRdWVyeVZhcmlhYmxlc1xyXG4gICAgICAgID4oR0VUX1BST0RVQ1RfVkFSSUFOVF9MSVNULCB7IG9wdGlvbnMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZHVjdFZhcmlhbnRzRm9yUHJvZHVjdChvcHRpb25zOiBDb2RlZ2VuLlByb2R1Y3RWYXJpYW50TGlzdE9wdGlvbnMsIHByb2R1Y3RJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RWYXJpYW50TGlzdEZvclByb2R1Y3RRdWVyeSxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0VmFyaWFudExpc3RGb3JQcm9kdWN0UXVlcnlWYXJpYWJsZXNcclxuICAgICAgICA+KEdFVF9QUk9EVUNUX1ZBUklBTlRfTElTVF9GT1JfUFJPRFVDVCwgeyBvcHRpb25zLCBwcm9kdWN0SWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZHVjdFZhcmlhbnQoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxcclxuICAgICAgICAgICAgQ29kZWdlbi5HZXRQcm9kdWN0VmFyaWFudFF1ZXJ5LFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RWYXJpYW50UXVlcnlWYXJpYWJsZXNcclxuICAgICAgICA+KEdFVF9QUk9EVUNUX1ZBUklBTlQsIHsgaWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZHVjdFZhcmlhbnRzT3B0aW9ucyhpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5LFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5VmFyaWFibGVzXHJcbiAgICAgICAgPihHRVRfUFJPRFVDVF9WQVJJQU5UX09QVElPTlMsIHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZHVjdE9wdGlvbkdyb3VwKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UucXVlcnk8XHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdE9wdGlvbkdyb3VwUXVlcnksXHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdE9wdGlvbkdyb3VwUXVlcnlWYXJpYWJsZXNcclxuICAgICAgICA+KEdFVF9QUk9EVUNUX09QVElPTl9HUk9VUCwge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVQcm9kdWN0KHByb2R1Y3Q6IENvZGVnZW4uQ3JlYXRlUHJvZHVjdElucHV0KSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQ6IENvZGVnZW4uQ3JlYXRlUHJvZHVjdE11dGF0aW9uVmFyaWFibGVzID0ge1xyXG4gICAgICAgICAgICBpbnB1dDogcGljayhwcm9kdWN0LCBbXHJcbiAgICAgICAgICAgICAgICAnZW5hYmxlZCcsXHJcbiAgICAgICAgICAgICAgICAndHJhbnNsYXRpb25zJyxcclxuICAgICAgICAgICAgICAgICdjdXN0b21GaWVsZHMnLFxyXG4gICAgICAgICAgICAgICAgJ2Fzc2V0SWRzJyxcclxuICAgICAgICAgICAgICAgICdmZWF0dXJlZEFzc2V0SWQnLFxyXG4gICAgICAgICAgICAgICAgJ2ZhY2V0VmFsdWVJZHMnLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uQ3JlYXRlUHJvZHVjdE11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkNyZWF0ZVByb2R1Y3RNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQ1JFQVRFX1BST0RVQ1QsIGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQcm9kdWN0KHByb2R1Y3Q6IENvZGVnZW4uVXBkYXRlUHJvZHVjdElucHV0KSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQ6IENvZGVnZW4uVXBkYXRlUHJvZHVjdE11dGF0aW9uVmFyaWFibGVzID0ge1xyXG4gICAgICAgICAgICBpbnB1dDogcGljayhwcm9kdWN0LCBbXHJcbiAgICAgICAgICAgICAgICAnaWQnLFxyXG4gICAgICAgICAgICAgICAgJ2VuYWJsZWQnLFxyXG4gICAgICAgICAgICAgICAgJ3RyYW5zbGF0aW9ucycsXHJcbiAgICAgICAgICAgICAgICAnY3VzdG9tRmllbGRzJyxcclxuICAgICAgICAgICAgICAgICdhc3NldElkcycsXHJcbiAgICAgICAgICAgICAgICAnZmVhdHVyZWRBc3NldElkJyxcclxuICAgICAgICAgICAgICAgICdmYWNldFZhbHVlSWRzJyxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlVwZGF0ZVByb2R1Y3RNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5VcGRhdGVQcm9kdWN0TXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFVQREFURV9QUk9EVUNULCBpbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUHJvZHVjdChpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVQcm9kdWN0TXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uRGVsZXRlUHJvZHVjdE11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihERUxFVEVfUFJPRFVDVCwge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQcm9kdWN0cyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVQcm9kdWN0c011dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRlbGV0ZVByb2R1Y3RzTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KERFTEVURV9QUk9EVUNUUywge1xyXG4gICAgICAgICAgICBpZHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlUHJvZHVjdFZhcmlhbnRzKGlucHV0OiBDb2RlZ2VuLkNyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXRbXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uQ3JlYXRlUHJvZHVjdFZhcmlhbnRzTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQ3JlYXRlUHJvZHVjdFZhcmlhbnRzTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KENSRUFURV9QUk9EVUNUX1ZBUklBTlRTLCB7XHJcbiAgICAgICAgICAgIGlucHV0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByb2R1Y3RWYXJpYW50cyh2YXJpYW50czogQ29kZWdlbi5VcGRhdGVQcm9kdWN0VmFyaWFudElucHV0W10pIHtcclxuICAgICAgICBjb25zdCBpbnB1dDogQ29kZWdlbi5VcGRhdGVQcm9kdWN0VmFyaWFudHNNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICAgICAgaW5wdXQ6IHZhcmlhbnRzLm1hcChcclxuICAgICAgICAgICAgICAgIHBpY2soW1xyXG4gICAgICAgICAgICAgICAgICAgICdpZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VuYWJsZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGlvbnMnLFxyXG4gICAgICAgICAgICAgICAgICAgICdza3UnLFxyXG4gICAgICAgICAgICAgICAgICAgICdwcmljZScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3RheENhdGVnb3J5SWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICdmYWNldFZhbHVlSWRzJyxcclxuICAgICAgICAgICAgICAgICAgICAnZmVhdHVyZWRBc3NldElkJyxcclxuICAgICAgICAgICAgICAgICAgICAnYXNzZXRJZHMnLFxyXG4gICAgICAgICAgICAgICAgICAgICdvcHRpb25JZHMnLFxyXG4gICAgICAgICAgICAgICAgICAgICd0cmFja0ludmVudG9yeScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ291dE9mU3RvY2tUaHJlc2hvbGQnLFxyXG4gICAgICAgICAgICAgICAgICAgICd1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkJyxcclxuICAgICAgICAgICAgICAgICAgICAnc3RvY2tPbkhhbmQnLFxyXG4gICAgICAgICAgICAgICAgICAgICdjdXN0b21GaWVsZHMnLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlVwZGF0ZVByb2R1Y3RWYXJpYW50c011dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlVwZGF0ZVByb2R1Y3RWYXJpYW50c011dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihVUERBVEVfUFJPRFVDVF9WQVJJQU5UUywgaW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVByb2R1Y3RWYXJpYW50KGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRlbGV0ZVByb2R1Y3RWYXJpYW50TXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uRGVsZXRlUHJvZHVjdFZhcmlhbnRNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oREVMRVRFX1BST0RVQ1RfVkFSSUFOVCwge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQcm9kdWN0VmFyaWFudHMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uRGVsZXRlUHJvZHVjdFZhcmlhbnRzTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uRGVsZXRlUHJvZHVjdFZhcmlhbnRzTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KERFTEVURV9QUk9EVUNUX1ZBUklBTlRTLCB7XHJcbiAgICAgICAgICAgIGlkcyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVQcm9kdWN0T3B0aW9uR3JvdXBzKHByb2R1Y3RPcHRpb25Hcm91cDogQ29kZWdlbi5DcmVhdGVQcm9kdWN0T3B0aW9uR3JvdXBJbnB1dCkge1xyXG4gICAgICAgIGNvbnN0IGlucHV0OiBDb2RlZ2VuLkNyZWF0ZVByb2R1Y3RPcHRpb25Hcm91cE11dGF0aW9uVmFyaWFibGVzID0ge1xyXG4gICAgICAgICAgICBpbnB1dDogcHJvZHVjdE9wdGlvbkdyb3VwLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5DcmVhdGVQcm9kdWN0T3B0aW9uR3JvdXBNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5DcmVhdGVQcm9kdWN0T3B0aW9uR3JvdXBNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQ1JFQVRFX1BST0RVQ1RfT1BUSU9OX0dST1VQLCBpbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkT3B0aW9uR3JvdXBUb1Byb2R1Y3QodmFyaWFibGVzOiBDb2RlZ2VuLkFkZE9wdGlvbkdyb3VwVG9Qcm9kdWN0TXV0YXRpb25WYXJpYWJsZXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFkZE9wdGlvbkdyb3VwVG9Qcm9kdWN0TXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQWRkT3B0aW9uR3JvdXBUb1Byb2R1Y3RNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQUREX09QVElPTl9HUk9VUF9UT19QUk9EVUNULCB2YXJpYWJsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZE9wdGlvblRvR3JvdXAoaW5wdXQ6IENvZGVnZW4uQ3JlYXRlUHJvZHVjdE9wdGlvbklucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5BZGRPcHRpb25Ub0dyb3VwTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQWRkT3B0aW9uVG9Hcm91cE11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihBRERfT1BUSU9OX1RPX0dST1VQLCB7IGlucHV0IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVByb2R1Y3RPcHRpb24oaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uRGVsZXRlUHJvZHVjdE9wdGlvbk11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkRlbGV0ZVByb2R1Y3RPcHRpb25NdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oREVMRVRFX1BST0RVQ1RfT1BUSU9OLCB7IGlkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZU9wdGlvbkdyb3VwRnJvbVByb2R1Y3QodmFyaWFibGVzOiBDb2RlZ2VuLlJlbW92ZU9wdGlvbkdyb3VwRnJvbVByb2R1Y3RNdXRhdGlvblZhcmlhYmxlcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8XHJcbiAgICAgICAgICAgIENvZGVnZW4uUmVtb3ZlT3B0aW9uR3JvdXBGcm9tUHJvZHVjdE11dGF0aW9uLFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlJlbW92ZU9wdGlvbkdyb3VwRnJvbVByb2R1Y3RNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oUkVNT1ZFX09QVElPTl9HUk9VUF9GUk9NX1BST0RVQ1QsIHZhcmlhYmxlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHJvZHVjdE9wdGlvbihpbnB1dDogQ29kZWdlbi5VcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlVwZGF0ZVByb2R1Y3RPcHRpb25NdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5VcGRhdGVQcm9kdWN0T3B0aW9uTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFVQREFURV9QUk9EVUNUX09QVElPTiwge1xyXG4gICAgICAgICAgICBpbnB1dDogcGljayhpbnB1dCwgWydpZCcsICdjb2RlJywgJ3RyYW5zbGF0aW9ucycsICdjdXN0b21GaWVsZHMnXSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwKGlucHV0OiBDb2RlZ2VuLlVwZGF0ZVByb2R1Y3RPcHRpb25Hcm91cElucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5VcGRhdGVQcm9kdWN0T3B0aW9uR3JvdXBNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5VcGRhdGVQcm9kdWN0T3B0aW9uR3JvdXBNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oVVBEQVRFX1BST0RVQ1RfT1BUSU9OX0dST1VQLCB7XHJcbiAgICAgICAgICAgIGlucHV0OiBwaWNrKGlucHV0LCBbJ2lkJywgJ2NvZGUnLCAndHJhbnNsYXRpb25zJywgJ2N1c3RvbUZpZWxkcyddKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9kdWN0T3B0aW9uR3JvdXBzKGZpbHRlclRlcm0/OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UucXVlcnk8XHJcbiAgICAgICAgICAgIENvZGVnZW4uR2V0UHJvZHVjdE9wdGlvbkdyb3Vwc1F1ZXJ5LFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkdldFByb2R1Y3RPcHRpb25Hcm91cHNRdWVyeVZhcmlhYmxlc1xyXG4gICAgICAgID4oR0VUX1BST0RVQ1RfT1BUSU9OX0dST1VQUywge1xyXG4gICAgICAgICAgICBmaWx0ZXJUZXJtLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFzc2V0TGlzdCh0YWtlID0gMTAsIHNraXAgPSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PENvZGVnZW4uR2V0QXNzZXRMaXN0UXVlcnksIENvZGVnZW4uR2V0QXNzZXRMaXN0UXVlcnlWYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBHRVRfQVNTRVRfTElTVCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNraXAsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogU29ydE9yZGVyLkRFU0MsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCBkbyBub3QgbG9hZCBjdXN0b20gZmllbGRzIGluIHRoZSBsaXN0IHZpZXdcclxuICAgICAgICAgICAgeyBpbmNsdWRlQ3VzdG9tRmllbGRzOiBbXSB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXNzZXQoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxDb2RlZ2VuLkdldEFzc2V0UXVlcnksIENvZGVnZW4uR2V0QXNzZXRRdWVyeVZhcmlhYmxlcz4oR0VUX0FTU0VULCB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUFzc2V0cyhmaWxlczogRmlsZVtdKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5DcmVhdGVBc3NldHNNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5DcmVhdGVBc3NldHNNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQ1JFQVRFX0FTU0VUUywge1xyXG4gICAgICAgICAgICBpbnB1dDogZmlsZXMubWFwKGZpbGUgPT4gKHsgZmlsZSB9KSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQXNzZXQoaW5wdXQ6IENvZGVnZW4uVXBkYXRlQXNzZXRJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8Q29kZWdlbi5VcGRhdGVBc3NldE11dGF0aW9uLCBDb2RlZ2VuLlVwZGF0ZUFzc2V0TXV0YXRpb25WYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBVUERBVEVfQVNTRVQsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlucHV0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQXNzZXRzKGlkczogc3RyaW5nW10sIGZvcmNlOiBib29sZWFuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVBc3NldHNNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5EZWxldGVBc3NldHNNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oREVMRVRFX0FTU0VUUywge1xyXG4gICAgICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgICAgICAgYXNzZXRJZHM6IGlkcyxcclxuICAgICAgICAgICAgICAgIGZvcmNlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2lnblByb2R1Y3RzVG9DaGFubmVsKGlucHV0OiBDb2RlZ2VuLkFzc2lnblByb2R1Y3RzVG9DaGFubmVsSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFzc2lnblByb2R1Y3RzVG9DaGFubmVsTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQXNzaWduUHJvZHVjdHNUb0NoYW5uZWxNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQVNTSUdOX1BST0RVQ1RTX1RPX0NIQU5ORUwsIHtcclxuICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlUHJvZHVjdHNGcm9tQ2hhbm5lbChpbnB1dDogQ29kZWdlbi5SZW1vdmVQcm9kdWN0c0Zyb21DaGFubmVsSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLlJlbW92ZVByb2R1Y3RzRnJvbUNoYW5uZWxNdXRhdGlvbixcclxuICAgICAgICAgICAgQ29kZWdlbi5SZW1vdmVQcm9kdWN0c0Zyb21DaGFubmVsTXV0YXRpb25WYXJpYWJsZXNcclxuICAgICAgICA+KFJFTU9WRV9QUk9EVUNUU19GUk9NX0NIQU5ORUwsIHtcclxuICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzaWduVmFyaWFudHNUb0NoYW5uZWwoaW5wdXQ6IENvZGVnZW4uQXNzaWduUHJvZHVjdFZhcmlhbnRzVG9DaGFubmVsSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPFxyXG4gICAgICAgICAgICBDb2RlZ2VuLkFzc2lnblZhcmlhbnRzVG9DaGFubmVsTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uQXNzaWduVmFyaWFudHNUb0NoYW5uZWxNdXRhdGlvblZhcmlhYmxlc1xyXG4gICAgICAgID4oQVNTSUdOX1ZBUklBTlRTX1RPX0NIQU5ORUwsIHtcclxuICAgICAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVmFyaWFudHNGcm9tQ2hhbm5lbChpbnB1dDogQ29kZWdlbi5SZW1vdmVQcm9kdWN0VmFyaWFudHNGcm9tQ2hhbm5lbElucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLm11dGF0ZTxcclxuICAgICAgICAgICAgQ29kZWdlbi5SZW1vdmVWYXJpYW50c0Zyb21DaGFubmVsTXV0YXRpb24sXHJcbiAgICAgICAgICAgIENvZGVnZW4uUmVtb3ZlVmFyaWFudHNGcm9tQ2hhbm5lbE11dGF0aW9uVmFyaWFibGVzXHJcbiAgICAgICAgPihSRU1PVkVfVkFSSUFOVFNfRlJPTV9DSEFOTkVMLCB7XHJcbiAgICAgICAgICAgIGlucHV0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRhZyhpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURhdGFTZXJ2aWNlLnF1ZXJ5PENvZGVnZW4uR2V0VGFnUXVlcnksIENvZGVnZW4uR2V0VGFnUXVlcnlWYXJpYWJsZXM+KEdFVF9UQUcsIHsgaWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFnTGlzdChvcHRpb25zPzogQ29kZWdlbi5UYWdMaXN0T3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5xdWVyeTxDb2RlZ2VuLkdldFRhZ0xpc3RRdWVyeSwgQ29kZWdlbi5HZXRUYWdMaXN0UXVlcnlWYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBHRVRfVEFHX0xJU1QsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVUYWcoaW5wdXQ6IENvZGVnZW4uQ3JlYXRlVGFnSW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPENvZGVnZW4uQ3JlYXRlVGFnTXV0YXRpb24sIENvZGVnZW4uQ3JlYXRlVGFnTXV0YXRpb25WYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBDUkVBVEVfVEFHLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVRhZyhpbnB1dDogQ29kZWdlbi5VcGRhdGVUYWdJbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VEYXRhU2VydmljZS5tdXRhdGU8Q29kZWdlbi5VcGRhdGVUYWdNdXRhdGlvbiwgQ29kZWdlbi5VcGRhdGVUYWdNdXRhdGlvblZhcmlhYmxlcz4oXHJcbiAgICAgICAgICAgIFVQREFURV9UQUcsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlucHV0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlVGFnKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRGF0YVNlcnZpY2UubXV0YXRlPENvZGVnZW4uRGVsZXRlVGFnTXV0YXRpb24sIENvZGVnZW4uRGVsZXRlVGFnTXV0YXRpb25WYXJpYWJsZXM+KFxyXG4gICAgICAgICAgICBERUxFVEVfVEFHLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,8 +1,9 @@
1
1
  import { NetworkStatus } from '@apollo/client/core';
2
2
  import { notNullOrUndefined } from '@vendure/common/lib/shared-utils';
3
- import { merge, Subject } from 'rxjs';
4
- import { distinctUntilChanged, filter, finalize, map, skip, take, takeUntil, tap } from 'rxjs/operators';
3
+ import { merge, Observable, Subject } from 'rxjs';
4
+ import { distinctUntilChanged, filter, finalize, map, shareReplay, skip, startWith, take, takeUntil, } from 'rxjs/operators';
5
5
  import { GET_USER_STATUS } from './definitions/client-definitions';
6
+ import { addCustomFields } from './utils/add-custom-fields';
6
7
  /**
7
8
  * @description
8
9
  * This class wraps the Apollo Angular QueryRef object and exposes some getters
@@ -12,11 +13,27 @@ import { GET_USER_STATUS } from './definitions/client-definitions';
12
13
  * @docsPage DataService
13
14
  */
14
15
  export class QueryResult {
15
- constructor(queryRef, apollo) {
16
+ constructor(queryRef, apollo, customFieldMap) {
16
17
  this.queryRef = queryRef;
17
18
  this.apollo = apollo;
19
+ this.customFieldMap = customFieldMap;
20
+ /**
21
+ * Causes any subscriptions to the QueryRef to complete, via the use
22
+ * of the `takeUntil` operator.
23
+ */
18
24
  this.completed$ = new Subject();
19
- this.valueChanges = queryRef.valueChanges;
25
+ /**
26
+ * This Subject is used to emit new values from the QueryRef.valueChanges Observable.
27
+ * We use this rather than directly subscribing to the QueryRef.valueChanges Observable
28
+ * so that we are able to change the QueryRef and re-subscribe when necessary.
29
+ */
30
+ this.valueChangeSubject = new Subject();
31
+ /**
32
+ * We keep track of the QueryRefs which have been subscribed to so that we can avoid
33
+ * re-subscribing to the same QueryRef multiple times.
34
+ */
35
+ this.queryRefSubscribed = new WeakMap();
36
+ this.lastQuery = queryRef.options.query;
20
37
  }
21
38
  /**
22
39
  * @description
@@ -28,12 +45,40 @@ export class QueryResult {
28
45
  }).valueChanges;
29
46
  const activeChannelId$ = userStatus$.pipe(map(data => data.data.userStatus.activeChannelId), filter(notNullOrUndefined), distinctUntilChanged(), skip(1), takeUntil(this.completed$));
30
47
  const loggedOut$ = userStatus$.pipe(map(data => data.data.userStatus.isLoggedIn), distinctUntilChanged(), skip(1), filter(isLoggedIn => !isLoggedIn), takeUntil(this.completed$));
31
- this.valueChanges = merge(activeChannelId$, this.queryRef.valueChanges).pipe(tap(val => {
48
+ merge(activeChannelId$, this.valueChangeSubject)
49
+ .pipe(takeUntil(loggedOut$), takeUntil(this.completed$))
50
+ .subscribe(val => {
32
51
  if (typeof val === 'string') {
33
52
  new Promise(resolve => setTimeout(resolve, 50)).then(() => this.queryRef.refetch());
34
53
  }
35
- }), filter(val => typeof val !== 'string'), takeUntil(loggedOut$), takeUntil(this.completed$));
36
- this.queryRef.valueChanges = this.valueChanges;
54
+ });
55
+ return this;
56
+ }
57
+ /**
58
+ * @description
59
+ * Re-fetch this query whenever the custom fields change, updating the query to include the
60
+ * specified custom fields.
61
+ *
62
+ * @since 3.0.4
63
+ */
64
+ refetchOnCustomFieldsChange(customFieldsToInclude$) {
65
+ customFieldsToInclude$
66
+ .pipe(filter(customFields => {
67
+ const newQuery = addCustomFields(this.lastQuery, this.customFieldMap, customFields);
68
+ const hasChanged = JSON.stringify(newQuery) !== JSON.stringify(this.lastQuery);
69
+ return hasChanged;
70
+ }), takeUntil(this.completed$))
71
+ .subscribe(customFields => {
72
+ const newQuery = addCustomFields(this.lastQuery, this.customFieldMap, customFields);
73
+ this.lastQuery = newQuery;
74
+ const queryRef = this.apollo.watchQuery({
75
+ query: newQuery,
76
+ variables: this.queryRef.variables,
77
+ fetchPolicy: this.queryRef.options.fetchPolicy,
78
+ });
79
+ this.queryRef = queryRef;
80
+ this.subscribeToQueryRef(queryRef);
81
+ });
37
82
  return this;
38
83
  }
39
84
  /**
@@ -41,7 +86,7 @@ export class QueryResult {
41
86
  * Returns an Observable which emits a single result and then completes.
42
87
  */
43
88
  get single$() {
44
- return this.valueChanges.pipe(filter(result => result.networkStatus === NetworkStatus.ready), take(1), map(result => result.data), finalize(() => {
89
+ return this.currentQueryRefValueChanges.pipe(filter(result => result.networkStatus === NetworkStatus.ready), take(1), map(result => result.data), finalize(() => {
45
90
  this.completed$.next();
46
91
  this.completed$.complete();
47
92
  }));
@@ -51,7 +96,7 @@ export class QueryResult {
51
96
  * Returns an Observable which emits until unsubscribed.
52
97
  */
53
98
  get stream$() {
54
- return this.valueChanges.pipe(filter(result => result.networkStatus === NetworkStatus.ready), map(result => result.data), finalize(() => {
99
+ return this.currentQueryRefValueChanges.pipe(filter(result => result.networkStatus === NetworkStatus.ready), map(result => result.data), finalize(() => {
55
100
  this.completed$.next();
56
101
  this.completed$.complete();
57
102
  }));
@@ -73,5 +118,48 @@ export class QueryResult {
73
118
  mapStream(mapFn) {
74
119
  return this.stream$.pipe(map(mapFn));
75
120
  }
121
+ /**
122
+ * @description
123
+ * Signals to the internal Observable subscriptions that they should complete.
124
+ */
125
+ destroy() {
126
+ this.completed$.next();
127
+ this.completed$.complete();
128
+ }
129
+ /**
130
+ * @description
131
+ * Returns an Observable which emits the current value of the QueryRef.valueChanges Observable.
132
+ *
133
+ * We wrap the valueChanges Observable in a new Observable so that we can have a lazy
134
+ * evaluation of the valueChanges Observable. That is, we only fire the HTTP request when
135
+ * the returned Observable is subscribed to.
136
+ */
137
+ get currentQueryRefValueChanges() {
138
+ return new Observable(subscriber => {
139
+ if (!this.queryRefSubscribed.get(this.queryRef)) {
140
+ this.subscribeToQueryRef(this.queryRef);
141
+ this.queryRefSubscribed.set(this.queryRef, true);
142
+ }
143
+ this.valueChangeSubject
144
+ .pipe(startWith(this.queryRef.getCurrentResult()), shareReplay(1))
145
+ .subscribe(subscriber);
146
+ return () => {
147
+ this.queryRefSubscribed.delete(this.queryRef);
148
+ };
149
+ });
150
+ }
151
+ /**
152
+ * @description
153
+ * Subscribes to the valueChanges Observable of the given QueryRef, and stores the subscription
154
+ * so that it can be unsubscribed from when the QueryRef changes.
155
+ */
156
+ subscribeToQueryRef(queryRef) {
157
+ if (this.valueChangesSubscription) {
158
+ this.valueChangesSubscription.unsubscribe();
159
+ }
160
+ this.valueChangesSubscription = queryRef.valueChanges
161
+ .pipe(takeUntil(this.completed$))
162
+ .subscribe(this.valueChangeSubject);
163
+ }
76
164
  }
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9kYXRhL3F1ZXJ5LXJlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbkU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBQ3BCLFlBQW9CLFFBQXdCLEVBQVUsTUFBYztRQUFoRCxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFJcEUsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFIN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQzlDLENBQUM7SUFLRDs7O09BR0c7SUFDSCxzQkFBc0I7UUFDbEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQXFCO1lBQzNELEtBQUssRUFBRSxlQUFlO1NBQ3pCLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDaEIsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFDakQsTUFBTSxDQUFD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QUksS0FBcUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcG9sbG9RdWVyeVJlc3VsdCwgTmV0d29ya1N0YXR1cyB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xyXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcbmltcG9ydCB7IEFwb2xsbywgUXVlcnlSZWYgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIHNraXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgR2V0VXNlclN0YXR1c1F1ZXJ5IH0gZnJvbSAnLi4vY29tbW9uL2dlbmVyYXRlZC10eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBHRVRfVVNFUl9TVEFUVVMgfSBmcm9tICcuL2RlZmluaXRpb25zL2NsaWVudC1kZWZpbml0aW9ucyc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoaXMgY2xhc3Mgd3JhcHMgdGhlIEFwb2xsbyBBbmd1bGFyIFF1ZXJ5UmVmIG9iamVjdCBhbmQgZXhwb3NlcyBzb21lIGdldHRlcnNcclxuICogZm9yIGNvbnZlbmllbmNlLlxyXG4gKlxyXG4gKiBAZG9jc0NhdGVnb3J5IHNlcnZpY2VzXHJcbiAqIEBkb2NzUGFnZSBEYXRhU2VydmljZVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5UmVzdWx0PFQsIFYgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBxdWVyeVJlZjogUXVlcnlSZWY8VCwgVj4sIHByaXZhdGUgYXBvbGxvOiBBcG9sbG8pIHtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlcyA9IHF1ZXJ5UmVmLnZhbHVlQ2hhbmdlcztcclxuICAgIH1cclxuXHJcbiAgICBjb21wbGV0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgdmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogUmUtZmV0Y2ggdGhpcyBxdWVyeSB3aGVuZXZlciB0aGUgYWN0aXZlIENoYW5uZWwgY2hhbmdlcy5cclxuICAgICAqL1xyXG4gICAgcmVmZXRjaE9uQ2hhbm5lbENoYW5nZSgpOiBRdWVyeVJlc3VsdDxULCBWPiB7XHJcbiAgICAgICAgY29uc3QgdXNlclN0YXR1cyQgPSB0aGlzLmFwb2xsby53YXRjaFF1ZXJ5PEdldFVzZXJTdGF0dXNRdWVyeT4oe1xyXG4gICAgICAgICAgICBxdWVyeTogR0VUX1VTRVJfU1RBVFVTLFxyXG4gICAgICAgIH0pLnZhbHVlQ2hhbmdlcztcclxuICAgICAgICBjb25zdCBhY3RpdmVDaGFubmVsSWQkID0gdXNlclN0YXR1cyQucGlwZShcclxuICAgICAgICAgICAgbWFwKGRhdGEgPT4gZGF0YS5kYXRhLnVzZXJTdGF0dXMuYWN0aXZlQ2hhbm5lbElkKSxcclxuICAgICAgICAgICAgZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIHNraXAoMSksXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBsZXRlZCQpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgbG9nZ2VkT3V0JCA9IHVzZXJTdGF0dXMkLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcChkYXRhID0+IGRhdGEuZGF0YS51c2VyU3RhdHVzLmlzTG9nZ2VkSW4pLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBza2lwKDEpLFxyXG4gICAgICAgICAgICBmaWx0ZXIoaXNMb2dnZWRJbiA9PiAhaXNMb2dnZWRJbiksXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBsZXRlZCQpLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzID0gbWVyZ2UoYWN0aXZlQ2hhbm5lbElkJCwgdGhpcy5xdWVyeVJlZi52YWx1ZUNoYW5nZXMpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCh2YWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwKSkudGhlbigoKSA9PiB0aGlzLnF1ZXJ5UmVmLnJlZmV0Y2goKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBmaWx0ZXI8YW55Pih2YWwgPT4gdHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0YWtlVW50aWwobG9nZ2VkT3V0JCksXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBsZXRlZCQpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5xdWVyeVJlZi52YWx1ZUNoYW5nZXMgPSB0aGlzLnZhbHVlQ2hhbmdlcztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHdoaWNoIGVtaXRzIGEgc2luZ2xlIHJlc3VsdCBhbmQgdGhlbiBjb21wbGV0ZXMuXHJcbiAgICAgKi9cclxuICAgIGdldCBzaW5nbGUkKCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5uZXR3b3JrU3RhdHVzID09PSBOZXR3b3JrU3RhdHVzLnJlYWR5KSxcclxuICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHQuZGF0YSksXHJcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVkJC5uZXh0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZCQuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHdoaWNoIGVtaXRzIHVudGlsIHVuc3Vic2NyaWJlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0IHN0cmVhbSQoKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgICAgIGZpbHRlcihyZXN1bHQgPT4gcmVzdWx0Lm5ldHdvcmtTdGF0dXMgPT09IE5ldHdvcmtTdGF0dXMucmVhZHkpLFxyXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdC5kYXRhKSxcclxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWQkLm5leHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVkJC5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZWYoKTogUXVlcnlSZWY8VCwgVj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5UmVmO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBSZXR1cm5zIGEgc2luZ2xlLXJlc3VsdCBPYnNlcnZhYmxlIGFmdGVyIGFwcGx5aW5nIHRoZSBtYXAgZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIG1hcFNpbmdsZTxSPihtYXBGbjogKGl0ZW06IFQpID0+IFIpOiBPYnNlcnZhYmxlPFI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGUkLnBpcGUobWFwKG1hcEZuKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFJldHVybnMgYSBtdWx0aXBsZS1yZXN1bHQgT2JzZXJ2YWJsZSBhZnRlciBhcHBseWluZyB0aGUgbWFwIGZ1bmN0aW9uLlxyXG4gICAgICovXHJcbiAgICBtYXBTdHJlYW08Uj4obWFwRm46IChpdGVtOiBUKSA9PiBSKTogT2JzZXJ2YWJsZTxSPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtJC5waXBlKG1hcChtYXBGbikpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9kYXRhL3F1ZXJ5LXJlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDaEUsT0FBTyxFQUNILG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFDSCxXQUFXLEVBQ1gsSUFBSSxFQUNKLFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxHQUNaLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDcEIsWUFDWSxRQUF3QixFQUN4QixNQUFjLEVBQ2QsY0FBZ0Q7UUFGaEQsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFrQztRQUs1RDs7O1dBR0c7UUFDSyxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQU96Qzs7OztXQUlHO1FBQ0ssdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQXdCLENBQUM7UUFDakU7OztXQUdHO1FBQ0ssdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7UUF4QmhFLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQStCRDs7O09BR0c7SUFDSCxzQkFB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QztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxZQUFZO2FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ2hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcG9sbG9RdWVyeVJlc3VsdCwgTmV0d29ya1N0YXR1cyB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xuaW1wb3J0IHsgQXBvbGxvLCBRdWVyeVJlZiB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IERvY3VtZW50Tm9kZSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBmaWx0ZXIsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIHNraXAsXG4gICAgc3RhcnRXaXRoLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEN1c3RvbUZpZWxkQ29uZmlnLCBHZXRVc2VyU3RhdHVzUXVlcnkgfSBmcm9tICcuLi9jb21tb24vZ2VuZXJhdGVkLXR5cGVzJztcblxuaW1wb3J0IHsgR0VUX1VTRVJfU1RBVFVTIH0gZnJvbSAnLi9kZWZpbml0aW9ucy9jbGllbnQtZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgYWRkQ3VzdG9tRmllbGRzIH0gZnJvbSAnLi91dGlscy9hZGQtY3VzdG9tLWZpZWxkcyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGNsYXNzIHdyYXBzIHRoZSBBcG9sbG8gQW5ndWxhciBRdWVyeVJlZiBvYmplY3QgYW5kIGV4cG9zZXMgc29tZSBnZXR0ZXJzXG4gKiBmb3IgY29udmVuaWVuY2UuXG4gKlxuICogQGRvY3NDYXRlZ29yeSBzZXJ2aWNlc1xuICogQGRvY3NQYWdlIERhdGFTZXJ2aWNlXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVyeVJlc3VsdDxULCBWIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBxdWVyeVJlZjogUXVlcnlSZWY8VCwgVj4sXG4gICAgICAgIHByaXZhdGUgYXBvbGxvOiBBcG9sbG8sXG4gICAgICAgIHByaXZhdGUgY3VzdG9tRmllbGRNYXA6IE1hcDxzdHJpbmcsIEN1c3RvbUZpZWxkQ29uZmlnW10+LFxuICAgICkge1xuICAgICAgICB0aGlzLmxhc3RRdWVyeSA9IHF1ZXJ5UmVmLm9wdGlvbnMucXVlcnk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2F1c2VzIGFueSBzdWJzY3JpcHRpb25zIHRvIHRoZSBRdWVyeVJlZiB0byBjb21wbGV0ZSwgdmlhIHRoZSB1c2VcbiAgICAgKiBvZiB0aGUgYHRha2VVbnRpbGAgb3BlcmF0b3IuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb21wbGV0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBUaGUgc3Vic2NyaXB0aW9uIHRvIHRoZSBjdXJyZW50IFF1ZXJ5UmVmLnZhbHVlQ2hhbmdlcyBPYnNlcnZhYmxlLlxuICAgICAqIFRoaXMgaXMgc3RvcmVkIHNvIHRoYXQgaXQgY2FuIGJlIHVuc3Vic2NyaWJlZCBmcm9tIHdoZW4gdGhlIFF1ZXJ5UmVmXG4gICAgICogY2hhbmdlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIC8qKlxuICAgICAqIFRoaXMgU3ViamVjdCBpcyB1c2VkIHRvIGVtaXQgbmV3IHZhbHVlcyBmcm9tIHRoZSBRdWVyeVJlZi52YWx1ZUNoYW5nZXMgT2JzZXJ2YWJsZS5cbiAgICAgKiBXZSB1c2UgdGhpcyByYXRoZXIgdGhhbiBkaXJlY3RseSBzdWJzY3JpYmluZyB0byB0aGUgUXVlcnlSZWYudmFsdWVDaGFuZ2VzIE9ic2VydmFibGVcbiAgICAgKiBzbyB0aGF0IHdlIGFyZSBhYmxlIHRvIGNoYW5nZSB0aGUgUXVlcnlSZWYgYW5kIHJlLXN1YnNjcmliZSB3aGVuIG5lY2Vzc2FyeS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHZhbHVlQ2hhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+PigpO1xuICAgIC8qKlxuICAgICAqIFdlIGtlZXAgdHJhY2sgb2YgdGhlIFF1ZXJ5UmVmcyB3aGljaCBoYXZlIGJlZW4gc3Vic2NyaWJlZCB0byBzbyB0aGF0IHdlIGNhbiBhdm9pZFxuICAgICAqIHJlLXN1YnNjcmliaW5nIHRvIHRoZSBzYW1lIFF1ZXJ5UmVmIG11bHRpcGxlIHRpbWVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcXVlcnlSZWZTdWJzY3JpYmVkID0gbmV3IFdlYWtNYXA8UXVlcnlSZWY8VCwgVj4sIGJvb2xlYW4+KCk7XG4gICAgLyoqXG4gICAgICogV2Ugc3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIGxhc3QgcXVlcnkgc28gdGhhdCB3ZSBjYW4gY29tcGFyZSBpdCB3aXRoIHRoZSBuZXh0IHF1ZXJ5XG4gICAgICogYW5kIGF2b2lkIHJlLWZldGNoaW5nIHRoZSBzYW1lIHF1ZXJ5IG11bHRpcGxlIHRpbWVzLiBUaGlzIGlzIGFwcGxpY2FibGUgdG8gdGhlIGNvZGVcbiAgICAgKiBwYXRocyB0aGF0IGFjdHVhbGx5IGNoYW5nZSB0aGUgcXVlcnksIGkuZS4gcmVmZXRjaE9uQ3VzdG9tRmllbGRzQ2hhbmdlKCkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBsYXN0UXVlcnk6IERvY3VtZW50Tm9kZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFJlLWZldGNoIHRoaXMgcXVlcnkgd2hlbmV2ZXIgdGhlIGFjdGl2ZSBDaGFubmVsIGNoYW5nZXMuXG4gICAgICovXG4gICAgcmVmZXRjaE9uQ2hhbm5lbENoYW5nZSgpOiBRdWVyeVJlc3VsdDxULCBWPiB7XG4gICAgICAgIGNvbnN0IHVzZXJTdGF0dXMkID0gdGhpcy5hcG9sbG8ud2F0Y2hRdWVyeTxHZXRVc2VyU3RhdHVzUXVlcnk+KHtcbiAgICAgICAgICAgIHF1ZXJ5OiBHRVRfVVNFUl9TVEFUVVMsXG4gICAgICAgIH0pLnZhbHVlQ2hhbmdlcztcbiAgICAgICAgY29uc3QgYWN0aXZlQ2hhbm5lbElkJCA9IHVzZXJTdGF0dXMkLnBpcGUoXG4gICAgICAgICAgICBtYXAoZGF0YSA9PiBkYXRhLmRhdGEudXNlclN0YXR1cy5hY3RpdmVDaGFubmVsSWQpLFxuICAgICAgICAgICAgZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBsZXRlZCQpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsb2dnZWRPdXQkID0gdXNlclN0YXR1cyQucGlwZShcbiAgICAgICAgICAgIG1hcChkYXRhID0+IGRhdGEuZGF0YS51c2VyU3RhdHVzLmlzTG9nZ2VkSW4pLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIHNraXAoMSksXG4gICAgICAgICAgICBmaWx0ZXIoaXNMb2dnZWRJbiA9PiAhaXNMb2dnZWRJbiksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5jb21wbGV0ZWQkKSxcbiAgICAgICAgKTtcblxuICAgICAgICBtZXJnZShhY3RpdmVDaGFubmVsSWQkLCB0aGlzLnZhbHVlQ2hhbmdlU3ViamVjdClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbChsb2dnZWRPdXQkKSwgdGFrZVVudGlsKHRoaXMuY29tcGxldGVkJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCA1MCkpLnRoZW4oKCkgPT4gdGhpcy5xdWVyeVJlZi5yZWZldGNoKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBSZS1mZXRjaCB0aGlzIHF1ZXJ5IHdoZW5ldmVyIHRoZSBjdXN0b20gZmllbGRzIGNoYW5nZSwgdXBkYXRpbmcgdGhlIHF1ZXJ5IHRvIGluY2x1ZGUgdGhlXG4gICAgICogc3BlY2lmaWVkIGN1c3RvbSBmaWVsZHMuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4wLjRcbiAgICAgKi9cbiAgICByZWZldGNoT25DdXN0b21GaWVsZHNDaGFuZ2UoY3VzdG9tRmllbGRzVG9JbmNsdWRlJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT4pOiBRdWVyeVJlc3VsdDxULCBWPiB7XG4gICAgICAgIGN1c3RvbUZpZWxkc1RvSW5jbHVkZSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihjdXN0b21GaWVsZHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdRdWVyeSA9IGFkZEN1c3RvbUZpZWxkcyh0aGlzLmxhc3RRdWVyeSwgdGhpcy5jdXN0b21GaWVsZE1hcCwgY3VzdG9tRmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzQ2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KG5ld1F1ZXJ5KSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5sYXN0UXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzQ2hhbmdlZDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5jb21wbGV0ZWQkKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoY3VzdG9tRmllbGRzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdRdWVyeSA9IGFkZEN1c3RvbUZpZWxkcyh0aGlzLmxhc3RRdWVyeSwgdGhpcy5jdXN0b21GaWVsZE1hcCwgY3VzdG9tRmllbGRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RRdWVyeSA9IG5ld1F1ZXJ5O1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UmVmID0gdGhpcy5hcG9sbG8ud2F0Y2hRdWVyeTxULCBWPih7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBuZXdRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiB0aGlzLnF1ZXJ5UmVmLnZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6IHRoaXMucXVlcnlSZWYub3B0aW9ucy5mZXRjaFBvbGljeSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5UmVmID0gcXVlcnlSZWY7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1F1ZXJ5UmVmKHF1ZXJ5UmVmKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgd2hpY2ggZW1pdHMgYSBzaW5nbGUgcmVzdWx0IGFuZCB0aGVuIGNvbXBsZXRlcy5cbiAgICAgKi9cbiAgICBnZXQgc2luZ2xlJCgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXJ5UmVmVmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5uZXR3b3JrU3RhdHVzID09PSBOZXR3b3JrU3RhdHVzLnJlYWR5KSxcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdC5kYXRhKSxcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZCQubmV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVkJC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHdoaWNoIGVtaXRzIHVudGlsIHVuc3Vic2NyaWJlZC5cbiAgICAgKi9cbiAgICBnZXQgc3RyZWFtJCgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXJ5UmVmVmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5uZXR3b3JrU3RhdHVzID09PSBOZXR3b3JrU3RhdHVzLnJlYWR5KSxcbiAgICAgICAgICAgIG1hcChyZXN1bHQgPT4gcmVzdWx0LmRhdGEpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVkJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWQkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgcmVmKCk6IFF1ZXJ5UmVmPFQsIFY+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnlSZWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogUmV0dXJucyBhIHNpbmdsZS1yZXN1bHQgT2JzZXJ2YWJsZSBhZnRlciBhcHBseWluZyB0aGUgbWFwIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG1hcFNpbmdsZTxSPihtYXBGbjogKGl0ZW06IFQpID0+IFIpOiBPYnNlcnZhYmxlPFI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlJC5waXBlKG1hcChtYXBGbikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFJldHVybnMgYSBtdWx0aXBsZS1yZXN1bHQgT2JzZXJ2YWJsZSBhZnRlciBhcHBseWluZyB0aGUgbWFwIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG1hcFN0cmVhbTxSPihtYXBGbjogKGl0ZW06IFQpID0+IFIpOiBPYnNlcnZhYmxlPFI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtJC5waXBlKG1hcChtYXBGbikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFNpZ25hbHMgdG8gdGhlIGludGVybmFsIE9ic2VydmFibGUgc3Vic2NyaXB0aW9ucyB0aGF0IHRoZXkgc2hvdWxkIGNvbXBsZXRlLlxuICAgICAqL1xuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY29tcGxldGVkJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuY29tcGxldGVkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUXVlcnlSZWYudmFsdWVDaGFuZ2VzIE9ic2VydmFibGUuXG4gICAgICpcbiAgICAgKiBXZSB3cmFwIHRoZSB2YWx1ZUNoYW5nZXMgT2JzZXJ2YWJsZSBpbiBhIG5ldyBPYnNlcnZhYmxlIHNvIHRoYXQgd2UgY2FuIGhhdmUgYSBsYXp5XG4gICAgICogZXZhbHVhdGlvbiBvZiB0aGUgdmFsdWVDaGFuZ2VzIE9ic2VydmFibGUuIFRoYXQgaXMsIHdlIG9ubHkgZmlyZSB0aGUgSFRUUCByZXF1ZXN0IHdoZW5cbiAgICAgKiB0aGUgcmV0dXJuZWQgT2JzZXJ2YWJsZSBpcyBzdWJzY3JpYmVkIHRvLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0IGN1cnJlbnRRdWVyeVJlZlZhbHVlQ2hhbmdlcygpOiBPYnNlcnZhYmxlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+PiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5xdWVyeVJlZlN1YnNjcmliZWQuZ2V0KHRoaXMucXVlcnlSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1F1ZXJ5UmVmKHRoaXMucXVlcnlSZWYpO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSZWZTdWJzY3JpYmVkLnNldCh0aGlzLnF1ZXJ5UmVmLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJqZWN0XG4gICAgICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKHRoaXMucXVlcnlSZWYuZ2V0Q3VycmVudFJlc3VsdCgpKSwgc2hhcmVSZXBsYXkoMSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVJlZlN1YnNjcmliZWQuZGVsZXRlKHRoaXMucXVlcnlSZWYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogU3Vic2NyaWJlcyB0byB0aGUgdmFsdWVDaGFuZ2VzIE9ic2VydmFibGUgb2YgdGhlIGdpdmVuIFF1ZXJ5UmVmLCBhbmQgc3RvcmVzIHRoZSBzdWJzY3JpcHRpb25cbiAgICAgKiBzbyB0aGF0IGl0IGNhbiBiZSB1bnN1YnNjcmliZWQgZnJvbSB3aGVuIHRoZSBRdWVyeVJlZiBjaGFuZ2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9RdWVyeVJlZihxdWVyeVJlZjogUXVlcnlSZWY8VCwgVj4pIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uID0gcXVlcnlSZWYudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb21wbGV0ZWQkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy52YWx1ZUNoYW5nZVN1YmplY3QpO1xuICAgIH1cbn1cbiJdfQ==