@sbb-esta/lyne-elements-dev 5.0.0-next-dev.1776960216 → 5.0.0-next-dev.1777014673

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.
@@ -1,214 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { html, nothing, unsafeCSS } from "lit";
3
- import { property } from "lit/decorators.js";
4
- import { SbbDarkModeController, SbbLanguageController, SbbOpenCloseBaseElement, SbbReadonlyMixin, boxSizingStyles, i18nCloseAlert, isLean, isZeroAnimationDuration } from "./core.js";
5
- import { SbbTransparentButtonElement } from "./button.pure.js";
6
- import { SbbDividerElement } from "./divider.pure.js";
7
- import { SbbIconNameMixin } from "./icon.pure.js";
8
- //#region src/elements/alert/alert/alert.scss?inline
9
- var alert_default = ":host {\n display: block;\n --sbb-alert-background-color: var(--sbb-background-color-1-inverted);\n --sbb-alert-border-radius: var(--sbb-border-radius-4x);\n --sbb-alert-color: var(--sbb-color-aluminium);\n --sbb-alert-color: light-dark(var(--sbb-color-aluminium), var(--sbb-color-anthracite));\n --sbb-alert-padding: var(--sbb-spacing-responsive-xxs) var(--sbb-spacing-responsive-xs);\n --sbb-alert-icon-size: 1.25rem;\n --sbb-alert-close-icon-margin: var(--sbb-spacing-responsive-xxs);\n --sbb-alert-gap: var(--sbb-spacing-fixed-2x) var(--sbb-spacing-responsive-xs);\n --sbb-alert-animation-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-6x)\n );\n --sbb-alert-timing-function: ease-in;\n --sbb-alert-title-margin-block: 0;\n}\n@media (min-width: calc(64rem)) {\n :host {\n --sbb-alert-icon-size: 1.75rem;\n }\n}\n@media (forced-colors: active) {\n :host {\n outline: var(--sbb-border-width-1x) solid CanvasText;\n border-radius: var(--sbb-alert-border-radius);\n }\n}\n\n:host(:is(:state(state-opening),[state--state-opening]):not([animation=open], [animation=all])) {\n --sbb-disable-animation-duration: 0s;\n}\n\n:host(:is(:state(state-closing),[state--state-closing]):not([animation=close], [animation=all])) {\n --sbb-disable-animation-duration: 0s;\n}\n\n:host([size=s]) {\n --sbb-alert-gap: var(--sbb-spacing-fixed-1x) var(--sbb-spacing-responsive-xxs);\n --sbb-alert-close-icon-margin: var(--sbb-spacing-responsive-xxxs);\n}\n\n:host([size=l]) {\n --sbb-alert-icon-size: var(--sbb-size-icon-ui-small);\n --sbb-alert-title-margin-block: 0 var(--sbb-spacing-fixed-1x);\n}\n@media (min-width: calc(64rem)) {\n :host([size=l]) {\n --sbb-alert-icon-size: 2.125rem;\n }\n}\n\n:host(:not(:is(:state(dark),[state--dark]))) {\n --sbb-focus-outline-color: var(--sbb-focus-outline-color-dark);\n}\n\n.sbb-alert__transition-wrapper {\n display: grid;\n grid-template-rows: 0fr;\n opacity: 0;\n}\n:host(:is(:is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) .sbb-alert__transition-wrapper {\n grid-template-rows: 1fr;\n opacity: 1;\n}\n:host(:is(:state(state-opening),[state--state-opening])) .sbb-alert__transition-wrapper {\n animation-name: open, open-opacity;\n animation-fill-mode: forwards;\n animation-duration: var(--sbb-alert-animation-duration);\n animation-timing-function: var(--sbb-alert-timing-function);\n animation-delay: 0s, var(--sbb-alert-animation-duration);\n}\n:host(:is(:state(state-closing),[state--state-closing])) .sbb-alert__transition-wrapper {\n animation-name: close-opacity, close;\n animation-fill-mode: forwards;\n animation-duration: var(--sbb-alert-animation-duration);\n animation-timing-function: var(--sbb-alert-timing-function);\n animation-delay: 0s, var(--sbb-disable-animation-duration, var(--sbb-animation-duration-2x));\n}\n\n.sbb-alert__transition-sub-wrapper {\n overflow: hidden;\n}\n\n.sbb-alert {\n --sbb-text-font-size: var(--sbb-text-font-size-s);\n font-family: var(--sbb-typo-font-family);\n font-weight: normal;\n line-height: var(--sbb-typo-line-height-text);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n font-size: var(--sbb-text-font-size);\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n gap: var(--sbb-alert-gap);\n min-width: fit-content;\n padding: var(--sbb-alert-padding);\n overflow: hidden;\n color: var(--sbb-alert-color);\n background-color: var(--sbb-alert-background-color);\n border-radius: var(--sbb-alert-border-radius);\n}\n@media (min-width: calc(37.5rem)) {\n .sbb-alert {\n grid-template-columns: auto 1fr auto;\n align-items: flex-start;\n }\n}\n\n.sbb-alert__icon {\n display: flex;\n align-items: start;\n padding-block: var(--sbb-spacing-fixed-1x);\n min-width: var(--sbb-alert-icon-size);\n --sbb-icon-svg-width: var(--sbb-alert-icon-size);\n --sbb-icon-svg-height: var(--sbb-alert-icon-size);\n}\n\n.sbb-alert__content {\n color-scheme: only light;\n order: 3;\n grid-column: 1/3;\n}\n@media (min-width: calc(37.5rem)) {\n .sbb-alert__content {\n order: initial;\n grid-column-start: initial;\n grid-column-end: initial;\n }\n}\n\n.sbb-alert__content-slot {\n display: inline;\n margin: 0;\n padding: 0;\n}\n\n.sbb-alert__close-button-wrapper {\n color-scheme: only light;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n\n@media (min-width: calc(37.5rem)) {\n .sbb-alert__close-button {\n margin-inline-start: var(--sbb-alert-close-icon-margin);\n }\n}\n\n.sbb-alert__close-button-divider {\n display: none;\n}\n@media (min-width: calc(37.5rem)) {\n .sbb-alert__close-button-divider {\n display: block;\n height: calc(100% - var(--sbb-spacing-fixed-1x) * 2);\n }\n}\n\n@keyframes open {\n from {\n grid-template-rows: 0fr;\n }\n to {\n grid-template-rows: 1fr;\n }\n}\n@keyframes open-opacity {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes close {\n from {\n grid-template-rows: 1fr;\n }\n to {\n grid-template-rows: 0fr;\n }\n}\n@keyframes close-opacity {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n::slotted(sbb-title) {\n margin-block: var(--sbb-alert-title-margin-block);\n}";
10
- //#endregion
11
- //#region src/elements/alert/alert/alert.component.ts
12
- /**
13
- * It displays messages which require user's attention.
14
- *
15
- * @slot - Use the unnamed slot to add content to the `sbb-alert`. At a minimum an `sbb-title` element and a descriptive text should be used.
16
- * @slot icon - Should be a `sbb-icon` which is displayed next to the title. Styling is optimized for icons of type HIM-CUS.
17
- * @slot title - Slot for the title. For the standard `sbb-title` element, the slot is automatically assigned when slotted in the unnamed slot.
18
- */
19
- var SbbAlertElement = (() => {
20
- let _classSuper = SbbIconNameMixin(SbbReadonlyMixin(SbbOpenCloseBaseElement));
21
- let _size_decorators;
22
- let _size_initializers = [];
23
- let _size_extraInitializers = [];
24
- let _animation_decorators;
25
- let _animation_initializers = [];
26
- let _animation_extraInitializers = [];
27
- return class SbbAlertElement extends _classSuper {
28
- constructor() {
29
- super(...arguments);
30
- this.#size_accessor_storage = __runInitializers(this, _size_initializers, isLean() ? "s" : "m");
31
- this.#animation_accessor_storage = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _animation_initializers, "all"));
32
- this._language = (__runInitializers(this, _animation_extraInitializers), new SbbLanguageController(this));
33
- this._darkModeController = new SbbDarkModeController(this, () => {
34
- this._syncLinks();
35
- this._configureTitle();
36
- this.requestUpdate();
37
- });
38
- }
39
- static {
40
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
41
- _size_decorators = [property({ reflect: true })];
42
- _animation_decorators = [property({ reflect: true })];
43
- __esDecorate(this, null, _size_decorators, {
44
- kind: "accessor",
45
- name: "size",
46
- static: false,
47
- private: false,
48
- access: {
49
- has: (obj) => "size" in obj,
50
- get: (obj) => obj.size,
51
- set: (obj, value) => {
52
- obj.size = value;
53
- }
54
- },
55
- metadata: _metadata
56
- }, _size_initializers, _size_extraInitializers);
57
- __esDecorate(this, null, _animation_decorators, {
58
- kind: "accessor",
59
- name: "animation",
60
- static: false,
61
- private: false,
62
- access: {
63
- has: (obj) => "animation" in obj,
64
- get: (obj) => obj.animation,
65
- set: (obj, value) => {
66
- obj.animation = value;
67
- }
68
- },
69
- metadata: _metadata
70
- }, _animation_initializers, _animation_extraInitializers);
71
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
72
- enumerable: true,
73
- configurable: true,
74
- writable: true,
75
- value: _metadata
76
- });
77
- }
78
- static {
79
- this.elementName = "sbb-alert";
80
- }
81
- static {
82
- this.elementDependencies = [SbbTransparentButtonElement, SbbDividerElement];
83
- }
84
- static {
85
- this.styles = [boxSizingStyles, unsafeCSS(alert_default)];
86
- }
87
- static {
88
- this.events = {
89
- beforeopen: "beforeopen",
90
- open: "open",
91
- beforeclose: "beforeclose",
92
- close: "close"
93
- };
94
- }
95
- #size_accessor_storage;
96
- /**
97
- * You can choose between `s`, `m` or `l` size.
98
- * @default 'm' / 's' (lean)
99
- */
100
- get size() {
101
- return this.#size_accessor_storage;
102
- }
103
- set size(value) {
104
- this.#size_accessor_storage = value;
105
- }
106
- #animation_accessor_storage;
107
- /** The enabled animations. */
108
- get animation() {
109
- return this.#animation_accessor_storage;
110
- }
111
- set animation(value) {
112
- this.#animation_accessor_storage = value;
113
- }
114
- /** Open the alert. */
115
- open() {
116
- this.state = "opening";
117
- if (!this.dispatchBeforeOpenEvent()) return;
118
- if (this._isZeroAnimationDuration()) this._handleOpening();
119
- }
120
- /** Close the alert. */
121
- close() {
122
- if (this.state === "opened" && this.dispatchBeforeCloseEvent()) {
123
- this.state = "closing";
124
- if (this._isZeroAnimationDuration()) this._handleClosing();
125
- }
126
- }
127
- firstUpdated(changedProperties) {
128
- super.firstUpdated(changedProperties);
129
- this.open();
130
- }
131
- willUpdate(changedProperties) {
132
- super.willUpdate(changedProperties);
133
- if (changedProperties.has("size")) this._configureTitle();
134
- }
135
- _isZeroAnimationDuration() {
136
- return isZeroAnimationDuration(this, "--sbb-alert-animation-duration");
137
- }
138
- _onAnimationEnd(event) {
139
- if (this.state === "opening" && event.animationName === "open-opacity") this._handleOpening();
140
- else if (this.state === "closing" && event.animationName === "close") this._handleClosing();
141
- }
142
- _handleOpening() {
143
- this.state = "opened";
144
- this.dispatchOpenEvent();
145
- }
146
- _handleClosing() {
147
- this.state = "closed";
148
- this.dispatchCloseEvent();
149
- setTimeout(() => this.remove());
150
- }
151
- _handleSlotchange() {
152
- this._syncLinks();
153
- const title = Array.from(this.children).find((el) => el.localName === "sbb-title");
154
- if (title) title.slot = "title";
155
- }
156
- _syncLinks() {
157
- Array.from(this.querySelectorAll?.("sbb-link") ?? []).forEach((link) => {
158
- customElements.upgrade(link);
159
- link.negative = this._isLightMode();
160
- });
161
- }
162
- _configureTitle() {
163
- const title = this.querySelector?.("sbb-title");
164
- if (title) {
165
- customElements.upgrade(title);
166
- title.negative = this._isLightMode();
167
- title.visualLevel = this.size === "l" ? "3" : "5";
168
- }
169
- }
170
- _isLightMode() {
171
- return !this._darkModeController.matches();
172
- }
173
- renderIconName() {
174
- return super.renderIconName() || "info";
175
- }
176
- render() {
177
- return html`
178
- <div class="sbb-alert__transition-wrapper" @animationend=${this._onAnimationEnd}>
179
- <!-- sub wrapper needed to properly support fade in animation -->
180
- <div class="sbb-alert__transition-sub-wrapper">
181
- <div class="sbb-alert">
182
- <span class="sbb-alert__icon"> ${this.renderIconSlot()} </span>
183
- <span class="sbb-alert__content">
184
- <slot name="title" @slotchange=${this._configureTitle}></slot>
185
- <p class="sbb-alert__content-slot">
186
- <slot @slotchange=${this._handleSlotchange}></slot>
187
- </p>
188
- </span>
189
- ${!this.readOnly ? html`<span class="sbb-alert__close-button-wrapper">
190
- <sbb-divider
191
- orientation="vertical"
192
- ?negative=${this._isLightMode()}
193
- class="sbb-alert__close-button-divider"
194
- ></sbb-divider>
195
- <sbb-transparent-button
196
- ?negative=${this._isLightMode()}
197
- size=${this.size === "l" ? "m" : this.size}
198
- icon-name="cross-small"
199
- @click=${() => this.close()}
200
- aria-label=${i18nCloseAlert[this._language.current]}
201
- class="sbb-alert__close-button"
202
- ></sbb-transparent-button>
203
- </span>` : nothing}
204
- </div>
205
- </div>
206
- </div>
207
- `;
208
- }
209
- };
210
- })();
211
- //#endregion
212
- export { SbbAlertElement as t };
213
-
214
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LUNuMzZrX0hmLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9hbGVydC9hbGVydC9hbGVydC5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9hbGVydC9hbGVydC9hbGVydC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuLy8gT3Blbi9DbG9zZSBhbmltYXRpb24gdmFyc1xuJG9wZW4tYW5pbS1yb3dzLWZyb206IDBmcjtcbiRvcGVuLWFuaW0tcm93cy10bzogMWZyO1xuJG9wZW4tYW5pbS1vcGFjaXR5LWZyb206IDA7XG4kb3Blbi1hbmltLW9wYWNpdHktdG86IDE7XG5cbjpob3N0IHtcbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgLS1zYmItYWxlcnQtYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMS1pbnZlcnRlZCk7XG4gIC0tc2JiLWFsZXJ0LWJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi1ib3JkZXItcmFkaXVzLTR4KTtcbiAgLS1zYmItYWxlcnQtY29sb3I6IGxpZ2h0LWRhcmsodmFyKC0tc2JiLWNvbG9yLWFsdW1pbml1bSksIHZhcigtLXNiYi1jb2xvci1hbnRocmFjaXRlKSk7XG4gIC0tc2JiLWFsZXJ0LXBhZGRpbmc6IHZhcigtLXNiYi1zcGFjaW5nLXJlc3BvbnNpdmUteHhzKSB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXhzKTtcbiAgLS1zYmItYWxlcnQtaWNvbi1zaXplOiAje3NiYi5weC10by1yZW0tYnVpbGQoMjApfTtcbiAgLS1zYmItYWxlcnQtY2xvc2UtaWNvbi1tYXJnaW46IHZhcigtLXNiYi1zcGFjaW5nLXJlc3BvbnNpdmUteHhzKTtcbiAgLS1zYmItYWxlcnQtZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0yeCkgdmFyKC0tc2JiLXNwYWNpbmctcmVzcG9uc2l2ZS14cyk7XG4gIC0tc2JiLWFsZXJ0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKFxuICAgIC0tc2JiLWRpc2FibGUtYW5pbWF0aW9uLWR1cmF0aW9uLFxuICAgIHZhcigtLXNiYi1hbmltYXRpb24tZHVyYXRpb24tNngpXG4gICk7XG4gIC0tc2JiLWFsZXJ0LXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjtcbiAgLS1zYmItYWxlcnQtdGl0bGUtbWFyZ2luLWJsb2NrOiAwO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICAtLXNiYi1hbGVydC1pY29uLXNpemU6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgyOCl9O1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIC8vIFVzZSBvdXRsaW5lIGhlcmUgdG8gbm90IGluZmx1ZW5jZSBjb250ZW50IHBvc2l0aW9uLlxuICAgIC8vIER1ZSB0byBvdmVyZmxvdyBoaWRkZW4gb2YgaW5uZXIgZWxlbWVudHMgaXQncyBwbGFjZWQgb24gaG9zdC5cbiAgICBvdXRsaW5lOiB2YXIoLS1zYmItYm9yZGVyLXdpZHRoLTF4KSBzb2xpZCBDYW52YXNUZXh0O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi1hbGVydC1ib3JkZXItcmFkaXVzKTtcbiAgfVxufVxuXG4vLyBCeSBkZWZhdWx0LCB0aGUgb3BlbiBhbmltYXRpb24gaXMgZGlzYWJsZWRcbjpob3N0KDpzdGF0ZShzdGF0ZS1vcGVuaW5nKTpub3QoW2FuaW1hdGlvbj0nb3BlbiddLCBbYW5pbWF0aW9uPSdhbGwnXSkpIHtcbiAgQGluY2x1ZGUgc2JiLmRpc2FibGUtYW5pbWF0aW9uO1xufVxuXG46aG9zdCg6c3RhdGUoc3RhdGUtY2xvc2luZyk6bm90KFthbmltYXRpb249J2Nsb3NlJ10sIFthbmltYXRpb249J2FsbCddKSkge1xuICBAaW5jbHVkZSBzYmIuZGlzYWJsZS1hbmltYXRpb247XG59XG5cbjpob3N0KFtzaXplPSdzJ10pIHtcbiAgLS1zYmItYWxlcnQtZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xeCkgdmFyKC0tc2JiLXNwYWNpbmctcmVzcG9uc2l2ZS14eHMpO1xuICAtLXNiYi1hbGVydC1jbG9zZS1pY29uLW1hcmdpbjogdmFyKC0tc2JiLXNwYWNpbmctcmVzcG9uc2l2ZS14eHhzKTtcbn1cblxuOmhvc3QoW3NpemU9J2wnXSkge1xuICAtLXNiYi1hbGVydC1pY29uLXNpemU6IHZhcigtLXNiYi1zaXplLWljb24tdWktc21hbGwpO1xuICAtLXNiYi1hbGVydC10aXRsZS1tYXJnaW4tYmxvY2s6IDAgdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICAtLXNiYi1hbGVydC1pY29uLXNpemU6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgzNCl9O1xuICB9XG59XG5cbjpob3N0KDpub3QoOnN0YXRlKGRhcmspKSkge1xuICAtLXNiYi1mb2N1cy1vdXRsaW5lLWNvbG9yOiB2YXIoLS1zYmItZm9jdXMtb3V0bGluZS1jb2xvci1kYXJrKTtcbn1cblxuLnNiYi1hbGVydF9fdHJhbnNpdGlvbi13cmFwcGVyIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAjeyRvcGVuLWFuaW0tcm93cy1mcm9tfTtcbiAgb3BhY2l0eTogI3skb3Blbi1hbmltLW9wYWNpdHktZnJvbX07XG5cbiAgOmhvc3QoOmlzKDpzdGF0ZShzdGF0ZS1vcGVuZWQpLCA6c3RhdGUoc3RhdGUtY2xvc2luZykpKSAmIHtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6ICN7JG9wZW4tYW5pbS1yb3dzLXRvfTtcbiAgICBvcGFjaXR5OiAjeyRvcGVuLWFuaW0tb3BhY2l0eS10b307XG4gIH1cblxuICA6aG9zdCg6c3RhdGUoc3RhdGUtb3BlbmluZykpICYge1xuICAgIGFuaW1hdGlvbi1uYW1lOiBvcGVuLCBvcGVuLW9wYWNpdHk7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1zYmItYWxlcnQtYW5pbWF0aW9uLWR1cmF0aW9uKTtcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1zYmItYWxlcnQtdGltaW5nLWZ1bmN0aW9uKTtcbiAgICBhbmltYXRpb24tZGVsYXk6IDBzLCB2YXIoLS1zYmItYWxlcnQtYW5pbWF0aW9uLWR1cmF0aW9uKTtcbiAgfVxuXG4gIDpob3N0KDpzdGF0ZShzdGF0ZS1jbG9zaW5nKSkgJiB7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICBuYW1lOiBjbG9zZS1vcGFjaXR5LCBjbG9zZTtcbiAgICAgIGZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgICBkdXJhdGlvbjogdmFyKC0tc2JiLWFsZXJ0LWFuaW1hdGlvbi1kdXJhdGlvbik7XG4gICAgICB0aW1pbmctZnVuY3Rpb246IHZhcigtLXNiYi1hbGVydC10aW1pbmctZnVuY3Rpb24pO1xuICAgICAgZGVsYXk6IDBzLCB2YXIoLS1zYmItZGlzYWJsZS1hbmltYXRpb24tZHVyYXRpb24sIHZhcigtLXNiYi1hbmltYXRpb24tZHVyYXRpb24tMngpKTtcbiAgICB9XG4gIH1cbn1cblxuLnNiYi1hbGVydF9fdHJhbnNpdGlvbi1zdWItd3JhcHBlciB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5zYmItYWxlcnQge1xuICBAaW5jbHVkZSBzYmIudGV4dC1zLS1yZWd1bGFyO1xuXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc2JiLWFsZXJ0LWdhcCk7XG4gIG1pbi13aWR0aDogZml0LWNvbnRlbnQ7XG4gIHBhZGRpbmc6IHZhcigtLXNiYi1hbGVydC1wYWRkaW5nKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29sb3I6IHZhcigtLXNiYi1hbGVydC1jb2xvcik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1hbGVydC1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2JiLWFsZXJ0LWJvcmRlci1yYWRpdXMpO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogc21hbGwpIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG87XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIH1cbn1cblxuLnNiYi1hbGVydF9faWNvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgcGFkZGluZy1ibG9jazogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuICBtaW4td2lkdGg6IHZhcigtLXNiYi1hbGVydC1pY29uLXNpemUpO1xuXG4gIC0tc2JiLWljb24tc3ZnLXdpZHRoOiB2YXIoLS1zYmItYWxlcnQtaWNvbi1zaXplKTtcbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiB2YXIoLS1zYmItYWxlcnQtaWNvbi1zaXplKTtcbn1cblxuLnNiYi1hbGVydF9fY29udGVudCB7XG4gIC8vIEFzIHRoZSBiYWNrZ3JvdW5kIHR1cm5zIHdoaXRlLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFsbCBjb250ZW50IGlzIGRpc3BsYXllZCBpbiBsaWdodCBtb2RlLlxuICBjb2xvci1zY2hlbWU6IG9ubHkgbGlnaHQ7XG4gIG9yZGVyOiAzO1xuICBncmlkLWNvbHVtbjogMSAvIDM7XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBzbWFsbCkge1xuICAgIG9yZGVyOiBpbml0aWFsO1xuICAgIGdyaWQtY29sdW1uLXN0YXJ0OiBpbml0aWFsO1xuICAgIGdyaWQtY29sdW1uLWVuZDogaW5pdGlhbDtcbiAgfVxufVxuXG4uc2JiLWFsZXJ0X19jb250ZW50LXNsb3Qge1xuICAvLyBSZXNldCBwYXJhZ3JhcGggc3R5bGVzXG4gIGRpc3BsYXk6IGlubGluZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG4uc2JiLWFsZXJ0X19jbG9zZS1idXR0b24td3JhcHBlciB7XG4gIC8vIEFzIHRoZSBiYWNrZ3JvdW5kIHR1cm5zIHdoaXRlLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBidXR0b24gaXMgZGlzcGxheWVkIGluIGxpZ2h0IG1vZGUuXG4gIGNvbG9yLXNjaGVtZTogb25seSBsaWdodDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uc2JiLWFsZXJ0X19jbG9zZS1idXR0b24ge1xuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IHNtYWxsKSB7XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tc2JiLWFsZXJ0LWNsb3NlLWljb24tbWFyZ2luKTtcbiAgfVxufVxuXG4uc2JiLWFsZXJ0X19jbG9zZS1idXR0b24tZGl2aWRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBzbWFsbCkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gKHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTF4KSAqIDIpKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIG9wZW4ge1xuICBmcm9tIHtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6ICN7JG9wZW4tYW5pbS1yb3dzLWZyb219O1xuICB9XG5cbiAgdG8ge1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogI3skb3Blbi1hbmltLXJvd3MtdG99O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgb3Blbi1vcGFjaXR5IHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogI3skb3Blbi1hbmltLW9wYWNpdHktZnJvbX07XG4gIH1cblxuICB0byB7XG4gICAgb3BhY2l0eTogI3skb3Blbi1hbmltLW9wYWNpdHktdG99O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgY2xvc2Uge1xuICBmcm9tIHtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6ICN7JG9wZW4tYW5pbS1yb3dzLXRvfTtcbiAgfVxuXG4gIHRvIHtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6ICN7JG9wZW4tYW5pbS1yb3dzLWZyb219O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgY2xvc2Utb3BhY2l0eSB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6ICN7JG9wZW4tYW5pbS1vcGFjaXR5LXRvfTtcbiAgfVxuXG4gIHRvIHtcbiAgICBvcGFjaXR5OiAjeyRvcGVuLWFuaW0tb3BhY2l0eS1mcm9tfTtcbiAgfVxufVxuXG46OnNsb3R0ZWQoc2JiLXRpdGxlKSB7XG4gIC8vIE92ZXJ3cml0ZSBzYmItdGl0bGUgZGVmYXVsdCBtYXJnaW5cbiAgbWFyZ2luLWJsb2NrOiB2YXIoLS1zYmItYWxlcnQtdGl0bGUtbWFyZ2luLWJsb2NrKTtcbn1cbiIsImltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG4gIHVuc2FmZUNTUyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJUcmFuc3BhcmVudEJ1dHRvbkVsZW1lbnQgfSBmcm9tICcuLi8uLi9idXR0b24ucHVyZS50cyc7XG5pbXBvcnQge1xuICBib3hTaXppbmdTdHlsZXMsXG4gIGkxOG5DbG9zZUFsZXJ0LFxuICBpc0xlYW4sXG4gIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uLFxuICBTYmJEYXJrTW9kZUNvbnRyb2xsZXIsXG4gIHR5cGUgU2JiRWxlbWVudFR5cGUsXG4gIFNiYkxhbmd1YWdlQ29udHJvbGxlcixcbiAgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQsXG4gIFNiYlJlYWRvbmx5TWl4aW4sXG59IGZyb20gJy4uLy4uL2NvcmUudHMnO1xuaW1wb3J0IHsgU2JiRGl2aWRlckVsZW1lbnQgfSBmcm9tICcuLi8uLi9kaXZpZGVyLnB1cmUudHMnO1xuaW1wb3J0IHsgU2JiSWNvbk5hbWVNaXhpbiB9IGZyb20gJy4uLy4uL2ljb24ucHVyZS50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkxpbmtFbGVtZW50IH0gZnJvbSAnLi4vLi4vbGluay5wdXJlLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiVGl0bGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vdGl0bGUucHVyZS50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2FsZXJ0LnNjc3M/aW5saW5lJztcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBtZXNzYWdlcyB3aGljaCByZXF1aXJlIHVzZXIncyBhdHRlbnRpb24uXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY29udGVudCB0byB0aGUgYHNiYi1hbGVydGAuIEF0IGEgbWluaW11bSBhbiBgc2JiLXRpdGxlYCBlbGVtZW50IGFuZCBhIGRlc2NyaXB0aXZlIHRleHQgc2hvdWxkIGJlIHVzZWQuXG4gKiBAc2xvdCBpY29uIC0gU2hvdWxkIGJlIGEgYHNiYi1pY29uYCB3aGljaCBpcyBkaXNwbGF5ZWQgbmV4dCB0byB0aGUgdGl0bGUuIFN0eWxpbmcgaXMgb3B0aW1pemVkIGZvciBpY29ucyBvZiB0eXBlIEhJTS1DVVMuXG4gKiBAc2xvdCB0aXRsZSAtIFNsb3QgZm9yIHRoZSB0aXRsZS4gRm9yIHRoZSBzdGFuZGFyZCBgc2JiLXRpdGxlYCBlbGVtZW50LCB0aGUgc2xvdCBpcyBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIHdoZW4gc2xvdHRlZCBpbiB0aGUgdW5uYW1lZCBzbG90LlxuICovXG5leHBvcnQgY2xhc3MgU2JiQWxlcnRFbGVtZW50IGV4dGVuZHMgU2JiSWNvbk5hbWVNaXhpbihTYmJSZWFkb25seU1peGluKFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50KSkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLWFsZXJ0JztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBlbGVtZW50RGVwZW5kZW5jaWVzOiBTYmJFbGVtZW50VHlwZVtdID0gW1xuICAgIFNiYlRyYW5zcGFyZW50QnV0dG9uRWxlbWVudCxcbiAgICBTYmJEaXZpZGVyRWxlbWVudCxcbiAgXTtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGJlZm9yZW9wZW46ICdiZWZvcmVvcGVuJyxcbiAgICBvcGVuOiAnb3BlbicsXG4gICAgYmVmb3JlY2xvc2U6ICdiZWZvcmVjbG9zZScsXG4gICAgY2xvc2U6ICdjbG9zZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gY2hvb3NlIGJldHdlZW4gYHNgLCBgbWAgb3IgYGxgIHNpemUuXG4gICAqIEBkZWZhdWx0ICdtJyAvICdzJyAobGVhbilcbiAgICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIHNpemU6ICdzJyB8ICdtJyB8ICdsJyA9IGlzTGVhbigpID8gJ3MnIDogJ20nO1xuXG4gIC8qKiBUaGUgZW5hYmxlZCBhbmltYXRpb25zLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBhbmltYXRpb246ICdvcGVuJyB8ICdjbG9zZScgfCAnYWxsJyB8ICdub25lJyA9ICdhbGwnO1xuXG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfZGFya01vZGVDb250cm9sbGVyID0gbmV3IFNiYkRhcmtNb2RlQ29udHJvbGxlcih0aGlzLCAoKSA9PiB7XG4gICAgdGhpcy5fc3luY0xpbmtzKCk7XG4gICAgdGhpcy5fY29uZmlndXJlVGl0bGUoKTtcbiAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTtcbiAgfSk7XG5cbiAgLyoqIE9wZW4gdGhlIGFsZXJ0LiAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuXG4gICAgaWYgKCF0aGlzLmRpc3BhdGNoQmVmb3JlT3BlbkV2ZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgYWxlcnQuICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcgJiYgdGhpcy5kaXNwYXRjaEJlZm9yZUNsb3NlRXZlbnQoKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcblxuICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgY2xvc2VkYCBzdGF0ZS5cbiAgICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnc2l6ZScpKSB7XG4gICAgICB0aGlzLl9jb25maWd1cmVUaXRsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1plcm9BbmltYXRpb25EdXJhdGlvbih0aGlzLCAnLS1zYmItYWxlcnQtYW5pbWF0aW9uLWR1cmF0aW9uJyk7XG4gIH1cblxuICBwcml2YXRlIF9vbkFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnICYmIGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuLW9wYWNpdHknKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSAnY2xvc2luZycgJiYgZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJykge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIHRoaXMuZGlzcGF0Y2hPcGVuRXZlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNsb3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHRoaXMuZGlzcGF0Y2hDbG9zZUV2ZW50KCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlbW92ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNsb3RjaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fc3luY0xpbmtzKCk7XG5cbiAgICBjb25zdCB0aXRsZSA9IEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikuZmluZCgoZWwpID0+IGVsLmxvY2FsTmFtZSA9PT0gJ3NiYi10aXRsZScpO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgdGl0bGUuc2xvdCA9ICd0aXRsZSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3luY0xpbmtzKCk6IHZvaWQge1xuICAgIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiTGlua0VsZW1lbnQ+KCdzYmItbGluaycpID8/IFtdKS5mb3JFYWNoKChsaW5rKSA9PiB7XG4gICAgICBjdXN0b21FbGVtZW50cy51cGdyYWRlKGxpbmspO1xuICAgICAgbGluay5uZWdhdGl2ZSA9IHRoaXMuX2lzTGlnaHRNb2RlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWd1cmVUaXRsZSgpOiB2b2lkIHtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMucXVlcnlTZWxlY3Rvcj8uPFNiYlRpdGxlRWxlbWVudD4oJ3NiYi10aXRsZScpO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgY3VzdG9tRWxlbWVudHMudXBncmFkZSh0aXRsZSk7XG4gICAgICB0aXRsZS5uZWdhdGl2ZSA9IHRoaXMuX2lzTGlnaHRNb2RlKCk7XG4gICAgICB0aXRsZS52aXN1YWxMZXZlbCA9IHRoaXMuc2l6ZSA9PT0gJ2wnID8gJzMnIDogJzUnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzTGlnaHRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5fZGFya01vZGVDb250cm9sbGVyLm1hdGNoZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXJJY29uTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXBlci5yZW5kZXJJY29uTmFtZSgpIHx8ICdpbmZvJztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1hbGVydF9fdHJhbnNpdGlvbi13cmFwcGVyXCIgQGFuaW1hdGlvbmVuZD0ke3RoaXMuX29uQW5pbWF0aW9uRW5kfT5cbiAgICAgICAgPCEtLSBzdWIgd3JhcHBlciBuZWVkZWQgdG8gcHJvcGVybHkgc3VwcG9ydCBmYWRlIGluIGFuaW1hdGlvbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1hbGVydF9fdHJhbnNpdGlvbi1zdWItd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItYWxlcnRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWFsZXJ0X19pY29uXCI+ICR7dGhpcy5yZW5kZXJJY29uU2xvdCgpfSA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1hbGVydF9fY29udGVudFwiPlxuICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwidGl0bGVcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX2NvbmZpZ3VyZVRpdGxlfT48L3Nsb3Q+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwic2JiLWFsZXJ0X19jb250ZW50LXNsb3RcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX2hhbmRsZVNsb3RjaGFuZ2V9Pjwvc2xvdD5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgJHshdGhpcy5yZWFkT25seVxuICAgICAgICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItYWxlcnRfX2Nsb3NlLWJ1dHRvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c2JiLWRpdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiXG4gICAgICAgICAgICAgICAgICAgID9uZWdhdGl2ZT0ke3RoaXMuX2lzTGlnaHRNb2RlKCl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLWFsZXJ0X19jbG9zZS1idXR0b24tZGl2aWRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zYmItZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgIDxzYmItdHJhbnNwYXJlbnQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgID9uZWdhdGl2ZT0ke3RoaXMuX2lzTGlnaHRNb2RlKCl9XG4gICAgICAgICAgICAgICAgICAgIHNpemU9JHt0aGlzLnNpemUgPT09ICdsJyA/ICdtJyA6IHRoaXMuc2l6ZX1cbiAgICAgICAgICAgICAgICAgICAgaWNvbi1uYW1lPVwiY3Jvc3Mtc21hbGxcIlxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsb3NlKCl9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9JHtpMThuQ2xvc2VBbGVydFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItYWxlcnRfX2Nsb3NlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICA+PC9zYmItdHJhbnNwYXJlbnQtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItYWxlcnQnOiBTYmJBbGVydEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDb0NhLHlCQUFlO21CQUFTLGlCQUFpQixpQkFBaUIsd0JBQXdCLENBQUM7Ozs7Ozs7Y0FBbkYsd0JBQXdCLFlBQTJEOzs7QUFrQmpELFNBQUEsd0JBQUEsa0JBQUEsTUFBQSxvQkFBd0IsUUFBUSxHQUFHLE1BQU0sSUFBRztBQUc1QyxTQUFBLDhCQUFBLGtCQUFBLE1BQUEsd0JBQUEsRUFBQSxrQkFBQSxNQUFBLHlCQUErQyxNQUFLO0FBRXpGLFFBQUEsYUFBUyxrQkFBQSxNQUFBLDZCQUFBLEVBQUcsSUFBSSxzQkFBc0IsS0FBSztBQUMzQyxRQUFBLHNCQUFzQixJQUFJLHNCQUFzQixZQUFXO0FBQ2pFLFNBQUssWUFBWTtBQUNqQixTQUFLLGlCQUFpQjtBQUN0QixTQUFLLGVBQWU7S0FDcEI7Ozs7dUJBVkQsU0FBUyxFQUFFLFNBQVMsTUFBTSxDQUFDLENBQUE7NEJBRzNCLFNBQVMsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUFBO0FBSEMsZ0JBQUEsTUFBQSxNQUFBLGtCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsVUFBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFJLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBSixPQUFJOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEsb0JBQUEsd0JBQUE7QUFHcEIsZ0JBQUEsTUFBQSxNQUFBLHVCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsZUFBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFTLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBVCxZQUFTOztLQUFBO0lBQUEsVUFBQTtJ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