@uptime.link/statuspage 1.0.74 → 1.2.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 (96) hide show
  1. package/dist_bundle/bundle.js +5019 -519
  2. package/dist_bundle/bundle.js.map +4 -4
  3. package/dist_ts_web/00_commitinfo_data.js +2 -2
  4. package/dist_ts_web/elements/index.d.ts +3 -0
  5. package/dist_ts_web/elements/index.js +6 -1
  6. package/dist_ts_web/elements/internal/uplinternal-miniheading.d.ts +1 -0
  7. package/dist_ts_web/elements/internal/uplinternal-miniheading.js +78 -28
  8. package/dist_ts_web/elements/upl-statuspage-assetsselector.d.ts +14 -0
  9. package/dist_ts_web/elements/upl-statuspage-assetsselector.demo.d.ts +1 -0
  10. package/dist_ts_web/elements/upl-statuspage-assetsselector.demo.js +575 -0
  11. package/dist_ts_web/elements/upl-statuspage-assetsselector.js +679 -43
  12. package/dist_ts_web/elements/upl-statuspage-footer.d.ts +46 -2
  13. package/dist_ts_web/elements/upl-statuspage-footer.demo.d.ts +1 -0
  14. package/dist_ts_web/elements/upl-statuspage-footer.demo.js +679 -0
  15. package/dist_ts_web/elements/upl-statuspage-footer.js +846 -61
  16. package/dist_ts_web/elements/upl-statuspage-header.d.ts +5 -1
  17. package/dist_ts_web/elements/upl-statuspage-header.demo.d.ts +1 -0
  18. package/dist_ts_web/elements/upl-statuspage-header.demo.js +220 -0
  19. package/dist_ts_web/elements/upl-statuspage-header.js +373 -86
  20. package/dist_ts_web/elements/upl-statuspage-incidents.d.ts +22 -4
  21. package/dist_ts_web/elements/upl-statuspage-incidents.demo.d.ts +1 -0
  22. package/dist_ts_web/elements/upl-statuspage-incidents.demo.js +1147 -0
  23. package/dist_ts_web/elements/upl-statuspage-incidents.js +937 -74
  24. package/dist_ts_web/elements/upl-statuspage-pagetitle.d.ts +15 -0
  25. package/dist_ts_web/elements/upl-statuspage-pagetitle.demo.d.ts +1 -0
  26. package/dist_ts_web/elements/upl-statuspage-pagetitle.demo.js +25 -0
  27. package/dist_ts_web/elements/upl-statuspage-pagetitle.js +148 -0
  28. package/dist_ts_web/elements/upl-statuspage-statsgrid.d.ts +23 -0
  29. package/dist_ts_web/elements/upl-statuspage-statsgrid.demo.d.ts +1 -0
  30. package/dist_ts_web/elements/upl-statuspage-statsgrid.demo.js +295 -0
  31. package/dist_ts_web/elements/upl-statuspage-statsgrid.js +549 -0
  32. package/dist_ts_web/elements/upl-statuspage-statusbar.d.ts +4 -0
  33. package/dist_ts_web/elements/upl-statuspage-statusbar.demo.d.ts +1 -0
  34. package/dist_ts_web/elements/upl-statuspage-statusbar.demo.js +365 -0
  35. package/dist_ts_web/elements/upl-statuspage-statusbar.js +408 -44
  36. package/dist_ts_web/elements/upl-statuspage-statusdetails.d.ts +14 -0
  37. package/dist_ts_web/elements/upl-statuspage-statusdetails.demo.d.ts +1 -0
  38. package/dist_ts_web/elements/upl-statuspage-statusdetails.demo.js +706 -0
  39. package/dist_ts_web/elements/upl-statuspage-statusdetails.js +397 -62
  40. package/dist_ts_web/elements/upl-statuspage-statusmonth.d.ts +17 -0
  41. package/dist_ts_web/elements/upl-statuspage-statusmonth.demo.d.ts +1 -0
  42. package/dist_ts_web/elements/upl-statuspage-statusmonth.demo.js +798 -0
  43. package/dist_ts_web/elements/upl-statuspage-statusmonth.js +662 -103
  44. package/dist_ts_web/interfaces/index.d.ts +84 -0
  45. package/dist_ts_web/interfaces/index.js +4 -0
  46. package/dist_ts_web/pages/index.d.ts +4 -1
  47. package/dist_ts_web/pages/index.js +5 -2
  48. package/dist_ts_web/pages/statuspage-allgreen.d.ts +1 -0
  49. package/dist_ts_web/pages/statuspage-allgreen.js +386 -0
  50. package/dist_ts_web/pages/statuspage-demo.d.ts +1 -0
  51. package/dist_ts_web/pages/statuspage-demo.js +616 -0
  52. package/dist_ts_web/pages/statuspage-maintenance.d.ts +1 -0
  53. package/dist_ts_web/pages/statuspage-maintenance.js +544 -0
  54. package/dist_ts_web/pages/statuspage-outage.d.ts +1 -0
  55. package/dist_ts_web/pages/statuspage-outage.js +543 -0
  56. package/dist_ts_web/styles/shared.styles.d.ts +102 -0
  57. package/dist_ts_web/styles/shared.styles.js +494 -0
  58. package/dist_watch/bundle.js +52265 -32033
  59. package/dist_watch/bundle.js.map +4 -4
  60. package/dist_watch/index.html +1 -0
  61. package/npmextra.json +9 -3
  62. package/package.json +19 -19
  63. package/readme.hints.md +292 -0
  64. package/readme.md +326 -149
  65. package/readme.plan.md +261 -0
  66. package/ts_web/00_commitinfo_data.ts +1 -1
  67. package/ts_web/elements/index.ts +6 -0
  68. package/ts_web/elements/internal/uplinternal-miniheading.ts +24 -17
  69. package/ts_web/elements/upl-statuspage-assetsselector.demo.ts +607 -0
  70. package/ts_web/elements/upl-statuspage-assetsselector.ts +600 -18
  71. package/ts_web/elements/upl-statuspage-footer.demo.ts +744 -0
  72. package/ts_web/elements/upl-statuspage-footer.ts +662 -30
  73. package/ts_web/elements/upl-statuspage-header.demo.ts +241 -0
  74. package/ts_web/elements/upl-statuspage-header.ts +289 -52
  75. package/ts_web/elements/upl-statuspage-incidents.demo.ts +1216 -0
  76. package/ts_web/elements/upl-statuspage-incidents.ts +840 -26
  77. package/ts_web/elements/upl-statuspage-pagetitle.demo.ts +25 -0
  78. package/ts_web/elements/upl-statuspage-pagetitle.ts +89 -0
  79. package/ts_web/elements/upl-statuspage-statsgrid.demo.ts +315 -0
  80. package/ts_web/elements/upl-statuspage-statsgrid.ts +478 -0
  81. package/ts_web/elements/upl-statuspage-statusbar.demo.ts +393 -0
  82. package/ts_web/elements/upl-statuspage-statusbar.ts +332 -20
  83. package/ts_web/elements/upl-statuspage-statusdetails.demo.ts +754 -0
  84. package/ts_web/elements/upl-statuspage-statusdetails.ts +321 -37
  85. package/ts_web/elements/upl-statuspage-statusmonth.demo.ts +876 -0
  86. package/ts_web/elements/upl-statuspage-statusmonth.ts +584 -79
  87. package/ts_web/interfaces/index.ts +95 -0
  88. package/ts_web/pages/index.ts +4 -1
  89. package/ts_web/pages/statuspage-allgreen.ts +412 -0
  90. package/ts_web/pages/statuspage-demo.ts +653 -0
  91. package/ts_web/pages/statuspage-maintenance.ts +570 -0
  92. package/ts_web/pages/statuspage-outage.ts +568 -0
  93. package/ts_web/styles/shared.styles.ts +531 -0
  94. package/dist_ts_web/pages/page1.d.ts +0 -1
  95. package/dist_ts_web/pages/page1.js +0 -11
  96. package/ts_web/pages/page1.ts +0 -11
@@ -1,58 +1,694 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
6
27
  };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
9
34
  };
10
- import { DeesElement, property, html, customElement, cssManager, css, } from '@design.estate/dees-element';
35
+ import { DeesElement, property, html, customElement, cssManager, css, unsafeCSS, } from '@design.estate/dees-element';
11
36
  import * as domtools from '@design.estate/dees-domtools';
37
+ import * as sharedStyles from '../styles/shared.styles.js';
12
38
  import './internal/uplinternal-miniheading.js';
13
- let UplStatuspageAssetsselector = class UplStatuspageAssetsselector extends DeesElement {
14
- static { this.demo = () => html `
15
- <upl-statuspage-assetsselector></upl-statuspage-assetsselector>
16
- `; }
17
- constructor() {
18
- super();
19
- }
20
- static { this.styles = [
21
- cssManager.defaultStyles,
22
- css `
39
+ import { demoFunc } from './upl-statuspage-assetsselector.demo.js';
40
+ let UplStatuspageAssetsselector = (() => {
41
+ let _classDecorators = [customElement('upl-statuspage-assetsselector')];
42
+ let _classDescriptor;
43
+ let _classExtraInitializers = [];
44
+ let _classThis;
45
+ let _classSuper = DeesElement;
46
+ let _services_decorators;
47
+ let _services_initializers = [];
48
+ let _services_extraInitializers = [];
49
+ let _filterText_decorators;
50
+ let _filterText_initializers = [];
51
+ let _filterText_extraInitializers = [];
52
+ let _filterCategory_decorators;
53
+ let _filterCategory_initializers = [];
54
+ let _filterCategory_extraInitializers = [];
55
+ let _showOnlySelected_decorators;
56
+ let _showOnlySelected_initializers = [];
57
+ let _showOnlySelected_extraInitializers = [];
58
+ let _loading_decorators;
59
+ let _loading_initializers = [];
60
+ let _loading_extraInitializers = [];
61
+ let _expanded_decorators;
62
+ let _expanded_initializers = [];
63
+ let _expanded_extraInitializers = [];
64
+ var UplStatuspageAssetsselector = class extends _classSuper {
65
+ static { _classThis = this; }
66
+ static {
67
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
68
+ _services_decorators = [property({ type: Array })];
69
+ _filterText_decorators = [property({ type: String })];
70
+ _filterCategory_decorators = [property({ type: String })];
71
+ _showOnlySelected_decorators = [property({ type: Boolean })];
72
+ _loading_decorators = [property({ type: Boolean })];
73
+ _expanded_decorators = [property({ type: Boolean })];
74
+ __esDecorate(this, null, _services_decorators, { kind: "accessor", name: "services", static: false, private: false, access: { has: obj => "services" in obj, get: obj => obj.services, set: (obj, value) => { obj.services = value; } }, metadata: _metadata }, _services_initializers, _services_extraInitializers);
75
+ __esDecorate(this, null, _filterText_decorators, { kind: "accessor", name: "filterText", static: false, private: false, access: { has: obj => "filterText" in obj, get: obj => obj.filterText, set: (obj, value) => { obj.filterText = value; } }, metadata: _metadata }, _filterText_initializers, _filterText_extraInitializers);
76
+ __esDecorate(this, null, _filterCategory_decorators, { kind: "accessor", name: "filterCategory", static: false, private: false, access: { has: obj => "filterCategory" in obj, get: obj => obj.filterCategory, set: (obj, value) => { obj.filterCategory = value; } }, metadata: _metadata }, _filterCategory_initializers, _filterCategory_extraInitializers);
77
+ __esDecorate(this, null, _showOnlySelected_decorators, { kind: "accessor", name: "showOnlySelected", static: false, private: false, access: { has: obj => "showOnlySelected" in obj, get: obj => obj.showOnlySelected, set: (obj, value) => { obj.showOnlySelected = value; } }, metadata: _metadata }, _showOnlySelected_initializers, _showOnlySelected_extraInitializers);
78
+ __esDecorate(this, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading, set: (obj, value) => { obj.loading = value; } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
79
+ __esDecorate(this, null, _expanded_decorators, { kind: "accessor", name: "expanded", static: false, private: false, access: { has: obj => "expanded" in obj, get: obj => obj.expanded, set: (obj, value) => { obj.expanded = value; } }, metadata: _metadata }, _expanded_initializers, _expanded_extraInitializers);
80
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
81
+ UplStatuspageAssetsselector = _classThis = _classDescriptor.value;
82
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
83
+ }
84
+ static demo = demoFunc;
85
+ #services_accessor_storage = __runInitializers(this, _services_initializers, []);
86
+ get services() { return this.#services_accessor_storage; }
87
+ set services(value) { this.#services_accessor_storage = value; }
88
+ #filterText_accessor_storage = (__runInitializers(this, _services_extraInitializers), __runInitializers(this, _filterText_initializers, ''));
89
+ get filterText() { return this.#filterText_accessor_storage; }
90
+ set filterText(value) { this.#filterText_accessor_storage = value; }
91
+ #filterCategory_accessor_storage = (__runInitializers(this, _filterText_extraInitializers), __runInitializers(this, _filterCategory_initializers, 'all'));
92
+ get filterCategory() { return this.#filterCategory_accessor_storage; }
93
+ set filterCategory(value) { this.#filterCategory_accessor_storage = value; }
94
+ #showOnlySelected_accessor_storage = (__runInitializers(this, _filterCategory_extraInitializers), __runInitializers(this, _showOnlySelected_initializers, false));
95
+ get showOnlySelected() { return this.#showOnlySelected_accessor_storage; }
96
+ set showOnlySelected(value) { this.#showOnlySelected_accessor_storage = value; }
97
+ #loading_accessor_storage = (__runInitializers(this, _showOnlySelected_extraInitializers), __runInitializers(this, _loading_initializers, false));
98
+ get loading() { return this.#loading_accessor_storage; }
99
+ set loading(value) { this.#loading_accessor_storage = value; }
100
+ #expanded_accessor_storage = (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _expanded_initializers, false));
101
+ get expanded() { return this.#expanded_accessor_storage; }
102
+ set expanded(value) { this.#expanded_accessor_storage = value; }
103
+ constructor() {
104
+ super();
105
+ __runInitializers(this, _expanded_extraInitializers);
106
+ }
107
+ static styles = [
108
+ cssManager.defaultStyles,
109
+ sharedStyles.commonStyles,
110
+ css `
23
111
  :host {
24
- padding: 0px 0px 15px 0px;
25
112
  display: block;
26
- background: ${cssManager.bdTheme('#eeeeeb', '#222222')};
27
- font-family: Inter;
28
- color: #fff;
113
+ background: transparent;
114
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
115
+ color: ${sharedStyles.colors.text.primary};
116
+ }
117
+
118
+ .container {
119
+ max-width: 1200px;
120
+ margin: 0 auto;
121
+ padding: 0 ${unsafeCSS(sharedStyles.spacing.lg)} ${unsafeCSS(sharedStyles.spacing.lg)} ${unsafeCSS(sharedStyles.spacing.lg)};
122
+ }
123
+
124
+ .controls {
125
+ display: flex;
126
+ gap: ${unsafeCSS(sharedStyles.spacing.sm)};
127
+ margin-bottom: ${unsafeCSS(sharedStyles.spacing.md)};
128
+ flex-wrap: wrap;
129
+ align-items: center;
130
+ }
131
+
132
+ .search-input {
133
+ flex: 1;
134
+ min-width: 200px;
135
+ padding: ${unsafeCSS(sharedStyles.spacing.xs)} ${unsafeCSS(sharedStyles.spacing.sm)};
136
+ border: 1px solid ${sharedStyles.colors.border.default};
137
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)};
138
+ background: ${sharedStyles.colors.background.card};
139
+ color: ${sharedStyles.colors.text.primary};
140
+ font-size: 13px;
141
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
142
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
143
+ height: 32px;
144
+ }
145
+
146
+ .search-input:focus {
147
+ outline: none;
148
+ border-color: ${sharedStyles.colors.text.primary};
149
+ box-shadow: 0 0 0 2px ${cssManager.bdTheme('rgba(0, 0, 0, 0.05)', 'rgba(255, 255, 255, 0.05)')};
150
+ }
151
+
152
+ .search-input::placeholder {
153
+ color: ${sharedStyles.colors.text.muted};
154
+ }
155
+
156
+ .filter-button {
157
+ display: inline-flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ padding: ${unsafeCSS(sharedStyles.spacing.xs)} ${unsafeCSS(sharedStyles.spacing.sm)};
161
+ border: 1px solid ${sharedStyles.colors.border.default};
162
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)};
163
+ background: ${sharedStyles.colors.background.card};
164
+ color: ${sharedStyles.colors.text.secondary};
165
+ cursor: pointer;
166
+ font-size: 13px;
167
+ font-weight: 500;
168
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
169
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
170
+ height: 32px;
171
+ }
172
+
173
+ .filter-button:hover {
174
+ border-color: ${sharedStyles.colors.border.muted};
175
+ color: ${sharedStyles.colors.text.primary};
176
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
29
177
  }
30
178
 
31
- .mainbox {
32
- margin: auto;
33
- max-width: 900px;
179
+ .filter-button.active {
180
+ background: ${sharedStyles.colors.text.primary};
181
+ color: ${sharedStyles.colors.background.primary};
182
+ border-color: ${sharedStyles.colors.text.primary};
183
+ }
184
+
185
+ .selected-services {
186
+ display: flex;
187
+ flex-wrap: wrap;
188
+ gap: ${unsafeCSS(sharedStyles.spacing.sm)};
189
+ align-items: center;
190
+ }
191
+
192
+ .service-pill {
193
+ display: inline-flex;
194
+ align-items: center;
195
+ gap: ${unsafeCSS(sharedStyles.spacing.xs)};
196
+ padding: 6px ${unsafeCSS(sharedStyles.spacing.md)};
197
+ background: ${sharedStyles.colors.background.card};
198
+ border: 1px solid ${sharedStyles.colors.border.default};
199
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.full)};
200
+ font-size: 13px;
201
+ font-weight: 500;
202
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
203
+ animation: pillFadeIn 0.3s ${unsafeCSS(sharedStyles.easings.default)} both;
204
+ }
205
+
206
+ .service-pill:nth-child(1) { animation-delay: 0ms; }
207
+ .service-pill:nth-child(2) { animation-delay: 30ms; }
208
+ .service-pill:nth-child(3) { animation-delay: 60ms; }
209
+ .service-pill:nth-child(4) { animation-delay: 90ms; }
210
+ .service-pill:nth-child(5) { animation-delay: 120ms; }
211
+
212
+ @keyframes pillFadeIn {
213
+ from {
214
+ opacity: 0;
215
+ transform: scale(0.9);
216
+ }
217
+ to {
218
+ opacity: 1;
219
+ transform: scale(1);
220
+ }
221
+ }
222
+
223
+ .service-pill:hover {
224
+ border-color: ${sharedStyles.colors.border.muted};
225
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
226
+ transform: translateY(-1px);
227
+ }
228
+
229
+ .service-pill .status-dot {
230
+ width: 6px;
231
+ height: 6px;
232
+ border-radius: 50%;
233
+ flex-shrink: 0;
234
+ }
235
+
236
+ .service-pill .status-dot.operational {
237
+ box-shadow: 0 0 0 2px ${cssManager.bdTheme('rgba(34, 197, 94, 0.2)', 'rgba(34, 197, 94, 0.3)')};
238
+ }
239
+
240
+ .manage-button {
241
+ display: inline-flex;
242
+ align-items: center;
243
+ gap: ${unsafeCSS(sharedStyles.spacing.xs)};
244
+ padding: 6px ${unsafeCSS(sharedStyles.spacing.md)};
245
+ background: ${sharedStyles.colors.background.card};
246
+ border: 1px solid ${sharedStyles.colors.border.default};
247
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)};
248
+ font-size: 13px;
249
+ font-weight: 500;
250
+ cursor: pointer;
251
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
252
+ color: ${sharedStyles.colors.text.secondary};
253
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
254
+ }
255
+
256
+ .manage-button:hover {
257
+ border-color: ${sharedStyles.colors.border.muted};
258
+ color: ${sharedStyles.colors.text.primary};
259
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
260
+ transform: translateY(-1px);
261
+ }
262
+
263
+ .manage-button:active {
264
+ transform: translateY(0);
265
+ }
266
+
267
+ .expandable-section {
268
+ margin-top: ${unsafeCSS(sharedStyles.spacing.lg)};
269
+ overflow: hidden;
270
+ animation: expandIn 0.3s ${unsafeCSS(sharedStyles.easings.default)};
271
+ }
272
+
273
+ @keyframes expandIn {
274
+ from {
275
+ opacity: 0;
276
+ transform: translateY(-8px);
277
+ }
278
+ to {
279
+ opacity: 1;
280
+ transform: translateY(0);
281
+ }
282
+ }
283
+
284
+ .expandable-content {
285
+ padding: ${unsafeCSS(sharedStyles.spacing.lg)};
286
+ background: ${sharedStyles.colors.background.secondary};
287
+ border: 1px solid ${sharedStyles.colors.border.default};
288
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.lg)};
289
+ }
290
+
291
+ .assets-grid {
292
+ display: grid;
293
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
294
+ gap: ${unsafeCSS(sharedStyles.spacing.sm)};
295
+ margin-top: ${unsafeCSS(sharedStyles.spacing.md)};
296
+ }
297
+
298
+ .asset-card {
299
+ display: flex;
300
+ align-items: center;
301
+ padding: ${unsafeCSS(sharedStyles.spacing.md)};
302
+ background: ${sharedStyles.colors.background.card};
303
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)};
304
+ cursor: pointer;
305
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
306
+ border: 1px solid ${sharedStyles.colors.border.default};
307
+ gap: ${unsafeCSS(sharedStyles.spacing.sm)};
308
+ animation: cardFadeIn 0.3s ${unsafeCSS(sharedStyles.easings.default)} both;
309
+ }
310
+
311
+ @keyframes cardFadeIn {
312
+ from {
313
+ opacity: 0;
314
+ transform: translateY(8px);
315
+ }
316
+ to {
317
+ opacity: 1;
318
+ transform: translateY(0);
319
+ }
320
+ }
321
+
322
+ .asset-card:hover {
323
+ border-color: ${sharedStyles.colors.border.muted};
324
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
325
+ transform: translateY(-2px);
326
+ }
327
+
328
+ .asset-card.selected {
329
+ border-color: ${sharedStyles.colors.text.primary};
330
+ background: ${sharedStyles.colors.background.secondary};
331
+ }
332
+
333
+ .asset-card.selected:hover {
334
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.md)};
335
+ }
336
+
337
+ .asset-checkbox {
338
+ width: 16px;
339
+ height: 16px;
340
+ cursor: pointer;
341
+ accent-color: ${sharedStyles.colors.text.primary};
342
+ flex-shrink: 0;
343
+ }
344
+
345
+ .asset-info {
346
+ flex: 1;
347
+ min-width: 0;
348
+ }
349
+
350
+ .asset-name {
351
+ font-weight: 600;
352
+ font-size: 14px;
353
+ margin-bottom: ${unsafeCSS(sharedStyles.spacing.xs)};
354
+ overflow: hidden;
355
+ text-overflow: ellipsis;
356
+ white-space: nowrap;
357
+ }
358
+
359
+ .asset-description {
360
+ font-size: 13px;
361
+ color: ${sharedStyles.colors.text.secondary};
362
+ overflow: hidden;
363
+ text-overflow: ellipsis;
364
+ white-space: nowrap;
365
+ }
366
+
367
+ .asset-status {
368
+ display: flex;
369
+ align-items: center;
370
+ gap: ${unsafeCSS(sharedStyles.spacing.xs)};
371
+ flex-shrink: 0;
372
+ }
373
+
374
+ .status-indicator {
375
+ width: 8px;
376
+ height: 8px;
377
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.full)};
378
+ flex-shrink: 0;
379
+ }
380
+
381
+ .status-indicator.operational, .status-dot.operational {
382
+ background: ${sharedStyles.colors.status.operational};
383
+ }
384
+ .status-indicator.degraded, .status-dot.degraded {
385
+ background: ${sharedStyles.colors.status.degraded};
386
+ }
387
+ .status-indicator.partial_outage, .status-dot.partial_outage {
388
+ background: ${sharedStyles.colors.status.partial};
389
+ }
390
+ .status-indicator.major_outage, .status-dot.major_outage {
391
+ background: ${sharedStyles.colors.status.major};
392
+ }
393
+ .status-indicator.maintenance, .status-dot.maintenance {
394
+ background: ${sharedStyles.colors.status.maintenance};
395
+ }
396
+
397
+ .status-text {
398
+ font-size: 12px;
399
+ text-transform: capitalize;
400
+ color: ${sharedStyles.colors.text.secondary};
401
+ }
402
+
403
+ .loading-message,
404
+ .no-results {
405
+ grid-column: 1 / -1;
406
+ text-align: center;
407
+ padding: ${unsafeCSS(sharedStyles.spacing.xl)};
408
+ color: ${cssManager.bdTheme('#9ca3af', '#71717a')};
409
+ font-size: 13px;
410
+ }
411
+
412
+ .summary {
413
+ text-align: right;
414
+ font-size: 12px;
415
+ margin-top: ${unsafeCSS(sharedStyles.spacing.md)};
416
+ color: ${cssManager.bdTheme('#9ca3af', '#71717a')};
417
+ }
418
+
419
+ .no-services {
420
+ padding: ${unsafeCSS(sharedStyles.spacing.xl)};
34
421
  text-align: center;
35
- height: 50px;
36
- border-radius: 3px;
37
- background: ${cssManager.bdTheme('#ffffff', '#333333')};;
422
+ color: ${cssManager.bdTheme('#9ca3af', '#71717a')};
423
+ font-size: 13px;
424
+ }
425
+
426
+ @media (max-width: 640px) {
427
+ .container {
428
+ padding: 0 ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.md)};
429
+ }
430
+
431
+ .controls {
432
+ flex-direction: column;
433
+ align-items: stretch;
434
+ }
435
+
436
+ .search-input {
437
+ width: 100%;
438
+ }
439
+
440
+ .selected-services {
441
+ flex-direction: column;
442
+ align-items: stretch;
443
+ }
444
+
445
+ .service-pill {
446
+ width: auto;
447
+ }
448
+
449
+ .expandable-content {
450
+ padding: ${unsafeCSS(sharedStyles.spacing.md)};
451
+ }
452
+
453
+ .assets-grid {
454
+ grid-template-columns: 1fr;
455
+ }
456
+
457
+ .asset-card {
458
+ padding: ${unsafeCSS(sharedStyles.spacing.sm)};
459
+ }
38
460
  }
39
461
  `,
40
- ]; }
41
- render() {
42
- return html `
43
- <style>
462
+ ];
463
+ render() {
464
+ const selectedServices = this.services.filter(s => s.selected);
465
+ const selectedCount = selectedServices.length;
466
+ const categories = this.getUniqueCategories();
467
+ return html `
468
+ <div class="container">
469
+ <uplinternal-miniheading>Monitored Assets</uplinternal-miniheading>
470
+
471
+ <div class="selected-services">
472
+ ${selectedCount === 0 ? html `
473
+ <span style="color: ${cssManager.bdTheme('#9ca3af', '#71717a')}; font-size: 13px;">
474
+ No services selected
475
+ </span>
476
+ ` : selectedCount > 5 && !this.expanded ? html `
477
+ ${selectedServices.slice(0, 4).map(service => html `
478
+ <div class="service-pill">
479
+ <span class="status-dot ${service.currentStatus}"></span>
480
+ <span>${service.displayName}</span>
481
+ </div>
482
+ `)}
483
+ <span style="color: ${cssManager.bdTheme('#6b7280', '#a1a1aa')}; font-size: 12px;">
484
+ +${selectedCount - 4} more
485
+ </span>
486
+ ` : selectedServices.map(service => html `
487
+ <div class="service-pill">
488
+ <span class="status-dot ${service.currentStatus}"></span>
489
+ <span>${service.displayName}</span>
490
+ </div>
491
+ `)}
492
+
493
+ <button
494
+ class="manage-button"
495
+ @click=${() => { this.expanded = !this.expanded; }}
496
+ >
497
+ ${this.expanded ? 'Close' : 'Manage Services'}
498
+ <svg
499
+ width="10"
500
+ height="6"
501
+ viewBox="0 0 10 6"
502
+ fill="none"
503
+ xmlns="http://www.w3.org/2000/svg"
504
+ style="transform: rotate(${this.expanded ? '180deg' : '0'}); transition: transform 0.2s;"
505
+ >
506
+ <path
507
+ d="M1 1L5 5L9 1"
508
+ stroke="currentColor"
509
+ stroke-width="1.5"
510
+ stroke-linecap="round"
511
+ stroke-linejoin="round"
512
+ />
513
+ </svg>
514
+ </button>
515
+ </div>
44
516
 
45
- </style>
46
- <uplinternal-miniheading>Monitored Assets</uplinternal-miniheading>
47
- <div class="mainbox">
48
- Hello!
517
+ ${this.expanded ? html `
518
+ <div class="expandable-section">
519
+ <div class="expandable-content">
520
+ <div class="controls">
521
+ <input
522
+ type="text"
523
+ class="search-input"
524
+ placeholder="Search services..."
525
+ .value=${this.filterText}
526
+ @input=${(e) => {
527
+ this.filterText = e.target.value;
528
+ }}
529
+ />
530
+
531
+ <button
532
+ class="filter-button ${this.filterCategory === 'all' ? 'active' : ''}"
533
+ @click=${() => { this.filterCategory = 'all'; }}
534
+ >
535
+ All
536
+ </button>
537
+
538
+ ${categories.map(category => html `
539
+ <button
540
+ class="filter-button ${this.filterCategory === category ? 'active' : ''}"
541
+ @click=${() => { this.filterCategory = category; }}
542
+ >
543
+ ${category}
544
+ </button>
545
+ `)}
546
+
547
+ <button
548
+ class="filter-button ${this.showOnlySelected ? 'active' : ''}"
549
+ @click=${() => { this.showOnlySelected = !this.showOnlySelected; }}
550
+ >
551
+ ${this.showOnlySelected ? 'Show All' : 'Selected Only'}
552
+ </button>
553
+
554
+ <button
555
+ class="filter-button"
556
+ @click=${() => this.selectAll()}
557
+ >
558
+ Select All
559
+ </button>
560
+
561
+ <button
562
+ class="filter-button"
563
+ @click=${() => this.selectNone()}
564
+ >
565
+ Select None
566
+ </button>
567
+ </div>
568
+
569
+ <div class="assets-grid">
570
+ ${this.loading ? html `
571
+ <div class="loading-message">Loading services...</div>
572
+ ` : this.renderServiceGrid()}
573
+ </div>
574
+
575
+ <div class="summary">
576
+ ${selectedCount} of ${this.services.length} services selected
577
+ </div>
578
+ </div>
579
+ </div>
580
+ ` : ''}
49
581
  </div>
50
582
  `;
51
- }
52
- };
53
- UplStatuspageAssetsselector = __decorate([
54
- customElement('upl-statuspage-assetsselector'),
55
- __metadata("design:paramtypes", [])
56
- ], UplStatuspageAssetsselector);
583
+ }
584
+ getFilteredServices() {
585
+ return this.services.filter(service => {
586
+ // Apply text filter
587
+ if (this.filterText && !service.displayName.toLowerCase().includes(this.filterText.toLowerCase()) &&
588
+ (!service.description || !service.description.toLowerCase().includes(this.filterText.toLowerCase()))) {
589
+ return false;
590
+ }
591
+ // Apply category filter
592
+ if (this.filterCategory !== 'all' && service.category !== this.filterCategory) {
593
+ return false;
594
+ }
595
+ // Apply selected filter
596
+ if (this.showOnlySelected && !service.selected) {
597
+ return false;
598
+ }
599
+ return true;
600
+ });
601
+ }
602
+ getUniqueCategories() {
603
+ const categories = new Set();
604
+ this.services.forEach(service => {
605
+ if (service.category) {
606
+ categories.add(service.category);
607
+ }
608
+ });
609
+ return Array.from(categories).sort();
610
+ }
611
+ toggleService(serviceId) {
612
+ const service = this.services.find(s => s.id === serviceId);
613
+ if (service) {
614
+ service.selected = !service.selected;
615
+ this.requestUpdate();
616
+ this.dispatchEvent(new CustomEvent('selectionChanged', {
617
+ detail: {
618
+ serviceId,
619
+ selected: service.selected,
620
+ selectedServices: this.services.filter(s => s.selected).map(s => s.id)
621
+ },
622
+ bubbles: true,
623
+ composed: true
624
+ }));
625
+ }
626
+ }
627
+ selectAll() {
628
+ const filteredServices = this.getFilteredServices();
629
+ filteredServices.forEach(service => {
630
+ service.selected = true;
631
+ });
632
+ this.requestUpdate();
633
+ this.emitSelectionUpdate();
634
+ }
635
+ selectNone() {
636
+ const filteredServices = this.getFilteredServices();
637
+ filteredServices.forEach(service => {
638
+ service.selected = false;
639
+ });
640
+ this.requestUpdate();
641
+ this.emitSelectionUpdate();
642
+ }
643
+ emitSelectionUpdate() {
644
+ this.dispatchEvent(new CustomEvent('selectionChanged', {
645
+ detail: {
646
+ selectedServices: this.services.filter(s => s.selected).map(s => s.id)
647
+ },
648
+ bubbles: true,
649
+ composed: true
650
+ }));
651
+ }
652
+ renderServiceGrid() {
653
+ const filteredServices = this.getFilteredServices();
654
+ if (filteredServices.length === 0) {
655
+ return html `<div class="no-results">No services found matching your criteria</div>`;
656
+ }
657
+ return html `${filteredServices.map(service => html `
658
+ <div
659
+ class="asset-card ${service.selected ? 'selected' : ''}"
660
+ @click=${() => this.toggleService(service.id)}
661
+ >
662
+ <input
663
+ type="checkbox"
664
+ class="asset-checkbox"
665
+ .checked=${service.selected}
666
+ @click=${(e) => e.stopPropagation()}
667
+ @change=${(e) => {
668
+ e.stopPropagation();
669
+ this.toggleService(service.id);
670
+ }}
671
+ />
672
+
673
+ <div class="asset-info">
674
+ <div class="asset-name">${service.displayName}</div>
675
+ ${service.description ? html `
676
+ <div class="asset-description">${service.description}</div>
677
+ ` : ''}
678
+ </div>
679
+
680
+ <div class="asset-status">
681
+ <div class="status-indicator ${service.currentStatus}"></div>
682
+ <div class="status-text">${service.currentStatus.replace(/_/g, ' ')}</div>
683
+ </div>
684
+ </div>
685
+ `)}`;
686
+ }
687
+ static {
688
+ __runInitializers(_classThis, _classExtraInitializers);
689
+ }
690
+ };
691
+ return UplStatuspageAssetsselector = _classThis;
692
+ })();
57
693
  export { UplStatuspageAssetsselector };
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2UtYXNzZXRzc2VsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvdXBsLXN0YXR1c3BhZ2UtYXNzZXRzc2VsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFFYixVQUFVLEVBQ1YsR0FBRyxHQUNKLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxLQUFLLFFBQVEsTUFBTSw4QkFBOEIsQ0FBQztBQUV6RCxPQUFPLHVDQUF1QyxDQUFDO0FBU3hDLElBQU0sMkJBQTJCLEdBQWpDLE1BQU0sMkJBQTRCLFNBQVEsV0FBVzthQUM1QyxTQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBOztHQUU5QixBQUZpQixDQUVoQjtJQUVGO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO2FBRWEsV0FBTSxHQUFHO1FBQ3JCLFVBQVUsQ0FBQyxhQUFhO1FBQ3hCLEdBQUcsQ0FBQTs7Ozt3QkFJaUIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozt3QkFXeEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOztLQUUzRDtLQUNGLEFBcEJtQixDQW9CbkI7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUE7Ozs7Ozs7O0tBUVYsQ0FBQztJQUNKLENBQUM7O0FBekNVLDJCQUEyQjtJQUR2QyxhQUFhLENBQUMsK0JBQStCLENBQUM7O0dBQ2xDLDJCQUEyQixDQTBDdkMifQ==
694
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2UtYXNzZXRzc2VsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvdXBsLXN0YXR1c3BhZ2UtYXNzZXRzc2VsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLElBQUksRUFDSixhQUFhLEVBRWIsVUFBVSxFQUNWLEdBQUcsRUFDSCxTQUFTLEdBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLDhCQUE4QixDQUFDO0FBRXpELE9BQU8sS0FBSyxZQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUNBQXlDLENBQUM7SUFTdEQsMkJBQTJCOzRCQUR2QyxhQUFhLENBQUMsK0JBQStCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUd6RCxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7c0NBR3pCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzswQ0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDOzRDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7bUNBRzNCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztvQ0FHM0IsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBZDVCLDZLQUFTLFFBQVEsNkJBQVIsUUFBUSwyRkFBd0I7WUFHekMsbUxBQVMsVUFBVSw2QkFBVixVQUFVLCtGQUFjO1lBR2pDLCtMQUFTLGNBQWMsNkJBQWQsY0FBYyx1R0FBaUI7WUFHeEMscU1BQVMsZ0JBQWdCLDZCQUFoQixnQkFBZ0IsMkdBQWtCO1lBRzNDLDBLQUFTLE9BQU8sNkJBQVAsT0FBTyx5RkFBa0I7WUFHbEMsNktBQVMsUUFBUSw2QkFBUixRQUFRLDJGQUFrQjtZQW5CckMsNktBNG1CQzs7OztRQTNtQlEsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFHOUIsNkVBQXNDLEVBQUUsRUFBQztRQUF6QyxJQUFTLFFBQVEsOENBQXdCO1FBQXpDLElBQVMsUUFBUSxvREFBd0I7UUFHekMsd0lBQThCLEVBQUUsR0FBQztRQUFqQyxJQUFTLFVBQVUsZ0RBQWM7UUFBakMsSUFBUyxVQUFVLHNEQUFjO1FBR2pDLGtKQUFrQyxLQUFLLEdBQUM7UUFBeEMsSUFBUyxjQUFjLG9EQUFpQjtRQUF4QyxJQUFTLGNBQWMsMERBQWlCO1FBR3hDLDBKQUFxQyxLQUFLLEdBQUM7UUFBM0MsSUFBUyxnQkFBZ0Isc0RBQWtCO1FBQTNDLElBQVMsZ0JBQWdCLDREQUFrQjtRQUczQywwSUFBNEIsS0FBSyxHQUFDO1FBQWxDLElBQVMsT0FBTyw2Q0FBa0I7UUFBbEMsSUFBUyxPQUFPLG1EQUFrQjtRQUdsQyxtSUFBNkIsS0FBSyxHQUFDO1FBQW5DLElBQVMsUUFBUSw4Q0FBa0I7UUFBbkMsSUFBUyxRQUFRLG9EQUFrQjtRQUVuQztZQUNFLEtBQUssRUFBRSxDQUFDOztTQUNUO1FBRU0sTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNyQixVQUFVLENBQUMsYUFBYTtZQUN4QixZQUFZLENBQUMsWUFBWTtZQUN6QixHQUFHLENBQUE7Ozs7eUJBSWtCLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzttQkFDeEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTzs7Ozs7O3VCQU01QixTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Ozs7O2lCQUtwSCxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7MkJBQ3hCLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7Ozs7Ozs7cUJBUXhDLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzs4QkFDL0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTzsyQkFDckMsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO3dCQUM1QyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJO21CQUN4QyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPOzt5QkFFMUIsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUMvQixTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Ozs7OzswQkFNbkYsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTztrQ0FDeEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSwyQkFBMkIsQ0FBQzs7OzttQkFJckYsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSzs7Ozs7OztxQkFPNUIsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzhCQUMvRCxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPOzJCQUNyQyxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7d0JBQzVDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUk7bUJBQ3hDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVM7Ozs7eUJBSTVCLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzs0QkFDL0IsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDOzs7OzswQkFLbkYsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSzttQkFDdkMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTzt3QkFDM0IsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzs7O3dCQUlsQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPO21CQUNyQyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPOzBCQUMvQixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPOzs7Ozs7aUJBTXpDLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7Ozs7OztpQkFPbEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3lCQUMxQixTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ25DLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUk7OEJBQzdCLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU87MkJBQ3JDLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzs7OzRCQUd4QyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7dUNBQ3RFLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQXFCcEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSzt3QkFDbEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7a0NBWXhCLFVBQVUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsd0JBQXdCLENBQUM7Ozs7OztpQkFNdkYsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3lCQUMxQixTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ25DLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUk7OEJBQzdCLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU87MkJBQ3JDLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzs7Ozs0QkFJeEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO21CQUMxRixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTO3lCQUM1QixTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Ozs7MEJBSWpDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUs7bUJBQ3ZDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU87d0JBQzNCLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7Ozs7Ozs7O3dCQVNsQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7O3FDQUVyQixTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Ozs7Ozs7Ozs7Ozs7OztxQkFldkQsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUMvQixZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTOzhCQUNsQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPOzJCQUNyQyxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Ozs7OztpQkFNakQsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUMzQixTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Ozs7OztxQkFNckMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUMvQixZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJOzJCQUNoQyxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7OzRCQUV4QyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7OEJBQy9FLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU87aUJBQy9DLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt1Q0FDWixTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Ozs7Ozs7Ozs7Ozs7OzswQkFlcEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSzt3QkFDbEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzs7OzswQkFLaEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTzt3QkFDbEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUzs7Ozt3QkFJeEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzs7Ozs7OzBCQU9oQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPOzs7Ozs7Ozs7Ozs7MkJBWS9CLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7Ozs7Ozs7bUJBUTFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVM7Ozs7Ozs7OztpQkFTcEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzs7Ozs7OzJCQU94QixTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Ozs7O3dCQUs1QyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXOzs7d0JBR3RDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVE7Ozt3QkFHbkMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTzs7O3dCQUdsQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLOzs7d0JBR2hDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVc7Ozs7OzttQkFNM0MsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUzs7Ozs7OztxQkFPaEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO21CQUNwQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7Ozs7d0JBT25DLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzttQkFDdkMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7O3FCQUl0QyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7O21CQUVwQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7Ozt5QkFNbEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VCQXNCaEgsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzs7Ozs7Ozt1QkFRbEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzs7S0FHcEQ7U0FDRixDQUFBO1FBRU0sTUFBTTtZQUNYLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0QsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRTlDLE9BQU8sSUFBSSxDQUFBOzs7OztZQUtILGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtrQ0FDSixVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7OztXQUcvRCxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO2NBQzFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFBOzswQ0FFcEIsT0FBTyxDQUFDLGFBQWE7d0JBQ3ZDLE9BQU8sQ0FBQyxXQUFXOzthQUU5QixDQUFDO2tDQUNvQixVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7aUJBQ3pELGFBQWEsR0FBRyxDQUFDOztXQUV2QixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUE7O3dDQUVWLE9BQU8sQ0FBQyxhQUFhO3NCQUN2QyxPQUFPLENBQUMsV0FBVzs7V0FFOUIsQ0FBQzs7OztxQkFJUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7O2NBRWhELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsaUJBQWlCOzs7Ozs7O3lDQU9oQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUc7Ozs7Ozs7Ozs7Ozs7VUFhN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBOzs7Ozs7OzsyQkFRSCxJQUFJLENBQUMsVUFBVTsyQkFDZixDQUFDLENBQVEsRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsVUFBVSxHQUFJLENBQUMsQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztZQUN6RCxDQUFDOzs7O3lDQUlzQixJQUFJLENBQUMsY0FBYyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFOzJCQUMzRCxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Ozs7O2tCQUsvQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFBOzsyQ0FFTixJQUFJLENBQUMsY0FBYyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFOzZCQUM5RCxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7O3NCQUVoRCxRQUFROztpQkFFYixDQUFDOzs7eUNBR3VCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFOzJCQUNuRCxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDOztvQkFFaEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGVBQWU7Ozs7OzJCQUs3QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFOzs7Ozs7OzJCQU90QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFOzs7Ozs7O2tCQU9oQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7O2lCQUVwQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Ozs7a0JBSTFCLGFBQWEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7U0FJakQsQ0FBQyxDQUFDLENBQUMsRUFBRTs7S0FFVCxDQUFDO1FBQ0osQ0FBQztRQUVPLG1CQUFtQjtZQUN6QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNwQyxvQkFBb0I7Z0JBQ3BCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzdGLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekcsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztnQkFFRCx3QkFBd0I7Z0JBQ3hCLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxLQUFLLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzlFLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBRUQsd0JBQXdCO2dCQUN4QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDL0MsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztnQkFFRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVPLG1CQUFtQjtZQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM5QixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDckIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBRU8sYUFBYSxDQUFDLFNBQWlCO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUM1RCxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBRXJCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsa0JBQWtCLEVBQUU7b0JBQ3JELE1BQU0sRUFBRTt3QkFDTixTQUFTO3dCQUNULFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTt3QkFDMUIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztxQkFDdkU7b0JBQ0QsT0FBTyxFQUFFLElBQUk7b0JBQ2IsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1FBQ0gsQ0FBQztRQUVPLFNBQVM7WUFDZixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3BELGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDakMsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUVPLFVBQVU7WUFDaEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNwRCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2pDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFFTyxtQkFBbUI7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRTtnQkFDckQsTUFBTSxFQUFFO29CQUNOLGdCQUFnQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQ3ZFO2dCQUNELE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO1FBRU8saUJBQWlCO1lBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFFcEQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFBLHdFQUF3RSxDQUFDO1lBQ3RGLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQTs7NEJBRTFCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtpQkFDN0MsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzs7OztxQkFLaEMsT0FBTyxDQUFDLFFBQVE7bUJBQ2xCLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFO29CQUNoQyxDQUFDLENBQVEsRUFBRSxFQUFFO2dCQUNyQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7Ozs7b0NBSXlCLE9BQU8sQ0FBQyxXQUFXO1lBQzNDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTs2Q0FDTyxPQUFPLENBQUMsV0FBVztXQUNyRCxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7O3lDQUl5QixPQUFPLENBQUMsYUFBYTtxQ0FDekIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQzs7O0tBR3hFLENBQUMsRUFBRSxDQUFDO1FBQ1AsQ0FBQzs7WUEzbUJVLHVEQUEyQjs7Ozs7U0FBM0IsMkJBQTJCIn0=