ng-easycommerce 0.1.1 → 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 (115) hide show
  1. package/README.md +14 -0
  2. package/assets/ec-i18n/ct.json +4 -0
  3. package/assets/ec-i18n/en.json +4 -0
  4. package/assets/ec-i18n/es.json +4 -0
  5. package/assets/ec-i18n/fr.json +4 -0
  6. package/assets/ec-i18n/gl.json +4 -0
  7. package/assets/ec-i18n/pr.json +4 -0
  8. package/bundles/ng-easycommerce.umd.js +5191 -3521
  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/account-ec/order-ec/order-ec.component.js +2 -2
  15. package/esm2015/lib/ec-component/cart-bootstrap-navigation.js +27 -0
  16. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +11 -1
  17. package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +28 -3
  18. package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +185 -13
  19. package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
  20. package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +26 -9
  21. package/esm2015/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
  22. package/esm2015/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +4 -2
  23. package/esm2015/lib/ec-component/coupon-ec/coupon-ec.component.js +6 -1
  24. package/esm2015/lib/guards/able-buyer-guard.service.js +2 -2
  25. package/esm2015/lib/guards/auth-guard.service.js +2 -2
  26. package/esm2015/lib/guards/checkout-ready.service.js +3 -3
  27. package/esm2015/lib/guards/loggedin-guard.service.js +2 -2
  28. package/esm2015/lib/guards/user-role-guard.service.js +2 -2
  29. package/esm2015/lib/interfaces/checkout-data.js +1 -1
  30. package/esm2015/lib/services/account/orders.service.js +6 -4
  31. package/esm2015/lib/services/auth.service.js +4 -3
  32. package/esm2015/lib/services/captcha.service.js +6 -4
  33. package/esm2015/lib/services/cart.service.js +1194 -74
  34. package/esm2015/lib/services/channel-config.service.js +4 -6
  35. package/esm2015/lib/services/checkout/addressing.service.js +65 -9
  36. package/esm2015/lib/services/checkout/checkout.service.js +58 -9
  37. package/esm2015/lib/services/checkout/error-handler.service.js +4 -3
  38. package/esm2015/lib/services/checkout/payment.service.js +35 -15
  39. package/esm2015/lib/services/checkout/shipment.service.js +54 -3
  40. package/esm2015/lib/services/concatenated-associations.service.js +4 -3
  41. package/esm2015/lib/services/currency.service.js +5 -3
  42. package/esm2015/lib/services/filters.service.js +2 -2
  43. package/esm2015/lib/services/footer/footer.service.js +4 -3
  44. package/esm2015/lib/services/gift-card.service.js +56 -5
  45. package/esm2015/lib/services/parameters.service.js +5 -3
  46. package/esm2015/lib/services/reviews.service.js +5 -4
  47. package/esm2015/lib/services/seo.service.js +4 -5
  48. package/esm2015/lib/services/stores.service.js +4 -3
  49. package/esm2015/lib/services/wishlist.service.js +3 -4
  50. package/esm2015/lib/utils/analytics/google-analytics.service.js +1 -1
  51. package/esm2015/lib/utils/order-util.service.js +22 -2
  52. package/esm2015/lib/utils/price-presentation.service.js +2 -3
  53. package/esm2015/lib/utils/shipping-price-display.service.js +2 -3
  54. package/esm5/lib/api/connection.service.js +2 -2
  55. package/esm5/lib/core.consts.js +4 -5
  56. package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
  57. package/esm5/lib/ec-component/cart-bootstrap-navigation.js +27 -0
  58. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +11 -1
  59. package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +28 -3
  60. package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +206 -12
  61. package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
  62. package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +31 -14
  63. package/esm5/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
  64. package/esm5/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +5 -3
  65. package/esm5/lib/ec-component/coupon-ec/coupon-ec.component.js +6 -1
  66. package/esm5/lib/guards/able-buyer-guard.service.js +2 -2
  67. package/esm5/lib/guards/auth-guard.service.js +2 -2
  68. package/esm5/lib/guards/checkout-ready.service.js +3 -3
  69. package/esm5/lib/guards/loggedin-guard.service.js +2 -2
  70. package/esm5/lib/guards/user-role-guard.service.js +2 -2
  71. package/esm5/lib/interfaces/checkout-data.js +1 -1
  72. package/esm5/lib/services/account/orders.service.js +6 -4
  73. package/esm5/lib/services/auth.service.js +4 -3
  74. package/esm5/lib/services/captcha.service.js +6 -4
  75. package/esm5/lib/services/cart.service.js +1243 -94
  76. package/esm5/lib/services/channel-config.service.js +4 -6
  77. package/esm5/lib/services/checkout/addressing.service.js +65 -9
  78. package/esm5/lib/services/checkout/checkout.service.js +65 -13
  79. package/esm5/lib/services/checkout/error-handler.service.js +4 -3
  80. package/esm5/lib/services/checkout/payment.service.js +29 -11
  81. package/esm5/lib/services/checkout/shipment.service.js +58 -7
  82. package/esm5/lib/services/concatenated-associations.service.js +4 -3
  83. package/esm5/lib/services/currency.service.js +5 -3
  84. package/esm5/lib/services/filters.service.js +2 -2
  85. package/esm5/lib/services/footer/footer.service.js +4 -3
  86. package/esm5/lib/services/gift-card.service.js +59 -5
  87. package/esm5/lib/services/parameters.service.js +5 -3
  88. package/esm5/lib/services/reviews.service.js +5 -4
  89. package/esm5/lib/services/seo.service.js +4 -5
  90. package/esm5/lib/services/stores.service.js +4 -3
  91. package/esm5/lib/services/wishlist.service.js +3 -4
  92. package/esm5/lib/utils/analytics/google-analytics.service.js +1 -1
  93. package/esm5/lib/utils/order-util.service.js +22 -2
  94. package/esm5/lib/utils/price-presentation.service.js +2 -3
  95. package/esm5/lib/utils/shipping-price-display.service.js +2 -3
  96. package/fesm2015/ng-easycommerce.js +4360 -2745
  97. package/fesm2015/ng-easycommerce.js.map +1 -1
  98. package/fesm5/ng-easycommerce.js +5193 -3523
  99. package/fesm5/ng-easycommerce.js.map +1 -1
  100. package/lib/ec-component/cart-bootstrap-navigation.d.ts +7 -0
  101. package/lib/ec-component/cart-ec/cart-ec.component.d.ts +5 -2
  102. package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +6 -1
  103. package/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.d.ts +27 -3
  104. package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +1 -1
  105. package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +3 -0
  106. package/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.d.ts +3 -0
  107. package/lib/interfaces/checkout-data.d.ts +6 -1
  108. package/lib/services/cart.service.d.ts +123 -7
  109. package/lib/services/checkout/addressing.service.d.ts +1 -1
  110. package/lib/services/checkout/checkout.service.d.ts +3 -0
  111. package/lib/services/checkout/shipment.service.d.ts +2 -2
  112. package/lib/services/gift-card.service.d.ts +1 -0
  113. package/lib/utils/order-util.service.d.ts +1 -0
  114. package/ng-easycommerce.metadata.json +1 -1
  115. package/package.json +1 -1
@@ -25,8 +25,9 @@ import * as moment from "moment";
25
25
  import { ChannelConfigService } from './channel-config.service';
26
26
  import { CartService } from './cart.service';
27
27
  import * as i0 from "@angular/core";
28
- import * as i1 from "../../public-api";
28
+ import * as i1 from "../api/connection.service";
29
29
  import * as i2 from "ngx-toastr";
30
+ import * as i3 from "../core.consts";
30
31
  let AuthService = class AuthService {
31
32
  constructor(connection, toastrService, constants, injector) {
32
33
  this.connection = connection;
@@ -342,11 +343,11 @@ AuthService.ctorParameters = () => [
342
343
  { type: Constants },
343
344
  { type: Injector }
344
345
  ];
345
- AuthService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthService_Factory() { return new i1.AuthService(i0.ɵɵinject(i1.ConnectionService), i0.ɵɵinject(i2.ToastrService), i0.ɵɵinject(i1.Constants), i0.ɵɵinject(i0.INJECTOR)); }, token: i1.AuthService, providedIn: "root" });
346
+ AuthService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthService_Factory() { return new AuthService(i0.ɵɵinject(i1.ConnectionService), i0.ɵɵinject(i2.ToastrService), i0.ɵɵinject(i3.Constants), i0.ɵɵinject(i0.INJECTOR)); }, token: AuthService, providedIn: "root" });
346
347
  AuthService = __decorate([
347
348
  Injectable({
348
349
  providedIn: 'root'
349
350
  })
350
351
  ], AuthService);
351
352
  export { AuthService };
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBTzdDLElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVc7SUEwQ3BCLFlBQW9CLFVBQTZCLEVBQ3JDLGFBQTRCLEVBQzVCLFNBQW9CLEVBQ3BCLFFBQWtCO1FBSFYsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDckMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBM0NiLGNBQVMsR0FBRyxXQUFXLENBQUE7UUFDdkIsa0JBQWEsR0FBRyxlQUFlLENBQUE7UUFD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VSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLFlBQVksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRU8sZUFBZTtRQUNuQixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FnSEosQ0FBQTs7WUFsVW1DLGlCQUFpQjtZQUN0QixhQUFhO1lBQ2pCLFNBQVM7WUFDVixRQUFROzs7QUE3Q3JCLFdBQVc7SUFIdkIsVUFBVSxDQUFDO1FBQ1IsVUFBVSxFQUFFLE1BQU07S0FDckIsQ0FBQztHQUNXLFdBQVcsQ0E0V3ZCO1NBNVdZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzL3VzZXInO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL29mJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2NvcmUuY29uc3RzJztcbmltcG9ydCB7IG1hcCwgbWFwVG8sIGNhdGNoRXJyb3IsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy1jb21wYXQvb3BlcmF0b3IvdGFrZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4vY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVc2VyUm9sZVR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL3VzZXItcm9sZS10eXBlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IEpXVF9UT0tFTiA9ICdKV1RfVE9LRU4nXG4gICAgcHJpdmF0ZSByZWFkb25seSBSRUZSRVNIX1RPS0VOID0gJ1JFRlJFU0hfVE9LRU4nXG4gICAgcHJpdmF0ZSByZWFkb25seSBFWFBJUkFURVNfSU4gPSAnRVhQSVJBVEVTX0lOJ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVVNFUiA9ICdVU0VSJ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgTUFJTCA9ICdtYWlsJ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgTE9DQUxFID0gJ0xPQ0FMRSdcbiAgICBwcml2YXRlIHJlYWRvbmx5IENIQU5ORUwgPSAnQ0hBTk5FTCdcbiAgICBwcml2YXRlIHJlYWRvbmx5IENVU1RPTUVSID0gJ0NVU1RPTUVSJ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgQ0hBTk5FTFNFTExFUiA9ICdDSEFOTkVMU0VMTEVSJ1xuXG4gICAgLyogYWN0aXZlQ2hhbm5lbFN3aXRjaD8gKi9cbiAgICBwcml2YXRlIGFjdGl2ZUNoYW5uZWxDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZVxuICAgIHByaXZhdGUgbG9nZ2VkSW5TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGZhbHNlKVxuICAgIHByaXZhdGUgbG9nZ2luZ0luU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihmYWxzZSlcbiAgICBwcml2YXRlIHVzZXJJblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXI+KG51bGwpXG4gICAgcHJpdmF0ZSBjaGFubmVsc1VzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pXG4gICAgLyogcHJpdmF0ZSBjdXN0b21lclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCkgKi9cbiAgICBwcml2YXRlIHVzZXI6IFVzZXIgPSBudWxsXG5cbiAgICAvLyBBUElTXG4gICAgcHVibGljIHRva2VuQXBpID0gKCkgPT4gJ3Nob3AtYXBpL2xvZ2luX2NoZWNrJztcbiAgICBwdWJsaWMgcmVnaXN0ZXJBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcmVnaXN0ZXInO1xuICAgIHB1YmxpYyByZWdpc3Rlcldob2xlc2FsZXJBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcmVnaXN0ZXItd2hvbGVzYWxlcic7XG4gICAgcHVibGljIGNvbmZpcm1BY2NvdW50QXBpID0gKHRva2VuKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvdmVyaWZ5LWFjY291bnQ/dG9rZW49JyArIHRva2VuO1xuICAgIHB1YmxpYyByZXNldFBhc3N3b3JkQXBpID0gKHRva2VuKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcGFzc3dvcmQtcmVzZXQvJyArIHRva2VuO1xuICAgIHB1YmxpYyByZWNvdmVyUGFzc3dvcmRBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcmVxdWVzdC1wYXNzd29yZC1yZXNldCc7XG4gICAgcHVibGljIGNvdW50cmllc0FwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdGFudHMuZ2V0Q2hhbm5lbCgpICsgJy9jb3VudHJpZXMnO1xuXG4gICAgLy8gQXRyaWJ1dG9zIHV0aWxlc1xuICAgIHB1YmxpYyB3YWl0aW5nID0gZmFsc2U7XG4gICAgcHVibGljIGxvZ2dlZEluID0gdGhpcy5sb2dnZWRJblN1YmplY3QuYXNPYnNlcnZhYmxlKClcbiAgICBwdWJsaWMgbG9nZ2luZ0luID0gdGhpcy5sb2dnaW5nSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG4gICAgcHVibGljIHVzZXJBdXRoID0gdGhpcy51c2VySW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG4gICAgcHVibGljIGNoYW5uZWxzVXNlciA9IHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5hc09ic2VydmFibGUoKVxuICAgIC8qIHByaXZhdGUgY3VzdG9tZXIgPSB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QuYXNPYnNlcnZhYmxlKCkgKi9cbiAgICBwcml2YXRlIGN1c3RvbWVyID0gbnVsbFxuICAgIHB1YmxpYyBjaGFubmVsID0gbnVsbFxuICAgIHB1YmxpYyBjaGFubmVscyA9IFtdXG4gICAgcHJpdmF0ZSBob21lUmVzb2x2ZXIgPSBudWxsXG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uc3RhbnRzOiBDb25zdGFudHMsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5sb2dnZWRJblN1YmplY3QubmV4dCh0cnVlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIERldnVlbHZlIHVuIG9ic2VydmFibGVcbiAgICAgKiBAcGFyYW0gdXNlciBPYmpldG8gcXVlIGNvbnRpZW5lIHVzZXJuYW1lIHkgcGFzc3dvcmQgXG4gICAgICovXG4gICAgbG9naW4odXNlcjogeyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH0sIHdpdGhSb2xlczogVXNlclJvbGVUeXBlW10gPSBbXSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5uZWxDb25maWdTZXJ2aWNlKS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2ggPT4gdGhpcy5jaGFubmVsID0gY2gpO1xuICAgICAgICB0aGlzLmluamVjdG9yLmdldChDaGFubmVsQ29uZmlnU2VydmljZSkuY2hhbm5lbHMuc3Vic2NyaWJlKGNoID0+IHRoaXMuY2hhbm5lbHMgPSBjaCk7XG4gICAgICAgIHRoaXMubG9nZ2luZ0luU3ViamVjdC5uZXh0KHRydWUpO1xuXG4gICAgICAgIC8vIENvbnZlcnRpciBlbCB1c2VybmFtZSBhIG1pbsO6c2N1bGFzXG4gICAgICAgIHVzZXIgPSB7IC4uLnVzZXIsIHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lLnRvTG93ZXJDYXNlKCksIC4uLnRoaXMuY29uc3RhbnRzLmxvZ2luRXh0cmFEYXRhKCkgfTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy50b2tlbkFwaSgpLCB1c2VyKS5waXBlKFxuICAgICAgICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhbm5lbEFjY2Vzc1Blcm1pc3Npb24oeyAuLi51c2VyLCAuLi5yZXMgfSkgJiYgdGhpcy5pc0FsbG93ZWRSb2xlKHdpdGhSb2xlcywgcmVzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9Mb2dpblVzZXIoeyAuLi51c2VyLCAuLi5yZXMgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZXJyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjaGFubmVsQWNjZXNzUGVybWlzc2lvbiA9IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQoW10pXG5cbiAgICAgICAgLyogUGxlYXNlIHJlbW92ZSB0aGlzIEFTQVAgLSBOZWVkcyAqY2hhbm5lbHMqIGFycmF5IGluIHVzZXIgb2JqZWN0IEFMV0FZUyAqL1xuICAgICAgICAvKiBpZiAoVXNlclJvbGVUeXBlLlNFTExFUiA9PSByZXMudHlwZSBhcyBVc2VyUm9sZVR5cGUpIHJldHVybiB0cnVlICovXG5cbiAgICAgICAgLyogTm8gYXV0aG9yaXplZCBjaGFubmVscyAqL1xuICAgICAgICBpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgLyogU29tZSBhdXRob3JpemVkIGNoYW5uZWwocykgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xuICAgICAgICBpZiAocmVzLmNoYW5uZWxzLmZpbmQodXNlcmNoYW5uZWwgPT4gdXNlcmNoYW5uZWwuY29kZSA9PT0gdGhpcy5jaGFubmVsLmNvZGUpKSB7XG4gICAgICAgICAgICAvKiBNdWx0aXBsZSBhdXRob3JpemVkIGNoYW5uZWxzIGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cbiAgICAgICAgICAgIGlmIChyZXMuY2hhbm5lbHM/Lmxlbmd0aCA+IDEgJiYgdGhpcy5hY3RpdmVDaGFubmVsQ2hhbmdlKVxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KHJlcy5jaGFubmVscylcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgLyogT25lIGF1dGhvcml6ZWQgY2hhbm5lbCBub3QgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xuICAgICAgICBpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPT0gMSAmJiB0aGlzLmFjdGl2ZUNoYW5uZWxDaGFuZ2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByZXMucGFzc3dvcmRcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbEFjY2VzcyhyZXMuY2hhbm5lbHNbMF0sIHJlcylcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgLyogTXVsdGlwbGUgYXV0aG9yaXplZCBjaGFubmVscyBub3QgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVDaGFubmVsQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChyZXMuY2hhbm5lbHMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNoYW5uZWxBY2Nlc3MgPSAoY2hhbm5lbCwgdXNlciA9IG51bGwpID0+IHtcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSAhPSBjaGFubmVsLmhvc3RuYW1lKSB7XG4gICAgICAgICAgICBsZXQgZW5jb2RlZCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkodXNlciAhPSBudWxsID8gdXNlciA6IHRoaXMudXNlcikpXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke2NoYW5uZWwuaG9zdG5hbWV9L2F1dGgvcmVkaXJlY3QvJHtlbmNvZGVkfWApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN0YW50cy5tb2RpZnlDaGFubmVsQ29uZmlnKGNoYW5uZWwpXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIERldnVlbHZlIHVuYSBwcm9tZXNhXG4gICAgICogQHBhcmFtIHVzZXIgT2JqZXRvIHF1ZSBjb250aWVuZSB1c2VybmFtZSB5IHBhc3N3b3JkIFxuICAgICAqL1xuICAgIGRvTG9naW4gPSAodXNlcjogeyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgdGhpcy5sb2dnaW5nSW5TdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHVzZXIgPSB7IC4uLnVzZXIsIC4uLnRoaXMuY29uc3RhbnRzLmxvZ2luRXh0cmFEYXRhKCkgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMudG9rZW5BcGkoKSwgdXNlcikucGlwZShcbiAgICAgICAgICAgIG1hcChyZXMgPT4gdGhpcy5kb0xvZ2luVXNlcihyZXMpKSxcbiAgICAgICAgICAgIG1hcFRvKCdvaycpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZXJyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBnZXRVc2VyUHJvZmlsZSgpOiBPYnNlcnZhYmxlPFVzZXI+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnVzZXIgJiYgT2JzZXJ2YWJsZS5vZih0aGlzLnVzZXIpKSB8fCB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgfVxuXG4gICAgZ2V0VXNlclByb2ZpbGVBc1VzZXIoKTogVXNlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXIgfHwgdGhpcy5nZXRDdXJyZW50VXNlckFzVXNlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTogVXNlciB7XG4gICAgICAgIHRoaXMudXNlciA9IG5ldyBVc2VyKCk7XG4gICAgICAgIGlmICghdGhpcy51c2VyLmxvYWRGcm9tU3RvcmFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXIgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy51c2VyPy5jaGFubmVscy5maW5kKHVzZXJjaGFubmVsID0+IHVzZXJjaGFubmVsPy5jb2RlID09PSB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dvdXQoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlcigpOiBPYnNlcnZhYmxlPFVzZXI+IHtcbiAgICAgICAgdGhpcy51c2VyID0gbmV3IFVzZXIoKTtcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIubG9hZEZyb21TdG9yYWdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudXNlciA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZih0aGlzLnVzZXIpO1xuICAgIH1cblxuICAgIHNpZ25VcCA9IChkYXRhKSA9PiB7XG4gICAgICAgIC8vIENvbnZlcnRpciBlbCBlbWFpbCBhIG1pbsO6c2N1bGFzIHNpIGV4aXN0ZVxuICAgICAgICBpZiAoZGF0YS5lbWFpbCkge1xuICAgICAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSwgZW1haWw6IGRhdGEuZW1haWwudG9Mb3dlckNhc2UoKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnJlZ2lzdGVyQXBpKCksIGRhdGEpO1xuICAgIH07XG5cbiAgICBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG9Mb2dvdXRVc2VyKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldEN1cnJlbnRVc2VyQXNVc2VyKClcbiAgICAgICAgdGhpcy51c2VySW5TdWJqZWN0Lm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oKSAmJiAhdGhpcy5pc1Rva2VuRXhwaXJlZCgpICYmIHRoaXMudXNlciAhPSBudWxsO1xuICAgIH1cblxuICAgIGNvbmZpcm1BY2NvdW50ID0gKHRva2VuOiBzdHJpbmcpID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5jb25maXJtQWNjb3VudEFwaSh0b2tlbikpO1xuXG4gICAgcGFzc3dvcmRSZXNldCA9IChuZXdfcGFzc3dvcmQsIHRva2VuKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IHBhc3N3b3JkOiB7IGZpcnN0OiBuZXdfcGFzc3dvcmQsIHNlY29uZDogbmV3X3Bhc3N3b3JkIH0gfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5yZXNldFBhc3N3b3JkQXBpKHRva2VuKSwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmVjb3ZlclBhc3N3b3JkID0gKGVtYWlsOiBzdHJpbmcpID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5yZWNvdmVyUGFzc3dvcmRBcGkoKSwgeyBlbWFpbCB9KTtcblxuICAgIC8qIFRPS0VOICovXG5cbiAgICBsb2dvdXQoKSB7XG4gICAgICAgIHRoaXMuZG9Mb2dvdXRVc2VyKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaFRva2VuKCkge1xuICAgICAgICBsZXQgZGF0YSA9IHsgLi4udGhpcy5jb25zdGFudHMubG9naW5FeHRyYURhdGEoKSwgcmVmcmVzaF90b2tlbjogdGhpcy5nZXRSZWZyZXNoVG9rZW4oKSB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnRva2VuQXBpKCksIGRhdGEpLnBpcGUobWFwKFxuICAgICAgICAgICAgcmVzID0+IHRoaXMuZG9Mb2dpblVzZXIocmVzKVxuICAgICAgICApKVxuICAgIH1cblxuICAgIGdldFRva2VuKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5KV1RfVE9LRU4pO1xuICAgIH1cblxuICAgIGlzVG9rZW5FeHBpcmVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBmZWNoYV9leHBpcmFjaW9uID0gdGhpcy5nZXRFeHBpcmF0ZXNBdCgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBtb21lbnQoKSA+PSBtb21lbnQoZmVjaGFfZXhwaXJhY2lvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0RXhwaXJhdGVzQXQgPSAoKSA9PiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkVYUElSQVRFU19JTik7XG5cbiAgICBwdWJsaWMgZG9Mb2dpblVzZXIodG9rZW5zKSB7XG4gICAgICAgIHRoaXMudXNlciA9IG5ldyBVc2VyKClcbiAgICAgICAgdGhpcy51c2VyLmluaXRpbGl6ZWQodG9rZW5zKVxuICAgICAgICB0aGlzLmZvcmNlQ2hhbm5lbHNGb3JTZWxsZXIodG9rZW5zKVxuICAgICAgICB0aGlzLnVzZXIucGVyc2lzdEluU3RvcmFnZSgpXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuRVhQSVJBVEVTX0lOLCBtb21lbnQodG9rZW5zLmV4cGlyZXNfaW4pLmFkZCgxLCAnaCcpLmZvcm1hdCgpKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5SRUZSRVNIX1RPS0VOLCBtb21lbnQodG9rZW5zLmV4cGlyZXNfaW4pLmFkZCgxLCAnaCcpLmZvcm1hdCgpKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5KV1RfVE9LRU4sIHRva2Vucy50b2tlbik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTUFJTCwgdG9rZW5zLnVzZXJuYW1lKTtcbiAgICAgICAgdGhpcy51c2VySW5TdWJqZWN0Lm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgdGhpcy5sb2dnZWRJblN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5sb2dnaW5nSW5TdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkb0xvZ291dFVzZXIoKSB7XG4gICAgICAgIHRoaXMudXNlciA9IG51bGxcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5VU0VSKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5FWFBJUkFURVNfSU4pO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkpXVF9UT0tFTik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuUkVGUkVTSF9UT0tFTik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjYXJ0X3Rva2VuJyk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTUFJTCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ0hBTk5FTCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTE9DQUxFKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DVVNUT01FUik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdNQVNURVJfQ0hBTk5FTCcpO1xuICAgICAgICB0aGlzLmxvZ2dlZEluU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy51c2VySW5TdWJqZWN0Lm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgdGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQoW10pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZWZyZXNoVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4pO1xuICAgIH1cblxuICAgIGhhc1RvUmVmcmVzaCA9ICgpID0+IHRoaXMuZ2V0UmVmcmVzaFRva2VuKCk7XG5cbiAgICBzaWduVXBXaG9sZXNhbGVyID0gKGRhdGEpID0+IHtcbiAgICAgICAgLy8gQ29udmVydGlyIGVsIGVtYWlsIGEgbWluw7pzY3VsYXMgc2kgZXhpc3RlXG4gICAgICAgIGlmIChkYXRhLmVtYWlsKSB7XG4gICAgICAgICAgICBkYXRhID0geyAuLi5kYXRhLCBlbWFpbDogZGF0YS5lbWFpbC50b0xvd2VyQ2FzZSgpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMucmVnaXN0ZXJXaG9sZXNhbGVyQXBpKCksIGRhdGEpO1xuICAgIH07XG5cbiAgICBnZXRDb3VudHJpZXNEYXRhID0gYXN5bmMgKCkgPT5cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmNvdW50cmllc0FwaSgpKS5waXBlKG1hcChyZXMgPT4gcmVzLl9lbWJlZGRlZC5pdGVtcykpLnRvUHJvbWlzZSgpO1xuXG4gICAgcHVibGljIHNldEFjdGl2ZUNoYW5uZWxDaGFuZ2UgPSAoYWN0aXZlbHlDaGFuZ2VDaGFubmVsc09uTG9naW46IGJvb2xlYW4pID0+IHRoaXMuYWN0aXZlQ2hhbm5lbENoYW5nZSA9IGFjdGl2ZWx5Q2hhbmdlQ2hhbm5lbHNPbkxvZ2luXG5cbiAgICBwcml2YXRlIGlzQWxsb3dlZFJvbGUgPSAoYWxsb3dlZFJvbGVzOiBVc2VyUm9sZVR5cGVbXSwgcm9sZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBhbGxvd2VkUm9sZXMubGVuZ3RoXG4gICAgICAgICAgICA/IGFsbG93ZWRSb2xlcy5pbmNsdWRlcyhyb2xlIGFzIFVzZXJSb2xlVHlwZSlcbiAgICAgICAgICAgIDogdHJ1ZVxuICAgIH1cblxuICAgIC8qIFBsZWFzZSByZW1vdmUgdGhpcyBBU0FQIC0gTmVlZHMgKmNoYW5uZWxzKiBhcnJheSBpbiB1c2VyIG9iamVjdCBBTFdBWVMgKi9cbiAgICBwcml2YXRlIGZvcmNlQ2hhbm5lbHNGb3JTZWxsZXIgPSB0b2tlbnMgPT4ge1xuICAgICAgICBpZiAoVXNlclJvbGVUeXBlLlNFTExFUiA9PSB0b2tlbnMudHlwZSBhcyBVc2VyUm9sZVR5cGUpXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzPy5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IHRoaXMudXNlci5zZXRDaGFubmVscyguLi50aGlzLmNoYW5uZWxzKVxuICAgICAgICAgICAgICAgIDogdGhpcy51c2VyLnNldENoYW5uZWxzKHRoaXMuY2hhbm5lbClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2FtYmlhIGRlIGNhbmFsXG4gICAgICogQHBhcmFtIGNoYW5uZWxDb25maWcgZGViZSBzZXIgdW4gb2JqZXRvIHF1ZSBjb250ZW5nYSBhbCBtZW5vcyBsYXMga2V5cyBjaGFubmVsIHkgbG9jYWxlLlxuICAgICAqL1xuICAgIHByaXZhdGUgY2hhbmdlQ2hhbm5lbCA9IChjaGFubmVsQ29uZmlnOmFueSkgPT4ge1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5tb2RpZnlDaGFubmVsQ29uZmlnKHtcbiAgICAgICAgICAgIGNoYW5uZWw6IGNoYW5uZWxDb25maWcuY2hhbm5lbCxcbiAgICAgICAgICAgIGxvY2FsZTogY2hhbm5lbENvbmZpZy5sb2NhbGVcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2FyZ2EgZWwgY2xpZW50ZSBjb24gZWwgcXVlIHNlIHJlYWxpemFyYW4gcGVkaWRvcy4gU2kgcmVjaWJlIGVsIHZhbG9yIG51bGxcbiAgICAgKiBzZSB2dWVsdmUgYSBjYXJnYXIgZWwgdmVuZGVkb3IgcGFyYSBzdSB1c28uICBcbiAgICAgKiBAcGFyYW0gY3VzdG9tZXIgXG4gICAgICovXG4gICAgcHVibGljIHNldEN1c3RvbWVyID0gY3VzdG9tZXIgPT4ge1xuICAgICAgICBsZXQgcmVmcmVzaFBhZ2UgPSBmYWxzZVxuICAgICAgICB0aGlzLmN1c3RvbWVyID0gY3VzdG9tZXJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DVVNUT01FUiwgSlNPTi5zdHJpbmdpZnkoY3VzdG9tZXIpKVxuICAgICAgICBcbiAgICAgICAgbGV0IHNhbWVDaGFubmVsID0gY3VzdG9tZXIgPyB0aGlzLnNhbWVDaGFubmVsKGN1c3RvbWVyLmNoYW5uZWxzWzBdLmNvZGUsIGN1c3RvbWVyLmNoYW5uZWxzWzBdLmxvY2FsZXMuY29kZSkgOiBudWxsXG4gICAgICAgIFxuICAgICAgICBpZiAoY3VzdG9tZXIpIHtcbiAgICAgICAgICAgIGlmKCFzYW1lQ2hhbm5lbCl7XG4gICAgICAgICAgICAgICAgIWxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUikgP1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWw6IHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5jb25zdGFudHMuZ2V0TG9jYWxlKClcbiAgICAgICAgICAgICAgICAgICAgfSkpIDogbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNoYW5uZWwoe1xuICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiBjdXN0b21lci5jaGFubmVsc1swXS5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGN1c3RvbWVyLmNoYW5uZWxzWzBdLmxvY2FsZXMuY29kZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpKVxuICAgICAgICAgICAgaWYocmVzKXtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5zYW1lQ2hhbm5lbChyZXMuY2hhbm5lbCwgcmVzLmxvY2FsZSkpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNoYW5uZWwocmVzKVxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluamVjdG9yLmdldChDYXJ0U2VydmljZSkuY2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpXG4gICAgICAgIHJlZnJlc2hQYWdlID8gbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYgOiBudWxsXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBydWViYSBzaSBsb3MgdmFsb3JlcyBkZWwgY2FuYWwgYWN0dWFsIHNvbiBpZ3VhbGVzIGEgbG9zIGluZ3Jlc2FkbyBwb3IgcGFyYW1ldHJvcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCBOb21icmUgZGVsIGNhbmFsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZSAgTG9jYWxlIGRlbCBjYW5hbFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHNpIGVzIGVsIG1pc21vIGNhbmFsLCBGYWxzZSBjYXNvIGNvbnRyYXJpby5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNhbWVDaGFubmVsID0gKGNoYW5uZWw6c3RyaW5nLCBsb2NhbGU6c3RyaW5nKTpib29sZWFuID0+IChjaGFubmVsID09IHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSkgJiYgKGxvY2FsZSA9PSB0aGlzLmNvbnN0YW50cy5nZXRMb2NhbGUoKSlcblxuICAgIC8qIHB1YmxpYyBnZXRDdXN0b21lciA9ICgpID0+IE9ic2VydmFibGUub2YoSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVU1RPTUVSKSkpICovXG5cbiAgICBwdWJsaWMgZ2V0Q3VzdG9tZXIgPSAoKSA9PiB7XG4gICAgICAgIC8qIHRoaXMuY3VzdG9tZXJTdWJqZWN0Lm5leHQoSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVU1RPTUVSKSkpXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbWVyICovXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbWVyIHx8IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVNUT01FUikpXG4gICAgfVxuXG4gICAgcHVibGljIHNldEhvbWVSZXNvbHZlciA9IHJlc29sdmVyRnVuY3Rpb24gPT4gdGhpcy5ob21lUmVzb2x2ZXIgPSByZXNvbHZlckZ1bmN0aW9uXG5cbiAgICBwdWJsaWMgZ2V0SG9tZVJlc29sdmVyID0gKCkgPT4gdGhpcy5ob21lUmVzb2x2ZXJcblxuICAgIHB1YmxpYyBpc0FibGVUb0J1eSA9ICgpOiBib29sZWFuID0+ICF0aGlzLmdldFVzZXJQcm9maWxlQXNVc2VyKCk/LmlzU2VsbGVyKCkgfHwgISF0aGlzLmdldEN1c3RvbWVyKClcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmFsdWEgc2kgZWwgdmFsb3IgcXVlIGluZ3Jlc2EgcG9yIHBhcsOhbWV0cm8gZXMgbWF5b3IgbyBpZ3VhbCBhbCBtw61uaW1vIGRlIGNvbXByYVxuICAgICAqIHF1ZSBlbCB1c3VhcmlvIHRpZW5lIGFzaWduYWRvIGEgZXNlIGNhbmFsLCBkaWZlcmVuY2lhbmRvIHNpIGVzIG1heW9yaXN0YSBvIG1pbm9yaXN0YS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgc2kgZXhjZWRlIGVsIG1vbnRvLCBmYWxzZSBjYXNvIGNvbnRyYXJpb1xuICAgICAqL1xuICAgIHB1YmxpYyBleGNlZWRzTWluaW11bUFtb3VudCA9ICh2YWx1ZTpudW1iZXI9MCk6Ym9vbGVhbiA9PiAgXG4gICAgICAgIHRoaXMudXNlci5pc1dob2xlc2FsZXIoKSA/IHRoaXMudXNlci5jaGFubmVscy5maW5kKCBjaGFubmVsID0+IHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSA9PSBjaGFubmVsLmNvZGUpLndob2xlc2FsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgPD0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy51c2VyLmNoYW5uZWxzLmZpbmQoIGNoYW5uZWwgPT4gdGhpcy5jb25zdGFudHMuZ2V0Q2hhbm5lbCgpID09IGNoYW5uZWwuY29kZSkucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgPD0gdmFsdWVcbn0iXX0=
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU83QyxJQUFhLFdBQVcsR0FBeEIsTUFBYSxXQUFXO0lBMENwQixZQUFvQixVQUE2QixFQUNyQyxhQUE0QixFQUM1QixTQUFvQixFQUNwQixRQUFrQjtRQUhWLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQ3JDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTNDYixjQUFTLEdBQUcsV0FBVyxDQUFBO1FBQ3ZCLGtCQUFhLEdBQUcsZUFBZSxDQUFBO1FB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QVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0QyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxZQUFZLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVPLGVBQWU7UUFDbkIsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBZ0hKLENBQUE7O1lBbFVtQyxpQkFBaUI7WUFDdEIsYUFBYTtZQUNqQixTQUFTO1lBQ1YsUUFBUTs7O0FBN0NyQixXQUFXO0lBSHZCLFVBQVUsQ0FBQztRQUNSLFVBQVUsRUFBRSxNQUFNO0tBQ3JCLENBQUM7R0FDVyxXQUFXLENBNFd2QjtTQTVXWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcy91c2VyJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9vZic7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBtYXAsIG1hcFRvLCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMtY29tcGF0L29wZXJhdG9yL3Rha2UnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVXNlclJvbGVUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy91c2VyLXJvbGUtdHlwZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBKV1RfVE9LRU4gPSAnSldUX1RPS0VOJ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUkVGUkVTSF9UT0tFTiA9ICdSRUZSRVNIX1RPS0VOJ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgRVhQSVJBVEVTX0lOID0gJ0VYUElSQVRFU19JTidcbiAgICBwcml2YXRlIHJlYWRvbmx5IFVTRVIgPSAnVVNFUidcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BSUwgPSAnbWFpbCdcbiAgICBwcml2YXRlIHJlYWRvbmx5IExPQ0FMRSA9ICdMT0NBTEUnXG4gICAgcHJpdmF0ZSByZWFkb25seSBDSEFOTkVMID0gJ0NIQU5ORUwnXG4gICAgcHJpdmF0ZSByZWFkb25seSBDVVNUT01FUiA9ICdDVVNUT01FUidcbiAgICBwcml2YXRlIHJlYWRvbmx5IENIQU5ORUxTRUxMRVIgPSAnQ0hBTk5FTFNFTExFUidcblxuICAgIC8qIGFjdGl2ZUNoYW5uZWxTd2l0Y2g/ICovXG4gICAgcHJpdmF0ZSBhY3RpdmVDaGFubmVsQ2hhbmdlOiBib29sZWFuID0gZmFsc2VcbiAgICBwcml2YXRlIGxvZ2dlZEluU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihmYWxzZSlcbiAgICBwcml2YXRlIGxvZ2dpbmdJblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oZmFsc2UpXG4gICAgcHJpdmF0ZSB1c2VySW5TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVc2VyPihudWxsKVxuICAgIHByaXZhdGUgY2hhbm5lbHNVc2VyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxuICAgIC8qIHByaXZhdGUgY3VzdG9tZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpICovXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyID0gbnVsbFxuXG4gICAgLy8gQVBJU1xuICAgIHB1YmxpYyB0b2tlbkFwaSA9ICgpID0+ICdzaG9wLWFwaS9sb2dpbl9jaGVjayc7XG4gICAgcHVibGljIHJlZ2lzdGVyQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgKyAnL3JlZ2lzdGVyJztcbiAgICBwdWJsaWMgcmVnaXN0ZXJXaG9sZXNhbGVyQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgKyAnL3JlZ2lzdGVyLXdob2xlc2FsZXInO1xuICAgIHB1YmxpYyBjb25maXJtQWNjb3VudEFwaSA9ICh0b2tlbikgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgKyAnL3ZlcmlmeS1hY2NvdW50P3Rva2VuPScgKyB0b2tlbjtcbiAgICBwdWJsaWMgcmVzZXRQYXNzd29yZEFwaSA9ICh0b2tlbikgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgKyAnL3Bhc3N3b3JkLXJlc2V0LycgKyB0b2tlbjtcbiAgICBwdWJsaWMgcmVjb3ZlclBhc3N3b3JkQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgKyAnL3JlcXVlc3QtcGFzc3dvcmQtcmVzZXQnO1xuICAgIHB1YmxpYyBjb3VudHJpZXNBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvY291bnRyaWVzJztcblxuICAgIC8vIEF0cmlidXRvcyB1dGlsZXNcbiAgICBwdWJsaWMgd2FpdGluZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBsb2dnZWRJbiA9IHRoaXMubG9nZ2VkSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG4gICAgcHVibGljIGxvZ2dpbmdJbiA9IHRoaXMubG9nZ2luZ0luU3ViamVjdC5hc09ic2VydmFibGUoKVxuICAgIHB1YmxpYyB1c2VyQXV0aCA9IHRoaXMudXNlckluU3ViamVjdC5hc09ic2VydmFibGUoKVxuICAgIHB1YmxpYyBjaGFubmVsc1VzZXIgPSB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QuYXNPYnNlcnZhYmxlKClcbiAgICAvKiBwcml2YXRlIGN1c3RvbWVyID0gdGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpICovXG4gICAgcHJpdmF0ZSBjdXN0b21lciA9IG51bGxcbiAgICBwdWJsaWMgY2hhbm5lbCA9IG51bGxcbiAgICBwdWJsaWMgY2hhbm5lbHMgPSBbXVxuICAgIHByaXZhdGUgaG9tZVJlc29sdmVyID0gbnVsbFxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnN0YW50czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubG9nZ2VkSW5TdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzYyBEZXZ1ZWx2ZSB1biBvYnNlcnZhYmxlXG4gICAgICogQHBhcmFtIHVzZXIgT2JqZXRvIHF1ZSBjb250aWVuZSB1c2VybmFtZSB5IHBhc3N3b3JkIFxuICAgICAqL1xuICAgIGxvZ2luKHVzZXI6IHsgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9LCB3aXRoUm9sZXM6IFVzZXJSb2xlVHlwZVtdID0gW10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICB0aGlzLmluamVjdG9yLmdldChDaGFubmVsQ29uZmlnU2VydmljZSkuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKGNoID0+IHRoaXMuY2hhbm5lbCA9IGNoKTtcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoQ2hhbm5lbENvbmZpZ1NlcnZpY2UpLmNoYW5uZWxzLnN1YnNjcmliZShjaCA9PiB0aGlzLmNoYW5uZWxzID0gY2gpO1xuICAgICAgICB0aGlzLmxvZ2dpbmdJblN1YmplY3QubmV4dCh0cnVlKTtcblxuICAgICAgICAvLyBDb252ZXJ0aXIgZWwgdXNlcm5hbWUgYSBtaW7DunNjdWxhc1xuICAgICAgICB1c2VyID0geyAuLi51c2VyLCB1c2VybmFtZTogdXNlci51c2VybmFtZS50b0xvd2VyQ2FzZSgpLCAuLi50aGlzLmNvbnN0YW50cy5sb2dpbkV4dHJhRGF0YSgpIH07XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMudG9rZW5BcGkoKSwgdXNlcikucGlwZShcbiAgICAgICAgICAgIG1hcChyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYW5uZWxBY2Nlc3NQZXJtaXNzaW9uKHsgLi4udXNlciwgLi4ucmVzIH0pICYmIHRoaXMuaXNBbGxvd2VkUm9sZSh3aXRoUm9sZXMsIHJlcy50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvTG9naW5Vc2VyKHsgLi4udXNlciwgLi4ucmVzIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dpbmdJblN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKGVyci50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgY2hhbm5lbEFjY2Vzc1Blcm1pc3Npb24gPSAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KFtdKVxuXG4gICAgICAgIC8qIFBsZWFzZSByZW1vdmUgdGhpcyBBU0FQIC0gTmVlZHMgKmNoYW5uZWxzKiBhcnJheSBpbiB1c2VyIG9iamVjdCBBTFdBWVMgKi9cbiAgICAgICAgLyogaWYgKFVzZXJSb2xlVHlwZS5TRUxMRVIgPT0gcmVzLnR5cGUgYXMgVXNlclJvbGVUeXBlKSByZXR1cm4gdHJ1ZSAqL1xuXG4gICAgICAgIC8qIE5vIGF1dGhvcml6ZWQgY2hhbm5lbHMgKi9cbiAgICAgICAgaWYgKHJlcy5jaGFubmVscz8ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIC8qIFNvbWUgYXV0aG9yaXplZCBjaGFubmVsKHMpIGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cbiAgICAgICAgaWYgKHJlcy5jaGFubmVscy5maW5kKHVzZXJjaGFubmVsID0+IHVzZXJjaGFubmVsLmNvZGUgPT09IHRoaXMuY2hhbm5lbC5jb2RlKSkge1xuICAgICAgICAgICAgLyogTXVsdGlwbGUgYXV0aG9yaXplZCBjaGFubmVscyBpbmNsdWRpbmcgY3VycmVudCBjaGFubmVsICovXG4gICAgICAgICAgICBpZiAocmVzLmNoYW5uZWxzPy5sZW5ndGggPiAxICYmIHRoaXMuYWN0aXZlQ2hhbm5lbENoYW5nZSlcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChyZXMuY2hhbm5lbHMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIC8qIE9uZSBhdXRob3JpemVkIGNoYW5uZWwgbm90IGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cbiAgICAgICAgaWYgKHJlcy5jaGFubmVscz8ubGVuZ3RoID09IDEgJiYgdGhpcy5hY3RpdmVDaGFubmVsQ2hhbmdlKSB7XG4gICAgICAgICAgICBkZWxldGUgcmVzLnBhc3N3b3JkXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxBY2Nlc3MocmVzLmNoYW5uZWxzWzBdLCByZXMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIC8qIE11bHRpcGxlIGF1dGhvcml6ZWQgY2hhbm5lbHMgbm90IGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2hhbm5lbENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQocmVzLmNoYW5uZWxzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjaGFubmVsQWNjZXNzID0gKGNoYW5uZWwsIHVzZXIgPSBudWxsKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgIT0gY2hhbm5lbC5ob3N0bmFtZSkge1xuICAgICAgICAgICAgbGV0IGVuY29kZWQgPSBidG9hKEpTT04uc3RyaW5naWZ5KHVzZXIgIT0gbnVsbCA/IHVzZXIgOiB0aGlzLnVzZXIpKVxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoYCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHtjaGFubmVsLmhvc3RuYW1lfS9hdXRoL3JlZGlyZWN0LyR7ZW5jb2RlZH1gKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25zdGFudHMubW9kaWZ5Q2hhbm5lbENvbmZpZyhjaGFubmVsKVxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzYyBEZXZ1ZWx2ZSB1bmEgcHJvbWVzYVxuICAgICAqIEBwYXJhbSB1c2VyIE9iamV0byBxdWUgY29udGllbmUgdXNlcm5hbWUgeSBwYXNzd29yZCBcbiAgICAgKi9cbiAgICBkb0xvZ2luID0gKHVzZXI6IHsgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2luZ0luU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB1c2VyID0geyAuLi51c2VyLCAuLi50aGlzLmNvbnN0YW50cy5sb2dpbkV4dHJhRGF0YSgpIH07XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnRva2VuQXBpKCksIHVzZXIpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzID0+IHRoaXMuZG9Mb2dpblVzZXIocmVzKSksXG4gICAgICAgICAgICBtYXBUbygnb2snKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dpbmdJblN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKGVyci50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0VXNlclByb2ZpbGUoKTogT2JzZXJ2YWJsZTxVc2VyPiB7XG4gICAgICAgIHJldHVybiAodGhpcy51c2VyICYmIE9ic2VydmFibGUub2YodGhpcy51c2VyKSkgfHwgdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIH1cblxuICAgIGdldFVzZXJQcm9maWxlQXNVc2VyKCk6IFVzZXIge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyIHx8IHRoaXMuZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnJlbnRVc2VyQXNVc2VyKCk6IFVzZXIge1xuICAgICAgICB0aGlzLnVzZXIgPSBuZXcgVXNlcigpO1xuICAgICAgICBpZiAoIXRoaXMudXNlci5sb2FkRnJvbVN0b3JhZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy51c2VyID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMudXNlcj8uY2hhbm5lbHMuZmluZCh1c2VyY2hhbm5lbCA9PiB1c2VyY2hhbm5lbD8uY29kZSA9PT0gdGhpcy5jb25zdGFudHMuZ2V0Q2hhbm5lbCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy51c2VyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFVzZXIoKTogT2JzZXJ2YWJsZTxVc2VyPiB7XG4gICAgICAgIHRoaXMudXNlciA9IG5ldyBVc2VyKCk7XG4gICAgICAgIGlmICghdGhpcy51c2VyLmxvYWRGcm9tU3RvcmFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXIgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YodGhpcy51c2VyKTtcbiAgICB9XG5cbiAgICBzaWduVXAgPSAoZGF0YSkgPT4ge1xuICAgICAgICAvLyBDb252ZXJ0aXIgZWwgZW1haWwgYSBtaW7DunNjdWxhcyBzaSBleGlzdGVcbiAgICAgICAgaWYgKGRhdGEuZW1haWwpIHtcbiAgICAgICAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIGVtYWlsOiBkYXRhLmVtYWlsLnRvTG93ZXJDYXNlKCkgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5yZWdpc3RlckFwaSgpLCBkYXRhKTtcbiAgICB9O1xuXG4gICAgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmRvTG9nb3V0VXNlcigpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRDdXJyZW50VXNlckFzVXNlcigpXG4gICAgICAgIHRoaXMudXNlckluU3ViamVjdC5uZXh0KHRoaXMudXNlcik7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKCkgJiYgIXRoaXMuaXNUb2tlbkV4cGlyZWQoKSAmJiB0aGlzLnVzZXIgIT0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25maXJtQWNjb3VudCA9ICh0b2tlbjogc3RyaW5nKSA9PlxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuY29uZmlybUFjY291bnRBcGkodG9rZW4pKTtcblxuICAgIHBhc3N3b3JkUmVzZXQgPSAobmV3X3Bhc3N3b3JkLCB0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0geyBwYXNzd29yZDogeyBmaXJzdDogbmV3X3Bhc3N3b3JkLCBzZWNvbmQ6IG5ld19wYXNzd29yZCB9IH07XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMucmVzZXRQYXNzd29yZEFwaSh0b2tlbiksIGRhdGEpO1xuICAgIH1cblxuICAgIHJlY292ZXJQYXNzd29yZCA9IChlbWFpbDogc3RyaW5nKSA9PlxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMucmVjb3ZlclBhc3N3b3JkQXBpKCksIHsgZW1haWwgfSk7XG5cbiAgICAvKiBUT0tFTiAqL1xuXG4gICAgbG9nb3V0KCkge1xuICAgICAgICB0aGlzLmRvTG9nb3V0VXNlcigpO1xuICAgIH1cblxuICAgIHJlZnJlc2hUb2tlbigpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB7IC4uLnRoaXMuY29uc3RhbnRzLmxvZ2luRXh0cmFEYXRhKCksIHJlZnJlc2hfdG9rZW46IHRoaXMuZ2V0UmVmcmVzaFRva2VuKCkgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy50b2tlbkFwaSgpLCBkYXRhKS5waXBlKG1hcChcbiAgICAgICAgICAgIHJlcyA9PiB0aGlzLmRvTG9naW5Vc2VyKHJlcylcbiAgICAgICAgKSlcbiAgICB9XG5cbiAgICBnZXRUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuSldUX1RPS0VOKTtcbiAgICB9XG5cbiAgICBpc1Rva2VuRXhwaXJlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZmVjaGFfZXhwaXJhY2lvbiA9IHRoaXMuZ2V0RXhwaXJhdGVzQXQoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbW9tZW50KCkgPj0gbW9tZW50KGZlY2hhX2V4cGlyYWNpb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldEV4cGlyYXRlc0F0ID0gKCkgPT4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5FWFBJUkFURVNfSU4pO1xuXG4gICAgcHVibGljIGRvTG9naW5Vc2VyKHRva2Vucykge1xuICAgICAgICB0aGlzLnVzZXIgPSBuZXcgVXNlcigpXG4gICAgICAgIHRoaXMudXNlci5pbml0aWxpemVkKHRva2VucylcbiAgICAgICAgdGhpcy5mb3JjZUNoYW5uZWxzRm9yU2VsbGVyKHRva2VucylcbiAgICAgICAgdGhpcy51c2VyLnBlcnNpc3RJblN0b3JhZ2UoKVxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkVYUElSQVRFU19JTiwgbW9tZW50KHRva2Vucy5leHBpcmVzX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuUkVGUkVTSF9UT0tFTiwgbW9tZW50KHRva2Vucy5leHBpcmVzX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuSldUX1RPS0VOLCB0b2tlbnMudG9rZW4pO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLk1BSUwsIHRva2Vucy51c2VybmFtZSk7XG4gICAgICAgIHRoaXMudXNlckluU3ViamVjdC5uZXh0KHRoaXMudXNlcik7XG4gICAgICAgIHRoaXMubG9nZ2VkSW5TdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMubG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZG9Mb2dvdXRVc2VyKCkge1xuICAgICAgICB0aGlzLnVzZXIgPSBudWxsXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVVNFUik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuRVhQSVJBVEVTX0lOKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5KV1RfVE9LRU4pO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlJFRlJFU0hfVE9LRU4pO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2FydF90b2tlbicpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLk1BSUwpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNIQU5ORUwpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkxPQ0FMRSk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ1VTVE9NRVIpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnTUFTVEVSX0NIQU5ORUwnKTtcbiAgICAgICAgdGhpcy5sb2dnZWRJblN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMudXNlckluU3ViamVjdC5uZXh0KHRoaXMudXNlcik7XG4gICAgICAgIHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KFtdKVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVmcmVzaFRva2VuKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5SRUZSRVNIX1RPS0VOKTtcbiAgICB9XG5cbiAgICBoYXNUb1JlZnJlc2ggPSAoKSA9PiB0aGlzLmdldFJlZnJlc2hUb2tlbigpO1xuXG4gICAgc2lnblVwV2hvbGVzYWxlciA9IChkYXRhKSA9PiB7XG4gICAgICAgIC8vIENvbnZlcnRpciBlbCBlbWFpbCBhIG1pbsO6c2N1bGFzIHNpIGV4aXN0ZVxuICAgICAgICBpZiAoZGF0YS5lbWFpbCkge1xuICAgICAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSwgZW1haWw6IGRhdGEuZW1haWwudG9Mb3dlckNhc2UoKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnJlZ2lzdGVyV2hvbGVzYWxlckFwaSgpLCBkYXRhKTtcbiAgICB9O1xuXG4gICAgZ2V0Q291bnRyaWVzRGF0YSA9IGFzeW5jICgpID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5jb3VudHJpZXNBcGkoKSkucGlwZShtYXAocmVzID0+IHJlcy5fZW1iZWRkZWQuaXRlbXMpKS50b1Byb21pc2UoKTtcblxuICAgIHB1YmxpYyBzZXRBY3RpdmVDaGFubmVsQ2hhbmdlID0gKGFjdGl2ZWx5Q2hhbmdlQ2hhbm5lbHNPbkxvZ2luOiBib29sZWFuKSA9PiB0aGlzLmFjdGl2ZUNoYW5uZWxDaGFuZ2UgPSBhY3RpdmVseUNoYW5nZUNoYW5uZWxzT25Mb2dpblxuXG4gICAgcHJpdmF0ZSBpc0FsbG93ZWRSb2xlID0gKGFsbG93ZWRSb2xlczogVXNlclJvbGVUeXBlW10sIHJvbGU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gYWxsb3dlZFJvbGVzLmxlbmd0aFxuICAgICAgICAgICAgPyBhbGxvd2VkUm9sZXMuaW5jbHVkZXMocm9sZSBhcyBVc2VyUm9sZVR5cGUpXG4gICAgICAgICAgICA6IHRydWVcbiAgICB9XG5cbiAgICAvKiBQbGVhc2UgcmVtb3ZlIHRoaXMgQVNBUCAtIE5lZWRzICpjaGFubmVscyogYXJyYXkgaW4gdXNlciBvYmplY3QgQUxXQVlTICovXG4gICAgcHJpdmF0ZSBmb3JjZUNoYW5uZWxzRm9yU2VsbGVyID0gdG9rZW5zID0+IHtcbiAgICAgICAgaWYgKFVzZXJSb2xlVHlwZS5TRUxMRVIgPT0gdG9rZW5zLnR5cGUgYXMgVXNlclJvbGVUeXBlKVxuICAgICAgICAgICAgdGhpcy5jaGFubmVscz8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyB0aGlzLnVzZXIuc2V0Q2hhbm5lbHMoLi4udGhpcy5jaGFubmVscylcbiAgICAgICAgICAgICAgICA6IHRoaXMudXNlci5zZXRDaGFubmVscyh0aGlzLmNoYW5uZWwpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENhbWJpYSBkZSBjYW5hbFxuICAgICAqIEBwYXJhbSBjaGFubmVsQ29uZmlnIGRlYmUgc2VyIHVuIG9iamV0byBxdWUgY29udGVuZ2EgYWwgbWVub3MgbGFzIGtleXMgY2hhbm5lbCB5IGxvY2FsZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNoYW5nZUNoYW5uZWwgPSAoY2hhbm5lbENvbmZpZzphbnkpID0+IHtcbiAgICAgICAgdGhpcy5jb25zdGFudHMubW9kaWZ5Q2hhbm5lbENvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsOiBjaGFubmVsQ29uZmlnLmNoYW5uZWwsXG4gICAgICAgICAgICBsb2NhbGU6IGNoYW5uZWxDb25maWcubG9jYWxlXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENhcmdhIGVsIGNsaWVudGUgY29uIGVsIHF1ZSBzZSByZWFsaXphcmFuIHBlZGlkb3MuIFNpIHJlY2liZSBlbCB2YWxvciBudWxsXG4gICAgICogc2UgdnVlbHZlIGEgY2FyZ2FyIGVsIHZlbmRlZG9yIHBhcmEgc3UgdXNvLiAgXG4gICAgICogQHBhcmFtIGN1c3RvbWVyIFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRDdXN0b21lciA9IGN1c3RvbWVyID0+IHtcbiAgICAgICAgbGV0IHJlZnJlc2hQYWdlID0gZmFsc2VcbiAgICAgICAgdGhpcy5jdXN0b21lciA9IGN1c3RvbWVyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ1VTVE9NRVIsIEpTT04uc3RyaW5naWZ5KGN1c3RvbWVyKSlcbiAgICAgICAgXG4gICAgICAgIGxldCBzYW1lQ2hhbm5lbCA9IGN1c3RvbWVyID8gdGhpcy5zYW1lQ2hhbm5lbChjdXN0b21lci5jaGFubmVsc1swXS5jb2RlLCBjdXN0b21lci5jaGFubmVsc1swXS5sb2NhbGVzLmNvZGUpIDogbnVsbFxuICAgICAgICBcbiAgICAgICAgaWYgKGN1c3RvbWVyKSB7XG4gICAgICAgICAgICBpZighc2FtZUNoYW5uZWwpe1xuICAgICAgICAgICAgICAgICFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpID9cbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMuY29uc3RhbnRzLmdldExvY2FsZSgpXG4gICAgICAgICAgICAgICAgICAgIH0pKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDaGFubmVsKHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbDogY3VzdG9tZXIuY2hhbm5lbHNbMF0uY29kZSxcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlOiBjdXN0b21lci5jaGFubmVsc1swXS5sb2NhbGVzLmNvZGVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKSlcbiAgICAgICAgICAgIGlmKHJlcyl7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuc2FtZUNoYW5uZWwocmVzLmNoYW5uZWwsIHJlcy5sb2NhbGUpKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDaGFubmVsKHJlcylcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UgPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoQ2FydFNlcnZpY2UpLmNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKVxuICAgICAgICByZWZyZXNoUGFnZSA/IGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmIDogbnVsbFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wcnVlYmEgc2kgbG9zIHZhbG9yZXMgZGVsIGNhbmFsIGFjdHVhbCBzb24gaWd1YWxlcyBhIGxvcyBpbmdyZXNhZG8gcG9yIHBhcmFtZXRyb3MuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgTm9tYnJlIGRlbCBjYW5hbFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGUgIExvY2FsZSBkZWwgY2FuYWxcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBzaSBlcyBlbCBtaXNtbyBjYW5hbCwgRmFsc2UgY2FzbyBjb250cmFyaW8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzYW1lQ2hhbm5lbCA9IChjaGFubmVsOnN0cmluZywgbG9jYWxlOnN0cmluZyk6Ym9vbGVhbiA9PiAoY2hhbm5lbCA9PSB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkpICYmIChsb2NhbGUgPT0gdGhpcy5jb25zdGFudHMuZ2V0TG9jYWxlKCkpXG5cbiAgICAvKiBwdWJsaWMgZ2V0Q3VzdG9tZXIgPSAoKSA9PiBPYnNlcnZhYmxlLm9mKEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVNUT01FUikpKSAqL1xuXG4gICAgcHVibGljIGdldEN1c3RvbWVyID0gKCkgPT4ge1xuICAgICAgICAvKiB0aGlzLmN1c3RvbWVyU3ViamVjdC5uZXh0KEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVNUT01FUikpKVxuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21lciAqL1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21lciB8fCBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ1VTVE9NRVIpKVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRIb21lUmVzb2x2ZXIgPSByZXNvbHZlckZ1bmN0aW9uID0+IHRoaXMuaG9tZVJlc29sdmVyID0gcmVzb2x2ZXJGdW5jdGlvblxuXG4gICAgcHVibGljIGdldEhvbWVSZXNvbHZlciA9ICgpID0+IHRoaXMuaG9tZVJlc29sdmVyXG5cbiAgICBwdWJsaWMgaXNBYmxlVG9CdXkgPSAoKTogYm9vbGVhbiA9PiAhdGhpcy5nZXRVc2VyUHJvZmlsZUFzVXNlcigpPy5pc1NlbGxlcigpIHx8ICEhdGhpcy5nZXRDdXN0b21lcigpXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZhbHVhIHNpIGVsIHZhbG9yIHF1ZSBpbmdyZXNhIHBvciBwYXLDoW1ldHJvIGVzIG1heW9yIG8gaWd1YWwgYWwgbcOtbmltbyBkZSBjb21wcmFcbiAgICAgKiBxdWUgZWwgdXN1YXJpbyB0aWVuZSBhc2lnbmFkbyBhIGVzZSBjYW5hbCwgZGlmZXJlbmNpYW5kbyBzaSBlcyBtYXlvcmlzdGEgbyBtaW5vcmlzdGEuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIHNpIGV4Y2VkZSBlbCBtb250bywgZmFsc2UgY2FzbyBjb250cmFyaW9cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhjZWVkc01pbmltdW1BbW91bnQgPSAodmFsdWU6bnVtYmVyPTApOmJvb2xlYW4gPT4gIFxuICAgICAgICB0aGlzLnVzZXIuaXNXaG9sZXNhbGVyKCkgPyB0aGlzLnVzZXIuY2hhbm5lbHMuZmluZCggY2hhbm5lbCA9PiB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgPT0gY2hhbm5lbC5jb2RlKS53aG9sZXNhbGVyTWluaW11bVB1cmNoYXNlQW1vdW50IDw9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudXNlci5jaGFubmVscy5maW5kKCBjaGFubmVsID0+IHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSA9PSBjaGFubmVsLmNvZGUpLnJldGFpbGVyTWluaW11bVB1cmNoYXNlQW1vdW50IDw9IHZhbHVlXG59Il19
@@ -12,8 +12,10 @@ import { ConnectionService } from '../api/connection.service';
12
12
  import { Constants } from '../core.consts';
13
13
  import { ParametersService } from '../services/parameters.service';
14
14
  import * as i0 from "@angular/core";
15
- import * as i1 from "../../public-api";
16
- import * as i2 from "@angular/common/http";
15
+ import * as i1 from "../core.consts";
16
+ import * as i2 from "../api/connection.service";
17
+ import * as i3 from "@angular/common/http";
18
+ import * as i4 from "./parameters.service";
17
19
  //import * from '../assets/ec-i18n'
18
20
  let CaptchaService = class CaptchaService {
19
21
  /**
@@ -120,11 +122,11 @@ CaptchaService.ctorParameters = () => [
120
122
  { type: HttpClient },
121
123
  { type: ParametersService }
122
124
  ];
123
- CaptchaService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CaptchaService_Factory() { return new i1.CaptchaService(i0.ɵɵinject(i1.Constants), i0.ɵɵinject(i1.ConnectionService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i1.ParametersService)); }, token: i1.CaptchaService, providedIn: "root" });
125
+ CaptchaService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CaptchaService_Factory() { return new CaptchaService(i0.ɵɵinject(i1.Constants), i0.ɵɵinject(i2.ConnectionService), i0.ɵɵinject(i3.HttpClient), i0.ɵɵinject(i4.ParametersService)); }, token: CaptchaService, providedIn: "root" });
124
126
  CaptchaService = __decorate([
125
127
  Injectable({
126
128
  providedIn: 'root'
127
129
  })
128
130
  ], CaptchaService);
129
131
  export { CaptchaService };
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdGNoYS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcHRjaGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQVUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7O0FBRW5FLG1DQUFtQztBQUluQyxJQUFhLGNBQWMsR0FBM0IsTUFBYSxjQUFjO0lBaUJ2Qjs7Ozs7T0FLRztJQUNILFlBQW9CLE1BQWlCLEVBQ3pCLFVBQTZCLEVBQzdCLElBQWUsRUFDYixTQUE0QjtRQUh0QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ3pCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLFNBQUksR0FBSixJQUFJLENBQVc7UUFDYixjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQXhCbEMsbUJBQWMsR0FBdUMsSUFBSSxlQUFlLENBQUMsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQTtRQUN2RixZQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUszQyxZQUFPLEdBQVUsa0JBQWtCLENBQUE7UUFDbkMsMEJBQXFCLEdBQVcsS0FBSyxDQUFDO1FBRXRDLHlCQUFvQixHQUFHLDZDQUE2QyxDQUFDO1FBQ3JFLHNCQUFp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QUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBekZ4SSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFBO1FBQ2pFOzs7V0FHRztRQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDMUIsQ0FBQztDQW1GSixDQUFBOztZQWhHK0IsU0FBUztZQUNiLGlCQUFpQjtZQUN4QixVQUFVO1lBQ0YsaUJBQWlCOzs7QUExQmpDLGNBQWM7SUFIMUIsVUFBVSxDQUFDO1FBQ1IsVUFBVSxFQUFFLE1BQU07S0FDckIsQ0FBQztHQUNXLGNBQWMsQ0F1SDFCO1NBdkhZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVjYXB0Y2hhU2V0dGluZ3MgfSBmcm9tICduZy1yZWNhcHRjaGEvcmVjYXB0Y2hhL3JlY2FwdGNoYS1zZXR0aW5ncyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBmaWx0ZXIsIGNvbmNhdE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2NvcmUuY29uc3RzJztcbmltcG9ydCB7IFBhcmFtZXRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGFyYW1ldGVycy5zZXJ2aWNlJztcblxuLy9pbXBvcnQgKiBmcm9tICcuLi9hc3NldHMvZWMtaTE4bidcbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FwdGNoYVNlcnZpY2Uge1xuICAgIFxuICAgIHByaXZhdGUgY2FwdGNoYVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxSZWNhcHRjaGFTZXR0aW5ncz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHtzaXRlS2V5OicnfSlcbiAgICBwdWJsaWMgY2FwdGNoYSA9IHRoaXMuY2FwdGNoYVN1YmplY3QuYXNPYnNlcnZhYmxlKClcbiAgICBcbiAgICBwdWJsaWMgcGFyYW1zOiBhbnk7XG5cbiAgICBwcml2YXRlIHVybEJhc2VGb3JtYXQ6c3RyaW5nXG4gICAgcHJpdmF0ZSB0ZXN0aW5nOnN0cmluZyA9IFwiZWFzeWNvbW1lcmNldGVjaFwiXG4gICAgcHJpdmF0ZSBwcm9kdWN0aW9uRW52aXJvbm1lbnQ6Qm9vbGVhbiA9IGZhbHNlO1xuICAgIFxuICAgIHByaXZhdGUgcmVjYXB0Y2hhU2l0ZUtleXNVcmwgPSAnLi9hc3NldHMvcmVjYXB0Y2hhL3JlY2FwdGNoYS1zaXRlLWtleXMuanNvbic7XG4gICAgcHJpdmF0ZSByZWNhcHRjaGFTaXRlc1VybCA9ICcuL2Fzc2V0cy9yZWNhcHRjaGEvcmVjYXB0Y2hhLXNpdGVzLmpzb24nO1xuICAgIHByaXZhdGUgcmVjYXB0Y2hhU2l0ZXNVcmxQcm9kID0gJy4vYXNzZXRzL3JlY2FwdGNoYS9yZWNhcHRjaGEtc2l0ZXMtcHJvZC5qc29uJ1xuXG4gICAgcHJpdmF0ZSBSRUNBUFRDSEFfU0lURV9LRVlTIFxuICAgIHByaXZhdGUgUkVDQVBUQ0hBX1NJVEVTIFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDYXJnYSBsYXMgY29uZmlndXJhY2lvbmVzIGluaWNpYWxlc1xuICAgICAqIEBwYXJhbSBjb25zdHMgQ29uc3RhbnRlcyBkZWwgY29yZVxuICAgICAqIEBwYXJhbSBjb25uZWN0aW9uIFNlcnZpY2lvIHBhcmEgcmVhbGl6YXIgbGFzIHBldGljaW9uZXMgSFRUUCBhbCBiYWNrZW5kXG4gICAgICogQHBhcmFtIGh0dHAgU2VydmljaW8gdXRpbGl6YWRvIHBhcmEgb2J0ZW5lciBhcmNoaXZvcyBlc3RhdGljb3MgY29udGVuaWRvcyBkZW50cm8gZGUgbGEgYXBsaWNhY2nDs25cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGh0dHA6SHR0cENsaWVudCxcbiAgICAgICAgcHJvdGVjdGVkIHBhcmFtc1NydjogUGFyYW1ldGVyc1NlcnZpY2UsXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wYXJhbXNTcnYucGFyYW1ldGVycy5zdWJzY3JpYmUocGFyYW0gPT4gdGhpcy5wYXJhbXMgPSBwYXJhbSlcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIENhcmdhIGxhIGRpcmVjY2lvbiBkZSBsYSBwYWdpbmEgYWN0dWFsIHF1ZSBzZXJhIHV0aWxpemFkYSBjb21vIGNsYXZlIHBhcmEgb2J0ZW5lclxuICAgICAgICAgICAgICogbGEgY2xhdmUgcG9yIGRlZmVjdG8gcXVlIHBlcnRlbmVjZSBhIGVzdGEgZGlyZWNjaW9uLCBpbmljaWFsaXphIGxhIGNvbmZpZ3VyYWNpb24gaW5pY2lhbC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy51cmxCYXNlRm9ybWF0ID0gdGhpcy5mb3JtYXRVcmwobG9jYXRpb24uaHJlZilcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdGlvbkVudmlyb25tZW50ID0gdGhpcy5pc1Byb2QoKVxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplcigpXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IHBhdGggcXVlIGNvbnRpZW5lIGxhIGRpcmVjY2lvbiBkZWwgZW5kcG9pbnQgcmVmZXJpZG8gYWwgY2FwdGNoYVxuICAgICAqL1xuICAgIHByaXZhdGUgY2FwdGNoYUFwaSA9ICgpID0+ICdzaG9wLWFwaS9jaGFubmVscyc7XG4gICAgXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERldnVlbHZlIHRydWUgc2kgbGEgdXJsIGVzIGRlIHByb2R1Y2Npb24sIGZhbHNlIGVuIGNhc28gY29udHJhcmlvLiBcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzUHJvZCA9ICgpID0+ICF0aGlzLnVybEJhc2VGb3JtYXQuaW5jbHVkZXModGhpcy50ZXN0aW5nKVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFByaW9yaXphIHNpIGV4aXN0ZSB1biBwYXJhbWV0cm8gZGVzZGUgZWwgYmFja2VuZCBkZSBub21icmUgJ3JlY2FwdGNoYV9rZXlfY2FuYWwnLCBcbiAgICAgKiBkZSBubyBleGlzdGlyIGVzdGUgYnVzY2EgdW5vIGRlIHRpcG8gZ2VuZXJhbCBkZSBub21icmUgJ3JlY2FwdGNoYV9rZXknLFxuICAgICAqIHkgZW4gY2FzbyBkZSBxdWUgZXN0ZSBubyBleGlzdGEgc2UgcmVhbGl6YSBsbyBzaWd1aWVudGU6IFxuICAgICAqIGNhcmdhIGxhcyB2YXJpYWJsZXMgUkVDQVBUQ0hBX1NJVEVTIHkgUkVDQVBUQ0hBX1NJVEVfS0VZUywgY29uIGxvcyB2YWxvcmVzXG4gICAgICogZGUgbG9zIEpzb24gZXN0YXRpY29zLCBwYXJhIHBvc3Rlcmlvcm1lbnRlIG9idGVuZXIgbGEgXCJzaXRlS2V5XCIoY2xhdmUgZGVsIGNhcHRjaGEpIGVuIGNhc29cbiAgICAgKiBkZSBxdWUgbm8gdmVuZ2EgZGVzZGUgZWwgYmFja2VuZC4gXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplciA9ICgpID0+IHtcbiAgICAgICAgbGV0IHBhcmFtVGhpc0NoYW5uZWwgPSB0aGlzLnBhcmFtcy5maW5kKHBhcmFtID0+IHBhcmFtLmNvZGUgPT0gJ3JlY2FwdGNoYV9rZXlfJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSlcbiAgICAgICAgaWYgKHBhcmFtVGhpc0NoYW5uZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2FwdGNoYVN1YmplY3QubmV4dCh7IHNpdGVLZXk6IHBhcmFtVGhpc0NoYW5uZWwudmFsdWUgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBwYXJhbUdlbmVyYWwgPSB0aGlzLnBhcmFtcy5maW5kKHBhcmFtID0+IHBhcmFtLmNvZGUgPT0gJ3JlY2FwdGNoYV9rZXknKVxuICAgICAgICAgICAgaWYgKHBhcmFtR2VuZXJhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FwdGNoYVN1YmplY3QubmV4dCh7IHNpdGVLZXk6IHBhcmFtR2VuZXJhbC52YWx1ZSB9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFJlY2FwdGNoYVNpdGVzKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgLy9maWx0ZXIoIGUgPT4gZVt0aGlzLnVybEJhc2VGb3JtYXQrJ2VlJ10gKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKHJlcyA9PiB0aGlzLlJFQ0FQVENIQV9TSVRFUyA9IHJlcyksXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcChlID0+IHRoaXMuZ2V0UmVjYXB0Y2hhU2l0ZUtleXMoKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHJlcyA9PiB0aGlzLlJFQ0FQVENIQV9TSVRFX0tFWVMgPSByZXMpKSkpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0+IHRoaXMuZ2V0U2l0ZUtleSgpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPD59IERhdG9zIG9idGVuaWRvcyBkZWwgYXJjaGl2byBjb24gbGFzIGNsYXZlcyBjYXB0Y2hhXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRSZWNhcHRjaGFTaXRlS2V5cyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMucmVjYXB0Y2hhU2l0ZUtleXNVcmwpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNlIG9idGllbmUgbG9zIGRhdG9zIHNlZ3VuIGVsIGVudG9ybm8gZW4gcXVlIHNlIGVqZWN1dGVcbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTw+fSBEYXRvcyBvYnRlbmlkb3MgZGVsIGFyY2hpdm8gY29uIGxhcyB1cmwgZGUgbG9zIHNpdGlvc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UmVjYXB0Y2hhU2l0ZXMgPSAoKSA9PiB0aGlzLnByb2R1Y3Rpb25FbnZpcm9ubWVudCA/IHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMucmVjYXB0Y2hhU2l0ZXNVcmxQcm9kKSA6IHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMucmVjYXB0Y2hhU2l0ZXNVcmwpXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gR2VuZXJhIHVuYSBwZXRpY2lvbiBwYXJhIHJlY2liaXIgbGEgY2xhdmUgZGVsIGNhcHRjaGEuIEVuIGNhc28gZGUgbm8gdGVuZXIgZXhpdG8sXG4gICAgICogdXRpbGl6YSBsb3MgYXJjaGl2b3MgZXN0YXRpY29zIHBhcmEgcmV0b3JuYXIgdW5hIGNsYXZlIHBvciBkZWZlY3RvLiBSZWxsZW5hIGVsIE9ic2VydmFibGUgY29uXG4gICAgICogbG9zIGRhdG9zIGdlbmVyYWRvcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNpdGVLZXkgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5jYXB0Y2hhQXBpKCkpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICByZXMgPT4geyBjb25zb2xlLmxvZyhyZXMpOyB0aGlzLmNhcHRjaGFTdWJqZWN0Lm5leHQoeyBzaXRlS2V5OiByZXMuc2l0ZUtleSA/IHJlcy5zaXRlS2V5IDogdGhpcy5SRUNBUFRDSEFfU0lURV9LRVlTW3RoaXMuUkVDQVBUQ0hBX1NJVEVTW3RoaXMudXJsQmFzZUZvcm1hdF1dIH0pIH0sXG4gICAgICAgICAgICBlcnIgPT4geyBjb25zb2xlLmxvZygnRVJST1IgMScsIGVycik7IHRoaXMuY2FwdGNoYVN1YmplY3QubmV4dCh7IHNpdGVLZXk6IHRoaXMuUkVDQVBUQ0hBX1NJVEVTW3RoaXMuUkVDQVBUQ0hBX1NJVEVTW3RoaXMudXJsQmFzZUZvcm1hdF1dIH0pIH1cbiAgICAgICAgKS5jYXRjaChlcnIgPT4geyBjb25zb2xlLmxvZygnRVJST1IgMiAnLCBlcnIsICcgQmFzZSB1cmw6JywgdGhpcy5jb25zdHMuZ2V0VXJsQmFzZSgpKTsgdGhpcy5jYXB0Y2hhU3ViamVjdC5uZXh0KHsgc2l0ZUtleTogdGhpcy5SRUNBUFRDSEFfU0lURV9LRVlTW3RoaXMuUkVDQVBUQ0hBX1NJVEVTW3RoaXMudXJsQmFzZUZvcm1hdF1dIH0pIH0pXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5jYXB0Y2hhKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IENsYXZlIGRlbCBjYXB0Y2hhLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRLZXkgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcHRjaGEucGlwZShtYXAoKGVsZW0pID0+IGVsZW0/LnNpdGVLZXkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVjaWJlIHVuYSB1cmwgeSBzZSBlbmNhcmdhIGRlIHF1aXRhcmxlIFwiaHR0cFwiLCBcIi9cIiB5IGxhcyBkZW1hcyBydXRhcywgcGFyYSBkZXZvbHZlciBsYSB1cmxcbiAgICAgKiBkZWwgc2l0aW8gY29uIHVuYSBmb3JtYXRvIGxpbXBpby4gRWplbXBsbyBcImh0dHBzOi8vZWplbXBsby5jb20uYXIvcnV0YTEvcnV0YTIvXCIgYSBcImVqZW1wbG8uY29tLmFyXCIgXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCB1cmwgcXVlIHNlcmEgZm9ybWF0ZWFkYSBcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSB1cmwgZm9ybWF0ZWFkYVxuICAgICAqL1xuICAgIHByaXZhdGUgZm9ybWF0VXJsID0gKHVybDpzdHJpbmcpID0+IHVybC5zcGxpdChcIi9cIikuZmlsdGVyKGUgPT4gZSAhPSBcIi9cIikuZmlsdGVyKGUgPT4gIWUuaW5jbHVkZXMoXCJodHRwXCIpKS5maWx0ZXIoZSA9PiBlLmxlbmd0aCkuc2xpY2UoMCwxKS5wb3AoKVxuXG59Il19
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdGNoYS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcHRjaGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQVUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7QUFFbkUsbUNBQW1DO0FBSW5DLElBQWEsY0FBYyxHQUEzQixNQUFhLGNBQWM7SUFpQnZCOzs7OztPQUtHO0lBQ0gsWUFBb0IsTUFBaUIsRUFDekIsVUFBNkIsRUFDN0IsSUFBZSxFQUNiLFNBQTRCO1FBSHRCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsU0FBSSxHQUFKLElBQUksQ0FBVztRQUNiLGNBQVMsR0FBVCxTQUFTLENBQW1CO1FBeEJsQyxtQkFBYyxHQUF1QyxJQUFJLGVBQWUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZGLFlBQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBSzNDLFlBQU8sR0FBVSxrQkFBa0IsQ0FBQTtRQUNuQywwQkFBcUIsR0FBVyxLQUFLLENBQUM7UUFFdEMseUJBQW9CLEdBQUcsNkNBQTZDLENBQUM7UUFDckUsc0JB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LE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7UUF6RnhJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFDakU7OztXQUdHO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNsRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQzFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0NBbUZKLENBQUE7O1lBaEcrQixTQUFTO1lBQ2IsaUJBQWlCO1lBQ3hCLFVBQVU7WUFDRixpQkFBaUI7OztBQTFCakMsY0FBYztJQUgxQixVQUFVLENBQUM7UUFDUixVQUFVLEVBQUUsTUFBTTtLQUNyQixDQUFDO0dBQ1csY0FBYyxDQXVIMUI7U0F2SFksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWNhcHRjaGFTZXR0aW5ncyB9IGZyb20gJ25nLXJlY2FwdGNoYS9yZWNhcHRjaGEvcmVjYXB0Y2hhLXNldHRpbmdzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIGZpbHRlciwgY29uY2F0TWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgUGFyYW1ldGVyc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYXJhbWV0ZXJzLnNlcnZpY2UnO1xuXG4vL2ltcG9ydCAqIGZyb20gJy4uL2Fzc2V0cy9lYy1pMThuJ1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYXB0Y2hhU2VydmljZSB7XG4gICAgXG4gICAgcHJpdmF0ZSBjYXB0Y2hhU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFJlY2FwdGNoYVNldHRpbmdzPiA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe3NpdGVLZXk6Jyd9KVxuICAgIHB1YmxpYyBjYXB0Y2hhID0gdGhpcy5jYXB0Y2hhU3ViamVjdC5hc09ic2VydmFibGUoKVxuICAgIFxuICAgIHB1YmxpYyBwYXJhbXM6IGFueTtcblxuICAgIHByaXZhdGUgdXJsQmFzZUZvcm1hdDpzdHJpbmdcbiAgICBwcml2YXRlIHRlc3Rpbmc6c3RyaW5nID0gXCJlYXN5Y29tbWVyY2V0ZWNoXCJcbiAgICBwcml2YXRlIHByb2R1Y3Rpb25FbnZpcm9ubWVudDpCb29sZWFuID0gZmFsc2U7XG4gICAgXG4gICAgcHJpdmF0ZSByZWNhcHRjaGFTaXRlS2V5c1VybCA9ICcuL2Fzc2V0cy9yZWNhcHRjaGEvcmVjYXB0Y2hhLXNpdGUta2V5cy5qc29uJztcbiAgICBwcml2YXRlIHJlY2FwdGNoYVNpdGVzVXJsID0gJy4vYXNzZXRzL3JlY2FwdGNoYS9yZWNhcHRjaGEtc2l0ZXMuanNvbic7XG4gICAgcHJpdmF0ZSByZWNhcHRjaGFTaXRlc1VybFByb2QgPSAnLi9hc3NldHMvcmVjYXB0Y2hhL3JlY2FwdGNoYS1zaXRlcy1wcm9kLmpzb24nXG5cbiAgICBwcml2YXRlIFJFQ0FQVENIQV9TSVRFX0tFWVMgXG4gICAgcHJpdmF0ZSBSRUNBUFRDSEFfU0lURVMgXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENhcmdhIGxhcyBjb25maWd1cmFjaW9uZXMgaW5pY2lhbGVzXG4gICAgICogQHBhcmFtIGNvbnN0cyBDb25zdGFudGVzIGRlbCBjb3JlXG4gICAgICogQHBhcmFtIGNvbm5lY3Rpb24gU2VydmljaW8gcGFyYSByZWFsaXphciBsYXMgcGV0aWNpb25lcyBIVFRQIGFsIGJhY2tlbmRcbiAgICAgKiBAcGFyYW0gaHR0cCBTZXJ2aWNpbyB1dGlsaXphZG8gcGFyYSBvYnRlbmVyIGFyY2hpdm9zIGVzdGF0aWNvcyBjb250ZW5pZG9zIGRlbnRybyBkZSBsYSBhcGxpY2FjacOzblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uc3RzOiBDb25zdGFudHMsXG4gICAgICAgIHByaXZhdGUgY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaHR0cDpIdHRwQ2xpZW50LFxuICAgICAgICBwcm90ZWN0ZWQgcGFyYW1zU3J2OiBQYXJhbWV0ZXJzU2VydmljZSxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmFtc1Nydi5wYXJhbWV0ZXJzLnN1YnNjcmliZShwYXJhbSA9PiB0aGlzLnBhcmFtcyA9IHBhcmFtKVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FyZ2EgbGEgZGlyZWNjaW9uIGRlIGxhIHBhZ2luYSBhY3R1YWwgcXVlIHNlcmEgdXRpbGl6YWRhIGNvbW8gY2xhdmUgcGFyYSBvYnRlbmVyXG4gICAgICAgICAgICAgKiBsYSBjbGF2ZSBwb3IgZGVmZWN0byBxdWUgcGVydGVuZWNlIGEgZXN0YSBkaXJlY2Npb24sIGluaWNpYWxpemEgbGEgY29uZmlndXJhY2lvbiBpbmljaWFsLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLnVybEJhc2VGb3JtYXQgPSB0aGlzLmZvcm1hdFVybChsb2NhdGlvbi5ocmVmKVxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0aW9uRW52aXJvbm1lbnQgPSB0aGlzLmlzUHJvZCgpXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVyKClcbiAgICB9XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHJldHVybnMge3N0cmluZ30gcGF0aCBxdWUgY29udGllbmUgbGEgZGlyZWNjaW9uIGRlbCBlbmRwb2ludCByZWZlcmlkbyBhbCBjYXB0Y2hhXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYXB0Y2hhQXBpID0gKCkgPT4gJ3Nob3AtYXBpL2NoYW5uZWxzJztcbiAgICBcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRGV2dWVsdmUgdHJ1ZSBzaSBsYSB1cmwgZXMgZGUgcHJvZHVjY2lvbiwgZmFsc2UgZW4gY2FzbyBjb250cmFyaW8uIFxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgICAqL1xuICAgIHByaXZhdGUgaXNQcm9kID0gKCkgPT4gIXRoaXMudXJsQmFzZUZvcm1hdC5pbmNsdWRlcyh0aGlzLnRlc3RpbmcpXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUHJpb3JpemEgc2kgZXhpc3RlIHVuIHBhcmFtZXRybyBkZXNkZSBlbCBiYWNrZW5kIGRlIG5vbWJyZSAncmVjYXB0Y2hhX2tleV9jYW5hbCcsIFxuICAgICAqIGRlIG5vIGV4aXN0aXIgZXN0ZSBidXNjYSB1bm8gZGUgdGlwbyBnZW5lcmFsIGRlIG5vbWJyZSAncmVjYXB0Y2hhX2tleScsXG4gICAgICogeSBlbiBjYXNvIGRlIHF1ZSBlc3RlIG5vIGV4aXN0YSBzZSByZWFsaXphIGxvIHNpZ3VpZW50ZTogXG4gICAgICogY2FyZ2EgbGFzIHZhcmlhYmxlcyBSRUNBUFRDSEFfU0lURVMgeSBSRUNBUFRDSEFfU0lURV9LRVlTLCBjb24gbG9zIHZhbG9yZXNcbiAgICAgKiBkZSBsb3MgSnNvbiBlc3RhdGljb3MsIHBhcmEgcG9zdGVyaW9ybWVudGUgb2J0ZW5lciBsYSBcInNpdGVLZXlcIihjbGF2ZSBkZWwgY2FwdGNoYSkgZW4gY2Fzb1xuICAgICAqIGRlIHF1ZSBubyB2ZW5nYSBkZXNkZSBlbCBiYWNrZW5kLiBcbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRpYWxpemVyID0gKCkgPT4ge1xuICAgICAgICBsZXQgcGFyYW1UaGlzQ2hhbm5lbCA9IHRoaXMucGFyYW1zLmZpbmQocGFyYW0gPT4gcGFyYW0uY29kZSA9PSAncmVjYXB0Y2hhX2tleV8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpKVxuICAgICAgICBpZiAocGFyYW1UaGlzQ2hhbm5lbCkge1xuICAgICAgICAgICAgdGhpcy5jYXB0Y2hhU3ViamVjdC5uZXh0KHsgc2l0ZUtleTogcGFyYW1UaGlzQ2hhbm5lbC52YWx1ZSB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHBhcmFtR2VuZXJhbCA9IHRoaXMucGFyYW1zLmZpbmQocGFyYW0gPT4gcGFyYW0uY29kZSA9PSAncmVjYXB0Y2hhX2tleScpXG4gICAgICAgICAgICBpZiAocGFyYW1HZW5lcmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0Y2hhU3ViamVjdC5uZXh0KHsgc2l0ZUtleTogcGFyYW1HZW5lcmFsLnZhbHVlIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmVjYXB0Y2hhU2l0ZXMoKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAvL2ZpbHRlciggZSA9PiBlW3RoaXMudXJsQmFzZUZvcm1hdCsnZWUnXSApLFxuICAgICAgICAgICAgICAgICAgICBtYXAocmVzID0+IHRoaXMuUkVDQVBUQ0hBX1NJVEVTID0gcmVzKSxcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKGUgPT4gdGhpcy5nZXRSZWNhcHRjaGFTaXRlS2V5cygpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAocmVzID0+IHRoaXMuUkVDQVBUQ0hBX1NJVEVfS0VZUyA9IHJlcykpKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPT4gdGhpcy5nZXRTaXRlS2V5KCkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHJldHVybnMge09ic2VydmFibGU8Pn0gRGF0b3Mgb2J0ZW5pZG9zIGRlbCBhcmNoaXZvIGNvbiBsYXMgY2xhdmVzIGNhcHRjaGFcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFJlY2FwdGNoYVNpdGVLZXlzID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4odGhpcy5yZWNhcHRjaGFTaXRlS2V5c1VybClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2Ugb2J0aWVuZSBsb3MgZGF0b3Mgc2VndW4gZWwgZW50b3JubyBlbiBxdWUgc2UgZWplY3V0ZVxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPD59IERhdG9zIG9idGVuaWRvcyBkZWwgYXJjaGl2byBjb24gbGFzIHVybCBkZSBsb3Mgc2l0aW9zXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRSZWNhcHRjaGFTaXRlcyA9ICgpID0+IHRoaXMucHJvZHVjdGlvbkVudmlyb25tZW50ID8gdGhpcy5odHRwLmdldDxhbnlbXT4odGhpcy5yZWNhcHRjaGFTaXRlc1VybFByb2QpIDogdGhpcy5odHRwLmdldDxhbnlbXT4odGhpcy5yZWNhcHRjaGFTaXRlc1VybClcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZW5lcmEgdW5hIHBldGljaW9uIHBhcmEgcmVjaWJpciBsYSBjbGF2ZSBkZWwgY2FwdGNoYS4gRW4gY2FzbyBkZSBubyB0ZW5lciBleGl0byxcbiAgICAgKiB1dGlsaXphIGxvcyBhcmNoaXZvcyBlc3RhdGljb3MgcGFyYSByZXRvcm5hciB1bmEgY2xhdmUgcG9yIGRlZmVjdG8uIFJlbGxlbmEgZWwgT2JzZXJ2YWJsZSBjb25cbiAgICAgKiBsb3MgZGF0b3MgZ2VuZXJhZG9zLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0U2l0ZUtleSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmNhcHRjaGFBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7IGNvbnNvbGUubG9nKHJlcyk7IHRoaXMuY2FwdGNoYVN1YmplY3QubmV4dCh7IHNpdGVLZXk6IHJlcy5zaXRlS2V5ID8gcmVzLnNpdGVLZXkgOiB0aGlzLlJFQ0FQVENIQV9TSVRFX0tFWVNbdGhpcy5SRUNBUFRDSEFfU0lURVNbdGhpcy51cmxCYXNlRm9ybWF0XV0gfSkgfSxcbiAgICAgICAgICAgIGVyciA9PiB7IGNvbnNvbGUubG9nKCdFUlJPUiAxJywgZXJyKTsgdGhpcy5jYXB0Y2hhU3ViamVjdC5uZXh0KHsgc2l0ZUtleTogdGhpcy5SRUNBUFRDSEFfU0lURVNbdGhpcy5SRUNBUFRDSEFfU0lURVNbdGhpcy51cmxCYXNlRm9ybWF0XV0gfSkgfVxuICAgICAgICApLmNhdGNoKGVyciA9PiB7IGNvbnNvbGUubG9nKCdFUlJPUiAyICcsIGVyciwgJyBCYXNlIHVybDonLCB0aGlzLmNvbnN0cy5nZXRVcmxCYXNlKCkpOyB0aGlzLmNhcHRjaGFTdWJqZWN0Lm5leHQoeyBzaXRlS2V5OiB0aGlzLlJFQ0FQVENIQV9TSVRFX0tFWVNbdGhpcy5SRUNBUFRDSEFfU0lURVNbdGhpcy51cmxCYXNlRm9ybWF0XV0gfSkgfSlcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmNhcHRjaGEpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHJldHVybnMge3N0cmluZ30gQ2xhdmUgZGVsIGNhcHRjaGEuXG4gICAgICovXG4gICAgcHVibGljIGdldEtleSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwdGNoYS5waXBlKG1hcCgoZWxlbSkgPT4gZWxlbT8uc2l0ZUtleSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWNpYmUgdW5hIHVybCB5IHNlIGVuY2FyZ2EgZGUgcXVpdGFybGUgXCJodHRwXCIsIFwiL1wiIHkgbGFzIGRlbWFzIHJ1dGFzLCBwYXJhIGRldm9sdmVyIGxhIHVybFxuICAgICAqIGRlbCBzaXRpbyBjb24gdW5hIGZvcm1hdG8gbGltcGlvLiBFamVtcGxvIFwiaHR0cHM6Ly9lamVtcGxvLmNvbS5hci9ydXRhMS9ydXRhMi9cIiBhIFwiZWplbXBsby5jb20uYXJcIiBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIHVybCBxdWUgc2VyYSBmb3JtYXRlYWRhIFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IHVybCBmb3JtYXRlYWRhXG4gICAgICovXG4gICAgcHJpdmF0ZSBmb3JtYXRVcmwgPSAodXJsOnN0cmluZykgPT4gdXJsLnNwbGl0KFwiL1wiKS5maWx0ZXIoZSA9PiBlICE9IFwiL1wiKS5maWx0ZXIoZSA9PiAhZS5pbmNsdWRlcyhcImh0dHBcIikpLmZpbHRlcihlID0+IGUubGVuZ3RoKS5zbGljZSgwLDEpLnBvcCgpXG5cbn0iXX0=