tab.directive.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. /**
  2. * @fileoverview added by tsickle
  3. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  4. */
  5. import { Directive, EventEmitter, HostBinding, Input, Output, ElementRef, Renderer2 } from '@angular/core';
  6. import { TabsetComponent } from './tabset.component';
  7. var TabDirective = /** @class */ (function () {
  8. function TabDirective(tabset, elementRef, renderer) {
  9. this.elementRef = elementRef;
  10. this.renderer = renderer;
  11. /**
  12. * fired when tab became active, $event:Tab equals to selected instance of Tab component
  13. */
  14. this.selectTab = new EventEmitter();
  15. /**
  16. * fired when tab became inactive, $event:Tab equals to deselected instance of Tab component
  17. */
  18. this.deselect = new EventEmitter();
  19. /**
  20. * fired before tab will be removed, $event:Tab equals to instance of removed tab
  21. */
  22. this.removed = new EventEmitter();
  23. this.addClass = true;
  24. this.tabset = tabset;
  25. this.tabset.addTab(this);
  26. }
  27. Object.defineProperty(TabDirective.prototype, "customClass", {
  28. /** if set, will be added to the tab's class attribute. Multiple classes are supported. */
  29. get: /**
  30. * if set, will be added to the tab's class attribute. Multiple classes are supported.
  31. * @return {?}
  32. */
  33. function () {
  34. return this._customClass;
  35. },
  36. set: /**
  37. * @param {?} customClass
  38. * @return {?}
  39. */
  40. function (customClass) {
  41. var _this = this;
  42. if (this.customClass) {
  43. this.customClass.split(' ').forEach((/**
  44. * @param {?} cssClass
  45. * @return {?}
  46. */
  47. function (cssClass) {
  48. _this.renderer.removeClass(_this.elementRef.nativeElement, cssClass);
  49. }));
  50. }
  51. this._customClass = customClass ? customClass.trim() : null;
  52. if (this.customClass) {
  53. this.customClass.split(' ').forEach((/**
  54. * @param {?} cssClass
  55. * @return {?}
  56. */
  57. function (cssClass) {
  58. _this.renderer.addClass(_this.elementRef.nativeElement, cssClass);
  59. }));
  60. }
  61. },
  62. enumerable: true,
  63. configurable: true
  64. });
  65. Object.defineProperty(TabDirective.prototype, "active", {
  66. /** tab active state toggle */
  67. get: /**
  68. * tab active state toggle
  69. * @return {?}
  70. */
  71. function () {
  72. return this._active;
  73. },
  74. set: /**
  75. * @param {?} active
  76. * @return {?}
  77. */
  78. function (active) {
  79. var _this = this;
  80. if (this._active === active) {
  81. return;
  82. }
  83. if ((this.disabled && active) || !active) {
  84. if (this._active && !active) {
  85. this.deselect.emit(this);
  86. this._active = active;
  87. }
  88. return;
  89. }
  90. this._active = active;
  91. this.selectTab.emit(this);
  92. this.tabset.tabs.forEach((/**
  93. * @param {?} tab
  94. * @return {?}
  95. */
  96. function (tab) {
  97. if (tab !== _this) {
  98. tab.active = false;
  99. }
  100. }));
  101. },
  102. enumerable: true,
  103. configurable: true
  104. });
  105. /**
  106. * @return {?}
  107. */
  108. TabDirective.prototype.ngOnInit = /**
  109. * @return {?}
  110. */
  111. function () {
  112. this.removable = this.removable;
  113. };
  114. /**
  115. * @return {?}
  116. */
  117. TabDirective.prototype.ngOnDestroy = /**
  118. * @return {?}
  119. */
  120. function () {
  121. this.tabset.removeTab(this, { reselect: false, emit: false });
  122. };
  123. TabDirective.decorators = [
  124. { type: Directive, args: [{ selector: 'tab, [tab]' },] }
  125. ];
  126. /** @nocollapse */
  127. TabDirective.ctorParameters = function () { return [
  128. { type: TabsetComponent },
  129. { type: ElementRef },
  130. { type: Renderer2 }
  131. ]; };
  132. TabDirective.propDecorators = {
  133. heading: [{ type: Input }],
  134. id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }],
  135. disabled: [{ type: Input }],
  136. removable: [{ type: Input }],
  137. customClass: [{ type: Input }],
  138. active: [{ type: HostBinding, args: ['class.active',] }, { type: Input }],
  139. selectTab: [{ type: Output }],
  140. deselect: [{ type: Output }],
  141. removed: [{ type: Output }],
  142. addClass: [{ type: HostBinding, args: ['class.tab-pane',] }]
  143. };
  144. return TabDirective;
  145. }());
  146. export { TabDirective };
  147. if (false) {
  148. /**
  149. * tab header text
  150. * @type {?}
  151. */
  152. TabDirective.prototype.heading;
  153. /**
  154. * tab id. The same id with suffix '-link' will be added to the corresponding <li> element
  155. * @type {?}
  156. */
  157. TabDirective.prototype.id;
  158. /**
  159. * if true tab can not be activated
  160. * @type {?}
  161. */
  162. TabDirective.prototype.disabled;
  163. /**
  164. * if true tab can be removable, additional button will appear
  165. * @type {?}
  166. */
  167. TabDirective.prototype.removable;
  168. /**
  169. * fired when tab became active, $event:Tab equals to selected instance of Tab component
  170. * @type {?}
  171. */
  172. TabDirective.prototype.selectTab;
  173. /**
  174. * fired when tab became inactive, $event:Tab equals to deselected instance of Tab component
  175. * @type {?}
  176. */
  177. TabDirective.prototype.deselect;
  178. /**
  179. * fired before tab will be removed, $event:Tab equals to instance of removed tab
  180. * @type {?}
  181. */
  182. TabDirective.prototype.removed;
  183. /** @type {?} */
  184. TabDirective.prototype.addClass;
  185. /** @type {?} */
  186. TabDirective.prototype.headingRef;
  187. /** @type {?} */
  188. TabDirective.prototype.tabset;
  189. /**
  190. * @type {?}
  191. * @protected
  192. */
  193. TabDirective.prototype._active;
  194. /**
  195. * @type {?}
  196. * @protected
  197. */
  198. TabDirective.prototype._customClass;
  199. /** @type {?} */
  200. TabDirective.prototype.elementRef;
  201. /** @type {?} */
  202. TabDirective.prototype.renderer;
  203. }
  204. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1ib290c3RyYXAvdGFicy8iLCJzb3VyY2VzIjpbInRhYi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUlOLFVBQVUsRUFDVixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJEO0lBNkVFLHNCQUNFLE1BQXVCLEVBQ2hCLFVBQXNCLEVBQ3RCLFFBQW1CO1FBRG5CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVzs7OztRQWpCbEIsY0FBUyxHQUErQixJQUFJLFlBQVksRUFBRSxDQUFDOzs7O1FBRTNELGFBQVEsR0FBK0IsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7OztRQUUxRCxZQUFPLEdBQStCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFcEMsYUFBUSxHQUFHLElBQUksQ0FBQztRQWE3QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBeEVELHNCQUNJLHFDQUFXO1FBRmYsMEZBQTBGOzs7OztRQUMxRjtZQUVFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMzQixDQUFDOzs7OztRQUVELFVBQWdCLFdBQW1CO1lBQW5DLGlCQWNDO1lBYkMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPOzs7O2dCQUFDLFVBQUMsUUFBZ0I7b0JBQ25ELEtBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNyRSxDQUFDLEVBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRTVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTzs7OztnQkFBQyxVQUFDLFFBQWdCO29CQUNuRCxLQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDbEUsQ0FBQyxFQUFDLENBQUM7YUFDSjtRQUNILENBQUM7OztPQWhCQTtJQW1CRCxzQkFFSSxnQ0FBTTtRQUhWLDhCQUE4Qjs7Ozs7UUFDOUI7WUFHRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQzs7Ozs7UUFFRCxVQUFXLE1BQWU7WUFBMUIsaUJBb0JDO1lBbkJDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7Z0JBQzNCLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztpQkFDdkI7Z0JBRUQsT0FBTzthQUNSO1lBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTzs7OztZQUFDLFVBQUMsR0FBaUI7Z0JBQ3pDLElBQUksR0FBRyxLQUFLLEtBQUksRUFBRTtvQkFDaEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7aUJBQ3BCO1lBQ0gsQ0FBQyxFQUFDLENBQUM7UUFDTCxDQUFDOzs7T0F0QkE7Ozs7SUFnREQsK0JBQVE7OztJQUFSO1FBQ0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2xDLENBQUM7Ozs7SUFFRCxrQ0FBVzs7O0lBQVg7UUFDRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7O2dCQTVGRixTQUFTLFNBQUMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFOzs7O2dCQUY1QixlQUFlO2dCQUh0QixVQUFVO2dCQUNWLFNBQVM7OzswQkFPUixLQUFLO3FCQUVMLFdBQVcsU0FBQyxTQUFTLGNBQ3JCLEtBQUs7MkJBRUwsS0FBSzs0QkFFTCxLQUFLOzhCQUVMLEtBQUs7eUJBc0JMLFdBQVcsU0FBQyxjQUFjLGNBQzFCLEtBQUs7NEJBNEJMLE1BQU07MkJBRU4sTUFBTTswQkFFTixNQUFNOzJCQUVOLFdBQVcsU0FBQyxnQkFBZ0I7O0lBd0IvQixtQkFBQztDQUFBLEFBN0ZELElBNkZDO1NBNUZZLFlBQVk7Ozs7OztJQUV2QiwrQkFBeUI7Ozs7O0lBRXpCLDBCQUNvQjs7Ozs7SUFFcEIsZ0NBQTJCOzs7OztJQUUzQixpQ0FBNEI7Ozs7O0lBcUQ1QixpQ0FBcUU7Ozs7O0lBRXJFLGdDQUFvRTs7Ozs7SUFFcEUsK0JBQW1FOztJQUVuRSxnQ0FBK0M7O0lBRy9DLGtDQUE2Qjs7SUFDN0IsOEJBQXdCOzs7OztJQUN4QiwrQkFBMkI7Ozs7O0lBQzNCLG9DQUErQjs7SUFJN0Isa0NBQTZCOztJQUM3QixnQ0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgRWxlbWVudFJlZixcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFic2V0Q29tcG9uZW50IH0gZnJvbSAnLi90YWJzZXQuY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAndGFiLCBbdGFiXScgfSlcbmV4cG9ydCBjbGFzcyBUYWJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiB0YWIgaGVhZGVyIHRleHQgKi9cbiAgQElucHV0KCkgaGVhZGluZzogc3RyaW5nO1xuICAvKiogdGFiIGlkLiBUaGUgc2FtZSBpZCB3aXRoIHN1ZmZpeCAnLWxpbmsnIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgJmx0O2xpJmd0OyBlbGVtZW50ICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICAvKiogaWYgdHJ1ZSB0YWIgY2FuIG5vdCBiZSBhY3RpdmF0ZWQgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiBpZiB0cnVlIHRhYiBjYW4gYmUgcmVtb3ZhYmxlLCBhZGRpdGlvbmFsIGJ1dHRvbiB3aWxsIGFwcGVhciAqL1xuICBASW5wdXQoKSByZW1vdmFibGU6IGJvb2xlYW47XG4gIC8qKiBpZiBzZXQsIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHRhYidzIGNsYXNzIGF0dHJpYnV0ZS4gTXVsdGlwbGUgY2xhc3NlcyBhcmUgc3VwcG9ydGVkLiAqL1xuICBASW5wdXQoKVxuICBnZXQgY3VzdG9tQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ2xhc3M7XG4gIH1cblxuICBzZXQgY3VzdG9tQ2xhc3MoY3VzdG9tQ2xhc3M6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmN1c3RvbUNsYXNzKSB7XG4gICAgICB0aGlzLmN1c3RvbUNsYXNzLnNwbGl0KCcgJykuZm9yRWFjaCgoY3NzQ2xhc3M6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjc3NDbGFzcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXN0b21DbGFzcyA9IGN1c3RvbUNsYXNzID8gY3VzdG9tQ2xhc3MudHJpbSgpIDogbnVsbDtcblxuICAgIGlmICh0aGlzLmN1c3RvbUNsYXNzKSB7XG4gICAgICB0aGlzLmN1c3RvbUNsYXNzLnNwbGl0KCcgJykuZm9yRWFjaCgoY3NzQ2xhc3M6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjc3NDbGFzcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogdGFiIGFjdGl2ZSBzdGF0ZSB0b2dnbGUgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKVxuICBASW5wdXQoKVxuICBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBzZXQgYWN0aXZlKGFjdGl2ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IGFjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuZGlzYWJsZWQgJiYgYWN0aXZlKSB8fCAhYWN0aXZlKSB7XG4gICAgICBpZiAodGhpcy5fYWN0aXZlICYmICFhY3RpdmUpIHtcbiAgICAgICAgdGhpcy5kZXNlbGVjdC5lbWl0KHRoaXMpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBhY3RpdmU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9hY3RpdmUgPSBhY3RpdmU7XG4gICAgdGhpcy5zZWxlY3RUYWIuZW1pdCh0aGlzKTtcbiAgICB0aGlzLnRhYnNldC50YWJzLmZvckVhY2goKHRhYjogVGFiRGlyZWN0aXZlKSA9PiB7XG4gICAgICBpZiAodGFiICE9PSB0aGlzKSB7XG4gICAgICAgIHRhYi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBmaXJlZCB3aGVuIHRhYiBiZWNhbWUgYWN0aXZlLCAkZXZlbnQ6VGFiIGVxdWFscyB0byBzZWxlY3RlZCBpbnN0YW5jZSBvZiBUYWIgY29tcG9uZW50ICovXG4gIEBPdXRwdXQoKSBzZWxlY3RUYWI6IEV2ZW50RW1pdHRlcjxUYWJEaXJlY3RpdmU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKiogZmlyZWQgd2hlbiB0YWIgYmVjYW1lIGluYWN0aXZlLCAkZXZlbnQ6VGFiIGVxdWFscyB0byBkZXNlbGVjdGVkIGluc3RhbmNlIG9mIFRhYiBjb21wb25lbnQgKi9cbiAgQE91dHB1dCgpIGRlc2VsZWN0OiBFdmVudEVtaXR0ZXI8VGFiRGlyZWN0aXZlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqIGZpcmVkIGJlZm9yZSB0YWIgd2lsbCBiZSByZW1vdmVkLCAkZXZlbnQ6VGFiIGVxdWFscyB0byBpbnN0YW5jZSBvZiByZW1vdmVkIHRhYiAqL1xuICBAT3V0cHV0KCkgcmVtb3ZlZDogRXZlbnRFbWl0dGVyPFRhYkRpcmVjdGl2ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWItcGFuZScpIGFkZENsYXNzID0gdHJ1ZTtcblxuICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55ICovXG4gIGhlYWRpbmdSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gIHRhYnNldDogVGFic2V0Q29tcG9uZW50O1xuICBwcm90ZWN0ZWQgX2FjdGl2ZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIF9jdXN0b21DbGFzczogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhYnNldDogVGFic2V0Q29tcG9uZW50LFxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge1xuICAgIHRoaXMudGFic2V0ID0gdGFic2V0O1xuICAgIHRoaXMudGFic2V0LmFkZFRhYih0aGlzKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZhYmxlID0gdGhpcy5yZW1vdmFibGU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYnNldC5yZW1vdmVUYWIodGhpcywgeyByZXNlbGVjdDogZmFsc2UsIGVtaXQ6IGZhbHNlIH0pO1xuICB9XG59XG4iXX0=