ng-easycommerce 0.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +4 -0
  2. package/assets/ec-i18n/ct.json +2 -0
  3. package/assets/ec-i18n/en.json +2 -0
  4. package/assets/ec-i18n/es.json +2 -0
  5. package/assets/ec-i18n/fr.json +2 -0
  6. package/assets/ec-i18n/gl.json +2 -0
  7. package/assets/ec-i18n/pr.json +2 -0
  8. package/bundles/ng-easycommerce.umd.js +84 -20
  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 +2 -2
  13. package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +6 -2
  14. package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
  15. package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +24 -9
  16. package/esm2015/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
  17. package/esm2015/lib/interfaces/checkout-data.js +1 -1
  18. package/esm2015/lib/services/cart.service.js +9 -1
  19. package/esm2015/lib/services/checkout/checkout.service.js +3 -1
  20. package/esm2015/lib/utils/order-util.service.js +22 -2
  21. package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
  22. package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +6 -2
  23. package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
  24. package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +29 -14
  25. package/esm5/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
  26. package/esm5/lib/interfaces/checkout-data.js +1 -1
  27. package/esm5/lib/services/cart.service.js +13 -1
  28. package/esm5/lib/services/checkout/checkout.service.js +3 -2
  29. package/esm5/lib/utils/order-util.service.js +22 -2
  30. package/fesm2015/ng-easycommerce.js +75 -14
  31. package/fesm2015/ng-easycommerce.js.map +1 -1
  32. package/fesm5/ng-easycommerce.js +84 -20
  33. package/fesm5/ng-easycommerce.js.map +1 -1
  34. package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +1 -1
  35. package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +1 -1
  36. package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +3 -0
  37. package/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.d.ts +3 -0
  38. package/lib/interfaces/checkout-data.d.ts +6 -1
  39. package/lib/services/cart.service.d.ts +3 -0
  40. package/lib/utils/order-util.service.d.ts +1 -0
  41. package/ng-easycommerce.metadata.json +1 -1
  42. package/package.json +1 -1
@@ -47,6 +47,7 @@ var DetailCheckoutBlockEcComponent = /** @class */ (function (_super) {
47
47
  case 'subtotal': return 'fas fa-boxes fa-2x';
48
48
  case 'productsBeforeDiscounts': return 'fas fa-boxes fa-2x';
49
49
  case 'taxes': return 'fas fa-file-invoice-dollar fa-2x';
50
+ case 'paymentMethodAdjustment': return 'fas fa-credit-card fa-2x';
50
51
  case 'total': return 'fas fa-shopping-basket fa-2x';
51
52
  default: return 'fas fa-tags fa-2x';
52
53
  }
@@ -100,6 +101,7 @@ var DetailCheckoutBlockEcComponent = /** @class */ (function (_super) {
100
101
  }
101
102
  };
102
103
  DetailCheckoutBlockEcComponent.prototype.getTypeLabel = function (type, item) {
104
+ var _a, _b;
103
105
  if (type === 'taxes') {
104
106
  if (item && item.taxesIncludedInTotal === true)
105
107
  return 'taxes-included-in-total';
@@ -109,6 +111,8 @@ var DetailCheckoutBlockEcComponent = /** @class */ (function (_super) {
109
111
  }
110
112
  if (type === 'productsBeforeDiscounts')
111
113
  return 'products-before-discounts';
114
+ if (type === 'paymentMethodAdjustment')
115
+ return (_b = (_a = item) === null || _a === void 0 ? void 0 : _a.amount, (_b !== null && _b !== void 0 ? _b : 0)) < 0 ? 'payment-method-discount' : 'payment-method-surcharge';
112
116
  return type;
113
117
  };
114
118
  DetailCheckoutBlockEcComponent.prototype.shouldShowItem = function (type, item) {
@@ -151,11 +155,11 @@ var DetailCheckoutBlockEcComponent = /** @class */ (function (_super) {
151
155
  DetailCheckoutBlockEcComponent = __decorate([
152
156
  Component({
153
157
  selector: 'app-detail-checkout-block-ec',
154
- template: "<div id=\"appDetailCheckoutBlockEc\" class=\"d-flex flex-row w-100 justify-content-center flex-wrap\"\n *ngIf=\"data && (creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <ng-container *ngFor=\"let item of data; let i = index\">\n <ng-container *ngIf=\"shouldShowItem(item.type, item) && !shouldHideSubtotal(item)\">\n <div class=\"d-flex flex-column justify-content-center mx-sm-3 mx-2 text-center mb-4 resumen\">\n <i ngClass=\"mb-2 colorIconoCheckout\" [class]=\"getIcon(item)\"></i>\n <strong class=\"text-center w-100 font-brandon font-md mb-1\">\n {{ getTypeLabel(item.type, item) | translate }}\n </strong>\n <ng-container *ngIf=\"getAmountView(item) as priceView\">\n <span class=\"text-center w-100 font-brandon font-md text-gray resumen-price\"\n [class.resumen-price--discounted]=\"priceView.showOriginalPrice\"\n [class.resumen-price--free]=\"priceView.isFree\">\n <del *ngIf=\"priceView.showOriginalPrice\">\n {{ priceView.originalPrice | ecCurrencySymbol:'alwaysShowDecimals' }}\n </del>\n <strong>\n <ng-container *ngIf=\"priceView.isFree; else resumenPriceValue\">\n {{ 'free' | translate }}\n </ng-container>\n <ng-template #resumenPriceValue>\n {{ priceView.finalPrice | ecCurrencySymbol:'alwaysShowDecimals' }}\n </ng-template>\n </strong>\n </span>\n </ng-container>\n </div>\n </ng-container>\n\n\n <!-- Mostrar total de descuentos -->\n <div class=\"d-flex flex-column justify-content-center mx-sm-3 mx-2 text-center mb-4 resumen\"\n *ngIf=\"!hideDiscounts && this.discountTotal != 0 && i === 1\">\n <i ngClass=\"mb-2 colorIconoCheckout\" [class]=\"getIcon2('discount')\"></i>\n <strong class=\"text-center w-100 font-brandon font-md mb-1\">Descuento</strong>\n <span class=\"text-center w-100 font-brandon font-md text-gray\">{{ (this.discountTotal | ecCurrencySymbol:'alwaysShowDecimals')\n }}</span>\n </div>\n\n <!-- Mostrar total de cupones -->\n <div class=\"d-flex flex-column justify-content-center mx-sm-3 mx-2 text-center mb-4 resumen\"\n *ngIf=\"!hideDiscounts && this.couponTotal != 0 && i === 1\">\n <i ngClass=\"mb-2 colorIconoCheckout\" [class]=\"getIcon2('coupon')\"></i>\n <strong class=\"text-center w-100 font-brandon font-md mb-1\">Cupon</strong>\n <span class=\"text-center w-100 font-brandon font-md text-gray\">{{(this.couponTotal| ecCurrencySymbol:'alwaysShowDecimals')\n }}</span>\n </div>\n <div class=\"d-flex flex-column justify-content-center mx-sm-3 mx-2 text-center mb-4 resumen\"\n *ngIf=\"!hideTaxes && this.clientTaxes != 0 && i === 1\">\n <i ngClass=\"mb-2 colorIconoCheckout\" [class]=\"getIcon2('clienTaxe')\"></i>\n <strong class=\"text-center w-100 font-brandon font-md mb-1\">{{ 'clientTaxes' | translate }}</strong>\n <span class=\"text-center w-100 font-brandon font-md text-gray\">{{(this.clientTaxes | ecCurrencySymbol:'alwaysShowDecimals')\n }}</span>\n </div>\n </ng-container>\n <ng-container *ngFor=\"let item of data\">\n <div class=\"checkout-tax-info\"\n *ngIf=\"item.type === 'taxes' && item.taxesIncludedInTotal === true && !hideTaxes\">\n <span>{{ getTypeLabel(item.type, item) | translate }}</span>\n <span>{{ item.amount | ecCurrencySymbol:'alwaysShowDecimals' }}</span>\n </div>\n </ng-container>\n</div>\n",
158
+ template: "<div id=\"appDetailCheckoutBlockEc\" class=\"d-flex flex-row w-100 justify-content-center flex-wrap\"\n *ngIf=\"data && (creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <ng-container *ngFor=\"let item of data; let i = index\">\n <ng-container *ngIf=\"shouldShowItem(item.type, item) && !shouldHideSubtotal(item)\">\n <div class=\"d-flex flex-column justify-content-center mx-sm-3 mx-2 text-center mb-4 resumen\">\n <i ngClass=\"mb-2 colorIconoCheckout\" [class]=\"getIcon(item)\"></i>\n <strong class=\"text-center w-100 font-brandon font-md mb-1\">\n {{ getTypeLabel(item.type, item) | translate }}\n <ng-container *ngIf=\"item.type === 'paymentMethodAdjustment' && item.name && item.name !== 'discount' && item.name !== 'surcharge'\">\n \u00B7 {{ item.name }}\n </ng-container>\n </strong>\n <ng-container *ngIf=\"getAmountView(item) as priceView\">\n <span class=\"text-center w-100 font-brandon font-md text-gray resumen-price\"\n [class.resumen-price--discounted]=\"priceView.showOriginalPrice\"\n [class.resumen-price--free]=\"priceView.isFree\">\n <del *ngIf=\"priceView.showOriginalPrice\">\n {{ priceView.originalPrice | ecCurrencySymbol:'alwaysShowDecimals' }}\n </del>\n <strong>\n <ng-container *ngIf=\"priceView.isFree; else resumenPriceValue\">\n {{ 'free' | translate }}\n </ng-container>\n <ng-template #resumenPriceValue>\n {{ priceView.finalPrice | ecCurrencySymbol:'alwaysShowDecimals' }}\n </ng-template>\n </strong>\n </span>\n </ng-container>\n </div>\n </ng-container>\n\n\n <!-- Mostrar total de descuentos -->\n <div class=\"d-flex flex-column justify-content-center mx-sm-3 mx-2 text-center mb-4 resumen\"\n *ngIf=\"!hideDiscounts && this.discountTotal != 0 && i === 1\">\n <i ngClass=\"mb-2 colorIconoCheckout\" [class]=\"getIcon2('discount')\"></i>\n <strong class=\"text-center w-100 font-brandon font-md mb-1\">Descuento</strong>\n <span class=\"text-center w-100 font-brandon font-md text-gray\">{{ (this.discountTotal | ecCurrencySymbol:'alwaysShowDecimals')\n }}</span>\n </div>\n\n <!-- Mostrar total de cupones -->\n <div class=\"d-flex flex-column justify-content-center mx-sm-3 mx-2 text-center mb-4 resumen\"\n *ngIf=\"!hideDiscounts && this.couponTotal != 0 && i === 1\">\n <i ngClass=\"mb-2 colorIconoCheckout\" [class]=\"getIcon2('coupon')\"></i>\n <strong class=\"text-center w-100 font-brandon font-md mb-1\">Cupon</strong>\n <span class=\"text-center w-100 font-brandon font-md text-gray\">{{(this.couponTotal| ecCurrencySymbol:'alwaysShowDecimals')\n }}</span>\n </div>\n <div class=\"d-flex flex-column justify-content-center mx-sm-3 mx-2 text-center mb-4 resumen\"\n *ngIf=\"!hideTaxes && this.clientTaxes != 0 && i === 1\">\n <i ngClass=\"mb-2 colorIconoCheckout\" [class]=\"getIcon2('clienTaxe')\"></i>\n <strong class=\"text-center w-100 font-brandon font-md mb-1\">{{ 'clientTaxes' | translate }}</strong>\n <span class=\"text-center w-100 font-brandon font-md text-gray\">{{(this.clientTaxes | ecCurrencySymbol:'alwaysShowDecimals')\n }}</span>\n </div>\n </ng-container>\n <ng-container *ngFor=\"let item of data\">\n <div class=\"checkout-tax-info\"\n *ngIf=\"item.type === 'taxes' && item.taxesIncludedInTotal === true && !hideTaxes\">\n <span>{{ getTypeLabel(item.type, item) | translate }}</span>\n <span>{{ item.amount | ecCurrencySymbol:'alwaysShowDecimals' }}</span>\n </div>\n </ng-container>\n</div>\n",
155
159
  styles: [".resumen-price{display:inline-flex;flex-direction:column;align-items:center;gap:.15rem}.resumen-price del{color:#888;font-weight:500;text-decoration-thickness:1px}.resumen-price strong{font-weight:700}.resumen-price--free strong{color:var(--ec-success,#198754)}.checkout-tax-info{flex:0 0 100%;display:flex;justify-content:center;gap:.75rem;margin:-.5rem 0 1rem;padding-top:.75rem;border-top:1px solid #e5e7eb;color:#6b7280;font-size:.82rem;font-weight:400}.checkout-tax-info span:last-child{white-space:nowrap}"]
156
160
  })
157
161
  ], DetailCheckoutBlockEcComponent);
158
162
  return DetailCheckoutBlockEcComponent;
159
163
  }(ComponentHelper));
160
164
  export { DetailCheckoutBlockEcComponent };
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9lYy1jb21wb25lbnQvY2hlY2tvdXQtZWMvZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjL2RldGFpbC1jaGVja291dC1ibG9jay1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFJbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFPNUY7SUFBb0Qsa0RBQWU7SUFZL0Qsd0NBQW1CLGVBQWdDLEVBQVUsV0FBd0IsRUFBUyxvQkFBMEMsRUFDNUgsb0JBQWlEO1FBRDdELFlBRUksaUJBQU8sU0FFVjtRQUprQixxQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBVSxpQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFTLDBCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDNUgsMEJBQW9CLEdBQXBCLG9CQUFvQixDQUE2QjtRQVZ0RCxVQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ1gsbUJBQWEsR0FBRyxDQUFDLENBQUE7UUFDakIsaUJBQVcsR0FBRyxDQUFDLENBQUE7UUFDZiw2QkFBdUIsR0FBbUIsSUFBSSxDQUFDO1FBQy9DLG1CQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGVBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsbUJBQWEs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LEdBQ1AsQ0FBQztJQUNOLENBQUM7O2dCQTVHbUMsZUFBZTtnQkFBdUIsV0FBVztnQkFBK0Isb0JBQW9CO2dCQUN0RywyQkFBMkI7O0lBWHBEO1FBQVIsS0FBSyxFQUFFO3lFQUFjO0lBRmIsOEJBQThCO1FBTDFDLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSw4QkFBOEI7WUFDeEMsaTdIQUF3RDs7U0FFM0QsQ0FBQztPQUNXLDhCQUE4QixDQWdJMUM7SUFBRCxxQ0FBQztDQUFBLEFBaElELENBQW9ELGVBQWUsR0FnSWxFO1NBaElZLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIElucHV0LCBSZW5kZXJlcjIsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDaGVja291dERhdGEgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2NoZWNrb3V0LWRhdGEnO1xuaW1wb3J0IHsgQ2hlY2tvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvY2hlY2tvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hpcHBpbmdQcmljZURpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc2hpcHBpbmctcHJpY2UtZGlzcGxheS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kZXRhaWwtY2hlY2tvdXQtYmxvY2stZWMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRGV0YWlsQ2hlY2tvdXRCbG9ja0VjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIEBJbnB1dCgpIGFzb2NpYXRlZERhdGFcbiAgICBwdWJsaWMgZGF0YSA9IG51bGxcbiAgICBwdWJsaWMgZGlzY291bnRUb3RhbCA9IDBcbiAgICBwdWJsaWMgY291cG9uVG90YWwgPSAwXG4gICAgcHVibGljIGNyZWRpdEFjY291bnRTaG93UHJpY2VzOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGhpZGVEaXNjb3VudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNob3dUYXhMZWdlbmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgY2xpZW50VGF4ZXM6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjaGVja291dFNlcnZpY2U6IENoZWNrb3V0U2VydmljZSwgcHJpdmF0ZSBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsIHB1YmxpYyBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2hpcHBpbmdQcmljZURpc3BsYXk6IFNoaXBwaW5nUHJpY2VEaXNwbGF5U2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYXNvY2lhdGVkRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5hc29jaWF0ZWREYXRhO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhclRvdGFsZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmFzb2NpYXRlZERhdGEkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXJUb3RhbGVzKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKChzaG93UHJpY2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldENsaWVudFRheGVzKCkuc3Vic2NyaWJlKCh0YXhlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbGllbnRUYXhlcyA9IHRheGVzO1xuICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWxDb25maWdTZXJ2aWNlLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShjaGFubmVsID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGlkZURpc2NvdW50cyA9IGNoYW5uZWw/LmhpZGVEaXNjb3VudHMgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmhpZGVUYXhlcyA9IGNoYW5uZWw/LmhpZGVUYXhlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IGNoYW5uZWw/LnNob3dUYXhMZWdlbmQgPz8gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbGN1bGFyVG90YWxlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNjb3VudFRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5jb3Vwb25Ub3RhbCA9IDA7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzY291bnRUb3RhbCA9IHRoaXMuZGF0YVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLmFtb3VudCwgMCk7XG5cbiAgICAgICAgICAgIHRoaXMuY291cG9uVG90YWwgPSB0aGlzLmRhdGFcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnY291cG9uJylcbiAgICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuYW1vdW50LCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEljb24gPSAoZGF0YV9pdGVtOiBDaGVja291dERhdGEpID0+IHtcblxuICAgICAgICBzd2l0Y2ggKGRhdGFfaXRlbS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjb3Vwb24nOiByZXR1cm4gJ2ZhcyBmYS10aWNrZXQtYWx0IGZhLTJ4JztcbiAgICAgICAgICAgIGNhc2UgJ2Rpc2NvdW50JzogcmV0dXJuICdmYXMgZmEtdGFncyBmYS0yeCc7XG4gICAgICAgICAgICBjYXNlICdsaW5lRGlzY291bnQnOiByZXR1cm4gJ2ZhcyBmYS10YWdzIGZhLTJ4JztcbiAgICAgICAgICAgIGNhc2UgJ3NoaXBtZW50JzogcmV0dXJuICdmYXMgZmEtc2hpcHBpbmctZmFzdCBmYS0yeCc7XG4gICAgICAgICAgICBjYXNlICdzdWJ0b3RhbCc6IHJldHVybiAnZmFzIGZhLWJveGVzIGZhLTJ4JztcbiAgICAgICAgICAgIGNhc2UgJ3Byb2R1Y3RzQmVmb3JlRGlzY291bnRzJzogcmV0dXJuICdmYXMgZmEtYm94ZXMgZmEtMngnO1xuICAgICAgICAgICAgY2FzZSAndGF4ZXMnOiByZXR1cm4gJ2ZhcyBmYS1maWxlLWludm9pY2UtZG9sbGFyIGZhLTJ4JztcbiAgICAgICAgICAgIGNhc2UgJ3RvdGFsJzogcmV0dXJuICdmYXMgZmEtc2hvcHBpbmctYmFza2V0IGZhLTJ4JztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAnZmFzIGZhLXRhZ3MgZmEtMngnO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBnZXRJY29uMiA9IChkYXRhX3R5cGUpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhX3R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2NvdXBvbic6IHJldHVybiAnZmFzIGZhLXRpY2tldC1hbHQgZmEtMngnO1xuICAgICAgICAgICAgY2FzZSAnZGlzY291bnQnOiByZXR1cm4gJ2ZhcyBmYS10YWdzIGZhLTJ4JztcbiAgICAgICAgICAgIGNhc2UgJ2NsaWVuVGF4ZSc6IHJldHVybiAnZmFzIGZhLXBlcmNlbnQgZmEtMngnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VHlwZUxhYmVsKHR5cGU6IHN0cmluZywgaXRlbT86IENoZWNrb3V0RGF0YSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlID09PSAndGF4ZXMnKSB7XG4gICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnRheGVzSW5jbHVkZWRJblRvdGFsID09PSB0cnVlKSByZXR1cm4gJ3RheGVzLWluY2x1ZGVkLWluLXRvdGFsJztcbiAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udGF4ZXNJbmNsdWRlZEluVG90YWwgPT09IGZhbHNlKSByZXR1cm4gJ3RheGVzJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dUYXhMZWdlbmQgPyAnbmF0aW9uYWwtdGF4ZXMnIDogJ3RheGVzJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ3Byb2R1Y3RzQmVmb3JlRGlzY291bnRzJykgcmV0dXJuICdwcm9kdWN0cy1iZWZvcmUtZGlzY291bnRzJztcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgc2hvdWxkU2hvd0l0ZW0odHlwZTogc3RyaW5nLCBpdGVtPzogQ2hlY2tvdXREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlID09PSAncHJvZHVjdHNCZWZvcmVEaXNjb3VudHMnIHx8IHR5cGUgPT09ICdsaW5lRGlzY291bnQnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0eXBlID09PSAnZGlzY291bnQnIHx8IHR5cGUgPT09ICdjb3Vwb24nIHx8IHR5cGUgPT09ICdjbGllbnRUYXhlcycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICd0YXhlcycpIHJldHVybiAhdGhpcy5oaWRlVGF4ZXMgJiYgaXRlbT8udGF4ZXNJbmNsdWRlZEluVG90YWwgIT09IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNob3VsZEhpZGVTdWJ0b3RhbChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSAhPT0gJ3N1YnRvdGFsJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0b3RhbEl0ZW0gPSB0aGlzLmRhdGE/LmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdG90YWxJdGVtICYmIGl0ZW0uYW1vdW50ID09PSB0b3RhbEl0ZW0uYW1vdW50O1xuICAgIH1cblxuICAgIGdldEFtb3VudFZpZXcoaXRlbTogQ2hlY2tvdXREYXRhKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2hpcG1lbnRBbW91bnQgPSBpdGVtPy50eXBlID09PSAnc2hpcG1lbnQnID8gdGhpcy5nZXRTaGlwbWVudE9yaWdpbmFsQW1vdW50KCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5idWlsZFZpZXdNb2RlbChpdGVtPy5hbW91bnQsIG9yaWdpbmFsU2hpcG1lbnRBbW91bnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2hpcG1lbnRPcmlnaW5hbEFtb3VudCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc2hpcG1lbnREYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnc2hpcG1lbnQnIGFzIGFueSk7XG4gICAgICAgIHJldHVybiB0aGlzLnNoaXBwaW5nUHJpY2VEaXNwbGF5Lm5vcm1hbGl6ZVByaWNlVmFsdWUoXG4gICAgICAgICAgICBzaGlwbWVudERhdGE/Lm9yaWdpbmFsUHJpY2UgPz9cbiAgICAgICAgICAgIHNoaXBtZW50RGF0YT8uY29udHJhY3Q/Lm9yaWdpbmFsUHJpY2UgPz9cbiAgICAgICAgICAgIHNoaXBtZW50RGF0YT8uc2VsZWN0ZWQ/LmNvbnRyYWN0Py5vcmlnaW5hbFByaWNlID8/XG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8vIGNhc2UgJ2NvdXBvbic6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9pY29ub3NkZXRhaWxjaGVja291dC90aWNrZXQtYWx0LnN2Zyc7XG4gICAgLy8gY2FzZSAnZGlzY291bnQnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvbm9zZGV0YWlsY2hlY2tvdXQvdGFncy5zdmcnO1xuICAgIC8vIGNhc2UgJ3NoaXBtZW50JzogcmV0dXJuICdhc3NldHMvaW1hZ2VzL2ljb25vc2RldGFpbGNoZWNrb3V0L3NoaXBwaW5nLWZhc3Quc3ZnJztcbiAgICAvLyBjYXNlICdzdWJ0b3RhbCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9pY29ub3NkZXRhaWxjaGVja291dC9ib3hlcy5zdmcnO1xuICAgIC8vIGNhc2UgJ3RheGVzJzogcmV0dXJuICdhc3NldHMvaW1hZ2VzL2ljb25vc2RldGFpbGNoZWNrb3V0L2ZpbGUtaW52b2ljZS1kb2xsYXIuc3ZnJztcbiAgICAvLyBjYXNlICd0b3RhbCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9pY29ub3NkZXRhaWxjaGVja291dC9zaG9wcGluZy1iYXNrZXQuc3ZnJztcbiAgICAvLyBkZWZhdWx0OiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvbm9zZGV0YWlsY2hlY2tvdXQvc2hvcHBpbmctYmFza2V0LnN2Zyc7XG59XG4iXX0=
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9lYy1jb21wb25lbnQvY2hlY2tvdXQtZWMvZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjL2RldGFpbC1jaGVja291dC1ibG9jay1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFJbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFPNUY7SUFBb0Qsa0RBQWU7SUFZL0Qsd0NBQW1CLGVBQWdDLEVBQVUsV0FBd0IsRUFBUyxvQkFBMEMsRUFDNUgsb0JBQWlEO1FBRDdELFlBRUksaUJBQU8sU0FFVjtRQUprQixxQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBVSxpQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFTLDBCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDNUgsMEJBQW9CLEdBQXBCLG9CQUFvQixDQUE2QjtRQVZ0RCxVQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ1gsbUJBQWEsR0FBRyxDQUFDLENBQUE7UUFDakIsaUJBQVcsR0FBRyxDQUFDLENBQUE7UUFDZiw2QkFBdUIsR0FBbUIsSUFBSSxDQUFDO1FBQy9DLG1CQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGVBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsbUJBQWEs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QyxXQUFXLENBQUMsVUFBaUIsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQix5QkFDaEQsWUFBWSwwQ0FBRSxhQUFhLG1EQUMzQixZQUFZLDBDQUFFLFFBQVEsMENBQUUsYUFBYSwyREFDckMsWUFBWSwwQ0FBRSxRQUFRLDBDQUFFLFFBQVEsMENBQUUsYUFBYSx5Q0FDL0MsSUFBSSxHQUNQLENBQUM7SUFDTixDQUFDOztnQkE5R21DLGVBQWU7Z0JBQXVCLFdBQVc7Z0JBQStCLG9CQUFvQjtnQkFDdEcsMkJBQTJCOztJQVhwRDtRQUFSLEtBQUssRUFBRTt5RUFBYztJQUZiLDhCQUE4QjtRQUwxQyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsOEJBQThCO1lBQ3hDLGtxSUFBd0Q7O1NBRTNELENBQUM7T0FDVyw4QkFBOEIsQ0FrSTFDO0lBQUQscUNBQUM7Q0FBQSxBQWxJRCxDQUFvRCxlQUFlLEdBa0lsRTtTQWxJWSw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBJbnB1dCwgUmVuZGVyZXIyLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGEsIFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ2hlY2tvdXREYXRhIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9jaGVja291dC1kYXRhJztcbmltcG9ydCB7IENoZWNrb3V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NoZWNrb3V0L2NoZWNrb3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNoaXBwaW5nUHJpY2VEaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3NoaXBwaW5nLXByaWNlLWRpc3BsYXkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWRldGFpbC1jaGVja291dC1ibG9jay1lYycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RldGFpbC1jaGVja291dC1ibG9jay1lYy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERldGFpbENoZWNrb3V0QmxvY2tFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSBhc29jaWF0ZWREYXRhXG4gICAgcHVibGljIGRhdGEgPSBudWxsXG4gICAgcHVibGljIGRpc2NvdW50VG90YWwgPSAwXG4gICAgcHVibGljIGNvdXBvblRvdGFsID0gMFxuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBoaWRlRGlzY291bnRzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzaG93VGF4TGVnZW5kOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGNsaWVudFRheGVzOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2hlY2tvdXRTZXJ2aWNlOiBDaGVja291dFNlcnZpY2UsIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLCBwdWJsaWMgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNoaXBwaW5nUHJpY2VEaXNwbGF5OiBTaGlwcGluZ1ByaWNlRGlzcGxheVNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFzb2NpYXRlZERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuYXNvY2lhdGVkRGF0YTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXJUb3RhbGVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5hc29jaWF0ZWREYXRhJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGFyVG90YWxlcygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVjT25Jbml0KClcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5zaG93UHJpY2UkLnN1YnNjcmliZSgoc2hvd1ByaWNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWRpdEFjY291bnRTaG93UHJpY2VzID0gc2hvd1ByaWNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRDbGllbnRUYXhlcygpLnN1YnNjcmliZSgodGF4ZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xpZW50VGF4ZXMgPSB0YXhlcztcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhpZGVEaXNjb3VudHMgPSBjaGFubmVsPy5oaWRlRGlzY291bnRzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjaGFubmVsPy5oaWRlVGF4ZXMgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dUYXhMZWdlbmQgPSBjaGFubmVsPy5zaG93VGF4TGVnZW5kID8/IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjYWxjdWxhclRvdGFsZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzY291bnRUb3RhbCA9IDA7XG4gICAgICAgIHRoaXMuY291cG9uVG90YWwgPSAwO1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2NvdW50VG90YWwgPSB0aGlzLmRhdGFcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnZGlzY291bnQnKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5hbW91bnQsIDApO1xuXG4gICAgICAgICAgICB0aGlzLmNvdXBvblRvdGFsID0gdGhpcy5kYXRhXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2NvdXBvbicpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLmFtb3VudCwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJY29uID0gKGRhdGFfaXRlbTogQ2hlY2tvdXREYXRhKSA9PiB7XG5cbiAgICAgICAgc3dpdGNoIChkYXRhX2l0ZW0udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY291cG9uJzogcmV0dXJuICdmYXMgZmEtdGlja2V0LWFsdCBmYS0yeCc7XG4gICAgICAgICAgICBjYXNlICdkaXNjb3VudCc6IHJldHVybiAnZmFzIGZhLXRhZ3MgZmEtMngnO1xuICAgICAgICAgICAgY2FzZSAnbGluZURpc2NvdW50JzogcmV0dXJuICdmYXMgZmEtdGFncyBmYS0yeCc7XG4gICAgICAgICAgICBjYXNlICdzaGlwbWVudCc6IHJldHVybiAnZmFzIGZhLXNoaXBwaW5nLWZhc3QgZmEtMngnO1xuICAgICAgICAgICAgY2FzZSAnc3VidG90YWwnOiByZXR1cm4gJ2ZhcyBmYS1ib3hlcyBmYS0yeCc7XG4gICAgICAgICAgICBjYXNlICdwcm9kdWN0c0JlZm9yZURpc2NvdW50cyc6IHJldHVybiAnZmFzIGZhLWJveGVzIGZhLTJ4JztcbiAgICAgICAgICAgIGNhc2UgJ3RheGVzJzogcmV0dXJuICdmYXMgZmEtZmlsZS1pbnZvaWNlLWRvbGxhciBmYS0yeCc7XG4gICAgICAgICAgICBjYXNlICdwYXltZW50TWV0aG9kQWRqdXN0bWVudCc6IHJldHVybiAnZmFzIGZhLWNyZWRpdC1jYXJkIGZhLTJ4JztcbiAgICAgICAgICAgIGNhc2UgJ3RvdGFsJzogcmV0dXJuICdmYXMgZmEtc2hvcHBpbmctYmFza2V0IGZhLTJ4JztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAnZmFzIGZhLXRhZ3MgZmEtMngnO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBnZXRJY29uMiA9IChkYXRhX3R5cGUpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhX3R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2NvdXBvbic6IHJldHVybiAnZmFzIGZhLXRpY2tldC1hbHQgZmEtMngnO1xuICAgICAgICAgICAgY2FzZSAnZGlzY291bnQnOiByZXR1cm4gJ2ZhcyBmYS10YWdzIGZhLTJ4JztcbiAgICAgICAgICAgIGNhc2UgJ2NsaWVuVGF4ZSc6IHJldHVybiAnZmFzIGZhLXBlcmNlbnQgZmEtMngnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VHlwZUxhYmVsKHR5cGU6IHN0cmluZywgaXRlbT86IENoZWNrb3V0RGF0YSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlID09PSAndGF4ZXMnKSB7XG4gICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnRheGVzSW5jbHVkZWRJblRvdGFsID09PSB0cnVlKSByZXR1cm4gJ3RheGVzLWluY2x1ZGVkLWluLXRvdGFsJztcbiAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udGF4ZXNJbmNsdWRlZEluVG90YWwgPT09IGZhbHNlKSByZXR1cm4gJ3RheGVzJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dUYXhMZWdlbmQgPyAnbmF0aW9uYWwtdGF4ZXMnIDogJ3RheGVzJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ3Byb2R1Y3RzQmVmb3JlRGlzY291bnRzJykgcmV0dXJuICdwcm9kdWN0cy1iZWZvcmUtZGlzY291bnRzJztcbiAgICAgICAgaWYgKHR5cGUgPT09ICdwYXltZW50TWV0aG9kQWRqdXN0bWVudCcpIHJldHVybiAoaXRlbT8uYW1vdW50ID8/IDApIDwgMCA/ICdwYXltZW50LW1ldGhvZC1kaXNjb3VudCcgOiAncGF5bWVudC1tZXRob2Qtc3VyY2hhcmdlJztcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgc2hvdWxkU2hvd0l0ZW0odHlwZTogc3RyaW5nLCBpdGVtPzogQ2hlY2tvdXREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlID09PSAncHJvZHVjdHNCZWZvcmVEaXNjb3VudHMnIHx8IHR5cGUgPT09ICdsaW5lRGlzY291bnQnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0eXBlID09PSAnZGlzY291bnQnIHx8IHR5cGUgPT09ICdjb3Vwb24nIHx8IHR5cGUgPT09ICdjbGllbnRUYXhlcycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICd0YXhlcycpIHJldHVybiAhdGhpcy5oaWRlVGF4ZXMgJiYgaXRlbT8udGF4ZXNJbmNsdWRlZEluVG90YWwgIT09IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNob3VsZEhpZGVTdWJ0b3RhbChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSAhPT0gJ3N1YnRvdGFsJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0b3RhbEl0ZW0gPSB0aGlzLmRhdGE/LmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdG90YWxJdGVtICYmIGl0ZW0uYW1vdW50ID09PSB0b3RhbEl0ZW0uYW1vdW50O1xuICAgIH1cblxuICAgIGdldEFtb3VudFZpZXcoaXRlbTogQ2hlY2tvdXREYXRhKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2hpcG1lbnRBbW91bnQgPSBpdGVtPy50eXBlID09PSAnc2hpcG1lbnQnID8gdGhpcy5nZXRTaGlwbWVudE9yaWdpbmFsQW1vdW50KCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5idWlsZFZpZXdNb2RlbChpdGVtPy5hbW91bnQsIG9yaWdpbmFsU2hpcG1lbnRBbW91bnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2hpcG1lbnRPcmlnaW5hbEFtb3VudCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc2hpcG1lbnREYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnc2hpcG1lbnQnIGFzIGFueSk7XG4gICAgICAgIHJldHVybiB0aGlzLnNoaXBwaW5nUHJpY2VEaXNwbGF5Lm5vcm1hbGl6ZVByaWNlVmFsdWUoXG4gICAgICAgICAgICBzaGlwbWVudERhdGE/Lm9yaWdpbmFsUHJpY2UgPz9cbiAgICAgICAgICAgIHNoaXBtZW50RGF0YT8uY29udHJhY3Q/Lm9yaWdpbmFsUHJpY2UgPz9cbiAgICAgICAgICAgIHNoaXBtZW50RGF0YT8uc2VsZWN0ZWQ/LmNvbnRyYWN0Py5vcmlnaW5hbFByaWNlID8/XG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8vIGNhc2UgJ2NvdXBvbic6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9pY29ub3NkZXRhaWxjaGVja291dC90aWNrZXQtYWx0LnN2Zyc7XG4gICAgLy8gY2FzZSAnZGlzY291bnQnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvbm9zZGV0YWlsY2hlY2tvdXQvdGFncy5zdmcnO1xuICAgIC8vIGNhc2UgJ3NoaXBtZW50JzogcmV0dXJuICdhc3NldHMvaW1hZ2VzL2ljb25vc2RldGFpbGNoZWNrb3V0L3NoaXBwaW5nLWZhc3Quc3ZnJztcbiAgICAvLyBjYXNlICdzdWJ0b3RhbCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9pY29ub3NkZXRhaWxjaGVja291dC9ib3hlcy5zdmcnO1xuICAgIC8vIGNhc2UgJ3RheGVzJzogcmV0dXJuICdhc3NldHMvaW1hZ2VzL2ljb25vc2RldGFpbGNoZWNrb3V0L2ZpbGUtaW52b2ljZS1kb2xsYXIuc3ZnJztcbiAgICAvLyBjYXNlICd0b3RhbCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9pY29ub3NkZXRhaWxjaGVja291dC9zaG9wcGluZy1iYXNrZXQuc3ZnJztcbiAgICAvLyBkZWZhdWx0OiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvbm9zZGV0YWlsY2hlY2tvdXQvc2hvcHBpbmctYmFza2V0LnN2Zyc7XG59XG4iXX0=
@@ -183,9 +183,9 @@ var PaymentEcComponent = /** @class */ (function (_super) {
183
183
  };
184
184
  _this.setMethod = function (method) { return __awaiter(_this, void 0, void 0, function () {
185
185
  var result, balanceCustomer, totals, isBalanceMethod, allowAny;
186
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
187
- return __generator(this, function (_k) {
188
- switch (_k.label) {
186
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
187
+ return __generator(this, function (_l) {
188
+ switch (_l.label) {
189
189
  case 0:
190
190
  if (this.compactPaymentView && this.selectedMethodCode === ((_a = method) === null || _a === void 0 ? void 0 : _a.code) && !this.loading_internal) {
191
191
  return [2 /*return*/];
@@ -204,23 +204,26 @@ var PaymentEcComponent = /** @class */ (function (_super) {
204
204
  this.evaluateDirtyForSelection(((_d = method) === null || _d === void 0 ? void 0 : _d.code) || null);
205
205
  this.methodDataSubject.next(null);
206
206
  this.showMethodError = false;
207
- _k.label = 1;
207
+ _l.label = 1;
208
208
  case 1:
209
- _k.trys.push([1, , 3, 4]);
209
+ _l.trys.push([1, , 3, 4]);
210
210
  return [4 /*yield*/, this.paymentService.putPayment(method.code)];
211
211
  case 2:
212
- result = _k.sent();
213
- balanceCustomer = (_e = result) === null || _e === void 0 ? void 0 : _e.balanceCustomer;
214
- totals = (_f = result) === null || _f === void 0 ? void 0 : _f.totals;
215
- this.cartService.updateBalanceAttributes(balanceCustomer, (_g = totals) === null || _g === void 0 ? void 0 : _g.total);
212
+ result = _l.sent();
213
+ if ((_e = result) === null || _e === void 0 ? void 0 : _e.totals) {
214
+ this.cartService.updateCartAfterPaymentResponse(result);
215
+ }
216
+ balanceCustomer = (_f = result) === null || _f === void 0 ? void 0 : _f.balanceCustomer;
217
+ totals = (_g = result) === null || _g === void 0 ? void 0 : _g.totals;
218
+ this.cartService.updateBalanceAttributes(balanceCustomer, (_h = totals) === null || _h === void 0 ? void 0 : _h.total);
216
219
  isBalanceMethod = this.isBalanceInAccount(method.code);
217
- allowAny = (_h = balanceCustomer) === null || _h === void 0 ? void 0 : _h.allowAnyPaymentMethod;
220
+ allowAny = (_j = balanceCustomer) === null || _j === void 0 ? void 0 : _j.allowAnyPaymentMethod;
218
221
  // Validaciones de error
219
222
  if ((balanceCustomer && allowAny === false && !isBalanceMethod) || // no permite otro método
220
223
  (isBalanceMethod && !balanceCustomer) // seleccionó cuenta corriente pero no hay balance
221
224
  ) {
222
225
  this.handleMethodError('this-payment-method-cannot-be-used', method);
223
- if (this.compactPaymentView && ((_j = method) === null || _j === void 0 ? void 0 : _j.code)) {
226
+ if (this.compactPaymentView && ((_k = method) === null || _k === void 0 ? void 0 : _k.code)) {
224
227
  }
225
228
  return [2 /*return*/];
226
229
  }
@@ -246,6 +249,18 @@ var PaymentEcComponent = /** @class */ (function (_super) {
246
249
  }
247
250
  });
248
251
  }); };
252
+ _this.getPaymentMethodAdjustmentPreview = function (method) {
253
+ var _a, _b;
254
+ var rawValue = (_a = method) === null || _a === void 0 ? void 0 : _a.chargeValue;
255
+ if (rawValue === null || rawValue === undefined || Number(rawValue) === 0)
256
+ return null;
257
+ var value = Number(rawValue);
258
+ var type = (_b = method) === null || _b === void 0 ? void 0 : _b.chargeType;
259
+ if (!Number.isFinite(value) || (type !== 'percentage' && type !== 'fixed'))
260
+ return null;
261
+ return { type: type, value: value };
262
+ };
263
+ _this.getPaymentMethodAdjustmentPreviewSign = function (value) { return value > 0 ? '+' : ''; };
249
264
  _this.setDirtyState = function (nextDirty) {
250
265
  if (_this.isDirty === nextDirty)
251
266
  return;
@@ -479,12 +494,12 @@ var PaymentEcComponent = /** @class */ (function (_super) {
479
494
  PaymentEcComponent = __decorate([
480
495
  Component({
481
496
  selector: 'app-payment-ec',
482
- template: "<div *ngIf=\"(paymentService.methods$ | async) as methods\"\n [ngClass]=\"compactPaymentView ? '' : 'container-fluid'\">\n <ng-container *ngIf=\"compactPaymentView; else legacyPayment\">\n <app-payment-ec-single\n [loadingInternal]=\"loading_internal\"\n [loadingInternalMp]=\"loading_internal_mp\"\n [paymentLocked]=\"paymentLocked\"\n [validatingMethodCode]=\"validatingMethodCode\"\n [selectedMethodCode]=\"selectedMethodCode\"\n [currentMethod]=\"currentMethod\"\n [showMethodError]=\"showMethodError\"\n [balanceMethodRejected]=\"balanceMethodRejected\"\n [methods]=\"methods\"\n [totalAmount]=\"total_amount\"\n [isMethodDisabled]=\"isPaymentMethodDisabled\"\n [isMP]=\"isMP.bind(this)\"\n [isMPTarjetaDeCredito]=\"isMPTarjetaDeCredito.bind(this)\"\n [isRedirectRedsys]=\"isRedirectRedsys.bind(this)\"\n [isRedirectCecaBank]=\"isRedirectCecaBank.bind(this)\"\n [isPeyPalExpress]=\"isPeyPalExpress.bind(this)\"\n [isMobbex]=\"isMobbex.bind(this)\"\n [isBancard]=\"isBancard.bind(this)\"\n [isDecidir]=\"isDecidir.bind(this)\"\n [isMethodOffline]=\"isMethodOffline.bind(this)\"\n [isCulqi]=\"isCulqi.bind(this)\"\n [isCatastro]=\"isCatastro.bind(this)\"\n [isBamboo]=\"isBamboo.bind(this)\"\n [isBankTransfer]=\"isBankTransfer.bind(this)\"\n [isPlaceToPay]=\"isPlaceToPay.bind(this)\"\n [isBalanceInAccount]=\"isBalanceInAccount.bind(this)\"\n [getPK]=\"getPK.bind(this)\"\n [getPKCulqi]=\"getPKCulqi.bind(this)\"\n [getImageUrl]=\"getPaymentImageUrl.bind(this)\"\n [allData]=\"allData.bind(this)\"\n [paymentServiceInst]=\"paymentService\"\n (selectMethod)=\"setMethod($event)\"\n (verifyValidate)=\"verifyValidate($event)\"\n (setLoading)=\"setLoading()\">\n </app-payment-ec-single>\n </ng-container>\n <ng-template #legacyPayment>\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"card \">\n <div class=\"card-header text-dark text-center\">\n <h4>{{ 'select-method' | translate }}</h4>\n <div class=\"btn-toolbar justify-content-center\" role=\"toolbar\" aria-label=\"Envios toolbar\">\n <div class=\"\" role=\"group\" aria-label=\"Grupo botones envio\">\n <div class=\"d-flex align-content-start justify-content-center flex-wrap\">\n <button type=\"button\" class=\"btn btn-outline-secondary mx-1 mb-1\"\n *ngFor=\"let method of methods; let x = index\"\n (click)=\"setMethod(method) ; setActive($event)\">\n {{ method.name | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-body text-center\">\n <div class=\"row justify-content-center\" *ngIf=\"(method_data$ | async) as method\">\n <ng-container *ngIf=\"!loading_internal ; else loading\">\n <!-- cuenta corriente tiene una configuari\u00F3n de permitir o no otros metodos de pago -->\n <ng-container *ngIf=\"method && !showMethodError\">\n <div class=\"method-container text-dark\" *ngIf=\"isMP(method.code)\">\n <p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\n <p class=\"px-5\">{{ method.instructions }}</p>\n <app-mp-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [paymentServiceInst]=\"paymentService\"\n [allData]=\"allData()\"></app-mp-redirect-ec>\n </div>\n <div class=\"method-container text-dark text-left\"\n *ngIf=\"isMPTarjetaDeCredito(method.code)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\n <p class=\"px-5\">{{ method.instructions }}</p>\n <div app-mp-credit-ec (ready)=\"verifyValidate()\"\n [public_key]=\"getPK(method)\" [user_data]=\"allData()\"\n [total_amount]=\"total_amount\">\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\"\n *ngIf=\"isRedirectRedsys(method.code)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container\n *ngIf=\"!method.code.includes('bizum') && !method.code.includes('_out_')\">\n <app-redsys-redirect-ec (ready)=\"verifyValidate($event)\"\n [method]=\"method\" [user_data]=\"allData()\">\n </app-redsys-redirect-ec>\n </ng-container>\n <ng-container\n *ngIf=\"method.code.includes('bizum') || method.code.includes('_out_')\">\n <app-redsys-redirect-out-ec (ready)=\"verifyValidate($event)\"\n [method]=\"method\" [user_data]=\"allData()\">\n </app-redsys-redirect-out-ec>\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\"\n *ngIf=\"isRedirectCecaBank(method.code)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <app-ceca-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [user_data]=\"allData()\">\n </app-ceca-redirect-ec>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isPeyPalExpress(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-paypal-express-ec (ready)=\"verifyValidate($event)\"\n [method]=\"method\" [user_data]=\"allData()\"\n [total_amount]=\"total_amount\">\n </app-paypal-express-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isMobbex(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-mobbex-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\">\n </app-mobbex-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isBancard(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-bancard-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\">\n </app-bancard-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isDecidir(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-decidir-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\">\n </app-decidir-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark\" *ngIf=\"isMethodOffline(method.code)\">\n <p id=\"faqs\" class=\"qt px-5\">{{ method.description }}</p>\n <p class=\"px-5\">{{ method.instructions }}</p>\n <div class=\"end-button\">\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">{{\n ('pay-with-offline'| translate) }}</button>\n </div>\n <ng-container *ngIf=\"(loading$ | async) as load\">\n <div class=\"mt-2\" *ngIf=\"load\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </div>\n </ng-container>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isCulqi(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <!-- <app-mobbex-ec (ready)=\"verifyValidate($event)\" [method]=\"method\" [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\">\n </app-mobbex-ec> -->\n <app-culqi-ec [apiKey]=\"getPKCulqi(method)\" [method]=\"method\"\n [amount]=\"total_amount\" [customStyle]=\"true\"\n (ready)=\"verifyValidate()\"></app-culqi-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isCatastro(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-bancard-catastro-ec (ready)=\"verifyValidate($event)\"\n [method]=\"method\" [user_data]=\"allData()\"\n [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\"></app-bancard-catastro-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isBamboo(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-bamboo-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\"></app-bamboo-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark\" *ngIf=\"isBankTransfer(method.code)\">\n <div class=\"row px-0 description-cont\">\n <ng-container\n *ngFor=\"let line of method.description.split('\\r\\n'); let i=index\">\n <p [id]=\"'faqs-'+i\" [class]=\"'qt px-5 m-0 line-'+i\">{{ line }}</p>\n </ng-container>\n </div>\n <hr *ngIf=\"method.instructions\">\n <div *ngIf=\"method.instructions\" class=\"row px-0 instructions-cont mb-1\">\n <h5 class=\"instructions-title\">{{ ('instructions' | translate) }}</h5>\n <ng-container\n *ngFor=\"let line of method.instructions.split('\\r\\n'); let i=index\">\n <p [class]=\"'px-5 m-0 instructions-text line-'+i \">{{ line }}</p>\n </ng-container>\n </div>\n\n <div class=\"end-button\">\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">{{\n ('pay-with-transfer'\n | translate) }}</button>\n </div>\n <ng-container *ngIf=\"(loading$ | async) as load\">\n <div class=\"mt-2\" *ngIf=\"load\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </div>\n </ng-container>\n </div>\n <div class=\"method-container text-dark\" *ngIf=\"isPlaceToPay(method.code)\">\n <p id=\"faqs\" *ngIf=\"method.description\" class=\"qt px-5 \">{{ method.description }}\n </p>\n <p class=\"px-5\" *ngIf=\"method.instructions\">{{ method.instructions }}</p>\n <app-place-to-pay-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [paymentServiceInst]=\"paymentService\" [allData]=\"allData()\">\n </app-place-to-pay-ec>\n </div>\n </ng-container>\n <ng-container *ngIf=\"showMethodError\">\n <div class=\"text-danger mt-2 px-3 fw-bold\">\n {{ 'this-payment-method-cannot-be-used' | translate }}\n </div>\n </ng-container>\n <div class=\"method-container text-dark\"\n *ngIf=\"isBalanceInAccount(method.code) && !showMethodError\">\n <div class=\"row px-0 description-cont\" *ngIf=\"method.description\">\n <ng-container *ngFor=\"let line of method.description.split('\\r\\n'); let i = index\">\n <p [id]=\"'cc-desc-'+i\" [class]=\"'qt px-5 m-0 line-'+i\">{{ line }}</p>\n </ng-container>\n </div>\n\n <hr *ngIf=\"method.instructions\">\n\n <div *ngIf=\"method.instructions\" class=\"row px-0 instructions-cont mb-1\">\n <h5 class=\"instructions-title\">{{ ('instructions' | translate) }}</h5>\n <ng-container *ngFor=\"let line of method.instructions.split('\\r\\n'); let i = index\">\n <p [class]=\"'px-5 m-0 instructions-text line-'+i \">{{ line }}</p>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"!balanceMethodRejected; else showCreditError\">\n <div class=\"end-button\">\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">\n {{ 'pay-with' | translate }} {{ method.name }}\n </button>\n </div>\n </ng-container>\n\n <ng-template #showCreditError>\n <div class=\"text-danger mt-2 px-3 fw-bold\">\n {{ 'not-enough-credits-to-complete' | translate }}\n </div>\n </ng-template>\n\n <ng-container *ngIf=\"(loading$ | async) as load\">\n <div class=\"mt-2\" *ngIf=\"load\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n</div>\n\n<ng-template #mercadoPago>\n <div class=\"row \">\n <div class=\"col-12 text-center\">\n <app-loading-inline-ec *ngIf=\"loading_internal_mp\"></app-loading-inline-ec>\n <form action=\"javascript:void(0)\" #formContainer></form>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <ng-container *ngIf=\"!compactPaymentView\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </ng-container>\n</ng-template>\n",
497
+ template: "<div *ngIf=\"(paymentService.methods$ | async) as methods\"\n [ngClass]=\"compactPaymentView ? '' : 'container-fluid'\">\n <ng-container *ngIf=\"compactPaymentView; else legacyPayment\">\n <app-payment-ec-single\n [loadingInternal]=\"loading_internal\"\n [loadingInternalMp]=\"loading_internal_mp\"\n [paymentLocked]=\"paymentLocked\"\n [validatingMethodCode]=\"validatingMethodCode\"\n [selectedMethodCode]=\"selectedMethodCode\"\n [currentMethod]=\"currentMethod\"\n [showMethodError]=\"showMethodError\"\n [balanceMethodRejected]=\"balanceMethodRejected\"\n [methods]=\"methods\"\n [totalAmount]=\"total_amount\"\n [getPaymentMethodAdjustmentPreview]=\"getPaymentMethodAdjustmentPreview\"\n [getPaymentMethodAdjustmentPreviewSign]=\"getPaymentMethodAdjustmentPreviewSign\"\n [isMethodDisabled]=\"isPaymentMethodDisabled\"\n [isMP]=\"isMP.bind(this)\"\n [isMPTarjetaDeCredito]=\"isMPTarjetaDeCredito.bind(this)\"\n [isRedirectRedsys]=\"isRedirectRedsys.bind(this)\"\n [isRedirectCecaBank]=\"isRedirectCecaBank.bind(this)\"\n [isPeyPalExpress]=\"isPeyPalExpress.bind(this)\"\n [isMobbex]=\"isMobbex.bind(this)\"\n [isBancard]=\"isBancard.bind(this)\"\n [isDecidir]=\"isDecidir.bind(this)\"\n [isMethodOffline]=\"isMethodOffline.bind(this)\"\n [isCulqi]=\"isCulqi.bind(this)\"\n [isCatastro]=\"isCatastro.bind(this)\"\n [isBamboo]=\"isBamboo.bind(this)\"\n [isBankTransfer]=\"isBankTransfer.bind(this)\"\n [isPlaceToPay]=\"isPlaceToPay.bind(this)\"\n [isBalanceInAccount]=\"isBalanceInAccount.bind(this)\"\n [getPK]=\"getPK.bind(this)\"\n [getPKCulqi]=\"getPKCulqi.bind(this)\"\n [getImageUrl]=\"getPaymentImageUrl.bind(this)\"\n [allData]=\"allData.bind(this)\"\n [paymentServiceInst]=\"paymentService\"\n (selectMethod)=\"setMethod($event)\"\n (verifyValidate)=\"verifyValidate($event)\"\n (setLoading)=\"setLoading()\">\n </app-payment-ec-single>\n </ng-container>\n <ng-template #legacyPayment>\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"card \">\n <div class=\"card-header text-dark text-center\">\n <h4>{{ 'select-method' | translate }}</h4>\n <div class=\"btn-toolbar justify-content-center\" role=\"toolbar\" aria-label=\"Envios toolbar\">\n <div class=\"\" role=\"group\" aria-label=\"Grupo botones envio\">\n <div class=\"d-flex align-content-start justify-content-center flex-wrap\">\n <button type=\"button\" class=\"btn btn-outline-secondary mx-1 mb-1\"\n *ngFor=\"let method of methods; let x = index\"\n (click)=\"setMethod(method) ; setActive($event)\">\n {{ method.name | translate }}\n <ng-container *ngIf=\"getPaymentMethodAdjustmentPreview(method) as adjustmentPreview\">\n <small class=\"payment-option-adjustment\">\n <ng-container *ngIf=\"adjustmentPreview.type === 'percentage'; else legacyFixedAdjustment\">\n {{ getPaymentMethodAdjustmentPreviewSign(adjustmentPreview.value) }}{{ adjustmentPreview.value }}%\n </ng-container>\n <ng-template #legacyFixedAdjustment>\n {{ getPaymentMethodAdjustmentPreviewSign(adjustmentPreview.value) }}{{ adjustmentPreview.value | ecCurrencySymbol:'alwaysShowDecimals' }}\n </ng-template>\n </small>\n </ng-container>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-body text-center\">\n <div class=\"row justify-content-center\" *ngIf=\"(method_data$ | async) as method\">\n <ng-container *ngIf=\"!loading_internal ; else loading\">\n <!-- cuenta corriente tiene una configuari\u00F3n de permitir o no otros metodos de pago -->\n <ng-container *ngIf=\"method && !showMethodError\">\n <div class=\"method-container text-dark\" *ngIf=\"isMP(method.code)\">\n <p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\n <p class=\"px-5\">{{ method.instructions }}</p>\n <app-mp-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [paymentServiceInst]=\"paymentService\"\n [allData]=\"allData()\"></app-mp-redirect-ec>\n </div>\n <div class=\"method-container text-dark text-left\"\n *ngIf=\"isMPTarjetaDeCredito(method.code)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\n <p class=\"px-5\">{{ method.instructions }}</p>\n <div app-mp-credit-ec (ready)=\"verifyValidate()\"\n [public_key]=\"getPK(method)\" [user_data]=\"allData()\"\n [total_amount]=\"total_amount\">\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\"\n *ngIf=\"isRedirectRedsys(method.code)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container\n *ngIf=\"!method.code.includes('bizum') && !method.code.includes('_out_')\">\n <app-redsys-redirect-ec (ready)=\"verifyValidate($event)\"\n [method]=\"method\" [user_data]=\"allData()\">\n </app-redsys-redirect-ec>\n </ng-container>\n <ng-container\n *ngIf=\"method.code.includes('bizum') || method.code.includes('_out_')\">\n <app-redsys-redirect-out-ec (ready)=\"verifyValidate($event)\"\n [method]=\"method\" [user_data]=\"allData()\">\n </app-redsys-redirect-out-ec>\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\"\n *ngIf=\"isRedirectCecaBank(method.code)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <app-ceca-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [user_data]=\"allData()\">\n </app-ceca-redirect-ec>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isPeyPalExpress(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-paypal-express-ec (ready)=\"verifyValidate($event)\"\n [method]=\"method\" [user_data]=\"allData()\"\n [total_amount]=\"total_amount\">\n </app-paypal-express-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isMobbex(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-mobbex-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\">\n </app-mobbex-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isBancard(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-bancard-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\">\n </app-bancard-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isDecidir(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-decidir-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\">\n </app-decidir-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark\" *ngIf=\"isMethodOffline(method.code)\">\n <p id=\"faqs\" class=\"qt px-5\">{{ method.description }}</p>\n <p class=\"px-5\">{{ method.instructions }}</p>\n <div class=\"end-button\">\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">{{\n ('pay-with-offline'| translate) }}</button>\n </div>\n <ng-container *ngIf=\"(loading$ | async) as load\">\n <div class=\"mt-2\" *ngIf=\"load\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </div>\n </ng-container>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isCulqi(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <!-- <app-mobbex-ec (ready)=\"verifyValidate($event)\" [method]=\"method\" [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\">\n </app-mobbex-ec> -->\n <app-culqi-ec [apiKey]=\"getPKCulqi(method)\" [method]=\"method\"\n [amount]=\"total_amount\" [customStyle]=\"true\"\n (ready)=\"verifyValidate()\"></app-culqi-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isCatastro(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-bancard-catastro-ec (ready)=\"verifyValidate($event)\"\n [method]=\"method\" [user_data]=\"allData()\"\n [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\"></app-bancard-catastro-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark text-start\" *ngIf=\"isBamboo(method.code)\">\n <div class=\"container\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12\">\n <app-bamboo-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n [total_amount]=\"total_amount\"></app-bamboo-ec>\n </div>\n </div>\n </div>\n </div>\n <div class=\"method-container text-dark\" *ngIf=\"isBankTransfer(method.code)\">\n <div class=\"row px-0 description-cont\">\n <ng-container\n *ngFor=\"let line of method.description.split('\\r\\n'); let i=index\">\n <p [id]=\"'faqs-'+i\" [class]=\"'qt px-5 m-0 line-'+i\">{{ line }}</p>\n </ng-container>\n </div>\n <hr *ngIf=\"method.instructions\">\n <div *ngIf=\"method.instructions\" class=\"row px-0 instructions-cont mb-1\">\n <h5 class=\"instructions-title\">{{ ('instructions' | translate) }}</h5>\n <ng-container\n *ngFor=\"let line of method.instructions.split('\\r\\n'); let i=index\">\n <p [class]=\"'px-5 m-0 instructions-text line-'+i \">{{ line }}</p>\n </ng-container>\n </div>\n\n <div class=\"end-button\">\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">{{\n ('pay-with-transfer'\n | translate) }}</button>\n </div>\n <ng-container *ngIf=\"(loading$ | async) as load\">\n <div class=\"mt-2\" *ngIf=\"load\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </div>\n </ng-container>\n </div>\n <div class=\"method-container text-dark\" *ngIf=\"isPlaceToPay(method.code)\">\n <p id=\"faqs\" *ngIf=\"method.description\" class=\"qt px-5 \">{{ method.description }}\n </p>\n <p class=\"px-5\" *ngIf=\"method.instructions\">{{ method.instructions }}</p>\n <app-place-to-pay-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n [paymentServiceInst]=\"paymentService\" [allData]=\"allData()\">\n </app-place-to-pay-ec>\n </div>\n </ng-container>\n <ng-container *ngIf=\"showMethodError\">\n <div class=\"text-danger mt-2 px-3 fw-bold\">\n {{ 'this-payment-method-cannot-be-used' | translate }}\n </div>\n </ng-container>\n <div class=\"method-container text-dark\"\n *ngIf=\"isBalanceInAccount(method.code) && !showMethodError\">\n <div class=\"row px-0 description-cont\" *ngIf=\"method.description\">\n <ng-container *ngFor=\"let line of method.description.split('\\r\\n'); let i = index\">\n <p [id]=\"'cc-desc-'+i\" [class]=\"'qt px-5 m-0 line-'+i\">{{ line }}</p>\n </ng-container>\n </div>\n\n <hr *ngIf=\"method.instructions\">\n\n <div *ngIf=\"method.instructions\" class=\"row px-0 instructions-cont mb-1\">\n <h5 class=\"instructions-title\">{{ ('instructions' | translate) }}</h5>\n <ng-container *ngFor=\"let line of method.instructions.split('\\r\\n'); let i = index\">\n <p [class]=\"'px-5 m-0 instructions-text line-'+i \">{{ line }}</p>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"!balanceMethodRejected; else showCreditError\">\n <div class=\"end-button\">\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">\n {{ 'pay-with' | translate }} {{ method.name }}\n </button>\n </div>\n </ng-container>\n\n <ng-template #showCreditError>\n <div class=\"text-danger mt-2 px-3 fw-bold\">\n {{ 'not-enough-credits-to-complete' | translate }}\n </div>\n </ng-template>\n\n <ng-container *ngIf=\"(loading$ | async) as load\">\n <div class=\"mt-2\" *ngIf=\"load\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n</div>\n\n<ng-template #mercadoPago>\n <div class=\"row \">\n <div class=\"col-12 text-center\">\n <app-loading-inline-ec *ngIf=\"loading_internal_mp\"></app-loading-inline-ec>\n <form action=\"javascript:void(0)\" #formContainer></form>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <ng-container *ngIf=\"!compactPaymentView\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </ng-container>\n</ng-template>\n",
483
498
  providers: [PaymentService],
484
- styles: ["div.col-12 form{text-align:center}.option-container>div{margin-bottom:15px}@media only screen and (min-width:600px){.option-container{display:flex;justify-content:space-between;margin-top:20px}}.method-container{width:100%}.active{background-color:#000!important;color:#fff!important}.comprar{background:#000;color:#fff;display:inline-block;font-size:18px;font-weight:600;padding:10px 25px;text-decoration:none;text-transform:uppercase}"]
499
+ styles: ["div.col-12 form{text-align:center}.option-container>div{margin-bottom:15px}@media only screen and (min-width:600px){.option-container{display:flex;justify-content:space-between;margin-top:20px}}.method-container{width:100%}.active{background-color:#000!important;color:#fff!important}.comprar{background:#000;color:#fff;display:inline-block;font-size:18px;font-weight:600;padding:10px 25px;text-decoration:none;text-transform:uppercase}.payment-option-adjustment{color:#dc3545;font-weight:700;white-space:nowrap}"]
485
500
  })
486
501
  ], PaymentEcComponent);
487
502
  return PaymentEcComponent;
488
503
  }(ComponentHelper));
489
504
  export { PaymentEcComponent };
490
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NoZWNrb3V0LWVjL3BheW1lbnQtZWMvcGF5bWVudC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQWlCLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBU2pEO0lBQXdDLHNDQUFlO0lBcUNuRCw0QkFBc0IsUUFBbUIsRUFBWSxNQUFvQixFQUM5RCxjQUE4QixFQUFTLGVBQWdDLEVBQ3RFLFdBQXdCLEVBQVUsTUFBaUIsRUFBVSxNQUFjO1FBRnZGLFlBR0ksaUJBQU8sU0FFVjtRQUxxQixjQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVksWUFBTSxHQUFOLE1BQU0sQ0FB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LFNBQVM7Z0JBQWtCLE1BQU07O0lBckM5RTtRQUFSLEtBQUssRUFBRTt1REFBUztJQUNSO1FBQVIsS0FBSyxFQUFFO2tFQUFxQztJQUNuQztRQUFULE1BQU0sRUFBRTsyREFBMkM7SUFDeEI7UUFBM0IsU0FBUyxDQUFDLGVBQWUsQ0FBQztrRUFBMEM7SUFMNUQsa0JBQWtCO1FBUDlCLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsZ3JyQkFBd0M7WUFFeEMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDOztTQUU5QixDQUFDO09BQ1csa0JBQWtCLENBNFg5QjtJQUFELHlCQUFDO0NBQUEsQUE1WEQsQ0FBd0MsZUFBZSxHQTRYdEQ7U0E1WFksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBDaGVja291dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS5jb25zdHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1wYXltZW50LWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3BheW1lbnQtZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydwYXltZW50LWVjLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbUGF5bWVudFNlcnZpY2VdXG5cbn0pXG5leHBvcnQgY2xhc3MgUGF5bWVudEVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuXG4gICAgQElucHV0KCkgc3RlcF9pZDtcbiAgICBASW5wdXQoKSBjb21wYWN0UGF5bWVudFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBAT3V0cHV0KCkgZGlydHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQFZpZXdDaGlsZCgnZm9ybUNvbnRhaW5lcicpIHByb3RlY3RlZCBtZXJjYWRvcGFnb19idXR0b246IEVsZW1lbnRSZWY7XG4gICAgcHJvdGVjdGVkIG1ldGhvZERhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICAgIHByaXZhdGUgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcm90ZWN0ZWQgcHJlZmVyZW5jZTtcblxuXG4gICAgcHVibGljIGxvYWRpbmdfaW50ZXJuYWwgPSBmYWxzZTtcbiAgICBwdWJsaWMgb3JkZXJfaWQ7XG4gICAgcHVibGljIGVycm9yO1xuICAgIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcbiAgICBwdWJsaWMgbG9hZGluZ19pbnRlcm5hbF9tcCA9IGZhbHNlO1xuICAgIHB1YmxpYyBtZXRob2RfZGF0YSQgPSB0aGlzLm1ldGhvZERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIHRvdGFsX2Ftb3VudDtcbiAgICBwdWJsaWMgYWxsb3dBbnlQYXltZW50TWV0aG9kOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGJhbGFuY2VNZXRob2RSZWplY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzaG93TWV0aG9kRXJyb3IgPSBmYWxzZTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRNZXRob2RDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgY3VycmVudE1ldGhvZDogYW55ID0gbnVsbDtcbiAgICBwcml2YXRlIGxhc3RBZGRyZXNzS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgdmFsaWRhdGluZ01ldGhvZENvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBpbnZhbGlkTWV0aG9kc0JhbGFuY2U6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gICAgcHVibGljIGludmFsaWRNZXRob2RzQmFja2VuZDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgICBwcml2YXRlIHBheW1lbnRNZXRob2RzOiBhbnlbXSA9IFtdO1xuICAgIHByaXZhdGUgYmFsYW5jZUN1c3RvbWVyOiBhbnkgPSBudWxsO1xuICAgIHB1YmxpYyBwYXltZW50TG9ja2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhdXRvQ29tcGxldGluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgbGFzdFNhdmVkTWV0aG9kQ29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBpc0RpcnR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdXBwcmVzc0RpcnR5ID0gZmFsc2U7XG5cblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLCBwcm90ZWN0ZWQgdG9hc3RyOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBwYXltZW50U2VydmljZTogUGF5bWVudFNlcnZpY2UsIHB1YmxpYyBjaGVja291dFNlcnZpY2U6IENoZWNrb3V0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsIHByaXZhdGUgY29uc3RzOiBDb25zdGFudHMsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpIHsgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucGF5bWVudFNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLnN0ZXBfaWQpO1xuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5hc29jaWF0ZWREYXRhJC5zdWJzY3JpYmUoKGRhdGE6IENoZWNrb3V0RGF0YVtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbEl0ZW0gPSAoZGF0YSB8fCBbXSkuZmluZChpdGVtID0+IGl0ZW0udHlwZSA9PSAndG90YWwnKTtcbiAgICAgICAgICAgIHRoaXMudG90YWxfYW1vdW50ID0gdG90YWxJdGVtID8gdG90YWxJdGVtLmFtb3VudCA6IDA7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCF0aGlzLmNvbXBhY3RQYXltZW50Vmlldykge1xuICAgICAgICAgICAgdGhpcy5wYXltZW50U2VydmljZS5nZXRQYXltZW50TWV0aG9kcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2Uuc3RhdGUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzc0RhdGEgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnYWRkcmVzcycpO1xuICAgICAgICAgICAgICAgIGlmICghYWRkcmVzc0RhdGEpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShhZGRyZXNzRGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFzdEFkZHJlc3NLZXkgPT09IGtleSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdEFkZHJlc3NLZXkgPSBrZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnN0YXRlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbXBhY3RQYXltZW50VmlldykgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5wYXltZW50TG9ja2VkID0gIXRoaXMuY2hlY2tvdXRTZXJ2aWNlLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2Uuc3RhdGUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tcGFjdFBheW1lbnRWaWV3KSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tvdXRTZXJ2aWNlLmlzU3RlcFJlYWR5KCdwYXltZW50JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNhdmVkTWV0aG9kQ29kZShudWxsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGVwRGF0YTogYW55ID0gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ3BheW1lbnQnIGFzIGFueSk7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gc3RlcERhdGE/LmNvZGUgfHwgc3RlcERhdGE/Lm1ldGhvZD8uY29kZSB8fCBzdGVwRGF0YT8ubWV0aG9kX2NvZGUgfHwgbnVsbDtcbiAgICAgICAgICAgIGlmIChjb2RlICYmIHRoaXMubGFzdFNhdmVkTWV0aG9kQ29kZSAhPT0gY29kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2F2ZWRNZXRob2RDb2RlKGNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFsbG93QW55UGF5bWVudE1ldGhvZCQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxvd0FueVBheW1lbnRNZXRob2QgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGF5bWVudFNlcnZpY2UubWV0aG9kcyQuc3Vic2NyaWJlKG1ldGhvZHMgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXltZW50TWV0aG9kcyA9IG1ldGhvZHMgfHwgW107XG4gICAgICAgICAgICBpZiAodGhpcy5jb21wYWN0UGF5bWVudFZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludmFsaWRNZXRob2RzQmFja2VuZCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVCYWxhbmNlQmFzZWRJbnZhbGlkTWV0aG9kcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5iYWxhbmNlQ3VzdG9tZXIkLnN1YnNjcmliZShiYWxhbmNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyID0gYmFsYW5jZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmFsYW5jZUJhc2VkSW52YWxpZE1ldGhvZHMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWV0aG9kX2RhdGEkLnN1YnNjcmliZShtZXRob2QgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG5cbiAgICB9XG5cbiAgICBhbGxEYXRhID0gKCkgPT4gKHtcbiAgICAgICAgLi4udGhpcy5wYXltZW50U2VydmljZS5nZXRVc2VyRGF0YSgpLnNoaXBwaW5nQWRkcmVzcyxcbiAgICAgICAgLi4udGhpcy5wYXltZW50U2VydmljZS5nZXRTaGlwbWVudERhdGEoKSxcbiAgICB9KTtcblxuICAgIGdldFBheW1lbnRJbWFnZVVybCA9IChpbWFnZTogYW55KTogc3RyaW5nID0+IHtcbiAgICAgICAgY29uc3QgcmF3UGF0aCA9IGltYWdlPy5wYXRoIHx8IGltYWdlPy51cmwgfHwgaW1hZ2U/LnNyYyB8fCBpbWFnZTtcbiAgICAgICAgaWYgKCFyYXdQYXRoIHx8IHR5cGVvZiByYXdQYXRoICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHJhd1BhdGguc3RhcnRzV2l0aCgnL21lZGlhL2ltYWdlLycpXG4gICAgICAgICAgICA/IHJhd1BhdGgucmVwbGFjZSgnL21lZGlhL2ltYWdlLycsICcnKVxuICAgICAgICAgICAgOiByYXdQYXRoO1xuICAgICAgICBpZiAoL15odHRwcz86XFwvXFwvL2kudGVzdChub3JtYWxpemVkUGF0aCkpIHJldHVybiBub3JtYWxpemVkUGF0aDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RzLm1lZGlhVXJsKCkgKyBub3JtYWxpemVkUGF0aDtcbiAgICB9XG5cbiAgICBzZXRFcnJvciA9IChtZXNzYWdlKSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIGVtaXRSZXN1bHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZERhdGEgPSB0aGlzLm1ldGhvZERhdGFTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGF1dG9Db21wbGV0ZSA9IHRoaXMuY29tcGFjdFBheW1lbnRWaWV3ICYmIHRoaXMuaXNBdXRvQ29tcGxldGVNZXRob2QobWV0aG9kRGF0YSk7XG4gICAgICAgIGNvbnN0IHN0ZXBEYXRhID0gbWV0aG9kRGF0YSA/IHsgLi4ubWV0aG9kRGF0YSwgYXV0b0NvbXBsZXRlIH0gOiBtZXRob2REYXRhO1xuICAgICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLnNldFN0ZXBSZWFkeShzdGVwRGF0YSwgbnVsbCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zZXRTYXZlZE1ldGhvZENvZGUobWV0aG9kRGF0YT8uY29kZSB8fCBudWxsKTtcbiAgICAgICAgICAgIGlmIChhdXRvQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmFsaXplQ2hlY2tvdXRGcm9tUGF5bWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmFsaXplQ2hlY2tvdXRGcm9tUGF5bWVudCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b0NvbXBsZXRpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmNvbXBsZXRlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcz8ub2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydjaGVja291dC9vcmRlcl9zdWNjZXNzJ10pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zaG93KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0TG9hZGluZyA9IChlc3RhZG8gPSB0cnVlKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChlc3RhZG8pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2ZXJpZnlWYWxpZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nKCk7XG4gICAgICAgIHRoaXMuZW1pdFJlc3VsdCgpO1xuICAgIH1cblxuICAgIHNldE1ldGhvZCA9IGFzeW5jIChtZXRob2QpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFjdFBheW1lbnRWaWV3ICYmIHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID09PSBtZXRob2Q/LmNvZGUgJiYgIXRoaXMubG9hZGluZ19pbnRlcm5hbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3RQYXltZW50VmlldyAmJiB0aGlzLnBheW1lbnRMb2NrZWQpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ3NoaXBtZW50LW1ldGhvZC1yZXF1aXJlZCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3RQYXltZW50VmlldyAmJiB0aGlzLmlzUGF5bWVudE1ldGhvZERpc2FibGVkKG1ldGhvZCkpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ3RoaXMtcGF5bWVudC1tZXRob2QtY2Fubm90LWJlLXVzZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmdfaW50ZXJuYWwgPSB0cnVlO1xuICAgICAgICB0aGlzLnZhbGlkYXRpbmdNZXRob2RDb2RlID0gbWV0aG9kPy5jb2RlIHx8IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID0gbWV0aG9kPy5jb2RlIHx8IG51bGw7XG4gICAgICAgIHRoaXMuZXZhbHVhdGVEaXJ0eUZvclNlbGVjdGlvbihtZXRob2Q/LmNvZGUgfHwgbnVsbCk7XG4gICAgICAgIHRoaXMubWV0aG9kRGF0YVN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5zaG93TWV0aG9kRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucGF5bWVudFNlcnZpY2UucHV0UGF5bWVudChtZXRob2QuY29kZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJhbGFuY2VDdXN0b21lciA9IHJlc3VsdD8uYmFsYW5jZUN1c3RvbWVyO1xuXG4gICAgICAgICAgICBjb25zdCB0b3RhbHMgPSByZXN1bHQ/LnRvdGFscztcblxuICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhiYWxhbmNlQ3VzdG9tZXIsIHRvdGFscz8udG90YWwpO1xuXG4gICAgICAgICAgICBjb25zdCBpc0JhbGFuY2VNZXRob2QgPSB0aGlzLmlzQmFsYW5jZUluQWNjb3VudChtZXRob2QuY29kZSk7XG4gICAgICAgICAgICBjb25zdCBhbGxvd0FueSA9IGJhbGFuY2VDdXN0b21lcj8uYWxsb3dBbnlQYXltZW50TWV0aG9kO1xuXG4gICAgICAgICAgICAvLyBWYWxpZGFjaW9uZXMgZGUgZXJyb3JcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoYmFsYW5jZUN1c3RvbWVyICYmIGFsbG93QW55ID09PSBmYWxzZSAmJiAhaXNCYWxhbmNlTWV0aG9kKSB8fCAvLyBubyBwZXJtaXRlIG90cm8gbcOpdG9kb1xuICAgICAgICAgICAgICAgIChpc0JhbGFuY2VNZXRob2QgJiYgIWJhbGFuY2VDdXN0b21lcikgLy8gc2VsZWNjaW9uw7MgY3VlbnRhIGNvcnJpZW50ZSBwZXJvIG5vIGhheSBiYWxhbmNlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1ldGhvZEVycm9yKCd0aGlzLXBheW1lbnQtbWV0aG9kLWNhbm5vdC1iZS11c2VkJywgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21wYWN0UGF5bWVudFZpZXcgJiYgbWV0aG9kPy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVmFsaWRhY2nDs24gZGUgY3LDqWRpdG8gaW5zdWZpY2llbnRlIChzaSBubyBzZSBwdWVkZSBleGNlZGVyKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlzQmFsYW5jZU1ldGhvZCAmJlxuICAgICAgICAgICAgICAgIGJhbGFuY2VDdXN0b21lciAmJlxuICAgICAgICAgICAgICAgIHRvdGFscyAmJlxuICAgICAgICAgICAgICAgIGJhbGFuY2VDdXN0b21lci5hbGxvd0V4Y2VlZEJhbGFuY2UgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgYmFsYW5jZUN1c3RvbWVyLmNyZWRpdEFtb3VudCA8IHRvdGFscy50b3RhbFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvdygnaW5zdWZmaWNpZW50X2NyZWRpdCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFsYW5jZU1ldGhvZFJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNCYWxhbmNlTWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWxhbmNlTWV0aG9kUmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5tZXRob2REYXRhU3ViamVjdC5uZXh0KG1ldGhvZCk7XG4gICAgICAgICAgICAvLyB0aGlzLmlzTVAobWV0aG9kLmNvZGUpICYmIHRoaXMuZ2V0UHJlZmVyZW5jZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nX2ludGVybmFsID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpbmdNZXRob2RDb2RlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHNldERpcnR5U3RhdGUgPSAobmV4dERpcnR5OiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlydHkgPT09IG5leHREaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSBuZXh0RGlydHk7XG4gICAgICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmlzRGlydHkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2F2ZWRNZXRob2RDb2RlID0gKGNvZGU6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5sYXN0U2F2ZWRNZXRob2RDb2RlID0gY29kZTtcbiAgICAgICAgdGhpcy5zZXREaXJ0eVN0YXRlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV2YWx1YXRlRGlydHlGb3JTZWxlY3Rpb24gPSAoY29kZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFjdFBheW1lbnRWaWV3IHx8IHRoaXMuc3VwcHJlc3NEaXJ0eSkgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tvdXRTZXJ2aWNlLmlzU3RlcFJlYWR5KCdwYXltZW50JykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGlydHlTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb2RlIHx8ICF0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGlydHlTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREaXJ0eVN0YXRlKGNvZGUgIT09IHRoaXMubGFzdFNhdmVkTWV0aG9kQ29kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2NhcmRDaGFuZ2VzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFjdFBheW1lbnRWaWV3KSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5sYXN0U2F2ZWRNZXRob2RDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMucGF5bWVudE1ldGhvZHMuZmluZChtID0+IG0/LmNvZGUgPT09IHRoaXMubGFzdFNhdmVkTWV0aG9kQ29kZSkgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5zdXBwcmVzc0RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1ldGhvZENvZGUgPSB0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGU7XG4gICAgICAgIHRoaXMubWV0aG9kRGF0YVN1YmplY3QubmV4dChtZXRob2QpO1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuc2hvd01ldGhvZEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYmFsYW5jZU1ldGhvZFJlamVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmFsaWRhdGluZ01ldGhvZENvZGUgPSBudWxsO1xuICAgICAgICBpZiAobWV0aG9kPy5jb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLnB1dFBheW1lbnQobWV0aG9kLmNvZGUpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cHByZXNzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREaXJ0eVN0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwcHJlc3NEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VwcHJlc3NEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuICAgIH1cblxuICAgIGlzUGF5bWVudE1ldGhvZERpc2FibGVkID0gKG1ldGhvZDogYW55KSA9PiB7XG4gICAgICAgIGlmICghbWV0aG9kPy5jb2RlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAhISh0aGlzLmludmFsaWRNZXRob2RzQmFsYW5jZVttZXRob2QuY29kZV0gfHwgdGhpcy5pbnZhbGlkTWV0aG9kc0JhY2tlbmRbbWV0aG9kLmNvZGVdKTtcbiAgICB9XG5cbiAgICB1cGRhdGVCYWxhbmNlQmFzZWRJbnZhbGlkTWV0aG9kcyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBhY3RQYXltZW50VmlldykgcmV0dXJuO1xuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXI7XG4gICAgICAgIGNvbnN0IG5leHQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gICAgICAgIGlmIChiYWxhbmNlKSB7XG4gICAgICAgICAgICBpZiAoYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXltZW50TWV0aG9kcy5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0JhbGFuY2VJbkFjY291bnQobWV0aG9kLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0W21ldGhvZC5jb2RlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludmFsaWRNZXRob2RzQmFsYW5jZSA9IG5leHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVNZXRob2RFcnJvcihtZXNzYWdlOiBzdHJpbmcsIG1ldGhvZDogYW55KSB7XG4gICAgICAgIHRoaXMuc2hvd01ldGhvZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50b2FzdHIuc2hvdyhtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5tZXRob2REYXRhU3ViamVjdC5uZXh0KG1ldGhvZCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID0gbWV0aG9kPy5jb2RlIHx8IG51bGw7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlKGUpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZS50YXJnZXQucGFyZW50RWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgcGFyZW50KSB7XG4gICAgICAgICAgICBpZiAoYnV0dG9uLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcbiAgICAgICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlLnRhcmdldC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpXG4gICAgfVxuXG4gICAgc3VibWl0Rm9ybSA9IChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkVWRU5UXCIsIGV2ZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1NFIFJPTU9QSU8gRUwgUFJFVkVOVCBERUZBVUxUJylcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgZ2V0UEsgPSAobWV0aG9kKSA9PiAobWV0aG9kLmNvbmZpZy5wdWJsaWNfa2V5IHx8IG1ldGhvZC5wdWJsaWNfa2V5KTtcblxuICAgIGlzUmVkaXJlY3RSZWRzeXMgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygncmVkc3lzX3JlZGlyZWN0Jyk7XG5cbiAgICBpc1JlZGlyZWN0Q2VjYUJhbmsgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnY2VjYV9iYW5rX3JlZGlyZWN0Jyk7XG5cbiAgICBpc01QID0gKGNvZGU6IHN0cmluZykgPT4gY29kZSAmJiBjb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ21lcmNhZG9fcGFnbycpICYmICFjb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2NyZWRpdCcpO1xuXG4gICAgaXNNUFRhcmpldGFEZUNyZWRpdG8gPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnY3JlZGl0Jyk7XG5cbiAgICBpc01ldGhvZE9mZmxpbmUgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnb2ZmbGluZScpO1xuXG4gICAgaXNQZXlQYWxFeHByZXNzID0gKGNvZGU6IHN0cmluZykgPT4gY29kZSAmJiBjb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3BheXBhbCcpICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnZXhwcmVzcycpO1xuXG4gICAgaXNNb2JiZXggPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnbW9iYmV4Jyk7XG5cbiAgICBpc0JhbmNhcmQgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnYmFuY2FyZCcpO1xuXG4gICAgaXNEZWNpZGlyID0gKGNvZGU6IHN0cmluZykgPT4gY29kZSAmJiBjb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2RlY2lkaXInKTtcblxuICAgIGlzQ3VscWkgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnY3VscWknKTtcblxuICAgIGlzQmFua1RyYW5zZmVyID0gKGNvZGU6IHN0cmluZykgPT4gY29kZSAmJiBjb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2JhbmtfdHJhbnNmZXInKVxuXG4gICAgaXNDYXRhc3RybyA9IChjb2RlOiBzdHJpbmcpID0+IGNvZGUgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjYXRhc3RybycpXG5cbiAgICBpc0JhbWJvbyA9IChjb2RlOiBzdHJpbmcpID0+IGNvZGUgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiYW1ib28nKVxuXG4gICAgaXNQbGFjZVRvUGF5ID0gKGNvZGU6IHN0cmluZykgPT4gY29kZSAmJiBjb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3BsYWNlX3RvX3BheScpXG5cbiAgICBpc0JhbGFuY2VJbkFjY291bnQgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnYmFsYW5jZV9pbl9hY2NvdW50JylcblxuICAgIGdldFBLQ3VscWkgPSBtZXRob2QgPT4ge1xuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2Vhc3ljb21tZXJjZXRlY2gnKVxuICAgICAgICAgICAgPyBtZXRob2QuY29uZmlnLnB1YmxpY190ZXN0aW5nX2tleVxuICAgICAgICAgICAgOiBtZXRob2QuY29uZmlnLnB1YmxpY19wcm9kdWN0aW9uX2tleVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNBdXRvQ29tcGxldGVNZXRob2QgPSAobWV0aG9kOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFtZXRob2Q/LmNvZGUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgY29kZSA9IG1ldGhvZC5jb2RlO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5pc01QKGNvZGUpIHx8XG4gICAgICAgICAgICB0aGlzLmlzUmVkaXJlY3RSZWRzeXMoY29kZSkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNSZWRpcmVjdENlY2FCYW5rKGNvZGUpIHx8XG4gICAgICAgICAgICB0aGlzLmlzUGV5UGFsRXhwcmVzcyhjb2RlKSB8fFxuICAgICAgICAgICAgdGhpcy5pc1BsYWNlVG9QYXkoY29kZSkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNNb2JiZXgoY29kZSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
505
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NoZWNrb3V0LWVjL3BheW1lbnQtZWMvcGF5bWVudC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQWlCLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBU2pEO0lBQXdDLHNDQUFlO0lBcUNuRCw0QkFBc0IsUUFBbUIsRUFBWSxNQUFvQixFQUM5RCxjQUE4QixFQUFTLGVBQWdDLEVBQ3RFLFdBQXdCLEVBQVUsTUFBaUIsRUFBVSxNQUFjO1FBRnZGLFlBR0ksaUJBQU8sU0FFVjtRQUxxQixjQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVksWUFBTSxHQUFOLE1BQU0sQ0FB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VyxrQkFBa0IsQ0E2WTlCO0lBQUQseUJBQUM7Q0FBQSxBQTdZRCxDQUF3QyxlQUFlLEdBNll0RDtTQTdZWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFJlbmRlcmVyMiwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ2hlY2tvdXREYXRhLCBQYXltZW50TWV0aG9kQWRqdXN0bWVudFByZXZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2NoZWNrb3V0LWRhdGEnO1xuaW1wb3J0IHsgQ2hlY2tvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvY2hlY2tvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NoZWNrb3V0L3BheW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uLy4uLy4uL2NvcmUuY29uc3RzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtcGF5bWVudC1lYycsXG4gICAgdGVtcGxhdGVVcmw6ICdwYXltZW50LWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsncGF5bWVudC1lYy5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1BheW1lbnRTZXJ2aWNlXVxuXG59KVxuZXhwb3J0IGNsYXNzIFBheW1lbnRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcblxuICAgIEBJbnB1dCgpIHN0ZXBfaWQ7XG4gICAgQElucHV0KCkgY29tcGFjdFBheW1lbnRWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gICAgQE91dHB1dCgpIGRpcnR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBWaWV3Q2hpbGQoJ2Zvcm1Db250YWluZXInKSBwcm90ZWN0ZWQgbWVyY2Fkb3BhZ29fYnV0dG9uOiBFbGVtZW50UmVmO1xuICAgIHByb3RlY3RlZCBtZXRob2REYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJvdGVjdGVkIHByZWZlcmVuY2U7XG5cblxuICAgIHB1YmxpYyBsb2FkaW5nX2ludGVybmFsID0gZmFsc2U7XG4gICAgcHVibGljIG9yZGVyX2lkO1xuICAgIHB1YmxpYyBlcnJvcjtcbiAgICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gICAgcHVibGljIGxvYWRpbmdfaW50ZXJuYWxfbXAgPSBmYWxzZTtcbiAgICBwdWJsaWMgbWV0aG9kX2RhdGEkID0gdGhpcy5tZXRob2REYXRhU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgbG9hZGluZyQgPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyB0b3RhbF9hbW91bnQ7XG4gICAgcHVibGljIGFsbG93QW55UGF5bWVudE1ldGhvZDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBiYWxhbmNlTWV0aG9kUmVqZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc2hvd01ldGhvZEVycm9yID0gZmFsc2U7XG4gICAgcHVibGljIHNlbGVjdGVkTWV0aG9kQ29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGN1cnJlbnRNZXRob2Q6IGFueSA9IG51bGw7XG4gICAgcHJpdmF0ZSBsYXN0QWRkcmVzc0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIHZhbGlkYXRpbmdNZXRob2RDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgaW52YWxpZE1ldGhvZHNCYWxhbmNlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAgIHB1YmxpYyBpbnZhbGlkTWV0aG9kc0JhY2tlbmQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gICAgcHJpdmF0ZSBwYXltZW50TWV0aG9kczogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIGJhbGFuY2VDdXN0b21lcjogYW55ID0gbnVsbDtcbiAgICBwdWJsaWMgcGF5bWVudExvY2tlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgYXV0b0NvbXBsZXRpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGxhc3RTYXZlZE1ldGhvZENvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgaXNEaXJ0eSA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3VwcHJlc3NEaXJ0eSA9IGZhbHNlO1xuXG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJvdGVjdGVkIHRvYXN0cjogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcGF5bWVudFNlcnZpY2U6IFBheW1lbnRTZXJ2aWNlLCBwdWJsaWMgY2hlY2tvdXRTZXJ2aWNlOiBDaGVja291dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLCBwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLCBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7IH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLmluaXRpYWxpemUodGhpcy5zdGVwX2lkKTtcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UuYXNvY2lhdGVkRGF0YSQuc3Vic2NyaWJlKChkYXRhOiBDaGVja291dERhdGFbXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG90YWxJdGVtID0gKGRhdGEgfHwgW10pLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT0gJ3RvdGFsJyk7XG4gICAgICAgICAgICB0aGlzLnRvdGFsX2Ftb3VudCA9IHRvdGFsSXRlbSA/IHRvdGFsSXRlbS5hbW91bnQgOiAwO1xuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghdGhpcy5jb21wYWN0UGF5bWVudFZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMucGF5bWVudFNlcnZpY2UuZ2V0UGF5bWVudE1ldGhvZHMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnN0YXRlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NEYXRhID0gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ2FkZHJlc3MnKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFkZHJlc3NEYXRhKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoYWRkcmVzc0RhdGEpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxhc3RBZGRyZXNzS2V5ID09PSBrZXkpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RBZGRyZXNzS2V5ID0ga2V5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5zdGF0ZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb21wYWN0UGF5bWVudFZpZXcpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMucGF5bWVudExvY2tlZCA9ICF0aGlzLmNoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnN0YXRlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbXBhY3RQYXltZW50VmlldykgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgncGF5bWVudCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTYXZlZE1ldGhvZENvZGUobnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RlcERhdGE6IGFueSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdwYXltZW50JyBhcyBhbnkpO1xuICAgICAgICAgICAgY29uc3QgY29kZSA9IHN0ZXBEYXRhPy5jb2RlIHx8IHN0ZXBEYXRhPy5tZXRob2Q/LmNvZGUgfHwgc3RlcERhdGE/Lm1ldGhvZF9jb2RlIHx8IG51bGw7XG4gICAgICAgICAgICBpZiAoY29kZSAmJiB0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGUgIT09IGNvZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNhdmVkTWV0aG9kQ29kZShjb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hbGxvd0FueVBheW1lbnRNZXRob2QkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dBbnlQYXltZW50TWV0aG9kID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLm1ldGhvZHMkLnN1YnNjcmliZShtZXRob2RzID0+IHtcbiAgICAgICAgICAgIHRoaXMucGF5bWVudE1ldGhvZHMgPSBtZXRob2RzIHx8IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29tcGFjdFBheW1lbnRWaWV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkTWV0aG9kc0JhY2tlbmQgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmFsYW5jZUJhc2VkSW52YWxpZE1ldGhvZHMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYmFsYW5jZUN1c3RvbWVyJC5zdWJzY3JpYmUoYmFsYW5jZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lciA9IGJhbGFuY2U7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJhbGFuY2VCYXNlZEludmFsaWRNZXRob2RzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1ldGhvZF9kYXRhJC5zdWJzY3JpYmUobWV0aG9kID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxuXG4gICAgfVxuXG4gICAgYWxsRGF0YSA9ICgpID0+ICh7XG4gICAgICAgIC4uLnRoaXMucGF5bWVudFNlcnZpY2UuZ2V0VXNlckRhdGEoKS5zaGlwcGluZ0FkZHJlc3MsXG4gICAgICAgIC4uLnRoaXMucGF5bWVudFNlcnZpY2UuZ2V0U2hpcG1lbnREYXRhKCksXG4gICAgfSk7XG5cbiAgICBnZXRQYXltZW50SW1hZ2VVcmwgPSAoaW1hZ2U6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgICAgIGNvbnN0IHJhd1BhdGggPSBpbWFnZT8ucGF0aCB8fCBpbWFnZT8udXJsIHx8IGltYWdlPy5zcmMgfHwgaW1hZ2U7XG4gICAgICAgIGlmICghcmF3UGF0aCB8fCB0eXBlb2YgcmF3UGF0aCAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSByYXdQYXRoLnN0YXJ0c1dpdGgoJy9tZWRpYS9pbWFnZS8nKVxuICAgICAgICAgICAgPyByYXdQYXRoLnJlcGxhY2UoJy9tZWRpYS9pbWFnZS8nLCAnJylcbiAgICAgICAgICAgIDogcmF3UGF0aDtcbiAgICAgICAgaWYgKC9eaHR0cHM/OlxcL1xcLy9pLnRlc3Qobm9ybWFsaXplZFBhdGgpKSByZXR1cm4gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cy5tZWRpYVVybCgpICsgbm9ybWFsaXplZFBhdGg7XG4gICAgfVxuXG4gICAgc2V0RXJyb3IgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICBlbWl0UmVzdWx0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZXRob2REYXRhID0gdGhpcy5tZXRob2REYXRhU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBhdXRvQ29tcGxldGUgPSB0aGlzLmNvbXBhY3RQYXltZW50VmlldyAmJiB0aGlzLmlzQXV0b0NvbXBsZXRlTWV0aG9kKG1ldGhvZERhdGEpO1xuICAgICAgICBjb25zdCBzdGVwRGF0YSA9IG1ldGhvZERhdGEgPyB7IC4uLm1ldGhvZERhdGEsIGF1dG9Db21wbGV0ZSB9IDogbWV0aG9kRGF0YTtcbiAgICAgICAgdGhpcy5wYXltZW50U2VydmljZS5zZXRTdGVwUmVhZHkoc3RlcERhdGEsIG51bGwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2F2ZWRNZXRob2RDb2RlKG1ldGhvZERhdGE/LmNvZGUgfHwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYXV0b0NvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZUNoZWNrb3V0RnJvbVBheW1lbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZUNoZWNrb3V0RnJvbVBheW1lbnQgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmF1dG9Db21wbGV0aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5jb21wbGV0ZSgpLnRoZW4oXG4gICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXM/Lm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnY2hlY2tvdXQvb3JkZXJfc3VjY2VzcyddKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zaG93KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvdygnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldExvYWRpbmcgPSAoZXN0YWRvID0gdHJ1ZSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZXN0YWRvKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmVyaWZ5VmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZygpO1xuICAgICAgICB0aGlzLmVtaXRSZXN1bHQoKTtcbiAgICB9XG5cbiAgICBzZXRNZXRob2QgPSBhc3luYyAobWV0aG9kKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3RQYXltZW50VmlldyAmJiB0aGlzLnNlbGVjdGVkTWV0aG9kQ29kZSA9PT0gbWV0aG9kPy5jb2RlICYmICF0aGlzLmxvYWRpbmdfaW50ZXJuYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb21wYWN0UGF5bWVudFZpZXcgJiYgdGhpcy5wYXltZW50TG9ja2VkKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5zaG93KCdzaGlwbWVudC1tZXRob2QtcmVxdWlyZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb21wYWN0UGF5bWVudFZpZXcgJiYgdGhpcy5pc1BheW1lbnRNZXRob2REaXNhYmxlZChtZXRob2QpKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5zaG93KCd0aGlzLXBheW1lbnQtbWV0aG9kLWNhbm5vdC1iZS11c2VkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkaW5nX2ludGVybmFsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW5nTWV0aG9kQ29kZSA9IG1ldGhvZD8uY29kZSB8fCBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWV0aG9kQ29kZSA9IG1ldGhvZD8uY29kZSB8fCBudWxsO1xuICAgICAgICB0aGlzLmV2YWx1YXRlRGlydHlGb3JTZWxlY3Rpb24obWV0aG9kPy5jb2RlIHx8IG51bGwpO1xuICAgICAgICB0aGlzLm1ldGhvZERhdGFTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuc2hvd01ldGhvZEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBheW1lbnRTZXJ2aWNlLnB1dFBheW1lbnQobWV0aG9kLmNvZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0Py50b3RhbHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnVwZGF0ZUNhcnRBZnRlclBheW1lbnRSZXNwb25zZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBiYWxhbmNlQ3VzdG9tZXIgPSByZXN1bHQ/LmJhbGFuY2VDdXN0b21lcjtcblxuICAgICAgICAgICAgY29uc3QgdG90YWxzID0gcmVzdWx0Py50b3RhbHM7XG5cbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoYmFsYW5jZUN1c3RvbWVyLCB0b3RhbHM/LnRvdGFsKTtcblxuICAgICAgICAgICAgY29uc3QgaXNCYWxhbmNlTWV0aG9kID0gdGhpcy5pc0JhbGFuY2VJbkFjY291bnQobWV0aG9kLmNvZGUpO1xuICAgICAgICAgICAgY29uc3QgYWxsb3dBbnkgPSBiYWxhbmNlQ3VzdG9tZXI/LmFsbG93QW55UGF5bWVudE1ldGhvZDtcblxuICAgICAgICAgICAgLy8gVmFsaWRhY2lvbmVzIGRlIGVycm9yXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGJhbGFuY2VDdXN0b21lciAmJiBhbGxvd0FueSA9PT0gZmFsc2UgJiYgIWlzQmFsYW5jZU1ldGhvZCkgfHwgLy8gbm8gcGVybWl0ZSBvdHJvIG3DqXRvZG9cbiAgICAgICAgICAgICAgICAoaXNCYWxhbmNlTWV0aG9kICYmICFiYWxhbmNlQ3VzdG9tZXIpIC8vIHNlbGVjY2lvbsOzIGN1ZW50YSBjb3JyaWVudGUgcGVybyBubyBoYXkgYmFsYW5jZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNZXRob2RFcnJvcigndGhpcy1wYXltZW50LW1ldGhvZC1jYW5ub3QtYmUtdXNlZCcsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29tcGFjdFBheW1lbnRWaWV3ICYmIG1ldGhvZD8uY29kZSkge1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFZhbGlkYWNpw7NuIGRlIGNyw6lkaXRvIGluc3VmaWNpZW50ZSAoc2kgbm8gc2UgcHVlZGUgZXhjZWRlcilcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpc0JhbGFuY2VNZXRob2QgJiZcbiAgICAgICAgICAgICAgICBiYWxhbmNlQ3VzdG9tZXIgJiZcbiAgICAgICAgICAgICAgICB0b3RhbHMgJiZcbiAgICAgICAgICAgICAgICBiYWxhbmNlQ3VzdG9tZXIuYWxsb3dFeGNlZWRCYWxhbmNlID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgIGJhbGFuY2VDdXN0b21lci5jcmVkaXRBbW91bnQgPCB0b3RhbHMudG90YWxcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ2luc3VmZmljaWVudF9jcmVkaXQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJhbGFuY2VNZXRob2RSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQmFsYW5jZU1ldGhvZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmFsYW5jZU1ldGhvZFJlamVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubWV0aG9kRGF0YVN1YmplY3QubmV4dChtZXRob2QpO1xuICAgICAgICAgICAgLy8gdGhpcy5pc01QKG1ldGhvZC5jb2RlKSAmJiB0aGlzLmdldFByZWZlcmVuY2UoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ19pbnRlcm5hbCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW5nTWV0aG9kQ29kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0UGF5bWVudE1ldGhvZEFkanVzdG1lbnRQcmV2aWV3ID0gKG1ldGhvZDogYW55KTogUGF5bWVudE1ldGhvZEFkanVzdG1lbnRQcmV2aWV3IHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gbWV0aG9kPy5jaGFyZ2VWYWx1ZTtcbiAgICAgICAgaWYgKHJhd1ZhbHVlID09PSBudWxsIHx8IHJhd1ZhbHVlID09PSB1bmRlZmluZWQgfHwgTnVtYmVyKHJhd1ZhbHVlKSA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBOdW1iZXIocmF3VmFsdWUpO1xuICAgICAgICBjb25zdCB0eXBlID0gbWV0aG9kPy5jaGFyZ2VUeXBlO1xuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgfHwgKHR5cGUgIT09ICdwZXJjZW50YWdlJyAmJiB0eXBlICE9PSAnZml4ZWQnKSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHsgdHlwZSwgdmFsdWUgfTtcbiAgICB9XG5cbiAgICBnZXRQYXltZW50TWV0aG9kQWRqdXN0bWVudFByZXZpZXdTaWduID0gKHZhbHVlOiBudW1iZXIpOiAnKycgfCAnJyA9PiB2YWx1ZSA+IDAgPyAnKycgOiAnJztcblxuICAgIHByaXZhdGUgc2V0RGlydHlTdGF0ZSA9IChuZXh0RGlydHk6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSA9PT0gbmV4dERpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IG5leHREaXJ0eTtcbiAgICAgICAgdGhpcy5kaXJ0eUNoYW5nZS5lbWl0KHRoaXMuaXNEaXJ0eSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTYXZlZE1ldGhvZENvZGUgPSAoY29kZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgICB0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXZhbHVhdGVEaXJ0eUZvclNlbGVjdGlvbiA9IChjb2RlOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jb21wYWN0UGF5bWVudFZpZXcgfHwgdGhpcy5zdXBwcmVzc0RpcnR5KSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5jaGVja291dFNlcnZpY2UuaXNTdGVwUmVhZHkoJ3BheW1lbnQnKSkge1xuICAgICAgICAgICAgdGhpcy5zZXREaXJ0eVN0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvZGUgfHwgIXRoaXMubGFzdFNhdmVkTWV0aG9kQ29kZSkge1xuICAgICAgICAgICAgdGhpcy5zZXREaXJ0eVN0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldERpcnR5U3RhdGUoY29kZSAhPT0gdGhpcy5sYXN0U2F2ZWRNZXRob2RDb2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzY2FyZENoYW5nZXMgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jb21wYWN0UGF5bWVudFZpZXcpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGlydHlTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5wYXltZW50TWV0aG9kcy5maW5kKG0gPT4gbT8uY29kZSA9PT0gdGhpcy5sYXN0U2F2ZWRNZXRob2RDb2RlKSB8fCBudWxsO1xuICAgICAgICB0aGlzLnN1cHByZXNzRGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWV0aG9kQ29kZSA9IHRoaXMubGFzdFNhdmVkTWV0aG9kQ29kZTtcbiAgICAgICAgdGhpcy5tZXRob2REYXRhU3ViamVjdC5uZXh0KG1ldGhvZCk7XG4gICAgICAgIHRoaXMuY3VycmVudE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5zaG93TWV0aG9kRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5iYWxhbmNlTWV0aG9kUmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW5nTWV0aG9kQ29kZSA9IG51bGw7XG4gICAgICAgIGlmIChtZXRob2Q/LmNvZGUpIHtcbiAgICAgICAgICAgIHRoaXMucGF5bWVudFNlcnZpY2UucHV0UGF5bWVudChtZXRob2QuY29kZSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwcHJlc3NEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXBwcmVzc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlydHlTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdXBwcmVzc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0RGlydHlTdGF0ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgaXNQYXltZW50TWV0aG9kRGlzYWJsZWQgPSAobWV0aG9kOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFtZXRob2Q/LmNvZGUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuaW52YWxpZE1ldGhvZHNCYWxhbmNlW21ldGhvZC5jb2RlXSB8fCB0aGlzLmludmFsaWRNZXRob2RzQmFja2VuZFttZXRob2QuY29kZV0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUJhbGFuY2VCYXNlZEludmFsaWRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFjdFBheW1lbnRWaWV3KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLmJhbGFuY2VDdXN0b21lcjtcbiAgICAgICAgY29uc3QgbmV4dDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgICAgICAgaWYgKGJhbGFuY2UpIHtcbiAgICAgICAgICAgIGlmIChiYWxhbmNlLmFsbG93QW55UGF5bWVudE1ldGhvZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBheW1lbnRNZXRob2RzLmZvckVhY2gobWV0aG9kID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQmFsYW5jZUluQWNjb3VudChtZXRob2QuY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRbbWV0aG9kLmNvZGVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52YWxpZE1ldGhvZHNCYWxhbmNlID0gbmV4dDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU1ldGhvZEVycm9yKG1lc3NhZ2U6IHN0cmluZywgbWV0aG9kOiBhbnkpIHtcbiAgICAgICAgdGhpcy5zaG93TWV0aG9kRXJyb3IgPSB0cnVlO1xuICAgICAgICB0aGlzLnRvYXN0ci5zaG93KG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm1ldGhvZERhdGFTdWJqZWN0Lm5leHQobWV0aG9kKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1ldGhvZENvZGUgPSBtZXRob2Q/LmNvZGUgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBzZXRBY3RpdmUoZSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBlLnRhcmdldC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiBwYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChidXR0b24uY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIilcbiAgICB9XG5cbiAgICBzdWJtaXRGb3JtID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRVZFTlRcIiwgZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnU0UgUk9NT1BJTyBFTCBQUkVWRU5UIERFRkFVTFQnKVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBnZXRQSyA9IChtZXRob2QpID0+IChtZXRob2QuY29uZmlnLnB1YmxpY19rZXkgfHwgbWV0aG9kLnB1YmxpY19rZXkpO1xuXG4gICAgaXNSZWRpcmVjdFJlZHN5cyA9IChjb2RlOiBzdHJpbmcpID0+IGNvZGUgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdyZWRzeXNfcmVkaXJlY3QnKTtcblxuICAgIGlzUmVkaXJlY3RDZWNhQmFuayA9IChjb2RlOiBzdHJpbmcpID0+IGNvZGUgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjZWNhX2JhbmtfcmVkaXJlY3QnKTtcblxuICAgIGlzTVAgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnbWVyY2Fkb19wYWdvJykgJiYgIWNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnY3JlZGl0Jyk7XG5cbiAgICBpc01QVGFyamV0YURlQ3JlZGl0byA9IChjb2RlOiBzdHJpbmcpID0+IGNvZGUgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjcmVkaXQnKTtcblxuICAgIGlzTWV0aG9kT2ZmbGluZSA9IChjb2RlOiBzdHJpbmcpID0+IGNvZGUgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdvZmZsaW5lJyk7XG5cbiAgICBpc1BleVBhbEV4cHJlc3MgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygncGF5cGFsJykgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdleHByZXNzJyk7XG5cbiAgICBpc01vYmJleCA9IChjb2RlOiBzdHJpbmcpID0+IGNvZGUgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdtb2JiZXgnKTtcblxuICAgIGlzQmFuY2FyZCA9IChjb2RlOiBzdHJpbmcpID0+IGNvZGUgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiYW5jYXJkJyk7XG5cbiAgICBpc0RlY2lkaXIgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnZGVjaWRpcicpO1xuXG4gICAgaXNDdWxxaSA9IChjb2RlOiBzdHJpbmcpID0+IGNvZGUgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjdWxxaScpO1xuXG4gICAgaXNCYW5rVHJhbnNmZXIgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnYmFua190cmFuc2ZlcicpXG5cbiAgICBpc0NhdGFzdHJvID0gKGNvZGU6IHN0cmluZykgPT4gY29kZSAmJiBjb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2NhdGFzdHJvJylcblxuICAgIGlzQmFtYm9vID0gKGNvZGU6IHN0cmluZykgPT4gY29kZSAmJiBjb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2JhbWJvbycpXG5cbiAgICBpc1BsYWNlVG9QYXkgPSAoY29kZTogc3RyaW5nKSA9PiBjb2RlICYmIGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygncGxhY2VfdG9fcGF5JylcblxuICAgIGlzQmFsYW5jZUluQWNjb3VudCA9IChjb2RlOiBzdHJpbmcpID0+IGNvZGUgJiYgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiYWxhbmNlX2luX2FjY291bnQnKVxuXG4gICAgZ2V0UEtDdWxxaSA9IG1ldGhvZCA9PiB7XG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZWFzeWNvbW1lcmNldGVjaCcpXG4gICAgICAgICAgICA/IG1ldGhvZC5jb25maWcucHVibGljX3Rlc3Rpbmdfa2V5XG4gICAgICAgICAgICA6IG1ldGhvZC5jb25maWcucHVibGljX3Byb2R1Y3Rpb25fa2V5XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0F1dG9Db21wbGV0ZU1ldGhvZCA9IChtZXRob2Q6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIW1ldGhvZD8uY29kZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBjb2RlID0gbWV0aG9kLmNvZGU7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlzTVAoY29kZSkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNSZWRpcmVjdFJlZHN5cyhjb2RlKSB8fFxuICAgICAgICAgICAgdGhpcy5pc1JlZGlyZWN0Q2VjYUJhbmsoY29kZSkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNQZXlQYWxFeHByZXNzKGNvZGUpIHx8XG4gICAgICAgICAgICB0aGlzLmlzUGxhY2VUb1BheShjb2RlKSB8fFxuICAgICAgICAgICAgdGhpcy5pc01vYmJleChjb2RlKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==