ng-easycommerce 0.0.691 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +17 -0
  2. package/assets/ec-i18n/ct.json +3 -0
  3. package/assets/ec-i18n/en.json +3 -0
  4. package/assets/ec-i18n/es.json +3 -0
  5. package/assets/ec-i18n/fr.json +3 -0
  6. package/assets/ec-i18n/gl.json +3 -0
  7. package/assets/ec-i18n/pr.json +3 -0
  8. package/bundles/ng-easycommerce.umd.js +1219 -653
  9. package/bundles/ng-easycommerce.umd.js.map +1 -1
  10. package/bundles/ng-easycommerce.umd.min.js +1 -1
  11. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  12. package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +103 -5
  13. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +22 -8
  14. package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +34 -11
  15. package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +18 -7
  16. package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +12 -3
  17. package/esm2015/lib/interfaces/cart-item.js +1 -1
  18. package/esm2015/lib/interfaces/cart-totals.js +1 -0
  19. package/esm2015/lib/interfaces/channel.js +1 -0
  20. package/esm2015/lib/interfaces/checkout-data.js +1 -1
  21. package/esm2015/lib/interfaces/product.js +1 -1
  22. package/esm2015/lib/services/account/orders.service.js +18 -3
  23. package/esm2015/lib/services/cart.service.js +138 -23
  24. package/esm2015/lib/services/checkout/checkout.service.js +34 -4
  25. package/esm2015/lib/utils/order-util.service.js +99 -7
  26. package/esm2015/lib/utils/price-presentation.service.js +127 -0
  27. package/esm2015/public-api.js +2 -1
  28. package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +111 -5
  29. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +35 -8
  30. package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +36 -13
  31. package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +18 -7
  32. package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +12 -3
  33. package/esm5/lib/interfaces/cart-item.js +1 -1
  34. package/esm5/lib/interfaces/cart-totals.js +1 -0
  35. package/esm5/lib/interfaces/channel.js +1 -0
  36. package/esm5/lib/interfaces/checkout-data.js +1 -1
  37. package/esm5/lib/interfaces/product.js +1 -1
  38. package/esm5/lib/services/account/orders.service.js +18 -3
  39. package/esm5/lib/services/cart.service.js +154 -23
  40. package/esm5/lib/services/checkout/checkout.service.js +30 -4
  41. package/esm5/lib/utils/order-util.service.js +99 -7
  42. package/esm5/lib/utils/price-presentation.service.js +130 -0
  43. package/esm5/public-api.js +2 -1
  44. package/fesm2015/ng-easycommerce.js +1181 -652
  45. package/fesm2015/ng-easycommerce.js.map +1 -1
  46. package/fesm5/ng-easycommerce.js +1219 -654
  47. package/fesm5/ng-easycommerce.js.map +1 -1
  48. package/lib/ec-component/account-ec/order-ec/order-ec.component.d.ts +15 -0
  49. package/lib/ec-component/cart-ec/cart-ec.component.d.ts +8 -1
  50. package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +1 -1
  51. package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +2 -2
  52. package/lib/interfaces/cart-item.d.ts +27 -2
  53. package/lib/interfaces/cart-totals.d.ts +19 -0
  54. package/lib/interfaces/channel.d.ts +15 -0
  55. package/lib/interfaces/checkout-data.d.ts +2 -1
  56. package/lib/interfaces/product.d.ts +48 -1
  57. package/lib/services/account/orders.service.d.ts +5 -0
  58. package/lib/services/cart.service.d.ts +26 -5
  59. package/lib/utils/order-util.service.d.ts +22 -0
  60. package/lib/utils/price-presentation.service.d.ts +56 -0
  61. package/ng-easycommerce.metadata.json +1 -1
  62. package/package.json +1 -1
  63. package/public-api.d.ts +3 -0
@@ -197,9 +197,39 @@ let CheckoutService = class CheckoutService {
197
197
  return ({ ok: true, require_login: false, message: '' });
198
198
  });
199
199
  this.updateAsociatedData = (cart) => {
200
- var _a, _b;
200
+ var _a, _b, _c;
201
+ const summary = this.cartService && this.cartService.getCartSummaryPricePresentation
202
+ ? this.cartService.getCartSummaryPricePresentation(cart, undefined, true)
203
+ : null;
204
+ if (((_a = summary) === null || _a === void 0 ? void 0 : _a.source) === 'linePricing') {
205
+ const result = [
206
+ { type: 'productsBeforeDiscounts', name: 'products-before-discounts', amount: summary.productsBeforeDiscounts },
207
+ ...(summary.lineDiscounts !== 0
208
+ ? [{ type: 'lineDiscount', name: 'line-discounts', amount: summary.lineDiscounts }]
209
+ : []),
210
+ { type: 'subtotal', name: 'subtotal', amount: summary.subtotal },
211
+ ...(summary.orderDiscount !== 0
212
+ ? [{ type: 'discount', name: 'discount', amount: summary.orderDiscount }]
213
+ : []),
214
+ ...(summary.couponDiscount !== null && summary.couponDiscount !== 0
215
+ ? [{ type: 'coupon', name: 'coupon', amount: summary.couponDiscount }]
216
+ : []),
217
+ ...(summary.taxes !== 0
218
+ ? [{ type: 'taxes', name: 'taxes', amount: summary.taxes, taxesIncludedInTotal: summary.taxesIncludedInTotal }]
219
+ : []),
220
+ ...(summary.clientTaxes !== 0
221
+ ? [{ type: 'clientTaxes', name: 'clientTaxes', amount: summary.clientTaxes }]
222
+ : []),
223
+ ...(summary.shipping !== null
224
+ ? [{ type: 'shipment', name: 'shipment', amount: summary.shipping }]
225
+ : []),
226
+ { type: 'total', name: 'total', amount: summary.total }
227
+ ];
228
+ this.asociatedDataSubject.next(result);
229
+ return;
230
+ }
201
231
  let result = this.orderUtils.getSummaryPromotions(cart);
202
- const totals = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals;
232
+ const totals = (_b = cart) === null || _b === void 0 ? void 0 : _b.totals;
203
233
  if (!totals) {
204
234
  this.asociatedDataSubject.next(result);
205
235
  return;
@@ -214,7 +244,7 @@ let CheckoutService = class CheckoutService {
214
244
  };
215
245
  result.push(total);
216
246
  }
217
- if (shipmentAmount !== null && ((_b = result) === null || _b === void 0 ? void 0 : _b.length)) {
247
+ if (shipmentAmount !== null && ((_c = result) === null || _c === void 0 ? void 0 : _c.length)) {
218
248
  const shipmentIndex = result.findIndex(item => item.type === 'shipment');
219
249
  const shipmentItem = {
220
250
  type: 'shipment',
@@ -283,4 +313,4 @@ CheckoutService = __decorate([
283
313
  })
284
314
  ], CheckoutService);
285
315
  export { CheckoutService };
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFLbEQsSUFBYSxlQUFlLEdBQTVCLE1BQWEsZUFBZTtJQWlDeEIsWUFBb0IsVUFBNkIsRUFDckMsV0FBd0IsRUFD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LGVBQWUsQ0E2UTNCO1NBN1FZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RlcEksIFN0ZXBUeXBlSSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3RlcCc7XG5pbXBvcnQgeyBTdGVwIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jaGVja291dC9zdGVwJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSwgQ2hlY2tvdXREYXRhVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvb3JkZXItdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy91c2VyJztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJcFNlcnZpY2UgfSBmcm9tICcuLi9pcC1hZGRyZXNzLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0U2VydmljZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBiYXNlQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NoZWNrb3V0LycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpO1xuICAgIGdldFBheW1lbnRNZXRob2RzQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3BheW1lbnQnO1xuICAgIHB1dEFkZHJlc3NBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvYWRkcmVzcyc7XG4gICAgcHV0UGF5bWVudEFwaSA9IChtZXRob2QpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9wYXltZW50LycgKyBtZXRob2Q7XG4gICAgY29tcGxldGVBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvY29tcGxldGUnO1xuICAgIHBlcnNpc3RTaGlwbWVudEFwaSA9ICgpID0+ICcnO1xuICAgIGdldFByZWZlcmVuY2VBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvbWVyY2Fkby1wYWdvLycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpICsgJy9wcmVmZXJlbmNlJztcbiAgICBnZXRIYXNQdXJjaGFzZUNvbmRpdGlvbnMgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL2hhc19wdXJjaGFzZV9jb25kaXRpb25zJztcblxuICAgIHByaXZhdGUgY2FuQ2hlY2tvdXRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIG9uUmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RlcFtdPihudWxsKTtcbiAgICBwcml2YXRlIHBheW1lbnRNZXRob2RzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBvcmRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gICAgcHJpdmF0ZSBhc29jaWF0ZWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXREYXRhW10+KG51bGwpO1xuICAgIHByaXZhdGUgb3JkZXI6IGFueTtcbiAgICBwcml2YXRlIGNoZWNrb3V0X2RhdGE6IGFueSA9IHt9O1xuICAgIHB1YmxpYyB0b3RhbDtcbiAgICBwcml2YXRlIGNhcnRMb2NhbDtcbiAgICBwcml2YXRlIHVzZXI6IFVzZXI7XG5cbiAgICBwdWJsaWMgb3JkZXIkID0gdGhpcy5vcmRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIHN0YXRlJCA9IHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGNhbkNoZWNrb3V0JCA9IHRoaXMuY2FuQ2hlY2tvdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBhc29jaWF0ZWREYXRhJCA9IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG9uUmVhZHkkID0gdGhpcy5vblJlYWR5U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgcGF5bWVudE1ldGhvZHMkID0gdGhpcy5wYXltZW50TWV0aG9kc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3JkZXJVdGlsczogT3JkZXJVdGlsaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBpcFNlcnZpY2U6IElwU2VydmljZSkge1xuXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLCB0aGlzLmNhcnRTZXJ2aWNlLmxvYWRpbmddKS5zdWJzY3JpYmUoKFtpdGVtcywgbG9hZGluZ10pID0+IHtcbiAgICAgICAgICAgIGlmICghbG9hZGluZyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dCh0cnVlKVxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0VG90YWxBbW91bnQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlcztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnQuc3Vic2NyaWJlKGNhcnQgPT4gY2FydCAmJiAodGhpcy5jYXJ0TG9jYWwgPSBjYXJ0KSAmJiB0aGlzLnVwZGF0ZUFzb2NpYXRlZERhdGEoY2FydCkpO1xuICAgICAgICB0aGlzLm9yZGVyJC5zdWJzY3JpYmUob3JkZXIgPT4gb3JkZXIgJiYgdGhpcy51cGRhdGVBc29jaWF0ZWREYXRhKG9yZGVyKSlcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUHJvZmlsZSgpLnN1YnNjcmliZSh1c2VyID0+IHRoaXMudXNlciA9IHVzZXIpXG4gICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmVycm9yJC5waXBlKGZpbHRlcihyZXMgPT4gcmVzICE9IG51bGwpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAnb3V0X29mX3N0b2NrJyB8fCByZXMuY29kZSA9PSAnaXRlbXNfd2l0aF9wcm9kdWN0X29yX3Byb2R1Y3RfdmFyaWFudF9ub3RfZW5hYmxlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3JlZGlyZWN0LWNhcnQnKVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9jYXJ0JylcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgfVxuXG4gICAgdXBkYXRlT3JkZXIgPSAob3JkZXIpID0+IG9yZGVyICYmIHRoaXMub3JkZXJTdWJqZWN0Lm5leHQob3JkZXIpO1xuXG4gICAgc2V0Q2hlY2tvdXROb3RlcyA9IChub3Rlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0YS5ub3RlcyA9IG5vdGVzIHx8ICcnO1xuICAgIH1cblxuICAgIGdldENoZWNrb3V0Tm90ZXMgPSAoKSA9PiB0aGlzLmNoZWNrb3V0X2RhdGEubm90ZXMgfHwgJyc7XG5cbiAgICBzZXRQYXltZW50TWV0aG9kcyA9IChtZXRob2RzOiBhbnlbXSkgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRNZXRob2RzU3ViamVjdC5uZXh0KG1ldGhvZHMgfHwgW10pO1xuICAgIH1cblxuICAgIHByZWZldGNoUGF5bWVudE1ldGhvZHMgPSBhc3luYyAoKSA9PlxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuZ2V0UGF5bWVudE1ldGhvZHNBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0aG9kcyA9IHJlcy5wYXltZW50cz8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXMocmVzLnBheW1lbnRzWzBdLm1ldGhvZHMpLm1hcChrZXkgPT4gcmVzLnBheW1lbnRzWzBdLm1ldGhvZHNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXltZW50TWV0aG9kc1N1YmplY3QubmV4dChtZXRob2RzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgZ2V0U3RlcERhdGEgPSAoc3RlcF9uYW1lOiBTdGVwVHlwZUkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoIXN0ZXBzIHx8ICFzdGVwcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBzdGVwX3Jlc3VsdCA9IHN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcbiAgICAgICAgcmV0dXJuIChzdGVwX3Jlc3VsdCAmJiBzdGVwX3Jlc3VsdC5kYXRhKSB8fCBudWxsO1xuICAgIH1cblxuICAgIHNldFN0ZXBzID0gKHN0ZXBzOiBTdGVwSVtdLCBhdXRvaGFuZGxlID0gdHJ1ZSkgPT4ge1xuICAgICAgICBsZXQgZmluYWxfc3RlcHMgPSBbXTtcbiAgICAgICAgc3RlcHMuZm9yRWFjaCgoc3RlcCwgaSkgPT4gZmluYWxfc3RlcHMucHVzaChuZXcgU3RlcChzdGVwLm5hbWUsIHN0ZXAucHJpb3JpdHkgfHwgKGkgKyAxKSkpKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChmaW5hbF9zdGVwcyk7XG5cbiAgICAgICAgLy8gT2J0ZW5lciBJUCB5IHViaWNhY2nDs25cbiAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgaXA6IHRoaXMuaXBTZXJ2aWNlLmdldElwKCkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSksXG4gICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5pcFNlcnZpY2UuZ2V0TG9jYXRpb24oKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICB9KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgaXA6IHJlc3VsdHMuaXA/LmlwIHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiByZXN1bHRzLmxvY2F0aW9uPy5jb3VudHJ5IHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBjaXR5OiByZXN1bHRzLmxvY2F0aW9uPy5jaXR5IHx8ICd1bmtub3duJ1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHVybFdpdGhQYXJhbXMgPSBgJHt0aGlzLmdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucygpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXRFcnJvck5vdEhhbmRsZXIodXJsV2l0aFBhcmFtcykudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdjaGVja291dF9pbml0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jYXJ0TG9jYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jYXJ0TG9jYWw/LmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2FydExvY2FsPy50b3RhbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRTdGVwUmVhZHkgPSBhc3luYyAoc3RlcF9udW1iZXIsIGRhdGEsIG9yZGVyPywgYXV0b21hdGljPykgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnRBbGxTdGVwc0Zyb20oc3RlcF9udW1iZXIpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgICAgICBzdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5wcmlvcml0eSA9PSBzdGVwX251bWJlcikucmVhZHkoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHN0ZXBzKTtcblxuICAgICAgICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IG9yZGVyLnRvdGFscy50b3RhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDaGVja291dFJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RlcHNbc3RlcHMubGVuZ3RoIC0gMV0ubmFtZSA9PSAnc2hpcG1lbnQnKSB7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sIDE1MCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNldFN0ZXBEb2luZyA9IGFzeW5jIChzdGVwX251bWJlcikgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBzdGVwcyA9IGF3YWl0IHRoaXMucmVzdGFydEFsbFN0ZXBzRnJvbShzdGVwX251bWJlciwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgc3RlcHMuZmluZChzdGVwID0+IHN0ZXAucHJpb3JpdHkgPT0gc3RlcF9udW1iZXIpLmRvaW5nKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXN0YXJ0QWxsU3RlcHNGcm9tID0gKHN0ZXBfbnVtYmVyLCBpbmNsdWRlZCA9IHRydWUsIHVwZGF0ZSA9IHRydWUpID0+IHtcbiAgICAgICAgbGV0IHN0ZXBzID0gdGhpcy5zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgc3RlcHMgPSBzdGVwcy5tYXAoKHN0ZXApID0+IHtcbiAgICAgICAgICAgIGluY2x1ZGVkXG4gICAgICAgICAgICAgICAgPyAoc3RlcC5wcmlvcml0eSA+PSBzdGVwX251bWJlcikgJiYgc3RlcC5yZXN0YXJ0KClcbiAgICAgICAgICAgICAgICA6IChzdGVwLnByaW9yaXR5ID4gc3RlcF9udW1iZXIpICYmIHN0ZXAucmVzdGFydCgpXG4gICAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfSlcbiAgICAgICAgdXBkYXRlICYmIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuICAgICAgICByZXR1cm4gc3RlcHM7XG4gICAgfVxuXG4gICAgaXNDaGVja291dFJlYWR5ID0gKCkgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc3RlcF9taXNzaW5nID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAuaXNQZW5kaW5nKCkpO1xuICAgICAgICByZXR1cm4gIXN0ZXBfbWlzc2luZztcbiAgICB9XG5cbiAgICBpc1N0ZXBSZWFkeSA9IChzdGVwX25hbWUpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpIHx8IFtdO1xuICAgICAgICBpZiAoIXN0ZXBzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBzdGVwID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PSBzdGVwX25hbWUpO1xuICAgICAgICBpZiAoIXN0ZXApIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gc3RlcC5pc1JlYWR5KCk7XG4gICAgfTtcblxuICAgIHNldE9yZGVyID0gKG9yZGVyKSA9PiB7IHRoaXMub3JkZXIgPSBvcmRlciwgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcikgfTtcbiAgICBnZXRPcmRlciA9ICgpID0+IHRoaXMub3JkZXIgfHwgdGhpcy5vcmRlclN1YmplY3QudmFsdWU7XG5cbiAgICBwcml2YXRlIGNvbXBsZXRlT3JkZXIgPSAoKSA9PiB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMuY29tcGxldGVBcGkoKSwgeyBlbWFpbDogdGhpcy5jaGVja291dF9kYXRhLmVtYWlsLCBub3RlczogdGhpcy5jaGVja291dF9kYXRhLm5vdGVzIHx8ICcnIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgY29tcGxldGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tcGxldGVPcmRlcigpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcmVzdWx0IHx8XG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgfHxcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID09PSAnaW5zdWZmaWNpZW50X2NyZWRpdCcgfHxcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID09PSAnZXJyb3InXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jaGFuZ2VIYXZlVG9VcGRhdGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiAoeyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IHRydWUsIG1lc3NhZ2U6ICdub3QtY29tcGxldGVkJyB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldE9yZGVyKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3B1cmNoYXNlJywgeyAuLi5yZXN1bHQsIGN1cnJlbmN5OiByZXN1bHQuY3VycmVuY3ksIHZhbHVlOiByZXN1bHQudG90YWwgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2xlYXJBbmRSZXNldENhcnQoKTtcbiAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMub25SZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybiAoeyBvazogdHJ1ZSwgcmVxdWlyZV9sb2dpbjogZmFsc2UsIG1lc3NhZ2U6ICcnIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUFzb2NpYXRlZERhdGEgPSAoY2FydDogYW55KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm9yZGVyVXRpbHMuZ2V0U3VtbWFyeVByb21vdGlvbnMoY2FydCk7XG4gICAgICAgIGNvbnN0IHRvdGFscyA9IGNhcnQ/LnRvdGFscztcbiAgICAgICAgaWYgKCF0b3RhbHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNoaXBtZW50QW1vdW50ID0gdGhpcy5vcmRlclV0aWxzLmdldFN1bW1hcnlTaGlwbWVudEFtb3VudChjYXJ0KTtcbiAgICAgICAgaWYgKHRvdGFscy50YXhlcyAhPSAwKSB7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcbiAgICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RheGVzJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndGF4ZXMnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogdG90YWxzLnRheGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0b3RhbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoaXBtZW50QW1vdW50ICE9PSBudWxsICYmIHJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzaGlwbWVudEluZGV4ID0gcmVzdWx0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3NoaXBtZW50Jyk7XG4gICAgICAgICAgICBjb25zdCBzaGlwbWVudEl0ZW06IENoZWNrb3V0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdzaGlwbWVudCcsXG4gICAgICAgICAgICAgICAgYW1vdW50OiBzaGlwbWVudEFtb3VudFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHNoaXBtZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NoaXBtZW50SW5kZXhdID0gc2hpcG1lbnRJdGVtO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEluZGV4ID0gcmVzdWx0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5zbGljZSgwLCB0b3RhbEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBtZW50SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5zbGljZSh0b3RhbEluZGV4KVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNoaXBtZW50SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xuICAgIH1cblxuICAgIHJlc3RhcnRDaGVja291dCA9ICgpID0+IHsgfVxuXG59XG4iXX0=
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFLbEQsSUFBYSxlQUFlLEdBQTVCLE1BQWEsZUFBZTtJQWlDeEIsWUFBb0IsVUFBNkIsRUFDckMsV0FBd0IsRUFD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QUssSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUN4RSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDckUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDL0QsR0FBRyxDQUFDLEVBQUU7WUFDRixJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksY0FBYyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksbURBQW1ELEVBQUU7Z0JBQy9GLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO2dCQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUN0QyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDWjtRQUNMLENBQUMsQ0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVELFFBQVE7SUFDUixDQUFDO0NBd09KLENBQUE7O1lBNVFtQyxpQkFBaUI7WUFDeEIsV0FBVztZQUNoQixTQUFTO1lBQ0YsWUFBWTtZQUNmLG1CQUFtQjtZQUNiLGdCQUFnQjtZQUN0QixXQUFXO1lBQ2YsTUFBTTtZQUNBLG1CQUFtQjtZQUN0QixTQUFTOzs7QUExQ3ZCLGVBQWU7SUFIM0IsVUFBVSxDQUFDO1FBQ1IsVUFBVSxFQUFFLE1BQU07S0FDckIsQ0FBQztHQUNXLGVBQWUsQ0E2UzNCO1NBN1NZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RlcEksIFN0ZXBUeXBlSSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3RlcCc7XG5pbXBvcnQgeyBTdGVwIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jaGVja291dC9zdGVwJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSwgQ2hlY2tvdXREYXRhVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvb3JkZXItdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy91c2VyJztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJcFNlcnZpY2UgfSBmcm9tICcuLi9pcC1hZGRyZXNzLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0U2VydmljZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBiYXNlQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NoZWNrb3V0LycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpO1xuICAgIGdldFBheW1lbnRNZXRob2RzQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3BheW1lbnQnO1xuICAgIHB1dEFkZHJlc3NBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvYWRkcmVzcyc7XG4gICAgcHV0UGF5bWVudEFwaSA9IChtZXRob2QpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9wYXltZW50LycgKyBtZXRob2Q7XG4gICAgY29tcGxldGVBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvY29tcGxldGUnO1xuICAgIHBlcnNpc3RTaGlwbWVudEFwaSA9ICgpID0+ICcnO1xuICAgIGdldFByZWZlcmVuY2VBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvbWVyY2Fkby1wYWdvLycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpICsgJy9wcmVmZXJlbmNlJztcbiAgICBnZXRIYXNQdXJjaGFzZUNvbmRpdGlvbnMgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL2hhc19wdXJjaGFzZV9jb25kaXRpb25zJztcblxuICAgIHByaXZhdGUgY2FuQ2hlY2tvdXRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIG9uUmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RlcFtdPihudWxsKTtcbiAgICBwcml2YXRlIHBheW1lbnRNZXRob2RzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBvcmRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gICAgcHJpdmF0ZSBhc29jaWF0ZWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXREYXRhW10+KG51bGwpO1xuICAgIHByaXZhdGUgb3JkZXI6IGFueTtcbiAgICBwcml2YXRlIGNoZWNrb3V0X2RhdGE6IGFueSA9IHt9O1xuICAgIHB1YmxpYyB0b3RhbDtcbiAgICBwcml2YXRlIGNhcnRMb2NhbDtcbiAgICBwcml2YXRlIHVzZXI6IFVzZXI7XG5cbiAgICBwdWJsaWMgb3JkZXIkID0gdGhpcy5vcmRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIHN0YXRlJCA9IHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGNhbkNoZWNrb3V0JCA9IHRoaXMuY2FuQ2hlY2tvdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBhc29jaWF0ZWREYXRhJCA9IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG9uUmVhZHkkID0gdGhpcy5vblJlYWR5U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgcGF5bWVudE1ldGhvZHMkID0gdGhpcy5wYXltZW50TWV0aG9kc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3JkZXJVdGlsczogT3JkZXJVdGlsaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBpcFNlcnZpY2U6IElwU2VydmljZSkge1xuXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLCB0aGlzLmNhcnRTZXJ2aWNlLmxvYWRpbmddKS5zdWJzY3JpYmUoKFtpdGVtcywgbG9hZGluZ10pID0+IHtcbiAgICAgICAgICAgIGlmICghbG9hZGluZyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dCh0cnVlKVxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0VG90YWxBbW91bnQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlcztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnQuc3Vic2NyaWJlKGNhcnQgPT4gY2FydCAmJiAodGhpcy5jYXJ0TG9jYWwgPSBjYXJ0KSAmJiB0aGlzLnVwZGF0ZUFzb2NpYXRlZERhdGEoY2FydCkpO1xuICAgICAgICB0aGlzLm9yZGVyJC5zdWJzY3JpYmUob3JkZXIgPT4gb3JkZXIgJiYgdGhpcy51cGRhdGVBc29jaWF0ZWREYXRhKG9yZGVyKSlcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUHJvZmlsZSgpLnN1YnNjcmliZSh1c2VyID0+IHRoaXMudXNlciA9IHVzZXIpXG4gICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmVycm9yJC5waXBlKGZpbHRlcihyZXMgPT4gcmVzICE9IG51bGwpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAnb3V0X29mX3N0b2NrJyB8fCByZXMuY29kZSA9PSAnaXRlbXNfd2l0aF9wcm9kdWN0X29yX3Byb2R1Y3RfdmFyaWFudF9ub3RfZW5hYmxlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3JlZGlyZWN0LWNhcnQnKVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9jYXJ0JylcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgfVxuXG4gICAgdXBkYXRlT3JkZXIgPSAob3JkZXIpID0+IG9yZGVyICYmIHRoaXMub3JkZXJTdWJqZWN0Lm5leHQob3JkZXIpO1xuXG4gICAgc2V0Q2hlY2tvdXROb3RlcyA9IChub3Rlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0YS5ub3RlcyA9IG5vdGVzIHx8ICcnO1xuICAgIH1cblxuICAgIGdldENoZWNrb3V0Tm90ZXMgPSAoKSA9PiB0aGlzLmNoZWNrb3V0X2RhdGEubm90ZXMgfHwgJyc7XG5cbiAgICBzZXRQYXltZW50TWV0aG9kcyA9IChtZXRob2RzOiBhbnlbXSkgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRNZXRob2RzU3ViamVjdC5uZXh0KG1ldGhvZHMgfHwgW10pO1xuICAgIH1cblxuICAgIHByZWZldGNoUGF5bWVudE1ldGhvZHMgPSBhc3luYyAoKSA9PlxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuZ2V0UGF5bWVudE1ldGhvZHNBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0aG9kcyA9IHJlcy5wYXltZW50cz8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXMocmVzLnBheW1lbnRzWzBdLm1ldGhvZHMpLm1hcChrZXkgPT4gcmVzLnBheW1lbnRzWzBdLm1ldGhvZHNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXltZW50TWV0aG9kc1N1YmplY3QubmV4dChtZXRob2RzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgZ2V0U3RlcERhdGEgPSAoc3RlcF9uYW1lOiBTdGVwVHlwZUkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoIXN0ZXBzIHx8ICFzdGVwcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBzdGVwX3Jlc3VsdCA9IHN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcbiAgICAgICAgcmV0dXJuIChzdGVwX3Jlc3VsdCAmJiBzdGVwX3Jlc3VsdC5kYXRhKSB8fCBudWxsO1xuICAgIH1cblxuICAgIHNldFN0ZXBzID0gKHN0ZXBzOiBTdGVwSVtdLCBhdXRvaGFuZGxlID0gdHJ1ZSkgPT4ge1xuICAgICAgICBsZXQgZmluYWxfc3RlcHMgPSBbXTtcbiAgICAgICAgc3RlcHMuZm9yRWFjaCgoc3RlcCwgaSkgPT4gZmluYWxfc3RlcHMucHVzaChuZXcgU3RlcChzdGVwLm5hbWUsIHN0ZXAucHJpb3JpdHkgfHwgKGkgKyAxKSkpKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChmaW5hbF9zdGVwcyk7XG5cbiAgICAgICAgLy8gT2J0ZW5lciBJUCB5IHViaWNhY2nDs25cbiAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgaXA6IHRoaXMuaXBTZXJ2aWNlLmdldElwKCkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSksXG4gICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5pcFNlcnZpY2UuZ2V0TG9jYXRpb24oKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICB9KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgaXA6IHJlc3VsdHMuaXA/LmlwIHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiByZXN1bHRzLmxvY2F0aW9uPy5jb3VudHJ5IHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBjaXR5OiByZXN1bHRzLmxvY2F0aW9uPy5jaXR5IHx8ICd1bmtub3duJ1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHVybFdpdGhQYXJhbXMgPSBgJHt0aGlzLmdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucygpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXRFcnJvck5vdEhhbmRsZXIodXJsV2l0aFBhcmFtcykudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdjaGVja291dF9pbml0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jYXJ0TG9jYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jYXJ0TG9jYWw/LmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2FydExvY2FsPy50b3RhbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRTdGVwUmVhZHkgPSBhc3luYyAoc3RlcF9udW1iZXIsIGRhdGEsIG9yZGVyPywgYXV0b21hdGljPykgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnRBbGxTdGVwc0Zyb20oc3RlcF9udW1iZXIpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgICAgICBzdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5wcmlvcml0eSA9PSBzdGVwX251bWJlcikucmVhZHkoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHN0ZXBzKTtcblxuICAgICAgICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IG9yZGVyLnRvdGFscy50b3RhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDaGVja291dFJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RlcHNbc3RlcHMubGVuZ3RoIC0gMV0ubmFtZSA9PSAnc2hpcG1lbnQnKSB7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sIDE1MCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNldFN0ZXBEb2luZyA9IGFzeW5jIChzdGVwX251bWJlcikgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBzdGVwcyA9IGF3YWl0IHRoaXMucmVzdGFydEFsbFN0ZXBzRnJvbShzdGVwX251bWJlciwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgc3RlcHMuZmluZChzdGVwID0+IHN0ZXAucHJpb3JpdHkgPT0gc3RlcF9udW1iZXIpLmRvaW5nKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXN0YXJ0QWxsU3RlcHNGcm9tID0gKHN0ZXBfbnVtYmVyLCBpbmNsdWRlZCA9IHRydWUsIHVwZGF0ZSA9IHRydWUpID0+IHtcbiAgICAgICAgbGV0IHN0ZXBzID0gdGhpcy5zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgc3RlcHMgPSBzdGVwcy5tYXAoKHN0ZXApID0+IHtcbiAgICAgICAgICAgIGluY2x1ZGVkXG4gICAgICAgICAgICAgICAgPyAoc3RlcC5wcmlvcml0eSA+PSBzdGVwX251bWJlcikgJiYgc3RlcC5yZXN0YXJ0KClcbiAgICAgICAgICAgICAgICA6IChzdGVwLnByaW9yaXR5ID4gc3RlcF9udW1iZXIpICYmIHN0ZXAucmVzdGFydCgpXG4gICAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfSlcbiAgICAgICAgdXBkYXRlICYmIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuICAgICAgICByZXR1cm4gc3RlcHM7XG4gICAgfVxuXG4gICAgaXNDaGVja291dFJlYWR5ID0gKCkgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc3RlcF9taXNzaW5nID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAuaXNQZW5kaW5nKCkpO1xuICAgICAgICByZXR1cm4gIXN0ZXBfbWlzc2luZztcbiAgICB9XG5cbiAgICBpc1N0ZXBSZWFkeSA9IChzdGVwX25hbWUpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpIHx8IFtdO1xuICAgICAgICBpZiAoIXN0ZXBzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBzdGVwID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PSBzdGVwX25hbWUpO1xuICAgICAgICBpZiAoIXN0ZXApIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gc3RlcC5pc1JlYWR5KCk7XG4gICAgfTtcblxuICAgIHNldE9yZGVyID0gKG9yZGVyKSA9PiB7IHRoaXMub3JkZXIgPSBvcmRlciwgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcikgfTtcbiAgICBnZXRPcmRlciA9ICgpID0+IHRoaXMub3JkZXIgfHwgdGhpcy5vcmRlclN1YmplY3QudmFsdWU7XG5cbiAgICBwcml2YXRlIGNvbXBsZXRlT3JkZXIgPSAoKSA9PiB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMuY29tcGxldGVBcGkoKSwgeyBlbWFpbDogdGhpcy5jaGVja291dF9kYXRhLmVtYWlsLCBub3RlczogdGhpcy5jaGVja291dF9kYXRhLm5vdGVzIHx8ICcnIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgY29tcGxldGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tcGxldGVPcmRlcigpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcmVzdWx0IHx8XG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgfHxcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID09PSAnaW5zdWZmaWNpZW50X2NyZWRpdCcgfHxcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID09PSAnZXJyb3InXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jaGFuZ2VIYXZlVG9VcGRhdGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiAoeyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IHRydWUsIG1lc3NhZ2U6ICdub3QtY29tcGxldGVkJyB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldE9yZGVyKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3B1cmNoYXNlJywgeyAuLi5yZXN1bHQsIGN1cnJlbmN5OiByZXN1bHQuY3VycmVuY3ksIHZhbHVlOiByZXN1bHQudG90YWwgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2xlYXJBbmRSZXNldENhcnQoKTtcbiAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMub25SZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybiAoeyBvazogdHJ1ZSwgcmVxdWlyZV9sb2dpbjogZmFsc2UsIG1lc3NhZ2U6ICcnIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUFzb2NpYXRlZERhdGEgPSAoY2FydDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLmNhcnRTZXJ2aWNlICYmIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFN1bW1hcnlQcmljZVByZXNlbnRhdGlvblxuICAgICAgICAgICAgPyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRTdW1tYXJ5UHJpY2VQcmVzZW50YXRpb24oY2FydCwgdW5kZWZpbmVkLCB0cnVlKVxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGlmIChzdW1tYXJ5Py5zb3VyY2UgPT09ICdsaW5lUHJpY2luZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogQ2hlY2tvdXREYXRhW10gPSBbXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAncHJvZHVjdHNCZWZvcmVEaXNjb3VudHMnLCBuYW1lOiAncHJvZHVjdHMtYmVmb3JlLWRpc2NvdW50cycsIGFtb3VudDogc3VtbWFyeS5wcm9kdWN0c0JlZm9yZURpc2NvdW50cyB9LFxuICAgICAgICAgICAgICAgIC4uLihzdW1tYXJ5LmxpbmVEaXNjb3VudHMgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBbeyB0eXBlOiAnbGluZURpc2NvdW50JywgbmFtZTogJ2xpbmUtZGlzY291bnRzJywgYW1vdW50OiBzdW1tYXJ5LmxpbmVEaXNjb3VudHMgfSBhcyBDaGVja291dERhdGFdXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ3N1YnRvdGFsJywgbmFtZTogJ3N1YnRvdGFsJywgYW1vdW50OiBzdW1tYXJ5LnN1YnRvdGFsIH0sXG4gICAgICAgICAgICAgICAgLi4uKHN1bW1hcnkub3JkZXJEaXNjb3VudCAhPT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFt7IHR5cGU6ICdkaXNjb3VudCcsIG5hbWU6ICdkaXNjb3VudCcsIGFtb3VudDogc3VtbWFyeS5vcmRlckRpc2NvdW50IH0gYXMgQ2hlY2tvdXREYXRhXVxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAgICAuLi4oc3VtbWFyeS5jb3Vwb25EaXNjb3VudCAhPT0gbnVsbCAmJiBzdW1tYXJ5LmNvdXBvbkRpc2NvdW50ICE9PSAwXG4gICAgICAgICAgICAgICAgICAgID8gW3sgdHlwZTogJ2NvdXBvbicsIG5hbWU6ICdjb3Vwb24nLCBhbW91bnQ6IHN1bW1hcnkuY291cG9uRGlzY291bnQgfSBhcyBDaGVja291dERhdGFdXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICAgIC4uLihzdW1tYXJ5LnRheGVzICE9PSAwXG4gICAgICAgICAgICAgICAgICAgID8gW3sgdHlwZTogJ3RheGVzJywgbmFtZTogJ3RheGVzJywgYW1vdW50OiBzdW1tYXJ5LnRheGVzLCB0YXhlc0luY2x1ZGVkSW5Ub3RhbDogc3VtbWFyeS50YXhlc0luY2x1ZGVkSW5Ub3RhbCB9IGFzIENoZWNrb3V0RGF0YV1cbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICAgICAgLi4uKHN1bW1hcnkuY2xpZW50VGF4ZXMgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBbeyB0eXBlOiAnY2xpZW50VGF4ZXMnLCBuYW1lOiAnY2xpZW50VGF4ZXMnLCBhbW91bnQ6IHN1bW1hcnkuY2xpZW50VGF4ZXMgfSBhcyBDaGVja291dERhdGFdXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICAgIC4uLihzdW1tYXJ5LnNoaXBwaW5nICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gW3sgdHlwZTogJ3NoaXBtZW50JywgbmFtZTogJ3NoaXBtZW50JywgYW1vdW50OiBzdW1tYXJ5LnNoaXBwaW5nIH0gYXMgQ2hlY2tvdXREYXRhXVxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICd0b3RhbCcsIG5hbWU6ICd0b3RhbCcsIGFtb3VudDogc3VtbWFyeS50b3RhbCB9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5vcmRlclV0aWxzLmdldFN1bW1hcnlQcm9tb3Rpb25zKGNhcnQpO1xuICAgICAgICBjb25zdCB0b3RhbHMgPSBjYXJ0Py50b3RhbHM7XG4gICAgICAgIGlmICghdG90YWxzKSB7XG4gICAgICAgICAgICB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQocmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaGlwbWVudEFtb3VudCA9IHRoaXMub3JkZXJVdGlscy5nZXRTdW1tYXJ5U2hpcG1lbnRBbW91bnQoY2FydCk7XG4gICAgICAgIGlmICh0b3RhbHMudGF4ZXMgIT0gMCkge1xuICAgICAgICAgICAgbGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XG4gICAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0YXhlcycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RheGVzJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHRvdGFscy50YXhlc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2godG90YWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGlwbWVudEFtb3VudCAhPT0gbnVsbCAmJiByZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc2hpcG1lbnRJbmRleCA9IHJlc3VsdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzaGlwbWVudCcpO1xuICAgICAgICAgICAgY29uc3Qgc2hpcG1lbnRJdGVtOiBDaGVja291dERhdGEgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogc2hpcG1lbnRBbW91bnRcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChzaGlwbWVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaGlwbWVudEluZGV4XSA9IHNoaXBtZW50SXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxJbmRleCA9IHJlc3VsdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICd0b3RhbCcpO1xuICAgICAgICAgICAgICAgIGlmICh0b3RhbEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQuc2xpY2UoMCwgdG90YWxJbmRleCksXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGlwbWVudEl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQuc2xpY2UodG90YWxJbmRleClcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzaGlwbWVudEl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXN0YXJ0Q2hlY2tvdXQgPSAoKSA9PiB7IH1cblxufVxuIl19
@@ -19,7 +19,7 @@ let OrderUtilityService = class OrderUtilityService {
19
19
  if (cart.checkoutState && cart.checkoutState == "completed")
20
20
  return [];
21
21
  let new_state = [];
22
- let subtotal = { type: 'subtotal', name: 'subtotal', amount: cart.totals.subtotal };
22
+ let subtotal = { type: 'subtotal', name: 'subtotal', amount: this.getSummarySubtotalAmount(cart) };
23
23
  let total = { type: 'total', name: 'total', amount: cart.totals.total };
24
24
  !forCart && new_state.push(subtotal);
25
25
  // console.log(cart.cartDiscounts);
@@ -57,7 +57,7 @@ let OrderUtilityService = class OrderUtilityService {
57
57
  if (cart.checkoutState && cart.checkoutState == "completed")
58
58
  return;
59
59
  let new_state = [];
60
- let subtotal = { type: 'subtotal', name: 'subtotal', amount: cart.totals.subtotal };
60
+ let subtotal = { type: 'subtotal', name: 'subtotal', amount: this.getSummarySubtotalAmount(cart) };
61
61
  let total = { type: 'total', name: 'total', amount: cart.totals.total };
62
62
  const promotionAmount = this.getSummaryPromotionAmount(cart);
63
63
  !forCart && new_state.push(subtotal);
@@ -107,11 +107,98 @@ let OrderUtilityService = class OrderUtilityService {
107
107
  * Con backends viejos hace fallback a `totals.promotion` o `totals.discount`.
108
108
  */
109
109
  this.getSummaryPromotionAmount = (cart) => {
110
- var _a, _b, _c, _d, _e, _f, _g;
110
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
111
+ const orderDiscount = (_c = (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.orderDiscount, (_c !== null && _c !== void 0 ? _c : (_e = (_d = cart) === null || _d === void 0 ? void 0 : _d.totals) === null || _e === void 0 ? void 0 : _e.order_discount));
112
+ if (orderDiscount !== null && orderDiscount !== undefined) {
113
+ return Number(orderDiscount || 0);
114
+ }
111
115
  if (this.hasOrderPromotionsBreakdown(cart)) {
112
- return Number(((_c = (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.promotionBreakdown) === null || _c === void 0 ? void 0 : _c.orderPromotions) || 0);
116
+ return Number((_o = (_j = (_h = (_g = (_f = cart) === null || _f === void 0 ? void 0 : _f.totals) === null || _g === void 0 ? void 0 : _g.promotionBreakdown) === null || _h === void 0 ? void 0 : _h.orderPromotions, (_j !== null && _j !== void 0 ? _j : (_m = (_l = (_k = cart) === null || _k === void 0 ? void 0 : _k.totals) === null || _l === void 0 ? void 0 : _l.promotion_breakdown) === null || _m === void 0 ? void 0 : _m.order_promotions)), (_o !== null && _o !== void 0 ? _o : 0)));
117
+ }
118
+ return Number(((_q = (_p = cart) === null || _p === void 0 ? void 0 : _p.totals) === null || _q === void 0 ? void 0 : _q.promotion) || ((_s = (_r = cart) === null || _r === void 0 ? void 0 : _r.totals) === null || _s === void 0 ? void 0 : _s.discount) || 0);
119
+ };
120
+ /** Descuento de orden separado de cupones y descuentos de envío. */
121
+ this.getOrderPromotionAmount = (cart) => {
122
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
123
+ const breakdown = ((_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.promotionBreakdown) || ((_d = (_c = cart) === null || _c === void 0 ? void 0 : _c.totals) === null || _d === void 0 ? void 0 : _d.promotion_breakdown);
124
+ if (breakdown && (Object.prototype.hasOwnProperty.call(breakdown, 'orderPromotions')
125
+ || Object.prototype.hasOwnProperty.call(breakdown, 'order_promotions'))) {
126
+ return Number((_f = (_e = breakdown.orderPromotions, (_e !== null && _e !== void 0 ? _e : breakdown.order_promotions)), (_f !== null && _f !== void 0 ? _f : 0)));
127
+ }
128
+ if (Array.isArray((_g = cart) === null || _g === void 0 ? void 0 : _g.cartDiscounts)) {
129
+ return cart.cartDiscounts
130
+ .filter(discount => {
131
+ var _a;
132
+ const type = (((_a = discount) === null || _a === void 0 ? void 0 : _a.type) || '').toString().toLowerCase();
133
+ return type.includes('order') && !type.includes('coupon') && !type.includes('shipping');
134
+ })
135
+ .reduce((total, discount) => { var _a; return total + Number(((_a = discount) === null || _a === void 0 ? void 0 : _a.amount) || 0); }, 0);
136
+ }
137
+ return ((_h = cart) === null || _h === void 0 ? void 0 : _h.couponCode) || ((_j = cart) === null || _j === void 0 ? void 0 : _j.coupon_code)
138
+ ? 0
139
+ : Number((_t = (_q = (_m = (_l = (_k = cart) === null || _k === void 0 ? void 0 : _k.totals) === null || _l === void 0 ? void 0 : _l.orderDiscount, (_m !== null && _m !== void 0 ? _m : (_p = (_o = cart) === null || _o === void 0 ? void 0 : _o.totals) === null || _p === void 0 ? void 0 : _p.order_discount)), (_q !== null && _q !== void 0 ? _q : (_s = (_r = cart) === null || _r === void 0 ? void 0 : _r.totals) === null || _s === void 0 ? void 0 : _s.promotion)), (_t !== null && _t !== void 0 ? _t : 0)));
140
+ };
141
+ /**
142
+ * Obtiene únicamente el descuento aplicado por el cupón.
143
+ *
144
+ * Devuelve `null` cuando la respuesta no permite identificar su importe,
145
+ * para que el frontend pueda mostrar solamente el código.
146
+ */
147
+ this.getCouponPromotionAmount = (cart) => {
148
+ var _a;
149
+ if (!Array.isArray((_a = cart) === null || _a === void 0 ? void 0 : _a.cartDiscounts)) {
150
+ return null;
113
151
  }
114
- return Number(((_e = (_d = cart) === null || _d === void 0 ? void 0 : _d.totals) === null || _e === void 0 ? void 0 : _e.promotion) || ((_g = (_f = cart) === null || _f === void 0 ? void 0 : _f.totals) === null || _g === void 0 ? void 0 : _g.discount) || 0);
152
+ const couponDiscounts = cart.cartDiscounts.filter(discount => { var _a; return (((_a = discount) === null || _a === void 0 ? void 0 : _a.type) || '').toString().toLowerCase().includes('coupon'); });
153
+ if (!couponDiscounts.length) {
154
+ return null;
155
+ }
156
+ return couponDiscounts.reduce((total, discount) => { var _a; return total + Number(((_a = discount) === null || _a === void 0 ? void 0 : _a.amount) || 0); }, 0);
157
+ };
158
+ /**
159
+ * Obtiene el subtotal compatible con backends nuevos y legacy.
160
+ *
161
+ * @param cart Carrito u orden con `totals`.
162
+ * @returns `totals.subtotal` cuando existe; en backends legacy usa `totals.items`.
163
+ */
164
+ this.getSummarySubtotalAmount = (cart) => {
165
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
166
+ const cartSubtotal = (_c = (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.cartSubtotal, (_c !== null && _c !== void 0 ? _c : (_e = (_d = cart) === null || _d === void 0 ? void 0 : _d.totals) === null || _e === void 0 ? void 0 : _e.cart_subtotal));
167
+ if (cartSubtotal !== null && cartSubtotal !== undefined && cartSubtotal !== '') {
168
+ return Number(cartSubtotal);
169
+ }
170
+ const subtotal = (_g = (_f = cart) === null || _f === void 0 ? void 0 : _f.totals) === null || _g === void 0 ? void 0 : _g.subtotal;
171
+ if (subtotal !== null && subtotal !== undefined && subtotal !== '') {
172
+ return Number(subtotal);
173
+ }
174
+ return Number(((_j = (_h = cart) === null || _h === void 0 ? void 0 : _h.totals) === null || _j === void 0 ? void 0 : _j.items) || 0);
175
+ };
176
+ /** Total que debe mostrar el carrito/sidebar, excluyendo envío persistido. */
177
+ this.getCartTotalAmount = (cart) => {
178
+ var _a, _b, _c, _d, _e, _f, _g;
179
+ const totalWithoutShipping = (_c = (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.totalWithoutShipping, (_c !== null && _c !== void 0 ? _c : (_e = (_d = cart) === null || _d === void 0 ? void 0 : _d.totals) === null || _e === void 0 ? void 0 : _e.total_without_shipping));
180
+ if (totalWithoutShipping !== null && totalWithoutShipping !== undefined && totalWithoutShipping !== '') {
181
+ return Number(totalWithoutShipping);
182
+ }
183
+ return Number(((_g = (_f = cart) === null || _f === void 0 ? void 0 : _f.totals) === null || _g === void 0 ? void 0 : _g.total) || 0);
184
+ };
185
+ /** Impuestos de productos para carrito/sidebar, con fallback legacy. */
186
+ this.getCartTaxesAmount = (cart) => {
187
+ var _a, _b, _c, _d, _e, _f, _g;
188
+ const cartTaxes = (_c = (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.cartTaxes, (_c !== null && _c !== void 0 ? _c : (_e = (_d = cart) === null || _d === void 0 ? void 0 : _d.totals) === null || _e === void 0 ? void 0 : _e.cart_taxes));
189
+ if (cartTaxes !== null && cartTaxes !== undefined && cartTaxes !== '') {
190
+ return Number(cartTaxes);
191
+ }
192
+ return Number(((_g = (_f = cart) === null || _f === void 0 ? void 0 : _f.totals) === null || _g === void 0 ? void 0 : _g.taxes) || 0);
193
+ };
194
+ /** Impuestos específicos del cliente para carrito/sidebar, con fallback legacy. */
195
+ this.getCartClientTaxesAmount = (cart) => {
196
+ var _a, _b, _c, _d, _e, _f, _g;
197
+ const cartClientTaxes = (_c = (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.cartClientTaxes, (_c !== null && _c !== void 0 ? _c : (_e = (_d = cart) === null || _d === void 0 ? void 0 : _d.totals) === null || _e === void 0 ? void 0 : _e.cart_client_taxes));
198
+ if (cartClientTaxes !== null && cartClientTaxes !== undefined && cartClientTaxes !== '') {
199
+ return Number(cartClientTaxes);
200
+ }
201
+ return Number(((_g = (_f = cart) === null || _f === void 0 ? void 0 : _f.totals) === null || _g === void 0 ? void 0 : _g.clientTaxes) || 0);
115
202
  };
116
203
  /**
117
204
  * Indica si el backend ya informa el desglose nuevo de promociones.
@@ -119,7 +206,12 @@ let OrderUtilityService = class OrderUtilityService {
119
206
  * @param cart Carrito u orden con `totals`.
120
207
  * @returns `true` cuando existe `promotionBreakdown.orderPromotions`.
121
208
  */
122
- this.hasOrderPromotionsBreakdown = (cart) => { var _a, _b; return Object.prototype.hasOwnProperty.call(((_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.promotionBreakdown) || {}, 'orderPromotions'); };
209
+ this.hasOrderPromotionsBreakdown = (cart) => {
210
+ var _a, _b, _c, _d;
211
+ const breakdown = ((_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.promotionBreakdown) || ((_d = (_c = cart) === null || _c === void 0 ? void 0 : _c.totals) === null || _d === void 0 ? void 0 : _d.promotion_breakdown);
212
+ return Object.prototype.hasOwnProperty.call(breakdown || {}, 'orderPromotions')
213
+ || Object.prototype.hasOwnProperty.call(breakdown || {}, 'order_promotions');
214
+ };
123
215
  /**
124
216
  * Indica si el carrito tiene un cupón aplicado, independientemente de cómo impacte en el resumen.
125
217
  *
@@ -199,4 +291,4 @@ OrderUtilityService = __decorate([
199
291
  Injectable()
200
292
  ], OrderUtilityService);
201
293
  export { OrderUtilityService };
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItdXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL29yZGVyLXV0aWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTNDLElBQWEsbUJBQW1CLEdBQWhDLE1BQWEsbUJBQW1CO0lBRTVCO1FBRUE7Ozs7V0FJRztRQUNILGtCQUFhLEdBQUcsQ0FBQyxJQUFTLEVBQUUsVUFBbUIsS0FBSyxFQUFrQixFQUFFOztZQUNwRSxJQUFJLFFBQUMsSUFBSSwwQ0FBRSxNQUFNLENBQUE7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksV0FBVztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUN2RSxJQUFJLFNBQVMsR0FBbUIsRUFBRSxDQUFDO1lBQ25DLElBQUksUUFBUSxHQUFpQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsRyxJQUFJLEtBQUssR0FBaUIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEYsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4QyxzQ0FBc0M7WUFDbkMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDekQsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEUsU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDWCxJQUFJLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUk7b0JBQy9CLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVE7b0JBQ3BGLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUM7aUJBQ3JELENBQUMsQ0FBQzthQUVQO1lBQ0osa0RBQWtEO1lBQ2xELGlFQUFpRTtZQUNqRSwwQkFBMEI7WUFDMUIsc0NBQXNDO1lBQ3RDLG1GQUFtRjtZQUNuRix3REFBd0Q7WUFDeEQsYUFBYTtZQUNiLFNBQVM7WUFDTixDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUMsQ0FBQTtRQUVEOzs7Ozs7Ozs7V0FTRztRQUNILHlCQUFvQixHQUFHLENBQUMsSUFBUyxFQUFFLFVBQW1CLEtBQUssRUFBa0IsRUFBRTtZQUMzRSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxXQUFXO2dCQUFFLE9BQU87WUFDcEUsSUFBSSxTQUFTLEdBQW1CLEVBQUUsQ0FBQztZQUNuQyxJQUFJLFFBQVEsR0FBaUIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEcsSUFBSSxLQUFLLEdBQWlCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU3RCxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLGVBQWUsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDbkMsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxVQUFVO2dCQUNoQixNQUFNLEVBQUUsZUFBZTthQUMxQixDQUFDLENBQUM7WUFDSCxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUMsQ0FBQTtRQUVEOzs7Ozs7Ozs7O1dBVUc7UUFDSCw2QkFBd0IsR0FBRyxDQUFDLElBQVMsRUFBaUIsRUFBRTs7WUFDcEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsYUFBQyxJQUFJLDBDQUFFLE1BQU0sMENBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEUsSUFBSSxjQUFjLEtBQUssSUFBSSxJQUFJLGNBQWMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pELE9BQU8sY0FBYyxDQUFDO2FBQ3pCO1lBRUQsSUFBSSxjQUFjLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekQsT0FBTyxDQUFDLENBQUM7YUFDWjtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQTtRQUVEOzs7Ozs7Ozs7Ozs7OztXQWNHO1FBQ0gsOEJBQXlCLEdBQUcsQ0FBQyxJQUFTLEVBQVUsRUFBRTs7WUFDOUMsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hDLE9BQU8sTUFBTSxDQUFDLG1CQUFBLElBQUksMENBQUUsTUFBTSwwQ0FBRSxrQkFBa0IsMENBQUUsZUFBZSxLQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3pFO1lBQ0QsT0FBTyxNQUFNLENBQUMsYUFBQSxJQUFJLDBDQUFFLE1BQU0sMENBQUUsU0FBUyxrQkFBSSxJQUFJLDBDQUFFLE1BQU0sMENBQUUsUUFBUSxDQUFBLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFBO1FBRUQ7Ozs7O1dBS0c7UUFDSCxnQ0FBMkIsR0FBRyxDQUFDLElBQVMsRUFBVyxFQUFFLGVBQ2pELE9BQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQUEsSUFBSSwwQ0FBRSxNQUFNLDBDQUFFLGtCQUFrQixLQUFJLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBLEVBQUEsQ0FBQztRQUVwRzs7Ozs7Ozs7O1dBU0c7UUFDSCxxQkFBZ0IsR0FBRyxDQUFDLElBQVMsRUFBVyxFQUFFOztZQUN0QyxJQUFJLE9BQU8sT0FBQyxJQUFJLDBDQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUMzQixPQUFPLElBQUksQ0FBQzthQUNmO1lBRUQsT0FBTyxLQUFLLENBQUMsT0FBTyxPQUFDLElBQUksMENBQUUsYUFBYSxDQUFDO21CQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxXQUFDLE9BQUEsQ0FBQyxPQUFBLFFBQVEsMENBQUUsSUFBSSxLQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQSxFQUFBLENBQUMsQ0FBQztRQUNyRyxDQUFDLENBQUE7UUFFRDs7Ozs7V0FLRztRQUNILHlCQUFvQixHQUFHLENBQUMsSUFBUyxFQUFXLEVBQUU7O1lBQzFDLE9BQUEsS0FBSyxDQUFDLE9BQU8sT0FBQyxJQUFJLDBDQUFFLGFBQWEsQ0FBQzttQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsV0FBQyxPQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFBLFFBQVEsMENBQUUsSUFBSSxLQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssVUFBVSxDQUFBLEVBQUEsQ0FBQyxDQUFBO1NBQUEsQ0FBQztRQUVsSDs7Ozs7O1dBTUc7UUFDSCxjQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFVLEVBQUU7WUFDbkMsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFVBQVU7Z0JBQUUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3hELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsQ0FBQyxDQUFBO1FBRUQ7Ozs7O1dBS0c7UUFDSCxlQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQW9CLEVBQUU7WUFDNUMsSUFBSSxNQUFNLENBQUM7WUFDWCxRQUFRLElBQUksRUFBRTtnQkFDVixLQUFLLGlCQUFpQjtvQkFBRSxNQUFNLEdBQUcsVUFBVSxDQUFDO29CQUFDLE1BQU07Z0JBQ25ELEtBQUssMEJBQTBCO29CQUFFLE1BQU0sR0FBRyxVQUFVLENBQUM7b0JBQUMsTUFBTTtnQkFDNUQsS0FBSyx3QkFBd0I7b0JBQUUsTUFBTSxHQUFHLFFBQVEsQ0FBQztvQkFBQyxNQUFNO2dCQUN4RCxLQUFLLHNCQUFzQjtvQkFBRSxNQUFNLEdBQUcsVUFBVSxDQUFDO29CQUFDLE1BQU07YUFDM0Q7WUFDRCxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFFLENBQUE7WUFDbEcsT0FBTyxNQUFNLElBQUksSUFBSSxDQUFDO1FBQzFCLENBQUMsQ0FBQTtRQUVPLG9CQUFlLEdBQUcsQ0FBQyxLQUF5QyxFQUFpQixFQUFFO1lBQ25GLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZELE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzRCxDQUFDLENBQUE7SUF6TGUsQ0FBQztDQTBMcEIsQ0FBQTtBQTVMWSxtQkFBbUI7SUFEL0IsVUFBVSxFQUFFO0dBQ0EsbUJBQW1CLENBNEwvQjtTQTVMWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGVja291dERhdGEsIENoZWNrb3V0RGF0YVR5cGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWNrb3V0LWRhdGEnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3JkZXJVdGlsaXR5U2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGNhcnQgT2JqZXRvIGNhcnJpdG8gbyBvcmRlbiwgaW5kaXN0aW50YW1lbnRlLCB5YSBxdWUgcG9zZWVuIGVsIG1pc21vIGZvcm1hdG9cbiAgICAgKiBAcGFyYW0gZm9yQ2FydCBTaSBsYSBzb2xpY2l0dWQgZGUgcHJvbW9jaW9uZXMgcHJvdmllbmUgZGVsIGNhcnJpdG8sIHN1cHJpbWUgZWwgc3VidG90YWwgeSBlbCB0b3RhbFxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXZ1ZWx2ZSB1biBsaXN0YWRvIGNvbiB0b2RhcyBsYXMgcHJvbW9jaW9uZXMgcXVlIHBvc2VlIGVsIGNhcnJvL29yZGVuXG4gICAgICovXG4gICAgZ2V0UHJvbW90aW9ucyA9IChjYXJ0OiBhbnksIGZvckNhcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IENoZWNrb3V0RGF0YVtdID0+IHtcbiAgICAgICAgaWYgKCFjYXJ0Py50b3RhbHMpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKGNhcnQuY2hlY2tvdXRTdGF0ZSAmJiBjYXJ0LmNoZWNrb3V0U3RhdGUgPT0gXCJjb21wbGV0ZWRcIikgcmV0dXJuIFtdO1xuICAgICAgICBsZXQgbmV3X3N0YXRlOiBDaGVja291dERhdGFbXSA9IFtdO1xuICAgICAgICBsZXQgc3VidG90YWw6IENoZWNrb3V0RGF0YSA9IHsgdHlwZTogJ3N1YnRvdGFsJywgbmFtZTogJ3N1YnRvdGFsJywgYW1vdW50OiBjYXJ0LnRvdGFscy5zdWJ0b3RhbCB9O1xuICAgICAgICBsZXQgdG90YWw6IENoZWNrb3V0RGF0YSA9IHsgdHlwZTogJ3RvdGFsJywgbmFtZTogJ3RvdGFsJywgYW1vdW50OiBjYXJ0LnRvdGFscy50b3RhbCB9O1xuICAgICAgICAhZm9yQ2FydCAmJiBuZXdfc3RhdGUucHVzaChzdWJ0b3RhbCk7XG4gICAgIC8vICAgIGNvbnNvbGUubG9nKGNhcnQuY2FydERpc2NvdW50cyk7XG4gICAgICAgIGNvbnN0IGNhcnREaXNjb3VudHMgPSBBcnJheS5pc0FycmF5KGNhcnQuY2FydERpc2NvdW50cykgPyBjYXJ0LmNhcnREaXNjb3VudHMgOiBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNhcnREaXNjb3VudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgY2FydERpc2NvdW50c1tpbmRleF0udHlwZSA9IHRoaXMuZm9ybWF0VHlwZShjYXJ0RGlzY291bnRzW2luZGV4XS50eXBlKTtcbiAgICAgICAgICAgICBuZXdfc3RhdGUucHVzaCh7XG4gICAgICAgICAgICAgICAgIHR5cGU6IGNhcnREaXNjb3VudHNbaW5kZXhdLnR5cGUsXG4gICAgICAgICAgICAgICAgIG5hbWU6IChjYXJ0RGlzY291bnRzW2luZGV4XS50eXBlICE9ICdjb3Vwb24nKSA/IGNhcnREaXNjb3VudHNbaW5kZXhdLm5hbWUgOiAnY291cG9uJyxcbiAgICAgICAgICAgICAgICAgYW1vdW50OiB0aGlzLmdldEFtb3VudChjYXJ0RGlzY291bnRzW2luZGV4XSwgY2FydClcbiAgICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG4gICAgIC8vICAgIGNhcnQuY2FydERpc2NvdW50cy5mb3JFYWNoKGNhcnREaXNjb3VudCA9PiB7XG4gICAgIC8vICAgICAgICBjYXJ0RGlzY291bnQudHlwZSA9IHRoaXMuZm9ybWF0VHlwZShjYXJ0RGlzY291bnQudHlwZSk7XG4gICAgIC8vICAgICAgICBuZXdfc3RhdGUucHVzaCh7XG4gICAgIC8vICAgICAgICAgICAgdHlwZTogY2FydERpc2NvdW50LnR5cGUsXG4gICAgIC8vICAgICAgICAgICAgbmFtZTogKGNhcnREaXNjb3VudC50eXBlICE9ICdjb3Vwb24nKSA/IGNhcnREaXNjb3VudC5uYW1lIDogJ2NvdXBvbicsXG4gICAgIC8vICAgICAgICAgICAgYW1vdW50OiB0aGlzLmdldEFtb3VudChjYXJ0RGlzY291bnQsIGNhcnQpXG4gICAgIC8vICAgICAgICB9KTtcbiAgICAgLy8gICAgfSk7XG4gICAgICAgICFmb3JDYXJ0ICYmIG5ld19zdGF0ZS5wdXNoKHRvdGFsKTtcbiAgICAgICAgcmV0dXJuIG5ld19zdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1eWUgZWwgcmVzdW1lbiBkZSBwcm9tb2Npb25lcyBxdWUgZGViZSBtb3N0cmFyc2UgZW4gY2hlY2tvdXQgeSByZXPDum1lbmVzIGRlIGNvbXByYS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXJ0IENhcnJpdG8gdSBvcmRlbiBjb24gZXN0cnVjdHVyYSBgdG90YWxzYCBjb21wYXRpYmxlLlxuICAgICAqIEBwYXJhbSBmb3JDYXJ0IEN1YW5kbyBlcyBgdHJ1ZWAsIG9taXRlIHN1YnRvdGFsIHkgdG90YWwgcGFyYSBkZXZvbHZlciBzb2xvIGxhcyBsw61uZWFzIGludGVybWVkaWFzLlxuICAgICAqIEByZXR1cm5zIExpc3RhIGRlIGzDrW5lYXMgbm9ybWFsaXphZGFzIHBhcmEgcmVuZGVyaXphciBlbCByZXN1bWVuLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBBIGRpZmVyZW5jaWEgZGUgYGdldFByb21vdGlvbnNgLCBlc3RlIG3DqXRvZG8gc29sbyBjb25zaWRlcmEgZGVzY3VlbnRvcyBkZSBvcmRlbi5cbiAgICAgKi9cbiAgICBnZXRTdW1tYXJ5UHJvbW90aW9ucyA9IChjYXJ0OiBhbnksIGZvckNhcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IENoZWNrb3V0RGF0YVtdID0+IHtcbiAgICAgICAgaWYgKGNhcnQuY2hlY2tvdXRTdGF0ZSAmJiBjYXJ0LmNoZWNrb3V0U3RhdGUgPT0gXCJjb21wbGV0ZWRcIikgcmV0dXJuO1xuICAgICAgICBsZXQgbmV3X3N0YXRlOiBDaGVja291dERhdGFbXSA9IFtdO1xuICAgICAgICBsZXQgc3VidG90YWw6IENoZWNrb3V0RGF0YSA9IHsgdHlwZTogJ3N1YnRvdGFsJywgbmFtZTogJ3N1YnRvdGFsJywgYW1vdW50OiBjYXJ0LnRvdGFscy5zdWJ0b3RhbCB9O1xuICAgICAgICBsZXQgdG90YWw6IENoZWNrb3V0RGF0YSA9IHsgdHlwZTogJ3RvdGFsJywgbmFtZTogJ3RvdGFsJywgYW1vdW50OiBjYXJ0LnRvdGFscy50b3RhbCB9O1xuICAgICAgICBjb25zdCBwcm9tb3Rpb25BbW91bnQgPSB0aGlzLmdldFN1bW1hcnlQcm9tb3Rpb25BbW91bnQoY2FydCk7XG5cbiAgICAgICAgIWZvckNhcnQgJiYgbmV3X3N0YXRlLnB1c2goc3VidG90YWwpO1xuICAgICAgICBwcm9tb3Rpb25BbW91bnQgIT0gMCAmJiBuZXdfc3RhdGUucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnZGlzY291bnQnLFxuICAgICAgICAgICAgbmFtZTogJ2Rpc2NvdW50JyxcbiAgICAgICAgICAgIGFtb3VudDogcHJvbW90aW9uQW1vdW50XG4gICAgICAgIH0pO1xuICAgICAgICAhZm9yQ2FydCAmJiBuZXdfc3RhdGUucHVzaCh0b3RhbCk7XG4gICAgICAgIHJldHVybiBuZXdfc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV2dWVsdmUgZWwgbW9udG8gZGUgZW52w61vIHF1ZSBkZWJlIG1vc3RyYXJzZSBlbiBlbCByZXN1bWVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhcnQgQ2Fycml0byB1IG9yZGVuIGNvbiBgdG90YWxzYC5cbiAgICAgKiBAcmV0dXJucyBgbnVtYmVyYCBjdWFuZG8gZWwgZW52w61vIGRlYmUgbW9zdHJhcnNlLCBvIGBudWxsYCBjdWFuZG8gbm8gY29ycmVzcG9uZGUgcmVuZGVyaXphcmxvLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIFNpIGVsIGJhY2tlbmQgaW5mb3JtYSB1biBzaGlwcGluZyBkaXN0aW50byBkZSBjZXJvLCBlc2UgdmFsb3Igc2UgbXVlc3RyYSB0YWwgY3VhbC5cbiAgICAgKiAtIFNpIGB0b3RhbHMuc2hpcHBpbmdgIGVzIGAwYCBwZXJvIGV4aXN0ZSB1bmEgcHJvbW9jacOzbiBkZSBlbnbDrW8sIHNlIG11ZXN0cmEgYDBgIHBhcmEgcXVlIGxhIFVJIGxvIGludGVycHJldGUgY29tbyBncmF0aXMuXG4gICAgICogLSBTaSBubyBoYXkgZGF0b3Mgc3VmaWNpZW50ZXMsIHNlIGRldnVlbHZlIGBudWxsYCB5IHNlIGNvbnNlcnZhIGVsIGNvbXBvcnRhbWllbnRvIHByZXZpbyBkZSBubyBtb3N0cmFyIGxhIGzDrW5lYS5cbiAgICAgKi9cbiAgICBnZXRTdW1tYXJ5U2hpcG1lbnRBbW91bnQgPSAoY2FydDogYW55KTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHNoaXBwaW5nQW1vdW50ID0gdGhpcy5ub3JtYWxpemVBbW91bnQoY2FydD8udG90YWxzPy5zaGlwcGluZyk7XG4gICAgICAgIGlmIChzaGlwcGluZ0Ftb3VudCAhPT0gbnVsbCAmJiBzaGlwcGluZ0Ftb3VudCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHNoaXBwaW5nQW1vdW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNoaXBwaW5nQW1vdW50ID09PSAwICYmIHRoaXMuaGFzU2hpcHBpbmdQcm9tb3Rpb24oY2FydCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2J0aWVuZSBlbCBtb250byBkZSBkZXNjdWVudG8gcXVlIGNvcnJlc3BvbmRlIGFsIHJlc3VtZW4gZGUgbGEgb3JkZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2FydCBDYXJyaXRvIHUgb3JkZW4gY29uIGB0b3RhbHNgLlxuICAgICAqIEByZXR1cm5zIE1vbnRvIGRlIHByb21vY2lvbmVzIGRlIG9yZGVuLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IGFtb3VudCA9IHRoaXMub3JkZXJVdGlscy5nZXRTdW1tYXJ5UHJvbW90aW9uQW1vdW50KGNhcnQpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBTaSBlbCBiYWNrZW5kIG51ZXZvIGluZm9ybWEgYHByb21vdGlvbkJyZWFrZG93bi5vcmRlclByb21vdGlvbnNgLCBlc2UgdmFsb3IgdGllbmUgcHJpb3JpZGFkLlxuICAgICAqIENvbiBiYWNrZW5kcyB2aWVqb3MgaGFjZSBmYWxsYmFjayBhIGB0b3RhbHMucHJvbW90aW9uYCBvIGB0b3RhbHMuZGlzY291bnRgLlxuICAgICAqL1xuICAgIGdldFN1bW1hcnlQcm9tb3Rpb25BbW91bnQgPSAoY2FydDogYW55KTogbnVtYmVyID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzT3JkZXJQcm9tb3Rpb25zQnJlYWtkb3duKGNhcnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKGNhcnQ/LnRvdGFscz8ucHJvbW90aW9uQnJlYWtkb3duPy5vcmRlclByb21vdGlvbnMgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcihjYXJ0Py50b3RhbHM/LnByb21vdGlvbiB8fCBjYXJ0Py50b3RhbHM/LmRpc2NvdW50IHx8IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYSBzaSBlbCBiYWNrZW5kIHlhIGluZm9ybWEgZWwgZGVzZ2xvc2UgbnVldm8gZGUgcHJvbW9jaW9uZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2FydCBDYXJyaXRvIHUgb3JkZW4gY29uIGB0b3RhbHNgLlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBjdWFuZG8gZXhpc3RlIGBwcm9tb3Rpb25CcmVha2Rvd24ub3JkZXJQcm9tb3Rpb25zYC5cbiAgICAgKi9cbiAgICBoYXNPcmRlclByb21vdGlvbnNCcmVha2Rvd24gPSAoY2FydDogYW55KTogYm9vbGVhbiA9PlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2FydD8udG90YWxzPy5wcm9tb3Rpb25CcmVha2Rvd24gfHwge30sICdvcmRlclByb21vdGlvbnMnKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYSBzaSBlbCBjYXJyaXRvIHRpZW5lIHVuIGN1cMOzbiBhcGxpY2FkbywgaW5kZXBlbmRpZW50ZW1lbnRlIGRlIGPDs21vIGltcGFjdGUgZW4gZWwgcmVzdW1lbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXJ0IENhcnJpdG8gYWN0dWFsLlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBjdWFuZG8gaGF5IHVuIGPDs2RpZ28gZGUgY3Vww7NuIG8gdW5hIGzDrW5lYSBkZSBkZXNjdWVudG8gZGUgdGlwbyBjdXDDs24uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEVzdGUgaGVscGVyIGV2aXRhIGF0YXIgbGEgVUkgZGUgYFF1aXRhciBjdXDDs25gIGFsIG1vbnRvIGRlIGRlc2N1ZW50b3MgZGUgb3JkZW4uXG4gICAgICogVW4gY3Vww7NuIHB1ZWRlIGFmZWN0YXIgcHJvbW9jaW9uZXMgdW5pdGFyaWFzIHkgZGVqYXIgYG9yZGVyUHJvbW90aW9ucyA9IDBgLlxuICAgICAqL1xuICAgIGhhc0FwcGxpZWRDb3Vwb24gPSAoY2FydDogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGlmIChCb29sZWFuKGNhcnQ/LmNvdXBvbkNvZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGNhcnQ/LmNhcnREaXNjb3VudHMpXG4gICAgICAgICAgICAmJiBjYXJ0LmNhcnREaXNjb3VudHMuc29tZShkaXNjb3VudCA9PiAoZGlzY291bnQ/LnR5cGUgfHwgJycpLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ2NvdXBvbicpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2Egc2kgZWwgY2Fycml0byB0aWVuZSB1bmEgcHJvbW9jacOzbiBhc29jaWFkYSBhbCBlbnbDrW8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2FydCBDYXJyaXRvIGFjdHVhbC5cbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgY3VhbmRvIGFsZ3VuYSBsw61uZWEgZGUgZGVzY3VlbnRvIGNvcnJlc3BvbmRlIGEgc2hpcHBpbmcuXG4gICAgICovXG4gICAgaGFzU2hpcHBpbmdQcm9tb3Rpb24gPSAoY2FydDogYW55KTogYm9vbGVhbiA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KGNhcnQ/LmNhcnREaXNjb3VudHMpXG4gICAgICAgICAgICAmJiBjYXJ0LmNhcnREaXNjb3VudHMuc29tZShkaXNjb3VudCA9PiB0aGlzLmZvcm1hdFR5cGUoKGRpc2NvdW50Py50eXBlIHx8ICcnKS50b1N0cmluZygpKSA9PT0gJ3NoaXBtZW50Jyk7XG5cbiAgICAvKipcbiAgICAgKiBEZXZ1ZWx2ZSBlbCBtb250byBlZmVjdGl2byBkZSB1bmEgbMOtbmVhIGRlIGRlc2N1ZW50by9wcm9tb2Npw7NuLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRpc2NvdW50IEzDrW5lYSBjcnVkYSBkZSBkZXNjdWVudG8gZGVsIGJhY2tlbmQuXG4gICAgICogQHBhcmFtIGNhcnQgQ2Fycml0byBhc29jaWFkby5cbiAgICAgKiBAcmV0dXJucyBNb250byBxdWUgZGViZSBtb3N0cmFyc2UgZW4gVUkuXG4gICAgICovXG4gICAgZ2V0QW1vdW50ID0gKGRpc2NvdW50LCBjYXJ0KTogbnVtYmVyID0+IHtcbiAgICAgICAgaWYgKGRpc2NvdW50LnR5cGUgIT0gJ3NoaXBtZW50JykgcmV0dXJuIGRpc2NvdW50LmFtb3VudDtcbiAgICAgICAgcmV0dXJuIGNhcnQudG90YWxzLnNoaXBwaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhvbW9sb2dhIHRpcG9zIGNydWRvcyBkZWwgYmFja2VuZCBhbCBjb25qdW50byBkZSB0aXBvcyB1c2FkbyBwb3IgY2hlY2tvdXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBUaXBvIGNydWRvIChgb3JkZXJfcHJvbW90aW9uYCwgYG9yZGVyX2NvdXBvbl9wcm9tb3Rpb25gLCBldGMuKS5cbiAgICAgKiBAcmV0dXJucyBUaXBvIG5vcm1hbGl6YWRvIGNvbnN1bWlkbyBwb3IgbG9zIGNvbXBvbmVudGVzIGRlbCBjb3JlLlxuICAgICAqL1xuICAgIGZvcm1hdFR5cGUgPSAodHlwZTogc3RyaW5nKTogQ2hlY2tvdXREYXRhVHlwZSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnb3JkZXJfcHJvbW90aW9uJzogcmVzdWx0ID0gJ2Rpc2NvdW50JzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcmRlcl9zaGlwcGluZ19wcm9tb3Rpb24nOiByZXN1bHQgPSAnc2hpcG1lbnQnOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29yZGVyX2NvdXBvbl9wcm9tb3Rpb24nOiByZXN1bHQgPSAnY291cG9uJzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcmRlcl91bml0X3Byb21vdGlvbic6IHJlc3VsdCA9ICdkaXNjb3VudCc7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgICFyZXN1bHQgJiYgKHJlc3VsdCA9IHR5cGUuaW5jbHVkZXMoJ3Byb21vdGlvbicpIHx8IHR5cGUuaW5jbHVkZXMoJ2Rpc2NvdW50JykgPyAnZGlzY291bnQnIDogdHlwZSApXG4gICAgICAgIHJldHVybiByZXN1bHQgfHwgdHlwZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZUFtb3VudCA9ICh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobm9ybWFsaXplZCkgPyBub3JtYWxpemVkIDogbnVsbDtcbiAgICB9XG59XG4iXX0=
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItdXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL29yZGVyLXV0aWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTNDLElBQWEsbUJBQW1CLEdBQWhDLE1BQWEsbUJBQW1CO0lBRTVCO1FBRUE7Ozs7V0FJRztRQUNILGtCQUFhLEdBQUcsQ0FBQyxJQUFTLEVBQUUsVUFBbUIsS0FBSyxFQUFrQixFQUFFOztZQUNwRSxJQUFJLFFBQUMsSUFBSSwwQ0FBRSxNQUFNLENBQUE7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksV0FBVztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUN2RSxJQUFJLFNBQVMsR0FBbUIsRUFBRSxDQUFDO1lBQ25DLElBQUksUUFBUSxHQUFpQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakgsSUFBSSxLQUFLLEdBQWlCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RGLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsc0NBQXNDO1lBQ25DLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEYsS0FBSyxJ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Q0FBQyxDQUFDLElBQUksQ0FBRSxDQUFBO1lBQ2xHLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQztRQUMxQixDQUFDLENBQUE7UUFFTyxvQkFBZSxHQUFHLENBQUMsS0FBeUMsRUFBaUIsRUFBRTtZQUNuRixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO2dCQUN2RCxPQUFPLElBQUksQ0FBQzthQUNmO1lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDM0QsQ0FBQyxDQUFBO0lBbFNlLENBQUM7Q0FtU3BCLENBQUE7QUFyU1ksbUJBQW1CO0lBRC9CLFVBQVUsRUFBRTtHQUNBLG1CQUFtQixDQXFTL0I7U0FyU1ksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hlY2tvdXREYXRhLCBDaGVja291dERhdGFUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVja291dC1kYXRhJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9yZGVyVXRpbGl0eVNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBjYXJ0IE9iamV0byBjYXJyaXRvIG8gb3JkZW4sIGluZGlzdGludGFtZW50ZSwgeWEgcXVlIHBvc2VlbiBlbCBtaXNtbyBmb3JtYXRvXG4gICAgICogQHBhcmFtIGZvckNhcnQgU2kgbGEgc29saWNpdHVkIGRlIHByb21vY2lvbmVzIHByb3ZpZW5lIGRlbCBjYXJyaXRvLCBzdXByaW1lIGVsIHN1YnRvdGFsIHkgZWwgdG90YWxcbiAgICAgKiBAZGVzY3JpcHRpb24gRGV2dWVsdmUgdW4gbGlzdGFkbyBjb24gdG9kYXMgbGFzIHByb21vY2lvbmVzIHF1ZSBwb3NlZSBlbCBjYXJyby9vcmRlblxuICAgICAqL1xuICAgIGdldFByb21vdGlvbnMgPSAoY2FydDogYW55LCBmb3JDYXJ0OiBib29sZWFuID0gZmFsc2UpOiBDaGVja291dERhdGFbXSA9PiB7XG4gICAgICAgIGlmICghY2FydD8udG90YWxzKSByZXR1cm4gW107XG4gICAgICAgIGlmIChjYXJ0LmNoZWNrb3V0U3RhdGUgJiYgY2FydC5jaGVja291dFN0YXRlID09IFwiY29tcGxldGVkXCIpIHJldHVybiBbXTtcbiAgICAgICAgbGV0IG5ld19zdGF0ZTogQ2hlY2tvdXREYXRhW10gPSBbXTtcbiAgICAgICAgbGV0IHN1YnRvdGFsOiBDaGVja291dERhdGEgPSB7IHR5cGU6ICdzdWJ0b3RhbCcsIG5hbWU6ICdzdWJ0b3RhbCcsIGFtb3VudDogdGhpcy5nZXRTdW1tYXJ5U3VidG90YWxBbW91bnQoY2FydCkgfTtcbiAgICAgICAgbGV0IHRvdGFsOiBDaGVja291dERhdGEgPSB7IHR5cGU6ICd0b3RhbCcsIG5hbWU6ICd0b3RhbCcsIGFtb3VudDogY2FydC50b3RhbHMudG90YWwgfTtcbiAgICAgICAgIWZvckNhcnQgJiYgbmV3X3N0YXRlLnB1c2goc3VidG90YWwpO1xuICAgICAvLyAgICBjb25zb2xlLmxvZyhjYXJ0LmNhcnREaXNjb3VudHMpO1xuICAgICAgICBjb25zdCBjYXJ0RGlzY291bnRzID0gQXJyYXkuaXNBcnJheShjYXJ0LmNhcnREaXNjb3VudHMpID8gY2FydC5jYXJ0RGlzY291bnRzIDogW107XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjYXJ0RGlzY291bnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNhcnREaXNjb3VudHNbaW5kZXhdLnR5cGUgPSB0aGlzLmZvcm1hdFR5cGUoY2FydERpc2NvdW50c1tpbmRleF0udHlwZSk7XG4gICAgICAgICAgICAgbmV3X3N0YXRlLnB1c2goe1xuICAgICAgICAgICAgICAgICB0eXBlOiBjYXJ0RGlzY291bnRzW2luZGV4XS50eXBlLFxuICAgICAgICAgICAgICAgICBuYW1lOiAoY2FydERpc2NvdW50c1tpbmRleF0udHlwZSAhPSAnY291cG9uJykgPyBjYXJ0RGlzY291bnRzW2luZGV4XS5uYW1lIDogJ2NvdXBvbicsXG4gICAgICAgICAgICAgICAgIGFtb3VudDogdGhpcy5nZXRBbW91bnQoY2FydERpc2NvdW50c1tpbmRleF0sIGNhcnQpXG4gICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfVxuICAgICAvLyAgICBjYXJ0LmNhcnREaXNjb3VudHMuZm9yRWFjaChjYXJ0RGlzY291bnQgPT4ge1xuICAgICAvLyAgICAgICAgY2FydERpc2NvdW50LnR5cGUgPSB0aGlzLmZvcm1hdFR5cGUoY2FydERpc2NvdW50LnR5cGUpO1xuICAgICAvLyAgICAgICAgbmV3X3N0YXRlLnB1c2goe1xuICAgICAvLyAgICAgICAgICAgIHR5cGU6IGNhcnREaXNjb3VudC50eXBlLFxuICAgICAvLyAgICAgICAgICAgIG5hbWU6IChjYXJ0RGlzY291bnQudHlwZSAhPSAnY291cG9uJykgPyBjYXJ0RGlzY291bnQubmFtZSA6ICdjb3Vwb24nLFxuICAgICAvLyAgICAgICAgICAgIGFtb3VudDogdGhpcy5nZXRBbW91bnQoY2FydERpc2NvdW50LCBjYXJ0KVxuICAgICAvLyAgICAgICAgfSk7XG4gICAgIC8vICAgIH0pO1xuICAgICAgICAhZm9yQ2FydCAmJiBuZXdfc3RhdGUucHVzaCh0b3RhbCk7XG4gICAgICAgIHJldHVybiBuZXdfc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydXllIGVsIHJlc3VtZW4gZGUgcHJvbW9jaW9uZXMgcXVlIGRlYmUgbW9zdHJhcnNlIGVuIGNoZWNrb3V0IHkgcmVzw7ptZW5lcyBkZSBjb21wcmEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2FydCBDYXJyaXRvIHUgb3JkZW4gY29uIGVzdHJ1Y3R1cmEgYHRvdGFsc2AgY29tcGF0aWJsZS5cbiAgICAgKiBAcGFyYW0gZm9yQ2FydCBDdWFuZG8gZXMgYHRydWVgLCBvbWl0ZSBzdWJ0b3RhbCB5IHRvdGFsIHBhcmEgZGV2b2x2ZXIgc29sbyBsYXMgbMOtbmVhcyBpbnRlcm1lZGlhcy5cbiAgICAgKiBAcmV0dXJucyBMaXN0YSBkZSBsw61uZWFzIG5vcm1hbGl6YWRhcyBwYXJhIHJlbmRlcml6YXIgZWwgcmVzdW1lbi5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQSBkaWZlcmVuY2lhIGRlIGBnZXRQcm9tb3Rpb25zYCwgZXN0ZSBtw6l0b2RvIHNvbG8gY29uc2lkZXJhIGRlc2N1ZW50b3MgZGUgb3JkZW4uXG4gICAgICovXG4gICAgZ2V0U3VtbWFyeVByb21vdGlvbnMgPSAoY2FydDogYW55LCBmb3JDYXJ0OiBib29sZWFuID0gZmFsc2UpOiBDaGVja291dERhdGFbXSA9PiB7XG4gICAgICAgIGlmIChjYXJ0LmNoZWNrb3V0U3RhdGUgJiYgY2FydC5jaGVja291dFN0YXRlID09IFwiY29tcGxldGVkXCIpIHJldHVybjtcbiAgICAgICAgbGV0IG5ld19zdGF0ZTogQ2hlY2tvdXREYXRhW10gPSBbXTtcbiAgICAgICAgbGV0IHN1YnRvdGFsOiBDaGVja291dERhdGEgPSB7IHR5cGU6ICdzdWJ0b3RhbCcsIG5hbWU6ICdzdWJ0b3RhbCcsIGFtb3VudDogdGhpcy5nZXRTdW1tYXJ5U3VidG90YWxBbW91bnQoY2FydCkgfTtcbiAgICAgICAgbGV0IHRvdGFsOiBDaGVja291dERhdGEgPSB7IHR5cGU6ICd0b3RhbCcsIG5hbWU6ICd0b3RhbCcsIGFtb3VudDogY2FydC50b3RhbHMudG90YWwgfTtcbiAgICAgICAgY29uc3QgcHJvbW90aW9uQW1vdW50ID0gdGhpcy5nZXRTdW1tYXJ5UHJvbW90aW9uQW1vdW50KGNhcnQpO1xuXG4gICAgICAgICFmb3JDYXJ0ICYmIG5ld19zdGF0ZS5wdXNoKHN1YnRvdGFsKTtcbiAgICAgICAgcHJvbW90aW9uQW1vdW50ICE9IDAgJiYgbmV3X3N0YXRlLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2Rpc2NvdW50JyxcbiAgICAgICAgICAgIG5hbWU6ICdkaXNjb3VudCcsXG4gICAgICAgICAgICBhbW91bnQ6IHByb21vdGlvbkFtb3VudFxuICAgICAgICB9KTtcbiAgICAgICAgIWZvckNhcnQgJiYgbmV3X3N0YXRlLnB1c2godG90YWwpO1xuICAgICAgICByZXR1cm4gbmV3X3N0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldnVlbHZlIGVsIG1vbnRvIGRlIGVudsOtbyBxdWUgZGViZSBtb3N0cmFyc2UgZW4gZWwgcmVzdW1lbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXJ0IENhcnJpdG8gdSBvcmRlbiBjb24gYHRvdGFsc2AuXG4gICAgICogQHJldHVybnMgYG51bWJlcmAgY3VhbmRvIGVsIGVudsOtbyBkZWJlIG1vc3RyYXJzZSwgbyBgbnVsbGAgY3VhbmRvIG5vIGNvcnJlc3BvbmRlIHJlbmRlcml6YXJsby5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBTaSBlbCBiYWNrZW5kIGluZm9ybWEgdW4gc2hpcHBpbmcgZGlzdGludG8gZGUgY2VybywgZXNlIHZhbG9yIHNlIG11ZXN0cmEgdGFsIGN1YWwuXG4gICAgICogLSBTaSBgdG90YWxzLnNoaXBwaW5nYCBlcyBgMGAgcGVybyBleGlzdGUgdW5hIHByb21vY2nDs24gZGUgZW52w61vLCBzZSBtdWVzdHJhIGAwYCBwYXJhIHF1ZSBsYSBVSSBsbyBpbnRlcnByZXRlIGNvbW8gZ3JhdGlzLlxuICAgICAqIC0gU2kgbm8gaGF5IGRhdG9zIHN1ZmljaWVudGVzLCBzZSBkZXZ1ZWx2ZSBgbnVsbGAgeSBzZSBjb25zZXJ2YSBlbCBjb21wb3J0YW1pZW50byBwcmV2aW8gZGUgbm8gbW9zdHJhciBsYSBsw61uZWEuXG4gICAgICovXG4gICAgZ2V0U3VtbWFyeVNoaXBtZW50QW1vdW50ID0gKGNhcnQ6IGFueSk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBzaGlwcGluZ0Ftb3VudCA9IHRoaXMubm9ybWFsaXplQW1vdW50KGNhcnQ/LnRvdGFscz8uc2hpcHBpbmcpO1xuICAgICAgICBpZiAoc2hpcHBpbmdBbW91bnQgIT09IG51bGwgJiYgc2hpcHBpbmdBbW91bnQgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzaGlwcGluZ0Ftb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaGlwcGluZ0Ftb3VudCA9PT0gMCAmJiB0aGlzLmhhc1NoaXBwaW5nUHJvbW90aW9uKGNhcnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9idGllbmUgZWwgbW9udG8gZGUgZGVzY3VlbnRvIHF1ZSBjb3JyZXNwb25kZSBhbCByZXN1bWVuIGRlIGxhIG9yZGVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhcnQgQ2Fycml0byB1IG9yZGVuIGNvbiBgdG90YWxzYC5cbiAgICAgKiBAcmV0dXJucyBNb250byBkZSBwcm9tb2Npb25lcyBkZSBvcmRlbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCBhbW91bnQgPSB0aGlzLm9yZGVyVXRpbHMuZ2V0U3VtbWFyeVByb21vdGlvbkFtb3VudChjYXJ0KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogU2kgZWwgYmFja2VuZCBudWV2byBpbmZvcm1hIGBwcm9tb3Rpb25CcmVha2Rvd24ub3JkZXJQcm9tb3Rpb25zYCwgZXNlIHZhbG9yIHRpZW5lIHByaW9yaWRhZC5cbiAgICAgKiBDb24gYmFja2VuZHMgdmllam9zIGhhY2UgZmFsbGJhY2sgYSBgdG90YWxzLnByb21vdGlvbmAgbyBgdG90YWxzLmRpc2NvdW50YC5cbiAgICAgKi9cbiAgICBnZXRTdW1tYXJ5UHJvbW90aW9uQW1vdW50ID0gKGNhcnQ6IGFueSk6IG51bWJlciA9PiB7XG4gICAgICAgIGNvbnN0IG9yZGVyRGlzY291bnQgPSBjYXJ0Py50b3RhbHM/Lm9yZGVyRGlzY291bnQgPz8gY2FydD8udG90YWxzPy5vcmRlcl9kaXNjb3VudDtcbiAgICAgICAgaWYgKG9yZGVyRGlzY291bnQgIT09IG51bGwgJiYgb3JkZXJEaXNjb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKG9yZGVyRGlzY291bnQgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzT3JkZXJQcm9tb3Rpb25zQnJlYWtkb3duKGNhcnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKFxuICAgICAgICAgICAgICAgIGNhcnQ/LnRvdGFscz8ucHJvbW90aW9uQnJlYWtkb3duPy5vcmRlclByb21vdGlvbnNcbiAgICAgICAgICAgICAgICA/PyBjYXJ0Py50b3RhbHM/LnByb21vdGlvbl9icmVha2Rvd24/Lm9yZGVyX3Byb21vdGlvbnNcbiAgICAgICAgICAgICAgICA/PyAwXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOdW1iZXIoY2FydD8udG90YWxzPy5wcm9tb3Rpb24gfHwgY2FydD8udG90YWxzPy5kaXNjb3VudCB8fCAwKTtcbiAgICB9XG5cbiAgICAvKiogRGVzY3VlbnRvIGRlIG9yZGVuIHNlcGFyYWRvIGRlIGN1cG9uZXMgeSBkZXNjdWVudG9zIGRlIGVudsOtby4gKi9cbiAgICBnZXRPcmRlclByb21vdGlvbkFtb3VudCA9IChjYXJ0OiBhbnkpOiBudW1iZXIgPT4ge1xuICAgICAgICBjb25zdCBicmVha2Rvd24gPSBjYXJ0Py50b3RhbHM/LnByb21vdGlvbkJyZWFrZG93biB8fCBjYXJ0Py50b3RhbHM/LnByb21vdGlvbl9icmVha2Rvd247XG4gICAgICAgIGlmIChicmVha2Rvd24gJiYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChicmVha2Rvd24sICdvcmRlclByb21vdGlvbnMnKVxuICAgICAgICAgICAgfHwgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJyZWFrZG93biwgJ29yZGVyX3Byb21vdGlvbnMnKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoYnJlYWtkb3duLm9yZGVyUHJvbW90aW9ucyA/PyBicmVha2Rvd24ub3JkZXJfcHJvbW90aW9ucyA/PyAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhcnQ/LmNhcnREaXNjb3VudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FydC5jYXJ0RGlzY291bnRzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihkaXNjb3VudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSAoZGlzY291bnQ/LnR5cGUgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUuaW5jbHVkZXMoJ29yZGVyJykgJiYgIXR5cGUuaW5jbHVkZXMoJ2NvdXBvbicpICYmICF0eXBlLmluY2x1ZGVzKCdzaGlwcGluZycpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgodG90YWwsIGRpc2NvdW50KSA9PiB0b3RhbCArIE51bWJlcihkaXNjb3VudD8uYW1vdW50IHx8IDApLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYXJ0Py5jb3Vwb25Db2RlIHx8IGNhcnQ/LmNvdXBvbl9jb2RlXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogTnVtYmVyKGNhcnQ/LnRvdGFscz8ub3JkZXJEaXNjb3VudCA/PyBjYXJ0Py50b3RhbHM/Lm9yZGVyX2Rpc2NvdW50ID8/IGNhcnQ/LnRvdGFscz8ucHJvbW90aW9uID8/IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9idGllbmUgw7puaWNhbWVudGUgZWwgZGVzY3VlbnRvIGFwbGljYWRvIHBvciBlbCBjdXDDs24uXG4gICAgICpcbiAgICAgKiBEZXZ1ZWx2ZSBgbnVsbGAgY3VhbmRvIGxhIHJlc3B1ZXN0YSBubyBwZXJtaXRlIGlkZW50aWZpY2FyIHN1IGltcG9ydGUsXG4gICAgICogcGFyYSBxdWUgZWwgZnJvbnRlbmQgcHVlZGEgbW9zdHJhciBzb2xhbWVudGUgZWwgY8OzZGlnby5cbiAgICAgKi9cbiAgICBnZXRDb3Vwb25Qcm9tb3Rpb25BbW91bnQgPSAoY2FydDogYW55KTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjYXJ0Py5jYXJ0RGlzY291bnRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb3Vwb25EaXNjb3VudHMgPSBjYXJ0LmNhcnREaXNjb3VudHMuZmlsdGVyKGRpc2NvdW50ID0+XG4gICAgICAgICAgICAoZGlzY291bnQ/LnR5cGUgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnY291cG9uJylcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWNvdXBvbkRpc2NvdW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvdXBvbkRpc2NvdW50cy5yZWR1Y2UoKHRvdGFsLCBkaXNjb3VudCkgPT4gdG90YWwgKyBOdW1iZXIoZGlzY291bnQ/LmFtb3VudCB8fCAwKSwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2J0aWVuZSBlbCBzdWJ0b3RhbCBjb21wYXRpYmxlIGNvbiBiYWNrZW5kcyBudWV2b3MgeSBsZWdhY3kuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2FydCBDYXJyaXRvIHUgb3JkZW4gY29uIGB0b3RhbHNgLlxuICAgICAqIEByZXR1cm5zIGB0b3RhbHMuc3VidG90YWxgIGN1YW5kbyBleGlzdGU7IGVuIGJhY2tlbmRzIGxlZ2FjeSB1c2EgYHRvdGFscy5pdGVtc2AuXG4gICAgICovXG4gICAgZ2V0U3VtbWFyeVN1YnRvdGFsQW1vdW50ID0gKGNhcnQ6IGFueSk6IG51bWJlciA9PiB7XG4gICAgICAgIGNvbnN0IGNhcnRTdWJ0b3RhbCA9IGNhcnQ/LnRvdGFscz8uY2FydFN1YnRvdGFsID8/IGNhcnQ/LnRvdGFscz8uY2FydF9zdWJ0b3RhbDtcbiAgICAgICAgaWYgKGNhcnRTdWJ0b3RhbCAhPT0gbnVsbCAmJiBjYXJ0U3VidG90YWwgIT09IHVuZGVmaW5lZCAmJiBjYXJ0U3VidG90YWwgIT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKGNhcnRTdWJ0b3RhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJ0b3RhbCA9IGNhcnQ/LnRvdGFscz8uc3VidG90YWw7XG4gICAgICAgIGlmIChzdWJ0b3RhbCAhPT0gbnVsbCAmJiBzdWJ0b3RhbCAhPT0gdW5kZWZpbmVkICYmIHN1YnRvdGFsICE9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzdWJ0b3RhbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTnVtYmVyKGNhcnQ/LnRvdGFscz8uaXRlbXMgfHwgMCk7XG4gICAgfVxuXG4gICAgLyoqIFRvdGFsIHF1ZSBkZWJlIG1vc3RyYXIgZWwgY2Fycml0by9zaWRlYmFyLCBleGNsdXllbmRvIGVudsOtbyBwZXJzaXN0aWRvLiAqL1xuICAgIGdldENhcnRUb3RhbEFtb3VudCA9IChjYXJ0OiBhbnkpOiBudW1iZXIgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbFdpdGhvdXRTaGlwcGluZyA9IGNhcnQ/LnRvdGFscz8udG90YWxXaXRob3V0U2hpcHBpbmcgPz8gY2FydD8udG90YWxzPy50b3RhbF93aXRob3V0X3NoaXBwaW5nO1xuICAgICAgICBpZiAodG90YWxXaXRob3V0U2hpcHBpbmcgIT09IG51bGwgJiYgdG90YWxXaXRob3V0U2hpcHBpbmcgIT09IHVuZGVmaW5lZCAmJiB0b3RhbFdpdGhvdXRTaGlwcGluZyAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodG90YWxXaXRob3V0U2hpcHBpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE51bWJlcihjYXJ0Py50b3RhbHM/LnRvdGFsIHx8IDApO1xuICAgIH1cblxuICAgIC8qKiBJbXB1ZXN0b3MgZGUgcHJvZHVjdG9zIHBhcmEgY2Fycml0by9zaWRlYmFyLCBjb24gZmFsbGJhY2sgbGVnYWN5LiAqL1xuICAgIGdldENhcnRUYXhlc0Ftb3VudCA9IChjYXJ0OiBhbnkpOiBudW1iZXIgPT4ge1xuICAgICAgICBjb25zdCBjYXJ0VGF4ZXMgPSBjYXJ0Py50b3RhbHM/LmNhcnRUYXhlcyA/PyBjYXJ0Py50b3RhbHM/LmNhcnRfdGF4ZXM7XG4gICAgICAgIGlmIChjYXJ0VGF4ZXMgIT09IG51bGwgJiYgY2FydFRheGVzICE9PSB1bmRlZmluZWQgJiYgY2FydFRheGVzICE9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihjYXJ0VGF4ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE51bWJlcihjYXJ0Py50b3RhbHM/LnRheGVzIHx8IDApO1xuICAgIH1cblxuICAgIC8qKiBJbXB1ZXN0b3MgZXNwZWPDrWZpY29zIGRlbCBjbGllbnRlIHBhcmEgY2Fycml0by9zaWRlYmFyLCBjb24gZmFsbGJhY2sgbGVnYWN5LiAqL1xuICAgIGdldENhcnRDbGllbnRUYXhlc0Ftb3VudCA9IChjYXJ0OiBhbnkpOiBudW1iZXIgPT4ge1xuICAgICAgICBjb25zdCBjYXJ0Q2xpZW50VGF4ZXMgPSBjYXJ0Py50b3RhbHM/LmNhcnRDbGllbnRUYXhlcyA/PyBjYXJ0Py50b3RhbHM/LmNhcnRfY2xpZW50X3RheGVzO1xuICAgICAgICBpZiAoY2FydENsaWVudFRheGVzICE9PSBudWxsICYmIGNhcnRDbGllbnRUYXhlcyAhPT0gdW5kZWZpbmVkICYmIGNhcnRDbGllbnRUYXhlcyAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoY2FydENsaWVudFRheGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBOdW1iZXIoY2FydD8udG90YWxzPy5jbGllbnRUYXhlcyB8fCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2Egc2kgZWwgYmFja2VuZCB5YSBpbmZvcm1hIGVsIGRlc2dsb3NlIG51ZXZvIGRlIHByb21vY2lvbmVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhcnQgQ2Fycml0byB1IG9yZGVuIGNvbiBgdG90YWxzYC5cbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgY3VhbmRvIGV4aXN0ZSBgcHJvbW90aW9uQnJlYWtkb3duLm9yZGVyUHJvbW90aW9uc2AuXG4gICAgICovXG4gICAgaGFzT3JkZXJQcm9tb3Rpb25zQnJlYWtkb3duID0gKGNhcnQ6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCBicmVha2Rvd24gPSBjYXJ0Py50b3RhbHM/LnByb21vdGlvbkJyZWFrZG93biB8fCBjYXJ0Py50b3RhbHM/LnByb21vdGlvbl9icmVha2Rvd247XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYnJlYWtkb3duIHx8IHt9LCAnb3JkZXJQcm9tb3Rpb25zJylcbiAgICAgICAgICAgIHx8IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChicmVha2Rvd24gfHwge30sICdvcmRlcl9wcm9tb3Rpb25zJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhIHNpIGVsIGNhcnJpdG8gdGllbmUgdW4gY3Vww7NuIGFwbGljYWRvLCBpbmRlcGVuZGllbnRlbWVudGUgZGUgY8OzbW8gaW1wYWN0ZSBlbiBlbCByZXN1bWVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhcnQgQ2Fycml0byBhY3R1YWwuXG4gICAgICogQHJldHVybnMgYHRydWVgIGN1YW5kbyBoYXkgdW4gY8OzZGlnbyBkZSBjdXDDs24gbyB1bmEgbMOtbmVhIGRlIGRlc2N1ZW50byBkZSB0aXBvIGN1cMOzbi5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRXN0ZSBoZWxwZXIgZXZpdGEgYXRhciBsYSBVSSBkZSBgUXVpdGFyIGN1cMOzbmAgYWwgbW9udG8gZGUgZGVzY3VlbnRvcyBkZSBvcmRlbi5cbiAgICAgKiBVbiBjdXDDs24gcHVlZGUgYWZlY3RhciBwcm9tb2Npb25lcyB1bml0YXJpYXMgeSBkZWphciBgb3JkZXJQcm9tb3Rpb25zID0gMGAuXG4gICAgICovXG4gICAgaGFzQXBwbGllZENvdXBvbiA9IChjYXJ0OiBhbnkpOiBib29sZWFuID0+IHtcbiAgICAgICAgaWYgKEJvb2xlYW4oY2FydD8uY291cG9uQ29kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY2FydD8uY2FydERpc2NvdW50cylcbiAgICAgICAgICAgICYmIGNhcnQuY2FydERpc2NvdW50cy5zb21lKGRpc2NvdW50ID0+IChkaXNjb3VudD8udHlwZSB8fCAnJykudG9TdHJpbmcoKS5pbmNsdWRlcygnY291cG9uJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYSBzaSBlbCBjYXJyaXRvIHRpZW5lIHVuYSBwcm9tb2Npw7NuIGFzb2NpYWRhIGFsIGVudsOtby5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXJ0IENhcnJpdG8gYWN0dWFsLlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBjdWFuZG8gYWxndW5hIGzDrW5lYSBkZSBkZXNjdWVudG8gY29ycmVzcG9uZGUgYSBzaGlwcGluZy5cbiAgICAgKi9cbiAgICBoYXNTaGlwcGluZ1Byb21vdGlvbiA9IChjYXJ0OiBhbnkpOiBib29sZWFuID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkoY2FydD8uY2FydERpc2NvdW50cylcbiAgICAgICAgICAgICYmIGNhcnQuY2FydERpc2NvdW50cy5zb21lKGRpc2NvdW50ID0+IHRoaXMuZm9ybWF0VHlwZSgoZGlzY291bnQ/LnR5cGUgfHwgJycpLnRvU3RyaW5nKCkpID09PSAnc2hpcG1lbnQnKTtcblxuICAgIC8qKlxuICAgICAqIERldnVlbHZlIGVsIG1vbnRvIGVmZWN0aXZvIGRlIHVuYSBsw61uZWEgZGUgZGVzY3VlbnRvL3Byb21vY2nDs24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGlzY291bnQgTMOtbmVhIGNydWRhIGRlIGRlc2N1ZW50byBkZWwgYmFja2VuZC5cbiAgICAgKiBAcGFyYW0gY2FydCBDYXJyaXRvIGFzb2NpYWRvLlxuICAgICAqIEByZXR1cm5zIE1vbnRvIHF1ZSBkZWJlIG1vc3RyYXJzZSBlbiBVSS5cbiAgICAgKi9cbiAgICBnZXRBbW91bnQgPSAoZGlzY291bnQsIGNhcnQpOiBudW1iZXIgPT4ge1xuICAgICAgICBpZiAoZGlzY291bnQudHlwZSAhPSAnc2hpcG1lbnQnKSByZXR1cm4gZGlzY291bnQuYW1vdW50O1xuICAgICAgICByZXR1cm4gY2FydC50b3RhbHMuc2hpcHBpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSG9tb2xvZ2EgdGlwb3MgY3J1ZG9zIGRlbCBiYWNrZW5kIGFsIGNvbmp1bnRvIGRlIHRpcG9zIHVzYWRvIHBvciBjaGVja291dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIFRpcG8gY3J1ZG8gKGBvcmRlcl9wcm9tb3Rpb25gLCBgb3JkZXJfY291cG9uX3Byb21vdGlvbmAsIGV0Yy4pLlxuICAgICAqIEByZXR1cm5zIFRpcG8gbm9ybWFsaXphZG8gY29uc3VtaWRvIHBvciBsb3MgY29tcG9uZW50ZXMgZGVsIGNvcmUuXG4gICAgICovXG4gICAgZm9ybWF0VHlwZSA9ICh0eXBlOiBzdHJpbmcpOiBDaGVja291dERhdGFUeXBlID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdvcmRlcl9wcm9tb3Rpb24nOiByZXN1bHQgPSAnZGlzY291bnQnOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29yZGVyX3NoaXBwaW5nX3Byb21vdGlvbic6IHJlc3VsdCA9ICdzaGlwbWVudCc7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb3JkZXJfY291cG9uX3Byb21vdGlvbic6IHJlc3VsdCA9ICdjb3Vwb24nOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29yZGVyX3VuaXRfcHJvbW90aW9uJzogcmVzdWx0ID0gJ2Rpc2NvdW50JzsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgIXJlc3VsdCAmJiAocmVzdWx0ID0gdHlwZS5pbmNsdWRlcygncHJvbW90aW9uJykgfHwgdHlwZS5pbmNsdWRlcygnZGlzY291bnQnKSA/ICdkaXNjb3VudCcgOiB0eXBlIClcbiAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCB0eXBlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplQW1vdW50ID0gKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShub3JtYWxpemVkKSA/IG5vcm1hbGl6ZWQgOiBudWxsO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,127 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Injectable } from '@angular/core';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../../public-api";
10
+ let PricePresentationService = class PricePresentationService {
11
+ /** Resuelve únicamente qué valor presentar; no calcula impuestos. */
12
+ getProductPricePresentation(variant, channel) {
13
+ const pricing = variant && variant.pricing;
14
+ if (this.isPricingContract(pricing)) {
15
+ return this.fromPricing(pricing, channel);
16
+ }
17
+ return this.fromLegacy(variant);
18
+ }
19
+ /**
20
+ * Resuelve los importes visibles de una línea sin convertir ni recalcular
21
+ * valores fiscales. `legacyPricing` debe ser el resultado ya normalizado
22
+ * por CartService para conservar exactamente el fallback histórico.
23
+ */
24
+ getCartItemPricePresentation(item, channel, legacyPricing) {
25
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
26
+ const linePricing = item && item.linePricing;
27
+ if (this.isCartLinePricing(linePricing)) {
28
+ const showGross = ((_a = channel) === null || _a === void 0 ? void 0 : _a.showPriceWithTaxesWhileBrowsing) === true;
29
+ const key = showGross ? 'gross' : 'net';
30
+ const variant = (_d = (_c = (_b = item) === null || _b === void 0 ? void 0 : _b.product) === null || _c === void 0 ? void 0 : _c.variants) === null || _d === void 0 ? void 0 : _d[0];
31
+ const variantPricing = variant && variant.pricing;
32
+ const productPresentation = this.isPricingContract(variantPricing)
33
+ ? this.fromPricing(variantPricing, channel)
34
+ : null;
35
+ return {
36
+ unitPrice: linePricing.unit[key],
37
+ discount: linePricing.discount[key],
38
+ subtotal: linePricing.subtotal[key],
39
+ previous: productPresentation ? productPresentation.previous : null,
40
+ secondary: productPresentation ? productPresentation.secondary : null,
41
+ hasTax: productPresentation ? productPresentation.hasTax : false,
42
+ tax: linePricing.subtotal.tax,
43
+ taxRate: productPresentation ? productPresentation.taxRate : null,
44
+ includedInPrice: productPresentation ? productPresentation.includedInPrice : null,
45
+ source: 'linePricing'
46
+ };
47
+ }
48
+ const pricing = legacyPricing || ((_e = item) === null || _e === void 0 ? void 0 : _e.pricing);
49
+ return {
50
+ unitPrice: Number(((_f = pricing) === null || _f === void 0 ? void 0 : _f.finalPrice) || 0),
51
+ discount: Number(((_g = pricing) === null || _g === void 0 ? void 0 : _g.unitPromotionTotal) || 0),
52
+ subtotal: Number((_l = (_j = (_h = item) === null || _h === void 0 ? void 0 : _h.subtotal, (_j !== null && _j !== void 0 ? _j : (_k = item) === null || _k === void 0 ? void 0 : _k.total)), (_l !== null && _l !== void 0 ? _l : 0))),
53
+ previous: ((_m = pricing) === null || _m === void 0 ? void 0 : _m.strikePrice) != null ? Number(pricing.strikePrice) : null,
54
+ secondary: null,
55
+ hasTax: false,
56
+ tax: 0,
57
+ taxRate: null,
58
+ includedInPrice: null,
59
+ source: 'legacy'
60
+ };
61
+ }
62
+ fromPricing(pricing, channel) {
63
+ var _a, _b;
64
+ const showGross = ((_a = channel) === null || _a === void 0 ? void 0 : _a.showPriceWithTaxesWhileBrowsing) === true;
65
+ const hasTax = pricing.tax.hasTax === true;
66
+ return {
67
+ primary: showGross ? pricing.current.gross : pricing.current.net,
68
+ previous: pricing.previous
69
+ ? (showGross ? pricing.previous.gross : pricing.previous.net)
70
+ : null,
71
+ secondary: showGross && ((_b = channel) === null || _b === void 0 ? void 0 : _b.showTaxLegend) === true && hasTax
72
+ ? pricing.current.net
73
+ : null,
74
+ hasTax,
75
+ tax: pricing.current.tax,
76
+ taxRate: pricing.tax.rate,
77
+ includedInPrice: pricing.tax.includedInPrice,
78
+ source: 'pricing'
79
+ };
80
+ }
81
+ fromLegacy(variant) {
82
+ const current = variant && (variant.saleprice || variant.price);
83
+ const original = variant && variant.price;
84
+ const hasPrevious = current != null && original != null && current !== original;
85
+ return {
86
+ primary: this.legacyValue(current),
87
+ previous: hasPrevious ? this.legacyValue(original) : null,
88
+ secondary: null,
89
+ hasTax: false,
90
+ tax: 0,
91
+ taxRate: null,
92
+ includedInPrice: null,
93
+ source: 'legacy'
94
+ };
95
+ }
96
+ legacyValue(value) {
97
+ return value == null || value === '' ? 0 : value;
98
+ }
99
+ isPricingContract(pricing) {
100
+ return !!pricing
101
+ && this.isValue(pricing.current)
102
+ && !!pricing.tax
103
+ && typeof pricing.tax.hasTax === 'boolean'
104
+ && (pricing.previous === null || pricing.previous === undefined || this.isValue(pricing.previous));
105
+ }
106
+ isValue(value) {
107
+ return !!value
108
+ && this.isFiniteNumber(value.net)
109
+ && this.isFiniteNumber(value.tax)
110
+ && this.isFiniteNumber(value.gross);
111
+ }
112
+ isFiniteNumber(value) {
113
+ return typeof value === 'number' && isFinite(value);
114
+ }
115
+ isCartLinePricing(value) {
116
+ return !!value
117
+ && this.isValue(value.unit)
118
+ && this.isValue(value.discount)
119
+ && this.isValue(value.subtotal);
120
+ }
121
+ };
122
+ PricePresentationService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PricePresentationService_Factory() { return new i1.PricePresentationService(); }, token: i1.PricePresentationService, providedIn: "root" });
123
+ PricePresentationService = __decorate([
124
+ Injectable({ providedIn: 'root' })
125
+ ], PricePresentationService);
126
+ export { PricePresentationService };
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtcHJlc2VudGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvdXRpbHMvcHJpY2UtcHJlc2VudGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBOEMzQyxJQUFhLHdCQUF3QixHQUFyQyxNQUFhLHdCQUF3QjtJQUNqQyxxRUFBcUU7SUFDckUsMkJBQTJCLENBQ3ZCLE9BQTZCLEVBQzdCLE9BQXVCO1FBRXZCLE1BQU0sT0FBTyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRTNDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDN0M7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw0QkFBNEIsQ0FDeEIsSUFBb0IsRUFDcEIsT0FBdUIsRUFDdkIsYUFBK0I7O1FBRS9CLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRTdDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLE9BQUEsT0FBTywwQ0FBRSwrQkFBK0IsTUFBSyxJQUFJLENBQUM7WUFDcEUsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUN4QyxNQUFNLE9BQU8scUJBQUcsSUFBSSwwQ0FBRSxPQUFPLDBDQUFFLFFBQVEsMENBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0MsTUFBTSxjQUFjLEdBQUcs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cG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYW5uZWwgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoYW5uZWwnO1xuaW1wb3J0IHsgUHJvZHVjdFZhcmlhbnQsIFByb2R1Y3RWYXJpYW50UHJpY2luZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcHJvZHVjdCc7XG5pbXBvcnQgeyBDYXJ0SXRlbSwgQ2FydEl0ZW1QcmljaW5nLCBDYXJ0TGluZVByaWNpbmcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NhcnQtaXRlbSc7XG5cbmV4cG9ydCB0eXBlIFByaWNlUHJlc2VudGF0aW9uVmFsdWUgPSBudW1iZXIgfCBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpY2VQcmVzZW50YXRpb24ge1xuICAgIHByaW1hcnk6IFByaWNlUHJlc2VudGF0aW9uVmFsdWU7XG4gICAgcHJldmlvdXM6IFByaWNlUHJlc2VudGF0aW9uVmFsdWUgfCBudWxsO1xuICAgIHNlY29uZGFyeTogbnVtYmVyIHwgbnVsbDtcbiAgICBoYXNUYXg6IGJvb2xlYW47XG4gICAgdGF4OiBudW1iZXI7XG4gICAgdGF4UmF0ZTogbnVtYmVyIHwgbnVsbDtcbiAgICBpbmNsdWRlZEluUHJpY2U6IGJvb2xlYW4gfCBudWxsO1xuICAgIHNvdXJjZTogJ3ByaWNpbmcnIHwgJ2xlZ2FjeSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FydEl0ZW1QcmljZVByZXNlbnRhdGlvbiB7XG4gICAgdW5pdFByaWNlOiBudW1iZXI7XG4gICAgZGlzY291bnQ6IG51bWJlcjtcbiAgICBzdWJ0b3RhbDogbnVtYmVyO1xuICAgIHByZXZpb3VzOiBudW1iZXIgfCBudWxsO1xuICAgIHNlY29uZGFyeTogbnVtYmVyIHwgbnVsbDtcbiAgICBoYXNUYXg6IGJvb2xlYW47XG4gICAgdGF4OiBudW1iZXI7XG4gICAgdGF4UmF0ZTogbnVtYmVyIHwgbnVsbDtcbiAgICBpbmNsdWRlZEluUHJpY2U6IGJvb2xlYW4gfCBudWxsO1xuICAgIHNvdXJjZTogJ2xpbmVQcmljaW5nJyB8ICdsZWdhY3knO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcnRTdW1tYXJ5UHJpY2VQcmVzZW50YXRpb24ge1xuICAgIHByb2R1Y3RzQmVmb3JlRGlzY291bnRzOiBudW1iZXI7XG4gICAgbGluZURpc2NvdW50czogbnVtYmVyO1xuICAgIHN1YnRvdGFsOiBudW1iZXI7XG4gICAgb3JkZXJEaXNjb3VudDogbnVtYmVyO1xuICAgIGNvdXBvbkRpc2NvdW50OiBudW1iZXIgfCBudWxsO1xuICAgIHRheGVzOiBudW1iZXI7XG4gICAgY2xpZW50VGF4ZXM6IG51bWJlcjtcbiAgICBzaGlwcGluZzogbnVtYmVyIHwgbnVsbDtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHRheGVzSW5jbHVkZWRJblRvdGFsOiBib29sZWFuO1xuICAgIHNvdXJjZTogJ2xpbmVQcmljaW5nJyB8ICdsZWdhY3knO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFByaWNlUHJlc2VudGF0aW9uU2VydmljZSB7XG4gICAgLyoqIFJlc3VlbHZlIMO6bmljYW1lbnRlIHF1w6kgdmFsb3IgcHJlc2VudGFyOyBubyBjYWxjdWxhIGltcHVlc3Rvcy4gKi9cbiAgICBnZXRQcm9kdWN0UHJpY2VQcmVzZW50YXRpb24oXG4gICAgICAgIHZhcmlhbnQ6IFByb2R1Y3RWYXJpYW50IHwgYW55LFxuICAgICAgICBjaGFubmVsPzogQ2hhbm5lbCB8IGFueVxuICAgICk6IFByaWNlUHJlc2VudGF0aW9uIHtcbiAgICAgICAgY29uc3QgcHJpY2luZyA9IHZhcmlhbnQgJiYgdmFyaWFudC5wcmljaW5nO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUHJpY2luZ0NvbnRyYWN0KHByaWNpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tUHJpY2luZyhwcmljaW5nLCBjaGFubmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZyb21MZWdhY3kodmFyaWFudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzdWVsdmUgbG9zIGltcG9ydGVzIHZpc2libGVzIGRlIHVuYSBsw61uZWEgc2luIGNvbnZlcnRpciBuaSByZWNhbGN1bGFyXG4gICAgICogdmFsb3JlcyBmaXNjYWxlcy4gYGxlZ2FjeVByaWNpbmdgIGRlYmUgc2VyIGVsIHJlc3VsdGFkbyB5YSBub3JtYWxpemFkb1xuICAgICAqIHBvciBDYXJ0U2VydmljZSBwYXJhIGNvbnNlcnZhciBleGFjdGFtZW50ZSBlbCBmYWxsYmFjayBoaXN0w7NyaWNvLlxuICAgICAqL1xuICAgIGdldENhcnRJdGVtUHJpY2VQcmVzZW50YXRpb24oXG4gICAgICAgIGl0ZW06IENhcnRJdGVtIHwgYW55LFxuICAgICAgICBjaGFubmVsPzogQ2hhbm5lbCB8IGFueSxcbiAgICAgICAgbGVnYWN5UHJpY2luZz86IENhcnRJdGVtUHJpY2luZ1xuICAgICk6IENhcnRJdGVtUHJpY2VQcmVzZW50YXRpb24ge1xuICAgICAgICBjb25zdCBsaW5lUHJpY2luZyA9IGl0ZW0gJiYgaXRlbS5saW5lUHJpY2luZztcblxuICAgICAgICBpZiAodGhpcy5pc0NhcnRMaW5lUHJpY2luZyhsaW5lUHJpY2luZykpIHtcbiAgICAgICAgICAgIGNvbnN0IHNob3dHcm9zcyA9IGNoYW5uZWw/LnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPT09IHRydWU7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzaG93R3Jvc3MgPyAnZ3Jvc3MnIDogJ25ldCc7XG4gICAgICAgICAgICBjb25zdCB2YXJpYW50ID0gaXRlbT8ucHJvZHVjdD8udmFyaWFudHM/LlswXTtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRQcmljaW5nID0gdmFyaWFudCAmJiB2YXJpYW50LnByaWNpbmc7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0UHJlc2VudGF0aW9uID0gdGhpcy5pc1ByaWNpbmdDb250cmFjdCh2YXJpYW50UHJpY2luZylcbiAgICAgICAgICAgICAgICA/IHRoaXMuZnJvbVByaWNpbmcodmFyaWFudFByaWNpbmcsIGNoYW5uZWwpXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVuaXRQcmljZTogbGluZVByaWNpbmcudW5pdFtrZXldLFxuICAgICAgICAgICAgICAgIGRpc2NvdW50OiBsaW5lUHJpY2luZy5kaXNjb3VudFtrZXldLFxuICAgICAgICAgICAgICAgIHN1YnRvdGFsOiBsaW5lUHJpY2luZy5zdWJ0b3RhbFtrZXldLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzOiBwcm9kdWN0UHJlc2VudGF0aW9uID8gcHJvZHVjdFByZXNlbnRhdGlvbi5wcmV2aW91cyBhcyBudW1iZXIgfCBudWxsIDogbnVsbCxcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHByb2R1Y3RQcmVzZW50YXRpb24gPyBwcm9kdWN0UHJlc2VudGF0aW9uLnNlY29uZGFyeSA6IG51bGwsXG4gICAgICAgICAgICAgICAgaGFzVGF4OiBwcm9kdWN0UHJlc2VudGF0aW9uID8gcHJvZHVjdFByZXNlbnRhdGlvbi5oYXNUYXggOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0YXg6IGxpbmVQcmljaW5nLnN1YnRvdGFsLnRheCxcbiAgICAgICAgICAgICAgICB0YXhSYXRlOiBwcm9kdWN0UHJlc2VudGF0aW9uID8gcHJvZHVjdFByZXNlbnRhdGlvbi50YXhSYXRlIDogbnVsbCxcbiAgICAgICAgICAgICAgICBpbmNsdWRlZEluUHJpY2U6IHByb2R1Y3RQcmVzZW50YXRpb24gPyBwcm9kdWN0UHJlc2VudGF0aW9uLmluY2x1ZGVkSW5QcmljZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgc291cmNlOiAnbGluZVByaWNpbmcnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJpY2luZyA9IGxlZ2FjeVByaWNpbmcgfHwgaXRlbT8ucHJpY2luZztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVuaXRQcmljZTogTnVtYmVyKHByaWNpbmc/LmZpbmFsUHJpY2UgfHwgMCksXG4gICAgICAgICAgICBkaXNjb3VudDogTnVtYmVyKHByaWNpbmc/LnVuaXRQcm9tb3Rpb25Ub3RhbCB8fCAwKSxcbiAgICAgICAgICAgIHN1YnRvdGFsOiBOdW1iZXIoaXRlbT8uc3VidG90YWwgPz8gaXRlbT8udG90YWwgPz8gMCksXG4gICAgICAgICAgICBwcmV2aW91czogcHJpY2luZz8uc3RyaWtlUHJpY2UgIT0gbnVsbCA/IE51bWJlcihwcmljaW5nLnN0cmlrZVByaWNlKSA6IG51bGwsXG4gICAgICAgICAgICBzZWNvbmRhcnk6IG51bGwsXG4gICAgICAgICAgICBoYXNUYXg6IGZhbHNlLFxuICAgICAgICAgICAgdGF4OiAwLFxuICAgICAgICAgICAgdGF4UmF0ZTogbnVsbCxcbiAgICAgICAgICAgIGluY2x1ZGVkSW5QcmljZTogbnVsbCxcbiAgICAgICAgICAgIHNvdXJjZTogJ2xlZ2FjeSdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZyb21QcmljaW5nKHByaWNpbmc6IFByb2R1Y3RWYXJpYW50UHJpY2luZywgY2hhbm5lbD86IENoYW5uZWwgfCBhbnkpOiBQcmljZVByZXNlbnRhdGlvbiB7XG4gICAgICAgIGNvbnN0IHNob3dHcm9zcyA9IGNoYW5uZWw/LnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IGhhc1RheCA9IHByaWNpbmcudGF4Lmhhc1RheCA9PT0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpbWFyeTogc2hvd0dyb3NzID8gcHJpY2luZy5jdXJyZW50Lmdyb3NzIDogcHJpY2luZy5jdXJyZW50Lm5ldCxcbiAgICAgICAgICAgIHByZXZpb3VzOiBwcmljaW5nLnByZXZpb3VzXG4gICAgICAgICAgICAgICAgPyAoc2hvd0dyb3NzID8gcHJpY2luZy5wcmV2aW91cy5ncm9zcyA6IHByaWNpbmcucHJldmlvdXMubmV0KVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIHNlY29uZGFyeTogc2hvd0dyb3NzICYmIGNoYW5uZWw/LnNob3dUYXhMZWdlbmQgPT09IHRydWUgJiYgaGFzVGF4XG4gICAgICAgICAgICAgICAgPyBwcmljaW5nLmN1cnJlbnQubmV0XG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgaGFzVGF4LFxuICAgICAgICAgICAgdGF4OiBwcmljaW5nLmN1cnJlbnQudGF4LFxuICAgICAgICAgICAgdGF4UmF0ZTogcHJpY2luZy50YXgucmF0ZSxcbiAgICAgICAgICAgIGluY2x1ZGVkSW5QcmljZTogcHJpY2luZy50YXguaW5jbHVkZWRJblByaWNlLFxuICAgICAgICAgICAgc291cmNlOiAncHJpY2luZydcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZyb21MZWdhY3kodmFyaWFudDogUHJvZHVjdFZhcmlhbnQgfCBhbnkpOiBQcmljZVByZXNlbnRhdGlvbiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB2YXJpYW50ICYmICh2YXJpYW50LnNhbGVwcmljZSB8fCB2YXJpYW50LnByaWNlKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSB2YXJpYW50ICYmIHZhcmlhbnQucHJpY2U7XG4gICAgICAgIGNvbnN0IGhhc1ByZXZpb3VzID0gY3VycmVudCAhPSBudWxsICYmIG9yaWdpbmFsICE9IG51bGwgJiYgY3VycmVudCAhPT0gb3JpZ2luYWw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaW1hcnk6IHRoaXMubGVnYWN5VmFsdWUoY3VycmVudCksXG4gICAgICAgICAgICBwcmV2aW91czogaGFzUHJldmlvdXMgPyB0aGlzLmxlZ2FjeVZhbHVlKG9yaWdpbmFsKSA6IG51bGwsXG4gICAgICAgICAgICBzZWNvbmRhcnk6IG51bGwsXG4gICAgICAgICAgICBoYXNUYXg6IGZhbHNlLFxuICAgICAgICAgICAgdGF4OiAwLFxuICAgICAgICAgICAgdGF4UmF0ZTogbnVsbCxcbiAgICAgICAgICAgIGluY2x1ZGVkSW5QcmljZTogbnVsbCxcbiAgICAgICAgICAgIHNvdXJjZTogJ2xlZ2FjeSdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxlZ2FjeVZhbHVlKHZhbHVlOiBhbnkpOiBQcmljZVByZXNlbnRhdGlvblZhbHVlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnID8gMCA6IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNQcmljaW5nQ29udHJhY3QocHJpY2luZzogYW55KTogcHJpY2luZyBpcyBQcm9kdWN0VmFyaWFudFByaWNpbmcge1xuICAgICAgICByZXR1cm4gISFwcmljaW5nXG4gICAgICAgICAgICAmJiB0aGlzLmlzVmFsdWUocHJpY2luZy5jdXJyZW50KVxuICAgICAgICAgICAgJiYgISFwcmljaW5nLnRheFxuICAgICAgICAgICAgJiYgdHlwZW9mIHByaWNpbmcudGF4Lmhhc1RheCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICAmJiAocHJpY2luZy5wcmV2aW91cyA9PT0gbnVsbCB8fCBwcmljaW5nLnByZXZpb3VzID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc1ZhbHVlKHByaWNpbmcucHJldmlvdXMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF2YWx1ZVxuICAgICAgICAgICAgJiYgdGhpcy5pc0Zpbml0ZU51bWJlcih2YWx1ZS5uZXQpXG4gICAgICAgICAgICAmJiB0aGlzLmlzRmluaXRlTnVtYmVyKHZhbHVlLnRheClcbiAgICAgICAgICAgICYmIHRoaXMuaXNGaW5pdGVOdW1iZXIodmFsdWUuZ3Jvc3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaW5pdGVOdW1iZXIodmFsdWU6IGFueSk6IHZhbHVlIGlzIG51bWJlciB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQ2FydExpbmVQcmljaW5nKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBDYXJ0TGluZVByaWNpbmcge1xuICAgICAgICByZXR1cm4gISF2YWx1ZVxuICAgICAgICAgICAgJiYgdGhpcy5pc1ZhbHVlKHZhbHVlLnVuaXQpXG4gICAgICAgICAgICAmJiB0aGlzLmlzVmFsdWUodmFsdWUuZGlzY291bnQpXG4gICAgICAgICAgICAmJiB0aGlzLmlzVmFsdWUodmFsdWUuc3VidG90YWwpO1xuICAgIH1cblxufVxuIl19