@design.estate/dees-wcctools 1.2.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist_bundle/bundle.js +1764 -218
  2. package/dist_bundle/bundle.js.map +4 -4
  3. package/dist_ts_demotools/demotools.d.ts +1 -1
  4. package/dist_ts_demotools/demotools.js +86 -38
  5. package/dist_ts_web/00_commitinfo_data.js +1 -1
  6. package/dist_ts_web/elements/wcc-dashboard.d.ts +11 -10
  7. package/dist_ts_web/elements/wcc-dashboard.js +370 -246
  8. package/dist_ts_web/elements/wcc-frame.d.ts +3 -3
  9. package/dist_ts_web/elements/wcc-frame.js +108 -57
  10. package/dist_ts_web/elements/wcc-properties.d.ts +14 -8
  11. package/dist_ts_web/elements/wcc-properties.js +442 -323
  12. package/dist_ts_web/elements/wcc-record-button.d.ts +12 -0
  13. package/dist_ts_web/elements/wcc-record-button.js +165 -0
  14. package/dist_ts_web/elements/wcc-recording-panel.d.ts +42 -0
  15. package/dist_ts_web/elements/wcc-recording-panel.js +1067 -0
  16. package/dist_ts_web/elements/wcc-sidebar.d.ts +7 -5
  17. package/dist_ts_web/elements/wcc-sidebar.js +250 -81
  18. package/dist_ts_web/elements/wcctools.helpers.d.ts +13 -0
  19. package/dist_ts_web/elements/wcctools.helpers.js +26 -1
  20. package/dist_ts_web/index.d.ts +3 -0
  21. package/dist_ts_web/index.js +5 -1
  22. package/dist_ts_web/services/ffmpeg.service.d.ts +42 -0
  23. package/dist_ts_web/services/ffmpeg.service.js +276 -0
  24. package/dist_ts_web/services/mp4.service.d.ts +32 -0
  25. package/dist_ts_web/services/mp4.service.js +139 -0
  26. package/dist_ts_web/services/recorder.service.d.ts +44 -0
  27. package/dist_ts_web/services/recorder.service.js +307 -0
  28. package/dist_watch/bundle.js +2126 -541
  29. package/dist_watch/bundle.js.map +4 -4
  30. package/package.json +8 -8
  31. package/readme.md +133 -141
  32. package/ts_web/00_commitinfo_data.ts +1 -1
  33. package/ts_web/elements/wcc-dashboard.ts +86 -26
  34. package/ts_web/elements/wcc-frame.ts +3 -3
  35. package/ts_web/elements/wcc-properties.ts +53 -9
  36. package/ts_web/elements/wcc-record-button.ts +108 -0
  37. package/ts_web/elements/wcc-recording-panel.ts +978 -0
  38. package/ts_web/elements/wcc-sidebar.ts +133 -22
  39. package/ts_web/elements/wcctools.helpers.ts +31 -0
  40. package/ts_web/index.ts +5 -0
  41. package/ts_web/readme.md +123 -0
  42. package/ts_web/services/recorder.service.ts +393 -0
@@ -1,31 +1,154 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
6
27
  };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
9
34
  };
10
35
  import { DeesElement, property, html, customElement, state } from '@design.estate/dees-element';
11
36
  import { WccDashboard } from './wcc-dashboard.js';
37
+ import './wcc-record-button.js';
38
+ import './wcc-recording-panel.js';
12
39
  let environment = 'native';
13
40
  export const setEnvironment = (envArg) => {
14
41
  environment = envArg;
15
42
  };
16
- let WccProperties = class WccProperties extends DeesElement {
17
- constructor() {
18
- super(...arguments);
19
- this.selectedViewport = 'native';
20
- this.selectedTheme = 'dark';
21
- this.warning = null;
22
- this.isFullscreen = false;
23
- this.propertyContent = [];
24
- this.editingProperties = [];
25
- this.editorHeight = 300;
26
- }
27
- render() {
28
- return html `
43
+ let WccProperties = (() => {
44
+ let _classDecorators = [customElement('wcc-properties')];
45
+ let _classDescriptor;
46
+ let _classExtraInitializers = [];
47
+ let _classThis;
48
+ let _classSuper = DeesElement;
49
+ let _dashboardRef_decorators;
50
+ let _dashboardRef_initializers = [];
51
+ let _dashboardRef_extraInitializers = [];
52
+ let _selectedItem_decorators;
53
+ let _selectedItem_initializers = [];
54
+ let _selectedItem_extraInitializers = [];
55
+ let _selectedViewport_decorators;
56
+ let _selectedViewport_initializers = [];
57
+ let _selectedViewport_extraInitializers = [];
58
+ let _selectedTheme_decorators;
59
+ let _selectedTheme_initializers = [];
60
+ let _selectedTheme_extraInitializers = [];
61
+ let _warning_decorators;
62
+ let _warning_initializers = [];
63
+ let _warning_extraInitializers = [];
64
+ let _isFullscreen_decorators;
65
+ let _isFullscreen_initializers = [];
66
+ let _isFullscreen_extraInitializers = [];
67
+ let _propertyContent_decorators;
68
+ let _propertyContent_initializers = [];
69
+ let _propertyContent_extraInitializers = [];
70
+ let _editingProperties_decorators;
71
+ let _editingProperties_initializers = [];
72
+ let _editingProperties_extraInitializers = [];
73
+ let _showRecordingPanel_decorators;
74
+ let _showRecordingPanel_initializers = [];
75
+ let _showRecordingPanel_extraInitializers = [];
76
+ let _isRecording_decorators;
77
+ let _isRecording_initializers = [];
78
+ let _isRecording_extraInitializers = [];
79
+ let _recordingDuration_decorators;
80
+ let _recordingDuration_initializers = [];
81
+ let _recordingDuration_extraInitializers = [];
82
+ var WccProperties = class extends _classSuper {
83
+ static { _classThis = this; }
84
+ static {
85
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
86
+ _dashboardRef_decorators = [property({
87
+ type: WccDashboard
88
+ })];
89
+ _selectedItem_decorators = [property()];
90
+ _selectedViewport_decorators = [property()];
91
+ _selectedTheme_decorators = [property()];
92
+ _warning_decorators = [property()];
93
+ _isFullscreen_decorators = [property()];
94
+ _propertyContent_decorators = [state()];
95
+ _editingProperties_decorators = [state()];
96
+ _showRecordingPanel_decorators = [state()];
97
+ _isRecording_decorators = [state()];
98
+ _recordingDuration_decorators = [state()];
99
+ __esDecorate(this, null, _dashboardRef_decorators, { kind: "accessor", name: "dashboardRef", static: false, private: false, access: { has: obj => "dashboardRef" in obj, get: obj => obj.dashboardRef, set: (obj, value) => { obj.dashboardRef = value; } }, metadata: _metadata }, _dashboardRef_initializers, _dashboardRef_extraInitializers);
100
+ __esDecorate(this, null, _selectedItem_decorators, { kind: "accessor", name: "selectedItem", static: false, private: false, access: { has: obj => "selectedItem" in obj, get: obj => obj.selectedItem, set: (obj, value) => { obj.selectedItem = value; } }, metadata: _metadata }, _selectedItem_initializers, _selectedItem_extraInitializers);
101
+ __esDecorate(this, null, _selectedViewport_decorators, { kind: "accessor", name: "selectedViewport", static: false, private: false, access: { has: obj => "selectedViewport" in obj, get: obj => obj.selectedViewport, set: (obj, value) => { obj.selectedViewport = value; } }, metadata: _metadata }, _selectedViewport_initializers, _selectedViewport_extraInitializers);
102
+ __esDecorate(this, null, _selectedTheme_decorators, { kind: "accessor", name: "selectedTheme", static: false, private: false, access: { has: obj => "selectedTheme" in obj, get: obj => obj.selectedTheme, set: (obj, value) => { obj.selectedTheme = value; } }, metadata: _metadata }, _selectedTheme_initializers, _selectedTheme_extraInitializers);
103
+ __esDecorate(this, null, _warning_decorators, { kind: "accessor", name: "warning", static: false, private: false, access: { has: obj => "warning" in obj, get: obj => obj.warning, set: (obj, value) => { obj.warning = value; } }, metadata: _metadata }, _warning_initializers, _warning_extraInitializers);
104
+ __esDecorate(this, null, _isFullscreen_decorators, { kind: "accessor", name: "isFullscreen", static: false, private: false, access: { has: obj => "isFullscreen" in obj, get: obj => obj.isFullscreen, set: (obj, value) => { obj.isFullscreen = value; } }, metadata: _metadata }, _isFullscreen_initializers, _isFullscreen_extraInitializers);
105
+ __esDecorate(this, null, _propertyContent_decorators, { kind: "accessor", name: "propertyContent", static: false, private: false, access: { has: obj => "propertyContent" in obj, get: obj => obj.propertyContent, set: (obj, value) => { obj.propertyContent = value; } }, metadata: _metadata }, _propertyContent_initializers, _propertyContent_extraInitializers);
106
+ __esDecorate(this, null, _editingProperties_decorators, { kind: "accessor", name: "editingProperties", static: false, private: false, access: { has: obj => "editingProperties" in obj, get: obj => obj.editingProperties, set: (obj, value) => { obj.editingProperties = value; } }, metadata: _metadata }, _editingProperties_initializers, _editingProperties_extraInitializers);
107
+ __esDecorate(this, null, _showRecordingPanel_decorators, { kind: "accessor", name: "showRecordingPanel", static: false, private: false, access: { has: obj => "showRecordingPanel" in obj, get: obj => obj.showRecordingPanel, set: (obj, value) => { obj.showRecordingPanel = value; } }, metadata: _metadata }, _showRecordingPanel_initializers, _showRecordingPanel_extraInitializers);
108
+ __esDecorate(this, null, _isRecording_decorators, { kind: "accessor", name: "isRecording", static: false, private: false, access: { has: obj => "isRecording" in obj, get: obj => obj.isRecording, set: (obj, value) => { obj.isRecording = value; } }, metadata: _metadata }, _isRecording_initializers, _isRecording_extraInitializers);
109
+ __esDecorate(this, null, _recordingDuration_decorators, { kind: "accessor", name: "recordingDuration", static: false, private: false, access: { has: obj => "recordingDuration" in obj, get: obj => obj.recordingDuration, set: (obj, value) => { obj.recordingDuration = value; } }, metadata: _metadata }, _recordingDuration_initializers, _recordingDuration_extraInitializers);
110
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
111
+ WccProperties = _classThis = _classDescriptor.value;
112
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
113
+ __runInitializers(_classThis, _classExtraInitializers);
114
+ }
115
+ #dashboardRef_accessor_storage = __runInitializers(this, _dashboardRef_initializers, void 0);
116
+ get dashboardRef() { return this.#dashboardRef_accessor_storage; }
117
+ set dashboardRef(value) { this.#dashboardRef_accessor_storage = value; }
118
+ #selectedItem_accessor_storage = (__runInitializers(this, _dashboardRef_extraInitializers), __runInitializers(this, _selectedItem_initializers, void 0));
119
+ get selectedItem() { return this.#selectedItem_accessor_storage; }
120
+ set selectedItem(value) { this.#selectedItem_accessor_storage = value; }
121
+ #selectedViewport_accessor_storage = (__runInitializers(this, _selectedItem_extraInitializers), __runInitializers(this, _selectedViewport_initializers, 'native'));
122
+ get selectedViewport() { return this.#selectedViewport_accessor_storage; }
123
+ set selectedViewport(value) { this.#selectedViewport_accessor_storage = value; }
124
+ #selectedTheme_accessor_storage = (__runInitializers(this, _selectedViewport_extraInitializers), __runInitializers(this, _selectedTheme_initializers, 'dark'));
125
+ get selectedTheme() { return this.#selectedTheme_accessor_storage; }
126
+ set selectedTheme(value) { this.#selectedTheme_accessor_storage = value; }
127
+ #warning_accessor_storage = (__runInitializers(this, _selectedTheme_extraInitializers), __runInitializers(this, _warning_initializers, null));
128
+ get warning() { return this.#warning_accessor_storage; }
129
+ set warning(value) { this.#warning_accessor_storage = value; }
130
+ #isFullscreen_accessor_storage = (__runInitializers(this, _warning_extraInitializers), __runInitializers(this, _isFullscreen_initializers, false));
131
+ get isFullscreen() { return this.#isFullscreen_accessor_storage; }
132
+ set isFullscreen(value) { this.#isFullscreen_accessor_storage = value; }
133
+ #propertyContent_accessor_storage = (__runInitializers(this, _isFullscreen_extraInitializers), __runInitializers(this, _propertyContent_initializers, []));
134
+ get propertyContent() { return this.#propertyContent_accessor_storage; }
135
+ set propertyContent(value) { this.#propertyContent_accessor_storage = value; }
136
+ #editingProperties_accessor_storage = (__runInitializers(this, _propertyContent_extraInitializers), __runInitializers(this, _editingProperties_initializers, []));
137
+ get editingProperties() { return this.#editingProperties_accessor_storage; }
138
+ set editingProperties(value) { this.#editingProperties_accessor_storage = value; }
139
+ #showRecordingPanel_accessor_storage = (__runInitializers(this, _editingProperties_extraInitializers), __runInitializers(this, _showRecordingPanel_initializers, false));
140
+ // Recording coordination state
141
+ get showRecordingPanel() { return this.#showRecordingPanel_accessor_storage; }
142
+ set showRecordingPanel(value) { this.#showRecordingPanel_accessor_storage = value; }
143
+ #isRecording_accessor_storage = (__runInitializers(this, _showRecordingPanel_extraInitializers), __runInitializers(this, _isRecording_initializers, false));
144
+ get isRecording() { return this.#isRecording_accessor_storage; }
145
+ set isRecording(value) { this.#isRecording_accessor_storage = value; }
146
+ #recordingDuration_accessor_storage = (__runInitializers(this, _isRecording_extraInitializers), __runInitializers(this, _recordingDuration_initializers, 0));
147
+ get recordingDuration() { return this.#recordingDuration_accessor_storage; }
148
+ set recordingDuration(value) { this.#recordingDuration_accessor_storage = value; }
149
+ editorHeight = (__runInitializers(this, _recordingDuration_extraInitializers), 300);
150
+ render() {
151
+ return html `
29
152
  <style>
30
153
  :host {
31
154
  /* CSS Variables - Always dark theme */
@@ -62,7 +185,7 @@ let WccProperties = class WccProperties extends DeesElement {
62
185
  }
63
186
  .grid {
64
187
  display: grid;
65
- grid-template-columns: 1fr 150px 300px 70px;
188
+ grid-template-columns: 1fr 150px 300px 70px 70px;
66
189
  height: 100%;
67
190
  }
68
191
  .properties {
@@ -529,24 +652,24 @@ let WccProperties = class WccProperties extends DeesElement {
529
652
  class="editor-textarea"
530
653
  .value=${prop.editorValue}
531
654
  @input=${(e) => {
532
- const editor = this.editingProperties.find(p => p.id === prop.id);
533
- if (editor) {
534
- editor.editorValue = e.target.value;
535
- editor.editorError = '';
536
- this.requestUpdate();
537
- }
538
- }}
655
+ const editor = this.editingProperties.find(p => p.id === prop.id);
656
+ if (editor) {
657
+ editor.editorValue = e.target.value;
658
+ editor.editorError = '';
659
+ this.requestUpdate();
660
+ }
661
+ }}
539
662
  @keydown=${(e) => {
540
- if (e.key === 'Tab') {
541
- e.preventDefault();
542
- const target = e.target;
543
- const start = target.selectionStart;
544
- const end = target.selectionEnd;
545
- const value = target.value;
546
- target.value = value.substring(0, start) + ' ' + value.substring(end);
547
- target.selectionStart = target.selectionEnd = start + 2;
548
- }
549
- }}
663
+ if (e.key === 'Tab') {
664
+ e.preventDefault();
665
+ const target = e.target;
666
+ const start = target.selectionStart;
667
+ const end = target.selectionEnd;
668
+ const value = target.value;
669
+ target.value = value.substring(0, start) + ' ' + value.substring(end);
670
+ target.selectionStart = target.selectionEnd = start + 2;
671
+ }
672
+ }}
550
673
  ></textarea>
551
674
  ${prop.editorError ? html `
552
675
  <div class="editor-error">${prop.editorError}</div>
@@ -568,16 +691,16 @@ let WccProperties = class WccProperties extends DeesElement {
568
691
  <div
569
692
  class="button ${this.selectedTheme === 'dark' ? 'selected' : null}"
570
693
  @click=${() => {
571
- this.selectTheme('dark');
572
- }}
694
+ this.selectTheme('dark');
695
+ }}
573
696
  >
574
697
  Dark<i class="material-symbols-outlined">brightness_3</i>
575
698
  </div>
576
699
  <div
577
700
  class="button ${this.selectedTheme === 'bright' ? 'selected' : null}"
578
701
  @click=${() => {
579
- this.selectTheme('bright');
580
- }}
702
+ this.selectTheme('bright');
703
+ }}
581
704
  >
582
705
  Bright<i class="material-symbols-outlined">flare</i>
583
706
  </div>
@@ -589,35 +712,35 @@ let WccProperties = class WccProperties extends DeesElement {
589
712
  <div
590
713
  class="button ${this.selectedViewport === 'phone' ? 'selected' : null}"
591
714
  @click=${() => {
592
- this.selectViewport('phone');
593
- }}
715
+ this.selectViewport('phone');
716
+ }}
594
717
  >
595
718
  Phone<i class="material-symbols-outlined">smartphone</i>
596
719
  </div>
597
720
  <div
598
721
  class="button ${this.selectedViewport === 'phablet' ? 'selected' : null}"
599
722
  @click=${() => {
600
- this.selectViewport('phablet');
601
- }}
723
+ this.selectViewport('phablet');
724
+ }}
602
725
  >
603
726
  Phablet<i class="material-symbols-outlined">smartphone</i>
604
727
  </div>
605
728
  <div
606
729
  class="button ${this.selectedViewport === 'tablet' ? 'selected' : null}"
607
730
  @click=${() => {
608
- this.selectViewport('tablet');
609
- }}
731
+ this.selectViewport('tablet');
732
+ }}
610
733
  >
611
734
  Tablet<i class="material-symbols-outlined">tablet</i>
612
735
  </div>
613
736
  <div
614
737
  class="button ${this.selectedViewport === 'desktop' ||
615
- this.selectedViewport === 'native'
616
- ? 'selected'
617
- : null}"
738
+ this.selectedViewport === 'native'
739
+ ? 'selected'
740
+ : null}"
618
741
  @click=${() => {
619
- this.selectViewport('native');
620
- }}
742
+ this.selectViewport('native');
743
+ }}
621
744
  >
622
745
  Desktop<i class="material-symbols-outlined">desktop_windows</i>
623
746
  </div>
@@ -628,262 +751,301 @@ let WccProperties = class WccProperties extends DeesElement {
628
751
  ${this.isFullscreen ? 'fullscreen_exit' : 'fullscreen'}
629
752
  </i>
630
753
  </div>
754
+ <!-- Recording Button -->
755
+ <wcc-record-button
756
+ .state=${this.isRecording ? 'recording' : 'idle'}
757
+ .duration=${this.recordingDuration}
758
+ @record-click=${() => this.handleRecordButtonClick()}
759
+ ></wcc-record-button>
631
760
  </div>
632
761
  ${this.warning ? html `<div class="warning">${this.warning}</div>` : null}
633
762
  </div>
763
+
764
+ <!-- Recording Panel (options + preview) -->
765
+ ${this.showRecordingPanel ? html `
766
+ <wcc-recording-panel
767
+ .dashboardRef=${this.dashboardRef}
768
+ @recording-start=${() => { this.isRecording = true; }}
769
+ @recording-stop=${() => { this.isRecording = false; }}
770
+ @duration-update=${(e) => { this.recordingDuration = e.detail.duration; }}
771
+ @close=${() => { this.showRecordingPanel = false; this.isRecording = false; this.recordingDuration = 0; }}
772
+ ></wcc-recording-panel>
773
+ ` : null}
634
774
  `;
635
- }
636
- async findElementRecursively(container, elementClass, maxDepth = 5) {
637
- if (maxDepth <= 0)
638
- return null;
639
- try {
640
- // Check direct children
641
- for (const child of Array.from(container.children)) {
642
- if (child instanceof elementClass) {
643
- return child;
775
+ }
776
+ async findElementRecursively(container, elementClass, maxDepth = 5) {
777
+ if (maxDepth <= 0)
778
+ return null;
779
+ try {
780
+ // Check direct children
781
+ for (const child of Array.from(container.children)) {
782
+ if (child instanceof elementClass) {
783
+ return child;
784
+ }
644
785
  }
645
- }
646
- // Search in all children recursively
647
- for (const child of Array.from(container.children)) {
648
- // First, always check the light DOM children
649
- const found = await this.findElementRecursively(child, elementClass, maxDepth - 1);
650
- if (found)
651
- return found;
652
- // Also check shadow root if it exists
653
- if (child.shadowRoot) {
654
- const shadowFound = await this.findElementRecursively(child.shadowRoot, elementClass, maxDepth - 1);
655
- if (shadowFound)
656
- return shadowFound;
786
+ // Search in all children recursively
787
+ for (const child of Array.from(container.children)) {
788
+ // First, always check the light DOM children
789
+ const found = await this.findElementRecursively(child, elementClass, maxDepth - 1);
790
+ if (found)
791
+ return found;
792
+ // Also check shadow root if it exists
793
+ if (child.shadowRoot) {
794
+ const shadowFound = await this.findElementRecursively(child.shadowRoot, elementClass, maxDepth - 1);
795
+ if (shadowFound)
796
+ return shadowFound;
797
+ }
657
798
  }
658
799
  }
800
+ catch (error) {
801
+ console.error('Error in findElementRecursively:', error);
802
+ }
803
+ return null;
659
804
  }
660
- catch (error) {
661
- console.error('Error in findElementRecursively:', error);
662
- }
663
- return null;
664
- }
665
- async createProperties() {
666
- console.log('creating properties for:');
667
- console.log(this.selectedItem);
668
- // Clear any previous warnings
669
- this.warning = null;
670
- const isEnumeration = (propertyArg) => {
671
- const keys = Object.keys(propertyArg.type);
672
- const values = [];
673
- for (const key of keys) {
674
- let value = propertyArg.type[key];
675
- if (typeof value === 'number') {
676
- value = value.toString();
805
+ async createProperties() {
806
+ console.log('creating properties for:');
807
+ console.log(this.selectedItem);
808
+ // Clear any previous warnings
809
+ this.warning = null;
810
+ const isEnumeration = (propertyArg) => {
811
+ const keys = Object.keys(propertyArg.type);
812
+ const values = [];
813
+ for (const key of keys) {
814
+ let value = propertyArg.type[key];
815
+ if (typeof value === 'number') {
816
+ value = value.toString();
817
+ }
818
+ values.push(value);
677
819
  }
678
- values.push(value);
679
- }
680
- for (const key of keys) {
681
- if (values.indexOf(key) < 0) {
682
- return false;
820
+ for (const key of keys) {
821
+ if (values.indexOf(key) < 0) {
822
+ return false;
823
+ }
683
824
  }
684
- }
685
- return true;
686
- };
687
- const getEnumValues = (propertyArg) => {
688
- console.log(JSON.stringify(propertyArg));
689
- const enumValues = [];
690
- Object.keys(propertyArg.type).forEach((valueArg) => {
691
- enumValues.push(valueArg);
692
- });
693
- return enumValues;
694
- };
695
- const determinePropertyType = async (propertyArg) => {
696
- const typeName = propertyArg.type.name;
697
- if (typeName) {
698
- return typeName;
699
- }
700
- else {
701
- return Array.isArray(propertyArg)
702
- ? 'Array'
703
- : isEnumeration(propertyArg)
704
- ? 'Enum'
705
- : 'Object';
706
- }
707
- };
708
- if (this.selectedItem && this.selectedItem.demo) {
709
- console.log(`Got Dees-Element for property evaluation.`);
710
- const anonItem = this.selectedItem;
711
- if (!anonItem) {
712
- this.warning = 'no element selected';
713
- return;
714
- }
715
- console.log(anonItem.elementProperties);
716
- const wccFrame = await this.dashboardRef.wccFrame;
717
- // Wait for render to complete and any demo wrappers to run
718
- await new Promise(resolve => setTimeout(resolve, 200));
719
- // Try to find the element with recursive search
720
- const viewport = await wccFrame.getViewportElement();
721
- let firstFoundInstantiatedElement = await this.findElementRecursively(viewport, this.selectedItem);
722
- // Retry logic if element not found
723
- let retries = 0;
724
- while (!firstFoundInstantiatedElement && retries < 5) {
825
+ return true;
826
+ };
827
+ const getEnumValues = (propertyArg) => {
828
+ console.log(JSON.stringify(propertyArg));
829
+ const enumValues = [];
830
+ Object.keys(propertyArg.type).forEach((valueArg) => {
831
+ enumValues.push(valueArg);
832
+ });
833
+ return enumValues;
834
+ };
835
+ const determinePropertyType = async (propertyArg) => {
836
+ const typeName = propertyArg.type.name;
837
+ if (typeName) {
838
+ return typeName;
839
+ }
840
+ else {
841
+ return Array.isArray(propertyArg)
842
+ ? 'Array'
843
+ : isEnumeration(propertyArg)
844
+ ? 'Enum'
845
+ : 'Object';
846
+ }
847
+ };
848
+ if (this.selectedItem && this.selectedItem.demo) {
849
+ console.log(`Got Dees-Element for property evaluation.`);
850
+ const anonItem = this.selectedItem;
851
+ if (!anonItem) {
852
+ this.warning = 'no element selected';
853
+ return;
854
+ }
855
+ console.log(anonItem.elementProperties);
856
+ const wccFrame = await this.dashboardRef.wccFrame;
857
+ // Wait for render to complete and any demo wrappers to run
725
858
  await new Promise(resolve => setTimeout(resolve, 200));
726
- try {
727
- firstFoundInstantiatedElement = await this.findElementRecursively(viewport, this.selectedItem);
859
+ // Try to find the element with recursive search
860
+ const viewport = await wccFrame.getViewportElement();
861
+ let firstFoundInstantiatedElement = await this.findElementRecursively(viewport, this.selectedItem);
862
+ // Retry logic if element not found
863
+ let retries = 0;
864
+ while (!firstFoundInstantiatedElement && retries < 5) {
865
+ await new Promise(resolve => setTimeout(resolve, 200));
866
+ try {
867
+ firstFoundInstantiatedElement = await this.findElementRecursively(viewport, this.selectedItem);
868
+ }
869
+ catch (error) {
870
+ console.error('Error during element search retry:', error);
871
+ }
872
+ retries++;
728
873
  }
729
- catch (error) {
730
- console.error('Error during element search retry:', error);
874
+ if (!firstFoundInstantiatedElement) {
875
+ this.warning = `no first instantiated element found for >>${anonItem.name}<< after ${retries} retries`;
876
+ this.propertyContent = [];
877
+ return;
731
878
  }
732
- retries++;
733
- }
734
- if (!firstFoundInstantiatedElement) {
735
- this.warning = `no first instantiated element found for >>${anonItem.name}<< after ${retries} retries`;
736
- this.propertyContent = [];
737
- return;
738
- }
739
- const classProperties = anonItem.elementProperties;
740
- if (!classProperties) {
741
- this.warning = `selected element >>${anonItem.name}<< does not expose element properties`;
742
- return;
743
- }
744
- this.warning = null;
745
- const propertyArray = [];
746
- for (const key of classProperties.keys()) {
747
- if (key === 'goBright' || key === 'domtools') {
748
- continue;
879
+ const classProperties = anonItem.elementProperties;
880
+ if (!classProperties) {
881
+ this.warning = `selected element >>${anonItem.name}<< does not expose element properties`;
882
+ return;
749
883
  }
750
- try {
751
- const property = classProperties.get(key);
752
- const propertyTypeString = await determinePropertyType(property);
753
- propertyArray.push(html `
884
+ this.warning = null;
885
+ const propertyArray = [];
886
+ for (const key of classProperties.keys()) {
887
+ if (key === 'goBright' || key === 'domtools') {
888
+ continue;
889
+ }
890
+ try {
891
+ const property = classProperties.get(key);
892
+ const propertyTypeString = await determinePropertyType(property);
893
+ propertyArray.push(html `
754
894
  <div class="property">
755
895
  <div class="property-label">${key} (${propertyTypeString})</div>
756
896
  ${(() => {
757
- switch (propertyTypeString) {
758
- case 'Boolean':
759
- return html `<input
897
+ switch (propertyTypeString) {
898
+ case 'Boolean':
899
+ return html `<input
760
900
  type="checkbox"
761
901
  ?checked=${firstFoundInstantiatedElement[key]}
762
902
  @input="${(eventArg) => {
763
- firstFoundInstantiatedElement[key] = eventArg.target.checked;
764
- }}"
903
+ firstFoundInstantiatedElement[key] = eventArg.target.checked;
904
+ }}"
765
905
  />`;
766
- case 'String':
767
- return html `<input
906
+ case 'String':
907
+ return html `<input
768
908
  type="text"
769
909
  .value=${firstFoundInstantiatedElement[key] || ''}
770
910
  @input="${(eventArg) => {
771
- firstFoundInstantiatedElement[key] = eventArg.target.value;
772
- }}"
911
+ firstFoundInstantiatedElement[key] = eventArg.target.value;
912
+ }}"
773
913
  />`;
774
- case 'Number':
775
- return html `<input
914
+ case 'Number':
915
+ return html `<input
776
916
  type="number"
777
917
  .value=${firstFoundInstantiatedElement[key] ?? ''}
778
918
  @input="${(eventArg) => {
779
- firstFoundInstantiatedElement[key] = parseFloat(eventArg.target.value) || 0;
780
- }}"
919
+ firstFoundInstantiatedElement[key] = parseFloat(eventArg.target.value) || 0;
920
+ }}"
781
921
  />`;
782
- case 'Enum':
783
- const enumValues = getEnumValues(property);
784
- return html `<select
922
+ case 'Enum':
923
+ const enumValues = getEnumValues(property);
924
+ return html `<select
785
925
  .value=${firstFoundInstantiatedElement[key] || ''}
786
926
  @change="${(eventArg) => {
787
- firstFoundInstantiatedElement[key] = eventArg.target.value;
788
- }}"
927
+ firstFoundInstantiatedElement[key] = eventArg.target.value;
928
+ }}"
789
929
  >
790
930
  ${enumValues.map((valueArg) => {
791
- return html `
931
+ return html `
792
932
  <option
793
933
  value="${valueArg}"
794
934
  >
795
935
  ${valueArg}
796
936
  </option>
797
937
  `;
798
- })}
938
+ })}
799
939
  </select>`;
800
- case 'Object':
801
- case 'Array':
802
- return html `<button
940
+ case 'Object':
941
+ case 'Array':
942
+ return html `<button
803
943
  class="editor-button"
804
944
  style="width: 100%; margin-top: 0.25rem;"
805
945
  @click="${() => this.openAdvancedEditor(key, firstFoundInstantiatedElement[key], firstFoundInstantiatedElement)}"
806
946
  >
807
947
  Edit ${propertyTypeString}
808
948
  </button>`;
809
- default:
810
- return html `<div style="color: #666; font-size: 0.7rem;">Unsupported type</div>`;
811
- }
812
- })()}
949
+ default:
950
+ return html `<div style="color: #666; font-size: 0.7rem;">Unsupported type</div>`;
951
+ }
952
+ })()}
813
953
  </div>
814
954
  `);
955
+ }
956
+ catch (error) {
957
+ console.error(`Error processing property ${key}:`, error);
958
+ // Continue with next property even if this one fails
959
+ }
815
960
  }
816
- catch (error) {
817
- console.error(`Error processing property ${key}:`, error);
818
- // Continue with next property even if this one fails
819
- }
961
+ this.propertyContent = propertyArray;
962
+ }
963
+ else {
964
+ console.log(`Cannot extract properties of ${this.selectedItem?.name}`);
965
+ this.warning = `You selected a page.`;
966
+ return null;
820
967
  }
821
- this.propertyContent = propertyArray;
822
- }
823
- else {
824
- console.log(`Cannot extract properties of ${this.selectedItem?.name}`);
825
- this.warning = `You selected a page.`;
826
- return null;
827
968
  }
828
- }
829
- selectTheme(themeArg) {
830
- this.selectedTheme = themeArg;
831
- this.dispatchEvent(new CustomEvent('selectedTheme', {
832
- detail: themeArg,
833
- }));
834
- console.log(this.dashboardRef.selectedType);
835
- this.dashboardRef.buildUrl();
836
- }
837
- async scheduleUpdate() {
838
- try {
839
- await this.createProperties();
969
+ selectTheme(themeArg) {
970
+ this.selectedTheme = themeArg;
971
+ this.dispatchEvent(new CustomEvent('selectedTheme', {
972
+ detail: themeArg,
973
+ }));
974
+ console.log(this.dashboardRef.selectedType);
975
+ this.dashboardRef.buildUrl();
840
976
  }
841
- catch (error) {
842
- console.error('Error creating properties:', error);
843
- // Clear property content on error to show clean state
844
- this.propertyContent = [];
977
+ async scheduleUpdate() {
978
+ try {
979
+ await this.createProperties();
980
+ }
981
+ catch (error) {
982
+ console.error('Error creating properties:', error);
983
+ // Clear property content on error to show clean state
984
+ this.propertyContent = [];
985
+ }
986
+ // Always call super.scheduleUpdate to ensure component updates
987
+ super.scheduleUpdate();
845
988
  }
846
- // Always call super.scheduleUpdate to ensure component updates
847
- super.scheduleUpdate();
848
- }
849
- selectViewport(viewport) {
850
- this.selectedViewport = viewport;
851
- setEnvironment(viewport);
852
- this.dispatchEvent(new CustomEvent('selectedViewport', {
853
- detail: viewport,
854
- }));
855
- this.dashboardRef.buildUrl();
856
- }
857
- openAdvancedEditor(propertyName, value, element) {
858
- // Check if this property is already being edited
859
- const existingEditor = this.editingProperties.find(p => p.name === propertyName && p.element === element);
860
- if (existingEditor) {
861
- return; // Property is already open for editing
862
- }
863
- const newEditor = {
864
- id: `${propertyName}-${Date.now()}`,
865
- name: propertyName,
866
- value: value,
867
- element: element,
868
- editorValue: JSON.stringify(value, null, 2),
869
- editorError: ''
870
- };
871
- this.editingProperties = [...this.editingProperties, newEditor];
872
- // Notify parent to resize frame if this is the first editor
873
- if (this.editingProperties.length === 1) {
874
- this.dispatchEvent(new CustomEvent('editorStateChanged', {
875
- detail: { isOpen: true },
876
- bubbles: true
989
+ selectViewport(viewport) {
990
+ this.selectedViewport = viewport;
991
+ setEnvironment(viewport);
992
+ this.dispatchEvent(new CustomEvent('selectedViewport', {
993
+ detail: viewport,
877
994
  }));
995
+ this.dashboardRef.buildUrl();
878
996
  }
879
- }
880
- handleEditorSave(editorId) {
881
- const editor = this.editingProperties.find(p => p.id === editorId);
882
- if (!editor)
883
- return;
884
- try {
885
- const parsedValue = JSON.parse(editor.editorValue);
886
- editor.element[editor.name] = parsedValue;
997
+ openAdvancedEditor(propertyName, value, element) {
998
+ // Check if this property is already being edited
999
+ const existingEditor = this.editingProperties.find(p => p.name === propertyName && p.element === element);
1000
+ if (existingEditor) {
1001
+ return; // Property is already open for editing
1002
+ }
1003
+ const newEditor = {
1004
+ id: `${propertyName}-${Date.now()}`,
1005
+ name: propertyName,
1006
+ value: value,
1007
+ element: element,
1008
+ editorValue: JSON.stringify(value, null, 2),
1009
+ editorError: ''
1010
+ };
1011
+ this.editingProperties = [...this.editingProperties, newEditor];
1012
+ // Notify parent to resize frame if this is the first editor
1013
+ if (this.editingProperties.length === 1) {
1014
+ this.dispatchEvent(new CustomEvent('editorStateChanged', {
1015
+ detail: { isOpen: true },
1016
+ bubbles: true
1017
+ }));
1018
+ }
1019
+ }
1020
+ handleEditorSave(editorId) {
1021
+ const editor = this.editingProperties.find(p => p.id === editorId);
1022
+ if (!editor)
1023
+ return;
1024
+ try {
1025
+ const parsedValue = JSON.parse(editor.editorValue);
1026
+ editor.element[editor.name] = parsedValue;
1027
+ // Remove this editor from the list
1028
+ this.editingProperties = this.editingProperties.filter(p => p.id !== editorId);
1029
+ // If no more editors, notify parent to resize frame
1030
+ if (this.editingProperties.length === 0) {
1031
+ this.dispatchEvent(new CustomEvent('editorStateChanged', {
1032
+ detail: { isOpen: false },
1033
+ bubbles: true
1034
+ }));
1035
+ }
1036
+ // Refresh properties display
1037
+ this.createProperties();
1038
+ }
1039
+ catch (error) {
1040
+ // Update error for this specific editor
1041
+ const editorIndex = this.editingProperties.findIndex(p => p.id === editorId);
1042
+ if (editorIndex !== -1) {
1043
+ this.editingProperties[editorIndex].editorError = `Invalid JSON: ${error.message}`;
1044
+ this.requestUpdate();
1045
+ }
1046
+ }
1047
+ }
1048
+ handleEditorCancel(editorId) {
887
1049
  // Remove this editor from the list
888
1050
  this.editingProperties = this.editingProperties.filter(p => p.id !== editorId);
889
1051
  // If no more editors, notify parent to resize frame
@@ -893,79 +1055,36 @@ let WccProperties = class WccProperties extends DeesElement {
893
1055
  bubbles: true
894
1056
  }));
895
1057
  }
896
- // Refresh properties display
897
- this.createProperties();
898
- }
899
- catch (error) {
900
- // Update error for this specific editor
901
- const editorIndex = this.editingProperties.findIndex(p => p.id === editorId);
902
- if (editorIndex !== -1) {
903
- this.editingProperties[editorIndex].editorError = `Invalid JSON: ${error.message}`;
904
- this.requestUpdate();
905
- }
906
1058
  }
907
- }
908
- handleEditorCancel(editorId) {
909
- // Remove this editor from the list
910
- this.editingProperties = this.editingProperties.filter(p => p.id !== editorId);
911
- // If no more editors, notify parent to resize frame
912
- if (this.editingProperties.length === 0) {
1059
+ closeAllEditors() {
1060
+ this.editingProperties = [];
1061
+ // Notify parent to resize frame back
913
1062
  this.dispatchEvent(new CustomEvent('editorStateChanged', {
914
1063
  detail: { isOpen: false },
915
1064
  bubbles: true
916
1065
  }));
917
1066
  }
918
- }
919
- closeAllEditors() {
920
- this.editingProperties = [];
921
- // Notify parent to resize frame back
922
- this.dispatchEvent(new CustomEvent('editorStateChanged', {
923
- detail: { isOpen: false },
924
- bubbles: true
925
- }));
926
- }
927
- toggleFullscreen() {
928
- this.dispatchEvent(new CustomEvent('toggleFullscreen', {
929
- bubbles: true
930
- }));
931
- }
932
- };
933
- __decorate([
934
- property({
935
- type: WccDashboard
936
- }),
937
- __metadata("design:type", WccDashboard)
938
- ], WccProperties.prototype, "dashboardRef", void 0);
939
- __decorate([
940
- property(),
941
- __metadata("design:type", Object)
942
- ], WccProperties.prototype, "selectedItem", void 0);
943
- __decorate([
944
- property(),
945
- __metadata("design:type", String)
946
- ], WccProperties.prototype, "selectedViewport", void 0);
947
- __decorate([
948
- property(),
949
- __metadata("design:type", String)
950
- ], WccProperties.prototype, "selectedTheme", void 0);
951
- __decorate([
952
- property(),
953
- __metadata("design:type", String)
954
- ], WccProperties.prototype, "warning", void 0);
955
- __decorate([
956
- property(),
957
- __metadata("design:type", Boolean)
958
- ], WccProperties.prototype, "isFullscreen", void 0);
959
- __decorate([
960
- state(),
961
- __metadata("design:type", Array)
962
- ], WccProperties.prototype, "propertyContent", void 0);
963
- __decorate([
964
- state(),
965
- __metadata("design:type", Array)
966
- ], WccProperties.prototype, "editingProperties", void 0);
967
- WccProperties = __decorate([
968
- customElement('wcc-properties')
969
- ], WccProperties);
1067
+ toggleFullscreen() {
1068
+ this.dispatchEvent(new CustomEvent('toggleFullscreen', {
1069
+ bubbles: true
1070
+ }));
1071
+ }
1072
+ // ==================== Recording Methods ====================
1073
+ handleRecordButtonClick() {
1074
+ if (this.isRecording) {
1075
+ // Stop recording by calling the panel's stopRecording method
1076
+ const panel = this.shadowRoot?.querySelector('wcc-recording-panel');
1077
+ if (panel && panel.stopRecording) {
1078
+ panel.stopRecording();
1079
+ }
1080
+ }
1081
+ else {
1082
+ // Toggle the recording panel
1083
+ this.showRecordingPanel = !this.showRecordingPanel;
1084
+ }
1085
+ }
1086
+ };
1087
+ return WccProperties = _classThis;
1088
+ })();
970
1089
  export { WccProperties };
971
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLXByb3BlcnRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvd2NjLXByb3BlcnRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsS0FBSyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBUWxELElBQUksV0FBVyxHQUFpQixRQUFRLENBQUM7QUFFekMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7SUFDdkMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUM7QUFHSyxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsV0FBVztJQUF2Qzs7UUFVRSxxQkFBZ0IsR0FBaUIsUUFBUSxDQUFDO1FBRzFDLGtCQUFhLEdBQVcsTUFBTSxDQUFDO1FBRy9CLFlBQU8sR0FBVyxJQUFJLENBQUM7UUFHdkIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHckMsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBR3ZDLHNCQUFpQixHQU9aLEVBQUUsQ0FBQztRQUVELGlCQUFZLEdBQVcsR0FBRyxDQUFDO0lBazdCcEMsQ0FBQztJQWg3QlEsTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBMkJLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRzs7Ozs7O3FCQU1oRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
1090
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLXByb3BlcnRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvd2NjLXByb3BlcnRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQXVCLEtBQUssRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sMEJBQTBCLENBQUM7QUFPbEMsSUFBSSxXQUFXLEdBQWlCLFFBQVEsQ0FBQztBQUV6QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtJQUN2QyxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztJQUdXLGFBQWE7NEJBRHpCLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQzs7OztzQkFDRyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQUFuQixTQUFRLFdBQVc7Ozs7d0NBQzNDLFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsWUFBWTtpQkFDbkIsQ0FBQzt3Q0FHRCxRQUFRLEVBQUU7NENBR1YsUUFBUSxFQUFFO3lDQUdWLFFBQVEsRUFBRTttQ0FHVixRQUFRLEVBQUU7d0NBR1YsUUFBUSxFQUFFOzJDQUdWLEtBQUssRUFBRTs2Q0FHUCxLQUFLLEVBQUU7OENBV1AsS0FBSyxFQUFFO3VDQUdQLEtBQUssRUFBRTs2Q0FHUCxLQUFLLEVBQUU7WUFyQ1IseUxBQVMsWUFBWSw2QkFBWixZQUFZLG1HQUFlO1lBR3BDLHlMQUFTLFlBQVksNkJBQVosWUFBWSxtR0FBaUM7WUFHdEQscU1BQVMsZ0JBQWdCLDZCQUFoQixnQkFBZ0IsMkdBQTBCO1lBR25ELDRMQUFTLGFBQWEsNkJBQWIsYUFBYSxxR0FBa0I7WUFHeEMsMEtBQVMsT0FBTyw2QkFBUCxPQUFPLHlGQUFnQjtZQUdoQyx5TEFBUyxZQUFZLDZCQUFaLFlBQVksbUdBQWtCO1lBR3ZDLGtNQUFTLGVBQWUsNkJBQWYsZUFBZSx5R0FBd0I7WUFHaEQsd01BQVMsaUJBQWlCLDZCQUFqQixpQkFBaUIsNkdBT2xCO1lBSVIsMk1BQVMsa0JBQWtCLDZCQUFsQixrQkFBa0IsK0dBQWtCO1lBRzdDLHNMQUFTLFdBQVcsNkJBQVgsV0FBVyxpR0FBa0I7WUFHdEMsd01BQVMsaUJBQWlCLDZCQUFqQixpQkFBaUIsNkdBQWE7WUExQ3pDLDZLQTgvQkM7OztZQTkvQlksdURBQWE7O1FBSXhCLDZGQUFvQztRQUFwQyxJQUFTLFlBQVksa0RBQWU7UUFBcEMsSUFBUyxZQUFZLHdEQUFlO1FBR3BDLHlKQUFzRDtRQUF0RCxJQUFTLFlBQVksa0RBQWlDO1FBQXRELElBQVMsWUFBWSx3REFBaUM7UUFHdEQsd0pBQTBDLFFBQVEsR0FBQztRQUFuRCxJQUFTLGdCQUFnQixzREFBMEI7UUFBbkQsSUFBUyxnQkFBZ0IsNERBQTBCO1FBR25ELHNKQUFpQyxNQUFNLEdBQUM7UUFBeEMsSUFBUyxhQUFhLG1EQUFrQjtRQUF4QyxJQUFTLGFBQWEseURBQWtCO1FBR3hDLHVJQUEyQixJQUFJLEdBQUM7UUFBaEMsSUFBUyxPQUFPLDZDQUFnQjtRQUFoQyxJQUFTLE9BQU8sbURBQWdCO1FBR2hDLDJJQUFpQyxLQUFLLEdBQUM7UUFBdkMsSUFBUyxZQUFZLGtEQUFrQjtRQUF2QyxJQUFTLFlBQVksd0RBQWtCO1FBR3ZDLHNKQUE2QyxFQUFFLEdBQUM7UUFBaEQsSUFBUyxlQUFlLHFEQUF3QjtRQUFoRCxJQUFTLGVBQWUsMkRBQXdCO1FBR2hELDZKQU9LLEVBQUUsR0FBQztRQVBSLElBQVMsaUJBQWlCLHVEQU9sQjtRQVBSLElBQVMsaUJBQWlCLDZEQU9sQjtRQUlSLGlLQUF1QyxLQUFLLEdBQUM7UUFGN0MsK0JBQStCO1FBRS9CLElBQVMsa0JBQWtCLHdEQUFrQjtRQUE3QyxJQUFTLGtCQUFrQiw4REFBa0I7UUFHN0Msb0pBQWdDLEtBQUssR0FBQztRQUF0QyxJQUFTLFdBQVcsaURBQWtCO1FBQXRDLElBQVMsV0FBVyx1REFBa0I7UUFHdEMseUpBQXFDLENBQUMsR0FBQztRQUF2QyxJQUFTLGlCQUFpQix1REFBYTtRQUF2QyxJQUFTLGlCQUFpQiw2REFBYTtRQUVoQyxZQUFZLG1FQUFXLEdBQUcsRUFBQztRQUUzQixNQUFNO1lBQ1gsT0FBTyxJQUFJLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkEyQkssSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHOzs7Ozs7cUJBTWhFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQWtOckMsSUFBSSxDQUFDLFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUE0TjdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7Ozs7c0RBSU0sSUFBSSxDQUFDLGVBQWU7Ozs7O2NBSzVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O2FBaUIzQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2NBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQTs7OzhDQUdQLElBQUksQ0FBQyxJQUFJOzsyREFFSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzttRUFDOUIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Ozs7Ozs2QkFNMUUsSUFBSSxDQUFDLFdBQVc7NkJBQ2hCLENBQUMsQ0FBYSxFQUFFLEVBQUU7Z0JBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxNQUFNLENBQUMsV0FBVyxHQUFJLENBQUMsQ0FBQyxNQUE4QixDQUFDLEtBQUssQ0FBQztvQkFDN0QsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7K0JBQ1UsQ0FBQyxDQUFnQixFQUFFLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNuQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBNkIsQ0FBQztvQkFDL0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztvQkFDcEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztvQkFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDM0IsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkUsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzFELENBQUM7WUFDSCxDQUFDOztvQkFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7Z0RBQ0ssSUFBSSxDQUFDLFdBQVc7bUJBQzdDLENBQUMsQ0FBQyxDQUFDLElBQUk7OzthQUdiLENBQUM7OztPQUdQLENBQUMsQ0FBQyxDQUFDLElBQUk7Ozs7Y0FJQSxJQUFJLENBQUMsZUFBZTs7Ozs7O2dDQU1GLElBQUksQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7eUJBQ3hELEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNCLENBQUM7Ozs7O2dDQUtlLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7eUJBQzFELEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLENBQUM7Ozs7Ozs7Ozs7Z0NBVWUsSUFBSSxDQUFDLGdCQUFnQixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJO3lCQUM1RCxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQixDQUFDOzs7OztnQ0FLZSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7eUJBQzlELEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7Ozs7O2dDQUtlLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTt5QkFDN0QsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEMsQ0FBQzs7Ozs7Z0NBS2UsSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVM7Z0JBQ25ELElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRO2dCQUNoQyxDQUFDLENBQUMsVUFBVTtnQkFDWixDQUFDLENBQUMsSUFBSTt5QkFDQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxDQUFDOzs7Ozs7cUNBTW9CLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTs7Z0JBRWxELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxZQUFZOzs7OztxQkFLL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNO3dCQUNwQyxJQUFJLENBQUMsaUJBQWlCOzRCQUNsQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7OztVQUd0RCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUEsd0JBQXdCLElBQUksQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTs7OztRQUl4RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTs7MEJBRVosSUFBSSxDQUFDLFlBQVk7NkJBQ2QsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNuQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7NkJBQ2xDLENBQUMsQ0FBYyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO21CQUM3RSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7T0FFNUcsQ0FBQyxDQUFDLENBQUMsSUFBSTtLQUNULENBQUM7UUFDSixDQUFDO1FBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQWtCLEVBQUUsWUFBaUIsRUFBRSxXQUFtQixDQUFDO1lBQzlGLElBQUksUUFBUSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFL0IsSUFBSSxDQUFDO2dCQUNILHdCQUF3QjtnQkFDeEIsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUNuRCxJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUUsQ0FBQzt3QkFDbEMsT0FBTyxLQUFvQixDQUFDO29CQUM5QixDQUFDO2dCQUNILENBQUM7Z0JBRUQscUNBQXFDO2dCQUNyQyxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ25ELDZDQUE2QztvQkFDN0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ25GLElBQUksS0FBSzt3QkFBRSxPQUFPLEtBQUssQ0FBQztvQkFFeEIsc0NBQXNDO29CQUN0QyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDckIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLFVBQWlCLEVBQUUsWUFBWSxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDM0csSUFBSSxXQUFXOzRCQUFFLE9BQU8sV0FBVyxDQUFDO29CQUN0QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFTSxLQUFLLENBQUMsZ0JBQWdCO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUvQiw4QkFBOEI7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxXQUFXLEVBQVcsRUFBRTtnQkFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDOUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDM0IsQ0FBQztvQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixDQUFDO2dCQUNELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDNUIsT0FBTyxLQUFLLENBQUM7b0JBQ2YsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxhQUFhLEdBQUcsQ0FBQyxXQUFXLEVBQVMsRUFBRTtnQkFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sVUFBVSxHQUFVLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO29CQUN6RCxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLFVBQVUsQ0FBQztZQUNwQixDQUFDLENBQUM7WUFDRixNQUFNLHFCQUFxQixHQUFHLEtBQUssRUFBRSxXQUFnQixFQUEwQixFQUFFO2dCQUMvRSxNQUFNLFFBQVEsR0FBb0IsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3hELElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2IsT0FBTyxRQUFRLENBQUM7Z0JBQ2xCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO3dCQUMvQixDQUFDLENBQUMsT0FBTzt3QkFDVCxDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQzs0QkFDNUIsQ0FBQyxDQUFDLE1BQU07NEJBQ1IsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFLLElBQUksQ0FBQyxZQUFvQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sUUFBUSxHQUFRLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDZCxJQUFJLENBQUMsT0FBTyxHQUFHLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztnQkFFbEQsMkRBQTJEO2dCQUMzRCxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUV2RCxnREFBZ0Q7Z0JBQ2hELE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3JELElBQUksNkJBQTZCLEdBQWdCLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUNoRixRQUFRLEVBQ1IsSUFBSSxDQUFDLFlBQW1CLENBQ3pCLENBQUM7Z0JBRUYsbUNBQW1DO2dCQUNuQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyw2QkFBNkIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3JELE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZELElBQUksQ0FBQzt3QkFDSCw2QkFBNkIsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FDL0QsUUFBUSxFQUNSLElBQUksQ0FBQyxZQUFtQixDQUN6QixDQUFDO29CQUNKLENBQUM7b0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQzt3QkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM3RCxDQUFDO29CQUNELE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUM7Z0JBRUQsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7b0JBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsNkNBQTZDLFFBQVEsQ0FBQyxJQUFJLFlBQVksT0FBTyxVQUFVLENBQUM7b0JBQ3ZHLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO29CQUMxQixPQUFPO2dCQUNULENBQUM7Z0JBQ0QsTUFBTSxlQUFlLEdBQXFCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDckUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLHNCQUFzQixRQUFRLENBQUMsSUFBSSx1Q0FBdUMsQ0FBQztvQkFDMUYsT0FBTztnQkFDVCxDQUFDO2dCQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFNLGFBQWEsR0FBcUIsRUFBRSxDQUFDO2dCQUMzQyxLQUFLLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUN6QyxJQUFJLEdBQUcsS0FBSyxVQUFVLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUM3QyxTQUFTO29CQUNYLENBQUM7b0JBQ0QsSUFBSSxDQUFDO3dCQUNILE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDakUsYUFBYSxDQUFDLElBQUksQ0FDbEIsSUFBSSxDQUFBOzs0Q0FFOEIsR0FBRyxLQUFLLGtCQUFrQjtnQkFDdEQsQ0FBQyxHQUFHLEVBQUU7NEJBQ04sUUFBUSxrQkFBa0IsRUFBRSxDQUFDO2dDQUMzQixLQUFLLFNBQVM7b0NBQ1osT0FBTyxJQUFJLENBQUE7O2lDQUVFLDZCQUE2QixDQUFDLEdBQUcsQ0FBQztnQ0FDbkMsQ0FBQyxRQUFhLEVBQUUsRUFBRTt3Q0FDMUIsNkJBQTZCLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7b0NBQy9ELENBQUM7dUJBQ0EsQ0FBQztnQ0FDTixLQUFLLFFBQVE7b0NBQ1gsT0FBTyxJQUFJLENBQUE7OytCQUVBLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0NBQ3ZDLENBQUMsUUFBYSxFQUFFLEVBQUU7d0NBQzFCLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO29DQUM3RCxDQUFDO3VCQUNBLENBQUM7Z0NBQ04sS0FBSyxRQUFRO29DQUNYLE9BQU8sSUFBSSxDQUFBOzsrQkFFQSw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2dDQUN2QyxDQUFDLFFBQWEsRUFBRSxFQUFFO3dDQUMxQiw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0NBQzlFLENBQUM7dUJBQ0EsQ0FBQztnQ0FDTixLQUFLLE1BQU07b0NBQ1QsTUFBTSxVQUFVLEdBQVUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29DQUNsRCxPQUFPLElBQUksQ0FBQTsrQkFDQSw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2lDQUN0QyxDQUFDLFFBQWEsRUFBRSxFQUFFO3dDQUMzQiw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztvQ0FDN0QsQ0FBQzs7d0JBRUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO3dDQUM1QixPQUFPLElBQUksQ0FBQTs7cUNBRUUsUUFBUTs7OEJBRWYsUUFBUTs7eUJBRWIsQ0FBQztvQ0FDSixDQUFDLENBQUM7OEJBQ00sQ0FBQztnQ0FDYixLQUFLLFFBQVEsQ0FBQztnQ0FDZCxLQUFLLE9BQU87b0NBQ1YsT0FBTyxJQUFJLENBQUE7OztnQ0FHQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxFQUFFLDZCQUE2QixDQUFDOzs2QkFFeEcsa0JBQWtCOzhCQUNqQixDQUFDO2dDQUNiO29DQUNFLE9BQU8sSUFBSSxDQUFBLHFFQUFxRSxDQUFDOzRCQUNyRixDQUFDO3dCQUNILENBQUMsQ0FBQyxFQUFFOztXQUVQLENBQ0YsQ0FBQztvQkFDRixDQUFDO29CQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7d0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQzFELHFEQUFxRDtvQkFDdkQsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO1lBQ3ZDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFpQyxJQUFJLENBQUMsWUFBb0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLENBQUMsT0FBTyxHQUFHLHNCQUFzQixDQUFDO2dCQUN0QyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBRU0sV0FBVyxDQUFDLFFBQWdCO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1lBQzlCLElBQUksQ0FBQyxhQUFhLENBQ2hCLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRTtnQkFDL0IsTUFBTSxFQUFFLFFBQVE7YUFDakIsQ0FBQyxDQUNILENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixDQUFDO1FBRU0sS0FBSyxDQUFDLGNBQWM7WUFDekIsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDaEMsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbkQsc0RBQXNEO2dCQUN0RCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUM1QixDQUFDO1lBQ0QsK0RBQStEO1lBQy9ELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRU0sY0FBYyxDQUFDLFFBQXNCO1lBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7WUFDakMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQ2hCLElBQUksV0FBVyxDQUFDLGtCQUFrQixFQUFFO2dCQUNsQyxNQUFNLEVBQUUsUUFBUTthQUNqQixDQUFDLENBQ0gsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUVPLGtCQUFrQixDQUFDLFlBQW9CLEVBQUUsS0FBVSxFQUFFLE9BQW9CO1lBQy9FLGlEQUFpRDtZQUNqRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztZQUMxRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixPQUFPLENBQUMsdUNBQXVDO1lBQ2pELENBQUM7WUFFRCxNQUFNLFNBQVMsR0FBRztnQkFDaEIsRUFBRSxFQUFFLEdBQUcsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbkMsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsV0FBVyxFQUFFLEVBQUU7YUFDaEIsQ0FBQztZQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRWhFLDREQUE0RDtZQUM1RCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxhQUFhLENBQ2hCLElBQUksV0FBVyxDQUFDLG9CQUFvQixFQUFFO29CQUNwQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO29CQUN4QixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRU8sZ0JBQWdCLENBQUMsUUFBZ0I7WUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUVwQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQztnQkFFMUMsbUNBQW1DO2dCQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7Z0JBRS9FLG9EQUFvRDtnQkFDcEQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN4QyxJQUFJLENBQUMsYUFBYSxDQUNoQixJQUFJLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTt3QkFDcEMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTt3QkFDekIsT0FBTyxFQUFFLElBQUk7cUJBQ2QsQ0FBQyxDQUNILENBQUM7Z0JBQ0osQ0FBQztnQkFFRCw2QkFBNkI7Z0JBQzdCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLHdDQUF3QztnQkFDeEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7Z0JBQzdFLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDbkYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFTyxrQkFBa0IsQ0FBQyxRQUFnQjtZQUN6QyxtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBRS9FLG9EQUFvRDtZQUNwRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxhQUFhLENBQ2hCLElBQUksV0FBVyxDQUFDLG9CQUFvQixFQUFFO29CQUNwQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO29CQUN6QixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRU8sZUFBZTtZQUNyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBRTVCLHFDQUFxQztZQUNyQyxJQUFJLENBQUMsYUFBYSxDQUNoQixJQUFJLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDcEMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDekIsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFTyxnQkFBZ0I7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FDaEIsSUFBSSxXQUFXLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsOERBQThEO1FBRXRELHVCQUF1QjtZQUM3QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDckIsNkRBQTZEO2dCQUM3RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBUSxDQUFDO2dCQUMzRSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ2pDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTiw2QkFBNkI7Z0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUNyRCxDQUFDO1FBQ0gsQ0FBQzs7OztTQTcvQlUsYUFBYSJ9