@magicx-eng/ai-autocomplete-angular 0.23.1 → 0.24.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.
Files changed (24) hide show
  1. package/README.md +5 -0
  2. package/esm2020/lib/ai-autocomplete/ai-autocomplete.component.mjs +16 -4
  3. package/esm2020/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.mjs +34 -4
  4. package/esm2020/lib/internal/editor-host/editor-host.directive.mjs +10 -3
  5. package/esm2020/lib/internal/suggestion-grid/suggestion-grid.component.mjs +11 -3
  6. package/esm2020/lib/internal/suggestion-item/suggestion-item.component.mjs +40 -5
  7. package/esm2020/public-api.mjs +9 -2
  8. package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs +115 -15
  9. package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
  10. package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs +114 -15
  11. package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
  12. package/lib/ai-autocomplete/ai-autocomplete.component.d.ts +7 -1
  13. package/lib/ai-autocomplete/ai-autocomplete.component.d.ts.map +1 -1
  14. package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts +18 -1
  15. package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts.map +1 -1
  16. package/lib/internal/editor-host/editor-host.directive.d.ts +3 -1
  17. package/lib/internal/editor-host/editor-host.directive.d.ts.map +1 -1
  18. package/lib/internal/suggestion-grid/suggestion-grid.component.d.ts +5 -1
  19. package/lib/internal/suggestion-grid/suggestion-grid.component.d.ts.map +1 -1
  20. package/lib/internal/suggestion-item/suggestion-item.component.d.ts +23 -1
  21. package/lib/internal/suggestion-item/suggestion-item.component.d.ts.map +1 -1
  22. package/package.json +2 -2
  23. package/public-api.d.ts +9 -1
  24. package/public-api.d.ts.map +1 -1
package/README.md CHANGED
@@ -378,6 +378,8 @@ export class SearchComponent implements OnInit, OnDestroy {
378
378
 
379
379
  > **Option icons.** An option may carry an icon: `icon_svg` is inline SVG markup and `icon` its name. The built-in dropdown draws the SVG before the option's text, in the text color, and hides it while the row shows its loading skeleton. When rendering options yourself, pass `icon_svg` through the exported `sanitizeOptionIconSvg` before inserting it — it reduces the markup to plain vector drawing and returns `null` for anything else — and use `optionLabel(option)` for the text — it is the option's `text` alone; `icon` is the icon's name and is never shown as text, even when `icon_svg` is missing or fails to draw. A picked option's `icon` / `icon_svg` are copied onto its completed parameter, and the chip in the input draws the glyph before its text. Both surfaces can be switched off: `showOptionIcons: false` renders option rows as text only and `showChipIcons: false` renders chips as text only; either way the icon element is omitted rather than hidden.
380
380
 
381
+ > **Option pictures and counts.** An option may also carry `image_url` — a picture of the best-matching catalog item offering it — and `item_count`, how many items offer it (each is present only when the server includes it; when it includes counts, the options also arrive ordered by them, most items first; a starting state carries pictures but no counts). The built-in dropdown draws the picture as a square thumbnail before the option's text (in place of its `icon_svg`, so a row never leads with two visuals) and the count as a muted label at the row's trailing edge (`"12 items"`); a skeleton row keeps the tile's placeholder fill and hides the count. The unit word after the number is a token: set `--aia-option-count-unit: "sneakers"` to name what is being counted, `--aia-option-count-unit-one: "sneaker"` for a count of 1 (it falls back to the plural token), or `--aia-option-count-unit: ""` for the number alone. When rendering options yourself, pass `image_url` through the exported `optionImageSrc` before using it as an `<img src>` — it returns the URL only when it is `http(s)` and `null` otherwise — and `formatOptionCount(option.item_count)` gives the number the built-in rows print (`null` when there is no count); `optionCountLabel(count, unit?)` appends a unit for a dropdown that prints the word itself (`"item"` / `"items"` by default; one word, a `{ one, other }` pair, or `""` for none). Both surfaces can be switched off: `showOptionImages: false` renders rows without pictures (an option's icon then draws instead) and `showOptionCounts: false` hides the counts. A picked option's `image_url` is copied onto its completed parameter too, and the chip in the input draws it as a small rounded tile before its text, in place of the icon; `showChipImages: false` renders chips without pictures (the icon then draws instead). The tile is sized by `--aia-option-image-size` (40px), rounded by `--aia-option-image-radius` (12px), spaced by `--aia-option-image-gap` (12px) and filled by `--aia-option-image-bg` while its picture loads; the count reads `--aia-option-count-font-size` (12px), `--aia-option-count-color` and `--aia-option-count-opacity` (0.6); the chip's tile reads `--aia-chip-image-size` (1.25em of the chip's font), `--aia-chip-image-radius` (4px) and `--aia-chip-image-bg`.
382
+
381
383
  ## Convenience NgModule
382
384
 
383
385
  For codebases that prefer the older NgModule pattern, an `AIAutocompleteModule` re-exports every public component and directive:
@@ -415,6 +417,9 @@ Standalone-first apps don't need this — import the components/directive direct
415
417
  | `showSkipButton` | `boolean` | `true` | When `true`, the dropdown's pill bar ends in a small "skip" button that dismisses the active pill — same action as pressing <kbd>→</kbd> at the end of the input. It sits top-right when the dropdown opens below the input, bottom-right when `optionsPosition` is `"above"`, and appears once the input has text (alongside the footer's "→ to skip" hint). Set to `false` to hide it. |
416
418
  | `showOptionIcons` | `boolean` | `true` | When `true`, an option that carries an `icon_svg` draws its icon before its text in the dropdown. Set to `false` to render option rows as text only. |
417
419
  | `showChipIcons` | `boolean` | `true` | When `true`, a completed chip in the input draws the icon of the option that answered it. Set to `false` to render chips as text only. |
420
+ | `showChipImages` | `boolean` | `true` | When `true`, a completed chip in the input draws the picture (`image_url`) of the option that answered it, in place of its icon. Set to `false` to render chips without pictures. |
421
+ | `showOptionImages` | `boolean` | `true` | When `true`, an option that carries an `image_url` draws it as a square thumbnail before its text in the dropdown, in place of its icon. Set to `false` to render option rows without pictures. |
422
+ | `showOptionCounts` | `boolean` | `true` | When `true`, an option that carries an `item_count` shows it as a muted label at the row's trailing edge (`"12 items"`). Set to `false` to hide the counts. |
418
423
  | `autoFocus` | `boolean` | `true` | Focus the input on mount. Set to `false` to leave focus to the consumer. |
419
424
  | `value` | `string` | — | Controlled text value. Pair with `(valueChange)` or use `[(value)]`. |
420
425
  | `completedParams` | `CompletedParamState[]` | — | Controlled completed params. Pair with `(completedParamsChange)` or use `[(completedParams)]`. |
@@ -37,6 +37,10 @@ export class AIAutocompleteComponent {
37
37
  this.showSkipButton = true;
38
38
  /** When true (default), an option that carries an `icon_svg` draws its icon before its text in the dropdown. Set to false to render option rows as text only. */
39
39
  this.showOptionIcons = true;
40
+ /** When true (default), an option that carries an `image_url` draws it as a square thumbnail before its text in the dropdown (in place of its `icon_svg`). Set to false to render option rows without pictures. */
41
+ this.showOptionImages = true;
42
+ /** When true (default), an option that carries an `item_count` shows it as a muted label at the row's trailing edge ("12 items"). Set to false to hide the counts. */
43
+ this.showOptionCounts = true;
40
44
  /**
41
45
  * How the product strip lays its cards out. `"row"` (the default) is a
42
46
  * horizontally scrolling shelf of cards. `"list"` stacks the same cards as
@@ -48,6 +52,8 @@ export class AIAutocompleteComponent {
48
52
  this.productsLayout = "row";
49
53
  /** When true (default), a completed chip in the input draws the icon of the option that answered it. Set to false to render chips as text only. */
50
54
  this.showChipIcons = true;
55
+ /** When true (default), a completed chip in the input draws the picture (`image_url`) of the option that answered it, in place of its icon. Set to false to render chips without pictures. */
56
+ this.showChipImages = true;
51
57
  /** Focus the editor on mount. Default: true. */
52
58
  this.autoFocus = true;
53
59
  /**
@@ -384,14 +390,14 @@ export class AIAutocompleteComponent {
384
390
  }
385
391
  }
386
392
  AIAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
387
- AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", optionOverrides: "optionOverrides", maskCompletedText: "maskCompletedText", columns: "columns", pillPlacement: "pillPlacement", mode: "mode", optionsPosition: "optionsPosition", animations: "animations", dropdownTrigger: "dropdownTrigger", closeDropdownOnBlur: "closeDropdownOnBlur", showNonTappableOptions: "showNonTappableOptions", showSkipButton: "showSkipButton", showOptionIcons: "showOptionIcons", productsLayout: "productsLayout", showChipIcons: "showChipIcons", autoFocus: "autoFocus", value: "value", completedParams: "completedParams", showProducts: "showProducts", products: "products", submitButton: "submitButton" }, outputs: { submitted: "submitted", resultChange: "resultChange", errored: "errored", valueChange: "valueChange", completedParamsChange: "completedParamsChange", focused: "focused", blurred: "blurred", productSelect: "productSelect" }, providers: [
393
+ AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", optionOverrides: "optionOverrides", maskCompletedText: "maskCompletedText", columns: "columns", pillPlacement: "pillPlacement", mode: "mode", optionsPosition: "optionsPosition", animations: "animations", dropdownTrigger: "dropdownTrigger", closeDropdownOnBlur: "closeDropdownOnBlur", showNonTappableOptions: "showNonTappableOptions", showSkipButton: "showSkipButton", showOptionIcons: "showOptionIcons", showOptionImages: "showOptionImages", showOptionCounts: "showOptionCounts", productsLayout: "productsLayout", showChipIcons: "showChipIcons", showChipImages: "showChipImages", autoFocus: "autoFocus", value: "value", completedParams: "completedParams", showProducts: "showProducts", products: "products", submitButton: "submitButton" }, outputs: { submitted: "submitted", resultChange: "resultChange", errored: "errored", valueChange: "valueChange", completedParamsChange: "completedParamsChange", focused: "focused", blurred: "blurred", productSelect: "productSelect" }, providers: [
388
394
  {
389
395
  provide: NG_VALUE_ACCESSOR,
390
396
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
391
397
  useExisting: forwardRef(() => AIAutocompleteComponent),
392
398
  multi: true,
393
399
  },
394
- ], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "editorRef", first: true, predicate: ["editor"], descendants: true }, { propertyName: "pillContainerRef", first: true, predicate: ["pillContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #container\n class=\"magicx-aia magicx-aia-container\"\n [attr.data-pill-placement]=\"pillPlacement\"\n [attr.data-options-position]=\"optionsPosition\"\n [attr.data-animations]=\"animations ? 'on' : 'off'\"\n [attr.data-mode]=\"resolvedMode\"\n>\n <ai-autocomplete-dropdown\n *ngIf=\"controller\"\n [controller]=\"controller\"\n [showPills]=\"showDropdownPills\"\n [showSkipButton]=\"showSkipButton\"\n [showOptionIcons]=\"showOptionIcons\"\n [productsLayout]=\"productsLayout\"\n ></ai-autocomplete-dropdown>\n\n <div\n class=\"magicx-aia-input-wrapper\"\n data-aia-input-wrapper=\"\"\n (click)=\"onWrapperClick($event)\"\n (keyup)=\"$event.stopPropagation()\"\n >\n <div class=\"magicx-aia-editor-area\" data-aia-editor=\"\">\n <div\n #editor\n *ngIf=\"controller\"\n [aiaEditorHost]=\"controller\"\n [autoFocus]=\"autoFocus\"\n [showChipIcons]=\"showChipIcons\"\n class=\"magicx-aia-input\"\n data-aia-input=\"\"\n ></div>\n\n <ng-container *ngIf=\"controller && showInlinePills\">\n <span\n #pillContainer\n class=\"magicx-aia-pill-list-container\"\n data-aia-pill-list-container=\"\"\n *ngIf=\"\n (controller.isLoading$ | async) ||\n ((controller.suggestionPills$ | async)?.length ?? 0) > 0\n \"\n >\n <aia-pill-list\n [pills]=\"(controller.suggestionPills$ | async) ?? []\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"(controller.isActivePillSelected$ | async) ?? false\"\n [loading]=\"(controller.isLoading$ | async) ?? false\"\n (selectPill)=\"onSelectPill($event)\"\n ></aia-pill-list>\n </span>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"submitButtonState\">\n <aia-submit-button\n *ngSwitchCase=\"'default'\"\n [disabled]=\"\n !(\n controller &&\n canSubmit({\n segments: (controller.segments$ | async) ?? [],\n completedParams: (controller.completedParams$ | async) ?? []\n })\n )\n \"\n (submit)=\"onSubmitButtonClick($event)\"\n ></aia-submit-button>\n\n <span\n *ngSwitchCase=\"'custom'\"\n data-aia-submit=\"\"\n data-aia-submit-slot=\"\"\n class=\"magicx-aia-submit-slot\"\n (click)=\"onSubmitSlotClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"customSubmitTemplate\"></ng-container>\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":where(.magicx-aia){box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html),:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):before,:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):after{all:revert;box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-dropdown]):not(html):not(html):not(html):not(html):not(html){line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-align:start;text-shadow:none;font-style:normal;font-variant:normal;white-space:normal;visibility:visible;cursor:auto}:where([data-aia-input-wrapper] svg,[data-aia-dropdown] svg):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){display:revert;vertical-align:revert;position:revert;inset:revert;float:revert;margin:revert;padding:revert;border:revert;border-radius:revert;outline:revert;background:revert;box-shadow:revert;min-width:revert;max-width:revert;min-height:revert;max-height:revert;flex:revert;transition:revert;animation:revert;rotate:revert;scale:revert;translate:revert}:where([data-aia-input-wrapper] svg *,[data-aia-dropdown] svg *):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){transition:revert;animation:revert}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: #ffffff;--aia-border: #b0b0b0;--aia-dropdown-border: rgba(231, 231, 231, .5);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: #bdbdbd;--aia-pill-color: #333539;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .105);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #000000;--aia-option-bg: #eef2ff;--aia-option-color: #1a1b1d;--aia-option-color-selected: #000000;--aia-option-font-size: 16px;--aia-written-text-color: #000000;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: #000000;--aia-submit-color: #ffffff;--aia-color-text-muted: #6b7280;--aia-skeleton-bg: rgba(189, 189, 189, .25);--aia-streak-rgb: 99, 102, 241;--aia-footer-hint-color: #505050;--aia-footer-brand-color: #b0b0b0;--aia-footer-badge-border: rgba(189, 189, 189, .51)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: #000000;--aia-border: #505050;--aia-dropdown-border: rgba(72, 72, 72, .5);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: #bdbdbd;--aia-pill-color: #b0b0b0;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .15);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #ffffff;--aia-option-bg: #323232;--aia-option-color: #e7e7e7;--aia-option-color-selected: #ffffff;--aia-option-font-size: 16px;--aia-written-text-color: #ffffff;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: #ffffff;--aia-submit-color: #000000;--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: #1a1b1d;--aia-streak-rgb: 255, 255, 255;--aia-footer-hint-color: #b0b0b0;--aia-footer-brand-color: #505050;--aia-footer-badge-border: #505050}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 8px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));transform-origin:50% 100%;top:auto;bottom:100%;margin-top:0;margin-bottom:6px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]{padding:0 0 var(--aia-footer-gap, 8px) 8px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-animations=\"off\"]) *,:where(.magicx-aia[data-animations=\"off\"]) *:before,:where(.magicx-aia[data-animations=\"off\"]) *:after{animation-duration:0s!important;transition-duration:0s!important}.magicx-aia-container{position:relative;font-family:var(--aia-font-family, inherit);container-type:inline-size}.magicx-aia-input-wrapper{padding:12px 16px 12px max(10px,var(--aia-content-inset-left, 16px));border:1px solid var(--aia-border, #b0b0b0);border-radius:20px;background:var(--aia-surface, #ffffff);box-shadow:var(--aia-shadow, none);overflow:hidden;display:flex;align-items:flex-start;gap:12px}.magicx-aia-editor-area{position:relative;flex:1;min-width:0;min-height:22px;line-height:var(--aia-editor-line-height, 1.9);font-family:inherit;font-size:var(--aia-written-text-font-size, 14px);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;max-height:var(--aia-editor-max-height, calc(var(--aia-editor-line-height, 1.9) * 5em));overflow-y:auto;scrollbar-width:none}.magicx-aia-editor-area::-webkit-scrollbar{display:none}.magicx-aia-input{display:inline;outline:none;background:transparent;color:var(--aia-written-text-color, var(--aia-color-text-default, #fff));caret-color:var( --aia-caret-color, var(--aia-written-text-color, var(--aia-color-text-default, #fff)) );font-weight:300;vertical-align:middle}.magicx-aia-input[contenteditable=true]{-webkit-user-modify:read-write}.magicx-aia-input[contenteditable=plaintext-only]{-webkit-user-modify:read-write-plaintext-only}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]{display:inline;padding:3px 6px;border-radius:6px;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:var(--aia-completed-pill-bg, rgba(189, 189, 189, .105));color:var(--aia-completed-pill-color, var(--aia-written-text-color, #fff));font-size:var(--aia-pill-font-size, 14px);font-weight:400;line-height:normal;white-space:normal;letter-spacing:var(--aia-completed-pill-tracking, -.02em);cursor:pointer;transition:background-color .15s ease}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]:hover{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35))}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon]{display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:-.125em;pointer-events:none;-webkit-user-select:none;user-select:none;will-change:transform}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon] svg{display:block;width:100%;height:100%}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35));caret-color:transparent;cursor:text}.magicx-aia-input:has(strong[class~=\"magicx-aia-segment--editing\"]){caret-color:transparent}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::selection{background:transparent;color:inherit}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::-moz-selection{background:transparent;color:inherit}.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{content:attr(data-placeholder);color:var(--aia-color-text-muted, #c1c4cb);opacity:.7;pointer-events:none;transition:opacity var(--aia-placeholder-fade, .12s) ease-out}.magicx-aia-input[data-aia-placeholder-leaving]:before{opacity:0}@media (prefers-reduced-motion: reduce){.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{transition-duration:0s}}.magicx-aia-input[data-aia-empty=true]{display:inline-block;min-width:1px}.magicx-aia-pill-list-container{display:inline;margin-left:8px}.magicx-aia-pill-list-container:empty,.magicx-aia-pill-list-container[data-aia-pill-wrapped]{margin-left:0}.magicx-aia-submit-slot{display:contents}:where(.magicx-aia-input) strong[class~=magicx-aia-shimmer-sweep]{animation:aiaPillReveal .4s cubic-bezier(.4,0,.2,1) forwards}@keyframes aiaPillReveal{0%{opacity:0}}@media (min-width: 769px){[data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before,:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{inset:0;background:var(--aia-surface, #ffffff)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: AIAutocompleteDropdownComponent, selector: "ai-autocomplete-dropdown", inputs: ["controller", "showPills", "showSkipButton", "showOptionIcons", "productsLayout", "className", "mode"] }, { kind: "directive", type: AIAutocompleteEditorHostDirective, selector: "[aiaEditorHost]", inputs: ["aiaEditorHost", "autoFocus", "showChipIcons"] }, { kind: "component", type: PillListComponent, selector: "aia-pill-list", inputs: ["pills", "activePillIndex", "rounded", "loading", "activeSelected"], outputs: ["selectPill"] }, { kind: "component", type: SubmitButtonComponent, selector: "aia-submit-button", inputs: ["disabled"], outputs: ["submit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
400
+ ], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "editorRef", first: true, predicate: ["editor"], descendants: true }, { propertyName: "pillContainerRef", first: true, predicate: ["pillContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #container\n class=\"magicx-aia magicx-aia-container\"\n [attr.data-pill-placement]=\"pillPlacement\"\n [attr.data-options-position]=\"optionsPosition\"\n [attr.data-animations]=\"animations ? 'on' : 'off'\"\n [attr.data-mode]=\"resolvedMode\"\n>\n <ai-autocomplete-dropdown\n *ngIf=\"controller\"\n [controller]=\"controller\"\n [showPills]=\"showDropdownPills\"\n [showSkipButton]=\"showSkipButton\"\n [showOptionIcons]=\"showOptionIcons\"\n [showOptionImages]=\"showOptionImages\"\n [showOptionCounts]=\"showOptionCounts\"\n [productsLayout]=\"productsLayout\"\n ></ai-autocomplete-dropdown>\n\n <div\n class=\"magicx-aia-input-wrapper\"\n data-aia-input-wrapper=\"\"\n (click)=\"onWrapperClick($event)\"\n (keyup)=\"$event.stopPropagation()\"\n >\n <div class=\"magicx-aia-editor-area\" data-aia-editor=\"\">\n <div\n #editor\n *ngIf=\"controller\"\n [aiaEditorHost]=\"controller\"\n [autoFocus]=\"autoFocus\"\n [showChipIcons]=\"showChipIcons\"\n [showChipImages]=\"showChipImages\"\n class=\"magicx-aia-input\"\n data-aia-input=\"\"\n ></div>\n\n <ng-container *ngIf=\"controller && showInlinePills\">\n <span\n #pillContainer\n class=\"magicx-aia-pill-list-container\"\n data-aia-pill-list-container=\"\"\n *ngIf=\"\n (controller.isLoading$ | async) ||\n ((controller.suggestionPills$ | async)?.length ?? 0) > 0\n \"\n >\n <aia-pill-list\n [pills]=\"(controller.suggestionPills$ | async) ?? []\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"(controller.isActivePillSelected$ | async) ?? false\"\n [loading]=\"(controller.isLoading$ | async) ?? false\"\n (selectPill)=\"onSelectPill($event)\"\n ></aia-pill-list>\n </span>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"submitButtonState\">\n <aia-submit-button\n *ngSwitchCase=\"'default'\"\n [disabled]=\"\n !(\n controller &&\n canSubmit({\n segments: (controller.segments$ | async) ?? [],\n completedParams: (controller.completedParams$ | async) ?? []\n })\n )\n \"\n (submit)=\"onSubmitButtonClick($event)\"\n ></aia-submit-button>\n\n <span\n *ngSwitchCase=\"'custom'\"\n data-aia-submit=\"\"\n data-aia-submit-slot=\"\"\n class=\"magicx-aia-submit-slot\"\n (click)=\"onSubmitSlotClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"customSubmitTemplate\"></ng-container>\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":where(.magicx-aia){box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html),:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):before,:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):after{all:revert;box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-dropdown]):not(html):not(html):not(html):not(html):not(html){line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-align:start;text-shadow:none;font-style:normal;font-variant:normal;white-space:normal;visibility:visible;cursor:auto}:where([data-aia-input-wrapper] svg,[data-aia-dropdown] svg):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){display:revert;vertical-align:revert;position:revert;inset:revert;float:revert;margin:revert;padding:revert;border:revert;border-radius:revert;outline:revert;background:revert;box-shadow:revert;min-width:revert;max-width:revert;min-height:revert;max-height:revert;flex:revert;transition:revert;animation:revert;rotate:revert;scale:revert;translate:revert}:where([data-aia-input-wrapper] svg *,[data-aia-dropdown] svg *):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){transition:revert;animation:revert}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: #ffffff;--aia-border: #b0b0b0;--aia-dropdown-border: rgba(231, 231, 231, .5);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: #bdbdbd;--aia-pill-color: #333539;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .105);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #000000;--aia-option-bg: #eef2ff;--aia-option-color: #1a1b1d;--aia-option-color-selected: #000000;--aia-option-font-size: 16px;--aia-written-text-color: #000000;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: #000000;--aia-submit-color: #ffffff;--aia-color-text-muted: #6b7280;--aia-skeleton-bg: rgba(189, 189, 189, .25);--aia-streak-rgb: 99, 102, 241;--aia-footer-hint-color: #505050;--aia-footer-brand-color: #b0b0b0;--aia-footer-badge-border: rgba(189, 189, 189, .51)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: #000000;--aia-border: #505050;--aia-dropdown-border: rgba(72, 72, 72, .5);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: #bdbdbd;--aia-pill-color: #b0b0b0;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .15);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #ffffff;--aia-option-bg: #323232;--aia-option-color: #e7e7e7;--aia-option-color-selected: #ffffff;--aia-option-font-size: 16px;--aia-written-text-color: #ffffff;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: #ffffff;--aia-submit-color: #000000;--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: #1a1b1d;--aia-streak-rgb: 255, 255, 255;--aia-footer-hint-color: #b0b0b0;--aia-footer-brand-color: #505050;--aia-footer-badge-border: #505050}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 8px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));transform-origin:50% 100%;top:auto;bottom:100%;margin-top:0;margin-bottom:6px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]{padding:0 0 var(--aia-footer-gap, 8px) 8px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-animations=\"off\"]) *,:where(.magicx-aia[data-animations=\"off\"]) *:before,:where(.magicx-aia[data-animations=\"off\"]) *:after{animation-duration:0s!important;transition-duration:0s!important}.magicx-aia-container{position:relative;font-family:var(--aia-font-family, inherit);container-type:inline-size}.magicx-aia-input-wrapper{padding:12px 16px 12px max(10px,var(--aia-content-inset-left, 16px));border:1px solid var(--aia-border, #b0b0b0);border-radius:20px;background:var(--aia-surface, #ffffff);box-shadow:var(--aia-shadow, none);overflow:hidden;display:flex;align-items:flex-start;gap:12px}.magicx-aia-editor-area{position:relative;flex:1;min-width:0;min-height:22px;line-height:var(--aia-editor-line-height, 1.9);font-family:inherit;font-size:var(--aia-written-text-font-size, 14px);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;max-height:var(--aia-editor-max-height, calc(var(--aia-editor-line-height, 1.9) * 5em));overflow-y:auto;scrollbar-width:none}.magicx-aia-editor-area::-webkit-scrollbar{display:none}.magicx-aia-input{display:inline;outline:none;background:transparent;color:var(--aia-written-text-color, var(--aia-color-text-default, #fff));caret-color:var( --aia-caret-color, var(--aia-written-text-color, var(--aia-color-text-default, #fff)) );font-weight:300;vertical-align:middle}.magicx-aia-input[contenteditable=true]{-webkit-user-modify:read-write}.magicx-aia-input[contenteditable=plaintext-only]{-webkit-user-modify:read-write-plaintext-only}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]{display:inline;padding:3px 6px;border-radius:6px;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:var(--aia-completed-pill-bg, rgba(189, 189, 189, .105));color:var(--aia-completed-pill-color, var(--aia-written-text-color, #fff));font-size:var(--aia-pill-font-size, 14px);font-weight:400;line-height:normal;white-space:normal;letter-spacing:var(--aia-completed-pill-tracking, -.02em);cursor:pointer;transition:background-color .15s ease}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]:hover{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35))}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon]{display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:-.125em;pointer-events:none;-webkit-user-select:none;user-select:none;will-change:transform}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon] svg{display:block;width:100%;height:100%}:where(.magicx-aia-input) span[class~=magicx-aia-segment-image]{display:inline;padding-left:var(--aia-chip-image-size, 1.25em);margin-right:5px;border-radius:var(--aia-chip-image-radius, 4px);background:var(--aia-chip-image, none) center / cover no-repeat,var(--aia-chip-image-bg, var(--aia-pill-bg, rgba(189, 189, 189, .25)));pointer-events:none;-webkit-user-select:none;user-select:none}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35));caret-color:transparent;cursor:text}.magicx-aia-input:has(strong[class~=\"magicx-aia-segment--editing\"]){caret-color:transparent}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::selection{background:transparent;color:inherit}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::-moz-selection{background:transparent;color:inherit}.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{content:attr(data-placeholder);color:var(--aia-color-text-muted, #c1c4cb);opacity:.7;pointer-events:none;transition:opacity var(--aia-placeholder-fade, .12s) ease-out}.magicx-aia-input[data-aia-placeholder-leaving]:before{opacity:0}@media (prefers-reduced-motion: reduce){.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{transition-duration:0s}}.magicx-aia-input[data-aia-empty=true]{display:inline-block;min-width:1px}.magicx-aia-pill-list-container{display:inline;margin-left:8px}.magicx-aia-pill-list-container:empty,.magicx-aia-pill-list-container[data-aia-pill-wrapped]{margin-left:0}.magicx-aia-submit-slot{display:contents}:where(.magicx-aia-input) strong[class~=magicx-aia-shimmer-sweep]{animation:aiaPillReveal .4s cubic-bezier(.4,0,.2,1) forwards}@keyframes aiaPillReveal{0%{opacity:0}}@media (min-width: 769px){[data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before,:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{inset:0;background:var(--aia-surface, #ffffff)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: AIAutocompleteDropdownComponent, selector: "ai-autocomplete-dropdown", inputs: ["controller", "showPills", "showSkipButton", "showOptionIcons", "showOptionImages", "showOptionCounts", "productsLayout", "className", "mode"] }, { kind: "directive", type: AIAutocompleteEditorHostDirective, selector: "[aiaEditorHost]", inputs: ["aiaEditorHost", "autoFocus", "showChipIcons", "showChipImages"] }, { kind: "component", type: PillListComponent, selector: "aia-pill-list", inputs: ["pills", "activePillIndex", "rounded", "loading", "activeSelected"], outputs: ["selectPill"] }, { kind: "component", type: SubmitButtonComponent, selector: "aia-submit-button", inputs: ["disabled"], outputs: ["submit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
395
401
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteComponent, decorators: [{
396
402
  type: Component,
397
403
  args: [{ selector: "ai-autocomplete", standalone: true, imports: [
@@ -407,7 +413,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
407
413
  useExisting: forwardRef(() => AIAutocompleteComponent),
408
414
  multi: true,
409
415
  },
410
- ], template: "<div\n #container\n class=\"magicx-aia magicx-aia-container\"\n [attr.data-pill-placement]=\"pillPlacement\"\n [attr.data-options-position]=\"optionsPosition\"\n [attr.data-animations]=\"animations ? 'on' : 'off'\"\n [attr.data-mode]=\"resolvedMode\"\n>\n <ai-autocomplete-dropdown\n *ngIf=\"controller\"\n [controller]=\"controller\"\n [showPills]=\"showDropdownPills\"\n [showSkipButton]=\"showSkipButton\"\n [showOptionIcons]=\"showOptionIcons\"\n [productsLayout]=\"productsLayout\"\n ></ai-autocomplete-dropdown>\n\n <div\n class=\"magicx-aia-input-wrapper\"\n data-aia-input-wrapper=\"\"\n (click)=\"onWrapperClick($event)\"\n (keyup)=\"$event.stopPropagation()\"\n >\n <div class=\"magicx-aia-editor-area\" data-aia-editor=\"\">\n <div\n #editor\n *ngIf=\"controller\"\n [aiaEditorHost]=\"controller\"\n [autoFocus]=\"autoFocus\"\n [showChipIcons]=\"showChipIcons\"\n class=\"magicx-aia-input\"\n data-aia-input=\"\"\n ></div>\n\n <ng-container *ngIf=\"controller && showInlinePills\">\n <span\n #pillContainer\n class=\"magicx-aia-pill-list-container\"\n data-aia-pill-list-container=\"\"\n *ngIf=\"\n (controller.isLoading$ | async) ||\n ((controller.suggestionPills$ | async)?.length ?? 0) > 0\n \"\n >\n <aia-pill-list\n [pills]=\"(controller.suggestionPills$ | async) ?? []\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"(controller.isActivePillSelected$ | async) ?? false\"\n [loading]=\"(controller.isLoading$ | async) ?? false\"\n (selectPill)=\"onSelectPill($event)\"\n ></aia-pill-list>\n </span>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"submitButtonState\">\n <aia-submit-button\n *ngSwitchCase=\"'default'\"\n [disabled]=\"\n !(\n controller &&\n canSubmit({\n segments: (controller.segments$ | async) ?? [],\n completedParams: (controller.completedParams$ | async) ?? []\n })\n )\n \"\n (submit)=\"onSubmitButtonClick($event)\"\n ></aia-submit-button>\n\n <span\n *ngSwitchCase=\"'custom'\"\n data-aia-submit=\"\"\n data-aia-submit-slot=\"\"\n class=\"magicx-aia-submit-slot\"\n (click)=\"onSubmitSlotClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"customSubmitTemplate\"></ng-container>\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":where(.magicx-aia){box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html),:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):before,:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):after{all:revert;box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-dropdown]):not(html):not(html):not(html):not(html):not(html){line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-align:start;text-shadow:none;font-style:normal;font-variant:normal;white-space:normal;visibility:visible;cursor:auto}:where([data-aia-input-wrapper] svg,[data-aia-dropdown] svg):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){display:revert;vertical-align:revert;position:revert;inset:revert;float:revert;margin:revert;padding:revert;border:revert;border-radius:revert;outline:revert;background:revert;box-shadow:revert;min-width:revert;max-width:revert;min-height:revert;max-height:revert;flex:revert;transition:revert;animation:revert;rotate:revert;scale:revert;translate:revert}:where([data-aia-input-wrapper] svg *,[data-aia-dropdown] svg *):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){transition:revert;animation:revert}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: #ffffff;--aia-border: #b0b0b0;--aia-dropdown-border: rgba(231, 231, 231, .5);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: #bdbdbd;--aia-pill-color: #333539;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .105);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #000000;--aia-option-bg: #eef2ff;--aia-option-color: #1a1b1d;--aia-option-color-selected: #000000;--aia-option-font-size: 16px;--aia-written-text-color: #000000;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: #000000;--aia-submit-color: #ffffff;--aia-color-text-muted: #6b7280;--aia-skeleton-bg: rgba(189, 189, 189, .25);--aia-streak-rgb: 99, 102, 241;--aia-footer-hint-color: #505050;--aia-footer-brand-color: #b0b0b0;--aia-footer-badge-border: rgba(189, 189, 189, .51)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: #000000;--aia-border: #505050;--aia-dropdown-border: rgba(72, 72, 72, .5);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: #bdbdbd;--aia-pill-color: #b0b0b0;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .15);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #ffffff;--aia-option-bg: #323232;--aia-option-color: #e7e7e7;--aia-option-color-selected: #ffffff;--aia-option-font-size: 16px;--aia-written-text-color: #ffffff;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: #ffffff;--aia-submit-color: #000000;--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: #1a1b1d;--aia-streak-rgb: 255, 255, 255;--aia-footer-hint-color: #b0b0b0;--aia-footer-brand-color: #505050;--aia-footer-badge-border: #505050}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 8px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));transform-origin:50% 100%;top:auto;bottom:100%;margin-top:0;margin-bottom:6px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]{padding:0 0 var(--aia-footer-gap, 8px) 8px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-animations=\"off\"]) *,:where(.magicx-aia[data-animations=\"off\"]) *:before,:where(.magicx-aia[data-animations=\"off\"]) *:after{animation-duration:0s!important;transition-duration:0s!important}.magicx-aia-container{position:relative;font-family:var(--aia-font-family, inherit);container-type:inline-size}.magicx-aia-input-wrapper{padding:12px 16px 12px max(10px,var(--aia-content-inset-left, 16px));border:1px solid var(--aia-border, #b0b0b0);border-radius:20px;background:var(--aia-surface, #ffffff);box-shadow:var(--aia-shadow, none);overflow:hidden;display:flex;align-items:flex-start;gap:12px}.magicx-aia-editor-area{position:relative;flex:1;min-width:0;min-height:22px;line-height:var(--aia-editor-line-height, 1.9);font-family:inherit;font-size:var(--aia-written-text-font-size, 14px);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;max-height:var(--aia-editor-max-height, calc(var(--aia-editor-line-height, 1.9) * 5em));overflow-y:auto;scrollbar-width:none}.magicx-aia-editor-area::-webkit-scrollbar{display:none}.magicx-aia-input{display:inline;outline:none;background:transparent;color:var(--aia-written-text-color, var(--aia-color-text-default, #fff));caret-color:var( --aia-caret-color, var(--aia-written-text-color, var(--aia-color-text-default, #fff)) );font-weight:300;vertical-align:middle}.magicx-aia-input[contenteditable=true]{-webkit-user-modify:read-write}.magicx-aia-input[contenteditable=plaintext-only]{-webkit-user-modify:read-write-plaintext-only}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]{display:inline;padding:3px 6px;border-radius:6px;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:var(--aia-completed-pill-bg, rgba(189, 189, 189, .105));color:var(--aia-completed-pill-color, var(--aia-written-text-color, #fff));font-size:var(--aia-pill-font-size, 14px);font-weight:400;line-height:normal;white-space:normal;letter-spacing:var(--aia-completed-pill-tracking, -.02em);cursor:pointer;transition:background-color .15s ease}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]:hover{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35))}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon]{display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:-.125em;pointer-events:none;-webkit-user-select:none;user-select:none;will-change:transform}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon] svg{display:block;width:100%;height:100%}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35));caret-color:transparent;cursor:text}.magicx-aia-input:has(strong[class~=\"magicx-aia-segment--editing\"]){caret-color:transparent}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::selection{background:transparent;color:inherit}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::-moz-selection{background:transparent;color:inherit}.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{content:attr(data-placeholder);color:var(--aia-color-text-muted, #c1c4cb);opacity:.7;pointer-events:none;transition:opacity var(--aia-placeholder-fade, .12s) ease-out}.magicx-aia-input[data-aia-placeholder-leaving]:before{opacity:0}@media (prefers-reduced-motion: reduce){.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{transition-duration:0s}}.magicx-aia-input[data-aia-empty=true]{display:inline-block;min-width:1px}.magicx-aia-pill-list-container{display:inline;margin-left:8px}.magicx-aia-pill-list-container:empty,.magicx-aia-pill-list-container[data-aia-pill-wrapped]{margin-left:0}.magicx-aia-submit-slot{display:contents}:where(.magicx-aia-input) strong[class~=magicx-aia-shimmer-sweep]{animation:aiaPillReveal .4s cubic-bezier(.4,0,.2,1) forwards}@keyframes aiaPillReveal{0%{opacity:0}}@media (min-width: 769px){[data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before,:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{inset:0;background:var(--aia-surface, #ffffff)}}\n"] }]
416
+ ], template: "<div\n #container\n class=\"magicx-aia magicx-aia-container\"\n [attr.data-pill-placement]=\"pillPlacement\"\n [attr.data-options-position]=\"optionsPosition\"\n [attr.data-animations]=\"animations ? 'on' : 'off'\"\n [attr.data-mode]=\"resolvedMode\"\n>\n <ai-autocomplete-dropdown\n *ngIf=\"controller\"\n [controller]=\"controller\"\n [showPills]=\"showDropdownPills\"\n [showSkipButton]=\"showSkipButton\"\n [showOptionIcons]=\"showOptionIcons\"\n [showOptionImages]=\"showOptionImages\"\n [showOptionCounts]=\"showOptionCounts\"\n [productsLayout]=\"productsLayout\"\n ></ai-autocomplete-dropdown>\n\n <div\n class=\"magicx-aia-input-wrapper\"\n data-aia-input-wrapper=\"\"\n (click)=\"onWrapperClick($event)\"\n (keyup)=\"$event.stopPropagation()\"\n >\n <div class=\"magicx-aia-editor-area\" data-aia-editor=\"\">\n <div\n #editor\n *ngIf=\"controller\"\n [aiaEditorHost]=\"controller\"\n [autoFocus]=\"autoFocus\"\n [showChipIcons]=\"showChipIcons\"\n [showChipImages]=\"showChipImages\"\n class=\"magicx-aia-input\"\n data-aia-input=\"\"\n ></div>\n\n <ng-container *ngIf=\"controller && showInlinePills\">\n <span\n #pillContainer\n class=\"magicx-aia-pill-list-container\"\n data-aia-pill-list-container=\"\"\n *ngIf=\"\n (controller.isLoading$ | async) ||\n ((controller.suggestionPills$ | async)?.length ?? 0) > 0\n \"\n >\n <aia-pill-list\n [pills]=\"(controller.suggestionPills$ | async) ?? []\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"(controller.isActivePillSelected$ | async) ?? false\"\n [loading]=\"(controller.isLoading$ | async) ?? false\"\n (selectPill)=\"onSelectPill($event)\"\n ></aia-pill-list>\n </span>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"submitButtonState\">\n <aia-submit-button\n *ngSwitchCase=\"'default'\"\n [disabled]=\"\n !(\n controller &&\n canSubmit({\n segments: (controller.segments$ | async) ?? [],\n completedParams: (controller.completedParams$ | async) ?? []\n })\n )\n \"\n (submit)=\"onSubmitButtonClick($event)\"\n ></aia-submit-button>\n\n <span\n *ngSwitchCase=\"'custom'\"\n data-aia-submit=\"\"\n data-aia-submit-slot=\"\"\n class=\"magicx-aia-submit-slot\"\n (click)=\"onSubmitSlotClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"customSubmitTemplate\"></ng-container>\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":where(.magicx-aia){box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html),:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):before,:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):after{all:revert;box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-dropdown]):not(html):not(html):not(html):not(html):not(html){line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-align:start;text-shadow:none;font-style:normal;font-variant:normal;white-space:normal;visibility:visible;cursor:auto}:where([data-aia-input-wrapper] svg,[data-aia-dropdown] svg):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){display:revert;vertical-align:revert;position:revert;inset:revert;float:revert;margin:revert;padding:revert;border:revert;border-radius:revert;outline:revert;background:revert;box-shadow:revert;min-width:revert;max-width:revert;min-height:revert;max-height:revert;flex:revert;transition:revert;animation:revert;rotate:revert;scale:revert;translate:revert}:where([data-aia-input-wrapper] svg *,[data-aia-dropdown] svg *):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){transition:revert;animation:revert}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: #ffffff;--aia-border: #b0b0b0;--aia-dropdown-border: rgba(231, 231, 231, .5);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: #bdbdbd;--aia-pill-color: #333539;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .105);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #000000;--aia-option-bg: #eef2ff;--aia-option-color: #1a1b1d;--aia-option-color-selected: #000000;--aia-option-font-size: 16px;--aia-written-text-color: #000000;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: #000000;--aia-submit-color: #ffffff;--aia-color-text-muted: #6b7280;--aia-skeleton-bg: rgba(189, 189, 189, .25);--aia-streak-rgb: 99, 102, 241;--aia-footer-hint-color: #505050;--aia-footer-brand-color: #b0b0b0;--aia-footer-badge-border: rgba(189, 189, 189, .51)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: #000000;--aia-border: #505050;--aia-dropdown-border: rgba(72, 72, 72, .5);--aia-dropdown-shadow: 0 8px 12px rgba(0, 0, 0, .05);--aia-pill-bg: #bdbdbd;--aia-pill-color: #b0b0b0;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .15);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #ffffff;--aia-option-bg: #323232;--aia-option-color: #e7e7e7;--aia-option-color-selected: #ffffff;--aia-option-font-size: 16px;--aia-written-text-color: #ffffff;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: #ffffff;--aia-submit-color: #000000;--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: #1a1b1d;--aia-streak-rgb: 255, 255, 255;--aia-footer-hint-color: #b0b0b0;--aia-footer-brand-color: #505050;--aia-footer-badge-border: #505050}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 8px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));transform-origin:50% 100%;top:auto;bottom:100%;margin-top:0;margin-bottom:6px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]{padding:0 0 var(--aia-footer-gap, 8px) 8px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-animations=\"off\"]) *,:where(.magicx-aia[data-animations=\"off\"]) *:before,:where(.magicx-aia[data-animations=\"off\"]) *:after{animation-duration:0s!important;transition-duration:0s!important}.magicx-aia-container{position:relative;font-family:var(--aia-font-family, inherit);container-type:inline-size}.magicx-aia-input-wrapper{padding:12px 16px 12px max(10px,var(--aia-content-inset-left, 16px));border:1px solid var(--aia-border, #b0b0b0);border-radius:20px;background:var(--aia-surface, #ffffff);box-shadow:var(--aia-shadow, none);overflow:hidden;display:flex;align-items:flex-start;gap:12px}.magicx-aia-editor-area{position:relative;flex:1;min-width:0;min-height:22px;line-height:var(--aia-editor-line-height, 1.9);font-family:inherit;font-size:var(--aia-written-text-font-size, 14px);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;max-height:var(--aia-editor-max-height, calc(var(--aia-editor-line-height, 1.9) * 5em));overflow-y:auto;scrollbar-width:none}.magicx-aia-editor-area::-webkit-scrollbar{display:none}.magicx-aia-input{display:inline;outline:none;background:transparent;color:var(--aia-written-text-color, var(--aia-color-text-default, #fff));caret-color:var( --aia-caret-color, var(--aia-written-text-color, var(--aia-color-text-default, #fff)) );font-weight:300;vertical-align:middle}.magicx-aia-input[contenteditable=true]{-webkit-user-modify:read-write}.magicx-aia-input[contenteditable=plaintext-only]{-webkit-user-modify:read-write-plaintext-only}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]{display:inline;padding:3px 6px;border-radius:6px;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:var(--aia-completed-pill-bg, rgba(189, 189, 189, .105));color:var(--aia-completed-pill-color, var(--aia-written-text-color, #fff));font-size:var(--aia-pill-font-size, 14px);font-weight:400;line-height:normal;white-space:normal;letter-spacing:var(--aia-completed-pill-tracking, -.02em);cursor:pointer;transition:background-color .15s ease}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]:hover{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35))}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon]{display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:-.125em;pointer-events:none;-webkit-user-select:none;user-select:none;will-change:transform}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon] svg{display:block;width:100%;height:100%}:where(.magicx-aia-input) span[class~=magicx-aia-segment-image]{display:inline;padding-left:var(--aia-chip-image-size, 1.25em);margin-right:5px;border-radius:var(--aia-chip-image-radius, 4px);background:var(--aia-chip-image, none) center / cover no-repeat,var(--aia-chip-image-bg, var(--aia-pill-bg, rgba(189, 189, 189, .25)));pointer-events:none;-webkit-user-select:none;user-select:none}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35));caret-color:transparent;cursor:text}.magicx-aia-input:has(strong[class~=\"magicx-aia-segment--editing\"]){caret-color:transparent}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::selection{background:transparent;color:inherit}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::-moz-selection{background:transparent;color:inherit}.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{content:attr(data-placeholder);color:var(--aia-color-text-muted, #c1c4cb);opacity:.7;pointer-events:none;transition:opacity var(--aia-placeholder-fade, .12s) ease-out}.magicx-aia-input[data-aia-placeholder-leaving]:before{opacity:0}@media (prefers-reduced-motion: reduce){.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{transition-duration:0s}}.magicx-aia-input[data-aia-empty=true]{display:inline-block;min-width:1px}.magicx-aia-pill-list-container{display:inline;margin-left:8px}.magicx-aia-pill-list-container:empty,.magicx-aia-pill-list-container[data-aia-pill-wrapped]{margin-left:0}.magicx-aia-submit-slot{display:contents}:where(.magicx-aia-input) strong[class~=magicx-aia-shimmer-sweep]{animation:aiaPillReveal .4s cubic-bezier(.4,0,.2,1) forwards}@keyframes aiaPillReveal{0%{opacity:0}}@media (min-width: 769px){[data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before,:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{inset:0;background:var(--aia-surface, #ffffff)}}\n"] }]
411
417
  }], propDecorators: { apiConfig: [{
412
418
  type: Input
413
419
  }], additionalContext: [{
@@ -436,10 +442,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
436
442
  type: Input
437
443
  }], showOptionIcons: [{
438
444
  type: Input
445
+ }], showOptionImages: [{
446
+ type: Input
447
+ }], showOptionCounts: [{
448
+ type: Input
439
449
  }], productsLayout: [{
440
450
  type: Input
441
451
  }], showChipIcons: [{
442
452
  type: Input
453
+ }], showChipImages: [{
454
+ type: Input
443
455
  }], autoFocus: [{
444
456
  type: Input
445
457
  }], value: [{
@@ -494,4 +506,4 @@ function resolveInitialMode(mode) {
494
506
  return "dark";
495
507
  return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
496
508
  }
497
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUlOLE1BQU0sRUFDTixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTZCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUlMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUtkLGVBQWUsR0FDaEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBRTFGOzs7Ozs7O0dBT0c7QUF3QkgsTUFBTSxPQUFPLHVCQUF1QjtJQXZCcEM7UUFxQ1csc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLHdEQUF3RDtRQUMvQyxr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O0lBQ1gsbUNBQW1DO0FBQ3JDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsa0JBQWtCLENBQUMsSUFBb0I7SUFDOUMsSUFBSSxJQUFJLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ2pDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ2pELE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICB0eXBlIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICB0eXBlIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgTmdab25lLFxuICB0eXBlIE9uQ2hhbmdlcyxcbiAgdHlwZSBPbkRlc3Ryb3ksXG4gIHR5cGUgT25Jbml0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICB0eXBlIFNpbXBsZUNoYW5nZXMsXG4gIHR5cGUgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0eXBlIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBUElDb25maWcsXG4gIHR5cGUgQXBwZWFyYW5jZU1vZGUsXG4gIHR5cGUgQXV0b2NvbXBsZXRlUmVzdWx0LFxuICBidWlsZFN1Ym1pdFJlc3VsdCxcbiAgdHlwZSBDb21wbGV0ZWRQYXJhbVN0YXRlLFxuICBleHRyYWN0UGxhaW5UZXh0LFxuICBNb2RlQ29udHJvbGxlcixcbiAgdHlwZSBPcHRpb25PdmVycmlkZXMsXG4gIHR5cGUgUHJvZHVjdCxcbiAgdHlwZSBQcm9kdWN0c0NvbmZpZyxcbiAgdHlwZSBQcm9kdWN0c0xheW91dCxcbiAgc2V0Q3Vyc29yT2Zmc2V0LFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiLi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnRcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB9IGZyb20gXCIuLi9jb250cm9sbGVyL2FpLWF1dG9jb21wbGV0ZS5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUgfSBmcm9tIFwiLi4vaW50ZXJuYWwvZWRpdG9yLWhvc3QvZWRpdG9yLWhvc3QuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBQaWxsTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9waWxsLWxpc3QvcGlsbC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3VibWl0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3N1Ym1pdC1idXR0b24vc3VibWl0LWJ1dHRvbi5jb21wb25lbnRcIjtcblxuLyoqXG4gKiBUaWVyIDEgY29tcG9uZW50IOKAlCBgPGFpLWF1dG9jb21wbGV0ZT5gLiBUaGUgQW5ndWxhciBlcXVpdmFsZW50IG9mIFJlYWN0J3NcbiAqIGA8QUlBdXRvY29tcGxldGUgLz5gLiBPd25zIHRoZSBjb250ZW50RWRpdGFibGUgZWRpdG9yLCBpbmxpbmUgcGlsbHMsIG1vZGVcbiAqIGNvbnRyb2xsZXIsIHN1Ym1pdCBidXR0b24gc2xvdCwgYW5kIGFuIGVtYmVkZGVkXG4gKiB7QGxpbmsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyfSB0aGF0IGRyaXZlcyB0aGUgZHJvcGRvd24uXG4gKlxuICogQHB1YmxpY1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYWktYXV0b2NvbXBsZXRlXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQUlBdXRvY29tcGxldGVEcm9wZG93bkNvbXBvbmVudCxcbiAgICBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUsXG4gICAgUGlsbExpc3RDb21wb25lbnQsXG4gICAgU3VibWl0QnV0dG9uQ29tcG9uZW50LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuY3NzXCJdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFJQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLy8gPT09IElucHV0cyAobWlycm9ycyBSZWFjdCdzIEFJQXV0b2NvbXBsZXRlUHJvcHMpID09PVxuXG4gIEBJbnB1dCgpIGFwaUNvbmZpZz86IEFQSUNvbmZpZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXIgY29udGV4dC4gSW5jbHVkZSB3aGF0ZXZlciB5b3Uga25vdyBhYm91dCB0aGUgdXNlciDigJQgYVxuICAgKiBwcm9maWxlLCBwcmVmZXJlbmNlcywgd29ya3NwYWNlLCBhbnl0aGluZyDigJQgdG8gcGVyc29uYWxpemUgc3VnZ2VzdGVkXG4gICAqIHBhcmFtZXRlcnMgYW5kIG9wdGlvbnMgdG8gdGhlbS4gQmluZCBhIHN0YWJsZSByZWZlcmVuY2U7IHRoZSBzYW1lIHN3YXBcbiAgICogcnVsZSB0aGF0IGFwcGxpZXMgdG8gYGFwaUNvbmZpZ2AgYXBwbGllcyBoZXJlLlxuICAgKi9cbiAgQElucHV0KCkgYWRkaXRpb25hbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgQElucHV0KCkgb3B0aW9uT3ZlcnJpZGVzPzogT3B0aW9uT3ZlcnJpZGVzO1xuICBASW5wdXQoKSBtYXNrQ29tcGxldGVkVGV4dCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5zPzogbnVtYmVyO1xuICAvKiogV2hlcmUgdW5maWxsZWQgcGlsbHMgcmVuZGVyLiBEZWZhdWx0OiBcImRyb3Bkb3duXCIuICovXG4gIEBJbnB1dCgpIHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImhpZGRlblwiID0gXCJkcm9wZG93blwiO1xuICAvKiogQ29sb3IgbW9kZS4gXCJhdXRvXCIgZm9sbG93cyBwcmVmZXJzLWNvbG9yLXNjaGVtZS4gRGVmYXVsdDogXCJhdXRvXCIuICovXG4gIEBJbnB1dCgpIG1vZGU6IEFwcGVhcmFuY2VNb2RlID0gXCJhdXRvXCI7XG4gIEBJbnB1dCgpIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiID0gXCJiZWxvd1wiO1xuICBASW5wdXQoKSBhbmltYXRpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgZHJvcGRvd25UcmlnZ2VyPzogXCJhdXRvXCIgfCBcIm1hbnVhbFwiIHwgXCJoaWRkZW5cIjtcbiAgQElucHV0KCkgY2xvc2VEcm9wZG93bk9uQmx1cj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dOb25UYXBwYWJsZU9wdGlvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGRyb3Bkb3duJ3MgcGlsbCBiYXIgZW5kcyBpbiBhIHNtYWxsIFwic2tpcFwiIGJ1dHRvblxuICAgKiB0aGF0IGRpc21pc3NlcyB0aGUgYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHByZXNzaW5nIOKGkiBhdCB0aGUgZW5kIG9mXG4gICAqIHRoZSBpbnB1dC4gU2V0IHRvIGZhbHNlIHRvIGhpZGUgaXQuIFdoZW4gcGlsbHMgcmVuZGVyIGVsc2V3aGVyZVxuICAgKiAoYHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCJgIC8gYFwiaGlkZGVuXCJgKSB0aGUgYmFyIHJlbmRlcnMgYXMgYSBza2lwLW9ubHlcbiAgICogcm93IGhvbGRpbmcganVzdCB0aGUgYnV0dG9uLiBIaWRkZW4gd2hpbGUgdGhlIGlucHV0IGlzIGVtcHR5IOKAlCBpdCBhcHBlYXJzXG4gICAqIGFsb25nc2lkZSB0aGUgZm9vdGVyJ3MgXCLihpIgdG8gc2tpcFwiIGhpbnQgb25jZSB0aGUgdXNlciBoYXMgdHlwZWQuXG4gICAqL1xuICBASW5wdXQoKSBzaG93U2tpcEJ1dHRvbiA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpY29uX3N2Z2AgZHJhd3MgaXRzIGljb24gYmVmb3JlIGl0cyB0ZXh0IGluIHRoZSBkcm9wZG93bi4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBvcHRpb24gcm93cyBhcyB0ZXh0IG9ubHkuICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25JY29ucyA9IHRydWU7XG4gIC8qKlxuICAgKiBIb3cgdGhlIHByb2R1Y3Qgc3RyaXAgbGF5cyBpdHMgY2FyZHMgb3V0LiBgXCJyb3dcImAgKHRoZSBkZWZhdWx0KSBpcyBhXG4gICAqIGhvcml6b250YWxseSBzY3JvbGxpbmcgc2hlbGYgb2YgY2FyZHMuIGBcImxpc3RcImAgc3RhY2tzIHRoZSBzYW1lIGNhcmRzIGFzXG4gICAqIGZ1bGwtd2lkdGggcm93cyDigJQgdGh1bWJuYWlsIG9uIHRoZSBsZWZ0LCB0aXRsZSwgdmVuZG9yIGFuZCBwcmljZSBvbiB0aGVcbiAgICogcmlnaHQg4oCUIGZvciByZXN1bHRzIHRoYXQgcmVhZCBhcyBhIGxpc3QgKGNvdXJzZXMsIGxpc3RpbmdzLCBkb2N1bWVudHMpXG4gICAqIHJhdGhlciB0aGFuIHByb2R1Y3RzIG9uIGEgc2hlbGY7IHRoZSBjb2x1bW4gc2Nyb2xscyB2ZXJ0aWNhbGx5IGluc2lkZVxuICAgKiBgLS1haWEtcHJvZHVjdC1saXN0LW1heC1oZWlnaHRgLlxuICAgKi9cbiAgQElucHV0KCkgcHJvZHVjdHNMYXlvdXQ6IFByb2R1Y3RzTGF5b3V0ID0gXCJyb3dcIjtcbiAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGEgY29tcGxldGVkIGNoaXAgaW4gdGhlIGlucHV0IGRyYXdzIHRoZSBpY29uIG9mIHRoZSBvcHRpb24gdGhhdCBhbnN3ZXJlZCBpdC4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBjaGlwcyBhcyB0ZXh0IG9ubHkuICovXG4gIEBJbnB1dCgpIHNob3dDaGlwSWNvbnMgPSB0cnVlO1xuICAvKiogRm9jdXMgdGhlIGVkaXRvciBvbiBtb3VudC4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSB0ZXh0IHZhbHVlLiAqL1xuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZztcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBjb21wbGV0ZWQgcGFyYW1zLiAqL1xuICBASW5wdXQoKSBjb21wbGV0ZWRQYXJhbXM/OiBDb21wbGV0ZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gcmVuZGVycyBhIGhvcml6b250YWwgcm93IG9mIHByb2R1Y3RcbiAgICogY2FyZHMgYmVsb3cgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuZXZlciBpdCBoYXMgcHJvZHVjdHMgdG8gc2hvdzogYnkgZGVmYXVsdFxuICAgKiB0aGUgaXRlbXMgdGhlIGAvc3VnZ2VzdGAgcmVzcG9uc2UgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIG9yIHRoZVxuICAgKiByZXN1bHRzIG9mIGEgY3VzdG9tIGBwcm9kdWN0c2Agc2VhcmNoLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG5vIHN0cmlwXG4gICAqIGFuZCBydW4gbm8gY3VzdG9tIHNlYXJjaC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dQcm9kdWN0cyA9IHRydWU7XG4gIC8qKlxuICAgKiBDdXN0b20gc291cmNlIGZvciB0aGUgcHJvZHVjdCBzdHJpcC4gT21pdCBpdCBhbmQgdGhlIHN0cmlwIHNob3dzIHRoZVxuICAgKiBpdGVtcyB0aGUgYC9zdWdnZXN0YCByZXNwb25zZSBpdHNlbGYgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIHdpdGhcbiAgICogbm8gZXh0cmEgcmVxdWVzdC4gU2V0IGl0IGFuZCB0aGUgZHJvcGRvd24gaXMgZmVkIGJ5IHlvdXIgb3duIHNlYXJjaFxuICAgKiBlbmRwb2ludCBvbiB0aGUgU0RLJ3MgZXhpc3RpbmcgZmV0Y2ggY2FkZW5jZSBpbnN0ZWFkOyB0aGUgc2VydmVyJ3MgaXRlbXNcbiAgICogYXJlIHRoZW4gbm90IHJlbmRlcmVkLlxuICAgKlxuICAgKiBCaW5kIGEgc3RhYmxlIHJlZmVyZW5jZSAoYSBjb21wb25lbnQgZmllbGQsIG5vdCBhbiBpbmxpbmUgb2JqZWN0IGxpdGVyYWwpOlxuICAgKiBhIG5ldyBvYmplY3Qgb24gZWFjaCBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3MgcmVhZHMgYXMgYSBzd2FwcGVkIGludGVncmF0aW9uXG4gICAqIGFuZCBjbGVhcnMgdGhlIGN1cnJlbnQgY2FyZHMg4oCUIHRoZSBzYW1lIHJ1bGUgdGhhdCBhbHJlYWR5IGFwcGxpZXMgdG9cbiAgICogYGFwaUNvbmZpZ2AgYW5kIGBvcHRpb25PdmVycmlkZXNgLlxuICAgKi9cbiAgQElucHV0KCkgcHJvZHVjdHM/OiBQcm9kdWN0c0NvbmZpZztcbiAgLyoqXG4gICAqIEN1c3RvbSBzdWJtaXQgYnV0dG9uLiBQYXNzIGEgYDxuZy10ZW1wbGF0ZT5gIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgYXJyb3dcbiAgICogYnV0dG9uLiBQYXNzIGBudWxsYCB0byByZW5kZXIgbm8gYnV0dG9uLiBEZWZhdWx0IChgdW5kZWZpbmVkYCkgcmVuZGVyc1xuICAgKiB0aGUgYnVpbHQtaW4gYXJyb3cuXG4gICAqL1xuICBASW5wdXQoKSBzdWJtaXRCdXR0b24/OiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw7XG5cbiAgLy8gPT09IE91dHB1dHMgPT09XG5cbiAgLyoqIENhbGxlZCBvbiBFbnRlciBvciBzdWJtaXQtYnV0dG9uIGNsaWNrLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc3VibWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBdXRvY29tcGxldGVSZXN1bHQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyBhZnRlciBldmVyeSBzdWNjZXNzZnVsIHN1Z2dlc3Rpb24gcm91bmQtdHJpcCB3aXRoIHRoZSBzdHJ1Y3R1cmVkXG4gICAqIHF1ZXJ5IGFzIHRoZSBTREsgbm93IHVuZGVyc3RhbmRzIGl0IOKAlCB0aGUgc2FtZSBgQXV0b2NvbXBsZXRlUmVzdWx0YCBzaGFwZVxuICAgKiBgc3VibWl0dGVkYCBjYXJyaWVzLCBzbyB5b3UgY2FuIG1pcnJvciB0aGUgcXVlcnkgYXMgaXQgaXMgYnVpbHQgKGEgbGl2ZVxuICAgKiBwcmV2aWV3LCBhIGRyYWZ0LCBhbmFseXRpY3MpIHdpdGhvdXQgd2FpdGluZyBmb3Igc3VibWl0LiBGaXJlcyBvbmNlIHBlclxuICAgKiBhcHBsaWVkIHJlc3BvbnNlLCBpbmNsdWRpbmcgdGhlIGluaXRpYWwgcmVxdWVzdCBvbiBpbml0IChhbiBlbXB0eVxuICAgKiByZXN1bHQpOyBuZXZlciBmb3IgYSBmYWlsZWQsIGFib3J0ZWQgb3Igc3VwZXJzZWRlZCByZXF1ZXN0LlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlc3VsdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXV0b2NvbXBsZXRlUmVzdWx0PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZXJyb3JlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXJyb3I+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29tcGxldGVkUGFyYW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wbGV0ZWRQYXJhbVN0YXRlW10+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBhY3RpdmF0ZXMgYSBwcm9kdWN0IGNhcmQuIFRoZSBTREsgZG9lcyBub3RcbiAgICogbmF2aWdhdGUg4oCUIHlvdSBkZWNpZGUgd2hhdCBhIHNlbGVjdGlvbiBtZWFucy4gTW9kaWZpZXIgLyBtaWRkbGUgY2xpY2tzIGFyZVxuICAgKiBsZWZ0IHRvIHRoZSBicm93c2VyIChjbWQtY2xpY2sgc3RpbGwgb3BlbnMgYSB0YWIpIGFuZCBkb24ndCBlbWl0LlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHByb2R1Y3RTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFByb2R1Y3Q+KCk7XG5cbiAgLy8gPT09IFZpZXcgcmVmcyA9PT1cblxuICBAVmlld0NoaWxkKFwiY29udGFpbmVyXCIsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFwiZWRpdG9yXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBlZGl0b3JSZWY/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChcInBpbGxDb250YWluZXJcIikgcGlsbENvbnRhaW5lclJlZj86IEVsZW1lbnRSZWY8SFRNTFNwYW5FbGVtZW50PjtcblxuICAvLyA9PT0gUHVibGljIHN0YXRlIGZvciB0aGUgdGVtcGxhdGUgPT09XG5cbiAgY29udHJvbGxlciE6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcjtcbiAgLyoqXG4gICAqIENvbmNyZXRlIGxpZ2h0L2RhcmsgdmFsdWUgYm91bmQgdG8gYFthdHRyLmRhdGEtbW9kZV1gLiBTZWVkZWQgaW4gbmdPbkluaXRcbiAgICogc28gdGhlIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGR1cmluZyBTU1IgKHdoZXJlIE1vZGVDb250cm9sbGVyLCBnYXRlZCBiZWhpbmRcbiAgICogaXNQbGF0Zm9ybUJyb3dzZXIgaW4gbmdBZnRlclZpZXdJbml0LCBuZXZlciBydW5zKS4gT24gdGhlIGJyb3dzZXIgdGhlXG4gICAqIE1vZGVDb250cm9sbGVyJ3MgcmVzb2x2ZSBjYWxsYmFjayBrZWVwcyB0aGlzIGluIHN5bmMg4oCUIHNvIGl0cyBydW50aW1lXG4gICAqIHByZWZlcnMtY29sb3Itc2NoZW1lIHVwZGF0ZXMgYW5kIHRoaXMgYmluZGluZyBhbHdheXMgYWdyZWUgKG5vIGNsb2JiZXIpLlxuICAgKi9cbiAgcmVzb2x2ZWRNb2RlOiBcImxpZ2h0XCIgfCBcImRhcmtcIiA9IFwiZGFya1wiO1xuXG4gIC8vID09PSBJbnRlcm5hbCA9PT1cblxuICBwcml2YXRlIG1vZGVDb250cm9sbGVyPzogTW9kZUNvbnRyb2xsZXI7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBvbkNoYW5nZUZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgb25Ub3VjaGVkRm46ICgpID0+IHZvaWQgPSBub29wO1xuICAvLyBIb2xkcyBhIHZhbHVlIHdyaXR0ZW4gYnkgUmVhY3RpdmUgRm9ybXMgYmVmb3JlIG5nT25Jbml0IHJhbi4gUmVhY3RpdmVcbiAgLy8gRm9ybXMgY2FuIGNhbGwgd3JpdGVWYWx1ZSgpIGR1cmluZyBkeW5hbWljIGZvcm0gY29uc3RydWN0aW9uIChlLmcuIHdoZW5cbiAgLy8gYSBGb3JtQ29udHJvbCBhbHJlYWR5IGhvbGRzIGEgdmFsdWUgYXQgdGhlIG1vbWVudCB0aGUgZGlyZWN0aXZlIGlzXG4gIC8vIGNyZWF0ZWQpLiBXZSBzdGFzaCB0aGUgdmFsdWUgaGVyZSBhbmQgZmx1c2ggaXQgaW4gbmdPbkluaXQgKmFmdGVyKlxuICAvLyB0aGUgY29udHJvbGxlciBleGlzdHMg4oCUIG90aGVyd2lzZSB0aGUgZWRpdG9yIHJlbmRlcnMgZW1wdHkgZXZlbiB0aG91Z2hcbiAgLy8gdGhlIGZvcm0gaGFkIGEgdmFsdWUuIGB1bmRlZmluZWRgIG1lYW5zIFwibm8gcGVuZGluZyB3cml0ZVwiLlxuICBwcml2YXRlIHBlbmRpbmdXcml0ZVZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gwqcxNi45OiBwcmVmZXIgYGluamVjdCgpYCBvdmVyIGNvbnN0cnVjdG9yLXBhcmFtZXRlciBESSBmb3IgY29tcG9uZW50cy5cbiAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZWVkIGJlZm9yZSB0aGUgYnJvd3NlciBndWFyZCBzbyBTU1IgcmVuZGVycyBhIGNvbmNyZXRlIGRhdGEtbW9kZS5cbiAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVJbml0aWFsTW9kZSh0aGlzLm1vZGUpO1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb250cm9sbGVyID0gbmV3IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcih7XG4gICAgICBhcGlDb25maWc6IHRoaXMuYXBpQ29uZmlnLFxuICAgICAgYWRkaXRpb25hbENvbnRleHQ6IHRoaXMuYWRkaXRpb25hbENvbnRleHQsXG4gICAgICBvcHRpb25PdmVycmlkZXM6IHRoaXMub3B0aW9uT3ZlcnJpZGVzLFxuICAgICAgbWFza0NvbXBsZXRlZFRleHQ6IHRoaXMubWFza0NvbXBsZXRlZFRleHQsXG4gICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXG4gICAgICBkcm9wZG93blRyaWdnZXI6IHRoaXMuZHJvcGRvd25UcmlnZ2VyLFxuICAgICAgb3B0aW9uc1Bvc2l0aW9uOiB0aGlzLm9wdGlvbnNQb3NpdGlvbixcbiAgICAgIGNsb3NlRHJvcGRvd25PbkJsdXI6IHRoaXMuY2xvc2VEcm9wZG93bk9uQmx1cixcbiAgICAgIHNob3dOb25UYXBwYWJsZU9wdGlvbnM6IHRoaXMuc2hvd05vblRhcHBhYmxlT3B0aW9ucyxcbiAgICAgIHNob3dQcm9kdWN0czogdGhpcy5zaG93UHJvZHVjdHMsXG4gICAgICBzb3VyY2U6IFwiZnVsbC1zZGtcIixcbiAgICAgIHByb2R1Y3RzOiB0aGlzLnByb2R1Y3RzLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBjb21wbGV0ZWRQYXJhbXM6IHRoaXMuY29tcGxldGVkUGFyYW1zLFxuICAgICAgb25TdWJtaXQ6IChyZXN1bHQpID0+IHRoaXMuaGFuZGxlU3VibWl0KHJlc3VsdCksXG4gICAgICBvblJlc3VsdDogKHJlc3VsdCkgPT4gdGhpcy5yZXN1bHRDaGFuZ2UuZW1pdChyZXN1bHQpLFxuICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB0aGlzLmVycm9yZWQuZW1pdChlcnJvciksXG4gICAgICBvbkNoYW5nZTogKHRleHQpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRleHQpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4odGV4dCk7XG4gICAgICB9LFxuICAgICAgb25QYXJhbXNDaGFuZ2U6IChwYXJhbXMpID0+IHRoaXMuY29tcGxldGVkUGFyYW1zQ2hhbmdlLmVtaXQocGFyYW1zKSxcbiAgICAgIG9uRm9jdXM6ICgpID0+IHRoaXMuZm9jdXNlZC5lbWl0KCksXG4gICAgICBvblByb2R1Y3RTZWxlY3Q6IChwcm9kdWN0KSA9PiB0aGlzLnByb2R1Y3RTZWxlY3QuZW1pdChwcm9kdWN0KSxcbiAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICB0aGlzLmJsdXJyZWQuZW1pdCgpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICB9LFxuICAgICAgc2V0Q3Vyc29yOiAob2Zmc2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgc2V0Q3Vyc29yT2Zmc2V0KGVkaXRvciwgb2Zmc2V0KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUodGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSk7XG4gICAgICB0aGlzLnBlbmRpbmdXcml0ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICAvLyBNb2RlQ29udHJvbGxlciB3cml0ZXMgYGRhdGEtbW9kZWAgdG8gdGhlIGVsZW1lbnQgaXQncyBnaXZlbi4gVGhlIENTU1xuICAgIC8vIHNlbGVjdG9ycyBhcmUgc2NvcGVkIHRvIGAubWFnaWN4LWFpYVtkYXRhLW1vZGU9XCIuLi5cIl1gIOKAlCB3aGljaCBsaXZlcyBvblxuICAgIC8vIHRoZSBpbm5lciBgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEgbWFnaWN4LWFpYS1jb250YWluZXJcIiAjY29udGFpbmVyPmAsXG4gICAgLy8gTk9UIHRoZSBob3N0IGA8YWktYXV0b2NvbXBsZXRlPmAgZWxlbWVudC4gVGhlIHJlc29sdmUgY2FsbGJhY2sgbWlycm9yc1xuICAgIC8vIHRoZSB2YWx1ZSBpbnRvIGByZXNvbHZlZE1vZGVgIHNvIHRoZSBgW2F0dHIuZGF0YS1tb2RlXWAgYmluZGluZyBzdGF5cyBpblxuICAgIC8vIGxvY2tzdGVwIHdpdGggTW9kZUNvbnRyb2xsZXIg4oCUIHRoZSBiaW5kaW5nIGhhbmRsZXMgU1NSLCBNb2RlQ29udHJvbGxlclxuICAgIC8vIGhhbmRsZXMgcnVudGltZSBwcmVmZXJzLWNvbG9yLXNjaGVtZSBzd2l0Y2hlcywgYW5kIGJlY2F1c2UgdGhleSBhbHdheXNcbiAgICAvLyBhZ3JlZSBuZWl0aGVyIGNsb2JiZXJzIHRoZSBvdGhlci5cbiAgICB0aGlzLm1vZGVDb250cm9sbGVyID0gbmV3IE1vZGVDb250cm9sbGVyKFxuICAgICAgdGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMubW9kZSxcbiAgICAgIChyZXNvbHZlZCkgPT4ge1xuICAgICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFBpbGwtd3JhcCBkZXRlY3Rpb24g4oCUIHdoZW4gdGhlIHBpbGwgbGlzdCB3cmFwcyBiZWxvdyB0aGUgZWRpdG9yJ3MgbGFzdFxuICAgIC8vIGxpbmUsIGRyb3AgaXRzIDhweCBsZWZ0IG1hcmdpbiB2aWEgYSBkYXRhIGF0dHJpYnV0ZSB0aGUgQ1NTIGtleXMgb2ZmLlxuICAgIC8vIE1pcnJvcnMgdGhlIFJlYWN0IGNvbXBvbmVudCdzIHVzZUxheW91dEVmZmVjdC5cbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMubWVhc3VyZVBpbGxXcmFwKCkpO1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGVkaXRvcikgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGVkaXRvcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVhc3VyZVBpbGxXcmFwKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250cm9sbGVyKSByZXR1cm47XG4gICAgLy8gYFNpbXBsZUNoYW5nZXNgIGlzIGB7IFtrZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9YCwgc28gcGVyXG4gICAgLy8gYG5vUHJvcGVydHlBY2Nlc3NGcm9tSW5kZXhTaWduYXR1cmVgIGVhY2gga2V5IGxvb2t1cCB1c2VzIGJyYWNrZXRcbiAgICAvLyBub3RhdGlvbiDigJQgdGhpcyBrZWVwcyB0aGUgc3RyaWN0bmVzcyBjb250cmFjdCB0aGF0IHRoZSByZXN0IG9mIHRoZVxuICAgIC8vIHdvcmtzcGFjZSBlbmZvcmNlcy5cbiAgICAvLyBDb250cm9sbGVkLW1vZGUgcHJvcGFnYXRpb25cbiAgICBpZiAoY2hhbmdlc1tcInZhbHVlXCJdICYmIHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcImNvbXBsZXRlZFBhcmFtc1wiXSAmJiB0aGlzLmNvbXBsZXRlZFBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0Q29tcGxldGVkUGFyYW1zKHRoaXMuY29tcGxldGVkUGFyYW1zKTtcbiAgICB9XG4gICAgLy8gUmVhY3RpdmUgb3B0aW9uc1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXNbXCJhcGlDb25maWdcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJhZGRpdGlvbmFsQ29udGV4dFwiXSB8fFxuICAgICAgY2hhbmdlc1tcIm9wdGlvbk92ZXJyaWRlc1wiXSB8fFxuICAgICAgY2hhbmdlc1tcImRyb3Bkb3duVHJpZ2dlclwiXSB8fFxuICAgICAgY2hhbmdlc1tcIm9wdGlvbnNQb3NpdGlvblwiXSB8fFxuICAgICAgY2hhbmdlc1tcImNsb3NlRHJvcGRvd25PbkJsdXJcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJzaG93Tm9uVGFwcGFibGVPcHRpb25zXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wic2hvd1Byb2R1Y3RzXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wicHJvZHVjdHNcIl1cbiAgICApIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci51cGRhdGUoe1xuICAgICAgICBhcGlDb25maWc6IHRoaXMuYXBpQ29uZmlnLFxuICAgICAgICBhZGRpdGlvbmFsQ29udGV4dDogdGhpcy5hZGRpdGlvbmFsQ29udGV4dCxcbiAgICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB0aGlzLm9wdGlvbk92ZXJyaWRlcyxcbiAgICAgICAgZHJvcGRvd25UcmlnZ2VyOiB0aGlzLmRyb3Bkb3duVHJpZ2dlcixcbiAgICAgICAgb3B0aW9uc1Bvc2l0aW9uOiB0aGlzLm9wdGlvbnNQb3NpdGlvbixcbiAgICAgICAgY2xvc2VEcm9wZG93bk9uQmx1cjogdGhpcy5jbG9zZURyb3Bkb3duT25CbHVyLFxuICAgICAgICBzaG93Tm9uVGFwcGFibGVPcHRpb25zOiB0aGlzLnNob3dOb25UYXBwYWJsZU9wdGlvbnMsXG4gICAgICAgIHNob3dQcm9kdWN0czogdGhpcy5zaG93UHJvZHVjdHMsXG4gICAgICAgIC8vIFNhbWUgcmVmZXJlbmNlIG9uIGFuIHVucmVsYXRlZCBjaGFuZ2UgaXMgYSBuby1vcCBpbiB0aGUgY29yZTsgb25seSBhXG4gICAgICAgIC8vIGdlbnVpbmVseSBzd2FwcGVkIChvciByZW1vdmVkKSBpbnRlZ3JhdGlvbiBjbGVhcnMgdGhlIHN0cmlwLlxuICAgICAgICBwcm9kdWN0czogdGhpcy5wcm9kdWN0cyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcIm1vZGVcIl0pIHtcbiAgICAgIC8vIEtlZXAgdGhlIGJpbmRpbmcgY29ycmVjdCBldmVuIHdoZW4gTW9kZUNvbnRyb2xsZXIgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIC8vIChTU1IgLyBwcmUtbmdBZnRlclZpZXdJbml0KS4gT24gdGhlIGJyb3dzZXIsIHNldE1vZGUgdHJpZ2dlcnMgdGhlXG4gICAgICAvLyByZXNvbHZlIGNhbGxiYWNrIHdoaWNoIHNldHMgdGhlIHNhbWUgdmFsdWUuXG4gICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVJbml0aWFsTW9kZSh0aGlzLm1vZGUpO1xuICAgICAgdGhpcy5tb2RlQ29udHJvbGxlcj8uc2V0TW9kZSh0aGlzLm1vZGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLm1vZGVDb250cm9sbGVyPy5kZXN0cm95KCk7XG4gICAgdGhpcy5jb250cm9sbGVyPy5kZXN0cm95KCk7XG4gIH1cblxuICAvLyA9PT0gSW1wZXJhdGl2ZSBBUEkgKGV4cG9zZWQgb24gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSB2aWEgQFZpZXdDaGlsZCkgPT09XG5cbiAgLyoqIFByb2dyYW1tYXRpY2FsbHkgZm9jdXMgdGhlIGVkaXRvci4gKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKiBQcm9ncmFtbWF0aWNhbGx5IGJsdXIgdGhlIGVkaXRvci4gKi9cbiAgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIHN0YXRlLCByb3RhdGUgc2Vzc2lvbiwgYW5kIHJlLWZldGNoLiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2tpcCB0aGUgYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHRoZSBkcm9wZG93bidzIHNraXAgYnV0dG9uIC8g4oaSLlxuICAgKiBMZXRzIGEgY29uc3VtZXIgd2hvIGhpZGVzIHRoZSBidWlsdC1pbiBidXR0b24gKGBzaG93U2tpcEJ1dHRvbj1mYWxzZWApXG4gICAqIGRyaXZlIHNraXBwaW5nIGZyb20gdGhlaXIgb3duIFVJLlxuICAgKi9cbiAgc2tpcEFjdGl2ZVBpbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyPy5za2lwQWN0aXZlUGlsbCgpO1xuICB9XG5cbiAgLyoqIFN3aXRjaCBjb2xvciBtb2RlIGF0IHJ1bnRpbWUuICovXG4gIHNldE1vZGUobW9kZTogQXBwZWFyYW5jZU1vZGUpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZUluaXRpYWxNb2RlKG1vZGUpO1xuICAgIHRoaXMubW9kZUNvbnRyb2xsZXI/LnNldE1vZGUobW9kZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyA9PT0gVGVtcGxhdGUgaGVscGVycyA9PT1cblxuICAvKipcbiAgICogJ2RlZmF1bHQnIOKGkiByZW5kZXIgdGhlIGJ1aWx0LWluIGFycm93IGJ1dHRvbi5cbiAgICogJ2N1c3RvbScgIOKGkiBwcm9qZWN0IHRoZSBjb25zdW1lci1zdXBwbGllZCBUZW1wbGF0ZVJlZi5cbiAgICogJ2hpZGRlbicgIOKGkiBubyBidXR0b24uXG4gICAqL1xuICBnZXQgc3VibWl0QnV0dG9uU3RhdGUoKTogXCJkZWZhdWx0XCIgfCBcImN1c3RvbVwiIHwgXCJoaWRkZW5cIiB7XG4gICAgaWYgKHRoaXMuc3VibWl0QnV0dG9uID09PSBudWxsKSByZXR1cm4gXCJoaWRkZW5cIjtcbiAgICBpZiAodGhpcy5zdWJtaXRCdXR0b24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiZGVmYXVsdFwiO1xuICAgIHJldHVybiBcImN1c3RvbVwiO1xuICB9XG5cbiAgLyoqIE5hcnJvd2VkIGFjY2Vzc29yIGZvciAqbmdUZW1wbGF0ZU91dGxldCDigJQgbmV2ZXIgdW5kZWZpbmVkLiAqL1xuICBnZXQgY3VzdG9tU3VibWl0VGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zdWJtaXRCdXR0b24gPz8gbnVsbDtcbiAgfVxuXG4gIGdldCBzaG93SW5saW5lUGlsbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGlsbFBsYWNlbWVudCA9PT0gXCJpbmxpbmVcIjtcbiAgfVxuXG4gIGdldCBzaG93RHJvcGRvd25QaWxscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5waWxsUGxhY2VtZW50ID09PSBcImRyb3Bkb3duXCI7XG4gIH1cblxuICAvKipcbiAgICogYHRydWVgIHdoZW4gdGhlcmUncyBzb21ldGhpbmcgdG8gc3VibWl0IOKAlCBkcml2ZW4gYnkgY3VycmVudCBzZWdtZW50c1xuICAgKiBhbmQgY29tcGxldGVkIHBhcmFtcy4gUmVhZCBvZmYgdGhlIGxpdmUgZWRpdG9yIHZpYSB0aGUgY29udHJvbGxlciBzdGF0ZS5cbiAgICovXG4gIGNhblN1Ym1pdChzdGF0ZTogeyBzZWdtZW50czogeyBsZW5ndGg6IG51bWJlciB9OyBjb21wbGV0ZWRQYXJhbXM6IHsgbGVuZ3RoOiBudW1iZXIgfSB9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLnNlZ21lbnRzLmxlbmd0aCA+IDAgfHwgc3RhdGUuY29tcGxldGVkUGFyYW1zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBvbldyYXBwZXJDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIENsaWNraW5nIGEgcGlsbCBzaG91bGQgYWN0aXZhdGUgaXQgd2l0aG91dCBzdGVhbGluZyBmb2N1cyBlbHNld2hlcmUuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAodGFyZ2V0Py5jbG9zZXN0KFwiW2RhdGEtYWlhLXBpbGxdXCIpKSByZXR1cm47XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgb25TdWJtaXRCdXR0b25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaGFuZGxlU3VibWl0RnJvbVVzZXJBY3Rpb24oKTtcbiAgfVxuXG4gIG9uU3VibWl0U2xvdENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5oYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpO1xuICB9XG5cbiAgb25TZWxlY3RQaWxsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0QWN0aXZlUGlsbChpbmRleCk7XG4gIH1cblxuICAvLyA9PT0gQ29udHJvbFZhbHVlQWNjZXNzb3IgPT09XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB2YWx1ZSA/PyBcIlwiO1xuICAgIGlmICghdGhpcy5jb250cm9sbGVyKSB7XG4gICAgICAvLyBSZWFjdGl2ZSBGb3JtcyBjYW4gY2FsbCB3cml0ZVZhbHVlKCkgYmVmb3JlIG5nT25Jbml0IGNyZWF0ZXMgdGhlXG4gICAgICAvLyBjb250cm9sbGVyIChkeW5hbWljIGZvcm0gY29uc3RydWN0aW9uLCBvciBhIEZvcm1Db250cm9sIHRoYXQgYWxyZWFkeVxuICAgICAgLy8gaGFkIGEgdmFsdWUgYXQgZGlyZWN0aXZlLWNyZWF0aW9uIHRpbWUpLiBCdWZmZXIgdGhlIHZhbHVlOyBuZ09uSW5pdFxuICAgICAgLy8gZmx1c2hlcyBpdCBhcyBzb29uIGFzIHRoZSBjb250cm9sbGVyIGV4aXN0cy5cbiAgICAgIHRoaXMucGVuZGluZ1dyaXRlVmFsdWUgPSBuZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUobmV4dCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZEZuID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKF9kaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFRoZSBjb250ZW50RWRpdGFibGUgaG9zdCBkb2Vzbid0IGhhdmUgYSBuYXRpdmUgZGlzYWJsZWQgYXR0cmlidXRlLiBGb3JcbiAgICAvLyB2MC4xIHdlIGFjY2VwdCB0aGUgY2FsbCBzbyBBbmd1bGFyJ3MgZm9ybXMgbGF5ZXIgZG9lc24ndCB0aHJvdywgYnV0XG4gICAgLy8gdGhlIGVkaXRvciBzdGF5cyBpbnRlcmFjdGl2ZS4gQSBmdXR1cmUgZW5oYW5jZW1lbnQgY2FuIHRvZ2dsZVxuICAgIC8vIGNvbnRlbnRFZGl0YWJsZSArIEFSSUEgZGlzYWJsZWQgaGVyZS5cbiAgfVxuXG4gIC8vID09PSBTdWJtaXQgZmxvdyA9PT1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSBjb250cm9sbGVyJ3Mgb25TdWJtaXQgY2FsbGJhY2sgKHdoaWNoIGZpcmVzIGZyb20gdGhlXG4gICAqIGtleWJvYXJkIGNvbnRyb2xsZXIgb24gRW50ZXIpLiBSZWFkcyB0aGUgbGl2ZSBlZGl0b3IgdGV4dCDigJQgc2FtZSB0cmlja1xuICAgKiB0aGUgUmVhY3QgY29tcG9uZW50IHVzZXMg4oCUIHNvIHRoZSBlbWl0dGVkIHF1ZXJ5IHJlZmxlY3RzIHdoYXRldmVyJ3MgaW5cbiAgICogdGhlIERPTSByaWdodCBub3csIG5vdCBhIHBvc3NpYmx5LXN0YWxlIHN0YXRlIHNuYXBzaG90LlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVTdWJtaXQoX3Jlc3VsdDogQXV0b2NvbXBsZXRlUmVzdWx0KTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gZXh0cmFjdFBsYWluVGV4dChlZGl0b3IpO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5jb21wbGV0ZWRQYXJhbXMgPz8gc3RhdGUuY29tcGxldGVkUGFyYW1zO1xuICAgIHRoaXMuc3VibWl0dGVkLmVtaXQoXG4gICAgICBidWlsZFN1Ym1pdFJlc3VsdCh0ZXh0LCBwYXJhbXMsIHN0YXRlLnNraXBwZWRQYXJhbXMsIHtcbiAgICAgICAgaWRlbnRpZmllZFBhcmFtczogc3RhdGUuaWRlbnRpZmllZFBhcmFtcyxcbiAgICAgICAgaXNSZWFkeTogc3RhdGUuaXNSZWFkeSxcbiAgICAgICAgY3VzdG9tRmllbGRzOiBzdGF0ZS5jdXN0b21GaWVsZHMsXG4gICAgICB9KSxcbiAgICApO1xuICAgIHRoaXMuY29udHJvbGxlci5yZXNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY29udHJvbGxlci5nZXRTdGF0ZSgpO1xuICAgIGlmICghdGhpcy5jYW5TdWJtaXQoc3RhdGUpKSByZXR1cm47XG4gICAgLy8gU3ludGhlc2l6ZSB0aGUgcmVzdWx0IGZvciB0aGUgc3VibWl0LWJ1dHRvbiBjbGljayBwYXRoOyBzYW1lIHNoYXBlXG4gICAgLy8gdGhlIGNvbnRyb2xsZXIgd291bGQgZGVsaXZlciBmcm9tIGEga2V5Ym9hcmQgRW50ZXIsIHNvIGhhbmRsZVN1Ym1pdFxuICAgIC8vIGNhbiB0YWtlIGVpdGhlciBlbnRyeSBwb2ludC5cbiAgICB0aGlzLmhhbmRsZVN1Ym1pdCh7XG4gICAgICBxdWVyeTogc3RhdGUudGV4dC50cmltKCksXG4gICAgICByYXdfcXVlcnk6IFwiXCIsXG4gICAgICBjb21wbGV0ZWRfcGFyYW1zOiBbXSxcbiAgICAgIGlkZW50aWZpZWRfcGFyYW1zOiBbXSxcbiAgICAgIGlzX3JlYWR5OiBzdGF0ZS5pc1JlYWR5LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtZWFzdXJlUGlsbFdyYXAoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5waWxsQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyIHx8ICFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCBpbm5lciA9IGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCFpbm5lcikgcmV0dXJuO1xuICAgIC8vIFdyYXAgZGV0ZWN0aW9uOiB0aGUgcGlsbCByb3cncyB0b3AgdnMgdGhlIGVkaXRvcidzIGJvdHRvbS4gV2hlbiB0aGVcbiAgICAvLyBwaWxscyBzaXQgb24gKG9yIGFib3ZlKSB0aGUgZWRpdG9yJ3MgbGFzdCBsaW5lIHRoZXkncmUgTk9UIHdyYXBwZWQg4oCUXG4gICAgLy8ga2VlcCB0aGUgOHB4IG1hcmdpbiBzbyB0aGV5IGRvbid0IGJ1dHQgYWdhaW5zdCB0eXBlZCB0ZXh0IG9yIHRoZVxuICAgIC8vIHBsYWNlaG9sZGVyLiBUaGlzIGhhbmRsZXMgdGhlIGVtcHR5LWVkaXRvciArIHBsYWNlaG9sZGVyIGNhc2VcbiAgICAvLyBuYXR1cmFsbHk6IHRoZSBwbGFjZWhvbGRlciBzdGlsbCBvY2N1cGllcyB0aGUgZWRpdG9yJ3MgbGluZSBib3guXG4gICAgY29uc3QgY1JlY3QgPSBpbm5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlUmVjdCA9IGVkaXRvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3cmFwcGVkID0gY1JlY3QudG9wID49IGVSZWN0LmJvdHRvbSAtIDI7XG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICBpZiAod3JhcHBlZCkgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtYWlhLXBpbGwtd3JhcHBlZFwiLCBcIlwiKTtcbiAgICAgIGVsc2UgY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtYWlhLXBpbGwtd3JhcHBlZFwiKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAvLyBEZWZhdWx0IG5vLW9wIGZvciBDVkEgY2FsbGJhY2tzLlxufVxuXG4vKipcbiAqIFJlc29sdmUgYSBjb25jcmV0ZSBsaWdodC9kYXJrIHZhbHVlIGZyb20gdGhlIGNvbmZpZ3VyZWQgbW9kZS4gVXNlZCB0byBzZWVkXG4gKiB0aGUgYGRhdGEtbW9kZWAgYXR0cmlidXRlIHN5bmNocm9ub3VzbHkgKGluY2x1ZGluZyBkdXJpbmcgU1NSLCB3aGVyZVxuICogTW9kZUNvbnRyb2xsZXIgbmV2ZXIgcnVucykuIE9uIHRoZSBzZXJ2ZXIgYHdpbmRvd2AgaXMgdW5kZWZpbmVkIOKGkiBkZWZhdWx0c1xuICogdG8gXCJkYXJrXCIgKG1hdGNoZXMgdGhlIHZhbmlsbGEvUmVhY3QgYmVoYXZpb3IpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlSW5pdGlhbE1vZGUobW9kZTogQXBwZWFyYW5jZU1vZGUpOiBcImxpZ2h0XCIgfCBcImRhcmtcIiB7XG4gIGlmIChtb2RlICE9PSBcImF1dG9cIikgcmV0dXJuIG1vZGU7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJkYXJrXCI7XG4gIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIikubWF0Y2hlcyA/IFwiZGFya1wiIDogXCJsaWdodFwiO1xufVxuIiwiPGRpdlxuICAjY29udGFpbmVyXG4gIGNsYXNzPVwibWFnaWN4LWFpYSBtYWdpY3gtYWlhLWNvbnRhaW5lclwiXG4gIFthdHRyLmRhdGEtcGlsbC1wbGFjZW1lbnRdPVwicGlsbFBsYWNlbWVudFwiXG4gIFthdHRyLmRhdGEtb3B0aW9ucy1wb3NpdGlvbl09XCJvcHRpb25zUG9zaXRpb25cIlxuICBbYXR0ci5kYXRhLWFuaW1hdGlvbnNdPVwiYW5pbWF0aW9ucyA/ICdvbicgOiAnb2ZmJ1wiXG4gIFthdHRyLmRhdGEtbW9kZV09XCJyZXNvbHZlZE1vZGVcIlxuPlxuICA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duXG4gICAgKm5nSWY9XCJjb250cm9sbGVyXCJcbiAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyXCJcbiAgICBbc2hvd1BpbGxzXT1cInNob3dEcm9wZG93blBpbGxzXCJcbiAgICBbc2hvd1NraXBCdXR0b25dPVwic2hvd1NraXBCdXR0b25cIlxuICAgIFtzaG93T3B0aW9uSWNvbnNdPVwic2hvd09wdGlvbkljb25zXCJcbiAgICBbcHJvZHVjdHNMYXlvdXRdPVwicHJvZHVjdHNMYXlvdXRcIlxuICA+PC9haS1hdXRvY29tcGxldGUtZHJvcGRvd24+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWFnaWN4LWFpYS1pbnB1dC13cmFwcGVyXCJcbiAgICBkYXRhLWFpYS1pbnB1dC13cmFwcGVyPVwiXCJcbiAgICAoY2xpY2spPVwib25XcmFwcGVyQ2xpY2soJGV2ZW50KVwiXG4gICAgKGtleXVwKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwibWFnaWN4LWFpYS1lZGl0b3ItYXJlYVwiIGRhdGEtYWlhLWVkaXRvcj1cIlwiPlxuICAgICAgPGRpdlxuICAgICAgICAjZWRpdG9yXG4gICAgICAgICpuZ0lmPVwiY29udHJvbGxlclwiXG4gICAgICAgIFthaWFFZGl0b3JIb3N0XT1cImNvbnRyb2xsZXJcIlxuICAgICAgICBbYXV0b0ZvY3VzXT1cImF1dG9Gb2N1c1wiXG4gICAgICAgIFtzaG93Q2hpcEljb25zXT1cInNob3dDaGlwSWNvbnNcIlxuICAgICAgICBjbGFzcz1cIm1hZ2ljeC1haWEtaW5wdXRcIlxuICAgICAgICBkYXRhLWFpYS1pbnB1dD1cIlwiXG4gICAgICA+PC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sbGVyICYmIHNob3dJbmxpbmVQaWxsc1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICNwaWxsQ29udGFpbmVyXG4gICAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLXBpbGwtbGlzdC1jb250YWluZXJcIlxuICAgICAgICAgIGRhdGEtYWlhLXBpbGwtbGlzdC1jb250YWluZXI9XCJcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAoY29udHJvbGxlci5pc0xvYWRpbmckIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICgoY29udHJvbGxlci5zdWdnZXN0aW9uUGlsbHMkIHwgYXN5bmMpPy5sZW5ndGggPz8gMCkgPiAwXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhaWEtcGlsbC1saXN0XG4gICAgICAgICAgICBbcGlsbHNdPVwiKGNvbnRyb2xsZXIuc3VnZ2VzdGlvblBpbGxzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgICAgICAgICBbYWN0aXZlUGlsbEluZGV4XT1cIjBcIlxuICAgICAgICAgICAgW2FjdGl2ZVNlbGVjdGVkXT1cIihjb250cm9sbGVyLmlzQWN0aXZlUGlsbFNlbGVjdGVkJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCIoY29udHJvbGxlci5pc0xvYWRpbmckIHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgICAgICAgIChzZWxlY3RQaWxsKT1cIm9uU2VsZWN0UGlsbCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9haWEtcGlsbC1saXN0PlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN1Ym1pdEJ1dHRvblN0YXRlXCI+XG4gICAgICA8YWlhLXN1Ym1pdC1idXR0b25cbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkZWZhdWx0J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgY29udHJvbGxlciAmJlxuICAgICAgICAgICAgY2FuU3VibWl0KHtcbiAgICAgICAgICAgICAgc2VnbWVudHM6IChjb250cm9sbGVyLnNlZ21lbnRzJCB8IGFzeW5jKSA/PyBbXSxcbiAgICAgICAgICAgICAgY29tcGxldGVkUGFyYW1zOiAoY29udHJvbGxlci5jb21wbGV0ZWRQYXJhbXMkIHwgYXN5bmMpID8/IFtdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgICAgKHN1Ym1pdCk9XCJvblN1Ym1pdEJ1dHRvbkNsaWNrKCRldmVudClcIlxuICAgICAgPjwvYWlhLXN1Ym1pdC1idXR0b24+XG5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInY3VzdG9tJ1wiXG4gICAgICAgIGRhdGEtYWlhLXN1Ym1pdD1cIlwiXG4gICAgICAgIGRhdGEtYWlhLXN1Ym1pdC1zbG90PVwiXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLXN1Ym1pdC1zbG90XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0U2xvdENsaWNrKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU3VibWl0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
509
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUlOLE1BQU0sRUFDTixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTZCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUlMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUtkLGVBQWUsR0FDaEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBRTFGOzs7Ozs7O0dBT0c7QUF3QkgsTUFBTSxPQUFPLHVCQUF1QjtJQXZCcEM7UUFxQ1csc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLHdEQUF3RDtRQUMvQyxrQkFBYSxHQUFxQyxVQUFVLENBQUM7UUFDdEUsd0VBQXdFO1FBQy9ELFNBQUksR0FBbUIsTUFBTSxDQUFDO1FBQzlCLG9CQUFlLEdBQXNCLE9BQU8sQ0FBQztRQUM3QyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBSTNCOzs7Ozs7O1dBT0c7UUFDTSxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUMvQixpS0FBaUs7UUFDeEosb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDaEMsbU5BQW1OO1FBQzFNLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUNqQyxzS0FBc0s7UUFDN0oscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDOzs7Ozs7O1dBT0c7UUFDTSxtQkFBYyxHQUFtQixLQUFLLENBQUM7UUFDaEQsbUpBQW1KO1FBQzFJLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzlCLDhMQUE4TDtRQUNyTCxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUMvQixnREFBZ0Q7UUFDdkMsY0FBUyxHQUFHLElBQUksQ0FBQztRQUsxQjs7Ozs7O1dBTUc7UUFDTSxpQkFBWSxHQUFHLElBQUksQ0FBQztRQXFCN0Isa0JBQWtCO1FBRWxCLDhDQUE4QztRQUMzQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDdEU7Ozs7Ozs7V0FPRztRQUNnQixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBQ3RELFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN6QywwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUNsRSxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNuQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN0RDs7OztXQUlHO1FBQ2dCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQVcvRDs7Ozs7O1dBTUc7UUFDSCxpQkFBWSxHQUFxQixNQUFNLENBQUM7UUFNaEMsZUFBVSxHQUE0QixJQUFJLENBQUM7UUFDM0MsZ0JBQVcsR0FBZSxJQUFJLENBQUM7UUFTdkMseUVBQXlFO1FBQ3hELGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0F5VGxEO0lBdlRDLFFBQVE7UUFDTixxRUFBcUU7UUFDckUsSUFBSSxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPO1FBRWhELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQztZQUM3QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO1lBQzdDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7WUFDbkQsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDL0MsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDcEQsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDNUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLENBQUM7WUFDRCxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNsQyxlQUFlLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM5RCxNQUFNLEVBQUUsR0FBRyxFQUFFO2dCQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixDQUFDO1lBQ0QsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFPO2dCQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNsQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssU0FBUyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTztRQUNoRCx1RUFBdUU7UUFDdkUsMEVBQTBFO1FBQzFFLHdFQUF3RTtRQUN4RSx5RUFBeUU7UUFDekUsMkVBQTJFO1FBQzNFLHlFQUF5RTtRQUN6RSx5RUFBeUU7UUFDekUsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUMvQixJQUFJLENBQUMsSUFBSSxFQUNULENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FDRixDQUFDO1FBRUYseUVBQXlFO1FBQ3pFLHdFQUF3RTtRQUN4RSxpREFBaUQ7UUFDakQsSUFBSSxPQUFPLGNBQWMsS0FBSyxXQUFXLEVBQUU7WUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO2dCQUM3QyxJQUFJLE1BQU07b0JBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDN0IsK0RBQStEO1FBQy9ELG9FQUFvRTtRQUNwRSxxRUFBcUU7UUFDckUsc0JBQXNCO1FBQ3RCLDhCQUE4QjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsbUJBQW1CO1FBQ25CLElBQ0UsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNwQixPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDNUIsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1lBQzFCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztZQUMxQixPQUFPLENBQUMsaUJBQWlCLENBQUM7WUFDMUIsT0FBTyxDQUFDLHFCQUFxQixDQUFDO1lBQzlCLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztZQUNqQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFDbkI7WUFDQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDckIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUN6QyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ3JDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtnQkFDckMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUNyQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUM3QyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCO2dCQUNuRCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQy9CLHVFQUF1RTtnQkFDdkUsK0RBQStEO2dCQUMvRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDeEIsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQixzRUFBc0U7WUFDdEUsb0VBQW9FO1lBQ3BFLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCw0RUFBNEU7SUFFNUUseUNBQXlDO0lBQ3pDLEtBQUs7UUFDSCxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLElBQUk7UUFDRixJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQscURBQXFEO0lBQ3JELEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYztRQUNaLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxPQUFPLENBQUMsSUFBb0I7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCwyQkFBMkI7SUFFM0I7Ozs7T0FJRztJQUNILElBQUksaUJBQWlCO1FBQ25CLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN0RCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssVUFBVSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsS0FBNEU7UUFDcEYsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBaUI7UUFDOUIsdUVBQXVFO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUE0QixDQUFDO1FBQ2xELElBQUksTUFBTSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztZQUFFLE9BQU87UUFDL0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWlCO1FBQ25DLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBaUI7UUFDakMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsK0JBQStCO0lBRS9CLFVBQVUsQ0FBQyxLQUFvQjtRQUM3QixNQUFNLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLG1FQUFtRTtZQUNuRSx1RUFBdUU7WUFDdkUsc0VBQXNFO1lBQ3RFLCtDQUErQztZQUMvQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzlCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUEyQjtRQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBYztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBa0I7UUFDakMseUVBQXlFO1FBQ3pFLHNFQUFzRTtRQUN0RSxnRUFBZ0U7UUFDaEUsd0NBQXdDO0lBQzFDLENBQUM7SUFFRCxzQkFBc0I7SUFFdEI7Ozs7O09BS0c7SUFDSyxZQUFZLENBQUMsT0FBMkI7UUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUM7UUFDN0MsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNqQixpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDbkQsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUN4QyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1NBQ2pDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTztRQUNuQyxxRUFBcUU7UUFDckUsc0VBQXNFO1FBQ3RFLCtCQUErQjtRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN4QixTQUFTLEVBQUUsRUFBRTtZQUNiLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztRQUM3QyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDbEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLGlCQUF1QyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLG1FQUFtRTtRQUNuRSxnRUFBZ0U7UUFDaEUsbUVBQW1FO1FBQ25FLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUksT0FBTztnQkFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDOztnQkFDNUQsU0FBUyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7cUhBM2NVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLHVsQ0FUdkI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsbUVBQW1FO1lBQ25FLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUM7WUFDdEQsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLGtXQ3hFSCx1dEZBcUZBLHlyVUQ5QkksWUFBWSwyaEJBQ1osK0JBQStCLDhOQUMvQixpQ0FBaUMsdUlBQ2pDLGlCQUFpQixpS0FDakIscUJBQXFCOzRGQWVaLHVCQUF1QjtrQkF2Qm5DLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osK0JBQStCO3dCQUMvQixpQ0FBaUM7d0JBQ2pDLGlCQUFpQjt3QkFDakIscUJBQXFCO3FCQUN0QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUcxQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixtRUFBbUU7NEJBQ25FLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDOzRCQUN0RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFPUSxTQUFTO3NCQUFqQixLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFTRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFTRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQVFHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBYUcsUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxZQUFZO3NCQUFwQixLQUFLO2dCQUthLFNBQVM7c0JBQTNCLE1BQU07Z0JBU1ksWUFBWTtzQkFBOUIsTUFBTTtnQkFDWSxPQUFPO3NCQUF6QixNQUFNO2dCQUNZLFdBQVc7c0JBQTdCLE1BQU07Z0JBQ1kscUJBQXFCO3NCQUF2QyxNQUFNO2dCQUNZLE9BQU87c0JBQXpCLE1BQU07Z0JBQ1ksT0FBTztzQkFBekIsTUFBTTtnQkFNWSxhQUFhO3NCQUEvQixNQUFNO2dCQUltQyxZQUFZO3NCQUFyRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0EsU0FBUztzQkFBaEQsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNWLGdCQUFnQjtzQkFBM0MsU0FBUzt1QkFBQyxlQUFlOztBQTBWNUIsU0FBUyxJQUFJO0lBQ1gsbUNBQW1DO0FBQ3JDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsa0JBQWtCLENBQUMsSUFBb0I7SUFDOUMsSUFBSSxJQUFJLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ2pDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ2pELE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICB0eXBlIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICB0eXBlIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgTmdab25lLFxuICB0eXBlIE9uQ2hhbmdlcyxcbiAgdHlwZSBPbkRlc3Ryb3ksXG4gIHR5cGUgT25Jbml0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICB0eXBlIFNpbXBsZUNoYW5nZXMsXG4gIHR5cGUgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0eXBlIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBUElDb25maWcsXG4gIHR5cGUgQXBwZWFyYW5jZU1vZGUsXG4gIHR5cGUgQXV0b2NvbXBsZXRlUmVzdWx0LFxuICBidWlsZFN1Ym1pdFJlc3VsdCxcbiAgdHlwZSBDb21wbGV0ZWRQYXJhbVN0YXRlLFxuICBleHRyYWN0UGxhaW5UZXh0LFxuICBNb2RlQ29udHJvbGxlcixcbiAgdHlwZSBPcHRpb25PdmVycmlkZXMsXG4gIHR5cGUgUHJvZHVjdCxcbiAgdHlwZSBQcm9kdWN0c0NvbmZpZyxcbiAgdHlwZSBQcm9kdWN0c0xheW91dCxcbiAgc2V0Q3Vyc29yT2Zmc2V0LFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiLi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnRcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB9IGZyb20gXCIuLi9jb250cm9sbGVyL2FpLWF1dG9jb21wbGV0ZS5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUgfSBmcm9tIFwiLi4vaW50ZXJuYWwvZWRpdG9yLWhvc3QvZWRpdG9yLWhvc3QuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBQaWxsTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9waWxsLWxpc3QvcGlsbC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3VibWl0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3N1Ym1pdC1idXR0b24vc3VibWl0LWJ1dHRvbi5jb21wb25lbnRcIjtcblxuLyoqXG4gKiBUaWVyIDEgY29tcG9uZW50IOKAlCBgPGFpLWF1dG9jb21wbGV0ZT5gLiBUaGUgQW5ndWxhciBlcXVpdmFsZW50IG9mIFJlYWN0J3NcbiAqIGA8QUlBdXRvY29tcGxldGUgLz5gLiBPd25zIHRoZSBjb250ZW50RWRpdGFibGUgZWRpdG9yLCBpbmxpbmUgcGlsbHMsIG1vZGVcbiAqIGNvbnRyb2xsZXIsIHN1Ym1pdCBidXR0b24gc2xvdCwgYW5kIGFuIGVtYmVkZGVkXG4gKiB7QGxpbmsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyfSB0aGF0IGRyaXZlcyB0aGUgZHJvcGRvd24uXG4gKlxuICogQHB1YmxpY1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYWktYXV0b2NvbXBsZXRlXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQUlBdXRvY29tcGxldGVEcm9wZG93bkNvbXBvbmVudCxcbiAgICBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUsXG4gICAgUGlsbExpc3RDb21wb25lbnQsXG4gICAgU3VibWl0QnV0dG9uQ29tcG9uZW50LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuY3NzXCJdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFJQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLy8gPT09IElucHV0cyAobWlycm9ycyBSZWFjdCdzIEFJQXV0b2NvbXBsZXRlUHJvcHMpID09PVxuXG4gIEBJbnB1dCgpIGFwaUNvbmZpZz86IEFQSUNvbmZpZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXIgY29udGV4dC4gSW5jbHVkZSB3aGF0ZXZlciB5b3Uga25vdyBhYm91dCB0aGUgdXNlciDigJQgYVxuICAgKiBwcm9maWxlLCBwcmVmZXJlbmNlcywgd29ya3NwYWNlLCBhbnl0aGluZyDigJQgdG8gcGVyc29uYWxpemUgc3VnZ2VzdGVkXG4gICAqIHBhcmFtZXRlcnMgYW5kIG9wdGlvbnMgdG8gdGhlbS4gQmluZCBhIHN0YWJsZSByZWZlcmVuY2U7IHRoZSBzYW1lIHN3YXBcbiAgICogcnVsZSB0aGF0IGFwcGxpZXMgdG8gYGFwaUNvbmZpZ2AgYXBwbGllcyBoZXJlLlxuICAgKi9cbiAgQElucHV0KCkgYWRkaXRpb25hbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgQElucHV0KCkgb3B0aW9uT3ZlcnJpZGVzPzogT3B0aW9uT3ZlcnJpZGVzO1xuICBASW5wdXQoKSBtYXNrQ29tcGxldGVkVGV4dCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5zPzogbnVtYmVyO1xuICAvKiogV2hlcmUgdW5maWxsZWQgcGlsbHMgcmVuZGVyLiBEZWZhdWx0OiBcImRyb3Bkb3duXCIuICovXG4gIEBJbnB1dCgpIHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImhpZGRlblwiID0gXCJkcm9wZG93blwiO1xuICAvKiogQ29sb3IgbW9kZS4gXCJhdXRvXCIgZm9sbG93cyBwcmVmZXJzLWNvbG9yLXNjaGVtZS4gRGVmYXVsdDogXCJhdXRvXCIuICovXG4gIEBJbnB1dCgpIG1vZGU6IEFwcGVhcmFuY2VNb2RlID0gXCJhdXRvXCI7XG4gIEBJbnB1dCgpIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiID0gXCJiZWxvd1wiO1xuICBASW5wdXQoKSBhbmltYXRpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgZHJvcGRvd25UcmlnZ2VyPzogXCJhdXRvXCIgfCBcIm1hbnVhbFwiIHwgXCJoaWRkZW5cIjtcbiAgQElucHV0KCkgY2xvc2VEcm9wZG93bk9uQmx1cj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dOb25UYXBwYWJsZU9wdGlvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGRyb3Bkb3duJ3MgcGlsbCBiYXIgZW5kcyBpbiBhIHNtYWxsIFwic2tpcFwiIGJ1dHRvblxuICAgKiB0aGF0IGRpc21pc3NlcyB0aGUgYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHByZXNzaW5nIOKGkiBhdCB0aGUgZW5kIG9mXG4gICAqIHRoZSBpbnB1dC4gU2V0IHRvIGZhbHNlIHRvIGhpZGUgaXQuIFdoZW4gcGlsbHMgcmVuZGVyIGVsc2V3aGVyZVxuICAgKiAoYHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCJgIC8gYFwiaGlkZGVuXCJgKSB0aGUgYmFyIHJlbmRlcnMgYXMgYSBza2lwLW9ubHlcbiAgICogcm93IGhvbGRpbmcganVzdCB0aGUgYnV0dG9uLiBIaWRkZW4gd2hpbGUgdGhlIGlucHV0IGlzIGVtcHR5IOKAlCBpdCBhcHBlYXJzXG4gICAqIGFsb25nc2lkZSB0aGUgZm9vdGVyJ3MgXCLihpIgdG8gc2tpcFwiIGhpbnQgb25jZSB0aGUgdXNlciBoYXMgdHlwZWQuXG4gICAqL1xuICBASW5wdXQoKSBzaG93U2tpcEJ1dHRvbiA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpY29uX3N2Z2AgZHJhd3MgaXRzIGljb24gYmVmb3JlIGl0cyB0ZXh0IGluIHRoZSBkcm9wZG93bi4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBvcHRpb24gcm93cyBhcyB0ZXh0IG9ubHkuICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25JY29ucyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpbWFnZV91cmxgIGRyYXdzIGl0IGFzIGEgc3F1YXJlIHRodW1ibmFpbCBiZWZvcmUgaXRzIHRleHQgaW4gdGhlIGRyb3Bkb3duIChpbiBwbGFjZSBvZiBpdHMgYGljb25fc3ZnYCkuIFNldCB0byBmYWxzZSB0byByZW5kZXIgb3B0aW9uIHJvd3Mgd2l0aG91dCBwaWN0dXJlcy4gKi9cbiAgQElucHV0KCkgc2hvd09wdGlvbkltYWdlcyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpdGVtX2NvdW50YCBzaG93cyBpdCBhcyBhIG11dGVkIGxhYmVsIGF0IHRoZSByb3cncyB0cmFpbGluZyBlZGdlIChcIjEyIGl0ZW1zXCIpLiBTZXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgY291bnRzLiAqL1xuICBASW5wdXQoKSBzaG93T3B0aW9uQ291bnRzID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEhvdyB0aGUgcHJvZHVjdCBzdHJpcCBsYXlzIGl0cyBjYXJkcyBvdXQuIGBcInJvd1wiYCAodGhlIGRlZmF1bHQpIGlzIGFcbiAgICogaG9yaXpvbnRhbGx5IHNjcm9sbGluZyBzaGVsZiBvZiBjYXJkcy4gYFwibGlzdFwiYCBzdGFja3MgdGhlIHNhbWUgY2FyZHMgYXNcbiAgICogZnVsbC13aWR0aCByb3dzIOKAlCB0aHVtYm5haWwgb24gdGhlIGxlZnQsIHRpdGxlLCB2ZW5kb3IgYW5kIHByaWNlIG9uIHRoZVxuICAgKiByaWdodCDigJQgZm9yIHJlc3VsdHMgdGhhdCByZWFkIGFzIGEgbGlzdCAoY291cnNlcywgbGlzdGluZ3MsIGRvY3VtZW50cylcbiAgICogcmF0aGVyIHRoYW4gcHJvZHVjdHMgb24gYSBzaGVsZjsgdGhlIGNvbHVtbiBzY3JvbGxzIHZlcnRpY2FsbHkgaW5zaWRlXG4gICAqIGAtLWFpYS1wcm9kdWN0LWxpc3QtbWF4LWhlaWdodGAuXG4gICAqL1xuICBASW5wdXQoKSBwcm9kdWN0c0xheW91dDogUHJvZHVjdHNMYXlvdXQgPSBcInJvd1wiO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgYSBjb21wbGV0ZWQgY2hpcCBpbiB0aGUgaW5wdXQgZHJhd3MgdGhlIGljb24gb2YgdGhlIG9wdGlvbiB0aGF0IGFuc3dlcmVkIGl0LiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIGNoaXBzIGFzIHRleHQgb25seS4gKi9cbiAgQElucHV0KCkgc2hvd0NoaXBJY29ucyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhIGNvbXBsZXRlZCBjaGlwIGluIHRoZSBpbnB1dCBkcmF3cyB0aGUgcGljdHVyZSAoYGltYWdlX3VybGApIG9mIHRoZSBvcHRpb24gdGhhdCBhbnN3ZXJlZCBpdCwgaW4gcGxhY2Ugb2YgaXRzIGljb24uIFNldCB0byBmYWxzZSB0byByZW5kZXIgY2hpcHMgd2l0aG91dCBwaWN0dXJlcy4gKi9cbiAgQElucHV0KCkgc2hvd0NoaXBJbWFnZXMgPSB0cnVlO1xuICAvKiogRm9jdXMgdGhlIGVkaXRvciBvbiBtb3VudC4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSB0ZXh0IHZhbHVlLiAqL1xuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZztcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBjb21wbGV0ZWQgcGFyYW1zLiAqL1xuICBASW5wdXQoKSBjb21wbGV0ZWRQYXJhbXM/OiBDb21wbGV0ZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gcmVuZGVycyBhIGhvcml6b250YWwgcm93IG9mIHByb2R1Y3RcbiAgICogY2FyZHMgYmVsb3cgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuZXZlciBpdCBoYXMgcHJvZHVjdHMgdG8gc2hvdzogYnkgZGVmYXVsdFxuICAgKiB0aGUgaXRlbXMgdGhlIGAvc3VnZ2VzdGAgcmVzcG9uc2UgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIG9yIHRoZVxuICAgKiByZXN1bHRzIG9mIGEgY3VzdG9tIGBwcm9kdWN0c2Agc2VhcmNoLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG5vIHN0cmlwXG4gICAqIGFuZCBydW4gbm8gY3VzdG9tIHNlYXJjaC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dQcm9kdWN0cyA9IHRydWU7XG4gIC8qKlxuICAgKiBDdXN0b20gc291cmNlIGZvciB0aGUgcHJvZHVjdCBzdHJpcC4gT21pdCBpdCBhbmQgdGhlIHN0cmlwIHNob3dzIHRoZVxuICAgKiBpdGVtcyB0aGUgYC9zdWdnZXN0YCByZXNwb25zZSBpdHNlbGYgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIHdpdGhcbiAgICogbm8gZXh0cmEgcmVxdWVzdC4gU2V0IGl0IGFuZCB0aGUgZHJvcGRvd24gaXMgZmVkIGJ5IHlvdXIgb3duIHNlYXJjaFxuICAgKiBlbmRwb2ludCBvbiB0aGUgU0RLJ3MgZXhpc3RpbmcgZmV0Y2ggY2FkZW5jZSBpbnN0ZWFkOyB0aGUgc2VydmVyJ3MgaXRlbXNcbiAgICogYXJlIHRoZW4gbm90IHJlbmRlcmVkLlxuICAgKlxuICAgKiBCaW5kIGEgc3RhYmxlIHJlZmVyZW5jZSAoYSBjb21wb25lbnQgZmllbGQsIG5vdCBhbiBpbmxpbmUgb2JqZWN0IGxpdGVyYWwpOlxuICAgKiBhIG5ldyBvYmplY3Qgb24gZWFjaCBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3MgcmVhZHMgYXMgYSBzd2FwcGVkIGludGVncmF0aW9uXG4gICAqIGFuZCBjbGVhcnMgdGhlIGN1cnJlbnQgY2FyZHMg4oCUIHRoZSBzYW1lIHJ1bGUgdGhhdCBhbHJlYWR5IGFwcGxpZXMgdG9cbiAgICogYGFwaUNvbmZpZ2AgYW5kIGBvcHRpb25PdmVycmlkZXNgLlxuICAgKi9cbiAgQElucHV0KCkgcHJvZHVjdHM/OiBQcm9kdWN0c0NvbmZpZztcbiAgLyoqXG4gICAqIEN1c3RvbSBzdWJtaXQgYnV0dG9uLiBQYXNzIGEgYDxuZy10ZW1wbGF0ZT5gIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgYXJyb3dcbiAgICogYnV0dG9uLiBQYXNzIGBudWxsYCB0byByZW5kZXIgbm8gYnV0dG9uLiBEZWZhdWx0IChgdW5kZWZpbmVkYCkgcmVuZGVyc1xuICAgKiB0aGUgYnVpbHQtaW4gYXJyb3cuXG4gICAqL1xuICBASW5wdXQoKSBzdWJtaXRCdXR0b24/OiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw7XG5cbiAgLy8gPT09IE91dHB1dHMgPT09XG5cbiAgLyoqIENhbGxlZCBvbiBFbnRlciBvciBzdWJtaXQtYnV0dG9uIGNsaWNrLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc3VibWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBdXRvY29tcGxldGVSZXN1bHQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyBhZnRlciBldmVyeSBzdWNjZXNzZnVsIHN1Z2dlc3Rpb24gcm91bmQtdHJpcCB3aXRoIHRoZSBzdHJ1Y3R1cmVkXG4gICAqIHF1ZXJ5IGFzIHRoZSBTREsgbm93IHVuZGVyc3RhbmRzIGl0IOKAlCB0aGUgc2FtZSBgQXV0b2NvbXBsZXRlUmVzdWx0YCBzaGFwZVxuICAgKiBgc3VibWl0dGVkYCBjYXJyaWVzLCBzbyB5b3UgY2FuIG1pcnJvciB0aGUgcXVlcnkgYXMgaXQgaXMgYnVpbHQgKGEgbGl2ZVxuICAgKiBwcmV2aWV3LCBhIGRyYWZ0LCBhbmFseXRpY3MpIHdpdGhvdXQgd2FpdGluZyBmb3Igc3VibWl0LiBGaXJlcyBvbmNlIHBlclxuICAgKiBhcHBsaWVkIHJlc3BvbnNlLCBpbmNsdWRpbmcgdGhlIGluaXRpYWwgcmVxdWVzdCBvbiBpbml0IChhbiBlbXB0eVxuICAgKiByZXN1bHQpOyBuZXZlciBmb3IgYSBmYWlsZWQsIGFib3J0ZWQgb3Igc3VwZXJzZWRlZCByZXF1ZXN0LlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlc3VsdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXV0b2NvbXBsZXRlUmVzdWx0PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZXJyb3JlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXJyb3I+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29tcGxldGVkUGFyYW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wbGV0ZWRQYXJhbVN0YXRlW10+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBhY3RpdmF0ZXMgYSBwcm9kdWN0IGNhcmQuIFRoZSBTREsgZG9lcyBub3RcbiAgICogbmF2aWdhdGUg4oCUIHlvdSBkZWNpZGUgd2hhdCBhIHNlbGVjdGlvbiBtZWFucy4gTW9kaWZpZXIgLyBtaWRkbGUgY2xpY2tzIGFyZVxuICAgKiBsZWZ0IHRvIHRoZSBicm93c2VyIChjbWQtY2xpY2sgc3RpbGwgb3BlbnMgYSB0YWIpIGFuZCBkb24ndCBlbWl0LlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHByb2R1Y3RTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFByb2R1Y3Q+KCk7XG5cbiAgLy8gPT09IFZpZXcgcmVmcyA9PT1cblxuICBAVmlld0NoaWxkKFwiY29udGFpbmVyXCIsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFwiZWRpdG9yXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBlZGl0b3JSZWY/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChcInBpbGxDb250YWluZXJcIikgcGlsbENvbnRhaW5lclJlZj86IEVsZW1lbnRSZWY8SFRNTFNwYW5FbGVtZW50PjtcblxuICAvLyA9PT0gUHVibGljIHN0YXRlIGZvciB0aGUgdGVtcGxhdGUgPT09XG5cbiAgY29udHJvbGxlciE6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcjtcbiAgLyoqXG4gICAqIENvbmNyZXRlIGxpZ2h0L2RhcmsgdmFsdWUgYm91bmQgdG8gYFthdHRyLmRhdGEtbW9kZV1gLiBTZWVkZWQgaW4gbmdPbkluaXRcbiAgICogc28gdGhlIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGR1cmluZyBTU1IgKHdoZXJlIE1vZGVDb250cm9sbGVyLCBnYXRlZCBiZWhpbmRcbiAgICogaXNQbGF0Zm9ybUJyb3dzZXIgaW4gbmdBZnRlclZpZXdJbml0LCBuZXZlciBydW5zKS4gT24gdGhlIGJyb3dzZXIgdGhlXG4gICAqIE1vZGVDb250cm9sbGVyJ3MgcmVzb2x2ZSBjYWxsYmFjayBrZWVwcyB0aGlzIGluIHN5bmMg4oCUIHNvIGl0cyBydW50aW1lXG4gICAqIHByZWZlcnMtY29sb3Itc2NoZW1lIHVwZGF0ZXMgYW5kIHRoaXMgYmluZGluZyBhbHdheXMgYWdyZWUgKG5vIGNsb2JiZXIpLlxuICAgKi9cbiAgcmVzb2x2ZWRNb2RlOiBcImxpZ2h0XCIgfCBcImRhcmtcIiA9IFwiZGFya1wiO1xuXG4gIC8vID09PSBJbnRlcm5hbCA9PT1cblxuICBwcml2YXRlIG1vZGVDb250cm9sbGVyPzogTW9kZUNvbnRyb2xsZXI7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBvbkNoYW5nZUZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgb25Ub3VjaGVkRm46ICgpID0+IHZvaWQgPSBub29wO1xuICAvLyBIb2xkcyBhIHZhbHVlIHdyaXR0ZW4gYnkgUmVhY3RpdmUgRm9ybXMgYmVmb3JlIG5nT25Jbml0IHJhbi4gUmVhY3RpdmVcbiAgLy8gRm9ybXMgY2FuIGNhbGwgd3JpdGVWYWx1ZSgpIGR1cmluZyBkeW5hbWljIGZvcm0gY29uc3RydWN0aW9uIChlLmcuIHdoZW5cbiAgLy8gYSBGb3JtQ29udHJvbCBhbHJlYWR5IGhvbGRzIGEgdmFsdWUgYXQgdGhlIG1vbWVudCB0aGUgZGlyZWN0aXZlIGlzXG4gIC8vIGNyZWF0ZWQpLiBXZSBzdGFzaCB0aGUgdmFsdWUgaGVyZSBhbmQgZmx1c2ggaXQgaW4gbmdPbkluaXQgKmFmdGVyKlxuICAvLyB0aGUgY29udHJvbGxlciBleGlzdHMg4oCUIG90aGVyd2lzZSB0aGUgZWRpdG9yIHJlbmRlcnMgZW1wdHkgZXZlbiB0aG91Z2hcbiAgLy8gdGhlIGZvcm0gaGFkIGEgdmFsdWUuIGB1bmRlZmluZWRgIG1lYW5zIFwibm8gcGVuZGluZyB3cml0ZVwiLlxuICBwcml2YXRlIHBlbmRpbmdXcml0ZVZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gwqcxNi45OiBwcmVmZXIgYGluamVjdCgpYCBvdmVyIGNvbnN0cnVjdG9yLXBhcmFtZXRlciBESSBmb3IgY29tcG9uZW50cy5cbiAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZWVkIGJlZm9yZSB0aGUgYnJvd3NlciBndWFyZCBzbyBTU1IgcmVuZGVycyBhIGNvbmNyZXRlIGRhdGEtbW9kZS5cbiAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVJbml0aWFsTW9kZSh0aGlzLm1vZGUpO1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb250cm9sbGVyID0gbmV3IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcih7XG4gICAgICBhcGlDb25maWc6IHRoaXMuYXBpQ29uZmlnLFxuICAgICAgYWRkaXRpb25hbENvbnRleHQ6IHRoaXMuYWRkaXRpb25hbENvbnRleHQsXG4gICAgICBvcHRpb25PdmVycmlkZXM6IHRoaXMub3B0aW9uT3ZlcnJpZGVzLFxuICAgICAgbWFza0NvbXBsZXRlZFRleHQ6IHRoaXMubWFza0NvbXBsZXRlZFRleHQsXG4gICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXG4gICAgICBkcm9wZG93blRyaWdnZXI6IHRoaXMuZHJvcGRvd25UcmlnZ2VyLFxuICAgICAgb3B0aW9uc1Bvc2l0aW9uOiB0aGlzLm9wdGlvbnNQb3NpdGlvbixcbiAgICAgIGNsb3NlRHJvcGRvd25PbkJsdXI6IHRoaXMuY2xvc2VEcm9wZG93bk9uQmx1cixcbiAgICAgIHNob3dOb25UYXBwYWJsZU9wdGlvbnM6IHRoaXMuc2hvd05vblRhcHBhYmxlT3B0aW9ucyxcbiAgICAgIHNob3dQcm9kdWN0czogdGhpcy5zaG93UHJvZHVjdHMsXG4gICAgICBzb3VyY2U6IFwiZnVsbC1zZGtcIixcbiAgICAgIHByb2R1Y3RzOiB0aGlzLnByb2R1Y3RzLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBjb21wbGV0ZWRQYXJhbXM6IHRoaXMuY29tcGxldGVkUGFyYW1zLFxuICAgICAgb25TdWJtaXQ6IChyZXN1bHQpID0+IHRoaXMuaGFuZGxlU3VibWl0KHJlc3VsdCksXG4gICAgICBvblJlc3VsdDogKHJlc3VsdCkgPT4gdGhpcy5yZXN1bHRDaGFuZ2UuZW1pdChyZXN1bHQpLFxuICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB0aGlzLmVycm9yZWQuZW1pdChlcnJvciksXG4gICAgICBvbkNoYW5nZTogKHRleHQpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRleHQpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4odGV4dCk7XG4gICAgICB9LFxuICAgICAgb25QYXJhbXNDaGFuZ2U6IChwYXJhbXMpID0+IHRoaXMuY29tcGxldGVkUGFyYW1zQ2hhbmdlLmVtaXQocGFyYW1zKSxcbiAgICAgIG9uRm9jdXM6ICgpID0+IHRoaXMuZm9jdXNlZC5lbWl0KCksXG4gICAgICBvblByb2R1Y3RTZWxlY3Q6IChwcm9kdWN0KSA9PiB0aGlzLnByb2R1Y3RTZWxlY3QuZW1pdChwcm9kdWN0KSxcbiAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICB0aGlzLmJsdXJyZWQuZW1pdCgpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICB9LFxuICAgICAgc2V0Q3Vyc29yOiAob2Zmc2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgc2V0Q3Vyc29yT2Zmc2V0KGVkaXRvciwgb2Zmc2V0KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUodGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSk7XG4gICAgICB0aGlzLnBlbmRpbmdXcml0ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICAvLyBNb2RlQ29udHJvbGxlciB3cml0ZXMgYGRhdGEtbW9kZWAgdG8gdGhlIGVsZW1lbnQgaXQncyBnaXZlbi4gVGhlIENTU1xuICAgIC8vIHNlbGVjdG9ycyBhcmUgc2NvcGVkIHRvIGAubWFnaWN4LWFpYVtkYXRhLW1vZGU9XCIuLi5cIl1gIOKAlCB3aGljaCBsaXZlcyBvblxuICAgIC8vIHRoZSBpbm5lciBgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEgbWFnaWN4LWFpYS1jb250YWluZXJcIiAjY29udGFpbmVyPmAsXG4gICAgLy8gTk9UIHRoZSBob3N0IGA8YWktYXV0b2NvbXBsZXRlPmAgZWxlbWVudC4gVGhlIHJlc29sdmUgY2FsbGJhY2sgbWlycm9yc1xuICAgIC8vIHRoZSB2YWx1ZSBpbnRvIGByZXNvbHZlZE1vZGVgIHNvIHRoZSBgW2F0dHIuZGF0YS1tb2RlXWAgYmluZGluZyBzdGF5cyBpblxuICAgIC8vIGxvY2tzdGVwIHdpdGggTW9kZUNvbnRyb2xsZXIg4oCUIHRoZSBiaW5kaW5nIGhhbmRsZXMgU1NSLCBNb2RlQ29udHJvbGxlclxuICAgIC8vIGhhbmRsZXMgcnVudGltZSBwcmVmZXJzLWNvbG9yLXNjaGVtZSBzd2l0Y2hlcywgYW5kIGJlY2F1c2UgdGhleSBhbHdheXNcbiAgICAvLyBhZ3JlZSBuZWl0aGVyIGNsb2JiZXJzIHRoZSBvdGhlci5cbiAgICB0aGlzLm1vZGVDb250cm9sbGVyID0gbmV3IE1vZGVDb250cm9sbGVyKFxuICAgICAgdGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMubW9kZSxcbiAgICAgIChyZXNvbHZlZCkgPT4ge1xuICAgICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFBpbGwtd3JhcCBkZXRlY3Rpb24g4oCUIHdoZW4gdGhlIHBpbGwgbGlzdCB3cmFwcyBiZWxvdyB0aGUgZWRpdG9yJ3MgbGFzdFxuICAgIC8vIGxpbmUsIGRyb3AgaXRzIDhweCBsZWZ0IG1hcmdpbiB2aWEgYSBkYXRhIGF0dHJpYnV0ZSB0aGUgQ1NTIGtleXMgb2ZmLlxuICAgIC8vIE1pcnJvcnMgdGhlIFJlYWN0IGNvbXBvbmVudCdzIHVzZUxheW91dEVmZmVjdC5cbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMubWVhc3VyZVBpbGxXcmFwKCkpO1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGVkaXRvcikgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGVkaXRvcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVhc3VyZVBpbGxXcmFwKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250cm9sbGVyKSByZXR1cm47XG4gICAgLy8gYFNpbXBsZUNoYW5nZXNgIGlzIGB7IFtrZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9YCwgc28gcGVyXG4gICAgLy8gYG5vUHJvcGVydHlBY2Nlc3NGcm9tSW5kZXhTaWduYXR1cmVgIGVhY2gga2V5IGxvb2t1cCB1c2VzIGJyYWNrZXRcbiAgICAvLyBub3RhdGlvbiDigJQgdGhpcyBrZWVwcyB0aGUgc3RyaWN0bmVzcyBjb250cmFjdCB0aGF0IHRoZSByZXN0IG9mIHRoZVxuICAgIC8vIHdvcmtzcGFjZSBlbmZvcmNlcy5cbiAgICAvLyBDb250cm9sbGVkLW1vZGUgcHJvcGFnYXRpb25cbiAgICBpZiAoY2hhbmdlc1tcInZhbHVlXCJdICYmIHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcImNvbXBsZXRlZFBhcmFtc1wiXSAmJiB0aGlzLmNvbXBsZXRlZFBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0Q29tcGxldGVkUGFyYW1zKHRoaXMuY29tcGxldGVkUGFyYW1zKTtcbiAgICB9XG4gICAgLy8gUmVhY3RpdmUgb3B0aW9uc1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXNbXCJhcGlDb25maWdcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJhZGRpdGlvbmFsQ29udGV4dFwiXSB8fFxuICAgICAgY2hhbmdlc1tcIm9wdGlvbk92ZXJyaWRlc1wiXSB8fFxuICAgICAgY2hhbmdlc1tcImRyb3Bkb3duVHJpZ2dlclwiXSB8fFxuICAgICAgY2hhbmdlc1tcIm9wdGlvbnNQb3NpdGlvblwiXSB8fFxuICAgICAgY2hhbmdlc1tcImNsb3NlRHJvcGRvd25PbkJsdXJcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJzaG93Tm9uVGFwcGFibGVPcHRpb25zXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wic2hvd1Byb2R1Y3RzXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wicHJvZHVjdHNcIl1cbiAgICApIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci51cGRhdGUoe1xuICAgICAgICBhcGlDb25maWc6IHRoaXMuYXBpQ29uZmlnLFxuICAgICAgICBhZGRpdGlvbmFsQ29udGV4dDogdGhpcy5hZGRpdGlvbmFsQ29udGV4dCxcbiAgICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB0aGlzLm9wdGlvbk92ZXJyaWRlcyxcbiAgICAgICAgZHJvcGRvd25UcmlnZ2VyOiB0aGlzLmRyb3Bkb3duVHJpZ2dlcixcbiAgICAgICAgb3B0aW9uc1Bvc2l0aW9uOiB0aGlzLm9wdGlvbnNQb3NpdGlvbixcbiAgICAgICAgY2xvc2VEcm9wZG93bk9uQmx1cjogdGhpcy5jbG9zZURyb3Bkb3duT25CbHVyLFxuICAgICAgICBzaG93Tm9uVGFwcGFibGVPcHRpb25zOiB0aGlzLnNob3dOb25UYXBwYWJsZU9wdGlvbnMsXG4gICAgICAgIHNob3dQcm9kdWN0czogdGhpcy5zaG93UHJvZHVjdHMsXG4gICAgICAgIC8vIFNhbWUgcmVmZXJlbmNlIG9uIGFuIHVucmVsYXRlZCBjaGFuZ2UgaXMgYSBuby1vcCBpbiB0aGUgY29yZTsgb25seSBhXG4gICAgICAgIC8vIGdlbnVpbmVseSBzd2FwcGVkIChvciByZW1vdmVkKSBpbnRlZ3JhdGlvbiBjbGVhcnMgdGhlIHN0cmlwLlxuICAgICAgICBwcm9kdWN0czogdGhpcy5wcm9kdWN0cyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcIm1vZGVcIl0pIHtcbiAgICAgIC8vIEtlZXAgdGhlIGJpbmRpbmcgY29ycmVjdCBldmVuIHdoZW4gTW9kZUNvbnRyb2xsZXIgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIC8vIChTU1IgLyBwcmUtbmdBZnRlclZpZXdJbml0KS4gT24gdGhlIGJyb3dzZXIsIHNldE1vZGUgdHJpZ2dlcnMgdGhlXG4gICAgICAvLyByZXNvbHZlIGNhbGxiYWNrIHdoaWNoIHNldHMgdGhlIHNhbWUgdmFsdWUuXG4gICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVJbml0aWFsTW9kZSh0aGlzLm1vZGUpO1xuICAgICAgdGhpcy5tb2RlQ29udHJvbGxlcj8uc2V0TW9kZSh0aGlzLm1vZGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLm1vZGVDb250cm9sbGVyPy5kZXN0cm95KCk7XG4gICAgdGhpcy5jb250cm9sbGVyPy5kZXN0cm95KCk7XG4gIH1cblxuICAvLyA9PT0gSW1wZXJhdGl2ZSBBUEkgKGV4cG9zZWQgb24gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSB2aWEgQFZpZXdDaGlsZCkgPT09XG5cbiAgLyoqIFByb2dyYW1tYXRpY2FsbHkgZm9jdXMgdGhlIGVkaXRvci4gKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKiBQcm9ncmFtbWF0aWNhbGx5IGJsdXIgdGhlIGVkaXRvci4gKi9cbiAgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIHN0YXRlLCByb3RhdGUgc2Vzc2lvbiwgYW5kIHJlLWZldGNoLiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2tpcCB0aGUgYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHRoZSBkcm9wZG93bidzIHNraXAgYnV0dG9uIC8g4oaSLlxuICAgKiBMZXRzIGEgY29uc3VtZXIgd2hvIGhpZGVzIHRoZSBidWlsdC1pbiBidXR0b24gKGBzaG93U2tpcEJ1dHRvbj1mYWxzZWApXG4gICAqIGRyaXZlIHNraXBwaW5nIGZyb20gdGhlaXIgb3duIFVJLlxuICAgKi9cbiAgc2tpcEFjdGl2ZVBpbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyPy5za2lwQWN0aXZlUGlsbCgpO1xuICB9XG5cbiAgLyoqIFN3aXRjaCBjb2xvciBtb2RlIGF0IHJ1bnRpbWUuICovXG4gIHNldE1vZGUobW9kZTogQXBwZWFyYW5jZU1vZGUpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZUluaXRpYWxNb2RlKG1vZGUpO1xuICAgIHRoaXMubW9kZUNvbnRyb2xsZXI/LnNldE1vZGUobW9kZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyA9PT0gVGVtcGxhdGUgaGVscGVycyA9PT1cblxuICAvKipcbiAgICogJ2RlZmF1bHQnIOKGkiByZW5kZXIgdGhlIGJ1aWx0LWluIGFycm93IGJ1dHRvbi5cbiAgICogJ2N1c3RvbScgIOKGkiBwcm9qZWN0IHRoZSBjb25zdW1lci1zdXBwbGllZCBUZW1wbGF0ZVJlZi5cbiAgICogJ2hpZGRlbicgIOKGkiBubyBidXR0b24uXG4gICAqL1xuICBnZXQgc3VibWl0QnV0dG9uU3RhdGUoKTogXCJkZWZhdWx0XCIgfCBcImN1c3RvbVwiIHwgXCJoaWRkZW5cIiB7XG4gICAgaWYgKHRoaXMuc3VibWl0QnV0dG9uID09PSBudWxsKSByZXR1cm4gXCJoaWRkZW5cIjtcbiAgICBpZiAodGhpcy5zdWJtaXRCdXR0b24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiZGVmYXVsdFwiO1xuICAgIHJldHVybiBcImN1c3RvbVwiO1xuICB9XG5cbiAgLyoqIE5hcnJvd2VkIGFjY2Vzc29yIGZvciAqbmdUZW1wbGF0ZU91dGxldCDigJQgbmV2ZXIgdW5kZWZpbmVkLiAqL1xuICBnZXQgY3VzdG9tU3VibWl0VGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zdWJtaXRCdXR0b24gPz8gbnVsbDtcbiAgfVxuXG4gIGdldCBzaG93SW5saW5lUGlsbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGlsbFBsYWNlbWVudCA9PT0gXCJpbmxpbmVcIjtcbiAgfVxuXG4gIGdldCBzaG93RHJvcGRvd25QaWxscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5waWxsUGxhY2VtZW50ID09PSBcImRyb3Bkb3duXCI7XG4gIH1cblxuICAvKipcbiAgICogYHRydWVgIHdoZW4gdGhlcmUncyBzb21ldGhpbmcgdG8gc3VibWl0IOKAlCBkcml2ZW4gYnkgY3VycmVudCBzZWdtZW50c1xuICAgKiBhbmQgY29tcGxldGVkIHBhcmFtcy4gUmVhZCBvZmYgdGhlIGxpdmUgZWRpdG9yIHZpYSB0aGUgY29udHJvbGxlciBzdGF0ZS5cbiAgICovXG4gIGNhblN1Ym1pdChzdGF0ZTogeyBzZWdtZW50czogeyBsZW5ndGg6IG51bWJlciB9OyBjb21wbGV0ZWRQYXJhbXM6IHsgbGVuZ3RoOiBudW1iZXIgfSB9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLnNlZ21lbnRzLmxlbmd0aCA+IDAgfHwgc3RhdGUuY29tcGxldGVkUGFyYW1zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBvbldyYXBwZXJDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIENsaWNraW5nIGEgcGlsbCBzaG91bGQgYWN0aXZhdGUgaXQgd2l0aG91dCBzdGVhbGluZyBmb2N1cyBlbHNld2hlcmUuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAodGFyZ2V0Py5jbG9zZXN0KFwiW2RhdGEtYWlhLXBpbGxdXCIpKSByZXR1cm47XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgb25TdWJtaXRCdXR0b25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaGFuZGxlU3VibWl0RnJvbVVzZXJBY3Rpb24oKTtcbiAgfVxuXG4gIG9uU3VibWl0U2xvdENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5oYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpO1xuICB9XG5cbiAgb25TZWxlY3RQaWxsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0QWN0aXZlUGlsbChpbmRleCk7XG4gIH1cblxuICAvLyA9PT0gQ29udHJvbFZhbHVlQWNjZXNzb3IgPT09XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB2YWx1ZSA/PyBcIlwiO1xuICAgIGlmICghdGhpcy5jb250cm9sbGVyKSB7XG4gICAgICAvLyBSZWFjdGl2ZSBGb3JtcyBjYW4gY2FsbCB3cml0ZVZhbHVlKCkgYmVmb3JlIG5nT25Jbml0IGNyZWF0ZXMgdGhlXG4gICAgICAvLyBjb250cm9sbGVyIChkeW5hbWljIGZvcm0gY29uc3RydWN0aW9uLCBvciBhIEZvcm1Db250cm9sIHRoYXQgYWxyZWFkeVxuICAgICAgLy8gaGFkIGEgdmFsdWUgYXQgZGlyZWN0aXZlLWNyZWF0aW9uIHRpbWUpLiBCdWZmZXIgdGhlIHZhbHVlOyBuZ09uSW5pdFxuICAgICAgLy8gZmx1c2hlcyBpdCBhcyBzb29uIGFzIHRoZSBjb250cm9sbGVyIGV4aXN0cy5cbiAgICAgIHRoaXMucGVuZGluZ1dyaXRlVmFsdWUgPSBuZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUobmV4dCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZEZuID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKF9kaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFRoZSBjb250ZW50RWRpdGFibGUgaG9zdCBkb2Vzbid0IGhhdmUgYSBuYXRpdmUgZGlzYWJsZWQgYXR0cmlidXRlLiBGb3JcbiAgICAvLyB2MC4xIHdlIGFjY2VwdCB0aGUgY2FsbCBzbyBBbmd1bGFyJ3MgZm9ybXMgbGF5ZXIgZG9lc24ndCB0aHJvdywgYnV0XG4gICAgLy8gdGhlIGVkaXRvciBzdGF5cyBpbnRlcmFjdGl2ZS4gQSBmdXR1cmUgZW5oYW5jZW1lbnQgY2FuIHRvZ2dsZVxuICAgIC8vIGNvbnRlbnRFZGl0YWJsZSArIEFSSUEgZGlzYWJsZWQgaGVyZS5cbiAgfVxuXG4gIC8vID09PSBTdWJtaXQgZmxvdyA9PT1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSBjb250cm9sbGVyJ3Mgb25TdWJtaXQgY2FsbGJhY2sgKHdoaWNoIGZpcmVzIGZyb20gdGhlXG4gICAqIGtleWJvYXJkIGNvbnRyb2xsZXIgb24gRW50ZXIpLiBSZWFkcyB0aGUgbGl2ZSBlZGl0b3IgdGV4dCDigJQgc2FtZSB0cmlja1xuICAgKiB0aGUgUmVhY3QgY29tcG9uZW50IHVzZXMg4oCUIHNvIHRoZSBlbWl0dGVkIHF1ZXJ5IHJlZmxlY3RzIHdoYXRldmVyJ3MgaW5cbiAgICogdGhlIERPTSByaWdodCBub3csIG5vdCBhIHBvc3NpYmx5LXN0YWxlIHN0YXRlIHNuYXBzaG90LlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVTdWJtaXQoX3Jlc3VsdDogQXV0b2NvbXBsZXRlUmVzdWx0KTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gZXh0cmFjdFBsYWluVGV4dChlZGl0b3IpO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5jb21wbGV0ZWRQYXJhbXMgPz8gc3RhdGUuY29tcGxldGVkUGFyYW1zO1xuICAgIHRoaXMuc3VibWl0dGVkLmVtaXQoXG4gICAgICBidWlsZFN1Ym1pdFJlc3VsdCh0ZXh0LCBwYXJhbXMsIHN0YXRlLnNraXBwZWRQYXJhbXMsIHtcbiAgICAgICAgaWRlbnRpZmllZFBhcmFtczogc3RhdGUuaWRlbnRpZmllZFBhcmFtcyxcbiAgICAgICAgaXNSZWFkeTogc3RhdGUuaXNSZWFkeSxcbiAgICAgICAgY3VzdG9tRmllbGRzOiBzdGF0ZS5jdXN0b21GaWVsZHMsXG4gICAgICB9KSxcbiAgICApO1xuICAgIHRoaXMuY29udHJvbGxlci5yZXNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY29udHJvbGxlci5nZXRTdGF0ZSgpO1xuICAgIGlmICghdGhpcy5jYW5TdWJtaXQoc3RhdGUpKSByZXR1cm47XG4gICAgLy8gU3ludGhlc2l6ZSB0aGUgcmVzdWx0IGZvciB0aGUgc3VibWl0LWJ1dHRvbiBjbGljayBwYXRoOyBzYW1lIHNoYXBlXG4gICAgLy8gdGhlIGNvbnRyb2xsZXIgd291bGQgZGVsaXZlciBmcm9tIGEga2V5Ym9hcmQgRW50ZXIsIHNvIGhhbmRsZVN1Ym1pdFxuICAgIC8vIGNhbiB0YWtlIGVpdGhlciBlbnRyeSBwb2ludC5cbiAgICB0aGlzLmhhbmRsZVN1Ym1pdCh7XG4gICAgICBxdWVyeTogc3RhdGUudGV4dC50cmltKCksXG4gICAgICByYXdfcXVlcnk6IFwiXCIsXG4gICAgICBjb21wbGV0ZWRfcGFyYW1zOiBbXSxcbiAgICAgIGlkZW50aWZpZWRfcGFyYW1zOiBbXSxcbiAgICAgIGlzX3JlYWR5OiBzdGF0ZS5pc1JlYWR5LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtZWFzdXJlUGlsbFdyYXAoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5waWxsQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyIHx8ICFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCBpbm5lciA9IGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCFpbm5lcikgcmV0dXJuO1xuICAgIC8vIFdyYXAgZGV0ZWN0aW9uOiB0aGUgcGlsbCByb3cncyB0b3AgdnMgdGhlIGVkaXRvcidzIGJvdHRvbS4gV2hlbiB0aGVcbiAgICAvLyBwaWxscyBzaXQgb24gKG9yIGFib3ZlKSB0aGUgZWRpdG9yJ3MgbGFzdCBsaW5lIHRoZXkncmUgTk9UIHdyYXBwZWQg4oCUXG4gICAgLy8ga2VlcCB0aGUgOHB4IG1hcmdpbiBzbyB0aGV5IGRvbid0IGJ1dHQgYWdhaW5zdCB0eXBlZCB0ZXh0IG9yIHRoZVxuICAgIC8vIHBsYWNlaG9sZGVyLiBUaGlzIGhhbmRsZXMgdGhlIGVtcHR5LWVkaXRvciArIHBsYWNlaG9sZGVyIGNhc2VcbiAgICAvLyBuYXR1cmFsbHk6IHRoZSBwbGFjZWhvbGRlciBzdGlsbCBvY2N1cGllcyB0aGUgZWRpdG9yJ3MgbGluZSBib3guXG4gICAgY29uc3QgY1JlY3QgPSBpbm5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlUmVjdCA9IGVkaXRvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3cmFwcGVkID0gY1JlY3QudG9wID49IGVSZWN0LmJvdHRvbSAtIDI7XG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICBpZiAod3JhcHBlZCkgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtYWlhLXBpbGwtd3JhcHBlZFwiLCBcIlwiKTtcbiAgICAgIGVsc2UgY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtYWlhLXBpbGwtd3JhcHBlZFwiKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAvLyBEZWZhdWx0IG5vLW9wIGZvciBDVkEgY2FsbGJhY2tzLlxufVxuXG4vKipcbiAqIFJlc29sdmUgYSBjb25jcmV0ZSBsaWdodC9kYXJrIHZhbHVlIGZyb20gdGhlIGNvbmZpZ3VyZWQgbW9kZS4gVXNlZCB0byBzZWVkXG4gKiB0aGUgYGRhdGEtbW9kZWAgYXR0cmlidXRlIHN5bmNocm9ub3VzbHkgKGluY2x1ZGluZyBkdXJpbmcgU1NSLCB3aGVyZVxuICogTW9kZUNvbnRyb2xsZXIgbmV2ZXIgcnVucykuIE9uIHRoZSBzZXJ2ZXIgYHdpbmRvd2AgaXMgdW5kZWZpbmVkIOKGkiBkZWZhdWx0c1xuICogdG8gXCJkYXJrXCIgKG1hdGNoZXMgdGhlIHZhbmlsbGEvUmVhY3QgYmVoYXZpb3IpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlSW5pdGlhbE1vZGUobW9kZTogQXBwZWFyYW5jZU1vZGUpOiBcImxpZ2h0XCIgfCBcImRhcmtcIiB7XG4gIGlmIChtb2RlICE9PSBcImF1dG9cIikgcmV0dXJuIG1vZGU7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJkYXJrXCI7XG4gIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIikubWF0Y2hlcyA/IFwiZGFya1wiIDogXCJsaWdodFwiO1xufVxuIiwiPGRpdlxuICAjY29udGFpbmVyXG4gIGNsYXNzPVwibWFnaWN4LWFpYSBtYWdpY3gtYWlhLWNvbnRhaW5lclwiXG4gIFthdHRyLmRhdGEtcGlsbC1wbGFjZW1lbnRdPVwicGlsbFBsYWNlbWVudFwiXG4gIFthdHRyLmRhdGEtb3B0aW9ucy1wb3NpdGlvbl09XCJvcHRpb25zUG9zaXRpb25cIlxuICBbYXR0ci5kYXRhLWFuaW1hdGlvbnNdPVwiYW5pbWF0aW9ucyA/ICdvbicgOiAnb2ZmJ1wiXG4gIFthdHRyLmRhdGEtbW9kZV09XCJyZXNvbHZlZE1vZGVcIlxuPlxuICA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duXG4gICAgKm5nSWY9XCJjb250cm9sbGVyXCJcbiAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyXCJcbiAgICBbc2hvd1BpbGxzXT1cInNob3dEcm9wZG93blBpbGxzXCJcbiAgICBbc2hvd1NraXBCdXR0b25dPVwic2hvd1NraXBCdXR0b25cIlxuICAgIFtzaG93T3B0aW9uSWNvbnNdPVwic2hvd09wdGlvbkljb25zXCJcbiAgICBbc2hvd09wdGlvbkltYWdlc109XCJzaG93T3B0aW9uSW1hZ2VzXCJcbiAgICBbc2hvd09wdGlvbkNvdW50c109XCJzaG93T3B0aW9uQ291bnRzXCJcbiAgICBbcHJvZHVjdHNMYXlvdXRdPVwicHJvZHVjdHNMYXlvdXRcIlxuICA+PC9haS1hdXRvY29tcGxldGUtZHJvcGRvd24+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWFnaWN4LWFpYS1pbnB1dC13cmFwcGVyXCJcbiAgICBkYXRhLWFpYS1pbnB1dC13cmFwcGVyPVwiXCJcbiAgICAoY2xpY2spPVwib25XcmFwcGVyQ2xpY2soJGV2ZW50KVwiXG4gICAgKGtleXVwKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwibWFnaWN4LWFpYS1lZGl0b3ItYXJlYVwiIGRhdGEtYWlhLWVkaXRvcj1cIlwiPlxuICAgICAgPGRpdlxuICAgICAgICAjZWRpdG9yXG4gICAgICAgICpuZ0lmPVwiY29udHJvbGxlclwiXG4gICAgICAgIFthaWFFZGl0b3JIb3N0XT1cImNvbnRyb2xsZXJcIlxuICAgICAgICBbYXV0b0ZvY3VzXT1cImF1dG9Gb2N1c1wiXG4gICAgICAgIFtzaG93Q2hpcEljb25zXT1cInNob3dDaGlwSWNvbnNcIlxuICAgICAgICBbc2hvd0NoaXBJbWFnZXNdPVwic2hvd0NoaXBJbWFnZXNcIlxuICAgICAgICBjbGFzcz1cIm1hZ2ljeC1haWEtaW5wdXRcIlxuICAgICAgICBkYXRhLWFpYS1pbnB1dD1cIlwiXG4gICAgICA+PC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sbGVyICYmIHNob3dJbmxpbmVQaWxsc1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICNwaWxsQ29udGFpbmVyXG4gICAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLXBpbGwtbGlzdC1jb250YWluZXJcIlxuICAgICAgICAgIGRhdGEtYWlhLXBpbGwtbGlzdC1jb250YWluZXI9XCJcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAoY29udHJvbGxlci5pc0xvYWRpbmckIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICgoY29udHJvbGxlci5zdWdnZXN0aW9uUGlsbHMkIHwgYXN5bmMpPy5sZW5ndGggPz8gMCkgPiAwXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhaWEtcGlsbC1saXN0XG4gICAgICAgICAgICBbcGlsbHNdPVwiKGNvbnRyb2xsZXIuc3VnZ2VzdGlvblBpbGxzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgICAgICAgICBbYWN0aXZlUGlsbEluZGV4XT1cIjBcIlxuICAgICAgICAgICAgW2FjdGl2ZVNlbGVjdGVkXT1cIihjb250cm9sbGVyLmlzQWN0aXZlUGlsbFNlbGVjdGVkJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCIoY29udHJvbGxlci5pc0xvYWRpbmckIHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgICAgICAgIChzZWxlY3RQaWxsKT1cIm9uU2VsZWN0UGlsbCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9haWEtcGlsbC1saXN0PlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN1Ym1pdEJ1dHRvblN0YXRlXCI+XG4gICAgICA8YWlhLXN1Ym1pdC1idXR0b25cbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkZWZhdWx0J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgY29udHJvbGxlciAmJlxuICAgICAgICAgICAgY2FuU3VibWl0KHtcbiAgICAgICAgICAgICAgc2VnbWVudHM6IChjb250cm9sbGVyLnNlZ21lbnRzJCB8IGFzeW5jKSA/PyBbXSxcbiAgICAgICAgICAgICAgY29tcGxldGVkUGFyYW1zOiAoY29udHJvbGxlci5jb21wbGV0ZWRQYXJhbXMkIHwgYXN5bmMpID8/IFtdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgICAgKHN1Ym1pdCk9XCJvblN1Ym1pdEJ1dHRvbkNsaWNrKCRldmVudClcIlxuICAgICAgPjwvYWlhLXN1Ym1pdC1idXR0b24+XG5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInY3VzdG9tJ1wiXG4gICAgICAgIGRhdGEtYWlhLXN1Ym1pdD1cIlwiXG4gICAgICAgIGRhdGEtYWlhLXN1Ym1pdC1zbG90PVwiXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLXN1Ym1pdC1zbG90XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0U2xvdENsaWNrKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU3VibWl0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==