ng-easycommerce 1.1.2 → 1.1.3

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 (100) hide show
  1. package/README.md +10 -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 +5663 -4057
  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/api/connection.service.js +2 -2
  13. package/esm2015/lib/core.consts.js +4 -5
  14. package/esm2015/lib/ec-component/cart-bootstrap-navigation.js +27 -0
  15. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +11 -1
  16. package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +23 -2
  17. package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +185 -13
  18. package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +3 -1
  19. package/esm2015/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +4 -2
  20. package/esm2015/lib/ec-component/coupon-ec/coupon-ec.component.js +6 -1
  21. package/esm2015/lib/guards/able-buyer-guard.service.js +2 -2
  22. package/esm2015/lib/guards/auth-guard.service.js +2 -2
  23. package/esm2015/lib/guards/checkout-ready.service.js +3 -3
  24. package/esm2015/lib/guards/loggedin-guard.service.js +2 -2
  25. package/esm2015/lib/guards/user-role-guard.service.js +2 -2
  26. package/esm2015/lib/services/account/orders.service.js +6 -4
  27. package/esm2015/lib/services/auth.service.js +4 -3
  28. package/esm2015/lib/services/captcha.service.js +6 -4
  29. package/esm2015/lib/services/cart.service.js +1186 -74
  30. package/esm2015/lib/services/channel-config.service.js +4 -6
  31. package/esm2015/lib/services/checkout/addressing.service.js +65 -9
  32. package/esm2015/lib/services/checkout/checkout.service.js +56 -9
  33. package/esm2015/lib/services/checkout/error-handler.service.js +4 -3
  34. package/esm2015/lib/services/checkout/payment.service.js +35 -15
  35. package/esm2015/lib/services/checkout/shipment.service.js +54 -3
  36. package/esm2015/lib/services/concatenated-associations.service.js +4 -3
  37. package/esm2015/lib/services/currency.service.js +5 -3
  38. package/esm2015/lib/services/filters.service.js +2 -2
  39. package/esm2015/lib/services/footer/footer.service.js +4 -3
  40. package/esm2015/lib/services/gift-card.service.js +56 -5
  41. package/esm2015/lib/services/parameters.service.js +5 -3
  42. package/esm2015/lib/services/reviews.service.js +5 -4
  43. package/esm2015/lib/services/seo.service.js +4 -5
  44. package/esm2015/lib/services/stores.service.js +4 -3
  45. package/esm2015/lib/services/wishlist.service.js +3 -4
  46. package/esm2015/lib/utils/analytics/google-analytics.service.js +1 -1
  47. package/esm2015/lib/utils/price-presentation.service.js +2 -3
  48. package/esm2015/lib/utils/shipping-price-display.service.js +2 -3
  49. package/esm5/lib/api/connection.service.js +2 -2
  50. package/esm5/lib/core.consts.js +4 -5
  51. package/esm5/lib/ec-component/cart-bootstrap-navigation.js +27 -0
  52. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +11 -1
  53. package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +23 -2
  54. package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +206 -12
  55. package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +3 -1
  56. package/esm5/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +5 -3
  57. package/esm5/lib/ec-component/coupon-ec/coupon-ec.component.js +6 -1
  58. package/esm5/lib/guards/able-buyer-guard.service.js +2 -2
  59. package/esm5/lib/guards/auth-guard.service.js +2 -2
  60. package/esm5/lib/guards/checkout-ready.service.js +3 -3
  61. package/esm5/lib/guards/loggedin-guard.service.js +2 -2
  62. package/esm5/lib/guards/user-role-guard.service.js +2 -2
  63. package/esm5/lib/services/account/orders.service.js +6 -4
  64. package/esm5/lib/services/auth.service.js +4 -3
  65. package/esm5/lib/services/captcha.service.js +6 -4
  66. package/esm5/lib/services/cart.service.js +1231 -94
  67. package/esm5/lib/services/channel-config.service.js +4 -6
  68. package/esm5/lib/services/checkout/addressing.service.js +65 -9
  69. package/esm5/lib/services/checkout/checkout.service.js +63 -12
  70. package/esm5/lib/services/checkout/error-handler.service.js +4 -3
  71. package/esm5/lib/services/checkout/payment.service.js +29 -11
  72. package/esm5/lib/services/checkout/shipment.service.js +58 -7
  73. package/esm5/lib/services/concatenated-associations.service.js +4 -3
  74. package/esm5/lib/services/currency.service.js +5 -3
  75. package/esm5/lib/services/filters.service.js +2 -2
  76. package/esm5/lib/services/footer/footer.service.js +4 -3
  77. package/esm5/lib/services/gift-card.service.js +59 -5
  78. package/esm5/lib/services/parameters.service.js +5 -3
  79. package/esm5/lib/services/reviews.service.js +5 -4
  80. package/esm5/lib/services/seo.service.js +4 -5
  81. package/esm5/lib/services/stores.service.js +4 -3
  82. package/esm5/lib/services/wishlist.service.js +3 -4
  83. package/esm5/lib/utils/analytics/google-analytics.service.js +1 -1
  84. package/esm5/lib/utils/price-presentation.service.js +2 -3
  85. package/esm5/lib/utils/shipping-price-display.service.js +2 -3
  86. package/fesm2015/ng-easycommerce.js +3966 -2412
  87. package/fesm2015/ng-easycommerce.js.map +1 -1
  88. package/fesm5/ng-easycommerce.js +5667 -4061
  89. package/fesm5/ng-easycommerce.js.map +1 -1
  90. package/lib/ec-component/cart-bootstrap-navigation.d.ts +7 -0
  91. package/lib/ec-component/cart-ec/cart-ec.component.d.ts +5 -2
  92. package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +5 -0
  93. package/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.d.ts +27 -3
  94. package/lib/services/cart.service.d.ts +120 -7
  95. package/lib/services/checkout/addressing.service.d.ts +1 -1
  96. package/lib/services/checkout/checkout.service.d.ts +3 -0
  97. package/lib/services/checkout/shipment.service.d.ts +2 -2
  98. package/lib/services/gift-card.service.d.ts +1 -0
  99. package/ng-easycommerce.metadata.json +1 -1
  100. package/package.json +1 -1
@@ -21,6 +21,7 @@ import { PaymentEcComponent } from './payment-ec/payment-ec.component';
21
21
  import { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';
22
22
  import { ShippingPriceDisplayService } from '../../utils/shipping-price-display.service';
23
23
  import { SeoService } from '../../services/seo.service';
24
+ import { handleInvalidatedCheckoutNavigation, navigateHomeAfterCartBootstrapRecovery } from '../cart-bootstrap-navigation';
24
25
  let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
25
26
  constructor(checkoutService, toastrService, router, cartService, productsService, channelService, consts, elementRef, modalService, shippingPriceDisplay, seo) {
26
27
  super();
@@ -49,6 +50,21 @@ let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
49
50
  this.paymentAutoOpened = false;
50
51
  this.autoClosedSteps = new Set();
51
52
  this.manuallyOpenedSteps = new Set();
53
+ this.checkoutInvalidationHandled = false;
54
+ this.handleCartBootstrapRecovery = () => {
55
+ navigateHomeAfterCartBootstrapRecovery(this.router.url, 'checkout', () => this.cartService.consumeCartBootstrapRecovery(), () => this.router.navigateByUrl('/'));
56
+ };
57
+ this.handleCartCheckoutInvalidation = () => {
58
+ if (this.checkoutInvalidationHandled)
59
+ return;
60
+ this.checkoutInvalidationHandled = handleInvalidatedCheckoutNavigation(this.router.url, () => {
61
+ var _a;
62
+ this.canCheckout = false;
63
+ this.loadingSubject.next(false);
64
+ (_a = this.subReady) === null || _a === void 0 ? void 0 : _a.unsubscribe();
65
+ this.checkoutService.invalidateCheckoutState();
66
+ }, () => this.router.navigateByUrl('/'));
67
+ };
52
68
  this.hideTaxes = false;
53
69
  this.showTaxLegend = false;
54
70
  this.shipmentSummary = null;
@@ -427,6 +443,9 @@ let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
427
443
  this.ecOnConstruct();
428
444
  }
429
445
  ngOnInit() {
446
+ this.cartBootstrapRecoverySubscription = this.cartService.cartBootstrapRecovery.subscribe(this.handleCartBootstrapRecovery);
447
+ this.cartCheckoutInvalidationSubscription = this.cartService.cartCheckoutInvalidation.subscribe(this.handleCartCheckoutInvalidation);
448
+ this.handleCartBootstrapRecovery();
430
449
  this.navSub = this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {
431
450
  if (this.router.url.includes('/checkout')) {
432
451
  this.scrollToTopOnEnter();
@@ -510,7 +529,7 @@ let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
510
529
  this.evaluateMobileBarVisibility();
511
530
  }
512
531
  ngOnDestroy() {
513
- var _a, _b, _c;
532
+ var _a, _b, _c, _d, _e;
514
533
  if (this.summaryObserver) {
515
534
  this.summaryObserver.disconnect();
516
535
  this.summaryObserver = null;
@@ -519,6 +538,8 @@ let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
519
538
  (_a = this.subCan) === null || _a === void 0 ? void 0 : _a.unsubscribe();
520
539
  (_b = this.subReady) === null || _b === void 0 ? void 0 : _b.unsubscribe();
521
540
  (_c = this.navSub) === null || _c === void 0 ? void 0 : _c.unsubscribe();
541
+ (_d = this.cartBootstrapRecoverySubscription) === null || _d === void 0 ? void 0 : _d.unsubscribe();
542
+ (_e = this.cartCheckoutInvalidationSubscription) === null || _e === void 0 ? void 0 : _e.unsubscribe();
522
543
  }
523
544
  aggregateDiscounts(data) {
524
545
  if (!data || !data.length)
@@ -669,4 +690,4 @@ CheckoutEcComponent = __decorate([
669
690
  })
670
691
  ], CheckoutEcComponent);
671
692
  export { CheckoutEcComponent };
672
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9jaGVja291dC1lYy9jaGVja291dC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxPQUFPLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBK0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMs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b3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgU3RlcHBlciBmcm9tICdicy1zdGVwcGVyJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hlY2tvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvY2hlY2tvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0ZXBJIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zdGVwJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hlY2tvdXRWaWV3VHlwZSwgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgRGF0YUZvcm1FY0NvbXBvbmVudCB9IGZyb20gJy4vZGF0YWZvcm0tZWMvZGF0YWZvcm0tZWMuY29tcG9uZW50JztcbmltcG9ydCB7IFBheW1lbnRFY0NvbXBvbmVudCB9IGZyb20gJy4vcGF5bWVudC1lYy9wYXltZW50LWVjLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU2hpcHBpbmdQcmljZURpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2hpcHBpbmctcHJpY2UtZGlzcGxheS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZW8uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNoZWNrb3V0LWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tvdXQtZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NoZWNrb3V0LWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tvdXRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGVwcGVyOiBTdGVwcGVyO1xuICAgIHB1YmxpYyBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgcHVibGljIGNhbkNoZWNrb3V0ID0gZmFsc2U7XG4gICAgcHVibGljIHJlcXVpcmVfbG9naW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc3ViQ2FuOiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIHN1YlJlYWR5OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGNoYW5uZWw6IGFueTtcbiAgICBwdWJsaWMgc3RlcHM6IGFueVtdID0gW107XG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjaGVja291dFZpZXc6IENoZWNrb3V0Vmlld1R5cGUgPSAnbGVnYWN5JztcbiAgICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGxhc3RBc3NvY2lhdGVkRGF0YTogQ2hlY2tvdXREYXRhW10gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgb3BlblNlY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgbGFzdFBheW1lbnRBZGRyZXNzS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBheW1lbnRBdXRvT3BlbmVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhdXRvQ2xvc2VkU3RlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIG1hbnVhbGx5T3BlbmVkU3RlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNob3dUYXhMZWdlbmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc2hpcG1lbnRTdW1tYXJ5OiB7IGxhYmVsPzogc3RyaW5nOyBkZXRhaWw/OiBzdHJpbmcgfSB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBoaWRlTW9iaWxlU3VtbWFyeUJhciA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3VtbWFyeU9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgZmluaXNoQnV0dG9uRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBzdGVwRGlydHlNYXAgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBlbmRpbmdDbG9zZVN0ZXBOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIG5hdlN1YjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgY2hhbm5lbFJlYWR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2hlY2tvdXRJbml0ID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgbG9hZGluZyQgPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgQFZpZXdDaGlsZHJlbihEYXRhRm9ybUVjQ29tcG9uZW50KSBwcml2YXRlIGRhdGFmb3JtQ29tcG9uZW50czogUXVlcnlMaXN0PERhdGFGb3JtRWNDb21wb25lbnQ+O1xuICAgIEBWaWV3Q2hpbGRyZW4oUGF5bWVudEVjQ29tcG9uZW50KSBwcml2YXRlIHBheW1lbnRDb21wb25lbnRzOiBRdWVyeUxpc3Q8UGF5bWVudEVjQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkKCd1bnNhdmVkQ2hhbmdlc01vZGFsJykgcHJpdmF0ZSB1bnNhdmVkQ2hhbmdlc01vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNoZWNrb3V0U2VydmljZTogQ2hlY2tvdXRTZXJ2aWNlLCBwdWJsaWMgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsIHB1YmxpYyBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSxcbiAgICAgICAgcHVibGljIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSwgcHVibGljIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzaGlwcGluZ1ByaWNlRGlzcGxheTogU2hpcHBpbmdQcmljZURpc3BsYXlTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgc2VvOiBTZW9TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRWaWV3ID0gdGhpcy5jb25zdHMuZ2V0Q2hlY2tvdXRWaWV3KCk7XG4gICAgICAgIHRoaXMuY29uc3RzLmNoZWNrb3V0VmlldyQuc3Vic2NyaWJlKHZpZXcgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja291dFZpZXcgPSB2aWV3IHx8ICdsZWdhY3knO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbCA9IHJlc1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplU3RlcHMoKVxuICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gcmVzPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gcmVzPy5oaWRlRGlzY291bnRzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSByZXM/LmhpZGVUYXhlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IHJlcz8uc2hvd1RheExlZ2VuZCA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbFJlYWR5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGlkZVByaWNlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDaGVja291dEluaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDaGVja291dEluaXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDaGVja291dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnN0ZXBFbmFibGVkKDMpKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2hlY2tvdXRTZW8gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNpdGVOYW1lID0gdGhpcy5zZW8uZ2V0U2l0ZU5hbWUoKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0VGl0bGUoYENoZWNrb3V0IHwgJHtzaXRlTmFtZX1gKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0RGVzY3JpcHRpb24oYEZpbmFsaXrDoSB0dSBjb21wcmEgZW4gJHtzaXRlTmFtZX0uYCk7XG4gICAgICAgIHRoaXMuc2VvLnNldE9nVHlwZSgnd2Vic2l0ZScpO1xuICAgICAgICB0aGlzLnNlby5zZXROb0luZGV4KHRydWUpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5zZW8uc2V0Q2Fub25pY2FsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm5hdlN1YiA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnL2NoZWNrb3V0JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVG9wT25FbnRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJDYW4gPSB0aGlzLmNoZWNrb3V0U2VydmljZS5jYW5DaGVja291dCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoY29udGFpbl9pdGVtcyA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5faXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbkNoZWNrb3V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoYW5uZWxSZWFkeSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NoZWNrb3V0SW5pdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tvdXQoKTtcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2Uuc3RhdGUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGhhc1BheW1lbnRTdGVwID0gdGhpcy5zdGVwcy5zb21lKHN0ZXAgPT4gc3RlcC5uYW1lID09PSAncGF5bWVudCcpO1xuICAgICAgICAgICAgaWYgKCFoYXNQYXltZW50U3RlcCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzc0RhdGEgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnYWRkcmVzcycpO1xuICAgICAgICAgICAgaWYgKCFhZGRyZXNzRGF0YSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoYWRkcmVzc0RhdGEpO1xuICAgICAgICAgICAgaWYgKHRoaXMubGFzdFBheW1lbnRBZGRyZXNzS2V5ID09PSBrZXkpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMubGFzdFBheW1lbnRBZGRyZXNzS2V5ID0ga2V5O1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5zdGF0ZSQuc3Vic2NyaWJlKHN0ZXBzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q2hlY2tvdXQoKSB8fCAhc3RlcHMpIHJldHVybjtcbiAgICAgICAgICAgIHN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGVwPy5uYW1lKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKCFzdGVwLmlzUmVhZHkoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9DbG9zZWRTdGVwcy5kZWxldGUoc3RlcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N0ZXBEaXJ0eShzdGVwLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9DbG9zZWRTdGVwcy5oYXMoc3RlcC5uYW1lKSAmJiB0aGlzLm9wZW5TZWN0aW9ucy5pbmNsdWRlcyhzdGVwLm5hbWUpICYmICF0aGlzLm1hbnVhbGx5T3BlbmVkU3RlcHMuaGFzKHN0ZXAubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMgPSB0aGlzLm9wZW5TZWN0aW9ucy5maWx0ZXIobmFtZSA9PiBuYW1lICE9PSBzdGVwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9DbG9zZWRTdGVwcy5hZGQoc3RlcC5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnBheW1lbnRNZXRob2RzJC5zdWJzY3JpYmUobWV0aG9kcyA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkpIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0aGlzLnBheW1lbnRBdXRvT3BlbmVkKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIW1ldGhvZHMgfHwgIW1ldGhvZHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoYXNTaGlwbWVudFN0ZXAgPSB0aGlzLnN0ZXBzLnNvbWUoc3RlcCA9PiBzdGVwLm5hbWUgPT09ICdzaGlwbWVudCcpO1xuICAgICAgICAgICAgaWYgKGhhc1NoaXBtZW50U3RlcCAmJiAhdGhpcy5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFoYXNTaGlwbWVudFN0ZXAgJiYgIXRoaXMuaXNTdGVwRW5hYmxlZCgncGF5bWVudCcpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKCdwYXltZW50JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucy5wdXNoKCdwYXltZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBheW1lbnRBdXRvT3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hlY2tvdXRTZW8oKTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoc2hvd1ByaWNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5hc29jaWF0ZWREYXRhJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhc3RBc3NvY2lhdGVkRGF0YSA9IGRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb1RvcE9uRW50ZXIoKTtcbiAgICAgICAgdGhpcy5zZXR1cFN1bW1hcnlPYnNlcnZlcigpO1xuICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvbkVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG4gICAgICAgIHRoaXMuZXZhbHVhdGVNb2JpbGVCYXJWaXNpYmlsaXR5KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlPYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQnV0dG9uRWwgPSBudWxsO1xuICAgICAgICB0aGlzLnN1YkNhbj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLnN1YlJlYWR5Py51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMubmF2U3ViPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVDaGVja291dCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5DaGVja291dCA9IHRydWU7XG4gICAgICAgIGxldCBzdGVwczogU3RlcElbXSA9IFtdO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdjaGFubmVsJywgdGhpcy5jaGFubmVsKVxuICAgICAgICBzdGVwcy5wdXNoKHsgbmFtZTogJ2FkZHJlc3MnIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdTaGlwcGluZ1N0ZXBBbGxvd2VkID8gbnVsbCA6IHN0ZXBzLnB1c2goeyBuYW1lOiAnc2hpcG1lbnQnIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgPyBudWxsIDogc3RlcHMucHVzaCh7IG5hbWU6ICdwYXltZW50JyB9KTtcbiAgICAgICAgLyogc3RlcHMucHVzaCh7IG5hbWU6ICdzaGlwbWVudCcgfSk7XG4gICAgICAgIHN0ZXBzLnB1c2goeyBuYW1lOiAncGF5bWVudCcgfSk7ICovXG4gICAgICAgIC8vY29uc29sZS5sb2coc3RlcHMpXG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnNldFN0ZXBzKHN0ZXBzKTtcbiAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDaGVja291dCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0ZXBwZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkgJiYgKHRoaXMuY2hhbm5lbD8uaXNTa2lwcGluZ1NoaXBwaW5nU3RlcEFsbG93ZWQgIT0gdHJ1ZSB8fCB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgIT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViUmVhZHkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5vblJlYWR5JC5waXBlKGZpbHRlcihyZWFkeSA9PiByZWFkeSkpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICByZXMgPT4geyByZXMgJiYgdGhpcy5lbmRDaGVja291dCgpIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnb0JhY2sgPSAoKSA9PiB0aGlzLnN0ZXBwZXIucHJldmlvdXMoKTtcblxuICAgIGlzU3RlcFJlYWR5ID0gKHN0ZXBfbmFtZSkgPT4gdGhpcy5jaGVja291dFNlcnZpY2UuaXNTdGVwUmVhZHkoc3RlcF9uYW1lKTtcblxuICAgIGlzU3RlcERpcnR5ID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+ICEhdGhpcy5zdGVwRGlydHlNYXAuZ2V0KHN0ZXBOYW1lKTtcblxuICAgIGlzU3RlcENvbXBsZXRlID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUpICYmICF0aGlzLmlzU3RlcERpcnR5KHN0ZXBOYW1lKTtcblxuICAgIG9uU3RlcERpcnR5Q2hhbmdlID0gKHN0ZXBOYW1lOiBzdHJpbmcsIGlzRGlydHk6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5zdGVwRGlydHlNYXAuc2V0KHN0ZXBOYW1lLCBpc0RpcnR5KTtcbiAgICB9XG5cbiAgICBlbmRDaGVja291dCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UuY29tcGxldGUoKS50aGVuKFxuICAgICAgICAgICAgcmVzID0+IHJlcy5vayAmJiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2NoZWNrb3V0L29yZGVyX3N1Y2Nlc3MnXSksXG4gICAgICAgICAgICBlcnIgPT4gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvcicpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBzZXRTdGVwcGVyID0gKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3RlcHBlcicpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBwZXIgPSBuZXcgU3RlcHBlcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3RlcHBlcicpLCB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVhcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0cnVlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGVwcGVyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgIH1cblxuICAgIG5leHQgPSAoKSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgICAgICB0aGlzLnN0ZXBwZXIubmV4dCgpXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICBlcnJvciA9IChlcnJvcl92YWx1ZSkgPT4gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coZXJyb3JfdmFsdWUpO1xuXG4gICAgZ2V0SWNvbiA9IChkYXRhX2l0ZW06IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFfaXRlbS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjb3Vwb24nOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvY291cG9uLnBuZyc7XG4gICAgICAgICAgICBjYXNlICdkaXNjb3VudCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9kaXNjb3VudC5wbmcnO1xuICAgICAgICAgICAgY2FzZSAnc2hpcG1lbnQnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvLWVudmlvLnBuZyc7XG4gICAgICAgICAgICBjYXNlICdzdWJ0b3RhbCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9wcm9kdWN0cy5wbmcnO1xuICAgICAgICAgICAgY2FzZSAndG90YWwnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvLWNhcnJpdG8ucG5nJztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9pY28tY2Fycml0by5wbmcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVN0ZXBzID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnN0ZXBzID0gW107XG4gICAgICAgIC8vRWwgcGFzbyBkZSBlbGVnaXIgZGlyZWNjacOzbiBzaWVtcHJlIGVzdGFcbiAgICAgICAgdGhpcy5zdGVwcy5wdXNoKHsgbGFiZWw6ICdiaWxsaW5nLWRldGFpbHMnLCBuYW1lOiAnYWRkcmVzcycgfSlcbiAgICAgICAgLy9FbCBwYXNvIGRlIGVsZWdpciBtZXRvZG8gZGUgZW52aW9cbiAgICAgICAgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nU2hpcHBpbmdTdGVwQWxsb3dlZCA/IG51bGwgOiB0aGlzLnN0ZXBzLnB1c2goeyBsYWJlbDogJ3NoaXBtZW50LW1ldGhvZCcsIG5hbWU6ICdzaGlwbWVudCcgfSlcbiAgICAgICAgLy9FbCBwYXNvIGRlIGVsZWdpciBtZXRvZG8gZGUgcGFnb1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgPyBudWxsIDogdGhpcy5zdGVwcy5wdXNoKHsgbGFiZWw6ICdwYXltZW50JywgbmFtZTogJ3BheW1lbnQnIH0pXG4gICAgICAgIHRoaXMuc3RlcHMgPSB0aGlzLnN0ZXBzLm1hcCgoc3RlcCwgaW5kZXgpID0+ICh7IC4uLnN0ZXAsIHN0ZXA6IGluZGV4ICsgMSB9KSk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcylcbiAgICAgICAgaWYgKHRoaXMuc3RlcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IFt0aGlzLnN0ZXBzWzBdLm5hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RlcEVuYWJsZWQgPSAoc3RlcE51bWJlcjogbnVtYmVyKSA9PiB0aGlzLnN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLnN0ZXAgPT0gc3RlcE51bWJlcikgPyB0cnVlIDogZmFsc2VcblxuICAgIGdldENsYXNzVG9TdGVwcGVyID0gKGluZGV4OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICdsaW5lYSdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0ZXBzW2luZGV4ICsgMV0gPyAndGV4dC1jZW50ZXInIDogJ3RleHQtZW5kJ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNMZWdhY3lDaGVja291dCA9ICgpID0+IHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJztcblxuICAgIGdldFNpbmdsZVN0ZXBUaXRsZSA9IChzdGVwOiBTdGVwSSAmIHsgbGFiZWw/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgc3RlcD8ubmFtZSA9PT0gJ2FkZHJlc3MnID8gJ2FkZHJlc3Mtc2VsZWN0aW9uJyA6IHN0ZXA/LmxhYmVsO1xuXG4gICAgZ2V0U2luZ2xlU3VtbWFyeUxhYmVsID0gKHN0ZXA6IFN0ZXBJICYgeyBsYWJlbD86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChzdGVwPy5uYW1lID09PSAnYWRkcmVzcycpIHJldHVybiB0aGlzLmdldEFkZHJlc3NTdW1tYXJ5TGFiZWwoKTtcbiAgICAgICAgaWYgKHN0ZXA/Lm5hbWUgPT09ICdzaGlwbWVudCcpIHJldHVybiB0aGlzLnNoaXBtZW50U3VtbWFyeT8ubGFiZWwgfHwgJyc7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBnZXRTaW5nbGVTdW1tYXJ5VmFsdWUgPSAoc3RlcDogU3RlcEkgJiB7IGxhYmVsPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgaWYgKHN0ZXA/Lm5hbWUgPT09ICdzaGlwbWVudCcpIHJldHVybiB0aGlzLnNoaXBtZW50U3VtbWFyeT8uZGV0YWlsIHx8ICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGVwU3VtbWFyeShzdGVwPy5uYW1lKTtcbiAgICB9XG5cbiAgICBpc1N0ZXBFbmFibGVkID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnN0ZXBzLmZpbmRJbmRleChzdGVwID0+IHN0ZXAubmFtZSA9PT0gc3RlcE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPD0gMCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyA9PT0gJ3NpbmdsZScgJiYgc3RlcE5hbWUgPT09ICdwYXltZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwUmVhZHkoJ2FkZHJlc3MnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2U3RlcCA9IHRoaXMuc3RlcHNbaW5kZXggLSAxXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwUmVhZHkocHJldlN0ZXAubmFtZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VjdGlvbiA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0ZXBFbmFibGVkKHN0ZXBOYW1lKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlblNlY3Rpb25zLmluZGV4T2Yoc3RlcE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUpICYmIHRoaXMuaXNTdGVwRGlydHkoc3RlcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IHN0ZXBOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlblVuc2F2ZWRDaGFuZ2VzTW9kYWwodGhpcy51bnNhdmVkQ2hhbmdlc01vZGFsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMucHVzaChzdGVwTmFtZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1N0ZXBSZWFkeShzdGVwTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hbnVhbGx5T3BlbmVkU3RlcHMuYWRkKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWN0aW9uKHN0ZXBOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdvVG9OZXh0U2VjdGlvbiA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLm5hbWUgPT09IHN0ZXBOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSB8fCAhdGhpcy5zdGVwc1tpbmRleCArIDFdKSByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHROYW1lID0gdGhpcy5zdGVwc1tpbmRleCArIDFdLm5hbWU7XG4gICAgICAgIHRoaXMub3BlblNlY3Rpb25zID0gdGhpcy5vcGVuU2VjdGlvbnMuZmlsdGVyKG5hbWUgPT4gbmFtZSAhPT0gc3RlcE5hbWUpO1xuICAgICAgICBpZiAoIXRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKG5leHROYW1lKSkgdGhpcy5vcGVuU2VjdGlvbnMucHVzaChuZXh0TmFtZSk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9TZWN0aW9uKG5leHROYW1lKTtcbiAgICB9XG5cbiAgICBnb1RvTmV4dEZyb21BZGRyZXNzID0gKCkgPT4gdGhpcy5nb1RvTmV4dFNlY3Rpb24oJ2FkZHJlc3MnKTtcblxuICAgIGlzU2VjdGlvbk9wZW4gPSAoc3RlcE5hbWU6IHN0cmluZykgPT4gdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMoc3RlcE5hbWUpO1xuXG4gICAgZ2V0U3VtbWFyeUxhYmVsID0gKHR5cGU6IENoZWNrb3V0RGF0YVsndHlwZSddLCBpdGVtPzogQ2hlY2tvdXREYXRhKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAncHJvZHVjdHNCZWZvcmVEaXNjb3VudHMnOiByZXR1cm4gJ3Byb2R1Y3RzLWJlZm9yZS1kaXNjb3VudHMnO1xuICAgICAgICAgICAgY2FzZSAnc3VidG90YWwnOiByZXR1cm4gJ3N1YnRvdGFsJztcbiAgICAgICAgICAgIGNhc2UgJ2Rpc2NvdW50JzogcmV0dXJuICdkaXNjb3VudCc7XG4gICAgICAgICAgICBjYXNlICdwYXltZW50TWV0aG9kQWRqdXN0bWVudCc6IHJldHVybiAoaXRlbT8uYW1vdW50ID8/IDApIDwgMCA/ICdwYXltZW50LW1ldGhvZC1kaXNjb3VudCcgOiAncGF5bWVudC1tZXRob2Qtc3VyY2hhcmdlJztcbiAgICAgICAgICAgIGNhc2UgJ2NvdXBvbic6IHJldHVybiAnY291cG9uJztcbiAgICAgICAgICAgIGNhc2UgJ2xpbmVEaXNjb3VudCc6IHJldHVybiAnbGluZS1kaXNjb3VudHMnO1xuICAgICAgICAgICAgY2FzZSAnc2hpcG1lbnQnOiByZXR1cm4gJ3NoaXBtZW50JztcbiAgICAgICAgICAgIGNhc2UgJ3RheGVzJzpcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnRheGVzSW5jbHVkZWRJblRvdGFsID09PSB0cnVlKSByZXR1cm4gJ3RheGVzLWluY2x1ZGVkLWluLXRvdGFsJztcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnRheGVzSW5jbHVkZWRJblRvdGFsID09PSBmYWxzZSkgcmV0dXJuICd0YXhlcyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1RheExlZ2VuZCA/ICduYXRpb25hbC10YXhlcycgOiAndGF4ZXMnO1xuICAgICAgICAgICAgY2FzZSAnY2xpZW50VGF4ZXMnOiByZXR1cm4gJ2NsaWVudFRheGVzJztcbiAgICAgICAgICAgIGNhc2UgJ3RvdGFsJzogcmV0dXJuICd0b3RhbCc7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gdHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFN1bW1hcnlEYXRhID0gKGRhdGE6IENoZWNrb3V0RGF0YVtdKSA9PiB7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuIFtdO1xuICAgICAgICBpZiAodGhpcy5jaGVja291dFZpZXcgIT09ICdzaW5nbGUnKSByZXR1cm4gZGF0YTtcbiAgICAgICAgbGV0IHN1bW1hcnlEYXRhID0gZGF0YTtcbiAgICAgICAgY29uc3QgaGFzU2hpcG1lbnQgPSBzdW1tYXJ5RGF0YS5zb21lKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnc2hpcG1lbnQnKTtcbiAgICAgICAgaWYgKCFoYXNTaGlwbWVudCAmJiB0aGlzLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpKSB7XG4gICAgICAgICAgICBjb25zdCBvcmRlclRvdGFscyA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldE9yZGVyKCk/LnRvdGFscztcbiAgICAgICAgICAgIGNvbnN0IHNoaXBtZW50QW1vdW50ID0gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5ub3JtYWxpemVQcmljZVZhbHVlKG9yZGVyVG90YWxzPy5zaGlwcGluZyk7XG4gICAgICAgICAgICBpZiAoc2hpcG1lbnRBbW91bnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoaXBtZW50SXRlbTogQ2hlY2tvdXREYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IHNoaXBtZW50QW1vdW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEluZGV4ID0gc3VtbWFyeURhdGEuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS50eXBlID09PSAndG90YWwnKTtcbiAgICAgICAgICAgICAgICBpZiAodG90YWxJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeURhdGEgPSBbLi4uc3VtbWFyeURhdGEsIHNoaXBtZW50SXRlbV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYHRvdGFsYCB5YSBlcyBlbCBpbXBvcnRlIGZpbmFsIGluZm9ybWFkbyBwb3IgYmFja2VuZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gU8OzbG8gc2UgaW5jb3Jwb3JhIGVsIGVudsOtbyBmYWx0YW50ZSwgc2luIHJlY29uc3RydWlyIG5pXG4gICAgICAgICAgICAgICAgICAgIC8vIG1vZGlmaWNhciBlc2UgdG90YWwuXG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlEYXRhID0gWy4uLnN1bW1hcnlEYXRhLnNsaWNlKDAsIHRvdGFsSW5kZXgpLCBzaGlwbWVudEl0ZW0sIC4uLnN1bW1hcnlEYXRhLnNsaWNlKHRvdGFsSW5kZXgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3VtbWFyeURhdGEgPSB0aGlzLmFnZ3JlZ2F0ZURpc2NvdW50cyhzdW1tYXJ5RGF0YSlcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT09ICdwcm9kdWN0c0JlZm9yZURpc2NvdW50cycgJiYgaXRlbS50eXBlICE9PSAnbGluZURpc2NvdW50Jyk7XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZWRUYXhlcyA9IHN1bW1hcnlEYXRhLmZpbHRlcihpdGVtID0+XG4gICAgICAgICAgICBpdGVtLnR5cGUgPT09ICd0YXhlcycgJiYgaXRlbS50YXhlc0luY2x1ZGVkSW5Ub3RhbCA9PT0gdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghaW5jbHVkZWRUYXhlcy5sZW5ndGgpIHJldHVybiBzdW1tYXJ5RGF0YTtcblxuICAgICAgICBjb25zdCB3aXRob3V0SW5jbHVkZWRUYXhlcyA9IHN1bW1hcnlEYXRhLmZpbHRlcihpdGVtID0+XG4gICAgICAgICAgICAhKGl0ZW0udHlwZSA9PT0gJ3RheGVzJyAmJiBpdGVtLnRheGVzSW5jbHVkZWRJblRvdGFsID09PSB0cnVlKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0b3RhbEluZGV4ID0gd2l0aG91dEluY2x1ZGVkVGF4ZXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS50eXBlID09PSAndG90YWwnKTtcblxuICAgICAgICBpZiAodG90YWxJbmRleCA9PT0gLTEpIHJldHVybiBbLi4ud2l0aG91dEluY2x1ZGVkVGF4ZXMsIC4uLmluY2x1ZGVkVGF4ZXNdO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi53aXRob3V0SW5jbHVkZWRUYXhlcy5zbGljZSgwLCB0b3RhbEluZGV4ICsgMSksXG4gICAgICAgICAgICAuLi5pbmNsdWRlZFRheGVzLFxuICAgICAgICAgICAgLi4ud2l0aG91dEluY2x1ZGVkVGF4ZXMuc2xpY2UodG90YWxJbmRleCArIDEpXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0U3VtbWFyeUFtb3VudFZpZXcgPSAoaXRlbTogQ2hlY2tvdXREYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2hpcG1lbnRBbW91bnQgPSBpdGVtPy50eXBlID09PSAnc2hpcG1lbnQnID8gdGhpcy5nZXRTaGlwbWVudE9yaWdpbmFsQW1vdW50KCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5idWlsZFZpZXdNb2RlbChpdGVtPy5hbW91bnQsIG9yaWdpbmFsU2hpcG1lbnRBbW91bnQpO1xuICAgIH1cblxuICAgIGdldFRvdGFsQW1vdW50ID0gKGRhdGE6IENoZWNrb3V0RGF0YVtdKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5nZXRTdW1tYXJ5RGF0YShkYXRhKTtcbiAgICAgICAgaWYgKCFzdW1tYXJ5RGF0YSB8fCAhc3VtbWFyeURhdGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgdG90YWxJdGVtID0gc3VtbWFyeURhdGEuZmluZChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgIHJldHVybiB0b3RhbEl0ZW0gPyB0b3RhbEl0ZW0uYW1vdW50IDogbnVsbDtcbiAgICB9XG5cbiAgICBzaG91bGRTaG93U3VtbWFyeUl0ZW0gPSAoaXRlbTogQ2hlY2tvdXREYXRhKSA9PiB7XG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAncHJvZHVjdHNCZWZvcmVEaXNjb3VudHMnIHx8IGl0ZW0udHlwZSA9PT0gJ2xpbmVEaXNjb3VudCcpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKChpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJykgJiYgaXRlbS5hbW91bnQgPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoKGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JyB8fCBpdGVtLnR5cGUgPT09ICdjb3Vwb24nKSAmJiB0aGlzLmhpZGVEaXNjb3VudHMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3BheW1lbnRNZXRob2RBZGp1c3RtZW50JyAmJiAoaXRlbS5hbW91bnQgPT09IDAgfHwgaXRlbS5hbW91bnQgPT0gbnVsbCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3RheGVzJyAmJiAodGhpcy5oaWRlVGF4ZXMgfHwgaXRlbS5hbW91bnQgPT0gMCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsaWVudFRheGVzJyAmJiAodGhpcy5oaWRlVGF4ZXMgfHwgaXRlbS5hbW91bnQgPT0gMCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkSGlkZVN1bW1hcnlTdWJ0b3RhbChpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRBZGRyZXNzU3VtbWFyeUxhYmVsID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGVwRGF0YTogYW55ID0gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ2FkZHJlc3MnIGFzIGFueSk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdGVwRGF0YT8uc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zZWxlY3RlZD8uc2hpcHBpbmdBZGRyZXNzO1xuICAgICAgICBjb25zdCBjb250YWN0ID0gYWRkcmVzcz8uYWRkcmVzc0NvbnRhY3QgfHwgYWRkcmVzcz8uY29udGFjdCB8fCBhZGRyZXNzIHx8IHt9O1xuICAgICAgICByZXR1cm4gW2NvbnRhY3QuZmlyc3ROYW1lLCBjb250YWN0Lmxhc3ROYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgIH1cblxuICAgIGdldFN0ZXBTdW1tYXJ5ID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcERhdGE6IGFueSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKHN0ZXBOYW1lIGFzIGFueSk7XG4gICAgICAgIGlmICghc3RlcERhdGEpIHJldHVybiAnJztcbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAnYWRkcmVzcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdGVwRGF0YS5zaGlwcGluZ0FkZHJlc3MgfHwgc3RlcERhdGE/LnNlbGVjdGVkPy5zaGlwcGluZ0FkZHJlc3MgfHwgc3RlcERhdGE/LnNoaXBwaW5nQWRkcmVzcztcbiAgICAgICAgICAgIGlmICghYWRkcmVzcykgcmV0dXJuICcnO1xuICAgICAgICAgICAgY29uc3QgbWFpbiA9IFthZGRyZXNzLnN0cmVldCwgYWRkcmVzcy5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpO1xuICAgICAgICAgICAgY29uc3QgcmVnaW9uID0gW2FkZHJlc3MucHJvdmluY2VDb2RlIHx8IGFkZHJlc3MucHJvdmluY2UsIGFkZHJlc3MuY291bnRyeUNvZGUgfHwgYWRkcmVzcy5jb3VudHJ5XVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgIHJldHVybiBbbWFpbiwgcmVnaW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbignIOKAlCAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcE5hbWUgPT09ICdzaGlwbWVudCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZExhYmVsID0gc3RlcERhdGEubWV0aG9kPy5uYW1lIHx8IHN0ZXBEYXRhLm1ldGhvZF9uYW1lIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgY29udHJhY3RMYWJlbCA9IHN0ZXBEYXRhLmNvbnRyYWN0Py5uYW1lIHx8IHN0ZXBEYXRhLmNvbnRyYWN0X25hbWUgfHwgc3RlcERhdGEubmFtZSB8fCBzdGVwRGF0YS5jb250cmFjdCB8fCAnJztcbiAgICAgICAgICAgIHJldHVybiBbbWV0aG9kTGFiZWwsIGNvbnRyYWN0TGFiZWxdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAncGF5bWVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwRGF0YS5uYW1lIHx8IHN0ZXBEYXRhLmNvZGUgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHNldFNoaXBtZW50U3VtbWFyeSA9IChzdW1tYXJ5OiB7IGxhYmVsPzogc3RyaW5nOyBkZXRhaWw/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNMYWJlbCA9IEJvb2xlYW4oc3VtbWFyeT8ubGFiZWwpO1xuICAgICAgICBjb25zdCBoYXNEZXRhaWwgPSBCb29sZWFuKHN1bW1hcnk/LmRldGFpbCk7XG4gICAgICAgIHRoaXMuc2hpcG1lbnRTdW1tYXJ5ID0gaGFzTGFiZWwgfHwgaGFzRGV0YWlsID8gc3VtbWFyeSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTaGlwbWVudE9yaWdpbmFsQW1vdW50ID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBzaGlwbWVudFN0ZXBEYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnc2hpcG1lbnQnIGFzIGFueSk7XG4gICAgICAgIHJldHVybiB0aGlzLnNoaXBwaW5nUHJpY2VEaXNwbGF5Lm5vcm1hbGl6ZVByaWNlVmFsdWUoXG4gICAgICAgICAgICBzaGlwbWVudFN0ZXBEYXRhPy5vcmlnaW5hbFByaWNlID8/XG4gICAgICAgICAgICBzaGlwbWVudFN0ZXBEYXRhPy5jb250cmFjdD8ub3JpZ2luYWxQcmljZSA/P1xuICAgICAgICAgICAgc2hpcG1lbnRTdGVwRGF0YT8uc2VsZWN0ZWQ/LmNvbnRyYWN0Py5vcmlnaW5hbFByaWNlID8/XG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGVEaXNjb3VudHMoZGF0YTogQ2hlY2tvdXREYXRhW10pIHtcbiAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkgcmV0dXJuIFtdO1xuICAgICAgICBjb25zdCBkaXNjb3VudFRvdGFsID0gZGF0YVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JylcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgKGN1cnIuYW1vdW50IHx8IDApLCAwKTtcbiAgICAgICAgY29uc3QgY291cG9uVG90YWwgPSBkYXRhXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnY291cG9uJylcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgKGN1cnIuYW1vdW50IHx8IDApLCAwKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPT0gJ2Rpc2NvdW50JyAmJiBpdGVtLnR5cGUgIT09ICdjb3Vwb24nKTtcblxuICAgICAgICBpZiAodGhpcy5oaWRlRGlzY291bnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHRyYXM6IENoZWNrb3V0RGF0YVtdID0gW107XG4gICAgICAgIGlmIChkaXNjb3VudFRvdGFsICE9PSAwKSB7XG4gICAgICAgICAgICBleHRyYXMucHVzaCh7IHR5cGU6ICdkaXNjb3VudCcsIG5hbWU6ICdkaXNjb3VudCcsIGFtb3VudDogZGlzY291bnRUb3RhbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291cG9uVG90YWwgIT09IDApIHtcbiAgICAgICAgICAgIGV4dHJhcy5wdXNoKHsgdHlwZTogJ2NvdXBvbicsIG5hbWU6ICdjb3Vwb24nLCBhbW91bnQ6IGNvdXBvblRvdGFsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXh0cmFzLmxlbmd0aCkgcmV0dXJuIGZpbHRlcmVkO1xuXG4gICAgICAgIGNvbnN0IHN1YnRvdGFsSW5kZXggPSBmaWx0ZXJlZC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzdWJ0b3RhbCcpO1xuICAgICAgICBpZiAoc3VidG90YWxJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5maWx0ZXJlZF07XG4gICAgICAgICAgICByZXN1bHQuc3BsaWNlKHN1YnRvdGFsSW5kZXggKyAxLCAwLCAuLi5leHRyYXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSBkYXRhLmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JyB8fCBpdGVtLnR5cGUgPT09ICdjb3Vwb24nKTtcbiAgICAgICAgaWYgKGZpcnN0SW5kZXggPT09IC0xKSByZXR1cm4gWy4uLmZpbHRlcmVkLCAuLi5leHRyYXNdO1xuICAgICAgICBjb25zdCBpbnNlcnRBdCA9IGRhdGFcbiAgICAgICAgICAgIC5zbGljZSgwLCBmaXJzdEluZGV4KVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPT0gJ2Rpc2NvdW50JyAmJiBpdGVtLnR5cGUgIT09ICdjb3Vwb24nKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5maWx0ZXJlZF07XG4gICAgICAgIHJlc3VsdC5zcGxpY2UoaW5zZXJ0QXQsIDAsIC4uLmV4dHJhcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRIaWRlU3VtbWFyeVN1YnRvdGFsKGl0ZW06IENoZWNrb3V0RGF0YSkge1xuICAgICAgICBpZiAoaXRlbT8udHlwZSAhPT0gJ3N1YnRvdGFsJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5sYXN0QXNzb2NpYXRlZERhdGE7XG4gICAgICAgIGlmICghZGF0YT8ubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5nZXRTdW1tYXJ5RGF0YShkYXRhKTtcbiAgICAgICAgY29uc3QgdG90YWxJdGVtID0gc3VtbWFyeURhdGEuZmluZChkYXRhSXRlbSA9PiBkYXRhSXRlbS50eXBlID09PSAndG90YWwnKTtcbiAgICAgICAgcmV0dXJuICEhdG90YWxJdGVtICYmIGl0ZW0uYW1vdW50ID09PSB0b3RhbEl0ZW0uYW1vdW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2Nyb2xsVG9TZWN0aW9uKHN0ZXBOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb290ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXJvb3QpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSByb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXN0ZXA9XFxcIiR7c3RlcE5hbWV9XFxcIl1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghc2VjdGlvbikgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gc2VjdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSAxMjtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogTWF0aC5tYXgoMCwgdG9wIC0gb2Zmc2V0KSwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9LCA1MCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxUb1RvcE9uRW50ZXIoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBsZWZ0OiAwLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwU3VtbWFyeU9ic2VydmVyKCkge1xuICAgICAgICBpZiAodGhpcy5jaGVja291dFZpZXcgIT09ICdzaW5nbGUnKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCFyb290KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGZpbmlzaEJ0biA9IHJvb3QucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG4gICAgICAgIGlmICghZmluaXNoQnRuKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgICAgIHRoaXMuaGlkZU1vYmlsZVN1bW1hcnlCYXIgPSAhIWVudHJ5ICYmIGVudHJ5LmlzSW50ZXJzZWN0aW5nO1xuICAgICAgICB9LCB7IHJvb3RNYXJnaW46ICcwcHggMHB4IC0xMjBweCAwcHgnLCB0aHJlc2hvbGQ6IDAgfSk7XG5cbiAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIub2JzZXJ2ZShmaW5pc2hCdG4pO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICAgIGV2YWx1YXRlTW9iaWxlQmFyVmlzaWJpbGl0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuZmluaXNoQnV0dG9uRWwpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQnV0dG9uRWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjY2hlY2tvdXRGaW5pc2hCdG4nKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5maW5pc2hCdXR0b25FbCkgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmZpbmlzaEJ1dHRvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCAwO1xuICAgICAgICB0aGlzLmhpZGVNb2JpbGVTdW1tYXJ5QmFyID0gcmVjdC50b3AgPCAodmlld3BvcnRIZWlnaHQgLSA4MCk7XG4gICAgfVxuXG4gICAgYXJlQWxsU3RlcHNSZWFkeSA9IChzdGVwczogeyBpc1JlYWR5OiAoKSA9PiBib29sZWFuOyBuYW1lPzogc3RyaW5nIH1bXSkgPT4ge1xuICAgICAgICBpZiAoIXN0ZXBzIHx8ICFzdGVwcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0ZXBzLmV2ZXJ5KHN0ZXAgPT4ge1xuICAgICAgICAgICAgaWYgKCFzdGVwLmlzUmVhZHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFzdGVwLm5hbWUpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzU3RlcERpcnR5KHN0ZXAubmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNob3VsZEhpZGVGaW5pc2hCdXR0b24gPSAoc3RlcHM6IHsgaXNSZWFkeTogKCkgPT4gYm9vbGVhbiB9W10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuYXJlQWxsU3RlcHNSZWFkeShzdGVwcykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgcGF5bWVudERhdGE6IGFueSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdwYXltZW50JyBhcyBhbnkpO1xuICAgICAgICByZXR1cm4gISFwYXltZW50RGF0YT8uYXV0b0NvbXBsZXRlO1xuICAgIH1cblxuICAgIG9wZW5VbnNhdmVkQ2hhbmdlc01vZGFsID0gKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwge1xuICAgICAgICAgICAgY2xhc3M6ICdtb2RhbC1kaWFsb2ctY2VudGVyZWQgY2hlY2tvdXQtdW5zYXZlZC1tb2RhbCcsXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FuY2VsVW5zYXZlZENsb3NlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xuICAgIH1cblxuICAgIGNvbmZpcm1VbnNhdmVkRGlzY2FyZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGFsUmVmPy5oaWRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcE5hbWUgPSB0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lO1xuICAgICAgICB0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaXNjYXJkU3RlcENoYW5nZXMoc3RlcE5hbWUpO1xuICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IHRoaXMub3BlblNlY3Rpb25zLmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHN0ZXBOYW1lKTtcbiAgICAgICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzY2FyZFN0ZXBDaGFuZ2VzKHN0ZXBOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAnYWRkcmVzcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFmb3JtID0gdGhpcy5kYXRhZm9ybUNvbXBvbmVudHM/LmZpcnN0O1xuICAgICAgICAgICAgaWYgKGRhdGFmb3JtKSB7XG4gICAgICAgICAgICAgICAgZGF0YWZvcm0uZGlzY2FyZENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ3BheW1lbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXltZW50ID0gdGhpcy5wYXltZW50Q29tcG9uZW50cz8uZmlyc3Q7XG4gICAgICAgICAgICBpZiAocGF5bWVudCkge1xuICAgICAgICAgICAgICAgIHBheW1lbnQuZGlzY2FyZENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuICAgIH1cbn1cbiJdfQ==
693
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9jaGVja291dC1lYy9jaGVja291dC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxPQUFPLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBK0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMs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QVU3QjtBQTNrQlEsbUJBQW1CO0lBTC9CLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxpQkFBaUI7UUFDM0IscXBmQUEyQzs7S0FFOUMsQ0FBQztHQUNXLG1CQUFtQixDQTBvQi9CO1NBMW9CWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBTdGVwcGVyIGZyb20gJ2JzLXN0ZXBwZXInO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDaGVja291dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RlcEkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3N0ZXAnO1xuaW1wb3J0IHsgQ2hlY2tvdXREYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jaGVja291dC1kYXRhJztcbmltcG9ydCB7IFByb2R1Y3RzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2R1Y3RzL3Byb2R1Y3RzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDaGVja291dFZpZXdUeXBlLCBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBEYXRhRm9ybUVjQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhZm9ybS1lYy9kYXRhZm9ybS1lYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGF5bWVudEVjQ29tcG9uZW50IH0gZnJvbSAnLi9wYXltZW50LWVjL3BheW1lbnQtZWMuY29tcG9uZW50JztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlLCBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBTaGlwcGluZ1ByaWNlRGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy9zaGlwcGluZy1wcmljZS1kaXNwbGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlby5zZXJ2aWNlJztcbmltcG9ydCB7IGhhbmRsZUludmFsaWRhdGVkQ2hlY2tvdXROYXZpZ2F0aW9uLCBuYXZpZ2F0ZUhvbWVBZnRlckNhcnRCb290c3RyYXBSZWNvdmVyeSB9IGZyb20gJy4uL2NhcnQtYm9vdHN0cmFwLW5hdmlnYXRpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1jaGVja291dC1lYycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrb3V0LWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jaGVja291dC1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0RWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgc3RlcHBlcjogU3RlcHBlcjtcbiAgICBwdWJsaWMgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHB1YmxpYyBjYW5DaGVja291dCA9IGZhbHNlO1xuICAgIHB1YmxpYyByZXF1aXJlX2xvZ2luID0gZmFsc2U7XG4gICAgcHVibGljIHN1YkNhbjogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBzdWJSZWFkeTogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBjaGFubmVsOiBhbnk7XG4gICAgcHVibGljIHN0ZXBzOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVEaXNjb3VudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgY2hlY2tvdXRWaWV3OiBDaGVja291dFZpZXdUeXBlID0gJ2xlZ2FjeSc7XG4gICAgcHVibGljIGNyZWRpdEFjY291bnRTaG93UHJpY2VzOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBsYXN0QXNzb2NpYXRlZERhdGE6IENoZWNrb3V0RGF0YVtdIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIG9wZW5TZWN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIGxhc3RQYXltZW50QWRkcmVzc0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBwYXltZW50QXV0b09wZW5lZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgYXV0b0Nsb3NlZFN0ZXBzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSBtYW51YWxseU9wZW5lZFN0ZXBzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSBjYXJ0Qm9vdHN0cmFwUmVjb3ZlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGNhcnRDaGVja291dEludmFsaWRhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgY2hlY2tvdXRJbnZhbGlkYXRpb25IYW5kbGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBoYW5kbGVDYXJ0Qm9vdHN0cmFwUmVjb3ZlcnkgPSAoKSA9PiB7XG4gICAgICAgIG5hdmlnYXRlSG9tZUFmdGVyQ2FydEJvb3RzdHJhcFJlY292ZXJ5KFxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIudXJsLFxuICAgICAgICAgICAgJ2NoZWNrb3V0JyxcbiAgICAgICAgICAgICgpID0+IHRoaXMuY2FydFNlcnZpY2UuY29uc3VtZUNhcnRCb290c3RyYXBSZWNvdmVyeSgpLFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpXG4gICAgICAgICk7XG4gICAgfTtcbiAgICBwcml2YXRlIGhhbmRsZUNhcnRDaGVja291dEludmFsaWRhdGlvbiA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRJbnZhbGlkYXRpb25IYW5kbGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMuY2hlY2tvdXRJbnZhbGlkYXRpb25IYW5kbGVkID0gaGFuZGxlSW52YWxpZGF0ZWRDaGVja291dE5hdmlnYXRpb24oXG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cmwsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5DaGVja291dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJSZWFkeT8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5pbnZhbGlkYXRlQ2hlY2tvdXRTdGF0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKVxuICAgICAgICApO1xuICAgIH07XG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzaG93VGF4TGVnZW5kOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNoaXBtZW50U3VtbWFyeTogeyBsYWJlbD86IHN0cmluZzsgZGV0YWlsPzogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgaGlkZU1vYmlsZVN1bW1hcnlCYXIgPSBmYWxzZTtcbiAgICBwcml2YXRlIHN1bW1hcnlPYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGZpbmlzaEJ1dHRvbkVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgc3RlcERpcnR5TWFwID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgcHVibGljIG1vZGFsUmVmOiBCc01vZGFsUmVmIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2xvc2VTdGVwTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBuYXZTdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGNoYW5uZWxSZWFkeSA9IGZhbHNlO1xuICAgIHByaXZhdGUgcGVuZGluZ0NoZWNrb3V0SW5pdCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGxvYWRpbmckID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIEBWaWV3Q2hpbGRyZW4oRGF0YUZvcm1FY0NvbXBvbmVudCkgcHJpdmF0ZSBkYXRhZm9ybUNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxEYXRhRm9ybUVjQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkcmVuKFBheW1lbnRFY0NvbXBvbmVudCkgcHJpdmF0ZSBwYXltZW50Q29tcG9uZW50czogUXVlcnlMaXN0PFBheW1lbnRFY0NvbXBvbmVudD47XG4gICAgQFZpZXdDaGlsZCgndW5zYXZlZENoYW5nZXNNb2RhbCcpIHByaXZhdGUgdW5zYXZlZENoYW5nZXNNb2RhbDogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjaGVja291dFNlcnZpY2U6IENoZWNrb3V0U2VydmljZSwgcHVibGljIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLCBwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLCBwdWJsaWMgcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjaGFubmVsU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UsIHB1YmxpYyBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2hpcHBpbmdQcmljZURpc3BsYXk6IFNoaXBwaW5nUHJpY2VEaXNwbGF5U2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHNlbzogU2VvU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNoZWNrb3V0VmlldyA9IHRoaXMuY29uc3RzLmdldENoZWNrb3V0VmlldygpO1xuICAgICAgICB0aGlzLmNvbnN0cy5jaGVja291dFZpZXckLnN1YnNjcmliZSh2aWV3ID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRWaWV3ID0gdmlldyB8fCAnbGVnYWN5JztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwgPSByZXNcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0ZXBzKClcbiAgICAgICAgICAgIHRoaXMuaGlkZVByaWNlcyA9IHJlcz8uaGlkZVByaWNlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZURpc2NvdW50cyA9IHJlcz8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRheGVzID0gcmVzPy5oaWRlVGF4ZXMgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dUYXhMZWdlbmQgPSByZXM/LnNob3dUYXhMZWdlbmQgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxSZWFkeSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGVQcmljZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ2hlY2tvdXRJbml0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2hlY2tvdXRJbml0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tvdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwRW5hYmxlZCgzKSlcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNoZWNrb3V0U2VvID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzaXRlTmFtZSA9IHRoaXMuc2VvLmdldFNpdGVOYW1lKCk7XG4gICAgICAgIHRoaXMuc2VvLnNldFRpdGxlKGBDaGVja291dCB8ICR7c2l0ZU5hbWV9YCk7XG4gICAgICAgIHRoaXMuc2VvLnNldERlc2NyaXB0aW9uKGBGaW5hbGl6w6EgdHUgY29tcHJhIGVuICR7c2l0ZU5hbWV9LmApO1xuICAgICAgICB0aGlzLnNlby5zZXRPZ1R5cGUoJ3dlYnNpdGUnKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0Tm9JbmRleCh0cnVlKTtcblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VvLnNldENhbm9uaWNhbCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jYXJ0Qm9vdHN0cmFwUmVjb3ZlcnlTdWJzY3JpcHRpb24gPSB0aGlzLmNhcnRTZXJ2aWNlLmNhcnRCb290c3RyYXBSZWNvdmVyeS5zdWJzY3JpYmUodGhpcy5oYW5kbGVDYXJ0Qm9vdHN0cmFwUmVjb3ZlcnkpO1xuICAgICAgICB0aGlzLmNhcnRDaGVja291dEludmFsaWRhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuY2FydFNlcnZpY2UuY2FydENoZWNrb3V0SW52YWxpZGF0aW9uLnN1YnNjcmliZSh0aGlzLmhhbmRsZUNhcnRDaGVja291dEludmFsaWRhdGlvbik7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2FydEJvb3RzdHJhcFJlY292ZXJ5KCk7XG4gICAgICAgIHRoaXMubmF2U3ViID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcvY2hlY2tvdXQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3BPbkVudGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YkNhbiA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmNhbkNoZWNrb3V0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShjb250YWluX2l0ZW1zID0+IHtcbiAgICAgICAgICAgIGlmICghY29udGFpbl9pdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuQ2hlY2tvdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hhbm5lbFJlYWR5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2hlY2tvdXRJbml0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDaGVja291dCgpO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5zdGF0ZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q2hlY2tvdXQoKSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgaGFzUGF5bWVudFN0ZXAgPSB0aGlzLnN0ZXBzLnNvbWUoc3RlcCA9PiBzdGVwLm5hbWUgPT09ICdwYXltZW50Jyk7XG4gICAgICAgICAgICBpZiAoIWhhc1BheW1lbnRTdGVwKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzRGF0YSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdhZGRyZXNzJyk7XG4gICAgICAgICAgICBpZiAoIWFkZHJlc3NEYXRhKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShhZGRyZXNzRGF0YSk7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0UGF5bWVudEFkZHJlc3NLZXkgPT09IGtleSkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5sYXN0UGF5bWVudEFkZHJlc3NLZXkgPSBrZXk7XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnN0YXRlJC5zdWJzY3JpYmUoc3RlcHMgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDaGVja291dCgpIHx8ICFzdGVwcykgcmV0dXJuO1xuICAgICAgICAgICAgc3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXN0ZXA/Lm5hbWUpIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoIXN0ZXAuaXNSZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmRlbGV0ZShzdGVwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU3RlcERpcnR5KHN0ZXAubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmhhcyhzdGVwLm5hbWUpICYmIHRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKHN0ZXAubmFtZSkgJiYgIXRoaXMubWFudWFsbHlPcGVuZWRTdGVwcy5oYXMoc3RlcC5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IHRoaXMub3BlblNlY3Rpb25zLmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHN0ZXAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmFkZChzdGVwLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UucGF5bWVudE1ldGhvZHMkLnN1YnNjcmliZShtZXRob2RzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q2hlY2tvdXQoKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHRoaXMucGF5bWVudEF1dG9PcGVuZWQpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghbWV0aG9kcyB8fCAhbWV0aG9kcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NoaXBtZW50U3RlcCA9IHRoaXMuc3RlcHMuc29tZShzdGVwID0+IHN0ZXAubmFtZSA9PT0gJ3NoaXBtZW50Jyk7XG4gICAgICAgICAgICBpZiAoaGFzU2hpcG1lbnRTdGVwICYmICF0aGlzLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIWhhc1NoaXBtZW50U3RlcCAmJiAhdGhpcy5pc1N0ZXBFbmFibGVkKCdwYXltZW50JykpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMoJ3BheW1lbnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlblNlY3Rpb25zLnB1c2goJ3BheW1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGF5bWVudEF1dG9PcGVuZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja291dFNlbygpO1xuICAgICAgICB0aGlzLmVjT25Jbml0KClcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5zaG93UHJpY2UkLnN1YnNjcmliZShzaG93UHJpY2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmFzb2NpYXRlZERhdGEkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMubGFzdEFzc29jaWF0ZWREYXRhID0gZGF0YTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnNjcm9sbFRvVG9wT25FbnRlcigpO1xuICAgICAgICB0aGlzLnNldHVwU3VtbWFyeU9ic2VydmVyKCk7XG4gICAgICAgIHRoaXMuZmluaXNoQnV0dG9uRWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjY2hlY2tvdXRGaW5pc2hCdG4nKTtcbiAgICAgICAgdGhpcy5ldmFsdWF0ZU1vYmlsZUJhclZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeU9ic2VydmVyKSB7XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnlPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnlPYnNlcnZlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maW5pc2hCdXR0b25FbCA9IG51bGw7XG4gICAgICAgIHRoaXMuc3ViQ2FuPy51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMuc3ViUmVhZHk/LnVuc3Vic2NyaWJlKClcbiAgICAgICAgdGhpcy5uYXZTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuY2FydEJvb3RzdHJhcFJlY292ZXJ5U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmNhcnRDaGVja291dEludmFsaWRhdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplQ2hlY2tvdXQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuQ2hlY2tvdXQgPSB0cnVlO1xuICAgICAgICBsZXQgc3RlcHM6IFN0ZXBJW10gPSBbXTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnY2hhbm5lbCcsIHRoaXMuY2hhbm5lbClcbiAgICAgICAgc3RlcHMucHVzaCh7IG5hbWU6ICdhZGRyZXNzJyB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nU2hpcHBpbmdTdGVwQWxsb3dlZCA/IG51bGwgOiBzdGVwcy5wdXNoKHsgbmFtZTogJ3NoaXBtZW50JyB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nUGF5bWVudFN0ZXBBbGxvd2VkID8gbnVsbCA6IHN0ZXBzLnB1c2goeyBuYW1lOiAncGF5bWVudCcgfSk7XG4gICAgICAgIC8qIHN0ZXBzLnB1c2goeyBuYW1lOiAnc2hpcG1lbnQnIH0pO1xuICAgICAgICBzdGVwcy5wdXNoKHsgbmFtZTogJ3BheW1lbnQnIH0pOyAqL1xuICAgICAgICAvL2NvbnNvbGUubG9nKHN0ZXBzKVxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5zZXRTdGVwcyhzdGVwcyk7XG4gICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q2hlY2tvdXQoKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGVwcGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDaGVja291dCgpICYmICh0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdTaGlwcGluZ1N0ZXBBbGxvd2VkICE9IHRydWUgfHwgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nUGF5bWVudFN0ZXBBbGxvd2VkICE9IHRydWUpKSB7XG4gICAgICAgICAgICB0aGlzLnN1YlJlYWR5ID0gdGhpcy5jaGVja291dFNlcnZpY2Uub25SZWFkeSQucGlwZShmaWx0ZXIocmVhZHkgPT4gcmVhZHkpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgcmVzID0+IHsgcmVzICYmIHRoaXMuZW5kQ2hlY2tvdXQoKSB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ29CYWNrID0gKCkgPT4gdGhpcy5zdGVwcGVyLnByZXZpb3VzKCk7XG5cbiAgICBpc1N0ZXBSZWFkeSA9IChzdGVwX25hbWUpID0+IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmlzU3RlcFJlYWR5KHN0ZXBfbmFtZSk7XG5cbiAgICBpc1N0ZXBEaXJ0eSA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiAhIXRoaXMuc3RlcERpcnR5TWFwLmdldChzdGVwTmFtZSk7XG5cbiAgICBpc1N0ZXBDb21wbGV0ZSA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB0aGlzLmlzU3RlcFJlYWR5KHN0ZXBOYW1lKSAmJiAhdGhpcy5pc1N0ZXBEaXJ0eShzdGVwTmFtZSk7XG5cbiAgICBvblN0ZXBEaXJ0eUNoYW5nZSA9IChzdGVwTmFtZTogc3RyaW5nLCBpc0RpcnR5OiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgaXNEaXJ0eSk7XG4gICAgfVxuXG4gICAgZW5kQ2hlY2tvdXQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmNvbXBsZXRlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiByZXMub2sgJiYgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydjaGVja291dC9vcmRlcl9zdWNjZXNzJ10pLFxuICAgICAgICAgICAgZXJyID0+IHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvcGVyYXRpb24tZXJyb3InKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgc2V0U3RlcHBlciA9ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3N0ZXBwZXInKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyID0gbmV3IFN0ZXBwZXIoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3N0ZXBwZXInKSwge1xuICAgICAgICAgICAgICAgICAgICBsaW5lYXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RlcHBlcigpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3RlcHBlcilcbiAgICB9XG5cbiAgICBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3RlcHBlcilcbiAgICAgICAgdGhpcy5zdGVwcGVyLm5leHQoKVxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3RlcHBlcilcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSlcbiAgICB9O1xuXG4gICAgZXJyb3IgPSAoZXJyb3JfdmFsdWUpID0+IHRoaXMudG9hc3RyU2VydmljZS5zaG93KGVycm9yX3ZhbHVlKTtcblxuICAgIGdldEljb24gPSAoZGF0YV9pdGVtOiBDaGVja291dERhdGEpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhX2l0ZW0udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY291cG9uJzogcmV0dXJuICdhc3NldHMvaW1hZ2VzL2NvdXBvbi5wbmcnO1xuICAgICAgICAgICAgY2FzZSAnZGlzY291bnQnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvZGlzY291bnQucG5nJztcbiAgICAgICAgICAgIGNhc2UgJ3NoaXBtZW50JzogcmV0dXJuICdhc3NldHMvaW1hZ2VzL2ljby1lbnZpby5wbmcnO1xuICAgICAgICAgICAgY2FzZSAnc3VidG90YWwnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvcHJvZHVjdHMucG5nJztcbiAgICAgICAgICAgIGNhc2UgJ3RvdGFsJzogcmV0dXJuICdhc3NldHMvaW1hZ2VzL2ljby1jYXJyaXRvLnBuZyc7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvLWNhcnJpdG8ucG5nJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRpYWxpemVTdGVwcyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xuICAgICAgICAvL0VsIHBhc28gZGUgZWxlZ2lyIGRpcmVjY2nDs24gc2llbXByZSBlc3RhXG4gICAgICAgIHRoaXMuc3RlcHMucHVzaCh7IGxhYmVsOiAnYmlsbGluZy1kZXRhaWxzJywgbmFtZTogJ2FkZHJlc3MnIH0pXG4gICAgICAgIC8vRWwgcGFzbyBkZSBlbGVnaXIgbWV0b2RvIGRlIGVudmlvXG4gICAgICAgIHRoaXMuY2hhbm5lbD8uaXNTa2lwcGluZ1NoaXBwaW5nU3RlcEFsbG93ZWQgPyBudWxsIDogdGhpcy5zdGVwcy5wdXNoKHsgbGFiZWw6ICdzaGlwbWVudC1tZXRob2QnLCBuYW1lOiAnc2hpcG1lbnQnIH0pXG4gICAgICAgIC8vRWwgcGFzbyBkZSBlbGVnaXIgbWV0b2RvIGRlIHBhZ29cbiAgICAgICAgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nUGF5bWVudFN0ZXBBbGxvd2VkID8gbnVsbCA6IHRoaXMuc3RlcHMucHVzaCh7IGxhYmVsOiAncGF5bWVudCcsIG5hbWU6ICdwYXltZW50JyB9KVxuICAgICAgICB0aGlzLnN0ZXBzID0gdGhpcy5zdGVwcy5tYXAoKHN0ZXAsIGluZGV4KSA9PiAoeyAuLi5zdGVwLCBzdGVwOiBpbmRleCArIDEgfSkpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3RlcHMpXG4gICAgICAgIGlmICh0aGlzLnN0ZXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMgPSBbdGhpcy5zdGVwc1swXS5uYW1lXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0ZXBFbmFibGVkID0gKHN0ZXBOdW1iZXI6IG51bWJlcikgPT4gdGhpcy5zdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5zdGVwID09IHN0ZXBOdW1iZXIpID8gdHJ1ZSA6IGZhbHNlXG5cbiAgICBnZXRDbGFzc1RvU3RlcHBlciA9IChpbmRleDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnbGluZWEnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwc1tpbmRleCArIDFdID8gJ3RleHQtY2VudGVyJyA6ICd0ZXh0LWVuZCdcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzTGVnYWN5Q2hlY2tvdXQgPSAoKSA9PiB0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZSc7XG5cbiAgICBnZXRTaW5nbGVTdGVwVGl0bGUgPSAoc3RlcDogU3RlcEkgJiB7IGxhYmVsPzogc3RyaW5nIH0pID0+XG4gICAgICAgIHN0ZXA/Lm5hbWUgPT09ICdhZGRyZXNzJyA/ICdhZGRyZXNzLXNlbGVjdGlvbicgOiBzdGVwPy5sYWJlbDtcblxuICAgIGdldFNpbmdsZVN1bW1hcnlMYWJlbCA9IChzdGVwOiBTdGVwSSAmIHsgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBpZiAoc3RlcD8ubmFtZSA9PT0gJ2FkZHJlc3MnKSByZXR1cm4gdGhpcy5nZXRBZGRyZXNzU3VtbWFyeUxhYmVsKCk7XG4gICAgICAgIGlmIChzdGVwPy5uYW1lID09PSAnc2hpcG1lbnQnKSByZXR1cm4gdGhpcy5zaGlwbWVudFN1bW1hcnk/LmxhYmVsIHx8ICcnO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZ2V0U2luZ2xlU3VtbWFyeVZhbHVlID0gKHN0ZXA6IFN0ZXBJICYgeyBsYWJlbD86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChzdGVwPy5uYW1lID09PSAnc2hpcG1lbnQnKSByZXR1cm4gdGhpcy5zaGlwbWVudFN1bW1hcnk/LmRldGFpbCB8fCAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RlcFN1bW1hcnkoc3RlcD8ubmFtZSk7XG4gICAgfVxuXG4gICAgaXNTdGVwRW5hYmxlZCA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLm5hbWUgPT09IHN0ZXBOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4IDw9IDApIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5jaGVja291dFZpZXcgPT09ICdzaW5nbGUnICYmIHN0ZXBOYW1lID09PSAncGF5bWVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzU3RlcFJlYWR5KCdhZGRyZXNzJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldlN0ZXAgPSB0aGlzLnN0ZXBzW2luZGV4IC0gMV07XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3RlcFJlYWR5KHByZXZTdGVwLm5hbWUpO1xuICAgIH1cblxuICAgIHRvZ2dsZVNlY3Rpb24gPSAoc3RlcE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdGVwRW5hYmxlZChzdGVwTmFtZSkpIHJldHVybjtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wZW5TZWN0aW9ucy5pbmRleE9mKHN0ZXBOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3RlcFJlYWR5KHN0ZXBOYW1lKSAmJiB0aGlzLmlzU3RlcERpcnR5KHN0ZXBOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0Nsb3NlU3RlcE5hbWUgPSBzdGVwTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5VbnNhdmVkQ2hhbmdlc01vZGFsKHRoaXMudW5zYXZlZENoYW5nZXNNb2RhbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlblNlY3Rpb25zLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYW51YWxseU9wZW5lZFN0ZXBzLmFkZChzdGVwTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvU2VjdGlvbihzdGVwTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnb1RvTmV4dFNlY3Rpb24gPSAoc3RlcE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc3RlcHMuZmluZEluZGV4KHN0ZXAgPT4gc3RlcC5uYW1lID09PSBzdGVwTmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEgfHwgIXRoaXMuc3RlcHNbaW5kZXggKyAxXSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXh0TmFtZSA9IHRoaXMuc3RlcHNbaW5kZXggKyAxXS5uYW1lO1xuICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IHRoaXMub3BlblNlY3Rpb25zLmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHN0ZXBOYW1lKTtcbiAgICAgICAgaWYgKCF0aGlzLm9wZW5TZWN0aW9ucy5pbmNsdWRlcyhuZXh0TmFtZSkpIHRoaXMub3BlblNlY3Rpb25zLnB1c2gobmV4dE5hbWUpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvU2VjdGlvbihuZXh0TmFtZSk7XG4gICAgfVxuXG4gICAgZ29Ub05leHRGcm9tQWRkcmVzcyA9ICgpID0+IHRoaXMuZ29Ub05leHRTZWN0aW9uKCdhZGRyZXNzJyk7XG5cbiAgICBpc1NlY3Rpb25PcGVuID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKHN0ZXBOYW1lKTtcblxuICAgIGdldFN1bW1hcnlMYWJlbCA9ICh0eXBlOiBDaGVja291dERhdGFbJ3R5cGUnXSwgaXRlbT86IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3Byb2R1Y3RzQmVmb3JlRGlzY291bnRzJzogcmV0dXJuICdwcm9kdWN0cy1iZWZvcmUtZGlzY291bnRzJztcbiAgICAgICAgICAgIGNhc2UgJ3N1YnRvdGFsJzogcmV0dXJuICdzdWJ0b3RhbCc7XG4gICAgICAgICAgICBjYXNlICdkaXNjb3VudCc6IHJldHVybiAnZGlzY291bnQnO1xuICAgICAgICAgICAgY2FzZSAncGF5bWVudE1ldGhvZEFkanVzdG1lbnQnOiByZXR1cm4gKGl0ZW0/LmFtb3VudCA/PyAwKSA8IDAgPyAncGF5bWVudC1tZXRob2QtZGlzY291bnQnIDogJ3BheW1lbnQtbWV0aG9kLXN1cmNoYXJnZSc7XG4gICAgICAgICAgICBjYXNlICdjb3Vwb24nOiByZXR1cm4gJ2NvdXBvbic7XG4gICAgICAgICAgICBjYXNlICdsaW5lRGlzY291bnQnOiByZXR1cm4gJ2xpbmUtZGlzY291bnRzJztcbiAgICAgICAgICAgIGNhc2UgJ3NoaXBtZW50JzogcmV0dXJuICdzaGlwbWVudCc7XG4gICAgICAgICAgICBjYXNlICd0YXhlcyc6XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS50YXhlc0luY2x1ZGVkSW5Ub3RhbCA9PT0gdHJ1ZSkgcmV0dXJuICd0YXhlcy1pbmNsdWRlZC1pbi10b3RhbCc7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS50YXhlc0luY2x1ZGVkSW5Ub3RhbCA9PT0gZmFsc2UpIHJldHVybiAndGF4ZXMnO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dUYXhMZWdlbmQgPyAnbmF0aW9uYWwtdGF4ZXMnIDogJ3RheGVzJztcbiAgICAgICAgICAgIGNhc2UgJ2NsaWVudFRheGVzJzogcmV0dXJuICdjbGllbnRUYXhlcyc7XG4gICAgICAgICAgICBjYXNlICd0b3RhbCc6IHJldHVybiAndG90YWwnO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIHR5cGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTdW1tYXJ5RGF0YSA9IChkYXRhOiBDaGVja291dERhdGFbXSkgPT4ge1xuICAgICAgICBpZiAoIWRhdGEpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuIGRhdGE7XG4gICAgICAgIGxldCBzdW1tYXJ5RGF0YSA9IGRhdGE7XG4gICAgICAgIGNvbnN0IGhhc1NoaXBtZW50ID0gc3VtbWFyeURhdGEuc29tZShpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3NoaXBtZW50Jyk7XG4gICAgICAgIGlmICghaGFzU2hpcG1lbnQgJiYgdGhpcy5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKSkge1xuICAgICAgICAgICAgY29uc3Qgb3JkZXJUb3RhbHMgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRPcmRlcigpPy50b3RhbHM7XG4gICAgICAgICAgICBjb25zdCBzaGlwbWVudEFtb3VudCA9IHRoaXMuc2hpcHBpbmdQcmljZURpc3BsYXkubm9ybWFsaXplUHJpY2VWYWx1ZShvcmRlclRvdGFscz8uc2hpcHBpbmcpO1xuICAgICAgICAgICAgaWYgKHNoaXBtZW50QW1vdW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGlwbWVudEl0ZW06IENoZWNrb3V0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiBzaGlwbWVudEFtb3VudFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxJbmRleCA9IHN1bW1hcnlEYXRhLmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlEYXRhID0gWy4uLnN1bW1hcnlEYXRhLCBzaGlwbWVudEl0ZW1dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGB0b3RhbGAgeWEgZXMgZWwgaW1wb3J0ZSBmaW5hbCBpbmZvcm1hZG8gcG9yIGJhY2tlbmQuXG4gICAgICAgICAgICAgICAgICAgIC8vIFPDs2xvIHNlIGluY29ycG9yYSBlbCBlbnbDrW8gZmFsdGFudGUsIHNpbiByZWNvbnN0cnVpciBuaVxuICAgICAgICAgICAgICAgICAgICAvLyBtb2RpZmljYXIgZXNlIHRvdGFsLlxuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5RGF0YSA9IFsuLi5zdW1tYXJ5RGF0YS5zbGljZSgwLCB0b3RhbEluZGV4KSwgc2hpcG1lbnRJdGVtLCAuLi5zdW1tYXJ5RGF0YS5zbGljZSh0b3RhbEluZGV4KV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1bW1hcnlEYXRhID0gdGhpcy5hZ2dyZWdhdGVEaXNjb3VudHMoc3VtbWFyeURhdGEpXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlICE9PSAncHJvZHVjdHNCZWZvcmVEaXNjb3VudHMnICYmIGl0ZW0udHlwZSAhPT0gJ2xpbmVEaXNjb3VudCcpO1xuXG4gICAgICAgIGNvbnN0IGluY2x1ZGVkVGF4ZXMgPSBzdW1tYXJ5RGF0YS5maWx0ZXIoaXRlbSA9PlxuICAgICAgICAgICAgaXRlbS50eXBlID09PSAndGF4ZXMnICYmIGl0ZW0udGF4ZXNJbmNsdWRlZEluVG90YWwgPT09IHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWluY2x1ZGVkVGF4ZXMubGVuZ3RoKSByZXR1cm4gc3VtbWFyeURhdGE7XG5cbiAgICAgICAgY29uc3Qgd2l0aG91dEluY2x1ZGVkVGF4ZXMgPSBzdW1tYXJ5RGF0YS5maWx0ZXIoaXRlbSA9PlxuICAgICAgICAgICAgIShpdGVtLnR5cGUgPT09ICd0YXhlcycgJiYgaXRlbS50YXhlc0luY2x1ZGVkSW5Ub3RhbCA9PT0gdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdG90YWxJbmRleCA9IHdpdGhvdXRJbmNsdWRlZFRheGVzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG5cbiAgICAgICAgaWYgKHRvdGFsSW5kZXggPT09IC0xKSByZXR1cm4gWy4uLndpdGhvdXRJbmNsdWRlZFRheGVzLCAuLi5pbmNsdWRlZFRheGVzXTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4ud2l0aG91dEluY2x1ZGVkVGF4ZXMuc2xpY2UoMCwgdG90YWxJbmRleCArIDEpLFxuICAgICAgICAgICAgLi4uaW5jbHVkZWRUYXhlcyxcbiAgICAgICAgICAgIC4uLndpdGhvdXRJbmNsdWRlZFRheGVzLnNsaWNlKHRvdGFsSW5kZXggKyAxKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldFN1bW1hcnlBbW91bnRWaWV3ID0gKGl0ZW06IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFNoaXBtZW50QW1vdW50ID0gaXRlbT8udHlwZSA9PT0gJ3NoaXBtZW50JyA/IHRoaXMuZ2V0U2hpcG1lbnRPcmlnaW5hbEFtb3VudCgpIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hpcHBpbmdQcmljZURpc3BsYXkuYnVpbGRWaWV3TW9kZWwoaXRlbT8uYW1vdW50LCBvcmlnaW5hbFNoaXBtZW50QW1vdW50KTtcbiAgICB9XG5cbiAgICBnZXRUb3RhbEFtb3VudCA9IChkYXRhOiBDaGVja291dERhdGFbXSkgPT4ge1xuICAgICAgICBjb25zdCBzdW1tYXJ5RGF0YSA9IHRoaXMuZ2V0U3VtbWFyeURhdGEoZGF0YSk7XG4gICAgICAgIGlmICghc3VtbWFyeURhdGEgfHwgIXN1bW1hcnlEYXRhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHRvdGFsSXRlbSA9IHN1bW1hcnlEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICd0b3RhbCcpO1xuICAgICAgICByZXR1cm4gdG90YWxJdGVtID8gdG90YWxJdGVtLmFtb3VudCA6IG51bGw7XG4gICAgfVxuXG4gICAgc2hvdWxkU2hvd1N1bW1hcnlJdGVtID0gKGl0ZW06IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3Byb2R1Y3RzQmVmb3JlRGlzY291bnRzJyB8fCBpdGVtLnR5cGUgPT09ICdsaW5lRGlzY291bnQnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICgoaXRlbS50eXBlID09PSAnZGlzY291bnQnIHx8IGl0ZW0udHlwZSA9PT0gJ2NvdXBvbicpICYmIGl0ZW0uYW1vdW50ID09IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKChpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJykgJiYgdGhpcy5oaWRlRGlzY291bnRzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdwYXltZW50TWV0aG9kQWRqdXN0bWVudCcgJiYgKGl0ZW0uYW1vdW50ID09PSAwIHx8IGl0ZW0uYW1vdW50ID09IG51bGwpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0YXhlcycgJiYgKHRoaXMuaGlkZVRheGVzIHx8IGl0ZW0uYW1vdW50ID09IDApKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjbGllbnRUYXhlcycgJiYgKHRoaXMuaGlkZVRheGVzIHx8IGl0ZW0uYW1vdW50ID09IDApKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEhpZGVTdW1tYXJ5U3VidG90YWwoaXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0QWRkcmVzc1N1bW1hcnlMYWJlbCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcERhdGE6IGFueSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdhZGRyZXNzJyBhcyBhbnkpO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gc3RlcERhdGE/LnNoaXBwaW5nQWRkcmVzcyB8fCBzdGVwRGF0YT8uc2VsZWN0ZWQ/LnNoaXBwaW5nQWRkcmVzcztcbiAgICAgICAgY29uc3QgY29udGFjdCA9IGFkZHJlc3M/LmFkZHJlc3NDb250YWN0IHx8IGFkZHJlc3M/LmNvbnRhY3QgfHwgYWRkcmVzcyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIFtjb250YWN0LmZpcnN0TmFtZSwgY29udGFjdC5sYXN0TmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBnZXRTdGVwU3VtbWFyeSA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXBEYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YShzdGVwTmFtZSBhcyBhbnkpO1xuICAgICAgICBpZiAoIXN0ZXBEYXRhKSByZXR1cm4gJyc7XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ2FkZHJlc3MnKSB7XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gc3RlcERhdGEuc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zZWxlY3RlZD8uc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zaGlwcGluZ0FkZHJlc3M7XG4gICAgICAgICAgICBpZiAoIWFkZHJlc3MpIHJldHVybiAnJztcbiAgICAgICAgICAgIGNvbnN0IG1haW4gPSBbYWRkcmVzcy5zdHJlZXQsIGFkZHJlc3MuY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDCtyAnKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lvbiA9IFthZGRyZXNzLnByb3ZpbmNlQ29kZSB8fCBhZGRyZXNzLnByb3ZpbmNlLCBhZGRyZXNzLmNvdW50cnlDb2RlIHx8IGFkZHJlc3MuY291bnRyeV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICByZXR1cm4gW21haW4sIHJlZ2lvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDigJQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAnc2hpcG1lbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRob2RMYWJlbCA9IHN0ZXBEYXRhLm1ldGhvZD8ubmFtZSB8fCBzdGVwRGF0YS5tZXRob2RfbmFtZSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyYWN0TGFiZWwgPSBzdGVwRGF0YS5jb250cmFjdD8ubmFtZSB8fCBzdGVwRGF0YS5jb250cmFjdF9uYW1lIHx8IHN0ZXBEYXRhLm5hbWUgfHwgc3RlcERhdGEuY29udHJhY3QgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gW21ldGhvZExhYmVsLCBjb250cmFjdExhYmVsXS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ3BheW1lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RlcERhdGEubmFtZSB8fCBzdGVwRGF0YS5jb2RlIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBzZXRTaGlwbWVudFN1bW1hcnkgPSAoc3VtbWFyeTogeyBsYWJlbD86IHN0cmluZzsgZGV0YWlsPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgY29uc3QgaGFzTGFiZWwgPSBCb29sZWFuKHN1bW1hcnk/LmxhYmVsKTtcbiAgICAgICAgY29uc3QgaGFzRGV0YWlsID0gQm9vbGVhbihzdW1tYXJ5Py5kZXRhaWwpO1xuICAgICAgICB0aGlzLnNoaXBtZW50U3VtbWFyeSA9IGhhc0xhYmVsIHx8IGhhc0RldGFpbCA/IHN1bW1hcnkgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2hpcG1lbnRPcmlnaW5hbEFtb3VudCA9ICgpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3Qgc2hpcG1lbnRTdGVwRGF0YTogYW55ID0gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ3NoaXBtZW50JyBhcyBhbnkpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5ub3JtYWxpemVQcmljZVZhbHVlKFxuICAgICAgICAgICAgc2hpcG1lbnRTdGVwRGF0YT8ub3JpZ2luYWxQcmljZSA/P1xuICAgICAgICAgICAgc2hpcG1lbnRTdGVwRGF0YT8uY29udHJhY3Q/Lm9yaWdpbmFsUHJpY2UgPz9cbiAgICAgICAgICAgIHNoaXBtZW50U3RlcERhdGE/LnNlbGVjdGVkPy5jb250cmFjdD8ub3JpZ2luYWxQcmljZSA/P1xuICAgICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWdncmVnYXRlRGlzY291bnRzKGRhdGE6IENoZWNrb3V0RGF0YVtdKSB7XG4gICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHJldHVybiBbXTtcbiAgICAgICAgY29uc3QgZGlzY291bnRUb3RhbCA9IGRhdGFcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIChjdXJyLmFtb3VudCB8fCAwKSwgMCk7XG4gICAgICAgIGNvbnN0IGNvdXBvblRvdGFsID0gZGF0YVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2NvdXBvbicpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIChjdXJyLmFtb3VudCB8fCAwKSwgMCk7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT09ICdkaXNjb3VudCcgJiYgaXRlbS50eXBlICE9PSAnY291cG9uJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGlkZURpc2NvdW50cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXh0cmFzOiBDaGVja291dERhdGFbXSA9IFtdO1xuICAgICAgICBpZiAoZGlzY291bnRUb3RhbCAhPT0gMCkge1xuICAgICAgICAgICAgZXh0cmFzLnB1c2goeyB0eXBlOiAnZGlzY291bnQnLCBuYW1lOiAnZGlzY291bnQnLCBhbW91bnQ6IGRpc2NvdW50VG90YWwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdXBvblRvdGFsICE9PSAwKSB7XG4gICAgICAgICAgICBleHRyYXMucHVzaCh7IHR5cGU6ICdjb3Vwb24nLCBuYW1lOiAnY291cG9uJywgYW1vdW50OiBjb3Vwb25Ub3RhbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4dHJhcy5sZW5ndGgpIHJldHVybiBmaWx0ZXJlZDtcblxuICAgICAgICBjb25zdCBzdWJ0b3RhbEluZGV4ID0gZmlsdGVyZWQuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS50eXBlID09PSAnc3VidG90YWwnKTtcbiAgICAgICAgaWYgKHN1YnRvdGFsSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uZmlsdGVyZWRdO1xuICAgICAgICAgICAgcmVzdWx0LnNwbGljZShzdWJ0b3RhbEluZGV4ICsgMSwgMCwgLi4uZXh0cmFzKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gZGF0YS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJyk7XG4gICAgICAgIGlmIChmaXJzdEluZGV4ID09PSAtMSkgcmV0dXJuIFsuLi5maWx0ZXJlZCwgLi4uZXh0cmFzXTtcbiAgICAgICAgY29uc3QgaW5zZXJ0QXQgPSBkYXRhXG4gICAgICAgICAgICAuc2xpY2UoMCwgZmlyc3RJbmRleClcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT09ICdkaXNjb3VudCcgJiYgaXRlbS50eXBlICE9PSAnY291cG9uJykubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uZmlsdGVyZWRdO1xuICAgICAgICByZXN1bHQuc3BsaWNlKGluc2VydEF0LCAwLCAuLi5leHRyYXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdWxkSGlkZVN1bW1hcnlTdWJ0b3RhbChpdGVtOiBDaGVja291dERhdGEpIHtcbiAgICAgICAgaWYgKGl0ZW0/LnR5cGUgIT09ICdzdWJ0b3RhbCcpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMubGFzdEFzc29jaWF0ZWREYXRhO1xuICAgICAgICBpZiAoIWRhdGE/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBzdW1tYXJ5RGF0YSA9IHRoaXMuZ2V0U3VtbWFyeURhdGEoZGF0YSk7XG4gICAgICAgIGNvbnN0IHRvdGFsSXRlbSA9IHN1bW1hcnlEYXRhLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgIHJldHVybiAhIXRvdGFsSXRlbSAmJiBpdGVtLmFtb3VudCA9PT0gdG90YWxJdGVtLmFtb3VudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbFRvU2VjdGlvbihzdGVwTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCFyb290KSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gcm9vdC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zdGVwPVxcXCIke3N0ZXBOYW1lfVxcXCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXNlY3Rpb24pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IHNlY3Rpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IE1hdGgubWF4KDAsIHRvcCAtIG9mZnNldCksIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgfSwgNTApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2Nyb2xsVG9Ub3BPbkVudGVyKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgbGVmdDogMCwgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFN1bW1hcnlPYnNlcnZlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuO1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICghcm9vdCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaW5pc2hCdG4gPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNjaGVja291dEZpbmlzaEJ0bicpO1xuICAgICAgICBpZiAoIWZpbmlzaEJ0bikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc3VtbWFyeU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICAgICAgICB0aGlzLmhpZGVNb2JpbGVTdW1tYXJ5QmFyID0gISFlbnRyeSAmJiBlbnRyeS5pc0ludGVyc2VjdGluZztcbiAgICAgICAgfSwgeyByb290TWFyZ2luOiAnMHB4IDBweCAtMTIwcHggMHB4JywgdGhyZXNob2xkOiAwIH0pO1xuXG4gICAgICAgIHRoaXMuc3VtbWFyeU9ic2VydmVyLm9ic2VydmUoZmluaXNoQnRuKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgICBldmFsdWF0ZU1vYmlsZUJhclZpc2liaWxpdHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmZpbmlzaEJ1dHRvbkVsKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvbkVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmluaXNoQnV0dG9uRWwpIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5maW5pc2hCdXR0b25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMDtcbiAgICAgICAgdGhpcy5oaWRlTW9iaWxlU3VtbWFyeUJhciA9IHJlY3QudG9wIDwgKHZpZXdwb3J0SGVpZ2h0IC0gODApO1xuICAgIH1cblxuICAgIGFyZUFsbFN0ZXBzUmVhZHkgPSAoc3RlcHM6IHsgaXNSZWFkeTogKCkgPT4gYm9vbGVhbjsgbmFtZT86IHN0cmluZyB9W10pID0+IHtcbiAgICAgICAgaWYgKCFzdGVwcyB8fCAhc3RlcHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdGVwcy5ldmVyeShzdGVwID0+IHtcbiAgICAgICAgICAgIGlmICghc3RlcC5pc1JlYWR5KCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghc3RlcC5uYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc1N0ZXBEaXJ0eShzdGVwLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG91bGRIaWRlRmluaXNoQnV0dG9uID0gKHN0ZXBzOiB7IGlzUmVhZHk6ICgpID0+IGJvb2xlYW4gfVtdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmFyZUFsbFN0ZXBzUmVhZHkoc3RlcHMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHBheW1lbnREYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgncGF5bWVudCcgYXMgYW55KTtcbiAgICAgICAgcmV0dXJuICEhcGF5bWVudERhdGE/LmF1dG9Db21wbGV0ZTtcbiAgICB9XG5cbiAgICBvcGVuVW5zYXZlZENoYW5nZXNNb2RhbCA9ICh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMucGVuZGluZ0Nsb3NlU3RlcE5hbWUpIHJldHVybjtcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIHtcbiAgICAgICAgICAgIGNsYXNzOiAnbW9kYWwtZGlhbG9nLWNlbnRlcmVkIGNoZWNrb3V0LXVuc2F2ZWQtbW9kYWwnLFxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbmNlbFVuc2F2ZWRDbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMubW9kYWxSZWY/LmhpZGUoKTtcbiAgICB9XG5cbiAgICBjb25maXJtVW5zYXZlZERpc2NhcmQgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBOYW1lID0gdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZGlzY2FyZFN0ZXBDaGFuZ2VzKHN0ZXBOYW1lKTtcbiAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMgPSB0aGlzLm9wZW5TZWN0aW9ucy5maWx0ZXIobmFtZSA9PiBuYW1lICE9PSBzdGVwTmFtZSk7XG4gICAgICAgIHRoaXMubW9kYWxSZWY/LmhpZGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2NhcmRTdGVwQ2hhbmdlcyhzdGVwTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ2FkZHJlc3MnKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhZm9ybSA9IHRoaXMuZGF0YWZvcm1Db21wb25lbnRzPy5maXJzdDtcbiAgICAgICAgICAgIGlmIChkYXRhZm9ybSkge1xuICAgICAgICAgICAgICAgIGRhdGFmb3JtLmRpc2NhcmRDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXJ0eU1hcC5zZXQoc3RlcE5hbWUsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcE5hbWUgPT09ICdwYXltZW50Jykge1xuICAgICAgICAgICAgY29uc3QgcGF5bWVudCA9IHRoaXMucGF5bWVudENvbXBvbmVudHM/LmZpcnN0O1xuICAgICAgICAgICAgaWYgKHBheW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwYXltZW50LmRpc2NhcmRDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXJ0eU1hcC5zZXQoc3RlcE5hbWUsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0ZXBEaXJ0eU1hcC5zZXQoc3RlcE5hbWUsIGZhbHNlKTtcbiAgICB9XG59XG4iXX0=