simpo-component-library 1.6.3 → 1.6.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -84,7 +84,7 @@ export class SmallProductListingComponent {
84
84
  return BUSINESS_CONSTANTS.CURRENCY;
85
85
  }
86
86
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: SmallProductListingComponent, deps: [{ token: i1.CartService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
87
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: SmallProductListingComponent, isStandalone: true, selector: "simpo-small-product-listing", inputs: { product: "product", data: "data", isScrollable: "isScrollable", isCategoryProductList: "isCategoryProductList" }, ngImport: i0, template: "<div class=\"product\" [ngClass]=\"{'width' : isScrollable, 'adjustHeightWidth': isCategoryProductList}\" [style.opacity]=\"product?.itemInventory?.openingStock == 0 ? 0.5 : 1\" (click)=\"goToProductDetail(product)\">\r\n <div class=\"prod-img\">\r\n <img [src]=\"product.itemImages?.[0]?.imgUrl\" alt=\"\">\r\n <div class=\"discount\" [style.backgroundColor]=\"data?.styles?.background?.color\" [simpoColor]=\"data?.styles?.background?.color\"\r\n *ngIf=\"getPercentage(product) > '0'\">{{getPercentage(product)}}% off</div>\r\n </div>\r\n <div class=\"p-2 h-40\">\r\n <span class=\"trim-text color\">{{product.name}}</span>\r\n <div class=\"bottom\">\r\n <span class=\"m-1\">\r\n <span class=\"discount-price color\"><span [innerHTML]=\"currency\"></span> {{product.price.discountedPrice}}</span>\r\n <span class=\"strike-through\"><span [innerHTML]=\"currency\"></span> {{product.price.sellingPrice}}</span>\r\n </span>\r\n <div class=\"add-to-cart\"\r\n [style.borderColor]=\"data.styles?.background?.accentColor\"\r\n [ngClass]=\"{'justify-content-between p-0 d-flex': product.quantity, 'justify-content-center': !product.quantity}\">\r\n <ng-container *ngIf=\"product?.itemInventory?.openingStock\">\r\n <ng-container *ngIf=\"!product.quantity\">\r\n <span (click)=\"addItemToCart(product, 'ADD')\" [style.color]=\"data.styles?.background?.accentColor\">Add to Cart</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"product.quantity\">\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart(product, 'SUBSTRACT')\" [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\" [style.color]=\"data.styles?.background?.accentColor\">-</span>\r\n <span class=\"quantity\" [style.color]=\"data.styles?.background?.accentColor\">{{product.quantity}}</span>\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart(product, 'ADD')\" [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\" [style.color]=\"data.styles?.background?.accentColor\">+</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!product?.itemInventory?.openingStock\">\r\n <span class=\"d-flex align-items-center justify-content-center w-100\">\r\n <mat-icon>notification_important</mat-icon>\r\n <span class=\"ml-2\">Notify</span>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #loadingScreen>\r\n <ngx-skeleton-loader *ngIf=\"filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '100%',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\" />\r\n</ng-template> -->\r\n", styles: [".product{position:relative;display:flex;flex-direction:column;cursor:pointer;margin-bottom:10px;border-radius:10px;overflow:hidden;height:350px;background-color:#fff}.product .prod-img{position:relative;height:55%;width:100%;overflow:hidden;border:1.8px solid;border-radius:10px;border-color:#e5e7eb}.product .prod-img img{height:100%;width:100%;object-fit:cover}.product img:hover{-webkit-animation:scale-up-center .2s linear both;animation:scale-up-center .2s linear both}.width{margin-right:10px;min-width:195px;max-width:195px}.styling{height:30px;width:30px;border-radius:50%;background-color:#fff;position:absolute;bottom:0;right:-12px}.strike-through{text-decoration:line-through;color:#d3d3d3;font-size:12px;margin-left:5px;position:relative}.add-to-cart{width:100%;cursor:pointer;background-color:#fff;border:1.5px solid transparent;border-radius:5px;padding:5px;text-align:center;align-items:center}.add-to-cart .quantity-btn{padding:5px}.discount{position:absolute;top:0;padding:5px;width:60px;text-align:center;font-size:12px;border-bottom-right-radius:3px}@media screen and (max-width: 475px){.width{max-width:160px;min-width:160px;height:300px}.adjustHeightWidth{max-width:145px;min-width:145px}}@-webkit-keyframes scale-up-center{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(1.08);transform:scale(1.08)}}@keyframes scale-up-center{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(1.08);transform:scale(1.08)}}.h-40{height:45%;position:relative}.bottom{position:absolute;bottom:10px;width:93%;display:flex;flex-direction:column}.discount-price{font-weight:600;font-size:14px}.color{color:#000}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: ColorDirective, selector: "[simpoColor]", inputs: ["simpoColor"] }] }); }
87
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: SmallProductListingComponent, isStandalone: true, selector: "simpo-small-product-listing", inputs: { product: "product", data: "data", isScrollable: "isScrollable", isCategoryProductList: "isCategoryProductList" }, ngImport: i0, template: "<div class=\"product\" [ngClass]=\"{'width' : isScrollable, 'adjustHeightWidth': isCategoryProductList}\" [style.opacity]=\"product?.itemInventory?.openingStock == 0 ? 0.5 : 1\" (click)=\"goToProductDetail(product)\">\r\n <div class=\"prod-img\">\r\n <img [src]=\"product.itemImages?.[0]?.imgUrl\" alt=\"\">\r\n <div class=\"discount\" [style.backgroundColor]=\"data?.styles?.background?.color\" [simpoColor]=\"data?.styles?.background?.color\"\r\n *ngIf=\"getPercentage(product) > '0'\">{{getPercentage(product)}}% off</div>\r\n </div>\r\n <div class=\"p-2 h-40\">\r\n <span class=\"trim-text color\">{{product.name}}</span>\r\n <div class=\"bottom\">\r\n <span class=\"m-1\">\r\n <span class=\"discount-price color\"><span [innerHTML]=\"currency\"></span> {{product.price.discountedPrice}}</span>\r\n <span class=\"strike-through\"><span [innerHTML]=\"currency\"></span> {{product.price.sellingPrice}}</span>\r\n </span>\r\n <div class=\"add-to-cart\"\r\n [style.borderColor]=\"data.styles?.background?.accentColor\"\r\n [ngClass]=\"{'justify-content-between p-0 d-flex': product.quantity, 'justify-content-center': !product.quantity}\">\r\n <ng-container *ngIf=\"product?.itemInventory?.openingStock\">\r\n <ng-container *ngIf=\"!product.quantity\">\r\n <span (click)=\"addItemToCart(product, 'ADD')\" [style.color]=\"data.styles?.background?.accentColor\">Add to Cart</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"product.quantity\">\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart(product, 'SUBSTRACT')\" [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\" [style.color]=\"data.styles?.background?.accentColor\">-</span>\r\n <span class=\"quantity\" [style.color]=\"data.styles?.background?.accentColor\">{{product.quantity}}</span>\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart(product, 'ADD')\" [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\" [style.color]=\"data.styles?.background?.accentColor\">+</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!product?.itemInventory?.openingStock\">\r\n <span class=\"d-flex align-items-center justify-content-center w-100\">\r\n <mat-icon>notification_important</mat-icon>\r\n <span class=\"ml-2\">Notify</span>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #loadingScreen>\r\n <ngx-skeleton-loader *ngIf=\"filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '100%',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\" />\r\n</ng-template> -->\r\n", styles: [".product{position:relative;display:flex;flex-direction:column;cursor:pointer;margin-bottom:10px;border-radius:10px;overflow:hidden;height:350px;background-color:#fff}.product .prod-img{position:relative;height:55%;width:100%;overflow:hidden;border:1.8px solid;border-radius:10px;border-color:#e5e7eb}.product .prod-img img{height:100%;width:100%;object-fit:cover}.product img:hover{-webkit-animation:scale-up-center .2s linear both;animation:scale-up-center .2s linear both}.width{margin-right:10px;min-width:195px;max-width:195px}.styling{height:30px;width:30px;border-radius:50%;background-color:#fff;position:absolute;bottom:0;right:-12px}.strike-through{text-decoration:line-through;color:#d3d3d3;font-size:12px;margin-left:5px;position:relative}.add-to-cart{width:100%;cursor:pointer;background-color:#fff;border:1.5px solid transparent;border-radius:5px;padding:5px;text-align:center;align-items:center}.add-to-cart .quantity-btn{padding:5px 10px;font-weight:700}.discount{position:absolute;top:0;padding:5px;width:60px;text-align:center;font-size:12px;border-bottom-right-radius:3px}@media screen and (max-width: 475px){.width{max-width:160px;min-width:160px;height:300px}.adjustHeightWidth{max-width:140px;min-width:140px}}@-webkit-keyframes scale-up-center{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(1.08);transform:scale(1.08)}}@keyframes scale-up-center{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(1.08);transform:scale(1.08)}}.h-40{height:45%;position:relative}.bottom{position:absolute;bottom:10px;width:93%;display:flex;flex-direction:column}.discount-price{font-weight:600;font-size:14px}.color{color:#000}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: ColorDirective, selector: "[simpoColor]", inputs: ["simpoColor"] }] }); }
88
88
  }
89
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: SmallProductListingComponent, decorators: [{
90
90
  type: Component,
@@ -92,7 +92,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
92
92
  CommonModule,
93
93
  MatIcon,
94
94
  ColorDirective
95
- ], template: "<div class=\"product\" [ngClass]=\"{'width' : isScrollable, 'adjustHeightWidth': isCategoryProductList}\" [style.opacity]=\"product?.itemInventory?.openingStock == 0 ? 0.5 : 1\" (click)=\"goToProductDetail(product)\">\r\n <div class=\"prod-img\">\r\n <img [src]=\"product.itemImages?.[0]?.imgUrl\" alt=\"\">\r\n <div class=\"discount\" [style.backgroundColor]=\"data?.styles?.background?.color\" [simpoColor]=\"data?.styles?.background?.color\"\r\n *ngIf=\"getPercentage(product) > '0'\">{{getPercentage(product)}}% off</div>\r\n </div>\r\n <div class=\"p-2 h-40\">\r\n <span class=\"trim-text color\">{{product.name}}</span>\r\n <div class=\"bottom\">\r\n <span class=\"m-1\">\r\n <span class=\"discount-price color\"><span [innerHTML]=\"currency\"></span> {{product.price.discountedPrice}}</span>\r\n <span class=\"strike-through\"><span [innerHTML]=\"currency\"></span> {{product.price.sellingPrice}}</span>\r\n </span>\r\n <div class=\"add-to-cart\"\r\n [style.borderColor]=\"data.styles?.background?.accentColor\"\r\n [ngClass]=\"{'justify-content-between p-0 d-flex': product.quantity, 'justify-content-center': !product.quantity}\">\r\n <ng-container *ngIf=\"product?.itemInventory?.openingStock\">\r\n <ng-container *ngIf=\"!product.quantity\">\r\n <span (click)=\"addItemToCart(product, 'ADD')\" [style.color]=\"data.styles?.background?.accentColor\">Add to Cart</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"product.quantity\">\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart(product, 'SUBSTRACT')\" [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\" [style.color]=\"data.styles?.background?.accentColor\">-</span>\r\n <span class=\"quantity\" [style.color]=\"data.styles?.background?.accentColor\">{{product.quantity}}</span>\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart(product, 'ADD')\" [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\" [style.color]=\"data.styles?.background?.accentColor\">+</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!product?.itemInventory?.openingStock\">\r\n <span class=\"d-flex align-items-center justify-content-center w-100\">\r\n <mat-icon>notification_important</mat-icon>\r\n <span class=\"ml-2\">Notify</span>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #loadingScreen>\r\n <ngx-skeleton-loader *ngIf=\"filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '100%',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\" />\r\n</ng-template> -->\r\n", styles: [".product{position:relative;display:flex;flex-direction:column;cursor:pointer;margin-bottom:10px;border-radius:10px;overflow:hidden;height:350px;background-color:#fff}.product .prod-img{position:relative;height:55%;width:100%;overflow:hidden;border:1.8px solid;border-radius:10px;border-color:#e5e7eb}.product .prod-img img{height:100%;width:100%;object-fit:cover}.product img:hover{-webkit-animation:scale-up-center .2s linear both;animation:scale-up-center .2s linear both}.width{margin-right:10px;min-width:195px;max-width:195px}.styling{height:30px;width:30px;border-radius:50%;background-color:#fff;position:absolute;bottom:0;right:-12px}.strike-through{text-decoration:line-through;color:#d3d3d3;font-size:12px;margin-left:5px;position:relative}.add-to-cart{width:100%;cursor:pointer;background-color:#fff;border:1.5px solid transparent;border-radius:5px;padding:5px;text-align:center;align-items:center}.add-to-cart .quantity-btn{padding:5px}.discount{position:absolute;top:0;padding:5px;width:60px;text-align:center;font-size:12px;border-bottom-right-radius:3px}@media screen and (max-width: 475px){.width{max-width:160px;min-width:160px;height:300px}.adjustHeightWidth{max-width:145px;min-width:145px}}@-webkit-keyframes scale-up-center{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(1.08);transform:scale(1.08)}}@keyframes scale-up-center{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(1.08);transform:scale(1.08)}}.h-40{height:45%;position:relative}.bottom{position:absolute;bottom:10px;width:93%;display:flex;flex-direction:column}.discount-price{font-weight:600;font-size:14px}.color{color:#000}\n"] }]
95
+ ], template: "<div class=\"product\" [ngClass]=\"{'width' : isScrollable, 'adjustHeightWidth': isCategoryProductList}\" [style.opacity]=\"product?.itemInventory?.openingStock == 0 ? 0.5 : 1\" (click)=\"goToProductDetail(product)\">\r\n <div class=\"prod-img\">\r\n <img [src]=\"product.itemImages?.[0]?.imgUrl\" alt=\"\">\r\n <div class=\"discount\" [style.backgroundColor]=\"data?.styles?.background?.color\" [simpoColor]=\"data?.styles?.background?.color\"\r\n *ngIf=\"getPercentage(product) > '0'\">{{getPercentage(product)}}% off</div>\r\n </div>\r\n <div class=\"p-2 h-40\">\r\n <span class=\"trim-text color\">{{product.name}}</span>\r\n <div class=\"bottom\">\r\n <span class=\"m-1\">\r\n <span class=\"discount-price color\"><span [innerHTML]=\"currency\"></span> {{product.price.discountedPrice}}</span>\r\n <span class=\"strike-through\"><span [innerHTML]=\"currency\"></span> {{product.price.sellingPrice}}</span>\r\n </span>\r\n <div class=\"add-to-cart\"\r\n [style.borderColor]=\"data.styles?.background?.accentColor\"\r\n [ngClass]=\"{'justify-content-between p-0 d-flex': product.quantity, 'justify-content-center': !product.quantity}\">\r\n <ng-container *ngIf=\"product?.itemInventory?.openingStock\">\r\n <ng-container *ngIf=\"!product.quantity\">\r\n <span (click)=\"addItemToCart(product, 'ADD')\" [style.color]=\"data.styles?.background?.accentColor\">Add to Cart</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"product.quantity\">\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart(product, 'SUBSTRACT')\" [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\" [style.color]=\"data.styles?.background?.accentColor\">-</span>\r\n <span class=\"quantity\" [style.color]=\"data.styles?.background?.accentColor\">{{product.quantity}}</span>\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart(product, 'ADD')\" [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\" [style.color]=\"data.styles?.background?.accentColor\">+</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!product?.itemInventory?.openingStock\">\r\n <span class=\"d-flex align-items-center justify-content-center w-100\">\r\n <mat-icon>notification_important</mat-icon>\r\n <span class=\"ml-2\">Notify</span>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #loadingScreen>\r\n <ngx-skeleton-loader *ngIf=\"filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '100%',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\" />\r\n</ng-template> -->\r\n", styles: [".product{position:relative;display:flex;flex-direction:column;cursor:pointer;margin-bottom:10px;border-radius:10px;overflow:hidden;height:350px;background-color:#fff}.product .prod-img{position:relative;height:55%;width:100%;overflow:hidden;border:1.8px solid;border-radius:10px;border-color:#e5e7eb}.product .prod-img img{height:100%;width:100%;object-fit:cover}.product img:hover{-webkit-animation:scale-up-center .2s linear both;animation:scale-up-center .2s linear both}.width{margin-right:10px;min-width:195px;max-width:195px}.styling{height:30px;width:30px;border-radius:50%;background-color:#fff;position:absolute;bottom:0;right:-12px}.strike-through{text-decoration:line-through;color:#d3d3d3;font-size:12px;margin-left:5px;position:relative}.add-to-cart{width:100%;cursor:pointer;background-color:#fff;border:1.5px solid transparent;border-radius:5px;padding:5px;text-align:center;align-items:center}.add-to-cart .quantity-btn{padding:5px 10px;font-weight:700}.discount{position:absolute;top:0;padding:5px;width:60px;text-align:center;font-size:12px;border-bottom-right-radius:3px}@media screen and (max-width: 475px){.width{max-width:160px;min-width:160px;height:300px}.adjustHeightWidth{max-width:140px;min-width:140px}}@-webkit-keyframes scale-up-center{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(1.08);transform:scale(1.08)}}@keyframes scale-up-center{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(1.08);transform:scale(1.08)}}.h-40{height:45%;position:relative}.bottom{position:absolute;bottom:10px;width:93%;display:flex;flex-direction:column}.discount-price{font-weight:600;font-size:14px}.color{color:#000}\n"] }]
96
96
  }], ctorParameters: () => [{ type: i1.CartService }, { type: i2.Router }], propDecorators: { product: [{
97
97
  type: Input
98
98
  }], data: [{
@@ -102,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
102
102
  }], isCategoryProductList: [{
103
103
  type: Input
104
104
  }] } });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hbGwtcHJvZHVjdC1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWNvbW1lcmNlL3NlY3Rpb25zL3NtYWxsLXByb2R1Y3QtbGlzdGluZy9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvc21hbGwtcHJvZHVjdC1saXN0aW5nL3NtYWxsLXByb2R1Y3QtbGlzdGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7O0FBY3BFLE1BQU0sT0FBTyw0QkFBNEI7SUFFdkMsWUFDbUIsV0FBd0IsRUFDeEIsTUFBYztRQURkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFHekIsY0FBUyxHQUEwQixJQUFJLENBQUM7UUFJdkMsMEJBQXFCLEdBQVksS0FBSyxDQUFDO0lBTjdDLENBQUM7SUFRSixRQUFRO0lBRVIsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFnQixFQUFFLElBQXlCO1FBQ3ZELHdDQUF3QztRQUN4QyxrSkFBa0o7UUFDbEosWUFBWTtRQUNaLElBQUk7UUFFSixJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVE7WUFDcEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDbEIsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQzthQUNJLENBQUM7WUFDSixPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sV0FBVyxHQUF1QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEYsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsV0FBVyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixJQUFJLFNBQVMsR0FBWSxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFrQixFQUFFLEVBQUU7Z0JBQzdDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztvQkFDakMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDbkIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3RyxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFnQixFQUFFLFNBQWlCO1FBQ2hELElBQUksZUFBZSxHQUF1QixJQUFJLENBQUM7UUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFvQixFQUFFLEVBQUU7WUFDckQsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLFNBQVM7Z0JBQ2hDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsYUFBYSxDQUFDLE9BQWdCO1FBQzVCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxPQUFnQjtRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFDZixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFFckIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDO0lBQ3JDLENBQUM7OEdBdkZVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLG1OQ3JCekMsdzJGQThDQSw0ckREaENJLFlBQVksaU9BQ1osT0FBTywySUFDUCxjQUFjOzsyRkFLTCw0QkFBNEI7a0JBWHhDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBQzNCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLE9BQU87d0JBQ1AsY0FBYztxQkFDZjtxR0FZUSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEl0ZW1WYXJpYW50LCBQcm9kdWN0IH0gZnJvbSAnLi4vLi4vc3R5bGVzL3Byb2R1Y3QubW9kYWwnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBCVVNJTkVTU19DT05TVEFOVFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYnVzaW5lc3MuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE9yZGVyZWRJdGVtcyB9IGZyb20gJy4uLy4uL3N0eWxlcy9PcmRlcmVkSXRlbXMubW9kYWwnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLXNtYWxsLXByb2R1Y3QtbGlzdGluZycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRJY29uLFxyXG4gICAgQ29sb3JEaXJlY3RpdmVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYWxsUHJvZHVjdExpc3RpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlclxyXG4gICkge31cclxuXHJcbiAgcHJpdmF0ZSBVU0VSX0NBUlQ6IE9yZGVyZWRJdGVtc1tdIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgcHJvZHVjdCE6IFByb2R1Y3Q7XHJcbiAgQElucHV0KCkgZGF0YT86IGFueTtcclxuICBASW5wdXQoKSBpc1Njcm9sbGFibGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzQ2F0ZWdvcnlQcm9kdWN0TGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBhZGRJdGVtVG9DYXJ0KHByb2R1Y3Q6IFByb2R1Y3QsIHR5cGU6ICdBREQnIHwgJ1NVQlNUUkFDVCcpIHtcclxuICAgIC8vIGlmICh0aGlzLmlzSXRlbU91dE9mU3RvY2socHJvZHVjdCkpIHtcclxuICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBzdW1tYXJ5OiAnQ2FydCcsIGRldGFpbDogJ0l0ZW0gaXMgbm90IGF2YWlsYWJsZSBhcyBvZiBub3cuIFdlIHdpbGwgbm90aWZ5IHlvdSBvbmNlIGF2YWlsYWJsZScgfSk7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAoIXByb2R1Y3Q/LnF1YW50aXR5KVxyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5ID0gMDtcclxuICAgIGlmICh0eXBlID09ICdBREQnKSB7XHJcbiAgICAgIHByb2R1Y3QucXVhbnRpdHkgKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5IC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IHRoaXMuZ2V0SXRlbVZhcmllbnQocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgICBpZiAoaXRlbVZhcmllbnQpIHtcclxuICAgICAgICBpdGVtVmFyaWVudC5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9DYXJ0KHByb2R1Y3QsIGl0ZW1WYXJpZW50LnZhcmlhbnRJZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvQ2FydChwcm9kdWN0KTtcclxuICAgIH1cclxuICAgIGlmIChwcm9kdWN0LnF1YW50aXR5KSB7XHJcbiAgICAgIGxldCBpc1ByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQ/LmZvckVhY2goKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnZhcmllbnRJZCA9PSBwcm9kdWN0LnZhcmllbnRJZCkge1xyXG4gICAgICAgICAgaXRlbS5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgICBpc1ByZXNlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKCFpc1ByZXNlbnQpXHJcbiAgICAgICAgdGhpcy5VU0VSX0NBUlQ/LnB1c2gobmV3IE9yZGVyZWRJdGVtcyhwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQgPSB0aGlzLlVTRVJfQ0FSVD8uZmlsdGVyKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IGl0ZW0udmFyaWVudElkICE9IHByb2R1Y3QudmFyaWVudElkKSA/PyBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEl0ZW1WYXJpZW50KHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmllbnRJZDogc3RyaW5nKTogSXRlbVZhcmlhbnQgfCBudWxsIHtcclxuICAgIGxldCBzZWxlY3RlZFZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcm9kdWN0Py5pdGVtVmFyaWFudD8uZm9yRWFjaCgodmFyaWVudDogSXRlbVZhcmlhbnQpID0+IHtcclxuICAgICAgaWYgKHZhcmllbnQudmFyaWFudElkID09IHZhcmllbnRJZClcclxuICAgICAgICBzZWxlY3RlZFZhcmllbnQgPSB2YXJpZW50O1xyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRWYXJpZW50O1xyXG4gIH1cclxuICBnZXRQZXJjZW50YWdlKHByb2R1Y3Q6IFByb2R1Y3QpIHtcclxuICAgIHJldHVybiAoKHByb2R1Y3QucHJpY2Uuc2VsbGluZ1ByaWNlIC0gcHJvZHVjdC5wcmljZS5kaXNjb3VudGVkUHJpY2UpIC8gMTAwKS50b0ZpeGVkKDApO1xyXG4gIH1cclxuICBnb1RvUHJvZHVjdERldGFpbChwcm9kdWN0OiBQcm9kdWN0KSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYGRldGFpbHNgXSwgeyBxdWVyeVBhcmFtczogeyBpZDogcHJvZHVjdC5pdGVtSWQgfSB9KTtcclxuICB9XHJcbiAgZ2V0U3VwcG9ydGluZ0NvbG9yKGNvbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhleCA9IGNvbG9yO1xyXG4gICAgaWYgKCFoZXgpXHJcbiAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIGhleCA9IGhleC5yZXBsYWNlKC9eIy8sICcnKTtcclxuXHJcbiAgICBsZXQgYmlnaW50ID0gcGFyc2VJbnQoaGV4LCAxNik7XHJcbiAgICBsZXQgciA9IChiaWdpbnQgPj4gMTYpICYgMjU1O1xyXG4gICAgbGV0IGcgPSAoYmlnaW50ID4+IDgpICYgMjU1O1xyXG4gICAgbGV0IGIgPSBiaWdpbnQgJiAyNTU7XHJcblxyXG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sIDAuNClgO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbmN5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gQlVTSU5FU1NfQ09OU1RBTlRTLkNVUlJFTkNZO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicHJvZHVjdFwiIFtuZ0NsYXNzXT1cInsnd2lkdGgnIDogaXNTY3JvbGxhYmxlLCAnYWRqdXN0SGVpZ2h0V2lkdGgnOiBpc0NhdGVnb3J5UHJvZHVjdExpc3R9XCIgW3N0eWxlLm9wYWNpdHldPVwicHJvZHVjdD8uaXRlbUludmVudG9yeT8ub3BlbmluZ1N0b2NrID09IDAgPyAwLjUgOiAxXCIgKGNsaWNrKT1cImdvVG9Qcm9kdWN0RGV0YWlsKHByb2R1Y3QpXCI+XHJcbiAgPGRpdiBjbGFzcz1cInByb2QtaW1nXCI+XHJcbiAgICA8aW1nIFtzcmNdPVwicHJvZHVjdC5pdGVtSW1hZ2VzPy5bMF0/LmltZ1VybFwiIGFsdD1cIlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpc2NvdW50XCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yXCIgW3NpbXBvQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5jb2xvclwiXHJcbiAgICAgICpuZ0lmPVwiZ2V0UGVyY2VudGFnZShwcm9kdWN0KSA+ICcwJ1wiPnt7Z2V0UGVyY2VudGFnZShwcm9kdWN0KX19JSBvZmY8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicC0yIGgtNDBcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwidHJpbS10ZXh0IGNvbG9yXCI+e3twcm9kdWN0Lm5hbWV9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJib3R0b21cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtLTFcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpc2NvdW50LXByaWNlIGNvbG9yXCI+PHNwYW4gW2lubmVySFRNTF09XCJjdXJyZW5jeVwiPjwvc3Bhbj4ge3twcm9kdWN0LnByaWNlLmRpc2NvdW50ZWRQcmljZX19PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3RyaWtlLXRocm91Z2hcIj48c3BhbiBbaW5uZXJIVE1MXT1cImN1cnJlbmN5XCI+PC9zcGFuPiB7e3Byb2R1Y3QucHJpY2Uuc2VsbGluZ1ByaWNlfX08L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImFkZC10by1jYXJ0XCJcclxuICAgICAgICBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7J2p1c3RpZnktY29udGVudC1iZXR3ZWVuIHAtMCBkLWZsZXgnOiBwcm9kdWN0LnF1YW50aXR5LCAnanVzdGlmeS1jb250ZW50LWNlbnRlcic6ICFwcm9kdWN0LnF1YW50aXR5fVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9kdWN0Py5pdGVtSW52ZW50b3J5Py5vcGVuaW5nU3RvY2tcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJvZHVjdC5xdWFudGl0eVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiYWRkSXRlbVRvQ2FydChwcm9kdWN0LCAnQUREJylcIiAgW3N0eWxlLmNvbG9yXT1cImRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkFkZCB0byBDYXJ0PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvZHVjdC5xdWFudGl0eVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1YW50aXR5LWJ0blwiIChjbGljayk9XCJhZGRJdGVtVG9DYXJ0KHByb2R1Y3QsICdTVUJTVFJBQ1QnKVwiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZ2V0U3VwcG9ydGluZ0NvbG9yKGRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcilcIiBbc3R5bGUuY29sb3JdPVwiZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+LTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWFudGl0eVwiICBbc3R5bGUuY29sb3JdPVwiZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+e3twcm9kdWN0LnF1YW50aXR5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVhbnRpdHktYnRuXCIgKGNsaWNrKT1cImFkZEl0ZW1Ub0NhcnQocHJvZHVjdCwgJ0FERCcpXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJnZXRTdXBwb3J0aW5nQ29sb3IoZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yKVwiIFtzdHlsZS5jb2xvcl09XCJkYXRhLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj4rPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcm9kdWN0Py5pdGVtSW52ZW50b3J5Py5vcGVuaW5nU3RvY2tcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5ub3RpZmljYXRpb25faW1wb3J0YW50PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+Tm90aWZ5PC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPG5nLXRlbXBsYXRlICNsb2FkaW5nU2NyZWVuPlxyXG4gIDxuZ3gtc2tlbGV0b24tbG9hZGVyICpuZ0lmPVwiZmlsdGVyTG9hZGluZ1wiIGNvdW50PVwiMVwiIGFwcGVhcmFuY2U9XCJjaXJjbGVcIiBbdGhlbWVdPVwie1xyXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnMTBweCcsXHJcbiAgICAgICAgICAncG9zaXRpb24nOiAncmVsYXRpdmUnLFxyXG4gICAgICAgICAgJ3JpZ2h0JzogJzVweCdcclxuICAgICAgICB9XCIgLz5cclxuPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiJdfQ==
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hbGwtcHJvZHVjdC1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWNvbW1lcmNlL3NlY3Rpb25zL3NtYWxsLXByb2R1Y3QtbGlzdGluZy9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvc21hbGwtcHJvZHVjdC1saXN0aW5nL3NtYWxsLXByb2R1Y3QtbGlzdGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7O0FBY3BFLE1BQU0sT0FBTyw0QkFBNEI7SUFFdkMsWUFDbUIsV0FBd0IsRUFDeEIsTUFBYztRQURkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFHekIsY0FBUyxHQUEwQixJQUFJLENBQUM7UUFJdkMsMEJBQXFCLEdBQVksS0FBSyxDQUFDO0lBTjdDLENBQUM7SUFRSixRQUFRO0lBRVIsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFnQixFQUFFLElBQXlCO1FBQ3ZELHdDQUF3QztRQUN4QyxrSkFBa0o7UUFDbEosWUFBWTtRQUNaLElBQUk7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RyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFFckIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDO0lBQ3JDLENBQUM7OEdBdkZVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLG1OQ3JCekMsdzJGQThDQSxpdEREaENJLFlBQVksaU9BQ1osT0FBTywySUFDUCxjQUFjOzsyRkFLTCw0QkFBNEI7a0JBWHhDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBQzNCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLE9BQU87d0JBQ1AsY0FBYztxQkFDZjtxR0FZUSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEl0ZW1WYXJpYW50LCBQcm9kdWN0IH0gZnJvbSAnLi4vLi4vc3R5bGVzL3Byb2R1Y3QubW9kYWwnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBCVVNJTkVTU19DT05TVEFOVFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYnVzaW5lc3MuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE9yZGVyZWRJdGVtcyB9IGZyb20gJy4uLy4uL3N0eWxlcy9PcmRlcmVkSXRlbXMubW9kYWwnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLXNtYWxsLXByb2R1Y3QtbGlzdGluZycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRJY29uLFxyXG4gICAgQ29sb3JEaXJlY3RpdmVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYWxsUHJvZHVjdExpc3RpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlclxyXG4gICkge31cclxuXHJcbiAgcHJpdmF0ZSBVU0VSX0NBUlQ6IE9yZGVyZWRJdGVtc1tdIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgcHJvZHVjdCE6IFByb2R1Y3Q7XHJcbiAgQElucHV0KCkgZGF0YT86IGFueTtcclxuICBASW5wdXQoKSBpc1Njcm9sbGFibGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzQ2F0ZWdvcnlQcm9kdWN0TGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBhZGRJdGVtVG9DYXJ0KHByb2R1Y3Q6IFByb2R1Y3QsIHR5cGU6ICdBREQnIHwgJ1NVQlNUUkFDVCcpIHtcclxuICAgIC8vIGlmICh0aGlzLmlzSXRlbU91dE9mU3RvY2socHJvZHVjdCkpIHtcclxuICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBzdW1tYXJ5OiAnQ2FydCcsIGRldGFpbDogJ0l0ZW0gaXMgbm90IGF2YWlsYWJsZSBhcyBvZiBub3cuIFdlIHdpbGwgbm90aWZ5IHlvdSBvbmNlIGF2YWlsYWJsZScgfSk7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAoIXByb2R1Y3Q/LnF1YW50aXR5KVxyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5ID0gMDtcclxuICAgIGlmICh0eXBlID09ICdBREQnKSB7XHJcbiAgICAgIHByb2R1Y3QucXVhbnRpdHkgKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5IC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IHRoaXMuZ2V0SXRlbVZhcmllbnQocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgICBpZiAoaXRlbVZhcmllbnQpIHtcclxuICAgICAgICBpdGVtVmFyaWVudC5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9DYXJ0KHByb2R1Y3QsIGl0ZW1WYXJpZW50LnZhcmlhbnRJZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvQ2FydChwcm9kdWN0KTtcclxuICAgIH1cclxuICAgIGlmIChwcm9kdWN0LnF1YW50aXR5KSB7XHJcbiAgICAgIGxldCBpc1ByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQ/LmZvckVhY2goKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnZhcmllbnRJZCA9PSBwcm9kdWN0LnZhcmllbnRJZCkge1xyXG4gICAgICAgICAgaXRlbS5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgICBpc1ByZXNlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKCFpc1ByZXNlbnQpXHJcbiAgICAgICAgdGhpcy5VU0VSX0NBUlQ/LnB1c2gobmV3IE9yZGVyZWRJdGVtcyhwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQgPSB0aGlzLlVTRVJfQ0FSVD8uZmlsdGVyKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IGl0ZW0udmFyaWVudElkICE9IHByb2R1Y3QudmFyaWVudElkKSA/PyBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEl0ZW1WYXJpZW50KHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmllbnRJZDogc3RyaW5nKTogSXRlbVZhcmlhbnQgfCBudWxsIHtcclxuICAgIGxldCBzZWxlY3RlZFZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcm9kdWN0Py5pdGVtVmFyaWFudD8uZm9yRWFjaCgodmFyaWVudDogSXRlbVZhcmlhbnQpID0+IHtcclxuICAgICAgaWYgKHZhcmllbnQudmFyaWFudElkID09IHZhcmllbnRJZClcclxuICAgICAgICBzZWxlY3RlZFZhcmllbnQgPSB2YXJpZW50O1xyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRWYXJpZW50O1xyXG4gIH1cclxuICBnZXRQZXJjZW50YWdlKHByb2R1Y3Q6IFByb2R1Y3QpIHtcclxuICAgIHJldHVybiAoKHByb2R1Y3QucHJpY2Uuc2VsbGluZ1ByaWNlIC0gcHJvZHVjdC5wcmljZS5kaXNjb3VudGVkUHJpY2UpIC8gMTAwKS50b0ZpeGVkKDApO1xyXG4gIH1cclxuICBnb1RvUHJvZHVjdERldGFpbChwcm9kdWN0OiBQcm9kdWN0KSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYGRldGFpbHNgXSwgeyBxdWVyeVBhcmFtczogeyBpZDogcHJvZHVjdC5pdGVtSWQgfSB9KTtcclxuICB9XHJcbiAgZ2V0U3VwcG9ydGluZ0NvbG9yKGNvbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhleCA9IGNvbG9yO1xyXG4gICAgaWYgKCFoZXgpXHJcbiAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIGhleCA9IGhleC5yZXBsYWNlKC9eIy8sICcnKTtcclxuXHJcbiAgICBsZXQgYmlnaW50ID0gcGFyc2VJbnQoaGV4LCAxNik7XHJcbiAgICBsZXQgciA9IChiaWdpbnQgPj4gMTYpICYgMjU1O1xyXG4gICAgbGV0IGcgPSAoYmlnaW50ID4+IDgpICYgMjU1O1xyXG4gICAgbGV0IGIgPSBiaWdpbnQgJiAyNTU7XHJcblxyXG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sIDAuNClgO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbmN5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gQlVTSU5FU1NfQ09OU1RBTlRTLkNVUlJFTkNZO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicHJvZHVjdFwiIFtuZ0NsYXNzXT1cInsnd2lkdGgnIDogaXNTY3JvbGxhYmxlLCAnYWRqdXN0SGVpZ2h0V2lkdGgnOiBpc0NhdGVnb3J5UHJvZHVjdExpc3R9XCIgW3N0eWxlLm9wYWNpdHldPVwicHJvZHVjdD8uaXRlbUludmVudG9yeT8ub3BlbmluZ1N0b2NrID09IDAgPyAwLjUgOiAxXCIgKGNsaWNrKT1cImdvVG9Qcm9kdWN0RGV0YWlsKHByb2R1Y3QpXCI+XHJcbiAgPGRpdiBjbGFzcz1cInByb2QtaW1nXCI+XHJcbiAgICA8aW1nIFtzcmNdPVwicHJvZHVjdC5pdGVtSW1hZ2VzPy5bMF0/LmltZ1VybFwiIGFsdD1cIlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpc2NvdW50XCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yXCIgW3NpbXBvQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5jb2xvclwiXHJcbiAgICAgICpuZ0lmPVwiZ2V0UGVyY2VudGFnZShwcm9kdWN0KSA+ICcwJ1wiPnt7Z2V0UGVyY2VudGFnZShwcm9kdWN0KX19JSBvZmY8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicC0yIGgtNDBcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwidHJpbS10ZXh0IGNvbG9yXCI+e3twcm9kdWN0Lm5hbWV9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJib3R0b21cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtLTFcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpc2NvdW50LXByaWNlIGNvbG9yXCI+PHNwYW4gW2lubmVySFRNTF09XCJjdXJyZW5jeVwiPjwvc3Bhbj4ge3twcm9kdWN0LnByaWNlLmRpc2NvdW50ZWRQcmljZX19PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3RyaWtlLXRocm91Z2hcIj48c3BhbiBbaW5uZXJIVE1MXT1cImN1cnJlbmN5XCI+PC9zcGFuPiB7e3Byb2R1Y3QucHJpY2Uuc2VsbGluZ1ByaWNlfX08L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImFkZC10by1jYXJ0XCJcclxuICAgICAgICBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7J2p1c3RpZnktY29udGVudC1iZXR3ZWVuIHAtMCBkLWZsZXgnOiBwcm9kdWN0LnF1YW50aXR5LCAnanVzdGlmeS1jb250ZW50LWNlbnRlcic6ICFwcm9kdWN0LnF1YW50aXR5fVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9kdWN0Py5pdGVtSW52ZW50b3J5Py5vcGVuaW5nU3RvY2tcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJvZHVjdC5xdWFudGl0eVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiYWRkSXRlbVRvQ2FydChwcm9kdWN0LCAnQUREJylcIiAgW3N0eWxlLmNvbG9yXT1cImRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkFkZCB0byBDYXJ0PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvZHVjdC5xdWFudGl0eVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1YW50aXR5LWJ0blwiIChjbGljayk9XCJhZGRJdGVtVG9DYXJ0KHByb2R1Y3QsICdTVUJTVFJBQ1QnKVwiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZ2V0U3VwcG9ydGluZ0NvbG9yKGRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcilcIiBbc3R5bGUuY29sb3JdPVwiZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+LTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWFudGl0eVwiICBbc3R5bGUuY29sb3JdPVwiZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+e3twcm9kdWN0LnF1YW50aXR5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVhbnRpdHktYnRuXCIgKGNsaWNrKT1cImFkZEl0ZW1Ub0NhcnQocHJvZHVjdCwgJ0FERCcpXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJnZXRTdXBwb3J0aW5nQ29sb3IoZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yKVwiIFtzdHlsZS5jb2xvcl09XCJkYXRhLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj4rPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcm9kdWN0Py5pdGVtSW52ZW50b3J5Py5vcGVuaW5nU3RvY2tcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5ub3RpZmljYXRpb25faW1wb3J0YW50PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+Tm90aWZ5PC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPG5nLXRlbXBsYXRlICNsb2FkaW5nU2NyZWVuPlxyXG4gIDxuZ3gtc2tlbGV0b24tbG9hZGVyICpuZ0lmPVwiZmlsdGVyTG9hZGluZ1wiIGNvdW50PVwiMVwiIGFwcGVhcmFuY2U9XCJjaXJjbGVcIiBbdGhlbWVdPVwie1xyXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnMTBweCcsXHJcbiAgICAgICAgICAncG9zaXRpb24nOiAncmVsYXRpdmUnLFxyXG4gICAgICAgICAgJ3JpZ2h0JzogJzVweCdcclxuICAgICAgICB9XCIgLz5cclxuPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiJdfQ==