ng-miam 9.2.0 → 9.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/ng-miam.umd.js +927 -634
- package/bundles/ng-miam.umd.js.map +1 -1
- package/bundles/ng-miam.umd.min.js +1 -1
- package/bundles/ng-miam.umd.min.js.map +1 -1
- package/esm2015/lib/_components/accordion/accordion.component.js +2 -2
- package/esm2015/lib/_components/addon-link/addon-link.component.js +3 -3
- package/esm2015/lib/_components/counter-input/counter-input.component.js +14 -12
- package/esm2015/lib/_components/guests-dropdown/guests-dropdown.component.js +8 -5
- package/esm2015/lib/_components/icon/icon.component.js +2 -2
- package/esm2015/lib/_components/like-button/like-button.component.js +6 -5
- package/esm2015/lib/_components/modal/modal.component.js +39 -36
- package/esm2015/lib/_components/no-pos-selected/no-pos-selected.component.js +2 -2
- package/esm2015/lib/_components/product-card/out-of-stock-overlay/out-of-stock-overlay.component.js +15 -6
- package/esm2015/lib/_components/product-card/product-card-skeleton/product-card-skeleton.component.js +1 -1
- package/esm2015/lib/_components/product-card/product-card.component.js +25 -7
- package/esm2015/lib/_components/products-picker/products-picker.component.js +2 -2
- package/esm2015/lib/_components/recipe-promotion-badge/recipe-promotion-badge.component.js +2 -2
- package/esm2015/lib/_components/sponsor-blocks/sponsor-image-and-text-block/sponsor-image-and-text-block.component.js +4 -4
- package/esm2015/lib/_components/sponsor-blocks/sponsor-logo-block/sponsor-logo-block.component.js +4 -4
- package/esm2015/lib/_components/sponsor-blocks/sponsor-picture-block/sponsor-picture-block.component.js +3 -3
- package/esm2015/lib/_components/sponsor-blocks/sponsor-small-picture-block/sponsor-small-picture-block.component.js +3 -3
- package/esm2015/lib/_components/sponsor-blocks/sponsor-text-and-image-block/sponsor-text-and-image-block.component.js +4 -4
- package/esm2015/lib/_models/basket-actions/basket-action.js +2 -2
- package/esm2015/lib/_services/basket-recipe-cleanup.service.js +62 -0
- package/esm2015/lib/_services/basket-transfer.service.js +3 -2
- package/esm2015/lib/_services/baskets-synchronizing/baskets-synchronizer.service.js +9 -3
- package/esm2015/lib/_services/context.service.js +17 -13
- package/esm2015/lib/_services/interceptor.service.js +10 -3
- package/esm2015/lib/_services/recipe-details.service.js +22 -7
- package/esm2015/lib/_services/recipes.service.js +5 -5
- package/esm2015/lib/_services/store-locator.service.js +10 -3
- package/esm2015/lib/_services/store-out-of-stock.service.js +57 -0
- package/esm2015/lib/_services/user.service.js +3 -3
- package/esm2015/lib/_types/builded/mealz-interface.js +1 -1
- package/esm2015/lib/_web-components/basket-preview/basket-preview-block/basket-preview-block.component.js +3 -2
- package/esm2015/lib/_web-components/basket-preview/basket-preview-line/basket-preview-line.component.js +130 -122
- package/esm2015/lib/_web-components/basket-preview/basket-preview-product/basket-preview-product.component.js +44 -34
- package/esm2015/lib/_web-components/basket-preview/replace-item/replace-item.component.js +14 -7
- package/esm2015/lib/_web-components/list-scan/files-inputs/files-inputs.component.js +2 -2
- package/esm2015/lib/_web-components/meals-planner/meals-planner-form/meals-planner-form.component.js +13 -13
- package/esm2015/lib/_web-components/no-supplier-onboarding/no-supplier-onboarding.component.js +8 -12
- package/esm2015/lib/_web-components/preferences/preferences-search/preferences-search.component.js +2 -2
- package/esm2015/lib/_web-components/preferences/preferences.component.js +28 -28
- package/esm2015/lib/_web-components/recipe-cards/recipe-card/recipe-card.component.js +118 -97
- package/esm2015/lib/_web-components/recipe-cards/recipe-card-cta/recipe-card-cta.component.js +21 -14
- package/esm2015/lib/_web-components/recipe-catalog/catalog-article-card/catalog-article-card.component.js +9 -8
- package/esm2015/lib/_web-components/recipe-catalog/catalog-category/catalog-category.component.js +10 -8
- package/esm2015/lib/_web-components/recipe-catalog/catalog-header/catalog-header.component.js +3 -3
- package/esm2015/lib/_web-components/recipe-catalog/catalog-toolbar/catalog-toolbar.component.js +14 -10
- package/esm2015/lib/_web-components/recipe-catalog/recipe-catalog.component.js +42 -37
- package/esm2015/lib/_web-components/recipe-details/last-order-modal/last-order-modal.component.js +2 -2
- package/esm2015/lib/_web-components/recipe-details/recipe-addon/recipe-addon.component.js +4 -3
- package/esm2015/lib/_web-components/recipe-details/recipe-details-infos/recipe-details-infos.component.js +16 -13
- package/esm2015/lib/_web-components/recipe-details/recipe-details-ingredients/recipe-details-ingredients.component.js +4 -3
- package/esm2015/lib/_web-components/recipe-details/recipe-details.component.js +98 -103
- package/esm2015/lib/_web-components/recipe-details/store-locator-link/store-locator-link.component.js +8 -7
- package/esm2015/lib/_web-components/recipe-modal/recipe-modal.component.js +7 -2
- package/esm2015/lib/environments/environment.js +2 -2
- package/esm2015/lib/environments/environment.prod.js +2 -2
- package/esm2015/lib/environments/version.js +2 -2
- package/esm2015/lib/ng-miam.module.js +4 -1
- package/fesm2015/ng-miam.js +882 -627
- package/fesm2015/ng-miam.js.map +1 -1
- package/lib/_components/components.module.d.ts +2 -1
- package/lib/_components/components.module.d.ts.map +1 -1
- package/lib/_components/product-card/out-of-stock-overlay/out-of-stock-overlay.component.d.ts +7 -3
- package/lib/_components/product-card/out-of-stock-overlay/out-of-stock-overlay.component.d.ts.map +1 -1
- package/lib/_components/product-card/product-card.component.d.ts +2 -0
- package/lib/_components/product-card/product-card.component.d.ts.map +1 -1
- package/lib/_models/basket-actions/basket-action.d.ts.map +1 -1
- package/lib/_services/basket-recipe-cleanup.service.d.ts +21 -0
- package/lib/_services/basket-recipe-cleanup.service.d.ts.map +1 -0
- package/lib/_services/basket-transfer.service.d.ts.map +1 -1
- package/lib/_services/baskets-synchronizing/baskets-synchronizer.service.d.ts +1 -1
- package/lib/_services/baskets-synchronizing/baskets-synchronizer.service.d.ts.map +1 -1
- package/lib/_services/context.service.d.ts +3 -1
- package/lib/_services/context.service.d.ts.map +1 -1
- package/lib/_services/interceptor.service.d.ts +1 -0
- package/lib/_services/interceptor.service.d.ts.map +1 -1
- package/lib/_services/recipe-details.service.d.ts +8 -2
- package/lib/_services/recipe-details.service.d.ts.map +1 -1
- package/lib/_services/recipes.service.d.ts +2 -6
- package/lib/_services/recipes.service.d.ts.map +1 -1
- package/lib/_services/store-locator.service.d.ts +1 -0
- package/lib/_services/store-locator.service.d.ts.map +1 -1
- package/lib/_services/store-out-of-stock.service.d.ts +13 -0
- package/lib/_services/store-out-of-stock.service.d.ts.map +1 -0
- package/lib/_services/user.service.d.ts +2 -2
- package/lib/_services/user.service.d.ts.map +1 -1
- package/lib/_types/builded/mealz-interface.d.ts +4 -0
- package/lib/_types/builded/mealz-interface.d.ts.map +1 -1
- package/lib/_web-components/basket-preview/replace-item/replace-item.component.d.ts +1 -0
- package/lib/_web-components/basket-preview/replace-item/replace-item.component.d.ts.map +1 -1
- package/lib/_web-components/recipe-cards/recipe-card/recipe-card.component.d.ts +1 -0
- package/lib/_web-components/recipe-cards/recipe-card/recipe-card.component.d.ts.map +1 -1
- package/lib/_web-components/recipe-cards/recipe-card-cta/recipe-card-cta.component.d.ts +1 -1
- package/lib/_web-components/recipe-cards/recipe-card-cta/recipe-card-cta.component.d.ts.map +1 -1
- package/lib/_web-components/recipe-details/recipe-details.component.d.ts +1 -1
- package/lib/_web-components/recipe-details/recipe-details.component.d.ts.map +1 -1
- package/lib/_web-components/recipe-modal/recipe-modal.component.d.ts.map +1 -1
- package/lib/environments/version.d.ts +1 -1
- package/lib/ng-miam.module.d.ts.map +1 -1
- package/miam-style.css +1 -1
- package/package.json +1 -1
|
@@ -17,6 +17,7 @@ import { PendingBasketMethodsService } from './pending-basket-methods.service';
|
|
|
17
17
|
import { PointOfSalesService } from './point-of-sales.service';
|
|
18
18
|
import { PriceService } from './price.service';
|
|
19
19
|
import { RecipesService } from './recipes.service';
|
|
20
|
+
import { StoreOutOfStockService } from './store-out-of-stock.service';
|
|
20
21
|
import * as i0 from "@angular/core";
|
|
21
22
|
import * as i1 from "./analytics.service";
|
|
22
23
|
import * as i2 from "./baskets.service";
|
|
@@ -28,8 +29,9 @@ import * as i7 from "./point-of-sales.service";
|
|
|
28
29
|
import * as i8 from "./items.service";
|
|
29
30
|
import * as i9 from "./baskets-synchronizing";
|
|
30
31
|
import * as i10 from "./price.service";
|
|
32
|
+
import * as i11 from "./store-out-of-stock.service";
|
|
31
33
|
export class RecipeDetailsService {
|
|
32
|
-
constructor(analyticsService, basketsService, recipeService, ignoredBasketsService, pendingBasketMethodsService, contextService, posService, itemsService, basketSynchroService, priceService, locale) {
|
|
34
|
+
constructor(analyticsService, basketsService, recipeService, ignoredBasketsService, pendingBasketMethodsService, contextService, posService, itemsService, basketSynchroService, priceService, storeOutOfStockService, locale) {
|
|
33
35
|
this.analyticsService = analyticsService;
|
|
34
36
|
this.basketsService = basketsService;
|
|
35
37
|
this.recipeService = recipeService;
|
|
@@ -40,6 +42,7 @@ export class RecipeDetailsService {
|
|
|
40
42
|
this.itemsService = itemsService;
|
|
41
43
|
this.basketSynchroService = basketSynchroService;
|
|
42
44
|
this.priceService = priceService;
|
|
45
|
+
this.storeOutOfStockService = storeOutOfStockService;
|
|
43
46
|
this.locale = locale;
|
|
44
47
|
this.productsByCategory = {
|
|
45
48
|
toPickProducts: [],
|
|
@@ -54,7 +57,7 @@ export class RecipeDetailsService {
|
|
|
54
57
|
this.recipeLoading$ = new BehaviorSubject(false);
|
|
55
58
|
this.basketEntryToReplace$ = new BehaviorSubject(null);
|
|
56
59
|
this.updateFooterDisplay$ = new Subject();
|
|
57
|
-
this.
|
|
60
|
+
this.pageviewEventWasSent = false;
|
|
58
61
|
this.onlyShowPreparation = false;
|
|
59
62
|
this.noPosDisplay = false;
|
|
60
63
|
this.invalidPosDisplay = false;
|
|
@@ -301,6 +304,7 @@ export class RecipeDetailsService {
|
|
|
301
304
|
merge(...onTimeouts, ...onErrors)
|
|
302
305
|
.pipe(take(1))
|
|
303
306
|
.subscribe(() => {
|
|
307
|
+
this.setProductOutOfStockInSession(this.remainingProducts());
|
|
304
308
|
this.allIngredientsToBasketLoading = false;
|
|
305
309
|
});
|
|
306
310
|
const productsToEmit = { ingredientsAdded: productsToAdd.length, ingredientsTotal: this.recipe.ingredients.length };
|
|
@@ -318,7 +322,9 @@ export class RecipeDetailsService {
|
|
|
318
322
|
this.getIngredientsBasketEntries(false).pipe(take(1)).subscribe((products) => {
|
|
319
323
|
if (inBasket) {
|
|
320
324
|
const updateActions = products
|
|
321
|
-
.filter(({ basketEntry }) => basketEntry.
|
|
325
|
+
.filter(({ basketEntry }) => basketEntry.status === 'active' &&
|
|
326
|
+
basketEntry.id !== '-1' &&
|
|
327
|
+
basketEntry.recipesIds.includes(+this.recipe.id))
|
|
322
328
|
.map(({ basketEntry }) => {
|
|
323
329
|
const newBasketEntry = deepCloneWithClass(basketEntry); // Clone for immutability
|
|
324
330
|
return new UpdateRecipeFromGuestAction(newBasketEntry, {
|
|
@@ -465,6 +471,9 @@ export class RecipeDetailsService {
|
|
|
465
471
|
const { status } = basketEntry;
|
|
466
472
|
// Check if the product is ignored
|
|
467
473
|
this.isIngredientIgnored(product);
|
|
474
|
+
if (this.storeOutOfStockService.isOutOfStockFromStorage(basketEntry)) {
|
|
475
|
+
product.basketEntry.status = 'out_of_stock';
|
|
476
|
+
}
|
|
468
477
|
this.calculateProductPrice(product, this.priceService.getPriceFromBasketEntry(basketEntry));
|
|
469
478
|
this.correctProductState(product);
|
|
470
479
|
// Check if the product is often ignored based on basketEntryStatus
|
|
@@ -483,7 +492,7 @@ export class RecipeDetailsService {
|
|
|
483
492
|
this.productsByCategory$.next(this.productsByCategory);
|
|
484
493
|
}
|
|
485
494
|
correctProductState(product) {
|
|
486
|
-
if (!['often_deleted', 'deleted', 'ignored'].includes(product.basketEntry.status)) {
|
|
495
|
+
if (!['often_deleted', 'deleted', 'ignored', 'out_of_stock'].includes(product.basketEntry.status)) {
|
|
487
496
|
const { id, selectedItem, recipesIds } = product.basketEntry;
|
|
488
497
|
if (id === '-1') {
|
|
489
498
|
product.basketEntry.status = selectedItem ? 'initial' : 'unavailable';
|
|
@@ -494,16 +503,22 @@ export class RecipeDetailsService {
|
|
|
494
503
|
}
|
|
495
504
|
}
|
|
496
505
|
}
|
|
506
|
+
setProductOutOfStockInSession(products) {
|
|
507
|
+
products.forEach(({ entry }) => {
|
|
508
|
+
entry.status = 'out_of_stock';
|
|
509
|
+
this.storeOutOfStockService.addEntryToStorage(entry);
|
|
510
|
+
});
|
|
511
|
+
}
|
|
497
512
|
}
|
|
498
|
-
RecipeDetailsService.ɵfac = function RecipeDetailsService_Factory(t) { return new (t || RecipeDetailsService)(i0.ɵɵinject(i1.AnalyticsService), i0.ɵɵinject(i2.BasketsService), i0.ɵɵinject(i3.RecipesService), i0.ɵɵinject(i4.IgnoredIngredientsService), i0.ɵɵinject(i5.PendingBasketMethodsService), i0.ɵɵinject(i6.ContextService), i0.ɵɵinject(i7.PointOfSalesService), i0.ɵɵinject(i8.ItemsService), i0.ɵɵinject(i9.BasketsSynchronizerService), i0.ɵɵinject(i10.PriceService), i0.ɵɵinject(LOCALE_ID)); };
|
|
513
|
+
RecipeDetailsService.ɵfac = function RecipeDetailsService_Factory(t) { return new (t || RecipeDetailsService)(i0.ɵɵinject(i1.AnalyticsService), i0.ɵɵinject(i2.BasketsService), i0.ɵɵinject(i3.RecipesService), i0.ɵɵinject(i4.IgnoredIngredientsService), i0.ɵɵinject(i5.PendingBasketMethodsService), i0.ɵɵinject(i6.ContextService), i0.ɵɵinject(i7.PointOfSalesService), i0.ɵɵinject(i8.ItemsService), i0.ɵɵinject(i9.BasketsSynchronizerService), i0.ɵɵinject(i10.PriceService), i0.ɵɵinject(i11.StoreOutOfStockService), i0.ɵɵinject(LOCALE_ID)); };
|
|
499
514
|
RecipeDetailsService.ɵprov = i0.ɵɵdefineInjectable({ token: RecipeDetailsService, factory: RecipeDetailsService.ɵfac, providedIn: 'root' });
|
|
500
515
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RecipeDetailsService, [{
|
|
501
516
|
type: Injectable,
|
|
502
517
|
args: [{
|
|
503
518
|
providedIn: 'root'
|
|
504
519
|
}]
|
|
505
|
-
}], function () { return [{ type: i1.AnalyticsService }, { type: i2.BasketsService }, { type: i3.RecipesService }, { type: i4.IgnoredIngredientsService }, { type: i5.PendingBasketMethodsService }, { type: i6.ContextService }, { type: i7.PointOfSalesService }, { type: i8.ItemsService }, { type: i9.BasketsSynchronizerService }, { type: i10.PriceService }, { type: undefined, decorators: [{
|
|
520
|
+
}], function () { return [{ type: i1.AnalyticsService }, { type: i2.BasketsService }, { type: i3.RecipesService }, { type: i4.IgnoredIngredientsService }, { type: i5.PendingBasketMethodsService }, { type: i6.ContextService }, { type: i7.PointOfSalesService }, { type: i8.ItemsService }, { type: i9.BasketsSynchronizerService }, { type: i10.PriceService }, { type: i11.StoreOutOfStockService }, { type: undefined, decorators: [{
|
|
506
521
|
type: Inject,
|
|
507
522
|
args: [LOCALE_ID]
|
|
508
523
|
}] }]; }, null); })();
|
|
509
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWRldGFpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1pYW0vc3JjL2xpYi9fc2VydmljZXMvcmVjaXBlLWRldGFpbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvRixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRXhHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVks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Q0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqRixNQUFNLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzdELElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDZixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO2FBQ3ZFO2lCQUFNO2dCQUNMLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQ3BFO1NBQ0Y7SUFDSCxDQUFDOzt3RkE1a0JVLG9CQUFvQixzWEErQ3JCLFNBQVM7NERBL0NSLG9CQUFvQixXQUFwQixvQkFBb0IsbUJBRm5CLE1BQU07dUZBRVAsb0JBQW9CO2NBSGhDLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7c0JBZ0RJLE1BQU07dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNraXBXaGlsZSwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmFza2V0RW50cnksIEJhc2tldFByZXZpZXdMaW5lLCBJbmdyZWRpZW50LCBSZWNpcGUgfSBmcm9tICcuLi9fbW9kZWxzJztcbmltcG9ydCB7IEFkZFJlY2lwZUFjdGlvbiB9IGZyb20gJy4uL19tb2RlbHMvYmFza2V0LWFjdGlvbnMvYWRkLXJlY2lwZS1hY3Rpb24nO1xuaW1wb3J0IHsgUmVtb3ZlSW5ncmVkaWVudEFjdGlvbiB9IGZyb20gJy4uL19tb2RlbHMvYmFza2V0LWFjdGlvbnMvcmVtb3ZlLWluZ3JlZGllbnQtYWN0aW9uJztcbmltcG9ydCB7IFVwZGF0ZUluZ3JlZGllbnRBY3Rpb24gfSBmcm9tICcuLi9fbW9kZWxzL2Jhc2tldC1hY3Rpb25zL3VwZGF0ZS1pbmdyZWRpZW50LWFjdGlvbic7XG5pbXBvcnQgeyBVcGRhdGVSZWNpcGVGcm9tR3Vlc3RBY3Rpb24gfSBmcm9tICcuLi9fbW9kZWxzL2Jhc2tldC1hY3Rpb25zL3VwZGF0ZS1yZWNpcGUtZnJvbS1ndWVzdC1hY3Rpb24nO1xuaW1wb3J0IHsgRXZlbnRUcmFjZSB9IGZyb20gJy4uL190eXBlcy9ldmVudC10cmFjZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmVXaXRoQ2xhc3MgfSBmcm9tICcuLi9fdXRpbHMvbWV0aG9kcy9kZWVwQ2xvbmUnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYW5hbHl0aWNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFza2V0c1N5bmNocm9uaXplclNlcnZpY2UgfSBmcm9tICcuL2Jhc2tldHMtc3luY2hyb25pemluZyc7XG5pbXBvcnQgeyBCYXNrZXRzU2VydmljZSB9IGZyb20gJy4vYmFza2V0cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSWdub3JlZEluZ3JlZGllbnRzU2VydmljZSB9IGZyb20gJy4vaWdub3JlZC1pbmdyZWRpZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IEl0ZW1zU2VydmljZSB9IGZyb20gJy4vaXRlbXMuc2VydmljZSc7XG5pbXBvcnQgeyBQYXJzZWRNZXRob2QsIFBlbmRpbmdCYXNrZXRNZXRob2RzU2VydmljZSB9IGZyb20gJy4vcGVuZGluZy1iYXNrZXQtbWV0aG9kcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvaW50T2ZTYWxlc1NlcnZpY2UgfSBmcm9tICcuL3BvaW50LW9mLXNhbGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJpY2VTZXJ2aWNlLCBQcm9kdWN0UHJpY2UgfSBmcm9tICcuL3ByaWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVjaXBlc1NlcnZpY2UgfSBmcm9tICcuL3JlY2lwZXMuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdCB7XG4gIGluZ3JlZGllbnQ6IEluZ3JlZGllbnQ7XG4gIGJhc2tldEVudHJ5OiBCYXNrZXRFbnRyeTtcbiAgcHJpY2U6IFByb2R1Y3RQcmljZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0Q2F0ZWdvcnkge1xuICB0b1BpY2tQcm9kdWN0czogUHJvZHVjdFtdO1xuICBvZnRlbklnbm9yZWRQcm9kdWN0czogUHJvZHVjdFtdO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBSZWNpcGVEZXRhaWxzU2VydmljZSB7XG5cbiAgcHJvZHVjdHNCeUNhdGVnb3J5OiBQcm9kdWN0Q2F0ZWdvcnkgPSB7XG4gICAgdG9QaWNrUHJvZHVjdHM6IFtdLFxuICAgIG9mdGVuSWdub3JlZFByb2R1Y3RzOiBbXVxuICB9O1xuICBwcm9kdWN0czogUHJvZHVjdFtdID0gW107XG4gIHJlY2lwZTogUmVjaXBlO1xuICB0b3RhbFByb2R1Y3RzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgYWxsSW5ncmVkaWVudHNUb0Jhc2tldExvYWRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaW5ncmVkaWVudFRvQmFza2V0TG9hZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB1cGRhdGVJbmdyZWRpZW50RnJvbUJhc2tldExvYWRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvZHVjdHNMb2FkaW5nJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlY2lwZUxvYWRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYmFza2V0RW50cnlUb1JlcGxhY2UkOiBCZWhhdmlvclN1YmplY3Q8e1xuICAgIGluZ3JlZGllbnQ6IEluZ3JlZGllbnQ7XG4gICAgYmFza2V0RW50cnk6IEJhc2tldEVudHJ5O1xuICAgIGlnbm9yZVNlbGVjdGVkOiBib29sZWFuO1xuICB9PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIGluZ3JlZGllbnQ6IEluZ3JlZGllbnQ7XG4gICAgYmFza2V0RW50cnk6IEJhc2tldEVudHJ5O1xuICAgIGlnbm9yZVNlbGVjdGVkOiBib29sZWFuO1xuICB9PihudWxsKTtcbiAgdXBkYXRlRm9vdGVyRGlzcGxheSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBoYXNSZXBsYWNlZDogYm9vbGVhbjtcbiAgZGlzcGxheUV2ZW50V2FzU2VudCA9IGZhbHNlO1xuICBvbmx5U2hvd1ByZXBhcmF0aW9uID0gZmFsc2U7XG4gIG5vUG9zRGlzcGxheSA9IGZhbHNlO1xuICBpbnZhbGlkUG9zRGlzcGxheSA9IGZhbHNlO1xuXG4gIHByb2R1Y3RzQnlDYXRlZ29yeSQ6IEJlaGF2aW9yU3ViamVjdDxQcm9kdWN0Q2F0ZWdvcnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9kdWN0Q2F0ZWdvcnk+KHRoaXMucHJvZHVjdHNCeUNhdGVnb3J5KTtcbiAgcHJvZHVjdHMkOiBCZWhhdmlvclN1YmplY3Q8UHJvZHVjdFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJvZHVjdFtdPih0aGlzLnByb2R1Y3RzKTtcbiAgcmVjaXBlUHJpY2U6IHsgcmVtYWluaW5nOiBudW1iZXI7IGluQmFza2V0OiBudW1iZXIgfSA9IHsgcmVtYWluaW5nOiAwLCBpbkJhc2tldDogMCB9O1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYXNrZXRzU2VydmljZTogQmFza2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNpcGVTZXJ2aWNlOiBSZWNpcGVzU2VydmljZSxcbiAgICBwcml2YXRlIGlnbm9yZWRCYXNrZXRzU2VydmljZTogSWdub3JlZEluZ3JlZGllbnRzU2VydmljZSxcbiAgICBwcml2YXRlIHBlbmRpbmdCYXNrZXRNZXRob2RzU2VydmljZTogUGVuZGluZ0Jhc2tldE1ldGhvZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9zU2VydmljZTogUG9pbnRPZlNhbGVzU2VydmljZSxcbiAgICBwcml2YXRlIGl0ZW1zU2VydmljZTogSXRlbXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFza2V0U3luY2hyb1NlcnZpY2U6IEJhc2tldHNTeW5jaHJvbml6ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJpY2VTZXJ2aWNlOiBQcmljZVNlcnZpY2UsXG4gICAgQEluamVjdChMT0NBTEVfSUQpIHB1YmxpYyBsb2NhbGU6IHN0cmluZykge1xuICAgIHRoaXMuaW5pdERlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubGlzdGVuQmFza2V0UHJldmlldygpO1xuICAgIHRoaXMucmVzZXRPbkhpZGUoKTtcbiAgICB0aGlzLmV4ZWN1dGVBY3Rpb25Gcm9tU3RvcmFnZSgpO1xuICB9XG5cblxuICBnZXQgcmVtYWluaW5nQmFza2V0RW50cmllcygpOiBCYXNrZXRFbnRyeVtdIHtcbiAgICBpZiAoIXRoaXMucmVjaXBlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb2R1Y3RzLnJlZHVjZSgocmVzdWx0OiBCYXNrZXRFbnRyeVtdLCBwcm9kdWN0OiBQcm9kdWN0KSA9PiB7XG4gICAgICBpZiAocHJvZHVjdC5iYXNrZXRFbnRyeS5zdGF0dXMgPT09ICdpbml0aWFsJyAmJiAhcHJvZHVjdC5iYXNrZXRFbnRyeS5yZWNpcGVzSWRzLmluY2x1ZGVzKHRoaXMucmVjaXBlLmlkKSkge1xuICAgICAgICByZXN1bHQucHVzaChwcm9kdWN0LmJhc2tldEVudHJ5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgZ2V0IGhhc0FkZGVkQVByb2R1Y3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZHVjdHMuc29tZShwID0+IHAuYmFza2V0RW50cnkuc3RhdHVzID09PSAnYWN0aXZlJyk7XG4gIH1cblxuICBnZXQgaXNTcG9uc29yZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVjaXBlPy5zcG9uc29ycz8ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBjb250YWluc0FsY29ob2woKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGFncyA9IHRoaXMucmVjaXBlPy5yZWxhdGlvbnNoaXBzLnRhZ3M/LmRhdGEgfHwgW107XG4gICAgcmV0dXJuIHRhZ3Muc29tZSh0YWcgPT4gdGFnLmlkID09PSAnaW5ncmVkaWVudF9jYXRlZ29yeV9hbGNvb2wnKTtcbiAgfVxuXG4gIGdldCBvcmRlckhpc3RvcnlEYXRlKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3JkZXJIaXN0b3J5ID0gdGhpcy5yZWNpcGUub3JkZXJIaXN0b3J5O1xuICAgIGlmICghb3JkZXJIaXN0b3J5KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKG9yZGVySGlzdG9yeSk7XG4gICAgcmV0dXJuIGZvcm1hdERhdGUocGFyc2VkRGF0ZSwgJ3Nob3J0RGF0ZScsIHRoaXMubG9jYWxlKTtcbiAgfVxuXG4gIHNldCBiYXNrZXRFbnRyeVRvUmVwbGFjZSh0b1JlcGxhY2U6IHsgaW5ncmVkaWVudDogSW5ncmVkaWVudDsgYmFza2V0RW50cnk6IEJhc2tldEVudHJ5OyBpZ25vcmVTZWxlY3RlZDogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5iYXNrZXRFbnRyeVRvUmVwbGFjZSQubmV4dCh0b1JlcGxhY2UpO1xuICB9XG5cbiAgc2V0IHByb2R1Y3RzTG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnByb2R1Y3RzTG9hZGluZyQubmV4dChpc0xvYWRpbmcpO1xuICB9XG5cbiAgc2V0IHJlY2lwZUxvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5yZWNpcGVMb2FkaW5nJC5uZXh0KGlzTG9hZGluZyk7XG4gIH1cblxuICBzZXQgaW5ncmVkaWVudFRvQmFza2V0TG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmluZ3JlZGllbnRUb0Jhc2tldExvYWRpbmckLm5leHQoaXNMb2FkaW5nKTtcbiAgfVxuXG4gIHNldCBhbGxJbmdyZWRpZW50c1RvQmFza2V0TG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFsbEluZ3JlZGllbnRzVG9CYXNrZXRMb2FkaW5nJC5uZXh0KGlzTG9hZGluZyk7XG4gIH1cblxuICBzZXQgdXBkYXRlSW5ncmVkaWVudEZyb21CYXNrZXRMb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMudXBkYXRlSW5ncmVkaWVudEZyb21CYXNrZXRMb2FkaW5nJC5uZXh0KGlzTG9hZGluZyk7XG4gIH1cblxuICBpbml0RGVmYXVsdFN0YXRlKHdpdGhMb2FkaW5nID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLm5vUG9zRGlzcGxheSA9IGZhbHNlO1xuICAgIHRoaXMuaW52YWxpZFBvc0Rpc3BsYXkgPSBmYWxzZTtcbiAgICB0aGlzLnByb2R1Y3RzQnlDYXRlZ29yeSA9IHtcbiAgICAgIHRvUGlja1Byb2R1Y3RzOiBbXSxcbiAgICAgIG9mdGVuSWdub3JlZFByb2R1Y3RzOiBbXVxuICAgIH07XG4gICAgdGhpcy5wcm9kdWN0cyA9IFtdO1xuICAgIHRoaXMucmVjaXBlUHJpY2UgPSB7XG4gICAgICByZW1haW5pbmc6IDAsXG4gICAgICBpbkJhc2tldDogMFxuICAgIH07XG4gICAgdGhpcy50b3RhbFByb2R1Y3RzJC5uZXh0KDApO1xuICAgIHRoaXMuYWxsSW5ncmVkaWVudHNUb0Jhc2tldExvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuaW5ncmVkaWVudFRvQmFza2V0TG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgdGhpcy51cGRhdGVJbmdyZWRpZW50RnJvbUJhc2tldExvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIHRoaXMucHJvZHVjdHNMb2FkaW5nJC5uZXh0KHdpdGhMb2FkaW5nKTtcbiAgICB0aGlzLnJlY2lwZUxvYWRpbmckLm5leHQod2l0aExvYWRpbmcpO1xuICAgIHRoaXMuYmFza2V0RW50cnlUb1JlcGxhY2UkLm5leHQobnVsbCk7XG4gICAgdGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkkLm5leHQodGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkpO1xuICAgIHRoaXMucHJvZHVjdHMkLm5leHQodGhpcy5wcm9kdWN0cyk7XG4gIH1cblxuICBleGVjdXRlQWN0aW9uRnJvbVN0b3JhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkkLnBpcGUoXG4gICAgICBza2lwV2hpbGUocHJvZHVjdHMgPT4gcHJvZHVjdHMudG9QaWNrUHJvZHVjdHMubGVuZ3RoID09PSAwKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5wZW5kaW5nQmFza2V0TWV0aG9kc1NlcnZpY2Uuc2hvdWxkRXhlY3V0ZUJhc2tldE1ldGhvZC5waXBlKFxuICAgICAgICBza2lwV2hpbGUobWV0aG9kID0+ICFtZXRob2QpXG4gICAgICApKVxuICAgICkuc3Vic2NyaWJlKHBhcnNlZE1ldGhvZCA9PiB7XG4gICAgICBpZiAocGFyc2VkTWV0aG9kLm1ldGhvZCA9PT0gJ2FkZFJlY2lwZVRvQmFza2V0Jykge1xuICAgICAgICB0aGlzLnJlY2lwZS5tb2RpZmllZEd1ZXN0cyA9IHBhcnNlZE1ldGhvZC5hcmd1bWVudHMuZ3Vlc3RzIHx8IHRoaXMucmVjaXBlLm1vZGlmaWVkR3Vlc3RzO1xuICAgICAgICB0aGlzLmFkZEFsbEluZ3JlZGllbnRzVG9CYXNrZXQocGFyc2VkTWV0aG9kLmFyZ3VtZW50cy5ldmVudFRyYWNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0T25IaWRlKCk6IHZvaWQge1xuICAgIGxldCBwcmV2aW91c1JlY2lwZSA9IHRoaXMucmVjaXBlO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5yZWNpcGVTZXJ2aWNlLmRpc3BsYXllZFJlY2lwZSQuc3Vic2NyaWJlKHRvRGlzcGxheSA9PiB7XG4gICAgICAgIGlmICh0b0Rpc3BsYXk/LnJlY2lwZSAmJiB0b0Rpc3BsYXkucmVjaXBlLmlkICE9PSBwcmV2aW91c1JlY2lwZT8uaWQpIHtcbiAgICAgICAgICBwcmV2aW91c1JlY2lwZSA9IHRvRGlzcGxheS5yZWNpcGU7XG4gICAgICAgICAgdGhpcy5pbml0RGVmYXVsdFN0YXRlKCk7XG4gICAgICAgICAgdGhpcy5jaGVja0lmUG9zSXNJbml0aWFsaXplZEFuZFZhbGlkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGNoZWNrSWZQb3NJc0luaXRpYWxpemVkQW5kVmFsaWQoKTogdm9pZCB7XG4gICAgdGhpcy5wb3NTZXJ2aWNlLnBvc1dhc0luaXRpYWxpemVkKCkucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBzd2l0Y2hNYXAoaGFzUG9zID0+IHtcbiAgICAgICAgdGhpcy5ub1Bvc0Rpc3BsYXkgPSAhaGFzUG9zO1xuICAgICAgICBpZiAoaGFzUG9zKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucG9zU2VydmljZS5pc1Bvc1ZhbGlkKCkucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgfSlcbiAgICApLnN1YnNjcmliZShpc1ZhbGlkID0+IHtcbiAgICAgIHRoaXMuaW52YWxpZFBvc0Rpc3BsYXkgPSAhdGhpcy5ub1Bvc0Rpc3BsYXkgJiYgIWlzVmFsaWQ7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQcm9kdWN0cyhmcm9tSW5pdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKGZyb21Jbml0KSB7XG4gICAgICB0aGlzLnByb2R1Y3RzTG9hZGluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZ2V0SW5ncmVkaWVudHNCYXNrZXRFbnRyaWVzKGZyb21Jbml0KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9kdWN0c0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcHJvZHVjdHMgYnkgY2F0ZWdvcnkuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2F0ZWdvcml6ZXMgdGhlIHByb2R1Y3RzIGJhc2VkIG9uIGNlcnRhaW4gY3JpdGVyaWEgYW5kXG4gICAqIHBvcHVsYXRlcyB0aGUgXCJwcm9kdWN0c0J5Q2F0ZWdvcnlcIiBvYmplY3Qgd2l0aCB0aGUgY2F0ZWdvcml6ZWQgcHJvZHVjdHMuXG4gICAqIFRoZSBjYXRlZ29yaXplZCBwcm9kdWN0cyBhcmUgdGhlbiBlbWl0dGVkIHRocm91Z2ggdGhlIFwicHJvZHVjdHNCeUNhdGVnb3J5JFwiXG4gICAqIHN1YmplY3QuXG4gICAqXG4gICAqIEByZXR1cm4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS5cbiAgICovXG4gIHNldFByb2R1Y3RzQnlDYXRlZ29yeSgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2R1Y3RzQnlDYXRlZ29yeSA9IHtcbiAgICAgIHRvUGlja1Byb2R1Y3RzOiBbXSxcbiAgICAgIG9mdGVuSWdub3JlZFByb2R1Y3RzOiBbXVxuICAgIH07XG5cbiAgICB0aGlzLnJlY2lwZVByaWNlID0ge1xuICAgICAgcmVtYWluaW5nOiAwLFxuICAgICAgaW5CYXNrZXQ6IDBcbiAgICB9O1xuICAgIHRoaXMuY2F0ZWdvcml6ZVByb2R1Y3RzKCk7XG4gIH1cblxuICBjYWxjdWxhdGVQcm9kdWN0UHJpY2UocHJvZHVjdDogUHJvZHVjdCwgcHJpY2U6IFByb2R1Y3RQcmljZSkge1xuICAgIGNvbnN0IHJhd1RvdGFsID0gIHByb2R1Y3QuYmFza2V0RW50cnkuc3RhdHVzID09PSAnYWN0aXZlJyA/XG4gICAgICAodGhpcy5wcmljZVNlcnZpY2UuZ2V0Q3VycmVudFByaWNlKHByaWNlKSAqIHByb2R1Y3QuYmFza2V0RW50cnkucXVhbnRpdHkpIDpcbiAgICAgICh0aGlzLnByaWNlU2VydmljZS5nZXRDdXJyZW50UHJpY2UocHJpY2UpICogcHJvZHVjdC5iYXNrZXRFbnRyeS5xdWFudGl0eVRvQWRkKTtcbiAgICBwcm9kdWN0LnByaWNlID0ge1xuICAgICAgdW5pdDogcHJpY2UudW5pdCxcbiAgICAgIHRvdGFsOiBNYXRoLnJvdW5kKHJhd1RvdGFsICogMTAwKSAvIDEwMCxcbiAgICAgIHByaWNlUGVyVW5pdDogcHJpY2UucHJpY2VQZXJVbml0LFxuICAgICAgdW5pdE9mTWVhc3VyZW1lbnQ6IHByaWNlLnVuaXRPZk1lYXN1cmVtZW50LFxuICAgICAgZGlzY291bnRlZFByaWNlOiBwcmljZS5kaXNjb3VudGVkUHJpY2UsXG4gICAgICBkaXNjb3VudEFtb3VudDogcHJpY2UuZGlzY291bnRBbW91bnQsXG4gICAgICBkaXNjb3VudFR5cGU6IHByaWNlLmRpc2NvdW50VHlwZVxuICAgIH07XG4gIH1cblxuICBpc1Byb2R1Y3RzQnlDYXRlZ29yeVNldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkudG9QaWNrUHJvZHVjdHMubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkub2Z0ZW5JZ25vcmVkUHJvZHVjdHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGVudHJpZXMgb2YgdGhlIGluZ3JlZGllbnRzIGJhc2tldC5cbiAgICpcbiAgICogQHJldHVybiBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHByb2R1Y3RzIGluIHRoZSBiYXNrZXQuXG4gICAqL1xuICBnZXRJbmdyZWRpZW50c0Jhc2tldEVudHJpZXMoZnJvbUluaXQgPSBmYWxzZSk6IE9ic2VydmFibGU8UHJvZHVjdFtdPiB7XG4gICAgaWYgKCF0aGlzLnJlY2lwZSkge1xuICAgICAgcmV0dXJuIG9mKFtdIGFzIFByb2R1Y3RbXSk7XG4gICAgfVxuXG4gICAgaWYgKCFmcm9tSW5pdCkge1xuICAgICAgdGhpcy5pbmdyZWRpZW50VG9CYXNrZXRMb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNrZXRFbnRyaWVzJCA9IHRoaXMucmVjaXBlLmluZ3JlZGllbnRzLm1hcCgoaW5ncmVkaWVudDogSW5ncmVkaWVudCkgPT5cbiAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2UuYmFza2V0RW50cnlGcm9tSW5ncmVkaWVudChpbmdyZWRpZW50LmlkLCB0aGlzLnJlY2lwZS5tb2RpZmllZEd1ZXN0cywgIWZyb21Jbml0KS5waXBlKFxuICAgICAgICBtYXAoYmFza2V0RW50cnkgPT4gKHsgaW5ncmVkaWVudCwgYmFza2V0RW50cnkgfSkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiBmb3JrSm9pbihiYXNrZXRFbnRyaWVzJCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoYmFza2V0RW50cmllc1Jlc3VsdDogUHJvZHVjdFtdKSA9PiB7XG4gICAgICAgIGlmIChmcm9tSW5pdCkge1xuICAgICAgICAgIHRoaXMucHJvZHVjdHMgPSBiYXNrZXRFbnRyaWVzUmVzdWx0O1xuICAgICAgICAgIHRoaXMuc2V0UHJvZHVjdHNCeUNhdGVnb3J5KCk7XG4gICAgICAgICAgcmV0dXJuIG9mPFByb2R1Y3RbXT4oW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBkYXRlUHJpY2VPbkd1ZXN0Q2hhbmdlKGJhc2tldEVudHJpZXNSZXN1bHQpO1xuICAgICAgICAgIHJldHVybiBvZih0aGlzLnByb2R1Y3RzKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodGhpcy5wcm9kdWN0cykpXG4gICAgKTtcbiAgfVxuXG4gIGluZ3JlZGllbnRSZW1vdmVkKGluZ3JlZGllbnQ6IEluZ3JlZGllbnQsIGV2ZW50VHJhY2U6IEV2ZW50VHJhY2UpOiB2b2lkIHtcbiAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLnJlY2lwZUlzSW5CYXNrZXQodGhpcy5yZWNpcGUuaWQpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGluQmFza2V0ID0+IHtcbiAgICAgIGNvbnN0IGluZ3JlZGllbnRUb0Jhc2tldEVudHJ5ID0gdGhpcy5iYXNrZXRFbnRyeUZvckluZ3JlZGllbnQoaW5ncmVkaWVudCk7XG4gICAgICBjb25zdCBkZWxldGVkQmFza2V0RW50cnk6IEJhc2tldEVudHJ5ID0gZGVlcENsb25lV2l0aENsYXNzKGluZ3JlZGllbnRUb0Jhc2tldEVudHJ5KTtcbiAgICAgIGRlbGV0ZWRCYXNrZXRFbnRyeS5xdWFudGl0eSA9IDA7XG4gICAgICBpZiAoIWluQmFza2V0KSB7XG4gICAgICAgIC8qIFRPRE8gYWRkIHRvIGxvY2FsU3RvcmFnZSAqL1xuICAgICAgICAvLyB0aGlzLnJlbW92ZWRJbmdyZWRpZW50cy5wdXNoKGluZ3JlZGllbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlSW5ncmVkaWVudCA9IG5ldyBSZW1vdmVJbmdyZWRpZW50QWN0aW9uKFxuICAgICAgICAgIGRlbGV0ZWRCYXNrZXRFbnRyeSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWNpcGVJZDogdGhpcy5yZWNpcGUuaWQsXG4gICAgICAgICAgICBpbmdyZWRpZW50SWQ6IGluZ3JlZGllbnQuaWQsXG4gICAgICAgICAgICBldmVudFRyYWNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLFxuICAgICAgICApO1xuICAgICAgICBtZXJnZShyZW1vdmVJbmdyZWRpZW50Lm9uVGltZW91dCwgcmVtb3ZlSW5ncmVkaWVudC5vbkVycm9yKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVJbmdyZWRpZW50RnJvbUJhc2tldExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmdldFByb2R1Y3RzKHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYXNrZXRTeW5jaHJvU2VydmljZS5hZGRUb0FjdGlvbkxpc3QoXG4gICAgICAgICAgW3JlbW92ZUluZ3JlZGllbnRdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVQcm9kdWN0UXVhbnRpdHkoYmFza2V0RW50cnk6IEJhc2tldEVudHJ5LCBuZXdRdWFudGl0eTogbnVtYmVyLCBldmVudFRyYWNlOiBFdmVudFRyYWNlKTogdm9pZCB7XG4gICAgY29uc3QgbmV3QmFza2V0RW50cnk6IEJhc2tldEVudHJ5ID0gZGVlcENsb25lV2l0aENsYXNzKGJhc2tldEVudHJ5KTtcbiAgICBuZXdCYXNrZXRFbnRyeS5xdWFudGl0eSA9IG5ld1F1YW50aXR5O1xuICAgIGNvbnN0IHVwZGF0ZVF1YW50aXR5ID0gbmV3IFVwZGF0ZUluZ3JlZGllbnRBY3Rpb24oXG4gICAgICBuZXdCYXNrZXRFbnRyeSxcbiAgICAgIHtcbiAgICAgICAgZXZlbnRUcmFjZSxcbiAgICAgICAgcmVjaXBlSWQ6IHRoaXMucmVjaXBlLmlkLFxuICAgICAgfSxcbiAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2VcbiAgICApO1xuICAgIG1lcmdlKHVwZGF0ZVF1YW50aXR5Lm9uVGltZW91dCwgdXBkYXRlUXVhbnRpdHkub25FcnJvcikucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVJbmdyZWRpZW50RnJvbUJhc2tldExvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ2V0UHJvZHVjdHModHJ1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5iYXNrZXRTeW5jaHJvU2VydmljZS5hZGRUb0FjdGlvbkxpc3QoXG4gICAgICBbdXBkYXRlUXVhbnRpdHldXG4gICAgKTtcbiAgfVxuXG4gIGFkZEFsbEluZ3JlZGllbnRzVG9CYXNrZXQoZXZlbnRUcmFjZTogRXZlbnRUcmFjZSk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jYW5BZGRQcm9kdWN0VG9CYXNrZXQoXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6ICdhZGRSZWNpcGVUb0Jhc2tldCcsXG4gICAgICAgICAgYXJndW1lbnRzOiB7XG4gICAgICAgICAgICByZWNpcGVJZDogdGhpcy5yZWNpcGUuaWQsIGd1ZXN0czogdGhpcy5yZWNpcGUubW9kaWZpZWRHdWVzdHMsIGV2ZW50VHJhY2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50VHJhY2VcbiAgICAgICkuc3Vic2NyaWJlKHBhc3NlZCA9PiB7XG4gICAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgICB0aGlzLmFsbEluZ3JlZGllbnRzVG9CYXNrZXRMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBwcm9kdWN0c1RvQWRkOiB7IGluZ3JlZGllbnRJZDogc3RyaW5nOyBlbnRyeTogQmFza2V0RW50cnkgfVtdID0gW107XG4gICAgICAgICAgdGhpcy5yZW1haW5pbmdQcm9kdWN0cygpLmZvckVhY2gocmUgPT5cbiAgICAgICAgICAgIHRoaXMuYmFza2V0U3luY2hyb1NlcnZpY2UuZW50cnlXaWxsQmVBZGRlZChyZS5lbnRyeS5zZWxlY3RlZEl0ZW0uZXh0SWQpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICBwcm9kdWN0c1RvQWRkLnB1c2gocmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgY29uc3QgYWRkUmVjaXBlcyA9IHByb2R1Y3RzVG9BZGQubWFwKHJlID0+IG5ldyBBZGRSZWNpcGVBY3Rpb24oXG4gICAgICAgICAgICByZS5lbnRyeSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVjaXBlSWQ6IHRoaXMucmVjaXBlLmlkLFxuICAgICAgICAgICAgICBpbmdyZWRpZW50SWQ6IHJlLmluZ3JlZGllbnRJZCxcbiAgICAgICAgICAgICAgZXZlbnRUcmFjZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlXG4gICAgICAgICAgKSk7XG4gICAgICAgICAgdGhpcy5iYXNrZXRTeW5jaHJvU2VydmljZS5hZGRUb0FjdGlvbkxpc3QoYWRkUmVjaXBlcyk7XG4gICAgICAgICAgY29uc3Qgb25UaW1lb3V0cyA9IGFkZFJlY2lwZXMubWFwKGFjdGlvbiA9PiBhY3Rpb24ub25UaW1lb3V0KTtcbiAgICAgICAgICBjb25zdCBvbkVycm9ycyA9IGFkZFJlY2lwZXMubWFwKGFjdGlvbiA9PiBhY3Rpb24ub25FcnJvcik7XG5cbiAgICAgICAgICBtZXJnZSguLi5vblRpbWVvdXRzLCAuLi5vbkVycm9ycylcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxJbmdyZWRpZW50c1RvQmFza2V0TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgcHJvZHVjdHNUb0VtaXQgPSB7IGluZ3JlZGllbnRzQWRkZWQ6IHByb2R1Y3RzVG9BZGQubGVuZ3RoLCBpbmdyZWRpZW50c1RvdGFsOiB0aGlzLnJlY2lwZS5pbmdyZWRpZW50cy5sZW5ndGggfTtcbiAgICAgICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLnByb2R1Y3RzV2lsbEJlQWRkZWQoKS5waXBlKHNraXBXaGlsZShwcm9kdWN0cyA9PiBwcm9kdWN0cyA+IDApLCB0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS5hZGRBbGxQcm9kdWN0c1dhc0NsaWNrZWQuZW1pdChwcm9kdWN0c1RvRW1pdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIElmIHRoZSByZWNpcGUgaXMgYWxyZWFkeSBpbiBiYXNrZXQsIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIGd1ZXN0cyAoPSBhcHBlbmQgcmVjaXBlIHRvIGxpc3QgYWdhaW4pXG4gIHVwZGF0ZUd1ZXN0cyhldmVudFRyYWNlOiBFdmVudFRyYWNlKTogdm9pZCB7XG4gICAgdGhpcy5iYXNrZXRzU2VydmljZS5yZWNpcGVJc0luQmFza2V0KHRoaXMucmVjaXBlLmlkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShpbkJhc2tldCA9PiB7XG4gICAgICAvLyB1cGRhdGUgZ3Vlc3QgbnVtYmVyXG4gICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLnVwZGF0ZVJlY2lwZXNJbkJhc2tldChbdGhpcy5yZWNpcGUuaWRdLCB0aGlzLnJlY2lwZS5tb2RpZmllZEd1ZXN0cywgZXZlbnRUcmFjZSwgdHJ1ZSk7XG4gICAgICB0aGlzLmdldEluZ3JlZGllbnRzQmFza2V0RW50cmllcyhmYWxzZSkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHByb2R1Y3RzOiBQcm9kdWN0W10pID0+IHtcbiAgICAgICAgaWYgKGluQmFza2V0KSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlQWN0aW9ucyA9IHByb2R1Y3RzXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGJhc2tldEVudHJ5IH0pID0+IGJhc2tldEVudHJ5LmlkICE9PSAnLTEnICYmIGJhc2tldEVudHJ5LnJlY2lwZXNJZHMuaW5jbHVkZXMoK3RoaXMucmVjaXBlLmlkKSlcbiAgICAgICAgICAgIC5tYXAoKHsgYmFza2V0RW50cnkgfSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdCYXNrZXRFbnRyeTogQmFza2V0RW50cnkgPSBkZWVwQ2xvbmVXaXRoQ2xhc3MoYmFza2V0RW50cnkpOyAvLyBDbG9uZSBmb3IgaW1tdXRhYmlsaXR5XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVXBkYXRlUmVjaXBlRnJvbUd1ZXN0QWN0aW9uKFxuICAgICAgICAgICAgICAgIG5ld0Jhc2tldEVudHJ5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50VHJhY2UsXG4gICAgICAgICAgICAgICAgICByZWNpcGVJZDogdGhpcy5yZWNpcGUuaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENhbGwgYWRkVG9BY3Rpb25MaXN0IG9uY2Ugd2l0aCB0aGUgYXJyYXkgb2YgYWN0aW9uc1xuICAgICAgICAgIHRoaXMuYmFza2V0U3luY2hyb1NlcnZpY2UuYWRkVG9BY3Rpb25MaXN0KHVwZGF0ZUFjdGlvbnMpO1xuXG4gICAgICAgICAgLy8gSGFuZGxlIHRpbWVvdXRzIGFuZCBlcnJvcnNcbiAgICAgICAgICBtZXJnZSguLi51cGRhdGVBY3Rpb25zLm1hcChhY3Rpb24gPT4gYWN0aW9uLm9uVGltZW91dCksIC4uLnVwZGF0ZUFjdGlvbnMubWFwKGFjdGlvbiA9PiBhY3Rpb24ub25FcnJvcikpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlSW5ncmVkaWVudEZyb21CYXNrZXRMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0UHJvZHVjdHModHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2Uuc2VuZEV2ZW50KCdyZWNpcGUuY2hhbmdlLWd1ZXN0cycsIGV2ZW50VHJhY2Uub3JpZ2luUGF0aCwgeyByZWNpcGVfaWQ6IHRoaXMucmVjaXBlLmlkIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmd1ZXN0c0NoYW5nZWQuZW1pdCh7IGd1ZXN0czogdGhpcy5yZWNpcGUubW9kaWZpZWRHdWVzdHMsIHJlY2lwZUlkOiB0aGlzLnJlY2lwZS5pZCB9KTtcbiAgICB0aGlzLnJlY2lwZVNlcnZpY2UuZGlzcGxheWVkUmVjaXBlQ2hhbmdlZCQubmV4dCgpO1xuICB9XG5cbiAgcmVwbGFjZUJhc2tldEVudHJ5KGJhc2tldEVudHJ5OiBCYXNrZXRFbnRyeSwgaWdub3JlU2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmJhc2tldEVudHJ5VG9SZXBsYWNlID0ge1xuICAgICAgaW5ncmVkaWVudDogdGhpcy5wcm9kdWN0c1t0aGlzLnByb2R1Y3RzLmZpbmRJbmRleChwID0+IHAuYmFza2V0RW50cnkubmFtZSA9PT0gYmFza2V0RW50cnkubmFtZSldLmluZ3JlZGllbnQsXG4gICAgICBiYXNrZXRFbnRyeSxcbiAgICAgIGlnbm9yZVNlbGVjdGVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBob29rQ2FsbGJhY2sgYmVmb3JlIGFkZGluZyBhIHByb2R1Y3QgdG8gYmFza2V0ICYgYWRkcyB0aGUgcmVjaXBlcyBpZiBwcm9kdWN0cyBjYW4gYmUgYWRkZWRcbiAgICogQHBhcmFtIG1ldGhvZCBpcyBlaXRoZXIgJ2FkZFJlY2lwZVRvQmFza2V0JyBvciAnYWRkSW5ncmVkaWVudFRvQmFza2V0JyB3aXRoIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0gZXZlbnRUcmFjZSBuZWVkZWQgdG8gYWRkIHJlY2lwZSB0byBiYXNrZXRcbiAgICogQHJldHVybnMgW2lzbG9nZ2VkOiBib29sZWFuLCBwb3NXYXNJbml0aWFsaXplZDogYm9vbGVhbiwgcmVjaXBlSXNJbkJhc2tldDogYm9vbGVhbl1cbiAgICovXG4gIGNhbkFkZFByb2R1Y3RUb0Jhc2tldChtZXRob2Q6IFBhcnNlZE1ldGhvZCwgZXZlbnRUcmFjZTogRXZlbnRUcmFjZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnBlbmRpbmdCYXNrZXRNZXRob2RzU2VydmljZS5zdG9yZU1ldGhvZElmQ2FsbGJhY2tOZWVkZWQobWV0aG9kKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNhbkFkZCA9PlxuICAgICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLnJlY2lwZUlzSW5CYXNrZXQodGhpcy5yZWNpcGUuaWQpLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBtYXAoaXNJbkJhc2tldCA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuQWRkICYmICFpc0luQmFza2V0KSB7XG4gICAgICAgICAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2UuYWRkUmVjaXBlc1RvQmFza2V0KFt0aGlzLnJlY2lwZS5pZF0sIHRoaXMucmVjaXBlLm1vZGlmaWVkR3Vlc3RzLCBldmVudFRyYWNlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2FuQWRkO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlUmVjaXBlUHJpY2UocHJvZHVjdDogUHJvZHVjdCwgaWdub3JlID0gZmFsc2UpIHtcbiAgICBpZiAoaWdub3JlKSB7XG4gICAgICB0aGlzLnJlY2lwZVByaWNlLnJlbWFpbmluZyA9IHRoaXMucmVjaXBlUHJpY2UucmVtYWluaW5nIC0gKCtwcm9kdWN0LnByaWNlLnRvdGFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWNpcGVQcmljZSA9IHtcbiAgICAgICAgcmVtYWluaW5nOiB0aGlzLnJlY2lwZVByaWNlLnJlbWFpbmluZyArIChwcm9kdWN0LmJhc2tldEVudHJ5LnN0YXR1cyA9PT0gJ2luaXRpYWwnICYmICtwcm9kdWN0LnByaWNlLnRvdGFsKSxcbiAgICAgICAgaW5CYXNrZXQ6IHRoaXMucmVjaXBlUHJpY2UuaW5CYXNrZXQgKyAocHJvZHVjdC5iYXNrZXRFbnRyeS5zdGF0dXMgPT09ICdhY3RpdmUnICYmICtwcm9kdWN0LnByaWNlLnRvdGFsKVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBzZW5kRW1pdFRvVXBkYXRlUmVjaXBlUHJpY2UoKSB7XG4gICAgY29uc3QgeyByZW1haW5pbmcsIGluQmFza2V0IH0gPSB0aGlzLnJlY2lwZVByaWNlO1xuXG4gICAgaWYgKGluQmFza2V0ICE9PSAwKSB7XG4gICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLnJlY2lwZXNJbkJhc2tldCQoKS5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAocmVjaXBlc0luQmFza2V0ID0+IHtcbiAgICAgICAgICBjb25zdCByZWNpcGVQcmljaW5nID0gcmVjaXBlc0luQmFza2V0LmZpbmQocHJpY2luZyA9PiBwcmljaW5nLmlkID09PSB0aGlzLnJlY2lwZS5pZCk7XG4gICAgICAgICAgcmV0dXJuIHJlY2lwZVByaWNpbmcgPyArcmVjaXBlUHJpY2luZy5wcmljZSA6IGluQmFza2V0O1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoaW5CYXNrZXRQcmljZSA9PiB7XG4gICAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UucmVjaXBlUHJpY2VDaGFuZ2VkLmVtaXQoeyByZW1haW5pbmcsIGluQmFza2V0OiBpbkJhc2tldFByaWNlLCByZWNpcGVJZDogdGhpcy5yZWNpcGUuaWQgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS5yZWNpcGVQcmljZUNoYW5nZWQuZW1pdCh7IC4uLnRoaXMucmVjaXBlUHJpY2UsIHJlY2lwZUlkOiB0aGlzLnJlY2lwZS5pZCB9KTtcbiAgICB9XG4gIH1cblxuICB1bnN1YnNjcmliZSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1haW5pbmdQcm9kdWN0cygpOiB7IGluZ3JlZGllbnRJZDogc3RyaW5nOyBlbnRyeTogQmFza2V0RW50cnkgfVtdIHtcbiAgICByZXR1cm4gdGhpcy5yZW1haW5pbmdCYXNrZXRFbnRyaWVzLnJlZHVjZSgocmVzdWx0OiB7IGluZ3JlZGllbnRJZDogc3RyaW5nOyBlbnRyeTogQmFza2V0RW50cnkgfVtdLCBiZTogQmFza2V0RW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLnByb2R1Y3RzLmZpbmQocHJvZHVjdCA9PiBwcm9kdWN0LmJhc2tldEVudHJ5Lm5hbWUgPT09IGJlLm5hbWUpO1xuICAgICAgaWYgKHApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBpbmdyZWRpZW50SWQ6IHAuaW5ncmVkaWVudC5pZCwgZW50cnk6IHAuYmFza2V0RW50cnkgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUHJpY2VPbkd1ZXN0Q2hhbmdlKGJhc2tldEVudHJpZXNSZXN1bHQ6IFByb2R1Y3RbXSkge1xuICAgIHRoaXMucmVjaXBlUHJpY2UgPSB7XG4gICAgICByZW1haW5pbmc6IDAsXG4gICAgICBpbkJhc2tldDogMFxuICAgIH07XG4gICAgbGV0IHJlZnJlc2hSZWNpcGVQcmljZSA9IGZhbHNlO1xuXG4gICAgYmFza2V0RW50cmllc1Jlc3VsdC5mb3JFYWNoKChwcm9kdWN0OiBQcm9kdWN0LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50UHJvZHVjdCA9IHRoaXMucHJvZHVjdHNbaW5kZXhdO1xuXG4gICAgICBjdXJyZW50UHJvZHVjdC5iYXNrZXRFbnRyeS5xdWFudGl0eSA9IHByb2R1Y3QuYmFza2V0RW50cnkucXVhbnRpdHk7XG4gICAgICBjdXJyZW50UHJvZHVjdC5iYXNrZXRFbnRyeS5xdWFudGl0eVRvQWRkID0gcHJvZHVjdC5iYXNrZXRFbnRyeS5xdWFudGl0eVRvQWRkO1xuICAgICAgaWYgKGN1cnJlbnRQcm9kdWN0LnByaWNlKSB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUHJvZHVjdFByaWNlKGN1cnJlbnRQcm9kdWN0LCBjdXJyZW50UHJvZHVjdC5wcmljZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChbJ2luaXRpYWwnLCAnYWN0aXZlJ10uaW5jbHVkZXMoY3VycmVudFByb2R1Y3QuYmFza2V0RW50cnkuc3RhdHVzKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVJlY2lwZVByaWNlKGN1cnJlbnRQcm9kdWN0KTtcbiAgICAgICAgcmVmcmVzaFJlY2lwZVByaWNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChyZWZyZXNoUmVjaXBlUHJpY2UpIHtcbiAgICAgIHRoaXMuc2VuZEVtaXRUb1VwZGF0ZVJlY2lwZVByaWNlKCk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdGhlIHJlY2lwZSBpcyBpbiB0aGUgYmFza2V0LCBpZiBub3QsIHN0b3AgdGhlIGxvYWRpbmcsIGlmIHllcywgbG9hZGluZyBpcyBzdG9wcGVkIG9uIHRoZSBiYXNrZXRQcmV2aWV3IGxpc3RlbmVyXG4gICAgdGhpcy5iYXNrZXRzU2VydmljZS5yZWNpcGVJc0luQmFza2V0KHRoaXMucmVjaXBlLmlkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShpbkJhc2tldCA9PiB7XG4gICAgICBpZiAoIWluQmFza2V0KSB7XG4gICAgICAgIHRoaXMudXBkYXRlSW5ncmVkaWVudEZyb21CYXNrZXRMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5ncmVkaWVudFRvQmFza2V0TG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiYXNrZXRFbnRyeUZvckluZ3JlZGllbnQoaW5ncmVkaWVudDogSW5ncmVkaWVudCk6IEJhc2tldEVudHJ5IHtcbiAgICByZXR1cm4gdGhpcy5wcm9kdWN0cy5maW5kKHAgPT4gcC5pbmdyZWRpZW50LmlkID09PSBpbmdyZWRpZW50LmlkKS5iYXNrZXRFbnRyeTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gdGhlIGJhc2tldCBwcmV2aWV3IGFuZCB1cGRhdGVzIHRoZSBwcm9kdWN0cycgYmFza2V0IGVudHJ5IGJhc2VkIG9uIHRoZSBwcm92aWRlZCByZWNpcGUgSUQuXG4gICAqL1xuICBwcml2YXRlIGxpc3RlbkJhc2tldFByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLl9iYXNrZXRQcmV2aWV3JC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICAgKGJhc2tldFByZXZpZXdMaW5lczogQmFza2V0UHJldmlld0xpbmVbXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGJhc2tldFByZXZpZXdMaW5lcykge1xuICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzRm9yUmVjaXBlID0gYmFza2V0UHJldmlld0xpbmVzLmZpbmQoYmFza2V0UHJldmlld0xpbmUgPT5cbiAgICAgICAgICAgICAgICBiYXNrZXRQcmV2aWV3TGluZS5pZCA9PT0gdGhpcy5yZWNpcGU/LmlkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChlbnRyaWVzRm9yUmVjaXBlPy5lbnRyaWVzPy5hbGw/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RzLmZvckVhY2gocHJvZHVjdCA9PiB7XG4gICAgICAgICAgICAgICAgICBwcm9kdWN0LmJhc2tldEVudHJ5ID1cbiAgICAgICAgICAgICAgICAgICAgZW50cmllc0ZvclJlY2lwZS5lbnRyaWVzLmFsbC5maW5kKGJhc2tldEVudHJ5ID0+IGJhc2tldEVudHJ5Lm5hbWUgPT09IHByb2R1Y3QuYmFza2V0RW50cnkubmFtZSkgPz8gcHJvZHVjdC5iYXNrZXRFbnRyeTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByb2R1Y3RzQnlDYXRlZ29yeSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbmdyZWRpZW50SWdub3JlZChwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaWdub3JlZEJhc2tldHNTZXJ2aWNlLmlzSW5ncmVkaWVudElnbm9yZWQocHJvZHVjdC5pbmdyZWRpZW50LmlkKSkge1xuICAgICAgcHJvZHVjdC5iYXNrZXRFbnRyeS5zdGF0dXMgPSAnaWdub3JlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYXRlZ29yaXplUHJvZHVjdHMoKTogdm9pZCB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcHJvZHVjdCBpbiB0aGUgZW50cmllc1dpdGhJbmdyZWRpZW50cyBhcnJheVxuICAgIHRoaXMucHJvZHVjdHMuZm9yRWFjaChwcm9kdWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgYmFza2V0RW50cnkgfSA9IHByb2R1Y3Q7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYmFza2V0RW50cnk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBwcm9kdWN0IGlzIGlnbm9yZWRcbiAgICAgIHRoaXMuaXNJbmdyZWRpZW50SWdub3JlZChwcm9kdWN0KTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlUHJvZHVjdFByaWNlKHByb2R1Y3QsIHRoaXMucHJpY2VTZXJ2aWNlLmdldFByaWNlRnJvbUJhc2tldEVudHJ5KGJhc2tldEVudHJ5KSk7XG4gICAgICB0aGlzLmNvcnJlY3RQcm9kdWN0U3RhdGUocHJvZHVjdCk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBwcm9kdWN0IGlzIG9mdGVuIGlnbm9yZWQgYmFzZWQgb24gYmFza2V0RW50cnlTdGF0dXNcbiAgICAgIGlmIChzdGF0dXMgPT09ICdvZnRlbl9kZWxldGVkJykge1xuICAgICAgICB0aGlzLnByb2R1Y3RzQnlDYXRlZ29yeS5vZnRlbklnbm9yZWRQcm9kdWN0cy5wdXNoKHByb2R1Y3QpO1xuICAgICAgfVxuICAgICAgLy8gQWRkIHRoZSBwcm9kdWN0IHRvIHRoZSB0b1BpY2tQcm9kdWN0cyBjYXRlZ29yeVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMucHJvZHVjdHNCeUNhdGVnb3J5LnRvUGlja1Byb2R1Y3RzLnB1c2gocHJvZHVjdCk7XG4gICAgICAgIHRoaXMudXBkYXRlUmVjaXBlUHJpY2UocHJvZHVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zZW5kRW1pdFRvVXBkYXRlUmVjaXBlUHJpY2UoKTtcbiAgICB0aGlzLnVwZGF0ZUluZ3JlZGllbnRGcm9tQmFza2V0TG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaW5ncmVkaWVudFRvQmFza2V0TG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMucHJvZHVjdHNCeUNhdGVnb3J5JC5uZXh0KHRoaXMucHJvZHVjdHNCeUNhdGVnb3J5KTtcbiAgfVxuXG4gIHByaXZhdGUgY29ycmVjdFByb2R1Y3RTdGF0ZShwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgaWYgKCFbJ29mdGVuX2RlbGV0ZWQnLCAnZGVsZXRlZCcsICdpZ25vcmVkJ10uaW5jbHVkZXMocHJvZHVjdC5iYXNrZXRFbnRyeS5zdGF0dXMpKSB7XG4gICAgICBjb25zdCB7IGlkLCBzZWxlY3RlZEl0ZW0sIHJlY2lwZXNJZHMgfSA9IHByb2R1Y3QuYmFza2V0RW50cnk7XG4gICAgICBpZiAoaWQgPT09ICctMScpIHtcbiAgICAgICAgcHJvZHVjdC5iYXNrZXRFbnRyeS5zdGF0dXMgPSBzZWxlY3RlZEl0ZW0gPyAnaW5pdGlhbCcgOiAndW5hdmFpbGFibGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNSZWNpcGVBY3RpdmUgPSByZWNpcGVzSWRzLmluY2x1ZGVzKCt0aGlzLnJlY2lwZS5pZCk7XG4gICAgICAgIHByb2R1Y3QuYmFza2V0RW50cnkuc3RhdHVzID0gaXNSZWNpcGVBY3RpdmUgPyAnYWN0aXZlJyA6ICdpbml0aWFsJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
524
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWRldGFpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1pYW0vc3JjL2xpYi9fc2VydmljZXMvcmVjaXBlLWRldGFpbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvRixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRXhHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVks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LENBQUMsQ0FBQztJQUNMLENBQUM7O3dGQTNsQlUsb0JBQW9CLCtaQWdEckIsU0FBUzs0REFoRFIsb0JBQW9CLFdBQXBCLG9CQUFvQixtQkFGbkIsTUFBTTt1RkFFUCxvQkFBb0I7Y0FIaEMsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COztzQkFpREksTUFBTTt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIExPQ0FMRV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2tpcFdoaWxlLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYXNrZXRFbnRyeSwgQmFza2V0UHJldmlld0xpbmUsIEluZ3JlZGllbnQsIFJlY2lwZSB9IGZyb20gJy4uL19tb2RlbHMnO1xuaW1wb3J0IHsgQWRkUmVjaXBlQWN0aW9uIH0gZnJvbSAnLi4vX21vZGVscy9iYXNrZXQtYWN0aW9ucy9hZGQtcmVjaXBlLWFjdGlvbic7XG5pbXBvcnQgeyBSZW1vdmVJbmdyZWRpZW50QWN0aW9uIH0gZnJvbSAnLi4vX21vZGVscy9iYXNrZXQtYWN0aW9ucy9yZW1vdmUtaW5ncmVkaWVudC1hY3Rpb24nO1xuaW1wb3J0IHsgVXBkYXRlSW5ncmVkaWVudEFjdGlvbiB9IGZyb20gJy4uL19tb2RlbHMvYmFza2V0LWFjdGlvbnMvdXBkYXRlLWluZ3JlZGllbnQtYWN0aW9uJztcbmltcG9ydCB7IFVwZGF0ZVJlY2lwZUZyb21HdWVzdEFjdGlvbiB9IGZyb20gJy4uL19tb2RlbHMvYmFza2V0LWFjdGlvbnMvdXBkYXRlLXJlY2lwZS1mcm9tLWd1ZXN0LWFjdGlvbic7XG5pbXBvcnQgeyBFdmVudFRyYWNlIH0gZnJvbSAnLi4vX3R5cGVzL2V2ZW50LXRyYWNlJztcbmltcG9ydCB7IGRlZXBDbG9uZVdpdGhDbGFzcyB9IGZyb20gJy4uL191dGlscy9tZXRob2RzL2RlZXBDbG9uZSc7XG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBCYXNrZXRzU3luY2hyb25pemVyU2VydmljZSB9IGZyb20gJy4vYmFza2V0cy1zeW5jaHJvbml6aW5nJztcbmltcG9ydCB7IEJhc2tldHNTZXJ2aWNlIH0gZnJvbSAnLi9iYXNrZXRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBJZ25vcmVkSW5ncmVkaWVudHNTZXJ2aWNlIH0gZnJvbSAnLi9pZ25vcmVkLWluZ3JlZGllbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSXRlbXNTZXJ2aWNlIH0gZnJvbSAnLi9pdGVtcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBhcnNlZE1ldGhvZCwgUGVuZGluZ0Jhc2tldE1ldGhvZHNTZXJ2aWNlIH0gZnJvbSAnLi9wZW5kaW5nLWJhc2tldC1tZXRob2RzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9pbnRPZlNhbGVzU2VydmljZSB9IGZyb20gJy4vcG9pbnQtb2Ytc2FsZXMuc2VydmljZSc7XG5pbXBvcnQgeyBQcmljZVNlcnZpY2UsIFByb2R1Y3RQcmljZSB9IGZyb20gJy4vcHJpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBSZWNpcGVzU2VydmljZSB9IGZyb20gJy4vcmVjaXBlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JlT3V0T2ZTdG9ja1NlcnZpY2UgfSBmcm9tICcuL3N0b3JlLW91dC1vZi1zdG9jay5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0IHtcbiAgaW5ncmVkaWVudDogSW5ncmVkaWVudDtcbiAgYmFza2V0RW50cnk6IEJhc2tldEVudHJ5O1xuICBwcmljZTogUHJvZHVjdFByaWNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RDYXRlZ29yeSB7XG4gIHRvUGlja1Byb2R1Y3RzOiBQcm9kdWN0W107XG4gIG9mdGVuSWdub3JlZFByb2R1Y3RzOiBQcm9kdWN0W107XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFJlY2lwZURldGFpbHNTZXJ2aWNlIHtcblxuICBwcm9kdWN0c0J5Q2F0ZWdvcnk6IFByb2R1Y3RDYXRlZ29yeSA9IHtcbiAgICB0b1BpY2tQcm9kdWN0czogW10sXG4gICAgb2Z0ZW5JZ25vcmVkUHJvZHVjdHM6IFtdXG4gIH07XG4gIHByb2R1Y3RzOiBQcm9kdWN0W10gPSBbXTtcbiAgcmVjaXBlOiBSZWNpcGU7XG4gIHRvdGFsUHJvZHVjdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBhbGxJbmdyZWRpZW50c1RvQmFza2V0TG9hZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpbmdyZWRpZW50VG9CYXNrZXRMb2FkaW5nJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHVwZGF0ZUluZ3JlZGllbnRGcm9tQmFza2V0TG9hZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm9kdWN0c0xvYWRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVjaXBlTG9hZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBiYXNrZXRFbnRyeVRvUmVwbGFjZSQ6IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgaW5ncmVkaWVudDogSW5ncmVkaWVudDtcbiAgICBiYXNrZXRFbnRyeTogQmFza2V0RW50cnk7XG4gICAgaWdub3JlU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIH0+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgaW5ncmVkaWVudDogSW5ncmVkaWVudDtcbiAgICBiYXNrZXRFbnRyeTogQmFza2V0RW50cnk7XG4gICAgaWdub3JlU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIH0+KG51bGwpO1xuICB1cGRhdGVGb290ZXJEaXNwbGF5JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIGhhc1JlcGxhY2VkOiBib29sZWFuO1xuICBwYWdldmlld0V2ZW50V2FzU2VudCA9IGZhbHNlO1xuICBvbmx5U2hvd1ByZXBhcmF0aW9uID0gZmFsc2U7XG4gIG5vUG9zRGlzcGxheSA9IGZhbHNlO1xuICBpbnZhbGlkUG9zRGlzcGxheSA9IGZhbHNlO1xuXG4gIHByb2R1Y3RzQnlDYXRlZ29yeSQ6IEJlaGF2aW9yU3ViamVjdDxQcm9kdWN0Q2F0ZWdvcnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9kdWN0Q2F0ZWdvcnk+KHRoaXMucHJvZHVjdHNCeUNhdGVnb3J5KTtcbiAgcHJvZHVjdHMkOiBCZWhhdmlvclN1YmplY3Q8UHJvZHVjdFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJvZHVjdFtdPih0aGlzLnByb2R1Y3RzKTtcbiAgcmVjaXBlUHJpY2U6IHsgcmVtYWluaW5nOiBudW1iZXI7IGluQmFza2V0OiBudW1iZXIgfSA9IHsgcmVtYWluaW5nOiAwLCBpbkJhc2tldDogMCB9O1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYXNrZXRzU2VydmljZTogQmFza2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNpcGVTZXJ2aWNlOiBSZWNpcGVzU2VydmljZSxcbiAgICBwcml2YXRlIGlnbm9yZWRCYXNrZXRzU2VydmljZTogSWdub3JlZEluZ3JlZGllbnRzU2VydmljZSxcbiAgICBwcml2YXRlIHBlbmRpbmdCYXNrZXRNZXRob2RzU2VydmljZTogUGVuZGluZ0Jhc2tldE1ldGhvZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9zU2VydmljZTogUG9pbnRPZlNhbGVzU2VydmljZSxcbiAgICBwcml2YXRlIGl0ZW1zU2VydmljZTogSXRlbXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFza2V0U3luY2hyb1NlcnZpY2U6IEJhc2tldHNTeW5jaHJvbml6ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJpY2VTZXJ2aWNlOiBQcmljZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZU91dE9mU3RvY2tTZXJ2aWNlOiBTdG9yZU91dE9mU3RvY2tTZXJ2aWNlLFxuICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwdWJsaWMgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmluaXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLmxpc3RlbkJhc2tldFByZXZpZXcoKTtcbiAgICB0aGlzLnJlc2V0T25IaWRlKCk7XG4gICAgdGhpcy5leGVjdXRlQWN0aW9uRnJvbVN0b3JhZ2UoKTtcbiAgfVxuXG5cbiAgZ2V0IHJlbWFpbmluZ0Jhc2tldEVudHJpZXMoKTogQmFza2V0RW50cnlbXSB7XG4gICAgaWYgKCF0aGlzLnJlY2lwZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9kdWN0cy5yZWR1Y2UoKHJlc3VsdDogQmFza2V0RW50cnlbXSwgcHJvZHVjdDogUHJvZHVjdCkgPT4ge1xuICAgICAgaWYgKHByb2R1Y3QuYmFza2V0RW50cnkuc3RhdHVzID09PSAnaW5pdGlhbCcgJiYgIXByb2R1Y3QuYmFza2V0RW50cnkucmVjaXBlc0lkcy5pbmNsdWRlcyh0aGlzLnJlY2lwZS5pZCkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocHJvZHVjdC5iYXNrZXRFbnRyeSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIGdldCBoYXNBZGRlZEFQcm9kdWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb2R1Y3RzLnNvbWUocCA9PiBwLmJhc2tldEVudHJ5LnN0YXR1cyA9PT0gJ2FjdGl2ZScpO1xuICB9XG5cbiAgZ2V0IGlzU3BvbnNvcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlY2lwZT8uc3BvbnNvcnM/Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgY29udGFpbnNBbGNvaG9sKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLnJlY2lwZT8ucmVsYXRpb25zaGlwcy50YWdzPy5kYXRhIHx8IFtdO1xuICAgIHJldHVybiB0YWdzLnNvbWUodGFnID0+IHRhZy5pZCA9PT0gJ2luZ3JlZGllbnRfY2F0ZWdvcnlfYWxjb29sJyk7XG4gIH1cblxuICBnZXQgb3JkZXJIaXN0b3J5RGF0ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9yZGVySGlzdG9yeSA9IHRoaXMucmVjaXBlLm9yZGVySGlzdG9yeTtcbiAgICBpZiAoIW9yZGVySGlzdG9yeSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZERhdGUgPSBuZXcgRGF0ZShvcmRlckhpc3RvcnkpO1xuICAgIHJldHVybiBmb3JtYXREYXRlKHBhcnNlZERhdGUsICdzaG9ydERhdGUnLCB0aGlzLmxvY2FsZSk7XG4gIH1cblxuICBzZXQgYmFza2V0RW50cnlUb1JlcGxhY2UodG9SZXBsYWNlOiB7IGluZ3JlZGllbnQ6IEluZ3JlZGllbnQ7IGJhc2tldEVudHJ5OiBCYXNrZXRFbnRyeTsgaWdub3JlU2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuYmFza2V0RW50cnlUb1JlcGxhY2UkLm5leHQodG9SZXBsYWNlKTtcbiAgfVxuXG4gIHNldCBwcm9kdWN0c0xvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5wcm9kdWN0c0xvYWRpbmckLm5leHQoaXNMb2FkaW5nKTtcbiAgfVxuXG4gIHNldCByZWNpcGVMb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMucmVjaXBlTG9hZGluZyQubmV4dChpc0xvYWRpbmcpO1xuICB9XG5cbiAgc2V0IGluZ3JlZGllbnRUb0Jhc2tldExvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5pbmdyZWRpZW50VG9CYXNrZXRMb2FkaW5nJC5uZXh0KGlzTG9hZGluZyk7XG4gIH1cblxuICBzZXQgYWxsSW5ncmVkaWVudHNUb0Jhc2tldExvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5hbGxJbmdyZWRpZW50c1RvQmFza2V0TG9hZGluZyQubmV4dChpc0xvYWRpbmcpO1xuICB9XG5cbiAgc2V0IHVwZGF0ZUluZ3JlZGllbnRGcm9tQmFza2V0TG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnVwZGF0ZUluZ3JlZGllbnRGcm9tQmFza2V0TG9hZGluZyQubmV4dChpc0xvYWRpbmcpO1xuICB9XG5cbiAgaW5pdERlZmF1bHRTdGF0ZSh3aXRoTG9hZGluZyA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5ub1Bvc0Rpc3BsYXkgPSBmYWxzZTtcbiAgICB0aGlzLmludmFsaWRQb3NEaXNwbGF5ID0gZmFsc2U7XG4gICAgdGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkgPSB7XG4gICAgICB0b1BpY2tQcm9kdWN0czogW10sXG4gICAgICBvZnRlbklnbm9yZWRQcm9kdWN0czogW11cbiAgICB9O1xuICAgIHRoaXMucHJvZHVjdHMgPSBbXTtcbiAgICB0aGlzLnJlY2lwZVByaWNlID0ge1xuICAgICAgcmVtYWluaW5nOiAwLFxuICAgICAgaW5CYXNrZXQ6IDBcbiAgICB9O1xuICAgIHRoaXMudG90YWxQcm9kdWN0cyQubmV4dCgwKTtcbiAgICB0aGlzLmFsbEluZ3JlZGllbnRzVG9CYXNrZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmluZ3JlZGllbnRUb0Jhc2tldExvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlSW5ncmVkaWVudEZyb21CYXNrZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLnByb2R1Y3RzTG9hZGluZyQubmV4dCh3aXRoTG9hZGluZyk7XG4gICAgdGhpcy5yZWNpcGVMb2FkaW5nJC5uZXh0KHdpdGhMb2FkaW5nKTtcbiAgICB0aGlzLmJhc2tldEVudHJ5VG9SZXBsYWNlJC5uZXh0KG51bGwpO1xuICAgIHRoaXMucHJvZHVjdHNCeUNhdGVnb3J5JC5uZXh0KHRoaXMucHJvZHVjdHNCeUNhdGVnb3J5KTtcbiAgICB0aGlzLnByb2R1Y3RzJC5uZXh0KHRoaXMucHJvZHVjdHMpO1xuICB9XG5cbiAgZXhlY3V0ZUFjdGlvbkZyb21TdG9yYWdlKCk6IHZvaWQge1xuICAgIHRoaXMucHJvZHVjdHNCeUNhdGVnb3J5JC5waXBlKFxuICAgICAgc2tpcFdoaWxlKHByb2R1Y3RzID0+IHByb2R1Y3RzLnRvUGlja1Byb2R1Y3RzLmxlbmd0aCA9PT0gMCksXG4gICAgICB0YWtlKDEpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucGVuZGluZ0Jhc2tldE1ldGhvZHNTZXJ2aWNlLnNob3VsZEV4ZWN1dGVCYXNrZXRNZXRob2QucGlwZShcbiAgICAgICAgc2tpcFdoaWxlKG1ldGhvZCA9PiAhbWV0aG9kKVxuICAgICAgKSlcbiAgICApLnN1YnNjcmliZShwYXJzZWRNZXRob2QgPT4ge1xuICAgICAgaWYgKHBhcnNlZE1ldGhvZC5tZXRob2QgPT09ICdhZGRSZWNpcGVUb0Jhc2tldCcpIHtcbiAgICAgICAgdGhpcy5yZWNpcGUubW9kaWZpZWRHdWVzdHMgPSBwYXJzZWRNZXRob2QuYXJndW1lbnRzLmd1ZXN0cyB8fCB0aGlzLnJlY2lwZS5tb2RpZmllZEd1ZXN0cztcbiAgICAgICAgdGhpcy5hZGRBbGxJbmdyZWRpZW50c1RvQmFza2V0KHBhcnNlZE1ldGhvZC5hcmd1bWVudHMuZXZlbnRUcmFjZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXNldE9uSGlkZSgpOiB2b2lkIHtcbiAgICBsZXQgcHJldmlvdXNSZWNpcGUgPSB0aGlzLnJlY2lwZTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMucmVjaXBlU2VydmljZS5kaXNwbGF5ZWRSZWNpcGUkLnN1YnNjcmliZSh0b0Rpc3BsYXkgPT4ge1xuICAgICAgICBpZiAodG9EaXNwbGF5Py5yZWNpcGUgJiYgdG9EaXNwbGF5LnJlY2lwZS5pZCAhPT0gcHJldmlvdXNSZWNpcGU/LmlkKSB7XG4gICAgICAgICAgcHJldmlvdXNSZWNpcGUgPSB0b0Rpc3BsYXkucmVjaXBlO1xuICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuY2hlY2tJZlBvc0lzSW5pdGlhbGl6ZWRBbmRWYWxpZCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBjaGVja0lmUG9zSXNJbml0aWFsaXplZEFuZFZhbGlkKCk6IHZvaWQge1xuICAgIHRoaXMucG9zU2VydmljZS5wb3NXYXNJbml0aWFsaXplZCgpLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgc3dpdGNoTWFwKGhhc1BvcyA9PiB7XG4gICAgICAgIHRoaXMubm9Qb3NEaXNwbGF5ID0gIWhhc1BvcztcbiAgICAgICAgaWYgKGhhc1Bvcykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBvc1NlcnZpY2UuaXNQb3NWYWxpZCgpLnBpcGUodGFrZSgxKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH0pXG4gICAgKS5zdWJzY3JpYmUoaXNWYWxpZCA9PiB7XG4gICAgICB0aGlzLmludmFsaWRQb3NEaXNwbGF5ID0gIXRoaXMubm9Qb3NEaXNwbGF5ICYmICFpc1ZhbGlkO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UHJvZHVjdHMoZnJvbUluaXQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmIChmcm9tSW5pdCkge1xuICAgICAgdGhpcy5wcm9kdWN0c0xvYWRpbmcgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmdldEluZ3JlZGllbnRzQmFza2V0RW50cmllcyhmcm9tSW5pdCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucHJvZHVjdHNMb2FkaW5nID0gZmFsc2U7XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHByb2R1Y3RzIGJ5IGNhdGVnb3J5LlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhdGVnb3JpemVzIHRoZSBwcm9kdWN0cyBiYXNlZCBvbiBjZXJ0YWluIGNyaXRlcmlhIGFuZFxuICAgKiBwb3B1bGF0ZXMgdGhlIFwicHJvZHVjdHNCeUNhdGVnb3J5XCIgb2JqZWN0IHdpdGggdGhlIGNhdGVnb3JpemVkIHByb2R1Y3RzLlxuICAgKiBUaGUgY2F0ZWdvcml6ZWQgcHJvZHVjdHMgYXJlIHRoZW4gZW1pdHRlZCB0aHJvdWdoIHRoZSBcInByb2R1Y3RzQnlDYXRlZ29yeSRcIlxuICAgKiBzdWJqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuXG4gICAqL1xuICBzZXRQcm9kdWN0c0J5Q2F0ZWdvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkgPSB7XG4gICAgICB0b1BpY2tQcm9kdWN0czogW10sXG4gICAgICBvZnRlbklnbm9yZWRQcm9kdWN0czogW11cbiAgICB9O1xuXG4gICAgdGhpcy5yZWNpcGVQcmljZSA9IHtcbiAgICAgIHJlbWFpbmluZzogMCxcbiAgICAgIGluQmFza2V0OiAwXG4gICAgfTtcbiAgICB0aGlzLmNhdGVnb3JpemVQcm9kdWN0cygpO1xuICB9XG5cbiAgY2FsY3VsYXRlUHJvZHVjdFByaWNlKHByb2R1Y3Q6IFByb2R1Y3QsIHByaWNlOiBQcm9kdWN0UHJpY2UpIHtcbiAgICBjb25zdCByYXdUb3RhbCA9IHByb2R1Y3QuYmFza2V0RW50cnkuc3RhdHVzID09PSAnYWN0aXZlJyA/XG4gICAgICAodGhpcy5wcmljZVNlcnZpY2UuZ2V0Q3VycmVudFByaWNlKHByaWNlKSAqIHByb2R1Y3QuYmFza2V0RW50cnkucXVhbnRpdHkpIDpcbiAgICAgICh0aGlzLnByaWNlU2VydmljZS5nZXRDdXJyZW50UHJpY2UocHJpY2UpICogcHJvZHVjdC5iYXNrZXRFbnRyeS5xdWFudGl0eVRvQWRkKTtcbiAgICBwcm9kdWN0LnByaWNlID0ge1xuICAgICAgdW5pdDogcHJpY2UudW5pdCxcbiAgICAgIHRvdGFsOiBNYXRoLnJvdW5kKHJhd1RvdGFsICogMTAwKSAvIDEwMCxcbiAgICAgIHByaWNlUGVyVW5pdDogcHJpY2UucHJpY2VQZXJVbml0LFxuICAgICAgdW5pdE9mTWVhc3VyZW1lbnQ6IHByaWNlLnVuaXRPZk1lYXN1cmVtZW50LFxuICAgICAgZGlzY291bnRlZFByaWNlOiBwcmljZS5kaXNjb3VudGVkUHJpY2UsXG4gICAgICBkaXNjb3VudEFtb3VudDogcHJpY2UuZGlzY291bnRBbW91bnQsXG4gICAgICBkaXNjb3VudFR5cGU6IHByaWNlLmRpc2NvdW50VHlwZVxuICAgIH07XG4gIH1cblxuICBpc1Byb2R1Y3RzQnlDYXRlZ29yeVNldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkudG9QaWNrUHJvZHVjdHMubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkub2Z0ZW5JZ25vcmVkUHJvZHVjdHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGVudHJpZXMgb2YgdGhlIGluZ3JlZGllbnRzIGJhc2tldC5cbiAgICpcbiAgICogQHJldHVybiBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHByb2R1Y3RzIGluIHRoZSBiYXNrZXQuXG4gICAqL1xuICBnZXRJbmdyZWRpZW50c0Jhc2tldEVudHJpZXMoZnJvbUluaXQgPSBmYWxzZSk6IE9ic2VydmFibGU8UHJvZHVjdFtdPiB7XG4gICAgaWYgKCF0aGlzLnJlY2lwZSkge1xuICAgICAgcmV0dXJuIG9mKFtdIGFzIFByb2R1Y3RbXSk7XG4gICAgfVxuXG4gICAgaWYgKCFmcm9tSW5pdCkge1xuICAgICAgdGhpcy5pbmdyZWRpZW50VG9CYXNrZXRMb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNrZXRFbnRyaWVzJCA9IHRoaXMucmVjaXBlLmluZ3JlZGllbnRzLm1hcCgoaW5ncmVkaWVudDogSW5ncmVkaWVudCkgPT5cbiAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2UuYmFza2V0RW50cnlGcm9tSW5ncmVkaWVudChpbmdyZWRpZW50LmlkLCB0aGlzLnJlY2lwZS5tb2RpZmllZEd1ZXN0cywgIWZyb21Jbml0KS5waXBlKFxuICAgICAgICBtYXAoYmFza2V0RW50cnkgPT4gKHsgaW5ncmVkaWVudCwgYmFza2V0RW50cnkgfSkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiBmb3JrSm9pbihiYXNrZXRFbnRyaWVzJCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoYmFza2V0RW50cmllc1Jlc3VsdDogUHJvZHVjdFtdKSA9PiB7XG4gICAgICAgIGlmIChmcm9tSW5pdCkge1xuICAgICAgICAgIHRoaXMucHJvZHVjdHMgPSBiYXNrZXRFbnRyaWVzUmVzdWx0O1xuICAgICAgICAgIHRoaXMuc2V0UHJvZHVjdHNCeUNhdGVnb3J5KCk7XG4gICAgICAgICAgcmV0dXJuIG9mPFByb2R1Y3RbXT4oW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBkYXRlUHJpY2VPbkd1ZXN0Q2hhbmdlKGJhc2tldEVudHJpZXNSZXN1bHQpO1xuICAgICAgICAgIHJldHVybiBvZih0aGlzLnByb2R1Y3RzKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodGhpcy5wcm9kdWN0cykpXG4gICAgKTtcbiAgfVxuXG4gIGluZ3JlZGllbnRSZW1vdmVkKGluZ3JlZGllbnQ6IEluZ3JlZGllbnQsIGV2ZW50VHJhY2U6IEV2ZW50VHJhY2UpOiB2b2lkIHtcbiAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLnJlY2lwZUlzSW5CYXNrZXQodGhpcy5yZWNpcGUuaWQpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGluQmFza2V0ID0+IHtcbiAgICAgIGNvbnN0IGluZ3JlZGllbnRUb0Jhc2tldEVudHJ5ID0gdGhpcy5iYXNrZXRFbnRyeUZvckluZ3JlZGllbnQoaW5ncmVkaWVudCk7XG4gICAgICBjb25zdCBkZWxldGVkQmFza2V0RW50cnk6IEJhc2tldEVudHJ5ID0gZGVlcENsb25lV2l0aENsYXNzKGluZ3JlZGllbnRUb0Jhc2tldEVudHJ5KTtcbiAgICAgIGRlbGV0ZWRCYXNrZXRFbnRyeS5xdWFudGl0eSA9IDA7XG4gICAgICBpZiAoIWluQmFza2V0KSB7XG4gICAgICAgIC8qIFRPRE8gYWRkIHRvIGxvY2FsU3RvcmFnZSAqL1xuICAgICAgICAvLyB0aGlzLnJlbW92ZWRJbmdyZWRpZW50cy5wdXNoKGluZ3JlZGllbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlSW5ncmVkaWVudCA9IG5ldyBSZW1vdmVJbmdyZWRpZW50QWN0aW9uKFxuICAgICAgICAgIGRlbGV0ZWRCYXNrZXRFbnRyeSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWNpcGVJZDogdGhpcy5yZWNpcGUuaWQsXG4gICAgICAgICAgICBpbmdyZWRpZW50SWQ6IGluZ3JlZGllbnQuaWQsXG4gICAgICAgICAgICBldmVudFRyYWNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLFxuICAgICAgICApO1xuICAgICAgICBtZXJnZShyZW1vdmVJbmdyZWRpZW50Lm9uVGltZW91dCwgcmVtb3ZlSW5ncmVkaWVudC5vbkVycm9yKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVJbmdyZWRpZW50RnJvbUJhc2tldExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmdldFByb2R1Y3RzKHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYXNrZXRTeW5jaHJvU2VydmljZS5hZGRUb0FjdGlvbkxpc3QoXG4gICAgICAgICAgW3JlbW92ZUluZ3JlZGllbnRdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVQcm9kdWN0UXVhbnRpdHkoYmFza2V0RW50cnk6IEJhc2tldEVudHJ5LCBuZXdRdWFudGl0eTogbnVtYmVyLCBldmVudFRyYWNlOiBFdmVudFRyYWNlKTogdm9pZCB7XG4gICAgY29uc3QgbmV3QmFza2V0RW50cnk6IEJhc2tldEVudHJ5ID0gZGVlcENsb25lV2l0aENsYXNzKGJhc2tldEVudHJ5KTtcbiAgICBuZXdCYXNrZXRFbnRyeS5xdWFudGl0eSA9IG5ld1F1YW50aXR5O1xuICAgIGNvbnN0IHVwZGF0ZVF1YW50aXR5ID0gbmV3IFVwZGF0ZUluZ3JlZGllbnRBY3Rpb24oXG4gICAgICBuZXdCYXNrZXRFbnRyeSxcbiAgICAgIHtcbiAgICAgICAgZXZlbnRUcmFjZSxcbiAgICAgICAgcmVjaXBlSWQ6IHRoaXMucmVjaXBlLmlkLFxuICAgICAgfSxcbiAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2VcbiAgICApO1xuICAgIG1lcmdlKHVwZGF0ZVF1YW50aXR5Lm9uVGltZW91dCwgdXBkYXRlUXVhbnRpdHkub25FcnJvcikucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVJbmdyZWRpZW50RnJvbUJhc2tldExvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ2V0UHJvZHVjdHModHJ1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5iYXNrZXRTeW5jaHJvU2VydmljZS5hZGRUb0FjdGlvbkxpc3QoXG4gICAgICBbdXBkYXRlUXVhbnRpdHldXG4gICAgKTtcbiAgfVxuXG4gIGFkZEFsbEluZ3JlZGllbnRzVG9CYXNrZXQoZXZlbnRUcmFjZTogRXZlbnRUcmFjZSk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jYW5BZGRQcm9kdWN0VG9CYXNrZXQoXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6ICdhZGRSZWNpcGVUb0Jhc2tldCcsXG4gICAgICAgICAgYXJndW1lbnRzOiB7XG4gICAgICAgICAgICByZWNpcGVJZDogdGhpcy5yZWNpcGUuaWQsIGd1ZXN0czogdGhpcy5yZWNpcGUubW9kaWZpZWRHdWVzdHMsIGV2ZW50VHJhY2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50VHJhY2VcbiAgICAgICkuc3Vic2NyaWJlKHBhc3NlZCA9PiB7XG4gICAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgICB0aGlzLmFsbEluZ3JlZGllbnRzVG9CYXNrZXRMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBwcm9kdWN0c1RvQWRkOiB7IGluZ3JlZGllbnRJZDogc3RyaW5nOyBlbnRyeTogQmFza2V0RW50cnkgfVtdID0gW107XG4gICAgICAgICAgdGhpcy5yZW1haW5pbmdQcm9kdWN0cygpLmZvckVhY2gocmUgPT5cbiAgICAgICAgICAgIHRoaXMuYmFza2V0U3luY2hyb1NlcnZpY2UuZW50cnlXaWxsQmVBZGRlZChyZS5lbnRyeS5zZWxlY3RlZEl0ZW0uZXh0SWQpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICBwcm9kdWN0c1RvQWRkLnB1c2gocmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgY29uc3QgYWRkUmVjaXBlcyA9IHByb2R1Y3RzVG9BZGQubWFwKHJlID0+IG5ldyBBZGRSZWNpcGVBY3Rpb24oXG4gICAgICAgICAgICByZS5lbnRyeSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVjaXBlSWQ6IHRoaXMucmVjaXBlLmlkLFxuICAgICAgICAgICAgICBpbmdyZWRpZW50SWQ6IHJlLmluZ3JlZGllbnRJZCxcbiAgICAgICAgICAgICAgZXZlbnRUcmFjZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlXG4gICAgICAgICAgKSk7XG4gICAgICAgICAgdGhpcy5iYXNrZXRTeW5jaHJvU2VydmljZS5hZGRUb0FjdGlvbkxpc3QoYWRkUmVjaXBlcyk7XG4gICAgICAgICAgY29uc3Qgb25UaW1lb3V0cyA9IGFkZFJlY2lwZXMubWFwKGFjdGlvbiA9PiBhY3Rpb24ub25UaW1lb3V0KTtcbiAgICAgICAgICBjb25zdCBvbkVycm9ycyA9IGFkZFJlY2lwZXMubWFwKGFjdGlvbiA9PiBhY3Rpb24ub25FcnJvcik7XG5cbiAgICAgICAgICBtZXJnZSguLi5vblRpbWVvdXRzLCAuLi5vbkVycm9ycylcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRQcm9kdWN0T3V0T2ZTdG9ja0luU2Vzc2lvbih0aGlzLnJlbWFpbmluZ1Byb2R1Y3RzKCkpO1xuICAgICAgICAgICAgICB0aGlzLmFsbEluZ3JlZGllbnRzVG9CYXNrZXRMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBwcm9kdWN0c1RvRW1pdCA9IHsgaW5ncmVkaWVudHNBZGRlZDogcHJvZHVjdHNUb0FkZC5sZW5ndGgsIGluZ3JlZGllbnRzVG90YWw6IHRoaXMucmVjaXBlLmluZ3JlZGllbnRzLmxlbmd0aCB9O1xuICAgICAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2UucHJvZHVjdHNXaWxsQmVBZGRlZCgpLnBpcGUoc2tpcFdoaWxlKHByb2R1Y3RzID0+IHByb2R1Y3RzID4gMCksIHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmFkZEFsbFByb2R1Y3RzV2FzQ2xpY2tlZC5lbWl0KHByb2R1Y3RzVG9FbWl0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gSWYgdGhlIHJlY2lwZSBpcyBhbHJlYWR5IGluIGJhc2tldCwgdXBkYXRlIHRoZSBudW1iZXIgb2YgZ3Vlc3RzICg9IGFwcGVuZCByZWNpcGUgdG8gbGlzdCBhZ2FpbilcbiAgdXBkYXRlR3Vlc3RzKGV2ZW50VHJhY2U6IEV2ZW50VHJhY2UpOiB2b2lkIHtcbiAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLnJlY2lwZUlzSW5CYXNrZXQodGhpcy5yZWNpcGUuaWQpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGluQmFza2V0ID0+IHtcbiAgICAgIC8vIHVwZGF0ZSBndWVzdCBudW1iZXJcbiAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2UudXBkYXRlUmVjaXBlc0luQmFza2V0KFt0aGlzLnJlY2lwZS5pZF0sIHRoaXMucmVjaXBlLm1vZGlmaWVkR3Vlc3RzLCBldmVudFRyYWNlLCB0cnVlKTtcbiAgICAgIHRoaXMuZ2V0SW5ncmVkaWVudHNCYXNrZXRFbnRyaWVzKGZhbHNlKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgocHJvZHVjdHM6IFByb2R1Y3RbXSkgPT4ge1xuICAgICAgICBpZiAoaW5CYXNrZXQpIHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVBY3Rpb25zID0gcHJvZHVjdHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgYmFza2V0RW50cnkgfSkgPT5cbiAgICAgICAgICAgICAgYmFza2V0RW50cnkuc3RhdHVzID09PSAnYWN0aXZlJyAmJlxuICAgICAgICAgICAgICBiYXNrZXRFbnRyeS5pZCAhPT0gJy0xJyAmJlxuICAgICAgICAgICAgICBiYXNrZXRFbnRyeS5yZWNpcGVzSWRzLmluY2x1ZGVzKCt0aGlzLnJlY2lwZS5pZCkpXG4gICAgICAgICAgICAubWFwKCh7IGJhc2tldEVudHJ5IH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3QmFza2V0RW50cnk6IEJhc2tldEVudHJ5ID0gZGVlcENsb25lV2l0aENsYXNzKGJhc2tldEVudHJ5KTsgLy8gQ2xvbmUgZm9yIGltbXV0YWJpbGl0eVxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVJlY2lwZUZyb21HdWVzdEFjdGlvbihcbiAgICAgICAgICAgICAgICBuZXdCYXNrZXRFbnRyeSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBldmVudFRyYWNlLFxuICAgICAgICAgICAgICAgICAgcmVjaXBlSWQ6IHRoaXMucmVjaXBlLmlkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNrZXRzU2VydmljZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDYWxsIGFkZFRvQWN0aW9uTGlzdCBvbmNlIHdpdGggdGhlIGFycmF5IG9mIGFjdGlvbnNcbiAgICAgICAgICB0aGlzLmJhc2tldFN5bmNocm9TZXJ2aWNlLmFkZFRvQWN0aW9uTGlzdCh1cGRhdGVBY3Rpb25zKTtcblxuICAgICAgICAgIC8vIEhhbmRsZSB0aW1lb3V0cyBhbmQgZXJyb3JzXG4gICAgICAgICAgbWVyZ2UoLi4udXBkYXRlQWN0aW9ucy5tYXAoYWN0aW9uID0+IGFjdGlvbi5vblRpbWVvdXQpLCAuLi51cGRhdGVBY3Rpb25zLm1hcChhY3Rpb24gPT4gYWN0aW9uLm9uRXJyb3IpKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUluZ3JlZGllbnRGcm9tQmFza2V0TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmdldFByb2R1Y3RzKHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLnNlbmRFdmVudCgncmVjaXBlLmNoYW5nZS1ndWVzdHMnLCBldmVudFRyYWNlLm9yaWdpblBhdGgsIHsgcmVjaXBlX2lkOiB0aGlzLnJlY2lwZS5pZCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5ndWVzdHNDaGFuZ2VkLmVtaXQoeyBndWVzdHM6IHRoaXMucmVjaXBlLm1vZGlmaWVkR3Vlc3RzLCByZWNpcGVJZDogdGhpcy5yZWNpcGUuaWQgfSk7XG4gICAgdGhpcy5yZWNpcGVTZXJ2aWNlLmRpc3BsYXllZFJlY2lwZUNoYW5nZWQkLm5leHQoKTtcbiAgfVxuXG4gIHJlcGxhY2VCYXNrZXRFbnRyeShiYXNrZXRFbnRyeTogQmFza2V0RW50cnksIGlnbm9yZVNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5iYXNrZXRFbnRyeVRvUmVwbGFjZSA9IHtcbiAgICAgIGluZ3JlZGllbnQ6IHRoaXMucHJvZHVjdHNbdGhpcy5wcm9kdWN0cy5maW5kSW5kZXgocCA9PiBwLmJhc2tldEVudHJ5Lm5hbWUgPT09IGJhc2tldEVudHJ5Lm5hbWUpXS5pbmdyZWRpZW50LFxuICAgICAgYmFza2V0RW50cnksXG4gICAgICBpZ25vcmVTZWxlY3RlZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgaG9va0NhbGxiYWNrIGJlZm9yZSBhZGRpbmcgYSBwcm9kdWN0IHRvIGJhc2tldCAmIGFkZHMgdGhlIHJlY2lwZXMgaWYgcHJvZHVjdHMgY2FuIGJlIGFkZGVkXG4gICAqIEBwYXJhbSBtZXRob2QgaXMgZWl0aGVyICdhZGRSZWNpcGVUb0Jhc2tldCcgb3IgJ2FkZEluZ3JlZGllbnRUb0Jhc2tldCcgd2l0aCBhcmd1bWVudHNcbiAgICogQHBhcmFtIGV2ZW50VHJhY2UgbmVlZGVkIHRvIGFkZCByZWNpcGUgdG8gYmFza2V0XG4gICAqIEByZXR1cm5zIFtpc2xvZ2dlZDogYm9vbGVhbiwgcG9zV2FzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4sIHJlY2lwZUlzSW5CYXNrZXQ6IGJvb2xlYW5dXG4gICAqL1xuICBjYW5BZGRQcm9kdWN0VG9CYXNrZXQobWV0aG9kOiBQYXJzZWRNZXRob2QsIGV2ZW50VHJhY2U6IEV2ZW50VHJhY2UpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5wZW5kaW5nQmFza2V0TWV0aG9kc1NlcnZpY2Uuc3RvcmVNZXRob2RJZkNhbGxiYWNrTmVlZGVkKG1ldGhvZCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChjYW5BZGQgPT5cbiAgICAgICAgdGhpcy5iYXNrZXRzU2VydmljZS5yZWNpcGVJc0luQmFza2V0KHRoaXMucmVjaXBlLmlkKS5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWFwKGlzSW5CYXNrZXQgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkFkZCAmJiAhaXNJbkJhc2tldCkge1xuICAgICAgICAgICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLmFkZFJlY2lwZXNUb0Jhc2tldChbdGhpcy5yZWNpcGUuaWRdLCB0aGlzLnJlY2lwZS5tb2RpZmllZEd1ZXN0cywgZXZlbnRUcmFjZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNhbkFkZDtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVJlY2lwZVByaWNlKHByb2R1Y3Q6IFByb2R1Y3QsIGlnbm9yZSA9IGZhbHNlKSB7XG4gICAgaWYgKGlnbm9yZSkge1xuICAgICAgdGhpcy5yZWNpcGVQcmljZS5yZW1haW5pbmcgPSB0aGlzLnJlY2lwZVByaWNlLnJlbWFpbmluZyAtICgrcHJvZHVjdC5wcmljZS50b3RhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVjaXBlUHJpY2UgPSB7XG4gICAgICAgIHJlbWFpbmluZzogdGhpcy5yZWNpcGVQcmljZS5yZW1haW5pbmcgKyAocHJvZHVjdC5iYXNrZXRFbnRyeS5zdGF0dXMgPT09ICdpbml0aWFsJyAmJiArcHJvZHVjdC5wcmljZS50b3RhbCksXG4gICAgICAgIGluQmFza2V0OiB0aGlzLnJlY2lwZVByaWNlLmluQmFza2V0ICsgKHByb2R1Y3QuYmFza2V0RW50cnkuc3RhdHVzID09PSAnYWN0aXZlJyAmJiArcHJvZHVjdC5wcmljZS50b3RhbClcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc2VuZEVtaXRUb1VwZGF0ZVJlY2lwZVByaWNlKCkge1xuICAgIGNvbnN0IHsgcmVtYWluaW5nLCBpbkJhc2tldCB9ID0gdGhpcy5yZWNpcGVQcmljZTtcblxuICAgIGlmIChpbkJhc2tldCAhPT0gMCkge1xuICAgICAgdGhpcy5iYXNrZXRzU2VydmljZS5yZWNpcGVzSW5CYXNrZXQkKCkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKHJlY2lwZXNJbkJhc2tldCA9PiB7XG4gICAgICAgICAgY29uc3QgcmVjaXBlUHJpY2luZyA9IHJlY2lwZXNJbkJhc2tldC5maW5kKHByaWNpbmcgPT4gcHJpY2luZy5pZCA9PT0gdGhpcy5yZWNpcGUuaWQpO1xuICAgICAgICAgIHJldHVybiByZWNpcGVQcmljaW5nID8gK3JlY2lwZVByaWNpbmcucHJpY2UgOiBpbkJhc2tldDtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKGluQmFza2V0UHJpY2UgPT4ge1xuICAgICAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlY2lwZVByaWNlQ2hhbmdlZC5lbWl0KHsgcmVtYWluaW5nLCBpbkJhc2tldDogaW5CYXNrZXRQcmljZSwgcmVjaXBlSWQ6IHRoaXMucmVjaXBlLmlkIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UucmVjaXBlUHJpY2VDaGFuZ2VkLmVtaXQoeyAuLi50aGlzLnJlY2lwZVByaWNlLCByZWNpcGVJZDogdGhpcy5yZWNpcGUuaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgdW5zdWJzY3JpYmUoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtYWluaW5nUHJvZHVjdHMoKTogeyBpbmdyZWRpZW50SWQ6IHN0cmluZzsgZW50cnk6IEJhc2tldEVudHJ5IH1bXSB7XG4gICAgcmV0dXJuIHRoaXMucmVtYWluaW5nQmFza2V0RW50cmllcy5yZWR1Y2UoKHJlc3VsdDogeyBpbmdyZWRpZW50SWQ6IHN0cmluZzsgZW50cnk6IEJhc2tldEVudHJ5IH1bXSwgYmU6IEJhc2tldEVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBwID0gdGhpcy5wcm9kdWN0cy5maW5kKHByb2R1Y3QgPT4gcHJvZHVjdC5iYXNrZXRFbnRyeS5uYW1lID09PSBiZS5uYW1lKTtcbiAgICAgIGlmIChwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHsgaW5ncmVkaWVudElkOiBwLmluZ3JlZGllbnQuaWQsIGVudHJ5OiBwLmJhc2tldEVudHJ5IH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVByaWNlT25HdWVzdENoYW5nZShiYXNrZXRFbnRyaWVzUmVzdWx0OiBQcm9kdWN0W10pIHtcbiAgICB0aGlzLnJlY2lwZVByaWNlID0ge1xuICAgICAgcmVtYWluaW5nOiAwLFxuICAgICAgaW5CYXNrZXQ6IDBcbiAgICB9O1xuICAgIGxldCByZWZyZXNoUmVjaXBlUHJpY2UgPSBmYWxzZTtcblxuICAgIGJhc2tldEVudHJpZXNSZXN1bHQuZm9yRWFjaCgocHJvZHVjdDogUHJvZHVjdCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFByb2R1Y3QgPSB0aGlzLnByb2R1Y3RzW2luZGV4XTtcblxuICAgICAgY3VycmVudFByb2R1Y3QuYmFza2V0RW50cnkucXVhbnRpdHkgPSBwcm9kdWN0LmJhc2tldEVudHJ5LnF1YW50aXR5O1xuICAgICAgY3VycmVudFByb2R1Y3QuYmFza2V0RW50cnkucXVhbnRpdHlUb0FkZCA9IHByb2R1Y3QuYmFza2V0RW50cnkucXVhbnRpdHlUb0FkZDtcbiAgICAgIGlmIChjdXJyZW50UHJvZHVjdC5wcmljZSkge1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVByb2R1Y3RQcmljZShjdXJyZW50UHJvZHVjdCwgY3VycmVudFByb2R1Y3QucHJpY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoWydpbml0aWFsJywgJ2FjdGl2ZSddLmluY2x1ZGVzKGN1cnJlbnRQcm9kdWN0LmJhc2tldEVudHJ5LnN0YXR1cykpIHtcbiAgICAgICAgdGhpcy51cGRhdGVSZWNpcGVQcmljZShjdXJyZW50UHJvZHVjdCk7XG4gICAgICAgIHJlZnJlc2hSZWNpcGVQcmljZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocmVmcmVzaFJlY2lwZVByaWNlKSB7XG4gICAgICB0aGlzLnNlbmRFbWl0VG9VcGRhdGVSZWNpcGVQcmljZSgpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSByZWNpcGUgaXMgaW4gdGhlIGJhc2tldCwgaWYgbm90LCBzdG9wIHRoZSBsb2FkaW5nLCBpZiB5ZXMsIGxvYWRpbmcgaXMgc3RvcHBlZCBvbiB0aGUgYmFza2V0UHJldmlldyBsaXN0ZW5lclxuICAgIHRoaXMuYmFza2V0c1NlcnZpY2UucmVjaXBlSXNJbkJhc2tldCh0aGlzLnJlY2lwZS5pZCkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoaW5CYXNrZXQgPT4ge1xuICAgICAgaWYgKCFpbkJhc2tldCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUluZ3JlZGllbnRGcm9tQmFza2V0TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluZ3JlZGllbnRUb0Jhc2tldExvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYmFza2V0RW50cnlGb3JJbmdyZWRpZW50KGluZ3JlZGllbnQ6IEluZ3JlZGllbnQpOiBCYXNrZXRFbnRyeSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZHVjdHMuZmluZChwID0+IHAuaW5ncmVkaWVudC5pZCA9PT0gaW5ncmVkaWVudC5pZCkuYmFza2V0RW50cnk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIHRvIHRoZSBiYXNrZXQgcHJldmlldyBhbmQgdXBkYXRlcyB0aGUgcHJvZHVjdHMnIGJhc2tldCBlbnRyeSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcmVjaXBlIElELlxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5CYXNrZXRQcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5iYXNrZXRzU2VydmljZS5fYmFza2V0UHJldmlldyQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgIChiYXNrZXRQcmV2aWV3TGluZXM6IEJhc2tldFByZXZpZXdMaW5lW10pID0+IHtcbiAgICAgICAgICAgIGlmIChiYXNrZXRQcmV2aWV3TGluZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cmllc0ZvclJlY2lwZSA9IGJhc2tldFByZXZpZXdMaW5lcy5maW5kKGJhc2tldFByZXZpZXdMaW5lID0+XG4gICAgICAgICAgICAgICAgYmFza2V0UHJldmlld0xpbmUuaWQgPT09IHRoaXMucmVjaXBlPy5pZFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoZW50cmllc0ZvclJlY2lwZT8uZW50cmllcz8uYWxsPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0cy5mb3JFYWNoKHByb2R1Y3QgPT4ge1xuICAgICAgICAgICAgICAgICAgcHJvZHVjdC5iYXNrZXRFbnRyeSA9XG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXNGb3JSZWNpcGUuZW50cmllcy5hbGwuZmluZChiYXNrZXRFbnRyeSA9PiBiYXNrZXRFbnRyeS5uYW1lID09PSBwcm9kdWN0LmJhc2tldEVudHJ5Lm5hbWUpID8/IHByb2R1Y3QuYmFza2V0RW50cnk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9kdWN0c0J5Q2F0ZWdvcnkoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKS5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5ncmVkaWVudElnbm9yZWQocHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlnbm9yZWRCYXNrZXRzU2VydmljZS5pc0luZ3JlZGllbnRJZ25vcmVkKHByb2R1Y3QuaW5ncmVkaWVudC5pZCkpIHtcbiAgICAgIHByb2R1Y3QuYmFza2V0RW50cnkuc3RhdHVzID0gJ2lnbm9yZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2F0ZWdvcml6ZVByb2R1Y3RzKCk6IHZvaWQge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHByb2R1Y3QgaW4gdGhlIGVudHJpZXNXaXRoSW5ncmVkaWVudHMgYXJyYXlcbiAgICB0aGlzLnByb2R1Y3RzLmZvckVhY2gocHJvZHVjdCA9PiB7XG4gICAgICBjb25zdCB7IGJhc2tldEVudHJ5IH0gPSBwcm9kdWN0O1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGJhc2tldEVudHJ5O1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgcHJvZHVjdCBpcyBpZ25vcmVkXG4gICAgICB0aGlzLmlzSW5ncmVkaWVudElnbm9yZWQocHJvZHVjdCk7XG4gICAgICBpZiAodGhpcy5zdG9yZU91dE9mU3RvY2tTZXJ2aWNlLmlzT3V0T2ZTdG9ja0Zyb21TdG9yYWdlKGJhc2tldEVudHJ5KSkge1xuICAgICAgICBwcm9kdWN0LmJhc2tldEVudHJ5LnN0YXR1cyA9ICdvdXRfb2Zfc3RvY2snO1xuICAgICAgfVxuICAgICAgdGhpcy5jYWxjdWxhdGVQcm9kdWN0UHJpY2UocHJvZHVjdCwgdGhpcy5wcmljZVNlcnZpY2UuZ2V0UHJpY2VGcm9tQmFza2V0RW50cnkoYmFza2V0RW50cnkpKTtcbiAgICAgIHRoaXMuY29ycmVjdFByb2R1Y3RTdGF0ZShwcm9kdWN0KTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHByb2R1Y3QgaXMgb2Z0ZW4gaWdub3JlZCBiYXNlZCBvbiBiYXNrZXRFbnRyeVN0YXR1c1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ29mdGVuX2RlbGV0ZWQnKSB7XG4gICAgICAgIHRoaXMucHJvZHVjdHNCeUNhdGVnb3J5Lm9mdGVuSWdub3JlZFByb2R1Y3RzLnB1c2gocHJvZHVjdCk7XG4gICAgICB9XG4gICAgICAvLyBBZGQgdGhlIHByb2R1Y3QgdG8gdGhlIHRvUGlja1Byb2R1Y3RzIGNhdGVnb3J5XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkudG9QaWNrUHJvZHVjdHMucHVzaChwcm9kdWN0KTtcbiAgICAgICAgdGhpcy51cGRhdGVSZWNpcGVQcmljZShwcm9kdWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNlbmRFbWl0VG9VcGRhdGVSZWNpcGVQcmljZSgpO1xuICAgIHRoaXMudXBkYXRlSW5ncmVkaWVudEZyb21CYXNrZXRMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pbmdyZWRpZW50VG9CYXNrZXRMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkkLm5leHQodGhpcy5wcm9kdWN0c0J5Q2F0ZWdvcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3JyZWN0UHJvZHVjdFN0YXRlKHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBpZiAoIVsnb2Z0ZW5fZGVsZXRlZCcsICdkZWxldGVkJywgJ2lnbm9yZWQnLCAnb3V0X29mX3N0b2NrJ10uaW5jbHVkZXMocHJvZHVjdC5iYXNrZXRFbnRyeS5zdGF0dXMpKSB7XG4gICAgICBjb25zdCB7IGlkLCBzZWxlY3RlZEl0ZW0sIHJlY2lwZXNJZHMgfSA9IHByb2R1Y3QuYmFza2V0RW50cnk7XG4gICAgICBpZiAoaWQgPT09ICctMScpIHtcbiAgICAgICAgcHJvZHVjdC5iYXNrZXRFbnRyeS5zdGF0dXMgPSBzZWxlY3RlZEl0ZW0gPyAnaW5pdGlhbCcgOiAndW5hdmFpbGFibGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNSZWNpcGVBY3RpdmUgPSByZWNpcGVzSWRzLmluY2x1ZGVzKCt0aGlzLnJlY2lwZS5pZCk7XG4gICAgICAgIHByb2R1Y3QuYmFza2V0RW50cnkuc3RhdHVzID0gaXNSZWNpcGVBY3RpdmUgPyAnYWN0aXZlJyA6ICdpbml0aWFsJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRQcm9kdWN0T3V0T2ZTdG9ja0luU2Vzc2lvbihwcm9kdWN0czogeyBpbmdyZWRpZW50SWQ6IHN0cmluZzsgZW50cnk6IEJhc2tldEVudHJ5IH1bXSk6IHZvaWQge1xuICAgIHByb2R1Y3RzLmZvckVhY2goKHsgZW50cnkgfSkgPT4ge1xuICAgICAgZW50cnkuc3RhdHVzID0gJ291dF9vZl9zdG9jayc7XG4gICAgICB0aGlzLnN0b3JlT3V0T2ZTdG9ja1NlcnZpY2UuYWRkRW50cnlUb1N0b3JhZ2UoZW50cnkpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|