qms-angular 1.0.71 → 1.0.72

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 (39) hide show
  1. package/bundles/qms-angular.umd.js +160 -137
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.js +3 -3
  4. package/esm2015/lib/components/range-slider/directives/range-slider-lockup.directive.js +20 -0
  5. package/esm2015/lib/components/range-slider/directives/range-slider.directive.js +34 -0
  6. package/esm2015/lib/components/range-slider/index.js +2 -0
  7. package/esm2015/lib/components/range-slider/public-api.js +4 -0
  8. package/esm2015/lib/components/range-slider/range-slider.module.js +22 -0
  9. package/esm2015/lib/components/related/popup/related-popup.component.js +1 -1
  10. package/esm2015/lib/components/select-one/select-one.component.js +50 -3
  11. package/esm2015/lib/components/tree/tree.component.js +8 -8
  12. package/esm2015/lib/components/treeNew/tree.component.js +6 -3
  13. package/esm2015/lib/qms-angular.module.js +1 -7
  14. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
  15. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.js +1 -46
  16. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +19 -19
  17. package/esm2015/public-api.js +3 -3
  18. package/fesm2015/qms-angular.js +152 -135
  19. package/fesm2015/qms-angular.js.map +1 -1
  20. package/lib/{directives/range-slider → components/range-slider/directives}/range-slider-lockup.directive.d.ts +0 -0
  21. package/lib/{directives/range-slider → components/range-slider/directives}/range-slider.directive.d.ts +0 -0
  22. package/lib/components/range-slider/index.d.ts +1 -0
  23. package/lib/components/range-slider/public-api.d.ts +3 -0
  24. package/lib/components/range-slider/range-slider.module.d.ts +2 -0
  25. package/lib/components/select-one/select-one.component.d.ts +4 -0
  26. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +1 -0
  27. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +2 -4
  28. package/package.json +1 -1
  29. package/public-api.d.ts +1 -2
  30. package/qms-angular.metadata.json +1 -1
  31. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
  32. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  33. package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/qmsCKEditorFullscreenPlugin.js +23 -12
  34. package/src/assets/qms-ckeditor-plugin/src/themes/icons/fullscreen_exit.svg +1 -0
  35. package/src/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.scss +5 -1
  36. package/src/lib/qms-ckeditor-components/qms-ckeditor.component.scss +24 -0
  37. package/src/themes/core/_range-slider.scss +59 -38
  38. package/esm2015/lib/directives/range-slider/range-slider-lockup.directive.js +0 -20
  39. package/esm2015/lib/directives/range-slider/range-slider.directive.js +0 -36
@@ -1,7 +1,9 @@
1
1
  import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
2
2
  import ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';
3
3
  import fullscreenIcon from '../../themes/icons/fullscreen.svg';
4
+ import fullscreenExitIcon from '../../themes/icons/fullscreen_exit.svg'
4
5
  import * as QMSCKEditorService from '../common/qmsCKEditorService';
6
+ import * as constant from '../common/qmsCKEditorConstant';
5
7
 
6
8
  export default class QMSCKEditorFullscreenPlugin extends Plugin {
7
9
  init() {
@@ -14,25 +16,34 @@ export default class QMSCKEditorFullscreenPlugin extends Plugin {
14
16
  const view = new ButtonView(locale);
15
17
 
16
18
  view.set({
17
- label: 'Maximine/Minimine',
19
+ label: 'Maximine',
18
20
  icon: fullscreenIcon,
19
21
  tooltip: true
20
22
  });
21
-
23
+ const fullscreenClass = this.editor.config.get('fullScreenConfig.class') || 'qmsckeditor__fullscreen';
24
+
22
25
  view.on('execute', () => {
23
- const fullscreen = window.parent.document.getElementsByClassName('qmsckeditor__fullscreen');
24
- if (fullscreen && fullscreen.length > 0) {
25
- editor.editing.view.change( writer => {
26
- writer.setStyle( 'height', 'calc(100vh - 180px)', editor.editing.view.document.getRoot() );
27
- } );
26
+ const ck = window.document.getElementById('qmsckeditor');
27
+ const isFullscreen = ck && ck.classList.contains(fullscreenClass);
28
+ if (!isFullscreen) {
29
+ view.set({
30
+ label: 'Minimine',
31
+ icon: fullscreenExitIcon,
32
+ tooltip: true
33
+ });
34
+ ck.classList.add(fullscreenClass);
28
35
  }
29
36
  else {
30
- editor.editing.view.change( writer => {
31
- writer.setStyle( 'height', 'calc(100vh - 150px)', editor.editing.view.document.getRoot() );
32
- } );
37
+ view.set({
38
+ label: 'Maximine',
39
+ icon: fullscreenIcon,
40
+ tooltip: true
41
+ });
42
+ if (ck.classList.contains(fullscreenClass)) {
43
+ ck.classList.remove(fullscreenClass);
44
+ }
33
45
  }
34
-
35
- QMSCKEditorService.fullscreenNotify(null);
46
+ QMSCKEditorService.fullscreenNotify(isFullscreen);
36
47
  })
37
48
 
38
49
  return view;
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/></svg>
@@ -117,7 +117,11 @@
117
117
  }
118
118
 
119
119
  .favorite {
120
- color: #b13514 !important;
120
+ color: #b13514;
121
+ }
122
+
123
+ .not-favorite {
124
+ color: rgba(0, 0, 0, 0.6) !important;
121
125
  }
122
126
 
123
127
  .btn-favorite {
@@ -98,6 +98,30 @@
98
98
  }
99
99
  }
100
100
 
101
+ .qmsckeditor__fullscreen {
102
+ position: fixed;
103
+ top: 0;
104
+ left: 0;
105
+ bottom: 0;
106
+ right: 0;
107
+ overflow: auto;
108
+ background: white;
109
+ }
110
+
111
+ .qmsckeditor__fullscreen .qms-ckeditor {
112
+ height: 98%;
113
+ display: inline-block;
114
+ width: 100%;
115
+ }
116
+
117
+ .qmsckeditor__fullscreen .ck.ck-editor__main {
118
+ height: 98%;
119
+ }
120
+
121
+ .qmsckeditor__fullscreen .ck.ck-editor__editable {
122
+ height: inherit;
123
+ }
124
+
101
125
  .sub-container {
102
126
  display: flex;
103
127
  justify-content: space-between;
@@ -6,6 +6,7 @@
6
6
  .mat-slider-track-background{
7
7
  background-color: $slider-background;
8
8
  }
9
+
9
10
  .mat-slider-track-fill{
10
11
  background: $active;
11
12
  }
@@ -21,33 +22,6 @@
21
22
  border: 3px solid transparent;
22
23
  border-radius: 50%;
23
24
  }
24
-
25
- &.mat-slider-has-ticks .mat-slider-wrapper::after{
26
- border-color: $slider-tick-color;
27
- }
28
-
29
- &.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover{
30
- border-color: $slider-hover-border;
31
- }
32
-
33
- &:focus-visible{
34
- border-color: $slider-focus-border;
35
- }
36
-
37
- &.cdk-mouse-focused, &.cdk-touch-focused, &.cdk-program-focused{
38
- .mat-slider-thumb {
39
- border-width: 18px;
40
- border-color: $slider-pressed;
41
- transform: scale(0.7);
42
- }
43
- }
44
-
45
- &.mat-slider-min-value:not(.mat-slider-thumb-label-showing){
46
- .mat-slider-thumb {
47
- background-color: $active;
48
- border-color: $slider-hover-border;
49
- }
50
- }
51
25
 
52
26
  .mat-slider-thumb:after {
53
27
  content: "";
@@ -68,6 +42,33 @@
68
42
  transition: background 1s;
69
43
  }
70
44
 
45
+ &.mat-slider-min-value:not(.mat-slider-thumb-label-showing){
46
+ .mat-slider-thumb {
47
+ background-color: $active;
48
+ border-color: $slider-focus-border;
49
+ }
50
+ }
51
+
52
+ &.mat-slider-has-ticks .mat-slider-wrapper::after{
53
+ border-color: $slider-tick-color;
54
+ }
55
+
56
+ &.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover{
57
+ border-color: $slider-hover-border;
58
+ }
59
+
60
+ &:focus-visible{
61
+ border-color: $slider-focus-border;
62
+ }
63
+
64
+ &.cdk-mouse-focused, &.cdk-touch-focused, &.cdk-program-focused{
65
+ .mat-slider-thumb {
66
+ border-width: 18px;
67
+ border-color: $slider-focus-border;
68
+ transform: scale(0.7);
69
+ }
70
+ }
71
+
71
72
  &.qms-range-slider-active {
72
73
  .mat-slider-thumb:after {
73
74
  width: 48px;
@@ -88,12 +89,15 @@
88
89
 
89
90
  .mat-slider-ticks{
90
91
  background-image: repeating-linear-gradient(to right, $slider-tick-color, $slider-tick-color 2px, transparent 0, transparent);
91
- // background-image: repeating-radial-gradient(circle at center, rgba(255, 255, 255, 0.38), rgba(255, 255, 255, 0.38) 2px, transparent 0, transparent);
92
92
  opacity: 1;
93
93
  }
94
+
95
+ .mat-slider-focus-ring{
96
+ background-color: transparent;
97
+ }
98
+
99
+
94
100
  }
95
-
96
-
97
101
  }
98
102
 
99
103
 
@@ -143,29 +147,47 @@
143
147
  }
144
148
  }
145
149
 
146
- .mat-slider:hover, .mat-slider:focus{
150
+ .mat-slider{
147
151
  &.qms-range-slider{
148
- &:not(.mat-slider-disabled){
152
+ &:not(.mat-slider-disabled):hover{
149
153
  &.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover{
150
- border-color: $slider-hover-border;
154
+ .mat-slider-thumb{
155
+ border-color: $slider-hover-border;
156
+ }
157
+
151
158
  }
152
159
  .mat-slider-thumb {
153
160
  height: 48px;
154
161
  width: 48px;
162
+ border-color: $slider-hover-border;
155
163
  border: solid 18px $slider-hover-border;
156
164
  bottom: -24px;
157
165
  right: -24px;
158
166
  background-clip: padding-box;
159
167
  }
160
- .mat-slider-track-background{
161
- background-color: $slider-background;
168
+ }
169
+
170
+ &.mat-slider-disabled{
171
+ .mat-slider-thumb{
172
+ border-color: transparent;
162
173
  }
174
+ }
175
+ }
176
+ }
163
177
 
178
+ .mat-slider{
179
+ &.qms-range-slider{
180
+ &:not(.mat-slider-disabled){
164
181
  &.cdk-mouse-focused, &.cdk-touch-focused, &.cdk-program-focused{
165
182
  .mat-slider-thumb {
166
- border-width: 18px;
167
- border-color: $slider-pressed;
168
183
  transform: scale(0.7);
184
+ height: 48px;
185
+ width: 48px;
186
+ border-color: $slider-focus-border;
187
+ border: solid 18px $slider-focus-border;
188
+ bottom: -24px;
189
+ right: -24px;
190
+ background-clip: padding-box;
169
191
  }
170
192
  }
171
193
  }
@@ -178,4 +200,3 @@
178
200
  }
179
201
  }
180
202
 
181
-
@@ -1,20 +0,0 @@
1
- import { Directive, ElementRef } from "@angular/core";
2
- export class QMSRangeSliderLockUpDirective {
3
- constructor(ele) {
4
- this.ele = ele;
5
- }
6
- ngOnInit() {
7
- if (this.ele) {
8
- this.ele.nativeElement.classList.add('qms-range-slider-lockup');
9
- }
10
- }
11
- }
12
- QMSRangeSliderLockUpDirective.decorators = [
13
- { type: Directive, args: [{
14
- selector: 'mat-slider[qms-range-slider-lockup]',
15
- },] }
16
- ];
17
- QMSRangeSliderLockUpDirective.ctorParameters = () => [
18
- { type: ElementRef }
19
- ];
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2xpZGVyLWxvY2t1cC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2RpcmVjdGl2ZXMvcmFuZ2Utc2xpZGVyL3JhbmdlLXNsaWRlci1sb2NrdXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSzlELE1BQU0sT0FBTyw2QkFBNkI7SUFDdEMsWUFBb0IsR0FBZTtRQUFmLFFBQUcsR0FBSCxHQUFHLENBQVk7SUFDbkMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDbkU7SUFDTCxDQUFDOzs7WUFYSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHFDQUFxQzthQUNsRDs7O1lBSm1CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnbWF0LXNsaWRlcltxbXMtcmFuZ2Utc2xpZGVyLWxvY2t1cF0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUU1TUmFuZ2VTbGlkZXJMb2NrVXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGU6IEVsZW1lbnRSZWYpIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdxbXMtcmFuZ2Utc2xpZGVyLWxvY2t1cCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,36 +0,0 @@
1
- import { Directive, ElementRef, HostListener } from "@angular/core";
2
- export class QMSRangeSliderDirective {
3
- constructor(ele) {
4
- this.ele = ele;
5
- }
6
- ngOnInit() {
7
- if (this.ele) {
8
- this.ele.nativeElement.classList.add('qms-range-slider');
9
- }
10
- }
11
- onMouseUp() {
12
- clearTimeout(this.timerId);
13
- this.timerId = setTimeout(() => {
14
- this.ele.nativeElement.classList.remove('qms-range-slider-active');
15
- this.ele.nativeElement.classList.remove('mat-slider-thumb-start');
16
- }, 500);
17
- }
18
- onMouseDown() {
19
- clearTimeout(this.timerId);
20
- this.ele.nativeElement.classList.add('qms-range-slider-active');
21
- this.ele.nativeElement.classList.add('mat-slider-thumb-start');
22
- }
23
- }
24
- QMSRangeSliderDirective.decorators = [
25
- { type: Directive, args: [{
26
- selector: 'mat-slider[qms-range-slider]',
27
- },] }
28
- ];
29
- QMSRangeSliderDirective.ctorParameters = () => [
30
- { type: ElementRef }
31
- ];
32
- QMSRangeSliderDirective.propDecorators = {
33
- onMouseUp: [{ type: HostListener, args: ['mouseup', [],] }],
34
- onMouseDown: [{ type: HostListener, args: ['mousedown', [],] }]
35
- };
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2xpZGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9yYW5nZS1zbGlkZXIvcmFuZ2Utc2xpZGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFLNUUsTUFBTSxPQUFPLHVCQUF1QjtJQUNoQyxZQUFvQixHQUFlO1FBQWYsUUFBRyxHQUFILEdBQUcsQ0FBWTtJQUNuQyxDQUFDO0lBR0QsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUM1RDtJQUNMLENBQUM7SUFHRCxTQUFTO1FBQ0wsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN0RSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBR0QsV0FBVztRQUNQLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNuRSxDQUFDOzs7WUE1QkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSw4QkFBOEI7YUFDM0M7OztZQUptQixVQUFVOzs7d0JBZ0J6QixZQUFZLFNBQUMsU0FBUyxFQUFFLEVBQUU7MEJBUzFCLFlBQVksU0FBQyxXQUFXLEVBQUUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ21hdC1zbGlkZXJbcW1zLXJhbmdlLXNsaWRlcl0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUU1TUmFuZ2VTbGlkZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGU6IEVsZW1lbnRSZWYpIHtcclxuICAgIH1cclxuXHJcbiAgICB0aW1lcklkOiBhbnk7XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdxbXMtcmFuZ2Utc2xpZGVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnLCBbXSlcclxuICAgIG9uTW91c2VVcCgpe1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xyXG4gICAgICAgIHRoaXMudGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVsZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3Ftcy1yYW5nZS1zbGlkZXItYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnbWF0LXNsaWRlci10aHVtYi1zdGFydCcpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgW10pXHJcbiAgICBvbk1vdXNlRG93bigpe1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xyXG4gICAgICAgIHRoaXMuZWxlLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgncW1zLXJhbmdlLXNsaWRlci1hY3RpdmUnKTtcclxuICAgICAgICB0aGlzLmVsZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ21hdC1zbGlkZXItdGh1bWItc3RhcnQnKTtcclxuICAgIH1cclxufVxyXG4iXX0=