@magicx-eng/ai-autocomplete-angular 0.44.0 → 0.46.0
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/README.md +69 -1
- package/esm2020/lib/ai-autocomplete/ai-autocomplete.component.mjs +3 -3
- package/esm2020/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.mjs +30 -5
- package/esm2020/lib/controller/ai-autocomplete.controller.mjs +30 -1
- package/esm2020/lib/internal/product-strip/product-strip.component.mjs +3 -3
- package/esm2020/lib/internal/suggestion-grid/suggestion-grid.component.mjs +5 -3
- package/esm2020/lib/internal/suggestion-item/suggestion-item.component.mjs +6 -4
- package/esm2020/lib/internal/time-wheel/time-wheel.component.mjs +147 -0
- package/esm2020/lib/shared/types.mjs +1 -1
- package/esm2020/public-api.mjs +7 -2
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs +221 -17
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs +220 -16
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts +10 -1
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts.map +1 -1
- package/lib/controller/ai-autocomplete.controller.d.ts +9 -0
- package/lib/controller/ai-autocomplete.controller.d.ts.map +1 -1
- package/lib/internal/suggestion-grid/suggestion-grid.component.d.ts +2 -1
- package/lib/internal/suggestion-grid/suggestion-grid.component.d.ts.map +1 -1
- package/lib/internal/suggestion-item/suggestion-item.component.d.ts +2 -1
- package/lib/internal/suggestion-item/suggestion-item.component.d.ts.map +1 -1
- package/lib/internal/time-wheel/time-wheel.component.d.ts +53 -0
- package/lib/internal/time-wheel/time-wheel.component.d.ts.map +1 -0
- package/lib/shared/types.d.ts +9 -3
- package/lib/shared/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +5 -2
- package/public-api.d.ts.map +1 -1
|
@@ -232,10 +232,10 @@ export class ProductStripComponent {
|
|
|
232
232
|
}
|
|
233
233
|
}
|
|
234
234
|
ProductStripComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProductStripComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
235
|
-
ProductStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProductStripComponent, isStandalone: true, selector: "aia-product-strip", inputs: { products: "products", listboxId: "listboxId", focusable: "focusable", layout: "layout", imageFallback: "imageFallback", strings: "strings", addToCart: "addToCart" }, outputs: { select: "select", focusChange: "focusChange" }, viewQueries: [{ propertyName: "row", first: true, predicate: ["row"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n [attr.data-aia-product-has-cart]=\"hasCart(product) ? '' : null\"\n [style]=\"photoFillStyle(product)\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src, $event)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n\n <!-- The add-to-cart button: a child of the card rather than of the\n aria-hidden media tile; the stylesheet lifts it over the tile's\n bottom right corner. A role=\"button\" span, not a <button>:\n interactive content inside an <a> is invalid HTML. Its press never\n reaches the card, so it never selects. Sold-out cards have none. -->\n <span\n *ngIf=\"hasCart(product)\"\n class=\"aia-product-cart\"\n data-aia-product-cart=\"\"\n role=\"button\"\n [attr.aria-label]=\"strings.addToCart + ': ' + product.title\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n [attr.data-aia-cart-state]=\"cartState(product)\"\n [attr.aria-busy]=\"cartState(product) === 'adding' ? 'true' : null\"\n (click)=\"onCartPress($event, product)\"\n (keydown)=\"onCartKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path class=\"aia-product-cart-glyph\" d=\"M2 3h2.2l2.4 11.2a2 2 0 0 0 2 1.6h8.9a2 2 0 0 0 1.9-1.5L21 8H6\" />\n <path class=\"aia-product-cart-glyph\" d=\"M13.5 6.5v-4M11.5 4.5h4\" />\n <path class=\"aia-product-cart-check\" d=\"M5 12.5l4.5 4.5L19 7.5\" />\n <path class=\"aia-product-cart-spinner\" d=\"M12 4a8 8 0 1 0 8 8\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"9\" cy=\"20\" r=\"1.3\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"17.5\" cy=\"20\" r=\"1.3\" />\n </svg>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product-cart{position:absolute;top:calc(var(--aia-product-card-width, 116px) - 12px - var(--aia-product-cart-size, 28px) - (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-y, 1)) / 2);right:calc(12px + (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-x, 1)) / 2);display:flex;align-items:center;justify-content:center;width:var(--aia-product-cart-size, 28px);height:var(--aia-product-cart-size, 28px);border-radius:999px;background:var(--aia-product-cart-bg, rgba(255, 255, 255, .94));color:var(--aia-product-cart-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 3px #00000038;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.aia-product-cart:hover{transform:scale(1.08)}.aia-product-cart:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:2px}.aia-product-cart svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.aia-product-cart svg path{fill:none;stroke:currentColor}.aia-product-cart svg circle{fill:none;stroke:currentColor}.aia-product-cart-check{display:none}.aia-product-cart[data-aia-cart-state=adding]{cursor:progress}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-check{display:inline}.aia-product-cart-spinner,.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-spinner{display:inline}.aia-product-cart[data-aia-cart-state=adding] svg{animation:magicx-aia-product-cart-spin .8s linear infinite}@keyframes magicx-aia-product-cart-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.aia-product-cart[data-aia-cart-state=adding] svg{animation-duration:2s}}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}.aia-products[data-aia-products-layout=list] .aia-product-cart{top:50%;right:8px;transform:translateY(-50%)}.aia-products[data-aia-products-layout=list] .aia-product-cart:hover{transform:translateY(-50%) scale(1.08)}.aia-products[data-aia-products-layout=list] .aia-product[data-aia-product-has-cart]{padding-right:calc(var(--aia-product-cart-size, 28px) + 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
235
|
+
ProductStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProductStripComponent, isStandalone: true, selector: "aia-product-strip", inputs: { products: "products", listboxId: "listboxId", focusable: "focusable", layout: "layout", imageFallback: "imageFallback", strings: "strings", addToCart: "addToCart" }, outputs: { select: "select", focusChange: "focusChange" }, viewQueries: [{ propertyName: "row", first: true, predicate: ["row"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n [attr.data-aia-product-has-cart]=\"hasCart(product) ? '' : null\"\n [style]=\"photoFillStyle(product)\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src, $event)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}<s *ngIf=\"product.compareAtPrice\" class=\"aia-product-compare-at\">{{ product.compareAtPrice }}</s></span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n\n <!-- The add-to-cart button: a child of the card rather than of the\n aria-hidden media tile; the stylesheet lifts it over the tile's\n bottom right corner. A role=\"button\" span, not a <button>:\n interactive content inside an <a> is invalid HTML. Its press never\n reaches the card, so it never selects. Sold-out cards have none. -->\n <span\n *ngIf=\"hasCart(product)\"\n class=\"aia-product-cart\"\n data-aia-product-cart=\"\"\n role=\"button\"\n [attr.aria-label]=\"strings.addToCart + ': ' + product.title\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n [attr.data-aia-cart-state]=\"cartState(product)\"\n [attr.aria-busy]=\"cartState(product) === 'adding' ? 'true' : null\"\n (click)=\"onCartPress($event, product)\"\n (keydown)=\"onCartKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path class=\"aia-product-cart-glyph\" d=\"M2 3h2.2l2.4 11.2a2 2 0 0 0 2 1.6h8.9a2 2 0 0 0 1.9-1.5L21 8H6\" />\n <path class=\"aia-product-cart-glyph\" d=\"M13.5 6.5v-4M11.5 4.5h4\" />\n <path class=\"aia-product-cart-check\" d=\"M5 12.5l4.5 4.5L19 7.5\" />\n <path class=\"aia-product-cart-spinner\" d=\"M12 4a8 8 0 1 0 8 8\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"9\" cy=\"20\" r=\"1.3\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"17.5\" cy=\"20\" r=\"1.3\" />\n </svg>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px}.aia-product-compare-at{font-weight:400;color:var(--aia-product-compare-at-color, currentColor);opacity:var(--aia-product-compare-at-opacity, .6)}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product-cart{position:absolute;top:calc(var(--aia-product-card-width, 116px) - 12px - var(--aia-product-cart-size, 28px) - (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-y, 1)) / 2);right:calc(12px + (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-x, 1)) / 2);display:flex;align-items:center;justify-content:center;width:var(--aia-product-cart-size, 28px);height:var(--aia-product-cart-size, 28px);border-radius:999px;background:var(--aia-product-cart-bg, rgba(255, 255, 255, .94));color:var(--aia-product-cart-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 3px #00000038;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.aia-product-cart:hover{transform:scale(1.08)}.aia-product-cart:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:2px}.aia-product-cart svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.aia-product-cart svg path{fill:none;stroke:currentColor}.aia-product-cart svg circle{fill:none;stroke:currentColor}.aia-product-cart-check{display:none}.aia-product-cart[data-aia-cart-state=adding]{cursor:progress}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-check{display:inline}.aia-product-cart-spinner,.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-spinner{display:inline}.aia-product-cart[data-aia-cart-state=adding] svg{animation:magicx-aia-product-cart-spin .8s linear infinite}@keyframes magicx-aia-product-cart-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.aia-product-cart[data-aia-cart-state=adding] svg{animation-duration:2s}}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}.aia-products[data-aia-products-layout=list] .aia-product-cart{top:50%;right:8px;transform:translateY(-50%)}.aia-products[data-aia-products-layout=list] .aia-product-cart:hover{transform:translateY(-50%) scale(1.08)}.aia-products[data-aia-products-layout=list] .aia-product[data-aia-product-has-cart]{padding-right:calc(var(--aia-product-cart-size, 28px) + 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
236
236
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProductStripComponent, decorators: [{
|
|
237
237
|
type: Component,
|
|
238
|
-
args: [{ selector: "aia-product-strip", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n [attr.data-aia-product-has-cart]=\"hasCart(product) ? '' : null\"\n [style]=\"photoFillStyle(product)\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src, $event)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n\n <!-- The add-to-cart button: a child of the card rather than of the\n aria-hidden media tile; the stylesheet lifts it over the tile's\n bottom right corner. A role=\"button\" span, not a <button>:\n interactive content inside an <a> is invalid HTML. Its press never\n reaches the card, so it never selects. Sold-out cards have none. -->\n <span\n *ngIf=\"hasCart(product)\"\n class=\"aia-product-cart\"\n data-aia-product-cart=\"\"\n role=\"button\"\n [attr.aria-label]=\"strings.addToCart + ': ' + product.title\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n [attr.data-aia-cart-state]=\"cartState(product)\"\n [attr.aria-busy]=\"cartState(product) === 'adding' ? 'true' : null\"\n (click)=\"onCartPress($event, product)\"\n (keydown)=\"onCartKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path class=\"aia-product-cart-glyph\" d=\"M2 3h2.2l2.4 11.2a2 2 0 0 0 2 1.6h8.9a2 2 0 0 0 1.9-1.5L21 8H6\" />\n <path class=\"aia-product-cart-glyph\" d=\"M13.5 6.5v-4M11.5 4.5h4\" />\n <path class=\"aia-product-cart-check\" d=\"M5 12.5l4.5 4.5L19 7.5\" />\n <path class=\"aia-product-cart-spinner\" d=\"M12 4a8 8 0 1 0 8 8\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"9\" cy=\"20\" r=\"1.3\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"17.5\" cy=\"20\" r=\"1.3\" />\n </svg>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product-cart{position:absolute;top:calc(var(--aia-product-card-width, 116px) - 12px - var(--aia-product-cart-size, 28px) - (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-y, 1)) / 2);right:calc(12px + (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-x, 1)) / 2);display:flex;align-items:center;justify-content:center;width:var(--aia-product-cart-size, 28px);height:var(--aia-product-cart-size, 28px);border-radius:999px;background:var(--aia-product-cart-bg, rgba(255, 255, 255, .94));color:var(--aia-product-cart-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 3px #00000038;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.aia-product-cart:hover{transform:scale(1.08)}.aia-product-cart:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:2px}.aia-product-cart svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.aia-product-cart svg path{fill:none;stroke:currentColor}.aia-product-cart svg circle{fill:none;stroke:currentColor}.aia-product-cart-check{display:none}.aia-product-cart[data-aia-cart-state=adding]{cursor:progress}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-check{display:inline}.aia-product-cart-spinner,.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-spinner{display:inline}.aia-product-cart[data-aia-cart-state=adding] svg{animation:magicx-aia-product-cart-spin .8s linear infinite}@keyframes magicx-aia-product-cart-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.aia-product-cart[data-aia-cart-state=adding] svg{animation-duration:2s}}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}.aia-products[data-aia-products-layout=list] .aia-product-cart{top:50%;right:8px;transform:translateY(-50%)}.aia-products[data-aia-products-layout=list] .aia-product-cart:hover{transform:translateY(-50%) scale(1.08)}.aia-products[data-aia-products-layout=list] .aia-product[data-aia-product-has-cart]{padding-right:calc(var(--aia-product-cart-size, 28px) + 16px)}\n"] }]
|
|
238
|
+
args: [{ selector: "aia-product-strip", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">{{ strings.products }}</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n [attr.data-aia-product-has-cart]=\"hasCart(product) ? '' : null\"\n [style]=\"photoFillStyle(product)\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n [attr.data-aia-image-loaded]=\"imageLoaded(product) ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (load)=\"onImageLoad(product, src, $event)\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}<s *ngIf=\"product.compareAtPrice\" class=\"aia-product-compare-at\">{{ product.compareAtPrice }}</s></span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">{{ strings.soldOut }}</span>\n </span>\n\n <!-- The add-to-cart button: a child of the card rather than of the\n aria-hidden media tile; the stylesheet lifts it over the tile's\n bottom right corner. A role=\"button\" span, not a <button>:\n interactive content inside an <a> is invalid HTML. Its press never\n reaches the card, so it never selects. Sold-out cards have none. -->\n <span\n *ngIf=\"hasCart(product)\"\n class=\"aia-product-cart\"\n data-aia-product-cart=\"\"\n role=\"button\"\n [attr.aria-label]=\"strings.addToCart + ': ' + product.title\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n [attr.data-aia-cart-state]=\"cartState(product)\"\n [attr.aria-busy]=\"cartState(product) === 'adding' ? 'true' : null\"\n (click)=\"onCartPress($event, product)\"\n (keydown)=\"onCartKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path class=\"aia-product-cart-glyph\" d=\"M2 3h2.2l2.4 11.2a2 2 0 0 0 2 1.6h8.9a2 2 0 0 0 1.9-1.5L21 8H6\" />\n <path class=\"aia-product-cart-glyph\" d=\"M13.5 6.5v-4M11.5 4.5h4\" />\n <path class=\"aia-product-cart-check\" d=\"M5 12.5l4.5 4.5L19 7.5\" />\n <path class=\"aia-product-cart-spinner\" d=\"M12 4a8 8 0 1 0 8 8\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"9\" cy=\"20\" r=\"1.3\" />\n <circle class=\"aia-product-cart-glyph\" cx=\"17.5\" cy=\"20\" r=\"1.3\" />\n </svg>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-media[data-aia-image-loaded]{background:transparent}.aia-product-image{display:block;width:auto;max-width:100%;height:100%;margin:0 auto;border-radius:var(--aia-product-image-radius, 8px);object-fit:contain}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px}.aia-product-compare-at{font-weight:400;color:var(--aia-product-compare-at-color, currentColor);opacity:var(--aia-product-compare-at-opacity, .6)}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product-cart{position:absolute;top:calc(var(--aia-product-card-width, 116px) - 12px - var(--aia-product-cart-size, 28px) - (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-y, 1)) / 2);right:calc(12px + (var(--aia-product-card-width, 116px) - 12px) * (1 - var(--aia-product-photo-fill-x, 1)) / 2);display:flex;align-items:center;justify-content:center;width:var(--aia-product-cart-size, 28px);height:var(--aia-product-cart-size, 28px);border-radius:999px;background:var(--aia-product-cart-bg, rgba(255, 255, 255, .94));color:var(--aia-product-cart-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 3px #00000038;cursor:pointer;transition:transform .15s ease,opacity .15s ease}.aia-product-cart:hover{transform:scale(1.08)}.aia-product-cart:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:2px}.aia-product-cart svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.aia-product-cart svg path{fill:none;stroke:currentColor}.aia-product-cart svg circle{fill:none;stroke:currentColor}.aia-product-cart-check{display:none}.aia-product-cart[data-aia-cart-state=adding]{cursor:progress}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=added] .aia-product-cart-check{display:inline}.aia-product-cart-spinner,.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-glyph{display:none}.aia-product-cart[data-aia-cart-state=adding] .aia-product-cart-spinner{display:inline}.aia-product-cart[data-aia-cart-state=adding] svg{animation:magicx-aia-product-cart-spin .8s linear infinite}@keyframes magicx-aia-product-cart-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.aia-product-cart[data-aia-cart-state=adding] svg{animation-duration:2s}}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}.aia-products[data-aia-products-layout=list] .aia-product-cart{top:50%;right:8px;transform:translateY(-50%)}.aia-products[data-aia-products-layout=list] .aia-product-cart:hover{transform:translateY(-50%) scale(1.08)}.aia-products[data-aia-products-layout=list] .aia-product[data-aia-product-has-cart]{padding-right:calc(var(--aia-product-cart-size, 28px) + 16px)}\n"] }]
|
|
239
239
|
}], propDecorators: { products: [{
|
|
240
240
|
type: Input
|
|
241
241
|
}], listboxId: [{
|
|
@@ -258,4 +258,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
258
258
|
type: ViewChild,
|
|
259
259
|
args: ["row"]
|
|
260
260
|
}] } });
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zdHJpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxxQkFBcUIsRUFJckIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxnQkFBZ0IsRUFFaEIsWUFBWSxHQUNiLE1BQU0scUNBQXFDLENBQUM7OztBQUk3Qzs7O0dBR0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxPQUFnQjtJQUNwQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQzlFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBVUgsTUFBTSxPQUFPLHFCQUFxQjtJQVRsQztRQVVXLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDbEMsMkRBQTJEO1FBQ2xELGNBQVMsR0FBRyxFQUFFLENBQUM7UUFD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QU07c0JBQXhCLE1BQU07Z0JBT1ksV0FBVztzQkFBN0IsTUFBTTtnQkFrQkgsR0FBRztzQkFETixTQUFTO3VCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgdHlwZSBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICB0eXBlIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoUHJvZHVjdFJvd1doZWVsLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdEltYWdlRmFsbGJhY2ssXG4gIHR5cGUgUHJvZHVjdHNMYXlvdXQsXG4gIHByb2R1Y3RJbWFnZVNvdXJjZXMsXG4gIHByb2R1Y3RJbml0aWFsLFxuICBwcm9kdWN0UGhvdG9GaWxsLFxuICB0eXBlIFVJU3RyaW5ncyxcbiAgdWlTdHJpbmdzRm9yLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcblxudHlwZSBDYXJ0U3RhdGUgPSBcImFkZGluZ1wiIHwgXCJhZGRlZFwiO1xuXG4vKipcbiAqIFdoYXQgbWFrZXMgYSBjYXJkJ3MgcHJvZHVjdCBcInRoZSBzYW1lXCIgZm9yIGl0cyBjYXJ0IGJ1dHRvbjogZXZlcnkgZmllbGRcbiAqIHZhbmlsbGEncyBgY2FyZEtleWAgcmVidWlsZHMgdGhlIGNhcmQgb24uIEEgcHJpY2Utb25seSBjaGFuZ2Uga2VlcHMgaXQuXG4gKi9cbmZ1bmN0aW9uIGNhcnRJZGVudGl0eShwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtwcm9kdWN0LmlkLCBwcm9kdWN0LnRpdGxlLCBwcm9kdWN0LnVybCwgcHJvZHVjdC5pbWFnZVVybCwgcHJvZHVjdC52ZW5kb3JdXG4gICAgLm1hcCgoZmllbGQpID0+IGZpZWxkID8/IFwiXCIpXG4gICAgLmpvaW4oXCJcXDBcIik7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgcHJvZHVjdCBzdHJpcCByZW5kZXJlZCBiZWxvdyB0aGUgZHJvcGRvd24ncyBvcHRpb25zIGdyaWQuIE1pcnJvcnNcbiAqIGBwYWNrYWdlcy9yZWFjdC9zcmMvY29tcG9uZW50cy9Qcm9kdWN0U3RyaXAudHN4YCBhbmQgdGhlIHZhbmlsbGEgY29yZSdzXG4gKiBgcmVuZGVyUHJvZHVjdFN0cmlwYCwgc28gYWxsIHRocmVlIHBhY2thZ2VzIGVtaXQgdGhlIHNhbWUgc3RydWN0dXJlIGFuZFxuICogdGhlbWUgaWRlbnRpY2FsbHkuXG4gKlxuICogVHdvIGxheW91dCBub3RlcyBjYXJyaWVkIG92ZXIgZnJvbSB0aGUgdmFuaWxsYSBpbXBsZW1lbnRhdGlvbjpcbiAqXG4gKiAtIFRoZSBkcm9wZG93biBwYWludHMgYSBiYWNrZ3JvdW5kIGJ1dCBuZXZlciBzZXRzIGBjb2xvcmAsIHNvIGFueXRoaW5nIGhlcmVcbiAqICAgcmVseWluZyBvbiBgY29sb3I6IGluaGVyaXRgIHdvdWxkIHBpY2sgdXAgdGhlICpob3N0IHBhZ2UncyogdGV4dCBjb2xvdXIg4oCUXG4gKiAgIGJsYWNrIHRleHQgb24gYSBkYXJrIHBhbmVsLiBFdmVyeSB0ZXh0IG5vZGUgcmVzb2x2ZXMgaXRzIGNvbG91ciB0aHJvdWdoXG4gKiAgIHRoZSBzYW1lIGAtLWFpYS1vcHRpb24tKmAgY2hhaW4gdGhlIG9wdGlvbnMgdXNlLlxuICogLSBUaGUgb3B0aW9ucyBncmlkIGNhcnJpZXMgYSBuZWdhdGl2ZSBib3R0b20gbWFyZ2luIHNvIHRoZSBmb290ZXIgcmlkZXMgdXBcbiAqICAgb3ZlciBpdHMgcmVzZXJ2ZWQgYmFuZCwgYW5kIHdoYXRldmVyIGZvbGxvd3MgdGhlIGdyaWQgaW5oZXJpdHMgdGhhdCBwdWxsLlxuICogICBUaGUgZHJvcGRvd24gcm9vdCBpcyBtYXJrZWQgYGRhdGEtYWlhLWhhcy1wcm9kdWN0c2AgYW5kIHRoZSBhcHBlYXJhbmNlXG4gKiAgIGxheWVyIHplcm9lcyB0aGUgYmFuZCBhdCBpdHMgc291cmNlIHJhdGhlciB0aGFuIHRoZSBzdHJpcCBjYW5jZWxsaW5nIGl0XG4gKiAgIGZyb20gaGVyZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpYS1wcm9kdWN0LXN0cmlwXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9wcm9kdWN0LXN0cmlwLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9wcm9kdWN0LXN0cmlwLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RTdHJpcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcHJvZHVjdHM6IFByb2R1Y3RbXSA9IFtdO1xuICAvKiogU2NvcGVzIHRoZSBzZWN0aW9uIGxhYmVsJ3MgaWQgdG8gdGhlIG93bmluZyBsaXN0Ym94LiAqL1xuICBASW5wdXQoKSBsaXN0Ym94SWQgPSBcIlwiO1xuICAvKipcbiAgICogRmFsc2Ugd2hpbGUgdGhlIHBhbmVsIGlzIGZhZGluZyBvdXQuIFRoZSBjbG9zZWQgZHJvcGRvd24ga2VlcHMgcmVuZGVyaW5nXG4gICAqIGl0cyBsYXN0IGNvbnRlbnQgZm9yIHRoZSBmYWRlLCBhbmQgZm9jdXNhYmxlIGNhcmRzIGluc2lkZSBpdCB3b3VsZCBzdGlsbFxuICAgKiBhbnN3ZXIgVGFiLlxuICAgKi9cbiAgQElucHV0KCkgZm9jdXNhYmxlID0gdHJ1ZTtcbiAgLyoqIEhvdyB0aGUgY2FyZHMgbGF5IG91dCDigJQgYSBzY3JvbGxpbmcgcm93LCBvciBzdGFja2VkIGFzIGZ1bGwtd2lkdGggcm93cy4gRGVmYXVsdDogXCJyb3dcIi4gKi9cbiAgQElucHV0KCkgbGF5b3V0OiBQcm9kdWN0c0xheW91dCA9IFwicm93XCI7XG4gIEBJbnB1dCgpIGltYWdlRmFsbGJhY2s6IFByb2R1Y3RJbWFnZUZhbGxiYWNrID0gXCJpbWFnZVwiO1xuICAvKiogVGhlIHdvcmRzIG9mIHRoZSB3aWRnZXQgbGFuZ3VhZ2UuIERlZmF1bHQ6IEVuZ2xpc2guICovXG4gIEBJbnB1dCgpIHN0cmluZ3M6IFVJU3RyaW5ncyA9IHVpU3RyaW5nc0ZvcigpO1xuICAvKipcbiAgICogU2V0IHdoZW4gdGhlIGludGVncmF0aW9uIGFkZHMgdG8gY2FydDogZWFjaCBjYXJkIHRoYXQgaXMgbm90IHNvbGQgb3V0XG4gICAqIGRyYXdzIGEgY2FydCBidXR0b24sIHdob3NlIHByZXNzIGNhbGxzIHRoaXMgaW5zdGVhZCBvZiBlbWl0dGluZyBgc2VsZWN0YC5cbiAgICovXG4gIEBJbnB1dCgpIGFkZFRvQ2FydDogKChwcm9kdWN0OiBQcm9kdWN0KSA9PiB2b2lkIHwgUHJvbWlzZUxpa2U8dW5rbm93bj4pIHwgbnVsbCA9IG51bGw7XG4gIHJlYWRvbmx5IGluaXRpYWwgPSBwcm9kdWN0SW5pdGlhbDtcbiAgLyoqXG4gICAqIFBlciBwcm9kdWN0IGlkLCB0aGUgYHNyY2BzIHRoYXQgZmFpbGVkIHRvIGxvYWQ6IGEgY2FyZCBtb3ZlcyBvbiB0byB0aGVcbiAgICogbmV4dCBzb3VyY2UgKGEgU2hvcGlmeSB0aHVtYm5haWwgZmFsbHMgYmFjayB0byB0aGUgb3JpZ2luYWwpIGFuZCBzaG93cyBpdHNcbiAgICogcGxhY2Vob2xkZXIgb25jZSBub25lIGlzIGxlZnQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZhaWxlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgLyoqIFBlciBwcm9kdWN0IGlkLCB0aGUgYHNyY2AgdGhhdCBsYXN0IGZpbmlzaGVkIGxvYWRpbmc7IGl0cyB0aWxlIGRyb3BzIHRoZSBmaWxsLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlcyA9IG5ldyBNYXAoXG4gICAgICB0aGlzLnByb2R1Y3RzLm1hcCgocHJvZHVjdCkgPT4gW3Byb2R1Y3QuaWQsIHByb2R1Y3RJbWFnZVNvdXJjZXMocHJvZHVjdC5pbWFnZVVybCldKSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgW2lkLCBmYWlsZWRdIG9mIHRoaXMuZmFpbGVkSW1hZ2VzKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc291cmNlcy5nZXQoaWQpID8/IFtdO1xuICAgICAgaWYgKCFmYWlsZWQuZXZlcnkoKHNyYykgPT4gY3VycmVudC5pbmNsdWRlcyhzcmMpKSkgdGhpcy5mYWlsZWRJbWFnZXMuZGVsZXRlKGlkKTtcbiAgICB9XG4gICAgLy8gQSBjYXJkIHdob3NlIHByb2R1Y3QgY2hhbmdlZCwgbGVmdCB0aGUgc3RyaXAgb3IgbG9zdCBpdHMgYnV0dG9uIHB1dHMgdGhlXG4gICAgLy8gYnV0dG9uIGJhY2sgYXQgcmVzdCDigJQgd2hhdCByZWJ1aWxkaW5nIHRoZSBjYXJkIGRvZXMgaW4gdmFuaWxsYS5cbiAgICBjb25zdCBieUlkID0gbmV3IE1hcCh0aGlzLnByb2R1Y3RzLm1hcCgocHJvZHVjdCkgPT4gW3Byb2R1Y3QuaWQsIHByb2R1Y3RdKSk7XG4gICAgZm9yIChjb25zdCBbaWQsIGNhcnRdIG9mIHRoaXMuY2FydHMpIHtcbiAgICAgIGNvbnN0IHByb2R1Y3QgPSBieUlkLmdldChpZCk7XG4gICAgICBpZiAoIXByb2R1Y3QgfHwgIXRoaXMuaGFzQ2FydChwcm9kdWN0KSB8fCBjYXJ0SWRlbnRpdHkocHJvZHVjdCkgIT09IGNhcnQuaWRlbnRpdHkpIHtcbiAgICAgICAgdGhpcy5jYXJ0cy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltYWdlU291cmNlKHByb2R1Y3Q6IFByb2R1Y3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBmYWlsZWQgPSB0aGlzLmZhaWxlZEltYWdlcy5nZXQocHJvZHVjdC5pZCkgPz8gW107XG4gICAgcmV0dXJuIHByb2R1Y3RJbWFnZVNvdXJjZXMocHJvZHVjdC5pbWFnZVVybCkuZmluZCgoc3JjKSA9PiAhZmFpbGVkLmluY2x1ZGVzKHNyYykpID8/IG51bGw7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgY2FyZCdzIHBob3RvIGhhcyBsb2FkZWQsIHNvIHRoZSBwbGFjZWhvbGRlciBmaWxsIHN0ZXBzIGFzaWRlLiAqL1xuICBpbWFnZUxvYWRlZChwcm9kdWN0OiBQcm9kdWN0KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3JjID0gdGhpcy5pbWFnZVNvdXJjZShwcm9kdWN0KTtcbiAgICByZXR1cm4gc3JjICE9PSBudWxsICYmIHRoaXMubG9hZGVkSW1hZ2VzLmdldChwcm9kdWN0LmlkKSA9PT0gc3JjO1xuICB9XG5cbiAgb25JbWFnZUxvYWQocHJvZHVjdDogUHJvZHVjdCwgc3JjOiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlZEltYWdlcy5zZXQocHJvZHVjdC5pZCwgc3JjKTtcbiAgICBjb25zdCBpbWcgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IGZpbGwgPSBpbWcgPyBwcm9kdWN0UGhvdG9GaWxsKGltZy5uYXR1cmFsV2lkdGgsIGltZy5uYXR1cmFsSGVpZ2h0KSA6IG51bGw7XG4gICAgaWYgKGZpbGwpIHRoaXMucGhvdG9GaWxscy5zZXQocHJvZHVjdC5pZCwgZmlsbCk7XG4gICAgZWxzZSB0aGlzLnBob3RvRmlsbHMuZGVsZXRlKHByb2R1Y3QuaWQpO1xuICB9XG5cbiAgb25JbWFnZUVycm9yKHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBzcmMgPSB0aGlzLmltYWdlU291cmNlKHByb2R1Y3QpO1xuICAgIGlmIChzcmMpIHRoaXMuZmFpbGVkSW1hZ2VzLnNldChwcm9kdWN0LmlkLCBbLi4uKHRoaXMuZmFpbGVkSW1hZ2VzLmdldChwcm9kdWN0LmlkKSA/PyBbXSksIHNyY10pO1xuICAgIC8vIFRoZSBuZXh0IHNvdXJjZSwgb3IgdGhlIHBsYWNlaG9sZGVyLCBmaWxscyB0aGUgdGlsZSB1bnRpbCBpdCBsb2Fkcy5cbiAgICB0aGlzLnBob3RvRmlsbHMuZGVsZXRlKHByb2R1Y3QuaWQpO1xuICB9XG5cbiAgLyoqIFBlciBwcm9kdWN0IGlkLCBob3cgbXVjaCBvZiB0aGUgdGlsZSB0aGUgbG9hZGVkIHBob3RvIGZpbGxzIChwcm9kdWN0UGhvdG9GaWxsKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwaG90b0ZpbGxzID0gbmV3IE1hcDxzdHJpbmcsIHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfT4oKTtcblxuICAvKipcbiAgICogVGhlIGNhcmQncyBwaG90by1maWxsIGN1c3RvbSBwcm9wZXJ0aWVzLCB3aGljaCBwdXQgdGhlIGNhcnQgYnV0dG9uIGluc2lkZVxuICAgKiB0aGUgcGhvdG8ncyBvd24gY29ybmVyLiBOdWxsIHVudGlsIHRoZSBwaG90byBsb2Fkcy5cbiAgICovXG4gIHBob3RvRmlsbFN0eWxlKHByb2R1Y3Q6IFByb2R1Y3QpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCB7XG4gICAgY29uc3QgZmlsbCA9IHRoaXMucGhvdG9GaWxscy5nZXQocHJvZHVjdC5pZCk7XG4gICAgLy8gT25seSB0aGUgcGhvdG8gb24gc2NyZWVuIGNvdW50czogYSBjaGFuZ2VkIG9yIHJlbW92ZWQgaW1hZ2UgZHJvcHMgaXQuXG4gICAgaWYgKCFmaWxsIHx8ICF0aGlzLmltYWdlTG9hZGVkKHByb2R1Y3QpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgXCItLWFpYS1wcm9kdWN0LXBob3RvLWZpbGwteFwiOiBTdHJpbmcoZmlsbC54KSxcbiAgICAgIFwiLS1haWEtcHJvZHVjdC1waG90by1maWxsLXlcIjogU3RyaW5nKGZpbGwueSksXG4gICAgfTtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFByb2R1Y3Q+KCk7XG4gIC8qKlxuICAgKiBGb2N1cyBtb3ZlZCBpbnRvIC8gb3V0IG9mIHRoZSBzdHJpcC4gVGhlIHBhbmVsIGNsb3NlcyBvbiBibHVyIGJ5IGRlZmF1bHRcbiAgICogYW5kIHRoZSBlZGl0b3IgYmx1cnMgdGhlIG1vbWVudCBhIGNhcmQgdGFrZXMgZm9jdXMsIHNvIHRoZSBkcm9wZG93blxuICAgKiByZXBvcnRzIGZvY3VzIGFzIHN0aWxsLWluc2lkZSByYXRoZXIgdGhhbiBzaHV0dGluZyBvdXQgZnJvbSB1bmRlciB0aGUgY2FyZFxuICAgKiB0aGUgdXNlciBqdXN0IHRhYmJlZCB0by5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBmb2N1c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIGRldGFjaFdoZWVsOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAvKipcbiAgICogUGVyIHByb2R1Y3QgaWQsIHRoZSBjYXJ0IGJ1dHRvbidzIHN0YXRlIHdoaWxlIGl0IGlzbid0IGF0IHJlc3QsIHdpdGggdGhlXG4gICAqIHByb2R1Y3QgaWRlbnRpdHkgaXQgYmVsb25ncyB0byBhbmQgdGhlIHByZXNzIHRoYXQgc2V0IGl0IChhIHNldHRsZSBmcm9tIGFuXG4gICAqIGVhcmxpZXIgcHJlc3MsIG9yIGZvciBhIGNhcmQgc2luY2UgcmVzZXQsIGlzIGRyb3BwZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjYXJ0cyA9IG5ldyBNYXA8c3RyaW5nLCB7IHN0YXRlOiBDYXJ0U3RhdGU7IGlkZW50aXR5OiBzdHJpbmc7IHByZXNzOiBvYmplY3QgfT4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBtb3VzZSB3aGVlbCBvdmVyIHRoZSByb3cgc2Nyb2xscyBpdCBzaWRld2F5cy4gVGhlIHJvdyBzaXRzIGluc2lkZSB0aGVcbiAgICogc2VjdGlvbidzIGAqbmdJZmAsIHNvIHRoZSBxdWVyeSBmaXJlcyB3aXRoIHRoZSBlbGVtZW50IGFzIHByb2R1Y3RzIGFycml2ZVxuICAgKiBhbmQgd2l0aCBgdW5kZWZpbmVkYCBhcyB0aGV5IGdvOyB0aGUgYmluZGluZyBmb2xsb3dzIGl0IGVpdGhlciB3YXkuXG4gICAqL1xuICBAVmlld0NoaWxkKFwicm93XCIpXG4gIHNldCByb3cocmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZGV0YWNoV2hlZWw/LigpO1xuICAgIHRoaXMuZGV0YWNoV2hlZWwgPSByZWYgPyBhdHRhY2hQcm9kdWN0Um93V2hlZWwocmVmLm5hdGl2ZUVsZW1lbnQpIDogbnVsbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLmRldGFjaFdoZWVsPy4oKTtcbiAgICB0aGlzLmRldGFjaFdoZWVsID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBBIHNvbGQtb3V0IHByb2R1Y3QgY2FuJ3QgYmUgYWRkZWQsIHNvIGl0cyBjYXJkIGhhcyBubyBidXR0b24gYXQgYWxsLiAqL1xuICBoYXNDYXJ0KHByb2R1Y3Q6IFByb2R1Y3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUb0NhcnQgIT09IG51bGwgJiYgcHJvZHVjdC5hdmFpbGFibGUgIT09IGZhbHNlO1xuICB9XG5cbiAgY2FydFN0YXRlKHByb2R1Y3Q6IFByb2R1Y3QpOiBDYXJ0U3RhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jYXJ0cy5nZXQocHJvZHVjdC5pZCk/LnN0YXRlID8/IG51bGw7XG4gIH1cblxuICBvbkNhcnRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgLy8gS2V5cyBuZXZlciByZWFjaCB0aGUgY2FyZCwgd2hvc2Ugb3duIEVudGVyIC8gU3BhY2Ugd291bGQgc2VsZWN0IGl0LlxuICAgIGlmIChldmVudC5rZXkgIT09IFwiRW50ZXJcIiAmJiBldmVudC5rZXkgIT09IFwiIFwiKSByZXR1cm47XG4gICAgdGhpcy5vbkNhcnRQcmVzcyhldmVudCwgcHJvZHVjdCk7XG4gIH1cblxuICAvKipcbiAgICogTWlycm9ycyB2YW5pbGxhJ3MgYGJ1aWxkQ2FydEJ1dHRvbmAgcHJlc3M6IGFkZGluZyDihpIgYWRkZWQsIG9yIHJlc3Qgb24gYVxuICAgKiByZWplY3Rpb24uIFRoZSBjaGVjayBzdGF5cyB1bnRpbCB0aGUgcHJvZHVjdCBjaGFuZ2VzOyBhbm90aGVyIHByZXNzIGFkZHMgYWdhaW4uXG4gICAqL1xuICBvbkNhcnRQcmVzcyhldmVudDogRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmFkZFRvQ2FydDtcbiAgICBpZiAoIWhhbmRsZXIgfHwgdGhpcy5jYXJ0U3RhdGUocHJvZHVjdCkgPT09IFwiYWRkaW5nXCIpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IHByb2R1Y3QuaWQ7XG4gICAgY29uc3QgcHJlc3MgPSB7fTtcbiAgICB0aGlzLmNhcnRzLnNldChpZCwgeyBzdGF0ZTogXCJhZGRpbmdcIiwgaWRlbnRpdHk6IGNhcnRJZGVudGl0eShwcm9kdWN0KSwgcHJlc3MgfSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgbGV0IHBlbmRpbmc6IFByb21pc2VMaWtlPHVua25vd24+O1xuICAgIHRyeSB7XG4gICAgICBwZW5kaW5nID0gUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIocHJvZHVjdCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwZW5kaW5nID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBwZW5kaW5nLnRoZW4oXG4gICAgICAoKSA9PiB0aGlzLnNldHRsZUNhcnQoaWQsIHByZXNzLCBcImFkZGVkXCIpLFxuICAgICAgKCkgPT4gdGhpcy5zZXR0bGVDYXJ0KGlkLCBwcmVzcywgbnVsbCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dGxlQ2FydChpZDogc3RyaW5nLCBwcmVzczogb2JqZWN0LCBzdGF0ZTogQ2FydFN0YXRlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGNhcnQgPSB0aGlzLmNhcnRzLmdldChpZCk7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IGNhcnQ/LnByZXNzICE9PSBwcmVzcykgcmV0dXJuO1xuICAgIGlmIChzdGF0ZSkgY2FydC5zdGF0ZSA9IHN0YXRlO1xuICAgIGVsc2UgdGhpcy5jYXJ0cy5kZWxldGUoaWQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5saXN0Ym94SWR9LXByb2R1Y3RzLWxhYmVsYDtcbiAgfVxuXG4gIGNhcmRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5saXN0Ym94SWR9LXByb2R1Y3QtJHtpbmRleH1gO1xuICB9XG5cbiAgdHJhY2tCeVByb2R1Y3QgPSAoXzogbnVtYmVyLCBwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nID0+IHByb2R1Y3QuaWQ7XG5cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCwgcHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIC8vIExldCB0aGUgYnJvd3NlciBrZWVwIHRoZSBjbGlja3MgdGhhdCBtZWFuIFwib3BlbiB0aGlzIHNvbWV3aGVyZSBlbHNlXCIg4oCUXG4gICAgLy8gaW50ZXJjZXB0aW5nIHRoZW0gd291bGQgZGVmZWF0IHRoZSBwb2ludCBvZiByZW5kZXJpbmcgYW4gPGE+LiBUaG9zZSBhcmVcbiAgICAvLyBuYXZpZ2F0aW9ucyB0aGUgdXNlciBhc2tlZCBmb3IgZXhwbGljaXRseSwgc28gdGhleSBkb24ndCBlbWl0LlxuICAgIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2VsZWN0LmVtaXQocHJvZHVjdCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBcIkVudGVyXCIgJiYgZXZlbnQua2V5ICE9PSBcIiBcIikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZWxlY3QuZW1pdChwcm9kdWN0KTtcbiAgfVxuXG4gIG9uQ2FyZEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9uQ2FyZEJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKG5leHQ/LmNsb3Nlc3QoXCJbZGF0YS1haWEtZHJvcGRvd25dXCIpKSByZXR1cm47XG4gICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxufVxuIiwiPCEtLSBgZ3JvdXBgIGlzIHRoZSBvbmUgcm9sZSBhIGxpc3Rib3ggYWNjZXB0cyBhcm91bmQgYSBzZXQgb2Ygb3B0aW9ucywgc28gdGhlXG4gICAgIHN0cmlwIHN0YXlzIGluc2lkZSB0aGUgbGlzdGJveCB3aXRob3V0IGJyZWFraW5nIGl0cyBjb250ZW50IG1vZGVsLiAtLT5cbjxzZWN0aW9uXG4gICpuZ0lmPVwicHJvZHVjdHMubGVuZ3RoID4gMFwiXG4gIGNsYXNzPVwiYWlhLXByb2R1Y3RzXCJcbiAgZGF0YS1haWEtcHJvZHVjdHM9XCJcIlxuICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0cy1sYXlvdXRdPVwibGF5b3V0XCJcbiAgcm9sZT1cImdyb3VwXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuPlxuICA8IS0tIGRhdGEtYWlhLXByb2R1Y3RzLWxhYmVsOiB0aGUgc2Nyb2xsIGFycm93IGNlbnRyZXMgaXRzZWxmIG9uIHRoaXMgcm93LiAtLT5cbiAgPGRpdiBjbGFzcz1cImFpYS1wcm9kdWN0cy1sYWJlbFwiIFtpZF09XCJsYWJlbElkXCIgZGF0YS1haWEtcHJvZHVjdHMtbGFiZWw9XCJcIj57eyBzdHJpbmdzLnByb2R1Y3RzIH19PC9kaXY+XG5cbiAgPCEtLSAjcm93OiB0aGUgY29tcG9uZW50IGJpbmRzIHdoZWVsLXRvLXNpZGV3YXlzIHNjcm9sbGluZyBvbiBpdC4gLS0+XG4gIDxkaXYgI3JvdyBjbGFzcz1cImFpYS1wcm9kdWN0cy1yb3dcIiBkYXRhLWFpYS1wcm9kdWN0cy1yb3c9XCJcIj5cbiAgICA8IS0tIEEgcmVhbCA8YSBocmVmPiByYXRoZXIgdGhhbiBhIDxkaXY+OiBpdCBrZWVwcyB0aGUgYnJvd3NlcidzIG93biBsaW5rXG4gICAgICAgICBhZmZvcmRhbmNlcyDigJQgY21kL2N0cmwtY2xpY2sgZm9yIGEgbmV3IHRhYiwgbWlkZGxlLWNsaWNrLCByaWdodC1jbGljayDihpJcbiAgICAgICAgIFwiY29weSBsaW5rIGFkZHJlc3NcIi4gcm9sZT1cIm9wdGlvblwiIG92ZXJyaWRlcyBob3cgYXNzaXN0aXZlIHRlY2hcbiAgICAgICAgIGFubm91bmNlcyBpdCwgd2hpY2ggaXMgY29ycmVjdCBpbnNpZGUgYSBsaXN0Ym94OyB0aGUgZGVsaWJlcmF0ZSB0cmFkZVxuICAgICAgICAgaXMgdGhhdCBBVCBubyBsb25nZXIgY2FsbHMgaXQgYSBsaW5rLiBBbiBhdHRyaWJ1dGUgYmluZGluZywgc28gYVxuICAgICAgICAgcHJvZHVjdCB3aXRob3V0IGEgdXJsIGdldHMgbm8gaHJlZiBhdCBhbGwgcmF0aGVyIHRoYW4gXCJudWxsXCIuIC0tPlxuICAgIDxhXG4gICAgICAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBwcm9kdWN0czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVByb2R1Y3RcIlxuICAgICAgW2lkXT1cImNhcmRJZChpKVwiXG4gICAgICBjbGFzcz1cImFpYS1wcm9kdWN0XCJcbiAgICAgIGRhdGEtYWlhLXByb2R1Y3Q9XCJcIlxuICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1zb2xkLW91dF09XCJwcm9kdWN0LmF2YWlsYWJsZSA9PT0gZmFsc2UgPyAnJyA6IG51bGxcIlxuICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1oYXMtY2FydF09XCJoYXNDYXJ0KHByb2R1Y3QpID8gJycgOiBudWxsXCJcbiAgICAgIFtzdHlsZV09XCJwaG90b0ZpbGxTdHlsZShwcm9kdWN0KVwiXG4gICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZmFsc2VcIlxuICAgICAgW2F0dHIuaHJlZl09XCJwcm9kdWN0LnVybCA/PyBudWxsXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cImZvY3VzYWJsZSA/IDAgOiAtMVwiXG4gICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgIChmb2N1cyk9XCJvbkNhcmRGb2N1cygpXCJcbiAgICAgIChibHVyKT1cIm9uQ2FyZEJsdXIoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJhaWEtcHJvZHVjdC1tZWRpYVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLXByb2R1Y3QtcGxhY2Vob2xkZXJdPVwiIWltYWdlU291cmNlKHByb2R1Y3QpICYmIGltYWdlRmFsbGJhY2sgPT09ICdpbWFnZScgPyAnJyA6IG51bGxcIlxuICAgICAgICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0LWluaXRpYWxdPVwiIWltYWdlU291cmNlKHByb2R1Y3QpICYmIGltYWdlRmFsbGJhY2sgPT09ICdpbml0aWFsJyA/ICcnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLWltYWdlLWxvYWRlZF09XCJpbWFnZUxvYWRlZChwcm9kdWN0KSA/ICcnIDogbnVsbFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gYWx0PVwiXCIgb24gcHVycG9zZTogdGhlIHRpdGxlIGlzIGFscmVhZHkgdGhlIGNhcmQncyBhY2Nlc3NpYmxlXG4gICAgICAgICAgICAgbmFtZSwgYW5kIHJlcGVhdGluZyBpdCB3b3VsZCBoYXZlIGEgc2NyZWVuIHJlYWRlciByZWFkIGl0IHR3aWNlLiAtLT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiaW1hZ2VTb3VyY2UocHJvZHVjdCkgYXMgc3JjXCJcbiAgICAgICAgICBjbGFzcz1cImFpYS1wcm9kdWN0LWltYWdlXCJcbiAgICAgICAgICBbc3JjXT1cInNyY1wiXG4gICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocHJvZHVjdCwgc3JjLCAkZXZlbnQpXCJcbiAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKHByb2R1Y3QpXCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBkZWNvZGluZz1cImFzeW5jXCJcbiAgICAgICAgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbWFnZVNvdXJjZShwcm9kdWN0KSAmJiBpbWFnZUZhbGxiYWNrID09PSAnaW5pdGlhbCdcIj57eyBpbml0aWFsKHByb2R1Y3QudGl0bGUpIH19PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gRXZlcnkgZmllbGQgYnV0IHRoZSB0aXRsZSBpcyBvcHRpb25hbCwgc28gYWJzZW50IG9uZXMgcmVuZGVyIG5vXG4gICAgICAgICAgIGVsZW1lbnQgYXQgYWxsIOKAlCB0aGUgY29sdW1uIGdhcCBjYW4ndCBsZWF2ZSBhIGhvbGUgZm9yIGEgYm94IHRoYXRcbiAgICAgICAgICAgaXNuJ3QgdGhlcmUuIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhaWEtcHJvZHVjdC1ib2R5XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC52ZW5kb3JcIiBjbGFzcz1cImFpYS1wcm9kdWN0LXZlbmRvclwiPnt7IHByb2R1Y3QudmVuZG9yIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImFpYS1wcm9kdWN0LXRpdGxlXCI+e3sgcHJvZHVjdC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LnByaWNlXCIgY2xhc3M9XCJhaWEtcHJvZHVjdC1wcmljZVwiPnt7IHByb2R1Y3QucHJpY2UgfX08L3NwYW4+XG4gICAgICAgIDwhLS0gSW4gdGhlIHRleHQgY29sdW1uIHJhdGhlciB0aGFuIHRoZSBhcmlhLWhpZGRlbiBtZWRpYSB0aWxlLCBzbyB0aGVcbiAgICAgICAgICAgICBjYXJkJ3MgYWNjZXNzaWJsZSBuYW1lIHNheXMgaXQ7IHRoZSBzdHlsZXNoZWV0IGxpZnRzIGl0IG92ZXIgdGhlXG4gICAgICAgICAgICAgaW1hZ2UuIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3QuYXZhaWxhYmxlID09PSBmYWxzZVwiIGNsYXNzPVwiYWlhLXByb2R1Y3QtYmFkZ2VcIj57eyBzdHJpbmdzLnNvbGRPdXQgfX08L3NwYW4+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gVGhlIGFkZC10by1jYXJ0IGJ1dHRvbjogYSBjaGlsZCBvZiB0aGUgY2FyZCByYXRoZXIgdGhhbiBvZiB0aGVcbiAgICAgICAgICAgYXJpYS1oaWRkZW4gbWVkaWEgdGlsZTsgdGhlIHN0eWxlc2hlZXQgbGlmdHMgaXQgb3ZlciB0aGUgdGlsZSdzXG4gICAgICAgICAgIGJvdHRvbSByaWdodCBjb3JuZXIuIEEgcm9sZT1cImJ1dHRvblwiIHNwYW4sIG5vdCBhIDxidXR0b24+OlxuICAgICAgICAgICBpbnRlcmFjdGl2ZSBjb250ZW50IGluc2lkZSBhbiA8YT4gaXMgaW52YWxpZCBIVE1MLiBJdHMgcHJlc3MgbmV2ZXJcbiAgICAgICAgICAgcmVhY2hlcyB0aGUgY2FyZCwgc28gaXQgbmV2ZXIgc2VsZWN0cy4gU29sZC1vdXQgY2FyZHMgaGF2ZSBub25lLiAtLT5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0lmPVwiaGFzQ2FydChwcm9kdWN0KVwiXG4gICAgICAgIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydFwiXG4gICAgICAgIGRhdGEtYWlhLXByb2R1Y3QtY2FydD1cIlwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuYWRkVG9DYXJ0ICsgJzogJyArIHByb2R1Y3QudGl0bGVcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJmb2N1c2FibGUgPyAwIDogLTFcIlxuICAgICAgICBbYXR0ci5kYXRhLWFpYS1jYXJ0LXN0YXRlXT1cImNhcnRTdGF0ZShwcm9kdWN0KVwiXG4gICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJjYXJ0U3RhdGUocHJvZHVjdCkgPT09ICdhZGRpbmcnID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgIChjbGljayk9XCJvbkNhcnRQcmVzcygkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25DYXJ0S2V5RG93bigkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uQ2FyZEZvY3VzKClcIlxuICAgICAgICAoYmx1cik9XCJvbkNhcmRCbHVyKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiPlxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydC1nbHlwaFwiIGQ9XCJNMiAzaDIuMmwyLjQgMTEuMmEyIDIgMCAwIDAgMiAxLjZoOC45YTIgMiAwIDAgMCAxLjktMS41TDIxIDhINlwiIC8+XG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJhaWEtcHJvZHVjdC1jYXJ0LWdseXBoXCIgZD1cIk0xMy41IDYuNXYtNE0xMS41IDQuNWg0XCIgLz5cbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtY2hlY2tcIiBkPVwiTTUgMTIuNWw0LjUgNC41TDE5IDcuNVwiIC8+XG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJhaWEtcHJvZHVjdC1jYXJ0LXNwaW5uZXJcIiBkPVwiTTEyIDRhOCA4IDAgMSAwIDggOFwiIC8+XG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtZ2x5cGhcIiBjeD1cIjlcIiBjeT1cIjIwXCIgcj1cIjEuM1wiIC8+XG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtZ2x5cGhcIiBjeD1cIjE3LjVcIiBjeT1cIjIwXCIgcj1cIjEuM1wiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuICAgIDwvYT5cbiAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zdHJpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxxQkFBcUIsRUFJckIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxnQkFBZ0IsRUFFaEIsWUFBWSxHQUNiLE1BQU0scUNBQXFDLENBQUM7OztBQUk3Qzs7O0dBR0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxPQUFnQjtJQUNwQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQzlFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBVUgsTUFBTSxPQUFPLHFCQUFxQjtJQVRsQztRQVVXLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDbEMsMkRBQTJEO1FBQ2xELGNBQVMsR0FBRyxFQUFFLENBQUM7UUFD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QU07c0JBQXhCLE1BQU07Z0JBT1ksV0FBVztzQkFBN0IsTUFBTTtnQkFrQkgsR0FBRztzQkFETixTQUFTO3VCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgdHlwZSBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICB0eXBlIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoUHJvZHVjdFJvd1doZWVsLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdEltYWdlRmFsbGJhY2ssXG4gIHR5cGUgUHJvZHVjdHNMYXlvdXQsXG4gIHByb2R1Y3RJbWFnZVNvdXJjZXMsXG4gIHByb2R1Y3RJbml0aWFsLFxuICBwcm9kdWN0UGhvdG9GaWxsLFxuICB0eXBlIFVJU3RyaW5ncyxcbiAgdWlTdHJpbmdzRm9yLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcblxudHlwZSBDYXJ0U3RhdGUgPSBcImFkZGluZ1wiIHwgXCJhZGRlZFwiO1xuXG4vKipcbiAqIFdoYXQgbWFrZXMgYSBjYXJkJ3MgcHJvZHVjdCBcInRoZSBzYW1lXCIgZm9yIGl0cyBjYXJ0IGJ1dHRvbjogZXZlcnkgZmllbGRcbiAqIHZhbmlsbGEncyBgY2FyZEtleWAgcmVidWlsZHMgdGhlIGNhcmQgb24uIEEgcHJpY2Utb25seSBjaGFuZ2Uga2VlcHMgaXQuXG4gKi9cbmZ1bmN0aW9uIGNhcnRJZGVudGl0eShwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtwcm9kdWN0LmlkLCBwcm9kdWN0LnRpdGxlLCBwcm9kdWN0LnVybCwgcHJvZHVjdC5pbWFnZVVybCwgcHJvZHVjdC52ZW5kb3JdXG4gICAgLm1hcCgoZmllbGQpID0+IGZpZWxkID8/IFwiXCIpXG4gICAgLmpvaW4oXCJcXDBcIik7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgcHJvZHVjdCBzdHJpcCByZW5kZXJlZCBiZWxvdyB0aGUgZHJvcGRvd24ncyBvcHRpb25zIGdyaWQuIE1pcnJvcnNcbiAqIGBwYWNrYWdlcy9yZWFjdC9zcmMvY29tcG9uZW50cy9Qcm9kdWN0U3RyaXAudHN4YCBhbmQgdGhlIHZhbmlsbGEgY29yZSdzXG4gKiBgcmVuZGVyUHJvZHVjdFN0cmlwYCwgc28gYWxsIHRocmVlIHBhY2thZ2VzIGVtaXQgdGhlIHNhbWUgc3RydWN0dXJlIGFuZFxuICogdGhlbWUgaWRlbnRpY2FsbHkuXG4gKlxuICogVHdvIGxheW91dCBub3RlcyBjYXJyaWVkIG92ZXIgZnJvbSB0aGUgdmFuaWxsYSBpbXBsZW1lbnRhdGlvbjpcbiAqXG4gKiAtIFRoZSBkcm9wZG93biBwYWludHMgYSBiYWNrZ3JvdW5kIGJ1dCBuZXZlciBzZXRzIGBjb2xvcmAsIHNvIGFueXRoaW5nIGhlcmVcbiAqICAgcmVseWluZyBvbiBgY29sb3I6IGluaGVyaXRgIHdvdWxkIHBpY2sgdXAgdGhlICpob3N0IHBhZ2UncyogdGV4dCBjb2xvdXIg4oCUXG4gKiAgIGJsYWNrIHRleHQgb24gYSBkYXJrIHBhbmVsLiBFdmVyeSB0ZXh0IG5vZGUgcmVzb2x2ZXMgaXRzIGNvbG91ciB0aHJvdWdoXG4gKiAgIHRoZSBzYW1lIGAtLWFpYS1vcHRpb24tKmAgY2hhaW4gdGhlIG9wdGlvbnMgdXNlLlxuICogLSBUaGUgb3B0aW9ucyBncmlkIGNhcnJpZXMgYSBuZWdhdGl2ZSBib3R0b20gbWFyZ2luIHNvIHRoZSBmb290ZXIgcmlkZXMgdXBcbiAqICAgb3ZlciBpdHMgcmVzZXJ2ZWQgYmFuZCwgYW5kIHdoYXRldmVyIGZvbGxvd3MgdGhlIGdyaWQgaW5oZXJpdHMgdGhhdCBwdWxsLlxuICogICBUaGUgZHJvcGRvd24gcm9vdCBpcyBtYXJrZWQgYGRhdGEtYWlhLWhhcy1wcm9kdWN0c2AgYW5kIHRoZSBhcHBlYXJhbmNlXG4gKiAgIGxheWVyIHplcm9lcyB0aGUgYmFuZCBhdCBpdHMgc291cmNlIHJhdGhlciB0aGFuIHRoZSBzdHJpcCBjYW5jZWxsaW5nIGl0XG4gKiAgIGZyb20gaGVyZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpYS1wcm9kdWN0LXN0cmlwXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9wcm9kdWN0LXN0cmlwLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9wcm9kdWN0LXN0cmlwLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RTdHJpcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcHJvZHVjdHM6IFByb2R1Y3RbXSA9IFtdO1xuICAvKiogU2NvcGVzIHRoZSBzZWN0aW9uIGxhYmVsJ3MgaWQgdG8gdGhlIG93bmluZyBsaXN0Ym94LiAqL1xuICBASW5wdXQoKSBsaXN0Ym94SWQgPSBcIlwiO1xuICAvKipcbiAgICogRmFsc2Ugd2hpbGUgdGhlIHBhbmVsIGlzIGZhZGluZyBvdXQuIFRoZSBjbG9zZWQgZHJvcGRvd24ga2VlcHMgcmVuZGVyaW5nXG4gICAqIGl0cyBsYXN0IGNvbnRlbnQgZm9yIHRoZSBmYWRlLCBhbmQgZm9jdXNhYmxlIGNhcmRzIGluc2lkZSBpdCB3b3VsZCBzdGlsbFxuICAgKiBhbnN3ZXIgVGFiLlxuICAgKi9cbiAgQElucHV0KCkgZm9jdXNhYmxlID0gdHJ1ZTtcbiAgLyoqIEhvdyB0aGUgY2FyZHMgbGF5IG91dCDigJQgYSBzY3JvbGxpbmcgcm93LCBvciBzdGFja2VkIGFzIGZ1bGwtd2lkdGggcm93cy4gRGVmYXVsdDogXCJyb3dcIi4gKi9cbiAgQElucHV0KCkgbGF5b3V0OiBQcm9kdWN0c0xheW91dCA9IFwicm93XCI7XG4gIEBJbnB1dCgpIGltYWdlRmFsbGJhY2s6IFByb2R1Y3RJbWFnZUZhbGxiYWNrID0gXCJpbWFnZVwiO1xuICAvKiogVGhlIHdvcmRzIG9mIHRoZSB3aWRnZXQgbGFuZ3VhZ2UuIERlZmF1bHQ6IEVuZ2xpc2guICovXG4gIEBJbnB1dCgpIHN0cmluZ3M6IFVJU3RyaW5ncyA9IHVpU3RyaW5nc0ZvcigpO1xuICAvKipcbiAgICogU2V0IHdoZW4gdGhlIGludGVncmF0aW9uIGFkZHMgdG8gY2FydDogZWFjaCBjYXJkIHRoYXQgaXMgbm90IHNvbGQgb3V0XG4gICAqIGRyYXdzIGEgY2FydCBidXR0b24sIHdob3NlIHByZXNzIGNhbGxzIHRoaXMgaW5zdGVhZCBvZiBlbWl0dGluZyBgc2VsZWN0YC5cbiAgICovXG4gIEBJbnB1dCgpIGFkZFRvQ2FydDogKChwcm9kdWN0OiBQcm9kdWN0KSA9PiB2b2lkIHwgUHJvbWlzZUxpa2U8dW5rbm93bj4pIHwgbnVsbCA9IG51bGw7XG4gIHJlYWRvbmx5IGluaXRpYWwgPSBwcm9kdWN0SW5pdGlhbDtcbiAgLyoqXG4gICAqIFBlciBwcm9kdWN0IGlkLCB0aGUgYHNyY2BzIHRoYXQgZmFpbGVkIHRvIGxvYWQ6IGEgY2FyZCBtb3ZlcyBvbiB0byB0aGVcbiAgICogbmV4dCBzb3VyY2UgKGEgU2hvcGlmeSB0aHVtYm5haWwgZmFsbHMgYmFjayB0byB0aGUgb3JpZ2luYWwpIGFuZCBzaG93cyBpdHNcbiAgICogcGxhY2Vob2xkZXIgb25jZSBub25lIGlzIGxlZnQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZhaWxlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgLyoqIFBlciBwcm9kdWN0IGlkLCB0aGUgYHNyY2AgdGhhdCBsYXN0IGZpbmlzaGVkIGxvYWRpbmc7IGl0cyB0aWxlIGRyb3BzIHRoZSBmaWxsLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlcyA9IG5ldyBNYXAoXG4gICAgICB0aGlzLnByb2R1Y3RzLm1hcCgocHJvZHVjdCkgPT4gW3Byb2R1Y3QuaWQsIHByb2R1Y3RJbWFnZVNvdXJjZXMocHJvZHVjdC5pbWFnZVVybCldKSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgW2lkLCBmYWlsZWRdIG9mIHRoaXMuZmFpbGVkSW1hZ2VzKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc291cmNlcy5nZXQoaWQpID8/IFtdO1xuICAgICAgaWYgKCFmYWlsZWQuZXZlcnkoKHNyYykgPT4gY3VycmVudC5pbmNsdWRlcyhzcmMpKSkgdGhpcy5mYWlsZWRJbWFnZXMuZGVsZXRlKGlkKTtcbiAgICB9XG4gICAgLy8gQSBjYXJkIHdob3NlIHByb2R1Y3QgY2hhbmdlZCwgbGVmdCB0aGUgc3RyaXAgb3IgbG9zdCBpdHMgYnV0dG9uIHB1dHMgdGhlXG4gICAgLy8gYnV0dG9uIGJhY2sgYXQgcmVzdCDigJQgd2hhdCByZWJ1aWxkaW5nIHRoZSBjYXJkIGRvZXMgaW4gdmFuaWxsYS5cbiAgICBjb25zdCBieUlkID0gbmV3IE1hcCh0aGlzLnByb2R1Y3RzLm1hcCgocHJvZHVjdCkgPT4gW3Byb2R1Y3QuaWQsIHByb2R1Y3RdKSk7XG4gICAgZm9yIChjb25zdCBbaWQsIGNhcnRdIG9mIHRoaXMuY2FydHMpIHtcbiAgICAgIGNvbnN0IHByb2R1Y3QgPSBieUlkLmdldChpZCk7XG4gICAgICBpZiAoIXByb2R1Y3QgfHwgIXRoaXMuaGFzQ2FydChwcm9kdWN0KSB8fCBjYXJ0SWRlbnRpdHkocHJvZHVjdCkgIT09IGNhcnQuaWRlbnRpdHkpIHtcbiAgICAgICAgdGhpcy5jYXJ0cy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltYWdlU291cmNlKHByb2R1Y3Q6IFByb2R1Y3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBmYWlsZWQgPSB0aGlzLmZhaWxlZEltYWdlcy5nZXQocHJvZHVjdC5pZCkgPz8gW107XG4gICAgcmV0dXJuIHByb2R1Y3RJbWFnZVNvdXJjZXMocHJvZHVjdC5pbWFnZVVybCkuZmluZCgoc3JjKSA9PiAhZmFpbGVkLmluY2x1ZGVzKHNyYykpID8/IG51bGw7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgY2FyZCdzIHBob3RvIGhhcyBsb2FkZWQsIHNvIHRoZSBwbGFjZWhvbGRlciBmaWxsIHN0ZXBzIGFzaWRlLiAqL1xuICBpbWFnZUxvYWRlZChwcm9kdWN0OiBQcm9kdWN0KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3JjID0gdGhpcy5pbWFnZVNvdXJjZShwcm9kdWN0KTtcbiAgICByZXR1cm4gc3JjICE9PSBudWxsICYmIHRoaXMubG9hZGVkSW1hZ2VzLmdldChwcm9kdWN0LmlkKSA9PT0gc3JjO1xuICB9XG5cbiAgb25JbWFnZUxvYWQocHJvZHVjdDogUHJvZHVjdCwgc3JjOiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlZEltYWdlcy5zZXQocHJvZHVjdC5pZCwgc3JjKTtcbiAgICBjb25zdCBpbWcgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IGZpbGwgPSBpbWcgPyBwcm9kdWN0UGhvdG9GaWxsKGltZy5uYXR1cmFsV2lkdGgsIGltZy5uYXR1cmFsSGVpZ2h0KSA6IG51bGw7XG4gICAgaWYgKGZpbGwpIHRoaXMucGhvdG9GaWxscy5zZXQocHJvZHVjdC5pZCwgZmlsbCk7XG4gICAgZWxzZSB0aGlzLnBob3RvRmlsbHMuZGVsZXRlKHByb2R1Y3QuaWQpO1xuICB9XG5cbiAgb25JbWFnZUVycm9yKHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBzcmMgPSB0aGlzLmltYWdlU291cmNlKHByb2R1Y3QpO1xuICAgIGlmIChzcmMpIHRoaXMuZmFpbGVkSW1hZ2VzLnNldChwcm9kdWN0LmlkLCBbLi4uKHRoaXMuZmFpbGVkSW1hZ2VzLmdldChwcm9kdWN0LmlkKSA/PyBbXSksIHNyY10pO1xuICAgIC8vIFRoZSBuZXh0IHNvdXJjZSwgb3IgdGhlIHBsYWNlaG9sZGVyLCBmaWxscyB0aGUgdGlsZSB1bnRpbCBpdCBsb2Fkcy5cbiAgICB0aGlzLnBob3RvRmlsbHMuZGVsZXRlKHByb2R1Y3QuaWQpO1xuICB9XG5cbiAgLyoqIFBlciBwcm9kdWN0IGlkLCBob3cgbXVjaCBvZiB0aGUgdGlsZSB0aGUgbG9hZGVkIHBob3RvIGZpbGxzIChwcm9kdWN0UGhvdG9GaWxsKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwaG90b0ZpbGxzID0gbmV3IE1hcDxzdHJpbmcsIHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfT4oKTtcblxuICAvKipcbiAgICogVGhlIGNhcmQncyBwaG90by1maWxsIGN1c3RvbSBwcm9wZXJ0aWVzLCB3aGljaCBwdXQgdGhlIGNhcnQgYnV0dG9uIGluc2lkZVxuICAgKiB0aGUgcGhvdG8ncyBvd24gY29ybmVyLiBOdWxsIHVudGlsIHRoZSBwaG90byBsb2Fkcy5cbiAgICovXG4gIHBob3RvRmlsbFN0eWxlKHByb2R1Y3Q6IFByb2R1Y3QpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCB7XG4gICAgY29uc3QgZmlsbCA9IHRoaXMucGhvdG9GaWxscy5nZXQocHJvZHVjdC5pZCk7XG4gICAgLy8gT25seSB0aGUgcGhvdG8gb24gc2NyZWVuIGNvdW50czogYSBjaGFuZ2VkIG9yIHJlbW92ZWQgaW1hZ2UgZHJvcHMgaXQuXG4gICAgaWYgKCFmaWxsIHx8ICF0aGlzLmltYWdlTG9hZGVkKHByb2R1Y3QpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgXCItLWFpYS1wcm9kdWN0LXBob3RvLWZpbGwteFwiOiBTdHJpbmcoZmlsbC54KSxcbiAgICAgIFwiLS1haWEtcHJvZHVjdC1waG90by1maWxsLXlcIjogU3RyaW5nKGZpbGwueSksXG4gICAgfTtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFByb2R1Y3Q+KCk7XG4gIC8qKlxuICAgKiBGb2N1cyBtb3ZlZCBpbnRvIC8gb3V0IG9mIHRoZSBzdHJpcC4gVGhlIHBhbmVsIGNsb3NlcyBvbiBibHVyIGJ5IGRlZmF1bHRcbiAgICogYW5kIHRoZSBlZGl0b3IgYmx1cnMgdGhlIG1vbWVudCBhIGNhcmQgdGFrZXMgZm9jdXMsIHNvIHRoZSBkcm9wZG93blxuICAgKiByZXBvcnRzIGZvY3VzIGFzIHN0aWxsLWluc2lkZSByYXRoZXIgdGhhbiBzaHV0dGluZyBvdXQgZnJvbSB1bmRlciB0aGUgY2FyZFxuICAgKiB0aGUgdXNlciBqdXN0IHRhYmJlZCB0by5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBmb2N1c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIGRldGFjaFdoZWVsOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAvKipcbiAgICogUGVyIHByb2R1Y3QgaWQsIHRoZSBjYXJ0IGJ1dHRvbidzIHN0YXRlIHdoaWxlIGl0IGlzbid0IGF0IHJlc3QsIHdpdGggdGhlXG4gICAqIHByb2R1Y3QgaWRlbnRpdHkgaXQgYmVsb25ncyB0byBhbmQgdGhlIHByZXNzIHRoYXQgc2V0IGl0IChhIHNldHRsZSBmcm9tIGFuXG4gICAqIGVhcmxpZXIgcHJlc3MsIG9yIGZvciBhIGNhcmQgc2luY2UgcmVzZXQsIGlzIGRyb3BwZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjYXJ0cyA9IG5ldyBNYXA8c3RyaW5nLCB7IHN0YXRlOiBDYXJ0U3RhdGU7IGlkZW50aXR5OiBzdHJpbmc7IHByZXNzOiBvYmplY3QgfT4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBtb3VzZSB3aGVlbCBvdmVyIHRoZSByb3cgc2Nyb2xscyBpdCBzaWRld2F5cy4gVGhlIHJvdyBzaXRzIGluc2lkZSB0aGVcbiAgICogc2VjdGlvbidzIGAqbmdJZmAsIHNvIHRoZSBxdWVyeSBmaXJlcyB3aXRoIHRoZSBlbGVtZW50IGFzIHByb2R1Y3RzIGFycml2ZVxuICAgKiBhbmQgd2l0aCBgdW5kZWZpbmVkYCBhcyB0aGV5IGdvOyB0aGUgYmluZGluZyBmb2xsb3dzIGl0IGVpdGhlciB3YXkuXG4gICAqL1xuICBAVmlld0NoaWxkKFwicm93XCIpXG4gIHNldCByb3cocmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZGV0YWNoV2hlZWw/LigpO1xuICAgIHRoaXMuZGV0YWNoV2hlZWwgPSByZWYgPyBhdHRhY2hQcm9kdWN0Um93V2hlZWwocmVmLm5hdGl2ZUVsZW1lbnQpIDogbnVsbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLmRldGFjaFdoZWVsPy4oKTtcbiAgICB0aGlzLmRldGFjaFdoZWVsID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBBIHNvbGQtb3V0IHByb2R1Y3QgY2FuJ3QgYmUgYWRkZWQsIHNvIGl0cyBjYXJkIGhhcyBubyBidXR0b24gYXQgYWxsLiAqL1xuICBoYXNDYXJ0KHByb2R1Y3Q6IFByb2R1Y3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUb0NhcnQgIT09IG51bGwgJiYgcHJvZHVjdC5hdmFpbGFibGUgIT09IGZhbHNlO1xuICB9XG5cbiAgY2FydFN0YXRlKHByb2R1Y3Q6IFByb2R1Y3QpOiBDYXJ0U3RhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jYXJ0cy5nZXQocHJvZHVjdC5pZCk/LnN0YXRlID8/IG51bGw7XG4gIH1cblxuICBvbkNhcnRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgLy8gS2V5cyBuZXZlciByZWFjaCB0aGUgY2FyZCwgd2hvc2Ugb3duIEVudGVyIC8gU3BhY2Ugd291bGQgc2VsZWN0IGl0LlxuICAgIGlmIChldmVudC5rZXkgIT09IFwiRW50ZXJcIiAmJiBldmVudC5rZXkgIT09IFwiIFwiKSByZXR1cm47XG4gICAgdGhpcy5vbkNhcnRQcmVzcyhldmVudCwgcHJvZHVjdCk7XG4gIH1cblxuICAvKipcbiAgICogTWlycm9ycyB2YW5pbGxhJ3MgYGJ1aWxkQ2FydEJ1dHRvbmAgcHJlc3M6IGFkZGluZyDihpIgYWRkZWQsIG9yIHJlc3Qgb24gYVxuICAgKiByZWplY3Rpb24uIFRoZSBjaGVjayBzdGF5cyB1bnRpbCB0aGUgcHJvZHVjdCBjaGFuZ2VzOyBhbm90aGVyIHByZXNzIGFkZHMgYWdhaW4uXG4gICAqL1xuICBvbkNhcnRQcmVzcyhldmVudDogRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmFkZFRvQ2FydDtcbiAgICBpZiAoIWhhbmRsZXIgfHwgdGhpcy5jYXJ0U3RhdGUocHJvZHVjdCkgPT09IFwiYWRkaW5nXCIpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IHByb2R1Y3QuaWQ7XG4gICAgY29uc3QgcHJlc3MgPSB7fTtcbiAgICB0aGlzLmNhcnRzLnNldChpZCwgeyBzdGF0ZTogXCJhZGRpbmdcIiwgaWRlbnRpdHk6IGNhcnRJZGVudGl0eShwcm9kdWN0KSwgcHJlc3MgfSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgbGV0IHBlbmRpbmc6IFByb21pc2VMaWtlPHVua25vd24+O1xuICAgIHRyeSB7XG4gICAgICBwZW5kaW5nID0gUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIocHJvZHVjdCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwZW5kaW5nID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBwZW5kaW5nLnRoZW4oXG4gICAgICAoKSA9PiB0aGlzLnNldHRsZUNhcnQoaWQsIHByZXNzLCBcImFkZGVkXCIpLFxuICAgICAgKCkgPT4gdGhpcy5zZXR0bGVDYXJ0KGlkLCBwcmVzcywgbnVsbCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dGxlQ2FydChpZDogc3RyaW5nLCBwcmVzczogb2JqZWN0LCBzdGF0ZTogQ2FydFN0YXRlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGNhcnQgPSB0aGlzLmNhcnRzLmdldChpZCk7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IGNhcnQ/LnByZXNzICE9PSBwcmVzcykgcmV0dXJuO1xuICAgIGlmIChzdGF0ZSkgY2FydC5zdGF0ZSA9IHN0YXRlO1xuICAgIGVsc2UgdGhpcy5jYXJ0cy5kZWxldGUoaWQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5saXN0Ym94SWR9LXByb2R1Y3RzLWxhYmVsYDtcbiAgfVxuXG4gIGNhcmRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5saXN0Ym94SWR9LXByb2R1Y3QtJHtpbmRleH1gO1xuICB9XG5cbiAgdHJhY2tCeVByb2R1Y3QgPSAoXzogbnVtYmVyLCBwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nID0+IHByb2R1Y3QuaWQ7XG5cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCwgcHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIC8vIExldCB0aGUgYnJvd3NlciBrZWVwIHRoZSBjbGlja3MgdGhhdCBtZWFuIFwib3BlbiB0aGlzIHNvbWV3aGVyZSBlbHNlXCIg4oCUXG4gICAgLy8gaW50ZXJjZXB0aW5nIHRoZW0gd291bGQgZGVmZWF0IHRoZSBwb2ludCBvZiByZW5kZXJpbmcgYW4gPGE+LiBUaG9zZSBhcmVcbiAgICAvLyBuYXZpZ2F0aW9ucyB0aGUgdXNlciBhc2tlZCBmb3IgZXhwbGljaXRseSwgc28gdGhleSBkb24ndCBlbWl0LlxuICAgIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2VsZWN0LmVtaXQocHJvZHVjdCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBcIkVudGVyXCIgJiYgZXZlbnQua2V5ICE9PSBcIiBcIikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZWxlY3QuZW1pdChwcm9kdWN0KTtcbiAgfVxuXG4gIG9uQ2FyZEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9uQ2FyZEJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKG5leHQ/LmNsb3Nlc3QoXCJbZGF0YS1haWEtZHJvcGRvd25dXCIpKSByZXR1cm47XG4gICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxufVxuIiwiPCEtLSBgZ3JvdXBgIGlzIHRoZSBvbmUgcm9sZSBhIGxpc3Rib3ggYWNjZXB0cyBhcm91bmQgYSBzZXQgb2Ygb3B0aW9ucywgc28gdGhlXG4gICAgIHN0cmlwIHN0YXlzIGluc2lkZSB0aGUgbGlzdGJveCB3aXRob3V0IGJyZWFraW5nIGl0cyBjb250ZW50IG1vZGVsLiAtLT5cbjxzZWN0aW9uXG4gICpuZ0lmPVwicHJvZHVjdHMubGVuZ3RoID4gMFwiXG4gIGNsYXNzPVwiYWlhLXByb2R1Y3RzXCJcbiAgZGF0YS1haWEtcHJvZHVjdHM9XCJcIlxuICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0cy1sYXlvdXRdPVwibGF5b3V0XCJcbiAgcm9sZT1cImdyb3VwXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuPlxuICA8IS0tIGRhdGEtYWlhLXByb2R1Y3RzLWxhYmVsOiB0aGUgc2Nyb2xsIGFycm93IGNlbnRyZXMgaXRzZWxmIG9uIHRoaXMgcm93LiAtLT5cbiAgPGRpdiBjbGFzcz1cImFpYS1wcm9kdWN0cy1sYWJlbFwiIFtpZF09XCJsYWJlbElkXCIgZGF0YS1haWEtcHJvZHVjdHMtbGFiZWw9XCJcIj57eyBzdHJpbmdzLnByb2R1Y3RzIH19PC9kaXY+XG5cbiAgPCEtLSAjcm93OiB0aGUgY29tcG9uZW50IGJpbmRzIHdoZWVsLXRvLXNpZGV3YXlzIHNjcm9sbGluZyBvbiBpdC4gLS0+XG4gIDxkaXYgI3JvdyBjbGFzcz1cImFpYS1wcm9kdWN0cy1yb3dcIiBkYXRhLWFpYS1wcm9kdWN0cy1yb3c9XCJcIj5cbiAgICA8IS0tIEEgcmVhbCA8YSBocmVmPiByYXRoZXIgdGhhbiBhIDxkaXY+OiBpdCBrZWVwcyB0aGUgYnJvd3NlcidzIG93biBsaW5rXG4gICAgICAgICBhZmZvcmRhbmNlcyDigJQgY21kL2N0cmwtY2xpY2sgZm9yIGEgbmV3IHRhYiwgbWlkZGxlLWNsaWNrLCByaWdodC1jbGljayDihpJcbiAgICAgICAgIFwiY29weSBsaW5rIGFkZHJlc3NcIi4gcm9sZT1cIm9wdGlvblwiIG92ZXJyaWRlcyBob3cgYXNzaXN0aXZlIHRlY2hcbiAgICAgICAgIGFubm91bmNlcyBpdCwgd2hpY2ggaXMgY29ycmVjdCBpbnNpZGUgYSBsaXN0Ym94OyB0aGUgZGVsaWJlcmF0ZSB0cmFkZVxuICAgICAgICAgaXMgdGhhdCBBVCBubyBsb25nZXIgY2FsbHMgaXQgYSBsaW5rLiBBbiBhdHRyaWJ1dGUgYmluZGluZywgc28gYVxuICAgICAgICAgcHJvZHVjdCB3aXRob3V0IGEgdXJsIGdldHMgbm8gaHJlZiBhdCBhbGwgcmF0aGVyIHRoYW4gXCJudWxsXCIuIC0tPlxuICAgIDxhXG4gICAgICAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBwcm9kdWN0czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVByb2R1Y3RcIlxuICAgICAgW2lkXT1cImNhcmRJZChpKVwiXG4gICAgICBjbGFzcz1cImFpYS1wcm9kdWN0XCJcbiAgICAgIGRhdGEtYWlhLXByb2R1Y3Q9XCJcIlxuICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1zb2xkLW91dF09XCJwcm9kdWN0LmF2YWlsYWJsZSA9PT0gZmFsc2UgPyAnJyA6IG51bGxcIlxuICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1oYXMtY2FydF09XCJoYXNDYXJ0KHByb2R1Y3QpID8gJycgOiBudWxsXCJcbiAgICAgIFtzdHlsZV09XCJwaG90b0ZpbGxTdHlsZShwcm9kdWN0KVwiXG4gICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZmFsc2VcIlxuICAgICAgW2F0dHIuaHJlZl09XCJwcm9kdWN0LnVybCA/PyBudWxsXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cImZvY3VzYWJsZSA/IDAgOiAtMVwiXG4gICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIHByb2R1Y3QpXCJcbiAgICAgIChmb2N1cyk9XCJvbkNhcmRGb2N1cygpXCJcbiAgICAgIChibHVyKT1cIm9uQ2FyZEJsdXIoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJhaWEtcHJvZHVjdC1tZWRpYVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLXByb2R1Y3QtcGxhY2Vob2xkZXJdPVwiIWltYWdlU291cmNlKHByb2R1Y3QpICYmIGltYWdlRmFsbGJhY2sgPT09ICdpbWFnZScgPyAnJyA6IG51bGxcIlxuICAgICAgICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0LWluaXRpYWxdPVwiIWltYWdlU291cmNlKHByb2R1Y3QpICYmIGltYWdlRmFsbGJhY2sgPT09ICdpbml0aWFsJyA/ICcnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLWltYWdlLWxvYWRlZF09XCJpbWFnZUxvYWRlZChwcm9kdWN0KSA/ICcnIDogbnVsbFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gYWx0PVwiXCIgb24gcHVycG9zZTogdGhlIHRpdGxlIGlzIGFscmVhZHkgdGhlIGNhcmQncyBhY2Nlc3NpYmxlXG4gICAgICAgICAgICAgbmFtZSwgYW5kIHJlcGVhdGluZyBpdCB3b3VsZCBoYXZlIGEgc2NyZWVuIHJlYWRlciByZWFkIGl0IHR3aWNlLiAtLT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiaW1hZ2VTb3VyY2UocHJvZHVjdCkgYXMgc3JjXCJcbiAgICAgICAgICBjbGFzcz1cImFpYS1wcm9kdWN0LWltYWdlXCJcbiAgICAgICAgICBbc3JjXT1cInNyY1wiXG4gICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocHJvZHVjdCwgc3JjLCAkZXZlbnQpXCJcbiAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKHByb2R1Y3QpXCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBkZWNvZGluZz1cImFzeW5jXCJcbiAgICAgICAgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbWFnZVNvdXJjZShwcm9kdWN0KSAmJiBpbWFnZUZhbGxiYWNrID09PSAnaW5pdGlhbCdcIj57eyBpbml0aWFsKHByb2R1Y3QudGl0bGUpIH19PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gRXZlcnkgZmllbGQgYnV0IHRoZSB0aXRsZSBpcyBvcHRpb25hbCwgc28gYWJzZW50IG9uZXMgcmVuZGVyIG5vXG4gICAgICAgICAgIGVsZW1lbnQgYXQgYWxsIOKAlCB0aGUgY29sdW1uIGdhcCBjYW4ndCBsZWF2ZSBhIGhvbGUgZm9yIGEgYm94IHRoYXRcbiAgICAgICAgICAgaXNuJ3QgdGhlcmUuIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhaWEtcHJvZHVjdC1ib2R5XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC52ZW5kb3JcIiBjbGFzcz1cImFpYS1wcm9kdWN0LXZlbmRvclwiPnt7IHByb2R1Y3QudmVuZG9yIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImFpYS1wcm9kdWN0LXRpdGxlXCI+e3sgcHJvZHVjdC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LnByaWNlXCIgY2xhc3M9XCJhaWEtcHJvZHVjdC1wcmljZVwiPnt7IHByb2R1Y3QucHJpY2UgfX08cyAqbmdJZj1cInByb2R1Y3QuY29tcGFyZUF0UHJpY2VcIiBjbGFzcz1cImFpYS1wcm9kdWN0LWNvbXBhcmUtYXRcIj57eyBwcm9kdWN0LmNvbXBhcmVBdFByaWNlIH19PC9zPjwvc3Bhbj5cbiAgICAgICAgPCEtLSBJbiB0aGUgdGV4dCBjb2x1bW4gcmF0aGVyIHRoYW4gdGhlIGFyaWEtaGlkZGVuIG1lZGlhIHRpbGUsIHNvIHRoZVxuICAgICAgICAgICAgIGNhcmQncyBhY2Nlc3NpYmxlIG5hbWUgc2F5cyBpdDsgdGhlIHN0eWxlc2hlZXQgbGlmdHMgaXQgb3ZlciB0aGVcbiAgICAgICAgICAgICBpbWFnZS4gLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC5hdmFpbGFibGUgPT09IGZhbHNlXCIgY2xhc3M9XCJhaWEtcHJvZHVjdC1iYWRnZVwiPnt7IHN0cmluZ3Muc29sZE91dCB9fTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBUaGUgYWRkLXRvLWNhcnQgYnV0dG9uOiBhIGNoaWxkIG9mIHRoZSBjYXJkIHJhdGhlciB0aGFuIG9mIHRoZVxuICAgICAgICAgICBhcmlhLWhpZGRlbiBtZWRpYSB0aWxlOyB0aGUgc3R5bGVzaGVldCBsaWZ0cyBpdCBvdmVyIHRoZSB0aWxlJ3NcbiAgICAgICAgICAgYm90dG9tIHJpZ2h0IGNvcm5lci4gQSByb2xlPVwiYnV0dG9uXCIgc3Bhbiwgbm90IGEgPGJ1dHRvbj46XG4gICAgICAgICAgIGludGVyYWN0aXZlIGNvbnRlbnQgaW5zaWRlIGFuIDxhPiBpcyBpbnZhbGlkIEhUTUwuIEl0cyBwcmVzcyBuZXZlclxuICAgICAgICAgICByZWFjaGVzIHRoZSBjYXJkLCBzbyBpdCBuZXZlciBzZWxlY3RzLiBTb2xkLW91dCBjYXJkcyBoYXZlIG5vbmUuIC0tPlxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCJoYXNDYXJ0KHByb2R1Y3QpXCJcbiAgICAgICAgY2xhc3M9XCJhaWEtcHJvZHVjdC1jYXJ0XCJcbiAgICAgICAgZGF0YS1haWEtcHJvZHVjdC1jYXJ0PVwiXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5hZGRUb0NhcnQgKyAnOiAnICsgcHJvZHVjdC50aXRsZVwiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImZvY3VzYWJsZSA/IDAgOiAtMVwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLWNhcnQtc3RhdGVdPVwiY2FydFN0YXRlKHByb2R1Y3QpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1idXN5XT1cImNhcnRTdGF0ZShwcm9kdWN0KSA9PT0gJ2FkZGluZycgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2FydFByZXNzKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkNhcnRLZXlEb3duKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgICAoZm9jdXMpPVwib25DYXJkRm9jdXMoKVwiXG4gICAgICAgIChibHVyKT1cIm9uQ2FyZEJsdXIoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZvY3VzYWJsZT1cImZhbHNlXCI+XG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJhaWEtcHJvZHVjdC1jYXJ0LWdseXBoXCIgZD1cIk0yIDNoMi4ybDIuNCAxMS4yYTIgMiAwIDAgMCAyIDEuNmg4LjlhMiAyIDAgMCAwIDEuOS0xLjVMMjEgOEg2XCIgLz5cbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtZ2x5cGhcIiBkPVwiTTEzLjUgNi41di00TTExLjUgNC41aDRcIiAvPlxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydC1jaGVja1wiIGQ9XCJNNSAxMi41bDQuNSA0LjVMMTkgNy41XCIgLz5cbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImFpYS1wcm9kdWN0LWNhcnQtc3Bpbm5lclwiIGQ9XCJNMTIgNGE4IDggMCAxIDAgOCA4XCIgLz5cbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydC1nbHlwaFwiIGN4PVwiOVwiIGN5PVwiMjBcIiByPVwiMS4zXCIgLz5cbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiYWlhLXByb2R1Y3QtY2FydC1nbHlwaFwiIGN4PVwiMTcuNVwiIGN5PVwiMjBcIiByPVwiMS4zXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgPC9hPlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
|
|
@@ -130,12 +130,14 @@ export class SuggestionGridComponent {
|
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
SuggestionGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SuggestionGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
133
|
-
SuggestionGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SuggestionGridComponent, isStandalone: true, selector: "aia-suggestion-grid", inputs: { options: "options", activeIndex: "activeIndex", listboxId: "listboxId", loading: "loading", groupKey: "groupKey", optionsPosition: "optionsPosition", showIcons: "showIcons", showImages: "showImages", showCounts: "showCounts" }, outputs: { select: "select", highlight: "highlight", unhighlight: "unhighlight" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "gridComp", first: true, predicate: GridComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- max=\"1fr\": columns share out the full width, so a lone column spans the\n whole options box instead of stopping at 250px. -->\n<aia-grid\n min=\"250px\"\n max=\"1fr\"\n gap=\"0\"\n [scroll]=\"true\"\n [scrollResetKey]=\"groupKey\"\n [template]=\"plan.template\"\n [maxHeight]=\"plan.maxHeight\"\n [group]=\"groupKey\"\n>\n <aia-suggestion-item\n *ngFor=\"let option of options; trackBy: trackByOptionText; let i = index\"\n [option]=\"option\"\n [isHighlighted]=\"i === activeIndex\"\n [id]=\"listboxId + '-option-' + i\"\n [loading]=\"loading\"\n [showIcon]=\"showIcons && leadingVisuals\"\n [showImage]=\"showImages && leadingVisuals\"\n [showCount]=\"showCounts\"\n [scrollHint]=\"isScrollHint(i)\"\n [enterDelayMs]=\"enterDelayMs(i)\"\n (select)=\"select.emit($event)\"\n (highlight)=\"highlight.emit(i)\"\n (unhighlight)=\"unhighlight.emit(i)\"\n ></aia-suggestion-item>\n</aia-grid>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: GridComponent, selector: "aia-grid", inputs: ["min", "max", "gap", "scroll", "maxHeight", "scrollResetKey", "cols", "template", "group"] }, { kind: "component", type: SuggestionItemComponent, selector: "aia-suggestion-item", inputs: ["option", "isHighlighted", "id", "loading", "showIcon", "showImage", "showCount", "scrollHint", "enterDelayMs"], outputs: ["select", "highlight", "unhighlight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
133
|
+
SuggestionGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SuggestionGridComponent, isStandalone: true, selector: "aia-suggestion-grid", inputs: { options: "options", picked: "picked", activeIndex: "activeIndex", listboxId: "listboxId", loading: "loading", groupKey: "groupKey", optionsPosition: "optionsPosition", showIcons: "showIcons", showImages: "showImages", showCounts: "showCounts" }, outputs: { select: "select", highlight: "highlight", unhighlight: "unhighlight" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "gridComp", first: true, predicate: GridComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- max=\"1fr\": columns share out the full width, so a lone column spans the\n whole options box instead of stopping at 250px. -->\n<aia-grid\n min=\"250px\"\n max=\"1fr\"\n gap=\"0\"\n [scroll]=\"true\"\n [scrollResetKey]=\"groupKey\"\n [template]=\"plan.template\"\n [maxHeight]=\"plan.maxHeight\"\n [group]=\"groupKey\"\n>\n <aia-suggestion-item\n *ngFor=\"let option of options; trackBy: trackByOptionText; let i = index\"\n [option]=\"option\"\n [isHighlighted]=\"i === activeIndex\"\n [checked]=\"picked ? picked.includes(option.text) : undefined\"\n [id]=\"listboxId + '-option-' + i\"\n [loading]=\"loading\"\n [showIcon]=\"showIcons && leadingVisuals\"\n [showImage]=\"showImages && leadingVisuals\"\n [showCount]=\"showCounts\"\n [scrollHint]=\"isScrollHint(i)\"\n [enterDelayMs]=\"enterDelayMs(i)\"\n (select)=\"select.emit($event)\"\n (highlight)=\"highlight.emit(i)\"\n (unhighlight)=\"unhighlight.emit(i)\"\n ></aia-suggestion-item>\n</aia-grid>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: GridComponent, selector: "aia-grid", inputs: ["min", "max", "gap", "scroll", "maxHeight", "scrollResetKey", "cols", "template", "group"] }, { kind: "component", type: SuggestionItemComponent, selector: "aia-suggestion-item", inputs: ["option", "checked", "isHighlighted", "id", "loading", "showIcon", "showImage", "showCount", "scrollHint", "enterDelayMs"], outputs: ["select", "highlight", "unhighlight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
134
134
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SuggestionGridComponent, decorators: [{
|
|
135
135
|
type: Component,
|
|
136
|
-
args: [{ selector: "aia-suggestion-grid", standalone: true, imports: [CommonModule, GridComponent, SuggestionItemComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- max=\"1fr\": columns share out the full width, so a lone column spans the\n whole options box instead of stopping at 250px. -->\n<aia-grid\n min=\"250px\"\n max=\"1fr\"\n gap=\"0\"\n [scroll]=\"true\"\n [scrollResetKey]=\"groupKey\"\n [template]=\"plan.template\"\n [maxHeight]=\"plan.maxHeight\"\n [group]=\"groupKey\"\n>\n <aia-suggestion-item\n *ngFor=\"let option of options; trackBy: trackByOptionText; let i = index\"\n [option]=\"option\"\n [isHighlighted]=\"i === activeIndex\"\n [id]=\"listboxId + '-option-' + i\"\n [loading]=\"loading\"\n [showIcon]=\"showIcons && leadingVisuals\"\n [showImage]=\"showImages && leadingVisuals\"\n [showCount]=\"showCounts\"\n [scrollHint]=\"isScrollHint(i)\"\n [enterDelayMs]=\"enterDelayMs(i)\"\n (select)=\"select.emit($event)\"\n (highlight)=\"highlight.emit(i)\"\n (unhighlight)=\"unhighlight.emit(i)\"\n ></aia-suggestion-item>\n</aia-grid>\n" }]
|
|
136
|
+
args: [{ selector: "aia-suggestion-grid", standalone: true, imports: [CommonModule, GridComponent, SuggestionItemComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- max=\"1fr\": columns share out the full width, so a lone column spans the\n whole options box instead of stopping at 250px. -->\n<aia-grid\n min=\"250px\"\n max=\"1fr\"\n gap=\"0\"\n [scroll]=\"true\"\n [scrollResetKey]=\"groupKey\"\n [template]=\"plan.template\"\n [maxHeight]=\"plan.maxHeight\"\n [group]=\"groupKey\"\n>\n <aia-suggestion-item\n *ngFor=\"let option of options; trackBy: trackByOptionText; let i = index\"\n [option]=\"option\"\n [isHighlighted]=\"i === activeIndex\"\n [checked]=\"picked ? picked.includes(option.text) : undefined\"\n [id]=\"listboxId + '-option-' + i\"\n [loading]=\"loading\"\n [showIcon]=\"showIcons && leadingVisuals\"\n [showImage]=\"showImages && leadingVisuals\"\n [showCount]=\"showCounts\"\n [scrollHint]=\"isScrollHint(i)\"\n [enterDelayMs]=\"enterDelayMs(i)\"\n (select)=\"select.emit($event)\"\n (highlight)=\"highlight.emit(i)\"\n (unhighlight)=\"unhighlight.emit(i)\"\n ></aia-suggestion-item>\n</aia-grid>\n" }]
|
|
137
137
|
}], propDecorators: { options: [{
|
|
138
138
|
type: Input
|
|
139
|
+
}], picked: [{
|
|
140
|
+
type: Input
|
|
139
141
|
}], activeIndex: [{
|
|
140
142
|
type: Input
|
|
141
143
|
}], listboxId: [{
|
|
@@ -165,4 +167,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
165
167
|
type: HostListener,
|
|
166
168
|
args: ["window:resize"]
|
|
167
169
|
}] } });
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VnZ2VzdGlvbi1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW50ZXJuYWwvc3VnZ2VzdGlvbi1ncmlkL3N1Z2dlc3Rpb24tZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3N1Z2dlc3Rpb24tZ3JpZC9zdWdnZXN0aW9uLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBRTNCLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsZUFBZSxFQUVmLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBRXZGOzs7Ozs7OztHQVFHO0FBU0gsTUFBTSxPQUFPLHVCQUF1QjtJQVJwQztRQVNXLFlBQU8sR0FBdUIsRUFBRSxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDekI7Ozs7V0FJRztRQUNNLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDdkI7OztXQUdHO1FBQ00sb0JBQWUsR0FBc0IsT0FBTyxDQUFDO1FBQ3RELHlFQUF5RTtR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SkFBRSx1QkFBdUI7NEZBS25ELHVCQUF1QjtrQkFSbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSx1QkFBdUIsQ0FBQyxtQkFDOUMsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFJNUIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBTUcsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQVVhLE1BQU07c0JBQXhCLE1BQU07Z0JBQ1ksU0FBUztzQkFBM0IsTUFBTTtnQkFFWSxXQUFXO3NCQUE3QixNQUFNO2dCQUk4QyxRQUFRO3NCQUE1RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBbUIzQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIHR5cGUgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgaW5qZWN0LFxuICB0eXBlIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICB0eXBlIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBpc09wdGlvbnNHcmlkTW9iaWxlVmlld3BvcnQsXG4gIG1lYXN1cmVPcHRpb25zR3JpZCxcbiAgbmVlZHNPcHRpb25zR3JpZE1lYXN1cmVtZW50LFxuICB0eXBlIE9wdGlvbnNHcmlkUGxhbixcbiAgb3B0aW9uRW50ZXJEZWxheU1zLFxuICBvcHRpb25zU2hvd0xlYWRpbmdWaXN1YWxzLFxuICBwbGFuT3B0aW9uc0dyaWQsXG4gIHR5cGUgU3VnZ2VzdGlvbk9wdGlvbixcbiAgc2FtZU9wdGlvblJvd3MsXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgR3JpZENvbXBvbmVudCB9IGZyb20gXCIuLi9sYXlvdXQvZ3JpZC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFN1Z2dlc3Rpb25JdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4uL3N1Z2dlc3Rpb24taXRlbS9zdWdnZXN0aW9uLWl0ZW0uY29tcG9uZW50XCI7XG5cbi8qKlxuICogSW50ZXJuYWwgZ3JpZCBvZiBzdWdnZXN0aW9uIG9wdGlvbnMuIE1pcnJvcnNcbiAqIGBwYWNrYWdlcy9yZWFjdC9zcmMvY29tcG9uZW50cy9TdWdnZXN0aW9uR3JpZC50c3hgIOKAlCBhIHRoaW4gd3JhcHBlciBvdmVyIHRoZVxuICogYEdyaWRgIGxheW91dCBwcmltaXRpdmUgKHdoaWNoIG93bnMgdGhlIGF1dG8tZml0IGNvbHVtbnMgYW5kIHRoZVxuICogY2FwcGVkLWhlaWdodCBzY3JvbGwpLiBJdCBvbmx5IHdpcmVzIGVhY2ggb3B0aW9uIHRvIGl0c1xuICogc2VsZWN0L2hpZ2hsaWdodCBoYW5kbGVycyBhbmQgbGlzdGJveC1zY29wZWQgaWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhaWEtc3VnZ2VzdGlvbi1ncmlkXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEdyaWRDb21wb25lbnQsIFN1Z2dlc3Rpb25JdGVtQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vc3VnZ2VzdGlvbi1ncmlkLmNvbXBvbmVudC5odG1sXCIsXG59KVxuZXhwb3J0IGNsYXNzIFN1Z2dlc3Rpb25HcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkIHtcbiAgQElucHV0KCkgb3B0aW9uczogU3VnZ2VzdGlvbk9wdGlvbltdID0gW107XG4gIEBJbnB1dCgpIGFjdGl2ZUluZGV4ID0gLTE7XG4gIEBJbnB1dCgpIGxpc3Rib3hJZCA9IFwiXCI7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIElkZW50aXR5IG9mIHRoZSBzdWdnZXN0aW9uIHRoZXNlIG9wdGlvbnMgYmVsb25nIHRvLiBXaGVuIGl0IGNoYW5nZXMgdGhlXG4gICAqIGdyaWQgc2Nyb2xscyBiYWNrIHRvIHRoZSB0b3AsIHNvIHRoZSBuZXh0IHBhcmFtZXRlcidzIG9wdGlvbnMgYXJlIHJlYWRcbiAgICogZnJvbSB0aGUgZmlyc3Qgb25lIGluc3RlYWQgb2YgZnJvbSB0aGUgcHJldmlvdXMgbGlzdCdzIHNjcm9sbCBvZmZzZXQuXG4gICAqL1xuICBASW5wdXQoKSBncm91cEtleSA9IFwiXCI7XG4gIC8qKlxuICAgKiBXaGljaCBzaWRlIG9mIHRoZSBpbnB1dCB0aGUgZHJvcGRvd24gb3BlbnMgb24uIFRoZSByb3dzJyBlbnRyYW5jZSBzdGFydHNcbiAgICogZnJvbSB0aGUgaW5wdXQncyBzaWRlIG91dHdhcmQsIHNvIFwiYWJvdmVcIiByZXZlcnNlcyB0aGUgb3JkZXIuXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIiA9IFwiYmVsb3dcIjtcbiAgLyoqIFdoZXRoZXIgcm93cyBkcmF3IHRoZWlyIGBpY29uX3N2Z2AgYmVmb3JlIHRoZSB0ZXh0LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93SWNvbnMgPSB0cnVlO1xuICAvKiogV2hldGhlciByb3dzIGRyYXcgdGhlaXIgYGltYWdlX3VybGAgYXMgYSB0aHVtYm5haWwgYmVmb3JlIHRoZSB0ZXh0LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93SW1hZ2VzID0gdHJ1ZTtcbiAgLyoqIFdoZXRoZXIgcm93cyBzaG93IHRoZWlyIGBpdGVtX2NvdW50YCBhdCB0aGUgdHJhaWxpbmcgZWRnZS4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgc2hvd0NvdW50cyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEljb25zIGFuZCBwaWN0dXJlcyBhcmUgYWxsLW9yLW5vdGhpbmcgYWNyb3NzIHRoZSBsaXN0IOKAlCBubyBzaW5nbGUgcm93IGNhblxuICAgKiBkZWNpZGUgaXRzIG93biAoc2VlIGBvcHRpb25zU2hvd0xlYWRpbmdWaXN1YWxzYCkuXG4gICAqL1xuICBnZXQgbGVhZGluZ1Zpc3VhbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9wdGlvbnNTaG93TGVhZGluZ1Zpc3VhbHModGhpcy5vcHRpb25zLCB0aGlzLnNob3dJY29ucywgdGhpcy5zaG93SW1hZ2VzKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFN1Z2dlc3Rpb25PcHRpb24+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBoaWdobGlnaHQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgLyoqIFRoZSBwb2ludGVyIGxlZnQgb3B0aW9uIGBpbmRleGAg4oCUIHRoZSBkcm9wZG93biBjbGVhcnMgYSBoaWdobGlnaHQgc3RpbGwgb24gaXQuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB1bmhpZ2hsaWdodCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBAVmlld0NoaWxkKEdyaWRDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIGdyaWRDb21wPzogR3JpZENvbXBvbmVudDtcblxuICAvKipcbiAgICogVGhlIG1lYXN1cmVkIGxheW91dCBwbGFuLiBTdGFydHMgYXMgdGhlIG1lYXN1cmVtZW50LWZyZWUgYmFzZWxpbmUgKG9uZVxuICAgKiBjb2x1bW4pOyBhZnRlciBlYWNoIHZpZXcgdXBkYXRlIHRoZSByZW5kZXJlZCByb3dzIGFyZSBtZWFzdXJlZCBhbmQgdGhlXG4gICAqIHBsYW4gdXBncmFkZXMgdG8gdHdvIGNvbHVtbnMgd2hlbiB0aGV5IHByb3ZhYmx5IGZpdCDigJQgc2FtZSB0d28tcGFzcyB0aGVcbiAgICogUmVhY3QgZ3JpZCBkb2VzIHdpdGggaXRzIGxheW91dCBlZmZlY3QsIGFsbCB0aHJvdWdoIGBwbGFuT3B0aW9uc0dyaWRgLlxuICAgKi9cbiAgcGxhbjogT3B0aW9uc0dyaWRQbGFuID0gcGxhbk9wdGlvbnNHcmlkKDAsIGZhbHNlLCBudWxsLCBudWxsKTtcbiAgcHJpdmF0ZSBuZWVkc01lYXN1cmUgPSB0cnVlO1xuICAvKipcbiAgICogVGhlIHJvd3MgdGhlIGN1cnJlbnQgcGxhbiB3YXMgbWVhc3VyZWQgZnJvbS4gQSBza2VsZXRvbiBtaXJyb3JpbmcgdGhlbVxuICAgKiBrZWVwcyB0aGF0IHBsYW4g4oCUIHNlZSBgc2FtZU9wdGlvblJvd3NgLlxuICAgKi9cbiAgcHJpdmF0ZSBtZWFzdXJlZFJvd3M6IFN1Z2dlc3Rpb25PcHRpb25bXSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFJlLW1lYXN1cmUgd2hlbiB0aGUgdmlld3BvcnQgY2hhbmdlcyAoYnJlYWtwb2ludCBvciB3aWR0aCBib3RoIG1hdHRlciB0b1xuICAvLyB0aGUgdHdvLWNvbHVtbiBmaXQpLlxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxuICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm5lZWRzTWVhc3VyZSA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gT25seSB0aGUgaW5wdXRzIHRoZSBwbGFuIGRlcGVuZHMgb24gcmVzZXQgaXQg4oCUIGFjdGl2ZUluZGV4IGNoYW5nZXMgb25cbiAgICAvLyBldmVyeSBhcnJvdyBrZXkgYW5kIG11c3Qgbm90IGtub2NrIGEgbWVhc3VyZWQgdHdvLWNvbHVtbiBncmlkIGJhY2sgdG9cbiAgICAvLyB0aGUgYmFzZWxpbmUgKHRoZSBSZWFjdCBncmlkJ3MgbGF5b3V0IGVmZmVjdCBleGNsdWRlcyBpdCB0aGUgc2FtZSB3YXkpLlxuICAgIGlmICghY2hhbmdlc1tcIm9wdGlvbnNcIl0gJiYgIWNoYW5nZXNbXCJsb2FkaW5nXCJdKSByZXR1cm47XG4gICAgaWYgKHRoaXMubG9hZGluZyAmJiBzYW1lT3B0aW9uUm93cyh0aGlzLm1lYXN1cmVkUm93cywgdGhpcy5vcHRpb25zKSkgcmV0dXJuO1xuICAgIHRoaXMubWVhc3VyZWRSb3dzID0gdGhpcy5sb2FkaW5nID8gbnVsbCA6IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLm5lZWRzTWVhc3VyZSA9IHRydWU7XG4gICAgLy8gVGhlIHByZS1tZWFzdXJlIGJhc2VsaW5lIGZvciB0aGUgbmV3IGlucHV0cywgc28gdGhlIGZpcnN0IHBhaW50IGlzIHRoZVxuICAgIC8vIHNhbWUgb25lLWNvbHVtbiBsYXlvdXQgdGhlIG90aGVyIHBhY2thZ2VzIHN0YXJ0IGZyb20uXG4gICAgdGhpcy5wbGFuID0gcGxhbk9wdGlvbnNHcmlkKHRoaXMub3B0aW9ucy5sZW5ndGgsIGlzT3B0aW9uc0dyaWRNb2JpbGVWaWV3cG9ydCgpLCBudWxsLCBudWxsKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubmVlZHNNZWFzdXJlKSByZXR1cm47XG4gICAgdGhpcy5uZWVkc01lYXN1cmUgPSBmYWxzZTtcbiAgICBjb25zdCBpc01vYmlsZSA9IGlzT3B0aW9uc0dyaWRNb2JpbGVWaWV3cG9ydCgpO1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRDb21wPy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIC8vIE1lYXN1cmluZyBjbG9uZXMgZXZlcnkgcm93IGFuZCBmb3JjZXMgYSBsYXlvdXQg4oCUIHNraXAgaXQgd2hlbmV2ZXIgdGhlXG4gICAgLy8gcGxhbiB3b3VsZCBpZ25vcmUgdGhlIHJlc3VsdCAobW9iaWxlLCBmZXdlciB0aGFuIGZpdmUgb3B0aW9ucykuXG4gICAgY29uc3Qgc2hvdWxkTWVhc3VyZSA9XG4gICAgICBncmlkICYmICF0aGlzLmxvYWRpbmcgJiYgbmVlZHNPcHRpb25zR3JpZE1lYXN1cmVtZW50KHRoaXMub3B0aW9ucy5sZW5ndGgsIGlzTW9iaWxlKTtcbiAgICBjb25zdCBtZWFzdXJlZCA9IHNob3VsZE1lYXN1cmUgPyBtZWFzdXJlT3B0aW9uc0dyaWQoZ3JpZCkgOiBudWxsO1xuICAgIGNvbnN0IG5leHQgPSBwbGFuT3B0aW9uc0dyaWQoXG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoLFxuICAgICAgaXNNb2JpbGUsXG4gICAgICBtZWFzdXJlZD8ucm93V2lkdGhzID8/IG51bGwsXG4gICAgICBtZWFzdXJlZD8uZ3JpZFdpZHRoID8/IG51bGwsXG4gICAgKTtcbiAgICBjb25zdCB1bmNoYW5nZWQgPVxuICAgICAgbmV4dC50ZW1wbGF0ZSA9PT0gdGhpcy5wbGFuLnRlbXBsYXRlICYmXG4gICAgICBuZXh0Lm1heEhlaWdodCA9PT0gdGhpcy5wbGFuLm1heEhlaWdodCAmJlxuICAgICAgbmV4dC5zY3JvbGxIaW50SW5kaWNlcy5qb2luKCkgPT09IHRoaXMucGxhbi5zY3JvbGxIaW50SW5kaWNlcy5qb2luKCk7XG4gICAgaWYgKHVuY2hhbmdlZCkgcmV0dXJuO1xuICAgIC8vIFRoZSB2aWV3IHdhcyBhbHJlYWR5IGNoZWNrZWQgdGhpcyBjeWNsZSDigJQgYXBwbHkgdGhlIG1lYXN1cmVkIHBsYW4gaW4gYVxuICAgIC8vIGZyZXNoIG1pY3JvdGFzayBzbyBPblB1c2ggcGlja3MgaXQgdXAgd2l0aG91dCBhblxuICAgIC8vIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkIGVycm9yLlxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHRoaXMucGxhbiA9IG5leHQ7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzU2Nyb2xsSGludChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5wbGFuLnNjcm9sbEhpbnRJbmRpY2VzLmluY2x1ZGVzKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBkZWxheSBvZiByb3cgYGluZGV4YCdzIGVudHJhbmNlIOKAlCBlYWNoIHJvdyByaXNlcyBpbiBhIGJlYXQgYWZ0ZXJcbiAgICogdGhlIG9uZSBuZWFyZXIgdGhlIGlucHV0LiBTa2VsZXRvbiByb3dzIGZhZGUgaW4gdG9nZXRoZXIgKHRoZXkncmVcbiAgICogcGxhY2Vob2xkZXJzLCBub3QgY29udGVudCBhcnJpdmluZykuXG4gICAqL1xuICBlbnRlckRlbGF5TXMoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuIDA7XG4gICAgLy8gQWNyb3NzIHRoZSBjb2x1bW5zIHRoZSBtZWFzdXJlZCBwbGFuIHNldHRsZWQgb24g4oCUIHRoZSB0d28tY29sdW1uXG4gICAgLy8gdXBncmFkZSBvbmx5IGRlY2lkZXMgdGhhdCBhZnRlciB0aGUgcm93cyBleGlzdC5cbiAgICByZXR1cm4gb3B0aW9uRW50ZXJEZWxheU1zKGluZGV4LCB0aGlzLnBsYW4uY29scywgdGhpcy5vcHRpb25zLmxlbmd0aCwgdGhpcy5vcHRpb25zUG9zaXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBncm91cCBpcyBwYXJ0IG9mIHRoZSBpZGVudGl0eTogYSBuZXcgc3VnZ2VzdGlvbidzIG9wdGlvbnMgYXJlIG5ld1xuICAgKiByb3dzIGFuZCBnZXQgdGhlIGVudHJhbmNlIGFuaW1hdGlvbiBldmVuIHdoZW4gb25lIHNwZWxscyB0aGUgc2FtZSBhcyBhXG4gICAqIHJvdyBhbHJlYWR5IG9uIHNjcmVlbi5cbiAgICovXG4gIHRyYWNrQnlPcHRpb25UZXh0ID0gKF86IG51bWJlciwgb3B0OiBTdWdnZXN0aW9uT3B0aW9uKTogc3RyaW5nID0+IGAke3RoaXMuZ3JvdXBLZXl9XFwwJHtvcHQudGV4dH1gO1xufVxuIiwiPCEtLSBtYXg9XCIxZnJcIjogY29sdW1ucyBzaGFyZSBvdXQgdGhlIGZ1bGwgd2lkdGgsIHNvIGEgbG9uZSBjb2x1bW4gc3BhbnMgdGhlXG4gICAgIHdob2xlIG9wdGlvbnMgYm94IGluc3RlYWQgb2Ygc3RvcHBpbmcgYXQgMjUwcHguIC0tPlxuPGFpYS1ncmlkXG4gIG1pbj1cIjI1MHB4XCJcbiAgbWF4PVwiMWZyXCJcbiAgZ2FwPVwiMFwiXG4gIFtzY3JvbGxdPVwidHJ1ZVwiXG4gIFtzY3JvbGxSZXNldEtleV09XCJncm91cEtleVwiXG4gIFt0ZW1wbGF0ZV09XCJwbGFuLnRlbXBsYXRlXCJcbiAgW21heEhlaWdodF09XCJwbGFuLm1heEhlaWdodFwiXG4gIFtncm91cF09XCJncm91cEtleVwiXG4+XG4gIDxhaWEtc3VnZ2VzdGlvbi1pdGVtXG4gICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyB0cmFja0J5OiB0cmFja0J5T3B0aW9uVGV4dDsgbGV0IGkgPSBpbmRleFwiXG4gICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgIFtpc0hpZ2hsaWdodGVkXT1cImkgPT09IGFjdGl2ZUluZGV4XCJcbiAgICBbaWRdPVwibGlzdGJveElkICsgJy1vcHRpb24tJyArIGlcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIFtzaG93SWNvbl09XCJzaG93SWNvbnMgJiYgbGVhZGluZ1Zpc3VhbHNcIlxuICAgIFtzaG93SW1hZ2VdPVwic2hvd0ltYWdlcyAmJiBsZWFkaW5nVmlzdWFsc1wiXG4gICAgW3Nob3dDb3VudF09XCJzaG93Q291bnRzXCJcbiAgICBbc2Nyb2xsSGludF09XCJpc1Njcm9sbEhpbnQoaSlcIlxuICAgIFtlbnRlckRlbGF5TXNdPVwiZW50ZXJEZWxheU1zKGkpXCJcbiAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgIChoaWdobGlnaHQpPVwiaGlnaGxpZ2h0LmVtaXQoaSlcIlxuICAgICh1bmhpZ2hsaWdodCk9XCJ1bmhpZ2hsaWdodC5lbWl0KGkpXCJcbiAgPjwvYWlhLXN1Z2dlc3Rpb24taXRlbT5cbjwvYWlhLWdyaWQ+XG4iXX0=
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VnZ2VzdGlvbi1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW50ZXJuYWwvc3VnZ2VzdGlvbi1ncmlkL3N1Z2dlc3Rpb24tZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3N1Z2dlc3Rpb24tZ3JpZC9zdWdnZXN0aW9uLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBRTNCLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsZUFBZSxFQUVmLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBRXZGOzs7Ozs7OztHQVFHO0FBU0gsTUFBTSxPQUFPLHVCQUF1QjtJQVJwQztRQVNXLFlBQU8sR0FBdUIsRUFBRSxDQUFDO1FBRWpDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDekI7Ozs7V0FJRztRQUNNLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDdkI7OztXQUdHO1FBQ00sb0JBQWUsR0FBc0IsT0FBTyxDQUFDO1FBQ3RELHlFQUF5RTtR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MEpBQUUsdUJBQXVCOzRGQUtuRCx1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsdUJBQXVCLENBQUMsbUJBQzlDLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7OEJBSTVCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBVWEsTUFBTTtzQkFBeEIsTUFBTTtnQkFDWSxTQUFTO3NCQUEzQixNQUFNO2dCQUVZLFdBQVc7c0JBQTdCLE1BQU07Z0JBSThDLFFBQVE7c0JBQTVELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFtQjNDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBZnRlclZpZXdDaGVja2VkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIHR5cGUgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGlzT3B0aW9uc0dyaWRNb2JpbGVWaWV3cG9ydCxcbiAgbWVhc3VyZU9wdGlvbnNHcmlkLFxuICBuZWVkc09wdGlvbnNHcmlkTWVhc3VyZW1lbnQsXG4gIHR5cGUgT3B0aW9uc0dyaWRQbGFuLFxuICBvcHRpb25FbnRlckRlbGF5TXMsXG4gIG9wdGlvbnNTaG93TGVhZGluZ1Zpc3VhbHMsXG4gIHBsYW5PcHRpb25zR3JpZCxcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxuICBzYW1lT3B0aW9uUm93cyxcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBHcmlkQ29tcG9uZW50IH0gZnJvbSBcIi4uL2xheW91dC9ncmlkLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi4vc3VnZ2VzdGlvbi1pdGVtL3N1Z2dlc3Rpb24taXRlbS5jb21wb25lbnRcIjtcblxuLyoqXG4gKiBJbnRlcm5hbCBncmlkIG9mIHN1Z2dlc3Rpb24gb3B0aW9ucy4gTWlycm9yc1xuICogYHBhY2thZ2VzL3JlYWN0L3NyYy9jb21wb25lbnRzL1N1Z2dlc3Rpb25HcmlkLnRzeGAg4oCUIGEgdGhpbiB3cmFwcGVyIG92ZXIgdGhlXG4gKiBgR3JpZGAgbGF5b3V0IHByaW1pdGl2ZSAod2hpY2ggb3ducyB0aGUgYXV0by1maXQgY29sdW1ucyBhbmQgdGhlXG4gKiBjYXBwZWQtaGVpZ2h0IHNjcm9sbCkuIEl0IG9ubHkgd2lyZXMgZWFjaCBvcHRpb24gdG8gaXRzXG4gKiBzZWxlY3QvaGlnaGxpZ2h0IGhhbmRsZXJzIGFuZCBsaXN0Ym94LXNjb3BlZCBpZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpYS1zdWdnZXN0aW9uLWdyaWRcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgR3JpZENvbXBvbmVudCwgU3VnZ2VzdGlvbkl0ZW1Db21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9zdWdnZXN0aW9uLWdyaWQuY29tcG9uZW50Lmh0bWxcIixcbn0pXG5leHBvcnQgY2xhc3MgU3VnZ2VzdGlvbkdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0NoZWNrZWQge1xuICBASW5wdXQoKSBvcHRpb25zOiBTdWdnZXN0aW9uT3B0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgcGlja2VkPzogc3RyaW5nW107XG4gIEBJbnB1dCgpIGFjdGl2ZUluZGV4ID0gLTE7XG4gIEBJbnB1dCgpIGxpc3Rib3hJZCA9IFwiXCI7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIElkZW50aXR5IG9mIHRoZSBzdWdnZXN0aW9uIHRoZXNlIG9wdGlvbnMgYmVsb25nIHRvLiBXaGVuIGl0IGNoYW5nZXMgdGhlXG4gICAqIGdyaWQgc2Nyb2xscyBiYWNrIHRvIHRoZSB0b3AsIHNvIHRoZSBuZXh0IHBhcmFtZXRlcidzIG9wdGlvbnMgYXJlIHJlYWRcbiAgICogZnJvbSB0aGUgZmlyc3Qgb25lIGluc3RlYWQgb2YgZnJvbSB0aGUgcHJldmlvdXMgbGlzdCdzIHNjcm9sbCBvZmZzZXQuXG4gICAqL1xuICBASW5wdXQoKSBncm91cEtleSA9IFwiXCI7XG4gIC8qKlxuICAgKiBXaGljaCBzaWRlIG9mIHRoZSBpbnB1dCB0aGUgZHJvcGRvd24gb3BlbnMgb24uIFRoZSByb3dzJyBlbnRyYW5jZSBzdGFydHNcbiAgICogZnJvbSB0aGUgaW5wdXQncyBzaWRlIG91dHdhcmQsIHNvIFwiYWJvdmVcIiByZXZlcnNlcyB0aGUgb3JkZXIuXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIiA9IFwiYmVsb3dcIjtcbiAgLyoqIFdoZXRoZXIgcm93cyBkcmF3IHRoZWlyIGBpY29uX3N2Z2AgYmVmb3JlIHRoZSB0ZXh0LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93SWNvbnMgPSB0cnVlO1xuICAvKiogV2hldGhlciByb3dzIGRyYXcgdGhlaXIgYGltYWdlX3VybGAgYXMgYSB0aHVtYm5haWwgYmVmb3JlIHRoZSB0ZXh0LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93SW1hZ2VzID0gdHJ1ZTtcbiAgLyoqIFdoZXRoZXIgcm93cyBzaG93IHRoZWlyIGBpdGVtX2NvdW50YCBhdCB0aGUgdHJhaWxpbmcgZWRnZS4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgc2hvd0NvdW50cyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEljb25zIGFuZCBwaWN0dXJlcyBhcmUgYWxsLW9yLW5vdGhpbmcgYWNyb3NzIHRoZSBsaXN0IOKAlCBubyBzaW5nbGUgcm93IGNhblxuICAgKiBkZWNpZGUgaXRzIG93biAoc2VlIGBvcHRpb25zU2hvd0xlYWRpbmdWaXN1YWxzYCkuXG4gICAqL1xuICBnZXQgbGVhZGluZ1Zpc3VhbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9wdGlvbnNTaG93TGVhZGluZ1Zpc3VhbHModGhpcy5vcHRpb25zLCB0aGlzLnNob3dJY29ucywgdGhpcy5zaG93SW1hZ2VzKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFN1Z2dlc3Rpb25PcHRpb24+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBoaWdobGlnaHQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgLyoqIFRoZSBwb2ludGVyIGxlZnQgb3B0aW9uIGBpbmRleGAg4oCUIHRoZSBkcm9wZG93biBjbGVhcnMgYSBoaWdobGlnaHQgc3RpbGwgb24gaXQuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB1bmhpZ2hsaWdodCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBAVmlld0NoaWxkKEdyaWRDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIGdyaWRDb21wPzogR3JpZENvbXBvbmVudDtcblxuICAvKipcbiAgICogVGhlIG1lYXN1cmVkIGxheW91dCBwbGFuLiBTdGFydHMgYXMgdGhlIG1lYXN1cmVtZW50LWZyZWUgYmFzZWxpbmUgKG9uZVxuICAgKiBjb2x1bW4pOyBhZnRlciBlYWNoIHZpZXcgdXBkYXRlIHRoZSByZW5kZXJlZCByb3dzIGFyZSBtZWFzdXJlZCBhbmQgdGhlXG4gICAqIHBsYW4gdXBncmFkZXMgdG8gdHdvIGNvbHVtbnMgd2hlbiB0aGV5IHByb3ZhYmx5IGZpdCDigJQgc2FtZSB0d28tcGFzcyB0aGVcbiAgICogUmVhY3QgZ3JpZCBkb2VzIHdpdGggaXRzIGxheW91dCBlZmZlY3QsIGFsbCB0aHJvdWdoIGBwbGFuT3B0aW9uc0dyaWRgLlxuICAgKi9cbiAgcGxhbjogT3B0aW9uc0dyaWRQbGFuID0gcGxhbk9wdGlvbnNHcmlkKDAsIGZhbHNlLCBudWxsLCBudWxsKTtcbiAgcHJpdmF0ZSBuZWVkc01lYXN1cmUgPSB0cnVlO1xuICAvKipcbiAgICogVGhlIHJvd3MgdGhlIGN1cnJlbnQgcGxhbiB3YXMgbWVhc3VyZWQgZnJvbS4gQSBza2VsZXRvbiBtaXJyb3JpbmcgdGhlbVxuICAgKiBrZWVwcyB0aGF0IHBsYW4g4oCUIHNlZSBgc2FtZU9wdGlvblJvd3NgLlxuICAgKi9cbiAgcHJpdmF0ZSBtZWFzdXJlZFJvd3M6IFN1Z2dlc3Rpb25PcHRpb25bXSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFJlLW1lYXN1cmUgd2hlbiB0aGUgdmlld3BvcnQgY2hhbmdlcyAoYnJlYWtwb2ludCBvciB3aWR0aCBib3RoIG1hdHRlciB0b1xuICAvLyB0aGUgdHdvLWNvbHVtbiBmaXQpLlxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxuICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm5lZWRzTWVhc3VyZSA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gT25seSB0aGUgaW5wdXRzIHRoZSBwbGFuIGRlcGVuZHMgb24gcmVzZXQgaXQg4oCUIGFjdGl2ZUluZGV4IGNoYW5nZXMgb25cbiAgICAvLyBldmVyeSBhcnJvdyBrZXkgYW5kIG11c3Qgbm90IGtub2NrIGEgbWVhc3VyZWQgdHdvLWNvbHVtbiBncmlkIGJhY2sgdG9cbiAgICAvLyB0aGUgYmFzZWxpbmUgKHRoZSBSZWFjdCBncmlkJ3MgbGF5b3V0IGVmZmVjdCBleGNsdWRlcyBpdCB0aGUgc2FtZSB3YXkpLlxuICAgIGlmICghY2hhbmdlc1tcIm9wdGlvbnNcIl0gJiYgIWNoYW5nZXNbXCJsb2FkaW5nXCJdKSByZXR1cm47XG4gICAgaWYgKHRoaXMubG9hZGluZyAmJiBzYW1lT3B0aW9uUm93cyh0aGlzLm1lYXN1cmVkUm93cywgdGhpcy5vcHRpb25zKSkgcmV0dXJuO1xuICAgIHRoaXMubWVhc3VyZWRSb3dzID0gdGhpcy5sb2FkaW5nID8gbnVsbCA6IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLm5lZWRzTWVhc3VyZSA9IHRydWU7XG4gICAgLy8gVGhlIHByZS1tZWFzdXJlIGJhc2VsaW5lIGZvciB0aGUgbmV3IGlucHV0cywgc28gdGhlIGZpcnN0IHBhaW50IGlzIHRoZVxuICAgIC8vIHNhbWUgb25lLWNvbHVtbiBsYXlvdXQgdGhlIG90aGVyIHBhY2thZ2VzIHN0YXJ0IGZyb20uXG4gICAgdGhpcy5wbGFuID0gcGxhbk9wdGlvbnNHcmlkKHRoaXMub3B0aW9ucy5sZW5ndGgsIGlzT3B0aW9uc0dyaWRNb2JpbGVWaWV3cG9ydCgpLCBudWxsLCBudWxsKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubmVlZHNNZWFzdXJlKSByZXR1cm47XG4gICAgdGhpcy5uZWVkc01lYXN1cmUgPSBmYWxzZTtcbiAgICBjb25zdCBpc01vYmlsZSA9IGlzT3B0aW9uc0dyaWRNb2JpbGVWaWV3cG9ydCgpO1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRDb21wPy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIC8vIE1lYXN1cmluZyBjbG9uZXMgZXZlcnkgcm93IGFuZCBmb3JjZXMgYSBsYXlvdXQg4oCUIHNraXAgaXQgd2hlbmV2ZXIgdGhlXG4gICAgLy8gcGxhbiB3b3VsZCBpZ25vcmUgdGhlIHJlc3VsdCAobW9iaWxlLCBmZXdlciB0aGFuIGZpdmUgb3B0aW9ucykuXG4gICAgY29uc3Qgc2hvdWxkTWVhc3VyZSA9XG4gICAgICBncmlkICYmICF0aGlzLmxvYWRpbmcgJiYgbmVlZHNPcHRpb25zR3JpZE1lYXN1cmVtZW50KHRoaXMub3B0aW9ucy5sZW5ndGgsIGlzTW9iaWxlKTtcbiAgICBjb25zdCBtZWFzdXJlZCA9IHNob3VsZE1lYXN1cmUgPyBtZWFzdXJlT3B0aW9uc0dyaWQoZ3JpZCkgOiBudWxsO1xuICAgIGNvbnN0IG5leHQgPSBwbGFuT3B0aW9uc0dyaWQoXG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoLFxuICAgICAgaXNNb2JpbGUsXG4gICAgICBtZWFzdXJlZD8ucm93V2lkdGhzID8/IG51bGwsXG4gICAgICBtZWFzdXJlZD8uZ3JpZFdpZHRoID8/IG51bGwsXG4gICAgKTtcbiAgICBjb25zdCB1bmNoYW5nZWQgPVxuICAgICAgbmV4dC50ZW1wbGF0ZSA9PT0gdGhpcy5wbGFuLnRlbXBsYXRlICYmXG4gICAgICBuZXh0Lm1heEhlaWdodCA9PT0gdGhpcy5wbGFuLm1heEhlaWdodCAmJlxuICAgICAgbmV4dC5zY3JvbGxIaW50SW5kaWNlcy5qb2luKCkgPT09IHRoaXMucGxhbi5zY3JvbGxIaW50SW5kaWNlcy5qb2luKCk7XG4gICAgaWYgKHVuY2hhbmdlZCkgcmV0dXJuO1xuICAgIC8vIFRoZSB2aWV3IHdhcyBhbHJlYWR5IGNoZWNrZWQgdGhpcyBjeWNsZSDigJQgYXBwbHkgdGhlIG1lYXN1cmVkIHBsYW4gaW4gYVxuICAgIC8vIGZyZXNoIG1pY3JvdGFzayBzbyBPblB1c2ggcGlja3MgaXQgdXAgd2l0aG91dCBhblxuICAgIC8vIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkIGVycm9yLlxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHRoaXMucGxhbiA9IG5leHQ7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzU2Nyb2xsSGludChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5wbGFuLnNjcm9sbEhpbnRJbmRpY2VzLmluY2x1ZGVzKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBkZWxheSBvZiByb3cgYGluZGV4YCdzIGVudHJhbmNlIOKAlCBlYWNoIHJvdyByaXNlcyBpbiBhIGJlYXQgYWZ0ZXJcbiAgICogdGhlIG9uZSBuZWFyZXIgdGhlIGlucHV0LiBTa2VsZXRvbiByb3dzIGZhZGUgaW4gdG9nZXRoZXIgKHRoZXkncmVcbiAgICogcGxhY2Vob2xkZXJzLCBub3QgY29udGVudCBhcnJpdmluZykuXG4gICAqL1xuICBlbnRlckRlbGF5TXMoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuIDA7XG4gICAgLy8gQWNyb3NzIHRoZSBjb2x1bW5zIHRoZSBtZWFzdXJlZCBwbGFuIHNldHRsZWQgb24g4oCUIHRoZSB0d28tY29sdW1uXG4gICAgLy8gdXBncmFkZSBvbmx5IGRlY2lkZXMgdGhhdCBhZnRlciB0aGUgcm93cyBleGlzdC5cbiAgICByZXR1cm4gb3B0aW9uRW50ZXJEZWxheU1zKGluZGV4LCB0aGlzLnBsYW4uY29scywgdGhpcy5vcHRpb25zLmxlbmd0aCwgdGhpcy5vcHRpb25zUG9zaXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBncm91cCBpcyBwYXJ0IG9mIHRoZSBpZGVudGl0eTogYSBuZXcgc3VnZ2VzdGlvbidzIG9wdGlvbnMgYXJlIG5ld1xuICAgKiByb3dzIGFuZCBnZXQgdGhlIGVudHJhbmNlIGFuaW1hdGlvbiBldmVuIHdoZW4gb25lIHNwZWxscyB0aGUgc2FtZSBhcyBhXG4gICAqIHJvdyBhbHJlYWR5IG9uIHNjcmVlbi5cbiAgICovXG4gIHRyYWNrQnlPcHRpb25UZXh0ID0gKF86IG51bWJlciwgb3B0OiBTdWdnZXN0aW9uT3B0aW9uKTogc3RyaW5nID0+IGAke3RoaXMuZ3JvdXBLZXl9XFwwJHtvcHQudGV4dH1gO1xufVxuIiwiPCEtLSBtYXg9XCIxZnJcIjogY29sdW1ucyBzaGFyZSBvdXQgdGhlIGZ1bGwgd2lkdGgsIHNvIGEgbG9uZSBjb2x1bW4gc3BhbnMgdGhlXG4gICAgIHdob2xlIG9wdGlvbnMgYm94IGluc3RlYWQgb2Ygc3RvcHBpbmcgYXQgMjUwcHguIC0tPlxuPGFpYS1ncmlkXG4gIG1pbj1cIjI1MHB4XCJcbiAgbWF4PVwiMWZyXCJcbiAgZ2FwPVwiMFwiXG4gIFtzY3JvbGxdPVwidHJ1ZVwiXG4gIFtzY3JvbGxSZXNldEtleV09XCJncm91cEtleVwiXG4gIFt0ZW1wbGF0ZV09XCJwbGFuLnRlbXBsYXRlXCJcbiAgW21heEhlaWdodF09XCJwbGFuLm1heEhlaWdodFwiXG4gIFtncm91cF09XCJncm91cEtleVwiXG4+XG4gIDxhaWEtc3VnZ2VzdGlvbi1pdGVtXG4gICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyB0cmFja0J5OiB0cmFja0J5T3B0aW9uVGV4dDsgbGV0IGkgPSBpbmRleFwiXG4gICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgIFtpc0hpZ2hsaWdodGVkXT1cImkgPT09IGFjdGl2ZUluZGV4XCJcbiAgICBbY2hlY2tlZF09XCJwaWNrZWQgPyBwaWNrZWQuaW5jbHVkZXMob3B0aW9uLnRleHQpIDogdW5kZWZpbmVkXCJcbiAgICBbaWRdPVwibGlzdGJveElkICsgJy1vcHRpb24tJyArIGlcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIFtzaG93SWNvbl09XCJzaG93SWNvbnMgJiYgbGVhZGluZ1Zpc3VhbHNcIlxuICAgIFtzaG93SW1hZ2VdPVwic2hvd0ltYWdlcyAmJiBsZWFkaW5nVmlzdWFsc1wiXG4gICAgW3Nob3dDb3VudF09XCJzaG93Q291bnRzXCJcbiAgICBbc2Nyb2xsSGludF09XCJpc1Njcm9sbEhpbnQoaSlcIlxuICAgIFtlbnRlckRlbGF5TXNdPVwiZW50ZXJEZWxheU1zKGkpXCJcbiAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgIChoaWdobGlnaHQpPVwiaGlnaGxpZ2h0LmVtaXQoaSlcIlxuICAgICh1bmhpZ2hsaWdodCk9XCJ1bmhpZ2hsaWdodC5lbWl0KGkpXCJcbiAgPjwvYWlhLXN1Z2dlc3Rpb24taXRlbT5cbjwvYWlhLWdyaWQ+XG4iXX0=
|