ng-cw-v12
Version:
Angular UI Component Library
202 lines • 33.8 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import Jessibuca from 'jessibuca-js';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class VideoFlvComponent {
constructor() {
this.playError = false;
this.playTimeout = false;
/** 返回Jessibuca */
this.ncLoaded = new EventEmitter();
/** 返回播放状态 */
this.ncPlaying = new EventEmitter();
/** 视频地址 */
this.ncUrl = '';
/** 超时 */
this.ncTimeout = 8;
/** 加载中文案 */
this.ncLoadingText = '加载中...';
/** 播放失败文案 */
this.ncErrorText = '播放失败';
/** 播放超时文案 */
this.ncTimeoutText = '播放超时,视频源无响应';
/** 静音 */
this._muted = true;
/** 自动播放 */
this._autoplay = false;
/** 铺满 */
this._fill = false;
/** 截图 */
this._screenshot = false;
/** 录屏 */
this._record = false;
/** 网速 */
this._bandwidth = false;
/** 隐藏控制栏 */
this._controls = true;
}
set ncMuted(value) {
this._muted = value !== null && value !== undefined && value !== false && value !== 'false';
}
get ncMuted() {
return this._muted;
}
set ncAutoplay(value) {
this._autoplay = value !== null && value !== undefined && value !== false && value !== 'false';
}
get ncAutoplay() {
return this._autoplay;
}
set ncFill(value) {
this._fill = value !== null && value !== undefined && value !== false && value !== 'false';
}
get ncFill() {
return this._fill;
}
set ncScreenshot(value) {
this._screenshot = value !== null && value !== undefined && value !== false && value !== 'false';
}
get ncScreenshot() {
return this._screenshot;
}
set ncRecord(value) {
this._record = value !== null && value !== undefined && value !== false && value !== 'false';
}
get ncRecord() {
return this._record;
}
set ncBandwidth(value) {
this._bandwidth = value !== null && value !== undefined && value !== false && value !== 'false';
}
get ncBandwidth() {
return this._bandwidth;
}
set ncControls(value) {
this._controls = value !== null && value !== undefined && value !== false && value !== 'false';
}
get ncControls() {
return this._controls;
}
ngOnDestroy() {
this.destroy();
}
ngAfterViewInit() {
if (this.ncUrl) {
this.init();
}
}
ngOnChanges(changes) {
if (changes['ncUrl'] && changes['ncUrl'].currentValue && !changes['ncUrl'].firstChange) {
this.init();
}
}
init() {
this.destroy();
this.playError = false;
this.playTimeout = false;
//这里加延迟是因为destroy后直接重新new的话会报Jessibuca container has been created and can not be created again
setTimeout(() => {
this.jessibuca = new Jessibuca({
url: this.ncUrl,
decoder: 'assets/jessibuca-js/decoder.js',
container: this.videoContainer.nativeElement,
videoBuffer: 0.2,
isResize: !this.ncFill,
loadingText: this.ncLoadingText,
debug: false,
timeout: this.ncTimeout,
showBandwidth: this.ncBandwidth,
operateBtns: {
fullscreen: true,
screenshot: this.ncScreenshot,
play: true,
audio: true,
record: this.ncRecord //录制按钮
},
isNotMute: false,
controlAutoHide: true //自动隐藏控制栏
});
if (!this.ncControls) {
const controls = this.videoContainer.nativeElement.querySelector('.jessibuca-controls');
controls === null || controls === void 0 ? void 0 : controls.remove();
}
//错误监听
this.jessibuca.on("error", (error) => {
console.error('error:', error);
this.playError = true;
});
//超时监听
this.jessibuca.on("timeout", (error) => {
console.error('timeout:', error);
this.playTimeout = true;
});
//播放监听
this.jessibuca.on("play", () => {
this.ncPlaying.emit(true);
});
//暂停监听
this.jessibuca.on("pause", () => {
this.ncPlaying.emit(false);
});
this.jessibuca.on("load", () => {
//自动播放
if (this.ncAutoplay) {
this.jessibuca.play();
}
//开启声音
if (!this.ncMuted) {
this.jessibuca.cancelMute();
}
//返回对象
this.ncLoaded.emit(this.jessibuca);
});
}, 100);
}
destroy() {
if (this.jessibuca) {
this.jessibuca.destroy();
}
}
}
VideoFlvComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: VideoFlvComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
VideoFlvComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: VideoFlvComponent, selector: "nc-video-flv", inputs: { ncUrl: "ncUrl", ncTimeout: "ncTimeout", ncLoadingText: "ncLoadingText", ncErrorText: "ncErrorText", ncTimeoutText: "ncTimeoutText", ncMuted: "ncMuted", ncAutoplay: "ncAutoplay", ncFill: "ncFill", ncScreenshot: "ncScreenshot", ncRecord: "ncRecord", ncBandwidth: "ncBandwidth", ncControls: "ncControls" }, outputs: { ncLoaded: "ncLoaded", ncPlaying: "ncPlaying" }, viewQueries: [{ propertyName: "videoContainer", first: true, predicate: ["videoContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"video-container\">\r\n <div class=\"playError\" *ngIf=\"playError\">\r\n <svg t=\"1724830569178\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"10496\" width=\"64\" height=\"64\">\r\n <path\r\n d=\"M725.333333 469.333333c129.6 0 234.666667 105.066667 234.666667 234.666667s-105.066667 234.666667-234.666667 234.666667-234.666667-105.066667-234.666666-234.666667 105.066667-234.666667 234.666666-234.666667z m128-341.333333a128 128 0 0 1 128 128v294.101333a300.224 300.224 0 0 0-85.312-91.221333L896 426.666667h-59.605333c-34.346667-13.76-71.808-21.333333-111.061334-21.333334v-192H298.666667v597.333334h147.626666a298.453333 298.453333 0 0 0 50.282667 85.354666L170.666667 896a128 128 0 0 1-128-128V256a128 128 0 0 1 128-128h682.666666z m-119.466666 661.333333h-17.066667a21.333333 21.333333 0 0 0-21.333333 21.333334v17.066666a21.333333 21.333333 0 0 0 21.333333 21.333334h17.066667a21.333333 21.333333 0 0 0 21.333333-21.333334V810.666667a21.333333 21.333333 0 0 0-21.333333-21.333334zM213.333333 682.666667H128v85.333333a42.666667 42.666667 0 0 0 39.466667 42.56L170.666667 810.666667h42.666666v-128z m520.533334-128h-17.066667a21.333333 21.333333 0 0 0-21.184 18.837333L695.466667 576v149.333333a21.333333 21.333333 0 0 0 18.837333 21.184L716.8 746.666667h17.066667a21.333333 21.333333 0 0 0 21.184-18.837334L755.2 725.333333v-149.333333a21.333333 21.333333 0 0 0-21.333333-21.333333z m-266.026667-187.114667l2.773333 1.6 114.090667 71.296a298.965333 298.965333 0 0 0-154.432 217.002667 42.24 42.24 0 0 1-24.832-35.584L405.333333 618.666667V405.333333c0-32.426667 34.517333-52.608 62.506667-37.781333zM213.333333 426.666667H128v170.666666h85.333333v-170.666666z m0-213.333334H170.666667a42.666667 42.666667 0 0 0-42.56 39.466667L128 256v85.333333h85.333333v-128z m640 0h-42.666666v128h85.333333v-85.333333a42.666667 42.666667 0 0 0-39.466667-42.56L853.333333 213.333333z\"\r\n fill=\"#cdcdcd\" p-id=\"10497\"></path>\r\n </svg>\r\n <div class=\"errorText\">{{ncErrorText}}</div>\r\n </div>\r\n <div class=\"playTimeout\" *ngIf=\"playTimeout\">\r\n <svg t=\"1770556919745\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"3373\" width=\"64\" height=\"64\">\r\n <path\r\n d=\"M730.3168 487.7824a242.5344 242.5344 0 1 1 0.0512 485.0688 242.5344 242.5344 0 0 1 0-485.0688z m4.864 58.2144a188.2112 188.2112 0 0 0-133.7856 55.3984 188.1088 188.1088 0 0 0-55.3984 133.7856 188.2112 188.2112 0 0 0 55.3984 133.7856 188.1088 188.1088 0 0 0 133.7856 55.3984 188.2112 188.2112 0 0 0 133.7856-55.3984 188.3136 188.3136 0 0 0 55.3984-133.7856 188.2112 188.2112 0 0 0-55.3984-133.7856 188.1088 188.1088 0 0 0-133.7856-55.3984zM799.5904 51.2a125.3376 125.3376 0 0 1 124.6208 116.8896l0.256 7.8848v329.472a291.84 291.84 0 0 0-62.0544-43.7248l-0.0512-161.1776-748.8-0.1024V798.72c0 32.1536 24.6784 59.5456 56.0128 62.8224l6.3488 0.3584 297.472-0.1536c12.8 22.9376 28.672 43.9808 47.0016 62.5152H176.0256a125.184 125.184 0 0 1-124.5184-116.8896l-0.2048-7.8848V175.9744a125.184 125.184 0 0 1 116.8896-124.5184L176.0256 51.2h623.5648z m-64 541.2864c13.824 0 22.0672 10.9568 22.0672 20.3776v97.8432h77.3632c9.4208 0 21.4016 10.24 21.4016 25.344s-11.9808 24.576-21.4016 24.576h-87.6544a34.0992 34.0992 0 0 1-34.0992-34.0992v-113.664c0-9.4208 8.5504-20.3776 22.3232-20.3776zM411.8528 378.624c9.5232 0 20.8896 1.9968 30.3616 7.936l136.704 82.7392a290.9184 290.9184 0 0 0-140.9536 280.7808l4.2496-2.3552a53.76 53.76 0 0 1-30.3616 7.9872c-30.3616 0-56.9344-15.872-56.9344-49.664V428.288c0-33.7408 26.5728-49.6128 56.9344-49.6128zM152.1664 118.0672a62.5664 62.5664 0 0 0-38.2976 51.2l-0.3072 6.4v62.7712l1.8432-0.1024h106.1376L152.1664 118.0672z m647.7824-4.7616h-80.4864l72.1408 125.0304h70.7584V175.6672c0-32.1536-24.6784-58.88-56.0128-62.0544l-6.4-0.3072z m-155.3408 0h-88.576l72.0896 125.0304h88.576L644.608 113.3056z m-163.328 0H392.704l72.192 125.0304h88.4736L481.2288 113.3056z m-163.4304 0h-93.696L296.448 238.336h93.5424L317.8496 113.3056z\"\r\n fill=\"#cdcdcd\" p-id=\"3374\"></path>\r\n </svg>\r\n <div class=\"errorText\">{{ncTimeoutText}}</div>\r\n </div>\r\n <div id=\"video-container\" #videoContainer></div>\r\n</div>", styles: ["::ng-deep .video-container{width:100%;height:100%;position:relative;background-color:#0006}::ng-deep .video-container .playError,::ng-deep .video-container .playTimeout{background-color:#000;position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:99}::ng-deep .video-container .playError .errorText,::ng-deep .video-container .playTimeout .errorText{color:#cdcdcd;font-size:16px;margin-top:10px;letter-spacing:1px}::ng-deep .video-container .jessibuca-play-big{display:block}::ng-deep .video-container #video-container{width:100%;height:100%}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: VideoFlvComponent, decorators: [{
type: Component,
args: [{
selector: 'nc-video-flv',
templateUrl: './video-flv.component.html',
styleUrls: ['./video-flv.component.less']
}]
}], ctorParameters: function () { return []; }, propDecorators: { videoContainer: [{
type: ViewChild,
args: ['videoContainer']
}], ncLoaded: [{
type: Output
}], ncPlaying: [{
type: Output
}], ncUrl: [{
type: Input
}], ncTimeout: [{
type: Input
}], ncLoadingText: [{
type: Input
}], ncErrorText: [{
type: Input
}], ncTimeoutText: [{
type: Input
}], ncMuted: [{
type: Input
}], ncAutoplay: [{
type: Input
}], ncFill: [{
type: Input
}], ncScreenshot: [{
type: Input
}], ncRecord: [{
type: Input
}], ncBandwidth: [{
type: Input
}], ncControls: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8tZmx2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvdmlkZW8tZmx2L3ZpZGVvLWZsdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3ZpZGVvLWZsdi92aWRlby1mbHYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBd0IsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEosT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFDOzs7QUFPckMsTUFBTSxPQUFPLGlCQUFpQjtJQStFNUI7UUE1RUEsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUU3QixrQkFBa0I7UUFDUixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUNuRCxhQUFhO1FBQ0gsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFbEQsV0FBVztRQUNGLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDNUIsU0FBUztRQUNBLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDL0IsWUFBWTtRQUNILGtCQUFhLEdBQVcsUUFBUSxDQUFDO1FBQzFDLGFBQWE7UUFDSixnQkFBVyxHQUFXLE1BQU0sQ0FBQztRQUN0QyxhQUFhO1FBQ0osa0JBQWEsR0FBVyxhQUFhLENBQUM7UUFDL0MsU0FBUztRQUNELFdBQU0sR0FBWSxJQUFJLENBQUM7UUFPL0IsV0FBVztRQUNILGNBQVMsR0FBWSxLQUFLLENBQUM7UUFPbkMsU0FBUztRQUNELFVBQUssR0FBWSxLQUFLLENBQUM7UUFPL0IsU0FBUztRQUNELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBT3JDLFNBQVM7UUFDRCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBT2pDLFNBQVM7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QUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNULENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOzs4R0ExS1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsZ2pCQ1I5Qix3dElBb0JNOzJGRFpPLGlCQUFpQjtrQkFMN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsV0FBVyxFQUFFLDRCQUE0QjtvQkFDekMsU0FBUyxFQUFFLENBQUMsNEJBQTRCLENBQUM7aUJBQzFDOzBFQUU4QixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFNakIsUUFBUTtzQkFBakIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUdFLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdPLE9BQU87c0JBQW5CLEtBQUs7Z0JBUU8sVUFBVTtzQkFBdEIsS0FBSztnQkFRTyxNQUFNO3NCQUFsQixLQUFLO2dCQVFPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBUU8sUUFBUTtzQkFBcEIsS0FBSztnQkFRTyxXQUFXO3NCQUF2QixLQUFLO2dCQVFPLFVBQVU7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgSmVzc2lidWNhIGZyb20gJ2plc3NpYnVjYS1qcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25jLXZpZGVvLWZsdicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZGVvLWZsdi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdmlkZW8tZmx2LmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZGVvRmx2Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIEBWaWV3Q2hpbGQoJ3ZpZGVvQ29udGFpbmVyJykgdmlkZW9Db250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIHByaXZhdGUgamVzc2lidWNhITogSmVzc2lidWNhO1xyXG4gIHBsYXlFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHBsYXlUaW1lb3V0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiDov5Tlm55KZXNzaWJ1Y2EgKi9cclxuICBAT3V0cHV0KCkgbmNMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEplc3NpYnVjYT4oKTtcclxuICAvKiog6L+U5Zue5pKt5pS+54q25oCBICovXHJcbiAgQE91dHB1dCgpIG5jUGxheWluZyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgLyoqIOinhumikeWcsOWdgCAqL1xyXG4gIEBJbnB1dCgpIG5jVXJsOiBzdHJpbmcgPSAnJztcclxuICAvKiog6LaF5pe2ICovXHJcbiAgQElucHV0KCkgbmNUaW1lb3V0OiBudW1iZXIgPSA4O1xyXG4gIC8qKiDliqDovb3kuK3mlofmoYggKi9cclxuICBASW5wdXQoKSBuY0xvYWRpbmdUZXh0OiBzdHJpbmcgPSAn5Yqg6L295LitLi4uJztcclxuICAvKiog5pKt5pS+5aSx6LSl5paH5qGIICovXHJcbiAgQElucHV0KCkgbmNFcnJvclRleHQ6IHN0cmluZyA9ICfmkq3mlL7lpLHotKUnO1xyXG4gIC8qKiDmkq3mlL7otoXml7bmlofmoYggKi9cclxuICBASW5wdXQoKSBuY1RpbWVvdXRUZXh0OiBzdHJpbmcgPSAn5pKt5pS+6LaF5pe277yM6KeG6aKR5rqQ5peg5ZON5bqUJztcclxuICAvKiog6Z2Z6Z+zICovXHJcbiAgcHJpdmF0ZSBfbXV0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNldCBuY011dGVkKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9tdXRlZCA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9PSAnZmFsc2UnO1xyXG4gIH1cclxuICBnZXQgbmNNdXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9tdXRlZDtcclxuICB9XHJcbiAgLyoqIOiHquWKqOaSreaUviAqL1xyXG4gIHByaXZhdGUgX2F1dG9wbGF5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2V0IG5jQXV0b3BsYXkodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2F1dG9wbGF5ID0gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT09ICdmYWxzZSc7XHJcbiAgfVxyXG4gIGdldCBuY0F1dG9wbGF5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1dG9wbGF5O1xyXG4gIH1cclxuICAvKiog6ZO65ruhICovXHJcbiAgcHJpdmF0ZSBfZmlsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCBuY0ZpbGwodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2ZpbGwgPSB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJztcclxuICB9XHJcbiAgZ2V0IG5jRmlsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9maWxsO1xyXG4gIH1cclxuICAvKiog5oiq5Zu+ICovXHJcbiAgcHJpdmF0ZSBfc2NyZWVuc2hvdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCBuY1NjcmVlbnNob3QodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NjcmVlbnNob3QgPSB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJztcclxuICB9XHJcbiAgZ2V0IG5jU2NyZWVuc2hvdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zY3JlZW5zaG90O1xyXG4gIH1cclxuICAvKiog5b2V5bGPICovXHJcbiAgcHJpdmF0ZSBfcmVjb3JkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2V0IG5jUmVjb3JkKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZWNvcmQgPSB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJztcclxuICB9XHJcbiAgZ2V0IG5jUmVjb3JkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlY29yZDtcclxuICB9XHJcbiAgLyoqIOe9kemAnyAqL1xyXG4gIHByaXZhdGUgX2JhbmR3aWR0aDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCBuY0JhbmR3aWR0aCh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykge1xyXG4gICAgdGhpcy5fYmFuZHdpZHRoID0gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT09ICdmYWxzZSc7XHJcbiAgfVxyXG4gIGdldCBuY0JhbmR3aWR0aCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9iYW5kd2lkdGg7XHJcbiAgfVxyXG4gIC8qKiDpmpDol4/mjqfliLbmoI8gKi9cclxuICBwcml2YXRlIF9jb250cm9sczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2V0IG5jQ29udHJvbHModmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvbnRyb2xzID0gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT09ICdmYWxzZSc7XHJcbiAgfVxyXG4gIGdldCBuY0NvbnRyb2xzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xzO1xyXG4gIH1cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5uY1VybCkge1xyXG4gICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWyduY1VybCddICYmIGNoYW5nZXNbJ25jVXJsJ10uY3VycmVudFZhbHVlICYmICFjaGFuZ2VzWyduY1VybCddLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgdGhpcy5wbGF5RXJyb3IgPSBmYWxzZTtcclxuICAgIHRoaXMucGxheVRpbWVvdXQgPSBmYWxzZTtcclxuICAgIC8v6L+Z6YeM5Yqg5bu26L+f5piv5Zug5Li6ZGVzdHJveeWQjuebtOaOpemHjeaWsG5ld+eahOivneS8muaKpUplc3NpYnVjYSBjb250YWluZXIgaGFzIGJlZW4gY3JlYXRlZCBhbmQgY2FuIG5vdCBiZSBjcmVhdGVkIGFnYWluXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5qZXNzaWJ1Y2EgPSBuZXcgSmVzc2lidWNhKHtcclxuICAgICAgICB1cmw6IHRoaXMubmNVcmwsXHJcbiAgICAgICAgZGVjb2RlcjogJ2Fzc2V0cy9qZXNzaWJ1Y2EtanMvZGVjb2Rlci5qcycsXHJcbiAgICAgICAgY29udGFpbmVyOiB0aGlzLnZpZGVvQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgdmlkZW9CdWZmZXI6IDAuMiwvL+e8k+WtmOaXtumVv1xyXG4gICAgICAgIGlzUmVzaXplOiAhdGhpcy5uY0ZpbGwsLy9mYWxzZTrop4bpopHnlLvpnaLlrozlhajloavlhYVjYW52YXPljLrln58s55S76Z2i5Lya6KKr5ouJ5Ly4O3RydWU66KeG6aKR55S76Z2i5YGa562J5q+U57yp5pS+5ZCOLOmrmOaIluWuveWvuem9kGNhbnZhc+WMuuWfnyznlLvpnaLkuI3ooqvmi4nkvLgs5L2G5pyJ6buR6L65XHJcbiAgICAgICAgbG9hZGluZ1RleHQ6IHRoaXMubmNMb2FkaW5nVGV4dCwvL+WKoOi9vei/h+eoi+S4reaWh+ahiFxyXG4gICAgICAgIGRlYnVnOiBmYWxzZSxcclxuICAgICAgICB0aW1lb3V0OiB0aGlzLm5jVGltZW91dCxcclxuICAgICAgICBzaG93QmFuZHdpZHRoOiB0aGlzLm5jQmFuZHdpZHRoLC8v5pi+56S6572R6YCfXHJcbiAgICAgICAgb3BlcmF0ZUJ0bnM6IHtcclxuICAgICAgICAgIGZ1bGxzY3JlZW46IHRydWUsLy/lhajlsY/mjInpkq5cclxuICAgICAgICAgIHNjcmVlbnNob3Q6IHRoaXMubmNTY3JlZW5zaG90LC8v5oiq5Zu+5oyJ6ZKuXHJcbiAgICAgICAgICBwbGF5OiB0cnVlLC8v5pKt5pS+5pqC5YGc5oyJ6ZKuXHJcbiAgICAgICAgICBhdWRpbzogdHJ1ZSwvL+WjsOmfs+aMiemSrlxyXG4gICAgICAgICAgcmVjb3JkOiB0aGlzLm5jUmVjb3JkLy/lvZXliLbmjInpkq5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzTm90TXV0ZTogZmFsc2UsLy/mmK/lkKblvIDlkK/lo7Dpn7NcclxuICAgICAgICBjb250cm9sQXV0b0hpZGU6IHRydWUvL+iHquWKqOmakOiXj+aOp+WItuagj1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5uY0NvbnRyb2xzKSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbHMgPSB0aGlzLnZpZGVvQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmplc3NpYnVjYS1jb250cm9scycpO1xyXG4gICAgICAgIGNvbnRyb2xzPy5yZW1vdmUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy/plJnor6/nm5HlkKxcclxuICAgICAgdGhpcy5qZXNzaWJ1Y2Eub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvcjonLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5wbGF5RXJyb3IgPSB0cnVlO1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgLy/otoXml7bnm5HlkKxcclxuICAgICAgdGhpcy5qZXNzaWJ1Y2Eub24oXCJ0aW1lb3V0XCIsIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3RpbWVvdXQ6JywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMucGxheVRpbWVvdXQgPSB0cnVlO1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgLy/mkq3mlL7nm5HlkKxcclxuICAgICAgdGhpcy5qZXNzaWJ1Y2Eub24oXCJwbGF5XCIsICgpID0+IHtcclxuICAgICAgICB0aGlzLm5jUGxheWluZy5lbWl0KHRydWUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8v5pqC5YGc55uR5ZCsXHJcbiAgICAgIHRoaXMuamVzc2lidWNhLm9uKFwicGF1c2VcIiwgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubmNQbGF5aW5nLmVtaXQoZmFsc2UpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuamVzc2lidWNhLm9uKFwibG9hZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgLy/oh6rliqjmkq3mlL5cclxuICAgICAgICBpZiAodGhpcy5uY0F1dG9wbGF5KSB7XHJcbiAgICAgICAgICB0aGlzLmplc3NpYnVjYS5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5byA5ZCv5aOw6Z+zXHJcbiAgICAgICAgaWYgKCF0aGlzLm5jTXV0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuamVzc2lidWNhLmNhbmNlbE11dGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/ov5Tlm57lr7nosaFcclxuICAgICAgICB0aGlzLm5jTG9hZGVkLmVtaXQodGhpcy5qZXNzaWJ1Y2EpO1xyXG4gICAgICB9KTtcclxuICAgIH0sIDEwMClcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5qZXNzaWJ1Y2EpIHtcclxuICAgICAgdGhpcy5qZXNzaWJ1Y2EuZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidmlkZW8tY29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cInBsYXlFcnJvclwiICpuZ0lmPVwicGxheUVycm9yXCI+XHJcbiAgICA8c3ZnIHQ9XCIxNzI0ODMwNTY5MTc4XCIgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgIHAtaWQ9XCIxMDQ5NlwiIHdpZHRoPVwiNjRcIiBoZWlnaHQ9XCI2NFwiPlxyXG4gICAgICA8cGF0aFxyXG4gICAgICAgIGQ9XCJNNzI1LjMzMzMzMyA0NjkuMzMzMzMzYzEyOS42IDAgMjM0LjY2NjY2NyAxMDUuMDY2NjY3IDIzNC42NjY2NjcgMjM0LjY2NjY2N3MtMTA1LjA2NjY2NyAyMzQuNjY2NjY3LTIzNC42NjY2NjcgMjM0LjY2NjY2Ny0yMzQuNjY2NjY3LTEwNS4wNjY2NjctMjM0LjY2NjY2Ni0yMzQuNjY2NjY3IDEwNS4wNjY2NjctMjM0LjY2NjY2NyAyMzQuNjY2NjY2LTIzNC42NjY2Njd6IG0xMjgtMzQxLjMzMzMzM2ExMjggMTI4IDAgMCAxIDEyOCAxMjh2Mjk0LjEwMTMzM2EzMDAuMjI0IDMwMC4yMjQgMCAwIDAtODUuMzEyLTkxLjIyMTMzM0w4OTYgNDI2LjY2NjY2N2gtNTkuNjA1MzMzYy0zNC4zNDY2NjctMTMuNzYtNzEuODA4LTIxLjMzMzMzMy0xMTEuMDYxMzM0LTIxLjMzMzMzNHYtMTkySDI5OC42NjY2Njd2NTk3LjMzMzMzNGgxNDcuNjI2NjY2YTI5OC40NTMzMzMgMjk4LjQ1MzMzMyAwIDAgMCA1MC4yODI2NjcgODUuMzU0NjY2TDE3MC42NjY2NjcgODk2YTEyOCAxMjggMCAwIDEtMTI4LTEyOFYyNTZhMTI4IDEyOCAwIDAgMSAxMjgtMTI4aDY4Mi42NjY2NjZ6IG0tMTE5LjQ2NjY2NiA2NjEuMzMzMzMzaC0xNy4wNjY2NjdhMjEuMzMzMzMzIDIxLjMzMzMzMyAwIDAgMC0yMS4zMzMzMzMgMjEuMzMzMzM0djE3LjA2NjY2NmEyMS4zMzMzMzMgMjEuMzMzMzMzIDAgMCAwIDIxLjMzMzMzMyAyMS4zMzMzMzRoMTcuMDY2NjY3YTIxLjMzMzMzMyAyMS4zMzMzMzMgMCAwIDAgMjEuMzMzMzMzLTIxLjMzMzMzNFY4MTAuNjY2NjY3YTIxLjMzMzMzMyAyMS4zMzMzMzMgMCAwIDAtMjEuMzMzMzMzLTIxLjMzMzMzNHpNMjEzLjMzMzMzMyA2ODIuNjY2NjY3SDEyOHY4NS4zMzMzMzNhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMCAzOS40NjY2NjcgNDIuNTZMMTcwLjY2NjY2NyA4MTAuNjY2NjY3aDQyLjY2NjY2NnYtMTI4eiBtNTIwLjUzMzMzNC0xMjhoLTE3LjA2NjY2N2EyMS4zMzMzMzMgMjEuMzMzMzMzIDAgMCAwLTIxLjE4NCAxOC44MzczMzNMNjk1LjQ2NjY2NyA1NzZ2MTQ5LjMzMzMzM2EyMS4zMzMzMzMgMjEuMzMzMzMzIDAgMCAwIDE4LjgzNzMzMyAyMS4xODRMNzE2LjggNzQ2LjY2NjY2N2gxNy4wNjY2NjdhMjEuMzMzMzMzIDIxLjMzMzMzMyAwIDAgMCAyMS4xODQtMTguODM3MzM0TDc1NS4yIDcyNS4zMzMzMzN2LTE0OS4zMzMzMzNhMjEuMzMzMzMzIDIxLjMzMzMzMyAwIDAgMC0yMS4zMzMzMzMtMjEuMzMzMzMzeiBtLTI2Ni4wMjY2NjctMTg3LjExNDY2N2wyLjc3MzMzMyAxLjYgMTE0LjA5MDY2NyA3MS4yOTZhMjk4Ljk2NTMzMyAyOTguOTY1MzMzIDAgMCAwLTE1NC40MzIgMjE3LjAwMjY2NyA0Mi4yNCA0Mi4yNCAwIDAgMS0yNC44MzItMzUuNTg0TDQwNS4zMzMzMzMgNjE4LjY2NjY2N1Y0MDUuMzMzMzMzYzAtMzIuNDI2NjY3IDM0LjUxNzMzMy01Mi42MDggNjIuNTA2NjY3LTM3Ljc4MTMzM3pNMjEzLjMzMzMzMyA0MjYuNjY2NjY3SDEyOHYxNzAuNjY2NjY2aDg1LjMzMzMzM3YtMTcwLjY2NjY2NnogbTAtMjEzLjMzMzMzNEgxNzAuNjY2NjY3YTQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDAtNDIuNTYgMzkuNDY2NjY3TDEyOCAyNTZ2ODUuMzMzMzMzaDg1LjMzMzMzM3YtMTI4eiBtNjQwIDBoLTQyLjY2NjY2NnYxMjhoODUuMzMzMzMzdi04NS4zMzMzMzNhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMC0zOS40NjY2NjctNDIuNTZMODUzLjMzMzMzMyAyMTMuMzMzMzMzelwiXHJcbiAgICAgICAgZmlsbD1cIiNjZGNkY2RcIiBwLWlkPVwiMTA0OTdcIj48L3BhdGg+XHJcbiAgICA8L3N2Zz5cclxuICAgIDxkaXYgY2xhc3M9XCJlcnJvclRleHRcIj57e25jRXJyb3JUZXh0fX08L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicGxheVRpbWVvdXRcIiAqbmdJZj1cInBsYXlUaW1lb3V0XCI+XHJcbiAgICA8c3ZnIHQ9XCIxNzcwNTU2OTE5NzQ1XCIgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgIHAtaWQ9XCIzMzczXCIgd2lkdGg9XCI2NFwiIGhlaWdodD1cIjY0XCI+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgZD1cIk03MzAuMzE2OCA0ODcuNzgyNGEyNDIuNTM0NCAyNDIuNTM0NCAwIDEgMSAwLjA1MTIgNDg1LjA2ODggMjQyLjUzNDQgMjQyLjUzNDQgMCAwIDEgMC00ODUuMDY4OHogbTQuODY0IDU4LjIxNDRhMTg4LjIxMTIgMTg4LjIxMTIgMCAwIDAtMTMzLjc4NTYgNTUuMzk4NCAxODguMTA4OCAxODguMTA4OCAwIDAgMC01NS4zOTg0IDEzMy43ODU2IDE4OC4yMTEyIDE4OC4yMTEyIDAgMCAwIDU1LjM5ODQgMTMzLjc4NTYgMTg4LjEwODggMTg4LjEwODggMCAwIDAgMTMzLjc4NTYgNTUuMzk4NCAxODguMjExMiAxODguMjExMiAwIDAgMCAxMzMuNzg1Ni01NS4zOTg0IDE4OC4zMTM2IDE4OC4zMTM2IDAgMCAwIDU1LjM5ODQtMTMzLjc4NTYgMTg4LjIxMTIgMTg4LjIxMTIgMCAwIDAtNTUuMzk4NC0xMzMuNzg1NiAxODguMTA4OCAxODguMTA4OCAwIDAgMC0xMzMuNzg1Ni01NS4zOTg0ek03OTkuNTkwNCA1MS4yYTEyNS4zMzc2IDEyNS4zMzc2IDAgMCAxIDEyNC42MjA4IDExNi44ODk2bDAuMjU2IDcuODg0OHYzMjkuNDcyYTI5MS44NCAyOTEuODQgMCAwIDAtNjIuMDU0NC00My43MjQ4bC0wLjA1MTItMTYxLjE3NzYtNzQ4LjgtMC4xMDI0Vjc5OC43MmMwIDMyLjE1MzYgMjQuNjc4NCA1OS41NDU2IDU2LjAxMjggNjIuODIyNGw2LjM0ODggMC4zNTg0IDI5Ny40NzItMC4xNTM2YzEyLjggMjIuOTM3NiAyOC42NzIgNDMuOTgwOCA0Ny4wMDE2IDYyLjUxNTJIMTc2LjAyNTZhMTI1LjE4NCAxMjUuMTg0IDAgMCAxLTEyNC41MTg0LTExNi44ODk2bC0wLjIwNDgtNy44ODQ4VjE3NS45NzQ0YTEyNS4xODQgMTI1LjE4NCAwIDAgMSAxMTYuODg5Ni0xMjQuNTE4NEwxNzYuMDI1NiA1MS4yaDYyMy41NjQ4eiBtLTY0IDU0MS4yODY0YzEzLjgyNCAwIDIyLjA2NzIgMTAuOTU2OCAyMi4wNjcyIDIwLjM3NzZ2OTcuODQzMmg3Ny4zNjMyYzkuNDIwOCAwIDIxLjQwMTYgMTAuMjQgMjEuNDAxNiAyNS4zNDRzLTExLjk4MDggMjQuNTc2LTIxLjQwMTYgMjQuNTc2aC04Ny42NTQ0YTM0LjA5OTIgMzQuMDk5MiAwIDAgMS0zNC4wOTkyLTM0LjA5OTJ2LTExMy42NjRjMC05LjQyMDggOC41NTA0LTIwLjM3NzYgMjIuMzIzMi0yMC4zNzc2ek00MTEuODUyOCAzNzguNjI0YzkuNTIzMiAwIDIwLjg4OTYgMS45OTY4IDMwLjM2MTYgNy45MzZsMTM2LjcwNCA4Mi43MzkyYTI5MC45MTg0IDI5MC45MTg0IDAgMCAwLTE0MC45NTM2IDI4MC43ODA4bDQuMjQ5Ni0yLjM1NTJhNTMuNzYgNTMuNzYgMCAwIDEtMzAuMzYxNiA3Ljk4NzJjLTMwLjM2MTYgMC01Ni45MzQ0LTE1Ljg3Mi01Ni45MzQ0LTQ5LjY2NFY0MjguMjg4YzAtMzMuNzQwOCAyNi41NzI4LTQ5LjYxMjggNTYuOTM0NC00OS42MTI4ek0xNTIuMTY2NCAxMTguMDY3MmE2Mi41NjY0IDYyLjU2NjQgMCAwIDAtMzguMjk3NiA1MS4ybC0wLjMwNzIgNi40djYyLjc3MTJsMS44NDMyLTAuMTAyNGgxMDYuMTM3NkwxNTIuMTY2NCAxMTguMDY3MnogbTY0Ny43ODI0LTQuNzYxNmgtODAuNDg2NGw3Mi4xNDA4IDEyNS4wMzA0aDcwLjc1ODRWMTc1LjY2NzJjMC0zMi4xNTM2LTI0LjY3ODQtNTguODgtNTYuMDEyOC02Mi4wNTQ0bC02LjQtMC4zMDcyeiBtLTE1NS4zNDA4IDBoLTg4LjU3Nmw3Mi4wODk2IDEyNS4wMzA0aDg4LjU3Nkw2NDQuNjA4IDExMy4zMDU2eiBtLTE2My4zMjggMEgzOTIuNzA0bDcyLjE5MiAxMjUuMDMwNGg4OC40NzM2TDQ4MS4yMjg4IDExMy4zMDU2eiBtLTE2My40MzA0IDBoLTkzLjY5NkwyOTYuNDQ4IDIzOC4zMzZoOTMuNTQyNEwzMTcuODQ5NiAxMTMuMzA1NnpcIlxyXG4gICAgICAgIGZpbGw9XCIjY2RjZGNkXCIgcC1pZD1cIjMzNzRcIj48L3BhdGg+XHJcbiAgICA8L3N2Zz5cclxuICAgIDxkaXYgY2xhc3M9XCJlcnJvclRleHRcIj57e25jVGltZW91dFRleHR9fTwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgaWQ9XCJ2aWRlby1jb250YWluZXJcIiAjdmlkZW9Db250YWluZXI+PC9kaXY+XHJcbjwvZGl2PiJdfQ==