@sbb-esta/lyne-elements-experimental-dev 5.0.0-next.1-dev.1777896783 → 5.0.0-next.1-dev.1777898769

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 (126) hide show
  1. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +18 -18
  2. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +1 -1
  3. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +1 -1
  4. package/{autocomplete-grid-cell.component-BFzREPWp.js → autocomplete-grid-cell.component-DAsWZlTn.js} +6 -6
  5. package/{autocomplete-grid-row.component-BQxCxOI6.js → autocomplete-grid-row.component-VbyYP0U-.js} +7 -7
  6. package/autocomplete-grid.js +2 -2
  7. package/autocomplete-grid.pure.js +2 -2
  8. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts.map +1 -1
  9. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +3 -3
  10. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts.map +1 -1
  11. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +1 -1
  12. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts.map +1 -1
  13. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +1 -1
  14. package/development/autocomplete-grid-cell.component-BF8i4388.js +33 -0
  15. package/development/{autocomplete-grid-row.component-CY4UDuuj.js → autocomplete-grid-row.component-CBHh50jC.js} +3 -3
  16. package/development/autocomplete-grid.js +2 -2
  17. package/development/autocomplete-grid.pure.js +2 -2
  18. package/development/journey-summary/journey-summary.component.d.ts.map +1 -1
  19. package/development/journey-summary/journey-summary.component.js +1 -1
  20. package/development/journey-summary.component-De1ioDRq.js +341 -0
  21. package/development/journey-summary.js +1 -1
  22. package/development/journey-summary.pure.js +1 -1
  23. package/development/pearl-chain/pearl-chain.component.d.ts.map +1 -1
  24. package/development/pearl-chain/pearl-chain.component.js +1 -1
  25. package/development/pearl-chain-time/pearl-chain-time.component.d.ts.map +1 -1
  26. package/development/pearl-chain-time/pearl-chain-time.component.js +1 -1
  27. package/development/{pearl-chain-time.component-f2y8Jebp.js → pearl-chain-time.component-BxVQ1z-Z.js} +3 -7
  28. package/development/pearl-chain-time.js +1 -1
  29. package/development/pearl-chain-time.pure.js +1 -1
  30. package/development/pearl-chain-vertical/pearl-chain-vertical.component.d.ts.map +1 -1
  31. package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +1 -1
  32. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts.map +1 -1
  33. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +1 -1
  34. package/development/{pearl-chain-vertical-item.component-DHsk3J8I.js → pearl-chain-vertical-item.component-DJioJtxP.js} +3 -3
  35. package/development/pearl-chain-vertical-item.js +1 -1
  36. package/development/pearl-chain-vertical-item.pure.js +1 -1
  37. package/development/pearl-chain-vertical.component-zSOeIkhh.js +30 -0
  38. package/development/pearl-chain-vertical.js +1 -1
  39. package/development/pearl-chain-vertical.pure.js +1 -1
  40. package/development/{pearl-chain.component-bTvnaUEj.js → pearl-chain.component-B83OsEx8.js} +3 -7
  41. package/development/pearl-chain.js +1 -1
  42. package/development/pearl-chain.pure.js +1 -1
  43. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -1
  44. package/development/seat-reservation/seat-reservation/seat-reservation.component.js +1 -1
  45. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts.map +1 -1
  46. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +1 -1
  47. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts.map +1 -1
  48. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +1 -1
  49. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -1
  50. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +1 -1
  51. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -1
  52. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +1 -1
  53. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -1
  54. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +1 -1
  55. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts.map +1 -1
  56. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +1 -1
  57. package/development/{seat-reservation-area.component-DlH14rY-.js → seat-reservation-area.component-CMqjbUtV.js} +3 -3
  58. package/development/{seat-reservation-graphic.component-B771YtOf.js → seat-reservation-graphic.component-C2r57590.js} +3 -3
  59. package/development/{seat-reservation-navigation-coach.component-CnA9MEBr.js → seat-reservation-navigation-coach.component-BwLbiHCG.js} +3 -7
  60. package/development/{seat-reservation-navigation-services.component-CLho6RnU.js → seat-reservation-navigation-services.component-Do8JLJh3.js} +3 -7
  61. package/development/{seat-reservation-place-control.component-BEeaDOS6.js → seat-reservation-place-control.component-BfuOGZYq.js} +3 -7
  62. package/development/{seat-reservation-scoped.component-X-Kq0-w5.js → seat-reservation-scoped.component-D-Mvw-Q3.js} +3 -3
  63. package/development/seat-reservation.component-B2nJ13F1.js +472 -0
  64. package/development/seat-reservation.js +7 -7
  65. package/development/seat-reservation.pure.js +7 -7
  66. package/development/timetable-duration/timetable-duration.component.d.ts.map +1 -1
  67. package/development/timetable-duration/timetable-duration.component.js +1 -1
  68. package/development/timetable-duration.component-fBla8Kue.js +96 -0
  69. package/development/timetable-duration.js +1 -1
  70. package/development/timetable-duration.pure.js +1 -1
  71. package/development/timetable-row/timetable-row.component.d.ts.map +1 -1
  72. package/development/timetable-row/timetable-row.component.js +1 -1
  73. package/development/timetable-row.component-C9Y9Rev1.js +732 -0
  74. package/development/timetable-row.js +1 -1
  75. package/development/timetable-row.pure.js +1 -1
  76. package/journey-summary/journey-summary.component.js +1 -1
  77. package/{journey-summary.component-DZ9M06Nt.js → journey-summary.component-CkDRawn9.js} +50 -54
  78. package/journey-summary.js +1 -1
  79. package/journey-summary.pure.js +1 -1
  80. package/package.json +2 -2
  81. package/pearl-chain/pearl-chain.component.js +1 -1
  82. package/pearl-chain-time/pearl-chain-time.component.js +1 -1
  83. package/{pearl-chain-time.component-DGilJDFx.js → pearl-chain-time.component-D5OCEBJ_.js} +39 -43
  84. package/pearl-chain-time.js +1 -1
  85. package/pearl-chain-time.pure.js +1 -1
  86. package/pearl-chain-vertical/pearl-chain-vertical.component.js +1 -1
  87. package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +1 -1
  88. package/{pearl-chain-vertical-item.component-CO6HUZFL.js → pearl-chain-vertical-item.component-IdquCJMy.js} +28 -28
  89. package/pearl-chain-vertical-item.js +1 -1
  90. package/pearl-chain-vertical-item.pure.js +1 -1
  91. package/{pearl-chain-vertical.component-Lx47SlJU.js → pearl-chain-vertical.component-CDOWaup3.js} +6 -6
  92. package/pearl-chain-vertical.js +1 -1
  93. package/pearl-chain-vertical.pure.js +1 -1
  94. package/{pearl-chain.component-D7Dz_ruc.js → pearl-chain.component-C6lcD7Xl.js} +37 -41
  95. package/pearl-chain.js +1 -1
  96. package/pearl-chain.pure.js +1 -1
  97. package/seat-reservation/seat-reservation/seat-reservation.component.js +1 -1
  98. package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +1 -1
  99. package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +1 -1
  100. package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +1 -1
  101. package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +1 -1
  102. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +1 -1
  103. package/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +1 -1
  104. package/{seat-reservation-area.component-B_T7k-dq.js → seat-reservation-area.component-BcmwKJSK.js} +16 -16
  105. package/{seat-reservation-graphic.component-BNtFgIVM.js → seat-reservation-graphic.component-C3wc4DKr.js} +26 -26
  106. package/{seat-reservation-navigation-coach.component-BF2dTeIb.js → seat-reservation-navigation-coach.component-D1SgS8BU.js} +49 -53
  107. package/{seat-reservation-navigation-services.component-BSeCIGnn.js → seat-reservation-navigation-services.component-CfAQa7pa.js} +26 -30
  108. package/{seat-reservation-place-control.component-DOEKL6FP.js → seat-reservation-place-control.component-DrzEDW8Z.js} +41 -45
  109. package/{seat-reservation-scoped.component-CdB7HYzl.js → seat-reservation-scoped.component-BohQUGVW.js} +6 -6
  110. package/{seat-reservation.component-SoXTIEnc.js → seat-reservation.component-CB2IWgM9.js} +76 -77
  111. package/seat-reservation.js +7 -7
  112. package/seat-reservation.pure.js +7 -7
  113. package/timetable-duration/timetable-duration.component.js +1 -1
  114. package/{timetable-duration.component-B2Wq8dP0.js → timetable-duration.component-DPRcG1LP.js} +14 -18
  115. package/timetable-duration.js +1 -1
  116. package/timetable-duration.pure.js +1 -1
  117. package/timetable-row/timetable-row.component.js +1 -1
  118. package/{timetable-row.component-BPH5pFQO.js → timetable-row.component-BqIVlISS.js} +113 -117
  119. package/timetable-row.js +1 -1
  120. package/timetable-row.pure.js +1 -1
  121. package/development/autocomplete-grid-cell.component-Buvsof-Y.js +0 -33
  122. package/development/journey-summary.component-Ch38LiQx.js +0 -345
  123. package/development/pearl-chain-vertical.component-Cmc3QXgd.js +0 -30
  124. package/development/seat-reservation.component-BtAwrvVE.js +0 -473
  125. package/development/timetable-duration.component-BhIBA6le.js +0 -100
  126. package/development/timetable-row.component-BjaJFKLW.js +0 -736
@@ -1,736 +0,0 @@
1
- import { t as format } from "./format-DFx4997p.js";
2
- import { __esDecorate, __runInitializers } from "tslib";
3
- import { SbbElement, SbbLanguageController, boxSizingStyles, defaultDateAdapter, forceType, i18nArrival, i18nClass, i18nDeparture, i18nDirection, i18nFromPlatform, i18nMeansOfTransport, i18nNew, i18nOccupancy, i18nRealTimeInfo, i18nSupersaver, i18nTransferProcedure, i18nTransferProcedures, i18nTravelhints, i18nTripDuration, i18nTripQuayChange, screenReaderOnlyStyles, setOrRemoveAttribute } 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 = [
421
- boxSizingStyles,
422
- screenReaderOnlyStyles,
423
- unsafeCSS(timetable_row_default)
424
- ];
425
- }
426
- #trip_accessor_storage;
427
- /** The trip Prop. */
428
- get trip() {
429
- return this.#trip_accessor_storage;
430
- }
431
- set trip(value) {
432
- this.#trip_accessor_storage = value;
433
- }
434
- #price_accessor_storage;
435
- /** The price Prop, which consists of the data for the badge. */
436
- get price() {
437
- return this.#price_accessor_storage;
438
- }
439
- set price(value) {
440
- this.#price_accessor_storage = value;
441
- }
442
- #disableAnimation_accessor_storage;
443
- /** This will be forwarded to the sbb-pearl-chain component - if true the position won't be animated. */
444
- get disableAnimation() {
445
- return this.#disableAnimation_accessor_storage;
446
- }
447
- set disableAnimation(value) {
448
- this.#disableAnimation_accessor_storage = value;
449
- }
450
- #boarding_accessor_storage;
451
- /** This will be forwarded to the notices section */
452
- get boarding() {
453
- return this.#boarding_accessor_storage;
454
- }
455
- set boarding(value) {
456
- this.#boarding_accessor_storage = value;
457
- }
458
- #loadingTrip_accessor_storage;
459
- /**
460
- * The loading state -
461
- * when this is true it will be render skeleton with an idling animation
462
- */
463
- get loadingTrip() {
464
- return this.#loadingTrip_accessor_storage;
465
- }
466
- set loadingTrip(value) {
467
- this.#loadingTrip_accessor_storage = value;
468
- }
469
- #a11yFootpath_accessor_storage;
470
- /**
471
- * The Footpath attribute for rendering different icons
472
- * true: render a11y-icon
473
- * false: render walk-icon
474
- * default: render walk-icon
475
- */
476
- get a11yFootpath() {
477
- return this.#a11yFootpath_accessor_storage;
478
- }
479
- set a11yFootpath(value) {
480
- this.#a11yFootpath_accessor_storage = value;
481
- }
482
- #loadingPrice_accessor_storage;
483
- /**
484
- * The loading state -
485
- * when this is true it will be render skeleton with an idling animation
486
- */
487
- get loadingPrice() {
488
- return this.#loadingPrice_accessor_storage;
489
- }
490
- set loadingPrice(value) {
491
- this.#loadingPrice_accessor_storage = value;
492
- }
493
- #cardActionLabel_accessor_storage;
494
- /**
495
- * 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.
496
- */
497
- get cardActionLabel() {
498
- return this.#cardActionLabel_accessor_storage;
499
- }
500
- set cardActionLabel(value) {
501
- this.#cardActionLabel_accessor_storage = value;
502
- }
503
- #accessibilityExpanded_accessor_storage;
504
- /** This will be forwarded to the sbb-card component as aria-expanded. */
505
- get accessibilityExpanded() {
506
- return this.#accessibilityExpanded_accessor_storage;
507
- }
508
- set accessibilityExpanded(value) {
509
- this.#accessibilityExpanded_accessor_storage = value;
510
- }
511
- #active_accessor_storage;
512
- /** When this prop is true the sbb-card will be in the active state. */
513
- get active() {
514
- return this.#active_accessor_storage;
515
- }
516
- set active(value) {
517
- this.#active_accessor_storage = value;
518
- }
519
- /**
520
- * A configured date which acts as the current date instead of the real current date.
521
- * Only recommended for testing purposes.
522
- */
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")) setOrRemoveAttribute(this, "role", !this.loadingTrip ? "rowgroup" : null);
532
- }
533
- /** The skeleton render function for the loading state */
534
- _renderSkeleton() {
535
- return html`
536
- <sbb-card class="sbb-loading sbb-card-spacing-4x-xxs">
537
- ${this.loadingPrice ? html`<div class="sbb-loading__badge" slot="badge"></div>` : nothing}
538
- <div class="sbb-loading__wrapper">
539
- <div class="sbb-loading__row"></div>
540
- <div class="sbb-loading__row"></div>
541
- <div class="sbb-loading__row"></div>
542
- </div>
543
- </sbb-card>
544
- `;
545
- }
546
- _getRideLegs() {
547
- return this.trip?.legs?.filter((leg) => isRideLeg(leg)) ?? [];
548
- }
549
- _getQuayTypeStrings() {
550
- if (!this.trip.summary?.product) return null;
551
- const rideLegs = this._getRideLegs();
552
- const short = this.trip.summary.product?.vehicleMode === "TRAIN" ? rideLegs[0].serviceJourney.quayTypeShortName || "" : rideLegs[0].serviceJourney.quayTypeName || "";
553
- return {
554
- long: i18nFromPlatform[this._language.current] + " " + short,
555
- short
556
- };
557
- }
558
- /** map Quay */
559
- _renderQuayType() {
560
- if (!this.trip.summary?.product) return;
561
- const quayTypeStrings = this._getQuayTypeStrings();
562
- return html`
563
- <span class="sbb-timetable__row--quay">
564
- <span class="sbb-screen-reader-only">${quayTypeStrings?.long}&nbsp;</span>
565
- <span class="sbb-timetable__row--quay-type" aria-hidden="true"
566
- >${quayTypeStrings?.short}</span
567
- >
568
- </span>
569
- `;
570
- }
571
- _handleHimCus(trip) {
572
- const { situations } = trip || {};
573
- const sortedSituations = situations && sortSituation(situations);
574
- const cus = getCus(trip, this._language.current);
575
- return {
576
- cus: Object.keys(cus)?.length ? cus : null,
577
- him: situations?.length ? getHimIcon(sortedSituations[0]) : null
578
- };
579
- }
580
- _getAccessibilityText(trip) {
581
- const { summary, legs, notices } = trip || {};
582
- const { departureWalk, arrivalWalk, departure, arrival, product, direction, occupancy, duration } = summary || {};
583
- const { departureTimeAttribute, arrivalTimeAttribute } = getDepartureArrivalTimeAttribute(legs, departureWalk || 0, arrivalWalk || 0, this._language.current, this.a11yFootpath);
584
- const rideLegs = this._getRideLegs();
585
- const departureTime = departure?.time ? removeTimezoneFromISOTimeString(departure.time) : void 0;
586
- const arrivalTime = arrival?.time ? removeTimezoneFromISOTimeString(arrival.time) : void 0;
587
- const departureWalkText = departureTimeAttribute ? `${departureTimeAttribute.text} ${departureTimeAttribute.duration}, ` : "";
588
- const arrivalWalkText = arrivalTimeAttribute ? `${arrivalTimeAttribute.text} ${arrivalTimeAttribute.duration}, ` : "";
589
- const departureTimeText = departureTime ? `${i18nDeparture[this._language.current]}: ${format(departureTime, "HH:mm")}, ` : "";
590
- const getDepartureQuayText = () => {
591
- if (!departure?.quayFormatted) return "";
592
- return `${departure?.quayChanged ? `${i18nNew[this._language.current]} ` : ""}${this._getQuayTypeStrings()?.long} ${departure?.quayFormatted}, `;
593
- };
594
- const meansOfTransportText = product && product.vehicleMode ? i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && `${i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}, ` : "";
595
- const vehicleSubModeText = product?.vehicleSubModeShortName ? `${product.vehicleSubModeShortName} ${product.line || ""}, ` : "";
596
- const directionText = `${i18nDirection[this._language.current]} ${direction}, `;
597
- const himCus = this._handleHimCus(trip);
598
- const cusText = himCus?.cus?.text ? `${i18nRealTimeInfo[this._language.current]}: ${himCus?.cus?.text}, ` : "";
599
- const himText = himCus?.him?.text ? `${i18nRealTimeInfo[this._language.current]}: ${himCus?.him?.text}, ` : "";
600
- const boardingText = this.boarding ? `${this.boarding.text}, ` : "";
601
- const priceText = `${this.price?.isDiscount ? i18nSupersaver[this._language.current] : ""} ${this.price?.text && this.price?.price ? (this.price?.text || "") + " " + (this.price?.price || "") + ", " : ""}`;
602
- const transferProcedures = rideLegs.length > 2 ? `${rideLegs.length - 1} ${i18nTransferProcedures[this._language.current]}, ` : rideLegs.length > 1 ? `${rideLegs.length - 1} ${i18nTransferProcedure[this._language.current]}, ` : "";
603
- const arrivalTimeText = arrivalTime ? `${i18nArrival[this._language.current]}: ${format(arrivalTime, "HH:mm")}, ` : "";
604
- let occupancyText = "";
605
- if (occupancy) {
606
- if (occupancy.firstClass && occupancy.firstClass !== "UNKNOWN") occupancyText += `${i18nClass.first[this._language.current]} ${i18nOccupancy[occupancy.firstClass.toLowerCase()]?.[this._language.current]}.`;
607
- if (occupancy.secondClass && occupancy.secondClass !== "UNKNOWN") occupancyText += ` ${i18nClass.second[this._language.current]} ${i18nOccupancy[occupancy.secondClass.toLowerCase()]?.[this._language.current]}.`;
608
- }
609
- const attributes = notices && handleNotices(notices).length && handleNotices(notices)?.map((notice, index) => index < 4 && notice.text?.template).join(", ") + ", ";
610
- const attributesText = attributes ? `${i18nTravelhints[this._language.current]}: ${attributes}` : "";
611
- const durationText = !!duration && duration > 0 ? `${i18nTripDuration[this._language.current]} ${durationToTime(duration, this._language.current).long}, ` : "";
612
- return [
613
- departureWalkText,
614
- departureTimeText,
615
- getDepartureQuayText(),
616
- meansOfTransportText,
617
- vehicleSubModeText,
618
- directionText,
619
- cusText,
620
- boardingText,
621
- priceText,
622
- cusText ? "" : himText,
623
- arrivalTimeText,
624
- arrivalWalkText,
625
- durationText,
626
- transferProcedures,
627
- occupancyText,
628
- attributesText
629
- ].map((e) => e?.trim()).filter((e) => e && e.length > 0).join(" ");
630
- }
631
- render() {
632
- if (this.loadingTrip) return this._renderSkeleton();
633
- const { legs, id, notices, summary } = this.trip || {};
634
- const { product, direction, departureWalk, departure, arrival, arrivalWalk, occupancy, duration } = summary || {};
635
- const himCus = this._handleHimCus(this.trip);
636
- const hasHimCus = !!himCus.cus || !!himCus.him;
637
- const noticeAttributes = notices && handleNotices(notices);
638
- const durationObj = duration ? durationToTime(duration, this._language.current) : null;
639
- return html`
640
- <sbb-card class="sbb-card-spacing-4x-xxs" id=${id}>
641
- <sbb-card-button
642
- ?active=${this.active}
643
- aria-expanded=${this.accessibilityExpanded ? "true" : nothing}
644
- >
645
- ${this.cardActionLabel ? this.cardActionLabel : this._getAccessibilityText(this.trip)}
646
- </sbb-card-button>
647
- ${this.loadingPrice ? html`<div class="sbb-loading__badge" slot="badge"></div>` : nothing}
648
- ${this.price && !this.loadingPrice ? html`<sbb-card-badge color=${this.price.isDiscount ? "charcoal" : "white"}>
649
- ${this.price.isDiscount ? html`<span aria-hidden="true">
650
- %<span class="sbb-screen-reader-only"
651
- >${i18nSupersaver[this._language.current]}</span
652
- >
653
- </span>` : nothing}
654
- ${this.price.text ? html`<span>${this.price.text}</span>` : nothing}
655
- ${this.price.price ? html`<span>${this.price.price}</span>` : nothing}
656
- </sbb-card-badge>` : nothing}
657
- <div class="sbb-timetable__row" role="row">
658
- <div class="sbb-timetable__row-header" role="gridcell">
659
- <div class="sbb-timetable__row-details">
660
- ${product?.corporateIdentityPictogram && html`<span class="sbb-timetable__row-transport-wrapper">
661
- <sbb-icon
662
- class="sbb-timetable__row-transport-icon"
663
- name="picto:${product.corporateIdentityPictogram}"
664
- ></sbb-icon>
665
- <span class="sbb-screen-reader-only">
666
- ${product && product.vehicleMode && i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}
667
- &nbsp;
668
- </span>
669
- </span>`}
670
- ${product && (product.corporateIdentityIcon ? renderIconProduct(product.corporateIdentityIcon, product.name) : product.vehicleSubModeShortName && renderStringProduct(product.vehicleSubModeShortName, product?.line))}
671
- </div>
672
- ${direction ? html`<p>${`${i18nDirection[this._language.current]} ${direction}`}</p>` : nothing}
673
- </div>
674
- <sbb-pearl-chain-time
675
- role="gridcell"
676
- .legs=${legs}
677
- .departureTime=${departure?.time}
678
- .arrivalTime=${arrival?.time}
679
- .departureWalk=${departureWalk}
680
- .arrivalWalk=${arrivalWalk}
681
- ?disable-animation=${this.disableAnimation}
682
- ?a11y-footpath=${this.a11yFootpath}
683
- .now=${this.now}
684
- ></sbb-pearl-chain-time>
685
- <div class="sbb-timetable__row-footer" role="gridcell">
686
- ${product && departure?.quayFormatted ? html`<span
687
- class=${departure?.quayChanged ? `sbb-timetable__row-quay--changed` : nothing}
688
- >
689
- <span class="sbb-screen-reader-only">
690
- ${`${i18nDeparture[this._language.current]} ${departure?.quayChanged ? i18nNew[this._language.current] : ""}`}
691
- &nbsp;
692
- </span>
693
- ${this._renderQuayType()} ${departure?.quayFormatted}
694
- </span>` : nothing}
695
- ${occupancy?.firstClass && occupancy?.firstClass !== "UNKNOWN" || occupancy?.secondClass && occupancy.secondClass !== "UNKNOWN" ? html`<sbb-timetable-occupancy
696
- .firstClassOccupancy=${occupancy?.firstClass?.toLowerCase()}
697
- .secondClassOccupancy=${occupancy?.secondClass?.toLowerCase()}
698
- ></sbb-timetable-occupancy>` : nothing}
699
- ${noticeAttributes && noticeAttributes.length || this.boarding ? html`<ul class="sbb-timetable__row-hints" role="list">
700
- ${noticeAttributes?.map((notice, index) => index < 4 ? html`<li>
701
- <sbb-icon
702
- class="sbb-travel-hints__item"
703
- name=${"sa-" + notice.name?.toLowerCase()}
704
- ></sbb-icon>
705
- <span class="sbb-screen-reader-only">${notice.text?.template}</span>
706
- </li>` : nothing)}
707
- ${this.boarding ? html`<li>
708
- <sbb-icon
709
- class="sbb-travel-hints__item"
710
- name=${this.boarding?.name}
711
- aria-label=${this.boarding?.text}
712
- aria-hidden="false"
713
- ></sbb-icon>
714
- </li>` : nothing}
715
- </ul>` : nothing}
716
- ${duration && duration > 0 ? html`<time>
717
- <span class="sbb-screen-reader-only">
718
- ${`${i18nTripDuration[this._language.current]} ${durationObj.long}`}
719
- </span>
720
- <span aria-hidden="true">${durationObj.short}</span>
721
- </time>` : nothing}
722
- ${hasHimCus && (himCus.cus || himCus.him) ? html`<span class="sbb-timetable__row-warning">
723
- <sbb-icon name=${(himCus.cus || himCus.him).name}></sbb-icon>
724
- <span class="sbb-screen-reader-only">${(himCus.cus || himCus.him).text}</span>
725
- </span>` : nothing}
726
- </div>
727
- </div>
728
- </sbb-card>
729
- `;
730
- }
731
- };
732
- })();
733
- //#endregion
734
- 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 };
735
-
736
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXRhYmxlLXJvdy5jb21wb25lbnQtQmphSkZLTFcuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzLWV4cGVyaW1lbnRhbC90aW1ldGFibGUtcm93L3RpbWV0YWJsZS1yb3cuc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMtZXhwZXJpbWVudGFsL3RpbWV0YWJsZS1yb3cvdGltZXRhYmxlLXJvdy5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICAtLXNiYi10aW1ldGFibGUtcm93LWdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMngpO1xuICAtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDI1KX07XG4gIC0tc2JiLXRpbWV0YWJsZS1yb3ctaGVpZ2h0LWhlYWRlcjogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDIwKX07XG4gIC0tc2JiLXRpbWV0YWJsZS1yb3ctaGVpZ2h0LWZvb3RlcjogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDE2KX07XG4gIC0tc2JiLXRpbWV0YWJsZS1yb3ctc2tlbGV0b24tcHVsc2UtZHVyYXRpb246IDE4MDBtcztcblxuICBkaXNwbGF5OiBibG9jaztcbn1cblxuOmhvc3QoW2Rpc2FibGUtYW5pbWF0aW9uXSkge1xuICAtLXNiYi10aW1ldGFibGUtcm93LXNrZWxldG9uLXB1bHNlLWR1cmF0aW9uOiAwO1xufVxuXG4vLyBvdmVycmlkZSBpY29ucyBzaXplc1xuLnNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQtaWNvbiB7XG4gIC0tc2JiLWljb24tc3ZnLXdpZHRoOiAje3NiYi5weC10by1yZW0tYnVpbGQoMjApfTtcbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoMjApfTtcbn1cblxuLy8gb3ZlcnJpZGUgaWNvbnMgc2l6ZXNcbi5zYmItdHJhdmVsLWhpbnRzX19pdGVtIHtcbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoMTQpfTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy0tcXVheSB7XG4gIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xeCk7XG59XG5cbi5zYmItdGltZXRhYmxlX19yb3ctLXF1YXktdHlwZSB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuXG4vLyByZXNldHMgbGlzdHNcbnVsIHtcbiAgQGluY2x1ZGUgc2JiLmxpc3QtcmVzZXQ7XG5cbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG59XG5cbmxpIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LXRyYW5zcG9ydG51bWJlcixcbi5zYmItdGltZXRhYmxlX19yb3ctdGltZSB7XG4gIEBpbmNsdWRlIHNiYi50ZXh0LXMtLWJvbGQ7XG5cbiAgbGluZS1oZWlnaHQ6IHVuc2V0O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi5zYmItdGltZXRhYmxlX19yb3cge1xuICBAaW5jbHVkZSBzYmIudGV4dC1zLS1yZWd1bGFyO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogdmFyKC0tc2JiLXRpbWV0YWJsZS1yb3ctZ2FwKTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy1oZWFkZXIsXG4uc2JiLXRpbWV0YWJsZV9fcm93LWZvb3RlciB7XG4gIC8vIER1ZSB0byBhIGJ1ZyBpbiBTYWZhcmkgd2hpY2ggZGlzcGxheXMgc2tlbGV0b24gYW5pbWF0aW9uIGV2ZW4gb24gbG9hZGVkIGNvbnRlbnQsIHdlIG5lZWQgdG8gbWFudWFsbHkgZGlzYWJsZSBhbmltYXRpb24uXG4gIGFuaW1hdGlvbjogbm9uZTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTJ4KTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodC1oZWFkZXIpO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWRldGFpbHMsXG4uc2JiLXRpbWV0YWJsZV9fcm93LWhpbnRzIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWhlYWRlciBwIHtcbiAgQGluY2x1ZGUgc2JiLmVsbGlwc2lzO1xuXG4gIG1hcmdpbjogMDtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTJ4KTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodC1mb290ZXIpO1xuXG4gID4gc3BhbiB7XG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICB9XG5cbiAgOm9ubHktY2hpbGQge1xuICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IGF1dG87XG4gIH1cbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy1xdWF5LS1jaGFuZ2VkIHtcbiAgY29sb3I6IHZhcigtLXNiYi1jb2xvci1wcmltYXJ5KTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQtd3JhcHBlcixcbi5zYmItdGltZXRhYmxlX19yb3ctd2FybmluZyB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xufVxuXG4uc2JiLWxvYWRpbmcge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnNiYi1sb2FkaW5nX193cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0yeCk7XG59XG5cbi5zYmItbG9hZGluZ19fcm93IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi1ib3JkZXItcmFkaXVzLTF4KTtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1oZWlnaHQpO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICBoZWlnaHQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgyOCl9O1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGJvcmRlcjogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0xeCkgc29saWQgQnV0dG9uQm9yZGVyICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLnNiYi1sb2FkaW5nX19yb3csXG4uc2JiLWxvYWRpbmdfX2JhZGdlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItNCk7XG4gIGFuaW1hdGlvbjogc2tlbGV0b24tcHVsc2UgdmFyKC0tc2JiLXRpbWV0YWJsZS1yb3ctc2tlbGV0b24tcHVsc2UtZHVyYXRpb24pIGVhc2Utb3V0IGluZmluaXRlO1xufVxuXG4uc2JiLWxvYWRpbmdfX3JvdzpmaXJzdC1vZi10eXBlIHtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1oZWlnaHQtaGVhZGVyKTtcbiAgd2lkdGg6IDUwJTtcbn1cblxuLnNiYi1sb2FkaW5nX19yb3c6bGFzdC1vZi10eXBlIHtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1oZWlnaHQtZm9vdGVyKTtcbn1cblxuLnNiYi1sb2FkaW5nX19iYWRnZSB7XG4gIG1hcmdpbi1pbmxpbmU6IGF1dG8gY2FsYyh2YXIoLS1zYmItc3BhY2luZy1maXhlZC0zeCkgKiAtMSk7XG4gIHBhZGRpbmctaW5saW5lLWVuZDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNngpO1xuICBib3JkZXItZW5kLXN0YXJ0LXJhZGl1czogdmFyKC0tc2JiLWNhcmQtYmFkZ2UtYm9yZGVyLXJhZGl1cyk7XG4gIHRyYW5zZm9ybTogdmFyKC0tc2JiLWNhcmQtYmFkZ2Utc2tldyk7XG4gIHdpZHRoOiAje3NiYi5weC10by1yZW0tYnVpbGQoMTE1KX07XG4gIGhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDIwKX07XG59XG5cbkBrZXlmcmFtZXMgc2tlbGV0b24tcHVsc2Uge1xuICAwJSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItNCk7XG4gIH1cblxuICAxNyUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTQpO1xuICB9XG5cbiAgNTAlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci0zKTtcbiAgfVxuXG4gIDY3JSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMyk7XG4gIH1cblxuICAxMDAlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci00KTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgU2JiQ2FyZEJhZGdlRWxlbWVudCxcbiAgU2JiQ2FyZEJ1dHRvbkVsZW1lbnQsXG4gIFNiYkNhcmRFbGVtZW50LFxufSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jYXJkLnB1cmUuanMnO1xuaW1wb3J0IHtcbiAgYm94U2l6aW5nU3R5bGVzLFxuICBkZWZhdWx0RGF0ZUFkYXB0ZXIsXG4gIGZvcmNlVHlwZSxcbiAgaTE4bkFycml2YWwsXG4gIGkxOG5DbGFzcyxcbiAgaTE4bkRlcGFydHVyZSxcbiAgaTE4bkRpcmVjdGlvbixcbiAgaTE4bkZyb21QbGF0Zm9ybSxcbiAgaTE4bk1lYW5zT2ZUcmFuc3BvcnQsXG4gIGkxOG5OZXcsXG4gIGkxOG5PY2N1cGFuY3ksXG4gIGkxOG5SZWFsVGltZUluZm8sXG4gIGkxOG5TdXBlcnNhdmVyLFxuICBpMThuVHJhbnNmZXJQcm9jZWR1cmUsXG4gIGkxOG5UcmFuc2ZlclByb2NlZHVyZXMsXG4gIGkxOG5UcmF2ZWxoaW50cyxcbiAgaTE4blRyaXBEdXJhdGlvbixcbiAgaTE4blRyaXBRdWF5Q2hhbmdlLFxuICBTYmJFbGVtZW50LFxuICB0eXBlIFNiYkVsZW1lbnRUeXBlLFxuICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsXG4gIHR5cGUgU2JiT2NjdXBhbmN5LFxuICBzY3JlZW5SZWFkZXJPbmx5U3R5bGVzLFxuICBzZXRPclJlbW92ZUF0dHJpYnV0ZSxcbn0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS5qcyc7XG5pbXBvcnQgeyBTYmJJY29uRWxlbWVudCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2ljb24ucHVyZS5qcyc7XG5pbXBvcnQgeyBTYmJUaW1ldGFibGVPY2N1cGFuY3lFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvdGltZXRhYmxlLW9jY3VwYW5jeS5wdXJlLmpzJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG4gIHVuc2FmZUNTUyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IElUcmlwSXRlbSwgTm90aWNlLCBQdFJpZGVMZWcsIFB0U2l0dWF0aW9uIH0gZnJvbSAnLi4vY29yZS50cyc7XG5pbXBvcnQge1xuICBkdXJhdGlvblRvVGltZSxcbiAgZ2V0RGVwYXJ0dXJlQXJyaXZhbFRpbWVBdHRyaWJ1dGUsXG4gIGlzUmlkZUxlZyxcbiAgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyxcbn0gZnJvbSAnLi4vY29yZS50cyc7XG5pbXBvcnQgeyBTYmJQZWFybENoYWluVGltZUVsZW1lbnQgfSBmcm9tICcuLi9wZWFybC1jaGFpbi10aW1lLnB1cmUudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi90aW1ldGFibGUtcm93LnNjc3M/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+IG4ubmFtZSA9PT0gbm90aWNlLm5hbWUpID09PSBpbmRleDtcbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlck5vdGljZVxuICAgIC5maWx0ZXIoKG5vdGljZSkgPT4gYWxsb3dlZE5hbWVzLmluY2x1ZGVzKG5vdGljZS5uYW1lKSlcbiAgICAuc29ydCgoYSwgYikgPT4gYWxsb3dlZE5hbWVzLmluZGV4T2YoYS5uYW1lKSAtIGFsbG93ZWROYW1lcy5pbmRleE9mKGIubmFtZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZU5vdGljZXMgPSAobm90aWNlczogTm90aWNlW10pOiBOb3RpY2VbXSA9PiB7XG4gIGNvbnN0IHJlc2VydmF0aW9uTm90aWNlID0gZmluZEFuZFJlcGxhY2VOb3RpY2Uobm90aWNlcyk7XG4gIGNvbnN0IGZpbHRlcmVkTm90aWNlcyA9IGZpbHRlck5vdGljZXMobm90aWNlcyk7XG5cbiAgaWYgKHJlc2VydmF0aW9uTm90aWNlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmlsdGVyZWROb3RpY2VzO1xuICB9XG4gIGlmICghZmlsdGVyZWROb3RpY2VzLmxlbmd0aCkge1xuICAgIHJldHVybiBbcmVzZXJ2YXRpb25Ob3RpY2VdO1xuICB9XG5cbiAgaWYgKGZpbHRlcmVkTm90aWNlc1swXS5uYW1lID09PSAnWicgJiYgZmlsdGVyZWROb3RpY2VzWzFdKSB7XG4gICAgcmV0dXJuIFtmaWx0ZXJlZE5vdGljZXNbMF0sIHJlc2VydmF0aW9uTm90aWNlLCBmaWx0ZXJlZE5vdGljZXNbMV1dLmNvbmNhdChcbiAgICAgIGZpbHRlcmVkTm90aWNlcy5zbGljZSgyKSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIFtyZXNlcnZhdGlvbk5vdGljZSwgLi4uZmlsdGVyZWROb3RpY2VzXTtcbn07XG5cbi8qKlxuICogSXQgZGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRyaXAsIGFjdGluZyBhcyBhIGNvbnRhaW5lciBmb3IgYWxsIHRoZSBgc2JiLXRpbWV0YWJsZS0qYCBjb21wb25lbnRzLlxuICogKi9cbmV4cG9ydCBjbGFzcyBTYmJUaW1ldGFibGVSb3dFbGVtZW50IGV4dGVuZHMgU2JiRWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItdGltZXRhYmxlLXJvdyc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgZWxlbWVudERlcGVuZGVuY2llczogU2JiRWxlbWVudFR5cGVbXSA9IFtcbiAgICBTYmJDYXJkRWxlbWVudCxcbiAgICBTYmJDYXJkQmFkZ2VFbGVtZW50LFxuICAgIFNiYkNhcmRCdXR0b25FbGVtZW50LFxuICAgIFNiYkljb25FbGVtZW50LFxuICAgIFNiYlRpbWV0YWJsZU9jY3VwYW5jeUVsZW1lbnQsXG4gICAgU2JiUGVhcmxDaGFpblRpbWVFbGVtZW50LFxuICBdO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbXG4gICAgYm94U2l6aW5nU3R5bGVzLFxuICAgIHNjcmVlblJlYWRlck9ubHlTdHlsZXMsXG4gICAgdW5zYWZlQ1NTKHN0eWxlKSxcbiAgXTtcblxuICAvKiogVGhlIHRyaXAgUHJvcC4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogT2JqZWN0IH0pIHB1YmxpYyBhY2Nlc3NvciB0cmlwOiBJVHJpcEl0ZW0gPSBudWxsITtcblxuICAvKiogVGhlIHByaWNlIFByb3AsIHdoaWNoIGNvbnNpc3RzIG9mIHRoZSBkYXRhIGZvciB0aGUgYmFkZ2UuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE9iamVjdCB9KSBwdWJsaWMgYWNjZXNzb3IgcHJpY2U6IFByaWNlID0gbnVsbCE7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIHNiYi1wZWFybC1jaGFpbiBjb21wb25lbnQgLSBpZiB0cnVlIHRoZSBwb3NpdGlvbiB3b24ndCBiZSBhbmltYXRlZC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Rpc2FibGUtYW5pbWF0aW9uJywgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZGlzYWJsZUFuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSBub3RpY2VzIHNlY3Rpb24gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogT2JqZWN0IH0pIHB1YmxpYyBhY2Nlc3NvciBib2FyZGluZzogQm9hcmRpbmcgPSBudWxsITtcblxuICAvKipcbiAgICogVGhlIGxvYWRpbmcgc3RhdGUgLVxuICAgKiB3aGVuIHRoaXMgaXMgdHJ1ZSBpdCB3aWxsIGJlIHJlbmRlciBza2VsZXRvbiB3aXRoIGFuIGlkbGluZyBhbmltYXRpb25cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdsb2FkaW5nLXRyaXAnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBsb2FkaW5nVHJpcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgRm9vdHBhdGggYXR0cmlidXRlIGZvciByZW5kZXJpbmcgZGlmZmVyZW50IGljb25zXG4gICAqIHRydWU6IHJlbmRlciBhMTF5LWljb25cbiAgICogZmFsc2U6IHJlbmRlciB3YWxrLWljb25cbiAgICogZGVmYXVsdDogcmVuZGVyIHdhbGstaWNvblxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ExMXktZm9vdHBhdGgnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhMTF5Rm9vdHBhdGg6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGxvYWRpbmcgc3RhdGUgLVxuICAgKiB3aGVuIHRoaXMgaXMgdHJ1ZSBpdCB3aWxsIGJlIHJlbmRlciBza2VsZXRvbiB3aXRoIGFuIGlkbGluZyBhbmltYXRpb25cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdsb2FkaW5nLXByaWNlJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbG9hZGluZ1ByaWNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEhpZGRlbiBsYWJlbCBmb3IgdGhlIGNhcmQgYWN0aW9uLiBJdCBvdmVycmlkZXMgdGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFjY2Vzc2liaWxpdHkgdGV4dCBmb3IgdGhlIGNvbXBvbmVudC4gVXNlIHRoaXMgcHJvcCB0byBwcm92aWRlIGN1c3RvbSBhY2Nlc3NpYmlsaXR5IGluZm9ybWF0aW9uIGZvciB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2NhcmQtYWN0aW9uLWxhYmVsJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgY2FyZEFjdGlvbkxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgc2JiLWNhcmQgY29tcG9uZW50IGFzIGFyaWEtZXhwYW5kZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWV4cGFuZGVkJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gdGhpcyBwcm9wIGlzIHRydWUgdGhlIHNiYi1jYXJkIHdpbGwgYmUgaW4gdGhlIGFjdGl2ZSBzdGF0ZS4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIGNvbmZpZ3VyZWQgZGF0ZSB3aGljaCBhY3RzIGFzIHRoZSBjdXJyZW50IGRhdGUgaW5zdGVhZCBvZiB0aGUgcmVhbCBjdXJyZW50IGRhdGUuXG4gICAqIE9ubHkgcmVjb21tZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG5vdyh2YWx1ZTogRGF0ZSB8IG51bGwpIHtcbiAgICB0aGlzLl9ub3cgPSBkZWZhdWx0RGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKGRlZmF1bHREYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9ub3cgPz8gbmV3IERhdGUoKTtcbiAgfVxuICBwcml2YXRlIF9ub3c6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsb2FkaW5nVHJpcCcpKSB7XG4gICAgICBzZXRPclJlbW92ZUF0dHJpYnV0ZSh0aGlzLCAncm9sZScsICF0aGlzLmxvYWRpbmdUcmlwID8gJ3Jvd2dyb3VwJyA6IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgc2tlbGV0b24gcmVuZGVyIGZ1bmN0aW9uIGZvciB0aGUgbG9hZGluZyBzdGF0ZSAqL1xuICBwcml2YXRlIF9yZW5kZXJTa2VsZXRvbigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2JiLWNhcmQgY2xhc3M9XCJzYmItbG9hZGluZyBzYmItY2FyZC1zcGFjaW5nLTR4LXh4c1wiPlxuICAgICAgICAke3RoaXMubG9hZGluZ1ByaWNlID8gaHRtbGA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX2JhZGdlXCIgc2xvdD1cImJhZGdlXCI+PC9kaXY+YCA6IG5vdGhpbmd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbG9hZGluZ19fd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbG9hZGluZ19fcm93XCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1sb2FkaW5nX19yb3dcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX3Jvd1wiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2JiLWNhcmQ+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJpZGVMZWdzKCk6IFB0UmlkZUxlZ1tdIHtcbiAgICByZXR1cm4gdGhpcy50cmlwPy5sZWdzPy5maWx0ZXIoKGxlZykgPT4gaXNSaWRlTGVnKGxlZykpID8/IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UXVheVR5cGVTdHJpbmdzKCk6IHsgbG9uZzogc3RyaW5nOyBzaG9ydDogc3RyaW5nIH0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMudHJpcC5zdW1tYXJ5Py5wcm9kdWN0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmlkZUxlZ3MgPSB0aGlzLl9nZXRSaWRlTGVncygpO1xuICAgIGNvbnN0IGlzU2hvcnQgPSB0aGlzLnRyaXAuc3VtbWFyeS5wcm9kdWN0Py52ZWhpY2xlTW9kZSA9PT0gJ1RSQUlOJztcbiAgICBjb25zdCBzaG9ydCA9IGlzU2hvcnRcbiAgICAgID8gcmlkZUxlZ3NbMF0uc2VydmljZUpvdXJuZXkucXVheVR5cGVTaG9ydE5hbWUgfHwgJydcbiAgICAgIDogcmlkZUxlZ3NbMF0uc2VydmljZUpvdXJuZXkucXVheVR5cGVOYW1lIHx8ICcnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvbmc6IGkxOG5Gcm9tUGxhdGZvcm1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gKyAnICcgKyBzaG9ydCxcbiAgICAgIHNob3J0LFxuICAgIH07XG4gIH1cblxuICAvKiogbWFwIFF1YXkgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyUXVheVR5cGUoKTogVGVtcGxhdGVSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy50cmlwLnN1bW1hcnk/LnByb2R1Y3QpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHF1YXlUeXBlU3RyaW5ncyA9IHRoaXMuX2dldFF1YXlUeXBlU3RyaW5ncygpO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNwYW4gY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctLXF1YXlcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+JHtxdWF5VHlwZVN0cmluZ3M/Lmxvbmd9Jm5ic3A7PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy0tcXVheS10eXBlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICA+JHtxdWF5VHlwZVN0cmluZ3M/LnNob3J0fTwvc3BhblxuICAgICAgICA+XG4gICAgICA8L3NwYW4+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUhpbUN1cyh0cmlwOiBJVHJpcEl0ZW0pOiB7IGN1czogSGltQ3VzIHwgbnVsbDsgaGltOiBIaW1DdXMgfCBudWxsIH0ge1xuICAgIGNvbnN0IHsgc2l0dWF0aW9ucyB9ID0gdHJpcCB8fCB7fTtcbiAgICBjb25zdCBzb3J0ZWRTaXR1YXRpb25zID0gc2l0dWF0aW9ucyAmJiBzb3J0U2l0dWF0aW9uKHNpdHVhdGlvbnMpO1xuICAgIGNvbnN0IGN1cyA9IGdldEN1cyh0cmlwLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KTtcblxuICAgIHJldHVybiB7XG4gICAgICBjdXM6IE9iamVjdC5rZXlzKGN1cyk/Lmxlbmd0aCA/IGN1cyA6IG51bGwsXG4gICAgICBoaW06IHNpdHVhdGlvbnM/Lmxlbmd0aCA/IGdldEhpbUljb24oc29ydGVkU2l0dWF0aW9uc1swXSkgOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9nZXRBY2Nlc3NpYmlsaXR5VGV4dCh0cmlwOiBJVHJpcEl0ZW0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgc3VtbWFyeSwgbGVncywgbm90aWNlcyB9ID0gdHJpcCB8fCB7fTtcbiAgICBjb25zdCB7XG4gICAgICBkZXBhcnR1cmVXYWxrLFxuICAgICAgYXJyaXZhbFdhbGssXG4gICAgICBkZXBhcnR1cmUsXG4gICAgICBhcnJpdmFsLFxuICAgICAgcHJvZHVjdCxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIG9jY3VwYW5jeSxcbiAgICAgIGR1cmF0aW9uLFxuICAgIH0gPSBzdW1tYXJ5IHx8IHt9O1xuXG4gICAgY29uc3QgeyBkZXBhcnR1cmVUaW1lQXR0cmlidXRlLCBhcnJpdmFsVGltZUF0dHJpYnV0ZSB9ID0gZ2V0RGVwYXJ0dXJlQXJyaXZhbFRpbWVBdHRyaWJ1dGUoXG4gICAgICBsZWdzLFxuICAgICAgZGVwYXJ0dXJlV2FsayB8fCAwLFxuICAgICAgYXJyaXZhbFdhbGsgfHwgMCxcbiAgICAgIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsXG4gICAgICB0aGlzLmExMXlGb290cGF0aCxcbiAgICApO1xuXG4gICAgY29uc3QgcmlkZUxlZ3MgPSB0aGlzLl9nZXRSaWRlTGVncygpO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlVGltZTogRGF0ZSB8IHVuZGVmaW5lZCA9IGRlcGFydHVyZT8udGltZVxuICAgICAgPyByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGRlcGFydHVyZS50aW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBhcnJpdmFsVGltZTogRGF0ZSB8IHVuZGVmaW5lZCA9IGFycml2YWw/LnRpbWVcbiAgICAgID8gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhhcnJpdmFsLnRpbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGRlcGFydHVyZVdhbGtUZXh0ID0gZGVwYXJ0dXJlVGltZUF0dHJpYnV0ZVxuICAgICAgPyBgJHtkZXBhcnR1cmVUaW1lQXR0cmlidXRlLnRleHR9ICR7ZGVwYXJ0dXJlVGltZUF0dHJpYnV0ZS5kdXJhdGlvbn0sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBhcnJpdmFsV2Fsa1RleHQgPSBhcnJpdmFsVGltZUF0dHJpYnV0ZVxuICAgICAgPyBgJHthcnJpdmFsVGltZUF0dHJpYnV0ZS50ZXh0fSAke2Fycml2YWxUaW1lQXR0cmlidXRlLmR1cmF0aW9ufSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGRlcGFydHVyZVRpbWVUZXh0ID0gZGVwYXJ0dXJlVGltZVxuICAgICAgPyBgJHtpMThuRGVwYXJ0dXJlW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHtmb3JtYXQoZGVwYXJ0dXJlVGltZSwgJ0hIOm1tJyl9LCBgXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgZ2V0RGVwYXJ0dXJlUXVheVRleHQgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICghZGVwYXJ0dXJlPy5xdWF5Rm9ybWF0dGVkKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHByZWZpeCBcIm5ld1wiIGlmIHF1YXkgd2FzIGNoYW5nZWRcbiAgICAgIGNvbnN0IGNoYW5nZWRRdWF5UHJlZml4ID0gZGVwYXJ0dXJlPy5xdWF5Q2hhbmdlZCA/IGAke2kxOG5OZXdbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19IGAgOiAnJztcbiAgICAgIHJldHVybiBgJHtjaGFuZ2VkUXVheVByZWZpeH0ke1xuICAgICAgICB0aGlzLl9nZXRRdWF5VHlwZVN0cmluZ3MoKT8ubG9uZ1xuICAgICAgfSAke2RlcGFydHVyZT8ucXVheUZvcm1hdHRlZH0sIGA7XG4gICAgfTtcblxuICAgIGNvbnN0IG1lYW5zT2ZUcmFuc3BvcnRUZXh0ID1cbiAgICAgIHByb2R1Y3QgJiYgcHJvZHVjdC52ZWhpY2xlTW9kZVxuICAgICAgICA/IGkxOG5NZWFuc09mVHJhbnNwb3J0W3Byb2R1Y3QudmVoaWNsZU1vZGUudG9Mb3dlckNhc2UoKV0gJiZcbiAgICAgICAgICBgJHtpMThuTWVhbnNPZlRyYW5zcG9ydFtwcm9kdWN0LnZlaGljbGVNb2RlLnRvTG93ZXJDYXNlKCldW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSwgYFxuICAgICAgICA6ICcnO1xuXG4gICAgY29uc3QgdmVoaWNsZVN1Yk1vZGVUZXh0ID0gcHJvZHVjdD8udmVoaWNsZVN1Yk1vZGVTaG9ydE5hbWVcbiAgICAgID8gYCR7cHJvZHVjdC52ZWhpY2xlU3ViTW9kZVNob3J0TmFtZX0gJHtwcm9kdWN0LmxpbmUgfHwgJyd9LCBgXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgZGlyZWN0aW9uVGV4dCA9IGAke2kxOG5EaXJlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7ZGlyZWN0aW9ufSwgYDtcblxuICAgIGNvbnN0IGhpbUN1cyA9IHRoaXMuX2hhbmRsZUhpbUN1cyh0cmlwKTtcbiAgICBjb25zdCBjdXNUZXh0ID0gaGltQ3VzPy5jdXM/LnRleHRcbiAgICAgID8gYCR7aTE4blJlYWxUaW1lSW5mb1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX06ICR7aGltQ3VzPy5jdXM/LnRleHR9LCBgXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGhpbVRleHQgPSBoaW1DdXM/LmhpbT8udGV4dFxuICAgICAgPyBgJHtpMThuUmVhbFRpbWVJbmZvW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHtoaW1DdXM/LmhpbT8udGV4dH0sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBib2FyZGluZ1RleHQgPSB0aGlzLmJvYXJkaW5nID8gYCR7dGhpcy5ib2FyZGluZy50ZXh0fSwgYCA6ICcnO1xuXG4gICAgY29uc3QgcHJpY2VUZXh0ID0gYCR7dGhpcy5wcmljZT8uaXNEaXNjb3VudCA/IGkxOG5TdXBlcnNhdmVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdIDogJyd9ICR7XG4gICAgICB0aGlzLnByaWNlPy50ZXh0ICYmIHRoaXMucHJpY2U/LnByaWNlXG4gICAgICAgID8gKHRoaXMucHJpY2U/LnRleHQgfHwgJycpICsgJyAnICsgKHRoaXMucHJpY2U/LnByaWNlIHx8ICcnKSArICcsICdcbiAgICAgICAgOiAnJ1xuICAgIH1gO1xuXG4gICAgY29uc3QgdHJhbnNmZXJQcm9jZWR1cmVzID1cbiAgICAgIHJpZGVMZWdzLmxlbmd0aCA+IDJcbiAgICAgICAgPyBgJHtyaWRlTGVncy5sZW5ndGggLSAxfSAke2kxOG5UcmFuc2ZlclByb2NlZHVyZXNbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19LCBgXG4gICAgICAgIDogcmlkZUxlZ3MubGVuZ3RoID4gMVxuICAgICAgICAgID8gYCR7cmlkZUxlZ3MubGVuZ3RoIC0gMX0gJHtpMThuVHJhbnNmZXJQcm9jZWR1cmVbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19LCBgXG4gICAgICAgICAgOiAnJztcblxuICAgIGNvbnN0IGFycml2YWxUaW1lVGV4dCA9IGFycml2YWxUaW1lXG4gICAgICA/IGAke2kxOG5BcnJpdmFsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHtmb3JtYXQoYXJyaXZhbFRpbWUsICdISDptbScpfSwgYFxuICAgICAgOiAnJztcblxuICAgIGxldCBvY2N1cGFuY3lUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBpZiAob2NjdXBhbmN5KSB7XG4gICAgICBpZiAob2NjdXBhbmN5LmZpcnN0Q2xhc3MgJiYgb2NjdXBhbmN5LmZpcnN0Q2xhc3MgIT09ICdVTktOT1dOJykge1xuICAgICAgICBvY2N1cGFuY3lUZXh0ICs9IGAke2kxOG5DbGFzcy5maXJzdFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtcbiAgICAgICAgICAoXG4gICAgICAgICAgICBpMThuT2NjdXBhbmN5W29jY3VwYW5jeS5maXJzdENsYXNzLnRvTG93ZXJDYXNlKCkgYXMgU2JiT2NjdXBhbmN5XSBhcyBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgc3RyaW5nXG4gICAgICAgICAgICA+XG4gICAgICAgICAgKT8uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdXG4gICAgICAgIH0uYDtcbiAgICAgIH1cbiAgICAgIGlmIChvY2N1cGFuY3kuc2Vjb25kQ2xhc3MgJiYgb2NjdXBhbmN5LnNlY29uZENsYXNzICE9PSAnVU5LTk9XTicpIHtcbiAgICAgICAgb2NjdXBhbmN5VGV4dCArPSBgICR7aTE4bkNsYXNzLnNlY29uZFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtcbiAgICAgICAgICAoXG4gICAgICAgICAgICBpMThuT2NjdXBhbmN5W29jY3VwYW5jeS5zZWNvbmRDbGFzcy50b0xvd2VyQ2FzZSgpIGFzIFNiYk9jY3VwYW5jeV0gYXMgUmVjb3JkPFxuICAgICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAgIHN0cmluZ1xuICAgICAgICAgICAgPlxuICAgICAgICAgICk/Llt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XVxuICAgICAgICB9LmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9XG4gICAgICBub3RpY2VzICYmXG4gICAgICBoYW5kbGVOb3RpY2VzKG5vdGljZXMpLmxlbmd0aCAmJlxuICAgICAgaGFuZGxlTm90aWNlcyhub3RpY2VzKVxuICAgICAgICA/Lm1hcCgobm90aWNlLCBpbmRleCkgPT4gaW5kZXggPCA0ICYmIG5vdGljZS50ZXh0Py50ZW1wbGF0ZSlcbiAgICAgICAgLmpvaW4oJywgJykgKyAnLCAnO1xuXG4gICAgY29uc3QgYXR0cmlidXRlc1RleHQgPSBhdHRyaWJ1dGVzXG4gICAgICA/IGAke2kxOG5UcmF2ZWxoaW50c1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX06ICR7YXR0cmlidXRlc31gXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgZHVyYXRpb25UZXh0ID1cbiAgICAgICEhZHVyYXRpb24gJiYgZHVyYXRpb24gPiAwXG4gICAgICAgID8gYCR7aTE4blRyaXBEdXJhdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtcbiAgICAgICAgICAgIGR1cmF0aW9uVG9UaW1lKGR1cmF0aW9uLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KS5sb25nXG4gICAgICAgICAgfSwgYFxuICAgICAgICA6ICcnO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIGRlcGFydHVyZVdhbGtUZXh0LFxuICAgICAgZGVwYXJ0dXJlVGltZVRleHQsXG4gICAgICBnZXREZXBhcnR1cmVRdWF5VGV4dCgpLFxuICAgICAgbWVhbnNPZlRyYW5zcG9ydFRleHQsXG4gICAgICB2ZWhpY2xlU3ViTW9kZVRleHQsXG4gICAgICBkaXJlY3Rpb25UZXh0LFxuICAgICAgY3VzVGV4dCxcbiAgICAgIGJvYXJkaW5nVGV4dCxcbiAgICAgIHByaWNlVGV4dCxcbiAgICAgIGN1c1RleHQgPyAnJyA6IGhpbVRleHQsXG4gICAgICBhcnJpdmFsVGltZVRleHQsXG4gICAgICBhcnJpdmFsV2Fsa1RleHQsXG4gICAgICBkdXJhdGlvblRleHQsXG4gICAgICB0cmFuc2ZlclByb2NlZHVyZXMsXG4gICAgICBvY2N1cGFuY3lUZXh0LFxuICAgICAgYXR0cmlidXRlc1RleHQsXG4gICAgXVxuICAgICAgLm1hcCgoZSkgPT4gZT8udHJpbSgpKVxuICAgICAgLmZpbHRlcigoZSkgPT4gZSAmJiBlLmxlbmd0aCA+IDApXG4gICAgICAuam9pbignICcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgaWYgKHRoaXMubG9hZGluZ1RyaXApIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJTa2VsZXRvbigpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbGVncywgaWQsIG5vdGljZXMsIHN1bW1hcnkgfSA9IHRoaXMudHJpcCB8fCB7fTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHByb2R1Y3QsXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBkZXBhcnR1cmVXYWxrLFxuICAgICAgZGVwYXJ0dXJlLFxuICAgICAgYXJyaXZhbCxcbiAgICAgIGFycml2YWxXYWxrLFxuICAgICAgb2NjdXBhbmN5LFxuICAgICAgZHVyYXRpb24sXG4gICAgfSA9IHN1bW1hcnkgfHwge307XG5cbiAgICBjb25zdCBoaW1DdXMgPSB0aGlzLl9oYW5kbGVIaW1DdXModGhpcy50cmlwKTtcbiAgICBjb25zdCBoYXNIaW1DdXMgPSAhIWhpbUN1cy5jdXMgfHwgISFoaW1DdXMuaGltO1xuXG4gICAgY29uc3Qgbm90aWNlQXR0cmlidXRlcyA9IG5vdGljZXMgJiYgaGFuZGxlTm90aWNlcyhub3RpY2VzKTtcblxuICAgIGNvbnN0IGR1cmF0aW9uT2JqID0gZHVyYXRpb24gPyBkdXJhdGlvblRvVGltZShkdXJhdGlvbiwgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCkgOiBudWxsO1xuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2JiLWNhcmQgY2xhc3M9XCJzYmItY2FyZC1zcGFjaW5nLTR4LXh4c1wiIGlkPSR7aWR9PlxuICAgICAgICA8c2JiLWNhcmQtYnV0dG9uXG4gICAgICAgICAgP2FjdGl2ZT0ke3RoaXMuYWN0aXZlfVxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9JHt0aGlzLmFjY2Vzc2liaWxpdHlFeHBhbmRlZCA/ICd0cnVlJyA6IG5vdGhpbmd9XG4gICAgICAgID5cbiAgICAgICAgICAke3RoaXMuY2FyZEFjdGlvbkxhYmVsID8gdGhpcy5jYXJkQWN0aW9uTGFiZWwgOiB0aGlzLl9nZXRBY2Nlc3NpYmlsaXR5VGV4dCh0aGlzLnRyaXApfVxuICAgICAgICA8L3NiYi1jYXJkLWJ1dHRvbj5cbiAgICAgICAgJHt0aGlzLmxvYWRpbmdQcmljZSA/IGh0bWxgPGRpdiBjbGFzcz1cInNiYi1sb2FkaW5nX19iYWRnZVwiIHNsb3Q9XCJiYWRnZVwiPjwvZGl2PmAgOiBub3RoaW5nfVxuICAgICAgICAke3RoaXMucHJpY2UgJiYgIXRoaXMubG9hZGluZ1ByaWNlXG4gICAgICAgICAgPyBodG1sYDxzYmItY2FyZC1iYWRnZSBjb2xvcj0ke3RoaXMucHJpY2UuaXNEaXNjb3VudCA/ICdjaGFyY29hbCcgOiAnd2hpdGUnfT5cbiAgICAgICAgICAgICAgJHt0aGlzLnByaWNlLmlzRGlzY291bnRcbiAgICAgICAgICAgICAgICA/IGh0bWxgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICU8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgID4ke2kxOG5TdXBlcnNhdmVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+YFxuICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgJHt0aGlzLnByaWNlLnRleHQgPyBodG1sYDxzcGFuPiR7dGhpcy5wcmljZS50ZXh0fTwvc3Bhbj5gIDogbm90aGluZ31cbiAgICAgICAgICAgICAgJHt0aGlzLnByaWNlLnByaWNlID8gaHRtbGA8c3Bhbj4ke3RoaXMucHJpY2UucHJpY2V9PC9zcGFuPmAgOiBub3RoaW5nfVxuICAgICAgICAgICAgPC9zYmItY2FyZC1iYWRnZT5gXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93XCIgcm9sZT1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctaGVhZGVyXCIgcm9sZT1cImdyaWRjZWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgJHtwcm9kdWN0Py5jb3Jwb3JhdGVJZGVudGl0eVBpY3RvZ3JhbSAmJlxuICAgICAgICAgICAgICBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LXRyYW5zcG9ydC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPHNiYi1pY29uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQtaWNvblwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicGljdG86JHtwcm9kdWN0LmNvcnBvcmF0ZUlkZW50aXR5UGljdG9ncmFtfVwiXG4gICAgICAgICAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAke3Byb2R1Y3QgJiZcbiAgICAgICAgICAgICAgICAgIHByb2R1Y3QudmVoaWNsZU1vZGUgJiZcbiAgICAgICAgICAgICAgICAgIGkxOG5NZWFuc09mVHJhbnNwb3J0W3Byb2R1Y3QudmVoaWNsZU1vZGUudG9Mb3dlckNhc2UoKV0gJiZcbiAgICAgICAgICAgICAgICAgIGkxOG5NZWFuc09mVHJhbnNwb3J0W3Byb2R1Y3QudmVoaWNsZU1vZGUudG9Mb3dlckNhc2UoKV1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5gfVxuICAgICAgICAgICAgICAke3Byb2R1Y3QgJiZcbiAgICAgICAgICAgICAgKHByb2R1Y3QuY29ycG9yYXRlSWRlbnRpdHlJY29uXG4gICAgICAgICAgICAgICAgPyByZW5kZXJJY29uUHJvZHVjdChwcm9kdWN0LmNvcnBvcmF0ZUlkZW50aXR5SWNvbiwgcHJvZHVjdC5uYW1lKVxuICAgICAgICAgICAgICAgIDogcHJvZHVjdC52ZWhpY2xlU3ViTW9kZVNob3J0TmFtZSAmJlxuICAgICAgICAgICAgICAgICAgcmVuZGVyU3RyaW5nUHJvZHVjdChwcm9kdWN0LnZlaGljbGVTdWJNb2RlU2hvcnROYW1lLCBwcm9kdWN0Py5saW5lKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICR7ZGlyZWN0aW9uXG4gICAgICAgICAgICAgID8gaHRtbGA8cD4ke2Ake2kxOG5EaXJlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7ZGlyZWN0aW9ufWB9PC9wPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzYmItcGVhcmwtY2hhaW4tdGltZVxuICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgIC5sZWdzPSR7bGVnc31cbiAgICAgICAgICAgIC5kZXBhcnR1cmVUaW1lPSR7ZGVwYXJ0dXJlPy50aW1lfVxuICAgICAgICAgICAgLmFycml2YWxUaW1lPSR7YXJyaXZhbD8udGltZX1cbiAgICAgICAgICAgIC5kZXBhcnR1cmVXYWxrPSR7ZGVwYXJ0dXJlV2Fsa31cbiAgICAgICAgICAgIC5hcnJpdmFsV2Fsaz0ke2Fycml2YWxXYWxrfVxuICAgICAgICAgICAgP2Rpc2FibGUtYW5pbWF0aW9uPSR7dGhpcy5kaXNhYmxlQW5pbWF0aW9ufVxuICAgICAgICAgICAgP2ExMXktZm9vdHBhdGg9JHt0aGlzLmExMXlGb290cGF0aH1cbiAgICAgICAgICAgIC5ub3c9JHt0aGlzLm5vd31cbiAgICAgICAgICA+PC9zYmItcGVhcmwtY2hhaW4tdGltZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LWZvb3RlclwiIHJvbGU9XCJncmlkY2VsbFwiPlxuICAgICAgICAgICAgJHtwcm9kdWN0ICYmIGRlcGFydHVyZT8ucXVheUZvcm1hdHRlZFxuICAgICAgICAgICAgICA/IGh0bWxgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPSR7ZGVwYXJ0dXJlPy5xdWF5Q2hhbmdlZCA/IGBzYmItdGltZXRhYmxlX19yb3ctcXVheS0tY2hhbmdlZGAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPlxuICAgICAgICAgICAgICAgICAgICAke2Ake2kxOG5EZXBhcnR1cmVbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7XG4gICAgICAgICAgICAgICAgICAgICAgZGVwYXJ0dXJlPy5xdWF5Q2hhbmdlZCA/IGkxOG5OZXdbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gOiAnJ1xuICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAke3RoaXMuX3JlbmRlclF1YXlUeXBlKCl9ICR7ZGVwYXJ0dXJlPy5xdWF5Rm9ybWF0dGVkfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7KG9jY3VwYW5jeT8uZmlyc3RDbGFzcyAmJiBvY2N1cGFuY3k/LmZpcnN0Q2xhc3MgIT09ICdVTktOT1dOJykgfHxcbiAgICAgICAgICAgIChvY2N1cGFuY3k/LnNlY29uZENsYXNzICYmIG9jY3VwYW5jeS5zZWNvbmRDbGFzcyAhPT0gJ1VOS05PV04nKVxuICAgICAgICAgICAgICA/IGh0bWxgPHNiYi10aW1ldGFibGUtb2NjdXBhbmN5XG4gICAgICAgICAgICAgICAgICAuZmlyc3RDbGFzc09jY3VwYW5jeT0ke29jY3VwYW5jeT8uZmlyc3RDbGFzcz8udG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgIC5zZWNvbmRDbGFzc09jY3VwYW5jeT0ke29jY3VwYW5jeT8uc2Vjb25kQ2xhc3M/LnRvTG93ZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgPjwvc2JiLXRpbWV0YWJsZS1vY2N1cGFuY3k+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAkeyhub3RpY2VBdHRyaWJ1dGVzICYmIG5vdGljZUF0dHJpYnV0ZXMubGVuZ3RoKSB8fCB0aGlzLmJvYXJkaW5nXG4gICAgICAgICAgICAgID8gaHRtbGA8dWwgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctaGludHNcIiByb2xlPVwibGlzdFwiPlxuICAgICAgICAgICAgICAgICAgJHtub3RpY2VBdHRyaWJ1dGVzPy5tYXAoKG5vdGljZSwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgICAgIGluZGV4IDwgNFxuICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRyYXZlbC1oaW50c19faXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0keydzYS0nICsgbm90aWNlLm5hbWU/LnRvTG93ZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3NiYi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke25vdGljZS50ZXh0Py50ZW1wbGF0ZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPmBcbiAgICAgICAgICAgICAgICAgICAgICA6IG5vdGhpbmcsXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgJHt0aGlzLmJvYXJkaW5nXG4gICAgICAgICAgICAgICAgICAgID8gaHRtbGA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItdHJhdmVsLWhpbnRzX19pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0ke3RoaXMuYm9hcmRpbmc/Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9JHt0aGlzLmJvYXJkaW5nPy50ZXh0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NiYi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+YFxuICAgICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgPC91bD5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7ZHVyYXRpb24gJiYgZHVyYXRpb24gPiAwXG4gICAgICAgICAgICAgID8gaHRtbGA8dGltZT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPlxuICAgICAgICAgICAgICAgICAgICAke2Ake2kxOG5UcmlwRHVyYXRpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7ZHVyYXRpb25PYmohLmxvbmd9YH1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiR7ZHVyYXRpb25PYmohLnNob3J0fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RpbWU+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAke2hhc0hpbUN1cyAmJiAoaGltQ3VzLmN1cyB8fCBoaW1DdXMuaGltKVxuICAgICAgICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctd2FybmluZ1wiPlxuICAgICAgICAgICAgICAgICAgPHNiYi1pY29uIG5hbWU9JHsoaGltQ3VzLmN1cyB8fCBoaW1DdXMuaGltKSEubmFtZX0+PC9zYmItaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7KGhpbUN1cy5jdXMgfHwgaGltQ3VzLmhpbSkhLnRleHR9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NiYi1jYXJkPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi10aW1ldGFibGUtcm93JzogU2JiVGltZXRhYmxlUm93RWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQ3lFQSxJQUFhLHFCQUFxQixNQUFjLFNBQWdDO0FBQzlFLFFBQU8sSUFBSTtxQkFDUSxLQUFJOzJDQUNrQixLQUFJOzs7QUFJL0MsSUFBYSx1QkFBdUIsYUFBcUIsU0FBd0M7Q0FDL0YsTUFBTSxRQUFRO0VBQUM7RUFBSztFQUFLO0VBQUksQ0FBQyxTQUFTLFlBQVksR0FBRyxNQUFNO0FBQzVELFFBQU8sSUFBSTtNQUNQLFNBQVMsT0FBTyxjQUFjLFFBQVEsT0FBTyxZQUFBOzs7QUFJbkQsSUFBTSxvQkFBb0IsU0FBZ0Q7QUFDeEUs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