@uptime.link/statuspage 1.0.73 → 1.1.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 +4096 -504
  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 +605 -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 +792 -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 +313 -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 +750 -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 +374 -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 +357 -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 +373 -63
  40. package/dist_ts_web/elements/upl-statuspage-statusmonth.d.ts +15 -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 +474 -100
  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 +80 -0
  57. package/dist_ts_web/styles/shared.styles.js +351 -0
  58. package/dist_watch/bundle.js +54534 -26433
  59. package/dist_watch/bundle.js.map +4 -4
  60. package/dist_watch/index.html +3 -10
  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 +526 -18
  71. package/ts_web/elements/upl-statuspage-footer.demo.ts +744 -0
  72. package/ts_web/elements/upl-statuspage-footer.ts +608 -30
  73. package/ts_web/elements/upl-statuspage-header.demo.ts +241 -0
  74. package/ts_web/elements/upl-statuspage-header.ts +220 -52
  75. package/ts_web/elements/upl-statuspage-incidents.demo.ts +1216 -0
  76. package/ts_web/elements/upl-statuspage-incidents.ts +649 -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 +306 -0
  81. package/ts_web/elements/upl-statuspage-statusbar.demo.ts +393 -0
  82. package/ts_web/elements/upl-statuspage-statusbar.ts +281 -20
  83. package/ts_web/elements/upl-statuspage-statusdetails.demo.ts +754 -0
  84. package/ts_web/elements/upl-statuspage-statusdetails.ts +297 -38
  85. package/ts_web/elements/upl-statuspage-statusmonth.demo.ts +876 -0
  86. package/ts_web/elements/upl-statuspage-statusmonth.ts +397 -76
  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 +367 -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
@@ -0,0 +1,351 @@
1
+ import { css, cssManager, unsafeCSS } from '@design.estate/dees-element';
2
+ export const fonts = {
3
+ base: `'Geist Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif`,
4
+ mono: `'Geist Mono', ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace`
5
+ };
6
+ export const colors = {
7
+ // Background colors
8
+ background: {
9
+ primary: cssManager.bdTheme('#ffffff', '#09090b'),
10
+ secondary: cssManager.bdTheme('#fafafa', '#18181b'),
11
+ muted: cssManager.bdTheme('#f4f4f5', '#27272a'),
12
+ card: cssManager.bdTheme('#ffffff', '#0f0f12'),
13
+ elevated: cssManager.bdTheme('#ffffff', '#1a1a1e')
14
+ },
15
+ // Border colors
16
+ border: {
17
+ default: cssManager.bdTheme('#e4e4e7', '#27272a'),
18
+ muted: cssManager.bdTheme('#f4f4f5', '#3f3f46'),
19
+ subtle: cssManager.bdTheme('#f0f0f2', '#1f1f23')
20
+ },
21
+ // Text colors
22
+ text: {
23
+ primary: cssManager.bdTheme('#09090b', '#fafafa'),
24
+ secondary: cssManager.bdTheme('#71717a', '#a1a1aa'),
25
+ muted: cssManager.bdTheme('#a1a1aa', '#71717a')
26
+ },
27
+ // Status colors - vibrant and accessible
28
+ status: {
29
+ operational: cssManager.bdTheme('#16a34a', '#22c55e'),
30
+ degraded: cssManager.bdTheme('#d97706', '#fbbf24'),
31
+ partial: cssManager.bdTheme('#dc2626', '#f87171'),
32
+ major: cssManager.bdTheme('#b91c1c', '#ef4444'),
33
+ maintenance: cssManager.bdTheme('#2563eb', '#60a5fa')
34
+ },
35
+ // Accent colors for interactive elements
36
+ accent: {
37
+ primary: cssManager.bdTheme('#09090b', '#fafafa'),
38
+ hover: cssManager.bdTheme('#18181b', '#e4e4e7'),
39
+ focus: cssManager.bdTheme('#3b82f6', '#60a5fa')
40
+ }
41
+ };
42
+ export const shadows = {
43
+ xs: '0 1px 2px 0 rgba(0, 0, 0, 0.03)',
44
+ sm: '0 1px 3px 0 rgba(0, 0, 0, 0.06), 0 1px 2px -1px rgba(0, 0, 0, 0.06)',
45
+ base: '0 4px 6px -1px rgba(0, 0, 0, 0.07), 0 2px 4px -2px rgba(0, 0, 0, 0.05)',
46
+ md: '0 6px 12px -2px rgba(0, 0, 0, 0.08), 0 3px 7px -3px rgba(0, 0, 0, 0.05)',
47
+ lg: '0 12px 24px -4px rgba(0, 0, 0, 0.1), 0 6px 12px -6px rgba(0, 0, 0, 0.05)',
48
+ xl: '0 24px 48px -12px rgba(0, 0, 0, 0.12), 0 12px 24px -12px rgba(0, 0, 0, 0.05)',
49
+ inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.04)',
50
+ glow: '0 0 20px -5px rgba(34, 197, 94, 0.3)'
51
+ };
52
+ export const borderRadius = {
53
+ xs: '3px',
54
+ sm: '4px',
55
+ base: '6px',
56
+ md: '8px',
57
+ lg: '12px',
58
+ xl: '16px',
59
+ '2xl': '24px',
60
+ full: '9999px'
61
+ };
62
+ export const spacing = {
63
+ xs: '4px',
64
+ sm: '8px',
65
+ md: '16px',
66
+ lg: '24px',
67
+ xl: '32px',
68
+ '2xl': '48px',
69
+ '3xl': '64px',
70
+ '4xl': '96px'
71
+ };
72
+ // Animation easings
73
+ export const easings = {
74
+ default: 'cubic-bezier(0.4, 0, 0.2, 1)',
75
+ smooth: 'cubic-bezier(0.4, 0, 0.6, 1)',
76
+ bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
77
+ snappy: 'cubic-bezier(0.2, 0, 0, 1)'
78
+ };
79
+ // Durations
80
+ export const durations = {
81
+ fast: '100ms',
82
+ normal: '200ms',
83
+ slow: '300ms',
84
+ slower: '500ms'
85
+ };
86
+ export const commonStyles = css `
87
+ /* Button styles */
88
+ .button {
89
+ display: inline-flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ font-family: ${unsafeCSS(fonts.base)};
93
+ font-size: 13px;
94
+ font-weight: 500;
95
+ height: 36px;
96
+ padding: 0 14px;
97
+ border-radius: ${unsafeCSS(borderRadius.base)};
98
+ border: 1px solid ${colors.border.default};
99
+ background: ${colors.background.primary};
100
+ color: ${colors.text.primary};
101
+ cursor: pointer;
102
+ user-select: none;
103
+ transition: all ${unsafeCSS(durations.normal)} ${unsafeCSS(easings.default)};
104
+ gap: 6px;
105
+ white-space: nowrap;
106
+ letter-spacing: -0.01em;
107
+ }
108
+
109
+ .button:hover {
110
+ background: ${colors.background.secondary};
111
+ border-color: ${cssManager.bdTheme('#d4d4d8', '#3f3f46')};
112
+ box-shadow: ${unsafeCSS(shadows.xs)};
113
+ }
114
+
115
+ .button:active {
116
+ transform: scale(0.98);
117
+ transition-duration: ${unsafeCSS(durations.fast)};
118
+ }
119
+
120
+ .button:focus-visible {
121
+ outline: 2px solid ${colors.accent.focus};
122
+ outline-offset: 2px;
123
+ }
124
+
125
+ .button.primary {
126
+ background: ${colors.accent.primary};
127
+ color: ${colors.background.primary};
128
+ border-color: transparent;
129
+ }
130
+
131
+ .button.primary:hover {
132
+ background: ${colors.accent.hover};
133
+ box-shadow: ${unsafeCSS(shadows.sm)};
134
+ }
135
+
136
+ .button.ghost {
137
+ background: transparent;
138
+ border-color: transparent;
139
+ }
140
+
141
+ .button.ghost:hover {
142
+ background: ${colors.background.muted};
143
+ }
144
+
145
+ .button.sm {
146
+ height: 32px;
147
+ padding: 0 12px;
148
+ font-size: 12px;
149
+ }
150
+
151
+ .button.lg {
152
+ height: 44px;
153
+ padding: 0 20px;
154
+ font-size: 15px;
155
+ }
156
+
157
+ /* Card styles */
158
+ .card {
159
+ background: ${colors.background.card};
160
+ border: 1px solid ${colors.border.default};
161
+ border-radius: ${unsafeCSS(borderRadius.lg)};
162
+ padding: ${unsafeCSS(spacing.lg)};
163
+ box-shadow: ${unsafeCSS(shadows.sm)};
164
+ transition: all ${unsafeCSS(durations.normal)} ${unsafeCSS(easings.default)};
165
+ }
166
+
167
+ .card:hover {
168
+ border-color: ${colors.border.muted};
169
+ box-shadow: ${unsafeCSS(shadows.base)};
170
+ }
171
+
172
+ .card.interactive {
173
+ cursor: pointer;
174
+ }
175
+
176
+ .card.interactive:hover {
177
+ transform: translateY(-2px);
178
+ box-shadow: ${unsafeCSS(shadows.md)};
179
+ }
180
+
181
+ /* Loading skeleton */
182
+ .skeleton {
183
+ background: ${cssManager.bdTheme('linear-gradient(90deg, #f4f4f5 0%, #e4e4e7 50%, #f4f4f5 100%)', 'linear-gradient(90deg, #18181b 0%, #27272a 50%, #18181b 100%)')};
184
+ background-size: 200% 100%;
185
+ animation: skeleton-loading 1.5s ease-in-out infinite;
186
+ border-radius: ${unsafeCSS(borderRadius.base)};
187
+ }
188
+
189
+ @keyframes skeleton-loading {
190
+ 0% { background-position: 200% 0; }
191
+ 100% { background-position: -200% 0; }
192
+ }
193
+
194
+ /* Pulse animation for status indicators */
195
+ @keyframes pulse {
196
+ 0%, 100% { opacity: 1; }
197
+ 50% { opacity: 0.5; }
198
+ }
199
+
200
+ /* Fade in animation */
201
+ @keyframes fadeIn {
202
+ from { opacity: 0; transform: translateY(4px); }
203
+ to { opacity: 1; transform: translateY(0); }
204
+ }
205
+
206
+ .fade-in {
207
+ animation: fadeIn ${unsafeCSS(durations.slow)} ${unsafeCSS(easings.default)} forwards;
208
+ }
209
+
210
+ /* Scale in animation */
211
+ @keyframes scaleIn {
212
+ from { opacity: 0; transform: scale(0.95); }
213
+ to { opacity: 1; transform: scale(1); }
214
+ }
215
+
216
+ .scale-in {
217
+ animation: scaleIn ${unsafeCSS(durations.slow)} ${unsafeCSS(easings.bounce)} forwards;
218
+ }
219
+
220
+ /* Container styles */
221
+ .container {
222
+ max-width: 1200px;
223
+ margin: 0 auto;
224
+ padding: 0 ${unsafeCSS(spacing.lg)};
225
+ }
226
+
227
+ /* Status pill */
228
+ .status-pill {
229
+ display: inline-flex;
230
+ align-items: center;
231
+ gap: 6px;
232
+ padding: 4px 10px;
233
+ border-radius: ${unsafeCSS(borderRadius.full)};
234
+ font-size: 12px;
235
+ font-weight: 500;
236
+ letter-spacing: 0.01em;
237
+ }
238
+
239
+ .status-pill .status-dot {
240
+ width: 6px;
241
+ height: 6px;
242
+ border-radius: 50%;
243
+ flex-shrink: 0;
244
+ }
245
+
246
+ .status-pill.operational {
247
+ background: ${cssManager.bdTheme('rgba(22, 163, 74, 0.1)', 'rgba(34, 197, 94, 0.15)')};
248
+ color: ${cssManager.bdTheme('#15803d', '#4ade80')};
249
+ }
250
+
251
+ .status-pill.operational .status-dot {
252
+ background: ${colors.status.operational};
253
+ }
254
+
255
+ .status-pill.degraded {
256
+ background: ${cssManager.bdTheme('rgba(217, 119, 6, 0.1)', 'rgba(251, 191, 36, 0.15)')};
257
+ color: ${cssManager.bdTheme('#b45309', '#fcd34d')};
258
+ }
259
+
260
+ .status-pill.degraded .status-dot {
261
+ background: ${colors.status.degraded};
262
+ }
263
+
264
+ .status-pill.partial_outage,
265
+ .status-pill.major_outage {
266
+ background: ${cssManager.bdTheme('rgba(220, 38, 38, 0.1)', 'rgba(248, 113, 113, 0.15)')};
267
+ color: ${cssManager.bdTheme('#b91c1c', '#fca5a5')};
268
+ }
269
+
270
+ .status-pill.partial_outage .status-dot,
271
+ .status-pill.major_outage .status-dot {
272
+ background: ${colors.status.major};
273
+ }
274
+
275
+ .status-pill.maintenance {
276
+ background: ${cssManager.bdTheme('rgba(37, 99, 235, 0.1)', 'rgba(96, 165, 250, 0.15)')};
277
+ color: ${cssManager.bdTheme('#1d4ed8', '#93c5fd')};
278
+ }
279
+
280
+ .status-pill.maintenance .status-dot {
281
+ background: ${colors.status.maintenance};
282
+ }
283
+
284
+ /* Responsive utilities */
285
+ @media (max-width: 1024px) {
286
+ .container {
287
+ padding: 0 ${unsafeCSS(spacing.md)};
288
+ }
289
+ }
290
+
291
+ @media (max-width: 640px) {
292
+ .container {
293
+ padding: 0 ${unsafeCSS(spacing.md)};
294
+ }
295
+
296
+ .button {
297
+ height: 40px;
298
+ padding: 0 16px;
299
+ }
300
+
301
+ .button.sm {
302
+ height: 36px;
303
+ }
304
+ }
305
+
306
+ /* Visually hidden (for accessibility) */
307
+ .sr-only {
308
+ position: absolute;
309
+ width: 1px;
310
+ height: 1px;
311
+ padding: 0;
312
+ margin: -1px;
313
+ overflow: hidden;
314
+ clip: rect(0, 0, 0, 0);
315
+ white-space: nowrap;
316
+ border: 0;
317
+ }
318
+ `;
319
+ export const getStatusColor = (status) => {
320
+ switch (status) {
321
+ case 'operational':
322
+ return colors.status.operational;
323
+ case 'degraded':
324
+ return colors.status.degraded;
325
+ case 'partial_outage':
326
+ return colors.status.partial;
327
+ case 'major_outage':
328
+ return colors.status.major;
329
+ case 'maintenance':
330
+ return colors.status.maintenance;
331
+ default:
332
+ return colors.text.secondary;
333
+ }
334
+ };
335
+ export const getStatusIcon = (status) => {
336
+ switch (status) {
337
+ case 'operational':
338
+ return '✓';
339
+ case 'degraded':
340
+ return '!';
341
+ case 'partial_outage':
342
+ return '⚠';
343
+ case 'major_outage':
344
+ return '✕';
345
+ case 'maintenance':
346
+ return '🔧';
347
+ default:
348
+ return '?';
349
+ }
350
+ };
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLnN0eWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9zdHlsZXMvc2hhcmVkLnN0eWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUc7SUFDbkIsSUFBSSxFQUFFLGlLQUFpSztJQUN2SyxJQUFJLEVBQUUsc0dBQXNHO0NBQzdHLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsb0JBQW9CO0lBQ3BCLFVBQVUsRUFBRTtRQUNWLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7UUFDakQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztRQUNuRCxLQUFLLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQy9DLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7UUFDOUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztLQUNuRDtJQUVELGdCQUFnQjtJQUNoQixNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQ2pELEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7UUFDL0MsTUFBTSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztLQUNqRDtJQUVELGNBQWM7SUFDZCxJQUFJLEVBQUU7UUFDSixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxD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