UNPKG

ng-cw-v12

Version:

Angular UI Component Library

125 lines 19.2 kB
import { Component, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class SparklesTextComponent { constructor() { /** 展示的文本内容 */ this.ncText = ''; /** 闪烁点的数量 */ this.ncCount = 10; /** 闪烁点的颜色数组 */ this.ncColors = ['#9E7AFF', '#FE8BBB', '#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4']; /** 闪烁循环时间(秒) */ this.ncDuration = 0.8; /** 闪烁点的最大尺寸 */ this.ncSize = 21; this.sparkles = []; } ngOnChanges(changes) { if (changes['ncText']) { this.cleanup(); this.initializeSparkles(); this.startAnimation(); } } ngOnDestroy() { this.cleanup(); } initializeSparkles() { this.sparkles = Array.from({ length: this.ncCount }, () => this.generateSparkle()); } generateSparkle() { const x = `${Math.random() * 100}%`; const y = `${Math.random() * 100}%`; const color = this.ncColors[Math.floor(Math.random() * this.ncColors.length)]; const delay = Math.random() * 2; const scale = Math.random() * 1 + 0.3; const lifespan = Math.random() * 10 + 5; const id = `${x}-${y}-${Date.now()}-${Math.random()}`; const opacity = 0; const rotation = 75; const scaleValue = 0; return { id, x, y, color, delay, scale, lifespan, opacity, rotation, scaleValue }; } startAnimation() { // 更新闪烁点生命周期 this.intervalId = window.setInterval(() => { this.sparkles = this.sparkles.map(sparkle => { if (sparkle.lifespan <= 0) { return this.generateSparkle(); } else { return Object.assign(Object.assign({}, sparkle), { lifespan: sparkle.lifespan - 0.1 }); } }); }, 100); // 动画循环 - 模拟Framer Motion的关键帧动画 const animate = () => { this.sparkles = this.sparkles.map(sparkle => { const time = (Date.now() * 0.001 + sparkle.delay) % this.ncDuration; // 使用可配置的循环时间 const progress = time / this.ncDuration; // 模拟关键帧动画 [0, 1, 0] let opacity; let scaleValue; let rotation; if (progress <= 0.5) { // 前半段:0 -> 1 const t = progress * 2; opacity = t; scaleValue = t * sparkle.scale; rotation = 75 + (120 - 75) * t; } else { // 后半段:1 -> 0 const t = (progress - 0.5) * 2; opacity = 1 - t; scaleValue = (1 - t) * sparkle.scale; rotation = 120 + (150 - 120) * t; } return Object.assign(Object.assign({}, sparkle), { opacity, rotation, scaleValue }); }); this.animationFrameId = requestAnimationFrame(animate); }; animate(); } cleanup() { if (this.intervalId) { clearInterval(this.intervalId); } if (this.animationFrameId) { cancelAnimationFrame(this.animationFrameId); } } getSparkleStyle(sparkle) { return { left: sparkle.x, top: sparkle.y, opacity: sparkle.opacity, transform: `scale(${sparkle.scaleValue}) rotate(${sparkle.rotation}deg)` }; } trackBySparkleId(index, sparkle) { return sparkle.id; } } SparklesTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: SparklesTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); SparklesTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: SparklesTextComponent, selector: "nc-sparkles-text", inputs: { ncText: "ncText", ncCount: "ncCount", ncColors: "ncColors", ncDuration: "ncDuration", ncSize: "ncSize" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"sparkles-text\">\n <span class=\"sparkles-container\">\n <!-- \u95EA\u70C1\u70B9 -->\n <svg *ngFor=\"let sparkle of sparkles; trackBy: trackBySparkleId\" [ngStyle]=\"getSparkleStyle(sparkle)\"\n class=\"sparkle-svg\" [attr.width]=\"ncSize\" [attr.height]=\"ncSize\" viewBox=\"0 0 21 21\">\n <path\n d=\"M9.82531 0.843845C10.0553 0.215178 10.9446 0.215178 11.1746 0.843845L11.8618 2.72026C12.4006 4.19229 12.3916 6.39157 13.5 7.5C14.6084 8.60843 16.8077 8.59935 18.2797 9.13822L20.1561 9.82534C20.7858 10.0553 20.7858 10.9447 20.1561 11.1747L18.2797 11.8618C16.8077 12.4007 14.6084 12.3916 13.5 13.5C12.3916 14.6084 12.4006 16.8077 11.8618 18.2798L11.1746 20.1562C10.9446 20.7858 10.0553 20.7858 9.82531 20.1562L9.13819 18.2798C8.59932 16.8077 8.60843 14.6084 7.5 13.5C6.39157 12.3916 4.19225 12.4007 2.72023 11.8618L0.843814 11.1747C0.215148 10.9447 0.215148 10.0553 0.843814 9.82534L2.72023 9.13822C4.19225 8.59935 6.39157 8.60843 7.5 7.5C8.60843 6.39157 8.59932 4.19229 9.13819 2.72026L9.82531 0.843845Z\"\n [attr.fill]=\"sparkle.color\" />\n </svg>\n <!-- \u6587\u672C\u5185\u5BB9 -->\n <span class=\"sparkles-content\">{{ncText}}</span>\n </span>\n</div>", styles: [".sparkles-text{position:relative;display:inline-block}.sparkles-text .sparkles-container{position:relative;display:inline-block}.sparkles-text .sparkles-container .sparkle-svg{position:absolute;pointer-events:none;z-index:20}.sparkles-text .sparkles-container .sparkles-content{position:relative;z-index:10}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: SparklesTextComponent, decorators: [{ type: Component, args: [{ selector: 'nc-sparkles-text', templateUrl: './sparkles-text.component.html', styleUrls: ['./sparkles-text.component.less'] }] }], ctorParameters: function () { return []; }, propDecorators: { ncText: [{ type: Input }], ncCount: [{ type: Input }], ncColors: [{ type: Input }], ncDuration: [{ type: Input }], ncSize: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmtsZXMtdGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NwYXJrbGVzLXRleHQvc3BhcmtsZXMtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NwYXJrbGVzLXRleHQvc3BhcmtsZXMtdGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7OztBQW9CdEYsTUFBTSxPQUFPLHFCQUFxQjtJQWdCaEM7UUFmQSxjQUFjO1FBQ0wsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQUM3QixhQUFhO1FBQ0osWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUM5QixlQUFlO1FBQ04sYUFBUSxHQUFhLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRyxnQkFBZ0I7UUFDUCxlQUFVLEdBQVcsR0FBRyxDQUFDO1FBQ2xDLGVBQWU7UUFDTixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBRTdCLGFBQVEsR0FBYyxFQUFFLENBQUM7SUFJVCxDQUFDO0lBRWpCLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDcEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNsQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNwRixDQUFDO0lBRU8sY0FBYztRQUNwQixZQUFZO1FBQ1osSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMxQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFO29CQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztpQkFDL0I7cUJBQU07b0JBQ0wsdUNBQVksT0FBTyxLQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBRztpQkFDekQ7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVSLCtCQUErQjtRQUMvQixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYTtnQkFDbEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBRXhDLG9CQUFvQjtnQkFDcEIsSUFBSSxPQUFlLENBQUM7Z0JBQ3BCLElBQUksVUFBa0IsQ0FBQztnQkFDdkIsSUFBSSxRQUFnQixDQUFDO2dCQUVyQixJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUU7b0JBQ25CLGFBQWE7b0JBQ2IsTUFBTSxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztvQkFDdkIsT0FBTyxHQUFHLENBQUMsQ0FBQztvQkFDWixVQUFVLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQy9CLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNoQztxQkFBTTtvQkFDTCxhQUFhO29CQUNiLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDL0IsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2hCLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO29CQUNyQyxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDbEM7Z0JBRUQsdUNBQVksT0FBTyxLQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxJQUFHO1lBQ3ZELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQztRQUVGLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLE9BQU87UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNoQztRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFnQjtRQUM5QixPQUFPO1lBQ0wsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2YsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFNBQVMsRUFBRSxTQUFTLE9BQU8sQ0FBQyxVQUFVLFlBQVksT0FBTyxDQUFDLFFBQVEsTUFBTTtTQUN6RSxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWEsRUFBRSxPQUFnQjtRQUM5QyxPQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7a0hBbkhVLHFCQUFxQjtzR0FBckIscUJBQXFCLGlNQ3BCbEMsa3ZDQVlNOzJGRFFPLHFCQUFxQjtrQkFMakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixXQUFXLEVBQUUsZ0NBQWdDO29CQUM3QyxTQUFTLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztpQkFDOUM7MEVBR1UsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW50ZXJmYWNlIFNwYXJrbGUge1xuICBpZDogc3RyaW5nO1xuICB4OiBzdHJpbmc7XG4gIHk6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgZGVsYXk6IG51bWJlcjtcbiAgc2NhbGU6IG51bWJlcjtcbiAgbGlmZXNwYW46IG51bWJlcjtcbiAgb3BhY2l0eTogbnVtYmVyO1xuICByb3RhdGlvbjogbnVtYmVyO1xuICBzY2FsZVZhbHVlOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25jLXNwYXJrbGVzLXRleHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3BhcmtsZXMtdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NwYXJrbGVzLXRleHQuY29tcG9uZW50Lmxlc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTcGFya2xlc1RleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIC8qKiDlsZXnpLrnmoTmlofmnKzlhoXlrrkgKi9cbiAgQElucHV0KCkgbmNUZXh0OiBzdHJpbmcgPSAnJztcbiAgLyoqIOmXqueDgeeCueeahOaVsOmHjyAqL1xuICBASW5wdXQoKSBuY0NvdW50OiBudW1iZXIgPSAxMDtcbiAgLyoqIOmXqueDgeeCueeahOminOiJsuaVsOe7hCAqL1xuICBASW5wdXQoKSBuY0NvbG9yczogc3RyaW5nW10gPSBbJyM5RTdBRkYnLCAnI0ZFOEJCQicsICcjRkY2QjZCJywgJyM0RUNEQzQnLCAnIzQ1QjdEMScsICcjOTZDRUI0J107XG4gIC8qKiDpl6rng4Hlvqrnjq/ml7bpl7TvvIjnp5LvvIkgKi9cbiAgQElucHV0KCkgbmNEdXJhdGlvbjogbnVtYmVyID0gMC44O1xuICAvKiog6Zeq54OB54K555qE5pyA5aSn5bC65a+4ICovXG4gIEBJbnB1dCgpIG5jU2l6ZTogbnVtYmVyID0gMjE7XG5cbiAgc3BhcmtsZXM6IFNwYXJrbGVbXSA9IFtdO1xuICBwcml2YXRlIGludGVydmFsSWQ/OiBudW1iZXI7XG4gIHByaXZhdGUgYW5pbWF0aW9uRnJhbWVJZD86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snbmNUZXh0J10pIHtcbiAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplU3BhcmtsZXMoKTtcbiAgICAgIHRoaXMuc3RhcnRBbmltYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVNwYXJrbGVzKCk6IHZvaWQge1xuICAgIHRoaXMuc3BhcmtsZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLm5jQ291bnQgfSwgKCkgPT4gdGhpcy5nZW5lcmF0ZVNwYXJrbGUoKSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlU3BhcmtsZSgpOiBTcGFya2xlIHtcbiAgICBjb25zdCB4ID0gYCR7TWF0aC5yYW5kb20oKSAqIDEwMH0lYDtcbiAgICBjb25zdCB5ID0gYCR7TWF0aC5yYW5kb20oKSAqIDEwMH0lYDtcbiAgICBjb25zdCBjb2xvciA9IHRoaXMubmNDb2xvcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5uY0NvbG9ycy5sZW5ndGgpXTtcbiAgICBjb25zdCBkZWxheSA9IE1hdGgucmFuZG9tKCkgKiAyO1xuICAgIGNvbnN0IHNjYWxlID0gTWF0aC5yYW5kb20oKSAqIDEgKyAwLjM7XG4gICAgY29uc3QgbGlmZXNwYW4gPSBNYXRoLnJhbmRvbSgpICogMTAgKyA1O1xuICAgIGNvbnN0IGlkID0gYCR7eH0tJHt5fS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKX1gO1xuICAgIGNvbnN0IG9wYWNpdHkgPSAwO1xuICAgIGNvbnN0IHJvdGF0aW9uID0gNzU7XG4gICAgY29uc3Qgc2NhbGVWYWx1ZSA9IDA7XG5cbiAgICByZXR1cm4geyBpZCwgeCwgeSwgY29sb3IsIGRlbGF5LCBzY2FsZSwgbGlmZXNwYW4sIG9wYWNpdHksIHJvdGF0aW9uLCBzY2FsZVZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0QW5pbWF0aW9uKCk6IHZvaWQge1xuICAgIC8vIOabtOaWsOmXqueDgeeCueeUn+WRveWRqOacn1xuICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnNwYXJrbGVzID0gdGhpcy5zcGFya2xlcy5tYXAoc3BhcmtsZSA9PiB7XG4gICAgICAgIGlmIChzcGFya2xlLmxpZmVzcGFuIDw9IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVNwYXJrbGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5zcGFya2xlLCBsaWZlc3Bhbjogc3BhcmtsZS5saWZlc3BhbiAtIDAuMSB9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAxMDApO1xuXG4gICAgLy8g5Yqo55S75b6q546vIC0g5qih5oufRnJhbWVyIE1vdGlvbueahOWFs+mUruW4p+WKqOeUu1xuICAgIGNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNwYXJrbGVzID0gdGhpcy5zcGFya2xlcy5tYXAoc3BhcmtsZSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSAoRGF0ZS5ub3coKSAqIDAuMDAxICsgc3BhcmtsZS5kZWxheSkgJSB0aGlzLm5jRHVyYXRpb247IC8vIOS9v+eUqOWPr+mFjee9rueahOW+queOr+aXtumXtFxuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IHRpbWUgLyB0aGlzLm5jRHVyYXRpb247XG5cbiAgICAgICAgLy8g5qih5ouf5YWz6ZSu5bin5Yqo55S7IFswLCAxLCAwXVxuICAgICAgICBsZXQgb3BhY2l0eTogbnVtYmVyO1xuICAgICAgICBsZXQgc2NhbGVWYWx1ZTogbnVtYmVyO1xuICAgICAgICBsZXQgcm90YXRpb246IG51bWJlcjtcblxuICAgICAgICBpZiAocHJvZ3Jlc3MgPD0gMC41KSB7XG4gICAgICAgICAgLy8g5YmN5Y2K5q6177yaMCAtPiAxXG4gICAgICAgICAgY29uc3QgdCA9IHByb2dyZXNzICogMjtcbiAgICAgICAgICBvcGFjaXR5ID0gdDtcbiAgICAgICAgICBzY2FsZVZhbHVlID0gdCAqIHNwYXJrbGUuc2NhbGU7XG4gICAgICAgICAgcm90YXRpb24gPSA3NSArICgxMjAgLSA3NSkgKiB0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIOWQjuWNiuaute+8mjEgLT4gMFxuICAgICAgICAgIGNvbnN0IHQgPSAocHJvZ3Jlc3MgLSAwLjUpICogMjtcbiAgICAgICAgICBvcGFjaXR5ID0gMSAtIHQ7XG4gICAgICAgICAgc2NhbGVWYWx1ZSA9ICgxIC0gdCkgKiBzcGFya2xlLnNjYWxlO1xuICAgICAgICAgIHJvdGF0aW9uID0gMTIwICsgKDE1MCAtIDEyMCkgKiB0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uc3BhcmtsZSwgb3BhY2l0eSwgcm90YXRpb24sIHNjYWxlVmFsdWUgfTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gICAgfTtcblxuICAgIGFuaW1hdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnRlcnZhbElkKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFuaW1hdGlvbkZyYW1lSWQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuYW5pbWF0aW9uRnJhbWVJZCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3BhcmtsZVN0eWxlKHNwYXJrbGU6IFNwYXJrbGUpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBzcGFya2xlLngsXG4gICAgICB0b3A6IHNwYXJrbGUueSxcbiAgICAgIG9wYWNpdHk6IHNwYXJrbGUub3BhY2l0eSxcbiAgICAgIHRyYW5zZm9ybTogYHNjYWxlKCR7c3BhcmtsZS5zY2FsZVZhbHVlfSkgcm90YXRlKCR7c3BhcmtsZS5yb3RhdGlvbn1kZWcpYFxuICAgIH07XG4gIH1cblxuICB0cmFja0J5U3BhcmtsZUlkKGluZGV4OiBudW1iZXIsIHNwYXJrbGU6IFNwYXJrbGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBzcGFya2xlLmlkO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic3BhcmtsZXMtdGV4dFwiPlxuICAgIDxzcGFuIGNsYXNzPVwic3BhcmtsZXMtY29udGFpbmVyXCI+XG4gICAgICAgIDwhLS0g6Zeq54OB54K5IC0tPlxuICAgICAgICA8c3ZnICpuZ0Zvcj1cImxldCBzcGFya2xlIG9mIHNwYXJrbGVzOyB0cmFja0J5OiB0cmFja0J5U3BhcmtsZUlkXCIgW25nU3R5bGVdPVwiZ2V0U3BhcmtsZVN0eWxlKHNwYXJrbGUpXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3BhcmtsZS1zdmdcIiBbYXR0ci53aWR0aF09XCJuY1NpemVcIiBbYXR0ci5oZWlnaHRdPVwibmNTaXplXCIgdmlld0JveD1cIjAgMCAyMSAyMVwiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTkuODI1MzEgMC44NDM4NDVDMTAuMDU1MyAwLjIxNTE3OCAxMC45NDQ2IDAuMjE1MTc4IDExLjE3NDYgMC44NDM4NDVMMTEuODYxOCAyLjcyMDI2QzEyLjQwMDYgNC4xOTIyOSAxMi4zOTE2IDYuMzkxNTcgMTMuNSA3LjVDMTQuNjA4NCA4LjYwODQzIDE2LjgwNzcgOC41OTkzNSAxOC4yNzk3IDkuMTM4MjJMMjAuMTU2MSA5LjgyNTM0QzIwLjc4NTggMTAuMDU1MyAyMC43ODU4IDEwLjk0NDcgMjAuMTU2MSAxMS4xNzQ3TDE4LjI3OTcgMTEuODYxOEMxNi44MDc3IDEyLjQwMDcgMTQuNjA4NCAxMi4zOTE2IDEzLjUgMTMuNUMxMi4zOTE2IDE0LjYwODQgMTIuNDAwNiAxNi44MDc3IDExLjg2MTggMTguMjc5OEwxMS4xNzQ2IDIwLjE1NjJDMTAuOTQ0NiAyMC43ODU4IDEwLjA1NTMgMjAuNzg1OCA5LjgyNTMxIDIwLjE1NjJMOS4xMzgxOSAxOC4yNzk4QzguNTk5MzIgMTYuODA3NyA4LjYwODQzIDE0LjYwODQgNy41IDEzLjVDNi4zOTE1NyAxMi4zOTE2IDQuMTkyMjUgMTIuNDAwNyAyLjcyMDIzIDExLjg2MThMMC44NDM4MTQgMTEuMTc0N0MwLjIxNTE0OCAxMC45NDQ3IDAuMjE1MTQ4IDEwLjA1NTMgMC44NDM4MTQgOS44MjUzNEwyLjcyMDIzIDkuMTM4MjJDNC4xOTIyNSA4LjU5OTM1IDYuMzkxNTcgOC42MDg0MyA3LjUgNy41QzguNjA4NDMgNi4zOTE1NyA4LjU5OTMyIDQuMTkyMjkgOS4xMzgxOSAyLjcyMDI2TDkuODI1MzEgMC44NDM4NDVaXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cInNwYXJrbGUuY29sb3JcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPCEtLSDmlofmnKzlhoXlrrkgLS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3BhcmtsZXMtY29udGVudFwiPnt7bmNUZXh0fX08L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9kaXY+Il19