ngx-tencent-im
Version:
Instant messaging for Angular.
91 lines • 19.5 kB
JavaScript
import { Component } from '@angular/core';
import { MESSAGE_STATUS } from '../shared.data';
import { showAction } from '../store/actions';
import { updateGroupListAction } from '../store/actions/group.action';
import { conversationSelector } from '../store/selectors';
import { titleNotify } from '../util/title-notice';
import * as i0 from "@angular/core";
import * as i1 from "@ngrx/store";
import * as i2 from "../tim-helper.service";
import * as i3 from "../my-profile/my-profile.component";
import * as i4 from "../conversation/conversation-list/conversation-list.component";
import * as i5 from "../group/group-list/group-list.component";
import * as i6 from "@angular/common";
export class SideBarComponent {
constructor(store, timHelperService) {
this.store = store;
this.timHelperService = timHelperService;
this.activeName = {
CONVERSATION_LIST: 'conversation-list',
GROUP_LIST: 'group-list',
FRIEND_LIST: 'friend-list',
BLACK_LIST: 'black-list',
};
this.totalUnreadCount = 0;
this.active = this.activeName.CONVERSATION_LIST;
this.showConversationList = false;
}
ngOnInit() {
// 获取当前会话
this.store.select(conversationSelector).subscribe(res => {
this.computeCount(res);
});
}
handleClick(event) {
switch (event.target.id) {
case this.activeName.CONVERSATION_LIST:
this.checkoutActive(this.activeName.CONVERSATION_LIST);
break;
case this.activeName.GROUP_LIST:
this.checkoutActive(this.activeName.GROUP_LIST);
break;
case this.activeName.FRIEND_LIST:
this.checkoutActive(this.activeName.FRIEND_LIST);
break;
case this.activeName.BLACK_LIST:
this.checkoutActive(this.activeName.BLACK_LIST);
break;
}
}
checkoutActive(name) {
this.active = name;
}
logout() {
this.timHelperService.logout();
}
getGroupList() {
this.timHelperService.tim
.getGroupList()
.then(({ data: groupList }) => {
this.store.dispatch(updateGroupListAction({ groupList }));
})
.catch((error) => {
this.store.dispatch(showAction({ msgType: MESSAGE_STATUS.error, message: error.message }));
});
}
computeCount(state) {
const result = state.conversationList.reduce((count, conversation) => {
// 当前会话不计算总未读
if (!this.hidden() && state.currentConversation.conversationID === conversation.conversationID) {
return this.totalUnreadCount = count;
}
return this.totalUnreadCount = count + conversation.unreadCount;
}, 0);
titleNotify(result);
this.timHelperService.totalUnRead.next(result);
return this.totalUnreadCount = result;
}
hidden() {
if (typeof document.hasFocus !== 'function') {
return document.hidden;
}
return !document.hasFocus();
}
}
SideBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SideBarComponent, deps: [{ token: i1.Store }, { token: i2.TimHelperService }], target: i0.ɵɵFactoryTarget.Component });
SideBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: SideBarComponent, selector: "app-side-bar", ngImport: i0, template: "<div class=\"side-bar-wrapper\">\r\n <div class=\"bar-left\">\r\n <app-my-profile></app-my-profile>\r\n <div class=\"tab-items\" (click)=\"handleClick($event)\">\r\n <div id=\"conversation-list\" class=\"iconfont icon-conversation\" title=\"\u4F1A\u8BDD\u5217\u8868\"\r\n [ngClass]=\"{'active': active ===activeName.CONVERSATION_LIST }\">\r\n <sup class=\"unread\" *ngIf=\"totalUnreadCount !== 0\">\r\n <span *ngIf=\"totalUnreadCount > 99;else count\">99+</span>\r\n <ng-template #count>\r\n {{totalUnreadCount}}\r\n </ng-template>\r\n </sup>\r\n </div>\r\n <div id=\"group-list\" class=\"iconfont icon-group\" title=\"\u7FA4\u7EC4\u5217\u8868\"\r\n [ngClass]=\"{'active': active ===activeName.GROUP_LIST}\">\r\n </div>\r\n </div>\r\n <div class=\"bottom\">\r\n <div class=\"iconfont icon-tuichu\" title=\"\u9000\u51FA\" (click)=\"logout()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"bar-right\">\r\n <app-conversation-list *ngIf=\"active ===activeName.CONVERSATION_LIST\"></app-conversation-list>\r\n <app-group-list *ngIf=\"active ===activeName.GROUP_LIST\"></app-group-list>\r\n </div>\r\n</div>\r\n", styles: [".side-bar-wrapper{height:100%;color:#000;display:flex;overflow:hidden}.side-bar-wrapper .bar-right{width:14rem;min-width:0;height:80vh;position:relative;background-color:#363e47}.side-bar-wrapper .bar-left{display:flex;flex-shrink:0;flex-direction:column;align-items:center;width:4rem;height:80vh;background-color:#303841}.side-bar-wrapper .bar-left .tab-items{display:flex;flex-direction:column;flex-grow:1}.side-bar-wrapper .bar-left .tab-items .iconfont{position:relative;margin:0;height:70px;line-height:70px;text-align:center;font-size:30px;cursor:pointer;color:#a5b5c1;-webkit-user-select:none;user-select:none;-moz-user-select:none}.side-bar-wrapper .bar-left .tab-items .active{color:#fff}.side-bar-wrapper .bar-left .tab-items .unread{position:absolute;top:10px;right:10px;z-index:999;display:inline-block;height:18px;padding:0 6px;font-size:12px;color:#fff;line-height:18px;text-align:center;white-space:nowrap;border-radius:10px;background-color:#f35f5f}.side-bar-wrapper .bar-left .bottom{height:70px}.side-bar-wrapper .bar-left .bottom>span{display:block}.side-bar-wrapper .bar-left .bottom .btn-more{width:100%;height:70px;line-height:70px;font-size:30px;color:#a5b5c1;text-align:center;cursor:pointer}.side-bar-wrapper .bar-left .bottom .iconfont{height:70px;line-height:70px;text-align:center;font-size:30px;cursor:pointer;color:#a5b5c1;-webkit-user-select:none;user-select:none;-moz-user-select:none}.side-bar-wrapper .bar-left .bottom .iconfont:hover,.side-bar-wrapper .bar-left .btn-more:hover{color:#fff}\n"], components: [{ type: i3.MyProfileComponent, selector: "app-my-profile" }, { type: i4.ConversationListComponent, selector: "app-conversation-list" }, { type: i5.GroupListComponent, selector: "app-group-list" }], directives: [{ type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SideBarComponent, decorators: [{
type: Component,
args: [{ selector: 'app-side-bar', template: "<div class=\"side-bar-wrapper\">\r\n <div class=\"bar-left\">\r\n <app-my-profile></app-my-profile>\r\n <div class=\"tab-items\" (click)=\"handleClick($event)\">\r\n <div id=\"conversation-list\" class=\"iconfont icon-conversation\" title=\"\u4F1A\u8BDD\u5217\u8868\"\r\n [ngClass]=\"{'active': active ===activeName.CONVERSATION_LIST }\">\r\n <sup class=\"unread\" *ngIf=\"totalUnreadCount !== 0\">\r\n <span *ngIf=\"totalUnreadCount > 99;else count\">99+</span>\r\n <ng-template #count>\r\n {{totalUnreadCount}}\r\n </ng-template>\r\n </sup>\r\n </div>\r\n <div id=\"group-list\" class=\"iconfont icon-group\" title=\"\u7FA4\u7EC4\u5217\u8868\"\r\n [ngClass]=\"{'active': active ===activeName.GROUP_LIST}\">\r\n </div>\r\n </div>\r\n <div class=\"bottom\">\r\n <div class=\"iconfont icon-tuichu\" title=\"\u9000\u51FA\" (click)=\"logout()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"bar-right\">\r\n <app-conversation-list *ngIf=\"active ===activeName.CONVERSATION_LIST\"></app-conversation-list>\r\n <app-group-list *ngIf=\"active ===activeName.GROUP_LIST\"></app-group-list>\r\n </div>\r\n</div>\r\n", styles: [".side-bar-wrapper{height:100%;color:#000;display:flex;overflow:hidden}.side-bar-wrapper .bar-right{width:14rem;min-width:0;height:80vh;position:relative;background-color:#363e47}.side-bar-wrapper .bar-left{display:flex;flex-shrink:0;flex-direction:column;align-items:center;width:4rem;height:80vh;background-color:#303841}.side-bar-wrapper .bar-left .tab-items{display:flex;flex-direction:column;flex-grow:1}.side-bar-wrapper .bar-left .tab-items .iconfont{position:relative;margin:0;height:70px;line-height:70px;text-align:center;font-size:30px;cursor:pointer;color:#a5b5c1;-webkit-user-select:none;user-select:none;-moz-user-select:none}.side-bar-wrapper .bar-left .tab-items .active{color:#fff}.side-bar-wrapper .bar-left .tab-items .unread{position:absolute;top:10px;right:10px;z-index:999;display:inline-block;height:18px;padding:0 6px;font-size:12px;color:#fff;line-height:18px;text-align:center;white-space:nowrap;border-radius:10px;background-color:#f35f5f}.side-bar-wrapper .bar-left .bottom{height:70px}.side-bar-wrapper .bar-left .bottom>span{display:block}.side-bar-wrapper .bar-left .bottom .btn-more{width:100%;height:70px;line-height:70px;font-size:30px;color:#a5b5c1;text-align:center;cursor:pointer}.side-bar-wrapper .bar-left .bottom .iconfont{height:70px;line-height:70px;text-align:center;font-size:30px;cursor:pointer;color:#a5b5c1;-webkit-user-select:none;user-select:none;-moz-user-select:none}.side-bar-wrapper .bar-left .bottom .iconfont:hover,.side-bar-wrapper .bar-left .btn-more:hover{color:#fff}\n"] }]
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.TimHelperService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlbmNlbnQtaW0vc3JjL3NpZGUtYmFyL3NpZGUtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZW5jZW50LWltL3NyYy9zaWRlLWJhci9zaWRlLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQU9uRCxNQUFNLE9BQU8sZ0JBQWdCO0lBVTNCLFlBQ1UsS0FBWSxFQUNaLGdCQUFrQztRQURsQyxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1oscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVg1QyxlQUFVLEdBQUc7WUFDWCxpQkFBaUIsRUFBRSxtQkFBbUI7WUFDdEMsVUFBVSxFQUFFLFlBQVk7WUFDeEIsV0FBVyxFQUFFLGFBQWE7WUFDMUIsVUFBVSxFQUFFLFlBQVk7U0FDekIsQ0FBQztRQUNGLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixXQUFNLEdBQVcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztRQUNuRCx5QkFBb0IsR0FBRyxLQUFLLENBQUM7SUFLekIsQ0FBQztJQUVMLFFBQVE7UUFDTixTQUFTO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMs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Ozs2R0FqRlUsZ0JBQWdCO2lHQUFoQixnQkFBZ0Isb0RDakI3Qix3c0NBMEJBOzJGRFRhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcblxyXG5pbXBvcnQgeyBNRVNTQUdFX1NUQVRVUyB9IGZyb20gJy4uL3NoYXJlZC5kYXRhJztcclxuaW1wb3J0IHsgc2hvd0FjdGlvbiB9IGZyb20gJy4uL3N0b3JlL2FjdGlvbnMnO1xyXG5pbXBvcnQgeyB1cGRhdGVHcm91cExpc3RBY3Rpb24gfSBmcm9tICcuLi9zdG9yZS9hY3Rpb25zL2dyb3VwLmFjdGlvbic7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvblN0YXRlIH0gZnJvbSAnLi4vc3RvcmUvcmVkdWNlci9jb252ZXJzYXRpb24ucmVkdWNlcic7XHJcbmltcG9ydCB7IGNvbnZlcnNhdGlvblNlbGVjdG9yIH0gZnJvbSAnLi4vc3RvcmUvc2VsZWN0b3JzJztcclxuXHJcbmltcG9ydCB7IFRpbUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi90aW0taGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyB0aXRsZU5vdGlmeSB9IGZyb20gJy4uL3V0aWwvdGl0bGUtbm90aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNpZGUtYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2lkZS1iYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NpZGUtYmFyLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNpZGVCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGFjdGl2ZU5hbWUgPSB7XHJcbiAgICBDT05WRVJTQVRJT05fTElTVDogJ2NvbnZlcnNhdGlvbi1saXN0JyxcclxuICAgIEdST1VQX0xJU1Q6ICdncm91cC1saXN0JyxcclxuICAgIEZSSUVORF9MSVNUOiAnZnJpZW5kLWxpc3QnLFxyXG4gICAgQkxBQ0tfTElTVDogJ2JsYWNrLWxpc3QnLFxyXG4gIH07XHJcbiAgdG90YWxVbnJlYWRDb3VudCA9IDA7XHJcbiAgYWN0aXZlOiBzdHJpbmcgPSB0aGlzLmFjdGl2ZU5hbWUuQ09OVkVSU0FUSU9OX0xJU1Q7XHJcbiAgc2hvd0NvbnZlcnNhdGlvbkxpc3QgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxyXG4gICAgcHJpdmF0ZSB0aW1IZWxwZXJTZXJ2aWNlOiBUaW1IZWxwZXJTZXJ2aWNlXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8g6I635Y+W5b2T5YmN5Lya6K+dXHJcbiAgICB0aGlzLnN0b3JlLnNlbGVjdChjb252ZXJzYXRpb25TZWxlY3Rvcikuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuY29tcHV0ZUNvdW50KHJlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKGV2ZW50OiBFdmVudCB8IGFueSkge1xyXG4gICAgc3dpdGNoIChldmVudC50YXJnZXQuaWQpIHtcclxuICAgICAgY2FzZSB0aGlzLmFjdGl2ZU5hbWUuQ09OVkVSU0FUSU9OX0xJU1Q6XHJcbiAgICAgICAgdGhpcy5jaGVja291dEFjdGl2ZSh0aGlzLmFjdGl2ZU5hbWUuQ09OVkVSU0FUSU9OX0xJU1QpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuYWN0aXZlTmFtZS5HUk9VUF9MSVNUOlxyXG4gICAgICAgIHRoaXMuY2hlY2tvdXRBY3RpdmUodGhpcy5hY3RpdmVOYW1lLkdST1VQX0xJU1QpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuYWN0aXZlTmFtZS5GUklFTkRfTElTVDpcclxuICAgICAgICB0aGlzLmNoZWNrb3V0QWN0aXZlKHRoaXMuYWN0aXZlTmFtZS5GUklFTkRfTElTVCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5hY3RpdmVOYW1lLkJMQUNLX0xJU1Q6XHJcbiAgICAgICAgdGhpcy5jaGVja291dEFjdGl2ZSh0aGlzLmFjdGl2ZU5hbWUuQkxBQ0tfTElTVCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja291dEFjdGl2ZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYWN0aXZlID0gbmFtZTtcclxuICB9XHJcblxyXG5cclxuICBsb2dvdXQoKSB7XHJcbiAgICB0aGlzLnRpbUhlbHBlclNlcnZpY2UubG9nb3V0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0R3JvdXBMaXN0KCkge1xyXG4gICAgdGhpcy50aW1IZWxwZXJTZXJ2aWNlLnRpbVxyXG4gICAgICAuZ2V0R3JvdXBMaXN0KClcclxuICAgICAgLnRoZW4oKHsgZGF0YTogZ3JvdXBMaXN0IH0pID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHVwZGF0ZUdyb3VwTGlzdEFjdGlvbih7IGdyb3VwTGlzdCB9KSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxyXG4gICAgICAgICAgc2hvd0FjdGlvbih7IG1zZ1R5cGU6IE1FU1NBR0VfU1RBVFVTLmVycm9yLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb21wdXRlQ291bnQoc3RhdGU6IENvbnZlcnNhdGlvblN0YXRlKSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBzdGF0ZS5jb252ZXJzYXRpb25MaXN0LnJlZHVjZSgoY291bnQsIGNvbnZlcnNhdGlvbikgPT4ge1xyXG4gICAgICAvLyDlvZPliY3kvJror53kuI3orqHnrpfmgLvmnKror7tcclxuICAgICAgaWYgKCF0aGlzLmhpZGRlbigpICYmIHN0YXRlLmN1cnJlbnRDb252ZXJzYXRpb24uY29udmVyc2F0aW9uSUQgPT09IGNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JRCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsVW5yZWFkQ291bnQgPSBjb3VudDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy50b3RhbFVucmVhZENvdW50ID0gY291bnQgKyBjb252ZXJzYXRpb24udW5yZWFkQ291bnQ7XHJcbiAgICB9LCAwKTtcclxuICAgIHRpdGxlTm90aWZ5KHJlc3VsdCk7XHJcbiAgICB0aGlzLnRpbUhlbHBlclNlcnZpY2UudG90YWxVblJlYWQubmV4dChyZXN1bHQpO1xyXG4gICAgcmV0dXJuIHRoaXMudG90YWxVbnJlYWRDb3VudCA9IHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGhpZGRlbigpIHtcclxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuaGFzRm9jdXMgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgcmV0dXJuIGRvY3VtZW50LmhpZGRlbjtcclxuICAgIH1cclxuICAgIHJldHVybiAhZG9jdW1lbnQuaGFzRm9jdXMoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNpZGUtYmFyLXdyYXBwZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiYmFyLWxlZnRcIj5cclxuICAgIDxhcHAtbXktcHJvZmlsZT48L2FwcC1teS1wcm9maWxlPlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYi1pdGVtc1wiIChjbGljayk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCI+XHJcbiAgICAgIDxkaXYgaWQ9XCJjb252ZXJzYXRpb24tbGlzdFwiIGNsYXNzPVwiaWNvbmZvbnQgaWNvbi1jb252ZXJzYXRpb25cIiB0aXRsZT1cIuS8muivneWIl+ihqFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBhY3RpdmUgPT09YWN0aXZlTmFtZS5DT05WRVJTQVRJT05fTElTVCB9XCI+XHJcbiAgICAgICAgPHN1cCBjbGFzcz1cInVucmVhZFwiICpuZ0lmPVwidG90YWxVbnJlYWRDb3VudCAhPT0gMFwiPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0b3RhbFVucmVhZENvdW50ID4gOTk7ZWxzZSBjb3VudFwiPjk5Kzwvc3Bhbj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY291bnQ+XHJcbiAgICAgICAgICAgIHt7dG90YWxVbnJlYWRDb3VudH19XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvc3VwPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBpZD1cImdyb3VwLWxpc3RcIiBjbGFzcz1cImljb25mb250IGljb24tZ3JvdXBcIiB0aXRsZT1cIue+pOe7hOWIl+ihqFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBhY3RpdmUgPT09YWN0aXZlTmFtZS5HUk9VUF9MSVNUfVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImJvdHRvbVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbmZvbnQgaWNvbi10dWljaHVcIiB0aXRsZT1cIumAgOWHulwiIChjbGljayk9XCJsb2dvdXQoKVwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImJhci1yaWdodFwiPlxyXG4gICAgPGFwcC1jb252ZXJzYXRpb24tbGlzdCAqbmdJZj1cImFjdGl2ZSA9PT1hY3RpdmVOYW1lLkNPTlZFUlNBVElPTl9MSVNUXCI+PC9hcHAtY29udmVyc2F0aW9uLWxpc3Q+XHJcbiAgICA8YXBwLWdyb3VwLWxpc3QgKm5nSWY9XCJhY3RpdmUgPT09YWN0aXZlTmFtZS5HUk9VUF9MSVNUXCI+PC9hcHAtZ3JvdXAtbGlzdD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==