ng-easycommerce-v18 0.4.4-beta.2 → 0.4.5

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 (206) hide show
  1. package/README.md +128 -125
  2. package/assets/decidirFormEc.html +514 -514
  3. package/assets/ec-i18n/ct.json +286 -282
  4. package/assets/ec-i18n/en.json +12 -1
  5. package/assets/ec-i18n/es.json +445 -434
  6. package/assets/ec-i18n/fr.json +4 -0
  7. package/assets/ec-i18n/gl.json +286 -282
  8. package/assets/ec-i18n/pr.json +286 -282
  9. package/assets/images/cards-occasional.svg +21 -21
  10. package/assets/recaptcha/recaptcha-site-keys.json +3 -3
  11. package/assets/recaptcha/recaptcha-sites-prod.json +38 -38
  12. package/assets/recaptcha/recaptcha-sites.json +52 -52
  13. package/esm2022/lib/api/connection.service.mjs +7 -6
  14. package/esm2022/lib/classes/checkout/steps.mjs +1 -1
  15. package/esm2022/lib/classes/component-helper.mjs +1 -1
  16. package/esm2022/lib/classes/filters/attributes-filter.mjs +1 -1
  17. package/esm2022/lib/classes/filters/category-filter.mjs +1 -1
  18. package/esm2022/lib/classes/filters/dynamics-filter.mjs +1 -1
  19. package/esm2022/lib/classes/filters/filter-factory.mjs +1 -1
  20. package/esm2022/lib/classes/filters/filter.mjs +1 -1
  21. package/esm2022/lib/classes/filters/index.mjs +1 -1
  22. package/esm2022/lib/classes/filters/price_range-filter.mjs +1 -1
  23. package/esm2022/lib/classes/filters/sort-filter.mjs +1 -1
  24. package/esm2022/lib/classes/index.mjs +1 -1
  25. package/esm2022/lib/classes/user.mjs +1 -1
  26. package/esm2022/lib/constants/api.constants.service.mjs +1 -1
  27. package/esm2022/lib/constants/core.constants.service.mjs +1 -1
  28. package/esm2022/lib/constants/index.mjs +1 -1
  29. package/esm2022/lib/ec-components/abstractions-components/block-ec.component.mjs +1 -1
  30. package/esm2022/lib/ec-components/abstractions-components/index.mjs +1 -1
  31. package/esm2022/lib/ec-components/abstractions-components/menu-ec.component.mjs +1 -1
  32. package/esm2022/lib/ec-components/account-ec/account-ec.component.mjs +3 -3
  33. package/esm2022/lib/ec-components/account-ec/index.mjs +1 -1
  34. package/esm2022/lib/ec-components/account-ec/order-ec/order-ec.component.mjs +5 -9
  35. package/esm2022/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.mjs +11 -5
  36. package/esm2022/lib/ec-components/auth-ec/auth-ec.component.mjs +3 -3
  37. package/esm2022/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.mjs +3 -3
  38. package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs +3 -3
  39. package/esm2022/lib/ec-components/auth-ec/index.mjs +1 -1
  40. package/esm2022/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.mjs +3 -3
  41. package/esm2022/lib/ec-components/auth-ec/password-reset-ec/password-reset-ec.component.mjs +3 -3
  42. package/esm2022/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.mjs +3 -3
  43. package/esm2022/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.mjs +3 -3
  44. package/esm2022/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.mjs +3 -3
  45. package/esm2022/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.mjs +3 -3
  46. package/esm2022/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.mjs +3 -3
  47. package/esm2022/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.mjs +3 -3
  48. package/esm2022/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.mjs +3 -4
  49. package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +3 -3
  50. package/esm2022/lib/ec-components/blocks-ec/blocks-ec.component.mjs +3 -3
  51. package/esm2022/lib/ec-components/blocks-ec/index.mjs +1 -1
  52. package/esm2022/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.mjs +3 -3
  53. package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +12 -3
  54. package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +3 -3
  55. package/esm2022/lib/ec-components/cart-ec/index.mjs +1 -1
  56. package/esm2022/lib/ec-components/checkout-ec/checkout-ec.component.mjs +10 -3
  57. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.mjs +3 -3
  58. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.mjs +3 -3
  59. package/esm2022/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.mjs +5 -3
  60. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.mjs +44 -4
  61. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.mjs +3 -3
  62. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.mjs +1 -1
  63. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.mjs +3 -3
  64. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.mjs +3 -3
  65. package/esm2022/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.mjs +3 -3
  66. package/esm2022/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.mjs +3 -3
  67. package/esm2022/lib/ec-components/checkout-ec/success-ec/success-ec.component.mjs +4 -3
  68. package/esm2022/lib/ec-components/collection-ec/collection-ec.component.mjs +3 -3
  69. package/esm2022/lib/ec-components/contact-ec/contact-ec.component.mjs +1 -1
  70. package/esm2022/lib/ec-components/coupon-ec/coupon-ec.component.mjs +3 -3
  71. package/esm2022/lib/ec-components/credit-account-banner-ec/credit-account-banner-ec.component.mjs +79 -0
  72. package/esm2022/lib/ec-components/faqs-ec/faqs-ec.component.mjs +3 -3
  73. package/esm2022/lib/ec-components/filters-ec/filters-ec.component.mjs +3 -3
  74. package/esm2022/lib/ec-components/filters-sort-ec/filters-sort-ec.component.mjs +3 -3
  75. package/esm2022/lib/ec-components/footer-ec/footer-ec.component.mjs +3 -3
  76. package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +27 -13
  77. package/esm2022/lib/ec-components/home-ec/home-ec.component.mjs +3 -3
  78. package/esm2022/lib/ec-components/index.mjs +2 -1
  79. package/esm2022/lib/ec-components/price-range-filter/price-range-filter.component.mjs +3 -3
  80. package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +1 -1
  81. package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +3 -3
  82. package/esm2022/lib/ec-components/related-products-ec/related-products-ec.component.mjs +3 -3
  83. package/esm2022/lib/ec-components/reviews-ec/reviews-ec.component.mjs +3 -3
  84. package/esm2022/lib/ec-components/reviews-form-ec/reviews-form-ec.component.mjs +3 -3
  85. package/esm2022/lib/ec-components/section-container-ec/section-container-ec.component.mjs +3 -3
  86. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/index.mjs +1 -1
  87. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-email-ec/share-email-ec.component.mjs +3 -3
  88. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-facebook-ec/share-facebook-ec.component.mjs +3 -3
  89. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-pinterest-ec/share-pinterest-ec.component.mjs +3 -3
  90. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-twitter-ec/share-twitter-ec.component.mjs +3 -3
  91. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-whatsapp-ec/share-whatsapp-ec.component.mjs +3 -3
  92. package/esm2022/lib/ec-components/share-ec/share-ec.component.mjs +3 -3
  93. package/esm2022/lib/ec-components/sidebar-ec/sidebar-ec.component.mjs +5 -7
  94. package/esm2022/lib/ec-components/stores-ec/stores-ec.component.mjs +3 -3
  95. package/esm2022/lib/ec-components/variants-ec/variants-ec.component.mjs +3 -3
  96. package/esm2022/lib/ec-components/widgets-ec/decidir-ec/decidir-ec.component.mjs +3 -3
  97. package/esm2022/lib/ec-components/widgets-ec/index.mjs +1 -1
  98. package/esm2022/lib/ec-components/widgets-ec/loading/index.mjs +1 -1
  99. package/esm2022/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.mjs +3 -3
  100. package/esm2022/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.mjs +3 -3
  101. package/esm2022/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.mjs +3 -3
  102. package/esm2022/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.mjs +3 -3
  103. package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +5 -11
  104. package/esm2022/lib/ec-components/widgets-ec/rating-ec/rating-ec.component.mjs +3 -3
  105. package/esm2022/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.mjs +3 -3
  106. package/esm2022/lib/ec-components/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.mjs +3 -3
  107. package/esm2022/lib/ec-directive/index.mjs +1 -1
  108. package/esm2022/lib/ec-directive/product-off.directive.mjs +1 -1
  109. package/esm2022/lib/ec-directive/product-stock.directive.mjs +1 -1
  110. package/esm2022/lib/ec-guards/auth.guard.mjs +1 -1
  111. package/esm2022/lib/ec-pipe/ec-currency-symbol.pipe.mjs +1 -1
  112. package/esm2022/lib/ec-pipe/ec-safe-html.pipe.mjs +1 -1
  113. package/esm2022/lib/ec-pipe/index.mjs +1 -1
  114. package/esm2022/lib/ec-services/addressing.service.mjs +1 -1
  115. package/esm2022/lib/ec-services/analytics/analytics.service.mjs +1 -1
  116. package/esm2022/lib/ec-services/analytics/doppler.service.mjs +1 -1
  117. package/esm2022/lib/ec-services/analytics/facebook-pixel.service.mjs +1 -1
  118. package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +1 -1
  119. package/esm2022/lib/ec-services/analytics/gtm.service.mjs +1 -1
  120. package/esm2022/lib/ec-services/analytics/index.mjs +1 -1
  121. package/esm2022/lib/ec-services/analytics/metricool-pixel.service.mjs +11 -11
  122. package/esm2022/lib/ec-services/auth.service.mjs +1 -1
  123. package/esm2022/lib/ec-services/auth.storage.service.mjs +1 -1
  124. package/esm2022/lib/ec-services/base-api.service.mjs +1 -1
  125. package/esm2022/lib/ec-services/blocks-repository.service.mjs +1 -1
  126. package/esm2022/lib/ec-services/blocks.service.mjs +1 -1
  127. package/esm2022/lib/ec-services/cart.service.mjs +42 -7
  128. package/esm2022/lib/ec-services/channel.service.mjs +1 -1
  129. package/esm2022/lib/ec-services/checkout.service.mjs +1 -1
  130. package/esm2022/lib/ec-services/currency.service.mjs +1 -1
  131. package/esm2022/lib/ec-services/filters.service.mjs +1 -1
  132. package/esm2022/lib/ec-services/form.service.mjs +1 -1
  133. package/esm2022/lib/ec-services/index.mjs +2 -1
  134. package/esm2022/lib/ec-services/local-storage.service.mjs +1 -1
  135. package/esm2022/lib/ec-services/ngx-local-storage.service.mjs +1 -1
  136. package/esm2022/lib/ec-services/options.service.mjs +1 -1
  137. package/esm2022/lib/ec-services/order-utility.service.mjs +1 -1
  138. package/esm2022/lib/ec-services/orders.service.mjs +1 -1
  139. package/esm2022/lib/ec-services/pagination.service.mjs +1 -1
  140. package/esm2022/lib/ec-services/parameters.service.mjs +1 -1
  141. package/esm2022/lib/ec-services/payment.service.mjs +1 -1
  142. package/esm2022/lib/ec-services/price-visibility.service.mjs +40 -0
  143. package/esm2022/lib/ec-services/product-detail.service.mjs +45 -7
  144. package/esm2022/lib/ec-services/products.service.mjs +1 -1
  145. package/esm2022/lib/ec-services/re-captcha.service.mjs +1 -1
  146. package/esm2022/lib/ec-services/reviews.service.mjs +1 -1
  147. package/esm2022/lib/ec-services/runtime-config.service.mjs +13 -31
  148. package/esm2022/lib/ec-services/shipment.service.mjs +1 -1
  149. package/esm2022/lib/ec-services/stores.service.mjs +1 -1
  150. package/esm2022/lib/ec-services/test.service.mjs +1 -1
  151. package/esm2022/lib/ec-services/toast.service.mjs +1 -1
  152. package/esm2022/lib/interceptors/auth.interceptor.mjs +1 -1
  153. package/esm2022/lib/interceptors/index.mjs +1 -1
  154. package/esm2022/lib/interceptors/runtime-config.interceptor.mjs +1 -1
  155. package/esm2022/lib/interfaces/analytics/event-key.mjs +1 -1
  156. package/esm2022/lib/interfaces/analytics/facebook-pixel-data.mjs +1 -1
  157. package/esm2022/lib/interfaces/analytics/gtm-config.mjs +1 -1
  158. package/esm2022/lib/interfaces/analytics/index.mjs +1 -1
  159. package/esm2022/lib/interfaces/blocks.mjs +1 -1
  160. package/esm2022/lib/interfaces/checkout.mjs +1 -1
  161. package/esm2022/lib/interfaces/connection.mjs +1 -1
  162. package/esm2022/lib/interfaces/coupon.mjs +1 -1
  163. package/esm2022/lib/interfaces/currency.mjs +1 -1
  164. package/esm2022/lib/interfaces/deserializable.mjs +1 -1
  165. package/esm2022/lib/interfaces/environment.mjs +1 -1
  166. package/esm2022/lib/interfaces/faqs.mjs +1 -1
  167. package/esm2022/lib/interfaces/filter.mjs +1 -1
  168. package/esm2022/lib/interfaces/index.mjs +1 -1
  169. package/esm2022/lib/interfaces/options.mjs +1 -1
  170. package/esm2022/lib/interfaces/pagination.mjs +1 -1
  171. package/esm2022/lib/interfaces/parameter.mjs +1 -1
  172. package/esm2022/lib/interfaces/product.mjs +1 -1
  173. package/esm2022/lib/interfaces/runtime-config.mjs +1 -1
  174. package/esm2022/lib/interfaces/step.mjs +1 -1
  175. package/esm2022/lib/interfaces/storage.mjs +1 -1
  176. package/esm2022/lib/interfaces/store.mjs +1 -1
  177. package/esm2022/lib/interfaces/types/user.type.mjs +1 -1
  178. package/esm2022/lib/providers/index.mjs +1 -2
  179. package/esm2022/lib/providers/provideEnvironment.mjs +1 -1
  180. package/esm2022/lib/providers/provideRuntimeConfig.mjs +1 -1
  181. package/esm2022/lib/stores/currency.store.mjs +1 -1
  182. package/esm2022/public-api.mjs +1 -1
  183. package/fesm2022/ng-easycommerce-v18.mjs +429 -231
  184. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
  185. package/lib/api/connection.service.d.ts +4 -3
  186. package/lib/ec-components/account-ec/order-ec/order-ec.component.d.ts +2 -2
  187. package/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.d.ts +3 -0
  188. package/lib/ec-components/cart-ec/cart-ec.component.d.ts +4 -2
  189. package/lib/ec-components/checkout-ec/checkout-ec.component.d.ts +2 -0
  190. package/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +2 -0
  191. package/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.d.ts +6 -0
  192. package/lib/ec-components/checkout-ec/success-ec/success-ec.component.d.ts +1 -0
  193. package/lib/ec-components/credit-account-banner-ec/credit-account-banner-ec.component.d.ts +27 -0
  194. package/lib/ec-components/header-ec/header-ec.component.d.ts +12 -4
  195. package/lib/ec-components/index.d.ts +1 -0
  196. package/lib/ec-components/sidebar-ec/sidebar-ec.component.d.ts +2 -1
  197. package/lib/ec-components/widgets-ec/price-ec/price-ec.component.d.ts +2 -4
  198. package/lib/ec-services/cart.service.d.ts +1 -0
  199. package/lib/ec-services/index.d.ts +1 -0
  200. package/lib/ec-services/price-visibility.service.d.ts +23 -0
  201. package/lib/ec-services/product-detail.service.d.ts +3 -0
  202. package/lib/ec-services/runtime-config.service.d.ts +2 -3
  203. package/lib/providers/index.d.ts +0 -1
  204. package/package.json +1 -1
  205. package/esm2022/lib/providers/provideServerRuntimeConfig.mjs +0 -20
  206. package/lib/providers/provideServerRuntimeConfig.d.ts +0 -13
@@ -3,7 +3,7 @@ import { AuthService } from './auth.service';
3
3
  import { ToastService } from './toast.service';
4
4
  import { ConnectionService } from '../api';
5
5
  import { ApiConstantsService, CoreConstantsService } from '../constants';
6
- import { BehaviorSubject, firstValueFrom, map } from 'rxjs';
6
+ import { BehaviorSubject, distinctUntilChanged, firstValueFrom, map } from 'rxjs';
7
7
  import { AnalyticsService } from './analytics';
8
8
  import { LocalStorageService } from './local-storage.service';
9
9
  import { ChannelService } from './channel.service';
@@ -62,16 +62,19 @@ export class CartService {
62
62
  this._items = JSON.parse(this._localStorage.getItem(this.CART_KEY) || '[]');
63
63
  this.cartToken = this._localStorage.getItem(this.CART_TOKEN_KEY) || null;
64
64
  // 🔑 CLAVE: Suscripción a cambios de estado de login
65
- this._authService.loggedIn$.subscribe(isLoggedIn => {
66
- if (isLoggedIn && !this._cartInitialized) {
65
+ this._authService.loggedIn$.pipe(distinctUntilChanged()).subscribe(isLoggedIn => {
66
+ if (isLoggedIn) {
67
+ // Al pasar de invitado -> logueado, siempre sincronizar para traer balanceCustomer
68
+ // (si no, el header no muestra cuenta corriente hasta recargar).
67
69
  this.syncCartOnLogin();
68
70
  this._cartInitialized = true;
71
+ return;
69
72
  }
70
- else if (!isLoggedIn && this._cartInitialized) {
73
+ if (this._cartInitialized) {
71
74
  // Usuario cerró sesión, limpiar y resetear carrito
72
75
  this.clearAndResetCustomerCart();
73
- this._cartInitialized = false; // Reset flag para permitir nueva inicialización
74
76
  }
77
+ this._cartInitialized = false; // Reset flag para permitir nueva inicialización
75
78
  });
76
79
  this._channelService.channel$.subscribe(res => this.channelConfig = res);
77
80
  // ⚠️ FIX: Solo inicializar para usuarios no autenticados
@@ -163,6 +166,11 @@ export class CartService {
163
166
  this._toastService.show('must-select-customer');
164
167
  return;
165
168
  }
169
+ const isExistingItem = this._items.some((item) => item.product.id === product.id && item.variant_id === variantId);
170
+ // Validación de saldo para items nuevos (los existentes se validan en updateItemQuantity)
171
+ if (!isExistingItem && !this.hasCreditsForNewItem(product, quantity, variantId)) {
172
+ return;
173
+ }
166
174
  this._requestInProcess.next(true);
167
175
  let added = this.addIfAllreadyExists(product, variantId, quantity);
168
176
  if (!added) {
@@ -533,10 +541,14 @@ export class CartService {
533
541
  if (!balance || balance.creditAmount === null || balance.creditAmount === undefined) {
534
542
  return true;
535
543
  }
544
+ if (balance.allowAnyPaymentMethod) {
545
+ return true;
546
+ }
536
547
  if (balance.remainingCredits === undefined) {
537
548
  return false;
538
549
  }
539
- if ((this._cartSubject.value?.totals?.total ?? 0) > balance.creditAmount) {
550
+ const total = this._cartSubject.value?.totals?.total ?? 0;
551
+ if (!balance.allowExceedBalance && total > balance.creditAmount) {
540
552
  this._toastService.show('not-enough-credits');
541
553
  return false;
542
554
  }
@@ -547,6 +559,9 @@ export class CartService {
547
559
  if (!balance || balance.creditAmount === null || balance.creditAmount === undefined) {
548
560
  return true;
549
561
  }
562
+ if (balance.allowAnyPaymentMethod) {
563
+ return true;
564
+ }
550
565
  if (balance.remainingCredits === undefined) {
551
566
  return false;
552
567
  }
@@ -562,6 +577,26 @@ export class CartService {
562
577
  }
563
578
  return true;
564
579
  };
580
+ hasCreditsForNewItem = (product, quantity, variantId) => {
581
+ const balance = this._balanceCustomerSubject.value;
582
+ if (!balance || balance.creditAmount === null || balance.creditAmount === undefined) {
583
+ return true;
584
+ }
585
+ if (balance.allowAnyPaymentMethod) {
586
+ return true;
587
+ }
588
+ if (balance.remainingCredits === undefined) {
589
+ return false;
590
+ }
591
+ const variant = product?.variants?.find(v => v.code === variantId) ?? product?.variants?.[0];
592
+ const unitPrice = variant?.saleprice ?? variant?.price ?? product?.price ?? 0;
593
+ const totalCost = unitPrice * quantity;
594
+ if (!balance.allowExceedBalance && totalCost > balance.remainingCredits) {
595
+ this._toastService.show('not-enough-credits');
596
+ return false;
597
+ }
598
+ return true;
599
+ };
565
600
  addRepeatOrderToCart(items) {
566
601
  if (this._cartItemsSubject.value.length > 0) {
567
602
  this._toastService.show('cart-not-empty');
@@ -625,4 +660,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
625
660
  providedIn: 'root'
626
661
  }]
627
662
  }], ctorParameters: () => [] });
628
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBaUIsY0FBYyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLFdBQVc7SUFDZixZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELFVBQVUsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDOUQsaUJBQWlCLEdBQXFCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELGFBQWEsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDakUsZUFBZSxHQUFtQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekQsT0FBTyxHQUF5QixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM3RCxRQUFRLEdBQTJCLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFakMsWUFBWSxHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRCxrQkFBa0IsR0FBeUIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkUsY0FBYyxHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRSxpQkFBaUIsR0FBZ0MsSUFBSSxlQUFlLENBQWEsRUFBRSxDQUFDLENBQUE7SUFDcEYsaUJBQWlCLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLHVCQUF1QixHQUE0QyxJQUFJLGVBQWUsQ0FBeUIsSUFBSSxDQUFDLENBQUM7SUFFNUcsUUFBUSxHQUFXLE1BQU0sQ0FBQztJQUMxQixjQUFjLEdBQVcsWUFBWSxDQUFDO0lBRS9DLE1BQU0sR0FBVSxFQUFFLENBQUM7SUFDbkIsTUFBTSxHQUFXLENBQUMsQ0FBQztJQUNwQixTQUFTLEdBQWtCLEVBQUUsQ0FBQztJQUM5QixhQUFhLEdBQVEsRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyx1REFBdUQ7SUFDbEYsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN4RyxPQUFPLEdBQW9CLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUQsS0FBSyxHQUFvQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFELFFBQVEsR0FBd0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JFLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDdEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQy9ELHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLHFCQUFxQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEcsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEYsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFFLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVELFNBQVM7SUFDRCxZQUFZLEdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sUUFBUSxDQUFDO0lBRTFGLHFCQUFxQixDQUFDLE9BQVksSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLE9BQU8sR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BKLFVBQVUsS0FBYSxPQUFPLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFDO0lBQ3BILGNBQWMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFpQixHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUMxSCxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUM7SUFDekYsYUFBYSxDQUFDLE9BQWUsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLE9BQU8sR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9JLFNBQVMsS0FBSyxPQUFPLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBLENBQUMsQ0FBQztJQUFBLENBQUM7SUFFbkY7UUFDQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxDLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUV6RSxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2xELElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM5QixDQUFDO2lCQUFNLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ2pELG1EQUFtRDtnQkFDbkQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxnREFBZ0Q7WUFDaEYsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUV6RSx5REFBeUQ7UUFDekQsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDcEUscUVBQXFFO1lBQ3JFLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZTtRQUN0Qix5RUFBeUU7UUFDekUsOEVBQThFO1FBQzlFLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDUCxnRUFBZ0U7WUFDaEUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNGLENBQUM7SUFDRDs7O09BR0c7SUFDSyxPQUFPO1FBQ2Qsb0VBQW9FO1FBQ3BFLG9FQUFvRTtRQUNwRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUV2RSxjQUFjLENBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUNuRCxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ25CLHdDQUF3QztZQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxRQUFhO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFFL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEtBQVk7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxTQUFTLENBQUMsT0FBZ0IsRUFBRSxRQUFnQixFQUFFLFNBQWlCO1FBQzlELE1BQU0sT0FBTyxHQUEyQixJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDO1FBQzNFLE1BQU0sY0FBYyxHQUFZLE9BQU8sRUFBRSxjQUFjLElBQUksS0FBSyxDQUFDO1FBQ2pFLE1BQU0sU0FBUyxHQUFXLE9BQU8sRUFBRSxTQUFTLElBQUksUUFBUSxDQUFDO1FBRXpELElBQUksY0FBYyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzlDLE9BQU87UUFDUixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1lBQy9DLE9BQU07UUFDUCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWixjQUFjLENBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztpQkFDakgsSUFBSSxDQUNKLEdBQUcsQ0FBQyxFQUFFO2dCQUNMLGlEQUFpRDtnQkFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxFQUNELEdBQUcsQ0FBQyxFQUFFO2dCQUNMLGdFQUFnRTtnQkFDaEUsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUN4QixnQ0FBZ0M7b0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO3FCQUFNLENBQUM7b0JBQ1AsdUJBQXVCO29CQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDekMsQ0FBQztZQUNGLENBQUMsQ0FDRCxDQUFDO1FBQ0osQ0FBQztJQUNGLENBQUM7SUFDRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsSUFBUztRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxLQUFVO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzlCLE9BQU87Z0JBQ04sT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDekMsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2FBQ2pCLENBQUE7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFDLE9BQWdCLEVBQUUsU0FBaUIsRUFBRSxjQUFzQixDQUFDO1FBQy9FLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRixPQUFPLElBQUksQ0FBQztZQUNiLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxzQkFBc0IsQ0FBQyxXQUFnQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFDRDs7T0FFRztJQUNILGlCQUFpQjtRQUNoQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0sscUJBQXFCLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtRQUNoRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQ2YsSUFBSSxDQUFDLEVBQUU7WUFDTixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMvSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDWixDQUFDLENBQ0QsQ0FBQTtJQUNGLENBQUMsQ0FBQTtJQUNEOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBQyxJQUFjLEVBQUUsUUFBZ0I7UUFDbEQsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdGLG1EQUFtRDtZQUNuRCxjQUFjLENBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM3SCxJQUFJLENBQ0osR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNoRyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQzVCLENBQUM7WUFFSCxPQUFPLElBQUksQ0FBQyxDQUFDLDJDQUEyQztRQUN6RCxDQUFDO2FBQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDLENBQUMsd0JBQXdCO1FBQ3ZDLENBQUM7SUFDRixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLEdBQVE7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsU0FBYyxFQUFFLFFBQWdCO1FBQ3RELCtEQUErRDtRQUMvRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUM3RixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRDs7T0FFRztJQUNILGVBQWU7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0gsYUFBYSxDQUFDLElBQVMsRUFBRSxTQUFTLEdBQUcsSUFBSTtRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLFNBQVMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSwwRUFBMEU7UUFFMUUsSUFBSSxDQUFDLFVBQVU7WUFDZCxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUNEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxJQUFTO1FBQ3JCLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBQy9DLElBQUksTUFBTSxHQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUM7WUFDSixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxNQUFNLEdBQUc7Z0JBQ1IsR0FBRyxNQUFNO2dCQUNULE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDM0UsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVM7YUFDdkUsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELHNCQUFzQjtJQUN2QixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLFVBQWU7UUFDbEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFFLENBQUMsT0FBTyxDQUFBO0lBQ3hFLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFDLElBQVMsRUFBRSxRQUFhO1FBQ3hDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7UUFDcEcsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1FBRTVELElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNwRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUE7WUFDOUcsT0FBTyxLQUFLLENBQUE7UUFDYixDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3BGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQTtZQUM5RyxPQUFPLEtBQUssQ0FBQTtRQUNiLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hHLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3RGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO29CQUNyRCxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO29CQUNuRCxPQUFPLEVBQUUsY0FBYyxHQUFHLFdBQVcsQ0FBQywrQkFBK0I7aUJBQ3JFLENBQUMsQ0FBQztnQkFFSCxPQUFPLEtBQUssQ0FBQztZQUNkLENBQUM7UUFDRixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDWixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxVQUFlLElBQVMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ3hHOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsSUFBUyxFQUFFLFFBQWlCLElBQUk7UUFDOUMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM5RCw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRSxHQUFHLENBQUMsRUFBRTtZQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsRUFDRCxHQUFHLENBQUMsRUFBRTtZQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQ0QsQ0FBQTtJQUNGLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILGNBQWMsQ0FBQyxJQUFTLEVBQUUsT0FBWSxFQUFFLEtBQWM7UUFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxLQUFLLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQzNHLENBQUM7SUFDRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsS0FBYTtRQUN0QixjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzdFLEdBQUcsQ0FBQyxFQUFFO1lBQ0wsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUMxQyxDQUFDLEVBQ0QsR0FBRyxDQUFDLEVBQUU7WUFDTCxxQkFBcUI7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUMxQyxDQUFDLENBQ0QsQ0FBQTtJQUNGLENBQUM7SUFDRDs7T0FFRztJQUNILFlBQVk7UUFDWCxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzdELEdBQUcsQ0FBQyxFQUFFO1lBQ0wsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEIsQ0FBQyxDQUNELENBQUE7SUFDRixDQUFDO0lBRUQsYUFBYTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNEOzs7T0FHRztJQUNILHVCQUF1QjtRQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUNEOzs7T0FHRztJQUNILGNBQWM7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRDs7O09BR0c7SUFDSCxZQUFZO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxrQkFBa0IsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDaEUseUJBQXlCO1FBQ3hCLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFTyxpQkFBaUIsR0FBRyxLQUFLLElBQUksRUFBRSxDQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQ25ELEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FDL0IsQ0FBQTtJQUNNLFNBQVMsR0FBRyxDQUFDLEVBQVEsRUFBRSxFQUFFO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQywyQ0FBMkM7UUFDMUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFBO0lBQ0QsaUJBQWlCO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQywwREFBMEQ7SUFDbkcsQ0FBQztJQUVNLHVCQUF1QixDQUFDLE9BQVksRUFBRSxRQUF1QixJQUFJO1FBRXZFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsT0FBTztRQUNSLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBRS9CLE1BQU0sV0FBVyxHQUFHO1lBQ25CLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUI7WUFDcEQsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLGtCQUFrQjtZQUM5QyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7WUFDbEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixnQkFBZ0IsRUFDZixPQUFPLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxXQUFXLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksV0FBVztnQkFDekYsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsV0FBVztnQkFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDTCxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7WUFDdEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1NBQzVCLENBQUM7UUFFRixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxRQUFRLENBQUMsT0FBZ0IsRUFBRSxRQUFnQixFQUFFLFVBQWUsRUFBRSxFQUFXLEVBQUUsYUFBbUIsRUFBRSxZQUFrQixFQUFFLFVBQWdCLEVBQUUsVUFBZ0IsRUFBRSxnQkFBc0IsRUFBRSxTQUFrQixFQUFFLFVBQW1CLEVBQUUsWUFBcUIsRUFBRSxLQUFjLEVBQUUsbUJBQTRCLEVBQUUscUJBQThCLEVBQUUsTUFBZTtRQUM1VSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUE7WUFDL0MsT0FBTTtRQUNQLENBQUM7UUFFRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLFlBQVksSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxZQUFZLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixJQUFJLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQzthQUNwaUIsU0FBUyxDQUFDO1lBQ1YsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUNyQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1NBQ3JDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxlQUFlLEdBQUcsR0FBOEIsRUFBRSxDQUNqRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUNoQyxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLGVBQWUsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLENBQy9ELENBQUM7SUFHSCxtQkFBbUIsR0FBRyxHQUFtQyxFQUFFLENBQzFELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBR3pGLGdDQUFnQyxHQUFHLEdBQVksRUFBRTtRQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDO1FBRW5ELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyRixPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QyxPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM5QyxPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVNLHVCQUF1QixHQUFHLENBQUMsSUFBYyxFQUFFLFFBQWdCLEVBQVcsRUFBRTtRQUMvRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDO1FBRW5ELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyRixPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QyxPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0MsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUVwRCxJQUFJLGtCQUFrQixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztRQUV0RCxJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0lBRUYsb0JBQW9CLENBQUMsS0FBWTtRQUNoQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDMUMsT0FBTztRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUE7WUFDL0MsT0FBTTtRQUNQLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzlDLE9BQU87UUFDUixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDZCxLQUFLLEVBQUUsVUFBVTtTQUNqQixDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxDQUFDO2FBQ2xELFNBQVMsRUFBRTthQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUVYLElBQUksR0FBRyxFQUFFLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLGVBQWUsQ0FBQztnQkFDdEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3RDLE9BQU87WUFDUixDQUFDO1lBRUQsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7WUFDaEQsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBRXpDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUMxRCxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVM7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxDQUMvRCxDQUFDO1lBRUYsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPO1lBQ1IsQ0FBQztZQUVELElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBRUQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0YsQ0FBQyxFQUNBLEdBQUcsQ0FBQyxFQUFFO1lBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUM7YUFDRixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FockJXLFdBQVc7NEdBQVgsV0FBVyxjQUZYLE1BQU07OzRGQUVOLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJhbGFuY2VDdXN0b21lciwgQ2FydEl0ZW0sIElDb3Vwb24sIFByb2R1Y3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4vdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpJztcclxuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSwgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpcnN0VmFsdWVGcm9tLCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYW5hbHl0aWNzJztcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE5neExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL25neC1sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xyXG5cdHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfYXBpQ29uc3RzOiBBcGlDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2FuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UgPSBpbmplY3QoQW5hbHl0aWNzU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KExvY2FsU3RvcmFnZVNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2NoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfc3RvcmFnZTogTmd4TG9jYWxTdG9yYWdlU2VydmljZSA9IGluamVjdChOZ3hMb2NhbFN0b3JhZ2VTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG5cclxuXHRwcml2YXRlIF9jYXJ0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cdHByaXZhdGUgX3Byb21vdGlvbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG5cdHByaXZhdGUgX2NvdXBvblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHRwcml2YXRlIF9jYXJ0SXRlbXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2FydEl0ZW1bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcnRJdGVtW10+KFtdKVxyXG5cdHByaXZhdGUgX3JlcXVlc3RJblByb2Nlc3M6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG5cdHByaXZhdGUgX2JhbGFuY2VDdXN0b21lclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxCYWxhbmNlQ3VzdG9tZXIgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QmFsYW5jZUN1c3RvbWVyIHwgbnVsbD4obnVsbCk7XHJcblxyXG5cdHByaXZhdGUgcmVhZG9ubHkgQ0FSVF9LRVk6IHN0cmluZyA9ICdjYXJ0JztcclxuXHRwcml2YXRlIHJlYWRvbmx5IENBUlRfVE9LRU5fS0VZOiBzdHJpbmcgPSAnY2FydF90b2tlbic7XHJcblxyXG5cdHByaXZhdGUgX2l0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdHByaXZhdGUgX2NvdW50OiBudW1iZXIgPSAwO1xyXG5cdHB1YmxpYyBjYXJ0VG9rZW46IHN0cmluZyB8IG51bGwgPSAnJztcclxuXHRwdWJsaWMgY2hhbm5lbENvbmZpZzogYW55ID0ge307XHJcblx0cHJpdmF0ZSBfbG9jYWxlID0gXCJcIjtcclxuXHRwcml2YXRlIF9jYXJ0SW5pdGlhbGl6ZWQgPSBmYWxzZTsgLy8g4pqg77iPIEZJWDogRmxhZyBwYXJhIGV2aXRhciBpbmljaWFsaXphY2lvbmVzIGR1cGxpY2FkYXNcclxuXHRwdWJsaWMgY2FydEl0ZW1zJCA9IHRoaXMuX2NhcnRJdGVtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShtYXAoaXRlbXMgPT4gdGhpcy5zd2l0Y2hQcmljZUluQ2FydEl0ZW0oaXRlbXMpKSlcclxuXHRwdWJsaWMgY291cG9uJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5fY291cG9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwdWJsaWMgY2FydCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2NhcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cdHB1YmxpYyBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX3JlcXVlc3RJblByb2Nlc3MuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHJpdmF0ZSBfaGF2ZVRvVXBkYXRlID0gdHJ1ZTtcclxuXHRwdWJsaWMgYmFsYW5jZUN1c3RvbWVyJCA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHVibGljIGFsbG93QW55UGF5bWVudE1ldGhvZCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0FueVBheW1lbnRNZXRob2QgPz8gbnVsbCkpO1xyXG5cdHB1YmxpYyBhbGxvd0V4Y2VlZEJhbGFuY2UkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dFeGNlZWRCYWxhbmNlID8/IG51bGwpKTtcclxuXHRwdWJsaWMgY3JlZGl0QW1vdW50JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LmNyZWRpdEFtb3VudCA/PyBudWxsKSk7XHJcblx0cHVibGljIHNob3dNYXgkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uc2hvd01heCA/PyBudWxsKSk7XHJcblx0cHVibGljIHNob3dQcmljZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5zaG93UHJpY2UgPz8gbnVsbCkpO1xyXG5cdHB1YmxpYyBwcm9tb3Rpb25zJCA9IHRoaXMuX3Byb21vdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cdC8vQVBJIFVSTFxyXG5cdHByaXZhdGUgX2NhcnRCYXNlVXJsOiBzdHJpbmcgPSBgJHt0aGlzLl9hcGlDb25zdHMuU0hPUF9BUElfVVJMfSR7dGhpcy5fYXBpQ29uc3RzLkNIQU5ORUx9L2NhcnRzYDtcclxuXHJcblx0cHVibGljIHVwZGF0ZUl0ZW1RdWFudGl0eUFwaShpdGVtX2lkOiBhbnkpIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEU7IH1cclxuXHRwdWJsaWMgYWRkSXRlbUFwaSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXM/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFIH1cclxuXHRwdWJsaWMgYWRkQWxsSXRlbXNBcGkgPSAoKSA9PiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9tdWx0aXBsZS1pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRTtcclxuXHRwdWJsaWMgY2FydEl0ZW1zQXBpKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICc/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFIH1cclxuXHRwdWJsaWMgZGVsZXRlSXRlbUFwaShpdGVtX2lkOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuX2NhcnRCYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0VG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEU7IH1cclxuXHRwdWJsaWMgY291cG9uQXBpKCkgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvY291cG9uJyB9O1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHJcblx0XHQvLyDinIUgQ2FyZ2FyIGNhcnJpdG8gbG9jYWwgeSB0b2tlbiBwcmV2aW9cclxuXHRcdHRoaXMuX2l0ZW1zID0gSlNPTi5wYXJzZSh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNBUlRfS0VZKSB8fCAnW10nKTtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSkgfHwgbnVsbDtcclxuXHJcblx0XHQvLyDwn5SRIENMQVZFOiBTdXNjcmlwY2nDs24gYSBjYW1iaW9zIGRlIGVzdGFkbyBkZSBsb2dpblxyXG5cdFx0dGhpcy5fYXV0aFNlcnZpY2UubG9nZ2VkSW4kLnN1YnNjcmliZShpc0xvZ2dlZEluID0+IHtcclxuXHRcdFx0aWYgKGlzTG9nZ2VkSW4gJiYgIXRoaXMuX2NhcnRJbml0aWFsaXplZCkge1xyXG5cdFx0XHRcdHRoaXMuc3luY0NhcnRPbkxvZ2luKCk7XHJcblx0XHRcdFx0dGhpcy5fY2FydEluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHRcdFx0fSBlbHNlIGlmICghaXNMb2dnZWRJbiAmJiB0aGlzLl9jYXJ0SW5pdGlhbGl6ZWQpIHtcclxuXHRcdFx0XHQvLyBVc3VhcmlvIGNlcnLDsyBzZXNpw7NuLCBsaW1waWFyIHkgcmVzZXRlYXIgY2Fycml0b1xyXG5cdFx0XHRcdHRoaXMuY2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpO1xyXG5cdFx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IGZhbHNlOyAvLyBSZXNldCBmbGFnIHBhcmEgcGVybWl0aXIgbnVldmEgaW5pY2lhbGl6YWNpw7NuXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuX2NoYW5uZWxTZXJ2aWNlLmNoYW5uZWwkLnN1YnNjcmliZShyZXMgPT4gdGhpcy5jaGFubmVsQ29uZmlnID0gcmVzKTtcclxuXHJcblx0XHQvLyDimqDvuI8gRklYOiBTb2xvIGluaWNpYWxpemFyIHBhcmEgdXN1YXJpb3Mgbm8gYXV0ZW50aWNhZG9zXHJcblx0XHQvLyBFbCBjYXJyaXRvIGRlIHVzdWFyaW9zIGF1dGVudGljYWRvcyBzZSBpbmljaWFsaXphIGVuIGxhIHN1c2NyaXBjacOzbiBsb2dnZWRJbiRcclxuXHRcdGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkgJiYgIXRoaXMuX2NhcnRJbml0aWFsaXplZCkge1xyXG5cdFx0XHQvLyBTaSBoYXkgdG9rZW4sIGludGVudGFyIG9idGVuZXIgY2Fycml0byBwb3IgdG9rZW4sIHNpbm8gY3JlYXIgbnVldm9cclxuXHRcdFx0aWYgKHRoaXMuY2FydFRva2VuKSB7XHJcblx0XHRcdFx0dGhpcy5nZXRDYXJ0KCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5nZXRDYXJ0QnlDdXN0b21lcigpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaW5jcm9uaXphIGVsIGNhcnJpdG8gY3VhbmRvIGVsIHVzdWFyaW8gaGFjZSBsb2dpblxyXG5cdCAqIEltcGxlbWVudGEgbGEgbMOzZ2ljYSBkZSBBbmd1bGFyIDkgcGFyYSBwcmVzZXJ2YXIgZWwgY2Fycml0byBkZWwgaW52aXRhZG9cclxuXHQgKi9cclxuXHRwcml2YXRlIHN5bmNDYXJ0T25Mb2dpbigpIHtcclxuXHRcdC8vIOKaoO+4jyBGSVg6IFNpIGhheSB0b2tlbiAoY2Fycml0byBleGlzdGVudGUpLCBzaWVtcHJlIGludGVudGFyIHJlY3VwZXJhcmxvXHJcblx0XHQvLyBObyBkZXBlbmRlbW9zIHNvbG8gZGUgbG9zIGl0ZW1zIGxvY2FsZXMgcXVlIHB1ZWRlbiBlc3RhciB2YWPDrW9zIGFsIHJlY2FyZ2FyXHJcblx0XHRpZiAodGhpcy5jYXJ0VG9rZW4pIHtcclxuXHRcdFx0Ly8gRW52w61hIGVsIHRva2VuIHBhcmEgcmVjdXBlcmFyL2Z1c2lvbmFyIGNhcnJpdG9zXHJcblx0XHRcdHRoaXMuZ2V0Q2FydCgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gU2luIHRva2VuIGRlIGNhcnJpdG8sIG9idGVuZXIgY2Fycml0byBkZWwgdXN1YXJpbyBhdXRlbnRpY2Fkb1xyXG5cdFx0XHR0aGlzLmdldENhcnRCeUN1c3RvbWVyKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgZWwgY2Fycml0byBkZXNkZSBlbCBiYWNrZW5kIGNvbiBsw7NnaWNhIGRlIHNpbmNyb25pemFjacOzblxyXG5cdCAqIEVudsOtYSBlbCB0b2tlbiBzaSBoYXkgY2Fycml0byBsb2NhbCBwYXJhIGZ1c2lvbmFyIGNhcnJpdG9zXHJcblx0ICovXHJcblx0cHJpdmF0ZSBnZXRDYXJ0KCkge1xyXG5cdFx0Ly8g4pqg77iPIEZJWDogRW52aWFyIHRva2VuIHNpIGV4aXN0ZSwgc2luIGltcG9ydGFyIHNpIGhheSBpdGVtcyBsb2NhbGVzXHJcblx0XHQvLyBFc3RvIHBlcm1pdGUgcmVjdXBlcmFyIGVsIGNhcnJpdG8gZXhpc3RlbnRlIGFsIHJlY2FyZ2FyIGxhIHDDoWdpbmFcclxuXHRcdGNvbnN0IHBheWxvYWQgPSB0aGlzLmNhcnRUb2tlbiA/IHsgdG9rZW46IHRoaXMuY2FydFRva2VuIH0gOiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0Zmlyc3RWYWx1ZUZyb20oXHJcblx0XHRcdHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpLCBwYXlsb2FkKVxyXG5cdFx0KS50aGVuKChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKCdnZXRDYXJ0IHJlc3BvbnNlOicsIHJlcyk7XHJcblx0XHRcdHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKTtcclxuXHRcdH0pLmNhdGNoKGVycm9yID0+IHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyBjYXJ0OicsIGVycm9yKTtcclxuXHRcdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDb25maWd1cmEgZWwgY2Fycml0byBjb24gbG9zIHBhcmFtZXRyb3MgaW5pY2lhbGVzLlxyXG5cdCAqIEBwYXJhbSByZXNwb25zZSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRpbml0aWFsaXplQ2FydChyZXNwb25zZTogYW55KTogYW55IHtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gcmVzcG9uc2UudG9rZW5WYWx1ZTtcclxuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0FSVF9UT0tFTl9LRVksIHRoaXMuY2FydFRva2VuKTtcclxuXHRcdHRoaXMuX2xvY2FsZSA9IHJlc3BvbnNlLmxvY2FsZTtcclxuXHJcblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcclxuXHRcdHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMocmVzcG9uc2UuaXRlbXMpKTtcclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGxvcyBpdGVtcyBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gaXRlbXMgXHJcblx0ICovXHJcblx0dXBkYXRlQ2FydEl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xyXG5cdFx0dGhpcy5faXRlbXMgPSBpdGVtcztcclxuXHRcdHRoaXMuX2NvdW50ID0gaXRlbXMubGVuZ3RoO1xyXG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcclxuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBZ3JlZ2EgdW4gcHJvZHVjdG8gYWwgY2Fycml0byBjb24gbGEgY2FudGlkYWQgZGVzZWFkYS4gXHJcblx0ICogQHBhcmFtIHByb2R1Y3QgUHJvZHVjdG8gYSBhZ3JlZ2FyXHJcblx0ICogQHBhcmFtIHF1YW50aXR5IENhbnRpZGFkIFxyXG5cdCAqIEBwYXJhbSB2YXJpYW50SWQgSWQgZGUgbGEgdmFyaWFudGVcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRhZGRUb0NhcnQocHJvZHVjdDogUHJvZHVjdCwgcXVhbnRpdHk6IG51bWJlciwgdmFyaWFudElkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGJhbGFuY2U6IEJhbGFuY2VDdXN0b21lciB8IG51bGwgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cdFx0Y29uc3QgYXBwbHlNYXhPcmRlcnM6IGJvb2xlYW4gPSBiYWxhbmNlPy5hcHBseU1heE9yZGVycyA/PyBmYWxzZTtcclxuXHRcdGNvbnN0IG1heE9yZGVyczogbnVtYmVyID0gYmFsYW5jZT8ubWF4T3JkZXJzID8/IEluZmluaXR5O1xyXG5cclxuXHRcdGlmIChhcHBseU1heE9yZGVycyAmJiAobWF4T3JkZXJzIDw9IDAgfHwgbWF4T3JkZXJzID09PSBudWxsKSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbWF4LW9yZGVycy1yZWFjaGVkJyk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG5cdFx0XHRyZXR1cm5cclxuXHRcdH1cclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHRcdGxldCBhZGRlZCA9IHRoaXMuYWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0LCB2YXJpYW50SWQsIHF1YW50aXR5KTtcclxuXHJcblx0XHRpZiAoIWFkZGVkKSB7XHJcblx0XHRcdGZpcnN0VmFsdWVGcm9tKFxyXG5cdFx0XHRcdHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudElkIH0pKVxyXG5cdFx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdFx0cmVzID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gTWFuZWphciBsYSByZXNwdWVzdGEgSFRUUCBleGl0b3NhIChjw7NkaWdvIDIwMClcclxuXHRcdFx0XHRcdFx0dGhpcy5hcHBlbmRUb0NhcnQocmVzKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtYWRkZWQnKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnIgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBNYW5lamFyIGVsIGVycm9yIGRlIGxhIGxsYW1hZGEgSFRUUCAoY8OzZGlnbyA1MDAgdSBvdHJvIGVycm9yKVxyXG5cdFx0XHRcdFx0XHRpZiAoZXJyLnN0YXR1cyA9PT0gNTAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQ8OzZGlnbyBkZSBlcnJvciA1MDAgKHRpbWVvdXQpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdjYXJ0LWVycm9yJyk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gT3RybyBjw7NkaWdvIGRlIGVycm9yXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdlcnJvci1zZXJ2ZXInKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBlbCBjYXJyaXRvIGFncmVnYW5kbyBsb3MgbnVldm9zIGl0ZW1zLlxyXG5cdCAqIEBwYXJhbSBjYXJ0IFxyXG5cdCAqL1xyXG5cdGFwcGVuZFRvQ2FydChjYXJ0OiBhbnkpIHtcclxuXHRcdHRoaXMudXBkYXRlQ2FydE9iaihjYXJ0KTtcclxuXHRcdHRoaXMuX2l0ZW1zID0gdGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0Lml0ZW1zKTtcclxuXHRcdHRoaXMuX2NvdW50ID0gdGhpcy5faXRlbXMubGVuZ3RoO1xyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBNYXBlYSBsb3MgaXRlbXMgZGVsIGNhcnJpdG8gcGFyYSBkYXJsZSB1biBtZWpvciBmb3JtYXRvIHNpbWlsYXIgYSBsYSBpbnRlcmZheiBgQ2FydEl0ZW1gLlxyXG5cdCAqIEBwYXJhbSBpdGVtcyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHR0cmFuc2Zvcm1JdGVtcyhpdGVtczogYW55KTogYW55W10ge1xyXG5cdFx0cmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0cHJvZHVjdDogaXRlbS5wcm9kdWN0LFxyXG5cdFx0XHRcdHZhcmlhbnRfaWQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlLFxyXG5cdFx0XHRcdGxvdDogaXRlbS5vcmRlckl0ZW1Mb3QsXHJcblx0XHRcdFx0cXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcblx0XHRcdFx0aXRlbV9pZDogaXRlbS5pZCxcclxuXHRcdFx0XHR0b3RhbDogaXRlbS50b3RhbFxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ2hlcXVlYSBzaSBlbCBwcm9kdWN0byB5YSBleGlzdGUgZW4gZWwgY2Fycml0byBkZSBjb21wcmFzLlxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0IFxyXG5cdCAqIEBwYXJhbSB2YXJpYW50SWQgXHJcblx0ICogQHBhcmFtIHF1YW50aXR5QWRkIENhbnRpZGFkIGEgYWdyZWdhci4gUG9yIGRlZmVjdG8gZXMgMS5cclxuXHQgKi9cclxuXHRhZGRJZkFsbHJlYWR5RXhpc3RzKHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmlhbnRJZDogc3RyaW5nLCBxdWFudGl0eUFkZDogbnVtYmVyID0gMSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoKGl0ZW06IGFueSwgaW5kZXgpID0+IHtcclxuXHRcdFx0aWYgKGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0LmlkICYmIGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50SWQpIHtcclxuXHRcdFx0XHR0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCB0aGlzLmZpbmRJdGVtKHByb2R1Y3QuaWQpLnF1YW50aXR5ICsgcXVhbnRpdHlBZGQpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH0pXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgbGEgY2FudGlkYWQgZGUgdW4gcHJvZHVjdG8gZGVsIGl0ZW0gZGVsIGNhcnJpdG8gXHJcblx0ICogQHBhcmFtIGNvZGVWYXJpYW50IGNvZGlnbyBkZSBsYSB2YXJpYW50ZS5cclxuXHQgKiBAcmV0dXJucyBsYSBjYW50aWRhZCBvIGAwYCBlbiBzdSBkZWZlY3RvLlxyXG5cdCAqL1xyXG5cdGdldENvdW50RnJvbUl0ZW1JbkNhcnQoY29kZVZhcmlhbnQ6IGFueSk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5faXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSBjb2RlVmFyaWFudCk/LnF1YW50aXR5IHx8IDA7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIE9idGllbmUgdW4gb2JzZXJ2YWJsZSBjb24gbGEgY2FudGlkYWQgZGUgaXRlbXMgZW4gZWwgY2Fycml0by5cclxuXHQgKi9cclxuXHRnZXRDb3VudENhcnRJdGVtcygpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydEl0ZW1zJC5waXBlKG1hcCgoY2FydEl0ZW1zKSA9PiBjYXJ0SXRlbXM/Lmxlbmd0aCkpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBNYXBlYSBsb3MgcHJvZHVjdG9zIGVuIGVsIGNhcnJpdG8gcGFyYSBjYW1iaWFyIGVsIHByZWNpbyBvYnRlbmllbmRvIGRlIGxhIHZhcmlhbnRlIHkgc2VsZWNjaW9uYW5kbyBzaSBlc1xyXG5cdCAqIHByZWNpbyBkZSBvZmVydGEgbyBlbCBwcmVjaW8gbm9ybWFsLlxyXG5cdCAqIEBwYXJhbSBpdGVtcyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcml2YXRlIHN3aXRjaFByaWNlSW5DYXJ0SXRlbSA9IChpdGVtczogYW55W10pID0+IHtcclxuXHRcdHJldHVybiBpdGVtcy5tYXAoXHJcblx0XHRcdGl0ZW0gPT4ge1xyXG5cdFx0XHRcdGlmIChpdGVtLnByb2R1Y3QpIHtcclxuXHRcdFx0XHRcdGl0ZW0ucHJvZHVjdC5wcmljZSA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlIDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gaXRlbVxyXG5cdFx0XHR9XHJcblx0XHQpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFjdHVhbGl6YSBsYSBjYW50aWRhZCBkZSB1biBwcm9kdWN0byBleGlzdGVudGUgZW4gZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gaXRlbSBlbCBpdGVtIGEgYWN0dWFsaXphci5cclxuXHQgKiBAcGFyYW0gcXVhbnRpdHkgbGEgY2FudGlkYWQgbnVldmEuXHJcblx0ICovXHJcblx0dXBkYXRlSXRlbVF1YW50aXR5KGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eTogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHQvLyBWYWxpZGFyIGFudGVzIGRlIHByb2NlZGVyXHJcblx0XHRpZiAodGhpcy52YWxpZGF0ZVF1YW50aXR5KGl0ZW0sIHF1YW50aXR5KSAmJiAodGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhpdGVtLCBxdWFudGl0eSkpKSB7XHJcblx0XHRcdC8vIFNpIHBhc2EgbGFzIHZhbGlkYWNpb25lcywgaGFjZXIgbGEgcGV0aWNpw7NuIEhUVFBcclxuXHRcdFx0Zmlyc3RWYWx1ZUZyb20oXHJcblx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy51cGRhdGVJdGVtUXVhbnRpdHlBcGkodGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZCkpLCB7ICdxdWFudGl0eSc6IE51bWJlcihxdWFudGl0eSkgfSkpXHJcblx0XHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0XHRyZXMgPT4gdGhpcy51cGRhdGVDYXJ0T2JqKHJlcykgJiYgdGhpcy51cGRhdGVDYXJ0SXRlbVF1YW50aXR5KGl0ZW0udmFyaWFudF9pZCwgTnVtYmVyKHF1YW50aXR5KSksXHJcblx0XHRcdFx0XHRlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdHJldHVybiB0cnVlOyAvLyBWYWxpZGFjaW9uZXMgcGFzYXJvbiwgb3BlcmFjacOzbiBpbmljaWFkYVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBWYWxpZGFjaW9uZXMgZmFsbGFyb25cclxuXHRcdH1cclxuXHR9XHJcblx0LyoqXHJcblx0ICogTWFuZWphIGVsIGVycm9yIGVuIGNhc28gZGUgcXVlIG5vIHNlIHB1ZWRhIGFncmVnYXIgYWwgY2Fycml0byBlbCBwcm9kdWN0by5cclxuXHQgKiBAcGFyYW0gZXJyIFxyXG5cdCAqL1xyXG5cdGhhbmRsZUVycm9yKGVycjogYW55KTogdm9pZCB7XHJcblx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnb3BlcmF0aW9uLWVycm9yLXBhcmFtJyk7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgbGEgY2FudGlkYWQgZGVsIGl0ZW0gZGVsIHByb2R1Y3RvIGRlbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSB2YXJpYW50SWQgSUQgZGUgbGEgdmFyaWFudGUgcGFyYSBidXNjYXIgZWwgaXRlbS5cclxuXHQgKiBAcGFyYW0gcXVhbnRpdHkgTnVldmEgY2FudGlkYWQuIFxyXG5cdCAqL1xyXG5cdHVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkodmFyaWFudElkOiBhbnksIHF1YW50aXR5OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdC8vY29uc29sZS5sb2coXCJ1cGRhdGVDYXJ0SXRlbVF1YW50aXR5XCIsIHRoaXMuX2l0ZW1zLCB2YXJpYW50SWQpXHJcblx0XHRsZXQgbmV3UXVhbnRpdHkgPSB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRJZCkucXVhbnRpdHkgPSBxdWFudGl0eTtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XHJcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0dGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuXHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LXVwZGF0ZWQnLCB7IHF1YW50aXR5OiBuZXdRdWFudGl0eSB9KTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGxvcyBkYXRvcyBkZWwgY2Fycml0byBlbiBlbCBsb2NhbFN0b3JhZ2UuIFxyXG5cdCAqL1xyXG5cdHVwZGF0ZUxvY2FsQ2FydCgpIHtcclxuXHRcdHRoaXMuX3N0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfS0VZLCB0aGlzLl9pdGVtcylcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQWN0dWFsaXphIGVsIGNhcnJpdG8uIEVtaXRlIGV2ZW50byBkZSBhbmFsaXRpY3MuIFxyXG5cdCAqIEFjdHVhbGl6YSB0b2RvIGxvIHJlbGFjaW9uYWRvIGFsIGN1cMOzbi5cclxuXHQgKiBAcGFyYW0gY2FydCBSZXNwdWVzdGEgcHJvZHVjaWRhIHBvciBlbCBlbnBvaW50IGNvbiBpbmZvcm1hY2nDs24gZGVsIGNhcnJpdG8uXHJcblx0ICogQHBhcmFtIGVtaXRFdmVudCBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHR1cGRhdGVDYXJ0T2JqKGNhcnQ6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG5cdFx0dGhpcy5fY2FydFN1YmplY3QubmV4dChjYXJ0KTtcclxuXHRcdHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoY2FydD8uYmFsYW5jZUN1c3RvbWVyLCBjYXJ0Py50b3RhbHM/LnRvdGFsKTtcclxuXHRcdGVtaXRFdmVudCAmJiB0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcclxuXHRcdC8vdGhpcy5fcHJvbW90aW9uc1N1YmplY3QubmV4dCh0aGlzLm9yZGVyVXRpbHMuZ2V0UHJvbW90aW9ucyhjYXJ0LCB0cnVlKSk7XHJcblxyXG5cdFx0Y2FydC5jb3Vwb25Db2RlXHJcblx0XHRcdD8gdGhpcy5mb3JtYXRDb3Vwb24oY2FydClcclxuXHRcdFx0OiB0aGlzLl9jb3Vwb25TdWJqZWN0Lm5leHQobnVsbCk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQXBsaWNhciB1biBtZWpvciBmb3JtYXRvIGEgbG9zIGRhdG9zIGRlIGxvcyBjdXBvbmVzIGFwbGljYWRvcy5cclxuXHQgKiBAcGFyYW0gY2FydCBcclxuXHQgKi9cclxuXHRmb3JtYXRDb3Vwb24oY2FydDogYW55KSB7XHJcblx0XHRsZXQgY3VycmVudF9jb3Vwb24gPSB0aGlzLl9jb3Vwb25TdWJqZWN0LnZhbHVlO1xyXG5cdFx0bGV0IGNvdXBvbjogSUNvdXBvbiA9IHsgY29kZTogY2FydC5jb3Vwb25Db2RlIH07XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhjYXJ0LmNhcnREaXNjb3VudHMpWzBdO1xyXG5cdFx0XHRjb3Vwb24gPSB7XHJcblx0XHRcdFx0Li4uY291cG9uLFxyXG5cdFx0XHRcdGFtb3VudDogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5hbW91bnQuY3VycmVudCkgfHwgMCxcclxuXHRcdFx0XHRuYW1lOiAoY2FydC5jYXJ0RGlzY291bnRzICYmIGNhcnQuY2FydERpc2NvdW50c1trZXldLm5hbWUpIHx8ICduby1uYW1lJ1xyXG5cdFx0XHR9O1xyXG5cdFx0fSBjYXRjaCAoZSkgeyB9XHJcblx0XHQoY291cG9uICE9IGN1cnJlbnRfY291cG9uKSAmJiB0aGlzLl9jb3Vwb25TdWJqZWN0Lm5leHQoY291cG9uKTtcclxuXHRcdC8vY29uc29sZS5sb2coY291cG9uKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSBlbCBJRCBkZWwgaXRlbSBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gdmFyaWFudF9pZCBJZCBkZSBsYSB2YXJpYW50ZSB1dGlsaXphZGEgcGFyYSBidXNjYXIgZWwgaXRlbS5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRmaW5kSXRlbUJ5SWRWYXJpYW50KHZhcmlhbnRfaWQ6IGFueSk6IGFueSB7XHJcblx0XHRyZXR1cm4gdGhpcy5faXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKSEuaXRlbV9pZFxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBWYWxpZGEgbGEgY2FudGlkYWQgcGFyYSBzYWJlciBzaSBzZSBwdWVkZSBhY3R1YWxpemFyIG8gbm8uXHJcblx0ICogQHBhcmFtIGl0ZW0gaXRlbSBkZWwgY2Fycml0b1xyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBjYW50aWRhZCBhIGFncmVnYXJcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHR2YWxpZGF0ZVF1YW50aXR5KGl0ZW06IGFueSwgcXVhbnRpdHk6IGFueSkge1xyXG5cdFx0Y29uc3QgYWN0dWFsUXVhbnRpdHkgPSBOdW1iZXIodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpKTsgLy8gPC0tIEZvcnphciBhIG7Dum1lcm9cclxuXHRcdGNvbnN0IG5ld1F1YW50aXR5ID0gTnVtYmVyKHF1YW50aXR5KTsgLy8gPC0tIEZvcnphciBhIG7Dum1lcm9cclxuXHJcblx0XHRpZiAoKGFjdHVhbFF1YW50aXR5ICsgbmV3UXVhbnRpdHkpID4gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcblx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0fVxyXG5cdFx0aWYgKChhY3R1YWxRdWFudGl0eSArIG5ld1F1YW50aXR5KSA8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSB9KVxyXG5cdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdH1cclxuXHRcdGlmIChpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSAmJiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSA+IDEpIHtcclxuXHRcdFx0aWYgKChhY3R1YWxRdWFudGl0eSArIG5ld1F1YW50aXR5KSAlIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ICE9PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ211bHRpcGxlLXF1YW50aXR5LXJlcXVpcmVkJywge1xyXG5cdFx0XHRcdFx0bXVsdGlwbGU6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5LFxyXG5cdFx0XHRcdFx0Y3VycmVudDogYWN0dWFsUXVhbnRpdHkgKyBuZXdRdWFudGl0eSAvLyA8LS0gQWhvcmEgc3VtYSBjb3JyZWN0YW1lbnRlXHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWVcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQnVzY2EgdW4gcHJvZHVjdG8gYSB0cmF2w6lzIGRlIHN1IElEIGVuIGxvcyBpdGVtcyBkZWwgY2Fycml0by5cclxuXHQgKiBAcGFyYW0gcHJvZHVjdF9pZCBcclxuXHQgKiBAcmV0dXJuc1xyXG5cdCAqL1xyXG5cdGZpbmRJdGVtKHByb2R1Y3RfaWQ6IGFueSk6IGFueSB7IHJldHVybiB0aGlzLl9pdGVtcy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0X2lkKSB9XHJcblx0LyoqXHJcblx0ICogRWxpbWluYSB1biBpdGVtIGRlbCBjYXJyaXRvIGVuIGVsIGJhY2tlbmQuXHJcblx0ICogQHBhcmFtIGl0ZW0gaXRlbSBhIGVsaW1pbmFyXHJcblx0ICogQHBhcmFtIHRvYXN0IGluZGljYSBzaSBzZSBkaXNwYXJhIHVuIHRvYXN0ICBvIG5vLiBQb3IgZGVmZWN0byBlbiBgdHJ1ZWAuXHJcblx0ICovXHJcblx0ZGVsZXRlQ2FydEl0ZW0oaXRlbTogYW55LCB0b2FzdDogYm9vbGVhbiA9IHRydWUpIHtcclxuXHRcdGxldCBpZEl0ZW1TZWFyY2hlZCA9IHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpXHJcblx0XHQvL2NvbnNvbGUubG9nKGlkSXRlbVNlYXJjaGVkKVxyXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG5cdFx0Zmlyc3RWYWx1ZUZyb20odGhpcy5fY29ubmVjdGlvbi5kZWxldGUodGhpcy5kZWxldGVJdGVtQXBpKGlkSXRlbVNlYXJjaGVkKSkpLnRoZW4oXHJcblx0XHRcdHJlcyA9PiB7XHJcblx0XHRcdFx0dGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KTtcclxuXHRcdFx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnIgPT4ge1xyXG5cdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuXHRcdFx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG5cdFx0XHR9XHJcblx0XHQpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEVsaW1pbmEgdW4gaXRlbSBlbiBjYXJyaXRvIGRlIGZvcm1hIGxvY2FsLiBcclxuXHQgKiBAcGFyYW0gY2FydCBDYXJyaXRvLCBlcyBkZWNpciwgcmVzcHVlc3RhIGRlbCBiYWNrZW5kLlxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0IHByb2R1Y3RvIGEgZWxpbWluYXJcclxuXHQgKiBAcGFyYW0gdG9hc3Qge2Jvb2xlYW59IHBhcmEgaW5kaWNhciBzaSBzZSBkaXNwYXJhIHVuIHRvYXN0IG8gbm8uIFxyXG5cdCAqL1xyXG5cdHJlbW92ZUNhcnRJdGVtKGNhcnQ6IGFueSwgcHJvZHVjdDogYW55LCB0b2FzdDogYm9vbGVhbikge1xyXG5cdFx0dGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQsIGZhbHNlKTtcclxuXHRcdHRoaXMuX2l0ZW1zLnNwbGljZSh0aGlzLl9pdGVtcy5maW5kSW5kZXgodmFsdWUgPT4gdmFsdWUuaXRlbV9pZCA9PT0gcHJvZHVjdC5pdGVtX2lkKSwgMSk7XHJcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xyXG5cdFx0dG9hc3QgJiYgdGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuXHRcdHRvYXN0ICYmIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LXJlbW92ZWQnKTtcclxuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcblx0XHR0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgncmVtb3ZlX2Zyb21fY2FydCcsIHsgLi4ucHJvZHVjdCwgY3VycmVuY3k6IHRoaXMuX2NvbnN0cy5jdXJyZW5jeS5jb2RlIH0pXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFncmVnYSB1biBjdXBvbiBhbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSB2YWx1ZSBDb2RpZ28gZGVsIGN1cMOzbi5cclxuXHQgKi9cclxuXHRhZGRDb3Vwb24odmFsdWU6IHN0cmluZykge1xyXG5cdFx0Zmlyc3RWYWx1ZUZyb20odGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy5jb3Vwb25BcGkoKSwgeyBjb3Vwb246IHZhbHVlIH0pKS50aGVuKFxyXG5cdFx0XHRyZXMgPT4ge1xyXG5cdFx0XHRcdC8vY29uc29sZS5sb2cocmVzKVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlQ2FydE9iaihyZXMpXHJcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0N1cG9uIGFwbGljYWRvJylcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyID0+IHtcclxuXHRcdFx0XHQvL2NvbnNvbGUuZXJyb3IoZXJyKSBcclxuXHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnaW52YWxpZC1jb3Vwb24nKVxyXG5cdFx0XHR9XHJcblx0XHQpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEVsaW1pbmEgdW4gY3Vww7NuIGRlbCBjYXJyaXRvLiBcclxuXHQgKi9cclxuXHRyZW1vdmVDb3Vwb24oKSB7XHJcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmNvdXBvbkFwaSgpKSkudGhlbihcclxuXHRcdFx0cmVzID0+IHtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlcylcclxuXHRcdFx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKVxyXG5cdFx0XHR9XHJcblx0XHQpXHJcblx0fVxyXG5cclxuXHRnZXRDb3Vwb25Db2RlKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LmNvdXBvbkNvZGUpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgdW4gb2JzZXJ2YWJsZSBjb24gZWwgc3VidG90YWwgZGVsIGNhcnJpdG8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0U3ViVG90YWxBbW91bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnN1YnRvdGFsKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgdW4gb2JzZXJ2YWJsZSBjb24gZWwgdG90YWwgZGVsIG1vbnRvIGRlIGxhcyBwcm9tb2Npb25lcyBhcGxpY2FkYXMuXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0VG90YWxQcm9tb3Rpb25BbW91bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnByb21vdGlvbikpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBtb250byBkZSBsb3MgaW1wdWVzdG9zIGFwbGljYWRvcy5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUYXhlc0Ftb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udGF4ZXMgPiAwID8gY2FydD8udG90YWxzPy50YXhlcyA6IDApKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCBtb250byB0b3RhbCBkZWwgY2Fycml0by5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRUb3RhbEFtb3VudCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFJldG9ybmEgZWwgdG9rZW4gZGVsIGNhcnJpdG8uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0Q2FydFRva2VuKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FydFRva2VuO1xyXG5cdH1cclxuXHRjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWU6IGFueSkgPT4gdGhpcy5faGF2ZVRvVXBkYXRlID0gdmFsdWU7XHJcblx0Y2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKFwiQ2xlYXJpbmcgYW5kIHJlc2V0aW5nLi4uXCIpXHJcblx0XHR0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XHJcblx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSkuc3Vic2NyaWJlKFxyXG5cdFx0XHRyZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcblx0XHQpXHJcblx0cHJpdmF0ZSByZXNldENhcnQgPSAoZm4/OiBhbnkpID0+IHtcclxuXHRcdHRoaXMuX2l0ZW1zID0gW107XHJcblx0XHR0aGlzLl9jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xyXG5cdFx0dGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhudWxsKTtcclxuXHRcdHRoaXMuY2FydFRva2VuID0gbnVsbDtcclxuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XHJcblx0XHR0aGlzLl9jb3VudCA9IDA7XHJcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfS0VZLCBcIltdXCIpO1xyXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSk7XHJcblx0XHR0aGlzLl9jYXJ0SW5pdGlhbGl6ZWQgPSBmYWxzZTsgLy8g4pqg77iPIEZJWDogUmVzZXQgZGVsIGZsYWcgZGUgaW5pY2lhbGl6YWNpw7NuXHJcblx0XHRmbiAmJiBmbigpO1xyXG5cdH1cclxuXHRjbGVhckFuZFJlc2V0Q2FydCgpIHtcclxuXHRcdHRoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydEJ5Q3VzdG9tZXIpOyAvLyDimqDvuI8gRklYOiBDcmVhciBudWV2byBjYXJyaXRvIGRlc3B1w6lzIGRlIGNvbXBsZXRhciBjb21wcmFcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB1cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhiYWxhbmNlOiBhbnksIHRvdGFsOiBudW1iZXIgfCBudWxsID0gbnVsbCkge1xyXG5cclxuXHRcdGlmICghYmFsYW5jZSkge1xyXG5cdFx0XHR0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQobnVsbCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCB0b3RhbEFtb3VudCA9IHRvdGFsID8/IDA7XHJcblxyXG5cdFx0Y29uc3QgYmFsYW5jZURhdGEgPSB7XHJcblx0XHRcdGFsbG93QW55UGF5bWVudE1ldGhvZDogYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QsXHJcblx0XHRcdGFsbG93RXhjZWVkQmFsYW5jZTogYmFsYW5jZS5hbGxvd0V4Y2VlZEJhbGFuY2UsXHJcblx0XHRcdGNyZWRpdEFtb3VudDogYmFsYW5jZS5jcmVkaXRBbW91bnQsXHJcblx0XHRcdHNob3dNYXg6IGJhbGFuY2Uuc2hvd01heCxcclxuXHRcdFx0c2hvd1ByaWNlOiBiYWxhbmNlLnNob3dQcmljZSxcclxuXHRcdFx0cmVtYWluaW5nQ3JlZGl0czpcclxuXHRcdFx0XHRiYWxhbmNlLmNyZWRpdEFtb3VudCAhPSBudWxsICYmIHRvdGFsQW1vdW50ICE9IG51bGwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gdG90YWxBbW91bnRcclxuXHRcdFx0XHRcdD8gYmFsYW5jZS5jcmVkaXRBbW91bnQgLSB0b3RhbEFtb3VudFxyXG5cdFx0XHRcdFx0OiAwLFxyXG5cdFx0XHRhcHBseU1heE9yZGVyczogYmFsYW5jZS5hcHBseU1heE9yZGVycyxcclxuXHRcdFx0bWF4T3JkZXJzOiBiYWxhbmNlLm1heE9yZGVyc1xyXG5cdFx0fTtcclxuXHJcblx0XHR0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQoYmFsYW5jZURhdGEpO1xyXG5cdH1cclxuXHRhZGRUb0xvdChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkOiBhbnksIGlkPzogbnVtYmVyLCBvcmRlcl9pdGVtX2lkPzogYW55LCBsb3RfcXVhbnRpdHk/OiBhbnksIHVuaXRfcHJpY2U/OiBhbnksIHVuaXRfdG90YWw/OiBhbnksIGFqdXN0ZW1lbnRfdG90YWw/OiBhbnksIHRvdGFsX2xvdD86IG51bWJlciwgbG90X3N0YXR1cz86IHN0cmluZywgZGF0ZV9yZXF1ZXN0Pzogc3RyaW5nLCBub3Rlcz86IHN0cmluZywgc2hpcHBpbmdfYWRkcmVzc19pZD86IG51bWJlciwgc2hpcHBpbmdfYWRkcmVzc19uYW1lPzogc3RyaW5nLCBhY3Rpb24/OiBzdHJpbmcpIHtcclxuXHRcdGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG5cdFx0XHRyZXR1cm5cclxuXHRcdH1cclxuXHJcblx0XHRsZXQgYWRkZWQgPSAnJztcclxuXHRcdCFhZGRlZCAmJiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsIHF1YW50aXR5OiBxdWFudGl0eSwgdmFyaWFudENvZGU6IHZhcmlhbnRfaWQsIGlkOiBpZCB8fCAnJywgb3JkZXJfaXRlbV9pZDogb3JkZXJfaXRlbV9pZCB8fCAnJywgbG90X3F1YW50aXR5OiBsb3RfcXVhbnRpdHkgfHwgJycsIHVuaXRfcHJpY2U6IHVuaXRfcHJpY2UgfHwgJycsIHVuaXRfdG90YWw6IHVuaXRfdG90YWwgfHwgJycsIGFqdXN0ZW1lbnRfdG90YWw6IGFqdXN0ZW1lbnRfdG90YWwgfHwgJycsIHRvdGFsX2xvdDogdG90YWxfbG90IHx8ICcnLCBsb3Rfc3RhdHVzOiBsb3Rfc3RhdHVzIHx8ICcnLCBkYXRlX3JlcXVlc3Q6IGRhdGVfcmVxdWVzdCB8fCAnJywgbm90ZXM6IG5vdGVzIHx8ICcnLCBzaGlwcGluZ19hZGRyZXNzX2lkOiBzaGlwcGluZ19hZGRyZXNzX2lkIHx8ICcnLCBzaGlwcGluZ19hZGRyZXNzX25hbWU6IHNoaXBwaW5nX2FkZHJlc3NfbmFtZSB8fCAnJywgYWN0aW9uOiBhY3Rpb24gfHwgJ25ld2xvdCcgfSlcclxuXHRcdFx0LnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHJlcykgPT4gdGhpcy5hcHBlbmRUb0NhcnQocmVzKSxcclxuXHRcdFx0XHRlcnJvcjogKGVycikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblxyXG5cdGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XHJcblx0XHR0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUoXHJcblx0XHRcdG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LmNyZWRpdEFtb3VudCA/PyBudWxsKVxyXG5cdFx0KTtcclxuXHJcblxyXG5cdGdldFJlbWFpbmluZ0NyZWRpdHMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXIgfCB1bmRlZmluZWQ+ID0+XHJcblx0XHR0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUobWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8ucmVtYWluaW5nQ3JlZGl0cykpO1xyXG5cclxuXHJcblx0cHVibGljIGhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsID0gKCk6IGJvb2xlYW4gPT4ge1xyXG5cdFx0Y29uc3QgYmFsYW5jZSA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblxyXG5cdFx0aWYgKCFiYWxhbmNlIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSBudWxsIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoKHRoaXMuX2NhcnRTdWJqZWN0LnZhbHVlPy50b3RhbHM/LnRvdGFsID8/IDApID4gYmFsYW5jZS5jcmVkaXRBbW91bnQpIHtcclxuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fTtcclxuXHJcblx0cHJpdmF0ZSB2YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG5cdFx0Y29uc3QgYmFsYW5jZSA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblxyXG5cdFx0aWYgKCFiYWxhbmNlIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSBudWxsIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCB1bml0UHJpY2UgPSBpdGVtLnRvdGFsIC8gaXRlbS5xdWFudGl0eTtcclxuXHRcdGNvbnN0IGFkZGl0aW9uYWxRdWFudGl0eSA9IHF1YW50aXR5IC0gaXRlbS5xdWFudGl0eTtcclxuXHJcblx0XHRpZiAoYWRkaXRpb25hbFF1YW50aXR5IDw9IDApIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWRkaXRpb25hbENvc3QgPSB1bml0UHJpY2UgKiBhZGRpdGlvbmFsUXVhbnRpdHk7XHJcblxyXG5cdFx0aWYgKGFkZGl0aW9uYWxDb3N0ID4gYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzKSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH07XHJcblxyXG5cdGFkZFJlcGVhdE9yZGVyVG9DYXJ0KGl0ZW1zOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuX2NhcnRJdGVtc1N1YmplY3QudmFsdWUubGVuZ3RoID4gMCkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnY2FydC1ub3QtZW1wdHknKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGhpcy5fYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG5cdFx0XHRyZXR1cm5cclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBpdGVtc1RvQWRkID0gaXRlbXMubWFwKGl0ZW0gPT4gKHtcclxuXHRcdFx0cHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuXHRcdFx0cXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcblx0XHRcdHZhcmlhbnRDb2RlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uY29kZVxyXG5cdFx0fSkpO1xyXG5cclxuXHRcdGlmIChpdGVtc1RvQWRkLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbm8tcHJvZHVjdHMtdG8tYWRkJyk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwYXJhbXMgPSB7XHJcblx0XHRcdGl0ZW1zOiBpdGVtc1RvQWRkXHJcblx0XHR9O1xyXG5cclxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHJcblx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRBbGxJdGVtc0FwaSgpLCBwYXJhbXMpXHJcblx0XHRcdC50b1Byb21pc2UoKVxyXG5cdFx0XHQudGhlbihyZXMgPT4ge1xyXG5cclxuXHRcdFx0XHRpZiAocmVzPy5zdGF0dXMgPT09ICdmYWlsdXJlJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gcmVzLmVycm9yPy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJ18nKSB8fCAndW5rbm93bl9lcnJvcic7XHJcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgaXRlbXNSZXNwb25zZSA9IHJlcz8uaXRlbXNfcmVzcG9uc2UgfHwgW107XHJcblx0XHRcdFx0Y29uc3QgY2FydEl0ZW1zID0gcmVzPy5jYXJ0Py5pdGVtcyB8fCBbXTtcclxuXHJcblx0XHRcdFx0Y29uc3Qgb3V0T2ZTdG9ja0l0ZW1zID0gaXRlbXNSZXNwb25zZS5maWx0ZXIoKGl0ZW06IGFueSkgPT5cclxuXHRcdFx0XHRcdGl0ZW0uc3RhdHVzID09PSAnZmFpbHVyZScgJiZcclxuXHRcdFx0XHRcdGl0ZW0uZXJyb3JzLnNvbWUoKGVycm9yOiBhbnkpID0+IGVycm9yLmNvZGUgPT09ICdvdXRfb2Zfc3RvY2snKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGlmIChjYXJ0SXRlbXMubGVuZ3RoID09PSAwICYmIG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnYWxsLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnc29tZS1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChjYXJ0SXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVDYXJ0T2JqKHJlcy5jYXJ0KTtcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydEl0ZW1zKSk7XHJcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcclxuXHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0XHRlcnIgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdC5jYXRjaChlcnIgPT4ge1xyXG5cdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxufVxyXG4iXX0=
663
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBaUIsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUM3RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLFdBQVc7SUFDZixZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELFVBQVUsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDOUQsaUJB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QUcsQ0FBQyxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBaHVCVyxXQUFXOzRHQUFYLFdBQVcsY0FGWCxNQUFNOzs0RkFFTixXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFsYW5jZUN1c3RvbWVyLCBDYXJ0SXRlbSwgSUNvdXBvbiwgUHJvZHVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSwgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlyc3RWYWx1ZUZyb20sIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYW5hbHl0aWNzJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IE5neExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL25neC1sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xuXHRwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuXHRwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuXHRwcml2YXRlIF9jb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSk7XG5cdHByaXZhdGUgX2FwaUNvbnN0czogQXBpQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChBcGlDb25zdGFudHNTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KExvY2FsU3RvcmFnZVNlcnZpY2UpO1xuXHRwcml2YXRlIF9jaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UgPSBpbmplY3QoQ2hhbm5lbFNlcnZpY2UpO1xuXHRwcml2YXRlIF9jb25zdHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfc3RvcmFnZTogTmd4TG9jYWxTdG9yYWdlU2VydmljZSA9IGluamVjdChOZ3hMb2NhbFN0b3JhZ2VTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuXHRwcml2YXRlIF9jYXJ0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXHRwcml2YXRlIF9wcm9tb3Rpb25zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcblx0cHJpdmF0ZSBfY291cG9uU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXHRwcml2YXRlIF9jYXJ0SXRlbXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2FydEl0ZW1bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcnRJdGVtW10+KFtdKVxuXHRwcml2YXRlIF9yZXF1ZXN0SW5Qcm9jZXNzOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblx0cHJpdmF0ZSBfYmFsYW5jZUN1c3RvbWVyU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEJhbGFuY2VDdXN0b21lciB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCYWxhbmNlQ3VzdG9tZXIgfCBudWxsPihudWxsKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IENBUlRfS0VZOiBzdHJpbmcgPSAnY2FydCc7XG5cdHByaXZhdGUgcmVhZG9ubHkgQ0FSVF9UT0tFTl9LRVk6IHN0cmluZyA9ICdjYXJ0X3Rva2VuJztcblxuXHRwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcblx0cHJpdmF0ZSBfY291bnQ6IG51bWJlciA9IDA7XG5cdHB1YmxpYyBjYXJ0VG9rZW46IHN0cmluZyB8IG51bGwgPSAnJztcblx0cHVibGljIGNoYW5uZWxDb25maWc6IGFueSA9IHt9O1xuXHRwcml2YXRlIF9sb2NhbGUgPSBcIlwiO1xuXHRwcml2YXRlIF9jYXJ0SW5pdGlhbGl6ZWQgPSBmYWxzZTsgLy8g4pqg77iPIEZJWDogRmxhZyBwYXJhIGV2aXRhciBpbmljaWFsaXphY2lvbmVzIGR1cGxpY2FkYXNcblx0cHVibGljIGNhcnRJdGVtcyQgPSB0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKGl0ZW1zID0+IHRoaXMuc3dpdGNoUHJpY2VJbkNhcnRJdGVtKGl0ZW1zKSkpXG5cdHB1YmxpYyBjb3Vwb24kOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9jb3Vwb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgY2FydCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2NhcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLmFzT2JzZXJ2YWJsZSgpO1xuXHRwcml2YXRlIF9oYXZlVG9VcGRhdGUgPSB0cnVlO1xuXHRwdWJsaWMgYmFsYW5jZUN1c3RvbWVyJCA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdHB1YmxpYyBhbGxvd0FueVBheW1lbnRNZXRob2QkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dBbnlQYXltZW50TWV0aG9kID8/IG51bGwpKTtcblx0cHVibGljIGFsbG93RXhjZWVkQmFsYW5jZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0V4Y2VlZEJhbGFuY2UgPz8gbnVsbCkpO1xuXHRwdWJsaWMgY3JlZGl0QW1vdW50JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LmNyZWRpdEFtb3VudCA/PyBudWxsKSk7XG5cdHB1YmxpYyBzaG93TWF4JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dNYXggPz8gbnVsbCkpO1xuXHRwdWJsaWMgc2hvd1ByaWNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dQcmljZSA/PyBudWxsKSk7XG5cdHB1YmxpYyBwcm9tb3Rpb25zJCA9IHRoaXMuX3Byb21vdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHQvL0FQSSBVUkxcblx0cHJpdmF0ZSBfY2FydEJhc2VVcmw6IHN0cmluZyA9IGAke3RoaXMuX2FwaUNvbnN0cy5TSE9QX0FQSV9VUkx9JHt0aGlzLl9hcGlDb25zdHMuQ0hBTk5FTH0vY2FydHNgO1xuXG5cdHB1YmxpYyB1cGRhdGVJdGVtUXVhbnRpdHlBcGkoaXRlbV9pZDogYW55KSB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLl9hcGlDb25zdHMuTE9DQUxFOyB9XG5cdHB1YmxpYyBhZGRJdGVtQXBpKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9pdGVtcz9sb2NhbGU9JyArIHRoaXMuX2FwaUNvbnN0cy5MT0NBTEUgfVxuXHRwdWJsaWMgYWRkQWxsSXRlbXNBcGkgPSAoKSA9PiB0aGlzLl9jYXJ0QmFzZVVybCArICcvJyArIHRoaXMuY2FydFRva2VuICsgJy9tdWx0aXBsZS1pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRTtcblx0cHVibGljIGNhcnRJdGVtc0FwaSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRSB9XG5cdHB1YmxpYyBkZWxldGVJdGVtQXBpKGl0ZW1faWQ6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRTsgfVxuXHRwdWJsaWMgY291cG9uQXBpKCkgeyByZXR1cm4gdGhpcy5fY2FydEJhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRUb2tlbiArICcvY291cG9uJyB9O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblxuXHRcdC8vIOKchSBDYXJnYXIgY2Fycml0byBsb2NhbCB5IHRva2VuIHByZXZpb1xuXHRcdHRoaXMuX2l0ZW1zID0gSlNPTi5wYXJzZSh0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNBUlRfS0VZKSB8fCAnW10nKTtcblx0XHR0aGlzLmNhcnRUb2tlbiA9IHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0FSVF9UT0tFTl9LRVkpIHx8IG51bGw7XG5cblx0XHQvLyDwn5SRIENMQVZFOiBTdXNjcmlwY2nDs24gYSBjYW1iaW9zIGRlIGVzdGFkbyBkZSBsb2dpblxuXHRcdHRoaXMuX2F1dGhTZXJ2aWNlLmxvZ2dlZEluJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZShpc0xvZ2dlZEluID0+IHtcblx0XHRcdGlmIChpc0xvZ2dlZEluKSB7XG5cdFx0XHRcdC8vIEFsIHBhc2FyIGRlIGludml0YWRvIC0+IGxvZ3VlYWRvLCBzaWVtcHJlIHNpbmNyb25pemFyIHBhcmEgdHJhZXIgYmFsYW5jZUN1c3RvbWVyXG5cdFx0XHRcdC8vIChzaSBubywgZWwgaGVhZGVyIG5vIG11ZXN0cmEgY3VlbnRhIGNvcnJpZW50ZSBoYXN0YSByZWNhcmdhcikuXG5cdFx0XHRcdHRoaXMuc3luY0NhcnRPbkxvZ2luKCk7XG5cdFx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IHRydWU7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX2NhcnRJbml0aWFsaXplZCkge1xuXHRcdFx0XHQvLyBVc3VhcmlvIGNlcnLDsyBzZXNpw7NuLCBsaW1waWFyIHkgcmVzZXRlYXIgY2Fycml0b1xuXHRcdFx0XHR0aGlzLmNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IGZhbHNlOyAvLyBSZXNldCBmbGFnIHBhcmEgcGVybWl0aXIgbnVldmEgaW5pY2lhbGl6YWNpw7NuXG5cdFx0fSk7XG5cblx0XHR0aGlzLl9jaGFubmVsU2VydmljZS5jaGFubmVsJC5zdWJzY3JpYmUocmVzID0+IHRoaXMuY2hhbm5lbENvbmZpZyA9IHJlcyk7XG5cblx0XHQvLyDimqDvuI8gRklYOiBTb2xvIGluaWNpYWxpemFyIHBhcmEgdXN1YXJpb3Mgbm8gYXV0ZW50aWNhZG9zXG5cdFx0Ly8gRWwgY2Fycml0byBkZSB1c3VhcmlvcyBhdXRlbnRpY2Fkb3Mgc2UgaW5pY2lhbGl6YSBlbiBsYSBzdXNjcmlwY2nDs24gbG9nZ2VkSW4kXG5cdFx0aWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAhdGhpcy5fY2FydEluaXRpYWxpemVkKSB7XG5cdFx0XHQvLyBTaSBoYXkgdG9rZW4sIGludGVudGFyIG9idGVuZXIgY2Fycml0byBwb3IgdG9rZW4sIHNpbm8gY3JlYXIgbnVldm9cblx0XHRcdGlmICh0aGlzLmNhcnRUb2tlbikge1xuXHRcdFx0XHR0aGlzLmdldENhcnQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZ2V0Q2FydEJ5Q3VzdG9tZXIoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2NhcnRJbml0aWFsaXplZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNpbmNyb25pemEgZWwgY2Fycml0byBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGxvZ2luXG5cdCAqIEltcGxlbWVudGEgbGEgbMOzZ2ljYSBkZSBBbmd1bGFyIDkgcGFyYSBwcmVzZXJ2YXIgZWwgY2Fycml0byBkZWwgaW52aXRhZG9cblx0ICovXG5cdHByaXZhdGUgc3luY0NhcnRPbkxvZ2luKCkge1xuXHRcdC8vIOKaoO+4jyBGSVg6IFNpIGhheSB0b2tlbiAoY2Fycml0byBleGlzdGVudGUpLCBzaWVtcHJlIGludGVudGFyIHJlY3VwZXJhcmxvXG5cdFx0Ly8gTm8gZGVwZW5kZW1vcyBzb2xvIGRlIGxvcyBpdGVtcyBsb2NhbGVzIHF1ZSBwdWVkZW4gZXN0YXIgdmFjw61vcyBhbCByZWNhcmdhclxuXHRcdGlmICh0aGlzLmNhcnRUb2tlbikge1xuXHRcdFx0Ly8gRW52w61hIGVsIHRva2VuIHBhcmEgcmVjdXBlcmFyL2Z1c2lvbmFyIGNhcnJpdG9zXG5cdFx0XHR0aGlzLmdldENhcnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2luIHRva2VuIGRlIGNhcnJpdG8sIG9idGVuZXIgY2Fycml0byBkZWwgdXN1YXJpbyBhdXRlbnRpY2Fkb1xuXHRcdFx0dGhpcy5nZXRDYXJ0QnlDdXN0b21lcigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogT2J0aWVuZSBlbCBjYXJyaXRvIGRlc2RlIGVsIGJhY2tlbmQgY29uIGzDs2dpY2EgZGUgc2luY3Jvbml6YWNpw7NuXG5cdCAqIEVudsOtYSBlbCB0b2tlbiBzaSBoYXkgY2Fycml0byBsb2NhbCBwYXJhIGZ1c2lvbmFyIGNhcnJpdG9zXG5cdCAqL1xuXHRwcml2YXRlIGdldENhcnQoKSB7XG5cdFx0Ly8g4pqg77iPIEZJWDogRW52aWFyIHRva2VuIHNpIGV4aXN0ZSwgc2luIGltcG9ydGFyIHNpIGhheSBpdGVtcyBsb2NhbGVzXG5cdFx0Ly8gRXN0byBwZXJtaXRlIHJlY3VwZXJhciBlbCBjYXJyaXRvIGV4aXN0ZW50ZSBhbCByZWNhcmdhciBsYSBww6FnaW5hXG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRoaXMuY2FydFRva2VuID8geyB0b2tlbjogdGhpcy5jYXJ0VG9rZW4gfSA6IHVuZGVmaW5lZDtcblxuXHRcdGZpcnN0VmFsdWVGcm9tKFxuXHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksIHBheWxvYWQpXG5cdFx0KS50aGVuKChyZXM6IGFueSkgPT4ge1xuXHRcdFx0Ly9jb25zb2xlLmxvZygnZ2V0Q2FydCByZXNwb25zZTonLCByZXMpO1xuXHRcdFx0dGhpcy5pbml0aWFsaXplQ2FydChyZXMpO1xuXHRcdH0pLmNhdGNoKGVycm9yID0+IHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgY2FydDonLCBlcnJvcik7XG5cdFx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDb25maWd1cmEgZWwgY2Fycml0byBjb24gbG9zIHBhcmFtZXRyb3MgaW5pY2lhbGVzLlxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0aW5pdGlhbGl6ZUNhcnQocmVzcG9uc2U6IGFueSk6IGFueSB7XG5cdFx0dGhpcy5jYXJ0VG9rZW4gPSByZXNwb25zZS50b2tlblZhbHVlO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0FSVF9UT0tFTl9LRVksIHRoaXMuY2FydFRva2VuKTtcblx0XHR0aGlzLl9sb2NhbGUgPSByZXNwb25zZS5sb2NhbGU7XG5cblx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcblx0XHR0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlc3BvbnNlLml0ZW1zKSk7XG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvKipcblx0ICogQWN0dWFsaXphIGxvcyBpdGVtcyBkZWwgY2Fycml0by5cblx0ICogQHBhcmFtIGl0ZW1zIFxuXHQgKi9cblx0dXBkYXRlQ2FydEl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xuXHRcdHRoaXMuX2l0ZW1zID0gaXRlbXM7XG5cdFx0dGhpcy5fY291bnQgPSBpdGVtcy5sZW5ndGg7XG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdH1cblx0LyoqXG5cdCAqIEFncmVnYSB1biBwcm9kdWN0byBhbCBjYXJyaXRvIGNvbiBsYSBjYW50aWRhZCBkZXNlYWRhLiBcblx0ICogQHBhcmFtIHByb2R1Y3QgUHJvZHVjdG8gYSBhZ3JlZ2FyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBDYW50aWRhZCBcblx0ICogQHBhcmFtIHZhcmlhbnRJZCBJZCBkZSBsYSB2YXJpYW50ZVxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGFkZFRvQ2FydChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50SWQ6IHN0cmluZykge1xuXHRcdGNvbnN0IGJhbGFuY2U6IEJhbGFuY2VDdXN0b21lciB8IG51bGwgPSB0aGlzLl9iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xuXHRcdGNvbnN0IGFwcGx5TWF4T3JkZXJzOiBib29sZWFuID0gYmFsYW5jZT8uYXBwbHlNYXhPcmRlcnMgPz8gZmFsc2U7XG5cdFx0Y29uc3QgbWF4T3JkZXJzOiBudW1iZXIgPSBiYWxhbmNlPy5tYXhPcmRlcnMgPz8gSW5maW5pdHk7XG5cblx0XHRpZiAoYXBwbHlNYXhPcmRlcnMgJiYgKG1heE9yZGVycyA8PSAwIHx8IG1heE9yZGVycyA9PT0gbnVsbCkpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXgtb3JkZXJzLXJlYWNoZWQnKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxuXHRcdFx0cmV0dXJuXG5cdFx0IH1cblx0XHRjb25zdCBpc0V4aXN0aW5nSXRlbSA9IHRoaXMuX2l0ZW1zLnNvbWUoKGl0ZW06IGFueSkgPT4gaXRlbS5wcm9kdWN0LmlkID09PSBwcm9kdWN0LmlkICYmIGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudElkKTtcblxuXHRcdC8vIFZhbGlkYWNpw7NuIGRlIHNhbGRvIHBhcmEgaXRlbXMgbnVldm9zIChsb3MgZXhpc3RlbnRlcyBzZSB2YWxpZGFuIGVuIHVwZGF0ZUl0ZW1RdWFudGl0eSlcblx0XHRpZiAoIWlzRXhpc3RpbmdJdGVtICYmICF0aGlzLmhhc0NyZWRpdHNGb3JOZXdJdGVtKHByb2R1Y3QsIHF1YW50aXR5LCB2YXJpYW50SWQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblx0XHRsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudElkLCBxdWFudGl0eSk7XG5cblx0XHRpZiAoIWFkZGVkKSB7XG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcblx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50SWQgfSkpXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdHJlcyA9PiB7XG5cdFx0XHRcdFx0XHQvLyBNYW5lamFyIGxhIHJlc3B1ZXN0YSBIVFRQIGV4aXRvc2EgKGPDs2RpZ28gMjAwKVxuXHRcdFx0XHRcdFx0dGhpcy5hcHBlbmRUb0NhcnQocmVzKTtcblx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcblx0XHRcdFx0XHRcdGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ8OzZGlnbyBkZSBlcnJvciA1MDAgKHRpbWVvdXQpXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2NhcnQtZXJyb3InKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIE90cm8gY8OzZGlnbyBkZSBlcnJvclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdlcnJvci1zZXJ2ZXInKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBBY3R1YWxpemEgZWwgY2Fycml0byBhZ3JlZ2FuZG8gbG9zIG51ZXZvcyBpdGVtcy5cblx0ICogQHBhcmFtIGNhcnQgXG5cdCAqL1xuXHRhcHBlbmRUb0NhcnQoY2FydDogYW55KSB7XG5cdFx0dGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQpO1xuXHRcdHRoaXMuX2l0ZW1zID0gdGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0Lml0ZW1zKTtcblx0XHR0aGlzLl9jb3VudCA9IHRoaXMuX2l0ZW1zLmxlbmd0aDtcblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XG5cdFx0dGhpcy5fY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuX2l0ZW1zKTtcblx0fVxuXHQvKipcblx0ICogTWFwZWEgbG9zIGl0ZW1zIGRlbCBjYXJyaXRvIHBhcmEgZGFybGUgdW4gbWVqb3IgZm9ybWF0byBzaW1pbGFyIGEgbGEgaW50ZXJmYXogYENhcnRJdGVtYC5cblx0ICogQHBhcmFtIGl0ZW1zIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHRyYW5zZm9ybUl0ZW1zKGl0ZW1zOiBhbnkpOiBhbnlbXSB7XG5cdFx0cmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRwcm9kdWN0OiBpdGVtLnByb2R1Y3QsXG5cdFx0XHRcdHZhcmlhbnRfaWQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlLFxuXHRcdFx0XHRsb3Q6IGl0ZW0ub3JkZXJJdGVtTG90LFxuXHRcdFx0XHRxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcblx0XHRcdFx0aXRlbV9pZDogaXRlbS5pZCxcblx0XHRcdFx0dG90YWw6IGl0ZW0udG90YWxcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogQ2hlcXVlYSBzaSBlbCBwcm9kdWN0byB5YSBleGlzdGUgZW4gZWwgY2Fycml0byBkZSBjb21wcmFzLlxuXHQgKiBAcGFyYW0gcHJvZHVjdCBcblx0ICogQHBhcmFtIHZhcmlhbnRJZCBcblx0ICogQHBhcmFtIHF1YW50aXR5QWRkIENhbnRpZGFkIGEgYWdyZWdhci4gUG9yIGRlZmVjdG8gZXMgMS5cblx0ICovXG5cdGFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdDogUHJvZHVjdCwgdmFyaWFudElkOiBzdHJpbmcsIHF1YW50aXR5QWRkOiBudW1iZXIgPSAxKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoKGl0ZW06IGFueSwgaW5kZXgpID0+IHtcblx0XHRcdGlmIChpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdC5pZCAmJiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudElkKSB7XG5cdFx0XHRcdHRoaXMudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIHRoaXMuZmluZEl0ZW0ocHJvZHVjdC5pZCkucXVhbnRpdHkgKyBxdWFudGl0eUFkZCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pXG5cdH1cblx0LyoqXG5cdCAqIE9idGllbmUgbGEgY2FudGlkYWQgZGUgdW4gcHJvZHVjdG8gZGVsIGl0ZW0gZGVsIGNhcnJpdG8gXG5cdCAqIEBwYXJhbSBjb2RlVmFyaWFudCBjb2RpZ28gZGUgbGEgdmFyaWFudGUuXG5cdCAqIEByZXR1cm5zIGxhIGNhbnRpZGFkIG8gYDBgIGVuIHN1IGRlZmVjdG8uXG5cdCAqL1xuXHRnZXRDb3VudEZyb21JdGVtSW5DYXJ0KGNvZGVWYXJpYW50OiBhbnkpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IGNvZGVWYXJpYW50KT8ucXVhbnRpdHkgfHwgMDtcblx0fVxuXHQvKipcblx0ICogT2J0aWVuZSB1biBvYnNlcnZhYmxlIGNvbiBsYSBjYW50aWRhZCBkZSBpdGVtcyBlbiBlbCBjYXJyaXRvLlxuXHQgKi9cblx0Z2V0Q291bnRDYXJ0SXRlbXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5jYXJ0SXRlbXMkLnBpcGUobWFwKChjYXJ0SXRlbXMpID0+IGNhcnRJdGVtcz8ubGVuZ3RoKSk7XG5cdH1cblx0LyoqXG5cdCAqIE1hcGVhIGxvcyBwcm9kdWN0b3MgZW4gZWwgY2Fycml0byBwYXJhIGNhbWJpYXIgZWwgcHJlY2lvIG9idGVuaWVuZG8gZGUgbGEgdmFyaWFudGUgeSBzZWxlY2Npb25hbmRvIHNpIGVzXG5cdCAqIHByZWNpbyBkZSBvZmVydGEgbyBlbCBwcmVjaW8gbm9ybWFsLlxuXHQgKiBAcGFyYW0gaXRlbXMgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBzd2l0Y2hQcmljZUluQ2FydEl0ZW0gPSAoaXRlbXM6IGFueVtdKSA9PiB7XG5cdFx0cmV0dXJuIGl0ZW1zLm1hcChcblx0XHRcdGl0ZW0gPT4ge1xuXHRcdFx0XHRpZiAoaXRlbS5wcm9kdWN0KSB7XG5cdFx0XHRcdFx0aXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGl0ZW1cblx0XHRcdH1cblx0XHQpXG5cdH1cblx0LyoqXG5cdCAqIEFjdHVhbGl6YSBsYSBjYW50aWRhZCBkZSB1biBwcm9kdWN0byBleGlzdGVudGUgZW4gZWwgY2Fycml0by5cblx0ICogQHBhcmFtIGl0ZW0gZWwgaXRlbSBhIGFjdHVhbGl6YXIuXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBsYSBjYW50aWRhZCBudWV2YS5cblx0ICovXG5cdHVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdC8vIFZhbGlkYXIgYW50ZXMgZGUgcHJvY2VkZXJcblx0XHRpZiAodGhpcy52YWxpZGF0ZVF1YW50aXR5KGl0ZW0sIHF1YW50aXR5KSAmJiAodGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhpdGVtLCBxdWFudGl0eSkpKSB7XG5cdFx0XHQvLyBTaSBwYXNhIGxhcyB2YWxpZGFjaW9uZXMsIGhhY2VyIGxhIHBldGljacOzbiBIVFRQXG5cdFx0XHRmaXJzdFZhbHVlRnJvbShcblx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy51cGRhdGVJdGVtUXVhbnRpdHlBcGkodGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZCkpLCB7ICdxdWFudGl0eSc6IE51bWJlcihxdWFudGl0eSkgfSkpXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdHJlcyA9PiB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKSAmJiB0aGlzLnVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkoaXRlbS52YXJpYW50X2lkLCBOdW1iZXIocXVhbnRpdHkpKSxcblx0XHRcdFx0XHRlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXG5cdFx0XHRcdCk7XG5cblx0XHRcdHJldHVybiB0cnVlOyAvLyBWYWxpZGFjaW9uZXMgcGFzYXJvbiwgb3BlcmFjacOzbiBpbmljaWFkYVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIFZhbGlkYWNpb25lcyBmYWxsYXJvblxuXHRcdH1cblx0fVxuXHQvKipcblx0ICogTWFuZWphIGVsIGVycm9yIGVuIGNhc28gZGUgcXVlIG5vIHNlIHB1ZWRhIGFncmVnYXIgYWwgY2Fycml0byBlbCBwcm9kdWN0by5cblx0ICogQHBhcmFtIGVyciBcblx0ICovXG5cdGhhbmRsZUVycm9yKGVycjogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xuXHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdH1cblx0LyoqXG5cdCAqIEFjdHVhbGl6YSBsYSBjYW50aWRhZCBkZWwgaXRlbSBkZWwgcHJvZHVjdG8gZGVsIGNhcnJpdG8uXG5cdCAqIEBwYXJhbSB2YXJpYW50SWQgSUQgZGUgbGEgdmFyaWFudGUgcGFyYSBidXNjYXIgZWwgaXRlbS5cblx0ICogQHBhcmFtIHF1YW50aXR5IE51ZXZhIGNhbnRpZGFkLiBcblx0ICovXG5cdHVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkodmFyaWFudElkOiBhbnksIHF1YW50aXR5OiBudW1iZXIpOiB2b2lkIHtcblx0XHQvL2NvbnNvbGUubG9nKFwidXBkYXRlQ2FydEl0ZW1RdWFudGl0eVwiLCB0aGlzLl9pdGVtcywgdmFyaWFudElkKVxuXHRcdGxldCBuZXdRdWFudGl0eSA9IHRoaXMuX2l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudElkKS5xdWFudGl0eSA9IHF1YW50aXR5O1xuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLl9pdGVtcyk7XG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcblx0XHR0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xuXHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwcm9kdWN0LXVwZGF0ZWQnLCB7IHF1YW50aXR5OiBuZXdRdWFudGl0eSB9KTtcblx0fVxuXHQvKipcblx0ICogQWN0dWFsaXphIGxvcyBkYXRvcyBkZWwgY2Fycml0byBlbiBlbCBsb2NhbFN0b3JhZ2UuIFxuXHQgKi9cblx0dXBkYXRlTG9jYWxDYXJ0KCkge1xuXHRcdHRoaXMuX3N0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNBUlRfS0VZLCB0aGlzLl9pdGVtcylcblx0fVxuXHQvKipcblx0ICogQWN0dWFsaXphIGVsIGNhcnJpdG8uIEVtaXRlIGV2ZW50byBkZSBhbmFsaXRpY3MuIFxuXHQgKiBBY3R1YWxpemEgdG9kbyBsbyByZWxhY2lvbmFkbyBhbCBjdXDDs24uXG5cdCAqIEBwYXJhbSBjYXJ0IFJlc3B1ZXN0YSBwcm9kdWNpZGEgcG9yIGVsIGVucG9pbnQgY29uIGluZm9ybWFjacOzbiBkZWwgY2Fycml0by5cblx0ICogQHBhcmFtIGVtaXRFdmVudCBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHR1cGRhdGVDYXJ0T2JqKGNhcnQ6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IGJvb2xlYW4ge1xuXHRcdHRoaXMuX2NhcnRTdWJqZWN0Lm5leHQoY2FydCk7XG5cdFx0dGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhjYXJ0Py5iYWxhbmNlQ3VzdG9tZXIsIGNhcnQ/LnRvdGFscz8udG90YWwpO1xuXHRcdGVtaXRFdmVudCAmJiB0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcblx0XHQvL3RoaXMuX3Byb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xuXG5cdFx0Y2FydC5jb3Vwb25Db2RlXG5cdFx0XHQ/IHRoaXMuZm9ybWF0Q291cG9uKGNhcnQpXG5cdFx0XHQ6IHRoaXMuX2NvdXBvblN1YmplY3QubmV4dChudWxsKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvKipcblx0ICogQXBsaWNhciB1biBtZWpvciBmb3JtYXRvIGEgbG9zIGRhdG9zIGRlIGxvcyBjdXBvbmVzIGFwbGljYWRvcy5cblx0ICogQHBhcmFtIGNhcnQgXG5cdCAqL1xuXHRmb3JtYXRDb3Vwb24oY2FydDogYW55KSB7XG5cdFx0bGV0IGN1cnJlbnRfY291cG9uID0gdGhpcy5fY291cG9uU3ViamVjdC52YWx1ZTtcblx0XHRsZXQgY291cG9uOiBJQ291cG9uID0geyBjb2RlOiBjYXJ0LmNvdXBvbkNvZGUgfTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY2FydC5jYXJ0RGlzY291bnRzKVswXTtcblx0XHRcdGNvdXBvbiA9IHtcblx0XHRcdFx0Li4uY291cG9uLFxuXHRcdFx0XHRhbW91bnQ6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0uYW1vdW50LmN1cnJlbnQpIHx8IDAsXG5cdFx0XHRcdG5hbWU6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0ubmFtZSkgfHwgJ25vLW5hbWUnXG5cdFx0XHR9O1xuXHRcdH0gY2F0Y2ggKGUpIHsgfVxuXHRcdChjb3Vwb24gIT0gY3VycmVudF9jb3Vwb24pICYmIHRoaXMuX2NvdXBvblN1YmplY3QubmV4dChjb3Vwb24pO1xuXHRcdC8vY29uc29sZS5sb2coY291cG9uKTtcblx0fVxuXHQvKipcblx0ICogUmV0b3JuYSBlbCBJRCBkZWwgaXRlbSBkZWwgY2Fycml0by5cblx0ICogQHBhcmFtIHZhcmlhbnRfaWQgSWQgZGUgbGEgdmFyaWFudGUgdXRpbGl6YWRhIHBhcmEgYnVzY2FyIGVsIGl0ZW0uXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0ZmluZEl0ZW1CeUlkVmFyaWFudCh2YXJpYW50X2lkOiBhbnkpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpIS5pdGVtX2lkXG5cdH1cblx0LyoqXG5cdCAqIFZhbGlkYSBsYSBjYW50aWRhZCBwYXJhIHNhYmVyIHNpIHNlIHB1ZWRlIGFjdHVhbGl6YXIgbyBuby5cblx0ICogQHBhcmFtIGl0ZW0gaXRlbSBkZWwgY2Fycml0b1xuXHQgKiBAcGFyYW0gcXVhbnRpdHkgY2FudGlkYWQgYSBhZ3JlZ2FyXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0dmFsaWRhdGVRdWFudGl0eShpdGVtOiBhbnksIHF1YW50aXR5OiBhbnkpIHtcblx0XHRjb25zdCBhY3R1YWxRdWFudGl0eSA9IE51bWJlcih0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkpOyAvLyA8LS0gRm9yemFyIGEgbsO6bWVyb1xuXHRcdGNvbnN0IG5ld1F1YW50aXR5ID0gTnVtYmVyKHF1YW50aXR5KTsgLy8gPC0tIEZvcnphciBhIG7Dum1lcm9cblxuXHRcdGlmICgoYWN0dWFsUXVhbnRpdHkgKyBuZXdRdWFudGl0eSkgPiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cdFx0aWYgKChhY3R1YWxRdWFudGl0eSArIG5ld1F1YW50aXR5KSA8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21pbmltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkgfSlcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0XHRpZiAoaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgJiYgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgPiAxKSB7XG5cdFx0XHRpZiAoKGFjdHVhbFF1YW50aXR5ICsgbmV3UXVhbnRpdHkpICUgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgIT09IDApIHtcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ211bHRpcGxlLXF1YW50aXR5LXJlcXVpcmVkJywge1xuXHRcdFx0XHRcdG11bHRpcGxlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSxcblx0XHRcdFx0XHRjdXJyZW50OiBhY3R1YWxRdWFudGl0eSArIG5ld1F1YW50aXR5IC8vIDwtLSBBaG9yYSBzdW1hIGNvcnJlY3RhbWVudGVcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cdC8qKlxuXHQgKiBCdXNjYSB1biBwcm9kdWN0byBhIHRyYXbDqXMgZGUgc3UgSUQgZW4gbG9zIGl0ZW1zIGRlbCBjYXJyaXRvLlxuXHQgKiBAcGFyYW0gcHJvZHVjdF9pZCBcblx0ICogQHJldHVybnNcblx0ICovXG5cdGZpbmRJdGVtKHByb2R1Y3RfaWQ6IGFueSk6IGFueSB7IHJldHVybiB0aGlzLl9pdGVtcy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0X2lkKSB9XG5cdC8qKlxuXHQgKiBFbGltaW5hIHVuIGl0ZW0gZGVsIGNhcnJpdG8gZW4gZWwgYmFja2VuZC5cblx0ICogQHBhcmFtIGl0ZW0gaXRlbSBhIGVsaW1pbmFyXG5cdCAqIEBwYXJhbSB0b2FzdCBpbmRpY2Egc2kgc2UgZGlzcGFyYSB1biB0b2FzdCAgbyBuby4gUG9yIGRlZmVjdG8gZW4gYHRydWVgLlxuXHQgKi9cblx0ZGVsZXRlQ2FydEl0ZW0oaXRlbTogYW55LCB0b2FzdDogYm9vbGVhbiA9IHRydWUpIHtcblx0XHRsZXQgaWRJdGVtU2VhcmNoZWQgPSB0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKVxuXHRcdC8vY29uc29sZS5sb2coaWRJdGVtU2VhcmNoZWQpXG5cdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24uZGVsZXRlKHRoaXMuZGVsZXRlSXRlbUFwaShpZEl0ZW1TZWFyY2hlZCkpKS50aGVuKFxuXHRcdFx0cmVzID0+IHtcblx0XHRcdFx0dGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KTtcblx0XHRcdFx0dGhpcy5fcmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XG5cdFx0XHRcdHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0KVxuXHR9XG5cdC8qKlxuXHQgKiBFbGltaW5hIHVuIGl0ZW0gZW4gY2Fycml0byBkZSBmb3JtYSBsb2NhbC4gXG5cdCAqIEBwYXJhbSBjYXJ0IENhcnJpdG8sIGVzIGRlY2lyLCByZXNwdWVzdGEgZGVsIGJhY2tlbmQuXG5cdCAqIEBwYXJhbSBwcm9kdWN0IHByb2R1Y3RvIGEgZWxpbWluYXJcblx0ICogQHBhcmFtIHRvYXN0IHtib29sZWFufSBwYXJhIGluZGljYXIgc2kgc2UgZGlzcGFyYSB1biB0b2FzdCBvIG5vLiBcblx0ICovXG5cdHJlbW92ZUNhcnRJdGVtKGNhcnQ6IGFueSwgcHJvZHVjdDogYW55LCB0b2FzdDogYm9vbGVhbikge1xuXHRcdHRoaXMudXBkYXRlQ2FydE9iaihjYXJ0LCBmYWxzZSk7XG5cdFx0dGhpcy5faXRlbXMuc3BsaWNlKHRoaXMuX2l0ZW1zLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pdGVtX2lkID09PSBwcm9kdWN0Lml0ZW1faWQpLCAxKTtcblx0XHR0aGlzLl9jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5faXRlbXMpO1xuXHRcdHRvYXN0ICYmIHRoaXMuX3JlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG5cdFx0dG9hc3QgJiYgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZCcpO1xuXHRcdHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XG5cdFx0dGhpcy5fYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3JlbW92ZV9mcm9tX2NhcnQnLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLl9jb25zdHMuY3VycmVuY3kuY29kZSB9KVxuXHR9XG5cdC8qKlxuXHQgKiBBZ3JlZ2EgdW4gY3Vwb24gYWwgY2Fycml0by5cblx0ICogQHBhcmFtIHZhbHVlIENvZGlnbyBkZWwgY3Vww7NuLlxuXHQgKi9cblx0YWRkQ291cG9uKHZhbHVlOiBzdHJpbmcpIHtcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLmNvdXBvbkFwaSgpLCB7IGNvdXBvbjogdmFsdWUgfSkpLnRoZW4oXG5cdFx0XHRyZXMgPT4ge1xuXHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlcylcblx0XHRcdFx0dGhpcy51cGRhdGVDYXJ0T2JqKHJlcylcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0N1cG9uIGFwbGljYWRvJylcblx0XHRcdH0sXG5cdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHQvL2NvbnNvbGUuZXJyb3IoZXJyKSBcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2ludmFsaWQtY291cG9uJylcblx0XHRcdH1cblx0XHQpXG5cdH1cblx0LyoqXG5cdCAqIEVsaW1pbmEgdW4gY3Vww7NuIGRlbCBjYXJyaXRvLiBcblx0ICovXG5cdHJlbW92ZUNvdXBvbigpIHtcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmNvdXBvbkFwaSgpKSkudGhlbihcblx0XHRcdHJlcyA9PiB7XG5cdFx0XHRcdC8vY29uc29sZS5sb2cocmVzKVxuXHRcdFx0XHR0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKVxuXHRcdFx0fVxuXHRcdClcblx0fVxuXG5cdGdldENvdXBvbkNvZGUoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LmNvdXBvbkNvZGUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIHN1YnRvdGFsIGRlbCBjYXJyaXRvLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGdldFN1YlRvdGFsQW1vdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FydCQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8uc3VidG90YWwpKTtcblx0fVxuXHQvKipcblx0ICogUmV0b3JuYSB1biBvYnNlcnZhYmxlIGNvbiBlbCB0b3RhbCBkZWwgbW9udG8gZGUgbGFzIHByb21vY2lvbmVzIGFwbGljYWRhcy5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRnZXRUb3RhbFByb21vdGlvbkFtb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnByb21vdGlvbikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldG9ybmEgdW4gb2JzZXJ2YWJsZSBjb24gZWwgbW9udG8gZGUgbG9zIGltcHVlc3RvcyBhcGxpY2Fkb3MuXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0Z2V0VGF4ZXNBbW91bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5jYXJ0JC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50YXhlcyA+IDAgPyBjYXJ0Py50b3RhbHM/LnRheGVzIDogMCkpO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRvcm5hIHVuIG9ic2VydmFibGUgY29uIGVsIG1vbnRvIHRvdGFsIGRlbCBjYXJyaXRvLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGdldFRvdGFsQW1vdW50KCkge1xuXHRcdHJldHVybiB0aGlzLmNhcnQkLnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XG5cdH1cblx0LyoqXG5cdCAqIFJldG9ybmEgZWwgdG9rZW4gZGVsIGNhcnJpdG8uXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0Z2V0Q2FydFRva2VuKCkge1xuXHRcdHJldHVybiB0aGlzLmNhcnRUb2tlbjtcblx0fVxuXHRjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWU6IGFueSkgPT4gdGhpcy5faGF2ZVRvVXBkYXRlID0gdmFsdWU7XG5cdGNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKSB7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJDbGVhcmluZyBhbmQgcmVzZXRpbmcuLi5cIilcblx0XHR0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XG5cdFx0dGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCkpLnN1YnNjcmliZShcblx0XHRcdHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcblx0XHQpXG5cdHByaXZhdGUgcmVzZXRDYXJ0ID0gKGZuPzogYW55KSA9PiB7XG5cdFx0dGhpcy5faXRlbXMgPSBbXTtcblx0XHR0aGlzLl9jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xuXHRcdHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMobnVsbCk7XG5cdFx0dGhpcy5jYXJ0VG9rZW4gPSBudWxsO1xuXHRcdHRoaXMuX2NhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XG5cdFx0dGhpcy5fY291bnQgPSAwO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0FSVF9LRVksIFwiW11cIik7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DQVJUX1RPS0VOX0tFWSk7XG5cdFx0dGhpcy5fY2FydEluaXRpYWxpemVkID0gZmFsc2U7IC8vIOKaoO+4jyBGSVg6IFJlc2V0IGRlbCBmbGFnIGRlIGluaWNpYWxpemFjacOzblxuXHRcdGZuICYmIGZuKCk7XG5cdH1cblx0Y2xlYXJBbmRSZXNldENhcnQoKSB7XG5cdFx0dGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0QnlDdXN0b21lcik7IC8vIOKaoO+4jyBGSVg6IENyZWFyIG51ZXZvIGNhcnJpdG8gZGVzcHXDqXMgZGUgY29tcGxldGFyIGNvbXByYVxuXHR9XG5cblx0cHVibGljIHVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGJhbGFuY2U6IGFueSwgdG90YWw6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XG5cblx0XHRpZiAoIWJhbGFuY2UpIHtcblx0XHRcdHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QubmV4dChudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB0b3RhbEFtb3VudCA9IHRvdGFsID8/IDA7XG5cblx0XHRjb25zdCBiYWxhbmNlRGF0YSA9IHtcblx0XHRcdGFsbG93QW55UGF5bWVudE1ldGhvZDogYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QsXG5cdFx0XHRhbGxvd0V4Y2VlZEJhbGFuY2U6IGJhbGFuY2UuYWxsb3dFeGNlZWRCYWxhbmNlLFxuXHRcdFx0Y3JlZGl0QW1vdW50OiBiYWxhbmNlLmNyZWRpdEFtb3VudCxcblx0XHRcdHNob3dNYXg6IGJhbGFuY2Uuc2hvd01heCxcblx0XHRcdHNob3dQcmljZTogYmFsYW5jZS5zaG93UHJpY2UsXG5cdFx0XHRyZW1haW5pbmdDcmVkaXRzOlxuXHRcdFx0XHRiYWxhbmNlLmNyZWRpdEFtb3VudCAhPSBudWxsICYmIHRvdGFsQW1vdW50ICE9IG51bGwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gdG90YWxBbW91bnRcblx0XHRcdFx0XHQ/IGJhbGFuY2UuY3JlZGl0QW1vdW50IC0gdG90YWxBbW91bnRcblx0XHRcdFx0XHQ6IDAsXG5cdFx0XHRhcHBseU1heE9yZGVyczogYmFsYW5jZS5hcHBseU1heE9yZGVycyxcblx0XHRcdG1heE9yZGVyczogYmFsYW5jZS5tYXhPcmRlcnNcblx0XHR9O1xuXG5cdFx0dGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KGJhbGFuY2VEYXRhKTtcblx0fVxuXHRhZGRUb0xvdChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkOiBhbnksIGlkPzogbnVtYmVyLCBvcmRlcl9pdGVtX2lkPzogYW55LCBsb3RfcXVhbnRpdHk/OiBhbnksIHVuaXRfcHJpY2U/OiBhbnksIHVuaXRfdG90YWw/OiBhbnksIGFqdXN0ZW1lbnRfdG90YWw/OiBhbnksIHRvdGFsX2xvdD86IG51bWJlciwgbG90X3N0YXR1cz86IHN0cmluZywgZGF0ZV9yZXF1ZXN0Pzogc3RyaW5nLCBub3Rlcz86IHN0cmluZywgc2hpcHBpbmdfYWRkcmVzc19pZD86IG51bWJlciwgc2hpcHBpbmdfYWRkcmVzc19uYW1lPzogc3RyaW5nLCBhY3Rpb24/OiBzdHJpbmcpIHtcblx0XHRpZiAoIXRoaXMuX2F1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRsZXQgYWRkZWQgPSAnJztcblx0XHQhYWRkZWQgJiYgdGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLCBpZDogaWQgfHwgJycsIG9yZGVyX2l0ZW1faWQ6IG9yZGVyX2l0ZW1faWQgfHwgJycsIGxvdF9xdWFudGl0eTogbG90X3F1YW50aXR5IHx8ICcnLCB1bml0X3ByaWNlOiB1bml0X3ByaWNlIHx8ICcnLCB1bml0X3RvdGFsOiB1bml0X3RvdGFsIHx8ICcnLCBhanVzdGVtZW50X3RvdGFsOiBhanVzdGVtZW50X3RvdGFsIHx8ICcnLCB0b3RhbF9sb3Q6IHRvdGFsX2xvdCB8fCAnJywgbG90X3N0YXR1czogbG90X3N0YXR1cyB8fCAnJywgZGF0ZV9yZXF1ZXN0OiBkYXRlX3JlcXVlc3QgfHwgJycsIG5vdGVzOiBub3RlcyB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogc2hpcHBpbmdfYWRkcmVzc19pZCB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiBzaGlwcGluZ19hZGRyZXNzX25hbWUgfHwgJycsIGFjdGlvbjogYWN0aW9uIHx8ICduZXdsb3QnIH0pXG5cdFx0XHQuc3Vic2NyaWJlKHtcblx0XHRcdFx0bmV4dDogKHJlcykgPT4gdGhpcy5hcHBlbmRUb0NhcnQocmVzKSxcblx0XHRcdFx0ZXJyb3I6IChlcnIpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxuXHRcdFx0fSk7XG5cdH1cblxuXG5cdGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XG5cdFx0dGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKFxuXHRcdFx0bWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8uY3JlZGl0QW1vdW50ID8/IG51bGwpXG5cdFx0KTtcblxuXG5cdGdldFJlbWFpbmluZ0NyZWRpdHMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXIgfCB1bmRlZmluZWQ+ID0+XG5cdFx0dGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LnJlbWFpbmluZ0NyZWRpdHMpKTtcblxuXG5cdHB1YmxpYyBoYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCA9ICgpOiBib29sZWFuID0+IHtcblx0XHRjb25zdCBiYWxhbmNlID0gdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcblxuXHRcdGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRvdGFsID0gdGhpcy5fY2FydFN1YmplY3QudmFsdWU/LnRvdGFscz8udG90YWwgPz8gMDtcblxuXHRcdGlmICghYmFsYW5jZS5hbGxvd0V4Y2VlZEJhbGFuY2UgJiYgdG90YWwgPiBiYWxhbmNlLmNyZWRpdEFtb3VudCkge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdHByaXZhdGUgdmFsaWRhdGVQcmljZUFuZENyZWRpdHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5OiBudW1iZXIpOiBib29sZWFuID0+IHtcblx0XHRjb25zdCBiYWxhbmNlID0gdGhpcy5fYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcblxuICAgICAgICBpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cblx0XHRpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCB1bml0UHJpY2UgPSBpdGVtLnRvdGFsIC8gaXRlbS5xdWFudGl0eTtcblx0XHRjb25zdCBhZGRpdGlvbmFsUXVhbnRpdHkgPSBxdWFudGl0eSAtIGl0ZW0ucXVhbnRpdHk7XG5cblx0XHRpZiAoYWRkaXRpb25hbFF1YW50aXR5IDw9IDApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFkZGl0aW9uYWxDb3N0ID0gdW5pdFByaWNlICogYWRkaXRpb25hbFF1YW50aXR5O1xuXG4gICAgICAgIGlmIChhZGRpdGlvbmFsQ29zdCA+IGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cykge1xuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuXHRwcml2YXRlIGhhc0NyZWRpdHNGb3JOZXdJdGVtID0gKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRJZDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG5cdFx0Y29uc3QgYmFsYW5jZSA9IHRoaXMuX2JhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XG5cblx0XHRpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGJhbGFuY2UuYWxsb3dBbnlQYXltZW50TWV0aG9kKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCB2YXJpYW50ID0gcHJvZHVjdD8udmFyaWFudHM/LmZpbmQodiA9PiB2LmNvZGUgPT09IHZhcmlhbnRJZCkgPz8gcHJvZHVjdD8udmFyaWFudHM/LlswXTtcblx0XHRjb25zdCB1bml0UHJpY2UgPSB2YXJpYW50Py5zYWxlcHJpY2UgPz8gdmFyaWFudD8ucHJpY2UgPz8gcHJvZHVjdD8ucHJpY2UgPz8gMDtcblx0XHRjb25zdCB0b3RhbENvc3QgPSB1bml0UHJpY2UgKiBxdWFudGl0eTtcblxuXHRcdGlmICghYmFsYW5jZS5hbGxvd0V4Y2VlZEJhbGFuY2UgJiYgdG90YWxDb3N0ID4gYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbm90LWVub3VnaC1jcmVkaXRzJyk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cblx0YWRkUmVwZWF0T3JkZXJUb0NhcnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2NhcnRJdGVtc1N1YmplY3QudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2NhcnQtbm90LWVtcHR5Jyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLl9hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0Y29uc3QgaXRlbXNUb0FkZCA9IGl0ZW1zLm1hcChpdGVtID0+ICh7XG5cdFx0XHRwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxuXHRcdFx0cXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXG5cdFx0XHR2YXJpYW50Q29kZTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLmNvZGVcblx0XHR9KSk7XG5cblx0XHRpZiAoaXRlbXNUb0FkZC5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCduby1wcm9kdWN0cy10by1hZGQnKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRpdGVtczogaXRlbXNUb0FkZFxuXHRcdH07XG5cblx0XHR0aGlzLl9yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XG5cblx0XHR0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRBbGxJdGVtc0FwaSgpLCBwYXJhbXMpXG5cdFx0XHQudG9Qcm9taXNlKClcblx0XHRcdC50aGVuKHJlcyA9PiB7XG5cblx0XHRcdFx0aWYgKHJlcz8uc3RhdHVzID09PSAnZmFpbHVyZScpIHtcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSByZXMuZXJyb3I/LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpIHx8ICd1bmtub3duX2Vycm9yJztcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGl0ZW1zUmVzcG9uc2UgPSByZXM/Lml0ZW1zX3Jlc3BvbnNlIHx8IFtdO1xuXHRcdFx0XHRjb25zdCBjYXJ0SXRlbXMgPSByZXM/LmNhcnQ/Lml0ZW1zIHx8IFtdO1xuXG5cdFx0XHRcdGNvbnN0IG91dE9mU3RvY2tJdGVtcyA9IGl0ZW1zUmVzcG9uc2UuZmlsdGVyKChpdGVtOiBhbnkpID0+XG5cdFx0XHRcdFx0aXRlbS5zdGF0dXMgPT09ICdmYWlsdXJlJyAmJlxuXHRcdFx0XHRcdGl0ZW0uZXJyb3JzLnNvbWUoKGVycm9yOiBhbnkpID0+IGVycm9yLmNvZGUgPT09ICdvdXRfb2Zfc3RvY2snKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmIChjYXJ0SXRlbXMubGVuZ3RoID09PSAwICYmIG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2FsbC1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob3V0T2ZTdG9ja0l0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnc29tZS1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjYXJ0SXRlbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlQ2FydE9iaihyZXMuY2FydCk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0SXRlbXMpKTtcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcblx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdFx0ZXJyID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZUVycm9yKGVycik7XG5cdFx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZXJyID0+IHtcblx0XHRcdFx0dGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuXHRcdFx0fSk7XG5cdH1cblxufVxuIl19
@@ -80,4 +80,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
80
80
  providedIn: 'root'
81
81
  }]
82
82
  }], ctorParameters: () => [] });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NoYW5uZWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQWMsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFDbkU7OztHQUdHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFDMUI7O09BRUc7SUFDSyxTQUFTLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JFOztPQUVHO0lBQ0ssTUFBTSxHQUF5QixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUNuRTs7T0FFRztJQUNLLFVBQVUsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDakU7O09BRUc7SUFDSyxjQUFjLEdBQUcsSUFBSSxhQUFhLEVBQU8sQ0FBQTtJQUNqRDs7T0FFRztJQUNJLFFBQVEsR0FBb0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNyRTs7T0FFRztJQUNJLGFBQWEsQ0FBTTtJQUMxQjs7T0FFRztJQUNJLFdBQVcsQ0FBTTtJQUV4QixTQUFTO0lBQ1Q7OztPQUdHO0lBQ0ssVUFBVSxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQztJQUVsRyxnQkFBZ0IsQ0FBQztJQUNqQjs7O09BR0c7SUFDSSxVQUFVLEdBQUcsR0FBb0IsRUFBRTtRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFDZCxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNqQyxPQUFPLFFBQVEsQ0FBQTtRQUNoQixDQUFDLENBQUMsQ0FDRixDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3RCLENBQUMsQ0FBQTtJQUNEOzs7T0FHRztJQUNJLGNBQWMsQ0FBQyxVQUFlO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUE7UUFDL0IsZ0lBQWdJO0lBQ2pJLENBQUM7SUFDRDs7O09BR0c7SUFDSSxnQkFBZ0IsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dHQXBFNUMsY0FBYzs0R0FBZCxjQUFjLGNBRmQsTUFBTTs7NEZBRU4sY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSwgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcclxuLyoqXHJcbiAqIFNlcnZpY2lvIHBhcmEgbWFuZWphciBsb3MgY2FuYWxlcyBkZSBsYSBhcGxpY2FjacOzblxyXG4gKiBAY2xhc3MgQ2hhbm5lbFNlcnZpY2VcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoYW5uZWxTZXJ2aWNlIHtcclxuXHQvKipcclxuXHQgKiBDb25zdGFudGVzIGRlIGxhIEFQSVxyXG5cdCAqL1xyXG5cdHByaXZhdGUgYXBpQ29uc3RzOiBBcGlDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xyXG5cdC8qKlxyXG5cdCAqIENvbnN0YW50ZXMgZGVsIGNvcmVcclxuXHQgKi9cclxuXHRwcml2YXRlIGNvbnN0czogQ29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpXHJcblx0LyoqXHJcblx0ICogTWFuZWphIGxhcyBwZXRpY2lvbmVzIGEgbGEgQVBJXHJcblx0ICovXHJcblx0cHJpdmF0ZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSlcclxuXHQvKipcclxuXHQgKiBTdWJqZWN0IHBhcmEgbWFuZWphciBsb3MgY2FtYmlvcyBlbiBsb3MgY2FuYWxlcy5cclxuXHQgKi9cclxuXHRwcml2YXRlIGNoYW5uZWxTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8YW55PigpXHJcblx0LyoqXHJcblx0ICogT2JzZXJ2YWJsZSBkZSBjYW5hbGVzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjaGFubmVsJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5jaGFubmVsU3ViamVjdC5hc09ic2VydmFibGUoKVxyXG5cdC8qKlxyXG5cdCAqIEFsbWFjZW5hIGVsIGNhbmFsIGFjdGl2byBlbiBsYSBhcGxpY2FjacOzbi5cclxuXHQgKi9cclxuXHRwdWJsaWMgYWN0aXZlQ2hhbm5lbDogYW55O1xyXG5cdC8qKlxyXG5cdCAqIEFsbWFjZW5hIGVsIHRpcG8gZGUgY2FuYWwuXHJcblx0ICovXHJcblx0cHVibGljIGNoYW5uZWxUeXBlOiBhbnk7XHJcblxyXG5cdC8vQVBJIFVSTFxyXG5cdC8qKlxyXG5cdCAqIERldnVlbHZlIGxhIHVybCBwYXJhIG9idGVuZXIgbG9zIGRhdG9zIGRlIHVuIGNhbmFsLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgY2hhbm5lbEFwaSgpIHsgcmV0dXJuIGAke3RoaXMuYXBpQ29uc3RzLlNIT1BfQVBJX1VSTH0ke3RoaXMuYXBpQ29uc3RzLkNIQU5ORUx9L2NoYW5uZWxgOyB9XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkgeyB9XHJcblx0LyoqXHJcblx0ICogT2J0aWVuZSBlbCBjYW5hbCBkZSBsYSBBUElcclxuXHQgKiBAcmV0dXJucyBPYnNlcnZhYmxlIGNvbiBlbCBjYW5hbC5cclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0Q2hhbm5lbCA9ICgpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG5cdFx0dGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmNoYW5uZWxBcGkoKSkucGlwZShcclxuXHRcdFx0c2hhcmVSZXBsYXkoMSksXHJcblx0XHRcdG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuc2V0Q2hhbm5lbEluZm8ocmVzcG9uc2UpO1xyXG5cdFx0XHRcdHRoaXMuY2hhbm5lbFN1YmplY3QubmV4dChyZXNwb25zZSk7XHJcblx0XHRcdFx0dGhpcy5jaGFubmVsVHlwZSA9IHJlc3BvbnNlLnR5cGU7XHJcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlXHJcblx0XHRcdH0pLFxyXG5cdFx0KS5zdWJzY3JpYmUoKVxyXG5cdFx0cmV0dXJuIHRoaXMuY2hhbm5lbCQ7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENhbWJpYSBsYSBjb25maWd1cmFjacOzbiBkZWwgY2FuYWwgY29uIHVuIGNhbmFsIG51ZXZvLlxyXG5cdCAqIEBwYXJhbSBjaGFubmVsT2JqIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZXRDaGFubmVsSW5mbyhjaGFubmVsT2JqOiBhbnkpIHtcclxuXHRcdHRoaXMuYXBpQ29uc3RzLnNldENoYW5uZWwoY2hhbm5lbE9iai5jb2RlKVxyXG5cdFx0dGhpcy5jb25zdHMuc2V0Q3VycmVuY3koY2hhbm5lbE9iai5iYXNlQ3VycmVuY3kpXHJcblx0XHR0aGlzLmFjdGl2ZUNoYW5uZWwgPSBjaGFubmVsT2JqXHJcblx0XHQvL3RoaXMuaW5qZWN0b3IuZ2V0KEFkZHJlc3NpbmdTZXJ2aWNlKS5zZXRUeXBlU2VsZWN0QWRkcmVzcyhjaGFubmVsT2JqLmhlYWRxdWFydGVyU2VsZWN0aW9uT25seSB8fCAnTE9BRF9BRERSRVNTX0FORF9TRUxFQ1RJT04nKVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBlbCBjYW5hbCBhY3Rpdm8gZW4gbGEgYXBsaWNhY2nDs24uXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHVibGljIGdldEFjdGl2ZUNoYW5uZWwoKSB7IHJldHVybiB0aGlzLmFjdGl2ZUNoYW5uZWw7IH1cclxufVxyXG4iXX0=
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2NoYW5uZWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQWMsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFDbkU7OztHQUdHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFDMUI7O09BRUc7SUFDSyxTQUFTLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JFOztPQUVHO0lBQ0ssTUFBTSxHQUF5QixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUNuRTs7T0FFRztJQUNLLFVBQVUsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDakU7O09BRUc7SUFDSyxjQUFjLEdBQUcsSUFBSSxhQUFhLEVBQU8sQ0FBQTtJQUNqRDs7T0FFRztJQUNJLFFBQVEsR0FBb0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNyRTs7T0FFRztJQUNJLGFBQWEsQ0FBTTtJQUMxQjs7T0FFRztJQUNJLFdBQVcsQ0FBTTtJQUV4QixTQUFTO0lBQ1Q7OztPQUdHO0lBQ0ssVUFBVSxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQztJQUVsRyxnQkFBZ0IsQ0FBQztJQUNqQjs7O09BR0c7SUFDSSxVQUFVLEdBQUcsR0FBb0IsRUFBRTtRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFDZCxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNqQyxPQUFPLFFBQVEsQ0FBQTtRQUNoQixDQUFDLENBQUMsQ0FDRixDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3RCLENBQUMsQ0FBQTtJQUNEOzs7T0FHRztJQUNJLGNBQWMsQ0FBQyxVQUFlO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUE7UUFDL0IsZ0lBQWdJO0lBQ2pJLENBQUM7SUFDRDs7O09BR0c7SUFDSSxnQkFBZ0IsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dHQXBFNUMsY0FBYzs0R0FBZCxjQUFjLGNBRmQsTUFBTTs7NEZBRU4sY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UsIENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbi8qKlxuICogU2VydmljaW8gcGFyYSBtYW5lamFyIGxvcyBjYW5hbGVzIGRlIGxhIGFwbGljYWNpw7NuXG4gKiBAY2xhc3MgQ2hhbm5lbFNlcnZpY2VcbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2hhbm5lbFNlcnZpY2Uge1xuXHQvKipcblx0ICogQ29uc3RhbnRlcyBkZSBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgYXBpQ29uc3RzOiBBcGlDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xuXHQvKipcblx0ICogQ29uc3RhbnRlcyBkZWwgY29yZVxuXHQgKi9cblx0cHJpdmF0ZSBjb25zdHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKVxuXHQvKipcblx0ICogTWFuZWphIGxhcyBwZXRpY2lvbmVzIGEgbGEgQVBJXG5cdCAqL1xuXHRwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlID0gaW5qZWN0KENvbm5lY3Rpb25TZXJ2aWNlKVxuXHQvKipcblx0ICogU3ViamVjdCBwYXJhIG1hbmVqYXIgbG9zIGNhbWJpb3MgZW4gbG9zIGNhbmFsZXMuXG5cdCAqL1xuXHRwcml2YXRlIGNoYW5uZWxTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8YW55PigpXG5cdC8qKlxuXHQgKiBPYnNlcnZhYmxlIGRlIGNhbmFsZXMuXG5cdCAqL1xuXHRwdWJsaWMgY2hhbm5lbCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuY2hhbm5lbFN1YmplY3QuYXNPYnNlcnZhYmxlKClcblx0LyoqXG5cdCAqIEFsbWFjZW5hIGVsIGNhbmFsIGFjdGl2byBlbiBsYSBhcGxpY2FjacOzbi5cblx0ICovXG5cdHB1YmxpYyBhY3RpdmVDaGFubmVsOiBhbnk7XG5cdC8qKlxuXHQgKiBBbG1hY2VuYSBlbCB0aXBvIGRlIGNhbmFsLlxuXHQgKi9cblx0cHVibGljIGNoYW5uZWxUeXBlOiBhbnk7XG5cblx0Ly9BUEkgVVJMXG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBsYSB1cmwgcGFyYSBvYnRlbmVyIGxvcyBkYXRvcyBkZSB1biBjYW5hbC5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIGNoYW5uZWxBcGkoKSB7IHJldHVybiBgJHt0aGlzLmFwaUNvbnN0cy5TSE9QX0FQSV9VUkx9JHt0aGlzLmFwaUNvbnN0cy5DSEFOTkVMfS9jaGFubmVsYDsgfVxuXG5cdGNvbnN0cnVjdG9yKCkgeyB9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGVsIGNhbmFsIGRlIGxhIEFQSVxuXHQgKiBAcmV0dXJucyBPYnNlcnZhYmxlIGNvbiBlbCBjYW5hbC5cblx0ICovXG5cdHB1YmxpYyBnZXRDaGFubmVsID0gKCk6IE9ic2VydmFibGU8YW55PiA9PiB7XG5cdFx0dGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmNoYW5uZWxBcGkoKSkucGlwZShcblx0XHRcdHNoYXJlUmVwbGF5KDEpLFxuXHRcdFx0bWFwKChyZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0Q2hhbm5lbEluZm8ocmVzcG9uc2UpO1xuXHRcdFx0XHR0aGlzLmNoYW5uZWxTdWJqZWN0Lm5leHQocmVzcG9uc2UpO1xuXHRcdFx0XHR0aGlzLmNoYW5uZWxUeXBlID0gcmVzcG9uc2UudHlwZTtcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlXG5cdFx0XHR9KSxcblx0XHQpLnN1YnNjcmliZSgpXG5cdFx0cmV0dXJuIHRoaXMuY2hhbm5lbCQ7XG5cdH1cblx0LyoqXG5cdCAqIENhbWJpYSBsYSBjb25maWd1cmFjacOzbiBkZWwgY2FuYWwgY29uIHVuIGNhbmFsIG51ZXZvLlxuXHQgKiBAcGFyYW0gY2hhbm5lbE9iaiBcblx0ICovXG5cdHB1YmxpYyBzZXRDaGFubmVsSW5mbyhjaGFubmVsT2JqOiBhbnkpIHtcblx0XHR0aGlzLmFwaUNvbnN0cy5zZXRDaGFubmVsKGNoYW5uZWxPYmouY29kZSlcblx0XHR0aGlzLmNvbnN0cy5zZXRDdXJyZW5jeShjaGFubmVsT2JqLmJhc2VDdXJyZW5jeSlcblx0XHR0aGlzLmFjdGl2ZUNoYW5uZWwgPSBjaGFubmVsT2JqXG5cdFx0Ly90aGlzLmluamVjdG9yLmdldChBZGRyZXNzaW5nU2VydmljZSkuc2V0VHlwZVNlbGVjdEFkZHJlc3MoY2hhbm5lbE9iai5oZWFkcXVhcnRlclNlbGVjdGlvbk9ubHkgfHwgJ0xPQURfQUREUkVTU19BTkRfU0VMRUNUSU9OJylcblx0fVxuXHQvKipcblx0ICogRGV2dWVsdmUgZWwgY2FuYWwgYWN0aXZvIGVuIGxhIGFwbGljYWNpw7NuLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBnZXRBY3RpdmVDaGFubmVsKCkgeyByZXR1cm4gdGhpcy5hY3RpdmVDaGFubmVsOyB9XG59XG4iXX0=
@@ -215,4 +215,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
215
215
  providedIn: 'root'
216
216
  }]
217
217
  }], ctorParameters: () => [] });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQVEsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBSy9DLE1BQU0sT0FBTyxlQUFlO0lBRW5CLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsaUJBQWlCLEdBQXFCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELE9BQU8sR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDM0QsWUFBWSxHQUFn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SSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQTtJQUVELFdBQVcsR0FBRyxDQUFDLFNBQW1CLEVBQUUsSUFBUyxFQUFFLEVBQUU7UUFDaEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEI7OztZQUdJO0lBQ0wsQ0FBQyxDQUFBO0lBRUQsc0RBQXNEO0lBQzlDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFBO3dHQTNOVyxlQUFlOzRHQUFmLGVBQWUsY0FGZixNQUFNOzs0RkFFTixlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGVja291dERhdGEsIElTdGVwLCBTdGVwVHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuL2FuYWx5dGljcyc7XHJcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBTdGVwLCBVc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi9vcmRlci11dGlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hlY2tvdXRTZXJ2aWNlIHtcclxuXHJcblx0cHJpdmF0ZSBfY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlID0gaW5qZWN0KENhcnRTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9jb25zdHM6IEFwaUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XHJcblx0cHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF9vcmRlclV0aWxpdHlTZXJ2aWNlOiBPcmRlclV0aWxpdHlTZXJ2aWNlID0gaW5qZWN0KE9yZGVyVXRpbGl0eVNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX3JvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblx0cHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcclxuXHJcblx0cHJpdmF0ZSBfY2FuQ2hlY2tvdXRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHRwcml2YXRlIF9zdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0ZXBbXT4oW10pXHJcblx0cHJpdmF0ZSBfbGFzdFN0ZXBTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblx0cHJpdmF0ZSBfbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRwcml2YXRlIF9vcmRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcblx0cHJpdmF0ZSBfYXNzb2NpYXRlZERhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGVja291dERhdGFbXSB8IG51bGw+KG51bGwpO1xyXG5cdHByaXZhdGUgX2xvYWRpbmdTdGVwU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuXHRwdWJsaWMgY2FuQ2hlY2tvdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fY2FuQ2hlY2tvdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cdHB1YmxpYyBzdGF0ZSQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX3N0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwdWJsaWMgaXNMYXN0U3RlcCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9sYXN0U3RlcFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHVibGljIGFzc29jaWF0ZWREYXRhJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5fYXNzb2NpYXRlZERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cdHB1YmxpYyBvcmRlciQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX29yZGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwdWJsaWMgbG9hZGluZ1N0ZXAkOk9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9sb2FkaW5nU3RlcFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG5cdHB1YmxpYyB0b3RhbDogYW55O1xyXG5cdHB1YmxpYyBjYXJ0TG9jYWw6IGFueTtcclxuXHRwcml2YXRlIGNoZWNrb3V0RGF0YTogYW55ID0ge307XHJcblx0cHJpdmF0ZSBvcmRlcjogYW55O1xyXG5cclxuXHQvL0FQSSBNZXRob2RzXHJcblx0YmFzZUFwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5fY29uc3RzLkNIQU5ORUwgKyAnL2NoZWNrb3V0LycgKyB0aGlzLl9jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKTtcclxuXHRnZXRIYXNQdXJjaGFzZUNvbmRpdGlvbnMoKSB7IHJldHVybiAnc2hvcC1hcGkvJyArIHRoaXMuX2NvbnN0cy5DSEFOTkVMICsgJy9jYXJ0cy8nICsgdGhpcy5fY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL2hhc19wdXJjaGFzZV9jb25kaXRpb25zJyB9O1xyXG5cdGNvbXBsZXRlQXBpKCkgeyByZXR1cm4gdGhpcy5iYXNlQXBpKCkgKyAnL2NvbXBsZXRlJyB9O1xyXG5cclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRjb21iaW5lTGF0ZXN0KFt0aGlzLl9jYXJ0U2VydmljZS5jYXJ0SXRlbXMkLCB0aGlzLl9jYXJ0U2VydmljZS5sb2FkaW5nJF0pLnN1YnNjcmliZSgoW2l0ZW1zLCBsb2FkaW5nXSkgPT4ge1xyXG5cdFx0XHRpZiAoIWxvYWRpbmcgJiYgaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMuX2NhbkNoZWNrb3V0U3ViamVjdC5uZXh0KHRydWUpO1xyXG5cdFx0XHRcdHRoaXMuX2NhcnRTZXJ2aWNlLmdldFRvdGFsQW1vdW50KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbCA9IHJlcztcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdFx0dGhpcy5fY2FydFNlcnZpY2UuY2FydCQuc3Vic2NyaWJlKGNhcnQgPT4gY2FydCAmJiAodGhpcy5jYXJ0TG9jYWwgPSBjYXJ0KSAmJiB0aGlzLnVwZGF0ZUFzb2NpYXRlZERhdGEoY2FydCkpO1xyXG5cdFx0dGhpcy5vcmRlciQuc3Vic2NyaWJlKG9yZGVyID0+IG9yZGVyICYmIHRoaXMudXBkYXRlQXNvY2lhdGVkRGF0YShvcmRlcikpXHJcblx0fVxyXG5cclxuXHRzZXRTdGVwcyhzdGVwczogSVN0ZXBbXSkge1xyXG5cdFx0bGV0IGZpbmFsX3N0ZXBzOiBTdGVwW10gPSBbXTtcclxuXHRcdHN0ZXBzLmZvckVhY2goKHN0ZXAsIGkpID0+IGZpbmFsX3N0ZXBzLnB1c2gobmV3IFN0ZXAoc3RlcC5uYW1lLCBzdGVwLnByaW9yaXR5IHx8IChpICsgMSksIHN0ZXAubGFiZWwsIHN0ZXAuc3RhdGUpKSk7XHJcblx0XHR0aGlzLl9zdGF0ZVN1YmplY3QubmV4dChmaW5hbF9zdGVwcyk7XHJcblx0XHRpZiAoZmluYWxfc3RlcHMubGVuZ3RoID09IDEpIHtcclxuXHRcdFx0dGhpcy5fbGFzdFN0ZXBTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcblx0XHR9XHJcblx0XHQvLyBjb25zb2xlLmxvZyhmaW5hbF9zdGVwcyk7XHJcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLmdldCh0aGlzLmdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucygpKSkudGhlbihcclxuXHRcdFx0cmVzID0+IHtcclxuXHRcdFx0XHR0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnY2hlY2tvdXRfaW5pdCcsIHsgLi4udGhpcy5jYXJ0TG9jYWwsIGN1cnJlbmN5OiB0aGlzLmNhcnRMb2NhbD8uY3VycmVuY3ksIHZhbHVlOiB0aGlzLmNhcnRMb2NhbD8udG90YWwgfSlcclxuXHRcdFx0fVxyXG5cdFx0KVxyXG5cdH1cclxuXHJcblx0bmV4dCgpIHtcclxuXHRcdHRoaXMuX2xvYWRpbmdTdGVwU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cdFx0Y29uc3Qgc3RlcHMgPSB0aGlzLl9zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKVxyXG5cdFx0Y29uc3QgcmVhZHlTdGVwID0gc3RlcHMuZmluZEluZGV4KHN0ZXAgPT4gc3RlcC5zdGF0ZSA9PT0gJ3JlYWR5Jyk7XHJcblx0XHRpZiAoc3RlcHNbcmVhZHlTdGVwICsgMV0pIHtcclxuXHRcdFx0c3RlcHNbcmVhZHlTdGVwXS5zdGF0ZSA9ICdkb2luZydcclxuXHRcdFx0c3RlcHNbcmVhZHlTdGVwICsgMV0uc3RhdGUgPSAncmVhZHknO1xyXG5cdFx0XHRpZiAoIXN0ZXBzW3JlYWR5U3RlcCArIDJdKSB0aGlzLl9sYXN0U3RlcFN1YmplY3QubmV4dCh0cnVlKTtcclxuXHRcdFx0dGhpcy5fbG9hZGluZ1N0ZXBTdWJqZWN0Lm5leHQoZmFsc2UpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmNvbXBsZXRlKCkudGhlbihcclxuXHRcdFx0XHRyZXMgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJlcy5vaykge1xyXG5cdFx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydjaGVja291dC9vcmRlcl9zdWNjZXNzJ10pXHJcblx0XHRcdFx0XHRcdCBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuXHRcdFx0XHRcdFx0ICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xyXG5cdFx0XHRcdFx0XHQgfVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvcicpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLl9sb2FkaW5nU3RlcFN1YmplY3QubmV4dChmYWxzZSlcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVyciA9PiB7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpXHJcblx0XHRcdFx0XHR0aGlzLl9sb2FkaW5nU3RlcFN1YmplY3QubmV4dChmYWxzZSlcclxuXHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdvcGVyYXRpb24tZXJyb3InKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YmFjaygpIHtcclxuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy5fc3RhdGVTdWJqZWN0LmdldFZhbHVlKClcclxuXHRcdGNvbnN0IHJlYWR5U3RlcCA9IHN0ZXBzLmZpbmRJbmRleChzdGVwID0+IHN0ZXAuc3RhdGUgPT09ICdyZWFkeScpO1xyXG5cdFx0dGhpcy5fbGFzdFN0ZXBTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG5cdFx0aWYgKHN0ZXBzW3JlYWR5U3RlcCAtIDFdKSB7XHJcblx0XHRcdHN0ZXBzW3JlYWR5U3RlcF0uc3RhdGUgPSAncGVuZGluZydcclxuXHRcdFx0c3RlcHNbcmVhZHlTdGVwIC0gMV0uc3RhdGUgPSAncmVhZHknO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c2V0T3JkZXIgPSAob3JkZXI6IGFueSkgPT4geyB0aGlzLm9yZGVyID0gb3JkZXIsIHRoaXMuX29yZGVyU3ViamVjdC5uZXh0KG9yZGVyKSB9O1xyXG5cdC8vZ2V0T3JkZXIgPSAoKSA9PiB0aGlzLm9yZGVyIHx8IHRoaXMub3JkZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuXHRwcml2YXRlIGNvbXBsZXRlT3JkZXIgPSAoKSA9PiBmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLmNvbXBsZXRlQXBpKCksIHsgZW1haWw6IHRoaXMuY2hlY2tvdXREYXRhLmVtYWlsLCBub3RlczogdGhpcy5jaGVja291dERhdGEubm90ZXMgfHwgJycgfSkpO1xyXG5cclxuXHRjb21wbGV0ZSA9IGFzeW5jICgpID0+IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMuX2xvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbXBsZXRlT3JkZXIoKTtcclxuXHRcdFx0XHJcblx0XHRcdGlmIChyZXN1bHQgJiYgcmVzdWx0LmVycm9yKSB7XHJcblx0XHRcdFx0dGhpcy5fY2FydFNlcnZpY2UuY2hhbmdlSGF2ZVRvVXBkYXRlKGZhbHNlKTtcclxuXHRcdFx0XHR0aGlzLl9sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHRcdFx0XHRyZXR1cm4gKHsgb2s6IGZhbHNlLCByZXF1aXJlX2xvZ2luOiB0cnVlLCBtZXNzYWdlOiAnbm90LWNvbXBsZXRlZCcgfSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuc2V0T3JkZXIocmVzdWx0KTtcclxuXHRcdFx0dGhpcy5fYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3B1cmNoYXNlJywgeyAuLi5yZXN1bHQsIGN1cnJlbmN5OiByZXN1bHQuY3VycmVuY3ksIHZhbHVlOiByZXN1bHQudG90YWwgfSk7XHJcblx0XHRcdHRoaXMuX2NhcnRTZXJ2aWNlLmNsZWFyQW5kUmVzZXRDYXJ0KCk7XHJcblx0XHRcdHRoaXMuX2NhbkNoZWNrb3V0U3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHRcdFx0Ly90aGlzLl9vblJlYWR5U3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHRcdFx0dGhpcy5fbG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XHJcblx0XHRcdFxyXG5cdFx0XHQvLyDimqDvuI8gRklYOiBSZXNldCBjaGVja291dCBkYXRhIGFmdGVyIG9yZGVyIGNvbXBsZXRpb25cclxuXHRcdFx0dGhpcy5yZXNldENoZWNrb3V0U3RhdGUoKTtcclxuXHJcblx0XHRcdHJldHVybiAoeyBvazogdHJ1ZSwgcmVxdWlyZV9sb2dpbjogZmFsc2UsIG1lc3NhZ2U6ICcnIH0pO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0dGhpcy5fbG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGNvbXBsZXRlOicsIGVycm9yKTtcclxuXHJcblx0XHRcdHJldHVybiB7IG9rOiBmYWxzZSwgcmVxdWlyZV9sb2dpbjogZmFsc2UsIG1lc3NhZ2U6ICdBbiBlcnJvciBvY2N1cnJlZCcgfTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHQvLyB1cGRhdGVBc29jaWF0ZWREYXRhID0gKGNhcnQ6IGFueSkgPT4ge1xyXG5cdC8vIFx0bGV0IHJlc3VsdCA9IHRoaXMuX29yZGVyVXRpbGl0eVNlcnZpY2UuZ2V0UHJvbW90aW9ucyhjYXJ0KTtcclxuXHQvLyBcdGNvbnN0IHVzZXJQcm9maWxlOiBVc2VyID0gVXNlci5mcm9tSnNvbih0aGlzLl9hdXRoU2VydmljZS5nZXRVc2VyUHJvZmlsZUFzVXNlcigpKTtcclxuXHQvLyBcdGlmIChyZXN1bHQpIHtcclxuXHQvLyBcdFx0aWYgKHVzZXJQcm9maWxlLmlzV2hvbGVzYWxlcigpICYmIGNhcnQudG90YWxzLnRheGVzICE9IDApIHtcclxuXHQvLyBcdFx0XHRsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcclxuXHQvLyBcdFx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0ge1xyXG5cdC8vIFx0XHRcdFx0dHlwZTogJ3RheGVzJyxcclxuXHQvLyBcdFx0XHRcdG5hbWU6ICd0YXhlcycsXHJcblx0Ly8gXHRcdFx0XHRhbW91bnQ6IGNhcnQudG90YWxzLnRheGVzXHJcblx0Ly8gXHRcdFx0fVxyXG5cdC8vIFx0XHRcdHJlc3VsdC5wdXNoKHRvdGFsKTtcclxuXHQvLyBcdFx0fVxyXG5cdC8vIFx0XHRsZXQgc2hpcG1lbnQgPSByZXN1bHQ/LmZpbmQoKHByb21vdGlvbjogYW55KSA9PiBwcm9tb3Rpb24udHlwZSA9PSBcInNoaXBtZW50XCIpO1xyXG5cdC8vIFx0XHRpZiAoIXNoaXBtZW50ICYmIGNhcnQudG90YWxzLnNoaXBwaW5nICE9IDApIHtcclxuXHJcblx0Ly8gXHRcdFx0aWYgKHJlc3VsdD8ubGVuZ3RoICYmICFyZXN1bHQuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnR5cGUgPT09IFwic2hpcG1lbnRcIikpIHtcclxuXHQvLyBcdFx0XHRcdGxldCB0b3RhbCA9IHsgLi4ucmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSB9O1xyXG5cdC8vIFx0XHRcdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IHtcclxuXHQvLyBcdFx0XHRcdFx0dHlwZTogJ3NoaXBtZW50JyxcclxuXHQvLyBcdFx0XHRcdFx0bmFtZTogJ3NoaXBtZW50JyxcclxuXHQvLyBcdFx0XHRcdFx0YW1vdW50OiBjYXJ0LnRvdGFscy5zaGlwcGluZ1xyXG5cdC8vIFx0XHRcdFx0fVxyXG5cdC8vIFx0XHRcdFx0cmVzdWx0LnB1c2godG90YWwpO1xyXG5cdC8vIFx0XHRcdH1cclxuXHQvLyBcdFx0fVxyXG5cdC8vIFx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xyXG5cdC8vIFx0fVxyXG5cdC8vIH1cclxuXHR1cGRhdGVBc29jaWF0ZWREYXRhID0gKGNhcnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9vcmRlclV0aWxpdHlTZXJ2aWNlLmdldFByb21vdGlvbnMoY2FydCk7XHJcblx0XHRpZiAoY2FydC50b3RhbHMudGF4ZXMgIT0gMCAmJiByZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0bGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XHJcblx0XHRcdHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSB7XHJcblx0XHRcdFx0dHlwZTogJ3RheGVzJyxcclxuXHRcdFx0XHRuYW1lOiAndGF4ZXMnLFxyXG5cdFx0XHRcdGFtb3VudDogY2FydC50b3RhbHMudGF4ZXNcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXN1bHQucHVzaCh0b3RhbCk7XHJcblx0XHR9XHJcbiAgICAgICAgbGV0IHNoaXBtZW50ID0gcmVzdWx0Py5maW5kKHByb21vdGlvbiA9PiBwcm9tb3Rpb24udHlwZSA9PSBcInNoaXBtZW50XCIpO1xyXG4gICAgICAgIGlmICghc2hpcG1lbnQgJiYgY2FydC50b3RhbHMuc2hpcHBpbmcgIT0gMCkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdD8ubGVuZ3RoICYmICFyZXN1bHQuZmluZChpdGVtID0+IGl0ZW0udHlwZSA9PT0gXCJzaGlwbWVudFwiKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzaGlwbWVudCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NoaXBtZW50JyxcclxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IGNhcnQudG90YWxzLnNoaXBwaW5nXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0b3RhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQgPz8gbnVsbCk7XHJcbiAgICB9XHJcblxyXG5cdGdldFN0ZXBEYXRhID0gKHN0ZXBfbmFtZTogU3RlcFR5cGUpID0+IHtcclxuXHRcdGxldCBzdGVwX3Jlc3VsdCA9IHRoaXMuX3N0YXRlU3ViamVjdC5nZXRWYWx1ZSgpLmZpbmQoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcclxuXHRcdHJldHVybiAoc3RlcF9yZXN1bHQgJiYgc3RlcF9yZXN1bHQuZGF0YSk7XHJcblx0fVxyXG5cclxuXHRzZXRTdGVwRGF0YSA9IChzdGVwX25hbWU6IFN0ZXBUeXBlLCBkYXRhOiBhbnkpID0+IHtcclxuXHRcdGxldCBzdGVwID0gdGhpcy5fc3RhdGVTdWJqZWN0LmdldFZhbHVlKCkuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PSBzdGVwX25hbWUpO1xyXG5cdFx0c3RlcD8ucmVhZHkoZGF0YSk7XHJcblx0XHQvKiBpZiAoZGF0YSkge1xyXG5cdFx0XHR0aGlzLl9vcmRlclN1YmplY3QubmV4dChkYXRhKTtcclxuXHRcdFx0dGhpcy50b3RhbCA9IGRhdGEudG90YWxzLnRvdGFsO1xyXG5cdFx0fSAqL1xyXG5cdH1cclxuXHJcblx0Ly8g4pqg77iPIEZJWDogUmVzZXQgY2hlY2tvdXQgc3RhdGUgYWZ0ZXIgb3JkZXIgY29tcGxldGlvblxyXG5cdHByaXZhdGUgcmVzZXRDaGVja291dFN0YXRlID0gKCkgPT4ge1xyXG5cdFx0dGhpcy5jaGVja291dERhdGEgPSB7fTtcclxuXHRcdHRoaXMub3JkZXIgPSBudWxsO1xyXG5cdFx0dGhpcy5fc3RhdGVTdWJqZWN0Lm5leHQoW10pO1xyXG5cdFx0dGhpcy5fYXNzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQobnVsbCk7XHJcblx0XHR0aGlzLl9sYXN0U3RlcFN1YmplY3QubmV4dChmYWxzZSk7XHJcblx0fVxyXG59XHJcbiJdfQ==
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQVEsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBSy9DLE1BQU0sT0FBTyxlQUFlO0lBRW5CLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsaUJBQWlCLEdBQXFCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELE9BQU8sR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDM0QsWUFBWSxHQUFn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SSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQTtJQUVELFdBQVcsR0FBRyxDQUFDLFNBQW1CLEVBQUUsSUFBUyxFQUFFLEVBQUU7UUFDaEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEI7OztZQUdJO0lBQ0wsQ0FBQyxDQUFBO0lBRUQsc0RBQXNEO0lBQzlDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFBO3dHQTNOVyxlQUFlOzRHQUFmLGVBQWUsY0FGZixNQUFNOzs0RkFFTixlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDaGVja291dERhdGEsIElTdGVwLCBTdGVwVHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYW5hbHl0aWNzJztcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3RlcCwgVXNlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi9vcmRlci11dGlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4vdG9hc3Quc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0U2VydmljZSB7XG5cblx0cHJpdmF0ZSBfY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlID0gaW5qZWN0KENhcnRTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xuXHRwcml2YXRlIF9hbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpO1xuXHRwcml2YXRlIF9jb25zdHM6IEFwaUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XG5cdHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG5cdHByaXZhdGUgX29yZGVyVXRpbGl0eVNlcnZpY2U6IE9yZGVyVXRpbGl0eVNlcnZpY2UgPSBpbmplY3QoT3JkZXJVdGlsaXR5U2VydmljZSk7XG5cdHByaXZhdGUgX3JvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cdHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG5cblx0cHJpdmF0ZSBfY2FuQ2hlY2tvdXRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcblx0cHJpdmF0ZSBfc3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdGVwW10+KFtdKVxuXHRwcml2YXRlIF9sYXN0U3RlcFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblx0cHJpdmF0ZSBfbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblx0cHJpdmF0ZSBfb3JkZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXHRwcml2YXRlIF9hc3NvY2lhdGVkRGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoZWNrb3V0RGF0YVtdIHwgbnVsbD4obnVsbCk7XG5cdHByaXZhdGUgX2xvYWRpbmdTdGVwU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG5cdHB1YmxpYyBjYW5DaGVja291dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9jYW5DaGVja291dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdHB1YmxpYyBzdGF0ZSQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX3N0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHVibGljIGlzTGFzdFN0ZXAkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fbGFzdFN0ZXBTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgYXNzb2NpYXRlZERhdGEkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdHB1YmxpYyBvcmRlciQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX29yZGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHVibGljIGxvYWRpbmdTdGVwJDpPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fbG9hZGluZ1N0ZXBTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG5cdHB1YmxpYyB0b3RhbDogYW55O1xuXHRwdWJsaWMgY2FydExvY2FsOiBhbnk7XG5cdHByaXZhdGUgY2hlY2tvdXREYXRhOiBhbnkgPSB7fTtcblx0cHJpdmF0ZSBvcmRlcjogYW55O1xuXG5cdC8vQVBJIE1ldGhvZHNcblx0YmFzZUFwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5fY29uc3RzLkNIQU5ORUwgKyAnL2NoZWNrb3V0LycgKyB0aGlzLl9jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKTtcblx0Z2V0SGFzUHVyY2hhc2VDb25kaXRpb25zKCkgeyByZXR1cm4gJ3Nob3AtYXBpLycgKyB0aGlzLl9jb25zdHMuQ0hBTk5FTCArICcvY2FydHMvJyArIHRoaXMuX2NhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpICsgJy9oYXNfcHVyY2hhc2VfY29uZGl0aW9ucycgfTtcblx0Y29tcGxldGVBcGkoKSB7IHJldHVybiB0aGlzLmJhc2VBcGkoKSArICcvY29tcGxldGUnIH07XG5cblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb21iaW5lTGF0ZXN0KFt0aGlzLl9jYXJ0U2VydmljZS5jYXJ0SXRlbXMkLCB0aGlzLl9jYXJ0U2VydmljZS5sb2FkaW5nJF0pLnN1YnNjcmliZSgoW2l0ZW1zLCBsb2FkaW5nXSkgPT4ge1xuXHRcdFx0aWYgKCFsb2FkaW5nICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dGhpcy5fY2FuQ2hlY2tvdXRTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cdFx0XHRcdHRoaXMuX2NhcnRTZXJ2aWNlLmdldFRvdGFsQW1vdW50KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMudG90YWwgPSByZXM7XG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fSlcblx0XHR0aGlzLl9jYXJ0U2VydmljZS5jYXJ0JC5zdWJzY3JpYmUoY2FydCA9PiBjYXJ0ICYmICh0aGlzLmNhcnRMb2NhbCA9IGNhcnQpICYmIHRoaXMudXBkYXRlQXNvY2lhdGVkRGF0YShjYXJ0KSk7XG5cdFx0dGhpcy5vcmRlciQuc3Vic2NyaWJlKG9yZGVyID0+IG9yZGVyICYmIHRoaXMudXBkYXRlQXNvY2lhdGVkRGF0YShvcmRlcikpXG5cdH1cblxuXHRzZXRTdGVwcyhzdGVwczogSVN0ZXBbXSkge1xuXHRcdGxldCBmaW5hbF9zdGVwczogU3RlcFtdID0gW107XG5cdFx0c3RlcHMuZm9yRWFjaCgoc3RlcCwgaSkgPT4gZmluYWxfc3RlcHMucHVzaChuZXcgU3RlcChzdGVwLm5hbWUsIHN0ZXAucHJpb3JpdHkgfHwgKGkgKyAxKSwgc3RlcC5sYWJlbCwgc3RlcC5zdGF0ZSkpKTtcblx0XHR0aGlzLl9zdGF0ZVN1YmplY3QubmV4dChmaW5hbF9zdGVwcyk7XG5cdFx0aWYgKGZpbmFsX3N0ZXBzLmxlbmd0aCA9PSAxKSB7XG5cdFx0XHR0aGlzLl9sYXN0U3RlcFN1YmplY3QubmV4dCh0cnVlKTtcblx0XHR9XG5cdFx0Ly8gY29uc29sZS5sb2coZmluYWxfc3RlcHMpO1xuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24uZ2V0KHRoaXMuZ2V0SGFzUHVyY2hhc2VDb25kaXRpb25zKCkpKS50aGVuKFxuXHRcdFx0cmVzID0+IHtcblx0XHRcdFx0dGhpcy5fYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ2NoZWNrb3V0X2luaXQnLCB7IC4uLnRoaXMuY2FydExvY2FsLCBjdXJyZW5jeTogdGhpcy5jYXJ0TG9jYWw/LmN1cnJlbmN5LCB2YWx1ZTogdGhpcy5jYXJ0TG9jYWw/LnRvdGFsIH0pXG5cdFx0XHR9XG5cdFx0KVxuXHR9XG5cblx0bmV4dCgpIHtcblx0XHR0aGlzLl9sb2FkaW5nU3RlcFN1YmplY3QubmV4dCh0cnVlKTtcblx0XHRjb25zdCBzdGVwcyA9IHRoaXMuX3N0YXRlU3ViamVjdC5nZXRWYWx1ZSgpXG5cdFx0Y29uc3QgcmVhZHlTdGVwID0gc3RlcHMuZmluZEluZGV4KHN0ZXAgPT4gc3RlcC5zdGF0ZSA9PT0gJ3JlYWR5Jyk7XG5cdFx0aWYgKHN0ZXBzW3JlYWR5U3RlcCArIDFdKSB7XG5cdFx0XHRzdGVwc1tyZWFkeVN0ZXBdLnN0YXRlID0gJ2RvaW5nJ1xuXHRcdFx0c3RlcHNbcmVhZHlTdGVwICsgMV0uc3RhdGUgPSAncmVhZHknO1xuXHRcdFx0aWYgKCFzdGVwc1tyZWFkeVN0ZXAgKyAyXSkgdGhpcy5fbGFzdFN0ZXBTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cdFx0XHR0aGlzLl9sb2FkaW5nU3RlcFN1YmplY3QubmV4dChmYWxzZSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb21wbGV0ZSgpLnRoZW4oXG5cdFx0XHRcdHJlcyA9PiB7XG5cdFx0XHRcdFx0aWYgKHJlcy5vaykge1xuXHRcdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnY2hlY2tvdXQvb3JkZXJfc3VjY2VzcyddKVxuXHRcdFx0XHRcdFx0IGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRcdFx0ICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuXHRcdFx0XHRcdFx0IH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvcicpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuX2xvYWRpbmdTdGVwU3ViamVjdC5uZXh0KGZhbHNlKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycilcblx0XHRcdFx0XHR0aGlzLl9sb2FkaW5nU3RlcFN1YmplY3QubmV4dChmYWxzZSlcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnb3BlcmF0aW9uLWVycm9yJylcblx0XHRcdFx0fVxuXHRcdFx0KVxuXHRcdH1cblx0fVxuXG5cdGJhY2soKSB7XG5cdFx0Y29uc3Qgc3RlcHMgPSB0aGlzLl9zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKVxuXHRcdGNvbnN0IHJlYWR5U3RlcCA9IHN0ZXBzLmZpbmRJbmRleChzdGVwID0+IHN0ZXAuc3RhdGUgPT09ICdyZWFkeScpO1xuXHRcdHRoaXMuX2xhc3RTdGVwU3ViamVjdC5uZXh0KGZhbHNlKTtcblx0XHRpZiAoc3RlcHNbcmVhZHlTdGVwIC0gMV0pIHtcblx0XHRcdHN0ZXBzW3JlYWR5U3RlcF0uc3RhdGUgPSAncGVuZGluZydcblx0XHRcdHN0ZXBzW3JlYWR5U3RlcCAtIDFdLnN0YXRlID0gJ3JlYWR5Jztcblx0XHR9XG5cdH1cblxuXHRzZXRPcmRlciA9IChvcmRlcjogYW55KSA9PiB7IHRoaXMub3JkZXIgPSBvcmRlciwgdGhpcy5fb3JkZXJTdWJqZWN0Lm5leHQob3JkZXIpIH07XG5cdC8vZ2V0T3JkZXIgPSAoKSA9PiB0aGlzLm9yZGVyIHx8IHRoaXMub3JkZXJTdWJqZWN0LnZhbHVlO1xuXG5cdHByaXZhdGUgY29tcGxldGVPcmRlciA9ICgpID0+IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24ucHV0KHRoaXMuY29tcGxldGVBcGkoKSwgeyBlbWFpbDogdGhpcy5jaGVja291dERhdGEuZW1haWwsIG5vdGVzOiB0aGlzLmNoZWNrb3V0RGF0YS5ub3RlcyB8fCAnJyB9KSk7XG5cblx0Y29tcGxldGUgPSBhc3luYyAoKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuX2xvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb21wbGV0ZU9yZGVyKCk7XG5cdFx0XHRcblx0XHRcdGlmIChyZXN1bHQgJiYgcmVzdWx0LmVycm9yKSB7XG5cdFx0XHRcdHRoaXMuX2NhcnRTZXJ2aWNlLmNoYW5nZUhhdmVUb1VwZGF0ZShmYWxzZSk7XG5cdFx0XHRcdHRoaXMuX2xvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXHRcdFx0XHRyZXR1cm4gKHsgb2s6IGZhbHNlLCByZXF1aXJlX2xvZ2luOiB0cnVlLCBtZXNzYWdlOiAnbm90LWNvbXBsZXRlZCcgfSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2V0T3JkZXIocmVzdWx0KTtcblx0XHRcdHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdwdXJjaGFzZScsIHsgLi4ucmVzdWx0LCBjdXJyZW5jeTogcmVzdWx0LmN1cnJlbmN5LCB2YWx1ZTogcmVzdWx0LnRvdGFsIH0pO1xuXHRcdFx0dGhpcy5fY2FydFNlcnZpY2UuY2xlYXJBbmRSZXNldENhcnQoKTtcblx0XHRcdHRoaXMuX2NhbkNoZWNrb3V0U3ViamVjdC5uZXh0KGZhbHNlKTtcblx0XHRcdC8vdGhpcy5fb25SZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XG5cdFx0XHR0aGlzLl9sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblx0XHRcdFxuXHRcdFx0Ly8g4pqg77iPIEZJWDogUmVzZXQgY2hlY2tvdXQgZGF0YSBhZnRlciBvcmRlciBjb21wbGV0aW9uXG5cdFx0XHR0aGlzLnJlc2V0Q2hlY2tvdXRTdGF0ZSgpO1xuXG5cdFx0XHRyZXR1cm4gKHsgb2s6IHRydWUsIHJlcXVpcmVfbG9naW46IGZhbHNlLCBtZXNzYWdlOiAnJyB9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhpcy5fbG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvciBpbiBjb21wbGV0ZTonLCBlcnJvcik7XG5cblx0XHRcdHJldHVybiB7IG9rOiBmYWxzZSwgcmVxdWlyZV9sb2dpbjogZmFsc2UsIG1lc3NhZ2U6ICdBbiBlcnJvciBvY2N1cnJlZCcgfTtcblx0XHR9XG5cblx0fVxuXG5cdC8vIHVwZGF0ZUFzb2NpYXRlZERhdGEgPSAoY2FydDogYW55KSA9PiB7XG5cdC8vIFx0bGV0IHJlc3VsdCA9IHRoaXMuX29yZGVyVXRpbGl0eVNlcnZpY2UuZ2V0UHJvbW90aW9ucyhjYXJ0KTtcblx0Ly8gXHRjb25zdCB1c2VyUHJvZmlsZTogVXNlciA9IFVzZXIuZnJvbUpzb24odGhpcy5fYXV0aFNlcnZpY2UuZ2V0VXNlclByb2ZpbGVBc1VzZXIoKSk7XG5cdC8vIFx0aWYgKHJlc3VsdCkge1xuXHQvLyBcdFx0aWYgKHVzZXJQcm9maWxlLmlzV2hvbGVzYWxlcigpICYmIGNhcnQudG90YWxzLnRheGVzICE9IDApIHtcblx0Ly8gXHRcdFx0bGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XG5cdC8vIFx0XHRcdHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSB7XG5cdC8vIFx0XHRcdFx0dHlwZTogJ3RheGVzJyxcblx0Ly8gXHRcdFx0XHRuYW1lOiAndGF4ZXMnLFxuXHQvLyBcdFx0XHRcdGFtb3VudDogY2FydC50b3RhbHMudGF4ZXNcblx0Ly8gXHRcdFx0fVxuXHQvLyBcdFx0XHRyZXN1bHQucHVzaCh0b3RhbCk7XG5cdC8vIFx0XHR9XG5cdC8vIFx0XHRsZXQgc2hpcG1lbnQgPSByZXN1bHQ/LmZpbmQoKHByb21vdGlvbjogYW55KSA9PiBwcm9tb3Rpb24udHlwZSA9PSBcInNoaXBtZW50XCIpO1xuXHQvLyBcdFx0aWYgKCFzaGlwbWVudCAmJiBjYXJ0LnRvdGFscy5zaGlwcGluZyAhPSAwKSB7XG5cblx0Ly8gXHRcdFx0aWYgKHJlc3VsdD8ubGVuZ3RoICYmICFyZXN1bHQuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnR5cGUgPT09IFwic2hpcG1lbnRcIikpIHtcblx0Ly8gXHRcdFx0XHRsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcblx0Ly8gXHRcdFx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0ge1xuXHQvLyBcdFx0XHRcdFx0dHlwZTogJ3NoaXBtZW50Jyxcblx0Ly8gXHRcdFx0XHRcdG5hbWU6ICdzaGlwbWVudCcsXG5cdC8vIFx0XHRcdFx0XHRhbW91bnQ6IGNhcnQudG90YWxzLnNoaXBwaW5nXG5cdC8vIFx0XHRcdFx0fVxuXHQvLyBcdFx0XHRcdHJlc3VsdC5wdXNoKHRvdGFsKTtcblx0Ly8gXHRcdFx0fVxuXHQvLyBcdFx0fVxuXHQvLyBcdFx0dGhpcy5fYXNzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQocmVzdWx0KTtcblx0Ly8gXHR9XG5cdC8vIH1cblx0dXBkYXRlQXNvY2lhdGVkRGF0YSA9IChjYXJ0OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX29yZGVyVXRpbGl0eVNlcnZpY2UuZ2V0UHJvbW90aW9ucyhjYXJ0KTtcblx0XHRpZiAoY2FydC50b3RhbHMudGF4ZXMgIT0gMCAmJiByZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGxldCB0b3RhbCA9IHsgLi4ucmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSB9O1xuXHRcdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IHtcblx0XHRcdFx0dHlwZTogJ3RheGVzJyxcblx0XHRcdFx0bmFtZTogJ3RheGVzJyxcblx0XHRcdFx0YW1vdW50OiBjYXJ0LnRvdGFscy50YXhlc1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0LnB1c2godG90YWwpO1xuXHRcdH1cbiAgICAgICAgbGV0IHNoaXBtZW50ID0gcmVzdWx0Py5maW5kKHByb21vdGlvbiA9PiBwcm9tb3Rpb24udHlwZSA9PSBcInNoaXBtZW50XCIpO1xuICAgICAgICBpZiAoIXNoaXBtZW50ICYmIGNhcnQudG90YWxzLnNoaXBwaW5nICE9IDApIHtcblxuICAgICAgICAgICAgaWYgKHJlc3VsdD8ubGVuZ3RoICYmICFyZXN1bHQuZmluZChpdGVtID0+IGl0ZW0udHlwZSA9PT0gXCJzaGlwbWVudFwiKSkge1xuICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IHsgLi4ucmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSB9O1xuICAgICAgICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzaGlwbWVudCcsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzaGlwbWVudCcsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogY2FydC50b3RhbHMuc2hpcHBpbmdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godG90YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdFx0dGhpcy5fYXNzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQocmVzdWx0ID8/IG51bGwpO1xuICAgIH1cblxuXHRnZXRTdGVwRGF0YSA9IChzdGVwX25hbWU6IFN0ZXBUeXBlKSA9PiB7XG5cdFx0bGV0IHN0ZXBfcmVzdWx0ID0gdGhpcy5fc3RhdGVTdWJqZWN0LmdldFZhbHVlKCkuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PSBzdGVwX25hbWUpO1xuXHRcdHJldHVybiAoc3RlcF9yZXN1bHQgJiYgc3RlcF9yZXN1bHQuZGF0YSk7XG5cdH1cblxuXHRzZXRTdGVwRGF0YSA9IChzdGVwX25hbWU6IFN0ZXBUeXBlLCBkYXRhOiBhbnkpID0+IHtcblx0XHRsZXQgc3RlcCA9IHRoaXMuX3N0YXRlU3ViamVjdC5nZXRWYWx1ZSgpLmZpbmQoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcblx0XHRzdGVwPy5yZWFkeShkYXRhKTtcblx0XHQvKiBpZiAoZGF0YSkge1xuXHRcdFx0dGhpcy5fb3JkZXJTdWJqZWN0Lm5leHQoZGF0YSk7XG5cdFx0XHR0aGlzLnRvdGFsID0gZGF0YS50b3RhbHMudG90YWw7XG5cdFx0fSAqL1xuXHR9XG5cblx0Ly8g4pqg77iPIEZJWDogUmVzZXQgY2hlY2tvdXQgc3RhdGUgYWZ0ZXIgb3JkZXIgY29tcGxldGlvblxuXHRwcml2YXRlIHJlc2V0Q2hlY2tvdXRTdGF0ZSA9ICgpID0+IHtcblx0XHR0aGlzLmNoZWNrb3V0RGF0YSA9IHt9O1xuXHRcdHRoaXMub3JkZXIgPSBudWxsO1xuXHRcdHRoaXMuX3N0YXRlU3ViamVjdC5uZXh0KFtdKTtcblx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QubmV4dChudWxsKTtcblx0XHR0aGlzLl9sYXN0U3RlcFN1YmplY3QubmV4dChmYWxzZSk7XG5cdH1cbn1cbiJdfQ==