@sbb-esta/lyne-elements-experimental 2.10.1 → 3.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/custom-elements.json +4294 -8
  2. package/development/journey-summary/journey-summary.component.d.ts +5 -3
  3. package/development/journey-summary/journey-summary.component.d.ts.map +1 -1
  4. package/development/journey-summary/journey-summary.component.js +5 -2
  5. package/development/pearl-chain/pearl-chain.component.d.ts +5 -3
  6. package/development/pearl-chain/pearl-chain.component.d.ts.map +1 -1
  7. package/development/pearl-chain/pearl-chain.component.js +5 -2
  8. package/development/pearl-chain-time/pearl-chain-time.component.d.ts +5 -3
  9. package/development/pearl-chain-time/pearl-chain-time.component.d.ts.map +1 -1
  10. package/development/pearl-chain-time/pearl-chain-time.component.js +5 -2
  11. package/development/seat-reservation/common/mapper/icon-mapper.d.ts +112 -0
  12. package/development/seat-reservation/common/mapper/icon-mapper.d.ts.map +1 -0
  13. package/development/seat-reservation/common/mapper/icon-mapper.js +72 -0
  14. package/development/seat-reservation/common/mapper/mapper.d.ts +29 -0
  15. package/development/seat-reservation/common/mapper/mapper.d.ts.map +1 -0
  16. package/development/seat-reservation/common/mapper/mapper.js +117 -0
  17. package/development/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts +225 -0
  18. package/development/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts.map +1 -0
  19. package/development/seat-reservation/common/mapper/seat-reservation-sample-data.js +6152 -0
  20. package/development/seat-reservation/common/mapper.d.ts +3 -0
  21. package/development/seat-reservation/common/mapper.d.ts.map +1 -0
  22. package/development/seat-reservation/common/mapper.js +10 -0
  23. package/development/seat-reservation/common/svgs.d.ts +25 -0
  24. package/development/seat-reservation/common/svgs.d.ts.map +1 -0
  25. package/development/seat-reservation/common/svgs.js +48 -0
  26. package/development/seat-reservation/common/translations/i18n.d.ts +19 -0
  27. package/development/seat-reservation/common/translations/i18n.d.ts.map +1 -0
  28. package/development/seat-reservation/common/translations/i18n.js +462 -0
  29. package/development/seat-reservation/common/translations.d.ts +2 -0
  30. package/development/seat-reservation/common/translations.d.ts.map +1 -0
  31. package/development/seat-reservation/common/translations.js +5 -0
  32. package/development/seat-reservation/common.d.ts +5 -0
  33. package/development/seat-reservation/common.d.ts.map +1 -0
  34. package/development/seat-reservation/common.js +18 -0
  35. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +156 -0
  36. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -0
  37. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +706 -0
  38. package/development/seat-reservation/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts +29 -0
  39. package/development/seat-reservation/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts.map +1 -0
  40. package/development/seat-reservation/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +196 -0
  41. package/development/seat-reservation/seat-reservation/seat-reservation-scoped.d.ts +2 -0
  42. package/development/seat-reservation/seat-reservation/seat-reservation-scoped.d.ts.map +1 -0
  43. package/development/seat-reservation/seat-reservation/seat-reservation-scoped.js +5 -0
  44. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts +62 -0
  45. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -0
  46. package/development/seat-reservation/seat-reservation/seat-reservation.component.js +615 -0
  47. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts +18 -0
  48. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts.map +1 -0
  49. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +108 -0
  50. package/development/seat-reservation/seat-reservation-area.d.ts +2 -0
  51. package/development/seat-reservation/seat-reservation-area.d.ts.map +1 -0
  52. package/development/seat-reservation/seat-reservation-area.js +5 -0
  53. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts +9 -0
  54. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts.map +1 -0
  55. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +326 -0
  56. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts +29 -0
  57. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts.map +1 -0
  58. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +224 -0
  59. package/development/seat-reservation/seat-reservation-graphic.d.ts +2 -0
  60. package/development/seat-reservation/seat-reservation-graphic.d.ts.map +1 -0
  61. package/development/seat-reservation/seat-reservation-graphic.js +5 -0
  62. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts +65 -0
  63. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -0
  64. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +576 -0
  65. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.d.ts +2 -0
  66. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.d.ts.map +1 -0
  67. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.js +5 -0
  68. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts +21 -0
  69. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -0
  70. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +123 -0
  71. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.d.ts +2 -0
  72. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.d.ts.map +1 -0
  73. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.js +5 -0
  74. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +53 -0
  75. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -0
  76. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +446 -0
  77. package/development/seat-reservation/seat-reservation-place-control.d.ts +2 -0
  78. package/development/seat-reservation/seat-reservation-place-control.d.ts.map +1 -0
  79. package/development/seat-reservation/seat-reservation-place-control.js +5 -0
  80. package/development/seat-reservation/seat-reservation.d.ts +73 -0
  81. package/development/seat-reservation/seat-reservation.d.ts.map +1 -0
  82. package/development/seat-reservation/seat-reservation.js +7 -0
  83. package/development/seat-reservation.d.ts +5 -0
  84. package/development/seat-reservation.d.ts.map +1 -0
  85. package/development/seat-reservation.js +7 -0
  86. package/development/timetable-row/timetable-row.component.d.ts +5 -3
  87. package/development/timetable-row/timetable-row.component.d.ts.map +1 -1
  88. package/development/timetable-row/timetable-row.component.js +5 -2
  89. package/index.d.ts +14 -0
  90. package/index.js +14 -0
  91. package/journey-summary/journey-summary.component.d.ts +5 -3
  92. package/journey-summary/journey-summary.component.d.ts.map +1 -1
  93. package/journey-summary/journey-summary.component.js +4 -1
  94. package/package.json +7 -2
  95. package/pearl-chain/pearl-chain.component.d.ts +5 -3
  96. package/pearl-chain/pearl-chain.component.d.ts.map +1 -1
  97. package/pearl-chain/pearl-chain.component.js +4 -1
  98. package/pearl-chain-time/pearl-chain-time.component.d.ts +5 -3
  99. package/pearl-chain-time/pearl-chain-time.component.d.ts.map +1 -1
  100. package/pearl-chain-time/pearl-chain-time.component.js +4 -1
  101. package/seat-reservation/common/mapper/icon-mapper.d.ts +112 -0
  102. package/seat-reservation/common/mapper/icon-mapper.d.ts.map +1 -0
  103. package/seat-reservation/common/mapper/icon-mapper.js +71 -0
  104. package/seat-reservation/common/mapper/mapper.d.ts +29 -0
  105. package/seat-reservation/common/mapper/mapper.d.ts.map +1 -0
  106. package/seat-reservation/common/mapper/mapper.js +87 -0
  107. package/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts +225 -0
  108. package/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts.map +1 -0
  109. package/seat-reservation/common/mapper/seat-reservation-sample-data.js +6149 -0
  110. package/seat-reservation/common/mapper.d.ts +3 -0
  111. package/seat-reservation/common/mapper.d.ts.map +1 -0
  112. package/seat-reservation/common/mapper.js +9 -0
  113. package/seat-reservation/common/svgs.d.ts +25 -0
  114. package/seat-reservation/common/svgs.d.ts.map +1 -0
  115. package/seat-reservation/common/svgs.js +250 -0
  116. package/seat-reservation/common/translations/i18n.d.ts +19 -0
  117. package/seat-reservation/common/translations/i18n.d.ts.map +1 -0
  118. package/seat-reservation/common/translations/i18n.js +460 -0
  119. package/seat-reservation/common/translations.d.ts +2 -0
  120. package/seat-reservation/common/translations.d.ts.map +1 -0
  121. package/seat-reservation/common/translations.js +4 -0
  122. package/seat-reservation/common.d.ts +5 -0
  123. package/seat-reservation/common.d.ts.map +1 -0
  124. package/seat-reservation/common.js +17 -0
  125. package/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +156 -0
  126. package/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -0
  127. package/seat-reservation/seat-reservation/seat-reservation-base-element.js +435 -0
  128. package/seat-reservation/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts +29 -0
  129. package/seat-reservation/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts.map +1 -0
  130. package/seat-reservation/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +107 -0
  131. package/seat-reservation/seat-reservation/seat-reservation-scoped.d.ts +2 -0
  132. package/seat-reservation/seat-reservation/seat-reservation-scoped.d.ts.map +1 -0
  133. package/seat-reservation/seat-reservation/seat-reservation-scoped.js +4 -0
  134. package/seat-reservation/seat-reservation/seat-reservation.component.d.ts +62 -0
  135. package/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -0
  136. package/seat-reservation/seat-reservation/seat-reservation.component.js +404 -0
  137. package/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts +18 -0
  138. package/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts.map +1 -0
  139. package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +49 -0
  140. package/seat-reservation/seat-reservation-area.d.ts +2 -0
  141. package/seat-reservation/seat-reservation-area.d.ts.map +1 -0
  142. package/seat-reservation/seat-reservation-area.js +4 -0
  143. package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts +9 -0
  144. package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts.map +1 -0
  145. package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +317 -0
  146. package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts +29 -0
  147. package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts.map +1 -0
  148. package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +113 -0
  149. package/seat-reservation/seat-reservation-graphic.d.ts +2 -0
  150. package/seat-reservation/seat-reservation-graphic.d.ts.map +1 -0
  151. package/seat-reservation/seat-reservation-graphic.js +4 -0
  152. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts +65 -0
  153. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -0
  154. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +248 -0
  155. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.d.ts +2 -0
  156. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.d.ts.map +1 -0
  157. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.js +4 -0
  158. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts +21 -0
  159. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -0
  160. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +80 -0
  161. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.d.ts +2 -0
  162. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.d.ts.map +1 -0
  163. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.js +4 -0
  164. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +53 -0
  165. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -0
  166. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +190 -0
  167. package/seat-reservation/seat-reservation-place-control.d.ts +2 -0
  168. package/seat-reservation/seat-reservation-place-control.d.ts.map +1 -0
  169. package/seat-reservation/seat-reservation-place-control.js +4 -0
  170. package/seat-reservation/seat-reservation.d.ts +73 -0
  171. package/seat-reservation/seat-reservation.d.ts.map +1 -0
  172. package/seat-reservation/seat-reservation.js +6 -0
  173. package/seat-reservation.d.ts +5 -0
  174. package/seat-reservation.d.ts.map +1 -0
  175. package/seat-reservation.js +6 -0
  176. package/timetable-row/timetable-row.component.d.ts +5 -3
  177. package/timetable-row/timetable-row.component.d.ts.map +1 -1
  178. package/timetable-row/timetable-row.component.js +4 -1
@@ -0,0 +1,615 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
+ import { __runInitializers, __esDecorate } from "tslib";
9
+ import { SbbLanguageController } from "@sbb-esta/lyne-elements/core/controllers.js";
10
+ import { forceType } from "@sbb-esta/lyne-elements/core/decorators.js";
11
+ import { css, html, nothing } from "lit";
12
+ import { customElement, property } from "lit/decorators.js";
13
+ import { classMap } from "lit/directives/class-map.js";
14
+ import { styleMap } from "lit/directives/style-map.js";
15
+ import { getI18nSeatReservation } from "../common.js";
16
+ import { SeatReservationBaseElement } from "./seat-reservation-base-element.js";
17
+ import "@sbb-esta/lyne-elements/screen-reader-only.js";
18
+ import "../seat-reservation-area.js";
19
+ import "../seat-reservation-graphic.js";
20
+ import "../seat-reservation-place-control.js";
21
+ import "../seat-reservation-navigation/seat-reservation-navigation-coach.js";
22
+ import "./seat-reservation-scoped/seat-reservation-scoped.component.js";
23
+ const style = css`*,
24
+ ::before,
25
+ ::after {
26
+ box-sizing: border-box;
27
+ }
28
+
29
+ :host {
30
+ --sbb-seat-reservation-grid-size: 16px;
31
+ --sbb-seat-reservation-vertical-offset: 0;
32
+ display: block;
33
+ }
34
+ :host ::part(coach-floor) {
35
+ fill: var(--sbb-color-white);
36
+ }
37
+ @media (forced-colors: active) {
38
+ :host ::part(coach-floor) {
39
+ fill: transparent;
40
+ }
41
+ }
42
+
43
+ .sbb-sr__wrapper--vertical {
44
+ width: fit-content;
45
+ position: relative;
46
+ inset-inline-start: var(--sbb-seat-reservation-vertical-offset);
47
+ rotate: 90deg;
48
+ transform-origin: top left;
49
+ }
50
+
51
+ .sbb-sr__wrapper--vertical .sbb-sr__parent {
52
+ overflow-y: hidden;
53
+ }
54
+
55
+ .sbb-sr__wrapper--vertical .sbb-sr__list-coaches {
56
+ width: 100vw;
57
+ }
58
+
59
+ .sbb-sr-navigation--vertical {
60
+ inset-inline-start: var(--sbb-seat-reservation-vertical-offset);
61
+ margin-inline-start: 1.25rem;
62
+ position: absolute;
63
+ }
64
+ .sbb-sr-navigation--vertical .sbb-sr-navigation__list-coaches {
65
+ flex-direction: column;
66
+ }
67
+
68
+ .sbb-sr-navigation__list-coaches {
69
+ list-style: none;
70
+ margin: 0;
71
+ padding: 0;
72
+ font-size: inherit;
73
+ display: flex;
74
+ justify-content: center;
75
+ flex-wrap: nowrap;
76
+ gap: var(--sbb-spacing-fixed-1x);
77
+ min-height: 3.75rem;
78
+ }
79
+
80
+ .sbb-sr__parent {
81
+ overflow-x: scroll;
82
+ padding: 3rem 0;
83
+ }
84
+
85
+ .sbb-sr__list-coaches {
86
+ display: flex;
87
+ gap: 0.25rem;
88
+ padding: 0;
89
+ margin: 0;
90
+ list-style: none;
91
+ }
92
+
93
+ .sbb-sr__item-coach {
94
+ padding: 0;
95
+ margin: 0;
96
+ position: relative;
97
+ }
98
+
99
+ .sbb-sr-coach-wrapper__table {
100
+ outline: 0;
101
+ }`;
102
+ let SbbSeatReservationElement = (() => {
103
+ var _seatReservation_accessor_storage, _hasNavigation_accessor_storage, _alignVertical_accessor_storage, _maxReservations_accessor_storage, _preventPlaceClick_accessor_storage, _a;
104
+ let _classDecorators = [customElement("sbb-seat-reservation")];
105
+ let _classDescriptor;
106
+ let _classExtraInitializers = [];
107
+ let _classThis;
108
+ let _classSuper = SeatReservationBaseElement;
109
+ let _seatReservation_decorators;
110
+ let _seatReservation_initializers = [];
111
+ let _seatReservation_extraInitializers = [];
112
+ let _hasNavigation_decorators;
113
+ let _hasNavigation_initializers = [];
114
+ let _hasNavigation_extraInitializers = [];
115
+ let _alignVertical_decorators;
116
+ let _alignVertical_initializers = [];
117
+ let _alignVertical_extraInitializers = [];
118
+ let _maxReservations_decorators;
119
+ let _maxReservations_initializers = [];
120
+ let _maxReservations_extraInitializers = [];
121
+ let _preventPlaceClick_decorators;
122
+ let _preventPlaceClick_initializers = [];
123
+ let _preventPlaceClick_extraInitializers = [];
124
+ _a = class extends _classSuper {
125
+ constructor() {
126
+ super(...arguments);
127
+ __privateAdd(this, _seatReservation_accessor_storage);
128
+ __privateAdd(this, _hasNavigation_accessor_storage);
129
+ __privateAdd(this, _alignVertical_accessor_storage);
130
+ __privateAdd(this, _maxReservations_accessor_storage);
131
+ __privateAdd(this, _preventPlaceClick_accessor_storage);
132
+ __privateSet(this, _seatReservation_accessor_storage, __runInitializers(this, _seatReservation_initializers, null));
133
+ __privateSet(this, _hasNavigation_accessor_storage, (__runInitializers(this, _seatReservation_extraInitializers), __runInitializers(this, _hasNavigation_initializers, true)));
134
+ __privateSet(this, _alignVertical_accessor_storage, (__runInitializers(this, _hasNavigation_extraInitializers), __runInitializers(this, _alignVertical_initializers, false)));
135
+ __privateSet(this, _maxReservations_accessor_storage, (__runInitializers(this, _alignVertical_extraInitializers), __runInitializers(this, _maxReservations_initializers, null)));
136
+ __privateSet(this, _preventPlaceClick_accessor_storage, (__runInitializers(this, _maxReservations_extraInitializers), __runInitializers(this, _preventPlaceClick_initializers, false)));
137
+ this._language = (__runInitializers(this, _preventPlaceClick_extraInitializers), new SbbLanguageController(this));
138
+ this._notAreaElements = [
139
+ "DRIVER_AREA_FULL",
140
+ "COACH_PASSAGE",
141
+ "COACH_WALL_NO_PASSAGE",
142
+ "COMPARTMENT_PASSAGE",
143
+ "COMPARTMENT_PASSAGE_HIGH",
144
+ "COMPARTMENT_PASSAGE_MIDDLE",
145
+ "COMPARTMENT_PASSAGE_LOW"
146
+ ];
147
+ this._notFixedRotatableAreaIcons = ["ENTRY_EXIT"];
148
+ }
149
+ /** The seat reservation object which contains all coaches and places */
150
+ get seatReservation() {
151
+ return __privateGet(this, _seatReservation_accessor_storage);
152
+ }
153
+ set seatReservation(value) {
154
+ __privateSet(this, _seatReservation_accessor_storage, value);
155
+ }
156
+ /** The seat resvervation navigation can be toggled by this property */
157
+ get hasNavigation() {
158
+ return __privateGet(this, _hasNavigation_accessor_storage);
159
+ }
160
+ set hasNavigation(value) {
161
+ __privateSet(this, _hasNavigation_accessor_storage, value);
162
+ }
163
+ /** controls the visual represention of seat reservation in a horizonal or vertical alignment */
164
+ get alignVertical() {
165
+ return __privateGet(this, _alignVertical_accessor_storage);
166
+ }
167
+ set alignVertical(value) {
168
+ __privateSet(this, _alignVertical_accessor_storage, value);
169
+ }
170
+ /** Maximal number of possible clickable seats */
171
+ get maxReservations() {
172
+ return __privateGet(this, _maxReservations_accessor_storage);
173
+ }
174
+ set maxReservations(value) {
175
+ __privateSet(this, _maxReservations_accessor_storage, value);
176
+ }
177
+ /** Any click functionality is prevented */
178
+ get preventPlaceClick() {
179
+ return __privateGet(this, _preventPlaceClick_accessor_storage);
180
+ }
181
+ set preventPlaceClick(value) {
182
+ __privateSet(this, _preventPlaceClick_accessor_storage, value);
183
+ }
184
+ willUpdate(changedProperties) {
185
+ var _a2, _b;
186
+ super.willUpdate(changedProperties);
187
+ if (changedProperties.has("hasNavigation")) {
188
+ if (this.hasNavigation) {
189
+ (_a2 = this.shadowRoot) == null ? void 0 : _a2.querySelectorAll("table").forEach((table) => table.removeAttribute("tabindex"));
190
+ } else {
191
+ (_b = this.shadowRoot) == null ? void 0 : _b.querySelectorAll("table").forEach((table) => table.setAttribute("tabindex", "0"));
192
+ }
193
+ }
194
+ }
195
+ firstUpdated(changedProperties) {
196
+ super.firstUpdated(changedProperties);
197
+ this._componentSetup();
198
+ }
199
+ render() {
200
+ this._initVehicleSeatReservationConstruction();
201
+ return this._coachesHtmlTemplate || null;
202
+ }
203
+ _componentSetup() {
204
+ this.initNavigationSelectionByScrollEvent();
205
+ }
206
+ _initVehicleSeatReservationConstruction() {
207
+ var _a2;
208
+ const coachItems = JSON.parse(JSON.stringify((_a2 = this.seatReservation) == null ? void 0 : _a2.coachItems));
209
+ const classAlignVertical = this.alignVertical ? "sbb-sr__wrapper--vertical" : "";
210
+ this._coachesHtmlTemplate = html`
211
+ <div>
212
+ <sbb-screen-reader-only>
213
+ <input
214
+ id="first-tab-element"
215
+ role="contentinfo"
216
+ type="text"
217
+ aria-label="${getI18nSeatReservation("SEAT_RESERVATION_BEGIN", this._language.current)}"
218
+ readonly
219
+ />
220
+ </sbb-screen-reader-only>
221
+
222
+ <div @keydown=${(evt) => this.handleKeyboardEvent(evt)}>
223
+ ${this._renderNavigation()}
224
+ <div class="sbb-sr__wrapper ${classAlignVertical}">
225
+ <div id="sbb-sr__parent-area" class="sbb-sr__parent" tabindex="-1">
226
+ <ul class="sbb-sr__list-coaches" role="presentation">
227
+ ${this._renderCoaches(coachItems)}
228
+ </ul>
229
+ </div>
230
+ </div>
231
+ </div>
232
+
233
+ <sbb-screen-reader-only>
234
+ <input
235
+ id="last-tab-element"
236
+ role="contentinfo"
237
+ type="text"
238
+ aria-label="${getI18nSeatReservation("SEAT_RESERVATION_END", this._language.current)}"
239
+ readonly
240
+ />
241
+ </sbb-screen-reader-only>
242
+ </div>
243
+ `;
244
+ }
245
+ _renderNavigation() {
246
+ var _a2;
247
+ if (!this.hasNavigation) {
248
+ return null;
249
+ }
250
+ return html`
251
+ <nav class="${classMap({ "sbb-sr-navigation--vertical": this.alignVertical })}">
252
+ <ul
253
+ class="sbb-sr-navigation__list-coaches"
254
+ aria-label="${getI18nSeatReservation("SEAT_RESERVATION_NAVIGATION", this._language.current)}"
255
+ >
256
+ ${(_a2 = this.seatReservation) == null ? void 0 : _a2.coachItems.map((coachItem, index) => {
257
+ var _a3, _b;
258
+ return html`<li>
259
+ <sbb-seat-reservation-navigation-coach
260
+ @selectCoach=${(event) => this._onSelectNavCoach(event)}
261
+ @focusCoach=${() => this._onFocusNavCoach()}
262
+ index="${index}"
263
+ coach-id="${coachItem.id}"
264
+ .selected=${this.selectedCoachIndex === index}
265
+ .focused=${this.focusedCoachIndex === index}
266
+ .propertyIds="${coachItem.propertyIds}"
267
+ .travelClass="${coachItem.travelClass}"
268
+ ?driver-area="${!((_a3 = coachItem.places) == null ? void 0 : _a3.length)}"
269
+ ?first="${index === 0}"
270
+ ?last="${index === ((_b = this.seatReservation) == null ? void 0 : _b.coachItems.length) - 1}"
271
+ ?vertical="${this.alignVertical}"
272
+ >
273
+ </sbb-seat-reservation-navigation-coach>
274
+ </li>`;
275
+ })}
276
+ </ul>
277
+ </nav>
278
+ `;
279
+ }
280
+ /**
281
+ *
282
+ * @param coaches
283
+ * @returns
284
+ */
285
+ _renderCoaches(coaches) {
286
+ if (!coaches) {
287
+ return null;
288
+ }
289
+ return coaches.map((coachItem, index) => {
290
+ return html`
291
+ <li class="sbb-sr__item-coach">${this._renderCoachElement(coachItem, index)}</li>
292
+ `;
293
+ });
294
+ }
295
+ _renderCoachElement(coachItem, index) {
296
+ const calculatedCoachDimension = this.getCalculatedDimension(coachItem.dimension);
297
+ const descriptionTableCoachWithServices = this._getDescriptionTableCoach(coachItem);
298
+ return html` <sbb-seat-reservation-scoped
299
+ scoped-classes="coach-wrapper"
300
+ height="${calculatedCoachDimension.h}px"
301
+ width="${calculatedCoachDimension.w}px"
302
+ >
303
+ ${this._getRenderedCoachBorders(coachItem, index)}
304
+ ${this._getRenderedGraphicalElements(coachItem.graphicElements || [], coachItem.dimension)}
305
+ ${this._getRenderedServiceElements(coachItem.serviceElements)}
306
+ <table
307
+ @focus=${() => this.onFocusTableCoachAndPreselectPlace(index)}
308
+ id="sbb-sr-coach-${index}"
309
+ class="sbb-sr-coach-wrapper__table"
310
+ aria-describedby="sbb-sr-coach-caption-${index}"
311
+ >
312
+ <caption id="sbb-sr-coach-caption-${index}" tabindex="-1">
313
+ <sbb-screen-reader-only>${descriptionTableCoachWithServices}</sbb-screen-reader-only>
314
+ </caption>
315
+ ${this._getRenderedRowPlaces(coachItem, index)}
316
+ </table>
317
+ </sbb-seat-reservation-scoped>`;
318
+ }
319
+ _getRenderedCoachBorders(coachItem, coachIndex) {
320
+ const allElements = coachItem.graphicElements;
321
+ const COACH_PASSAGE_WIDTH = 1;
322
+ const driverArea = allElements == null ? void 0 : allElements.find((element) => element.icon === "DRIVER_AREA_FULL");
323
+ const borderWidth = driverArea ? coachItem.dimension.w - driverArea.dimension.w - COACH_PASSAGE_WIDTH : coachItem.dimension.w - COACH_PASSAGE_WIDTH * 2;
324
+ const borderOffsetX = coachIndex === 0 && driverArea ? (driverArea == null ? void 0 : driverArea.dimension.w) * this.baseGridSize : this.baseGridSize;
325
+ return html`
326
+ <sbb-seat-reservation-scoped
327
+ scoped-classes="coach-border"
328
+ inset-block-start="${this.coachBorderPadding * -1}px"
329
+ inset-inline-start="${borderOffsetX}px"
330
+ >
331
+ <sbb-seat-reservation-graphic
332
+ name="COACH_BORDER_MIDDLE"
333
+ width=${borderWidth * this.baseGridSize}
334
+ height=${(coachItem.dimension.h + this.coachBorderOffset * 2) * this.baseGridSize}
335
+ ?stretch=${true}
336
+ role="presentation"
337
+ ></sbb-seat-reservation-graphic>
338
+ </sbb-seat-reservation-scoped>
339
+ `;
340
+ }
341
+ _getRenderedRowPlaces(coach, coachIndex) {
342
+ if (!coach.places) {
343
+ return null;
344
+ }
345
+ const tableRowPlaces = {};
346
+ for (const place of coach.places) {
347
+ if (!tableRowPlaces[place.position.y]) {
348
+ tableRowPlaces[place.position.y] = [place];
349
+ } else {
350
+ tableRowPlaces[place.position.y].push(place);
351
+ }
352
+ }
353
+ return Object.values(tableRowPlaces).map((rowPlaces, index) => {
354
+ return html`
355
+ <tr id="row-${coachIndex}-${rowPlaces[0].position.y}" data-row-index=${index}>
356
+ ${this._getRenderedColumnPlaces(rowPlaces, coachIndex)}
357
+ </tr>
358
+ `;
359
+ }).flatMap((rowTemplate) => rowTemplate);
360
+ }
361
+ _getRenderedColumnPlaces(places, coachIndex) {
362
+ places.sort((placeA, placeB) => Number(placeA.position.x) - Number(placeB.position.x));
363
+ return places == null ? void 0 : places.map((place, index) => {
364
+ const calculatedInternalDimension = this.getCalculatedDimension(place.dimension);
365
+ const calculatedInternalPosition = this.getCalculatedPosition(place.position);
366
+ const textRotation = this.alignVertical ? -90 : 0;
367
+ return html`
368
+ <sbb-seat-reservation-scoped
369
+ scoped-classes="graphical-element"
370
+ inset-block-start="${calculatedInternalPosition.y}px"
371
+ inset-inline-start="${calculatedInternalPosition.x}px"
372
+ width="${calculatedInternalDimension.w}px"
373
+ height="${calculatedInternalDimension.h}px"
374
+ z-index="${place.position.z}"
375
+ cell-id="cell-${coachIndex}-${place.position.y}-${index}"
376
+ >
377
+ <sbb-seat-reservation-place-control
378
+ @selectPlace=${(selectPlaceEvent) => this._onSelectPlace(selectPlaceEvent)}
379
+ exportparts="sbb-sr-place-part"
380
+ id="seat-reservation__place-button-${coachIndex}-${place.number}"
381
+ class="seat-reservation-place-control"
382
+ data-cell-id="${coachIndex}-${place.position.y}-${index}"
383
+ text=${place.number}
384
+ type=${place.type}
385
+ state=${place.state}
386
+ width=${place.dimension.w * this.baseGridSize}
387
+ height=${place.dimension.h * this.baseGridSize}
388
+ rotation=${place.rotation ?? nothing}
389
+ text-rotation=${textRotation}
390
+ coach-index=${coachIndex}
391
+ .propertyIds=${place.propertyIds}
392
+ .preventClick=${this.preventPlaceClick}
393
+ ></sbb-seat-reservation-place-control>
394
+ </sbb-seat-reservation-scoped>
395
+ `;
396
+ });
397
+ }
398
+ _getRenderedGraphicalElements(graphicalElements, coachDimension) {
399
+ if (!graphicalElements) {
400
+ return null;
401
+ }
402
+ return graphicalElements == null ? void 0 : graphicalElements.map((graphicalElement) => {
403
+ const icon = graphicalElement.icon ?? "";
404
+ const elementRotation = graphicalElement.rotation || 0;
405
+ const isNotFixedRotationGraphicalElement = this._notFixedRotatableAreaIcons.indexOf(graphicalElement.icon) === -1;
406
+ const elementFixedRotation = this.alignVertical && isNotFixedRotationGraphicalElement ? elementRotation - 90 : elementRotation;
407
+ if (this._notAreaElements.findIndex((notAreaElement) => notAreaElement === icon) > -1) {
408
+ return this._getRenderElementWithoutArea(graphicalElement, elementRotation, coachDimension);
409
+ }
410
+ return this._getRenderElementWithArea(graphicalElement, elementFixedRotation, coachDimension);
411
+ });
412
+ }
413
+ _getRenderElementWithArea(graphicalElement, rotation, coachDimension) {
414
+ var _a2;
415
+ const isNotTableGraphicTempFix = ((_a2 = graphicalElement.icon) == null ? void 0 : _a2.indexOf("TABLE")) === -1;
416
+ const areaProperty = graphicalElement.icon && isNotTableGraphicTempFix ? graphicalElement.icon : null;
417
+ const stretchHeight = areaProperty !== "ENTRY_EXIT";
418
+ const ariaLabelForArea = graphicalElement.icon ? getI18nSeatReservation(graphicalElement.icon, this._language.current) : nothing;
419
+ const calculatedDimension = this.getCalculatedDimension(graphicalElement.dimension, coachDimension, true, stretchHeight);
420
+ const calculatedPosition = this.getCalculatedPosition(graphicalElement.position, graphicalElement.dimension, coachDimension, true);
421
+ let elementMounting = "free";
422
+ if (graphicalElement.position.y === this.coachBorderOffset * -1) {
423
+ elementMounting = "upper-border";
424
+ } else if (graphicalElement.position.y + graphicalElement.dimension.h === coachDimension.h + this.coachBorderOffset) {
425
+ elementMounting = "lower-border";
426
+ }
427
+ return html`
428
+ <sbb-seat-reservation-scoped
429
+ scoped-classes="graphical-element"
430
+ inset-block-start="${calculatedPosition.y}px"
431
+ inset-inline-start="${calculatedPosition.x}px"
432
+ width="${calculatedDimension.w}px"
433
+ height="${calculatedDimension.h}px"
434
+ z-index="${graphicalElement.position.z}"
435
+ >
436
+ <sbb-seat-reservation-area
437
+ style=${styleMap({
438
+ "--sbb-reservation-area-width": graphicalElement.dimension.w * this.baseGridSize,
439
+ "--sbb-reservation-area-height": graphicalElement.dimension.h * this.baseGridSize
440
+ })}
441
+ mounting=${elementMounting}
442
+ background="dark"
443
+ aria-hidden="true"
444
+ title=${ariaLabelForArea}
445
+ >
446
+ ${areaProperty ? html`
447
+ <sbb-seat-reservation-graphic
448
+ name=${areaProperty}
449
+ rotation=${rotation}
450
+ width=${this.baseGridSize}
451
+ height=${this.baseGridSize}
452
+ role="img"
453
+ aria-hidden="true"
454
+ ></sbb-seat-reservation-graphic>
455
+ ` : nothing}
456
+ </sbb-seat-reservation-area>
457
+ </sbb-seat-reservation-scoped>
458
+ `;
459
+ }
460
+ _getRenderElementWithoutArea(graphicalElement, rotation, coachDimension) {
461
+ var _a2;
462
+ const calculatedDimension = this.getCalculatedDimension(graphicalElement.dimension, coachDimension);
463
+ const calculatedPosition = this.getCalculatedPosition(graphicalElement.position, graphicalElement.dimension, coachDimension);
464
+ const icon = graphicalElement.icon && graphicalElement.icon.indexOf("DRIVER_AREA") === -1 ? graphicalElement.icon : (_a2 = graphicalElement.icon) == null ? void 0 : _a2.concat("_", this.seatReservation.vehicleType);
465
+ return html`
466
+ <sbb-seat-reservation-scoped
467
+ scoped-classes="graphical-element"
468
+ inset-block-start="${calculatedPosition.y}px"
469
+ inset-inline-start="${calculatedPosition.x}px"
470
+ width="${calculatedDimension.w}px"
471
+ height="${calculatedDimension.h}px"
472
+ z-index="${graphicalElement.position.z}"
473
+ >
474
+ <sbb-seat-reservation-graphic
475
+ name=${icon ?? nothing}
476
+ width=${graphicalElement.dimension.w * this.baseGridSize}
477
+ height=${graphicalElement.dimension.h * this.baseGridSize}
478
+ rotation=${rotation}
479
+ aria-hidden="true"
480
+ ?stretch=${true}
481
+ ></sbb-seat-reservation-graphic>
482
+ </sbb-seat-reservation-scoped>
483
+ `;
484
+ }
485
+ _getRenderedServiceElements(serviceElements) {
486
+ if (!serviceElements) {
487
+ return null;
488
+ }
489
+ return serviceElements == null ? void 0 : serviceElements.map((serviceElement) => {
490
+ const titleDescription = serviceElement.icon ? getI18nSeatReservation(serviceElement.icon, this._language.current) : null;
491
+ const calculatedcCmpartmentNumberDimension = this.getCalculatedDimension(serviceElement.dimension);
492
+ const calculatedcCmpartmentNumberPosition = this.getCalculatedPosition(serviceElement.position);
493
+ const elementRotation = serviceElement.rotation || 0;
494
+ const elementFixedRotation = this.alignVertical ? elementRotation - 90 : elementRotation;
495
+ return html`
496
+ <sbb-seat-reservation-scoped
497
+ scoped-classes="graphical-element"
498
+ inset-block-start="${calculatedcCmpartmentNumberPosition.y}px"
499
+ inset-inline-start="${calculatedcCmpartmentNumberPosition.x}px"
500
+ width="${calculatedcCmpartmentNumberDimension.w}px"
501
+ height="${calculatedcCmpartmentNumberDimension.h}px"
502
+ z-index="${serviceElement.position.z}"
503
+ >
504
+ <sbb-seat-reservation-graphic
505
+ name=${serviceElement.icon ?? nothing}
506
+ width=${serviceElement.dimension.w * this.baseGridSize}
507
+ height=${serviceElement.dimension.h * this.baseGridSize}
508
+ .rotation=${elementFixedRotation}
509
+ role="img"
510
+ aria-hidden="true"
511
+ title=${titleDescription ?? nothing}
512
+ ></sbb-seat-reservation-graphic>
513
+ </sbb-seat-reservation-scoped>
514
+ `;
515
+ });
516
+ }
517
+ /**
518
+ * Manages the selected place event triggered from the place
519
+ * Each selection emits an array of all selected places
520
+ * @param selectPlaceEvent
521
+ */
522
+ _onSelectPlace(selectPlaceEvent) {
523
+ const selectedPlace = selectPlaceEvent.detail;
524
+ this.preventCoachScrollByPlaceClick = true;
525
+ this.isCochGridFocusable = false;
526
+ if (!this.preventPlaceClick) {
527
+ this.updateSelectedSeatReservationPlaces(selectedPlace);
528
+ this.updateCurrentSelectedPlaceInCoach(selectedPlace);
529
+ }
530
+ }
531
+ _onSelectNavCoach(event) {
532
+ const selectedNavCoachIndex = event.detail;
533
+ this.isKeyboardNavigation = false;
534
+ if (selectedNavCoachIndex !== null && selectedNavCoachIndex !== this.currSelectedCoachIndex) {
535
+ this.unfocusPlaceElement();
536
+ this.scrollToSelectedNavCoach(selectedNavCoachIndex);
537
+ } else if (selectedNavCoachIndex === this.currSelectedCoachIndex) {
538
+ this.updateCurrentSelectedCoach();
539
+ this.preselectPlaceInCoach();
540
+ }
541
+ }
542
+ _onFocusNavCoach() {
543
+ if (!this.preventCoachScrollByPlaceClick) {
544
+ this.preselectPlaceInCoach();
545
+ } else {
546
+ this.focusPlaceElement(this.currSelectedPlace);
547
+ }
548
+ this.isAutoScrolling = false;
549
+ }
550
+ _getDescriptionTableCoach(coachItem) {
551
+ var _a2;
552
+ if (!((_a2 = coachItem.places) == null ? void 0 : _a2.length)) {
553
+ return getI18nSeatReservation("COACH_BLOCKED_TABLE_CAPTION", this._language.current, [
554
+ coachItem.id
555
+ ]);
556
+ }
557
+ let tableCoachDescription = "";
558
+ const areaDescriptions = this._getTitleDescriptionListString(coachItem.graphicElements);
559
+ const serviceDescriptions = this._getTitleDescriptionListString(coachItem.serviceElements);
560
+ tableCoachDescription = getI18nSeatReservation("COACH_TABLE_CAPTION", this._language.current, [
561
+ coachItem.id
562
+ ]);
563
+ if (!!areaDescriptions || !!serviceDescriptions) {
564
+ tableCoachDescription += ". " + getI18nSeatReservation("COACH_AVAILABLE_SERVICES", this._language.current) + ": ";
565
+ tableCoachDescription += serviceDescriptions + ", " + areaDescriptions + ".";
566
+ }
567
+ return tableCoachDescription;
568
+ }
569
+ _getTitleDescriptionListString(descriptionsElements) {
570
+ const uniqueDescriptions = [];
571
+ return descriptionsElements == null ? void 0 : descriptionsElements.map((descriptionElement) => {
572
+ const icon = descriptionElement.icon;
573
+ if (!icon)
574
+ return null;
575
+ const descriptionAlreayExist = uniqueDescriptions.indexOf(icon) > -1;
576
+ const translation = getI18nSeatReservation(descriptionElement.icon, this._language.current);
577
+ const isValidDescription = this._notFixedRotatableAreaIcons.indexOf(icon) === -1 && this._notAreaElements.indexOf(icon) === -1;
578
+ if (!descriptionAlreayExist) {
579
+ uniqueDescriptions.push(descriptionElement.icon);
580
+ }
581
+ return !!translation && !descriptionAlreayExist && isValidDescription ? translation : null;
582
+ }).filter((description) => !!description).join(", ");
583
+ }
584
+ }, _seatReservation_accessor_storage = new WeakMap(), _hasNavigation_accessor_storage = new WeakMap(), _alignVertical_accessor_storage = new WeakMap(), _maxReservations_accessor_storage = new WeakMap(), _preventPlaceClick_accessor_storage = new WeakMap(), _classThis = _a, (() => {
585
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
586
+ _seatReservation_decorators = [property({ attribute: "seat-reservation", type: Object })];
587
+ _hasNavigation_decorators = [forceType(), property({ attribute: "has-navigation", type: Boolean })];
588
+ _alignVertical_decorators = [forceType(), property({ attribute: "align-vertical", type: Boolean })];
589
+ _maxReservations_decorators = [forceType(), property({ attribute: "max-reservations", type: Number })];
590
+ _preventPlaceClick_decorators = [forceType(), property({ attribute: "prevent-place-click", type: Boolean })];
591
+ __esDecorate(_a, null, _seatReservation_decorators, { kind: "accessor", name: "seatReservation", static: false, private: false, access: { has: (obj) => "seatReservation" in obj, get: (obj) => obj.seatReservation, set: (obj, value) => {
592
+ obj.seatReservation = value;
593
+ } }, metadata: _metadata }, _seatReservation_initializers, _seatReservation_extraInitializers);
594
+ __esDecorate(_a, null, _hasNavigation_decorators, { kind: "accessor", name: "hasNavigation", static: false, private: false, access: { has: (obj) => "hasNavigation" in obj, get: (obj) => obj.hasNavigation, set: (obj, value) => {
595
+ obj.hasNavigation = value;
596
+ } }, metadata: _metadata }, _hasNavigation_initializers, _hasNavigation_extraInitializers);
597
+ __esDecorate(_a, null, _alignVertical_decorators, { kind: "accessor", name: "alignVertical", static: false, private: false, access: { has: (obj) => "alignVertical" in obj, get: (obj) => obj.alignVertical, set: (obj, value) => {
598
+ obj.alignVertical = value;
599
+ } }, metadata: _metadata }, _alignVertical_initializers, _alignVertical_extraInitializers);
600
+ __esDecorate(_a, null, _maxReservations_decorators, { kind: "accessor", name: "maxReservations", static: false, private: false, access: { has: (obj) => "maxReservations" in obj, get: (obj) => obj.maxReservations, set: (obj, value) => {
601
+ obj.maxReservations = value;
602
+ } }, metadata: _metadata }, _maxReservations_initializers, _maxReservations_extraInitializers);
603
+ __esDecorate(_a, null, _preventPlaceClick_decorators, { kind: "accessor", name: "preventPlaceClick", static: false, private: false, access: { has: (obj) => "preventPlaceClick" in obj, get: (obj) => obj.preventPlaceClick, set: (obj, value) => {
604
+ obj.preventPlaceClick = value;
605
+ } }, metadata: _metadata }, _preventPlaceClick_initializers, _preventPlaceClick_extraInitializers);
606
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
607
+ _classThis = _classDescriptor.value;
608
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
609
+ })(), _a.styles = style, __runInitializers(_classThis, _classExtraInitializers), _a;
610
+ return _classThis;
611
+ })();
612
+ export {
613
+ SbbSeatReservationElement
614
+ };
615
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhdC1yZXNlcnZhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvc2VhdC1yZXNlcnZhdGlvbi9zZWF0LXJlc2VydmF0aW9uL3NlYXQtcmVzZXJ2YXRpb24uY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgY2xhc3NNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9jbGFzcy1tYXAuanMnO1xuaW1wb3J0IHsgc3R5bGVNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9zdHlsZS1tYXAuanMnO1xuXG5pbXBvcnQgeyBnZXRJMThuU2VhdFJlc2VydmF0aW9uIH0gZnJvbSAnLi4vY29tbW9uLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29hY2hJdGVtLFxuICBQbGFjZSxcbiAgRWxlbWVudERpbWVuc2lvbixcbiAgQmFzZUVsZW1lbnQsXG4gIFBsYWNlU2VsZWN0aW9uLFxuICBTZWF0UmVzZXJ2YXRpb24sXG59IGZyb20gJy4uL3NlYXQtcmVzZXJ2YXRpb24uanMnO1xuXG5pbXBvcnQgeyBTZWF0UmVzZXJ2YXRpb25CYXNlRWxlbWVudCB9IGZyb20gJy4vc2VhdC1yZXNlcnZhdGlvbi1iYXNlLWVsZW1lbnQuanMnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vc2VhdC1yZXNlcnZhdGlvbi5zY3NzP2xpdCZpbmxpbmUnO1xuXG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL3NjcmVlbi1yZWFkZXItb25seS5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tYXJlYS5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi9zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tY29hY2guanMnO1xuaW1wb3J0ICcuL3NlYXQtcmVzZXJ2YXRpb24tc2NvcGVkLmpzJztcblxuLyoqXG4gKiBEZXNjcmliZSB0aGUgcHVycG9zZSBvZiB0aGUgY29tcG9uZW50IHdpdGggYSBzaW5nbGUgc2hvcnQgc2VudGVuY2UuXG4gKlxuICogQGV2ZW50IHtDdXN0b21FdmVudDxTZWF0UmVzZXJ2YXRpb25QbGFjZVNlbGVjdGlvbj59IHNlbGVjdGVkUGxhY2VzIC0gRW1pdHMgd2hlbiBhIHBsYWNlIHdhcyBzZWxlY3RlZCBhbmQgcmV0dXJucyBhIFBsYWNlIGFycmF5IHdpdGggYWxsIHNlbGVjdGVkIHBsYWNlc1xuICogQGV2ZW50IHtDdXN0b21FdmVudDxTZWF0UmVzZXJ2YXRpb25Db2FjaFNlbGVjdGlvbj59IHNlbGVjdGVkQ29hY2ggLSBFbWl0cyB3aGVuIGEgY29hY2ggd2FzIHNlbGVjdGVkIGFuZCByZXR1cm5zIGEgQ29hY2hTZWxlY3Rpb25cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLXNlYXQtcmVzZXJ2YXRpb24nKVxuY2xhc3MgU2JiU2VhdFJlc2VydmF0aW9uRWxlbWVudCBleHRlbmRzIFNlYXRSZXNlcnZhdGlvbkJhc2VFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLyoqIFRoZSBzZWF0IHJlc2VydmF0aW9uIG9iamVjdCB3aGljaCBjb250YWlucyBhbGwgY29hY2hlcyBhbmQgcGxhY2VzICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3NlYXQtcmVzZXJ2YXRpb24nLCB0eXBlOiBPYmplY3QgfSlcbiAgcHVibGljIG92ZXJyaWRlIGFjY2Vzc29yIHNlYXRSZXNlcnZhdGlvbjogU2VhdFJlc2VydmF0aW9uID0gbnVsbCE7XG5cbiAgLyoqIFRoZSBzZWF0IHJlc3ZlcnZhdGlvbiBuYXZpZ2F0aW9uIGNhbiBiZSB0b2dnbGVkIGJ5IHRoaXMgcHJvcGVydHkgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2hhcy1uYXZpZ2F0aW9uJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgYWNjZXNzb3IgaGFzTmF2aWdhdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIGNvbnRyb2xzIHRoZSB2aXN1YWwgcmVwcmVzZW50aW9uIG9mIHNlYXQgcmVzZXJ2YXRpb24gaW4gYSBob3Jpem9uYWwgb3IgdmVydGljYWwgYWxpZ25tZW50ICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhbGlnbi12ZXJ0aWNhbCcsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIG92ZXJyaWRlIGFjY2Vzc29yIGFsaWduVmVydGljYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTWF4aW1hbCBudW1iZXIgb2YgcG9zc2libGUgY2xpY2thYmxlIHNlYXRzICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdtYXgtcmVzZXJ2YXRpb25zJywgdHlwZTogTnVtYmVyIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBhY2Nlc3NvciBtYXhSZXNlcnZhdGlvbnM6IG51bWJlciA9IG51bGwhO1xuXG4gIC8qKiBBbnkgY2xpY2sgZnVuY3Rpb25hbGl0eSBpcyBwcmV2ZW50ZWQgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3ByZXZlbnQtcGxhY2UtY2xpY2snLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBhY2Nlc3NvciBwcmV2ZW50UGxhY2VDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfY29hY2hlc0h0bWxUZW1wbGF0ZT86IFRlbXBsYXRlUmVzdWx0O1xuICAvLyBHcmFwaGljcyB0aGF0IHNob3VsZCBub3QgYmUgcmVuZGVyZWQgd2l0aCBhbiBhcmVhXG4gIHByaXZhdGUgX25vdEFyZWFFbGVtZW50cyA9IFtcbiAgICAnRFJJVkVSX0FSRUFfRlVMTCcsXG4gICAgJ0NPQUNIX1BBU1NBR0UnLFxuICAgICdDT0FDSF9XQUxMX05PX1BBU1NBR0UnLFxuICAgICdDT01QQVJUTUVOVF9QQVNTQUdFJyxcbiAgICAnQ09NUEFSVE1FTlRfUEFTU0FHRV9ISUdIJyxcbiAgICAnQ09NUEFSVE1FTlRfUEFTU0FHRV9NSURETEUnLFxuICAgICdDT01QQVJUTUVOVF9QQVNTQUdFX0xPVycsXG4gIF07XG4gIC8vIEFyZWEgaWNvbnMgdGhhdCBzaG91bGQgbm90IGJlIGZpeGVkIGR1cmluZyByb3RhdGlvbiB3aGVuIHZlcnRpY2FsIG1vZGUgaXMgc2VsZWN0ZWRcbiAgcHJpdmF0ZSBfbm90Rml4ZWRSb3RhdGFibGVBcmVhSWNvbnMgPSBbJ0VOVFJZX0VYSVQnXTtcblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2hhc05hdmlnYXRpb24nKSkge1xuICAgICAgaWYgKHRoaXMuaGFzTmF2aWdhdGlvbikge1xuICAgICAgICB0aGlzLnNoYWRvd1Jvb3RcbiAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RhYmxlJylcbiAgICAgICAgICAuZm9yRWFjaCgodGFibGUpID0+IHRhYmxlLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNoYWRvd1Jvb3RcbiAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RhYmxlJylcbiAgICAgICAgICAuZm9yRWFjaCgodGFibGUpID0+IHRhYmxlLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy5fY29tcG9uZW50U2V0dXAoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQgfCBudWxsIHtcbiAgICB0aGlzLl9pbml0VmVoaWNsZVNlYXRSZXNlcnZhdGlvbkNvbnN0cnVjdGlvbigpO1xuICAgIHJldHVybiB0aGlzLl9jb2FjaGVzSHRtbFRlbXBsYXRlIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9jb21wb25lbnRTZXR1cCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXROYXZpZ2F0aW9uU2VsZWN0aW9uQnlTY3JvbGxFdmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdFZlaGljbGVTZWF0UmVzZXJ2YXRpb25Db25zdHJ1Y3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3QgY29hY2hJdGVtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWF0UmVzZXJ2YXRpb24/LmNvYWNoSXRlbXMpKTtcbiAgICBjb25zdCBjbGFzc0FsaWduVmVydGljYWwgPSB0aGlzLmFsaWduVmVydGljYWwgPyAnc2JiLXNyX193cmFwcGVyLS12ZXJ0aWNhbCcgOiAnJztcblxuICAgIHRoaXMuX2NvYWNoZXNIdG1sVGVtcGxhdGUgPSBodG1sYFxuICAgICAgPGRpdj5cbiAgICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cImZpcnN0LXRhYi1lbGVtZW50XCJcbiAgICAgICAgICAgIHJvbGU9XCJjb250ZW50aW5mb1wiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiJHtnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdTRUFUX1JFU0VSVkFUSU9OX0JFR0lOJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCl9XCJcbiAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuXG4gICAgICAgIDxkaXYgQGtleWRvd249JHsoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLmhhbmRsZUtleWJvYXJkRXZlbnQoZXZ0KX0+XG4gICAgICAgICAgJHt0aGlzLl9yZW5kZXJOYXZpZ2F0aW9uKCl9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zcl9fd3JhcHBlciAke2NsYXNzQWxpZ25WZXJ0aWNhbH1cIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJzYmItc3JfX3BhcmVudC1hcmVhXCIgY2xhc3M9XCJzYmItc3JfX3BhcmVudFwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwic2JiLXNyX19saXN0LWNvYWNoZXNcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgJHt0aGlzLl9yZW5kZXJDb2FjaGVzKGNvYWNoSXRlbXMpfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJsYXN0LXRhYi1lbGVtZW50XCJcbiAgICAgICAgICAgIHJvbGU9XCJjb250ZW50aW5mb1wiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiJHtnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdTRUFUX1JFU0VSVkFUSU9OX0VORCcsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpfVwiXG4gICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJOYXZpZ2F0aW9uKCk6IFRlbXBsYXRlUmVzdWx0IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmhhc05hdmlnYXRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPG5hdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyAnc2JiLXNyLW5hdmlnYXRpb24tLXZlcnRpY2FsJzogdGhpcy5hbGlnblZlcnRpY2FsIH0pfVwiPlxuICAgICAgICA8dWxcbiAgICAgICAgICBjbGFzcz1cInNiYi1zci1uYXZpZ2F0aW9uX19saXN0LWNvYWNoZXNcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCIke2dldEkxOG5TZWF0UmVzZXJ2YXRpb24oXG4gICAgICAgICAgICAnU0VBVF9SRVNFUlZBVElPTl9OQVZJR0FUSU9OJyxcbiAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsXG4gICAgICAgICAgKX1cIlxuICAgICAgICA+XG4gICAgICAgICAgJHt0aGlzLnNlYXRSZXNlcnZhdGlvbj8uY29hY2hJdGVtcy5tYXAoKGNvYWNoSXRlbTogQ29hY2hJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbGA8bGk+XG4gICAgICAgICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWNvYWNoXG4gICAgICAgICAgICAgICAgQHNlbGVjdENvYWNoPSR7KGV2ZW50OiBDdXN0b21FdmVudCkgPT4gdGhpcy5fb25TZWxlY3ROYXZDb2FjaChldmVudCl9XG4gICAgICAgICAgICAgICAgQGZvY3VzQ29hY2g9JHsoKSA9PiB0aGlzLl9vbkZvY3VzTmF2Q29hY2goKX1cbiAgICAgICAgICAgICAgICBpbmRleD1cIiR7aW5kZXh9XCJcbiAgICAgICAgICAgICAgICBjb2FjaC1pZD1cIiR7Y29hY2hJdGVtLmlkfVwiXG4gICAgICAgICAgICAgICAgLnNlbGVjdGVkPSR7dGhpcy5zZWxlY3RlZENvYWNoSW5kZXggPT09IGluZGV4fVxuICAgICAgICAgICAgICAgIC5mb2N1c2VkPSR7dGhpcy5mb2N1c2VkQ29hY2hJbmRleCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgICAgLnByb3BlcnR5SWRzPVwiJHtjb2FjaEl0ZW0ucHJvcGVydHlJZHN9XCJcbiAgICAgICAgICAgICAgICAudHJhdmVsQ2xhc3M9XCIke2NvYWNoSXRlbS50cmF2ZWxDbGFzc31cIlxuICAgICAgICAgICAgICAgID9kcml2ZXItYXJlYT1cIiR7IWNvYWNoSXRlbS5wbGFjZXM/Lmxlbmd0aH1cIlxuICAgICAgICAgICAgICAgID9maXJzdD1cIiR7aW5kZXggPT09IDB9XCJcbiAgICAgICAgICAgICAgICA/bGFzdD1cIiR7aW5kZXggPT09IHRoaXMuc2VhdFJlc2VydmF0aW9uPy5jb2FjaEl0ZW1zLmxlbmd0aCAtIDF9XCJcbiAgICAgICAgICAgICAgICA/dmVydGljYWw9XCIke3RoaXMuYWxpZ25WZXJ0aWNhbH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1jb2FjaD5cbiAgICAgICAgICAgIDwvbGk+YDtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbmF2PlxuICAgIGA7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBjb2FjaGVzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJDb2FjaGVzKGNvYWNoZXM/OiBDb2FjaEl0ZW1bXSk6IFRlbXBsYXRlUmVzdWx0W10gfCBudWxsIHtcbiAgICBpZiAoIWNvYWNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY29hY2hlcy5tYXAoKGNvYWNoSXRlbTogQ29hY2hJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPGxpIGNsYXNzPVwic2JiLXNyX19pdGVtLWNvYWNoXCI+JHt0aGlzLl9yZW5kZXJDb2FjaEVsZW1lbnQoY29hY2hJdGVtLCBpbmRleCl9PC9saT5cbiAgICAgIGA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJDb2FjaEVsZW1lbnQoY29hY2hJdGVtOiBDb2FjaEl0ZW0sIGluZGV4OiBudW1iZXIpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgY2FsY3VsYXRlZENvYWNoRGltZW5zaW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkRGltZW5zaW9uKGNvYWNoSXRlbS5kaW1lbnNpb24pO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uVGFibGVDb2FjaFdpdGhTZXJ2aWNlcyA9IHRoaXMuX2dldERlc2NyaXB0aW9uVGFibGVDb2FjaChjb2FjaEl0ZW0pO1xuXG4gICAgcmV0dXJuIGh0bWxgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1zY29wZWRcbiAgICAgIHNjb3BlZC1jbGFzc2VzPVwiY29hY2gtd3JhcHBlclwiXG4gICAgICBoZWlnaHQ9XCIke2NhbGN1bGF0ZWRDb2FjaERpbWVuc2lvbi5ofXB4XCJcbiAgICAgIHdpZHRoPVwiJHtjYWxjdWxhdGVkQ29hY2hEaW1lbnNpb24ud31weFwiXG4gICAgPlxuICAgICAgJHt0aGlzLl9nZXRSZW5kZXJlZENvYWNoQm9yZGVycyhjb2FjaEl0ZW0sIGluZGV4KX1cbiAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRHcmFwaGljYWxFbGVtZW50cyhjb2FjaEl0ZW0uZ3JhcGhpY0VsZW1lbnRzIHx8IFtdLCBjb2FjaEl0ZW0uZGltZW5zaW9uKX1cbiAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRTZXJ2aWNlRWxlbWVudHMoY29hY2hJdGVtLnNlcnZpY2VFbGVtZW50cyl9XG4gICAgICA8dGFibGVcbiAgICAgICAgQGZvY3VzPSR7KCkgPT4gdGhpcy5vbkZvY3VzVGFibGVDb2FjaEFuZFByZXNlbGVjdFBsYWNlKGluZGV4KX1cbiAgICAgICAgaWQ9XCJzYmItc3ItY29hY2gtJHtpbmRleH1cIlxuICAgICAgICBjbGFzcz1cInNiYi1zci1jb2FjaC13cmFwcGVyX190YWJsZVwiXG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJzYmItc3ItY29hY2gtY2FwdGlvbi0ke2luZGV4fVwiXG4gICAgICA+XG4gICAgICAgIDxjYXB0aW9uIGlkPVwic2JiLXNyLWNvYWNoLWNhcHRpb24tJHtpbmRleH1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHk+JHtkZXNjcmlwdGlvblRhYmxlQ29hY2hXaXRoU2VydmljZXN9PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgICAgICA8L2NhcHRpb24+XG4gICAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRSb3dQbGFjZXMoY29hY2hJdGVtLCBpbmRleCl9XG4gICAgICA8L3RhYmxlPlxuICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkPmA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZW5kZXJlZENvYWNoQm9yZGVycyhjb2FjaEl0ZW06IENvYWNoSXRlbSwgY29hY2hJbmRleDogbnVtYmVyKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGFsbEVsZW1lbnRzID0gY29hY2hJdGVtLmdyYXBoaWNFbGVtZW50cztcbiAgICBjb25zdCBDT0FDSF9QQVNTQUdFX1dJRFRIID0gMTtcbiAgICBjb25zdCBkcml2ZXJBcmVhID0gYWxsRWxlbWVudHM/LmZpbmQoXG4gICAgICAoZWxlbWVudDogQmFzZUVsZW1lbnQpID0+IGVsZW1lbnQuaWNvbiA9PT0gJ0RSSVZFUl9BUkVBX0ZVTEwnLFxuICAgICk7XG4gICAgY29uc3QgYm9yZGVyV2lkdGggPSBkcml2ZXJBcmVhXG4gICAgICA/IGNvYWNoSXRlbS5kaW1lbnNpb24udyAtIGRyaXZlckFyZWEuZGltZW5zaW9uLncgLSBDT0FDSF9QQVNTQUdFX1dJRFRIXG4gICAgICA6IGNvYWNoSXRlbS5kaW1lbnNpb24udyAtIENPQUNIX1BBU1NBR0VfV0lEVEggKiAyO1xuICAgIGNvbnN0IGJvcmRlck9mZnNldFggPVxuICAgICAgY29hY2hJbmRleCA9PT0gMCAmJiBkcml2ZXJBcmVhXG4gICAgICAgID8gZHJpdmVyQXJlYT8uZGltZW5zaW9uLncgKiB0aGlzLmJhc2VHcmlkU2l6ZVxuICAgICAgICA6IHRoaXMuYmFzZUdyaWRTaXplO1xuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkXG4gICAgICAgIHNjb3BlZC1jbGFzc2VzPVwiY29hY2gtYm9yZGVyXCJcbiAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ9XCIke3RoaXMuY29hY2hCb3JkZXJQYWRkaW5nICogLTF9cHhcIlxuICAgICAgICBpbnNldC1pbmxpbmUtc3RhcnQ9XCIke2JvcmRlck9mZnNldFh9cHhcIlxuICAgICAgPlxuICAgICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpY1xuICAgICAgICAgIG5hbWU9XCJDT0FDSF9CT1JERVJfTUlERExFXCJcbiAgICAgICAgICB3aWR0aD0ke2JvcmRlcldpZHRoICogdGhpcy5iYXNlR3JpZFNpemV9XG4gICAgICAgICAgaGVpZ2h0PSR7KGNvYWNoSXRlbS5kaW1lbnNpb24uaCArIHRoaXMuY29hY2hCb3JkZXJPZmZzZXQgKiAyKSAqIHRoaXMuYmFzZUdyaWRTaXplfVxuICAgICAgICAgID9zdHJldGNoPSR7dHJ1ZX1cbiAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgPjwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYz5cbiAgICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZW5kZXJlZFJvd1BsYWNlcyhjb2FjaDogQ29hY2hJdGVtLCBjb2FjaEluZGV4OiBudW1iZXIpOiBUZW1wbGF0ZVJlc3VsdFtdIHwgbnVsbCB7XG4gICAgaWYgKCFjb2FjaC5wbGFjZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFByZXBhaXIgcm93cyB3aXRoIHRoZSBwbGFjZXMgdG8gcmVuZGVyIGEgdGFibGVcbiAgICBjb25zdCB0YWJsZVJvd1BsYWNlczogUmVjb3JkPG51bWJlciwgUGxhY2VbXT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHBsYWNlIG9mIGNvYWNoLnBsYWNlcykge1xuICAgICAgaWYgKCF0YWJsZVJvd1BsYWNlc1twbGFjZS5wb3NpdGlvbi55XSkge1xuICAgICAgICB0YWJsZVJvd1BsYWNlc1twbGFjZS5wb3NpdGlvbi55XSA9IFtwbGFjZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWJsZVJvd1BsYWNlc1twbGFjZS5wb3NpdGlvbi55XS5wdXNoKHBsYWNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0YWJsZVJvd1BsYWNlcylcbiAgICAgIC5tYXAoKHJvd1BsYWNlczogUGxhY2VbXSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgICAgPHRyIGlkPVwicm93LSR7Y29hY2hJbmRleH0tJHtyb3dQbGFjZXNbMF0ucG9zaXRpb24ueX1cIiBkYXRhLXJvdy1pbmRleD0ke2luZGV4fT5cbiAgICAgICAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRDb2x1bW5QbGFjZXMocm93UGxhY2VzLCBjb2FjaEluZGV4KX1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICBgO1xuICAgICAgfSlcbiAgICAgIC5mbGF0TWFwKChyb3dUZW1wbGF0ZSkgPT4gcm93VGVtcGxhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRDb2x1bW5QbGFjZXMocGxhY2VzOiBQbGFjZVtdLCBjb2FjaEluZGV4OiBudW1iZXIpOiBUZW1wbGF0ZVJlc3VsdFtdIHwgbnVsbCB7XG4gICAgLy9Tb3J0cyBlYWNoIHBsYWNlIGJ5IGl0cyBhc2NlbmRpbmcgeCBjb29yZGluYXRlXG4gICAgcGxhY2VzLnNvcnQoXG4gICAgICAocGxhY2VBOiBQbGFjZSwgcGxhY2VCOiBQbGFjZSkgPT4gTnVtYmVyKHBsYWNlQS5wb3NpdGlvbi54KSAtIE51bWJlcihwbGFjZUIucG9zaXRpb24ueCksXG4gICAgKTtcblxuICAgIHJldHVybiBwbGFjZXM/Lm1hcCgocGxhY2U6IFBsYWNlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkSW50ZXJuYWxEaW1lbnNpb24gPSB0aGlzLmdldENhbGN1bGF0ZWREaW1lbnNpb24ocGxhY2UuZGltZW5zaW9uKTtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRJbnRlcm5hbFBvc2l0aW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkUG9zaXRpb24ocGxhY2UucG9zaXRpb24pO1xuICAgICAgY29uc3QgdGV4dFJvdGF0aW9uID0gdGhpcy5hbGlnblZlcnRpY2FsID8gLTkwIDogMDtcblxuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1zY29wZWRcbiAgICAgICAgICBzY29wZWQtY2xhc3Nlcz1cImdyYXBoaWNhbC1lbGVtZW50XCJcbiAgICAgICAgICBpbnNldC1ibG9jay1zdGFydD1cIiR7Y2FsY3VsYXRlZEludGVybmFsUG9zaXRpb24ueX1weFwiXG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0PVwiJHtjYWxjdWxhdGVkSW50ZXJuYWxQb3NpdGlvbi54fXB4XCJcbiAgICAgICAgICB3aWR0aD1cIiR7Y2FsY3VsYXRlZEludGVybmFsRGltZW5zaW9uLnd9cHhcIlxuICAgICAgICAgIGhlaWdodD1cIiR7Y2FsY3VsYXRlZEludGVybmFsRGltZW5zaW9uLmh9cHhcIlxuICAgICAgICAgIHotaW5kZXg9XCIke3BsYWNlLnBvc2l0aW9uLnp9XCJcbiAgICAgICAgICBjZWxsLWlkPVwiY2VsbC0ke2NvYWNoSW5kZXh9LSR7cGxhY2UucG9zaXRpb24ueX0tJHtpbmRleH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2xcbiAgICAgICAgICAgIEBzZWxlY3RQbGFjZT0keyhzZWxlY3RQbGFjZUV2ZW50OiBDdXN0b21FdmVudCkgPT4gdGhpcy5fb25TZWxlY3RQbGFjZShzZWxlY3RQbGFjZUV2ZW50KX1cbiAgICAgICAgICAgIGV4cG9ydHBhcnRzPVwic2JiLXNyLXBsYWNlLXBhcnRcIlxuICAgICAgICAgICAgaWQ9XCJzZWF0LXJlc2VydmF0aW9uX19wbGFjZS1idXR0b24tJHtjb2FjaEluZGV4fS0ke3BsYWNlLm51bWJlcn1cIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2xcIlxuICAgICAgICAgICAgZGF0YS1jZWxsLWlkPVwiJHtjb2FjaEluZGV4fS0ke3BsYWNlLnBvc2l0aW9uLnl9LSR7aW5kZXh9XCJcbiAgICAgICAgICAgIHRleHQ9JHtwbGFjZS5udW1iZXJ9XG4gICAgICAgICAgICB0eXBlPSR7cGxhY2UudHlwZX1cbiAgICAgICAgICAgIHN0YXRlPSR7cGxhY2Uuc3RhdGV9XG4gICAgICAgICAgICB3aWR0aD0ke3BsYWNlLmRpbWVuc2lvbi53ICogdGhpcy5iYXNlR3JpZFNpemV9XG4gICAgICAgICAgICBoZWlnaHQ9JHtwbGFjZS5kaW1lbnNpb24uaCAqIHRoaXMuYmFzZUdyaWRTaXplfVxuICAgICAgICAgICAgcm90YXRpb249JHtwbGFjZS5yb3RhdGlvbiA/PyBub3RoaW5nfVxuICAgICAgICAgICAgdGV4dC1yb3RhdGlvbj0ke3RleHRSb3RhdGlvbn1cbiAgICAgICAgICAgIGNvYWNoLWluZGV4PSR7Y29hY2hJbmRleH1cbiAgICAgICAgICAgIC5wcm9wZXJ0eUlkcz0ke3BsYWNlLnByb3BlcnR5SWRzfVxuICAgICAgICAgICAgLnByZXZlbnRDbGljaz0ke3RoaXMucHJldmVudFBsYWNlQ2xpY2t9XG4gICAgICAgICAgPjwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbD5cbiAgICAgICAgPC9zYmItc2VhdC1yZXNlcnZhdGlvbi1zY29wZWQ+XG4gICAgICBgO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRHcmFwaGljYWxFbGVtZW50cyhcbiAgICBncmFwaGljYWxFbGVtZW50czogQmFzZUVsZW1lbnRbXSxcbiAgICBjb2FjaERpbWVuc2lvbjogRWxlbWVudERpbWVuc2lvbixcbiAgKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIGlmICghZ3JhcGhpY2FsRWxlbWVudHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBncmFwaGljYWxFbGVtZW50cz8ubWFwKChncmFwaGljYWxFbGVtZW50OiBCYXNlRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgaWNvbiA9IGdyYXBoaWNhbEVsZW1lbnQuaWNvbiA/PyAnJztcbiAgICAgIGNvbnN0IGVsZW1lbnRSb3RhdGlvbiA9IGdyYXBoaWNhbEVsZW1lbnQucm90YXRpb24gfHwgMDtcbiAgICAgIGNvbnN0IGlzTm90Rml4ZWRSb3RhdGlvbkdyYXBoaWNhbEVsZW1lbnQgPVxuICAgICAgICB0aGlzLl9ub3RGaXhlZFJvdGF0YWJsZUFyZWFJY29ucy5pbmRleE9mKGdyYXBoaWNhbEVsZW1lbnQuaWNvbiEpID09PSAtMTtcbiAgICAgIGNvbnN0IGVsZW1lbnRGaXhlZFJvdGF0aW9uID1cbiAgICAgICAgdGhpcy5hbGlnblZlcnRpY2FsICYmIGlzTm90Rml4ZWRSb3RhdGlvbkdyYXBoaWNhbEVsZW1lbnRcbiAgICAgICAgICA/IGVsZW1lbnRSb3RhdGlvbiAtIDkwXG4gICAgICAgICAgOiBlbGVtZW50Um90YXRpb247XG5cbiAgICAgIC8vY2hlY2sgaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBub3QgYW4gYXJlYSBlbGVtZW50LCBzaW5jZSB0aGlzIGVsZW1lbnQgaXMgZHJhd24gd2l0aG91dCBhbiBhcmVhIGNvbXBvbmVudFxuICAgICAgaWYgKHRoaXMuX25vdEFyZWFFbGVtZW50cy5maW5kSW5kZXgoKG5vdEFyZWFFbGVtZW50KSA9PiBub3RBcmVhRWxlbWVudCA9PT0gaWNvbikgPiAtMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UmVuZGVyRWxlbWVudFdpdGhvdXRBcmVhKGdyYXBoaWNhbEVsZW1lbnQsIGVsZW1lbnRSb3RhdGlvbiwgY29hY2hEaW1lbnNpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2dldFJlbmRlckVsZW1lbnRXaXRoQXJlYShncmFwaGljYWxFbGVtZW50LCBlbGVtZW50Rml4ZWRSb3RhdGlvbiwgY29hY2hEaW1lbnNpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyRWxlbWVudFdpdGhBcmVhKFxuICAgIGdyYXBoaWNhbEVsZW1lbnQ6IEJhc2VFbGVtZW50LFxuICAgIHJvdGF0aW9uOiBudW1iZXIsXG4gICAgY29hY2hEaW1lbnNpb246IEVsZW1lbnREaW1lbnNpb24sXG4gICk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAvLyBUT0RPIC0+IGlzTm90VGFibGVHcmFwaGljVGVtcEZpeCBpcyB0ZW1wIGZpeCB0byBzaG93IGNvYWNoIHRhYmxlcyBhcyBhcmVhIGFuZCBub3QgYXMgc3ZnIGdyYXBoaWMuXG4gICAgLy8gVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHdoZW4gdXNpbmcgVEFCTEUgc3ZnIGdyYXBoaWNzLFxuICAgIC8vIHRoZXkgYXJlIGRpc3BsYXllZCBkaXN0b3J0ZWQgZHVlIHRvIGRpZmZlcmVudCBoZWlnaHRzIGFuZCB3aWR0aHMgYW5kIHRoaXMgaXMgbm90IHZpc3VhbGx5IGdvb2QuXG4gICAgY29uc3QgaXNOb3RUYWJsZUdyYXBoaWNUZW1wRml4ID0gZ3JhcGhpY2FsRWxlbWVudC5pY29uPy5pbmRleE9mKCdUQUJMRScpID09PSAtMTtcblxuICAgIGNvbnN0IGFyZWFQcm9wZXJ0eSA9XG4gICAgICBncmFwaGljYWxFbGVtZW50Lmljb24gJiYgaXNOb3RUYWJsZUdyYXBoaWNUZW1wRml4ID8gZ3JhcGhpY2FsRWxlbWVudC5pY29uIDogbnVsbDtcbiAgICBjb25zdCBzdHJldGNoSGVpZ2h0ID0gYXJlYVByb3BlcnR5ICE9PSAnRU5UUllfRVhJVCc7XG4gICAgY29uc3QgYXJpYUxhYmVsRm9yQXJlYSA9IGdyYXBoaWNhbEVsZW1lbnQuaWNvblxuICAgICAgPyBnZXRJMThuU2VhdFJlc2VydmF0aW9uKGdyYXBoaWNhbEVsZW1lbnQuaWNvbiwgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudClcbiAgICAgIDogbm90aGluZztcbiAgICBjb25zdCBjYWxjdWxhdGVkRGltZW5zaW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkRGltZW5zaW9uKFxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5kaW1lbnNpb24sXG4gICAgICBjb2FjaERpbWVuc2lvbixcbiAgICAgIHRydWUsXG4gICAgICBzdHJldGNoSGVpZ2h0LFxuICAgICk7XG4gICAgY29uc3QgY2FsY3VsYXRlZFBvc2l0aW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkUG9zaXRpb24oXG4gICAgICBncmFwaGljYWxFbGVtZW50LnBvc2l0aW9uLFxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5kaW1lbnNpb24sXG4gICAgICBjb2FjaERpbWVuc2lvbixcbiAgICAgIHRydWUsXG4gICAgKTtcblxuICAgIGxldCBlbGVtZW50TW91bnRpbmcgPSAnZnJlZSc7XG4gICAgaWYgKGdyYXBoaWNhbEVsZW1lbnQucG9zaXRpb24ueSA9PT0gdGhpcy5jb2FjaEJvcmRlck9mZnNldCAqIC0xKSB7XG4gICAgICBlbGVtZW50TW91bnRpbmcgPSAndXBwZXItYm9yZGVyJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5wb3NpdGlvbi55ICsgZ3JhcGhpY2FsRWxlbWVudC5kaW1lbnNpb24uaCA9PT1cbiAgICAgIGNvYWNoRGltZW5zaW9uLmggKyB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0XG4gICAgKSB7XG4gICAgICBlbGVtZW50TW91bnRpbmcgPSAnbG93ZXItYm9yZGVyJztcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1zY29wZWRcbiAgICAgICAgc2NvcGVkLWNsYXNzZXM9XCJncmFwaGljYWwtZWxlbWVudFwiXG4gICAgICAgIGluc2V0LWJsb2NrLXN0YXJ0PVwiJHtjYWxjdWxhdGVkUG9zaXRpb24ueX1weFwiXG4gICAgICAgIGluc2V0LWlubGluZS1zdGFydD1cIiR7Y2FsY3VsYXRlZFBvc2l0aW9uLnh9cHhcIlxuICAgICAgICB3aWR0aD1cIiR7Y2FsY3VsYXRlZERpbWVuc2lvbi53fXB4XCJcbiAgICAgICAgaGVpZ2h0PVwiJHtjYWxjdWxhdGVkRGltZW5zaW9uLmh9cHhcIlxuICAgICAgICB6LWluZGV4PVwiJHtncmFwaGljYWxFbGVtZW50LnBvc2l0aW9uLnp9XCJcbiAgICAgID5cbiAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWFyZWFcbiAgICAgICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgICAgICctLXNiYi1yZXNlcnZhdGlvbi1hcmVhLXdpZHRoJzogZ3JhcGhpY2FsRWxlbWVudC5kaW1lbnNpb24udyAqIHRoaXMuYmFzZUdyaWRTaXplLFxuICAgICAgICAgICAgJy0tc2JiLXJlc2VydmF0aW9uLWFyZWEtaGVpZ2h0JzogZ3JhcGhpY2FsRWxlbWVudC5kaW1lbnNpb24uaCAqIHRoaXMuYmFzZUdyaWRTaXplLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIG1vdW50aW5nPSR7ZWxlbWVudE1vdW50aW5nfVxuICAgICAgICAgIGJhY2tncm91bmQ9XCJkYXJrXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgIHRpdGxlPSR7YXJpYUxhYmVsRm9yQXJlYX1cbiAgICAgICAgPlxuICAgICAgICAgICR7YXJlYVByb3BlcnR5XG4gICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWNcbiAgICAgICAgICAgICAgICAgIG5hbWU9JHthcmVhUHJvcGVydHl9XG4gICAgICAgICAgICAgICAgICByb3RhdGlvbj0ke3JvdGF0aW9ufVxuICAgICAgICAgICAgICAgICAgd2lkdGg9JHt0aGlzLmJhc2VHcmlkU2l6ZX1cbiAgICAgICAgICAgICAgICAgIGhlaWdodD0ke3RoaXMuYmFzZUdyaWRTaXplfVxuICAgICAgICAgICAgICAgICAgcm9sZT1cImltZ1wiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWM+XG4gICAgICAgICAgICAgIGBcbiAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgPC9zYmItc2VhdC1yZXNlcnZhdGlvbi1hcmVhPlxuICAgICAgPC9zYmItc2VhdC1yZXNlcnZhdGlvbi1zY29wZWQ+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlbmRlckVsZW1lbnRXaXRob3V0QXJlYShcbiAgICBncmFwaGljYWxFbGVtZW50OiBCYXNlRWxlbWVudCxcbiAgICByb3RhdGlvbjogbnVtYmVyLFxuICAgIGNvYWNoRGltZW5zaW9uOiBFbGVtZW50RGltZW5zaW9uLFxuICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgY2FsY3VsYXRlZERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLFxuICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgKTtcbiAgICBjb25zdCBjYWxjdWxhdGVkUG9zaXRpb24gPSB0aGlzLmdldENhbGN1bGF0ZWRQb3NpdGlvbihcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQucG9zaXRpb24sXG4gICAgICBncmFwaGljYWxFbGVtZW50LmRpbWVuc2lvbixcbiAgICAgIGNvYWNoRGltZW5zaW9uLFxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgaWNvbiBpcyB0aGUgZHJpdmVyIGFyZWEsIHRoZW4gaGVyZSBjb25jYXQgdGhlIHZlaGljbGUgdHlwZSB0byBnZXQgdGhlIHJpZ2h0IHZlaGljbGUgY2hhc3NpZSBpY29uXG4gICAgY29uc3QgaWNvbiA9XG4gICAgICBncmFwaGljYWxFbGVtZW50Lmljb24gJiYgZ3JhcGhpY2FsRWxlbWVudC5pY29uLmluZGV4T2YoJ0RSSVZFUl9BUkVBJykgPT09IC0xXG4gICAgICAgID8gZ3JhcGhpY2FsRWxlbWVudC5pY29uXG4gICAgICAgIDogZ3JhcGhpY2FsRWxlbWVudC5pY29uPy5jb25jYXQoJ18nLCB0aGlzLnNlYXRSZXNlcnZhdGlvbi52ZWhpY2xlVHlwZSk7XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1zY29wZWRcbiAgICAgICAgc2NvcGVkLWNsYXNzZXM9XCJncmFwaGljYWwtZWxlbWVudFwiXG4gICAgICAgIGluc2V0LWJsb2NrLXN0YXJ0PVwiJHtjYWxjdWxhdGVkUG9zaXRpb24ueX1weFwiXG4gICAgICAgIGluc2V0LWlubGluZS1zdGFydD1cIiR7Y2FsY3VsYXRlZFBvc2l0aW9uLnh9cHhcIlxuICAgICAgICB3aWR0aD1cIiR7Y2FsY3VsYXRlZERpbWVuc2lvbi53fXB4XCJcbiAgICAgICAgaGVpZ2h0PVwiJHtjYWxjdWxhdGVkRGltZW5zaW9uLmh9cHhcIlxuICAgICAgICB6LWluZGV4PVwiJHtncmFwaGljYWxFbGVtZW50LnBvc2l0aW9uLnp9XCJcbiAgICAgID5cbiAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWNcbiAgICAgICAgICBuYW1lPSR7aWNvbiA/PyBub3RoaW5nfVxuICAgICAgICAgIHdpZHRoPSR7Z3JhcGhpY2FsRWxlbWVudC5kaW1lbnNpb24udyAqIHRoaXMuYmFzZUdyaWRTaXplfVxuICAgICAgICAgIGhlaWdodD0ke2dyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLmggKiB0aGlzLmJhc2VHcmlkU2l6ZX1cbiAgICAgICAgICByb3RhdGlvbj0ke3JvdGF0aW9ufVxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgP3N0cmV0Y2g9JHt0cnVlfVxuICAgICAgICA+PC9zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljPlxuICAgICAgPC9zYmItc2VhdC1yZXNlcnZhdGlvbi1zY29wZWQ+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlbmRlcmVkU2VydmljZUVsZW1lbnRzKHNlcnZpY2VFbGVtZW50cz86IEJhc2VFbGVtZW50W10pOiBUZW1wbGF0ZVJlc3VsdFtdIHwgbnVsbCB7XG4gICAgaWYgKCFzZXJ2aWNlRWxlbWVudHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzZXJ2aWNlRWxlbWVudHM/Lm1hcCgoc2VydmljZUVsZW1lbnQ6IEJhc2VFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCB0aXRsZURlc2NyaXB0aW9uID0gc2VydmljZUVsZW1lbnQuaWNvblxuICAgICAgICA/IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oc2VydmljZUVsZW1lbnQuaWNvbiwgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudClcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgY2FsY3VsYXRlZGNDbXBhcnRtZW50TnVtYmVyRGltZW5zaW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkRGltZW5zaW9uKFxuICAgICAgICBzZXJ2aWNlRWxlbWVudC5kaW1lbnNpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgY2FsY3VsYXRlZGNDbXBhcnRtZW50TnVtYmVyUG9zaXRpb24gPSB0aGlzLmdldENhbGN1bGF0ZWRQb3NpdGlvbihcbiAgICAgICAgc2VydmljZUVsZW1lbnQucG9zaXRpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgZWxlbWVudFJvdGF0aW9uID0gc2VydmljZUVsZW1lbnQucm90YXRpb24gfHwgMDtcbiAgICAgIGNvbnN0IGVsZW1lbnRGaXhlZFJvdGF0aW9uID0gdGhpcy5hbGlnblZlcnRpY2FsID8gZWxlbWVudFJvdGF0aW9uIC0gOTAgOiBlbGVtZW50Um90YXRpb247XG5cbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkXG4gICAgICAgICAgc2NvcGVkLWNsYXNzZXM9XCJncmFwaGljYWwtZWxlbWVudFwiXG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ9XCIke2NhbGN1bGF0ZWRjQ21wYXJ0bWVudE51bWJlclBvc2l0aW9uLnl9cHhcIlxuICAgICAgICAgIGluc2V0LWlubGluZS1zdGFydD1cIiR7Y2FsY3VsYXRlZGNDbXBhcnRtZW50TnVtYmVyUG9zaXRpb24ueH1weFwiXG4gICAgICAgICAgd2lkdGg9XCIke2NhbGN1bGF0ZWRjQ21wYXJ0bWVudE51bWJlckRpbWVuc2lvbi53fXB4XCJcbiAgICAgICAgICBoZWlnaHQ9XCIke2NhbGN1bGF0ZWRjQ21wYXJ0bWVudE51bWJlckRpbWVuc2lvbi5ofXB4XCJcbiAgICAgICAgICB6LWluZGV4PVwiJHtzZXJ2aWNlRWxlbWVudC5wb3NpdGlvbi56fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpY1xuICAgICAgICAgICAgbmFtZT0ke3NlcnZpY2VFbGVtZW50Lmljb24gPz8gbm90aGluZ31cbiAgICAgICAgICAgIHdpZHRoPSR7c2VydmljZUVsZW1lbnQuZGltZW5zaW9uLncgKiB0aGlzLmJhc2VHcmlkU2l6ZX1cbiAgICAgICAgICAgIGhlaWdodD0ke3NlcnZpY2VFbGVtZW50LmRpbWVuc2lvbi5oICogdGhpcy5iYXNlR3JpZFNpemV9XG4gICAgICAgICAgICAucm90YXRpb249JHtlbGVtZW50Rml4ZWRSb3RhdGlvbn1cbiAgICAgICAgICAgIHJvbGU9XCJpbWdcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIHRpdGxlPSR7dGl0bGVEZXNjcmlwdGlvbiA/PyBub3RoaW5nfVxuICAgICAgICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWM+XG4gICAgICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkPlxuICAgICAgYDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5hZ2VzIHRoZSBzZWxlY3RlZCBwbGFjZSBldmVudCB0cmlnZ2VyZWQgZnJvbSB0aGUgcGxhY2VcbiAgICogRWFjaCBzZWxlY3Rpb24gZW1pdHMgYW4gYXJyYXkgb2YgYWxsIHNlbGVjdGVkIHBsYWNlc1xuICAgKiBAcGFyYW0gc2VsZWN0UGxhY2VFdmVudFxuICAgKi9cbiAgcHJpdmF0ZSBfb25TZWxlY3RQbGFjZShzZWxlY3RQbGFjZUV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkUGxhY2UgPSBzZWxlY3RQbGFjZUV2ZW50LmRldGFpbCBhcyBQbGFjZVNlbGVjdGlvbjtcbiAgICAvLyBXZSBoYXZlIHRvIHNldCBwcmV2ZW50Q29hY2hTY3JvbGxCeVBsYWNlQ2xpY2sgdG8gdHJ1ZSwgdG8gcHJldmVudCBhdXRvbWF0aWMgc2Nyb2xsaW5nIHRvIHRoZSBuZXcgZm9jdXNlZCBwbGFjZVxuICAgIHRoaXMucHJldmVudENvYWNoU2Nyb2xsQnlQbGFjZUNsaWNrID0gdHJ1ZTtcbiAgICB0aGlzLmlzQ29jaEdyaWRGb2N1c2FibGUgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMucHJldmVudFBsYWNlQ2xpY2spIHtcbiAgICAgIC8vIEFkZCBwbGFjZSB0byBwbGFjZSBjb2xsZWN0aW9uXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU2VhdFJlc2VydmF0aW9uUGxhY2VzKHNlbGVjdGVkUGxhY2UpO1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50U2VsZWN0ZWRQbGFjZUluQ29hY2goc2VsZWN0ZWRQbGFjZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25TZWxlY3ROYXZDb2FjaChldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZE5hdkNvYWNoSW5kZXggPSBldmVudC5kZXRhaWwgYXMgbnVtYmVyO1xuICAgIHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIGlmIChzZWxlY3RlZE5hdkNvYWNoSW5kZXggIT09IG51bGwgJiYgc2VsZWN0ZWROYXZDb2FjaEluZGV4ICE9PSB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXgpIHtcbiAgICAgIHRoaXMudW5mb2N1c1BsYWNlRWxlbWVudCgpO1xuICAgICAgdGhpcy5zY3JvbGxUb1NlbGVjdGVkTmF2Q29hY2goc2VsZWN0ZWROYXZDb2FjaEluZGV4KTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTmF2Q29hY2hJbmRleCA9PT0gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4KSB7XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRTZWxlY3RlZENvYWNoKCk7XG4gICAgICB0aGlzLnByZXNlbGVjdFBsYWNlSW5Db2FjaCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uRm9jdXNOYXZDb2FjaCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJldmVudENvYWNoU2Nyb2xsQnlQbGFjZUNsaWNrKSB7XG4gICAgICB0aGlzLnByZXNlbGVjdFBsYWNlSW5Db2FjaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzUGxhY2VFbGVtZW50KHRoaXMuY3VyclNlbGVjdGVkUGxhY2UpO1xuICAgIH1cbiAgICB0aGlzLmlzQXV0b1Njcm9sbGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RGVzY3JpcHRpb25UYWJsZUNvYWNoKGNvYWNoSXRlbTogQ29hY2hJdGVtKTogc3RyaW5nIHtcbiAgICBpZiAoIWNvYWNoSXRlbS5wbGFjZXM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oJ0NPQUNIX0JMT0NLRURfVEFCTEVfQ0FQVElPTicsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsIFtcbiAgICAgICAgY29hY2hJdGVtLmlkLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgbGV0IHRhYmxlQ29hY2hEZXNjcmlwdGlvbiA9ICcnO1xuICAgIGNvbnN0IGFyZWFEZXNjcmlwdGlvbnMgPSB0aGlzLl9nZXRUaXRsZURlc2NyaXB0aW9uTGlzdFN0cmluZyhjb2FjaEl0ZW0uZ3JhcGhpY0VsZW1lbnRzISk7XG4gICAgY29uc3Qgc2VydmljZURlc2NyaXB0aW9ucyA9IHRoaXMuX2dldFRpdGxlRGVzY3JpcHRpb25MaXN0U3RyaW5nKGNvYWNoSXRlbS5zZXJ2aWNlRWxlbWVudHMhKTtcblxuICAgIHRhYmxlQ29hY2hEZXNjcmlwdGlvbiA9IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oJ0NPQUNIX1RBQkxFX0NBUFRJT04nLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50LCBbXG4gICAgICBjb2FjaEl0ZW0uaWQsXG4gICAgXSk7XG5cbiAgICBpZiAoISFhcmVhRGVzY3JpcHRpb25zIHx8ICEhc2VydmljZURlc2NyaXB0aW9ucykge1xuICAgICAgdGFibGVDb2FjaERlc2NyaXB0aW9uICs9XG4gICAgICAgICcuICcgKyBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdDT0FDSF9BVkFJTEFCTEVfU0VSVklDRVMnLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KSArICc6ICc7XG4gICAgICB0YWJsZUNvYWNoRGVzY3JpcHRpb24gKz0gc2VydmljZURlc2NyaXB0aW9ucyArICcsICcgKyBhcmVhRGVzY3JpcHRpb25zICsgJy4nO1xuICAgIH1cbiAgICByZXR1cm4gdGFibGVDb2FjaERlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VGl0bGVEZXNjcmlwdGlvbkxpc3RTdHJpbmcoZGVzY3JpcHRpb25zRWxlbWVudHM6IEJhc2VFbGVtZW50W10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVuaXF1ZURlc2NyaXB0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIHJldHVybiBkZXNjcmlwdGlvbnNFbGVtZW50c1xuICAgICAgPy5tYXAoKGRlc2NyaXB0aW9uRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBpY29uID0gZGVzY3JpcHRpb25FbGVtZW50Lmljb247XG4gICAgICAgIGlmICghaWNvbikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb25BbHJlYXlFeGlzdCA9IHVuaXF1ZURlc2NyaXB0aW9ucy5pbmRleE9mKGljb24pID4gLTE7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihcbiAgICAgICAgICBkZXNjcmlwdGlvbkVsZW1lbnQuaWNvbiEsXG4gICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNWYWxpZERlc2NyaXB0aW9uID1cbiAgICAgICAgICB0aGlzLl9ub3RGaXhlZFJvdGF0YWJsZUFyZWFJY29ucy5pbmRleE9mKGljb24pID09PSAtMSAmJlxuICAgICAgICAgIHRoaXMuX25vdEFyZWFFbGVtZW50cy5pbmRleE9mKGljb24pID09PSAtMTtcblxuICAgICAgICBpZiAoIWRlc2NyaXB0aW9uQWxyZWF5RXhpc3QpIHtcbiAgICAgICAgICB1bmlxdWVEZXNjcmlwdGlvbnMucHVzaChkZXNjcmlwdGlvbkVsZW1lbnQuaWNvbiEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXRyYW5zbGF0aW9uICYmICFkZXNjcmlwdGlvbkFscmVheUV4aXN0ICYmIGlzVmFsaWREZXNjcmlwdGlvbiA/IHRyYW5zbGF0aW9uIDogbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChkZXNjcmlwdGlvbikgPT4gISFkZXNjcmlwdGlvbilcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItc2VhdC1yZXNlcnZhdGlvbic6IFNiYlNlYXRSZXNlcnZhdGlvbkVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFvQ00sNkJBQXlCLE1BQUE7OzBCQUQ5QixjQUFjLHNCQUFzQixDQUFDOzs7O29CQUNFOzs7Ozs7Ozs7Ozs7Ozs7O0FBQVIsRUFBQSxtQkFBUSxZQUEwQjtBQUFBOztBQUtoRTtBQUtBO0FBS0E7QUFLQTtBQUtBO0FBcEJ5Qix5QkFBQSxtQ0FBQSxrQkFBQSxNQUFBLCtCQUFtQyxJQUFLO0FBS3hDLHlCQUFBLGtDQUFBLGtCQUFBLE1BQUEsa0NBQUEsR0FBQSxrQkFBQSxNQUFBLDZCQUF5QixJQUFJO0FBSzdCLHlCQUFBLGtDQUFBLGtCQUFBLE1BQUEsZ0NBQUEsR0FBQSxrQkFBQSxNQUFBLDZC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