@sbb-esta/lyne-elements-experimental 2.8.0 → 2.10.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 (106) hide show
  1. package/custom-elements.json +35 -35
  2. package/development/journey-summary/{journey-summary.d.ts → journey-summary.component.d.ts} +1 -1
  3. package/development/journey-summary/journey-summary.component.d.ts.map +1 -0
  4. package/development/journey-summary/journey-summary.component.js +297 -0
  5. package/development/journey-summary.d.ts +1 -1
  6. package/development/journey-summary.d.ts.map +1 -1
  7. package/development/journey-summary.js +1 -1
  8. package/{pearl-chain/pearl-chain.d.ts → development/pearl-chain/pearl-chain.component.d.ts} +1 -1
  9. package/development/pearl-chain/pearl-chain.component.d.ts.map +1 -0
  10. package/development/pearl-chain/{pearl-chain.js → pearl-chain.component.js} +1 -1
  11. package/{pearl-chain-time/pearl-chain-time.d.ts → development/pearl-chain-time/pearl-chain-time.component.d.ts} +1 -1
  12. package/development/pearl-chain-time/pearl-chain-time.component.d.ts.map +1 -0
  13. package/development/pearl-chain-time/{pearl-chain-time.js → pearl-chain-time.component.js} +1 -1
  14. package/development/pearl-chain-time.d.ts +1 -1
  15. package/development/pearl-chain-time.d.ts.map +1 -1
  16. package/development/pearl-chain-time.js +1 -1
  17. package/development/pearl-chain-vertical/{pearl-chain-vertical.d.ts → pearl-chain-vertical.component.d.ts} +1 -1
  18. package/development/pearl-chain-vertical/pearl-chain-vertical.component.d.ts.map +1 -0
  19. package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +45 -0
  20. package/development/pearl-chain-vertical-item/{pearl-chain-vertical-item.d.ts → pearl-chain-vertical-item.component.d.ts} +1 -1
  21. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts.map +1 -0
  22. package/development/pearl-chain-vertical-item/{pearl-chain-vertical-item.js → pearl-chain-vertical-item.component.js} +1 -1
  23. package/development/pearl-chain-vertical-item.d.ts +1 -1
  24. package/development/pearl-chain-vertical-item.d.ts.map +1 -1
  25. package/development/pearl-chain-vertical-item.js +1 -1
  26. package/development/pearl-chain-vertical.d.ts +1 -1
  27. package/development/pearl-chain-vertical.d.ts.map +1 -1
  28. package/development/pearl-chain-vertical.js +1 -1
  29. package/development/pearl-chain.d.ts +1 -1
  30. package/development/pearl-chain.d.ts.map +1 -1
  31. package/development/pearl-chain.js +1 -1
  32. package/development/timetable-duration/{timetable-duration.d.ts → timetable-duration.component.d.ts} +1 -1
  33. package/development/timetable-duration/timetable-duration.component.d.ts.map +1 -0
  34. package/development/timetable-duration/timetable-duration.component.js +119 -0
  35. package/development/timetable-duration.d.ts +1 -1
  36. package/development/timetable-duration.d.ts.map +1 -1
  37. package/development/timetable-duration.js +1 -1
  38. package/development/timetable-row/{timetable-row.d.ts → timetable-row.component.d.ts} +1 -1
  39. package/development/timetable-row/timetable-row.component.d.ts.map +1 -0
  40. package/development/timetable-row/timetable-row.component.js +820 -0
  41. package/development/timetable-row.d.ts +1 -1
  42. package/development/timetable-row.d.ts.map +1 -1
  43. package/development/timetable-row.js +1 -1
  44. package/index.d.ts +7 -7
  45. package/index.js +7 -7
  46. package/journey-summary/{journey-summary.d.ts → journey-summary.component.d.ts} +1 -1
  47. package/journey-summary/journey-summary.component.d.ts.map +1 -0
  48. package/journey-summary.d.ts +1 -1
  49. package/journey-summary.d.ts.map +1 -1
  50. package/journey-summary.js +1 -1
  51. package/package.json +2 -2
  52. package/{development/pearl-chain/pearl-chain.d.ts → pearl-chain/pearl-chain.component.d.ts} +1 -1
  53. package/pearl-chain/pearl-chain.component.d.ts.map +1 -0
  54. package/{development/pearl-chain-time/pearl-chain-time.d.ts → pearl-chain-time/pearl-chain-time.component.d.ts} +1 -1
  55. package/pearl-chain-time/pearl-chain-time.component.d.ts.map +1 -0
  56. package/pearl-chain-time.d.ts +1 -1
  57. package/pearl-chain-time.d.ts.map +1 -1
  58. package/pearl-chain-time.js +1 -1
  59. package/pearl-chain-vertical/{pearl-chain-vertical.d.ts → pearl-chain-vertical.component.d.ts} +1 -1
  60. package/pearl-chain-vertical/pearl-chain-vertical.component.d.ts.map +1 -0
  61. package/pearl-chain-vertical-item/{pearl-chain-vertical-item.d.ts → pearl-chain-vertical-item.component.d.ts} +1 -1
  62. package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts.map +1 -0
  63. package/pearl-chain-vertical-item.d.ts +1 -1
  64. package/pearl-chain-vertical-item.d.ts.map +1 -1
  65. package/pearl-chain-vertical-item.js +1 -1
  66. package/pearl-chain-vertical.d.ts +1 -1
  67. package/pearl-chain-vertical.d.ts.map +1 -1
  68. package/pearl-chain-vertical.js +1 -1
  69. package/pearl-chain.d.ts +1 -1
  70. package/pearl-chain.d.ts.map +1 -1
  71. package/pearl-chain.js +1 -1
  72. package/timetable-duration/{timetable-duration.d.ts → timetable-duration.component.d.ts} +1 -1
  73. package/timetable-duration/timetable-duration.component.d.ts.map +1 -0
  74. package/timetable-duration.d.ts +1 -1
  75. package/timetable-duration.d.ts.map +1 -1
  76. package/timetable-duration.js +1 -1
  77. package/timetable-row/{timetable-row.d.ts → timetable-row.component.d.ts} +1 -1
  78. package/timetable-row/timetable-row.component.d.ts.map +1 -0
  79. package/timetable-row/{timetable-row.js → timetable-row.component.js} +7 -7
  80. package/timetable-row.d.ts +1 -1
  81. package/timetable-row.d.ts.map +1 -1
  82. package/timetable-row.js +1 -1
  83. package/development/journey-summary/journey-summary.d.ts.map +0 -1
  84. package/development/journey-summary/journey-summary.js +0 -297
  85. package/development/pearl-chain/pearl-chain.d.ts.map +0 -1
  86. package/development/pearl-chain-time/pearl-chain-time.d.ts.map +0 -1
  87. package/development/pearl-chain-vertical/pearl-chain-vertical.d.ts.map +0 -1
  88. package/development/pearl-chain-vertical/pearl-chain-vertical.js +0 -45
  89. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.d.ts.map +0 -1
  90. package/development/timetable-duration/timetable-duration.d.ts.map +0 -1
  91. package/development/timetable-duration/timetable-duration.js +0 -119
  92. package/development/timetable-row/timetable-row.d.ts.map +0 -1
  93. package/development/timetable-row/timetable-row.js +0 -820
  94. package/journey-summary/journey-summary.d.ts.map +0 -1
  95. package/pearl-chain/pearl-chain.d.ts.map +0 -1
  96. package/pearl-chain-time/pearl-chain-time.d.ts.map +0 -1
  97. package/pearl-chain-vertical/pearl-chain-vertical.d.ts.map +0 -1
  98. package/pearl-chain-vertical-item/pearl-chain-vertical-item.d.ts.map +0 -1
  99. package/timetable-duration/timetable-duration.d.ts.map +0 -1
  100. package/timetable-row/timetable-row.d.ts.map +0 -1
  101. /package/journey-summary/{journey-summary.js → journey-summary.component.js} +0 -0
  102. /package/pearl-chain/{pearl-chain.js → pearl-chain.component.js} +0 -0
  103. /package/pearl-chain-time/{pearl-chain-time.js → pearl-chain-time.component.js} +0 -0
  104. /package/pearl-chain-vertical/{pearl-chain-vertical.js → pearl-chain-vertical.component.js} +0 -0
  105. /package/pearl-chain-vertical-item/{pearl-chain-vertical-item.js → pearl-chain-vertical-item.component.js} +0 -0
  106. /package/timetable-duration/{timetable-duration.js → timetable-duration.component.js} +0 -0
@@ -0,0 +1,820 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
+ import { __runInitializers, __esDecorate } from "tslib";
9
+ import { SbbLanguageController } from "@sbb-esta/lyne-elements/core/controllers.js";
10
+ import { defaultDateAdapter } from "@sbb-esta/lyne-elements/core/datetime.js";
11
+ import { forceType } from "@sbb-esta/lyne-elements/core/decorators.js";
12
+ import { setOrRemoveAttribute } from "@sbb-esta/lyne-elements/core/dom.js";
13
+ import { i18nFromPlatform, i18nDeparture, i18nMeansOfTransport, i18nDirection, i18nRealTimeInfo, i18nSupersaver, i18nTransferProcedures, i18nTransferProcedure, i18nArrival, i18nClass, i18nOccupancy, i18nTravelhints, i18nTripDuration, i18nNew, i18nTripQuayChange } from "@sbb-esta/lyne-elements/core/i18n.js";
14
+ import { css, LitElement, nothing, html } from "lit";
15
+ import { customElement, property } from "lit/decorators.js";
16
+ import { removeTimezoneFromISOTimeString, durationToTime } from "../core/datetime.js";
17
+ import { isRideLeg, getDepartureArrivalTimeAttribute } from "../core/timetable.js";
18
+ import "@sbb-esta/lyne-elements/card.js";
19
+ import "@sbb-esta/lyne-elements/icon.js";
20
+ import "@sbb-esta/lyne-elements/timetable-occupancy.js";
21
+ import "../pearl-chain-time.js";
22
+ import { f as format } from "../format-D0-yhzi4.js";
23
+ const style = css`*,
24
+ ::before,
25
+ ::after {
26
+ box-sizing: border-box;
27
+ }
28
+
29
+ :host {
30
+ --sbb-timetable-row-gap: var(--sbb-spacing-fixed-2x);
31
+ --sbb-timetable-row-height: 1.5625rem;
32
+ --sbb-timetable-row-height-header: 1.25rem;
33
+ --sbb-timetable-row-height-footer: 1rem;
34
+ --sbb-timetable-row-skeleton-pulse-duration: 1800ms;
35
+ display: block;
36
+ }
37
+
38
+ :host([disable-animation]) {
39
+ --sbb-timetable-row-skeleton-pulse-duration: 0;
40
+ }
41
+
42
+ .sbb-timetable__row-transport-icon {
43
+ --sbb-icon-svg-width: 1.25rem;
44
+ --sbb-icon-svg-height: 1.25rem;
45
+ }
46
+
47
+ .sbb-travel-hints__item {
48
+ --sbb-icon-svg-height: 0.875rem;
49
+ }
50
+
51
+ .sbb-screen-reader-only {
52
+ border: 0;
53
+ clip: rect(0 0 0 0);
54
+ height: 1px;
55
+ margin: -1px;
56
+ overflow: hidden;
57
+ padding: 0;
58
+ position: absolute;
59
+ white-space: nowrap;
60
+ width: 1px;
61
+ }
62
+
63
+ .sbb-timetable__row--quay {
64
+ margin-inline-end: var(--sbb-spacing-fixed-1x);
65
+ }
66
+
67
+ .sbb-timetable__row--quay-type {
68
+ float: left;
69
+ }
70
+
71
+ ul {
72
+ list-style: none;
73
+ margin: 0;
74
+ padding: 0;
75
+ font-size: inherit;
76
+ display: inline-flex;
77
+ }
78
+
79
+ li {
80
+ display: inline-flex;
81
+ align-self: center;
82
+ }
83
+
84
+ .sbb-timetable__row-transport {
85
+ display: inline-flex;
86
+ align-self: center;
87
+ }
88
+
89
+ .sbb-timetable__row-transportnumber,
90
+ .sbb-timetable__row-time {
91
+ --sbb-text-font-size: var(--sbb-font-size-text-s);
92
+ font-family: var(--sbb-typo-font-family);
93
+ font-weight: normal;
94
+ line-height: var(--sbb-typo-line-height-body-text);
95
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
96
+ font-size: var(--sbb-text-font-size);
97
+ font-weight: bold;
98
+ line-height: unset;
99
+ white-space: nowrap;
100
+ align-self: center;
101
+ }
102
+
103
+ .sbb-timetable__row {
104
+ --sbb-text-font-size: var(--sbb-font-size-text-s);
105
+ font-family: var(--sbb-typo-font-family);
106
+ font-weight: normal;
107
+ line-height: var(--sbb-typo-line-height-body-text);
108
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
109
+ font-size: var(--sbb-text-font-size);
110
+ display: flex;
111
+ flex-direction: column;
112
+ gap: var(--sbb-timetable-row-gap);
113
+ }
114
+
115
+ .sbb-timetable__row-header,
116
+ .sbb-timetable__row-footer {
117
+ animation: none;
118
+ }
119
+
120
+ .sbb-timetable__row-header {
121
+ display: flex;
122
+ gap: var(--sbb-spacing-fixed-2x);
123
+ align-items: center;
124
+ line-height: var(--sbb-timetable-row-height-header);
125
+ }
126
+
127
+ .sbb-timetable__row-details,
128
+ .sbb-timetable__row-hints {
129
+ display: inline-flex;
130
+ gap: var(--sbb-spacing-fixed-1x);
131
+ align-items: center;
132
+ }
133
+
134
+ .sbb-timetable__row-header p {
135
+ overflow: hidden;
136
+ white-space: nowrap;
137
+ text-overflow: ellipsis;
138
+ margin: 0;
139
+ align-self: center;
140
+ }
141
+
142
+ .sbb-timetable__row-footer {
143
+ display: flex;
144
+ flex-wrap: wrap;
145
+ justify-content: space-between;
146
+ align-items: center;
147
+ gap: var(--sbb-spacing-fixed-2x);
148
+ line-height: var(--sbb-timetable-row-height-footer);
149
+ }
150
+ .sbb-timetable__row-footer > span {
151
+ align-self: center;
152
+ }
153
+ .sbb-timetable__row-footer :only-child {
154
+ margin-inline-start: auto;
155
+ }
156
+
157
+ .sbb-timetable__row-quay--changed {
158
+ color: var(--sbb-color-red);
159
+ }
160
+
161
+ .sbb-timetable__row-transport-wrapper,
162
+ .sbb-timetable__row-warning {
163
+ display: inline-flex;
164
+ }
165
+
166
+ .sbb-loading {
167
+ pointer-events: none;
168
+ }
169
+
170
+ .sbb-loading__wrapper {
171
+ display: flex;
172
+ flex-direction: column;
173
+ gap: var(--sbb-spacing-fixed-2x);
174
+ }
175
+
176
+ .sbb-loading__row {
177
+ width: 100%;
178
+ border-radius: var(--sbb-border-radius-1x);
179
+ height: var(--sbb-timetable-row-height);
180
+ }
181
+ @media (min-width: calc(52.5rem)) {
182
+ .sbb-loading__row {
183
+ height: 1.75rem;
184
+ }
185
+ }
186
+ @media (forced-colors: active) {
187
+ .sbb-loading__row {
188
+ border: var(--sbb-border-width-1x) solid ButtonBorder !important;
189
+ }
190
+ }
191
+
192
+ .sbb-loading__row,
193
+ .sbb-loading__badge {
194
+ background: var(--sbb-color-cloud);
195
+ animation: skeleton-pulse var(--sbb-timetable-row-skeleton-pulse-duration) ease-out infinite;
196
+ }
197
+
198
+ .sbb-loading__row:first-of-type {
199
+ height: var(--sbb-timetable-row-height-header);
200
+ width: 50%;
201
+ }
202
+
203
+ .sbb-loading__row:last-of-type {
204
+ height: var(--sbb-timetable-row-height-footer);
205
+ }
206
+
207
+ .sbb-loading__badge {
208
+ margin-inline: auto calc(var(--sbb-spacing-fixed-3x) * -1);
209
+ padding-inline-end: var(--sbb-spacing-fixed-6x);
210
+ border-end-start-radius: var(--sbb-border-radius-4x);
211
+ transform: skew(16deg, 0deg);
212
+ width: 7.1875rem;
213
+ height: 1.25rem;
214
+ }
215
+
216
+ @keyframes skeleton-pulse {
217
+ 0% {
218
+ background: var(--sbb-color-cloud);
219
+ }
220
+ 17% {
221
+ background: var(--sbb-color-cloud);
222
+ }
223
+ 50% {
224
+ background: var(--sbb-color-milk);
225
+ }
226
+ 67% {
227
+ background: var(--sbb-color-milk);
228
+ }
229
+ 100% {
230
+ background: var(--sbb-color-cloud);
231
+ }
232
+ }`;
233
+ const renderIconProduct = (icon, name) => {
234
+ return html`<span class="sbb-timetable__row-transport">
235
+ <sbb-icon name=${icon}></sbb-icon>
236
+ <span class="sbb-screen-reader-only">${name}</span>
237
+ </span>`;
238
+ };
239
+ const renderStringProduct = (vehicleName, line) => {
240
+ const space = ["M", "B", "T"].includes(vehicleName) ? " " : "";
241
+ return html`<span class="sbb-timetable__row-transportnumber">
242
+ ${line !== null ? vehicleName + space + line : vehicleName}
243
+ </span>`;
244
+ };
245
+ const getReachableText = (legs) => {
246
+ var _a, _b, _c;
247
+ return (_c = (_b = (_a = legs == null ? void 0 : legs.find((leg) => {
248
+ var _a2, _b2;
249
+ return (_b2 = (_a2 = leg.serviceJourney) == null ? void 0 : _a2.serviceAlteration) == null ? void 0 : _b2.reachableText;
250
+ })) == null ? void 0 : _a.serviceJourney) == null ? void 0 : _b.serviceAlteration) == null ? void 0 : _c.reachableText;
251
+ };
252
+ const getDelayText = (legs) => {
253
+ var _a, _b, _c;
254
+ return (_c = (_b = (_a = legs == null ? void 0 : legs.find((leg) => {
255
+ var _a2, _b2;
256
+ return (_b2 = (_a2 = leg.serviceJourney) == null ? void 0 : _a2.serviceAlteration) == null ? void 0 : _b2.delayText;
257
+ })) == null ? void 0 : _a.serviceJourney) == null ? void 0 : _b.serviceAlteration) == null ? void 0 : _c.delayText;
258
+ };
259
+ const getRedirectedText = (legs) => {
260
+ var _a, _b, _c;
261
+ return (_c = (_b = (_a = legs == null ? void 0 : legs.find((leg) => {
262
+ var _a2, _b2;
263
+ return !!((_b2 = (_a2 = leg.serviceJourney) == null ? void 0 : _a2.serviceAlteration) == null ? void 0 : _b2.redirectedText);
264
+ })) == null ? void 0 : _a.serviceJourney) == null ? void 0 : _b.serviceAlteration) == null ? void 0 : _c.redirectedText;
265
+ };
266
+ const getUnplannedStop = (legs) => {
267
+ var _a, _b, _c;
268
+ return (_c = (_b = (_a = legs == null ? void 0 : legs.find((leg) => {
269
+ var _a2, _b2;
270
+ return !!((_b2 = (_a2 = leg.serviceJourney) == null ? void 0 : _a2.serviceAlteration) == null ? void 0 : _b2.unplannedStopPointsText);
271
+ })) == null ? void 0 : _a.serviceJourney) == null ? void 0 : _b.serviceAlteration) == null ? void 0 : _c.unplannedStopPointsText;
272
+ };
273
+ const sortSituation = (situations) => {
274
+ var _a;
275
+ const priorities = {
276
+ DISTURBANCE: 0,
277
+ INFORMATION: 1,
278
+ DELAY: 2,
279
+ TRAIN_REPLACEMENT_BY_BUS: 3,
280
+ CONSTRUCTION_SITE: 4,
281
+ END_MESSAGE: 5
282
+ };
283
+ return (_a = [...situations]) == null ? void 0 : _a.sort((a, b) => priorities[a.cause] - priorities[b.cause]);
284
+ };
285
+ const getHimIcon = (situation) => {
286
+ var _a;
287
+ switch (situation == null ? void 0 : situation.cause) {
288
+ case "DISTURBANCE":
289
+ return {
290
+ name: "disruption",
291
+ text: ((_a = situation == null ? void 0 : situation.broadcastMessages) == null ? void 0 : _a.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
292
+ };
293
+ case "INFORMATION":
294
+ return {
295
+ name: "info",
296
+ text: (situation == null ? void 0 : situation.broadcastMessages.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
297
+ };
298
+ case "DELAY":
299
+ return {
300
+ name: "delay",
301
+ text: (situation == null ? void 0 : situation.broadcastMessages.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
302
+ };
303
+ case "TRAIN_REPLACEMENT_BY_BUS":
304
+ return {
305
+ name: "replacementbus",
306
+ text: (situation == null ? void 0 : situation.broadcastMessages.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
307
+ };
308
+ case "CONSTRUCTION_SITE":
309
+ return {
310
+ name: "construction",
311
+ text: (situation == null ? void 0 : situation.broadcastMessages.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
312
+ };
313
+ default:
314
+ return {
315
+ name: "info",
316
+ text: (situation == null ? void 0 : situation.broadcastMessages.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
317
+ };
318
+ }
319
+ };
320
+ const getCus = (trip, currentLanguage) => {
321
+ const { summary, legs } = trip || {};
322
+ const rideLegs = legs == null ? void 0 : legs.filter((leg) => isRideLeg(leg));
323
+ const { tripStatus } = summary || {};
324
+ if ((tripStatus == null ? void 0 : tripStatus.cancelled) || (tripStatus == null ? void 0 : tripStatus.partiallyCancelled))
325
+ return { name: "cancellation", text: tripStatus == null ? void 0 : tripStatus.cancelledText };
326
+ if (getReachableText(rideLegs))
327
+ return { name: "missed-connection", text: getReachableText(rideLegs) };
328
+ if (tripStatus == null ? void 0 : tripStatus.alternative)
329
+ return { name: "alternative", text: tripStatus.alternativeText };
330
+ if (getRedirectedText(rideLegs))
331
+ return { name: "reroute", text: getRedirectedText(rideLegs) };
332
+ if (getUnplannedStop(rideLegs))
333
+ return { name: "add-stop", text: getUnplannedStop(rideLegs) };
334
+ if ((tripStatus == null ? void 0 : tripStatus.delayed) || (tripStatus == null ? void 0 : tripStatus.delayedUnknown))
335
+ return { name: "delay", text: getDelayText(rideLegs) };
336
+ if (tripStatus == null ? void 0 : tripStatus.quayChanged) {
337
+ const departure = rideLegs[0].departure;
338
+ return {
339
+ name: "platform-change",
340
+ text: departure.quayChanged ? departure.quayChangedText : i18nTripQuayChange[currentLanguage]
341
+ };
342
+ }
343
+ return {};
344
+ };
345
+ const findAndReplaceNotice = (notices) => {
346
+ const reservationNotice = ["RR", "RK", "RC", "RL", "RM", "RS", "RU", "XP", "XR", "XT"];
347
+ return notices.reduce((foundNotice, notice) => {
348
+ if (foundNotice)
349
+ return foundNotice;
350
+ if (reservationNotice.includes(notice.name)) {
351
+ return { ...notice, name: "RR" };
352
+ }
353
+ }, void 0);
354
+ };
355
+ const filterNotices = (notices) => {
356
+ const allowedNames = ["Z", "SB", "SZ", "VR", "TG"];
357
+ const filterNotice = notices.filter((notice, index) => {
358
+ return notices.findIndex((n) => n.name === notice.name) === index;
359
+ });
360
+ return filterNotice.filter((notice) => allowedNames.includes(notice.name)).sort((a, b) => allowedNames.indexOf(a.name) - allowedNames.indexOf(b.name));
361
+ };
362
+ const handleNotices = (notices) => {
363
+ const reservationNotice = findAndReplaceNotice(notices);
364
+ const filteredNotices = filterNotices(notices);
365
+ if (reservationNotice === void 0)
366
+ return filteredNotices;
367
+ if (!filteredNotices.length)
368
+ return [reservationNotice];
369
+ if (filteredNotices[0].name === "Z" && filteredNotices[1]) {
370
+ return [filteredNotices[0], reservationNotice, filteredNotices[1]].concat(filteredNotices.slice(2));
371
+ }
372
+ return [reservationNotice, ...filteredNotices];
373
+ };
374
+ let SbbTimetableRowElement = (() => {
375
+ var _trip_accessor_storage, _price_accessor_storage, _disableAnimation_accessor_storage, _boarding_accessor_storage, _loadingTrip_accessor_storage, _a11yFootpath_accessor_storage, _loadingPrice_accessor_storage, _cardActionLabel_accessor_storage, _accessibilityExpanded_accessor_storage, _active_accessor_storage, _a;
376
+ let _classDecorators = [customElement("sbb-timetable-row")];
377
+ let _classDescriptor;
378
+ let _classExtraInitializers = [];
379
+ let _classThis;
380
+ let _classSuper = LitElement;
381
+ let _instanceExtraInitializers = [];
382
+ let _trip_decorators;
383
+ let _trip_initializers = [];
384
+ let _trip_extraInitializers = [];
385
+ let _price_decorators;
386
+ let _price_initializers = [];
387
+ let _price_extraInitializers = [];
388
+ let _disableAnimation_decorators;
389
+ let _disableAnimation_initializers = [];
390
+ let _disableAnimation_extraInitializers = [];
391
+ let _boarding_decorators;
392
+ let _boarding_initializers = [];
393
+ let _boarding_extraInitializers = [];
394
+ let _loadingTrip_decorators;
395
+ let _loadingTrip_initializers = [];
396
+ let _loadingTrip_extraInitializers = [];
397
+ let _a11yFootpath_decorators;
398
+ let _a11yFootpath_initializers = [];
399
+ let _a11yFootpath_extraInitializers = [];
400
+ let _loadingPrice_decorators;
401
+ let _loadingPrice_initializers = [];
402
+ let _loadingPrice_extraInitializers = [];
403
+ let _cardActionLabel_decorators;
404
+ let _cardActionLabel_initializers = [];
405
+ let _cardActionLabel_extraInitializers = [];
406
+ let _accessibilityExpanded_decorators;
407
+ let _accessibilityExpanded_initializers = [];
408
+ let _accessibilityExpanded_extraInitializers = [];
409
+ let _active_decorators;
410
+ let _active_initializers = [];
411
+ let _active_extraInitializers = [];
412
+ let _set_now_decorators;
413
+ _a = class extends _classSuper {
414
+ constructor() {
415
+ super(...arguments);
416
+ __privateAdd(this, _trip_accessor_storage);
417
+ __privateAdd(this, _price_accessor_storage);
418
+ __privateAdd(this, _disableAnimation_accessor_storage);
419
+ __privateAdd(this, _boarding_accessor_storage);
420
+ __privateAdd(this, _loadingTrip_accessor_storage);
421
+ __privateAdd(this, _a11yFootpath_accessor_storage);
422
+ __privateAdd(this, _loadingPrice_accessor_storage);
423
+ __privateAdd(this, _cardActionLabel_accessor_storage);
424
+ __privateAdd(this, _accessibilityExpanded_accessor_storage);
425
+ __privateAdd(this, _active_accessor_storage);
426
+ __privateSet(this, _trip_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _trip_initializers, null)));
427
+ __privateSet(this, _price_accessor_storage, (__runInitializers(this, _trip_extraInitializers), __runInitializers(this, _price_initializers, null)));
428
+ __privateSet(this, _disableAnimation_accessor_storage, (__runInitializers(this, _price_extraInitializers), __runInitializers(this, _disableAnimation_initializers, false)));
429
+ __privateSet(this, _boarding_accessor_storage, (__runInitializers(this, _disableAnimation_extraInitializers), __runInitializers(this, _boarding_initializers, null)));
430
+ __privateSet(this, _loadingTrip_accessor_storage, (__runInitializers(this, _boarding_extraInitializers), __runInitializers(this, _loadingTrip_initializers, false)));
431
+ __privateSet(this, _a11yFootpath_accessor_storage, (__runInitializers(this, _loadingTrip_extraInitializers), __runInitializers(this, _a11yFootpath_initializers, false)));
432
+ __privateSet(this, _loadingPrice_accessor_storage, (__runInitializers(this, _a11yFootpath_extraInitializers), __runInitializers(this, _loadingPrice_initializers, false)));
433
+ __privateSet(this, _cardActionLabel_accessor_storage, (__runInitializers(this, _loadingPrice_extraInitializers), __runInitializers(this, _cardActionLabel_initializers, "")));
434
+ __privateSet(this, _accessibilityExpanded_accessor_storage, (__runInitializers(this, _cardActionLabel_extraInitializers), __runInitializers(this, _accessibilityExpanded_initializers, false)));
435
+ __privateSet(this, _active_accessor_storage, (__runInitializers(this, _accessibilityExpanded_extraInitializers), __runInitializers(this, _active_initializers, false)));
436
+ this._now = (__runInitializers(this, _active_extraInitializers), null);
437
+ this._language = new SbbLanguageController(this);
438
+ }
439
+ /** The trip Prop. */
440
+ get trip() {
441
+ return __privateGet(this, _trip_accessor_storage);
442
+ }
443
+ set trip(value) {
444
+ __privateSet(this, _trip_accessor_storage, value);
445
+ }
446
+ /** The price Prop, which consists of the data for the badge. */
447
+ get price() {
448
+ return __privateGet(this, _price_accessor_storage);
449
+ }
450
+ set price(value) {
451
+ __privateSet(this, _price_accessor_storage, value);
452
+ }
453
+ /** This will be forwarded to the sbb-pearl-chain component - if true the position won't be animated. */
454
+ get disableAnimation() {
455
+ return __privateGet(this, _disableAnimation_accessor_storage);
456
+ }
457
+ set disableAnimation(value) {
458
+ __privateSet(this, _disableAnimation_accessor_storage, value);
459
+ }
460
+ /** This will be forwarded to the notices section */
461
+ get boarding() {
462
+ return __privateGet(this, _boarding_accessor_storage);
463
+ }
464
+ set boarding(value) {
465
+ __privateSet(this, _boarding_accessor_storage, value);
466
+ }
467
+ /**
468
+ * The loading state -
469
+ * when this is true it will be render skeleton with an idling animation
470
+ */
471
+ get loadingTrip() {
472
+ return __privateGet(this, _loadingTrip_accessor_storage);
473
+ }
474
+ set loadingTrip(value) {
475
+ __privateSet(this, _loadingTrip_accessor_storage, value);
476
+ }
477
+ /**
478
+ * The Footpath attribute for rendering different icons
479
+ * true: render a11y-icon
480
+ * false: render walk-icon
481
+ * default: render walk-icon
482
+ */
483
+ get a11yFootpath() {
484
+ return __privateGet(this, _a11yFootpath_accessor_storage);
485
+ }
486
+ set a11yFootpath(value) {
487
+ __privateSet(this, _a11yFootpath_accessor_storage, value);
488
+ }
489
+ /**
490
+ * The loading state -
491
+ * when this is true it will be render skeleton with an idling animation
492
+ */
493
+ get loadingPrice() {
494
+ return __privateGet(this, _loadingPrice_accessor_storage);
495
+ }
496
+ set loadingPrice(value) {
497
+ __privateSet(this, _loadingPrice_accessor_storage, value);
498
+ }
499
+ /**
500
+ * Hidden label for the card action. It overrides the automatically generated accessibility text for the component. Use this prop to provide custom accessibility information for the component.
501
+ */
502
+ get cardActionLabel() {
503
+ return __privateGet(this, _cardActionLabel_accessor_storage);
504
+ }
505
+ set cardActionLabel(value) {
506
+ __privateSet(this, _cardActionLabel_accessor_storage, value);
507
+ }
508
+ /** This will be forwarded to the sbb-card component as aria-expanded. */
509
+ get accessibilityExpanded() {
510
+ return __privateGet(this, _accessibilityExpanded_accessor_storage);
511
+ }
512
+ set accessibilityExpanded(value) {
513
+ __privateSet(this, _accessibilityExpanded_accessor_storage, value);
514
+ }
515
+ /** When this prop is true the sbb-card will be in the active state. */
516
+ get active() {
517
+ return __privateGet(this, _active_accessor_storage);
518
+ }
519
+ set active(value) {
520
+ __privateSet(this, _active_accessor_storage, value);
521
+ }
522
+ /** A configured date which acts as the current date instead of the real current date. Recommended for testing purposes. */
523
+ set now(value) {
524
+ this._now = defaultDateAdapter.getValidDateOrNull(defaultDateAdapter.deserialize(value));
525
+ }
526
+ get now() {
527
+ return this._now ?? /* @__PURE__ */ new Date();
528
+ }
529
+ willUpdate(changedProperties) {
530
+ super.willUpdate(changedProperties);
531
+ if (changedProperties.has("loadingTrip")) {
532
+ setOrRemoveAttribute(this, "role", !this.loadingTrip ? "rowgroup" : null);
533
+ }
534
+ }
535
+ /** The skeleton render function for the loading state */
536
+ _renderSkeleton() {
537
+ return html`
538
+ <sbb-card size="l" class="sbb-loading">
539
+ ${this.loadingPrice ? html`<sbb-card-badge class="sbb-loading__badge"></sbb-card-badge>` : nothing}
540
+ <div class="sbb-loading__wrapper">
541
+ <div class="sbb-loading__row"></div>
542
+ <div class="sbb-loading__row"></div>
543
+ <div class="sbb-loading__row"></div>
544
+ </div>
545
+ </sbb-card>
546
+ `;
547
+ }
548
+ _getRideLegs() {
549
+ var _a2, _b;
550
+ return ((_b = (_a2 = this.trip) == null ? void 0 : _a2.legs) == null ? void 0 : _b.filter((leg) => isRideLeg(leg))) ?? [];
551
+ }
552
+ _getQuayTypeStrings() {
553
+ var _a2, _b;
554
+ if (!((_a2 = this.trip.summary) == null ? void 0 : _a2.product))
555
+ return null;
556
+ const rideLegs = this._getRideLegs();
557
+ const isShort = ((_b = this.trip.summary.product) == null ? void 0 : _b.vehicleMode) === "TRAIN";
558
+ const short = isShort ? rideLegs[0].serviceJourney.quayTypeShortName || "" : rideLegs[0].serviceJourney.quayTypeName || "";
559
+ return {
560
+ long: i18nFromPlatform[this._language.current] + " " + short,
561
+ short
562
+ };
563
+ }
564
+ /** map Quay */
565
+ _renderQuayType() {
566
+ var _a2;
567
+ if (!((_a2 = this.trip.summary) == null ? void 0 : _a2.product))
568
+ return void 0;
569
+ const quayTypeStrings = this._getQuayTypeStrings();
570
+ return html`
571
+ <span class="sbb-timetable__row--quay">
572
+ <span class="sbb-screen-reader-only">${quayTypeStrings == null ? void 0 : quayTypeStrings.long}&nbsp;</span>
573
+ <span class="sbb-timetable__row--quay-type" aria-hidden="true"
574
+ >${quayTypeStrings == null ? void 0 : quayTypeStrings.short}</span
575
+ >
576
+ </span>
577
+ `;
578
+ }
579
+ _handleHimCus(trip) {
580
+ var _a2;
581
+ const { situations } = trip || {};
582
+ const sortedSituations = situations && sortSituation(situations);
583
+ const cus = getCus(trip, this._language.current);
584
+ return {
585
+ cus: ((_a2 = Object.keys(cus)) == null ? void 0 : _a2.length) ? cus : null,
586
+ him: (situations == null ? void 0 : situations.length) ? getHimIcon(sortedSituations[0]) : null
587
+ };
588
+ }
589
+ _getAccessibilityText(trip) {
590
+ var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
591
+ const { summary, legs, notices } = trip || {};
592
+ const { departureWalk, arrivalWalk, departure, arrival, product, direction, occupancy, duration } = summary || {};
593
+ const { departureTimeAttribute, arrivalTimeAttribute } = getDepartureArrivalTimeAttribute(legs, departureWalk || 0, arrivalWalk || 0, this._language.current, this.a11yFootpath);
594
+ const rideLegs = this._getRideLegs();
595
+ const departureTime = (departure == null ? void 0 : departure.time) ? removeTimezoneFromISOTimeString(departure.time) : void 0;
596
+ const arrivalTime = (arrival == null ? void 0 : arrival.time) ? removeTimezoneFromISOTimeString(arrival.time) : void 0;
597
+ const departureWalkText = departureTimeAttribute ? `${departureTimeAttribute.text} ${departureTimeAttribute.duration}, ` : "";
598
+ const arrivalWalkText = arrivalTimeAttribute ? `${arrivalTimeAttribute.text} ${arrivalTimeAttribute.duration}, ` : "";
599
+ const departureTimeText = departureTime ? `${i18nDeparture[this._language.current]}: ${format(departureTime, "HH:mm")}, ` : "";
600
+ const getDepartureQuayText = () => {
601
+ var _a3;
602
+ if (!(departure == null ? void 0 : departure.quayFormatted)) {
603
+ return "";
604
+ }
605
+ const changedQuayPrefix = (departure == null ? void 0 : departure.quayChanged) ? `${i18nNew[this._language.current]} ` : "";
606
+ return `${changedQuayPrefix}${(_a3 = this._getQuayTypeStrings()) == null ? void 0 : _a3.long} ${departure == null ? void 0 : departure.quayFormatted}, `;
607
+ };
608
+ const meansOfTransportText = product && product.vehicleMode ? i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && `${i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}, ` : "";
609
+ const vehicleSubModeText = (product == null ? void 0 : product.vehicleSubModeShortName) ? `${product.vehicleSubModeShortName} ${product.line || ""}, ` : "";
610
+ const directionText = `${i18nDirection[this._language.current]} ${direction}, `;
611
+ const himCus = this._handleHimCus(trip);
612
+ const cusText = ((_a2 = himCus == null ? void 0 : himCus.cus) == null ? void 0 : _a2.text) ? `${i18nRealTimeInfo[this._language.current]}: ${(_b = himCus == null ? void 0 : himCus.cus) == null ? void 0 : _b.text}, ` : "";
613
+ const himText = ((_c = himCus == null ? void 0 : himCus.him) == null ? void 0 : _c.text) ? `${i18nRealTimeInfo[this._language.current]}: ${(_d = himCus == null ? void 0 : himCus.him) == null ? void 0 : _d.text}, ` : "";
614
+ const boardingText = this.boarding ? `${this.boarding.text}, ` : "";
615
+ const priceText = `${((_e = this.price) == null ? void 0 : _e.isDiscount) ? i18nSupersaver[this._language.current] : ""} ${((_f = this.price) == null ? void 0 : _f.text) && ((_g = this.price) == null ? void 0 : _g.price) ? (((_h = this.price) == null ? void 0 : _h.text) || "") + " " + (((_i = this.price) == null ? void 0 : _i.price) || "") + ", " : ""}`;
616
+ const transferProcedures = rideLegs.length > 2 ? `${rideLegs.length - 1} ${i18nTransferProcedures[this._language.current]}, ` : rideLegs.length > 1 ? `${rideLegs.length - 1} ${i18nTransferProcedure[this._language.current]}, ` : "";
617
+ const arrivalTimeText = arrivalTime ? `${i18nArrival[this._language.current]}: ${format(arrivalTime, "HH:mm")}, ` : "";
618
+ let occupancyText = "";
619
+ if (occupancy) {
620
+ if (occupancy.firstClass && occupancy.firstClass !== "UNKNOWN") {
621
+ occupancyText += `${i18nClass.first[this._language.current]} ${(_j = i18nOccupancy[occupancy.firstClass.toLowerCase()]) == null ? void 0 : _j[this._language.current]}.`;
622
+ }
623
+ if (occupancy.secondClass && occupancy.secondClass !== "UNKNOWN") {
624
+ occupancyText += ` ${i18nClass.second[this._language.current]} ${(_k = i18nOccupancy[occupancy.secondClass.toLowerCase()]) == null ? void 0 : _k[this._language.current]}.`;
625
+ }
626
+ }
627
+ const attributes = notices && handleNotices(notices).length && ((_l = handleNotices(notices)) == null ? void 0 : _l.map((notice, index) => {
628
+ var _a3;
629
+ return index < 4 && ((_a3 = notice.text) == null ? void 0 : _a3.template);
630
+ }).join(", ")) + ", ";
631
+ const attributesText = attributes ? `${i18nTravelhints[this._language.current]}: ${attributes}` : "";
632
+ const durationText = !!duration && duration > 0 ? `${i18nTripDuration[this._language.current]} ${durationToTime(duration, this._language.current).long}, ` : "";
633
+ return [
634
+ departureWalkText,
635
+ departureTimeText,
636
+ getDepartureQuayText(),
637
+ meansOfTransportText,
638
+ vehicleSubModeText,
639
+ directionText,
640
+ cusText,
641
+ boardingText,
642
+ priceText,
643
+ cusText ? "" : himText,
644
+ arrivalTimeText,
645
+ arrivalWalkText,
646
+ durationText,
647
+ transferProcedures,
648
+ occupancyText,
649
+ attributesText
650
+ ].map((e) => e == null ? void 0 : e.trim()).filter((e) => e && e.length > 0).join(" ");
651
+ }
652
+ render() {
653
+ var _a2, _b, _c, _d;
654
+ if (this.loadingTrip) {
655
+ return this._renderSkeleton();
656
+ }
657
+ const { legs, id, notices, summary } = this.trip || {};
658
+ const { product, direction, departureWalk, departure, arrival, arrivalWalk, occupancy, duration } = summary || {};
659
+ const himCus = this._handleHimCus(this.trip);
660
+ const hasHimCus = !!himCus.cus || !!himCus.him;
661
+ const noticeAttributes = notices && handleNotices(notices);
662
+ const durationObj = duration ? durationToTime(duration, this._language.current) : null;
663
+ return html`
664
+ <sbb-card size="l" id=${id}>
665
+ <sbb-card-button
666
+ ?active=${this.active}
667
+ aria-expanded=${this.accessibilityExpanded ? "true" : nothing}
668
+ >
669
+ ${this.cardActionLabel ? this.cardActionLabel : this._getAccessibilityText(this.trip)}
670
+ </sbb-card-button>
671
+ ${this.loadingPrice ? html`<sbb-card-badge class="sbb-loading__badge"></sbb-card-badge>` : nothing}
672
+ ${this.price && !this.loadingPrice ? html`<sbb-card-badge color=${this.price.isDiscount ? "charcoal" : "white"}>
673
+ ${this.price.isDiscount ? html`<span aria-hidden="true">
674
+ %<span class="sbb-screen-reader-only"
675
+ >${i18nSupersaver[this._language.current]}</span
676
+ >
677
+ </span>` : nothing}
678
+ ${this.price.text ? html`<span>${this.price.text}</span>` : nothing}
679
+ ${this.price.price ? html`<span>${this.price.price}</span>` : nothing}
680
+ </sbb-card-badge>` : nothing}
681
+ <div class="sbb-timetable__row" role="row">
682
+ <div class="sbb-timetable__row-header" role="gridcell">
683
+ <div class="sbb-timetable__row-details">
684
+ ${(product == null ? void 0 : product.corporateIdentityPictogram) && html`<span class="sbb-timetable__row-transport-wrapper">
685
+ <sbb-icon
686
+ class="sbb-timetable__row-transport-icon"
687
+ name="picto:${product.corporateIdentityPictogram}"
688
+ ></sbb-icon>
689
+ <span class="sbb-screen-reader-only">
690
+ ${product && product.vehicleMode && i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}
691
+ &nbsp;
692
+ </span>
693
+ </span>`}
694
+ ${product && (product.corporateIdentityIcon ? renderIconProduct(product.corporateIdentityIcon, product.name) : product.vehicleSubModeShortName && renderStringProduct(product.vehicleSubModeShortName, product == null ? void 0 : product.line))}
695
+ </div>
696
+ ${direction ? html`<p>${`${i18nDirection[this._language.current]} ${direction}`}</p>` : nothing}
697
+ </div>
698
+ <sbb-pearl-chain-time
699
+ role="gridcell"
700
+ .legs=${legs}
701
+ .departureTime=${departure == null ? void 0 : departure.time}
702
+ .arrivalTime=${arrival == null ? void 0 : arrival.time}
703
+ .departureWalk=${departureWalk}
704
+ .arrivalWalk=${arrivalWalk}
705
+ ?disable-animation=${this.disableAnimation}
706
+ ?a11y-footpath=${this.a11yFootpath}
707
+ .now=${this.now}
708
+ ></sbb-pearl-chain-time>
709
+ <div class="sbb-timetable__row-footer" role="gridcell">
710
+ ${product && (departure == null ? void 0 : departure.quayFormatted) ? html`<span
711
+ class=${(departure == null ? void 0 : departure.quayChanged) ? `sbb-timetable__row-quay--changed` : nothing}
712
+ >
713
+ <span class="sbb-screen-reader-only">
714
+ ${`${i18nDeparture[this._language.current]} ${(departure == null ? void 0 : departure.quayChanged) ? i18nNew[this._language.current] : ""}`}
715
+ &nbsp;
716
+ </span>
717
+ ${this._renderQuayType()} ${departure == null ? void 0 : departure.quayFormatted}
718
+ </span>` : nothing}
719
+ ${(occupancy == null ? void 0 : occupancy.firstClass) && (occupancy == null ? void 0 : occupancy.firstClass) !== "UNKNOWN" || (occupancy == null ? void 0 : occupancy.secondClass) && occupancy.secondClass !== "UNKNOWN" ? html`<sbb-timetable-occupancy
720
+ .firstClassOccupancy=${(_a2 = occupancy == null ? void 0 : occupancy.firstClass) == null ? void 0 : _a2.toLowerCase()}
721
+ .secondClassOccupancy=${(_b = occupancy == null ? void 0 : occupancy.secondClass) == null ? void 0 : _b.toLowerCase()}
722
+ ></sbb-timetable-occupancy>` : nothing}
723
+ ${noticeAttributes && noticeAttributes.length || this.boarding ? html`<ul class="sbb-timetable__row-hints" role="list">
724
+ ${noticeAttributes == null ? void 0 : noticeAttributes.map((notice, index) => {
725
+ var _a3, _b2;
726
+ return index < 4 ? html`<li>
727
+ <sbb-icon
728
+ class="sbb-travel-hints__item"
729
+ name=${"sa-" + ((_a3 = notice.name) == null ? void 0 : _a3.toLowerCase())}
730
+ ></sbb-icon>
731
+ <span class="sbb-screen-reader-only">${(_b2 = notice.text) == null ? void 0 : _b2.template}</span>
732
+ </li>` : nothing;
733
+ })}
734
+ ${this.boarding ? html`<li>
735
+ <sbb-icon
736
+ class="sbb-travel-hints__item"
737
+ name=${(_c = this.boarding) == null ? void 0 : _c.name}
738
+ aria-label=${(_d = this.boarding) == null ? void 0 : _d.text}
739
+ aria-hidden="false"
740
+ ></sbb-icon>
741
+ </li>` : nothing}
742
+ </ul>` : nothing}
743
+ ${duration && duration > 0 ? html`<time>
744
+ <span class="sbb-screen-reader-only">
745
+ ${`${i18nTripDuration[this._language.current]} ${durationObj.long}`}
746
+ </span>
747
+ <span aria-hidden="true">${durationObj.short}</span>
748
+ </time>` : nothing}
749
+ ${hasHimCus && (himCus.cus || himCus.him) ? html`<span class="sbb-timetable__row-warning">
750
+ <sbb-icon name=${(himCus.cus || himCus.him).name}></sbb-icon>
751
+ <span class="sbb-screen-reader-only">${(himCus.cus || himCus.him).text}</span>
752
+ </span>` : nothing}
753
+ </div>
754
+ </div>
755
+ </sbb-card>
756
+ `;
757
+ }
758
+ }, _trip_accessor_storage = new WeakMap(), _price_accessor_storage = new WeakMap(), _disableAnimation_accessor_storage = new WeakMap(), _boarding_accessor_storage = new WeakMap(), _loadingTrip_accessor_storage = new WeakMap(), _a11yFootpath_accessor_storage = new WeakMap(), _loadingPrice_accessor_storage = new WeakMap(), _cardActionLabel_accessor_storage = new WeakMap(), _accessibilityExpanded_accessor_storage = new WeakMap(), _active_accessor_storage = new WeakMap(), _classThis = _a, (() => {
759
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
760
+ _trip_decorators = [property({ type: Object })];
761
+ _price_decorators = [property({ type: Object })];
762
+ _disableAnimation_decorators = [forceType(), property({ attribute: "disable-animation", reflect: true, type: Boolean })];
763
+ _boarding_decorators = [property({ type: Object })];
764
+ _loadingTrip_decorators = [forceType(), property({ attribute: "loading-trip", type: Boolean })];
765
+ _a11yFootpath_decorators = [forceType(), property({ attribute: "a11y-footpath", type: Boolean })];
766
+ _loadingPrice_decorators = [forceType(), property({ attribute: "loading-price", type: Boolean })];
767
+ _cardActionLabel_decorators = [forceType(), property({ attribute: "card-action-label" })];
768
+ _accessibilityExpanded_decorators = [forceType(), property({ attribute: "accessibility-expanded", type: Boolean })];
769
+ _active_decorators = [forceType(), property({ type: Boolean })];
770
+ _set_now_decorators = [property()];
771
+ __esDecorate(_a, null, _trip_decorators, { kind: "accessor", name: "trip", static: false, private: false, access: { has: (obj) => "trip" in obj, get: (obj) => obj.trip, set: (obj, value) => {
772
+ obj.trip = value;
773
+ } }, metadata: _metadata }, _trip_initializers, _trip_extraInitializers);
774
+ __esDecorate(_a, null, _price_decorators, { kind: "accessor", name: "price", static: false, private: false, access: { has: (obj) => "price" in obj, get: (obj) => obj.price, set: (obj, value) => {
775
+ obj.price = value;
776
+ } }, metadata: _metadata }, _price_initializers, _price_extraInitializers);
777
+ __esDecorate(_a, null, _disableAnimation_decorators, { kind: "accessor", name: "disableAnimation", static: false, private: false, access: { has: (obj) => "disableAnimation" in obj, get: (obj) => obj.disableAnimation, set: (obj, value) => {
778
+ obj.disableAnimation = value;
779
+ } }, metadata: _metadata }, _disableAnimation_initializers, _disableAnimation_extraInitializers);
780
+ __esDecorate(_a, null, _boarding_decorators, { kind: "accessor", name: "boarding", static: false, private: false, access: { has: (obj) => "boarding" in obj, get: (obj) => obj.boarding, set: (obj, value) => {
781
+ obj.boarding = value;
782
+ } }, metadata: _metadata }, _boarding_initializers, _boarding_extraInitializers);
783
+ __esDecorate(_a, null, _loadingTrip_decorators, { kind: "accessor", name: "loadingTrip", static: false, private: false, access: { has: (obj) => "loadingTrip" in obj, get: (obj) => obj.loadingTrip, set: (obj, value) => {
784
+ obj.loadingTrip = value;
785
+ } }, metadata: _metadata }, _loadingTrip_initializers, _loadingTrip_extraInitializers);
786
+ __esDecorate(_a, null, _a11yFootpath_decorators, { kind: "accessor", name: "a11yFootpath", static: false, private: false, access: { has: (obj) => "a11yFootpath" in obj, get: (obj) => obj.a11yFootpath, set: (obj, value) => {
787
+ obj.a11yFootpath = value;
788
+ } }, metadata: _metadata }, _a11yFootpath_initializers, _a11yFootpath_extraInitializers);
789
+ __esDecorate(_a, null, _loadingPrice_decorators, { kind: "accessor", name: "loadingPrice", static: false, private: false, access: { has: (obj) => "loadingPrice" in obj, get: (obj) => obj.loadingPrice, set: (obj, value) => {
790
+ obj.loadingPrice = value;
791
+ } }, metadata: _metadata }, _loadingPrice_initializers, _loadingPrice_extraInitializers);
792
+ __esDecorate(_a, null, _cardActionLabel_decorators, { kind: "accessor", name: "cardActionLabel", static: false, private: false, access: { has: (obj) => "cardActionLabel" in obj, get: (obj) => obj.cardActionLabel, set: (obj, value) => {
793
+ obj.cardActionLabel = value;
794
+ } }, metadata: _metadata }, _cardActionLabel_initializers, _cardActionLabel_extraInitializers);
795
+ __esDecorate(_a, null, _accessibilityExpanded_decorators, { kind: "accessor", name: "accessibilityExpanded", static: false, private: false, access: { has: (obj) => "accessibilityExpanded" in obj, get: (obj) => obj.accessibilityExpanded, set: (obj, value) => {
796
+ obj.accessibilityExpanded = value;
797
+ } }, metadata: _metadata }, _accessibilityExpanded_initializers, _accessibilityExpanded_extraInitializers);
798
+ __esDecorate(_a, null, _active_decorators, { kind: "accessor", name: "active", static: false, private: false, access: { has: (obj) => "active" in obj, get: (obj) => obj.active, set: (obj, value) => {
799
+ obj.active = value;
800
+ } }, metadata: _metadata }, _active_initializers, _active_extraInitializers);
801
+ __esDecorate(_a, null, _set_now_decorators, { kind: "setter", name: "now", static: false, private: false, access: { has: (obj) => "now" in obj, set: (obj, value) => {
802
+ obj.now = value;
803
+ } }, metadata: _metadata }, null, _instanceExtraInitializers);
804
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
805
+ _classThis = _classDescriptor.value;
806
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
807
+ })(), _a.styles = style, __runInitializers(_classThis, _classExtraInitializers), _a;
808
+ return _classThis;
809
+ })();
810
+ export {
811
+ SbbTimetableRowElement,
812
+ filterNotices,
813
+ getCus,
814
+ getHimIcon,
815
+ handleNotices,
816
+ renderIconProduct,
817
+ renderStringProduct,
818
+ sortSituation
819
+ };
820
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXRhYmxlLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvdGltZXRhYmxlLXJvdy90aW1ldGFibGUtcm93LmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGRlZmF1bHREYXRlQWRhcHRlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHNldE9yUmVtb3ZlQXR0cmlidXRlIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kb20uanMnO1xuaW1wb3J0IHtcbiAgaTE4bkFycml2YWwsXG4gIGkxOG5DbGFzcyxcbiAgaTE4bkRlcGFydHVyZSxcbiAgaTE4bkRpcmVjdGlvbixcbiAgaTE4bkZyb21QbGF0Zm9ybSxcbiAgaTE4bk1lYW5zT2ZUcmFuc3BvcnQsXG4gIGkxOG5OZXcsXG4gIGkxOG5PY2N1cGFuY3ksXG4gIGkxOG5SZWFsVGltZUluZm8sXG4gIGkxOG5TdXBlcnNhdmVyLFxuICBpMThuVHJhbnNmZXJQcm9jZWR1cmUsXG4gIGkxOG5UcmFuc2ZlclByb2NlZHVyZXMsXG4gIGkxOG5UcmF2ZWxoaW50cyxcbiAgaTE4blRyaXBEdXJhdGlvbixcbiAgaTE4blRyaXBRdWF5Q2hhbmdlLFxufSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlTGlrZSwgU2JiT2NjdXBhbmN5IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFByb3BlcnR5VmFsdWVzLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50LCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBkdXJhdGlvblRvVGltZSwgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyB9IGZyb20gJy4uL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHR5cGUgeyBJVHJpcEl0ZW0sIE5vdGljZSwgUHRSaWRlTGVnLCBQdFNpdHVhdGlvbiB9IGZyb20gJy4uL2NvcmUvdGltZXRhYmxlLmpzJztcbmltcG9ydCB7IGdldERlcGFydHVyZUFycml2YWxUaW1lQXR0cmlidXRlLCBpc1JpZGVMZWcgfSBmcm9tICcuLi9jb3JlL3RpbWV0YWJsZS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3RpbWV0YWJsZS1yb3cuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jYXJkLmpzJztcbmltcG9ydCAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvaWNvbi5qcyc7XG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL3RpbWV0YWJsZS1vY2N1cGFuY3kuanMnO1xuaW1wb3J0ICcuLi9wZWFybC1jaGFpbi10aW1lLmpzJztcblxuLyoqIEhpbUN1cyBpbnRlcmZhY2UgZm9yIG1hcHBlZCBpY29uIG5hbWUgYW5kIHRleHQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGltQ3VzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIEJvYXJkaW5nIGljb24gaW50ZXJmYWNlIGZvciBtYXBwZWQgaWNvbiBuYW1lIGFuZCB0ZXh0ICovXG5leHBvcnQgaW50ZXJmYWNlIEJvYXJkaW5nIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpY2Uge1xuICBwcmljZT86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbiAgaXNEaXNjb3VudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCByZW5kZXJJY29uUHJvZHVjdCA9IChpY29uOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVzdWx0ID0+IHtcbiAgcmV0dXJuIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctdHJhbnNwb3J0XCI+XG4gICAgPHNiYi1pY29uIG5hbWU9JHtpY29ufT48L3NiYi1pY29uPlxuICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7bmFtZX08L3NwYW4+XG4gIDwvc3Bhbj5gO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclN0cmluZ1Byb2R1Y3QgPSAodmVoaWNsZU5hbWU6IHN0cmluZywgbGluZT86IHN0cmluZyB8IG51bGwpOiBUZW1wbGF0ZVJlc3VsdCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWydNJywgJ0InLCAnVCddLmluY2x1ZGVzKHZlaGljbGVOYW1lKSA/ICcgJyA6ICcnO1xuICByZXR1cm4gaHRtbGA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnRudW1iZXJcIj5cbiAgICAke2xpbmUgIT09IG51bGwgPyB2ZWhpY2xlTmFtZSArIHNwYWNlICsgbGluZSA6IHZlaGljbGVOYW1lfVxuICA8L3NwYW4+YDtcbn07XG5cbmNvbnN0IGdldFJlYWNoYWJsZVRleHQgPSAobGVnczogUHRSaWRlTGVnW10pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0+IHtcbiAgcmV0dXJuIGxlZ3M/LmZpbmQoKGxlZykgPT4gbGVnLnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVhY2hhYmxlVGV4dCk/LnNlcnZpY2VKb3VybmV5XG4gICAgPy5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVhY2hhYmxlVGV4dDtcbn07XG5cbmNvbnN0IGdldERlbGF5VGV4dCA9IChsZWdzOiBQdFJpZGVMZWdbXSk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gbGVncz8uZmluZCgobGVnKSA9PiBsZWcuc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5kZWxheVRleHQpPy5zZXJ2aWNlSm91cm5leVxuICAgID8uc2VydmljZUFsdGVyYXRpb24/LmRlbGF5VGV4dDtcbn07XG5cbmNvbnN0IGdldFJlZGlyZWN0ZWRUZXh0ID0gKGxlZ3M6IFB0UmlkZUxlZ1tdKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9PiB7XG4gIHJldHVybiBsZWdzPy5maW5kKChsZWcpID0+ICEhbGVnLnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVkaXJlY3RlZFRleHQpXG4gICAgPy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LnJlZGlyZWN0ZWRUZXh0O1xufTtcblxuY29uc3QgZ2V0VW5wbGFubmVkU3RvcCA9IChsZWdzOiBQdFJpZGVMZWdbXSk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gbGVncz8uZmluZCgobGVnKSA9PiAhIWxlZy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LnVucGxhbm5lZFN0b3BQb2ludHNUZXh0KVxuICAgID8uc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy51bnBsYW5uZWRTdG9wUG9pbnRzVGV4dDtcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0U2l0dWF0aW9uID0gKHNpdHVhdGlvbnM6IFB0U2l0dWF0aW9uW10pOiBQdFNpdHVhdGlvbltdID0+IHtcbiAgY29uc3QgcHJpb3JpdGllcyA9IHtcbiAgICBESVNUVVJCQU5DRTogMCxcbiAgICBJTkZPUk1BVElPTjogMSxcbiAgICBERUxBWTogMixcbiAgICBUUkFJTl9SRVBMQUNFTUVOVF9CWV9CVVM6IDMsXG4gICAgQ09OU1RSVUNUSU9OX1NJVEU6IDQsXG4gICAgRU5EX01FU1NBR0U6IDUsXG4gIH07XG5cbiAgcmV0dXJuIFsuLi5zaXR1YXRpb25zXT8uc29ydChcbiAgICAoYTogUHRTaXR1YXRpb24sIGI6IFB0U2l0dWF0aW9uKSA9PiBwcmlvcml0aWVzW2EuY2F1c2UhXSAtIHByaW9yaXRpZXNbYi5jYXVzZSFdLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpbUljb24gPSAoc2l0dWF0aW9uOiBQdFNpdHVhdGlvbik6IEhpbUN1cyA9PiB7XG4gIHN3aXRjaCAoc2l0dWF0aW9uPy5jYXVzZSkge1xuICAgIGNhc2UgJ0RJU1RVUkJBTkNFJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdkaXNydXB0aW9uJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcz8ubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdJTkZPUk1BVElPTic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnaW5mbycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdERUxBWSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnZGVsYXknLFxuICAgICAgICB0ZXh0OiBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzLmxlbmd0aCA/IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXNbMF0udGl0bGUgOiAnJyxcbiAgICAgIH07XG4gICAgY2FzZSAnVFJBSU5fUkVQTEFDRU1FTlRfQllfQlVTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdyZXBsYWNlbWVudGJ1cycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdDT05TVFJVQ1RJT05fU0lURSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnY29uc3RydWN0aW9uJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcy5sZW5ndGggPyBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnRpdGxlIDogJycsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnaW5mbycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cyA9ICh0cmlwOiBJVHJpcEl0ZW0sIGN1cnJlbnRMYW5ndWFnZTogc3RyaW5nKTogSGltQ3VzID0+IHtcbiAgY29uc3QgeyBzdW1tYXJ5LCBsZWdzIH0gPSB0cmlwIHx8IHt9O1xuICBjb25zdCByaWRlTGVncyA9IGxlZ3M/LmZpbHRlcigobGVnKSA9PiBpc1JpZGVMZWcobGVnKSkgYXMgUHRSaWRlTGVnW107XG4gIGNvbnN0IHsgdHJpcFN0YXR1cyB9ID0gc3VtbWFyeSB8fCB7fTtcblxuICBpZiAodHJpcFN0YXR1cz8uY2FuY2VsbGVkIHx8IHRyaXBTdGF0dXM/LnBhcnRpYWxseUNhbmNlbGxlZClcbiAgICByZXR1cm4geyBuYW1lOiAnY2FuY2VsbGF0aW9uJywgdGV4dDogdHJpcFN0YXR1cz8uY2FuY2VsbGVkVGV4dCB9O1xuICBpZiAoZ2V0UmVhY2hhYmxlVGV4dChyaWRlTGVncykpXG4gICAgcmV0dXJuIHsgbmFtZTogJ21pc3NlZC1jb25uZWN0aW9uJywgdGV4dDogZ2V0UmVhY2hhYmxlVGV4dChyaWRlTGVncykgfTtcbiAgaWYgKHRyaXBTdGF0dXM/LmFsdGVybmF0aXZlKSByZXR1cm4geyBuYW1lOiAnYWx0ZXJuYXRpdmUnLCB0ZXh0OiB0cmlwU3RhdHVzLmFsdGVybmF0aXZlVGV4dCB9O1xuICBpZiAoZ2V0UmVkaXJlY3RlZFRleHQocmlkZUxlZ3MpKSByZXR1cm4geyBuYW1lOiAncmVyb3V0ZScsIHRleHQ6IGdldFJlZGlyZWN0ZWRUZXh0KHJpZGVMZWdzKSB9O1xuICBpZiAoZ2V0VW5wbGFubmVkU3RvcChyaWRlTGVncykpIHJldHVybiB7IG5hbWU6ICdhZGQtc3RvcCcsIHRleHQ6IGdldFVucGxhbm5lZFN0b3AocmlkZUxlZ3MpIH07XG4gIGlmICh0cmlwU3RhdHVzPy5kZWxheWVkIHx8IHRyaXBTdGF0dXM/LmRlbGF5ZWRVbmtub3duKVxuICAgIHJldHVybiB7IG5hbWU6ICdkZWxheScsIHRleHQ6IGdldERlbGF5VGV4dChyaWRlTGVncykgfTtcbiAgaWYgKHRyaXBTdGF0dXM/LnF1YXlDaGFuZ2VkKSB7XG4gICAgY29uc3QgZGVwYXJ0dXJlID0gcmlkZUxlZ3NbMF0uZGVwYXJ0dXJlO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAncGxhdGZvcm0tY2hhbmdlJyxcbiAgICAgIHRleHQ6IGRlcGFydHVyZS5xdWF5Q2hhbmdlZCA/IGRlcGFydHVyZS5xdWF5Q2hhbmdlZFRleHQgOiBpMThuVHJpcFF1YXlDaGFuZ2VbY3VycmVudExhbmd1YWdlXSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHt9IGFzIEhpbUN1cztcbn07XG5cbmNvbnN0IGZpbmRBbmRSZXBsYWNlTm90aWNlID0gKG5vdGljZXM6IE5vdGljZVtdKTogTm90aWNlIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmVzZXJ2YXRpb25Ob3RpY2UgPSBbJ1JSJywgJ1JLJywgJ1JDJywgJ1JMJywgJ1JNJywgJ1JTJywgJ1JVJywgJ1hQJywgJ1hSJywgJ1hUJ107XG5cbiAgcmV0dXJuIG5vdGljZXMucmVkdWNlKChmb3VuZE5vdGljZTogTm90aWNlIHwgdW5kZWZpbmVkLCBub3RpY2U6IE5vdGljZSk6IE5vdGljZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKGZvdW5kTm90aWNlKSByZXR1cm4gZm91bmROb3RpY2U7XG4gICAgaWYgKHJlc2VydmF0aW9uTm90aWNlLmluY2x1ZGVzKG5vdGljZS5uYW1lKSkge1xuICAgICAgcmV0dXJuIHsgLi4ubm90aWNlLCBuYW1lOiAnUlInIH0gYXMgTm90aWNlO1xuICAgIH1cbiAgfSwgdW5kZWZpbmVkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJOb3RpY2VzID0gKG5vdGljZXM6IE5vdGljZVtdKTogTm90aWNlW10gPT4ge1xuICBjb25zdCBhbGxvd2VkTmFtZXMgPSBbJ1onLCAnU0InLCAnU1onLCAnVlInLCAnVEcnXTtcblxuICBjb25zdCBmaWx0ZXJOb3RpY2UgPSBub3RpY2VzLmZpbHRlcigobm90aWNlLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBub3RpY2VzLmZpbmRJbmRleCgobikgPT4gbi5uYW1lID09PSBub3RpY2UubmFtZSkgPT09IGluZGV4O1xuICB9KTtcblxuICByZXR1cm4gZmlsdGVyTm90aWNlXG4gICAgLmZpbHRlcigobm90aWNlKSA9PiBhbGxvd2VkTmFtZXMuaW5jbHVkZXMobm90aWNlLm5hbWUpKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhbGxvd2VkTmFtZXMuaW5kZXhPZihhLm5hbWUpIC0gYWxsb3dlZE5hbWVzLmluZGV4T2YoYi5uYW1lKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlTm90aWNlcyA9IChub3RpY2VzOiBOb3RpY2VbXSk6IE5vdGljZVtdID0+IHtcbiAgY29uc3QgcmVzZXJ2YXRpb25Ob3RpY2UgPSBmaW5kQW5kUmVwbGFjZU5vdGljZShub3RpY2VzKTtcbiAgY29uc3QgZmlsdGVyZWROb3RpY2VzID0gZmlsdGVyTm90aWNlcyhub3RpY2VzKTtcblxuICBpZiAocmVzZXJ2YXRpb25Ob3RpY2UgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZpbHRlcmVkTm90aWNlcztcbiAgaWYgKCFmaWx0ZXJlZE5vdGljZXMubGVuZ3RoKSByZXR1cm4gW3Jlc2VydmF0aW9uTm90aWNlXTtcblxuICBpZiAoZmlsdGVyZWROb3RpY2VzWzBdLm5hbWUgPT09ICdaJyAmJiBmaWx0ZXJlZE5vdGljZXNbMV0pIHtcbiAgICByZXR1cm4gW2ZpbHRlcmVkTm90aWNlc1swXSwgcmVzZXJ2YXRpb25Ob3RpY2UsIGZpbHRlcmVkTm90aWNlc1sxXV0uY29uY2F0KFxuICAgICAgZmlsdGVyZWROb3RpY2VzLnNsaWNlKDIpLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gW3Jlc2VydmF0aW9uTm90aWNlLCAuLi5maWx0ZXJlZE5vdGljZXNdO1xufTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJpcCwgYWN0aW5nIGFzIGEgY29udGFpbmVyIGZvciBhbGwgdGhlIGBzYmItdGltZXRhYmxlLSpgIGNvbXBvbmVudHMuXG4gKiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLXRpbWV0YWJsZS1yb3cnKVxuY2xhc3MgU2JiVGltZXRhYmxlUm93RWxlbWVudCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKiogVGhlIHRyaXAgUHJvcC4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogT2JqZWN0IH0pIHB1YmxpYyBhY2Nlc3NvciB0cmlwOiBJVHJpcEl0ZW0gPSBudWxsITtcblxuICAvKiogVGhlIHByaWNlIFByb3AsIHdoaWNoIGNvbnNpc3RzIG9mIHRoZSBkYXRhIGZvciB0aGUgYmFkZ2UuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE9iamVjdCB9KSBwdWJsaWMgYWNjZXNzb3IgcHJpY2U6IFByaWNlID0gbnVsbCE7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIHNiYi1wZWFybC1jaGFpbiBjb21wb25lbnQgLSBpZiB0cnVlIHRoZSBwb3NpdGlvbiB3b24ndCBiZSBhbmltYXRlZC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Rpc2FibGUtYW5pbWF0aW9uJywgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZGlzYWJsZUFuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSBub3RpY2VzIHNlY3Rpb24gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogT2JqZWN0IH0pIHB1YmxpYyBhY2Nlc3NvciBib2FyZGluZzogQm9hcmRpbmcgPSBudWxsITtcblxuICAvKipcbiAgICogVGhlIGxvYWRpbmcgc3RhdGUgLVxuICAgKiB3aGVuIHRoaXMgaXMgdHJ1ZSBpdCB3aWxsIGJlIHJlbmRlciBza2VsZXRvbiB3aXRoIGFuIGlkbGluZyBhbmltYXRpb25cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdsb2FkaW5nLXRyaXAnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBsb2FkaW5nVHJpcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgRm9vdHBhdGggYXR0cmlidXRlIGZvciByZW5kZXJpbmcgZGlmZmVyZW50IGljb25zXG4gICAqIHRydWU6IHJlbmRlciBhMTF5LWljb25cbiAgICogZmFsc2U6IHJlbmRlciB3YWxrLWljb25cbiAgICogZGVmYXVsdDogcmVuZGVyIHdhbGstaWNvblxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ExMXktZm9vdHBhdGgnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhMTF5Rm9vdHBhdGg6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGxvYWRpbmcgc3RhdGUgLVxuICAgKiB3aGVuIHRoaXMgaXMgdHJ1ZSBpdCB3aWxsIGJlIHJlbmRlciBza2VsZXRvbiB3aXRoIGFuIGlkbGluZyBhbmltYXRpb25cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdsb2FkaW5nLXByaWNlJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbG9hZGluZ1ByaWNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEhpZGRlbiBsYWJlbCBmb3IgdGhlIGNhcmQgYWN0aW9uLiBJdCBvdmVycmlkZXMgdGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFjY2Vzc2liaWxpdHkgdGV4dCBmb3IgdGhlIGNvbXBvbmVudC4gVXNlIHRoaXMgcHJvcCB0byBwcm92aWRlIGN1c3RvbSBhY2Nlc3NpYmlsaXR5IGluZm9ybWF0aW9uIGZvciB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2NhcmQtYWN0aW9uLWxhYmVsJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgY2FyZEFjdGlvbkxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgc2JiLWNhcmQgY29tcG9uZW50IGFzIGFyaWEtZXhwYW5kZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWV4cGFuZGVkJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gdGhpcyBwcm9wIGlzIHRydWUgdGhlIHNiYi1jYXJkIHdpbGwgYmUgaW4gdGhlIGFjdGl2ZSBzdGF0ZS4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBBIGNvbmZpZ3VyZWQgZGF0ZSB3aGljaCBhY3RzIGFzIHRoZSBjdXJyZW50IGRhdGUgaW5zdGVhZCBvZiB0aGUgcmVhbCBjdXJyZW50IGRhdGUuIFJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG5vdyh2YWx1ZTogU2JiRGF0ZUxpa2UgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9ub3cgPSBkZWZhdWx0RGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKGRlZmF1bHREYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9ub3cgPz8gbmV3IERhdGUoKTtcbiAgfVxuICBwcml2YXRlIF9ub3c6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsb2FkaW5nVHJpcCcpKSB7XG4gICAgICBzZXRPclJlbW92ZUF0dHJpYnV0ZSh0aGlzLCAncm9sZScsICF0aGlzLmxvYWRpbmdUcmlwID8gJ3Jvd2dyb3VwJyA6IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgc2tlbGV0b24gcmVuZGVyIGZ1bmN0aW9uIGZvciB0aGUgbG9hZGluZyBzdGF0ZSAqL1xuICBwcml2YXRlIF9yZW5kZXJTa2VsZXRvbigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2JiLWNhcmQgc2l6ZT1cImxcIiBjbGFzcz1cInNiYi1sb2FkaW5nXCI+XG4gICAgICAgICR7dGhpcy5sb2FkaW5nUHJpY2VcbiAgICAgICAgICA/IGh0bWxgPHNiYi1jYXJkLWJhZGdlIGNsYXNzPVwic2JiLWxvYWRpbmdfX2JhZGdlXCI+PC9zYmItY2FyZC1iYWRnZT5gXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX3dyYXBwZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX3Jvd1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbG9hZGluZ19fcm93XCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1sb2FkaW5nX19yb3dcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NiYi1jYXJkPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSaWRlTGVncygpOiBQdFJpZGVMZWdbXSB7XG4gICAgcmV0dXJuIHRoaXMudHJpcD8ubGVncz8uZmlsdGVyKChsZWcpID0+IGlzUmlkZUxlZyhsZWcpKSA/PyBbXTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFF1YXlUeXBlU3RyaW5ncygpOiB7IGxvbmc6IHN0cmluZzsgc2hvcnQ6IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnRyaXAuc3VtbWFyeT8ucHJvZHVjdCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmlkZUxlZ3MgPSB0aGlzLl9nZXRSaWRlTGVncygpO1xuICAgIGNvbnN0IGlzU2hvcnQgPSB0aGlzLnRyaXAuc3VtbWFyeS5wcm9kdWN0Py52ZWhpY2xlTW9kZSA9PT0gJ1RSQUlOJztcbiAgICBjb25zdCBzaG9ydCA9IGlzU2hvcnRcbiAgICAgID8gcmlkZUxlZ3NbMF0uc2VydmljZUpvdXJuZXkucXVheVR5cGVTaG9ydE5hbWUgfHwgJydcbiAgICAgIDogcmlkZUxlZ3NbMF0uc2VydmljZUpvdXJuZXkucXVheVR5cGVOYW1lIHx8ICcnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvbmc6IGkxOG5Gcm9tUGxhdGZvcm1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gKyAnICcgKyBzaG9ydCxcbiAgICAgIHNob3J0LFxuICAgIH07XG4gIH1cblxuICAvKiogbWFwIFF1YXkgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyUXVheVR5cGUoKTogVGVtcGxhdGVSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy50cmlwLnN1bW1hcnk/LnByb2R1Y3QpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcXVheVR5cGVTdHJpbmdzID0gdGhpcy5fZ2V0UXVheVR5cGVTdHJpbmdzKCk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy0tcXVheVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke3F1YXlUeXBlU3RyaW5ncz8ubG9uZ30mbmJzcDs8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LS1xdWF5LXR5cGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID4ke3F1YXlUeXBlU3RyaW5ncz8uc2hvcnR9PC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlSGltQ3VzKHRyaXA6IElUcmlwSXRlbSk6IHsgY3VzOiBIaW1DdXMgfCBudWxsOyBoaW06IEhpbUN1cyB8IG51bGwgfSB7XG4gICAgY29uc3QgeyBzaXR1YXRpb25zIH0gPSB0cmlwIHx8IHt9O1xuICAgIGNvbnN0IHNvcnRlZFNpdHVhdGlvbnMgPSBzaXR1YXRpb25zICYmIHNvcnRTaXR1YXRpb24oc2l0dWF0aW9ucyk7XG4gICAgY29uc3QgY3VzID0gZ2V0Q3VzKHRyaXAsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1czogT2JqZWN0LmtleXMoY3VzKT8ubGVuZ3RoID8gY3VzIDogbnVsbCxcbiAgICAgIGhpbTogc2l0dWF0aW9ucz8ubGVuZ3RoID8gZ2V0SGltSWNvbihzb3J0ZWRTaXR1YXRpb25zWzBdKSA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEFjY2Vzc2liaWxpdHlUZXh0KHRyaXA6IElUcmlwSXRlbSk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBzdW1tYXJ5LCBsZWdzLCBub3RpY2VzIH0gPSB0cmlwIHx8IHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIGRlcGFydHVyZVdhbGssXG4gICAgICBhcnJpdmFsV2FsayxcbiAgICAgIGRlcGFydHVyZSxcbiAgICAgIGFycml2YWwsXG4gICAgICBwcm9kdWN0LFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgb2NjdXBhbmN5LFxuICAgICAgZHVyYXRpb24sXG4gICAgfSA9IHN1bW1hcnkgfHwge307XG5cbiAgICBjb25zdCB7IGRlcGFydHVyZVRpbWVBdHRyaWJ1dGUsIGFycml2YWxUaW1lQXR0cmlidXRlIH0gPSBnZXREZXBhcnR1cmVBcnJpdmFsVGltZUF0dHJpYnV0ZShcbiAgICAgIGxlZ3MsXG4gICAgICBkZXBhcnR1cmVXYWxrIHx8IDAsXG4gICAgICBhcnJpdmFsV2FsayB8fCAwLFxuICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgIHRoaXMuYTExeUZvb3RwYXRoLFxuICAgICk7XG5cbiAgICBjb25zdCByaWRlTGVncyA9IHRoaXMuX2dldFJpZGVMZWdzKCk7XG5cbiAgICBjb25zdCBkZXBhcnR1cmVUaW1lOiBEYXRlIHwgdW5kZWZpbmVkID0gZGVwYXJ0dXJlPy50aW1lXG4gICAgICA/IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcoZGVwYXJ0dXJlLnRpbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFycml2YWxUaW1lOiBEYXRlIHwgdW5kZWZpbmVkID0gYXJyaXZhbD8udGltZVxuICAgICAgPyByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGFycml2YWwudGltZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlV2Fsa1RleHQgPSBkZXBhcnR1cmVUaW1lQXR0cmlidXRlXG4gICAgICA/IGAke2RlcGFydHVyZVRpbWVBdHRyaWJ1dGUudGV4dH0gJHtkZXBhcnR1cmVUaW1lQXR0cmlidXRlLmR1cmF0aW9ufSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGFycml2YWxXYWxrVGV4dCA9IGFycml2YWxUaW1lQXR0cmlidXRlXG4gICAgICA/IGAke2Fycml2YWxUaW1lQXR0cmlidXRlLnRleHR9ICR7YXJyaXZhbFRpbWVBdHRyaWJ1dGUuZHVyYXRpb259LCBgXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlVGltZVRleHQgPSBkZXBhcnR1cmVUaW1lXG4gICAgICA/IGAke2kxOG5EZXBhcnR1cmVbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2Zvcm1hdChkZXBhcnR1cmVUaW1lLCAnSEg6bW0nKX0sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBnZXREZXBhcnR1cmVRdWF5VGV4dCA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKCFkZXBhcnR1cmU/LnF1YXlGb3JtYXR0ZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgcHJlZml4IFwibmV3XCIgaWYgcXVheSB3YXMgY2hhbmdlZFxuICAgICAgY29uc3QgY2hhbmdlZFF1YXlQcmVmaXggPSBkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gYCR7aTE4bk5ld1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gYCA6ICcnO1xuICAgICAgcmV0dXJuIGAke2NoYW5nZWRRdWF5UHJlZml4fSR7XG4gICAgICAgIHRoaXMuX2dldFF1YXlUeXBlU3RyaW5ncygpPy5sb25nXG4gICAgICB9ICR7ZGVwYXJ0dXJlPy5xdWF5Rm9ybWF0dGVkfSwgYDtcbiAgICB9O1xuXG4gICAgY29uc3QgbWVhbnNPZlRyYW5zcG9ydFRleHQgPVxuICAgICAgcHJvZHVjdCAmJiBwcm9kdWN0LnZlaGljbGVNb2RlXG4gICAgICAgID8gaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXSAmJlxuICAgICAgICAgIGAke2kxOG5NZWFuc09mVHJhbnNwb3J0W3Byb2R1Y3QudmVoaWNsZU1vZGUudG9Mb3dlckNhc2UoKV1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19LCBgXG4gICAgICAgIDogJyc7XG5cbiAgICBjb25zdCB2ZWhpY2xlU3ViTW9kZVRleHQgPSBwcm9kdWN0Py52ZWhpY2xlU3ViTW9kZVNob3J0TmFtZVxuICAgICAgPyBgJHtwcm9kdWN0LnZlaGljbGVTdWJNb2RlU2hvcnROYW1lfSAke3Byb2R1Y3QubGluZSB8fCAnJ30sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkaXJlY3Rpb25UZXh0ID0gYCR7aTE4bkRpcmVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkaXJlY3Rpb259LCBgO1xuXG4gICAgY29uc3QgaGltQ3VzID0gdGhpcy5faGFuZGxlSGltQ3VzKHRyaXApO1xuICAgIGNvbnN0IGN1c1RleHQgPSBoaW1DdXM/LmN1cz8udGV4dFxuICAgICAgPyBgJHtpMThuUmVhbFRpbWVJbmZvW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHtoaW1DdXM/LmN1cz8udGV4dH0sIGBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgaGltVGV4dCA9IGhpbUN1cz8uaGltPy50ZXh0XG4gICAgICA/IGAke2kxOG5SZWFsVGltZUluZm9bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2hpbUN1cz8uaGltPy50ZXh0fSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGJvYXJkaW5nVGV4dCA9IHRoaXMuYm9hcmRpbmcgPyBgJHt0aGlzLmJvYXJkaW5nLnRleHR9LCBgIDogJyc7XG5cbiAgICBjb25zdCBwcmljZVRleHQgPSBgJHt0aGlzLnByaWNlPy5pc0Rpc2NvdW50ID8gaTE4blN1cGVyc2F2ZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gOiAnJ30gJHtcbiAgICAgIHRoaXMucHJpY2U/LnRleHQgJiYgdGhpcy5wcmljZT8ucHJpY2VcbiAgICAgICAgPyAodGhpcy5wcmljZT8udGV4dCB8fCAnJykgKyAnICcgKyAodGhpcy5wcmljZT8ucHJpY2UgfHwgJycpICsgJywgJ1xuICAgICAgICA6ICcnXG4gICAgfWA7XG5cbiAgICBjb25zdCB0cmFuc2ZlclByb2NlZHVyZXMgPVxuICAgICAgcmlkZUxlZ3MubGVuZ3RoID4gMlxuICAgICAgICA/IGAke3JpZGVMZWdzLmxlbmd0aCAtIDF9ICR7aTE4blRyYW5zZmVyUHJvY2VkdXJlc1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sIGBcbiAgICAgICAgOiByaWRlTGVncy5sZW5ndGggPiAxXG4gICAgICAgICAgPyBgJHtyaWRlTGVncy5sZW5ndGggLSAxfSAke2kxOG5UcmFuc2ZlclByb2NlZHVyZVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sIGBcbiAgICAgICAgICA6ICcnO1xuXG4gICAgY29uc3QgYXJyaXZhbFRpbWVUZXh0ID0gYXJyaXZhbFRpbWVcbiAgICAgID8gYCR7aTE4bkFycml2YWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2Zvcm1hdChhcnJpdmFsVGltZSwgJ0hIOm1tJyl9LCBgXG4gICAgICA6ICcnO1xuXG4gICAgbGV0IG9jY3VwYW5jeVRleHQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChvY2N1cGFuY3kpIHtcbiAgICAgIGlmIChvY2N1cGFuY3kuZmlyc3RDbGFzcyAmJiBvY2N1cGFuY3kuZmlyc3RDbGFzcyAhPT0gJ1VOS05PV04nKSB7XG4gICAgICAgIG9jY3VwYW5jeVRleHQgKz0gYCR7aTE4bkNsYXNzLmZpcnN0W3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgIChcbiAgICAgICAgICAgIGkxOG5PY2N1cGFuY3lbb2NjdXBhbmN5LmZpcnN0Q2xhc3MudG9Mb3dlckNhc2UoKSBhcyBTYmJPY2N1cGFuY3ldIGFzIFJlY29yZDxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBzdHJpbmdcbiAgICAgICAgICAgID5cbiAgICAgICAgICApPy5bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF1cbiAgICAgICAgfS5gO1xuICAgICAgfVxuICAgICAgaWYgKG9jY3VwYW5jeS5zZWNvbmRDbGFzcyAmJiBvY2N1cGFuY3kuc2Vjb25kQ2xhc3MgIT09ICdVTktOT1dOJykge1xuICAgICAgICBvY2N1cGFuY3lUZXh0ICs9IGAgJHtpMThuQ2xhc3Muc2Vjb25kW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgIChcbiAgICAgICAgICAgIGkxOG5PY2N1cGFuY3lbb2NjdXBhbmN5LnNlY29uZENsYXNzLnRvTG93ZXJDYXNlKCkgYXMgU2JiT2NjdXBhbmN5XSBhcyBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgc3RyaW5nXG4gICAgICAgICAgICA+XG4gICAgICAgICAgKT8uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdXG4gICAgICAgIH0uYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID1cbiAgICAgIG5vdGljZXMgJiZcbiAgICAgIGhhbmRsZU5vdGljZXMobm90aWNlcykubGVuZ3RoICYmXG4gICAgICBoYW5kbGVOb3RpY2VzKG5vdGljZXMpXG4gICAgICAgID8ubWFwKChub3RpY2UsIGluZGV4KSA9PiBpbmRleCA8IDQgJiYgbm90aWNlLnRleHQ/LnRlbXBsYXRlKVxuICAgICAgICAuam9pbignLCAnKSArICcsICc7XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzVGV4dCA9IGF0dHJpYnV0ZXNcbiAgICAgID8gYCR7aTE4blRyYXZlbGhpbnRzW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHthdHRyaWJ1dGVzfWBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkdXJhdGlvblRleHQgPVxuICAgICAgISFkdXJhdGlvbiAmJiBkdXJhdGlvbiA+IDBcbiAgICAgICAgPyBgJHtpMThuVHJpcER1cmF0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgICAgZHVyYXRpb25Ub1RpbWUoZHVyYXRpb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpLmxvbmdcbiAgICAgICAgICB9LCBgXG4gICAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgZGVwYXJ0dXJlV2Fsa1RleHQsXG4gICAgICBkZXBhcnR1cmVUaW1lVGV4dCxcbiAgICAgIGdldERlcGFydHVyZVF1YXlUZXh0KCksXG4gICAgICBtZWFuc09mVHJhbnNwb3J0VGV4dCxcbiAgICAgIHZlaGljbGVTdWJNb2RlVGV4dCxcbiAgICAgIGRpcmVjdGlvblRleHQsXG4gICAgICBjdXNUZXh0LFxuICAgICAgYm9hcmRpbmdUZXh0LFxuICAgICAgcHJpY2VUZXh0LFxuICAgICAgY3VzVGV4dCA/ICcnIDogaGltVGV4dCxcbiAgICAgIGFycml2YWxUaW1lVGV4dCxcbiAgICAgIGFycml2YWxXYWxrVGV4dCxcbiAgICAgIGR1cmF0aW9uVGV4dCxcbiAgICAgIHRyYW5zZmVyUHJvY2VkdXJlcyxcbiAgICAgIG9jY3VwYW5jeVRleHQsXG4gICAgICBhdHRyaWJ1dGVzVGV4dCxcbiAgICBdXG4gICAgICAubWFwKChlKSA9PiBlPy50cmltKCkpXG4gICAgICAuZmlsdGVyKChlKSA9PiBlICYmIGUubGVuZ3RoID4gMClcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nVHJpcCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNrZWxldG9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBsZWdzLCBpZCwgbm90aWNlcywgc3VtbWFyeSB9ID0gdGhpcy50cmlwIHx8IHt9O1xuXG4gICAgY29uc3Qge1xuICAgICAgcHJvZHVjdCxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIGRlcGFydHVyZVdhbGssXG4gICAgICBkZXBhcnR1cmUsXG4gICAgICBhcnJpdmFsLFxuICAgICAgYXJyaXZhbFdhbGssXG4gICAgICBvY2N1cGFuY3ksXG4gICAgICBkdXJhdGlvbixcbiAgICB9ID0gc3VtbWFyeSB8fCB7fTtcblxuICAgIGNvbnN0IGhpbUN1cyA9IHRoaXMuX2hhbmRsZUhpbUN1cyh0aGlzLnRyaXApO1xuICAgIGNvbnN0IGhhc0hpbUN1cyA9ICEhaGltQ3VzLmN1cyB8fCAhIWhpbUN1cy5oaW07XG5cbiAgICBjb25zdCBub3RpY2VBdHRyaWJ1dGVzID0gbm90aWNlcyAmJiBoYW5kbGVOb3RpY2VzKG5vdGljZXMpO1xuXG4gICAgY29uc3QgZHVyYXRpb25PYmogPSBkdXJhdGlvbiA/IGR1cmF0aW9uVG9UaW1lKGR1cmF0aW9uLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KSA6IG51bGw7XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzYmItY2FyZCBzaXplPVwibFwiIGlkPSR7aWR9PlxuICAgICAgICA8c2JiLWNhcmQtYnV0dG9uXG4gICAgICAgICAgP2FjdGl2ZT0ke3RoaXMuYWN0aXZlfVxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9JHt0aGlzLmFjY2Vzc2liaWxpdHlFeHBhbmRlZCA/ICd0cnVlJyA6IG5vdGhpbmd9XG4gICAgICAgID5cbiAgICAgICAgICAke3RoaXMuY2FyZEFjdGlvbkxhYmVsID8gdGhpcy5jYXJkQWN0aW9uTGFiZWwgOiB0aGlzLl9nZXRBY2Nlc3NpYmlsaXR5VGV4dCh0aGlzLnRyaXApfVxuICAgICAgICA8L3NiYi1jYXJkLWJ1dHRvbj5cbiAgICAgICAgJHt0aGlzLmxvYWRpbmdQcmljZVxuICAgICAgICAgID8gaHRtbGA8c2JiLWNhcmQtYmFkZ2UgY2xhc3M9XCJzYmItbG9hZGluZ19fYmFkZ2VcIj48L3NiYi1jYXJkLWJhZGdlPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICR7dGhpcy5wcmljZSAmJiAhdGhpcy5sb2FkaW5nUHJpY2VcbiAgICAgICAgICA/IGh0bWxgPHNiYi1jYXJkLWJhZGdlIGNvbG9yPSR7dGhpcy5wcmljZS5pc0Rpc2NvdW50ID8gJ2NoYXJjb2FsJyA6ICd3aGl0ZSd9PlxuICAgICAgICAgICAgICAke3RoaXMucHJpY2UuaXNEaXNjb3VudFxuICAgICAgICAgICAgICAgID8gaHRtbGA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgJTxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgPiR7aTE4blN1cGVyc2F2ZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAke3RoaXMucHJpY2UudGV4dCA/IGh0bWxgPHNwYW4+JHt0aGlzLnByaWNlLnRleHR9PC9zcGFuPmAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAke3RoaXMucHJpY2UucHJpY2UgPyBodG1sYDxzcGFuPiR7dGhpcy5wcmljZS5wcmljZX08L3NwYW4+YCA6IG5vdGhpbmd9XG4gICAgICAgICAgICA8L3NiYi1jYXJkLWJhZGdlPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3dcIiByb2xlPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy1oZWFkZXJcIiByb2xlPVwiZ3JpZGNlbGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAke3Byb2R1Y3Q/LmNvcnBvcmF0ZUlkZW50aXR5UGljdG9ncmFtICYmXG4gICAgICAgICAgICAgIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctdHJhbnNwb3J0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LXRyYW5zcG9ydC1pY29uXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJwaWN0bzoke3Byb2R1Y3QuY29ycG9yYXRlSWRlbnRpdHlQaWN0b2dyYW19XCJcbiAgICAgICAgICAgICAgICA+PC9zYmItaWNvbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICR7cHJvZHVjdCAmJlxuICAgICAgICAgICAgICAgICAgcHJvZHVjdC52ZWhpY2xlTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXSAmJlxuICAgICAgICAgICAgICAgICAgaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPmB9XG4gICAgICAgICAgICAgICR7cHJvZHVjdCAmJlxuICAgICAgICAgICAgICAocHJvZHVjdC5jb3Jwb3JhdGVJZGVudGl0eUljb25cbiAgICAgICAgICAgICAgICA/IHJlbmRlckljb25Qcm9kdWN0KHByb2R1Y3QuY29ycG9yYXRlSWRlbnRpdHlJY29uLCBwcm9kdWN0Lm5hbWUpXG4gICAgICAgICAgICAgICAgOiBwcm9kdWN0LnZlaGljbGVTdWJNb2RlU2hvcnROYW1lICYmXG4gICAgICAgICAgICAgICAgICByZW5kZXJTdHJpbmdQcm9kdWN0KHByb2R1Y3QudmVoaWNsZVN1Yk1vZGVTaG9ydE5hbWUsIHByb2R1Y3Q/LmxpbmUpKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgJHtkaXJlY3Rpb25cbiAgICAgICAgICAgICAgPyBodG1sYDxwPiR7YCR7aTE4bkRpcmVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkaXJlY3Rpb259YH08L3A+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNiYi1wZWFybC1jaGFpbi10aW1lXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgLmxlZ3M9JHtsZWdzfVxuICAgICAgICAgICAgLmRlcGFydHVyZVRpbWU9JHtkZXBhcnR1cmU/LnRpbWV9XG4gICAgICAgICAgICAuYXJyaXZhbFRpbWU9JHthcnJpdmFsPy50aW1lfVxuICAgICAgICAgICAgLmRlcGFydHVyZVdhbGs9JHtkZXBhcnR1cmVXYWxrfVxuICAgICAgICAgICAgLmFycml2YWxXYWxrPSR7YXJyaXZhbFdhbGt9XG4gICAgICAgICAgICA/ZGlzYWJsZS1hbmltYXRpb249JHt0aGlzLmRpc2FibGVBbmltYXRpb259XG4gICAgICAgICAgICA/YTExeS1mb290cGF0aD0ke3RoaXMuYTExeUZvb3RwYXRofVxuICAgICAgICAgICAgLm5vdz0ke3RoaXMubm93fVxuICAgICAgICAgID48L3NiYi1wZWFybC1jaGFpbi10aW1lPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctZm9vdGVyXCIgcm9sZT1cImdyaWRjZWxsXCI+XG4gICAgICAgICAgICAke3Byb2R1Y3QgJiYgZGVwYXJ0dXJlPy5xdWF5Rm9ybWF0dGVkXG4gICAgICAgICAgICAgID8gaHRtbGA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9JHtkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gYHNiYi10aW1ldGFibGVfX3Jvdy1xdWF5LS1jaGFuZ2VkYCA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICR7YCR7aTE4bkRlcGFydHVyZVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gaTE4bk5ld1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSA6ICcnXG4gICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5fcmVuZGVyUXVheVR5cGUoKX0gJHtkZXBhcnR1cmU/LnF1YXlGb3JtYXR0ZWR9XG4gICAgICAgICAgICAgICAgPC9zcGFuPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgJHsob2NjdXBhbmN5Py5maXJzdENsYXNzICYmIG9jY3VwYW5jeT8uZmlyc3RDbGFzcyAhPT0gJ1VOS05PV04nKSB8fFxuICAgICAgICAgICAgKG9jY3VwYW5jeT8uc2Vjb25kQ2xhc3MgJiYgb2NjdXBhbmN5LnNlY29uZENsYXNzICE9PSAnVU5LTk9XTicpXG4gICAgICAgICAgICAgID8gaHRtbGA8c2JiLXRpbWV0YWJsZS1vY2N1cGFuY3lcbiAgICAgICAgICAgICAgICAgIC5maXJzdENsYXNzT2NjdXBhbmN5PSR7b2NjdXBhbmN5Py5maXJzdENsYXNzPy50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICAgICAgLnNlY29uZENsYXNzT2NjdXBhbmN5PSR7b2NjdXBhbmN5Py5zZWNvbmRDbGFzcz8udG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgICA+PC9zYmItdGltZXRhYmxlLW9jY3VwYW5jeT5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7KG5vdGljZUF0dHJpYnV0ZXMgJiYgbm90aWNlQXR0cmlidXRlcy5sZW5ndGgpIHx8IHRoaXMuYm9hcmRpbmdcbiAgICAgICAgICAgICAgPyBodG1sYDx1bCBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy1oaW50c1wiIHJvbGU9XCJsaXN0XCI+XG4gICAgICAgICAgICAgICAgICAke25vdGljZUF0dHJpYnV0ZXM/Lm1hcCgobm90aWNlLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPCA0XG4gICAgICAgICAgICAgICAgICAgICAgPyBodG1sYDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItdHJhdmVsLWhpbnRzX19pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSR7J3NhLScgKyBub3RpY2UubmFtZT8udG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7bm90aWNlLnRleHQ/LnRlbXBsYXRlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+YFxuICAgICAgICAgICAgICAgICAgICAgIDogbm90aGluZyxcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAke3RoaXMuYm9hcmRpbmdcbiAgICAgICAgICAgICAgICAgICAgPyBodG1sYDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi10cmF2ZWwtaGludHNfX2l0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSR7dGhpcy5ib2FyZGluZz8ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYm9hcmRpbmc/LnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5gXG4gICAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICA8L3VsPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgJHtkdXJhdGlvbiAmJiBkdXJhdGlvbiA+IDBcbiAgICAgICAgICAgICAgPyBodG1sYDx0aW1lPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICR7YCR7aTE4blRyaXBEdXJhdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkdXJhdGlvbk9iaiEubG9uZ31gfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHtkdXJhdGlvbk9iaiEuc2hvcnR9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdGltZT5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7aGFzSGltQ3VzICYmIChoaW1DdXMuY3VzIHx8IGhpbUN1cy5oaW0pXG4gICAgICAgICAgICAgID8gaHRtbGA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy13YXJuaW5nXCI+XG4gICAgICAgICAgICAgICAgICA8c2JiLWljb24gbmFtZT0keyhoaW1DdXMuY3VzIHx8IGhpbUN1cy5oaW0pIS5uYW1lfT48L3NiYi1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+JHsoaGltQ3VzLmN1cyB8fCBoaW1DdXMuaGltKSEudGV4dH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2JiLWNhcmQ+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXRpbWV0YWJsZS1yb3cnOiBTYmJUaW1ldGFibGVSb3dFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiX2IiLCJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdEYSxNQUFBLG9CQUFvQixDQUFDLE1BQWMsU0FBZ0M7QUFDdkUsU0FBQTtBQUFBLHFCQUNZLElBQUk7QUFBQSwyQ0FDa0IsSUFBSTtBQUFBO0FBRS9DO0FBRWEsTUFBQSxzQkFBc0IsQ0FBQyxhQUFxQixTQUF3QztBQUN6RixRQUFBLFFBQVEsQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFFLFNBQVMsV0FBVyxJQUFJLE1BQU07QUFDckQsU0FBQTtBQUFBLE1BQ0gsU0FBUyxPQUFPLGNBQWMsUUFBUSxPQUFPLFdBQVc7QUFBQTtBQUU5RDtBQUVBLE1BQU0sbUJBQW1CLENBQUMsU0FBZ0Q7O0FBQ2pFLFVBQUEsOENBQU0sS0FBSyxDQUFDOztBQUFRLFlBQUFBLE9BQUFDLE1BQUEsSUFBSSxtQkFBSixnQkFBQUEsSUFBb0Isc0JBQXBCLGdCQUFBRCxJQUF1QztBQUFBLFNBQTNELG1CQUEyRSxtQkFBM0UsbUJBQ0gsc0JBREcsbUJBQ2dCO0FBQ3pCO0FBRUEsTUFBTSxlQUFlLENBQUMsU0FBZ0Q7O0FBQzdELFVBQUEsOENBQU0sS0FBSyxDQUFDOztBQUFRLFlBQUFBLE9BQUFDLE1BQUEsSUFBSSxtQkFBSixnQkFBQUEsSUFBb0Isc0JBQXBCLGdCQUFBRCxJQUF1QztBQUFBLFNBQTNELG1CQUF1RSxtQkFBdkUsbUJBQ0gsc0JBREcsbUJBQ2dCO0FBQ3pCO0FBRUEsTUFBTSxvQkFBb0IsQ0FBQyxTQUFnRDs7QUFDekUsVUFBTyw4Q0FBTSxLQUFLLENBQUMsUUFBUTs7QUFBQSxZQUFDLEdBQUNBLE9BQUFDLE1BQUEsSUFBSSxtQkFBSixnQkFBQUEsSUFBb0Isc0JBQXBCLGdCQUFBRCxJQUF1QztBQUFBLFNBQTdELG1CQUNILG1CQURHLG1CQUNhLHNCQURiLG1CQUNnQztBQUN6QztBQUVBLE1BQU0sbUJBQW1CLENBQUMsU0FBZ0Q7O0FBQ3hFLFVBQU8sOENBQU0sS0FBSyxDQUFDLFFBQVE7O0FBQUEsWUFBQyxHQUFDQSxPQUFBQyxNQUFBLElBQUksbUJBQUosZ0JBQUFBLElBQW9CLHNCQUFwQixnQkFBQUQsSUFBdUM7QUFBQSxTQUE3RCxtQkFDSCxtQkFERyxtQkFDYSxzQkFEYixtQkFDZ0M7QUFDekM7QUFFYSxNQUFBLGdCQUFnQixDQUFDLGVBQTRDOztBQUN4RSxRQUFNLGFBQWE7QUFBQSxJQUNqQixhQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsSUFDUCwwQkFBMEI7QUFBQSxJQUMxQixtQkFBbUI7QUFBQSxJQUNuQixhQUFhO0FBQUE7QUFHZixVQUFPLE1BQUMsR0FBRyxVQUFVLE1BQWQsbUJBQWlCLEtBQ3RCLENBQUMsR0FBZ0IsTUFBbUIsV0FBVyxFQUFFLEtBQU0sSUFBSSxXQUFXLEVBQUUsS0FBTTtBQUVsRjtBQUVhLE1BQUEsYUFBYSxDQUFDLGNBQWtDOztBQUMzRCxVQUFRLHVDQUFXLE9BQU87QUFBQSxJQUN4QixLQUFLO0FBQ0ksYUFBQTtBQUFBLFFBQ0wsTUFBTTtBQUFBLFFBQ04sUUFBTSw0Q0FBVyxzQkFBWCxtQkFBOEIsVUFBUyx1Q0FBVyxrQkFBa0IsR0FBRyxRQUFRO0FBQUE7SUFFekYsS0FBSztBQUNJLGFBQUE7QUFBQSxRQUNMLE1BQU07QUFBQSxRQUNOLE9BQU0sdUNBQVcsa0JBQWtCLFVBQVMsdUNBQVcsa0JBQWtCLEdBQUcsUUFBUTtBQUFBO0lBRXhGLEtBQUs7QUFDSSxhQUFBO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixPQUFNLHVDQUFXLGtCQUFrQixVQUFTLHVDQUFXLGtCQUFrQixHQUFHLFFBQVE7QUFBQTtJQUV4RixLQUFLO0FBQ0ksYUFBQTtBQUFBLFFBQ0wsTUFBTTtBQUFBLFFBQ04sT0FBTSx1Q0FBVyxrQkFBa0IsVUFBUyx1Q0FBVyxrQkFBa0IsR0FBRyxRQUFRO0FBQUE7SUFFeEYsS0FBSztBQUNJLGFBQUE7QUFBQSxRQUNMLE1BQU07QUFBQSxRQUNOLE9BQU0sdUNBQVcsa0JBQWtCLFVBQVMsdUNBQVcsa0JBQWtCLEdBQUcsUUFBUTtBQUFBO0lBRXhGO0FBQ1MsYUFBQTtBQUFBLFFBQ0wsTUFBTTtBQUFBLFFBQ04sT0FBTSx1Q0FBVyxrQkFBa0IsVUFBUyx1Q0FBVyxrQkFBa0IsR0FBRyxRQUFRO0FBQUE7O0FBRzVGO0FBRWEsTUFBQSxTQUFTLENBQUMsTUFBaUIsb0JBQW1DO0FBQ3pFLFFBQU0sRUFBRSxTQUFTLFNBQVMsUUFBUSxDQUFBO0FBQ2xDLFFBQU0sV0FBVyw2QkFBTSxPQUFPLENBQUMsUUFBUSxVQUFVLEdBQUc7QUFDcEQsUUFBTSxFQUFFLGVBQWUsV0FBVztBQUU5QixPQUFBLHlDQUFZLGVBQWEseUNBQVk7QUFDdkMsV0FBTyxFQUFFLE1BQU0sZ0JBQWdCLE1BQU0seUNBQVksY0FBYTtBQUNoRSxNQUFJLGlCQUFpQixRQUFRO0FBQzNCLFdBQU8sRUFBRSxNQUFNLHFCQUFxQixNQUFNLGlCQUFpQixRQUFRLEVBQUM7QUFDdEUsTUFBSSx5Q0FBWTtBQUFhLFdBQU8sRUFBRSxNQUFNLGVBQWUsTUFBTSxXQUFXLGdCQUFlO0FBQzNGLE1BQUksa0JBQWtCLFFBQVE7QUFBRyxXQUFPLEVBQUUsTUFBTSxXQUFXLE1BQU0sa0JBQWtCLFFBQVEsRUFBQztBQUM1RixNQUFJLGlCQUFpQixRQUFRO0FBQUcsV0FBTyxFQUFFLE1BQU0sWUFBWSxNQUFNLGlCQUFpQixRQUFRLEVBQUM7QUFDdkYsT0FBQSx5Q0FBWSxhQUFXLHlDQUFZO0FBQ3JDLFdBQU8sRUFBRSxNQUFNLFNBQVMsTUFBTSxhQUFhLFFBQVEsRUFBQztBQUN0RCxNQUFJLHlDQUFZLGFBQWE7QUFDckIsVUFBQSxZQUFZLFNBQVMsQ0FBQyxFQUFFO0FBQ3ZCLFdBQUE7QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLE1BQU0sVUFBVSxjQUFjLFVBQVUsa0JBQWtCLG1CQUFtQixlQUFlO0FBQUE7O0FBSWhHLFNBQU87QUFDVDtBQUVBLE1BQU0sdUJBQXVCLENBQUMsWUFBeUM7QUFDL0QsUUFBQSxvQkFBb0IsQ0FBQyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJO0FBRXJGLFNBQU8sUUFBUSxPQUFPLENBQUMsYUFBaUMsV0FBc0M7QUFDeEYsUUFBQTtBQUFvQixhQUFBO0FBQ3hCLFFBQUksa0JBQWtCLFNBQVMsT0FBTyxJQUFJLEdBQUc7QUFDM0MsYUFBTyxFQUFFLEdBQUcsUUFBUSxNQUFNOztLQUUzQixNQUFTO0FBQ2Q7QUFFYSxNQUFBLGdCQUFnQixDQUFDLFlBQStCO0FBQzNELFFBQU0sZUFBZSxDQUFDLEtBQUssTUFBTSxNQUFNLE1BQU0sSUFBSTtBQUVqRCxRQUFNLGVBQWUsUUFBUSxPQUFPLENBQUMsUUFBUSxVQUFTO0FBQzdDLFdBQUEsUUFBUSxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsT0FBTyxJQUFJLE1BQU07QUFBQSxFQUFBLENBQzdEO0FBRU0sU0FBQSxhQUNKLE9BQU8sQ0FBQyxXQUFXLGFBQWEsU0FBUyxPQUFPLElBQUksQ0FBQyxFQUNyRCxLQUFLLENBQUMsR0FBRyxNQUFNLGFBQWEsUUFBUSxFQUFFLElBQUksSUFBSSxhQUFhLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFDL0U7QUFFYSxNQUFBLGdCQUFnQixDQUFDLFlBQStCO0FBQ3JELFFBQUEsb0JBQW9CLHFCQUFxQixPQUFPO0FBQ2hELFFBQUEsa0JBQWtCLGNBQWMsT0FBTztBQUU3QyxNQUFJLHNCQUFzQjtBQUFrQixXQUFBO0FBQzVDLE1BQUksQ0FBQyxnQkFBZ0I7QUFBUSxXQUFPLENBQUMsaUJBQWlCO0FBRXRELE1BQUksZ0JBQWdCLENBQUMsRUFBRSxTQUFTLE9BQU8sZ0JBQWdCLENBQUMsR0FBRztBQUN6RCxXQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxtQkFBbUIsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE9BQ2pFLGdCQUFnQixNQUFNLENBQUMsQ0FBQztBQUFBLEVBQUE7QUFJckIsU0FBQSxDQUFDLG1CQUFtQixHQUFHLGVBQWU7QUFDL0M7SUFPTSwwQkFBc0IsTUFBQTs7MEJBRDNCLGNBQWMsbUJBQW1CLENBQUM7Ozs7b0JBQ0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFSLEVBQUEsbUJBQVEsWUFBVTtBQUFBOztBQUlqQjtBQUdBO0FBSzVCO0FBRzRCO0FBUTVCO0FBVUE7QUFRQTtBQU9BO0FBS0E7QUFLQTtBQTFESSx5QkFBQSx5QkFBQSxrQkFBQSxNQUFBLDBCQUFBLEdBSTBELGtCQUFBLE1BQUEsb0JBQUEsSUFBSztBQUd2Qix5QkFBQSwwQkFBQSxrQkFBQSxNQUFBLHVCQUFBLEdBQUEsa0JBQUEsTUFBQSxxQkFBZSxJQUFLO0FBS2hELHlCQUFBLHFDQUFBLGtCQUFBLE1BQUEsd0JBQUEsR0FBQSxrQkFBQSxNQUFBLGdDQUE0QixLQUFLO0FBR0wseUJBQUEsNkJBQUEsa0JBQUEsTUFBQSxtQ0FBQSxHQUFBLGtCQUFBLE1BQUEsd0JBQXFCLElBQUs7QUFRdEQseUJBQUEsZ0NBQUEsa0JBQUEsTUFBQSwyQkFBQSxHQUFBLGtCQUFBLE1BQUEsMkJBQXVCLEtBQUs7QUFVNUIseUJBQUEsaUNBQUEsa0JBQUEsTUFBQSw4QkFBQSxHQUFBLGtCQUFBLE1BQUEsNEJBQXdCLEtBQUs7QUFRN0IseUJBQUEsaUNBQUEsa0JBQUEsTUFBQSwrQkFBQSxHQUFBLGtCQUFBLE1BQUEsNEJBQXdCLEtBQUs7QUFPN0IseUJBQUEsb0NBQUEsa0JBQUEsTUFBQSwrQkFBQSxHQUFBLGtCQUFBLE1BQUEsK0JBQTBCLEVBQUU7QUFLNUIseUJBQUEsMENBQUEsa0JBQUEsTUFBQSxrQ0FBQSxHQUFBLGtCQUFBLE1BQUEscUNBQWlDLEtBQUs7QUFLdEMseUJBQUEsMkJBQUEsa0JBQUEsTUFBQSx3Q0FBQSxHQUFBLGtCQUFBLE1BQUEsc0JBQWtCLEtBQUs7QUFVL0IsV0FBSSxRQUFBLGtCQUFBLE1BQUEseUJBQUEsR0FBZ0I7QUFFcEIsV0FBQSxZQUFZLElBQUksc0JBQXNCLElBQUk7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQWxFdEIsSUFBZ0IsT0FBd0I7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQXhDLElBQWdCLEtBQXdCLE9BQUE7QUFBQSx5QkFBQSx3QkFBQTtBQUFBLElBQUE7QUFBQTtBQUFBLElBR3hDLElBQWdCLFFBQXFCO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUFyQyxJQUFnQixNQUFxQixPQUFBO0FBQUEseUJBQUEseUJBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQUtqRSxJQUFnQixtQkFBa0M7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQWxELElBQWdCLGlCQUFrQyxPQUFBO0FBQUEseUJBQUEsb0NBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQUd0QixJQUFnQixXQUEyQjtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBM0MsSUFBZ0IsU0FBMkIsT0FBQTtBQUFBLHlCQUFBLDRCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFRdkUsSUFBZ0IsY0FBNkI7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQTdDLElBQWdCLFlBQTZCLE9BQUE7QUFBQSx5QkFBQSwrQkFBQTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVU3QyxJQUFnQixlQUE4QjtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBOUMsSUFBZ0IsYUFBOEIsT0FBQTtBQUFBLHlCQUFBLGdDQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFROUMsSUFBZ0IsZUFBOEI7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQTlDLElBQWdCLGFBQThCLE9BQUE7QUFBQSx5QkFBQSxnQ0FBQTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU85QyxJQUFnQixrQkFBNkI7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQTdDLElBQWdCLGdCQUE2QixPQUFBO0FBQUEseUJBQUEsbUNBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQUs3QyxJQUFnQix3QkFBdUM7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQXZELElBQWdCLHNCQUF1QyxPQUFBO0FBQUEseUJBQUEseUNBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQUt2RCxJQUFnQixTQUF3QjtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBeEMsSUFBZ0IsT0FBd0IsT0FBQTtBQUFBLHlCQUFBLDBCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUEsSUFJeEMsSUFBVyxJQUFJLE9BQThCO0FBQzNDLFdBQUssT0FBTyxtQkFBbUIsbUJBQW1CLG1CQUFtQixZQUFZLEtBQUssQ0FBQztBQUFBLElBQUE7QUFBQSxJQUV6RixJQUFXLE1BQUc7QUFDTCxhQUFBLEtBQUssUUFBUSxvQkFBSTs7SUFNUCxXQUFXLG1CQUF1QztBQUNuRSxZQUFNLFdBQVcsaUJBQWlCO0FBRTlCLFVBQUEsa0JBQWtCLElBQUksYUFBYSxHQUFHO0FBQ3hDLDZCQUFxQixNQUFNLFFBQVEsQ0FBQyxLQUFLLGNBQWMsYUFBYSxJQUFJO0FBQUEsTUFBQTtBQUFBLElBQzFFO0FBQUE7QUFBQSxJQUlNLGtCQUFlO0FBQ2QsYUFBQTtBQUFBO0FBQUEsVUFFRCxLQUFLLGVBQ0gscUVBQ0EsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQTtBQUFBLElBVVQsZUFBWTs7QUFDWCxlQUFBLE1BQUFDLE1BQUEsS0FBSyxTQUFMLGdCQUFBQSxJQUFXLFNBQVgsbUJBQWlCLE9BQU8sQ0FBQyxRQUFRLFVBQVUsR0FBRyxPQUFNOztJQUdyRCxzQkFBbUI7O0FBQ3JCLFVBQUEsR0FBQ0EsTUFBQSxLQUFLLEtBQUssWUFBVixnQkFBQUEsSUFBbUI7QUFBZ0IsZUFBQTtBQUNsQyxZQUFBLFdBQVcsS0FBSztBQUN0QixZQUFNLFlBQVUsVUFBSyxLQUFLLFFBQVEsWUFBbEIsbUJBQTJCLGlCQUFnQjtBQUMzRCxZQUFNLFFBQVEsVUFDVixTQUFTLENBQUMsRUFBRSxlQUFlLHFCQUFxQixLQUNoRCxTQUFTLENBQUMsRUFBRSxlQUFlLGdCQUFnQjtBQUV4QyxhQUFBO0FBQUEsUUFDTCxNQUFNLGlCQUFpQixLQUFLLFVBQVUsT0FBTyxJQUFJLE1BQU07QUFBQSxRQUN2RDtBQUFBOzs7SUFLSSxrQkFBZTs7QUFDakIsVUFBQSxHQUFDQSxNQUFBLEtBQUssS0FBSyxZQUFWLGdCQUFBQSxJQUFtQjtBQUFnQixlQUFBO0FBQ2xDLFlBQUEsa0JBQWtCLEtBQUs7QUFDdEIsYUFBQTtBQUFBO0FBQUEsK0NBRW9DLG1EQUFpQixJQUFJO0FBQUE7QUFBQSxhQUV2RCxtREFBaUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUE7QUFBQSxJQU16QixjQUFjLE1BQWU7O0FBQ25DLFlBQU0sRUFBRSxlQUFlLFFBQVE7QUFDekIsWUFBQSxtQkFBbUIsY0FBYyxjQUFjLFVBQVU7QUFDL0QsWUFBTSxNQUFNLE9BQU8sTUFBTSxLQUFLLFVBQVUsT0FBTztBQUV4QyxhQUFBO0FBQUEsUUFDTCxPQUFLQSxNQUFBLE9BQU8sS0FBSyxHQUFHLE1BQWYsZ0JBQUFBLElBQWtCLFVBQVMsTUFBTTtBQUFBLFFBQ3RDLE1BQUsseUNBQVksVUFBUyxXQUFXLGlCQUFpQixDQUFDLENBQUMsSUFBSTtBQUFBOztJQUl4RCxzQkFBc0IsTUFBZTs7QUFDM0MsWUFBTSxFQUFFLFNBQVMsTUFBTSxRQUFPLElBQUssUUFBUSxDQUFBO0FBQ3JDLFlBQUEsRUFDSixlQUNBLGFBQ0EsV0FDQSxTQUNBLFNBQ0EsV0FDQSxXQUNBLFNBQ0UsSUFBQSxXQUFXLENBQUE7QUFFZixZQUFNLEVBQUUsd0JBQXdCLHFCQUFzQixJQUFHLGlDQUN2RCxNQUNBLGlCQUFpQixHQUNqQixlQUFlLEdBQ2YsS0FBSyxVQUFVLFNBQ2YsS0FBSyxZQUFZO0FBR2IsWUFBQSxXQUFXLEtBQUs7QUFFdEIsWUFBTSxpQkFBa0MsdUNBQVcsUUFDL0MsZ0NBQWdDLFVBQVUsSUFBSSxJQUM5QztBQUVKLFlBQU0sZUFBZ0MsbUNBQVMsUUFDM0MsZ0NBQWdDLFFBQVEsSUFBSSxJQUM1QztBQUVFLFlBQUEsb0JBQW9CLHlCQUN0QixHQUFHLHVCQUF1QixJQUFJLElBQUksdUJBQXVCLFFBQVEsT0FDakU7QUFFRSxZQUFBLGtCQUFrQix1QkFDcEIsR0FBRyxxQkFBcUIsSUFBSSxJQUFJLHFCQUFxQixRQUFRLE9BQzdEO0FBRUosWUFBTSxvQkFBb0IsZ0JBQ3RCLEdBQUcsY0FBYyxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQUssT0FBTyxlQUFlLE9BQU8sQ0FBQyxPQUMzRTtBQUVKLFlBQU0sdUJBQXVCLE1BQWE7O0FBQ3BDLFlBQUEsRUFBQyx1Q0FBVyxnQkFBZTtBQUN0QixpQkFBQTtBQUFBLFFBQUE7QUFJSCxjQUFBLHFCQUFvQix1Q0FBVyxlQUFjLEdBQUcsUUFBUSxLQUFLLFVBQVUsT0FBTyxDQUFDLE1BQU07QUFDcEYsZUFBQSxHQUFHLGlCQUFpQixJQUN6QkEsTUFBQSxLQUFLLDBCQUFMLGdCQUFBQSxJQUE0QixJQUM5QixJQUFJLHVDQUFXLGFBQWE7QUFBQSxNQUM5QjtBQUVNLFlBQUEsdUJBQ0osV0FBVyxRQUFRLGNBQ2YscUJBQXFCLFFBQVEsWUFBWSxhQUFhLEtBQ3RELEdBQUcscUJBQXFCLFFBQVEsWUFBWSxhQUFhLEVBQUUsS0FBSyxVQUFVLE9BQU8sQ0FBQyxPQUNsRjtBQUVBLFlBQUEsc0JBQXFCLG1DQUFTLDJCQUNoQyxHQUFHLFFBQVEsdUJBQXVCLElBQUksUUFBUSxRQUFRLEVBQUUsT0FDeEQ7QUFFRSxZQUFBLGdCQUFnQixHQUFHLGNBQWMsS0FBSyxVQUFVLE9BQU8sQ0FBQyxJQUFJLFNBQVM7QUFFckUsWUFBQSxTQUFTLEtBQUssY0FBYyxJQUFJO0FBQ3RDLFlBQU0sWUFBVUEsTUFBQSxpQ0FBUSxRQUFSLGdCQUFBQSxJQUFhLFFBQ3pCLEdBQUcsaUJBQWlCLEtBQUssVUFBVSxPQUFPLENBQUMsTUFBSyxzQ0FBUSxRQUFSLG1CQUFhLElBQUksT0FDakU7QUFDSixZQUFNLFlBQVUsc0NBQVEsUUFBUixtQkFBYSxRQUN6QixHQUFHLGlCQUFpQixLQUFLLFVBQVUsT0FBTyxDQUFDLE1BQUssc0NBQVEsUUFBUixtQkFBYSxJQUFJLE9BQ2pFO0FBRUosWUFBTSxlQUFlLEtBQUssV0FBVyxHQUFHLEtBQUssU0FBUyxJQUFJLE9BQU87QUFFakUsWUFBTSxZQUFZLEtBQUcsVUFBSyxVQUFMLG1CQUFZLGNBQWEsZUFBZSxLQUFLLFVBQVUsT0FBTyxJQUFJLEVBQUUsTUFDdkYsVUFBSyxVQUFMLG1CQUFZLFdBQVEsVUFBSyxVQUFMLG1CQUFZLFlBQzNCLFVBQUssVUFBTCxtQkFBWSxTQUFRLE1BQU0sU0FBTyxVQUFLLFVBQUwsbUJBQVksVUFBUyxNQUFNLE9BQzdELEVBQ047QUFFQSxZQUFNLHFCQUNKLFNBQVMsU0FBUyxJQUNkLEdBQUcsU0FBUyxTQUFTLENBQUMsSUFBSSx1QkFBdUIsS0FBSyxVQUFVLE9BQU8sQ0FBQyxPQUN4RSxTQUFTLFNBQVMsSUFDaEIsR0FBRyxTQUFTLFNBQVMsQ0FBQyxJQUFJLHNCQUFzQixLQUFLLFVBQVUsT0FBTyxDQUFDLE9BQ3ZFO0FBRVIsWUFBTSxrQkFBa0IsY0FDcEIsR0FBRyxZQUFZLEtBQUssVUFBVSxPQUFPLENBQUMsS0FBSyxPQUFPLGFBQWEsT0FBTyxDQUFDLE9BQ3ZFO0FBRUosVUFBSSxnQkFBd0I7QUFDNUIsVUFBSSxXQUFXO0FBQ2IsWUFBSSxVQUFVLGNBQWMsVUFBVSxlQUFlLFdBQVc7QUFDOUQsMkJBQWlCLEdBQUcsVUFBVSxNQUFNLEtBQUssVUFBVSxPQUFPLENBQUMsS0FFdkQsbUJBQWMsVUFBVSxXQUFXLGFBQTZCLE1BQWhFLG1CQUlFLEtBQUssVUFBVSxRQUNyQjtBQUFBLFFBQUE7QUFFRixZQUFJLFVBQVUsZUFBZSxVQUFVLGdCQUFnQixXQUFXO0FBQ2hFLDJCQUFpQixJQUFJLFVBQVUsT0FBTyxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBRXpELG1CQUFjLFVBQVUsWUFBWSxhQUE2QixNQUFqRSxtQkFJRSxLQUFLLFVBQVUsUUFDckI7QUFBQSxRQUFBO0FBQUEsTUFDRjtBQUdJLFlBQUEsYUFDSixXQUNBLGNBQWMsT0FBTyxFQUFFLFlBQ3ZCLG1CQUFjLE9BQU8sTUFBckIsbUJBQ0ksSUFBSSxDQUFDLFFBQVEsVUFBVTs7QUFBQSx1QkFBUSxPQUFLQSxNQUFBLE9BQU8sU0FBUCxnQkFBQUEsSUFBYTtBQUFBLFNBQ2xELEtBQUssU0FBUTtBQUVaLFlBQUEsaUJBQWlCLGFBQ25CLEdBQUcsZ0JBQWdCLEtBQUssVUFBVSxPQUFPLENBQUMsS0FBSyxVQUFVLEtBQ3pEO0FBRUUsWUFBQSxlQUNKLENBQUMsQ0FBQyxZQUFZLFdBQVcsSUFDckIsR0FBRyxpQkFBaUIsS0FBSyxVQUFVLE9BQU8sQ0FBQyxJQUN6QyxlQUFlLFVBQVUsS0FBSyxVQUFVLE9BQU8sRUFBRSxJQUNuRCxPQUNBO0FBRUMsYUFBQTtBQUFBLFFBQ0w7QUFBQSxRQUNBO0FBQUEsUUFDQSxxQkFBc0I7QUFBQSxRQUN0QjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxVQUFVLEtBQUs7QUFBQSxRQUNmO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUFBLEVBRUMsSUFBSSxDQUFDLE1BQU0sdUJBQUcsTUFBTSxFQUNwQixPQUFPLENBQUMsTUFBTSxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQy9CLEtBQUssR0FBRztBQUFBLElBQUE7QUFBQSxJQUdNLFNBQU07O0FBQ3ZCLFVBQUksS0FBSyxhQUFhO0FBQ3BCLGVBQU8sS0FBSyxnQkFBZTtBQUFBLE1BQUE7QUFHdkIsWUFBQSxFQUFFLE1BQU0sSUFBSSxTQUFTLFlBQVksS0FBSyxRQUFRO0FBRTlDLFlBQUEsRUFDSixTQUNBLFdBQ0EsZUFDQSxXQUNBLFNBQ0EsYUFDQSxXQUNBLFNBQ0UsSUFBQSxXQUFXLENBQUE7QUFFZixZQUFNLFNBQVMsS0FBSyxjQUFjLEtBQUssSUFBSTtBQUMzQyxZQUFNLFlBQVksQ0FBQyxDQUFDLE9BQU8sT0FBTyxDQUFDLENBQUMsT0FBTztBQUVyQyxZQUFBLG1CQUFtQixXQUFXLGNBQWMsT0FBTztBQUV6RCxZQUFNLGNBQWMsV0FBVyxlQUFlLFVBQVUsS0FBSyxVQUFVLE9BQU8sSUFBSTtBQUUzRSxhQUFBO0FBQUEsOEJBQ21CLEVBQUU7QUFBQTtBQUFBLG9CQUVaLEtBQUssTUFBTTtBQUFBLDBCQUNMLEtBQUssd0JBQXdCLFNBQVMsT0FBTztBQUFBO0FBQUEsWUFFM0QsS0FBSyxrQkFBa0IsS0FBSyxrQkFBa0IsS0FBSyxzQkFBc0IsS0FBSyxJQUFJLENBQUM7QUFBQTtBQUFBLFVBRXJGLEtBQUssZUFDSCxxRUFDQSxPQUFPO0FBQUEsVUFDVCxLQUFLLFNBQVMsQ0FBQyxLQUFLLGVBQ2xCLDZCQUE2QixLQUFLLE1BQU0sYUFBYSxhQUFhLE9BQU87QUFBQSxnQkFDckUsS0FBSyxNQUFNLGFBQ1Q7QUFBQTtBQUFBLHlCQUVPLGVBQWUsS0FBSyxVQUFVLE9BQU8sQ0FBQztBQUFBO0FBQUEsNkJBRzdDLE9BQU87QUFBQSxnQkFDVCxLQUFLLE1BQU0sT0FBTyxhQUFhLEtBQUssTUFBTSxJQUFJLFlBQVksT0FBTztBQUFBLGdCQUNqRSxLQUFLLE1BQU0sUUFBUSxhQUFhLEtBQUssTUFBTSxLQUFLLFlBQVksT0FBTztBQUFBLGlDQUV2RSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBSUgsbUNBQVMsK0JBQ1g7QUFBQTtBQUFBO0FBQUEsZ0NBR2tCLFFBQVEsMEJBQTBCO0FBQUE7QUFBQTtBQUFBLG9CQUc5QyxXQUNGLFFBQVEsZUFDUixxQkFBcUIsUUFBUSxZQUFZLFlBQWEsQ0FBQSxLQUN0RCxxQkFBcUIsUUFBUSxZQUFZLFlBQVcsQ0FBRSxFQUFFLEtBQUssVUFBVSxPQUFPLENBQUM7QUFBQTtBQUFBO0FBQUEsc0JBRzNFO0FBQUEsZ0JBQ04sWUFDRCxRQUFRLHdCQUNMLGtCQUFrQixRQUFRLHVCQUF1QixRQUFRLElBQUksSUFDN0QsUUFBUSwyQkFDUixvQkFBb0IsUUFBUSx5QkFBeUIsbUNBQVMsSUFBSSxFQUFFO0FBQUE7QUFBQSxjQUV4RSxZQUNFLFVBQVUsR0FBRyxjQUFjLEtBQUssVUFBVSxPQUFPLENBQUMsSUFBSSxTQUFTLEVBQUUsU0FDakUsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUlILElBQUk7QUFBQSw2QkFDSyx1Q0FBVyxJQUFJO0FBQUEsMkJBQ2pCLG1DQUFTLElBQUk7QUFBQSw2QkFDWCxhQUFhO0FBQUEsMkJBQ2YsV0FBVztBQUFBLGlDQUNMLEtBQUssZ0JBQWdCO0FBQUEsNkJBQ3pCLEtBQUssWUFBWTtBQUFBLG1CQUMzQixLQUFLLEdBQUc7QUFBQTtBQUFBO0FBQUEsY0FHYixZQUFXLHVDQUFXLGlCQUNwQjtBQUFBLDJCQUNVLHVDQUFXLGVBQWMscUNBQXFDLE9BQU87QUFBQTtBQUFBO0FBQUEsc0JBR3pFLEdBQUcsY0FBYyxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQ3hDLHVDQUFXLGVBQWMsUUFBUSxLQUFLLFVBQVUsT0FBTyxJQUFJLEVBQzdELEVBQUU7QUFBQTtBQUFBO0FBQUEsb0JBR0YsS0FBSyxnQkFBQSxDQUFpQixJQUFJLHVDQUFXLGFBQWE7QUFBQSwyQkFFdEQsT0FBTztBQUFBLGVBQ1IsdUNBQVcsZ0JBQWMsdUNBQVcsZ0JBQWUsY0FDckQsdUNBQVcsZ0JBQWUsVUFBVSxnQkFBZ0IsWUFDakQ7QUFBQSwwQ0FDeUJBLE1BQUEsdUNBQVcsZUFBWCxnQkFBQUEsSUFBdUIsYUFBYTtBQUFBLDJDQUNuQyw0Q0FBVyxnQkFBWCxtQkFBd0IsYUFBYTtBQUFBLCtDQUUvRCxPQUFPO0FBQUEsY0FDUixvQkFBb0IsaUJBQWlCLFVBQVcsS0FBSyxXQUNwRDtBQUFBLG9CQUNJLHFEQUFrQixJQUFJLENBQUMsUUFBUTs7QUFDL0IsdUJBQVEsSUFDSjtBQUFBO0FBQUE7QUFBQSxtQ0FHVyxVQUFRQSxNQUFBLE9BQU8sU0FBUCxnQkFBQUEsSUFBYSxjQUFhO0FBQUE7QUFBQSxrRUFFSkQsTUFBQSxPQUFPLFNBQVAsZ0JBQUFBLElBQWEsUUFBUTtBQUFBLGlDQUU5RDtBQUFBLFFBQ0w7QUFBQSxvQkFDQyxLQUFLLFdBQ0g7QUFBQTtBQUFBO0FBQUEsa0NBR1csVUFBSyxhQUFMLG1CQUFlLElBQUk7QUFBQSx3Q0FDYixVQUFLLGFBQUwsbUJBQWUsSUFBSTtBQUFBO0FBQUE7QUFBQSwrQkFJcEMsT0FBTztBQUFBLHlCQUViLE9BQU87QUFBQSxjQUNULFlBQVksV0FBVyxJQUNyQjtBQUFBO0FBQUEsc0JBRU0sR0FBRyxpQkFBaUIsS0FBSyxVQUFVLE9BQU8sQ0FBQyxJQUFJLFlBQWEsSUFBSSxFQUFFO0FBQUE7QUFBQSw2Q0FFM0MsWUFBYSxLQUFLO0FBQUEsMkJBRS9DLE9BQU87QUFBQSxjQUNULGNBQWMsT0FBTyxPQUFPLE9BQU8sT0FDakM7QUFBQSxvQ0FDb0IsT0FBTyxPQUFPLE9BQU8sS0FBTSxJQUFJO0FBQUEsMERBQ1QsT0FBTyxPQUFPLE9BQU8sS0FBTSxJQUFJO0FBQUEsMkJBRXpFLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUE7QUFBQSxLQXhiTyx3Q0FHQSx5Q0FLNUIsb0RBRzRCLDRDQVE1QiwrQ0FVQSxnREFRQSxnREFPQSxtREFLQSx5REFLQTs7QUF0REMsdUJBQUEsQ0FBQSxTQUFTLEVBQUUsTUFBTSxPQUFRLENBQUEsQ0FBQztBQUcxQix3QkFBQSxDQUFBLFNBQVMsRUFBRSxNQUFNLE9BQVEsQ0FBQSxDQUFDO0FBRzFCLG1DQUFBLENBQUEsYUFDQSxTQUFTLEVBQUUsV0FBVyxxQkFBcUIsU0FBUyxNQUFNLE1BQU0sUUFBUyxDQUFBLENBQUM7QUFJMUUsMkJBQUEsQ0FBQSxTQUFTLEVBQUUsTUFBTSxPQUFRLENBQUEsQ0FBQztBQU0xQiw4QkFBQSxDQUFBLFVBQVcsR0FDWCxTQUFTLEVBQUUsV0FBVyxnQkFBZ0IsTUFBTSxTQUFTLENBQUM7QUFTdEQsK0JBQUEsQ0FBQSxVQUFXLEdBQ1gsU0FBUyxFQUFFLFdBQVcsaUJBQWlCLE1BQU0sU0FBUyxDQUFDO0FBT3ZELCtCQUFBLENBQUEsVUFBVyxHQUNYLFNBQVMsRUFBRSxXQUFXLGlCQUFpQixNQUFNLFNBQVMsQ0FBQzttQ0FNdkQsYUFDQSxTQUFTLEVBQUUsV0FBVyxvQkFBQSxDQUFxQixDQUFDO0FBSTVDLHdDQUFBLENBQUEsVUFBVyxHQUNYLFNBQVMsRUFBRSxXQUFXLDBCQUEwQixNQUFNLFNBQVMsQ0FBQzswQkFJaEUsYUFDQSxTQUFTLEVBQUUsTUFBTSxRQUFBLENBQVMsQ0FBQztBQUkzQiwwQkFBQSxDQUFBLFVBQVU7QUF6RGlDLGlCQUFBLElBQUEsTUFBQSxrQkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLFFBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsVUFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsTUFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxPQUF3QjtBQUFBLFNBQUEsVUFBQSxhQUFBLG9CQUFBLHVCQUFBO0FBR3hCLGlCQUFBLElBQUEsTUFBQSxtQkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLFNBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsV0FBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsT0FBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxRQUFxQjtBQUFBLFNBQUEsVUFBQSxhQUFBLHFCQUFBLHdCQUFBO0FBS2pELGlCQUFBLElBQUEsTUFBQSw4QkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLG9CQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLHNCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxrQkFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxtQkFBa0M7QUFBQSxTQUFBLFVBQUEsYUFBQSxnQ0FBQSxtQ0FBQTtBQUdOLGlCQUFBLElBQUEsTUFBQSxzQkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLFlBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsY0FBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsVUFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxXQUEyQjtBQUFBLFNBQUEsVUFBQSxhQUFBLHdCQUFBLDJCQUFBO0FBUXZELGlCQUFBLElBQUEsTUFBQSx5QkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLGVBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsaUJBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFBLGFBQUEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUEsY0FBNkI7QUFBQSxTQUFBLFVBQUEsYUFBQSwyQkFBQSw4QkFBQTtBQVU3QixpQkFBQSxJQUFBLE1BQUEsMEJBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxnQkFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxrQkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsY0FBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxlQUE4QjtBQUFBLFNBQUEsVUFBQSxhQUFBLDRCQUFBLCtCQUFBO0FBUTlCLGlCQUFBLElBQUEsTUFBQSwwQkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLGdCQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLGtCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxjQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLGVBQThCO0FBQUEsU0FBQSxVQUFBLGFBQUEsNEJBQUEsK0JBQUE7QUFPOUIsaUJBQUEsSUFBQSxNQUFBLDZCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsbUJBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEscUJBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFBLGlCQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLGtCQUE2QjtBQUFBLFNBQUEsVUFBQSxhQUFBLCtCQUFBLGtDQUFBO0FBSzdCLGlCQUFBLElBQUEsTUFBQSxtQ0FBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLHlCQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLDJCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSx1QkFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSx3QkFBdUM7QUFBQSxTQUFBLFVBQUEsYUFBQSxxQ0FBQSx3Q0FBQTtBQUt2QyxpQkFBQSxJQUFBLE1BQUEsb0JBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxVQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLFlBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFBLFFBQUEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUEsU0FBd0I7QUFBQSxTQUFBLFVBQUEsYUFBQSxzQkFBQSx5QkFBQTtBQUl4QyxpQkFBQSxJQUFBLE1BQUEscUJBQUEsRUFBQSxNQUFBLFVBQUEsTUFBQSxPQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLFNBQUEsS0FBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBVyxNQUVWO0FBQUEsU0FBQSxVQUFBLGFBQUEsTUFBQSwwQkFBQTtBQWhFSCxpQkFrY0MsTUFBQSxtQkFBQSxFQUFBLE9BQUEsV0FBQSxHQUFBLGtCQUFBLEVBQUEsTUFBQSxTQUFBLE1BQUEsV0FBQSxNQUFBLFVBQUEsVUFBQSxHQUFBLE1BQUEsdUJBQUE7OztRQWpjd0IsR0FBTSxTQUFtQixPQUQ1QyxrQkFBc0IsWUFBQSx1QkFBQSxHQUFDOzs7In0=