UNPKG

ng-cw-v12

Version:

Angular UI component library

268 lines 44.4 kB
import { __awaiter } from "tslib"; import { Component, EventEmitter, Input, Output } from '@angular/core'; import Hls from 'hls.js'; import flvjs from 'flv.js'; import * as i0 from "@angular/core"; import * as i1 from "./local.service"; import * as i2 from "@angular/common"; export class VideoComponent { constructor(eleRef, ls) { this.eleRef = eleRef; this.ls = ls; this.videoUrl = ''; this.videoHover = false; this.playError = false; this.ncCoverUrl = ''; //封面图片地址 this.ncLoaded = new EventEmitter(); //返回video this.ncPlaying = new EventEmitter(); //返回播放状态 this.mutedMode = true; this.autoplayMode = false; this.loopMode = false; this.fillMode = false; this.screenshotMode = false; this.coverMode = false; this.controlsMode = true; } set ncUrl(value) { this.videoUrl = value; setTimeout(() => { //加延迟,防止其他传入参数未获取到 this.initVideo(); }); } ; //静音 set ncMuted(value) { this.mutedMode = value !== null && value !== undefined && value !== false && value !== 'false'; } //自动播放 set ncAutoplay(value) { this.autoplayMode = value !== null && value !== undefined && value !== false && value !== 'false'; } //循环播放 set ncLoop(value) { this.loopMode = value !== null && value !== undefined && value !== false && value !== 'false'; } //铺满 set ncFill(value) { this.fillMode = value !== null && value !== undefined && value !== false && value !== 'false'; } //截图 set ncScreenshot(value) { this.screenshotMode = value !== null && value !== undefined && value !== false && value !== 'false'; } //封面 set ncCover(value) { this.coverMode = value !== null && value !== undefined && value !== false && value !== 'false'; } //隐藏控制栏 set ncControls(value) { this.controlsMode = value !== null && value !== undefined && value !== false && value !== 'false'; } ngOnInit() { } ngOnDestroy() { this.destroyAll(); } //初始化 initVideo() { return __awaiter(this, void 0, void 0, function* () { this.destroyAll(); //加载前先销毁 this.video = this.eleRef.nativeElement.querySelector('#video'); //获取video const extension = this.ls.getFileExtension(this.videoUrl); //判断地址类型 if (extension == 'm3u8') { //hls(m3u8) if (this.video.canPlayType('application/vnd.apple.mpegurl')) { this.video.src = this.videoUrl; } else if (Hls.isSupported()) { this.hls = new Hls(); this.hls.loadSource(this.videoUrl); this.hls.attachMedia(this.video); //错误监听 this.hls.on(Hls.Events.ERROR, (event, data) => { if (data.details == 'bufferStalledError') { console.warn('warning:', data.error); } else if (data.details == 'fragParsingError') { console.warn('warning:', data.error); } else if (data.details == 'bufferNudgeOnStall') { console.warn('warning:', data.error); } else { this.playError = true; console.error('error:', data.details); console.error('error:', data.error); } }); } } else if (extension == 'flv') { //HTTP-FLV(flv) if (flvjs.isSupported()) { this.flv = flvjs.createPlayer({ type: 'flv', url: this.videoUrl }); this.flv.attachMediaElement(this.video); this.flv.load(); //错误监听 this.flv.on(flvjs.Events.ERROR, (error) => { this.playError = true; console.error('error:', error); }); } } else { //静态视频地址 this.video.src = this.videoUrl; } //封面 if (this.coverMode) { const img = document.createElement('img'); img.style.width = '100%'; img.style.height = '100%'; const coverDom = this.eleRef.nativeElement.querySelector('.cover'); this.video.addEventListener('play', () => { coverDom.style.display = 'none'; }); if (!this.ncCoverUrl) { //使用默认封面 const dataUrl = yield this.captureVideoFrame(this.videoUrl); img.src = dataUrl; } else { //使用传入封面 img.src = this.ncCoverUrl; } coverDom.appendChild(img); } //播放监听 this.video.addEventListener('play', () => { this.ncPlaying.emit(true); }); //暂停监听 this.video.addEventListener('pause', () => { this.ncPlaying.emit(false); }); //返回video对象 this.ncLoaded.emit(this.video); }); } //截图 screenshot() { const canvas = document.createElement('canvas'); canvas.width = this.video.videoWidth; canvas.height = this.video.videoHeight; canvas.getContext('2d').drawImage(this.video, 0, 0, canvas.width, canvas.height); const a = document.createElement('a'); a.download = '截图【' + this.ls.formatDate('yyyy-MM-dd HH-mm-ss') + '】'; a.href = canvas.toDataURL('image/png'); a.click(); } //销毁 destroyAll() { if (this.hls) { this.hls.destroy(); } if (this.flv) { this.flv.destroy(); } if (this.video) { this.destroyVideo(this.video); } } destroyVideo(video) { video.pause(); video.src = ''; video.removeEventListener('play', () => { }); video.removeEventListener('pause', () => { }); video.removeEventListener('loadedmetadata', () => { }); video.remove(); } //获取视频截图作为封面 captureVideoFrame(url, time = 1) { return new Promise((resolve) => { const video = document.createElement('video'); video.crossOrigin = "anonymous"; video.currentTime = time; video.muted = true; video.autoplay = true; const extension = this.ls.getFileExtension(url); //判断地址类型 let hls; let flv; if (extension == 'm3u8') { //hls(m3u8) hls = new Hls(); hls.loadSource(url); hls.attachMedia(video); } else if (extension == 'flv') { //HTTP-FLV(flv) flv = flvjs.createPlayer({ type: 'flv', url: url }); flv.attachMediaElement(video); flv.load(); } else { //静态视频地址 video.src = url; } video.addEventListener('loadedmetadata', () => { video.oncanplay = () => { const canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height); const dataUrl = canvas.toDataURL('image/png'); resolve(dataUrl); if (hls) { hls.destroy(); } if (flv) { flv.destroy(); } if (video) { this.destroyVideo(video); } }; }); }); } } VideoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: VideoComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalService }], target: i0.ɵɵFactoryTarget.Component }); VideoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: VideoComponent, selector: "nc-video", inputs: { ncUrl: "ncUrl", ncCoverUrl: "ncCoverUrl", ncMuted: "ncMuted", ncAutoplay: "ncAutoplay", ncLoop: "ncLoop", ncFill: "ncFill", ncScreenshot: "ncScreenshot", ncCover: "ncCover", ncControls: "ncControls" }, outputs: { ncLoaded: "ncLoaded", ncPlaying: "ncPlaying" }, ngImport: i0, template: "<div class=\"video-container\" (mouseenter)=\"videoHover = true\" (mouseleave)=\"videoHover = false\">\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\">\u64AD\u653E\u5931\u8D25</div>\r\n </div>\r\n <div class=\"cover\" *ngIf=\"coverMode\"></div>\r\n <div class=\"screenshot\" *ngIf=\"screenshotMode && videoHover\" (click)=\"screenshot()\" title=\"\u622A\u56FE\">\r\n <svg t=\"1720708671726\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"1830\" width=\"24\" height=\"24\">\r\n <path\r\n d=\"M981.333333 789.333333h-106.666666V256c0-59.733333-46.933333-106.666667-106.666667-106.666667H234.666667V42.666667c0-25.6-17.066667-42.666667-42.666667-42.666667s-42.666667 17.066667-42.666667 42.666667v106.666666H42.666667c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667h106.666666V768c0 59.733333 46.933333 106.666667 106.666667 106.666667h533.333333V981.333333c0 25.6 17.066667 42.666667 42.666667 42.666667s42.666667-17.066667 42.666667-42.666667v-106.666666H981.333333c25.6 0 42.666667-17.066667 42.666667-42.666667s-17.066667-42.666667-42.666667-42.666667z m-213.333333-554.666666c12.8 0 21.333333 8.533333 21.333333 21.333333v341.333333l-145.066666-140.8c-17.066667-17.066667-42.666667-17.066667-59.733334 0l-140.8 145.066667L384 541.866667c-17.066667-17.066667-38.4-17.066667-55.466667-4.266667l-89.6 72.533333V234.666667H768z m-512 554.666666c-12.8 0-21.333333-8.533333-21.333333-21.333333v-42.666667l115.2-93.866666 64 64c8.533333 8.533333 17.066667 12.8 29.866666 12.8s21.333333-4.266667 29.866667-12.8l140.8-145.066667 174.933333 166.4v72.533333H256z\"\r\n p-id=\"1831\" fill=\"#ffffff\"></path>\r\n <path\r\n d=\"M384 482.133333c51.2 0 93.866667-42.666667 93.866667-93.866666s-42.666667-93.866667-93.866667-93.866667-93.866667 38.4-93.866667 89.6 42.666667 98.133333 93.866667 98.133333z m0-128c17.066667 0 34.133333 12.8 34.133333 34.133334s-17.066667 29.866667-34.133333 29.866666-34.133333-17.066667-34.133333-34.133333 17.066667-29.866667 34.133333-29.866667z\"\r\n p-id=\"1832\" fill=\"#ffffff\"></path>\r\n </svg>\r\n </div>\r\n <video class=\"video\" [ngStyle]=\"{'object-fit': fillMode ? 'fill' : 'contain' }\" crossOrigin=\"anonymous\"\r\n [controls]=\"controlsMode\" [muted]=\"mutedMode\" [autoplay]=\"autoplayMode\" [loop]=\"loopMode\" id=\"video\"></video>\r\n</div>", styles: [".video-container{width:100%;height:100%;position:relative}.video-container .playError{background-color:#000;width:100%;height:100%;position:absolute;left:0;top:0;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:2}.video-container .playError .errorText{color:#cdcdcd;font-size:16px;margin-top:10px;letter-spacing:1px}.video-container .cover{width:100%;height:100%;position:absolute;left:0;right:0}.video-container .screenshot{z-index:1;position:absolute;right:5px;top:5px;background-color:#2b333fb3;padding:3px;border-radius:2px;display:flex;align-items:center;justify-content:center;cursor:pointer}.video-container .screenshot:hover{background-color:#2b333fcc}.video-container .video{width:100%;height:100%}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: VideoComponent, decorators: [{ type: Component, args: [{ selector: 'nc-video', templateUrl: './video.component.html', styleUrls: ['./video.component.less'] }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.LocalService }]; }, propDecorators: { ncUrl: [{ type: Input }], ncCoverUrl: [{ type: Input }], ncLoaded: [{ type: Output }], ncPlaying: [{ type: Output }], ncMuted: [{ type: Input }], ncAutoplay: [{ type: Input }], ncLoop: [{ type: Input }], ncFill: [{ type: Input }], ncScreenshot: [{ type: Input }], ncCover: [{ type: Input }], ncControls: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy92aWRlby92aWRlby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3ZpZGVvL3ZpZGVvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUM7QUFDekIsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDOzs7O0FBUTNCLE1BQU0sT0FBTyxjQUFjO0lBdUR6QixZQUFvQixNQUFrQixFQUFVLEVBQWdCO1FBQTVDLFdBQU0sR0FBTixNQUFNLENBQVk7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFjO1FBbkRoRSxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVFsQixlQUFVLEdBQVcsRUFBRSxDQUFDLENBQUEsUUFBUTtRQUMvQixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUMsQ0FBQSxTQUFTO1FBQ3pELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDLENBQUEsUUFBUTtRQStCMUQsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixpQkFBWSxHQUFZLElBQUksQ0FBQztJQUV1QyxDQUFDO0lBaERyRSxJQUFhLEtBQUssQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxR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O3NCQUF0QixLQUFLO2dCQUlPLE1BQU07c0JBQWxCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxZQUFZO3NCQUF4QixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgSGxzIGZyb20gJ2hscy5qcyc7XHJcbmltcG9ydCBmbHZqcyBmcm9tICdmbHYuanMnO1xyXG5pbXBvcnQgeyBMb2NhbFNlcnZpY2UgfSBmcm9tICcuL2xvY2FsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduYy12aWRlbycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZGVvLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi92aWRlby5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaWRlb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICB2aWRlbyE6IEhUTUxWaWRlb0VsZW1lbnQ7XHJcbiAgaGxzITogSGxzO1xyXG4gIGZsdiE6IGFueTtcclxuICB2aWRlb1VybDogc3RyaW5nID0gJyc7XHJcbiAgdmlkZW9Ib3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHBsYXlFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCBuY1VybCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnZpZGVvVXJsID0gdmFsdWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy/liqDlu7bov5/vvIzpmLLmraLlhbbku5bkvKDlhaXlj4LmlbDmnKrojrflj5bliLBcclxuICAgICAgdGhpcy5pbml0VmlkZW8oKTtcclxuICAgIH0pXHJcbiAgfTtcclxuICBASW5wdXQoKSBuY0NvdmVyVXJsOiBzdHJpbmcgPSAnJzsvL+WwgemdouWbvueJh+WcsOWdgFxyXG4gIEBPdXRwdXQoKSBuY0xvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTFZpZGVvRWxlbWVudD4oKTsvL+i/lOWbnnZpZGVvXHJcbiAgQE91dHB1dCgpIG5jUGxheWluZyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTsvL+i/lOWbnuaSreaUvueKtuaAgVxyXG5cclxuICAvL+mdmemfs1xyXG4gIEBJbnB1dCgpIHNldCBuY011dGVkKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLm11dGVkTW9kZSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9PSAnZmFsc2UnO1xyXG4gIH1cclxuICAvL+iHquWKqOaSreaUvlxyXG4gIEBJbnB1dCgpIHNldCBuY0F1dG9wbGF5KHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLmF1dG9wbGF5TW9kZSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9PSAnZmFsc2UnO1xyXG4gIH1cclxuICAvL+W+queOr+aSreaUvlxyXG4gIEBJbnB1dCgpIHNldCBuY0xvb3AodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMubG9vcE1vZGUgPSB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJztcclxuICB9XHJcbiAgLy/pk7rmu6FcclxuICBASW5wdXQoKSBzZXQgbmNGaWxsKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLmZpbGxNb2RlID0gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT09ICdmYWxzZSc7XHJcbiAgfVxyXG4gIC8v5oiq5Zu+XHJcbiAgQElucHV0KCkgc2V0IG5jU2NyZWVuc2hvdCh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykge1xyXG4gICAgdGhpcy5zY3JlZW5zaG90TW9kZSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9PSAnZmFsc2UnO1xyXG4gIH1cclxuICAvL+WwgemdolxyXG4gIEBJbnB1dCgpIHNldCBuY0NvdmVyKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNvdmVyTW9kZSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9PSAnZmFsc2UnO1xyXG4gIH1cclxuICAvL+makOiXj+aOp+WItuagj1xyXG4gIEBJbnB1dCgpIHNldCBuY0NvbnRyb2xzKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xzTW9kZSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9PSAnZmFsc2UnO1xyXG4gIH1cclxuXHJcbiAgbXV0ZWRNb2RlOiBib29sZWFuID0gdHJ1ZTtcclxuICBhdXRvcGxheU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsb29wTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZpbGxNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2NyZWVuc2hvdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb3Zlck1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb250cm9sc01vZGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZVJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBsczogTG9jYWxTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3lBbGwoKTtcclxuICB9XHJcblxyXG4gIC8v5Yid5aeL5YyWXHJcbiAgYXN5bmMgaW5pdFZpZGVvKCkge1xyXG4gICAgdGhpcy5kZXN0cm95QWxsKCk7Ly/liqDovb3liY3lhYjplIDmr4FcclxuICAgIHRoaXMudmlkZW8gPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyN2aWRlbycpOy8v6I635Y+WdmlkZW9cclxuICAgIGNvbnN0IGV4dGVuc2lvbjogc3RyaW5nID0gdGhpcy5scy5nZXRGaWxlRXh0ZW5zaW9uKHRoaXMudmlkZW9VcmwpOy8v5Yik5pat5Zyw5Z2A57G75Z6LXHJcblxyXG4gICAgaWYgKGV4dGVuc2lvbiA9PSAnbTN1OCcpIHtcclxuICAgICAgLy9obHMobTN1OClcclxuICAgICAgaWYgKHRoaXMudmlkZW8uY2FuUGxheVR5cGUoJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsJykpIHtcclxuICAgICAgICB0aGlzLnZpZGVvLnNyYyA9IHRoaXMudmlkZW9Vcmw7XHJcbiAgICAgIH0gZWxzZSBpZiAoSGxzLmlzU3VwcG9ydGVkKCkpIHtcclxuICAgICAgICB0aGlzLmhscyA9IG5ldyBIbHMoKTtcclxuICAgICAgICB0aGlzLmhscy5sb2FkU291cmNlKHRoaXMudmlkZW9VcmwpO1xyXG4gICAgICAgIHRoaXMuaGxzLmF0dGFjaE1lZGlhKHRoaXMudmlkZW8pO1xyXG4gICAgICAgIC8v6ZSZ6K+v55uR5ZCsXHJcbiAgICAgICAgdGhpcy5obHMub24oSGxzLkV2ZW50cy5FUlJPUiwgKGV2ZW50LCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YS5kZXRhaWxzID09ICdidWZmZXJTdGFsbGVkRXJyb3InKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybignd2FybmluZzonLCBkYXRhLmVycm9yKVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmRldGFpbHMgPT0gJ2ZyYWdQYXJzaW5nRXJyb3InKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybignd2FybmluZzonLCBkYXRhLmVycm9yKVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmRldGFpbHMgPT0gJ2J1ZmZlck51ZGdlT25TdGFsbCcpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCd3YXJuaW5nOicsIGRhdGEuZXJyb3IpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yOicsIGRhdGEuZGV0YWlscyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yOicsIGRhdGEuZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGV4dGVuc2lvbiA9PSAnZmx2Jykge1xyXG4gICAgICAvL0hUVFAtRkxWKGZsdilcclxuICAgICAgaWYgKGZsdmpzLmlzU3VwcG9ydGVkKCkpIHtcclxuICAgICAgICB0aGlzLmZsdiA9IGZsdmpzLmNyZWF0ZVBsYXllcih7XHJcbiAgICAgICAgICB0eXBlOiAnZmx2JyxcclxuICAgICAgICAgIHVybDogdGhpcy52aWRlb1VybFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmx2LmF0dGFjaE1lZGlhRWxlbWVudCh0aGlzLnZpZGVvKTtcclxuICAgICAgICB0aGlzLmZsdi5sb2FkKCk7XHJcbiAgICAgICAgLy/plJnor6/nm5HlkKxcclxuICAgICAgICB0aGlzLmZsdi5vbihmbHZqcy5FdmVudHMuRVJST1IsIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBsYXlFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvcjonLCBlcnJvcik7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy/pnZnmgIHop4bpopHlnLDlnYBcclxuICAgICAgdGhpcy52aWRlby5zcmMgPSB0aGlzLnZpZGVvVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5bCB6Z2iXHJcbiAgICBpZiAodGhpcy5jb3Zlck1vZGUpIHtcclxuICAgICAgY29uc3QgaW1nOiBIVE1MSW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgIGltZy5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgaW1nLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgY29uc3QgY292ZXJEb206IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuY292ZXInKTtcclxuICAgICAgdGhpcy52aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgKCkgPT4ge1xyXG4gICAgICAgIGNvdmVyRG9tLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoIXRoaXMubmNDb3ZlclVybCkge1xyXG4gICAgICAgIC8v5L2/55So6buY6K6k5bCB6Z2iXHJcbiAgICAgICAgY29uc3QgZGF0YVVybDogc3RyaW5nID0gYXdhaXQgdGhpcy5jYXB0dXJlVmlkZW9GcmFtZSh0aGlzLnZpZGVvVXJsKTtcclxuICAgICAgICBpbWcuc3JjID0gZGF0YVVybDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvL+S9v+eUqOS8oOWFpeWwgemdolxyXG4gICAgICAgIGltZy5zcmMgPSB0aGlzLm5jQ292ZXJVcmw7XHJcbiAgICAgIH1cclxuICAgICAgY292ZXJEb20uYXBwZW5kQ2hpbGQoaW1nKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+aSreaUvuebkeWQrFxyXG4gICAgdGhpcy52aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgKCkgPT4ge1xyXG4gICAgICB0aGlzLm5jUGxheWluZy5lbWl0KHRydWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy/mmoLlgZznm5HlkKxcclxuICAgIHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMubmNQbGF5aW5nLmVtaXQoZmFsc2UpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy/ov5Tlm552aWRlb+WvueixoVxyXG4gICAgdGhpcy5uY0xvYWRlZC5lbWl0KHRoaXMudmlkZW8pO1xyXG4gIH1cclxuXHJcbiAgLy/miKrlm75cclxuICBzY3JlZW5zaG90KCkge1xyXG4gICAgY29uc3QgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY2FudmFzLndpZHRoID0gdGhpcy52aWRlby52aWRlb1dpZHRoO1xyXG4gICAgY2FudmFzLmhlaWdodCA9IHRoaXMudmlkZW8udmlkZW9IZWlnaHQ7XHJcbiAgICBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSEuZHJhd0ltYWdlKHRoaXMudmlkZW8sIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XHJcblxyXG4gICAgY29uc3QgYTogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBhLmRvd25sb2FkID0gJ+aIquWbvuOAkCcgKyB0aGlzLmxzLmZvcm1hdERhdGUoJ3l5eXktTU0tZGQgSEgtbW0tc3MnKSArICfjgJEnO1xyXG4gICAgYS5ocmVmID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICBhLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICAvL+mUgOavgVxyXG4gIGRlc3Ryb3lBbGwoKSB7XHJcbiAgICBpZiAodGhpcy5obHMpIHtcclxuICAgICAgdGhpcy5obHMuZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmx2KSB7XHJcbiAgICAgIHRoaXMuZmx2LmRlc3Ryb3koKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZpZGVvKSB7XHJcbiAgICAgIHRoaXMuZGVzdHJveVZpZGVvKHRoaXMudmlkZW8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVzdHJveVZpZGVvKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KSB7XHJcbiAgICB2aWRlby5wYXVzZSgpO1xyXG4gICAgdmlkZW8uc3JjID0gJyc7XHJcbiAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgKCkgPT4geyB9KTtcclxuICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgKCkgPT4geyB9KTtcclxuICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgKCkgPT4geyB9KTtcclxuICAgIHZpZGVvLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy/ojrflj5bop4bpopHmiKrlm77kvZzkuLrlsIHpnaJcclxuICBjYXB0dXJlVmlkZW9GcmFtZSh1cmw6IHN0cmluZywgdGltZTogbnVtYmVyID0gMSkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUpID0+IHtcclxuICAgICAgY29uc3QgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xyXG4gICAgICB2aWRlby5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCJcclxuICAgICAgdmlkZW8uY3VycmVudFRpbWUgPSB0aW1lO1xyXG4gICAgICB2aWRlby5tdXRlZCA9IHRydWU7XHJcbiAgICAgIHZpZGVvLmF1dG9wbGF5ID0gdHJ1ZTtcclxuXHJcbiAgICAgIGNvbnN0IGV4dGVuc2lvbjogc3RyaW5nID0gdGhpcy5scy5nZXRGaWxlRXh0ZW5zaW9uKHVybCk7Ly/liKTmlq3lnLDlnYDnsbvlnotcclxuICAgICAgbGV0IGhsczogSGxzO1xyXG4gICAgICBsZXQgZmx2OiBhbnk7XHJcblxyXG4gICAgICBpZiAoZXh0ZW5zaW9uID09ICdtM3U4Jykge1xyXG4gICAgICAgIC8vaGxzKG0zdTgpXHJcbiAgICAgICAgaGxzID0gbmV3IEhscygpO1xyXG4gICAgICAgIGhscy5sb2FkU291cmNlKHVybCk7XHJcbiAgICAgICAgaGxzLmF0dGFjaE1lZGlhKHZpZGVvKTtcclxuICAgICAgfSBlbHNlIGlmIChleHRlbnNpb24gPT0gJ2ZsdicpIHtcclxuICAgICAgICAvL0hUVFAtRkxWKGZsdilcclxuICAgICAgICBmbHYgPSBmbHZqcy5jcmVhdGVQbGF5ZXIoe1xyXG4gICAgICAgICAgdHlwZTogJ2ZsdicsXHJcbiAgICAgICAgICB1cmw6IHVybFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGZsdi5hdHRhY2hNZWRpYUVsZW1lbnQodmlkZW8pO1xyXG4gICAgICAgIGZsdi5sb2FkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy/pnZnmgIHop4bpopHlnLDlnYBcclxuICAgICAgICB2aWRlby5zcmMgPSB1cmw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgKCkgPT4ge1xyXG4gICAgICAgIHZpZGVvLm9uY2FucGxheSA9ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZGVvLnZpZGVvV2lkdGg7XHJcbiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gdmlkZW8udmlkZW9IZWlnaHQ7XHJcbiAgICAgICAgICBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSEuZHJhd0ltYWdlKHZpZGVvLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgY29uc3QgZGF0YVVybDogc3RyaW5nID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICAgICAgICByZXNvbHZlKGRhdGFVcmwpO1xyXG4gICAgICAgICAgaWYgKGhscykge1xyXG4gICAgICAgICAgICBobHMuZGVzdHJveSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGZsdikge1xyXG4gICAgICAgICAgICBmbHYuZGVzdHJveSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHZpZGVvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveVZpZGVvKHZpZGVvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInZpZGVvLWNvbnRhaW5lclwiIChtb3VzZWVudGVyKT1cInZpZGVvSG92ZXIgPSB0cnVlXCIgKG1vdXNlbGVhdmUpPVwidmlkZW9Ib3ZlciA9IGZhbHNlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGxheUVycm9yXCIgKm5nSWY9XCJwbGF5RXJyb3JcIj5cclxuICAgICAgICA8c3ZnIHQ9XCIxNzI0ODMwNTY5MTc4XCIgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgIHAtaWQ9XCIxMDQ5NlwiIHdpZHRoPVwiNjRcIiBoZWlnaHQ9XCI2NFwiPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgZD1cIk03MjUuMzMzMzMzIDQ2OS4zMzMzMzNjMTI5LjYgMCAyMzQuNjY2NjY3IDEwNS4wNjY2NjcgMjM0LjY2NjY2NyAyMzQuNjY2NjY3cy0xMDUuMDY2NjY3IDIzNC42NjY2NjctMjM0LjY2NjY2NyAyMzQuNjY2NjY3LTIzNC42NjY2NjctMTA1LjA2NjY2Ny0yMzQuNjY2NjY2LTIzNC42NjY2NjcgMTA1LjA2NjY2Ny0yMzQuNjY2NjY3IDIzNC42NjY2NjYtMjM0LjY2NjY2N3ogbTEyOC0zNDEuMzMzMzMzYTEyOCAxMjggMCAwIDEgMTI4IDEyOHYyOTQuMTAxMzMzYTMwMC4yMjQgMzAwLjIyNCAwIDAgMC04NS4zMTItOTEuMjIxMzMzTDg5NiA0MjYuNjY2NjY3aC01OS42MDUzMzNjLTM0LjM0NjY2Ny0xMy43Ni03MS44MDgtMjEuMzMzMzMzLTExMS4wNjEzMzQtMjEuMzMzMzM0di0xOTJIMjk4LjY2NjY2N3Y1OTcuMzMzMzM0aDE0Ny42MjY2NjZhMjk4LjQ1MzMzMyAyOTguNDUzMzMzIDAgMCAwIDUwLjI4MjY2NyA4NS4zNTQ2NjZMMTcwLjY2NjY2NyA4OTZhMTI4IDEyOCAwIDAgMS0xMjgtMTI4VjI1NmExMjggMTI4IDAgMCAxIDEyOC0xMjhoNjgyLjY2NjY2NnogbS0xMTkuNDY2NjY2IDY2MS4zMzMzMzNoLTE3LjA2NjY2N2EyMS4zMzMzMzMgMjEuMzMzMzMzIDAgMCAwLTIxLjMzMzMzMyAyMS4zMzMzMzR2MTcuMDY2NjY2YTIxLjMzMzMzMyAyMS4zMzMzMzMgMCAwIDAgMjEuMzMzMzMzIDIxLjMzMzMzNGgxNy4wNjY2NjdhMjEuMzMzMzMzIDIxLjMzMzMzMyAwIDAgMCAyMS4zMzMzMzMtMjEuMzMzMzM0VjgxMC42NjY2NjdhMjEuMzMzMzMzIDIxLjMzMzMzMyAwIDAgMC0yMS4zMzMzMzMtMjEuMzMzMzM0ek0yMTMuMzMzMzMzIDY4Mi42NjY2NjdIMTI4djg1LjMzMzMzM2E0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwIDM5LjQ2NjY2NyA0Mi41NkwxNzAuNjY2NjY3IDgxMC42NjY2NjdoNDIuNjY2NjY2di0xMjh6IG01MjAuNTMzMzM0LTEyOGgtMTcuMDY2NjY3YTIxLjMzMzMzMyAyMS4zMzMzMzMgMCAwIDAtMjEuMTg0IDE4LjgzNzMzM0w2OTUuNDY2NjY3IDU3NnYxNDkuMzMzMzMzYTIxLjMzMzMzMyAyMS4zMzMzMzMgMCAwIDAgMTguODM3MzMzIDIxLjE4NEw3MTYuOCA3NDYuNjY2NjY3aDE3LjA2NjY2N2EyMS4zMzMzMzMgMjEuMzMzMzMzIDAgMCAwIDIxLjE4NC0xOC44MzczMzRMNzU1LjIgNzI1LjMzMzMzM3YtMTQ5LjMzMzMzM2EyMS4zMzMzMzMgMjEuMzMzMzMzIDAgMCAwLTIxLjMzMzMzMy0yMS4zMzMzMzN6IG0tMjY2LjAyNjY2Ny0xODcuMTE0NjY3bDIuNzczMzMzIDEuNiAxMTQuMDkwNjY3IDcxLjI5NmEyOTguOTY1MzMzIDI5OC45NjUzMzMgMCAwIDAtMTU0LjQzMiAyMTcuMDAyNjY3IDQyLjI0IDQyLjI0IDAgMCAxLTI0LjgzMi0zNS41ODRMNDA1LjMzMzMzMyA2MTguNjY2NjY3VjQwNS4zMzMzMzNjMC0zMi40MjY2NjcgMzQuNTE3MzMzLTUyLjYwOCA2Mi41MDY2NjctMzcuNzgxMzMzek0yMTMuMzMzMzMzIDQyNi42NjY2NjdIMTI4djE3MC42NjY2NjZoODUuMzMzMzMzdi0xNzAuNjY2NjY2eiBtMC0yMTMuMzMzMzM0SDE3MC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMC00Mi41NiAzOS40NjY2NjdMMTI4IDI1NnY4NS4zMzMzMzNoODUuMzMzMzMzdi0xMjh6IG02NDAgMGgtNDIuNjY2NjY2djEyOGg4NS4zMzMzMzN2LTg1LjMzMzMzM2E0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwLTM5LjQ2NjY2Ny00Mi41Nkw4NTMuMzMzMzMzIDIxMy4zMzMzMzN6XCJcclxuICAgICAgICAgICAgICAgIGZpbGw9XCIjY2RjZGNkXCIgcC1pZD1cIjEwNDk3XCI+PC9wYXRoPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvclRleHRcIj7mkq3mlL7lpLHotKU8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvdmVyXCIgKm5nSWY9XCJjb3Zlck1vZGVcIj48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzY3JlZW5zaG90XCIgKm5nSWY9XCJzY3JlZW5zaG90TW9kZSAmJiB2aWRlb0hvdmVyXCIgKGNsaWNrKT1cInNjcmVlbnNob3QoKVwiIHRpdGxlPVwi5oiq5Zu+XCI+XHJcbiAgICAgICAgPHN2ZyB0PVwiMTcyMDcwODY3MTcyNlwiIGNsYXNzPVwiaWNvblwiIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICBwLWlkPVwiMTgzMFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgZD1cIk05ODEuMzMzMzMzIDc4OS4zMzMzMzNoLTEwNi42NjY2NjZWMjU2YzAtNTkuNzMzMzMzLTQ2LjkzMzMzMy0xMDYuNjY2NjY3LTEwNi42NjY2NjctMTA2LjY2NjY2N0gyMzQuNjY2NjY3VjQyLjY2NjY2N2MwLTI1LjYtMTcuMDY2NjY3LTQyLjY2NjY2Ny00Mi42NjY2NjctNDIuNjY2NjY3cy00Mi42NjY2NjcgMTcuMDY2NjY3LTQyLjY2NjY2NyA0Mi42NjY2Njd2MTA2LjY2NjY2Nkg0Mi42NjY2NjdjLTI1LjYgMC00Mi42NjY2NjcgMTcuMDY2NjY3LTQyLjY2NjY2NyA0Mi42NjY2NjdzMTcuMDY2NjY3IDQyLjY2NjY2NyA0Mi42NjY2NjcgNDIuNjY2NjY3aDEwNi42NjY2NjZWNzY4YzAgNTkuNzMzMzMzIDQ2LjkzMzMzMyAxMDYuNjY2NjY3IDEwNi42NjY2NjcgMTA2LjY2NjY2N2g1MzMuMzMzMzMzVjk4MS4zMzMzMzNjMCAyNS42IDE3LjA2NjY2NyA0Mi42NjY2NjcgNDIuNjY2NjY3IDQyLjY2NjY2N3M0Mi42NjY2NjctMTcuMDY2NjY3IDQyLjY2NjY2Ny00Mi42NjY2Njd2LTEwNi42NjY2NjZIOTgxLjMzMzMzM2MyNS42IDAgNDIuNjY2NjY3LTE3LjA2NjY2NyA0Mi42NjY2NjctNDIuNjY2NjY3cy0xNy4wNjY2NjctNDIuNjY2NjY3LTQyLjY2NjY2Ny00Mi42NjY2Njd6IG0tMjEzLjMzMzMzMy01NTQuNjY2NjY2YzEyLjggMCAyMS4zMzMzMzMgOC41MzMzMzMgMjEuMzMzMzMzIDIxLjMzMzMzM3YzNDEuMzMzMzMzbC0xNDUuMDY2NjY2LTE0MC44Yy0xNy4wNjY2NjctMTcuMDY2NjY3LTQyLjY2NjY2Ny0xNy4wNjY2NjctNTkuNzMzMzM0IDBsLTE0MC44IDE0NS4wNjY2NjdMMzg0IDU0MS44NjY2NjdjLTE3LjA2NjY2Ny0xNy4wNjY2NjctMzguNC0xNy4wNjY2NjctNTUuNDY2NjY3LTQuMjY2NjY3bC04OS42IDcyLjUzMzMzM1YyMzQuNjY2NjY3SDc2OHogbS01MTIgNTU0LjY2NjY2NmMtMTIuOCAwLTIxLjMzMzMzMy04LjUzMzMzMy0yMS4zMzMzMzMtMjEuMzMzMzMzdi00Mi42NjY2NjdsMTE1LjItOTMuODY2NjY2IDY0IDY0YzguNTMzMzMzIDguNTMzMzMzIDE3LjA2NjY2NyAxMi44IDI5Ljg2NjY2NiAxMi44czIxLjMzMzMzMy00LjI2NjY2NyAyOS44NjY2NjctMTIuOGwxNDAuOC0xNDUuMDY2NjY3IDE3NC45MzMzMzMgMTY2LjR2NzIuNTMzMzMzSDI1NnpcIlxyXG4gICAgICAgICAgICAgICAgcC1pZD1cIjE4MzFcIiBmaWxsPVwiI2ZmZmZmZlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJNMzg0IDQ4Mi4xMzMzMzNjNTEuMiAwIDkzLjg2NjY2Ny00Mi42NjY2NjcgOTMuODY2NjY3LTkzLjg2NjY2NnMtNDIuNjY2NjY3LTkzLjg2NjY2Ny05My44NjY2NjctOTMuODY2NjY3LTkzLjg2NjY2NyAzOC40LTkzLjg2NjY2NyA4OS42IDQyLjY2NjY2NyA5OC4xMzMzMzMgOTMuODY2NjY3IDk4LjEzMzMzM3ogbTAtMTI4YzE3LjA2NjY2NyAwIDM0LjEzMzMzMyAxMi44IDM0LjEzMzMzMyAzNC4xMzMzMzRzLTE3LjA2NjY2NyAyOS44NjY2NjctMzQuMTMzMzMzIDI5Ljg2NjY2Ni0zNC4xMzMzMzMtMTcuMDY2NjY3LTM0LjEzMzMzMy0zNC4xMzMzMzMgMTcuMDY2NjY3LTI5Ljg2NjY2NyAzNC4xMzMzMzMtMjkuODY2NjY3elwiXHJcbiAgICAgICAgICAgICAgICBwLWlkPVwiMTgzMlwiIGZpbGw9XCIjZmZmZmZmXCI+PC9wYXRoPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8dmlkZW8gY2xhc3M9XCJ2aWRlb1wiIFtuZ1N0eWxlXT1cInsnb2JqZWN0LWZpdCc6IGZpbGxNb2RlID8gJ2ZpbGwnIDogJ2NvbnRhaW4nIH1cIiBjcm9zc09yaWdpbj1cImFub255bW91c1wiXHJcbiAgICAgICAgW2NvbnRyb2xzXT1cImNvbnRyb2xzTW9kZVwiIFttdXRlZF09XCJtdXRlZE1vZGVcIiBbYXV0b3BsYXldPVwiYXV0b3BsYXlNb2RlXCIgW2xvb3BdPVwibG9vcE1vZGVcIiBpZD1cInZpZGVvXCI+PC92aWRlbz5cclxuPC9kaXY+Il19