game-lobby-lib 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/banners/banners.component.mjs +60 -16
- package/esm2022/lib/casino-lobby/casino-lobby.component.mjs +299 -0
- package/esm2022/lib/game-lobby-lib.component.mjs +47 -15
- package/esm2022/lib/game-lobby-lib.service.mjs +153 -4
- package/esm2022/lib/game-service/game-service.service.mjs +163 -0
- package/esm2022/lib/theme/default-theme.mjs +9 -0
- package/esm2022/lib/theme/theme.token.mjs +8 -0
- package/esm2022/lib/theme/themeService.service.mjs +38 -0
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/game-lobby-lib.mjs +750 -33
- package/fesm2022/game-lobby-lib.mjs.map +1 -1
- package/lib/banners/banners.component.d.ts +17 -6
- package/lib/casino-lobby/casino-lobby.component.d.ts +55 -0
- package/lib/game-lobby-lib.component.d.ts +16 -2
- package/lib/game-lobby-lib.service.d.ts +147 -1
- package/lib/game-service/game-service.service.d.ts +86 -0
- package/lib/theme/default-theme.d.ts +9 -0
- package/lib/theme/theme.token.d.ts +4 -0
- package/lib/theme/themeService.service.d.ts +17 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -1,23 +1,67 @@
|
|
|
1
|
-
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, Input, ViewChildren, ViewEncapsulation, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "
|
|
4
|
+
import * as i1 from "../theme/themeService.service";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
5
6
|
export class BannersComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
];
|
|
7
|
+
constructor(themeService) {
|
|
8
|
+
this.baseUrl = '';
|
|
9
|
+
this.routerLinkClicked = new EventEmitter();
|
|
10
|
+
this.bannerOverlay = null;
|
|
11
|
+
// FIX: Initialize slides as empty array to prevent null reference errors
|
|
12
|
+
this.slides = [];
|
|
13
|
+
this.hoveredSlideId = null;
|
|
14
|
+
themeService.theme$.subscribe(t => (this.theme = t));
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
console.log('Banner bannerOverlay:', this.bannerOverlay); // Debug log to check bannerData
|
|
18
|
+
this.setDataThemes();
|
|
19
|
+
}
|
|
20
|
+
setDataThemes() {
|
|
21
|
+
// FIX: Add safe navigation to prevent errors if bannerData is null/undefined
|
|
22
|
+
this.slides = this.bannerData.bannerData || [];
|
|
23
|
+
this.baseUrl = this.bannerData.baseUrl || '';
|
|
24
|
+
}
|
|
25
|
+
getRouterLinkFromButton(buttonHtml) {
|
|
26
|
+
// FIX: Add null/undefined check for buttonHtml
|
|
27
|
+
if (!buttonHtml) {
|
|
28
|
+
this.routerLinkClicked.emit('');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
// Parse the HTML string to extract the routerlink attribute
|
|
33
|
+
const parser = new DOMParser();
|
|
34
|
+
const doc = parser.parseFromString(buttonHtml, 'text/html');
|
|
35
|
+
const anchor = doc.querySelector('a[routerlink]');
|
|
36
|
+
if (anchor) {
|
|
37
|
+
const routerLink = anchor.getAttribute('routerlink');
|
|
38
|
+
this.routerLinkClicked.emit(routerLink || '');
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.routerLinkClicked.emit('');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error('Error parsing button HTML:', error);
|
|
46
|
+
this.routerLinkClicked.emit('');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BannersComponent, deps: [{ token: i1.GameLobbyThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BannersComponent, isStandalone: true, selector: "app-banners", inputs: { bannerData: "bannerData", theme: "theme", bannerOverlay: "bannerOverlay" }, outputs: { routerLinkClicked: "routerLinkClicked" }, viewQueries: [{ propertyName: "btnSpans", predicate: ["btnSpan"], descendants: true }], ngImport: i0, template: "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n", styles: [".cm-banner{width:100%;max-width:1280px;display:block;position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}@media (max-width: 1280px){.cm-banner{padding:0 20px}}@media (max-width: 768px){.cm-banner{padding:0 15px}}@media (max-width: 480px){.cm-banner{padding:0 10px}}.cm-banner .slideWrapper{position:relative;width:100%;font-weight:400;overflow:hidden}.cm-banner .slideWrapper img{width:100%;height:auto;max-width:1280px;aspect-ratio:1280/340;object-fit:cover;object-position:center;display:block;border-radius:4px}@media (max-width: 1280px){.cm-banner .slideWrapper img{aspect-ratio:16/5}}@media (max-width: 768px){.cm-banner .slideWrapper img{aspect-ratio:16/6}}@media (max-width: 480px){.cm-banner .slideWrapper img{aspect-ratio:4/3}}.cm-banner .slideWrapper .cm-slider__btn{position:absolute;border-radius:4px;left:25%;bottom:40px;z-index:2;padding:20px;cursor:pointer;transition:all .3s ease}@media (max-width: 1024px){.cm-banner .slideWrapper .cm-slider__btn{left:20%;bottom:40px;padding:15px}}@media (max-width: 768px){.cm-banner .slideWrapper .cm-slider__btn{left:50%;transform:translate(-50%);bottom:30px;padding:12px}}@media (max-width: 480px){.cm-banner .slideWrapper .cm-slider__btn{bottom:20px;padding:10px}}.cm-banner .slideWrapper .cm-slider__btn .btn{font-weight:200;border:none;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px}@media (max-width: 768px){.cm-banner .slideWrapper .cm-slider__btn .btn{font-size:.9rem;padding:14px 28px}}@media (max-width: 480px){.cm-banner .slideWrapper .cm-slider__btn .btn{font-size:.8rem;padding:10px 20px}}.my-swiper{width:100%;max-width:1280px;--swiper-pagination-bottom: 15px;--swiper-pagination-bullet-inactive-color: #999;--swiper-pagination-color: #fff;--swiper-pagination-bullet-size: 15px}@media (max-width: 768px){.my-swiper{--swiper-pagination-bullet-size: 12px;--swiper-pagination-bottom: 10px}}@media (max-width: 480px){.my-swiper{--swiper-pagination-bullet-size: 10px;--swiper-pagination-bottom: 8px}}.my-swiper::part(pagination){left:0!important;right:0!important;text-align:center!important;width:100%!important;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-right:400px!important}@media (max-width: 1280px){.my-swiper::part(pagination){padding-right:300px!important;justify-content:flex-end!important}}@media (max-width: 768px){.my-swiper::part(pagination){padding-right:200px!important;justify-content:flex-end!important}}@media (max-width: 480px){.my-swiper::part(pagination){justify-content:center!important;padding-right:200px!important}}@media (max-width: 80px){.my-swiper::part(pagination){justify-content:center!important;padding-right:100px!important}}.my-swiper::part(bullet){background:#999!important}.my-swiper::part(bullet-active){background:#fff!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
18
51
|
}
|
|
19
52
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BannersComponent, decorators: [{
|
|
20
53
|
type: Component,
|
|
21
|
-
args: [{ selector: 'app-banners', standalone: true, imports: [CommonModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<swiper-container\r\n
|
|
22
|
-
}] }
|
|
23
|
-
|
|
54
|
+
args: [{ selector: 'app-banners', standalone: true, imports: [CommonModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], encapsulation: ViewEncapsulation.None, template: "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n", styles: [".cm-banner{width:100%;max-width:1280px;display:block;position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}@media (max-width: 1280px){.cm-banner{padding:0 20px}}@media (max-width: 768px){.cm-banner{padding:0 15px}}@media (max-width: 480px){.cm-banner{padding:0 10px}}.cm-banner .slideWrapper{position:relative;width:100%;font-weight:400;overflow:hidden}.cm-banner .slideWrapper img{width:100%;height:auto;max-width:1280px;aspect-ratio:1280/340;object-fit:cover;object-position:center;display:block;border-radius:4px}@media (max-width: 1280px){.cm-banner .slideWrapper img{aspect-ratio:16/5}}@media (max-width: 768px){.cm-banner .slideWrapper img{aspect-ratio:16/6}}@media (max-width: 480px){.cm-banner .slideWrapper img{aspect-ratio:4/3}}.cm-banner .slideWrapper .cm-slider__btn{position:absolute;border-radius:4px;left:25%;bottom:40px;z-index:2;padding:20px;cursor:pointer;transition:all .3s ease}@media (max-width: 1024px){.cm-banner .slideWrapper .cm-slider__btn{left:20%;bottom:40px;padding:15px}}@media (max-width: 768px){.cm-banner .slideWrapper .cm-slider__btn{left:50%;transform:translate(-50%);bottom:30px;padding:12px}}@media (max-width: 480px){.cm-banner .slideWrapper .cm-slider__btn{bottom:20px;padding:10px}}.cm-banner .slideWrapper .cm-slider__btn .btn{font-weight:200;border:none;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px}@media (max-width: 768px){.cm-banner .slideWrapper .cm-slider__btn .btn{font-size:.9rem;padding:14px 28px}}@media (max-width: 480px){.cm-banner .slideWrapper .cm-slider__btn .btn{font-size:.8rem;padding:10px 20px}}.my-swiper{width:100%;max-width:1280px;--swiper-pagination-bottom: 15px;--swiper-pagination-bullet-inactive-color: #999;--swiper-pagination-color: #fff;--swiper-pagination-bullet-size: 15px}@media (max-width: 768px){.my-swiper{--swiper-pagination-bullet-size: 12px;--swiper-pagination-bottom: 10px}}@media (max-width: 480px){.my-swiper{--swiper-pagination-bullet-size: 10px;--swiper-pagination-bottom: 8px}}.my-swiper::part(pagination){left:0!important;right:0!important;text-align:center!important;width:100%!important;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-right:400px!important}@media (max-width: 1280px){.my-swiper::part(pagination){padding-right:300px!important;justify-content:flex-end!important}}@media (max-width: 768px){.my-swiper::part(pagination){padding-right:200px!important;justify-content:flex-end!important}}@media (max-width: 480px){.my-swiper::part(pagination){justify-content:center!important;padding-right:200px!important}}@media (max-width: 80px){.my-swiper::part(pagination){justify-content:center!important;padding-right:100px!important}}.my-swiper::part(bullet){background:#999!important}.my-swiper::part(bullet-active){background:#fff!important}\n"] }]
|
|
55
|
+
}], ctorParameters: () => [{ type: i1.GameLobbyThemeService }], propDecorators: { btnSpans: [{
|
|
56
|
+
type: ViewChildren,
|
|
57
|
+
args: ['btnSpan']
|
|
58
|
+
}], bannerData: [{
|
|
59
|
+
type: Input
|
|
60
|
+
}], theme: [{
|
|
61
|
+
type: Input
|
|
62
|
+
}], routerLinkClicked: [{
|
|
63
|
+
type: Output
|
|
64
|
+
}], bannerOverlay: [{
|
|
65
|
+
type: Input
|
|
66
|
+
}] } });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1lLWxvYmJ5LWxpYi9zcmMvbGliL2Jhbm5lcnMvYmFubmVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1lLWxvYmJ5LWxpYi9zcmMvbGliL2Jhbm5lcnMvYmFubmVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBVSxZQUFZLEVBQUUsaUJBQWlCLEVBQXlCLE1BQU0sRUFBRSxZQUFZLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDNUssT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBYS9DLE1BQU0sT0FBTyxnQkFBZ0I7SUFZM0IsWUFBWSxZQUFtQztRQVAvQyxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ1gsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNoRCxrQkFBYSxHQUE0QixJQUFJLENBQUM7UUFDdkQseUVBQXlFO1FBQ3pFLFdBQU0sR0FBVSxFQUFFLENBQUM7UUFDbkIsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBR25DLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztRQUMxRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDWCw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELHVCQUF1QixDQUFDLFVBQWtCO1FBQ3hDLCtDQUErQztRQUMvQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILDREQUE0RDtZQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFbEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7K0dBbERVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLDBTQ2Q3Qix3OENBbUNBLGcwRkQzQlksWUFBWTs7NEZBTVgsZ0JBQWdCO2tCQVQ1QixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsV0FDZCxDQUFDLHNCQUFzQixDQUFDLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJOzBGQUdaLFFBQVE7c0JBQWhDLFlBQVk7dUJBQUMsU0FBUztnQkFFZCxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0UsYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiwgUXVlcnlMaXN0LCBFbGVtZW50UmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgR2FtZUxvYmJ5VGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUvdGhlbWVTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHYW1lTG9iYnlUaGVtZSB9IGZyb20gJy4uL3RoZW1lL2RlZmF1bHQtdGhlbWUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYmFubmVycycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhbm5lcnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9iYW5uZXJzLmNvbXBvbmVudC5zY3NzJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW5uZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkcmVuKCdidG5TcGFuJykgYnRuU3BhbnMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gIEBJbnB1dCgpIGJhbm5lckRhdGE6IGFueTtcclxuICBASW5wdXQoKSB0aGVtZT86IEdhbWVMb2JieVRoZW1lO1xyXG4gIGJhc2VVcmw6IHN0cmluZyA9ICcnO1xyXG4gIEBPdXRwdXQoKSByb3V0ZXJMaW5rQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBJbnB1dCgpIGJhbm5lck92ZXJsYXk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcclxuICAvLyBGSVg6IEluaXRpYWxpemUgc2xpZGVzIGFzIGVtcHR5IGFycmF5IHRvIHByZXZlbnQgbnVsbCByZWZlcmVuY2UgZXJyb3JzXHJcbiAgc2xpZGVzOiBhbnlbXSA9IFtdO1xyXG4gIGhvdmVyZWRTbGlkZUlkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBcclxuICBjb25zdHJ1Y3Rvcih0aGVtZVNlcnZpY2U6IEdhbWVMb2JieVRoZW1lU2VydmljZSkge1xyXG4gICAgdGhlbWVTZXJ2aWNlLnRoZW1lJC5zdWJzY3JpYmUodCA9PiAodGhpcy50aGVtZSA9IHQpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ0Jhbm5lciBiYW5uZXJPdmVybGF5OicsIHRoaXMuYmFubmVyT3ZlcmxheSk7IC8vIERlYnVnIGxvZyB0byBjaGVjayBiYW5uZXJEYXRhXHJcbiAgICB0aGlzLnNldERhdGFUaGVtZXMoKTtcclxuICB9XHJcblxyXG4gIHNldERhdGFUaGVtZXMoKTogdm9pZCB7XHJcbiAgICAvLyBGSVg6IEFkZCBzYWZlIG5hdmlnYXRpb24gdG8gcHJldmVudCBlcnJvcnMgaWYgYmFubmVyRGF0YSBpcyBudWxsL3VuZGVmaW5lZFxyXG4gICAgdGhpcy5zbGlkZXMgPSB0aGlzLmJhbm5lckRhdGEuYmFubmVyRGF0YSB8fCBbXTtcclxuICAgIHRoaXMuYmFzZVVybCA9IHRoaXMuYmFubmVyRGF0YS5iYXNlVXJsIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um91dGVyTGlua0Zyb21CdXR0b24oYnV0dG9uSHRtbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBGSVg6IEFkZCBudWxsL3VuZGVmaW5lZCBjaGVjayBmb3IgYnV0dG9uSHRtbFxyXG4gICAgaWYgKCFidXR0b25IdG1sKSB7XHJcbiAgICAgIHRoaXMucm91dGVyTGlua0NsaWNrZWQuZW1pdCgnJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBQYXJzZSB0aGUgSFRNTCBzdHJpbmcgdG8gZXh0cmFjdCB0aGUgcm91dGVybGluayBhdHRyaWJ1dGVcclxuICAgICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xyXG4gICAgICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGJ1dHRvbkh0bWwsICd0ZXh0L2h0bWwnKTtcclxuICAgICAgY29uc3QgYW5jaG9yID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ2Fbcm91dGVybGlua10nKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChhbmNob3IpIHtcclxuICAgICAgICBjb25zdCByb3V0ZXJMaW5rID0gYW5jaG9yLmdldEF0dHJpYnV0ZSgncm91dGVybGluaycpO1xyXG4gICAgICAgIHRoaXMucm91dGVyTGlua0NsaWNrZWQuZW1pdChyb3V0ZXJMaW5rIHx8ICcnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvdXRlckxpbmtDbGlja2VkLmVtaXQoJycpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGJ1dHRvbiBIVE1MOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5yb3V0ZXJMaW5rQ2xpY2tlZC5lbWl0KCcnKTtcclxuICAgIH1cclxuICB9XHJcbn0iLCI8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ZvbnQtYXdlc29tZS82LjUuMC9jc3MvYWxsLm1pbi5jc3NcIj5cclxuPGRpdiBjbGFzcz1cImNtLWJhbm5lclwiPiBcclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmFubmVyT3ZlcmxheVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFubmVyT3ZlcmxheVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxzd2lwZXItY29udGFpbmVyXHJcbiAgICBjbGFzcz1cIm15LXN3aXBlclwiXHJcbiAgICBzbGlkZXMtcGVyLXZpZXc9XCIxXCJcclxuICAgIHBhZ2luYXRpb249XCJ0cnVlXCJcclxuICAgIHBhZ2luYXRpb24tY2xpY2thYmxlPVwidHJ1ZVwiXHJcbiAgICBzcGVlZD1cIjUwMFwiXHJcbiAgICBbbG9vcF09XCJzbGlkZXMubGVuZ3RoID4gMVwiXHJcbiAgICBhdXRvcGxheT1cInRydWVcIlxyXG4gICAgYXV0b3BsYXktZGVsYXk9XCIxNTAwMFwiXHJcbiAgICBjc3MtbW9kZT1cInRydWVcIj5cclxuICAgIDxzd2lwZXItc2xpZGUgKm5nRm9yPVwibGV0IHNsaWRlIG9mIHNsaWRlc1wiPlxyXG4gICAgICA8ZGl2IFtpZF09XCJzbGlkZS5pZFwiIGNsYXNzPVwic2xpZGVXcmFwcGVyXCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyAnL3VwbG9hZHMvYmFubmVyLycgKyBzbGlkZS5pbWFnZVBhdGhcIiBbYWx0XT1cInNsaWRlLm5hbWVcIiA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNtLXNsaWRlcl9fYnRuXCIgXHJcbiAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogaG92ZXJlZFNsaWRlSWQgPT09IHNsaWRlLmlkID8gKHRoZW1lPy5iYWNrZ3JvdW5kIHx8ICcjMjYyNjI2JykgOiAodGhlbWU/LmJ1dHRvbkJhY2tncm91bmRDb2xvciB8fCAnJyksXHJcbiAgICAgICAgICAgICAgICdjb2xvcic6IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyNmZmYnLFxyXG4gICAgICAgICAgICAgICAnYm9yZGVyJzogdGhlbWU/LmJvcmRlciB8fCAnbm9uZSdcclxuICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZFNsaWRlSWQgPSBzbGlkZS5pZFwiXHJcbiAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkU2xpZGVJZCA9IG51bGxcIlxyXG4gICAgICAgICAgICAgKGNsaWNrKT1cImdldFJvdXRlckxpbmtGcm9tQnV0dG9uKHNsaWRlLmJ1dHRvbilcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwic2xpZGUuYnV0dG9uIHx8ICcnXCIgPiA8L3NwYW4+XHJcbiAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc3dpcGVyLXNsaWRlPlxyXG4gIDwvc3dpcGVyLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==
|