@jsenv/terminal-recorder 1.5.56 → 1.5.57

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.
@@ -2,17 +2,16 @@
2
2
  * cmd+K / ctrl+K on any dev-served page: the .html files the server serves, as a
3
3
  * tree one walks, filter as you type, Enter to go there.
4
4
  *
5
+ * The tree itself is not this file's: it is the page picker the dev server ships
6
+ * for everyone who has to ask "which page?" (see protocol_file/client/page_picker.js
7
+ * — the clients dashboard asks it too, to send another browser somewhere). What
8
+ * belongs here is the key, and what taking a row means in this tab.
9
+ *
5
10
  * cmd+E / ctrl+E is the other half of the same question: instead of going to a
6
11
  * page, open its file in the editor (the server does it, see
7
12
  * GET /.internal/open_file/*). Pressed on the page itself it opens the page one
8
13
  * is on; pressed inside the switcher it opens the row one is looking at.
9
14
  *
10
- * A tree rather than a list of paths, because the paths are mostly the same
11
- * path: folding every directory that holds a single thing turns
12
- * "packages/frontend/navi/src/layout/demos/…" repeated forty times into one
13
- * line holding forty files — and the packages become something one can see,
14
- * count and fold away rather than something to type.
15
- *
16
15
  * Injected into every page (see jsenv_plugin_page_switcher.js), which is why it
17
16
  * is careful about what it takes:
18
17
  * - the key is watched at the end of the bubble, on window, and a press that
@@ -23,832 +22,209 @@
23
22
  * reach it and it cannot reach the page's.
24
23
  */
25
24
 
26
- // Everything below lives in here rather than at the top level: this file is
27
- // injected as a classic script, where a top-level `const` becomes a global
28
- // lexical binding shared with every other script on the page — one named CSS
29
- // took window.CSS away from the whole page, one named setup collided with
30
- // another injected client. A function scope owes nothing to anybody.
31
- (() => {
32
- const PAGES_ENDPOINT = "/.internal/pages.json";
33
- // The server asks the OS to open a file in whatever editor is configured
34
- // (VSCode here) — it takes a file url, which is why the page list carries one
35
- // per page (see html_pages.js).
36
- const OPEN_FILE_ENDPOINT = "/.internal/open_file/";
37
- const STORAGE_KEY = "jsenv_page_switcher";
38
- // Open across a reload: this is a dev tool on a page one is editing, and a hot
39
- // reload in the middle of looking for the next page should not close what one
40
- // was looking at. In sessionStorage, not localStorage: it says what THIS tab was
41
- // doing a second ago, which is not something to remember tomorrow.
42
- const OPEN_KEY = "jsenv_page_switcher_open";
43
- // What kind of page it is, as the server reads it from where the file sits and
44
- // what it is called (see html_pages.js): something tried out, something shown,
45
- // or a page like any other.
46
- const KINDS = [
47
- { id: "demo", icon: "🎬", label: "demos" },
48
- { id: "experiment", icon: "🧪", label: "experiments" },
49
- { id: "page", icon: "📄", label: "pages" },
50
- ];
51
- // Demos alone to begin with: they are what one comes here for nine times out of
52
- // ten, and a tree opening on five hundred files is a tree nobody reads. The
53
- // other two are one click away, and the choice is remembered.
54
- const DEFAULT_KIND_STATE = { demo: true, experiment: false, page: false };
55
-
56
- // The page this script is running in, as the list spells its urls (see
57
- // html_pages.js: "/" + the path from the root). Decoded, because a name with a
58
- // space or an accent reaches location.pathname percent-encoded and would never
59
- // match the list.
60
- const currentPageUrl = () => {
61
- try {
62
- return decodeURIComponent(window.location.pathname);
63
- } catch {
64
- return window.location.pathname;
65
- }
66
- };
67
-
68
- // cmd on mac, ctrl elsewhere — the same split every editor makes.
69
- const isCommandKey = (event) =>
70
- window.navigator.platform.toLowerCase().includes("mac")
71
- ? event.metaKey && !event.ctrlKey
72
- : event.ctrlKey && !event.metaKey;
73
-
74
- const isSwitcherKey = (event) =>
75
- (event.key === "k" || event.key === "K") && isCommandKey(event);
76
- // E for edit, next to K for the same reason the two belong together: K asks
77
- // "which page", E asks "where does this page live". Outside the switcher it
78
- // means the page one is on; inside it, the row one is looking at — so the
79
- // same press reads the same way in both places.
80
- const isEditorKey = (event) =>
81
- (event.key === "e" || event.key === "E") && isCommandKey(event);
82
-
83
- const STYLE_TEXT = /* css */ `
84
- :host {
85
- position: fixed;
86
- inset: 0;
87
- z-index: 2147483647;
88
- display: block;
89
- font-family: system-ui, sans-serif;
90
- }
91
- .backdrop {
92
- position: absolute;
93
- inset: 0;
94
- background: rgba(15, 23, 42, 0.45);
95
- }
96
- .panel {
97
- position: absolute;
98
- top: 10vh;
99
- left: 50%;
100
- display: flex;
101
- width: min(640px, calc(100vw - 32px));
102
- max-height: 70vh;
103
- flex-direction: column;
104
- color: light-dark(#0f172a, #e2e8f0);
105
- background: light-dark(white, #1e293b);
106
- border-radius: 10px;
107
- box-shadow: 0 24px 60px rgba(0, 0, 0, 0.35);
108
- color-scheme: light dark;
109
- translate: -50% 0;
110
- overflow: hidden;
111
- }
112
- input {
113
- padding: 14px 16px;
114
- color: inherit;
115
- font-size: 15px;
116
- font-family: inherit;
117
- background: transparent;
118
- border: none;
119
- outline: none;
120
- }
121
- .kinds {
122
- display: flex;
123
- padding: 0 12px 10px;
124
- gap: 6px;
125
- border-bottom: 1px solid light-dark(#e2e8f0, #334155);
126
- }
127
- .kind_toggle {
128
- display: flex;
129
- padding: 4px 9px;
130
- align-items: center;
131
- gap: 5px;
132
- color: light-dark(#475569, #cbd5e1);
133
- font-size: 12px;
134
- font-family: inherit;
135
- background: light-dark(#f1f5f9, #0f172a);
136
- border: 1px solid transparent;
137
- border-radius: 999px;
138
- cursor: pointer;
139
- }
140
- .kind_toggle[data-on] {
141
- color: light-dark(#1d4ed8, #bfdbfe);
142
- background: light-dark(#dbeafe, #1e3a8a);
143
- border-color: light-dark(#93c5fd, #3b82f6);
144
- }
145
- .kind_toggle .count {
146
- margin: 0;
147
- padding: 0;
148
- opacity: 0.7;
149
- }
150
- ul {
151
- margin: 0;
152
- padding: 6px;
153
- list-style: none;
154
- overflow-y: auto;
155
- }
156
- li {
157
- display: flex;
158
- padding: 5px 8px;
159
- align-items: center;
160
- gap: 6px;
161
- font-size: 13px;
162
- font-family: ui-monospace, monospace;
163
- white-space: nowrap;
164
- border-radius: 6px;
165
- cursor: pointer;
166
- }
167
- /* A file IS a link — an href, so cmd/ctrl+click opens it in a tab and the
168
- browser's own menu offers the rest. It fills its row so the whole line
169
- stays the target. */
170
- li > a {
171
- display: flex;
172
- min-width: 0;
173
- flex: 1;
174
- align-items: center;
175
- gap: 6px;
176
- color: inherit;
177
- text-decoration: none;
178
- }
179
- /* The page one is already on, so a switcher opened blind says where it was
180
- opened from. Under the selection rule below, which must win when the two
181
- are the same row. */
182
- li[data-here] {
183
- background: light-dark(#eff6ff, #172554);
184
- }
185
- li[data-here] .strong {
186
- color: light-dark(#1d4ed8, #93c5fd);
187
- }
188
- li[data-current] {
189
- color: white;
190
- background: light-dark(#2563eb, #3b82f6);
191
- }
192
- /* Selected AND the page one is on: the selection owns the row's colours,
193
- accents included, or the name would be dark blue on blue. */
194
- li[data-current] .strong {
195
- color: inherit;
196
- }
197
- li[data-current] .dim,
198
- li[data-current] .count {
199
- color: inherit;
200
- opacity: 0.85;
201
- }
202
- .twisty {
203
- width: 1em;
204
- flex: none;
205
- opacity: 0.6;
206
- }
207
- .kind_icon {
208
- width: 1.2em;
209
- flex: none;
210
- font-size: 12px;
211
- }
212
- /* The name is what one reads; the road to it is context — grey, but grey one
213
- can still read: on the dark panel #64748b sat barely above the background. */
214
- .dim {
215
- color: light-dark(#94a3b8, #94a3b8);
216
- }
217
- .strong {
218
- font-weight: 600;
219
- }
220
- .here {
221
- margin-left: auto;
222
- padding-left: 8px;
223
- color: light-dark(#1d4ed8, #93c5fd);
224
- font-size: 11px;
225
- text-transform: uppercase;
226
- letter-spacing: 0.04em;
227
- }
228
- li[data-current] .here {
229
- color: inherit;
230
- opacity: 0.85;
231
- }
232
- .count {
233
- margin-left: auto;
234
- padding-left: 8px;
235
- color: light-dark(#94a3b8, #94a3b8);
236
- font-size: 11px;
237
- font-variant-numeric: tabular-nums;
238
- }
239
- .empty {
240
- padding: 14px 16px;
241
- color: light-dark(#64748b, #94a3b8);
242
- font-size: 13px;
243
- cursor: default;
244
- }
245
- `;
246
-
247
- const FLASH_STYLE_TEXT = /* css */ `
248
- :host {
249
- position: fixed;
250
- right: 16px;
251
- bottom: 16px;
252
- /* Above the switcher's own panel: it is the switcher that triggers it. */
253
- z-index: 2147483647;
254
- display: block;
255
- font-family: system-ui, sans-serif;
256
- pointer-events: none;
257
- }
258
- .flash {
259
- padding: 8px 14px;
260
- color: light-dark(#0f172a, #e2e8f0);
261
- font-size: 13px;
262
- background: light-dark(white, #1e293b);
263
- border-radius: 8px;
264
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
265
- color-scheme: light dark;
266
- }
267
- .flash[data-error] {
268
- color: light-dark(#991b1b, #fecaca);
269
- background: light-dark(#fee2e2, #7f1d1d);
270
- }
271
- `;
272
-
273
- let pagesPromise = null;
274
- const loadPages = () => {
275
- // Once per page load: the list is a filesystem scan behind a short cache
276
- // server-side, and a switcher opened twice in a row is the same list.
277
- pagesPromise ||= fetch(PAGES_ENDPOINT)
278
- .then((response) => response.json())
279
- .catch(() => []);
280
- return pagesPromise;
281
- };
282
-
283
- // Opening a file in an editor happens in another application, on another
284
- // screen sometimes: without a word here, a press that failed and a press that
285
- // worked look exactly the same. Its own host and its own shadow root, so it
286
- // can be shown whether or not the switcher is open.
287
- let flashHost = null;
288
- let flashBox = null;
289
- let flashTimeout = null;
290
- const flash = (message, isError) => {
291
- if (!flashHost) {
292
- flashHost = document.createElement("div");
293
- const shadow = flashHost.attachShadow({ mode: "open" });
294
- const style = document.createElement("style");
295
- style.textContent = FLASH_STYLE_TEXT;
296
- flashBox = document.createElement("div");
297
- flashBox.className = "flash";
298
- shadow.append(style, flashBox);
299
- }
300
- flashBox.textContent = message;
301
- flashBox.toggleAttribute("data-error", Boolean(isError));
302
- // Appended last every time, so it sits above the switcher's host when both
303
- // are on the page and they share the same z-index.
304
- document.body.append(flashHost);
305
- window.clearTimeout(flashTimeout);
306
- flashTimeout = window.setTimeout(() => flashHost.remove(), 2500);
307
- };
308
-
309
- const openInEditor = async (file) => {
310
- if (!file || !file.fileUrl) {
311
- flash("This page is not a file the server lists.", true);
312
- return;
313
- }
314
- flash(`Opening ${file.name || file.url} in editor…`);
315
- try {
316
- const response = await fetch(
317
- `${OPEN_FILE_ENDPOINT}${encodeURIComponent(file.fileUrl)}`,
318
- );
319
- if (response.status === 404) {
320
- // The route exists only when the server is willing to expose the
321
- // machine it runs on (see start_server.js).
322
- flash("This server does not open files in an editor.", true);
323
- } else if (!response.ok) {
324
- flash(`Editor said no (${response.status}).`, true);
325
- }
326
- } catch {
327
- flash("Could not reach the dev server.", true);
328
- }
329
- };
330
-
331
- const readStoredState = () => {
332
- try {
333
- const stored = JSON.parse(
334
- window.localStorage.getItem(STORAGE_KEY) || "{}",
335
- );
336
- return {
337
- kinds: { ...DEFAULT_KIND_STATE, ...stored.kinds },
338
- // What was folded AWAY is what is remembered, not what was opened: a
339
- // directory that appears later (a new package, a new demos/) is open like
340
- // everything else rather than hidden by a memory that predates it.
341
- collapsed: new Set(
342
- Array.isArray(stored.collapsed) ? stored.collapsed : [],
343
- ),
344
- };
345
- } catch {
346
- return { kinds: { ...DEFAULT_KIND_STATE }, collapsed: new Set() };
347
- }
348
- };
349
- const writeStoredState = (state) => {
350
- try {
351
- window.localStorage.setItem(
352
- STORAGE_KEY,
353
- JSON.stringify({ kinds: state.kinds, collapsed: [...state.collapsed] }),
354
- );
355
- } catch {
356
- // private mode, quota — the switcher works, it just forgets
357
- }
358
- };
359
-
360
- /*
361
- * The tree, built from the paths and folded where folding loses nothing: a
362
- * directory holding a single directory and no file of its own is merged with
363
- * it, so one line reads "docs/users/b_dev/" instead of three. What is left is
364
- * the shape of the choices there are to make.
365
- */
366
- const buildTree = (pages) => {
367
- const root = { segments: [], path: "", directories: new Map(), files: [] };
368
- // The directories that ARE a package (the server found the package.json, see
369
- // html_pages.js): in a monorepo that is what one is looking for, so it is
370
- // written plainly while the rest of the road stays grey.
371
- const packagePathSet = new Set(
372
- pages.map((page) => page.packageUrl).filter(Boolean),
25
+ import {
26
+ asPageUrl,
27
+ isEditorKey,
28
+ isCommandKey,
29
+ loadPages,
30
+ openPagePicker,
31
+ } from "/@fs/Users/dmail/Documents/dev/jsenv/core/src/plugins/protocol_file/client/page_picker.js";
32
+
33
+ // The server asks the OS to open a file in whatever editor is configured
34
+ // (VSCode here) — it takes a file url, which is why the page list carries one
35
+ // per page (see html_pages.js).
36
+ const OPEN_FILE_ENDPOINT = "/.internal/open_file/";
37
+ // Open across a reload: this is a dev tool on a page one is editing, and a hot
38
+ // reload in the middle of looking for the next page should not close what one
39
+ // was looking at. In sessionStorage, not localStorage: it says what THIS tab was
40
+ // doing a second ago, which is not something to remember tomorrow.
41
+ const OPEN_KEY = "jsenv_page_switcher_open";
42
+
43
+ // The page this script is running in, as the list spells its urls.
44
+ const currentPageUrl = () => asPageUrl(window.location.href);
45
+
46
+ const isSwitcherKey = (event) =>
47
+ (event.key === "k" || event.key === "K") && isCommandKey(event);
48
+
49
+ const FLASH_STYLE_TEXT = /* css */ `
50
+ :host {
51
+ position: fixed;
52
+ right: 16px;
53
+ bottom: 16px;
54
+ /* Above the picker's own panel: it is the switcher that triggers it. */
55
+ z-index: 2147483647;
56
+ display: block;
57
+ font-family: system-ui, sans-serif;
58
+ pointer-events: none;
59
+ }
60
+ .flash {
61
+ padding: 8px 14px;
62
+ color: light-dark(#0f172a, #e2e8f0);
63
+ font-size: 13px;
64
+ background: light-dark(white, #1e293b);
65
+ border-radius: 8px;
66
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
67
+ color-scheme: light dark;
68
+ }
69
+ .flash[data-error] {
70
+ color: light-dark(#991b1b, #fecaca);
71
+ background: light-dark(#fee2e2, #7f1d1d);
72
+ }
73
+ `;
74
+
75
+ // Opening a file in an editor happens in another application, on another
76
+ // screen sometimes: without a word here, a press that failed and a press that
77
+ // worked look exactly the same. Its own host and its own shadow root, so it
78
+ // can be shown whether or not the switcher is open.
79
+ let flashHost = null;
80
+ let flashBox = null;
81
+ let flashTimeout = null;
82
+ const flash = (message, isError) => {
83
+ if (!flashHost) {
84
+ flashHost = document.createElement("div");
85
+ const shadow = flashHost.attachShadow({ mode: "open" });
86
+ const style = document.createElement("style");
87
+ style.textContent = FLASH_STYLE_TEXT;
88
+ flashBox = document.createElement("div");
89
+ flashBox.className = "flash";
90
+ shadow.append(style, flashBox);
91
+ }
92
+ flashBox.textContent = message;
93
+ flashBox.toggleAttribute("data-error", Boolean(isError));
94
+ // Appended last every time, so it sits above the picker's host when both
95
+ // are on the page and they share the same z-index.
96
+ document.body.append(flashHost);
97
+ window.clearTimeout(flashTimeout);
98
+ flashTimeout = window.setTimeout(() => flashHost.remove(), 2500);
99
+ };
100
+
101
+ const openInEditor = async (file) => {
102
+ if (!file || !file.fileUrl) {
103
+ flash("This page is not a file the server lists.", true);
104
+ return;
105
+ }
106
+ flash(`Opening ${file.name || file.url} in editor…`);
107
+ try {
108
+ const response = await fetch(
109
+ `${OPEN_FILE_ENDPOINT}${encodeURIComponent(file.fileUrl)}`,
373
110
  );
374
- for (const page of pages) {
375
- const segments = page.url.split("/").filter(Boolean);
376
- const fileName = segments.pop();
377
- let node = root;
378
- for (const segment of segments) {
379
- let child = node.directories.get(segment);
380
- if (!child) {
381
- const path = `${node.path}/${segment}`;
382
- child = {
383
- // Segment by segment rather than one string: folding glues several
384
- // directories into one row, and only the one that IS a package is
385
- // written plainly (see renderRow).
386
- segments: [{ name: segment, isPackage: packagePathSet.has(path) }],
387
- path,
388
- directories: new Map(),
389
- files: [],
390
- };
391
- node.directories.set(segment, child);
392
- }
393
- node = child;
394
- }
395
- node.files.push({ ...page, name: fileName });
396
- }
397
-
398
- const fold = (node) => {
399
- for (const child of node.directories.values()) {
400
- fold(child);
401
- }
402
- // Nothing of its own and a single way down: the two are one step.
403
- while (node.files.length === 0 && node.directories.size === 1) {
404
- const [only] = node.directories.values();
405
- node.segments = [...node.segments, ...only.segments];
406
- node.path = only.path;
407
- node.directories = only.directories;
408
- node.files = only.files;
409
- }
410
- node.files.sort((a, b) => a.name.localeCompare(b.name));
411
- return node;
412
- };
413
- return fold(root);
414
- };
415
-
416
- // The whole of a folded row, for sorting and nothing else.
417
- const nodeName = (node) =>
418
- node.segments.map((segment) => segment.name).join("/");
419
-
420
- // What is left of a node once the filters have had their say — used both to
421
- // decide whether to draw it and to say how much is under it.
422
- const countMatches = (node, matches) => {
423
- let count = 0;
424
- for (const file of node.files) {
425
- if (matches(file)) {
426
- count++;
427
- }
428
- }
429
- for (const child of node.directories.values()) {
430
- count += countMatches(child, matches);
431
- }
432
- return count;
433
- };
111
+ if (response.status === 404) {
112
+ // The route exists only when the server is willing to expose the
113
+ // machine it runs on (see start_server.js).
114
+ flash("This server does not open files in an editor.", true);
115
+ } else if (!response.ok) {
116
+ flash(`Editor said no (${response.status}).`, true);
117
+ }
118
+ } catch {
119
+ flash("Could not reach the dev server.", true);
120
+ }
121
+ };
434
122
 
435
- // The road down to a file, as node paths — what has to be open for that file
436
- // to be a row at all.
437
- const pathTo = (node, matches, trail = []) => {
438
- if (node.files.some(matches)) {
439
- return trail;
440
- }
441
- for (const child of node.directories.values()) {
442
- const found = pathTo(child, matches, [...trail, child.path]);
443
- if (found) {
444
- return found;
445
- }
123
+ const rememberOpen = (isOpen) => {
124
+ try {
125
+ if (isOpen) {
126
+ window.sessionStorage.setItem(OPEN_KEY, "1");
127
+ } else {
128
+ window.sessionStorage.removeItem(OPEN_KEY);
446
129
  }
447
- return null;
448
- };
130
+ } catch {
131
+ // private mode, quota — it just will not come back
132
+ }
133
+ };
134
+ const wasOpen = () => {
135
+ try {
136
+ return window.sessionStorage.getItem(OPEN_KEY) === "1";
137
+ } catch {
138
+ return false;
139
+ }
140
+ };
449
141
 
450
- const rememberOpen = (isOpen) => {
451
- try {
452
- if (isOpen) {
453
- window.sessionStorage.setItem(OPEN_KEY, "1");
454
- } else {
455
- window.sessionStorage.removeItem(OPEN_KEY);
456
- }
457
- } catch {
458
- // private mode, quota — it just will not come back
459
- }
460
- };
461
- const wasOpen = () => {
462
- try {
463
- return window.sessionStorage.getItem(OPEN_KEY) === "1";
464
- } catch {
465
- return false;
466
- }
467
- };
142
+ let picker = null;
468
143
 
469
- let open = null;
144
+ // The same key opens it and puts it away: pressed while it is up, cmd+K is the
145
+ // reader saying "not this, back to what I was doing".
146
+ const toggleSwitcher = () => {
147
+ if (picker) {
148
+ picker.close();
149
+ return;
150
+ }
151
+ openSwitcher();
152
+ };
470
153
 
471
- const openSwitcher = async () => {
472
- if (open) {
473
- open.input.select();
474
- return;
475
- }
476
- const state = readStoredState();
477
- const host = document.createElement("div");
478
- const shadow = host.attachShadow({ mode: "open" });
479
- const style = document.createElement("style");
480
- style.textContent = STYLE_TEXT;
481
- const backdrop = document.createElement("div");
482
- backdrop.className = "backdrop";
483
- const panel = document.createElement("div");
484
- panel.className = "panel";
485
- const input = document.createElement("input");
486
- input.type = "search";
154
+ const openSwitcher = () => {
155
+ picker = openPagePicker({
487
156
  // The other key is written where one is already looking: a shortcut nobody
488
157
  // is told about is a shortcut nobody presses. Both names, not the one this
489
158
  // platform uses — the reader knows which of the two their keyboard has, and
490
159
  // it keeps what the panel says the same everywhere.
491
- input.placeholder = "Go to page… (cmd/ctrl+E to open in editor)";
492
- input.setAttribute("aria-label", "Go to page");
493
- const kindsRow = document.createElement("div");
494
- kindsRow.className = "kinds";
495
- const list = document.createElement("ul");
496
- panel.append(input, kindsRow, list);
497
- shadow.append(style, backdrop, panel);
498
- document.body.append(host);
499
-
500
- const focusedBefore = document.activeElement;
501
- let tree = null;
502
- // The rows as drawn, in order: what ↑/↓ walks and what Enter acts on.
503
- let rows = [];
504
- let currentIndex = 0;
505
- const here = currentPageUrl();
506
- const isHere = (file) => file.url === here;
507
- // Folded away, but holding the page one is on: opened for this session only
508
- // and never written down — what the reader folded is still what they folded
509
- // the next time they come here from somewhere else.
510
- const revealed = new Set();
511
-
512
- const close = () => {
513
- open = null;
160
+ placeholder: "Go to page… (cmd/ctrl+E to open in editor)",
161
+ hereUrl: window.location.href,
162
+ // Going there is something this browser can do, so a row is a link: its
163
+ // menu, its middle click and its cmd+click all work.
164
+ getHref: (page) => page.url,
165
+ onPick: (page) => {
166
+ // Going somewhere is done with it: what reopens across a reload is a
167
+ // switcher one was still using.
514
168
  rememberOpen(false);
515
- host.remove();
516
- document.removeEventListener("keydown", onKeyDown, true);
517
- if (focusedBefore && focusedBefore.isConnected) {
518
- focusedBefore.focus();
519
- }
520
- };
521
- const searchNeedle = () => input.value.trim().toLowerCase();
522
- const matchesText = (file) => {
523
- const needle = searchNeedle();
524
- return needle ? file.url.toLowerCase().includes(needle) : true;
525
- };
526
- const matchesFilters = (file) =>
527
- state.kinds[file.kind] && matchesText(file);
528
- const toggleCollapsed = (path) => {
529
- if (state.collapsed.has(path)) {
530
- state.collapsed.delete(path);
531
- } else {
532
- state.collapsed.add(path);
533
- }
534
- writeStoredState(state);
535
- render();
536
- };
537
- const activate = (row) => {
538
- if (!row) {
539
- return;
540
- }
541
- if (row.type === "file") {
542
- // Going somewhere is done with it: what reopens across a reload is a
543
- // switcher one was still using.
544
- rememberOpen(false);
545
- window.location.href = row.file.url;
546
- return;
547
- }
548
- toggleCollapsed(row.node.path);
549
- };
550
-
551
- const renderKinds = () => {
552
- kindsRow.textContent = "";
553
- for (const kind of KINDS) {
554
- const button = document.createElement("button");
555
- button.type = "button";
556
- button.className = "kind_toggle";
557
- if (state.kinds[kind.id]) {
558
- button.setAttribute("data-on", "");
559
- }
560
- const label = document.createElement("span");
561
- label.textContent = `${kind.icon} ${kind.label}`;
562
- const count = document.createElement("span");
563
- count.className = "count";
564
- // How many there would be, not how many there are: a count that answered
565
- // to its own toggle would read 0 for everything switched off.
566
- count.textContent = tree
567
- ? countMatches(
568
- tree,
569
- (file) => file.kind === kind.id && matchesText(file),
570
- )
571
- : 0;
572
- button.append(label, count);
573
- button.addEventListener("mousedown", (event) => {
574
- event.preventDefault();
575
- state.kinds[kind.id] = !state.kinds[kind.id];
576
- writeStoredState(state);
577
- render();
578
- });
579
- kindsRow.append(button);
580
- }
581
- };
582
-
583
- const buildRows = () => {
584
- const nextRows = [];
585
- // While something is typed the tree opens itself: what one is looking at is
586
- // the matches, not the folders that happen to hold them.
587
- const searching = searchNeedle() !== "";
588
- const walk = (node, depth) => {
589
- const directories = [...node.directories.values()].sort((a, b) =>
590
- nodeName(a).localeCompare(nodeName(b)),
591
- );
592
- for (const child of directories) {
593
- const count = countMatches(child, matchesFilters);
594
- if (count === 0) {
595
- continue;
596
- }
597
- const collapsed =
598
- !searching &&
599
- state.collapsed.has(child.path) &&
600
- !revealed.has(child.path);
601
- nextRows.push({
602
- type: "directory",
603
- node: child,
604
- depth,
605
- count,
606
- collapsed,
607
- });
608
- if (!collapsed) {
609
- walk(child, depth + 1);
610
- }
611
- }
612
- for (const file of node.files) {
613
- if (matchesFilters(file)) {
614
- nextRows.push({ type: "file", file, depth });
615
- }
616
- }
617
- };
618
- walk(tree, 0);
619
- return nextRows;
620
- };
621
-
622
- const renderRow = (row, index) => {
623
- const item = document.createElement("li");
624
- item.style.paddingLeft = `${8 + row.depth * 14}px`;
625
- if (index === currentIndex) {
626
- item.setAttribute("data-current", "");
627
- }
628
- if (row.type === "directory") {
629
- const twisty = document.createElement("span");
630
- twisty.className = "twisty";
631
- twisty.textContent = row.collapsed ? "▸" : "▾";
632
- // One box for the whole path, so the row's own gap does not fall between
633
- // two halves of the same name.
634
- const path = document.createElement("span");
635
- for (const segment of row.node.segments) {
636
- const name = document.createElement("span");
637
- name.className = segment.isPackage ? "strong" : "dim";
638
- name.textContent = `${segment.name}/`;
639
- path.append(name);
640
- }
641
- item.append(twisty, path);
642
- const count = document.createElement("span");
643
- count.className = "count";
644
- count.textContent = row.count;
645
- item.append(count);
646
- } else {
647
- const link = document.createElement("a");
648
- link.href = row.file.url;
649
- const icon = document.createElement("span");
650
- icon.className = "kind_icon";
651
- icon.textContent =
652
- KINDS.find((kind) => kind.id === row.file.kind)?.icon || "📄";
653
- icon.title = row.file.kind;
654
- const name = document.createElement("span");
655
- name.className = "strong";
656
- name.textContent = row.file.name;
657
- link.append(icon, name);
658
- if (isHere(row.file)) {
659
- item.setAttribute("data-here", "");
660
- const hereLabel = document.createElement("span");
661
- hereLabel.className = "here";
662
- hereLabel.textContent = "here";
663
- link.append(hereLabel);
664
- }
665
- item.append(link);
666
- link.addEventListener("click", (event) => {
667
- currentIndex = index;
668
- // Anything but a plain left click is the browser's business — a new
669
- // tab, a new window, a download: the switcher stays exactly as it is,
670
- // still open, for the next one.
671
- if (
672
- event.button !== 0 ||
673
- event.metaKey ||
674
- event.ctrlKey ||
675
- event.shiftKey ||
676
- event.altKey
677
- ) {
678
- return;
679
- }
680
- // Going somewhere is done with it (see activate) — and the link does
681
- // the going, so nothing here has to touch location.
682
- rememberOpen(false);
683
- });
684
- return item;
685
- }
686
- item.addEventListener("mousedown", (event) => {
687
- event.preventDefault();
688
- currentIndex = index;
689
- activate(row);
690
- });
691
- return item;
692
- };
693
-
694
- const render = () => {
695
- renderKinds();
696
- rows = buildRows();
697
- if (currentIndex >= rows.length) {
698
- currentIndex = 0;
699
- }
700
- list.textContent = "";
701
- if (rows.length === 0) {
702
- const empty = document.createElement("li");
703
- empty.className = "empty";
704
- empty.textContent = "Nothing matches.";
705
- list.append(empty);
706
- return;
707
- }
708
- for (const [index, row] of rows.entries()) {
709
- list.append(renderRow(row, index));
710
- }
711
- };
712
- const moveCurrent = (delta) => {
713
- if (rows.length === 0) {
714
- return;
715
- }
716
- currentIndex = (currentIndex + delta + rows.length) % rows.length;
717
- render();
718
- list.children[currentIndex]?.scrollIntoView({ block: "nearest" });
719
- };
720
-
721
- // In the capture phase, and on the document: while this is open it IS the
722
- // page as far as the keyboard goes, and whatever the page below listens for
723
- // must not answer at the same time.
724
- function onKeyDown(event) {
725
- const stop = () => {
726
- event.preventDefault();
727
- event.stopPropagation();
728
- };
729
- if (event.key === "Escape") {
730
- stop();
731
- close();
732
- return;
733
- }
734
- if (event.key === "Enter") {
735
- stop();
736
- activate(rows[currentIndex]);
737
- return;
738
- }
739
- if (event.key === "ArrowDown" || event.key === "ArrowUp") {
740
- stop();
741
- moveCurrent(event.key === "ArrowDown" ? 1 : -1);
742
- return;
743
- }
744
- if (event.key === "ArrowRight" || event.key === "ArrowLeft") {
745
- const row = rows[currentIndex];
746
- // A file has nothing to fold, and a folder already the right way round
747
- // has nothing to do: the caret keeps the key in both cases.
748
- if (!row || row.type !== "directory") {
749
- return;
750
- }
751
- const wantCollapsed = event.key === "ArrowLeft";
752
- if (row.collapsed === wantCollapsed) {
753
- return;
754
- }
755
- stop();
756
- toggleCollapsed(row.node.path);
757
- return;
758
- }
759
- if (isEditorKey(event)) {
760
- // Taken whatever the row is: let go of on a directory it would reach
761
- // the page below and open the page one came from, which is not what a
762
- // key pressed inside an open switcher can be asking for.
763
- stop();
764
- const row = rows[currentIndex];
765
- if (!row || row.type !== "file") {
766
- return;
767
- }
768
- // Done with the switcher: the answer to "where does this live" arrives
769
- // in the editor, not here.
770
- close();
771
- openInEditor(row.file);
772
- return;
773
- }
774
- if (isSwitcherKey(event)) {
775
- stop();
776
- close();
777
- }
778
- }
779
- document.addEventListener("keydown", onKeyDown, true);
780
- backdrop.addEventListener("mousedown", close);
781
-
782
- open = { input, close };
783
- rememberOpen(true);
784
- input.focus();
785
-
786
- const pages = await loadPages();
787
- if (!open) {
788
- return; // closed while the list was still coming
169
+ window.location.href = page.url;
170
+ },
171
+ onEdit: (page) => {
172
+ // Done with the switcher: the answer to "where does this live" arrives
173
+ // in the editor, not here.
174
+ rememberOpen(false);
175
+ openInEditor(page);
176
+ },
177
+ onClose: () => {
178
+ picker = null;
179
+ rememberOpen(false);
180
+ },
181
+ });
182
+ rememberOpen(true);
183
+ };
184
+
185
+ // The page one is looking at, in the editor. The list is where the file url
186
+ // comes from, so a page the server does not list (an @fs url, something under
187
+ // node_modules) says so rather than opening the wrong thing.
188
+ const openCurrentPageInEditor = async () => {
189
+ const here = currentPageUrl();
190
+ const pages = await loadPages();
191
+ const page = pages.find((candidate) => candidate.url === here);
192
+ openInEditor(page && { ...page, name: here.split("/").pop() });
193
+ };
194
+
195
+ // Last in line, on purpose: on window (the end of the bubble), and registered
196
+ // once the page has loaded — so every listener the page set up while parsing is
197
+ // already in place and has already had this press. If any of them called
198
+ // preventDefault, the key was theirs and nothing happens here.
199
+ const listenSwitcherKey = () => {
200
+ window.addEventListener("keydown", (event) => {
201
+ if (event.defaultPrevented) {
202
+ return;
789
203
  }
790
- tree = buildTree(pages);
791
- // Opened on the page one is on: it is selected and scrolled to, so the list
792
- // starts from where the reader already is rather than from the top of a
793
- // tree they then have to find themselves in.
794
- for (const path of pathTo(tree, isHere) || []) {
795
- revealed.add(path);
204
+ if (isSwitcherKey(event)) {
205
+ // Ours now: the browser has its own use for cmd+K (the address bar),
206
+ // which it must not get.
207
+ event.preventDefault();
208
+ toggleSwitcher();
209
+ return;
796
210
  }
797
- render();
798
- const hereIndex = rows.findIndex(
799
- (row) => row.type === "file" && isHere(row.file),
800
- );
801
- if (hereIndex !== -1) {
802
- currentIndex = hereIndex;
803
- render();
804
- list.children[currentIndex]?.scrollIntoView({ block: "center" });
211
+ if (isEditorKey(event)) {
212
+ event.preventDefault();
213
+ openCurrentPageInEditor();
805
214
  }
806
- input.addEventListener("input", () => {
807
- currentIndex = 0;
808
- render();
809
- });
810
- };
215
+ });
216
+ };
811
217
 
812
- // Last in line, on purpose: on window (the end of the bubble), and registered
813
- // once the page has loaded — so every listener the page set up while parsing is
814
- // already in place and has already had this press. If any of them called
815
- // preventDefault, the key was theirs and nothing happens here.
816
- const listenSwitcherKey = () => {
817
- window.addEventListener("keydown", (event) => {
818
- if (event.defaultPrevented) {
819
- return;
820
- }
821
- if (isSwitcherKey(event)) {
822
- // Ours now: the browser has its own use for cmd+K (the address bar),
823
- // which it must not get.
824
- event.preventDefault();
825
- openSwitcher();
826
- return;
827
- }
828
- if (isEditorKey(event)) {
829
- event.preventDefault();
830
- openCurrentPageInEditor();
831
- }
832
- });
833
- };
834
- // The page one is looking at, in the editor. The list is where the file url
835
- // comes from, so a page the server does not list (an @fs url, something under
836
- // node_modules) says so rather than opening the wrong thing.
837
- const openCurrentPageInEditor = async () => {
838
- const here = currentPageUrl();
839
- const pages = await loadPages();
840
- const page = pages.find((candidate) => candidate.url === here);
841
- openInEditor(page && { ...page, name: here.split("/").pop() });
842
- };
843
- const setup = () => {
844
- listenSwitcherKey();
845
- if (wasOpen()) {
846
- openSwitcher();
847
- }
848
- };
849
- if (document.readyState === "complete") {
850
- setup();
851
- } else {
852
- window.addEventListener("load", setup, { once: true });
218
+ const setup = () => {
219
+ listenSwitcherKey();
220
+ if (wasOpen()) {
221
+ openSwitcher();
853
222
  }
854
- })();
223
+ };
224
+ if (document.readyState === "complete") {
225
+ setup();
226
+ } else {
227
+ window.addEventListener("load", setup, { once: true });
228
+ }
229
+
230
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vVXNlcnMvZG1haWwvRG9jdW1lbnRzL2Rldi9qc2Vudi9jb3JlL3NyYy9wbHVnaW5zL3BhZ2Vfc3dpdGNoZXIvY2xpZW50L3BhZ2Vfc3dpdGNoZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIGNtZCtLIC8gY3RybCtLIG9uIGFueSBkZXYtc2VydmVkIHBhZ2U6IHRoZSAuaHRtbCBmaWxlcyB0aGUgc2VydmVyIHNlcnZlcywgYXMgYVxuICogdHJlZSBvbmUgd2Fsa3MsIGZpbHRlciBhcyB5b3UgdHlwZSwgRW50ZXIgdG8gZ28gdGhlcmUuXG4gKlxuICogVGhlIHRyZWUgaXRzZWxmIGlzIG5vdCB0aGlzIGZpbGUnczogaXQgaXMgdGhlIHBhZ2UgcGlja2VyIHRoZSBkZXYgc2VydmVyIHNoaXBzXG4gKiBmb3IgZXZlcnlvbmUgd2hvIGhhcyB0byBhc2sgXCJ3aGljaCBwYWdlP1wiIChzZWUgcHJvdG9jb2xfZmlsZS9jbGllbnQvcGFnZV9waWNrZXIuanNcbiAqIOKAlCB0aGUgY2xpZW50cyBkYXNoYm9hcmQgYXNrcyBpdCB0b28sIHRvIHNlbmQgYW5vdGhlciBicm93c2VyIHNvbWV3aGVyZSkuIFdoYXRcbiAqIGJlbG9uZ3MgaGVyZSBpcyB0aGUga2V5LCBhbmQgd2hhdCB0YWtpbmcgYSByb3cgbWVhbnMgaW4gdGhpcyB0YWIuXG4gKlxuICogY21kK0UgLyBjdHJsK0UgaXMgdGhlIG90aGVyIGhhbGYgb2YgdGhlIHNhbWUgcXVlc3Rpb246IGluc3RlYWQgb2YgZ29pbmcgdG8gYVxuICogcGFnZSwgb3BlbiBpdHMgZmlsZSBpbiB0aGUgZWRpdG9yICh0aGUgc2VydmVyIGRvZXMgaXQsIHNlZVxuICogR0VUIC8uaW50ZXJuYWwvb3Blbl9maWxlLyopLiBQcmVzc2VkIG9uIHRoZSBwYWdlIGl0c2VsZiBpdCBvcGVucyB0aGUgcGFnZSBvbmVcbiAqIGlzIG9uOyBwcmVzc2VkIGluc2lkZSB0aGUgc3dpdGNoZXIgaXQgb3BlbnMgdGhlIHJvdyBvbmUgaXMgbG9va2luZyBhdC5cbiAqXG4gKiBJbmplY3RlZCBpbnRvIGV2ZXJ5IHBhZ2UgKHNlZSBqc2Vudl9wbHVnaW5fcGFnZV9zd2l0Y2hlci5qcyksIHdoaWNoIGlzIHdoeSBpdFxuICogaXMgY2FyZWZ1bCBhYm91dCB3aGF0IGl0IHRha2VzOlxuICogLSB0aGUga2V5IGlzIHdhdGNoZWQgYXQgdGhlIGVuZCBvZiB0aGUgYnViYmxlLCBvbiB3aW5kb3csIGFuZCBhIHByZXNzIHRoYXRcbiAqICAgd2FzIGFscmVhZHkgaGFuZGxlZCAoZGVmYXVsdFByZXZlbnRlZCkgaXMgbGVmdCBhbG9uZSDigJQgYSBwYWdlIHdpdGggaXRzIG93blxuICogICBjbWQrSyBrZWVwcyBpdCwgYW5kIGdldHMgaXQgZmlyc3Q7XG4gKiAtIG5vdGhpbmcgaXMgZmV0Y2hlZCwgYnVpbHQgb3Igc3R5bGVkIHVudGlsIHRoZSBmaXJzdCB0aW1lIGl0IG9wZW5zO1xuICogLSBldmVyeXRoaW5nIGl0IHJlbmRlcnMgbGl2ZXMgaW4gYSBzaGFkb3cgcm9vdCwgc28gdGhlIHBhZ2UncyBvd24gQ1NTIGNhbm5vdFxuICogICByZWFjaCBpdCBhbmQgaXQgY2Fubm90IHJlYWNoIHRoZSBwYWdlJ3MuXG4gKi9cblxuaW1wb3J0IHtcbiAgYXNQYWdlVXJsLFxuICBpc0VkaXRvcktleSxcbiAgaXNDb21tYW5kS2V5LFxuICBsb2FkUGFnZXMsXG4gIG9wZW5QYWdlUGlja2VyLFxufSBmcm9tIFwiLi4vLi4vcHJvdG9jb2xfZmlsZS9jbGllbnQvcGFnZV9waWNrZXIuanNcIjtcblxuLy8gVGhlIHNlcnZlciBhc2tzIHRoZSBPUyB0byBvcGVuIGEgZmlsZSBpbiB3aGF0ZXZlciBlZGl0b3IgaXMgY29uZmlndXJlZFxuLy8gKFZTQ29kZSBoZXJlKSDigJQgaXQgdGFrZXMgYSBmaWxlIHVybCwgd2hpY2ggaXMgd2h5IHRoZSBwYWdlIGxpc3QgY2FycmllcyBvbmVcbi8vIHBlciBwYWdlIChzZWUgaHRtbF9wYWdlcy5qcykuXG5jb25zdCBPUEVOX0ZJTEVfRU5EUE9JTlQgPSBcIi8uaW50ZXJuYWwvb3Blbl9maWxlL1wiO1xuLy8gT3BlbiBhY3Jvc3MgYSByZWxvYWQ6IHRoaXMgaXMgYSBkZXYgdG9vbCBvbiBhIHBhZ2Ugb25lIGlzIGVkaXRpbmcsIGFuZCBhIGhvdFxuLy8gcmVsb2FkIGluIHRoZSBtaWRkbGUgb2YgbG9va2luZyBmb3IgdGhlIG5leHQgcGFnZSBzaG91bGQgbm90IGNsb3NlIHdoYXQgb25lXG4vLyB3YXMgbG9va2luZyBhdC4gSW4gc2Vzc2lvblN0b3JhZ2UsIG5vdCBsb2NhbFN0b3JhZ2U6IGl0IHNheXMgd2hhdCBUSElTIHRhYiB3YXNcbi8vIGRvaW5nIGEgc2Vjb25kIGFnbywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyB0byByZW1lbWJlciB0b21vcnJvdy5cbmNvbnN0IE9QRU5fS0VZID0gXCJqc2Vudl9wYWdlX3N3aXRjaGVyX29wZW5cIjtcblxuLy8gVGhlIHBhZ2UgdGhpcyBzY3JpcHQgaXMgcnVubmluZyBpbiwgYXMgdGhlIGxpc3Qgc3BlbGxzIGl0cyB1cmxzLlxuY29uc3QgY3VycmVudFBhZ2VVcmwgPSAoKSA9PiBhc1BhZ2VVcmwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG5jb25zdCBpc1N3aXRjaGVyS2V5ID0gKGV2ZW50KSA9PlxuICAoZXZlbnQua2V5ID09PSBcImtcIiB8fCBldmVudC5rZXkgPT09IFwiS1wiKSAmJiBpc0NvbW1hbmRLZXkoZXZlbnQpO1xuXG5jb25zdCBGTEFTSF9TVFlMRV9URVhUID0gLyogY3NzICovIGBcbiAgOmhvc3Qge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICByaWdodDogMTZweDtcbiAgICBib3R0b206IDE2cHg7XG4gICAgLyogQWJvdmUgdGhlIHBpY2tlcidzIG93biBwYW5lbDogaXQgaXMgdGhlIHN3aXRjaGVyIHRoYXQgdHJpZ2dlcnMgaXQuICovXG4gICAgei1pbmRleDogMjE0NzQ4MzY0NztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LWZhbWlseTogc3lzdGVtLXVpLCBzYW5zLXNlcmlmO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gIC5mbGFzaCB7XG4gICAgcGFkZGluZzogOHB4IDE0cHg7XG4gICAgY29sb3I6IGxpZ2h0LWRhcmsoIzBmMTcyYSwgI2UyZThmMCk7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGJhY2tncm91bmQ6IGxpZ2h0LWRhcmsod2hpdGUsICMxZTI5M2IpO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgY29sb3Itc2NoZW1lOiBsaWdodCBkYXJrO1xuICB9XG4gIC5mbGFzaFtkYXRhLWVycm9yXSB7XG4gICAgY29sb3I6IGxpZ2h0LWRhcmsoIzk5MWIxYiwgI2ZlY2FjYSk7XG4gICAgYmFja2dyb3VuZDogbGlnaHQtZGFyaygjZmVlMmUyLCAjN2YxZDFkKTtcbiAgfVxuYDtcblxuLy8gT3BlbmluZyBhIGZpbGUgaW4gYW4gZWRpdG9yIGhhcHBlbnMgaW4gYW5vdGhlciBhcHBsaWNhdGlvbiwgb24gYW5vdGhlclxuLy8gc2NyZWVuIHNvbWV0aW1lczogd2l0aG91dCBhIHdvcmQgaGVyZSwgYSBwcmVzcyB0aGF0IGZhaWxlZCBhbmQgYSBwcmVzcyB0aGF0XG4vLyB3b3JrZWQgbG9vayBleGFjdGx5IHRoZSBzYW1lLiBJdHMgb3duIGhvc3QgYW5kIGl0cyBvd24gc2hhZG93IHJvb3QsIHNvIGl0XG4vLyBjYW4gYmUgc2hvd24gd2hldGhlciBvciBub3QgdGhlIHN3aXRjaGVyIGlzIG9wZW4uXG5sZXQgZmxhc2hIb3N0ID0gbnVsbDtcbmxldCBmbGFzaEJveCA9IG51bGw7XG5sZXQgZmxhc2hUaW1lb3V0ID0gbnVsbDtcbmNvbnN0IGZsYXNoID0gKG1lc3NhZ2UsIGlzRXJyb3IpID0+IHtcbiAgaWYgKCFmbGFzaEhvc3QpIHtcbiAgICBmbGFzaEhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGNvbnN0IHNoYWRvdyA9IGZsYXNoSG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZS50ZXh0Q29udGVudCA9IEZMQVNIX1NUWUxFX1RFWFQ7XG4gICAgZmxhc2hCb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGZsYXNoQm94LmNsYXNzTmFtZSA9IFwiZmxhc2hcIjtcbiAgICBzaGFkb3cuYXBwZW5kKHN0eWxlLCBmbGFzaEJveCk7XG4gIH1cbiAgZmxhc2hCb3gudGV4dENvbnRlbnQgPSBtZXNzYWdlO1xuICBmbGFzaEJveC50b2dnbGVBdHRyaWJ1dGUoXCJkYXRhLWVycm9yXCIsIEJvb2xlYW4oaXNFcnJvcikpO1xuICAvLyBBcHBlbmRlZCBsYXN0IGV2ZXJ5IHRpbWUsIHNvIGl0IHNpdHMgYWJvdmUgdGhlIHBpY2tlcidzIGhvc3Qgd2hlbiBib3RoXG4gIC8vIGFyZSBvbiB0aGUgcGFnZSBhbmQgdGhleSBzaGFyZSB0aGUgc2FtZSB6LWluZGV4LlxuICBkb2N1bWVudC5ib2R5LmFwcGVuZChmbGFzaEhvc3QpO1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0KGZsYXNoVGltZW91dCk7XG4gIGZsYXNoVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IGZsYXNoSG9zdC5yZW1vdmUoKSwgMjUwMCk7XG59O1xuXG5jb25zdCBvcGVuSW5FZGl0b3IgPSBhc3luYyAoZmlsZSkgPT4ge1xuICBpZiAoIWZpbGUgfHwgIWZpbGUuZmlsZVVybCkge1xuICAgIGZsYXNoKFwiVGhpcyBwYWdlIGlzIG5vdCBhIGZpbGUgdGhlIHNlcnZlciBsaXN0cy5cIiwgdHJ1ZSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZsYXNoKGBPcGVuaW5nICR7ZmlsZS5uYW1lIHx8IGZpbGUudXJsfSBpbiBlZGl0b3LigKZgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgYCR7T1BFTl9GSUxFX0VORFBPSU5UfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGUuZmlsZVVybCl9YCxcbiAgICApO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgLy8gVGhlIHJvdXRlIGV4aXN0cyBvbmx5IHdoZW4gdGhlIHNlcnZlciBpcyB3aWxsaW5nIHRvIGV4cG9zZSB0aGVcbiAgICAgIC8vIG1hY2hpbmUgaXQgcnVucyBvbiAoc2VlIHN0YXJ0X3NlcnZlci5qcykuXG4gICAgICBmbGFzaChcIlRoaXMgc2VydmVyIGRvZXMgbm90IG9wZW4gZmlsZXMgaW4gYW4gZWRpdG9yLlwiLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgZmxhc2goYEVkaXRvciBzYWlkIG5vICgke3Jlc3BvbnNlLnN0YXR1c30pLmAsIHRydWUpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgZmxhc2goXCJDb3VsZCBub3QgcmVhY2ggdGhlIGRldiBzZXJ2ZXIuXCIsIHRydWUpO1xuICB9XG59O1xuXG5jb25zdCByZW1lbWJlck9wZW4gPSAoaXNPcGVuKSA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oT1BFTl9LRVksIFwiMVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oT1BFTl9LRVkpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gcHJpdmF0ZSBtb2RlLCBxdW90YSDigJQgaXQganVzdCB3aWxsIG5vdCBjb21lIGJhY2tcbiAgfVxufTtcbmNvbnN0IHdhc09wZW4gPSAoKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKE9QRU5fS0VZKSA9PT0gXCIxXCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxubGV0IHBpY2tlciA9IG51bGw7XG5cbi8vIFRoZSBzYW1lIGtleSBvcGVucyBpdCBhbmQgcHV0cyBpdCBhd2F5OiBwcmVzc2VkIHdoaWxlIGl0IGlzIHVwLCBjbWQrSyBpcyB0aGVcbi8vIHJlYWRlciBzYXlpbmcgXCJub3QgdGhpcywgYmFjayB0byB3aGF0IEkgd2FzIGRvaW5nXCIuXG5jb25zdCB0b2dnbGVTd2l0Y2hlciA9ICgpID0+IHtcbiAgaWYgKHBpY2tlcikge1xuICAgIHBpY2tlci5jbG9zZSgpO1xuICAgIHJldHVybjtcbiAgfVxuICBvcGVuU3dpdGNoZXIoKTtcbn07XG5cbmNvbnN0IG9wZW5Td2l0Y2hlciA9ICgpID0+IHtcbiAgcGlja2VyID0gb3BlblBhZ2VQaWNrZXIoe1xuICAgIC8vIFRoZSBvdGhlciBrZXkgaXMgd3JpdHRlbiB3aGVyZSBvbmUgaXMgYWxyZWFkeSBsb29raW5nOiBhIHNob3J0Y3V0IG5vYm9keVxuICAgIC8vIGlzIHRvbGQgYWJvdXQgaXMgYSBzaG9ydGN1dCBub2JvZHkgcHJlc3Nlcy4gQm90aCBuYW1lcywgbm90IHRoZSBvbmUgdGhpc1xuICAgIC8vIHBsYXRmb3JtIHVzZXMg4oCUIHRoZSByZWFkZXIga25vd3Mgd2hpY2ggb2YgdGhlIHR3byB0aGVpciBrZXlib2FyZCBoYXMsIGFuZFxuICAgIC8vIGl0IGtlZXBzIHdoYXQgdGhlIHBhbmVsIHNheXMgdGhlIHNhbWUgZXZlcnl3aGVyZS5cbiAgICBwbGFjZWhvbGRlcjogXCJHbyB0byBwYWdl4oCmICAoY21kL2N0cmwrRSB0byBvcGVuIGluIGVkaXRvcilcIixcbiAgICBoZXJlVXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAvLyBHb2luZyB0aGVyZSBpcyBzb21ldGhpbmcgdGhpcyBicm93c2VyIGNhbiBkbywgc28gYSByb3cgaXMgYSBsaW5rOiBpdHNcbiAgICAvLyBtZW51LCBpdHMgbWlkZGxlIGNsaWNrIGFuZCBpdHMgY21kK2NsaWNrIGFsbCB3b3JrLlxuICAgIGdldEhyZWY6IChwYWdlKSA9PiBwYWdlLnVybCxcbiAgICBvblBpY2s6IChwYWdlKSA9PiB7XG4gICAgICAvLyBHb2luZyBzb21ld2hlcmUgaXMgZG9uZSB3aXRoIGl0OiB3aGF0IHJlb3BlbnMgYWNyb3NzIGEgcmVsb2FkIGlzIGFcbiAgICAgIC8vIHN3aXRjaGVyIG9uZSB3YXMgc3RpbGwgdXNpbmcuXG4gICAgICByZW1lbWJlck9wZW4oZmFsc2UpO1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBwYWdlLnVybDtcbiAgICB9LFxuICAgIG9uRWRpdDogKHBhZ2UpID0+IHtcbiAgICAgIC8vIERvbmUgd2l0aCB0aGUgc3dpdGNoZXI6IHRoZSBhbnN3ZXIgdG8gXCJ3aGVyZSBkb2VzIHRoaXMgbGl2ZVwiIGFycml2ZXNcbiAgICAgIC8vIGluIHRoZSBlZGl0b3IsIG5vdCBoZXJlLlxuICAgICAgcmVtZW1iZXJPcGVuKGZhbHNlKTtcbiAgICAgIG9wZW5JbkVkaXRvcihwYWdlKTtcbiAgICB9LFxuICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgIHBpY2tlciA9IG51bGw7XG4gICAgICByZW1lbWJlck9wZW4oZmFsc2UpO1xuICAgIH0sXG4gIH0pO1xuICByZW1lbWJlck9wZW4odHJ1ZSk7XG59O1xuXG4vLyBUaGUgcGFnZSBvbmUgaXMgbG9va2luZyBhdCwgaW4gdGhlIGVkaXRvci4gVGhlIGxpc3QgaXMgd2hlcmUgdGhlIGZpbGUgdXJsXG4vLyBjb21lcyBmcm9tLCBzbyBhIHBhZ2UgdGhlIHNlcnZlciBkb2VzIG5vdCBsaXN0IChhbiBAZnMgdXJsLCBzb21ldGhpbmcgdW5kZXJcbi8vIG5vZGVfbW9kdWxlcykgc2F5cyBzbyByYXRoZXIgdGhhbiBvcGVuaW5nIHRoZSB3cm9uZyB0aGluZy5cbmNvbnN0IG9wZW5DdXJyZW50UGFnZUluRWRpdG9yID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCBoZXJlID0gY3VycmVudFBhZ2VVcmwoKTtcbiAgY29uc3QgcGFnZXMgPSBhd2FpdCBsb2FkUGFnZXMoKTtcbiAgY29uc3QgcGFnZSA9IHBhZ2VzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnVybCA9PT0gaGVyZSk7XG4gIG9wZW5JbkVkaXRvcihwYWdlICYmIHsgLi4ucGFnZSwgbmFtZTogaGVyZS5zcGxpdChcIi9cIikucG9wKCkgfSk7XG59O1xuXG4vLyBMYXN0IGluIGxpbmUsIG9uIHB1cnBvc2U6IG9uIHdpbmRvdyAodGhlIGVuZCBvZiB0aGUgYnViYmxlKSwgYW5kIHJlZ2lzdGVyZWRcbi8vIG9uY2UgdGhlIHBhZ2UgaGFzIGxvYWRlZCDigJQgc28gZXZlcnkgbGlzdGVuZXIgdGhlIHBhZ2Ugc2V0IHVwIHdoaWxlIHBhcnNpbmcgaXNcbi8vIGFscmVhZHkgaW4gcGxhY2UgYW5kIGhhcyBhbHJlYWR5IGhhZCB0aGlzIHByZXNzLiBJZiBhbnkgb2YgdGhlbSBjYWxsZWRcbi8vIHByZXZlbnREZWZhdWx0LCB0aGUga2V5IHdhcyB0aGVpcnMgYW5kIG5vdGhpbmcgaGFwcGVucyBoZXJlLlxuY29uc3QgbGlzdGVuU3dpdGNoZXJLZXkgPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNTd2l0Y2hlcktleShldmVudCkpIHtcbiAgICAgIC8vIE91cnMgbm93OiB0aGUgYnJvd3NlciBoYXMgaXRzIG93biB1c2UgZm9yIGNtZCtLICh0aGUgYWRkcmVzcyBiYXIpLFxuICAgICAgLy8gd2hpY2ggaXQgbXVzdCBub3QgZ2V0LlxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRvZ2dsZVN3aXRjaGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0VkaXRvcktleShldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvcGVuQ3VycmVudFBhZ2VJbkVkaXRvcigpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCBzZXR1cCA9ICgpID0+IHtcbiAgbGlzdGVuU3dpdGNoZXJLZXkoKTtcbiAgaWYgKHdhc09wZW4oKSkge1xuICAgIG9wZW5Td2l0Y2hlcigpO1xuICB9XG59O1xuaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICBzZXR1cCgpO1xufSBlbHNlIHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHNldHVwLCB7IG9uY2U6IHRydWUgfSk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9FLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDOztBQUVGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDJGQUEyQzs7QUFFbEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRTVELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVqRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixDQUFDLENBQUM7QUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQztBQUNGLENBQUM7O0FBRUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUM7QUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQzs7QUFFRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLENBQUM7QUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDO0FBQ0YsQ0FBQzs7QUFFRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQyxDQUFDO0FBQ0YsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUNGLENBQUM7O0FBRUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVqQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLENBQUM7QUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLENBQUM7O0FBRUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQzs7QUFFRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7O0FBRUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNaLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7O0FBRUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFDRixDQUFDO0FBQ0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQ7In0=