@sbb-esta/lyne-elements-experimental 5.0.0-next.2 → 5.0.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +1 -1
- package/autocomplete-grid-option.component-kcihiOWt.js +35 -0
- package/autocomplete-grid.js +1 -1
- package/autocomplete-grid.pure.js +1 -1
- package/core/styles/lean-off-brand-theme.scss +3 -0
- package/core/styles/lean-safety-theme.scss +3 -0
- package/custom-elements.json +5098 -5084
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +1 -1
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +1 -1
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +1 -1
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +1 -1
- package/development/autocomplete-grid-cell.component-BF8i4388.js +1 -1
- package/development/autocomplete-grid-option.component-D9pTXPlu.js +58 -0
- package/development/autocomplete-grid-row.component-CBHh50jC.js +1 -1
- package/development/autocomplete-grid.js +1 -1
- package/development/autocomplete-grid.pure.js +1 -1
- package/development/core/timetable/access-leg-helper.js +1 -1
- package/development/core/timetable/timetable-helper.js +1 -1
- package/development/date-helper-DGz-ztQM.js +1 -1
- package/development/differenceInMinutes-B7_GTDq7.js +1 -1
- package/development/format-DFx4997p.js +1 -1
- package/development/isValid-JpZ7FphI.js +1 -1
- package/development/journey-summary/journey-summary.component.d.ts +2 -3
- package/development/journey-summary/journey-summary.component.d.ts.map +1 -1
- package/development/journey-summary.component-De1ioDRq.js +1 -1
- package/development/mapper-hWWm7Uke.js +1 -1
- package/development/pearl-chain-time.component-BxVQ1z-Z.js +1 -1
- package/development/pearl-chain-vertical-item.component-DJioJtxP.js +1 -1
- package/development/pearl-chain-vertical.component-zSOeIkhh.js +1 -1
- package/development/pearl-chain.component-B83OsEx8.js +1 -1
- package/development/seat-reservation/common/translations/i18n.js +1 -1
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +10 -10
- package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation/seat-reservation.component.js +1 -1
- package/development/seat-reservation-area.component-CMqjbUtV.js +1 -1
- package/development/seat-reservation-graphic.component-C2r57590.js +1 -1
- package/development/seat-reservation-navigation-coach.component-BwLbiHCG.js +1 -1
- package/development/seat-reservation-navigation-services.component-Do8JLJh3.js +1 -1
- package/development/seat-reservation-place-control.component-BfuOGZYq.js +1 -1
- package/development/seat-reservation-scoped.component-D-Mvw-Q3.js +1 -1
- package/development/{seat-reservation.component-B2nJ13F1.js → seat-reservation.component-B-n0sIL5.js} +4 -4
- package/development/seat-reservation.js +1 -1
- package/development/seat-reservation.pure.js +1 -1
- package/development/timetable-duration.component-fBla8Kue.js +1 -1
- package/development/timetable-row/timetable-row.component.d.ts.map +1 -1
- package/development/timetable-row/timetable-row.component.js +1 -1
- package/development/timetable-row.component-DSTGtQAC.js +732 -0
- package/development/timetable-row.js +1 -1
- package/development/timetable-row.pure.js +1 -1
- package/development/toDate-DOFAOjP-.js +1 -1
- package/lean-off-brand-theme.css +13 -0
- package/lean-safety-theme.css +13 -0
- package/lean-theme.css +13 -0
- package/package.json +14 -2
- package/seat-reservation/seat-reservation/seat-reservation-base-element.js +6 -6
- package/seat-reservation/seat-reservation/seat-reservation.component.js +1 -1
- package/{seat-reservation.component-CB2IWgM9.js → seat-reservation.component-RNI6_X71.js} +3 -3
- package/seat-reservation.js +1 -1
- package/seat-reservation.pure.js +1 -1
- package/timetable-row/timetable-row.component.js +1 -1
- package/{timetable-row.component-BqIVlISS.js → timetable-row.component-Din-TQ9u.js} +109 -109
- package/timetable-row.js +1 -1
- package/timetable-row.pure.js +1 -1
- package/autocomplete-grid-option.component-iEj9qreq.js +0 -35
- package/development/autocomplete-grid-option.component-BQwwanAf.js +0 -59
- package/development/timetable-row.component-C9Y9Rev1.js +0 -732
|
@@ -0,0 +1,732 @@
|
|
|
1
|
+
import { t as format } from "./format-DFx4997p.js";
|
|
2
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
3
|
+
import { SbbElement, SbbLanguageController, defaultDateAdapter, forceType, i18nArrival, i18nClass, i18nDeparture, i18nDirection, i18nFromPlatform, i18nMeansOfTransport, i18nNew, i18nOccupancy, i18nRealTimeInfo, i18nSupersaver, i18nTransferProcedure, i18nTransferProcedures, i18nTravelhints, i18nTripDuration, i18nTripQuayChange, screenReaderOnlyStyles } from "@sbb-esta/lyne-elements/core.js";
|
|
4
|
+
import { SbbIconElement } from "@sbb-esta/lyne-elements/icon.pure.js";
|
|
5
|
+
import { html, nothing, unsafeCSS } from "lit";
|
|
6
|
+
import { property } from "lit/decorators.js";
|
|
7
|
+
import { durationToTime, getDepartureArrivalTimeAttribute, isRideLeg, removeTimezoneFromISOTimeString } from "./core.js";
|
|
8
|
+
import { SbbPearlChainTimeElement } from "./pearl-chain-time.pure.js";
|
|
9
|
+
import { SbbCardBadgeElement, SbbCardButtonElement, SbbCardElement } from "@sbb-esta/lyne-elements/card.pure.js";
|
|
10
|
+
import { SbbTimetableOccupancyElement } from "@sbb-esta/lyne-elements/timetable-occupancy.pure.js";
|
|
11
|
+
//#region src/elements-experimental/timetable-row/timetable-row.scss?inline
|
|
12
|
+
var timetable_row_default = ":host {\n --sbb-timetable-row-gap: var(--sbb-spacing-fixed-2x);\n --sbb-timetable-row-height: 1.5625rem;\n --sbb-timetable-row-height-header: 1.25rem;\n --sbb-timetable-row-height-footer: 1rem;\n --sbb-timetable-row-skeleton-pulse-duration: 1800ms;\n display: block;\n}\n\n:host([disable-animation]) {\n --sbb-timetable-row-skeleton-pulse-duration: 0;\n}\n\n.sbb-timetable__row-transport-icon {\n --sbb-icon-svg-width: 1.25rem;\n --sbb-icon-svg-height: 1.25rem;\n}\n\n.sbb-travel-hints__item {\n --sbb-icon-svg-height: 0.875rem;\n}\n\n.sbb-timetable__row--quay {\n margin-inline-end: var(--sbb-spacing-fixed-1x);\n}\n\n.sbb-timetable__row--quay-type {\n float: left;\n}\n\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: inherit;\n display: inline-flex;\n}\n\nli {\n display: inline-flex;\n align-self: center;\n}\n\n.sbb-timetable__row-transport {\n display: inline-flex;\n align-self: center;\n}\n\n.sbb-timetable__row-transportnumber,\n.sbb-timetable__row-time {\n --sbb-text-font-size: var(--sbb-text-font-size-s);\n font-family: var(--sbb-typo-font-family);\n font-weight: normal;\n line-height: var(--sbb-typo-line-height-text);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n font-size: var(--sbb-text-font-size);\n font-weight: bold;\n line-height: unset;\n white-space: nowrap;\n align-self: center;\n}\n\n.sbb-timetable__row {\n --sbb-text-font-size: var(--sbb-text-font-size-s);\n font-family: var(--sbb-typo-font-family);\n font-weight: normal;\n line-height: var(--sbb-typo-line-height-text);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n font-size: var(--sbb-text-font-size);\n display: flex;\n flex-direction: column;\n gap: var(--sbb-timetable-row-gap);\n}\n\n.sbb-timetable__row-header,\n.sbb-timetable__row-footer {\n animation: none;\n}\n\n.sbb-timetable__row-header {\n display: flex;\n gap: var(--sbb-spacing-fixed-2x);\n align-items: center;\n line-height: var(--sbb-timetable-row-height-header);\n}\n\n.sbb-timetable__row-details,\n.sbb-timetable__row-hints {\n display: inline-flex;\n gap: var(--sbb-spacing-fixed-1x);\n align-items: center;\n}\n\n.sbb-timetable__row-header p {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin: 0;\n align-self: center;\n}\n\n.sbb-timetable__row-footer {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n align-items: center;\n gap: var(--sbb-spacing-fixed-2x);\n line-height: var(--sbb-timetable-row-height-footer);\n}\n.sbb-timetable__row-footer > span {\n align-self: center;\n}\n.sbb-timetable__row-footer :only-child {\n margin-inline-start: auto;\n}\n\n.sbb-timetable__row-quay--changed {\n color: var(--sbb-color-primary);\n}\n\n.sbb-timetable__row-transport-wrapper,\n.sbb-timetable__row-warning {\n display: inline-flex;\n}\n\n.sbb-loading {\n pointer-events: none;\n}\n\n.sbb-loading__wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--sbb-spacing-fixed-2x);\n}\n\n.sbb-loading__row {\n width: 100%;\n border-radius: var(--sbb-border-radius-1x);\n height: var(--sbb-timetable-row-height);\n}\n@media (min-width: calc(64rem)) {\n .sbb-loading__row {\n height: 1.75rem;\n }\n}\n@media (forced-colors: active) {\n .sbb-loading__row {\n border: var(--sbb-border-width-1x) solid ButtonBorder !important;\n }\n}\n\n.sbb-loading__row,\n.sbb-loading__badge {\n background: var(--sbb-background-color-4);\n animation: skeleton-pulse var(--sbb-timetable-row-skeleton-pulse-duration) ease-out infinite;\n}\n\n.sbb-loading__row:first-of-type {\n height: var(--sbb-timetable-row-height-header);\n width: 50%;\n}\n\n.sbb-loading__row:last-of-type {\n height: var(--sbb-timetable-row-height-footer);\n}\n\n.sbb-loading__badge {\n margin-inline: auto calc(var(--sbb-spacing-fixed-3x) * -1);\n padding-inline-end: var(--sbb-spacing-fixed-6x);\n border-end-start-radius: var(--sbb-card-badge-border-radius);\n transform: var(--sbb-card-badge-skew);\n width: 7.1875rem;\n height: 1.25rem;\n}\n\n@keyframes skeleton-pulse {\n 0% {\n background: var(--sbb-background-color-4);\n }\n 17% {\n background: var(--sbb-background-color-4);\n }\n 50% {\n background: var(--sbb-background-color-3);\n }\n 67% {\n background: var(--sbb-background-color-3);\n }\n 100% {\n background: var(--sbb-background-color-4);\n }\n}";
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/elements-experimental/timetable-row/timetable-row.component.ts
|
|
15
|
+
var renderIconProduct = (icon, name) => {
|
|
16
|
+
return html`<span class="sbb-timetable__row-transport">
|
|
17
|
+
<sbb-icon name=${icon}></sbb-icon>
|
|
18
|
+
<span class="sbb-screen-reader-only">${name}</span>
|
|
19
|
+
</span>`;
|
|
20
|
+
};
|
|
21
|
+
var renderStringProduct = (vehicleName, line) => {
|
|
22
|
+
const space = [
|
|
23
|
+
"M",
|
|
24
|
+
"B",
|
|
25
|
+
"T"
|
|
26
|
+
].includes(vehicleName) ? " " : "";
|
|
27
|
+
return html`<span class="sbb-timetable__row-transportnumber">
|
|
28
|
+
${line !== null ? vehicleName + space + line : vehicleName}
|
|
29
|
+
</span>`;
|
|
30
|
+
};
|
|
31
|
+
var getReachableText = (legs) => {
|
|
32
|
+
return legs?.find((leg) => leg.serviceJourney?.serviceAlteration?.reachableText)?.serviceJourney?.serviceAlteration?.reachableText;
|
|
33
|
+
};
|
|
34
|
+
var getDelayText = (legs) => {
|
|
35
|
+
return legs?.find((leg) => leg.serviceJourney?.serviceAlteration?.delayText)?.serviceJourney?.serviceAlteration?.delayText;
|
|
36
|
+
};
|
|
37
|
+
var getRedirectedText = (legs) => {
|
|
38
|
+
return legs?.find((leg) => !!leg.serviceJourney?.serviceAlteration?.redirectedText)?.serviceJourney?.serviceAlteration?.redirectedText;
|
|
39
|
+
};
|
|
40
|
+
var getUnplannedStop = (legs) => {
|
|
41
|
+
return legs?.find((leg) => !!leg.serviceJourney?.serviceAlteration?.unplannedStopPointsText)?.serviceJourney?.serviceAlteration?.unplannedStopPointsText;
|
|
42
|
+
};
|
|
43
|
+
var sortSituation = (situations) => {
|
|
44
|
+
const priorities = {
|
|
45
|
+
DISTURBANCE: 0,
|
|
46
|
+
INFORMATION: 1,
|
|
47
|
+
DELAY: 2,
|
|
48
|
+
TRAIN_REPLACEMENT_BY_BUS: 3,
|
|
49
|
+
CONSTRUCTION_SITE: 4,
|
|
50
|
+
END_MESSAGE: 5
|
|
51
|
+
};
|
|
52
|
+
return [...situations]?.sort((a, b) => priorities[a.cause] - priorities[b.cause]);
|
|
53
|
+
};
|
|
54
|
+
var getHimIcon = (situation) => {
|
|
55
|
+
switch (situation?.cause) {
|
|
56
|
+
case "DISTURBANCE": return {
|
|
57
|
+
name: "disruption",
|
|
58
|
+
text: situation?.broadcastMessages?.length ? situation?.broadcastMessages[0].title : ""
|
|
59
|
+
};
|
|
60
|
+
case "INFORMATION": return {
|
|
61
|
+
name: "info",
|
|
62
|
+
text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
|
|
63
|
+
};
|
|
64
|
+
case "DELAY": return {
|
|
65
|
+
name: "delay",
|
|
66
|
+
text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
|
|
67
|
+
};
|
|
68
|
+
case "TRAIN_REPLACEMENT_BY_BUS": return {
|
|
69
|
+
name: "replacementbus",
|
|
70
|
+
text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
|
|
71
|
+
};
|
|
72
|
+
case "CONSTRUCTION_SITE": return {
|
|
73
|
+
name: "construction",
|
|
74
|
+
text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
|
|
75
|
+
};
|
|
76
|
+
default: return {
|
|
77
|
+
name: "info",
|
|
78
|
+
text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
var getCus = (trip, currentLanguage) => {
|
|
83
|
+
const { summary, legs } = trip || {};
|
|
84
|
+
const rideLegs = legs?.filter((leg) => isRideLeg(leg));
|
|
85
|
+
const { tripStatus } = summary || {};
|
|
86
|
+
if (tripStatus?.cancelled || tripStatus?.partiallyCancelled) return {
|
|
87
|
+
name: "cancellation",
|
|
88
|
+
text: tripStatus?.cancelledText
|
|
89
|
+
};
|
|
90
|
+
if (getReachableText(rideLegs)) return {
|
|
91
|
+
name: "missed-connection",
|
|
92
|
+
text: getReachableText(rideLegs)
|
|
93
|
+
};
|
|
94
|
+
if (tripStatus?.alternative) return {
|
|
95
|
+
name: "alternative",
|
|
96
|
+
text: tripStatus.alternativeText
|
|
97
|
+
};
|
|
98
|
+
if (getRedirectedText(rideLegs)) return {
|
|
99
|
+
name: "reroute",
|
|
100
|
+
text: getRedirectedText(rideLegs)
|
|
101
|
+
};
|
|
102
|
+
if (getUnplannedStop(rideLegs)) return {
|
|
103
|
+
name: "add-stop",
|
|
104
|
+
text: getUnplannedStop(rideLegs)
|
|
105
|
+
};
|
|
106
|
+
if (tripStatus?.delayed || tripStatus?.delayedUnknown) return {
|
|
107
|
+
name: "delay",
|
|
108
|
+
text: getDelayText(rideLegs)
|
|
109
|
+
};
|
|
110
|
+
if (tripStatus?.quayChanged) {
|
|
111
|
+
const departure = rideLegs[0].departure;
|
|
112
|
+
return {
|
|
113
|
+
name: "platform-change",
|
|
114
|
+
text: departure.quayChanged ? departure.quayChangedText : i18nTripQuayChange[currentLanguage]
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {};
|
|
118
|
+
};
|
|
119
|
+
var findAndReplaceNotice = (notices) => {
|
|
120
|
+
const reservationNotice = [
|
|
121
|
+
"RR",
|
|
122
|
+
"RK",
|
|
123
|
+
"RC",
|
|
124
|
+
"RL",
|
|
125
|
+
"RM",
|
|
126
|
+
"RS",
|
|
127
|
+
"RU",
|
|
128
|
+
"XP",
|
|
129
|
+
"XR",
|
|
130
|
+
"XT"
|
|
131
|
+
];
|
|
132
|
+
return notices.reduce((foundNotice, notice) => {
|
|
133
|
+
if (foundNotice) return foundNotice;
|
|
134
|
+
if (reservationNotice.includes(notice.name)) return {
|
|
135
|
+
...notice,
|
|
136
|
+
name: "RR"
|
|
137
|
+
};
|
|
138
|
+
}, void 0);
|
|
139
|
+
};
|
|
140
|
+
var filterNotices = (notices) => {
|
|
141
|
+
const allowedNames = [
|
|
142
|
+
"Z",
|
|
143
|
+
"SB",
|
|
144
|
+
"SZ",
|
|
145
|
+
"VR",
|
|
146
|
+
"TG"
|
|
147
|
+
];
|
|
148
|
+
return notices.filter((notice, index) => {
|
|
149
|
+
return notices.findIndex((n) => n.name === notice.name) === index;
|
|
150
|
+
}).filter((notice) => allowedNames.includes(notice.name)).sort((a, b) => allowedNames.indexOf(a.name) - allowedNames.indexOf(b.name));
|
|
151
|
+
};
|
|
152
|
+
var handleNotices = (notices) => {
|
|
153
|
+
const reservationNotice = findAndReplaceNotice(notices);
|
|
154
|
+
const filteredNotices = filterNotices(notices);
|
|
155
|
+
if (reservationNotice === void 0) return filteredNotices;
|
|
156
|
+
if (!filteredNotices.length) return [reservationNotice];
|
|
157
|
+
if (filteredNotices[0].name === "Z" && filteredNotices[1]) return [
|
|
158
|
+
filteredNotices[0],
|
|
159
|
+
reservationNotice,
|
|
160
|
+
filteredNotices[1]
|
|
161
|
+
].concat(filteredNotices.slice(2));
|
|
162
|
+
return [reservationNotice, ...filteredNotices];
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* It displays information about the trip, acting as a container for all the `sbb-timetable-*` components.
|
|
166
|
+
* */
|
|
167
|
+
var SbbTimetableRowElement = (() => {
|
|
168
|
+
let _classSuper = SbbElement;
|
|
169
|
+
let _instanceExtraInitializers = [];
|
|
170
|
+
let _trip_decorators;
|
|
171
|
+
let _trip_initializers = [];
|
|
172
|
+
let _trip_extraInitializers = [];
|
|
173
|
+
let _price_decorators;
|
|
174
|
+
let _price_initializers = [];
|
|
175
|
+
let _price_extraInitializers = [];
|
|
176
|
+
let _disableAnimation_decorators;
|
|
177
|
+
let _disableAnimation_initializers = [];
|
|
178
|
+
let _disableAnimation_extraInitializers = [];
|
|
179
|
+
let _boarding_decorators;
|
|
180
|
+
let _boarding_initializers = [];
|
|
181
|
+
let _boarding_extraInitializers = [];
|
|
182
|
+
let _loadingTrip_decorators;
|
|
183
|
+
let _loadingTrip_initializers = [];
|
|
184
|
+
let _loadingTrip_extraInitializers = [];
|
|
185
|
+
let _a11yFootpath_decorators;
|
|
186
|
+
let _a11yFootpath_initializers = [];
|
|
187
|
+
let _a11yFootpath_extraInitializers = [];
|
|
188
|
+
let _loadingPrice_decorators;
|
|
189
|
+
let _loadingPrice_initializers = [];
|
|
190
|
+
let _loadingPrice_extraInitializers = [];
|
|
191
|
+
let _cardActionLabel_decorators;
|
|
192
|
+
let _cardActionLabel_initializers = [];
|
|
193
|
+
let _cardActionLabel_extraInitializers = [];
|
|
194
|
+
let _accessibilityExpanded_decorators;
|
|
195
|
+
let _accessibilityExpanded_initializers = [];
|
|
196
|
+
let _accessibilityExpanded_extraInitializers = [];
|
|
197
|
+
let _active_decorators;
|
|
198
|
+
let _active_initializers = [];
|
|
199
|
+
let _active_extraInitializers = [];
|
|
200
|
+
let _set_now_decorators;
|
|
201
|
+
return class SbbTimetableRowElement extends _classSuper {
|
|
202
|
+
constructor() {
|
|
203
|
+
super(...arguments);
|
|
204
|
+
this.#trip_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _trip_initializers, null));
|
|
205
|
+
this.#price_accessor_storage = (__runInitializers(this, _trip_extraInitializers), __runInitializers(this, _price_initializers, null));
|
|
206
|
+
this.#disableAnimation_accessor_storage = (__runInitializers(this, _price_extraInitializers), __runInitializers(this, _disableAnimation_initializers, false));
|
|
207
|
+
this.#boarding_accessor_storage = (__runInitializers(this, _disableAnimation_extraInitializers), __runInitializers(this, _boarding_initializers, null));
|
|
208
|
+
this.#loadingTrip_accessor_storage = (__runInitializers(this, _boarding_extraInitializers), __runInitializers(this, _loadingTrip_initializers, false));
|
|
209
|
+
this.#a11yFootpath_accessor_storage = (__runInitializers(this, _loadingTrip_extraInitializers), __runInitializers(this, _a11yFootpath_initializers, false));
|
|
210
|
+
this.#loadingPrice_accessor_storage = (__runInitializers(this, _a11yFootpath_extraInitializers), __runInitializers(this, _loadingPrice_initializers, false));
|
|
211
|
+
this.#cardActionLabel_accessor_storage = (__runInitializers(this, _loadingPrice_extraInitializers), __runInitializers(this, _cardActionLabel_initializers, ""));
|
|
212
|
+
this.#accessibilityExpanded_accessor_storage = (__runInitializers(this, _cardActionLabel_extraInitializers), __runInitializers(this, _accessibilityExpanded_initializers, false));
|
|
213
|
+
this.#active_accessor_storage = (__runInitializers(this, _accessibilityExpanded_extraInitializers), __runInitializers(this, _active_initializers, false));
|
|
214
|
+
this._now = (__runInitializers(this, _active_extraInitializers), null);
|
|
215
|
+
this._language = new SbbLanguageController(this);
|
|
216
|
+
}
|
|
217
|
+
static {
|
|
218
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
219
|
+
_trip_decorators = [property({ type: Object })];
|
|
220
|
+
_price_decorators = [property({ type: Object })];
|
|
221
|
+
_disableAnimation_decorators = [forceType(), property({
|
|
222
|
+
attribute: "disable-animation",
|
|
223
|
+
reflect: true,
|
|
224
|
+
type: Boolean
|
|
225
|
+
})];
|
|
226
|
+
_boarding_decorators = [property({ type: Object })];
|
|
227
|
+
_loadingTrip_decorators = [forceType(), property({
|
|
228
|
+
attribute: "loading-trip",
|
|
229
|
+
type: Boolean
|
|
230
|
+
})];
|
|
231
|
+
_a11yFootpath_decorators = [forceType(), property({
|
|
232
|
+
attribute: "a11y-footpath",
|
|
233
|
+
type: Boolean
|
|
234
|
+
})];
|
|
235
|
+
_loadingPrice_decorators = [forceType(), property({
|
|
236
|
+
attribute: "loading-price",
|
|
237
|
+
type: Boolean
|
|
238
|
+
})];
|
|
239
|
+
_cardActionLabel_decorators = [forceType(), property({ attribute: "card-action-label" })];
|
|
240
|
+
_accessibilityExpanded_decorators = [forceType(), property({
|
|
241
|
+
attribute: "accessibility-expanded",
|
|
242
|
+
type: Boolean
|
|
243
|
+
})];
|
|
244
|
+
_active_decorators = [forceType(), property({ type: Boolean })];
|
|
245
|
+
_set_now_decorators = [property()];
|
|
246
|
+
__esDecorate(this, null, _trip_decorators, {
|
|
247
|
+
kind: "accessor",
|
|
248
|
+
name: "trip",
|
|
249
|
+
static: false,
|
|
250
|
+
private: false,
|
|
251
|
+
access: {
|
|
252
|
+
has: (obj) => "trip" in obj,
|
|
253
|
+
get: (obj) => obj.trip,
|
|
254
|
+
set: (obj, value) => {
|
|
255
|
+
obj.trip = value;
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
metadata: _metadata
|
|
259
|
+
}, _trip_initializers, _trip_extraInitializers);
|
|
260
|
+
__esDecorate(this, null, _price_decorators, {
|
|
261
|
+
kind: "accessor",
|
|
262
|
+
name: "price",
|
|
263
|
+
static: false,
|
|
264
|
+
private: false,
|
|
265
|
+
access: {
|
|
266
|
+
has: (obj) => "price" in obj,
|
|
267
|
+
get: (obj) => obj.price,
|
|
268
|
+
set: (obj, value) => {
|
|
269
|
+
obj.price = value;
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
metadata: _metadata
|
|
273
|
+
}, _price_initializers, _price_extraInitializers);
|
|
274
|
+
__esDecorate(this, null, _disableAnimation_decorators, {
|
|
275
|
+
kind: "accessor",
|
|
276
|
+
name: "disableAnimation",
|
|
277
|
+
static: false,
|
|
278
|
+
private: false,
|
|
279
|
+
access: {
|
|
280
|
+
has: (obj) => "disableAnimation" in obj,
|
|
281
|
+
get: (obj) => obj.disableAnimation,
|
|
282
|
+
set: (obj, value) => {
|
|
283
|
+
obj.disableAnimation = value;
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
metadata: _metadata
|
|
287
|
+
}, _disableAnimation_initializers, _disableAnimation_extraInitializers);
|
|
288
|
+
__esDecorate(this, null, _boarding_decorators, {
|
|
289
|
+
kind: "accessor",
|
|
290
|
+
name: "boarding",
|
|
291
|
+
static: false,
|
|
292
|
+
private: false,
|
|
293
|
+
access: {
|
|
294
|
+
has: (obj) => "boarding" in obj,
|
|
295
|
+
get: (obj) => obj.boarding,
|
|
296
|
+
set: (obj, value) => {
|
|
297
|
+
obj.boarding = value;
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
metadata: _metadata
|
|
301
|
+
}, _boarding_initializers, _boarding_extraInitializers);
|
|
302
|
+
__esDecorate(this, null, _loadingTrip_decorators, {
|
|
303
|
+
kind: "accessor",
|
|
304
|
+
name: "loadingTrip",
|
|
305
|
+
static: false,
|
|
306
|
+
private: false,
|
|
307
|
+
access: {
|
|
308
|
+
has: (obj) => "loadingTrip" in obj,
|
|
309
|
+
get: (obj) => obj.loadingTrip,
|
|
310
|
+
set: (obj, value) => {
|
|
311
|
+
obj.loadingTrip = value;
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
metadata: _metadata
|
|
315
|
+
}, _loadingTrip_initializers, _loadingTrip_extraInitializers);
|
|
316
|
+
__esDecorate(this, null, _a11yFootpath_decorators, {
|
|
317
|
+
kind: "accessor",
|
|
318
|
+
name: "a11yFootpath",
|
|
319
|
+
static: false,
|
|
320
|
+
private: false,
|
|
321
|
+
access: {
|
|
322
|
+
has: (obj) => "a11yFootpath" in obj,
|
|
323
|
+
get: (obj) => obj.a11yFootpath,
|
|
324
|
+
set: (obj, value) => {
|
|
325
|
+
obj.a11yFootpath = value;
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
metadata: _metadata
|
|
329
|
+
}, _a11yFootpath_initializers, _a11yFootpath_extraInitializers);
|
|
330
|
+
__esDecorate(this, null, _loadingPrice_decorators, {
|
|
331
|
+
kind: "accessor",
|
|
332
|
+
name: "loadingPrice",
|
|
333
|
+
static: false,
|
|
334
|
+
private: false,
|
|
335
|
+
access: {
|
|
336
|
+
has: (obj) => "loadingPrice" in obj,
|
|
337
|
+
get: (obj) => obj.loadingPrice,
|
|
338
|
+
set: (obj, value) => {
|
|
339
|
+
obj.loadingPrice = value;
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
metadata: _metadata
|
|
343
|
+
}, _loadingPrice_initializers, _loadingPrice_extraInitializers);
|
|
344
|
+
__esDecorate(this, null, _cardActionLabel_decorators, {
|
|
345
|
+
kind: "accessor",
|
|
346
|
+
name: "cardActionLabel",
|
|
347
|
+
static: false,
|
|
348
|
+
private: false,
|
|
349
|
+
access: {
|
|
350
|
+
has: (obj) => "cardActionLabel" in obj,
|
|
351
|
+
get: (obj) => obj.cardActionLabel,
|
|
352
|
+
set: (obj, value) => {
|
|
353
|
+
obj.cardActionLabel = value;
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
metadata: _metadata
|
|
357
|
+
}, _cardActionLabel_initializers, _cardActionLabel_extraInitializers);
|
|
358
|
+
__esDecorate(this, null, _accessibilityExpanded_decorators, {
|
|
359
|
+
kind: "accessor",
|
|
360
|
+
name: "accessibilityExpanded",
|
|
361
|
+
static: false,
|
|
362
|
+
private: false,
|
|
363
|
+
access: {
|
|
364
|
+
has: (obj) => "accessibilityExpanded" in obj,
|
|
365
|
+
get: (obj) => obj.accessibilityExpanded,
|
|
366
|
+
set: (obj, value) => {
|
|
367
|
+
obj.accessibilityExpanded = value;
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
metadata: _metadata
|
|
371
|
+
}, _accessibilityExpanded_initializers, _accessibilityExpanded_extraInitializers);
|
|
372
|
+
__esDecorate(this, null, _active_decorators, {
|
|
373
|
+
kind: "accessor",
|
|
374
|
+
name: "active",
|
|
375
|
+
static: false,
|
|
376
|
+
private: false,
|
|
377
|
+
access: {
|
|
378
|
+
has: (obj) => "active" in obj,
|
|
379
|
+
get: (obj) => obj.active,
|
|
380
|
+
set: (obj, value) => {
|
|
381
|
+
obj.active = value;
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
metadata: _metadata
|
|
385
|
+
}, _active_initializers, _active_extraInitializers);
|
|
386
|
+
__esDecorate(this, null, _set_now_decorators, {
|
|
387
|
+
kind: "setter",
|
|
388
|
+
name: "now",
|
|
389
|
+
static: false,
|
|
390
|
+
private: false,
|
|
391
|
+
access: {
|
|
392
|
+
has: (obj) => "now" in obj,
|
|
393
|
+
set: (obj, value) => {
|
|
394
|
+
obj.now = value;
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
metadata: _metadata
|
|
398
|
+
}, null, _instanceExtraInitializers);
|
|
399
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
400
|
+
enumerable: true,
|
|
401
|
+
configurable: true,
|
|
402
|
+
writable: true,
|
|
403
|
+
value: _metadata
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
static {
|
|
407
|
+
this.elementName = "sbb-timetable-row";
|
|
408
|
+
}
|
|
409
|
+
static {
|
|
410
|
+
this.elementDependencies = [
|
|
411
|
+
SbbCardElement,
|
|
412
|
+
SbbCardBadgeElement,
|
|
413
|
+
SbbCardButtonElement,
|
|
414
|
+
SbbIconElement,
|
|
415
|
+
SbbTimetableOccupancyElement,
|
|
416
|
+
SbbPearlChainTimeElement
|
|
417
|
+
];
|
|
418
|
+
}
|
|
419
|
+
static {
|
|
420
|
+
this.styles = [screenReaderOnlyStyles, unsafeCSS(timetable_row_default)];
|
|
421
|
+
}
|
|
422
|
+
#trip_accessor_storage;
|
|
423
|
+
/** The trip Prop. */
|
|
424
|
+
get trip() {
|
|
425
|
+
return this.#trip_accessor_storage;
|
|
426
|
+
}
|
|
427
|
+
set trip(value) {
|
|
428
|
+
this.#trip_accessor_storage = value;
|
|
429
|
+
}
|
|
430
|
+
#price_accessor_storage;
|
|
431
|
+
/** The price Prop, which consists of the data for the badge. */
|
|
432
|
+
get price() {
|
|
433
|
+
return this.#price_accessor_storage;
|
|
434
|
+
}
|
|
435
|
+
set price(value) {
|
|
436
|
+
this.#price_accessor_storage = value;
|
|
437
|
+
}
|
|
438
|
+
#disableAnimation_accessor_storage;
|
|
439
|
+
/** This will be forwarded to the sbb-pearl-chain component - if true the position won't be animated. */
|
|
440
|
+
get disableAnimation() {
|
|
441
|
+
return this.#disableAnimation_accessor_storage;
|
|
442
|
+
}
|
|
443
|
+
set disableAnimation(value) {
|
|
444
|
+
this.#disableAnimation_accessor_storage = value;
|
|
445
|
+
}
|
|
446
|
+
#boarding_accessor_storage;
|
|
447
|
+
/** This will be forwarded to the notices section */
|
|
448
|
+
get boarding() {
|
|
449
|
+
return this.#boarding_accessor_storage;
|
|
450
|
+
}
|
|
451
|
+
set boarding(value) {
|
|
452
|
+
this.#boarding_accessor_storage = value;
|
|
453
|
+
}
|
|
454
|
+
#loadingTrip_accessor_storage;
|
|
455
|
+
/**
|
|
456
|
+
* The loading state -
|
|
457
|
+
* when this is true it will be render skeleton with an idling animation
|
|
458
|
+
*/
|
|
459
|
+
get loadingTrip() {
|
|
460
|
+
return this.#loadingTrip_accessor_storage;
|
|
461
|
+
}
|
|
462
|
+
set loadingTrip(value) {
|
|
463
|
+
this.#loadingTrip_accessor_storage = value;
|
|
464
|
+
}
|
|
465
|
+
#a11yFootpath_accessor_storage;
|
|
466
|
+
/**
|
|
467
|
+
* The Footpath attribute for rendering different icons
|
|
468
|
+
* true: render a11y-icon
|
|
469
|
+
* false: render walk-icon
|
|
470
|
+
* default: render walk-icon
|
|
471
|
+
*/
|
|
472
|
+
get a11yFootpath() {
|
|
473
|
+
return this.#a11yFootpath_accessor_storage;
|
|
474
|
+
}
|
|
475
|
+
set a11yFootpath(value) {
|
|
476
|
+
this.#a11yFootpath_accessor_storage = value;
|
|
477
|
+
}
|
|
478
|
+
#loadingPrice_accessor_storage;
|
|
479
|
+
/**
|
|
480
|
+
* The loading state -
|
|
481
|
+
* when this is true it will be render skeleton with an idling animation
|
|
482
|
+
*/
|
|
483
|
+
get loadingPrice() {
|
|
484
|
+
return this.#loadingPrice_accessor_storage;
|
|
485
|
+
}
|
|
486
|
+
set loadingPrice(value) {
|
|
487
|
+
this.#loadingPrice_accessor_storage = value;
|
|
488
|
+
}
|
|
489
|
+
#cardActionLabel_accessor_storage;
|
|
490
|
+
/**
|
|
491
|
+
* 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.
|
|
492
|
+
*/
|
|
493
|
+
get cardActionLabel() {
|
|
494
|
+
return this.#cardActionLabel_accessor_storage;
|
|
495
|
+
}
|
|
496
|
+
set cardActionLabel(value) {
|
|
497
|
+
this.#cardActionLabel_accessor_storage = value;
|
|
498
|
+
}
|
|
499
|
+
#accessibilityExpanded_accessor_storage;
|
|
500
|
+
/** This will be forwarded to the sbb-card component as aria-expanded. */
|
|
501
|
+
get accessibilityExpanded() {
|
|
502
|
+
return this.#accessibilityExpanded_accessor_storage;
|
|
503
|
+
}
|
|
504
|
+
set accessibilityExpanded(value) {
|
|
505
|
+
this.#accessibilityExpanded_accessor_storage = value;
|
|
506
|
+
}
|
|
507
|
+
#active_accessor_storage;
|
|
508
|
+
/** When this prop is true the sbb-card will be in the active state. */
|
|
509
|
+
get active() {
|
|
510
|
+
return this.#active_accessor_storage;
|
|
511
|
+
}
|
|
512
|
+
set active(value) {
|
|
513
|
+
this.#active_accessor_storage = value;
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* A configured date which acts as the current date instead of the real current date.
|
|
517
|
+
* Only recommended for testing purposes.
|
|
518
|
+
*/
|
|
519
|
+
set now(value) {
|
|
520
|
+
this._now = defaultDateAdapter.getValidDateOrNull(defaultDateAdapter.deserialize(value));
|
|
521
|
+
}
|
|
522
|
+
get now() {
|
|
523
|
+
return this._now ?? /* @__PURE__ */ new Date();
|
|
524
|
+
}
|
|
525
|
+
willUpdate(changedProperties) {
|
|
526
|
+
super.willUpdate(changedProperties);
|
|
527
|
+
if (changedProperties.has("loadingTrip")) this.internals.role = !this.loadingTrip ? "rowgroup" : null;
|
|
528
|
+
}
|
|
529
|
+
/** The skeleton render function for the loading state */
|
|
530
|
+
_renderSkeleton() {
|
|
531
|
+
return html`
|
|
532
|
+
<sbb-card class="sbb-loading sbb-card-spacing-4x-xxs">
|
|
533
|
+
${this.loadingPrice ? html`<div class="sbb-loading__badge" slot="badge"></div>` : nothing}
|
|
534
|
+
<div class="sbb-loading__wrapper">
|
|
535
|
+
<div class="sbb-loading__row"></div>
|
|
536
|
+
<div class="sbb-loading__row"></div>
|
|
537
|
+
<div class="sbb-loading__row"></div>
|
|
538
|
+
</div>
|
|
539
|
+
</sbb-card>
|
|
540
|
+
`;
|
|
541
|
+
}
|
|
542
|
+
_getRideLegs() {
|
|
543
|
+
return this.trip?.legs?.filter((leg) => isRideLeg(leg)) ?? [];
|
|
544
|
+
}
|
|
545
|
+
_getQuayTypeStrings() {
|
|
546
|
+
if (!this.trip.summary?.product) return null;
|
|
547
|
+
const rideLegs = this._getRideLegs();
|
|
548
|
+
const short = this.trip.summary.product?.vehicleMode === "TRAIN" ? rideLegs[0].serviceJourney.quayTypeShortName || "" : rideLegs[0].serviceJourney.quayTypeName || "";
|
|
549
|
+
return {
|
|
550
|
+
long: i18nFromPlatform[this._language.current] + " " + short,
|
|
551
|
+
short
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
/** map Quay */
|
|
555
|
+
_renderQuayType() {
|
|
556
|
+
if (!this.trip.summary?.product) return;
|
|
557
|
+
const quayTypeStrings = this._getQuayTypeStrings();
|
|
558
|
+
return html`
|
|
559
|
+
<span class="sbb-timetable__row--quay">
|
|
560
|
+
<span class="sbb-screen-reader-only">${quayTypeStrings?.long} </span>
|
|
561
|
+
<span class="sbb-timetable__row--quay-type" aria-hidden="true"
|
|
562
|
+
>${quayTypeStrings?.short}</span
|
|
563
|
+
>
|
|
564
|
+
</span>
|
|
565
|
+
`;
|
|
566
|
+
}
|
|
567
|
+
_handleHimCus(trip) {
|
|
568
|
+
const { situations } = trip || {};
|
|
569
|
+
const sortedSituations = situations && sortSituation(situations);
|
|
570
|
+
const cus = getCus(trip, this._language.current);
|
|
571
|
+
return {
|
|
572
|
+
cus: Object.keys(cus)?.length ? cus : null,
|
|
573
|
+
him: situations?.length ? getHimIcon(sortedSituations[0]) : null
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
_getAccessibilityText(trip) {
|
|
577
|
+
const { summary, legs, notices } = trip || {};
|
|
578
|
+
const { departureWalk, arrivalWalk, departure, arrival, product, direction, occupancy, duration } = summary || {};
|
|
579
|
+
const { departureTimeAttribute, arrivalTimeAttribute } = getDepartureArrivalTimeAttribute(legs, departureWalk || 0, arrivalWalk || 0, this._language.current, this.a11yFootpath);
|
|
580
|
+
const rideLegs = this._getRideLegs();
|
|
581
|
+
const departureTime = departure?.time ? removeTimezoneFromISOTimeString(departure.time) : void 0;
|
|
582
|
+
const arrivalTime = arrival?.time ? removeTimezoneFromISOTimeString(arrival.time) : void 0;
|
|
583
|
+
const departureWalkText = departureTimeAttribute ? `${departureTimeAttribute.text} ${departureTimeAttribute.duration}, ` : "";
|
|
584
|
+
const arrivalWalkText = arrivalTimeAttribute ? `${arrivalTimeAttribute.text} ${arrivalTimeAttribute.duration}, ` : "";
|
|
585
|
+
const departureTimeText = departureTime ? `${i18nDeparture[this._language.current]}: ${format(departureTime, "HH:mm")}, ` : "";
|
|
586
|
+
const getDepartureQuayText = () => {
|
|
587
|
+
if (!departure?.quayFormatted) return "";
|
|
588
|
+
return `${departure?.quayChanged ? `${i18nNew[this._language.current]} ` : ""}${this._getQuayTypeStrings()?.long} ${departure?.quayFormatted}, `;
|
|
589
|
+
};
|
|
590
|
+
const meansOfTransportText = product && product.vehicleMode ? i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && `${i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}, ` : "";
|
|
591
|
+
const vehicleSubModeText = product?.vehicleSubModeShortName ? `${product.vehicleSubModeShortName} ${product.line || ""}, ` : "";
|
|
592
|
+
const directionText = `${i18nDirection[this._language.current]} ${direction}, `;
|
|
593
|
+
const himCus = this._handleHimCus(trip);
|
|
594
|
+
const cusText = himCus?.cus?.text ? `${i18nRealTimeInfo[this._language.current]}: ${himCus?.cus?.text}, ` : "";
|
|
595
|
+
const himText = himCus?.him?.text ? `${i18nRealTimeInfo[this._language.current]}: ${himCus?.him?.text}, ` : "";
|
|
596
|
+
const boardingText = this.boarding ? `${this.boarding.text}, ` : "";
|
|
597
|
+
const priceText = `${this.price?.isDiscount ? i18nSupersaver[this._language.current] : ""} ${this.price?.text && this.price?.price ? (this.price?.text || "") + " " + (this.price?.price || "") + ", " : ""}`;
|
|
598
|
+
const transferProcedures = rideLegs.length > 2 ? `${rideLegs.length - 1} ${i18nTransferProcedures[this._language.current]}, ` : rideLegs.length > 1 ? `${rideLegs.length - 1} ${i18nTransferProcedure[this._language.current]}, ` : "";
|
|
599
|
+
const arrivalTimeText = arrivalTime ? `${i18nArrival[this._language.current]}: ${format(arrivalTime, "HH:mm")}, ` : "";
|
|
600
|
+
let occupancyText = "";
|
|
601
|
+
if (occupancy) {
|
|
602
|
+
if (occupancy.firstClass && occupancy.firstClass !== "UNKNOWN") occupancyText += `${i18nClass.first[this._language.current]} ${i18nOccupancy[occupancy.firstClass.toLowerCase()]?.[this._language.current]}.`;
|
|
603
|
+
if (occupancy.secondClass && occupancy.secondClass !== "UNKNOWN") occupancyText += ` ${i18nClass.second[this._language.current]} ${i18nOccupancy[occupancy.secondClass.toLowerCase()]?.[this._language.current]}.`;
|
|
604
|
+
}
|
|
605
|
+
const attributes = notices && handleNotices(notices).length && handleNotices(notices)?.map((notice, index) => index < 4 && notice.text?.template).join(", ") + ", ";
|
|
606
|
+
const attributesText = attributes ? `${i18nTravelhints[this._language.current]}: ${attributes}` : "";
|
|
607
|
+
const durationText = !!duration && duration > 0 ? `${i18nTripDuration[this._language.current]} ${durationToTime(duration, this._language.current).long}, ` : "";
|
|
608
|
+
return [
|
|
609
|
+
departureWalkText,
|
|
610
|
+
departureTimeText,
|
|
611
|
+
getDepartureQuayText(),
|
|
612
|
+
meansOfTransportText,
|
|
613
|
+
vehicleSubModeText,
|
|
614
|
+
directionText,
|
|
615
|
+
cusText,
|
|
616
|
+
boardingText,
|
|
617
|
+
priceText,
|
|
618
|
+
cusText ? "" : himText,
|
|
619
|
+
arrivalTimeText,
|
|
620
|
+
arrivalWalkText,
|
|
621
|
+
durationText,
|
|
622
|
+
transferProcedures,
|
|
623
|
+
occupancyText,
|
|
624
|
+
attributesText
|
|
625
|
+
].map((e) => e?.trim()).filter((e) => e && e.length > 0).join(" ");
|
|
626
|
+
}
|
|
627
|
+
render() {
|
|
628
|
+
if (this.loadingTrip) return this._renderSkeleton();
|
|
629
|
+
const { legs, id, notices, summary } = this.trip || {};
|
|
630
|
+
const { product, direction, departureWalk, departure, arrival, arrivalWalk, occupancy, duration } = summary || {};
|
|
631
|
+
const himCus = this._handleHimCus(this.trip);
|
|
632
|
+
const hasHimCus = !!himCus.cus || !!himCus.him;
|
|
633
|
+
const noticeAttributes = notices && handleNotices(notices);
|
|
634
|
+
const durationObj = duration ? durationToTime(duration, this._language.current) : null;
|
|
635
|
+
return html`
|
|
636
|
+
<sbb-card class="sbb-card-spacing-4x-xxs" id=${id}>
|
|
637
|
+
<sbb-card-button
|
|
638
|
+
?active=${this.active}
|
|
639
|
+
aria-expanded=${this.accessibilityExpanded ? "true" : nothing}
|
|
640
|
+
>
|
|
641
|
+
${this.cardActionLabel ? this.cardActionLabel : this._getAccessibilityText(this.trip)}
|
|
642
|
+
</sbb-card-button>
|
|
643
|
+
${this.loadingPrice ? html`<div class="sbb-loading__badge" slot="badge"></div>` : nothing}
|
|
644
|
+
${this.price && !this.loadingPrice ? html`<sbb-card-badge color=${this.price.isDiscount ? "charcoal" : "white"}>
|
|
645
|
+
${this.price.isDiscount ? html`<span aria-hidden="true">
|
|
646
|
+
%<span class="sbb-screen-reader-only"
|
|
647
|
+
>${i18nSupersaver[this._language.current]}</span
|
|
648
|
+
>
|
|
649
|
+
</span>` : nothing}
|
|
650
|
+
${this.price.text ? html`<span>${this.price.text}</span>` : nothing}
|
|
651
|
+
${this.price.price ? html`<span>${this.price.price}</span>` : nothing}
|
|
652
|
+
</sbb-card-badge>` : nothing}
|
|
653
|
+
<div class="sbb-timetable__row" role="row">
|
|
654
|
+
<div class="sbb-timetable__row-header" role="gridcell">
|
|
655
|
+
<div class="sbb-timetable__row-details">
|
|
656
|
+
${product?.corporateIdentityPictogram && html`<span class="sbb-timetable__row-transport-wrapper">
|
|
657
|
+
<sbb-icon
|
|
658
|
+
class="sbb-timetable__row-transport-icon"
|
|
659
|
+
name="picto:${product.corporateIdentityPictogram}"
|
|
660
|
+
></sbb-icon>
|
|
661
|
+
<span class="sbb-screen-reader-only">
|
|
662
|
+
${product && product.vehicleMode && i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}
|
|
663
|
+
|
|
664
|
+
</span>
|
|
665
|
+
</span>`}
|
|
666
|
+
${product && (product.corporateIdentityIcon ? renderIconProduct(product.corporateIdentityIcon, product.name) : product.vehicleSubModeShortName && renderStringProduct(product.vehicleSubModeShortName, product?.line))}
|
|
667
|
+
</div>
|
|
668
|
+
${direction ? html`<p>${`${i18nDirection[this._language.current]} ${direction}`}</p>` : nothing}
|
|
669
|
+
</div>
|
|
670
|
+
<sbb-pearl-chain-time
|
|
671
|
+
role="gridcell"
|
|
672
|
+
.legs=${legs}
|
|
673
|
+
.departureTime=${departure?.time}
|
|
674
|
+
.arrivalTime=${arrival?.time}
|
|
675
|
+
.departureWalk=${departureWalk}
|
|
676
|
+
.arrivalWalk=${arrivalWalk}
|
|
677
|
+
?disable-animation=${this.disableAnimation}
|
|
678
|
+
?a11y-footpath=${this.a11yFootpath}
|
|
679
|
+
.now=${this.now}
|
|
680
|
+
></sbb-pearl-chain-time>
|
|
681
|
+
<div class="sbb-timetable__row-footer" role="gridcell">
|
|
682
|
+
${product && departure?.quayFormatted ? html`<span
|
|
683
|
+
class=${departure?.quayChanged ? `sbb-timetable__row-quay--changed` : nothing}
|
|
684
|
+
>
|
|
685
|
+
<span class="sbb-screen-reader-only">
|
|
686
|
+
${`${i18nDeparture[this._language.current]} ${departure?.quayChanged ? i18nNew[this._language.current] : ""}`}
|
|
687
|
+
|
|
688
|
+
</span>
|
|
689
|
+
${this._renderQuayType()} ${departure?.quayFormatted}
|
|
690
|
+
</span>` : nothing}
|
|
691
|
+
${occupancy?.firstClass && occupancy?.firstClass !== "UNKNOWN" || occupancy?.secondClass && occupancy.secondClass !== "UNKNOWN" ? html`<sbb-timetable-occupancy
|
|
692
|
+
.firstClassOccupancy=${occupancy?.firstClass?.toLowerCase()}
|
|
693
|
+
.secondClassOccupancy=${occupancy?.secondClass?.toLowerCase()}
|
|
694
|
+
></sbb-timetable-occupancy>` : nothing}
|
|
695
|
+
${noticeAttributes && noticeAttributes.length || this.boarding ? html`<ul class="sbb-timetable__row-hints" role="list">
|
|
696
|
+
${noticeAttributes?.map((notice, index) => index < 4 ? html`<li>
|
|
697
|
+
<sbb-icon
|
|
698
|
+
class="sbb-travel-hints__item"
|
|
699
|
+
name=${"sa-" + notice.name?.toLowerCase()}
|
|
700
|
+
></sbb-icon>
|
|
701
|
+
<span class="sbb-screen-reader-only">${notice.text?.template}</span>
|
|
702
|
+
</li>` : nothing)}
|
|
703
|
+
${this.boarding ? html`<li>
|
|
704
|
+
<sbb-icon
|
|
705
|
+
class="sbb-travel-hints__item"
|
|
706
|
+
name=${this.boarding?.name}
|
|
707
|
+
aria-label=${this.boarding?.text}
|
|
708
|
+
aria-hidden="false"
|
|
709
|
+
></sbb-icon>
|
|
710
|
+
</li>` : nothing}
|
|
711
|
+
</ul>` : nothing}
|
|
712
|
+
${duration && duration > 0 ? html`<time>
|
|
713
|
+
<span class="sbb-screen-reader-only">
|
|
714
|
+
${`${i18nTripDuration[this._language.current]} ${durationObj.long}`}
|
|
715
|
+
</span>
|
|
716
|
+
<span aria-hidden="true">${durationObj.short}</span>
|
|
717
|
+
</time>` : nothing}
|
|
718
|
+
${hasHimCus && (himCus.cus || himCus.him) ? html`<span class="sbb-timetable__row-warning">
|
|
719
|
+
<sbb-icon name=${(himCus.cus || himCus.him).name}></sbb-icon>
|
|
720
|
+
<span class="sbb-screen-reader-only">${(himCus.cus || himCus.him).text}</span>
|
|
721
|
+
</span>` : nothing}
|
|
722
|
+
</div>
|
|
723
|
+
</div>
|
|
724
|
+
</sbb-card>
|
|
725
|
+
`;
|
|
726
|
+
}
|
|
727
|
+
};
|
|
728
|
+
})();
|
|
729
|
+
//#endregion
|
|
730
|
+
export { handleNotices as a, sortSituation as c, getHimIcon as i, filterNotices as n, renderIconProduct as o, getCus as r, renderStringProduct as s, SbbTimetableRowElement as t };
|
|
731
|
+
|
|
732
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXRhYmxlLXJvdy5jb21wb25lbnQtRFNUR3RRQUMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzLWV4cGVyaW1lbnRhbC90aW1ldGFibGUtcm93L3RpbWV0YWJsZS1yb3cuc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMtZXhwZXJpbWVudGFsL3RpbWV0YWJsZS1yb3cvdGltZXRhYmxlLXJvdy5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICAtLXNiYi10aW1ldGFibGUtcm93LWdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMngpO1xuICAtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDI1KX07XG4gIC0tc2JiLXRpbWV0YWJsZS1yb3ctaGVpZ2h0LWhlYWRlcjogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDIwKX07XG4gIC0tc2JiLXRpbWV0YWJsZS1yb3ctaGVpZ2h0LWZvb3RlcjogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDE2KX07XG4gIC0tc2JiLXRpbWV0YWJsZS1yb3ctc2tlbGV0b24tcHVsc2UtZHVyYXRpb246IDE4MDBtcztcblxuICBkaXNwbGF5OiBibG9jaztcbn1cblxuOmhvc3QoW2Rpc2FibGUtYW5pbWF0aW9uXSkge1xuICAtLXNiYi10aW1ldGFibGUtcm93LXNrZWxldG9uLXB1bHNlLWR1cmF0aW9uOiAwO1xufVxuXG4vLyBvdmVycmlkZSBpY29ucyBzaXplc1xuLnNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQtaWNvbiB7XG4gIC0tc2JiLWljb24tc3ZnLXdpZHRoOiAje3NiYi5weC10by1yZW0tYnVpbGQoMjApfTtcbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoMjApfTtcbn1cblxuLy8gb3ZlcnJpZGUgaWNvbnMgc2l6ZXNcbi5zYmItdHJhdmVsLWhpbnRzX19pdGVtIHtcbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoMTQpfTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy0tcXVheSB7XG4gIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xeCk7XG59XG5cbi5zYmItdGltZXRhYmxlX19yb3ctLXF1YXktdHlwZSB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuXG4vLyByZXNldHMgbGlzdHNcbnVsIHtcbiAgQGluY2x1ZGUgc2JiLmxpc3QtcmVzZXQ7XG5cbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG59XG5cbmxpIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LXRyYW5zcG9ydG51bWJlcixcbi5zYmItdGltZXRhYmxlX19yb3ctdGltZSB7XG4gIEBpbmNsdWRlIHNiYi50ZXh0LXMtLWJvbGQ7XG5cbiAgbGluZS1oZWlnaHQ6IHVuc2V0O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi5zYmItdGltZXRhYmxlX19yb3cge1xuICBAaW5jbHVkZSBzYmIudGV4dC1zLS1yZWd1bGFyO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogdmFyKC0tc2JiLXRpbWV0YWJsZS1yb3ctZ2FwKTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy1oZWFkZXIsXG4uc2JiLXRpbWV0YWJsZV9fcm93LWZvb3RlciB7XG4gIC8vIER1ZSB0byBhIGJ1ZyBpbiBTYWZhcmkgd2hpY2ggZGlzcGxheXMgc2tlbGV0b24gYW5pbWF0aW9uIGV2ZW4gb24gbG9hZGVkIGNvbnRlbnQsIHdlIG5lZWQgdG8gbWFudWFsbHkgZGlzYWJsZSBhbmltYXRpb24uXG4gIGFuaW1hdGlvbjogbm9uZTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTJ4KTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodC1oZWFkZXIpO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWRldGFpbHMsXG4uc2JiLXRpbWV0YWJsZV9fcm93LWhpbnRzIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWhlYWRlciBwIHtcbiAgQGluY2x1ZGUgc2JiLmVsbGlwc2lzO1xuXG4gIG1hcmdpbjogMDtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTJ4KTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodC1mb290ZXIpO1xuXG4gID4gc3BhbiB7XG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICB9XG5cbiAgOm9ubHktY2hpbGQge1xuICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IGF1dG87XG4gIH1cbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy1xdWF5LS1jaGFuZ2VkIHtcbiAgY29sb3I6IHZhcigtLXNiYi1jb2xvci1wcmltYXJ5KTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQtd3JhcHBlcixcbi5zYmItdGltZXRhYmxlX19yb3ctd2FybmluZyB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xufVxuXG4uc2JiLWxvYWRpbmcge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnNiYi1sb2FkaW5nX193cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0yeCk7XG59XG5cbi5zYmItbG9hZGluZ19fcm93IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi1ib3JkZXItcmFkaXVzLTF4KTtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1oZWlnaHQpO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICBoZWlnaHQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgyOCl9O1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGJvcmRlcjogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0xeCkgc29saWQgQnV0dG9uQm9yZGVyICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLnNiYi1sb2FkaW5nX19yb3csXG4uc2JiLWxvYWRpbmdfX2JhZGdlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItNCk7XG4gIGFuaW1hdGlvbjogc2tlbGV0b24tcHVsc2UgdmFyKC0tc2JiLXRpbWV0YWJsZS1yb3ctc2tlbGV0b24tcHVsc2UtZHVyYXRpb24pIGVhc2Utb3V0IGluZmluaXRlO1xufVxuXG4uc2JiLWxvYWRpbmdfX3JvdzpmaXJzdC1vZi10eXBlIHtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1oZWlnaHQtaGVhZGVyKTtcbiAgd2lkdGg6IDUwJTtcbn1cblxuLnNiYi1sb2FkaW5nX19yb3c6bGFzdC1vZi10eXBlIHtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1oZWlnaHQtZm9vdGVyKTtcbn1cblxuLnNiYi1sb2FkaW5nX19iYWRnZSB7XG4gIG1hcmdpbi1pbmxpbmU6IGF1dG8gY2FsYyh2YXIoLS1zYmItc3BhY2luZy1maXhlZC0zeCkgKiAtMSk7XG4gIHBhZGRpbmctaW5saW5lLWVuZDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNngpO1xuICBib3JkZXItZW5kLXN0YXJ0LXJhZGl1czogdmFyKC0tc2JiLWNhcmQtYmFkZ2UtYm9yZGVyLXJhZGl1cyk7XG4gIHRyYW5zZm9ybTogdmFyKC0tc2JiLWNhcmQtYmFkZ2Utc2tldyk7XG4gIHdpZHRoOiAje3NiYi5weC10by1yZW0tYnVpbGQoMTE1KX07XG4gIGhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDIwKX07XG59XG5cbkBrZXlmcmFtZXMgc2tlbGV0b24tcHVsc2Uge1xuICAwJSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItNCk7XG4gIH1cblxuICAxNyUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTQpO1xuICB9XG5cbiAgNTAlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci0zKTtcbiAgfVxuXG4gIDY3JSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMyk7XG4gIH1cblxuICAxMDAlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci00KTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgU2JiQ2FyZEJhZGdlRWxlbWVudCxcbiAgU2JiQ2FyZEJ1dHRvbkVsZW1lbnQsXG4gIFNiYkNhcmRFbGVtZW50LFxufSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jYXJkLnB1cmUuanMnO1xuaW1wb3J0IHtcbiAgZGVmYXVsdERhdGVBZGFwdGVyLFxuICBmb3JjZVR5cGUsXG4gIGkxOG5BcnJpdmFsLFxuICBpMThuQ2xhc3MsXG4gIGkxOG5EZXBhcnR1cmUsXG4gIGkxOG5EaXJlY3Rpb24sXG4gIGkxOG5Gcm9tUGxhdGZvcm0sXG4gIGkxOG5NZWFuc09mVHJhbnNwb3J0LFxuICBpMThuTmV3LFxuICBpMThuT2NjdXBhbmN5LFxuICBpMThuUmVhbFRpbWVJbmZvLFxuICBpMThuU3VwZXJzYXZlcixcbiAgaTE4blRyYW5zZmVyUHJvY2VkdXJlLFxuICBpMThuVHJhbnNmZXJQcm9jZWR1cmVzLFxuICBpMThuVHJhdmVsaGludHMsXG4gIGkxOG5UcmlwRHVyYXRpb24sXG4gIGkxOG5UcmlwUXVheUNoYW5nZSxcbiAgU2JiRWxlbWVudCxcbiAgdHlwZSBTYmJFbGVtZW50VHlwZSxcbiAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLFxuICB0eXBlIFNiYk9jY3VwYW5jeSxcbiAgc2NyZWVuUmVhZGVyT25seVN0eWxlcyxcbn0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS5qcyc7XG5pbXBvcnQgeyBTYmJJY29uRWxlbWVudCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2ljb24ucHVyZS5qcyc7XG5pbXBvcnQgeyBTYmJUaW1ldGFibGVPY2N1cGFuY3lFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvdGltZXRhYmxlLW9jY3VwYW5jeS5wdXJlLmpzJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG4gIHVuc2FmZUNTUyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IElUcmlwSXRlbSwgTm90aWNlLCBQdFJpZGVMZWcsIFB0U2l0dWF0aW9uIH0gZnJvbSAnLi4vY29yZS50cyc7XG5pbXBvcnQge1xuICBkdXJhdGlvblRvVGltZSxcbiAgZ2V0RGVwYXJ0dXJlQXJyaXZhbFRpbWVBdHRyaWJ1dGUsXG4gIGlzUmlkZUxlZyxcbiAgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyxcbn0gZnJvbSAnLi4vY29yZS50cyc7XG5pbXBvcnQgeyBTYmJQZWFybENoYWluVGltZUVsZW1lbnQgfSBmcm9tICcuLi9wZWFybC1jaGFpbi10aW1lLnB1cmUudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi90aW1ldGFibGUtcm93LnNjc3M/aW5saW5lJztcblxuLyoqIEhpbUN1cyBpbnRlcmZhY2UgZm9yIG1hcHBlZCBpY29uIG5hbWUgYW5kIHRleHQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGltQ3VzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIEJvYXJkaW5nIGljb24gaW50ZXJmYWNlIGZvciBtYXBwZWQgaWNvbiBuYW1lIGFuZCB0ZXh0ICovXG5leHBvcnQgaW50ZXJmYWNlIEJvYXJkaW5nIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpY2Uge1xuICBwcmljZT86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbiAgaXNEaXNjb3VudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCByZW5kZXJJY29uUHJvZHVjdCA9IChpY29uOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVzdWx0ID0+IHtcbiAgcmV0dXJuIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctdHJhbnNwb3J0XCI+XG4gICAgPHNiYi1pY29uIG5hbWU9JHtpY29ufT48L3NiYi1pY29uPlxuICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7bmFtZX08L3NwYW4+XG4gIDwvc3Bhbj5gO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclN0cmluZ1Byb2R1Y3QgPSAodmVoaWNsZU5hbWU6IHN0cmluZywgbGluZT86IHN0cmluZyB8IG51bGwpOiBUZW1wbGF0ZVJlc3VsdCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWydNJywgJ0InLCAnVCddLmluY2x1ZGVzKHZlaGljbGVOYW1lKSA/ICcgJyA6ICcnO1xuICByZXR1cm4gaHRtbGA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnRudW1iZXJcIj5cbiAgICAke2xpbmUgIT09IG51bGwgPyB2ZWhpY2xlTmFtZSArIHNwYWNlICsgbGluZSA6IHZlaGljbGVOYW1lfVxuICA8L3NwYW4+YDtcbn07XG5cbmNvbnN0IGdldFJlYWNoYWJsZVRleHQgPSAobGVnczogUHRSaWRlTGVnW10pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0+IHtcbiAgcmV0dXJuIGxlZ3M/LmZpbmQoKGxlZykgPT4gbGVnLnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVhY2hhYmxlVGV4dCk/LnNlcnZpY2VKb3VybmV5XG4gICAgPy5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVhY2hhYmxlVGV4dDtcbn07XG5cbmNvbnN0IGdldERlbGF5VGV4dCA9IChsZWdzOiBQdFJpZGVMZWdbXSk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gbGVncz8uZmluZCgobGVnKSA9PiBsZWcuc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5kZWxheVRleHQpPy5zZXJ2aWNlSm91cm5leVxuICAgID8uc2VydmljZUFsdGVyYXRpb24/LmRlbGF5VGV4dDtcbn07XG5cbmNvbnN0IGdldFJlZGlyZWN0ZWRUZXh0ID0gKGxlZ3M6IFB0UmlkZUxlZ1tdKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9PiB7XG4gIHJldHVybiBsZWdzPy5maW5kKChsZWcpID0+ICEhbGVnLnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVkaXJlY3RlZFRleHQpXG4gICAgPy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LnJlZGlyZWN0ZWRUZXh0O1xufTtcblxuY29uc3QgZ2V0VW5wbGFubmVkU3RvcCA9IChsZWdzOiBQdFJpZGVMZWdbXSk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gbGVncz8uZmluZCgobGVnKSA9PiAhIWxlZy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LnVucGxhbm5lZFN0b3BQb2ludHNUZXh0KVxuICAgID8uc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy51bnBsYW5uZWRTdG9wUG9pbnRzVGV4dDtcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0U2l0dWF0aW9uID0gKHNpdHVhdGlvbnM6IFB0U2l0dWF0aW9uW10pOiBQdFNpdHVhdGlvbltdID0+IHtcbiAgY29uc3QgcHJpb3JpdGllcyA9IHtcbiAgICBESVNUVVJCQU5DRTogMCxcbiAgICBJTkZPUk1BVElPTjogMSxcbiAgICBERUxBWTogMixcbiAgICBUUkFJTl9SRVBMQUNFTUVOVF9CWV9CVVM6IDMsXG4gICAgQ09OU1RSVUNUSU9OX1NJVEU6IDQsXG4gICAgRU5EX01FU1NBR0U6IDUsXG4gIH07XG5cbiAgcmV0dXJuIFsuLi5zaXR1YXRpb25zXT8uc29ydChcbiAgICAoYTogUHRTaXR1YXRpb24sIGI6IFB0U2l0dWF0aW9uKSA9PiBwcmlvcml0aWVzW2EuY2F1c2UhXSAtIHByaW9yaXRpZXNbYi5jYXVzZSFdLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpbUljb24gPSAoc2l0dWF0aW9uOiBQdFNpdHVhdGlvbik6IEhpbUN1cyA9PiB7XG4gIHN3aXRjaCAoc2l0dWF0aW9uPy5jYXVzZSkge1xuICAgIGNhc2UgJ0RJU1RVUkJBTkNFJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdkaXNydXB0aW9uJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcz8ubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdJTkZPUk1BVElPTic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnaW5mbycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdERUxBWSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnZGVsYXknLFxuICAgICAgICB0ZXh0OiBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzLmxlbmd0aCA/IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXNbMF0udGl0bGUgOiAnJyxcbiAgICAgIH07XG4gICAgY2FzZSAnVFJBSU5fUkVQTEFDRU1FTlRfQllfQlVTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdyZXBsYWNlbWVudGJ1cycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdDT05TVFJVQ1RJT05fU0lURSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnY29uc3RydWN0aW9uJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcy5sZW5ndGggPyBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnRpdGxlIDogJycsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnaW5mbycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cyA9ICh0cmlwOiBJVHJpcEl0ZW0sIGN1cnJlbnRMYW5ndWFnZTogc3RyaW5nKTogSGltQ3VzID0+IHtcbiAgY29uc3QgeyBzdW1tYXJ5LCBsZWdzIH0gPSB0cmlwIHx8IHt9O1xuICBjb25zdCByaWRlTGVncyA9IGxlZ3M/LmZpbHRlcigobGVnKSA9PiBpc1JpZGVMZWcobGVnKSkgYXMgUHRSaWRlTGVnW107XG4gIGNvbnN0IHsgdHJpcFN0YXR1cyB9ID0gc3VtbWFyeSB8fCB7fTtcblxuICBpZiAodHJpcFN0YXR1cz8uY2FuY2VsbGVkIHx8IHRyaXBTdGF0dXM/LnBhcnRpYWxseUNhbmNlbGxlZCkge1xuICAgIHJldHVybiB7IG5hbWU6ICdjYW5jZWxsYXRpb24nLCB0ZXh0OiB0cmlwU3RhdHVzPy5jYW5jZWxsZWRUZXh0IH07XG4gIH1cbiAgaWYgKGdldFJlYWNoYWJsZVRleHQocmlkZUxlZ3MpKSB7XG4gICAgcmV0dXJuIHsgbmFtZTogJ21pc3NlZC1jb25uZWN0aW9uJywgdGV4dDogZ2V0UmVhY2hhYmxlVGV4dChyaWRlTGVncykgfTtcbiAgfVxuICBpZiAodHJpcFN0YXR1cz8uYWx0ZXJuYXRpdmUpIHtcbiAgICByZXR1cm4geyBuYW1lOiAnYWx0ZXJuYXRpdmUnLCB0ZXh0OiB0cmlwU3RhdHVzLmFsdGVybmF0aXZlVGV4dCB9O1xuICB9XG4gIGlmIChnZXRSZWRpcmVjdGVkVGV4dChyaWRlTGVncykpIHtcbiAgICByZXR1cm4geyBuYW1lOiAncmVyb3V0ZScsIHRleHQ6IGdldFJlZGlyZWN0ZWRUZXh0KHJpZGVMZWdzKSB9O1xuICB9XG4gIGlmIChnZXRVbnBsYW5uZWRTdG9wKHJpZGVMZWdzKSkge1xuICAgIHJldHVybiB7IG5hbWU6ICdhZGQtc3RvcCcsIHRleHQ6IGdldFVucGxhbm5lZFN0b3AocmlkZUxlZ3MpIH07XG4gIH1cbiAgaWYgKHRyaXBTdGF0dXM/LmRlbGF5ZWQgfHwgdHJpcFN0YXR1cz8uZGVsYXllZFVua25vd24pIHtcbiAgICByZXR1cm4geyBuYW1lOiAnZGVsYXknLCB0ZXh0OiBnZXREZWxheVRleHQocmlkZUxlZ3MpIH07XG4gIH1cbiAgaWYgKHRyaXBTdGF0dXM/LnF1YXlDaGFuZ2VkKSB7XG4gICAgY29uc3QgZGVwYXJ0dXJlID0gcmlkZUxlZ3NbMF0uZGVwYXJ0dXJlO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAncGxhdGZvcm0tY2hhbmdlJyxcbiAgICAgIHRleHQ6IGRlcGFydHVyZS5xdWF5Q2hhbmdlZCA/IGRlcGFydHVyZS5xdWF5Q2hhbmdlZFRleHQgOiBpMThuVHJpcFF1YXlDaGFuZ2VbY3VycmVudExhbmd1YWdlXSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHt9IGFzIEhpbUN1cztcbn07XG5cbmNvbnN0IGZpbmRBbmRSZXBsYWNlTm90aWNlID0gKG5vdGljZXM6IE5vdGljZVtdKTogTm90aWNlIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmVzZXJ2YXRpb25Ob3RpY2UgPSBbJ1JSJywgJ1JLJywgJ1JDJywgJ1JMJywgJ1JNJywgJ1JTJywgJ1JVJywgJ1hQJywgJ1hSJywgJ1hUJ107XG5cbiAgcmV0dXJuIG5vdGljZXMucmVkdWNlKChmb3VuZE5vdGljZTogTm90aWNlIHwgdW5kZWZpbmVkLCBub3RpY2U6IE5vdGljZSk6IE5vdGljZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKGZvdW5kTm90aWNlKSB7XG4gICAgICByZXR1cm4gZm91bmROb3RpY2U7XG4gICAgfVxuICAgIGlmIChyZXNlcnZhdGlvbk5vdGljZS5pbmNsdWRlcyhub3RpY2UubmFtZSkpIHtcbiAgICAgIHJldHVybiB7IC4uLm5vdGljZSwgbmFtZTogJ1JSJyB9IGFzIE5vdGljZTtcbiAgICB9XG4gIH0sIHVuZGVmaW5lZCk7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyTm90aWNlcyA9IChub3RpY2VzOiBOb3RpY2VbXSk6IE5vdGljZVtdID0+IHtcbiAgY29uc3QgYWxsb3dlZE5hbWVzID0gWydaJywgJ1NCJywgJ1NaJywgJ1ZSJywgJ1RHJ107XG5cbiAgY29uc3QgZmlsdGVyTm90aWNlID0gbm90aWNlcy5maWx0ZXIoKG5vdGljZSwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gbm90aWNlcy5maW5kSW5kZXgoKG4pID0+IG4ubmFtZSA9PT0gbm90aWNlLm5hbWUpID09PSBpbmRleDtcbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlck5vdGljZVxuICAgIC5maWx0ZXIoKG5vdGljZSkgPT4gYWxsb3dlZE5hbWVzLmluY2x1ZGVzKG5vdGljZS5uYW1lKSlcbiAgICAuc29ydCgoYSwgYikgPT4gYWxsb3dlZE5hbWVzLmluZGV4T2YoYS5uYW1lKSAtIGFsbG93ZWROYW1lcy5pbmRleE9mKGIubmFtZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZU5vdGljZXMgPSAobm90aWNlczogTm90aWNlW10pOiBOb3RpY2VbXSA9PiB7XG4gIGNvbnN0IHJlc2VydmF0aW9uTm90aWNlID0gZmluZEFuZFJlcGxhY2VOb3RpY2Uobm90aWNlcyk7XG4gIGNvbnN0IGZpbHRlcmVkTm90aWNlcyA9IGZpbHRlck5vdGljZXMobm90aWNlcyk7XG5cbiAgaWYgKHJlc2VydmF0aW9uTm90aWNlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmlsdGVyZWROb3RpY2VzO1xuICB9XG4gIGlmICghZmlsdGVyZWROb3RpY2VzLmxlbmd0aCkge1xuICAgIHJldHVybiBbcmVzZXJ2YXRpb25Ob3RpY2VdO1xuICB9XG5cbiAgaWYgKGZpbHRlcmVkTm90aWNlc1swXS5uYW1lID09PSAnWicgJiYgZmlsdGVyZWROb3RpY2VzWzFdKSB7XG4gICAgcmV0dXJuIFtmaWx0ZXJlZE5vdGljZXNbMF0sIHJlc2VydmF0aW9uTm90aWNlLCBmaWx0ZXJlZE5vdGljZXNbMV1dLmNvbmNhdChcbiAgICAgIGZpbHRlcmVkTm90aWNlcy5zbGljZSgyKSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIFtyZXNlcnZhdGlvbk5vdGljZSwgLi4uZmlsdGVyZWROb3RpY2VzXTtcbn07XG5cbi8qKlxuICogSXQgZGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRyaXAsIGFjdGluZyBhcyBhIGNvbnRhaW5lciBmb3IgYWxsIHRoZSBgc2JiLXRpbWV0YWJsZS0qYCBjb21wb25lbnRzLlxuICogKi9cbmV4cG9ydCBjbGFzcyBTYmJUaW1ldGFibGVSb3dFbGVtZW50IGV4dGVuZHMgU2JiRWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItdGltZXRhYmxlLXJvdyc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgZWxlbWVudERlcGVuZGVuY2llczogU2JiRWxlbWVudFR5cGVbXSA9IFtcbiAgICBTYmJDYXJkRWxlbWVudCxcbiAgICBTYmJDYXJkQmFkZ2VFbGVtZW50LFxuICAgIFNiYkNhcmRCdXR0b25FbGVtZW50LFxuICAgIFNiYkljb25FbGVtZW50LFxuICAgIFNiYlRpbWV0YWJsZU9jY3VwYW5jeUVsZW1lbnQsXG4gICAgU2JiUGVhcmxDaGFpblRpbWVFbGVtZW50LFxuICBdO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbc2NyZWVuUmVhZGVyT25seVN0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG5cbiAgLyoqIFRoZSB0cmlwIFByb3AuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE9iamVjdCB9KSBwdWJsaWMgYWNjZXNzb3IgdHJpcDogSVRyaXBJdGVtID0gbnVsbCE7XG5cbiAgLyoqIFRoZSBwcmljZSBQcm9wLCB3aGljaCBjb25zaXN0cyBvZiB0aGUgZGF0YSBmb3IgdGhlIGJhZGdlLiAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBPYmplY3QgfSkgcHVibGljIGFjY2Vzc29yIHByaWNlOiBQcmljZSA9IG51bGwhO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSBzYmItcGVhcmwtY2hhaW4gY29tcG9uZW50IC0gaWYgdHJ1ZSB0aGUgcG9zaXRpb24gd29uJ3QgYmUgYW5pbWF0ZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdkaXNhYmxlLWFuaW1hdGlvbicsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGRpc2FibGVBbmltYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgbm90aWNlcyBzZWN0aW9uICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE9iamVjdCB9KSBwdWJsaWMgYWNjZXNzb3IgYm9hcmRpbmc6IEJvYXJkaW5nID0gbnVsbCE7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2FkaW5nIHN0YXRlIC1cbiAgICogd2hlbiB0aGlzIGlzIHRydWUgaXQgd2lsbCBiZSByZW5kZXIgc2tlbGV0b24gd2l0aCBhbiBpZGxpbmcgYW5pbWF0aW9uXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbG9hZGluZy10cmlwJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbG9hZGluZ1RyaXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIEZvb3RwYXRoIGF0dHJpYnV0ZSBmb3IgcmVuZGVyaW5nIGRpZmZlcmVudCBpY29uc1xuICAgKiB0cnVlOiByZW5kZXIgYTExeS1pY29uXG4gICAqIGZhbHNlOiByZW5kZXIgd2Fsay1pY29uXG4gICAqIGRlZmF1bHQ6IHJlbmRlciB3YWxrLWljb25cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhMTF5LWZvb3RwYXRoJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYTExeUZvb3RwYXRoOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2FkaW5nIHN0YXRlIC1cbiAgICogd2hlbiB0aGlzIGlzIHRydWUgaXQgd2lsbCBiZSByZW5kZXIgc2tlbGV0b24gd2l0aCBhbiBpZGxpbmcgYW5pbWF0aW9uXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbG9hZGluZy1wcmljZScsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGxvYWRpbmdQcmljZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRkZW4gbGFiZWwgZm9yIHRoZSBjYXJkIGFjdGlvbi4gSXQgb3ZlcnJpZGVzIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhY2Nlc3NpYmlsaXR5IHRleHQgZm9yIHRoZSBjb21wb25lbnQuIFVzZSB0aGlzIHByb3AgdG8gcHJvdmlkZSBjdXN0b20gYWNjZXNzaWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjYXJkLWFjdGlvbi1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGNhcmRBY3Rpb25MYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIHNiYi1jYXJkIGNvbXBvbmVudCBhcyBhcmlhLWV4cGFuZGVkLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1leHBhbmRlZCcsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGVuIHRoaXMgcHJvcCBpcyB0cnVlIHRoZSBzYmItY2FyZCB3aWxsIGJlIGluIHRoZSBhY3RpdmUgc3RhdGUuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBjb25maWd1cmVkIGRhdGUgd2hpY2ggYWN0cyBhcyB0aGUgY3VycmVudCBkYXRlIGluc3RlYWQgb2YgdGhlIHJlYWwgY3VycmVudCBkYXRlLlxuICAgKiBPbmx5IHJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBub3codmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbm93ID0gZGVmYXVsdERhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChkZWZhdWx0RGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5vdygpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbm93ID8/IG5ldyBEYXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfbm93OiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbG9hZGluZ1RyaXAnKSkge1xuICAgICAgdGhpcy5pbnRlcm5hbHMucm9sZSA9ICF0aGlzLmxvYWRpbmdUcmlwID8gJ3Jvd2dyb3VwJyA6IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBza2VsZXRvbiByZW5kZXIgZnVuY3Rpb24gZm9yIHRoZSBsb2FkaW5nIHN0YXRlICovXG4gIHByaXZhdGUgX3JlbmRlclNrZWxldG9uKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzYmItY2FyZCBjbGFzcz1cInNiYi1sb2FkaW5nIHNiYi1jYXJkLXNwYWNpbmctNHgteHhzXCI+XG4gICAgICAgICR7dGhpcy5sb2FkaW5nUHJpY2UgPyBodG1sYDxkaXYgY2xhc3M9XCJzYmItbG9hZGluZ19fYmFkZ2VcIiBzbG90PVwiYmFkZ2VcIj48L2Rpdj5gIDogbm90aGluZ31cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1sb2FkaW5nX193cmFwcGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1sb2FkaW5nX19yb3dcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX3Jvd1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbG9hZGluZ19fcm93XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zYmItY2FyZD5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmlkZUxlZ3MoKTogUHRSaWRlTGVnW10ge1xuICAgIHJldHVybiB0aGlzLnRyaXA/LmxlZ3M/LmZpbHRlcigobGVnKSA9PiBpc1JpZGVMZWcobGVnKSkgPz8gW107XG4gIH1cblxuICBwcml2YXRlIF9nZXRRdWF5VHlwZVN0cmluZ3MoKTogeyBsb25nOiBzdHJpbmc7IHNob3J0OiBzdHJpbmcgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy50cmlwLnN1bW1hcnk/LnByb2R1Y3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByaWRlTGVncyA9IHRoaXMuX2dldFJpZGVMZWdzKCk7XG4gICAgY29uc3QgaXNTaG9ydCA9IHRoaXMudHJpcC5zdW1tYXJ5LnByb2R1Y3Q/LnZlaGljbGVNb2RlID09PSAnVFJBSU4nO1xuICAgIGNvbnN0IHNob3J0ID0gaXNTaG9ydFxuICAgICAgPyByaWRlTGVnc1swXS5zZXJ2aWNlSm91cm5leS5xdWF5VHlwZVNob3J0TmFtZSB8fCAnJ1xuICAgICAgOiByaWRlTGVnc1swXS5zZXJ2aWNlSm91cm5leS5xdWF5VHlwZU5hbWUgfHwgJyc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9uZzogaTE4bkZyb21QbGF0Zm9ybVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSArICcgJyArIHNob3J0LFxuICAgICAgc2hvcnQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBtYXAgUXVheSAqL1xuICBwcml2YXRlIF9yZW5kZXJRdWF5VHlwZSgpOiBUZW1wbGF0ZVJlc3VsdCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnRyaXAuc3VtbWFyeT8ucHJvZHVjdCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcXVheVR5cGVTdHJpbmdzID0gdGhpcy5fZ2V0UXVheVR5cGVTdHJpbmdzKCk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy0tcXVheVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke3F1YXlUeXBlU3RyaW5ncz8ubG9uZ30mbmJzcDs8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LS1xdWF5LXR5cGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID4ke3F1YXlUeXBlU3RyaW5ncz8uc2hvcnR9PC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlSGltQ3VzKHRyaXA6IElUcmlwSXRlbSk6IHsgY3VzOiBIaW1DdXMgfCBudWxsOyBoaW06IEhpbUN1cyB8IG51bGwgfSB7XG4gICAgY29uc3QgeyBzaXR1YXRpb25zIH0gPSB0cmlwIHx8IHt9O1xuICAgIGNvbnN0IHNvcnRlZFNpdHVhdGlvbnMgPSBzaXR1YXRpb25zICYmIHNvcnRTaXR1YXRpb24oc2l0dWF0aW9ucyk7XG4gICAgY29uc3QgY3VzID0gZ2V0Q3VzKHRyaXAsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1czogT2JqZWN0LmtleXMoY3VzKT8ubGVuZ3RoID8gY3VzIDogbnVsbCxcbiAgICAgIGhpbTogc2l0dWF0aW9ucz8ubGVuZ3RoID8gZ2V0SGltSWNvbihzb3J0ZWRTaXR1YXRpb25zWzBdKSA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEFjY2Vzc2liaWxpdHlUZXh0KHRyaXA6IElUcmlwSXRlbSk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBzdW1tYXJ5LCBsZWdzLCBub3RpY2VzIH0gPSB0cmlwIHx8IHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIGRlcGFydHVyZVdhbGssXG4gICAgICBhcnJpdmFsV2FsayxcbiAgICAgIGRlcGFydHVyZSxcbiAgICAgIGFycml2YWwsXG4gICAgICBwcm9kdWN0LFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgb2NjdXBhbmN5LFxuICAgICAgZHVyYXRpb24sXG4gICAgfSA9IHN1bW1hcnkgfHwge307XG5cbiAgICBjb25zdCB7IGRlcGFydHVyZVRpbWVBdHRyaWJ1dGUsIGFycml2YWxUaW1lQXR0cmlidXRlIH0gPSBnZXREZXBhcnR1cmVBcnJpdmFsVGltZUF0dHJpYnV0ZShcbiAgICAgIGxlZ3MsXG4gICAgICBkZXBhcnR1cmVXYWxrIHx8IDAsXG4gICAgICBhcnJpdmFsV2FsayB8fCAwLFxuICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgIHRoaXMuYTExeUZvb3RwYXRoLFxuICAgICk7XG5cbiAgICBjb25zdCByaWRlTGVncyA9IHRoaXMuX2dldFJpZGVMZWdzKCk7XG5cbiAgICBjb25zdCBkZXBhcnR1cmVUaW1lOiBEYXRlIHwgdW5kZWZpbmVkID0gZGVwYXJ0dXJlPy50aW1lXG4gICAgICA/IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcoZGVwYXJ0dXJlLnRpbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFycml2YWxUaW1lOiBEYXRlIHwgdW5kZWZpbmVkID0gYXJyaXZhbD8udGltZVxuICAgICAgPyByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGFycml2YWwudGltZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlV2Fsa1RleHQgPSBkZXBhcnR1cmVUaW1lQXR0cmlidXRlXG4gICAgICA/IGAke2RlcGFydHVyZVRpbWVBdHRyaWJ1dGUudGV4dH0gJHtkZXBhcnR1cmVUaW1lQXR0cmlidXRlLmR1cmF0aW9ufSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGFycml2YWxXYWxrVGV4dCA9IGFycml2YWxUaW1lQXR0cmlidXRlXG4gICAgICA/IGAke2Fycml2YWxUaW1lQXR0cmlidXRlLnRleHR9ICR7YXJyaXZhbFRpbWVBdHRyaWJ1dGUuZHVyYXRpb259LCBgXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlVGltZVRleHQgPSBkZXBhcnR1cmVUaW1lXG4gICAgICA/IGAke2kxOG5EZXBhcnR1cmVbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2Zvcm1hdChkZXBhcnR1cmVUaW1lLCAnSEg6bW0nKX0sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBnZXREZXBhcnR1cmVRdWF5VGV4dCA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKCFkZXBhcnR1cmU/LnF1YXlGb3JtYXR0ZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgcHJlZml4IFwibmV3XCIgaWYgcXVheSB3YXMgY2hhbmdlZFxuICAgICAgY29uc3QgY2hhbmdlZFF1YXlQcmVmaXggPSBkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gYCR7aTE4bk5ld1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gYCA6ICcnO1xuICAgICAgcmV0dXJuIGAke2NoYW5nZWRRdWF5UHJlZml4fSR7XG4gICAgICAgIHRoaXMuX2dldFF1YXlUeXBlU3RyaW5ncygpPy5sb25nXG4gICAgICB9ICR7ZGVwYXJ0dXJlPy5xdWF5Rm9ybWF0dGVkfSwgYDtcbiAgICB9O1xuXG4gICAgY29uc3QgbWVhbnNPZlRyYW5zcG9ydFRleHQgPVxuICAgICAgcHJvZHVjdCAmJiBwcm9kdWN0LnZlaGljbGVNb2RlXG4gICAgICAgID8gaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXSAmJlxuICAgICAgICAgIGAke2kxOG5NZWFuc09mVHJhbnNwb3J0W3Byb2R1Y3QudmVoaWNsZU1vZGUudG9Mb3dlckNhc2UoKV1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19LCBgXG4gICAgICAgIDogJyc7XG5cbiAgICBjb25zdCB2ZWhpY2xlU3ViTW9kZVRleHQgPSBwcm9kdWN0Py52ZWhpY2xlU3ViTW9kZVNob3J0TmFtZVxuICAgICAgPyBgJHtwcm9kdWN0LnZlaGljbGVTdWJNb2RlU2hvcnROYW1lfSAke3Byb2R1Y3QubGluZSB8fCAnJ30sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkaXJlY3Rpb25UZXh0ID0gYCR7aTE4bkRpcmVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkaXJlY3Rpb259LCBgO1xuXG4gICAgY29uc3QgaGltQ3VzID0gdGhpcy5faGFuZGxlSGltQ3VzKHRyaXApO1xuICAgIGNvbnN0IGN1c1RleHQgPSBoaW1DdXM/LmN1cz8udGV4dFxuICAgICAgPyBgJHtpMThuUmVhbFRpbWVJbmZvW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHtoaW1DdXM/LmN1cz8udGV4dH0sIGBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgaGltVGV4dCA9IGhpbUN1cz8uaGltPy50ZXh0XG4gICAgICA/IGAke2kxOG5SZWFsVGltZUluZm9bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2hpbUN1cz8uaGltPy50ZXh0fSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGJvYXJkaW5nVGV4dCA9IHRoaXMuYm9hcmRpbmcgPyBgJHt0aGlzLmJvYXJkaW5nLnRleHR9LCBgIDogJyc7XG5cbiAgICBjb25zdCBwcmljZVRleHQgPSBgJHt0aGlzLnByaWNlPy5pc0Rpc2NvdW50ID8gaTE4blN1cGVyc2F2ZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gOiAnJ30gJHtcbiAgICAgIHRoaXMucHJpY2U/LnRleHQgJiYgdGhpcy5wcmljZT8ucHJpY2VcbiAgICAgICAgPyAodGhpcy5wcmljZT8udGV4dCB8fCAnJykgKyAnICcgKyAodGhpcy5wcmljZT8ucHJpY2UgfHwgJycpICsgJywgJ1xuICAgICAgICA6ICcnXG4gICAgfWA7XG5cbiAgICBjb25zdCB0cmFuc2ZlclByb2NlZHVyZXMgPVxuICAgICAgcmlkZUxlZ3MubGVuZ3RoID4gMlxuICAgICAgICA/IGAke3JpZGVMZWdzLmxlbmd0aCAtIDF9ICR7aTE4blRyYW5zZmVyUHJvY2VkdXJlc1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sIGBcbiAgICAgICAgOiByaWRlTGVncy5sZW5ndGggPiAxXG4gICAgICAgICAgPyBgJHtyaWRlTGVncy5sZW5ndGggLSAxfSAke2kxOG5UcmFuc2ZlclByb2NlZHVyZVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sIGBcbiAgICAgICAgICA6ICcnO1xuXG4gICAgY29uc3QgYXJyaXZhbFRpbWVUZXh0ID0gYXJyaXZhbFRpbWVcbiAgICAgID8gYCR7aTE4bkFycml2YWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2Zvcm1hdChhcnJpdmFsVGltZSwgJ0hIOm1tJyl9LCBgXG4gICAgICA6ICcnO1xuXG4gICAgbGV0IG9jY3VwYW5jeVRleHQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChvY2N1cGFuY3kpIHtcbiAgICAgIGlmIChvY2N1cGFuY3kuZmlyc3RDbGFzcyAmJiBvY2N1cGFuY3kuZmlyc3RDbGFzcyAhPT0gJ1VOS05PV04nKSB7XG4gICAgICAgIG9jY3VwYW5jeVRleHQgKz0gYCR7aTE4bkNsYXNzLmZpcnN0W3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgIChcbiAgICAgICAgICAgIGkxOG5PY2N1cGFuY3lbb2NjdXBhbmN5LmZpcnN0Q2xhc3MudG9Mb3dlckNhc2UoKSBhcyBTYmJPY2N1cGFuY3ldIGFzIFJlY29yZDxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBzdHJpbmdcbiAgICAgICAgICAgID5cbiAgICAgICAgICApPy5bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF1cbiAgICAgICAgfS5gO1xuICAgICAgfVxuICAgICAgaWYgKG9jY3VwYW5jeS5zZWNvbmRDbGFzcyAmJiBvY2N1cGFuY3kuc2Vjb25kQ2xhc3MgIT09ICdVTktOT1dOJykge1xuICAgICAgICBvY2N1cGFuY3lUZXh0ICs9IGAgJHtpMThuQ2xhc3Muc2Vjb25kW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgIChcbiAgICAgICAgICAgIGkxOG5PY2N1cGFuY3lbb2NjdXBhbmN5LnNlY29uZENsYXNzLnRvTG93ZXJDYXNlKCkgYXMgU2JiT2NjdXBhbmN5XSBhcyBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgc3RyaW5nXG4gICAgICAgICAgICA+XG4gICAgICAgICAgKT8uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdXG4gICAgICAgIH0uYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID1cbiAgICAgIG5vdGljZXMgJiZcbiAgICAgIGhhbmRsZU5vdGljZXMobm90aWNlcykubGVuZ3RoICYmXG4gICAgICBoYW5kbGVOb3RpY2VzKG5vdGljZXMpXG4gICAgICAgID8ubWFwKChub3RpY2UsIGluZGV4KSA9PiBpbmRleCA8IDQgJiYgbm90aWNlLnRleHQ/LnRlbXBsYXRlKVxuICAgICAgICAuam9pbignLCAnKSArICcsICc7XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzVGV4dCA9IGF0dHJpYnV0ZXNcbiAgICAgID8gYCR7aTE4blRyYXZlbGhpbnRzW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHthdHRyaWJ1dGVzfWBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkdXJhdGlvblRleHQgPVxuICAgICAgISFkdXJhdGlvbiAmJiBkdXJhdGlvbiA+IDBcbiAgICAgICAgPyBgJHtpMThuVHJpcER1cmF0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgICAgZHVyYXRpb25Ub1RpbWUoZHVyYXRpb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpLmxvbmdcbiAgICAgICAgICB9LCBgXG4gICAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgZGVwYXJ0dXJlV2Fsa1RleHQsXG4gICAgICBkZXBhcnR1cmVUaW1lVGV4dCxcbiAgICAgIGdldERlcGFydHVyZVF1YXlUZXh0KCksXG4gICAgICBtZWFuc09mVHJhbnNwb3J0VGV4dCxcbiAgICAgIHZlaGljbGVTdWJNb2RlVGV4dCxcbiAgICAgIGRpcmVjdGlvblRleHQsXG4gICAgICBjdXNUZXh0LFxuICAgICAgYm9hcmRpbmdUZXh0LFxuICAgICAgcHJpY2VUZXh0LFxuICAgICAgY3VzVGV4dCA/ICcnIDogaGltVGV4dCxcbiAgICAgIGFycml2YWxUaW1lVGV4dCxcbiAgICAgIGFycml2YWxXYWxrVGV4dCxcbiAgICAgIGR1cmF0aW9uVGV4dCxcbiAgICAgIHRyYW5zZmVyUHJvY2VkdXJlcyxcbiAgICAgIG9jY3VwYW5jeVRleHQsXG4gICAgICBhdHRyaWJ1dGVzVGV4dCxcbiAgICBdXG4gICAgICAubWFwKChlKSA9PiBlPy50cmltKCkpXG4gICAgICAuZmlsdGVyKChlKSA9PiBlICYmIGUubGVuZ3RoID4gMClcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nVHJpcCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNrZWxldG9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBsZWdzLCBpZCwgbm90aWNlcywgc3VtbWFyeSB9ID0gdGhpcy50cmlwIHx8IHt9O1xuXG4gICAgY29uc3Qge1xuICAgICAgcHJvZHVjdCxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIGRlcGFydHVyZVdhbGssXG4gICAgICBkZXBhcnR1cmUsXG4gICAgICBhcnJpdmFsLFxuICAgICAgYXJyaXZhbFdhbGssXG4gICAgICBvY2N1cGFuY3ksXG4gICAgICBkdXJhdGlvbixcbiAgICB9ID0gc3VtbWFyeSB8fCB7fTtcblxuICAgIGNvbnN0IGhpbUN1cyA9IHRoaXMuX2hhbmRsZUhpbUN1cyh0aGlzLnRyaXApO1xuICAgIGNvbnN0IGhhc0hpbUN1cyA9ICEhaGltQ3VzLmN1cyB8fCAhIWhpbUN1cy5oaW07XG5cbiAgICBjb25zdCBub3RpY2VBdHRyaWJ1dGVzID0gbm90aWNlcyAmJiBoYW5kbGVOb3RpY2VzKG5vdGljZXMpO1xuXG4gICAgY29uc3QgZHVyYXRpb25PYmogPSBkdXJhdGlvbiA/IGR1cmF0aW9uVG9UaW1lKGR1cmF0aW9uLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KSA6IG51bGw7XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzYmItY2FyZCBjbGFzcz1cInNiYi1jYXJkLXNwYWNpbmctNHgteHhzXCIgaWQ9JHtpZH0+XG4gICAgICAgIDxzYmItY2FyZC1idXR0b25cbiAgICAgICAgICA/YWN0aXZlPSR7dGhpcy5hY3RpdmV9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD0ke3RoaXMuYWNjZXNzaWJpbGl0eUV4cGFuZGVkID8gJ3RydWUnIDogbm90aGluZ31cbiAgICAgICAgPlxuICAgICAgICAgICR7dGhpcy5jYXJkQWN0aW9uTGFiZWwgPyB0aGlzLmNhcmRBY3Rpb25MYWJlbCA6IHRoaXMuX2dldEFjY2Vzc2liaWxpdHlUZXh0KHRoaXMudHJpcCl9XG4gICAgICAgIDwvc2JiLWNhcmQtYnV0dG9uPlxuICAgICAgICAke3RoaXMubG9hZGluZ1ByaWNlID8gaHRtbGA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX2JhZGdlXCIgc2xvdD1cImJhZGdlXCI+PC9kaXY+YCA6IG5vdGhpbmd9XG4gICAgICAgICR7dGhpcy5wcmljZSAmJiAhdGhpcy5sb2FkaW5nUHJpY2VcbiAgICAgICAgICA/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+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXRpbWV0YWJsZS1yb3cnOiBTYmJUaW1ldGFibGVSb3dFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FDdUVBLElBQWEscUJBQXFCLE1BQWMsU0FBZ0M7Q0FDOUUsT0FBTyxJQUFJO3FCQUNRLEtBQUk7MkNBQ2tCLEtBQUk7OztBQUkvQyxJQUFhLHVCQUF1QixhQUFxQixTQUF3QztDQUMvRixNQUFNLFFBQVE7RUFBQztFQUFLO0VBQUs7RUFBSSxDQUFDLFNBQVMsWUFBWSxHQUFHLE1BQU07Q0FDNUQsT0FBTyxJQUFJO01BQ1AsU0FBUyxPQUFPLGNBQWMsUUFBUSxPQUFPLFlBQUE7OztBQUluRCxJQUFNLG9CQUFvQixTQUFnRDtDQUN4RSxPQUFPLE1BQU0sTUFBTSxRQUFRLElBQUksZ0JBQWdCLG1CQUFtQixjQUFjLEVBQUUsZ0JBQzlFLG1CQUFtQjs7QUFHekIsSUFBTSxnQkFBZ0IsU0FBZ0Q7Q0FDcEUsT0FB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
|