libey-ng-component-library 0.0.30 → 0.0.32

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.
@@ -24,6 +24,8 @@ export class LibeyNgCpmIndicatorComponent {
24
24
  this.cpmChange = new EventEmitter();
25
25
  /** Emite true cuando la proyección supera el límite. */
26
26
  this.limitExceeded = new EventEmitter();
27
+ this.colorChange = new EventEmitter();
28
+ this.scale = 1;
27
29
  // ── Propiedades del template ──
28
30
  this.baseAmount = 0;
29
31
  this.projectedAmount = 0;
@@ -112,6 +114,12 @@ export class LibeyNgCpmIndicatorComponent {
112
114
  this.limitTextPos = this.polar(this.ANGLE_END, this.R + 20);
113
115
  this.excess = Math.max(0, this.totalAmount - this.limit);
114
116
  this.limitExceeded.emit(this.excess > this.EXCESS_TOLERANCE);
117
+ this.colorChange.emit({
118
+ darkColor: this.activeColors.dark,
119
+ lightColor: this.activeColors.light,
120
+ grayColor: '#E8EAEF',
121
+ limitReached: this.totalAmount >= this.limit,
122
+ });
115
123
  }
116
124
  emitSummary() {
117
125
  this.cpmChange.emit({
@@ -150,7 +158,7 @@ export class LibeyNgCpmIndicatorComponent {
150
158
  }
151
159
  }
152
160
  LibeyNgCpmIndicatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LibeyNgCpmIndicatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
153
- LibeyNgCpmIndicatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: LibeyNgCpmIndicatorComponent, selector: "lib-libey-ng-cpm-indicator", inputs: { limit: "limit", items: "items", currency: "currency", thresholds: "thresholds", mode: "mode", devMode: "devMode" }, outputs: { cpmChange: "cpmChange", limitExceeded: "limitExceeded" }, viewQueries: [{ propertyName: "cpmLegend", first: true, predicate: ["cpmLegend"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- Modo CPM: solo el gauge con \"CPM\" en el centro -->\r\n<ng-container *ngIf=\"mode === CpmIndicatorMode.Cpm\">\r\n <div class=\"gauge-wrap\">\r\n <svg class=\"gauge-svg\" viewBox=\"0 0 220 130\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <defs>\r\n <filter id=\"dotShadowCpm\" x=\"-60%\" y=\"-60%\" width=\"220%\" height=\"220%\">\r\n <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"2\" flood-color=\"rgba(0,0,0,0.22)\"/>\r\n </filter>\r\n </defs>\r\n\r\n <path [attr.d]=\"trackArcPath\" fill=\"none\" stroke=\"#e8ecf5\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <!-- Proyecci\u00F3n debajo, real encima -->\r\n <path\r\n [style.display]=\"totalAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"totalArcPath\"\r\n [attr.stroke]=\"activeColors.light\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <path\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"baseArcPath\"\r\n [attr.stroke]=\"activeColors.dark\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <circle\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.cx]=\"dotBasePos.x\" [attr.cy]=\"dotBasePos.y\"\r\n r=\"7\" [attr.fill]=\"activeColors.dark\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowCpm)\"/>\r\n\r\n <!-- Solo visible si la proyecci\u00F3n va por delante del real -->\r\n <circle\r\n [style.display]=\"dotTotalVisible ? '' : 'none'\"\r\n [attr.cx]=\"dotTotalPos.x\" [attr.cy]=\"dotTotalPos.y\"\r\n r=\"6\" [attr.fill]=\"activeColors.light\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowCpm)\"/>\r\n </svg>\r\n\r\n <div class=\"gauge-center gauge-center--cpm\">\r\n <div class=\"main-value\">CPM</div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n\r\n<!-- Modo Gauge: gauge completo con montos, leyenda y alerta -->\r\n<ng-container *ngIf=\"mode === CpmIndicatorMode.Gauge\">\r\n <div class=\"gauge-wrap\">\r\n <svg class=\"gauge-svg\" viewBox=\"0 0 220 130\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <defs>\r\n <filter id=\"dotShadowGauge\" x=\"-60%\" y=\"-60%\" width=\"220%\" height=\"220%\">\r\n <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"2\" flood-color=\"rgba(0,0,0,0.22)\"/>\r\n </filter>\r\n </defs>\r\n\r\n <path [attr.d]=\"trackArcPath\" fill=\"none\" stroke=\"#e8ecf5\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <!-- Proyecci\u00F3n debajo, real encima -->\r\n <path\r\n [style.display]=\"totalAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"totalArcPath\"\r\n [attr.stroke]=\"activeColors.light\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <path\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"baseArcPath\"\r\n [attr.stroke]=\"activeColors.dark\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <circle\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.cx]=\"dotBasePos.x\" [attr.cy]=\"dotBasePos.y\"\r\n r=\"7\" [attr.fill]=\"activeColors.dark\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowGauge)\"/>\r\n\r\n <circle\r\n [style.display]=\"dotTotalVisible ? '' : 'none'\"\r\n [attr.cx]=\"dotTotalPos.x\" [attr.cy]=\"dotTotalPos.y\"\r\n r=\"6\" [attr.fill]=\"activeColors.light\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowGauge)\"/>\r\n\r\n <!-- <text\r\n [attr.x]=\"limitTextPos.x\" [attr.y]=\"limitTextPos.y\"\r\n font-family=\"DM Mono,monospace\" font-size=\"9\" font-weight=\"600\"\r\n fill=\"#8a8fa8\" text-anchor=\"middle\">\r\n {{ currency }}{{ limit }}\r\n </text> -->\r\n </svg>\r\n\r\n <!-- El color del monto cambia a rojo si supera el l\u00EDmite -->\r\n <div class=\"gauge-center gauge-center--gauge\">\r\n <div class=\"main-value\" [style.color]=\"totalAmount > limit ? activeColors.dark : '#1a1a2e'\">\r\n CPM <br>\r\n {{ currency }}{{ totalAmount | number:'1.2-2' }}\r\n </div>\r\n <div class=\"limit-label\">de {{ currency }}{{ limit | number:'1.2-2' }}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"legend\">\r\n <div class=\"legend-item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.dark\"></span>\r\n Real\r\n </div>\r\n <div class=\"legend-item\">\r\n <span class=\"dot\"\r\n [style.background]=\"activeColors.light\"\r\n [style.border]=\"'1.5px solid ' + activeColors.dark\">\r\n </span>\r\n Proyecci\u00F3n\r\n </div>\r\n <div class=\"legend-item\">\r\n <span class=\"dot\" style=\"background:#e8ecf5; border:1px solid #ccc\"></span>\r\n Disponible\r\n </div>\r\n </div>\r\n\r\n <!-- Sliders de prueba \u2014 solo en devMode -->\r\n <ng-container *ngIf=\"devMode\">\r\n <div class=\"divider\"></div>\r\n <div class=\"dev-badge\">Dev Mode</div>\r\n <div class=\"controls\">\r\n\r\n <div class=\"ctrl-row\">\r\n <div class=\"ctrl-header\">\r\n <span class=\"ctrl-label\">\r\n <span class=\"ctrl-label-dot\" [style.background]=\"activeColors.dark\"></span>\r\n Gasto real (consumido)\r\n </span>\r\n <span class=\"ctrl-val\" [style.color]=\"activeColors.dark\">\r\n {{ currency }}{{ sliderBase | number:'1.2-2' }}\r\n </span>\r\n </div>\r\n <div class=\"zones-bar\">\r\n <div style=\"background:#16a34a\"></div>\r\n <div style=\"background:#ca8a04\"></div>\r\n <div style=\"background:#ea580c\"></div>\r\n <div style=\"background:#dc2626\"></div>\r\n </div>\r\n <input type=\"range\" [min]=\"0\" [max]=\"sliderMax\" step=\"0.5\"\r\n [value]=\"sliderBase\" (input)=\"onDevBaseChange($event)\">\r\n </div>\r\n\r\n <div class=\"ctrl-row\">\r\n <div class=\"ctrl-header\">\r\n <span class=\"ctrl-label\">\r\n <span class=\"ctrl-label-dot\"\r\n [style.background]=\"activeColors.light\"\r\n [style.border]=\"'1px solid ' + activeColors.dark\"\r\n style=\"border-radius:50%\">\r\n </span>\r\n Proyecci\u00F3n (presupuesto)\r\n </span>\r\n <span class=\"ctrl-val\" [style.color]=\"activeColors.dark\">\r\n {{ currency }}{{ sliderProjected | number:'1.2-2' }}\r\n </span>\r\n </div>\r\n <div class=\"zones-bar\">\r\n <div style=\"background:#16a34a\"></div>\r\n <div style=\"background:#ca8a04\"></div>\r\n <div style=\"background:#ea580c\"></div>\r\n <div style=\"background:#dc2626\"></div>\r\n </div>\r\n <input type=\"range\" [min]=\"0\" [max]=\"sliderMax\" step=\"0.5\"\r\n [value]=\"sliderProjected\" (input)=\"onDevProjectedChange($event)\">\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #cpmLegend>\r\n <div class=\"legend-tooltip\">\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.dark\"></span>\r\n Real<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ baseAmount | number:'1.2-2' }}</span>\r\n </div>\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.light\"></span>\r\n Proyecci\u00F3n<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ projectedAmount | number:'1.2-2' }}</span>\r\n </div>\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" style=\"background:#e8ecf5\"></span>\r\n Disponible<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ (limit - totalAmount) | number:'1.2-2' }}</span>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [":host{display:inline-flex;flex-direction:column;align-items:center;font-family:\"DM Sans\",sans-serif}.card{background:#ffffff;border-radius:20px;padding:36px 40px 28px;width:340px;box-shadow:0 4px 32px #0000001a,0 1px 4px #0000000f;display:flex;flex-direction:column;align-items:center}.gauge-wrap{position:relative;width:220px;height:120px;overflow:visible}.gauge-svg{width:220px;height:135px;overflow:visible}.gauge-center{position:absolute;left:50%;transform:translate(-50%);text-align:center;pointer-events:none;white-space:nowrap}.gauge-center--cpm{bottom:15px}.gauge-center--gauge{bottom:-10px}.main-value{font-size:26px;font-weight:700;font-family:\"DM Mono\",monospace;letter-spacing:-.5px;color:#1a1a2e;line-height:1;transition:color .3s ease}.limit-label{font-size:12px;color:#8a8fa8;font-weight:400;margin-top:3px;font-family:\"DM Mono\",monospace}.legend{display:flex;grid-gap:14px;gap:14px;margin-top:22px;margin-bottom:6px;flex-wrap:wrap;justify-content:center}.legend-item{display:flex;align-items:center;grid-gap:6px;gap:6px;font-size:12px;color:#555;font-weight:500}.dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.divider{width:100%;height:1px;background:#f0f2f5;margin:14px 0 4px}.dev-badge{font-size:11px;font-weight:700;color:#7c3aed;background:#ede9fe;border-radius:6px;padding:3px 10px;margin-bottom:8px;letter-spacing:.3px}.controls{width:100%;display:flex;flex-direction:column;grid-gap:16px;gap:16px}.ctrl-row{display:flex;flex-direction:column;grid-gap:5px;gap:5px}.ctrl-header{display:flex;justify-content:space-between;align-items:center}.ctrl-label{font-size:12px;color:#8a8fa8;font-weight:500;display:flex;align-items:center;grid-gap:5px;gap:5px}.ctrl-label-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.ctrl-val{font-size:12px;font-family:\"DM Mono\",monospace;font-weight:600;color:#1a1a2e}.zones-bar{display:flex;border-radius:4px;overflow:hidden;height:3px;width:100%;margin-bottom:3px}.zones-bar div{flex:1}input[type=range]{appearance:none;width:100%;height:5px;border-radius:99px;background:#e2e6ef;outline:none;cursor:pointer}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:#16a34a;border:2.5px solid #fff;box-shadow:0 1px 8px #0003;cursor:grab;-webkit-transition:background .3s,transform .15s;transition:background .3s,transform .15s}input[type=range]::-webkit-slider-thumb:active{transform:scale(1.2);cursor:grabbing}input[type=range]::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:#16a34a;border:2.5px solid #fff;cursor:grab}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "number": i1.DecimalPipe } });
161
+ LibeyNgCpmIndicatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: LibeyNgCpmIndicatorComponent, selector: "lib-libey-ng-cpm-indicator", inputs: { limit: "limit", items: "items", currency: "currency", thresholds: "thresholds", mode: "mode", devMode: "devMode", scale: "scale" }, outputs: { cpmChange: "cpmChange", limitExceeded: "limitExceeded", colorChange: "colorChange" }, viewQueries: [{ propertyName: "cpmLegend", first: true, predicate: ["cpmLegend"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- Modo CPM: solo el gauge con \"CPM\" en el centro -->\r\n<ng-container *ngIf=\"mode === CpmIndicatorMode.Cpm\">\r\n <div class=\"gauge-wrap\" [style.width.px]=\"220 * scale\" [style.height.px]=\"120 * scale\">\r\n <svg class=\"gauge-svg\" viewBox=\"0 0 220 130\" xmlns=\"http://www.w3.org/2000/svg\"\r\n [style.width.px]=\"220 * scale\"\r\n [style.height.px]=\"135 * scale\">\r\n <defs>\r\n <filter id=\"dotShadowCpm\" x=\"-60%\" y=\"-60%\" width=\"220%\" height=\"220%\">\r\n <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"2\" flood-color=\"rgba(0,0,0,0.22)\"/>\r\n </filter>\r\n </defs>\r\n\r\n <path [attr.d]=\"trackArcPath\" fill=\"none\" stroke=\"#E8EAEF\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <!-- Proyecci\u00F3n debajo, real encima -->\r\n <path\r\n [style.display]=\"totalAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"totalArcPath\"\r\n [attr.stroke]=\"activeColors.light\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <path\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"baseArcPath\"\r\n [attr.stroke]=\"activeColors.dark\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <circle\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.cx]=\"dotBasePos.x\" [attr.cy]=\"dotBasePos.y\"\r\n r=\"7\" [attr.fill]=\"activeColors.dark\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowCpm)\"/>\r\n\r\n <!-- Solo visible si la proyecci\u00F3n va por delante del real -->\r\n <circle\r\n [style.display]=\"dotTotalVisible ? '' : 'none'\"\r\n [attr.cx]=\"dotTotalPos.x\" [attr.cy]=\"dotTotalPos.y\"\r\n r=\"6\" [attr.fill]=\"activeColors.light\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowCpm)\"/>\r\n </svg>\r\n\r\n <div class=\"gauge-center gauge-center--cpm\" [style.bottom.px]=\"15 * scale\">\r\n <div class=\"main-value\" [style.font-size.px]=\"26 * scale\">CPM</div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n\r\n<!-- Modo Gauge: gauge completo con montos, leyenda y alerta -->\r\n<ng-container *ngIf=\"mode === CpmIndicatorMode.Gauge\">\r\n <div class=\"gauge-wrap\" [style.width.px]=\"220 * scale\" [style.height.px]=\"120 * scale\">\r\n <svg class=\"gauge-svg\" viewBox=\"0 0 220 130\" xmlns=\"http://www.w3.org/2000/svg\"\r\n [style.width.px]=\"220 * scale\"\r\n [style.height.px]=\"135 * scale\">\r\n <defs>\r\n <filter id=\"dotShadowGauge\" x=\"-60%\" y=\"-60%\" width=\"220%\" height=\"220%\">\r\n <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"2\" flood-color=\"rgba(0,0,0,0.22)\"/>\r\n </filter>\r\n </defs>\r\n\r\n <path [attr.d]=\"trackArcPath\" fill=\"none\" stroke=\"#E8EAEF\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <!-- Proyecci\u00F3n debajo, real encima -->\r\n <path\r\n [style.display]=\"totalAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"totalArcPath\"\r\n [attr.stroke]=\"activeColors.light\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <path\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"baseArcPath\"\r\n [attr.stroke]=\"activeColors.dark\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <circle\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.cx]=\"dotBasePos.x\" [attr.cy]=\"dotBasePos.y\"\r\n r=\"7\" [attr.fill]=\"activeColors.dark\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowGauge)\"/>\r\n\r\n <circle\r\n [style.display]=\"dotTotalVisible ? '' : 'none'\"\r\n [attr.cx]=\"dotTotalPos.x\" [attr.cy]=\"dotTotalPos.y\"\r\n r=\"6\" [attr.fill]=\"activeColors.light\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowGauge)\"/>\r\n\r\n <!-- <text\r\n [attr.x]=\"limitTextPos.x\" [attr.y]=\"limitTextPos.y\"\r\n font-family=\"DM Mono,monospace\" font-size=\"9\" font-weight=\"600\"\r\n fill=\"#8a8fa8\" text-anchor=\"middle\">\r\n {{ currency }}{{ limit }}\r\n </text> -->\r\n </svg>\r\n\r\n <!-- El color del monto cambia a rojo si supera el l\u00EDmite -->\r\n <div class=\"gauge-center gauge-center--gauge\" [style.bottom.px]=\"-10 * scale\">\r\n <div class=\"main-value\"\r\n [style.font-size.px]=\"26 * scale\"\r\n [style.color]=\"totalAmount > limit ? activeColors.dark : '#1a1a2e'\">\r\n CPM<br>\r\n {{ currency }}{{ totalAmount | number:'1.2-2' }}\r\n </div>\r\n <div class=\"limit-label\" [style.font-size.px]=\"16 * scale\">\r\n de {{ currency }}{{ limit | number:'1.2-2' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"legend\">\r\n <div class=\"legend-item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.dark\"></span>\r\n Real\r\n </div>\r\n <div class=\"legend-item\">\r\n <span class=\"dot\"\r\n [style.background]=\"activeColors.light\"\r\n [style.border]=\"'1.5px solid ' + activeColors.dark\">\r\n </span>\r\n Proyecci\u00F3n\r\n </div>\r\n <div class=\"legend-item\">\r\n <span class=\"dot\" style=\"background:#e8ecf5; border:1px solid #ccc\"></span>\r\n Disponible\r\n </div>\r\n </div>\r\n\r\n <!-- Sliders de prueba \u2014 solo en devMode -->\r\n <ng-container *ngIf=\"devMode\">\r\n <div class=\"divider\"></div>\r\n <div class=\"dev-badge\">Dev Mode</div>\r\n <div class=\"controls\">\r\n\r\n <div class=\"ctrl-row\">\r\n <div class=\"ctrl-header\">\r\n <span class=\"ctrl-label\">\r\n <span class=\"ctrl-label-dot\" [style.background]=\"activeColors.dark\"></span>\r\n Gasto real (consumido)\r\n </span>\r\n <span class=\"ctrl-val\" [style.color]=\"activeColors.dark\">\r\n {{ currency }}{{ sliderBase | number:'1.2-2' }}\r\n </span>\r\n </div>\r\n <div class=\"zones-bar\">\r\n <div style=\"background:#16a34a\"></div>\r\n <div style=\"background:#ca8a04\"></div>\r\n <div style=\"background:#ea580c\"></div>\r\n <div style=\"background:#dc2626\"></div>\r\n </div>\r\n <input type=\"range\" [min]=\"0\" [max]=\"sliderMax\" step=\"0.5\"\r\n [value]=\"sliderBase\" (input)=\"onDevBaseChange($event)\">\r\n </div>\r\n\r\n <div class=\"ctrl-row\">\r\n <div class=\"ctrl-header\">\r\n <span class=\"ctrl-label\">\r\n <span class=\"ctrl-label-dot\"\r\n [style.background]=\"activeColors.light\"\r\n [style.border]=\"'1px solid ' + activeColors.dark\"\r\n style=\"border-radius:50%\">\r\n </span>\r\n Proyecci\u00F3n (presupuesto)\r\n </span>\r\n <span class=\"ctrl-val\" [style.color]=\"activeColors.dark\">\r\n {{ currency }}{{ sliderProjected | number:'1.2-2' }}\r\n </span>\r\n </div>\r\n <div class=\"zones-bar\">\r\n <div style=\"background:#16a34a\"></div>\r\n <div style=\"background:#ca8a04\"></div>\r\n <div style=\"background:#ea580c\"></div>\r\n <div style=\"background:#dc2626\"></div>\r\n </div>\r\n <input type=\"range\" [min]=\"0\" [max]=\"sliderMax\" step=\"0.5\"\r\n [value]=\"sliderProjected\" (input)=\"onDevProjectedChange($event)\">\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #cpmLegend>\r\n <div class=\"legend-tooltip\">\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.dark\"></span>\r\n Real<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ baseAmount | number:'1.2-2' }}</span>\r\n </div>\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.light\"></span>\r\n Proyecci\u00F3n<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ projectedAmount | number:'1.2-2' }}</span>\r\n </div>\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" style=\"background:#e8ecf5\"></span>\r\n Disponible<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ (limit - totalAmount) | number:'1.2-2' }}</span>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [":host{display:inline-flex;flex-direction:column;align-items:center;font-family:\"DM Sans\",sans-serif}.card{background:#ffffff;border-radius:20px;padding:36px 40px 28px;width:340px;box-shadow:0 4px 32px #0000001a,0 1px 4px #0000000f;display:flex;flex-direction:column;align-items:center}.gauge-wrap{position:relative;overflow:visible}.gauge-svg{overflow:visible}.gauge-center{position:absolute;left:50%;transform:translate(-50%);text-align:center;pointer-events:none;white-space:nowrap}.gauge-center--cpm{bottom:15px}.gauge-center--gauge{bottom:-10px}.main-value{font-size:26px;font-weight:700;font-family:\"DM Mono\",monospace;letter-spacing:-.5px;color:#1a1a2e;line-height:1;transition:color .3s ease}.limit-label{font-size:12px;color:#8a8fa8;font-weight:400;margin-top:3px;font-family:\"DM Mono\",monospace}.legend{display:flex;grid-gap:14px;gap:14px;margin-top:22px;margin-bottom:6px;flex-wrap:wrap;justify-content:center}.legend-item{display:flex;align-items:center;grid-gap:6px;gap:6px;font-size:12px;color:#555;font-weight:500}.dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.divider{width:100%;height:1px;background:#f0f2f5;margin:14px 0 4px}.dev-badge{font-size:11px;font-weight:700;color:#7c3aed;background:#ede9fe;border-radius:6px;padding:3px 10px;margin-bottom:8px;letter-spacing:.3px}.controls{width:100%;display:flex;flex-direction:column;grid-gap:16px;gap:16px}.ctrl-row{display:flex;flex-direction:column;grid-gap:5px;gap:5px}.ctrl-header{display:flex;justify-content:space-between;align-items:center}.ctrl-label{font-size:12px;color:#8a8fa8;font-weight:500;display:flex;align-items:center;grid-gap:5px;gap:5px}.ctrl-label-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.ctrl-val{font-size:12px;font-family:\"DM Mono\",monospace;font-weight:600;color:#1a1a2e}.zones-bar{display:flex;border-radius:4px;overflow:hidden;height:3px;width:100%;margin-bottom:3px}.zones-bar div{flex:1}input[type=range]{appearance:none;width:100%;height:5px;border-radius:99px;background:#e2e6ef;outline:none;cursor:pointer}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:#16a34a;border:2.5px solid #fff;box-shadow:0 1px 8px #0003;cursor:grab;-webkit-transition:background .3s,transform .15s;transition:background .3s,transform .15s}input[type=range]::-webkit-slider-thumb:active{transform:scale(1.2);cursor:grabbing}input[type=range]::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:#16a34a;border:2.5px solid #fff;cursor:grab}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "number": i1.DecimalPipe } });
154
162
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LibeyNgCpmIndicatorComponent, decorators: [{
155
163
  type: Component,
156
164
  args: [{
@@ -177,5 +185,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
177
185
  }], cpmLegend: [{
178
186
  type: ViewChild,
179
187
  args: ['cpmLegend']
188
+ }], colorChange: [{
189
+ type: Output
190
+ }], scale: [{
191
+ type: Input
180
192
  }] } });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliZXktbmctY3BtLWluZGljYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJleS1uZy1jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2NwbS1pbmRpY2F0b3IvbGliZXktbmctY3BtLWluZGljYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJleS1uZy1jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2NwbS1pbmRpY2F0b3IvbGliZXktbmctY3BtLWluZGljYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGdCQUFnQixFQUFDLFdBQVcsRUFBcUQsa0JBQWtCLEVBQUMsV0FBVyxHQUFFLE1BQU0sOENBQThDLENBQUM7OztBQU8vSyxNQUFNLE9BQU8sNEJBQTRCO0lBcUV2QztRQW5FQSxnQ0FBZ0M7UUFDdkIsVUFBSyxHQUFXLEdBQUcsQ0FBQztRQUU3Qjs7Ozs7V0FLRztRQUNNLFVBQUssR0FBYyxFQUFFLENBQUM7UUFFL0IseURBQXlEO1FBQ2hELGFBQVEsR0FBVyxJQUFJLENBQUM7UUFLakMsMEVBQTBFO1FBQ2pFLFNBQUksR0FBcUIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO1FBRXZELDJFQUEyRTtRQUNsRSxZQUFPLEdBQVksS0FBSyxDQUFDO1FBRWxDLGdCQUFnQjtRQUNoQiwrRUFBK0U7UUFDckUsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFckQsd0RBQXdEO1FBQzlDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUl0RCxpQ0FBaUM7UUFDakMsZUFBVSxHQUFnQixDQUFDLENBQUM7UUFDNUIsb0JBQWUsR0FB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QUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN4RixDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWEsRUFBRSxDQUFnQjtRQUNuRCxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMvQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUTtZQUFFLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRO1lBQUUsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVE7WUFBRSxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDOzswSEF0TFUsNEJBQTRCOzhHQUE1Qiw0QkFBNEIsa1lDUnpDLGkvUEFnTWM7NEZEeExELDRCQUE0QjtrQkFMeEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUseUNBQXlDO29CQUN0RCxTQUFTLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztpQkFDdEQ7MEVBSVUsS0FBSztzQkFBYixLQUFLO2dCQVFHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFJSSxTQUFTO3NCQUFsQixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDcG1JbmRpY2F0b3JNb2RlLENwbUl0ZW1UeXBlLENwbUl0ZW0sQ3BtVGhyZXNob2xkcyxDcG1TdW1tYXJ5LFpvbmVDb2xvcixTdmdQb2ludCxERUZBVUxUX1RIUkVTSE9MRFMsWk9ORV9DT0xPUlMsfSBmcm9tICcuLi8uLi91dGlscy9DcG1JbmRpY2F0b3IvY3BtLWluZGljYXRvci10eXBlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1saWJleS1uZy1jcG0taW5kaWNhdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGliZXktbmctY3BtLWluZGljYXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGliZXktbmctY3BtLWluZGljYXRvci5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpYmV5TmdDcG1JbmRpY2F0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8qKiBUb3BlIG3DoXhpbW8gZGVsIGNvbnRyYXRvLiAqL1xyXG4gIEBJbnB1dCgpIGxpbWl0OiBudW1iZXIgPSAyNTA7XHJcblxyXG4gIC8qKlxyXG4gICAqIMONdGVtcyBkZSBnYXN0by4gRWwgcGFkcmUgZXMgcmVzcG9uc2FibGUgZGU6XHJcbiAgICogLSBFeGNsdWlyIMOtdGVtcyBxdWUgbm8gYXBsaWNhbiBhbCBDUE1cclxuICAgKiAtIE1hcmNhciBjYWRhIHVubyBjb24gQ3BtSXRlbVR5cGUuQmFzZSBvIENwbUl0ZW1UeXBlLlByb2plY3RlZFxyXG4gICAqIC0gQWN0dWFsaXphciBlbCBhcnJheSBhbCBhZ3JlZ2FyIG8gZWxpbWluYXJcclxuICAgKi9cclxuICBASW5wdXQoKSBpdGVtczogQ3BtSXRlbVtdID0gW107XHJcblxyXG4gIC8qKiBTw61tYm9sbyBkZSBtb25lZGEuIFBvciBkZWZlY3RvICdzLycgKHNvbCBwZXJ1YW5vKS4gKi9cclxuICBASW5wdXQoKSBjdXJyZW5jeTogc3RyaW5nID0gJ3MvJztcclxuXHJcbiAgLyoqIFVtYnJhbGVzIGRlIHpvbmFzIGNvbW8gcG9yY2VudGFqZSBkZWwgbMOtbWl0ZSAoMC4wIOKGkiAxLjApLiBVc2EgdGVyY2lvcyBzaSBubyBzZSBwcm9wb3JjaW9uYS4gKi9cclxuICBASW5wdXQoKSB0aHJlc2hvbGRzPzogQ3BtVGhyZXNob2xkcztcclxuXHJcbiAgLyoqIE1vZG8gZGUgdmlzdWFsaXphY2nDs246IENQTSAoc29sbyBnYXVnZSkgbyBHYXVnZSAobW9udG9zICsgbGV5ZW5kYSkuICovXHJcbiAgQElucHV0KCkgbW9kZTogQ3BtSW5kaWNhdG9yTW9kZSA9IENwbUluZGljYXRvck1vZGUuQ3BtO1xyXG5cclxuICAvKiogQWN0aXZhIHNsaWRlcnMgZGUgcHJ1ZWJhLiBTb2xvIHBhcmEgZGVzYXJyb2xsbywgbnVuY2EgZW4gcHJvZHVjY2nDs24uICovXHJcbiAgQElucHV0KCkgZGV2TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDilIDilIAgT3V0cHV0cyDilIDilIBcclxuICAvKiogRW1pdGUgZWwgcmVzdW1lbiBkZSBtb250b3MgZW4gY2FkYSByZWNhbGN1bG8uIFVzYXIgcGFyYSBwZXJzaXN0aXIgZW4gQkQuICovXHJcbiAgQE91dHB1dCgpIGNwbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q3BtU3VtbWFyeT4oKTtcclxuXHJcbiAgLyoqIEVtaXRlIHRydWUgY3VhbmRvIGxhIHByb3llY2Npw7NuIHN1cGVyYSBlbCBsw61taXRlLiAqL1xyXG4gIEBPdXRwdXQoKSBsaW1pdEV4Y2VlZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjcG1MZWdlbmQnKSBjcG1MZWdlbmQhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvLyDilIDilIAgUHJvcGllZGFkZXMgZGVsIHRlbXBsYXRlIOKUgOKUgFxyXG4gIGJhc2VBbW91bnQ6IG51bWJlciAgICAgID0gMDtcclxuICBwcm9qZWN0ZWRBbW91bnQ6IG51bWJlciA9IDA7XHJcbiAgdG90YWxBbW91bnQ6IG51bWJlciAgICAgPSAwO1xyXG4gIGV4Y2VzczogbnVtYmVyICAgICAgICAgID0gMDtcclxuICBhY3RpdmVDb2xvcnM6IFpvbmVDb2xvciA9IFpPTkVfQ09MT1JTWyd6b25lMSddO1xyXG5cclxuICB0cmFja0FyY1BhdGg6IHN0cmluZyAgICAgPSAnJztcclxuICBiYXNlQXJjUGF0aDogc3RyaW5nICAgICAgPSAnJztcclxuICB0b3RhbEFyY1BhdGg6IHN0cmluZyAgICAgPSAnJztcclxuICBkb3RCYXNlUG9zOiBTdmdQb2ludCAgICAgPSB7IHg6IDAsIHk6IDAgfTtcclxuICBkb3RUb3RhbFBvczogU3ZnUG9pbnQgICAgPSB7IHg6IDAsIHk6IDAgfTtcclxuICBkb3RUb3RhbFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsaW1pdFRleHRQb3M6IFN2Z1BvaW50ICAgPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcbiAgLy8g4pSA4pSAIGRldk1vZGUg4pSA4pSAXHJcbiAgc2xpZGVyQmFzZTogbnVtYmVyICAgICAgPSAwO1xyXG4gIHNsaWRlclByb2plY3RlZDogbnVtYmVyID0gMDtcclxuXHJcbiAgZ2V0IHNsaWRlck1heCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMubGltaXQgKiAxLjU7XHJcbiAgfVxyXG5cclxuICAvLyBOZWNlc2FyaW8gcGFyYSB1c2FyIGVsIGVudW0gZW4gZWwgdGVtcGxhdGVcclxuICByZWFkb25seSBDcG1JbmRpY2F0b3JNb2RlID0gQ3BtSW5kaWNhdG9yTW9kZTtcclxuXHJcbiAgLy8gR2VvbWV0csOtYSBkZWwgU1ZHIChjb29yZGVuYWRhcyBpbnRlcm5hcyBkZWwgdmlld0JveCAyMjB4MTMwKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQ1ggICAgICAgICAgPSAxMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBDWSAgICAgICAgICA9IDExNTtcclxuICBwcml2YXRlIHJlYWRvbmx5IFIgICAgICAgICAgID0gOTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBBTkdMRV9TVEFSVCA9IE1hdGguUEk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBBTkdMRV9FTkQgICA9IDA7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgRVhDRVNTX1RPTEVSQU5DRSA9IDAuMDA1O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10gfHwgY2hhbmdlc1snbGltaXQnXSB8fCBjaGFuZ2VzWyd0aHJlc2hvbGRzJ10pIHtcclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EZXZCYXNlQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5zbGlkZXJCYXNlID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcclxuICAgIGlmICh0aGlzLnNsaWRlckJhc2UgPiB0aGlzLnNsaWRlclByb2plY3RlZCkge1xyXG4gICAgICB0aGlzLnNsaWRlclByb2plY3RlZCA9IHRoaXMuc2xpZGVyQmFzZTtcclxuICAgIH1cclxuICAgIHRoaXMucmVjYWxjdWxhdGVGcm9tU2xpZGVycygpO1xyXG4gIH1cclxuXHJcbiAgb25EZXZQcm9qZWN0ZWRDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnNsaWRlclByb2plY3RlZCA9IHBhcnNlRmxvYXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5zbGlkZXJQcm9qZWN0ZWQgPCB0aGlzLnNsaWRlckJhc2UpIHtcclxuICAgICAgdGhpcy5zbGlkZXJQcm9qZWN0ZWQgPSB0aGlzLnNsaWRlckJhc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlRnJvbVNsaWRlcnMoKTtcclxuICB9XHJcblxyXG4gIC8vIEZsdWpvIGRlIHByb2R1Y2Npw7NuOiBjYWxjdWxhIGEgcGFydGlyIGRlbCBhcnJheSBkZSBpdGVtc1xyXG4gIHByaXZhdGUgcmVjYWxjdWxhdGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJhc2VBbW91bnQgPSB0aGlzLml0ZW1zXHJcbiAgICAgIC5maWx0ZXIoaSA9PiBpLnR5cGUgPT09IENwbUl0ZW1UeXBlLkJhc2UpXHJcbiAgICAgIC5yZWR1Y2UoKGFjYywgaSkgPT4gYWNjICsgaS5hbW91bnQsIDApO1xyXG5cclxuICAgIHRoaXMucHJvamVjdGVkQW1vdW50ID0gdGhpcy5pdGVtc1xyXG4gICAgICAuZmlsdGVyKGkgPT4gaS50eXBlID09PSBDcG1JdGVtVHlwZS5Qcm9qZWN0ZWQpXHJcbiAgICAgIC5yZWR1Y2UoKGFjYywgaSkgPT4gYWNjICsgaS5hbW91bnQsIDApO1xyXG5cclxuICAgIHRoaXMudG90YWxBbW91bnQgPSB0aGlzLmJhc2VBbW91bnQgKyB0aGlzLnByb2plY3RlZEFtb3VudDtcclxuXHJcbiAgICAvLyBTaW5jcm9uaXphIHNsaWRlcnMgcG9yIHNpIHNlIGFjdGl2YSBkZXZNb2RlXHJcbiAgICB0aGlzLnNsaWRlckJhc2UgICAgICA9IHRoaXMuYmFzZUFtb3VudDtcclxuICAgIHRoaXMuc2xpZGVyUHJvamVjdGVkID0gdGhpcy50b3RhbEFtb3VudDtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUdhdWdlKCk7XHJcbiAgICB0aGlzLmVtaXRTdW1tYXJ5KCk7XHJcbiAgfVxyXG5cclxuICAvLyBGbHVqbyBkZSBkZXZNb2RlOiBjYWxjdWxhIGEgcGFydGlyIGRlIGxvcyBzbGlkZXJzXHJcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUZyb21TbGlkZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5iYXNlQW1vdW50ICAgICAgPSB0aGlzLnNsaWRlckJhc2U7XHJcbiAgICB0aGlzLnByb2plY3RlZEFtb3VudCA9IHRoaXMuc2xpZGVyUHJvamVjdGVkIC0gdGhpcy5zbGlkZXJCYXNlO1xyXG4gICAgdGhpcy50b3RhbEFtb3VudCAgICAgPSB0aGlzLnNsaWRlclByb2plY3RlZDtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUdhdWdlKCk7XHJcbiAgICB0aGlzLmVtaXRTdW1tYXJ5KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUdhdWdlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgdGhyZXNob2xkcyAgPSB0aGlzLnRocmVzaG9sZHMgPz8gREVGQVVMVF9USFJFU0hPTERTO1xyXG4gICAgdGhpcy5hY3RpdmVDb2xvcnMgPSB0aGlzLmdldFpvbmVDb2xvcnModGhpcy50b3RhbEFtb3VudCwgdGhyZXNob2xkcyk7XHJcblxyXG4gICAgdGhpcy50cmFja0FyY1BhdGggPSB0aGlzLmJ1aWxkQXJjUGF0aCh0aGlzLkFOR0xFX1NUQVJULCB0aGlzLkFOR0xFX0VORCk7XHJcbiAgICB0aGlzLnRvdGFsQXJjUGF0aCA9IHRoaXMuYnVpbGRBcmNQYXRoKHRoaXMuQU5HTEVfU1RBUlQsIHRoaXMudmFsdWVUb0FuZ2xlKHRoaXMudG90YWxBbW91bnQpKTtcclxuICAgIHRoaXMuYmFzZUFyY1BhdGggID0gdGhpcy5idWlsZEFyY1BhdGgodGhpcy5BTkdMRV9TVEFSVCwgdGhpcy52YWx1ZVRvQW5nbGUodGhpcy5iYXNlQW1vdW50KSk7XHJcblxyXG4gICAgdGhpcy5kb3RCYXNlUG9zICA9IHRoaXMucG9sYXIodGhpcy52YWx1ZVRvQW5nbGUodGhpcy5iYXNlQW1vdW50KSk7XHJcbiAgICB0aGlzLmRvdFRvdGFsUG9zID0gdGhpcy5wb2xhcih0aGlzLnZhbHVlVG9BbmdsZSh0aGlzLnRvdGFsQW1vdW50KSk7XHJcblxyXG4gICAgLy8gRWwgcHVudG8gZGUgcHJveWVjY2nDs24gc29sbyBhcGFyZWNlIHNpIHZhIGRlbGFudGUgZGVsIHJlYWwgeSBubyBsbGVnw7MgYWwgYm9yZGVcclxuICAgIHRoaXMuZG90VG90YWxWaXNpYmxlID0gdGhpcy50b3RhbEFtb3VudCA+IHRoaXMuYmFzZUFtb3VudCAmJiB0aGlzLnRvdGFsQW1vdW50IDwgdGhpcy5saW1pdDtcclxuXHJcbiAgICB0aGlzLmxpbWl0VGV4dFBvcyA9IHRoaXMucG9sYXIodGhpcy5BTkdMRV9FTkQsIHRoaXMuUiArIDIwKTtcclxuXHJcbiAgICB0aGlzLmV4Y2VzcyA9IE1hdGgubWF4KDAsIHRoaXMudG90YWxBbW91bnQgLSB0aGlzLmxpbWl0KTtcclxuICAgIHRoaXMubGltaXRFeGNlZWRlZC5lbWl0KHRoaXMuZXhjZXNzID4gdGhpcy5FWENFU1NfVE9MRVJBTkNFKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdFN1bW1hcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNwbUNoYW5nZS5lbWl0KHtcclxuICAgICAgYmFzZUFtb3VudDogICAgICB0aGlzLmJhc2VBbW91bnQsXHJcbiAgICAgIHByb2plY3RlZEFtb3VudDogdGhpcy5wcm9qZWN0ZWRBbW91bnQsXHJcbiAgICAgIHRvdGFsQW1vdW50OiAgICAgdGhpcy50b3RhbEFtb3VudCxcclxuICAgICAgbGltaXQ6ICAgICAgICAgICB0aGlzLmxpbWl0LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBDbGFtcGVhIGVsIHZhbG9yIGFsIGzDrW1pdGUgcGFyYSBxdWUgZWwgYXJjbyBubyBkZXNib3JkZSB2aXN1YWxtZW50ZVxyXG4gIHByaXZhdGUgdmFsdWVUb0FuZ2xlKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKHZhbHVlLCB0aGlzLmxpbWl0KTtcclxuICAgIHJldHVybiBNYXRoLlBJIC0gKGNsYW1wZWQgLyB0aGlzLmxpbWl0KSAqIE1hdGguUEk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvbGFyKGFuZ2xlOiBudW1iZXIsIHJhZGl1czogbnVtYmVyID0gdGhpcy5SKTogU3ZnUG9pbnQge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeDogdGhpcy5DWCArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSxcclxuICAgICAgeTogdGhpcy5DWSAtIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQXJjUGF0aChhMTogbnVtYmVyLCBhMjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wb2xhcihhMSk7XHJcbiAgICBjb25zdCBlbmQgICA9IHRoaXMucG9sYXIoYTIpO1xyXG4gICAgY29uc3QgbGFyZ2UgPSAoYTEgLSBhMikgPiBNYXRoLlBJID8gMSA6IDA7XHJcbiAgICByZXR1cm4gYE0gJHtzdGFydC54fSAke3N0YXJ0Lnl9IEEgJHt0aGlzLlJ9ICR7dGhpcy5SfSAwICR7bGFyZ2V9IDEgJHtlbmQueH0gJHtlbmQueX1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRab25lQ29sb3JzKHZhbHVlOiBudW1iZXIsIHQ6IENwbVRocmVzaG9sZHMpOiBab25lQ29sb3Ige1xyXG4gICAgY29uc3QgcGN0ID0gdmFsdWUgLyB0aGlzLmxpbWl0O1xyXG4gICAgaWYgKHBjdCA8IHQuem9uZTFNYXgpIHJldHVybiBaT05FX0NPTE9SU1snem9uZTEnXTtcclxuICAgIGlmIChwY3QgPCB0LnpvbmUyTWF4KSByZXR1cm4gWk9ORV9DT0xPUlNbJ3pvbmUyJ107XHJcbiAgICBpZiAocGN0IDwgdC56b25lM01heCkgcmV0dXJuIFpPTkVfQ09MT1JTWyd6b25lMyddO1xyXG4gICAgcmV0dXJuIFpPTkVfQ09MT1JTWyd6b25lNCddO1xyXG4gIH1cclxufSIsIjwhLS0gTW9kbyBDUE06IHNvbG8gZWwgZ2F1Z2UgY29uIFwiQ1BNXCIgZW4gZWwgY2VudHJvIC0tPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gQ3BtSW5kaWNhdG9yTW9kZS5DcG1cIj5cclxuICA8ZGl2IGNsYXNzPVwiZ2F1Z2Utd3JhcFwiPlxyXG4gICAgPHN2ZyBjbGFzcz1cImdhdWdlLXN2Z1wiIHZpZXdCb3g9XCIwIDAgMjIwIDEzMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgPGRlZnM+XHJcbiAgICAgICAgPGZpbHRlciBpZD1cImRvdFNoYWRvd0NwbVwiIHg9XCItNjAlXCIgeT1cIi02MCVcIiB3aWR0aD1cIjIyMCVcIiBoZWlnaHQ9XCIyMjAlXCI+XHJcbiAgICAgICAgICA8ZmVEcm9wU2hhZG93IGR4PVwiMFwiIGR5PVwiMVwiIHN0ZERldmlhdGlvbj1cIjJcIiBmbG9vZC1jb2xvcj1cInJnYmEoMCwwLDAsMC4yMilcIi8+XHJcbiAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgIDwvZGVmcz5cclxuXHJcbiAgICAgIDxwYXRoIFthdHRyLmRdPVwidHJhY2tBcmNQYXRoXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjZThlY2Y1XCIgc3Ryb2tlLXdpZHRoPVwiMTRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG5cclxuICAgICAgPCEtLSBQcm95ZWNjacOzbiBkZWJham8sIHJlYWwgZW5jaW1hIC0tPlxyXG4gICAgICA8cGF0aFxyXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cInRvdGFsQW1vdW50ID4gMCA/ICcnIDogJ25vbmUnXCJcclxuICAgICAgICBbYXR0ci5kXT1cInRvdGFsQXJjUGF0aFwiXHJcbiAgICAgICAgW2F0dHIuc3Ryb2tlXT1cImFjdGl2ZUNvbG9ycy5saWdodFwiXHJcbiAgICAgICAgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XHJcblxyXG4gICAgICA8cGF0aFxyXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImJhc2VBbW91bnQgPiAwID8gJycgOiAnbm9uZSdcIlxyXG4gICAgICAgIFthdHRyLmRdPVwiYmFzZUFyY1BhdGhcIlxyXG4gICAgICAgIFthdHRyLnN0cm9rZV09XCJhY3RpdmVDb2xvcnMuZGFya1wiXHJcbiAgICAgICAgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XHJcblxyXG4gICAgICA8Y2lyY2xlXHJcbiAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiYmFzZUFtb3VudCA+IDAgPyAnJyA6ICdub25lJ1wiXHJcbiAgICAgICAgW2F0dHIuY3hdPVwiZG90QmFzZVBvcy54XCIgW2F0dHIuY3ldPVwiZG90QmFzZVBvcy55XCJcclxuICAgICAgICByPVwiN1wiIFthdHRyLmZpbGxdPVwiYWN0aXZlQ29sb3JzLmRhcmtcIlxyXG4gICAgICAgIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIyLjVcIlxyXG4gICAgICAgIGZpbHRlcj1cInVybCgjZG90U2hhZG93Q3BtKVwiLz5cclxuXHJcbiAgICAgIDwhLS0gU29sbyB2aXNpYmxlIHNpIGxhIHByb3llY2Npw7NuIHZhIHBvciBkZWxhbnRlIGRlbCByZWFsIC0tPlxyXG4gICAgICA8Y2lyY2xlXHJcbiAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiZG90VG90YWxWaXNpYmxlID8gJycgOiAnbm9uZSdcIlxyXG4gICAgICAgIFthdHRyLmN4XT1cImRvdFRvdGFsUG9zLnhcIiBbYXR0ci5jeV09XCJkb3RUb3RhbFBvcy55XCJcclxuICAgICAgICByPVwiNlwiIFthdHRyLmZpbGxdPVwiYWN0aXZlQ29sb3JzLmxpZ2h0XCJcclxuICAgICAgICBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCJcclxuICAgICAgICBmaWx0ZXI9XCJ1cmwoI2RvdFNoYWRvd0NwbSlcIi8+XHJcbiAgICA8L3N2Zz5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2F1Z2UtY2VudGVyIGdhdWdlLWNlbnRlci0tY3BtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLXZhbHVlXCI+Q1BNPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuPCEtLSBNb2RvIEdhdWdlOiBnYXVnZSBjb21wbGV0byBjb24gbW9udG9zLCBsZXllbmRhIHkgYWxlcnRhIC0tPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gQ3BtSW5kaWNhdG9yTW9kZS5HYXVnZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJnYXVnZS13cmFwXCI+XHJcbiAgICA8c3ZnIGNsYXNzPVwiZ2F1Z2Utc3ZnXCIgdmlld0JveD1cIjAgMCAyMjAgMTMwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICA8ZGVmcz5cclxuICAgICAgICA8ZmlsdGVyIGlkPVwiZG90U2hhZG93R2F1Z2VcIiB4PVwiLTYwJVwiIHk9XCItNjAlXCIgd2lkdGg9XCIyMjAlXCIgaGVpZ2h0PVwiMjIwJVwiPlxyXG4gICAgICAgICAgPGZlRHJvcFNoYWRvdyBkeD1cIjBcIiBkeT1cIjFcIiBzdGREZXZpYXRpb249XCIyXCIgZmxvb2QtY29sb3I9XCJyZ2JhKDAsMCwwLDAuMjIpXCIvPlxyXG4gICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICA8L2RlZnM+XHJcblxyXG4gICAgICA8cGF0aCBbYXR0ci5kXT1cInRyYWNrQXJjUGF0aFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiI2U4ZWNmNVwiIHN0cm9rZS13aWR0aD1cIjE0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cclxuXHJcbiAgICAgIDwhLS0gUHJveWVjY2nDs24gZGViYWpvLCByZWFsIGVuY2ltYSAtLT5cclxuICAgICAgPHBhdGhcclxuICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJ0b3RhbEFtb3VudCA+IDAgPyAnJyA6ICdub25lJ1wiXHJcbiAgICAgICAgW2F0dHIuZF09XCJ0b3RhbEFyY1BhdGhcIlxyXG4gICAgICAgIFthdHRyLnN0cm9rZV09XCJhY3RpdmVDb2xvcnMubGlnaHRcIlxyXG4gICAgICAgIGZpbGw9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMTRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG5cclxuICAgICAgPHBhdGhcclxuICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJiYXNlQW1vdW50ID4gMCA/ICcnIDogJ25vbmUnXCJcclxuICAgICAgICBbYXR0ci5kXT1cImJhc2VBcmNQYXRoXCJcclxuICAgICAgICBbYXR0ci5zdHJva2VdPVwiYWN0aXZlQ29sb3JzLmRhcmtcIlxyXG4gICAgICAgIGZpbGw9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMTRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG5cclxuICAgICAgPGNpcmNsZVxyXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImJhc2VBbW91bnQgPiAwID8gJycgOiAnbm9uZSdcIlxyXG4gICAgICAgIFthdHRyLmN4XT1cImRvdEJhc2VQb3MueFwiIFthdHRyLmN5XT1cImRvdEJhc2VQb3MueVwiXHJcbiAgICAgICAgcj1cIjdcIiBbYXR0ci5maWxsXT1cImFjdGl2ZUNvbG9ycy5kYXJrXCJcclxuICAgICAgICBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCJcclxuICAgICAgICBmaWx0ZXI9XCJ1cmwoI2RvdFNoYWRvd0dhdWdlKVwiLz5cclxuXHJcbiAgICAgIDxjaXJjbGVcclxuICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJkb3RUb3RhbFZpc2libGUgPyAnJyA6ICdub25lJ1wiXHJcbiAgICAgICAgW2F0dHIuY3hdPVwiZG90VG90YWxQb3MueFwiIFthdHRyLmN5XT1cImRvdFRvdGFsUG9zLnlcIlxyXG4gICAgICAgIHI9XCI2XCIgW2F0dHIuZmlsbF09XCJhY3RpdmVDb2xvcnMubGlnaHRcIlxyXG4gICAgICAgIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIyLjVcIlxyXG4gICAgICAgIGZpbHRlcj1cInVybCgjZG90U2hhZG93R2F1Z2UpXCIvPlxyXG5cclxuICAgICAgPCEtLSA8dGV4dFxyXG4gICAgICAgIFthdHRyLnhdPVwibGltaXRUZXh0UG9zLnhcIiBbYXR0ci55XT1cImxpbWl0VGV4dFBvcy55XCJcclxuICAgICAgICBmb250LWZhbWlseT1cIkRNIE1vbm8sbW9ub3NwYWNlXCIgZm9udC1zaXplPVwiOVwiIGZvbnQtd2VpZ2h0PVwiNjAwXCJcclxuICAgICAgICBmaWxsPVwiIzhhOGZhOFwiIHRleHQtYW5jaG9yPVwibWlkZGxlXCI+XHJcbiAgICAgICAge3sgY3VycmVuY3kgfX17eyBsaW1pdCB9fVxyXG4gICAgICA8L3RleHQ+IC0tPlxyXG4gICAgPC9zdmc+XHJcblxyXG4gICAgPCEtLSBFbCBjb2xvciBkZWwgbW9udG8gY2FtYmlhIGEgcm9qbyBzaSBzdXBlcmEgZWwgbMOtbWl0ZSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJnYXVnZS1jZW50ZXIgZ2F1Z2UtY2VudGVyLS1nYXVnZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWFpbi12YWx1ZVwiIFtzdHlsZS5jb2xvcl09XCJ0b3RhbEFtb3VudCA+IGxpbWl0ID8gYWN0aXZlQ29sb3JzLmRhcmsgOiAnIzFhMWEyZSdcIj5cclxuICAgICAgICBDUE0gPGJyPlxyXG4gICAgICAgIHt7IGN1cnJlbmN5IH19e3sgdG90YWxBbW91bnQgfCBudW1iZXI6JzEuMi0yJyB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxpbWl0LWxhYmVsXCI+ZGUge3sgY3VycmVuY3kgfX17eyBsaW1pdCB8IG51bWJlcjonMS4yLTInIH19PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImxlZ2VuZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCIgW3N0eWxlLmJhY2tncm91bmRdPVwiYWN0aXZlQ29sb3JzLmRhcmtcIj48L3NwYW4+XHJcbiAgICAgIFJlYWxcclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiYWN0aXZlQ29sb3JzLmxpZ2h0XCJcclxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCInMS41cHggc29saWQgJyArIGFjdGl2ZUNvbG9ycy5kYXJrXCI+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgUHJveWVjY2nDs25cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiNlOGVjZjU7IGJvcmRlcjoxcHggc29saWQgI2NjY1wiPjwvc3Bhbj5cclxuICAgICAgRGlzcG9uaWJsZVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gU2xpZGVycyBkZSBwcnVlYmEg4oCUIHNvbG8gZW4gZGV2TW9kZSAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGV2TW9kZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkZXYtYmFkZ2VcIj5EZXYgTW9kZTwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xzXCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY3RybC1yb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3RybC1oZWFkZXJcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3RybC1sYWJlbFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN0cmwtbGFiZWwtZG90XCIgW3N0eWxlLmJhY2tncm91bmRdPVwiYWN0aXZlQ29sb3JzLmRhcmtcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIEdhc3RvIHJlYWwgKGNvbnN1bWlkbylcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3RybC12YWxcIiBbc3R5bGUuY29sb3JdPVwiYWN0aXZlQ29sb3JzLmRhcmtcIj5cclxuICAgICAgICAgICAge3sgY3VycmVuY3kgfX17eyBzbGlkZXJCYXNlIHwgbnVtYmVyOicxLjItMicgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiem9uZXMtYmFyXCI+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojMTZhMzRhXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojY2E4YTA0XCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZWE1ODBjXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZGMyNjI2XCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIFttaW5dPVwiMFwiIFttYXhdPVwic2xpZGVyTWF4XCIgc3RlcD1cIjAuNVwiXHJcbiAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzbGlkZXJCYXNlXCIgKGlucHV0KT1cIm9uRGV2QmFzZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImN0cmwtcm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImN0cmwtaGVhZGVyXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImN0cmwtbGFiZWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdHJsLWxhYmVsLWRvdFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImFjdGl2ZUNvbG9ycy5saWdodFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJzFweCBzb2xpZCAnICsgYWN0aXZlQ29sb3JzLmRhcmtcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6NTAlXCI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgUHJveWVjY2nDs24gKHByZXN1cHVlc3RvKVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdHJsLXZhbFwiIFtzdHlsZS5jb2xvcl09XCJhY3RpdmVDb2xvcnMuZGFya1wiPlxyXG4gICAgICAgICAgICB7eyBjdXJyZW5jeSB9fXt7IHNsaWRlclByb2plY3RlZCB8IG51bWJlcjonMS4yLTInIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInpvbmVzLWJhclwiPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6IzE2YTM0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2NhOGEwNFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2VhNTgwY1wiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2RjMjYyNlwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBbbWluXT1cIjBcIiBbbWF4XT1cInNsaWRlck1heFwiIHN0ZXA9XCIwLjVcIlxyXG4gICAgICAgICAgICAgICBbdmFsdWVdPVwic2xpZGVyUHJvamVjdGVkXCIgKGlucHV0KT1cIm9uRGV2UHJvamVjdGVkQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjcG1MZWdlbmQ+XHJcbiAgPGRpdiBjbGFzcz1cImxlZ2VuZC10b29sdGlwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRvb2x0aXBfX2l0ZW1cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJhY3RpdmVDb2xvcnMuZGFya1wiPjwvc3Bhbj5cclxuICAgICAgUmVhbDxzcGFuICpuZ0lmPVwibW9kZSA9PT0gQ3BtSW5kaWNhdG9yTW9kZS5HYXVnZVwiPjoge3sgY3VycmVuY3kgfX17eyBiYXNlQW1vdW50IHwgbnVtYmVyOicxLjItMicgfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdG9vbHRpcF9faXRlbVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImFjdGl2ZUNvbG9ycy5saWdodFwiPjwvc3Bhbj5cclxuICAgICAgUHJveWVjY2nDs248c3BhbiAqbmdJZj1cIm1vZGUgPT09IENwbUluZGljYXRvck1vZGUuR2F1Z2VcIj46IHt7IGN1cnJlbmN5IH19e3sgcHJvamVjdGVkQW1vdW50IHwgbnVtYmVyOicxLjItMicgfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdG9vbHRpcF9faXRlbVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIHN0eWxlPVwiYmFja2dyb3VuZDojZThlY2Y1XCI+PC9zcGFuPlxyXG4gICAgICBEaXNwb25pYmxlPHNwYW4gKm5nSWY9XCJtb2RlID09PSBDcG1JbmRpY2F0b3JNb2RlLkdhdWdlXCI+OiB7eyBjdXJyZW5jeSB9fXt7IChsaW1pdCAtIHRvdGFsQW1vdW50KSB8IG51bWJlcjonMS4yLTInIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliZXktbmctY3BtLWluZGljYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJleS1uZy1jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2NwbS1pbmRpY2F0b3IvbGliZXktbmctY3BtLWluZGljYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJleS1uZy1jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2NwbS1pbmRpY2F0b3IvbGliZXktbmctY3BtLWluZGljYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGdCQUFnQixFQUFDLFdBQVcsRUFBcUQsa0JBQWtCLEVBQUMsV0FBVyxHQUFpQixNQUFNLDhDQUE4QyxDQUFDOzs7QUFPOUwsTUFBTSxPQUFPLDRCQUE0QjtJQXlFdkM7UUF2RUEsZ0NBQWdDO1FBQ3ZCLFVBQUssR0FBVyxHQUFHLENBQUM7UUFFN0I7Ozs7O1dBS0c7UUFDTSxVQUFLLEdBQWMsRUFBRSxDQUFDO1FBRS9CLHlEQUF5RDtRQUNoRCxhQUFRLEdBQVcsSUFBSSxDQUFDO1FBS2pDLDBFQUEwRTtRQUNqRSxTQUFJLEdBQXFCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztRQUV2RCwyRUFBMkU7UUFDbEUsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUVsQyxnQkFBZ0I7UUFDaEIsK0VBQStFO1FBQ3JFLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBRXJELHdEQUF3RDtRQUM5QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFJNUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUVqRCxVQUFLLEdBQVcs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QUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFJSSxTQUFTO3NCQUFsQixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFFWixXQUFXO3NCQUFwQixNQUFNO2dCQUVFLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDcG1JbmRpY2F0b3JNb2RlLENwbUl0ZW1UeXBlLENwbUl0ZW0sQ3BtVGhyZXNob2xkcyxDcG1TdW1tYXJ5LFpvbmVDb2xvcixTdmdQb2ludCxERUZBVUxUX1RIUkVTSE9MRFMsWk9ORV9DT0xPUlMsIENwbUNvbG9yU3RhdGUsfSBmcm9tICcuLi8uLi91dGlscy9DcG1JbmRpY2F0b3IvY3BtLWluZGljYXRvci10eXBlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1saWJleS1uZy1jcG0taW5kaWNhdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGliZXktbmctY3BtLWluZGljYXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGliZXktbmctY3BtLWluZGljYXRvci5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpYmV5TmdDcG1JbmRpY2F0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8qKiBUb3BlIG3DoXhpbW8gZGVsIGNvbnRyYXRvLiAqL1xyXG4gIEBJbnB1dCgpIGxpbWl0OiBudW1iZXIgPSAyNTA7XHJcblxyXG4gIC8qKlxyXG4gICAqIMONdGVtcyBkZSBnYXN0by4gRWwgcGFkcmUgZXMgcmVzcG9uc2FibGUgZGU6XHJcbiAgICogLSBFeGNsdWlyIMOtdGVtcyBxdWUgbm8gYXBsaWNhbiBhbCBDUE1cclxuICAgKiAtIE1hcmNhciBjYWRhIHVubyBjb24gQ3BtSXRlbVR5cGUuQmFzZSBvIENwbUl0ZW1UeXBlLlByb2plY3RlZFxyXG4gICAqIC0gQWN0dWFsaXphciBlbCBhcnJheSBhbCBhZ3JlZ2FyIG8gZWxpbWluYXJcclxuICAgKi9cclxuICBASW5wdXQoKSBpdGVtczogQ3BtSXRlbVtdID0gW107XHJcblxyXG4gIC8qKiBTw61tYm9sbyBkZSBtb25lZGEuIFBvciBkZWZlY3RvICdzLycgKHNvbCBwZXJ1YW5vKS4gKi9cclxuICBASW5wdXQoKSBjdXJyZW5jeTogc3RyaW5nID0gJ3MvJztcclxuXHJcbiAgLyoqIFVtYnJhbGVzIGRlIHpvbmFzIGNvbW8gcG9yY2VudGFqZSBkZWwgbMOtbWl0ZSAoMC4wIOKGkiAxLjApLiBVc2EgdGVyY2lvcyBzaSBubyBzZSBwcm9wb3JjaW9uYS4gKi9cclxuICBASW5wdXQoKSB0aHJlc2hvbGRzPzogQ3BtVGhyZXNob2xkcztcclxuXHJcbiAgLyoqIE1vZG8gZGUgdmlzdWFsaXphY2nDs246IENQTSAoc29sbyBnYXVnZSkgbyBHYXVnZSAobW9udG9zICsgbGV5ZW5kYSkuICovXHJcbiAgQElucHV0KCkgbW9kZTogQ3BtSW5kaWNhdG9yTW9kZSA9IENwbUluZGljYXRvck1vZGUuQ3BtO1xyXG5cclxuICAvKiogQWN0aXZhIHNsaWRlcnMgZGUgcHJ1ZWJhLiBTb2xvIHBhcmEgZGVzYXJyb2xsbywgbnVuY2EgZW4gcHJvZHVjY2nDs24uICovXHJcbiAgQElucHV0KCkgZGV2TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDilIDilIAgT3V0cHV0cyDilIDilIBcclxuICAvKiogRW1pdGUgZWwgcmVzdW1lbiBkZSBtb250b3MgZW4gY2FkYSByZWNhbGN1bG8uIFVzYXIgcGFyYSBwZXJzaXN0aXIgZW4gQkQuICovXHJcbiAgQE91dHB1dCgpIGNwbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q3BtU3VtbWFyeT4oKTtcclxuXHJcbiAgLyoqIEVtaXRlIHRydWUgY3VhbmRvIGxhIHByb3llY2Npw7NuIHN1cGVyYSBlbCBsw61taXRlLiAqL1xyXG4gIEBPdXRwdXQoKSBsaW1pdEV4Y2VlZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjcG1MZWdlbmQnKSBjcG1MZWdlbmQhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBAT3V0cHV0KCkgY29sb3JDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENwbUNvbG9yU3RhdGU+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHNjYWxlOiBudW1iZXIgPSAxO1xyXG5cclxuICAvLyDilIDilIAgUHJvcGllZGFkZXMgZGVsIHRlbXBsYXRlIOKUgOKUgFxyXG4gIGJhc2VBbW91bnQ6IG51bWJlciAgICAgID0gMDtcclxuICBwcm9qZWN0ZWRBbW91bnQ6IG51bWJlciA9IDA7XHJcbiAgdG90YWxBbW91bnQ6IG51bWJlciAgICAgPSAwO1xyXG4gIGV4Y2VzczogbnVtYmVyICAgICAgICAgID0gMDtcclxuICBhY3RpdmVDb2xvcnM6IFpvbmVDb2xvciA9IFpPTkVfQ09MT1JTWyd6b25lMSddO1xyXG5cclxuICB0cmFja0FyY1BhdGg6IHN0cmluZyAgICAgPSAnJztcclxuICBiYXNlQXJjUGF0aDogc3RyaW5nICAgICAgPSAnJztcclxuICB0b3RhbEFyY1BhdGg6IHN0cmluZyAgICAgPSAnJztcclxuICBkb3RCYXNlUG9zOiBTdmdQb2ludCAgICAgPSB7IHg6IDAsIHk6IDAgfTtcclxuICBkb3RUb3RhbFBvczogU3ZnUG9pbnQgICAgPSB7IHg6IDAsIHk6IDAgfTtcclxuICBkb3RUb3RhbFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsaW1pdFRleHRQb3M6IFN2Z1BvaW50ICAgPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcbiAgLy8g4pSA4pSAIGRldk1vZGUg4pSA4pSAXHJcbiAgc2xpZGVyQmFzZTogbnVtYmVyICAgICAgPSAwO1xyXG4gIHNsaWRlclByb2plY3RlZDogbnVtYmVyID0gMDtcclxuXHJcbiAgZ2V0IHNsaWRlck1heCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMubGltaXQgKiAxLjU7XHJcbiAgfVxyXG5cclxuICAvLyBOZWNlc2FyaW8gcGFyYSB1c2FyIGVsIGVudW0gZW4gZWwgdGVtcGxhdGVcclxuICByZWFkb25seSBDcG1JbmRpY2F0b3JNb2RlID0gQ3BtSW5kaWNhdG9yTW9kZTtcclxuXHJcbiAgLy8gR2VvbWV0csOtYSBkZWwgU1ZHIChjb29yZGVuYWRhcyBpbnRlcm5hcyBkZWwgdmlld0JveCAyMjB4MTMwKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQ1ggICAgICAgICAgPSAxMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBDWSAgICAgICAgICA9IDExNTtcclxuICBwcml2YXRlIHJlYWRvbmx5IFIgICAgICAgICAgID0gOTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBBTkdMRV9TVEFSVCA9IE1hdGguUEk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBBTkdMRV9FTkQgICA9IDA7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgRVhDRVNTX1RPTEVSQU5DRSA9IDAuMDA1O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10gfHwgY2hhbmdlc1snbGltaXQnXSB8fCBjaGFuZ2VzWyd0aHJlc2hvbGRzJ10pIHtcclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EZXZCYXNlQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5zbGlkZXJCYXNlID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcclxuICAgIGlmICh0aGlzLnNsaWRlckJhc2UgPiB0aGlzLnNsaWRlclByb2plY3RlZCkge1xyXG4gICAgICB0aGlzLnNsaWRlclByb2plY3RlZCA9IHRoaXMuc2xpZGVyQmFzZTtcclxuICAgIH1cclxuICAgIHRoaXMucmVjYWxjdWxhdGVGcm9tU2xpZGVycygpO1xyXG4gIH1cclxuXHJcbiAgb25EZXZQcm9qZWN0ZWRDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnNsaWRlclByb2plY3RlZCA9IHBhcnNlRmxvYXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5zbGlkZXJQcm9qZWN0ZWQgPCB0aGlzLnNsaWRlckJhc2UpIHtcclxuICAgICAgdGhpcy5zbGlkZXJQcm9qZWN0ZWQgPSB0aGlzLnNsaWRlckJhc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlRnJvbVNsaWRlcnMoKTtcclxuICB9XHJcblxyXG4gIC8vIEZsdWpvIGRlIHByb2R1Y2Npw7NuOiBjYWxjdWxhIGEgcGFydGlyIGRlbCBhcnJheSBkZSBpdGVtc1xyXG4gIHByaXZhdGUgcmVjYWxjdWxhdGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJhc2VBbW91bnQgPSB0aGlzLml0ZW1zXHJcbiAgICAgIC5maWx0ZXIoaSA9PiBpLnR5cGUgPT09IENwbUl0ZW1UeXBlLkJhc2UpXHJcbiAgICAgIC5yZWR1Y2UoKGFjYywgaSkgPT4gYWNjICsgaS5hbW91bnQsIDApO1xyXG5cclxuICAgIHRoaXMucHJvamVjdGVkQW1vdW50ID0gdGhpcy5pdGVtc1xyXG4gICAgICAuZmlsdGVyKGkgPT4gaS50eXBlID09PSBDcG1JdGVtVHlwZS5Qcm9qZWN0ZWQpXHJcbiAgICAgIC5yZWR1Y2UoKGFjYywgaSkgPT4gYWNjICsgaS5hbW91bnQsIDApO1xyXG5cclxuICAgIHRoaXMudG90YWxBbW91bnQgPSB0aGlzLmJhc2VBbW91bnQgKyB0aGlzLnByb2plY3RlZEFtb3VudDtcclxuXHJcbiAgICAvLyBTaW5jcm9uaXphIHNsaWRlcnMgcG9yIHNpIHNlIGFjdGl2YSBkZXZNb2RlXHJcbiAgICB0aGlzLnNsaWRlckJhc2UgICAgICA9IHRoaXMuYmFzZUFtb3VudDtcclxuICAgIHRoaXMuc2xpZGVyUHJvamVjdGVkID0gdGhpcy50b3RhbEFtb3VudDtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUdhdWdlKCk7XHJcbiAgICB0aGlzLmVtaXRTdW1tYXJ5KCk7XHJcbiAgfVxyXG5cclxuICAvLyBGbHVqbyBkZSBkZXZNb2RlOiBjYWxjdWxhIGEgcGFydGlyIGRlIGxvcyBzbGlkZXJzXHJcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUZyb21TbGlkZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5iYXNlQW1vdW50ICAgICAgPSB0aGlzLnNsaWRlckJhc2U7XHJcbiAgICB0aGlzLnByb2plY3RlZEFtb3VudCA9IHRoaXMuc2xpZGVyUHJvamVjdGVkIC0gdGhpcy5zbGlkZXJCYXNlO1xyXG4gICAgdGhpcy50b3RhbEFtb3VudCAgICAgPSB0aGlzLnNsaWRlclByb2plY3RlZDtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUdhdWdlKCk7XHJcbiAgICB0aGlzLmVtaXRTdW1tYXJ5KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUdhdWdlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgdGhyZXNob2xkcyAgPSB0aGlzLnRocmVzaG9sZHMgPz8gREVGQVVMVF9USFJFU0hPTERTO1xyXG4gICAgdGhpcy5hY3RpdmVDb2xvcnMgPSB0aGlzLmdldFpvbmVDb2xvcnModGhpcy50b3RhbEFtb3VudCwgdGhyZXNob2xkcyk7XHJcblxyXG4gICAgdGhpcy50cmFja0FyY1BhdGggPSB0aGlzLmJ1aWxkQXJjUGF0aCh0aGlzLkFOR0xFX1NUQVJULCB0aGlzLkFOR0xFX0VORCk7XHJcbiAgICB0aGlzLnRvdGFsQXJjUGF0aCA9IHRoaXMuYnVpbGRBcmNQYXRoKHRoaXMuQU5HTEVfU1RBUlQsIHRoaXMudmFsdWVUb0FuZ2xlKHRoaXMudG90YWxBbW91bnQpKTtcclxuICAgIHRoaXMuYmFzZUFyY1BhdGggID0gdGhpcy5idWlsZEFyY1BhdGgodGhpcy5BTkdMRV9TVEFSVCwgdGhpcy52YWx1ZVRvQW5nbGUodGhpcy5iYXNlQW1vdW50KSk7XHJcblxyXG4gICAgdGhpcy5kb3RCYXNlUG9zICA9IHRoaXMucG9sYXIodGhpcy52YWx1ZVRvQW5nbGUodGhpcy5iYXNlQW1vdW50KSk7XHJcbiAgICB0aGlzLmRvdFRvdGFsUG9zID0gdGhpcy5wb2xhcih0aGlzLnZhbHVlVG9BbmdsZSh0aGlzLnRvdGFsQW1vdW50KSk7XHJcblxyXG4gICAgLy8gRWwgcHVudG8gZGUgcHJveWVjY2nDs24gc29sbyBhcGFyZWNlIHNpIHZhIGRlbGFudGUgZGVsIHJlYWwgeSBubyBsbGVnw7MgYWwgYm9yZGVcclxuICAgIHRoaXMuZG90VG90YWxWaXNpYmxlID0gdGhpcy50b3RhbEFtb3VudCA+IHRoaXMuYmFzZUFtb3VudCAmJiB0aGlzLnRvdGFsQW1vdW50IDwgdGhpcy5saW1pdDtcclxuXHJcbiAgICB0aGlzLmxpbWl0VGV4dFBvcyA9IHRoaXMucG9sYXIodGhpcy5BTkdMRV9FTkQsIHRoaXMuUiArIDIwKTtcclxuXHJcbiAgICB0aGlzLmV4Y2VzcyA9IE1hdGgubWF4KDAsIHRoaXMudG90YWxBbW91bnQgLSB0aGlzLmxpbWl0KTtcclxuICAgIHRoaXMubGltaXRFeGNlZWRlZC5lbWl0KHRoaXMuZXhjZXNzID4gdGhpcy5FWENFU1NfVE9MRVJBTkNFKTtcclxuXHJcbiAgICB0aGlzLmNvbG9yQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBkYXJrQ29sb3I6ICAgIHRoaXMuYWN0aXZlQ29sb3JzLmRhcmssXHJcbiAgICAgIGxpZ2h0Q29sb3I6ICAgdGhpcy5hY3RpdmVDb2xvcnMubGlnaHQsXHJcbiAgICAgIGdyYXlDb2xvcjogICAgJyNFOEVBRUYnLFxyXG4gICAgICBsaW1pdFJlYWNoZWQ6IHRoaXMudG90YWxBbW91bnQgPj0gdGhpcy5saW1pdCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0U3VtbWFyeSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3BtQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBiYXNlQW1vdW50OiAgICAgIHRoaXMuYmFzZUFtb3VudCxcclxuICAgICAgcHJvamVjdGVkQW1vdW50OiB0aGlzLnByb2plY3RlZEFtb3VudCxcclxuICAgICAgdG90YWxBbW91bnQ6ICAgICB0aGlzLnRvdGFsQW1vdW50LFxyXG4gICAgICBsaW1pdDogICAgICAgICAgIHRoaXMubGltaXQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIENsYW1wZWEgZWwgdmFsb3IgYWwgbMOtbWl0ZSBwYXJhIHF1ZSBlbCBhcmNvIG5vIGRlc2JvcmRlIHZpc3VhbG1lbnRlXHJcbiAgcHJpdmF0ZSB2YWx1ZVRvQW5nbGUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5taW4odmFsdWUsIHRoaXMubGltaXQpO1xyXG4gICAgcmV0dXJuIE1hdGguUEkgLSAoY2xhbXBlZCAvIHRoaXMubGltaXQpICogTWF0aC5QSTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9sYXIoYW5nbGU6IG51bWJlciwgcmFkaXVzOiBudW1iZXIgPSB0aGlzLlIpOiBTdmdQb2ludCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB4OiB0aGlzLkNYICsgcmFkaXVzICogTWF0aC5jb3MoYW5nbGUpLFxyXG4gICAgICB5OiB0aGlzLkNZIC0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRBcmNQYXRoKGExOiBudW1iZXIsIGEyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBvbGFyKGExKTtcclxuICAgIGNvbnN0IGVuZCAgID0gdGhpcy5wb2xhcihhMik7XHJcbiAgICBjb25zdCBsYXJnZSA9IChhMSAtIGEyKSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgIHJldHVybiBgTSAke3N0YXJ0Lnh9ICR7c3RhcnQueX0gQSAke3RoaXMuUn0gJHt0aGlzLlJ9IDAgJHtsYXJnZX0gMSAke2VuZC54fSAke2VuZC55fWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFpvbmVDb2xvcnModmFsdWU6IG51bWJlciwgdDogQ3BtVGhyZXNob2xkcyk6IFpvbmVDb2xvciB7XHJcbiAgICBjb25zdCBwY3QgPSB2YWx1ZSAvIHRoaXMubGltaXQ7XHJcbiAgICBpZiAocGN0IDwgdC56b25lMU1heCkgcmV0dXJuIFpPTkVfQ09MT1JTWyd6b25lMSddO1xyXG4gICAgaWYgKHBjdCA8IHQuem9uZTJNYXgpIHJldHVybiBaT05FX0NPTE9SU1snem9uZTInXTtcclxuICAgIGlmIChwY3QgPCB0LnpvbmUzTWF4KSByZXR1cm4gWk9ORV9DT0xPUlNbJ3pvbmUzJ107XHJcbiAgICByZXR1cm4gWk9ORV9DT0xPUlNbJ3pvbmU0J107XHJcbiAgfVxyXG59IiwiPCEtLSBNb2RvIENQTTogc29sbyBlbCBnYXVnZSBjb24gXCJDUE1cIiBlbiBlbCBjZW50cm8gLS0+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSBDcG1JbmRpY2F0b3JNb2RlLkNwbVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJnYXVnZS13cmFwXCIgW3N0eWxlLndpZHRoLnB4XT1cIjIyMCAqIHNjYWxlXCIgW3N0eWxlLmhlaWdodC5weF09XCIxMjAgKiBzY2FsZVwiPlxyXG4gICAgPHN2ZyBjbGFzcz1cImdhdWdlLXN2Z1wiIHZpZXdCb3g9XCIwIDAgMjIwIDEzMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cIjIyMCAqIHNjYWxlXCJcclxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiMTM1ICogc2NhbGVcIj5cclxuICAgICAgPGRlZnM+XHJcbiAgICAgICAgPGZpbHRlciBpZD1cImRvdFNoYWRvd0NwbVwiIHg9XCItNjAlXCIgeT1cIi02MCVcIiB3aWR0aD1cIjIyMCVcIiBoZWlnaHQ9XCIyMjAlXCI+XHJcbiAgICAgICAgICA8ZmVEcm9wU2hhZG93IGR4PVwiMFwiIGR5PVwiMVwiIHN0ZERldmlhdGlvbj1cIjJcIiBmbG9vZC1jb2xvcj1cInJnYmEoMCwwLDAsMC4yMilcIi8+XHJcbiAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgIDwvZGVmcz5cclxuXHJcbiAgICAgIDxwYXRoIFthdHRyLmRdPVwidHJhY2tBcmNQYXRoXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjRThFQUVGXCIgc3Ryb2tlLXdpZHRoPVwiMTRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG5cclxuICAgICAgPCEtLSBQcm95ZWNjacOzbiBkZWJham8sIHJlYWwgZW5jaW1hIC0tPlxyXG4gICAgICA8cGF0aFxyXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cInRvdGFsQW1vdW50ID4gMCA/ICcnIDogJ25vbmUnXCJcclxuICAgICAgICBbYXR0ci5kXT1cInRvdGFsQXJjUGF0aFwiXHJcbiAgICAgICAgW2F0dHIuc3Ryb2tlXT1cImFjdGl2ZUNvbG9ycy5saWdodFwiXHJcbiAgICAgICAgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XHJcblxyXG4gICAgICA8cGF0aFxyXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImJhc2VBbW91bnQgPiAwID8gJycgOiAnbm9uZSdcIlxyXG4gICAgICAgIFthdHRyLmRdPVwiYmFzZUFyY1BhdGhcIlxyXG4gICAgICAgIFthdHRyLnN0cm9rZV09XCJhY3RpdmVDb2xvcnMuZGFya1wiXHJcbiAgICAgICAgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XHJcblxyXG4gICAgICA8Y2lyY2xlXHJcbiAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiYmFzZUFtb3VudCA+IDAgPyAnJyA6ICdub25lJ1wiXHJcbiAgICAgICAgW2F0dHIuY3hdPVwiZG90QmFzZVBvcy54XCIgW2F0dHIuY3ldPVwiZG90QmFzZVBvcy55XCJcclxuICAgICAgICByPVwiN1wiIFthdHRyLmZpbGxdPVwiYWN0aXZlQ29sb3JzLmRhcmtcIlxyXG4gICAgICAgIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIyLjVcIlxyXG4gICAgICAgIGZpbHRlcj1cInVybCgjZG90U2hhZG93Q3BtKVwiLz5cclxuXHJcbiAgICAgIDwhLS0gU29sbyB2aXNpYmxlIHNpIGxhIHByb3llY2Npw7NuIHZhIHBvciBkZWxhbnRlIGRlbCByZWFsIC0tPlxyXG4gICAgICA8Y2lyY2xlXHJcbiAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiZG90VG90YWxWaXNpYmxlID8gJycgOiAnbm9uZSdcIlxyXG4gICAgICAgIFthdHRyLmN4XT1cImRvdFRvdGFsUG9zLnhcIiBbYXR0ci5jeV09XCJkb3RUb3RhbFBvcy55XCJcclxuICAgICAgICByPVwiNlwiIFthdHRyLmZpbGxdPVwiYWN0aXZlQ29sb3JzLmxpZ2h0XCJcclxuICAgICAgICBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCJcclxuICAgICAgICBmaWx0ZXI9XCJ1cmwoI2RvdFNoYWRvd0NwbSlcIi8+XHJcbiAgICA8L3N2Zz5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2F1Z2UtY2VudGVyIGdhdWdlLWNlbnRlci0tY3BtXCIgW3N0eWxlLmJvdHRvbS5weF09XCIxNSAqIHNjYWxlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLXZhbHVlXCIgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCIyNiAqIHNjYWxlXCI+Q1BNPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuPCEtLSBNb2RvIEdhdWdlOiBnYXVnZSBjb21wbGV0byBjb24gbW9udG9zLCBsZXllbmRhIHkgYWxlcnRhIC0tPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gQ3BtSW5kaWNhdG9yTW9kZS5HYXVnZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJnYXVnZS13cmFwXCIgW3N0eWxlLndpZHRoLnB4XT1cIjIyMCAqIHNjYWxlXCIgW3N0eWxlLmhlaWdodC5weF09XCIxMjAgKiBzY2FsZVwiPlxyXG4gICAgPHN2ZyBjbGFzcz1cImdhdWdlLXN2Z1wiIHZpZXdCb3g9XCIwIDAgMjIwIDEzMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cIjIyMCAqIHNjYWxlXCJcclxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiMTM1ICogc2NhbGVcIj5cclxuICAgICAgPGRlZnM+XHJcbiAgICAgICAgPGZpbHRlciBpZD1cImRvdFNoYWRvd0dhdWdlXCIgeD1cIi02MCVcIiB5PVwiLTYwJVwiIHdpZHRoPVwiMjIwJVwiIGhlaWdodD1cIjIyMCVcIj5cclxuICAgICAgICAgIDxmZURyb3BTaGFkb3cgZHg9XCIwXCIgZHk9XCIxXCIgc3RkRGV2aWF0aW9uPVwiMlwiIGZsb29kLWNvbG9yPVwicmdiYSgwLDAsMCwwLjIyKVwiLz5cclxuICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgPC9kZWZzPlxyXG5cclxuICAgICAgPHBhdGggW2F0dHIuZF09XCJ0cmFja0FyY1BhdGhcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiNFOEVBRUZcIiBzdHJva2Utd2lkdGg9XCIxNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XHJcblxyXG4gICAgICA8IS0tIFByb3llY2Npw7NuIGRlYmFqbywgcmVhbCBlbmNpbWEgLS0+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwidG90YWxBbW91bnQgPiAwID8gJycgOiAnbm9uZSdcIlxyXG4gICAgICAgIFthdHRyLmRdPVwidG90YWxBcmNQYXRoXCJcclxuICAgICAgICBbYXR0ci5zdHJva2VdPVwiYWN0aXZlQ29sb3JzLmxpZ2h0XCJcclxuICAgICAgICBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjE0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cclxuXHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiYmFzZUFtb3VudCA+IDAgPyAnJyA6ICdub25lJ1wiXHJcbiAgICAgICAgW2F0dHIuZF09XCJiYXNlQXJjUGF0aFwiXHJcbiAgICAgICAgW2F0dHIuc3Ryb2tlXT1cImFjdGl2ZUNvbG9ycy5kYXJrXCJcclxuICAgICAgICBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjE0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cclxuXHJcbiAgICAgIDxjaXJjbGVcclxuICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJiYXNlQW1vdW50ID4gMCA/ICcnIDogJ25vbmUnXCJcclxuICAgICAgICBbYXR0ci5jeF09XCJkb3RCYXNlUG9zLnhcIiBbYXR0ci5jeV09XCJkb3RCYXNlUG9zLnlcIlxyXG4gICAgICAgIHI9XCI3XCIgW2F0dHIuZmlsbF09XCJhY3RpdmVDb2xvcnMuZGFya1wiXHJcbiAgICAgICAgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjIuNVwiXHJcbiAgICAgICAgZmlsdGVyPVwidXJsKCNkb3RTaGFkb3dHYXVnZSlcIi8+XHJcblxyXG4gICAgICA8Y2lyY2xlXHJcbiAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiZG90VG90YWxWaXNpYmxlID8gJycgOiAnbm9uZSdcIlxyXG4gICAgICAgIFthdHRyLmN4XT1cImRvdFRvdGFsUG9zLnhcIiBbYXR0ci5jeV09XCJkb3RUb3RhbFBvcy55XCJcclxuICAgICAgICByPVwiNlwiIFthdHRyLmZpbGxdPVwiYWN0aXZlQ29sb3JzLmxpZ2h0XCJcclxuICAgICAgICBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCJcclxuICAgICAgICBmaWx0ZXI9XCJ1cmwoI2RvdFNoYWRvd0dhdWdlKVwiLz5cclxuXHJcbiAgICAgIDwhLS0gPHRleHRcclxuICAgICAgICBbYXR0ci54XT1cImxpbWl0VGV4dFBvcy54XCIgW2F0dHIueV09XCJsaW1pdFRleHRQb3MueVwiXHJcbiAgICAgICAgZm9udC1mYW1pbHk9XCJETSBNb25vLG1vbm9zcGFjZVwiIGZvbnQtc2l6ZT1cIjlcIiBmb250LXdlaWdodD1cIjYwMFwiXHJcbiAgICAgICAgZmlsbD1cIiM4YThmYThcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiPlxyXG4gICAgICAgIHt7IGN1cnJlbmN5IH19e3sgbGltaXQgfX1cclxuICAgICAgPC90ZXh0PiAtLT5cclxuICAgIDwvc3ZnPlxyXG5cclxuICAgIDwhLS0gRWwgY29sb3IgZGVsIG1vbnRvIGNhbWJpYSBhIHJvam8gc2kgc3VwZXJhIGVsIGzDrW1pdGUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2F1Z2UtY2VudGVyIGdhdWdlLWNlbnRlci0tZ2F1Z2VcIiBbc3R5bGUuYm90dG9tLnB4XT1cIi0xMCAqIHNjYWxlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLXZhbHVlXCJcclxuICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwiMjYgKiBzY2FsZVwiXHJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidG90YWxBbW91bnQgPiBsaW1pdCA/IGFjdGl2ZUNvbG9ycy5kYXJrIDogJyMxYTFhMmUnXCI+XHJcbiAgICAgICAgQ1BNPGJyPlxyXG4gICAgICAgIHt7IGN1cnJlbmN5IH19e3sgdG90YWxBbW91bnQgfCBudW1iZXI6JzEuMi0yJyB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxpbWl0LWxhYmVsXCIgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCIxNiAqIHNjYWxlXCI+XHJcbiAgICAgICAgZGUge3sgY3VycmVuY3kgfX17eyBsaW1pdCB8IG51bWJlcjonMS4yLTInIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJsZWdlbmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImFjdGl2ZUNvbG9ycy5kYXJrXCI+PC9zcGFuPlxyXG4gICAgICBSZWFsXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRvdFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImFjdGl2ZUNvbG9ycy5saWdodFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJzEuNXB4IHNvbGlkICcgKyBhY3RpdmVDb2xvcnMuZGFya1wiPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIFByb3llY2Npw7NuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIHN0eWxlPVwiYmFja2dyb3VuZDojZThlY2Y1OyBib3JkZXI6MXB4IHNvbGlkICNjY2NcIj48L3NwYW4+XHJcbiAgICAgIERpc3BvbmlibGVcclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIFNsaWRlcnMgZGUgcHJ1ZWJhIOKAlCBzb2xvIGVuIGRldk1vZGUgLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRldk1vZGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGV2LWJhZGdlXCI+RGV2IE1vZGU8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sc1wiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImN0cmwtcm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImN0cmwtaGVhZGVyXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImN0cmwtbGFiZWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdHJsLWxhYmVsLWRvdFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImFjdGl2ZUNvbG9ycy5kYXJrXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICBHYXN0byByZWFsIChjb25zdW1pZG8pXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImN0cmwtdmFsXCIgW3N0eWxlLmNvbG9yXT1cImFjdGl2ZUNvbG9ycy5kYXJrXCI+XHJcbiAgICAgICAgICAgIHt7IGN1cnJlbmN5IH19e3sgc2xpZGVyQmFzZSB8IG51bWJlcjonMS4yLTInIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInpvbmVzLWJhclwiPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6IzE2YTM0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2NhOGEwNFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2VhNTgwY1wiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2RjMjYyNlwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBbbWluXT1cIjBcIiBbbWF4XT1cInNsaWRlck1heFwiIHN0ZXA9XCIwLjVcIlxyXG4gICAgICAgICAgICAgICBbdmFsdWVdPVwic2xpZGVyQmFzZVwiIChpbnB1dCk9XCJvbkRldkJhc2VDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjdHJsLXJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdHJsLWhlYWRlclwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdHJsLWxhYmVsXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3RybC1sYWJlbC1kb3RcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJhY3RpdmVDb2xvcnMubGlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cIicxcHggc29saWQgJyArIGFjdGl2ZUNvbG9ycy5kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOjUwJVwiPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIFByb3llY2Npw7NuIChwcmVzdXB1ZXN0bylcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3RybC12YWxcIiBbc3R5bGUuY29sb3JdPVwiYWN0aXZlQ29sb3JzLmRhcmtcIj5cclxuICAgICAgICAgICAge3sgY3VycmVuY3kgfX17eyBzbGlkZXJQcm9qZWN0ZWQgfCBudW1iZXI6JzEuMi0yJyB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ6b25lcy1iYXJcIj5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiMxNmEzNGFcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNjYThhMDRcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNlYTU4MGNcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNkYzI2MjZcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgW21pbl09XCIwXCIgW21heF09XCJzbGlkZXJNYXhcIiBzdGVwPVwiMC41XCJcclxuICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNsaWRlclByb2plY3RlZFwiIChpbnB1dCk9XCJvbkRldlByb2plY3RlZENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY3BtTGVnZW5kPlxyXG4gIDxkaXYgY2xhc3M9XCJsZWdlbmQtdG9vbHRpcFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10b29sdGlwX19pdGVtXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCIgW3N0eWxlLmJhY2tncm91bmRdPVwiYWN0aXZlQ29sb3JzLmRhcmtcIj48L3NwYW4+XHJcbiAgICAgIFJlYWw8c3BhbiAqbmdJZj1cIm1vZGUgPT09IENwbUluZGljYXRvck1vZGUuR2F1Z2VcIj46IHt7IGN1cnJlbmN5IH19e3sgYmFzZUFtb3VudCB8IG51bWJlcjonMS4yLTInIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRvb2x0aXBfX2l0ZW1cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJhY3RpdmVDb2xvcnMubGlnaHRcIj48L3NwYW4+XHJcbiAgICAgIFByb3llY2Npw7NuPHNwYW4gKm5nSWY9XCJtb2RlID09PSBDcG1JbmRpY2F0b3JNb2RlLkdhdWdlXCI+OiB7eyBjdXJyZW5jeSB9fXt7IHByb2plY3RlZEFtb3VudCB8IG51bWJlcjonMS4yLTInIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRvb2x0aXBfX2l0ZW1cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIiBzdHlsZT1cImJhY2tncm91bmQ6I2U4ZWNmNVwiPjwvc3Bhbj5cclxuICAgICAgRGlzcG9uaWJsZTxzcGFuICpuZ0lmPVwibW9kZSA9PT0gQ3BtSW5kaWNhdG9yTW9kZS5HYXVnZVwiPjoge3sgY3VycmVuY3kgfX17eyAobGltaXQgLSB0b3RhbEFtb3VudCkgfCBudW1iZXI6JzEuMi0yJyB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -17,9 +17,9 @@ export const DEFAULT_THRESHOLDS = {
17
17
  zone3Max: 1.0,
18
18
  };
19
19
  export const ZONE_COLORS = {
20
- zone1: { dark: '#16a34a', light: '#86efac' },
21
- zone2: { dark: '#ca8a04', light: '#fde68a' },
22
- zone3: { dark: '#ea580c', light: '#fdba74' },
23
- zone4: { dark: '#dc2626', light: '#fca5a5' }, // Rojo
20
+ zone1: { dark: '#2B9429', light: '#80BF7F' },
21
+ zone2: { dark: '#FFE500', light: '#F4E878' },
22
+ zone3: { dark: '#FFA826', light: '#F6C276' },
23
+ zone4: { dark: '#D30000', light: '#DB5E60' }, // Rojo
24
24
  };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BtLWluZGljYXRvci10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYmV5LW5nLWNvbXBvbmVudC1saWJyYXJ5L3NyYy91dGlscy9DcG1JbmRpY2F0b3IvY3BtLWluZGljYXRvci10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUM7QUFDdkMsTUFBTSxDQUFOLElBQVksZ0JBR1g7QUFIRCxXQUFZLGdCQUFnQjtJQUMxQiwrQkFBYSxDQUFBO0lBQ2IsbUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUczQjtBQUVELGlFQUFpRTtBQUNqRSxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLDRCQUFrQixDQUFBO0lBQ2xCLHNDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QjtBQWtDRCx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWtCO0lBQy9DLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNmLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNmLFFBQVEsRUFBRSxHQUFHO0NBQ2QsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBOEI7SUFDcEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQzVDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUM1QyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7SUFDNUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTztDQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTW9kb3MgZGUgdmlzdWFsaXphY2nDs24gZGVsIGluZGljYWRvclxyXG5leHBvcnQgZW51bSBDcG1JbmRpY2F0b3JNb2RlIHtcclxuICBDcG0gICA9ICdjcG0nLFxyXG4gIEdhdWdlID0gJ2dhdWdlJyxcclxufVxyXG5cclxuLy8gVGlwbyBkZSDDrXRlbTogZ2FzdG8geWEgY29uc3VtaWRvIChCYXNlKSBvIGVzdGltYWRvIChQcm9qZWN0ZWQpXHJcbmV4cG9ydCBlbnVtIENwbUl0ZW1UeXBlIHtcclxuICBCYXNlICAgICAgPSAnYmFzZScsXHJcbiAgUHJvamVjdGVkID0gJ3Byb2plY3RlZCcsXHJcbn1cclxuXHJcbi8vIEVsIHBhZHJlIGV4Y2x1eWUgbG9zIMOtdGVtcyBxdWUgbm8gYXBsaWNhbiBhbCBDUE0gYW50ZXMgZGUgYXJtYXIgZXN0YSBsaXN0YVxyXG5leHBvcnQgaW50ZXJmYWNlIENwbUl0ZW0ge1xyXG4gIGlkOiAgICAgc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGFtb3VudDogbnVtYmVyO1xyXG4gIHR5cGU6ICAgQ3BtSXRlbVR5cGU7XHJcbn1cclxuXHJcbi8vIFBvcmNlbnRhamVzIGRlbCBsw61taXRlICgwLjAg4oaSIDEuMCkuIExhIHpvbmEgNCAocm9qbykgZXMgYXV0b23DoXRpY2FcclxuZXhwb3J0IGludGVyZmFjZSBDcG1UaHJlc2hvbGRzIHtcclxuICB6b25lMU1heDogbnVtYmVyO1xyXG4gIHpvbmUyTWF4OiBudW1iZXI7XHJcbiAgem9uZTNNYXg6IG51bWJlcjtcclxufVxyXG5cclxuLy8gUmVzdW1lbiBxdWUgZW1pdGUgZWwgY29tcG9uZW50ZSBwYXJhIHBlcnNpc3RpciBlbiBCRFxyXG5leHBvcnQgaW50ZXJmYWNlIENwbVN1bW1hcnkge1xyXG4gIGJhc2VBbW91bnQ6ICAgICAgbnVtYmVyO1xyXG4gIHByb2plY3RlZEFtb3VudDogbnVtYmVyO1xyXG4gIHRvdGFsQW1vdW50OiAgICAgbnVtYmVyO1xyXG4gIGxpbWl0OiAgICAgICAgICAgbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFpvbmVDb2xvciB7XHJcbiAgZGFyazogIHN0cmluZztcclxuICBsaWdodDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN2Z1BvaW50IHtcclxuICB4OiBudW1iZXI7XHJcbiAgeTogbnVtYmVyO1xyXG59XHJcblxyXG4vLyBUZXJjaW9zIHBvciBkZWZlY3RvIHNpIG5vIHNlIHByb3BvcmNpb25hbiB0aHJlc2hvbGRzXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1RIUkVTSE9MRFM6IENwbVRocmVzaG9sZHMgPSB7XHJcbiAgem9uZTFNYXg6IDEgLyAzLFxyXG4gIHpvbmUyTWF4OiAyIC8gMyxcclxuICB6b25lM01heDogMS4wLFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFpPTkVfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCBab25lQ29sb3I+ID0ge1xyXG4gIHpvbmUxOiB7IGRhcms6ICcjMTZhMzRhJywgbGlnaHQ6ICcjODZlZmFjJyB9LCAvLyBWZXJkZVxyXG4gIHpvbmUyOiB7IGRhcms6ICcjY2E4YTA0JywgbGlnaHQ6ICcjZmRlNjhhJyB9LCAvLyBBbWFyaWxsb1xyXG4gIHpvbmUzOiB7IGRhcms6ICcjZWE1ODBjJywgbGlnaHQ6ICcjZmRiYTc0JyB9LCAvLyBOYXJhbmphXHJcbiAgem9uZTQ6IHsgZGFyazogJyNkYzI2MjYnLCBsaWdodDogJyNmY2E1YTUnIH0sIC8vIFJvam9cclxufTsiXX0=
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BtLWluZGljYXRvci10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYmV5LW5nLWNvbXBvbmVudC1saWJyYXJ5L3NyYy91dGlscy9DcG1JbmRpY2F0b3IvY3BtLWluZGljYXRvci10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUM7QUFDdkMsTUFBTSxDQUFOLElBQVksZ0JBR1g7QUFIRCxXQUFZLGdCQUFnQjtJQUMxQiwrQkFBYSxDQUFBO0lBQ2IsbUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUczQjtBQUVELGlFQUFpRTtBQUNqRSxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLDRCQUFrQixDQUFBO0lBQ2xCLHNDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QjtBQWtDRCx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWtCO0lBQy9DLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNmLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNmLFFBQVEsRUFBRSxHQUFHO0NBQ2QsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBOEI7SUFDcEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQzVDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUM1QyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7SUFDNUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTztDQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTW9kb3MgZGUgdmlzdWFsaXphY2nDs24gZGVsIGluZGljYWRvclxyXG5leHBvcnQgZW51bSBDcG1JbmRpY2F0b3JNb2RlIHtcclxuICBDcG0gICA9ICdjcG0nLFxyXG4gIEdhdWdlID0gJ2dhdWdlJyxcclxufVxyXG5cclxuLy8gVGlwbyBkZSDDrXRlbTogZ2FzdG8geWEgY29uc3VtaWRvIChCYXNlKSBvIGVzdGltYWRvIChQcm9qZWN0ZWQpXHJcbmV4cG9ydCBlbnVtIENwbUl0ZW1UeXBlIHtcclxuICBCYXNlICAgICAgPSAnYmFzZScsXHJcbiAgUHJvamVjdGVkID0gJ3Byb2plY3RlZCcsXHJcbn1cclxuXHJcbi8vIEVsIHBhZHJlIGV4Y2x1eWUgbG9zIMOtdGVtcyBxdWUgbm8gYXBsaWNhbiBhbCBDUE0gYW50ZXMgZGUgYXJtYXIgZXN0YSBsaXN0YVxyXG5leHBvcnQgaW50ZXJmYWNlIENwbUl0ZW0ge1xyXG4gIGlkOiAgICAgc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGFtb3VudDogbnVtYmVyO1xyXG4gIHR5cGU6ICAgQ3BtSXRlbVR5cGU7XHJcbn1cclxuXHJcbi8vIFBvcmNlbnRhamVzIGRlbCBsw61taXRlICgwLjAg4oaSIDEuMCkuIExhIHpvbmEgNCAocm9qbykgZXMgYXV0b23DoXRpY2FcclxuZXhwb3J0IGludGVyZmFjZSBDcG1UaHJlc2hvbGRzIHtcclxuICB6b25lMU1heDogbnVtYmVyO1xyXG4gIHpvbmUyTWF4OiBudW1iZXI7XHJcbiAgem9uZTNNYXg6IG51bWJlcjtcclxufVxyXG5cclxuLy8gUmVzdW1lbiBxdWUgZW1pdGUgZWwgY29tcG9uZW50ZSBwYXJhIHBlcnNpc3RpciBlbiBCRFxyXG5leHBvcnQgaW50ZXJmYWNlIENwbVN1bW1hcnkge1xyXG4gIGJhc2VBbW91bnQ6ICAgICAgbnVtYmVyO1xyXG4gIHByb2plY3RlZEFtb3VudDogbnVtYmVyO1xyXG4gIHRvdGFsQW1vdW50OiAgICAgbnVtYmVyO1xyXG4gIGxpbWl0OiAgICAgICAgICAgbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFpvbmVDb2xvciB7XHJcbiAgZGFyazogIHN0cmluZztcclxuICBsaWdodDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN2Z1BvaW50IHtcclxuICB4OiBudW1iZXI7XHJcbiAgeTogbnVtYmVyO1xyXG59XHJcblxyXG4vLyBUZXJjaW9zIHBvciBkZWZlY3RvIHNpIG5vIHNlIHByb3BvcmNpb25hbiB0aHJlc2hvbGRzXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1RIUkVTSE9MRFM6IENwbVRocmVzaG9sZHMgPSB7XHJcbiAgem9uZTFNYXg6IDEgLyAzLFxyXG4gIHpvbmUyTWF4OiAyIC8gMyxcclxuICB6b25lM01heDogMS4wLFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFpPTkVfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCBab25lQ29sb3I+ID0ge1xyXG4gIHpvbmUxOiB7IGRhcms6ICcjMkI5NDI5JywgbGlnaHQ6ICcjODBCRjdGJyB9LCAvLyBWZXJkZVxyXG4gIHpvbmUyOiB7IGRhcms6ICcjRkZFNTAwJywgbGlnaHQ6ICcjRjRFODc4JyB9LCAvLyBBbWFyaWxsb1xyXG4gIHpvbmUzOiB7IGRhcms6ICcjRkZBODI2JywgbGlnaHQ6ICcjRjZDMjc2JyB9LCAvLyBOYXJhbmphXHJcbiAgem9uZTQ6IHsgZGFyazogJyNEMzAwMDAnLCBsaWdodDogJyNEQjVFNjAnIH0sIC8vIFJvam9cclxufTtcclxuZXhwb3J0IGludGVyZmFjZSBDcG1Db2xvclN0YXRlIHtcclxuICBkYXJrQ29sb3I6ICAgIHN0cmluZzsgIC8vIGNvbG9yIGRlIGxhIHpvbmEgYWN0aXZhIOKAlCBwYXJhIGVsIFJlYWxcclxuICBsaWdodENvbG9yOiAgIHN0cmluZzsgIC8vIGNvbG9yIGNsYXJvIGRlIGxhIHpvbmEgYWN0aXZhIOKAlCBwYXJhIGxhIFByb3llY2Npw7NuXHJcbiAgZ3JheUNvbG9yOiAgICBzdHJpbmc7ICAvLyBzaWVtcHJlIGdyaXMg4oCUIHBhcmEgZWwgRGlzcG9uaWJsZVxyXG4gIGxpbWl0UmVhY2hlZDogYm9vbGVhbjsgLy8gdHJ1ZSBzaSB0b3RhbEFtb3VudCA+PSBsaW1pdFxyXG59Il19
@@ -2113,10 +2113,10 @@ const DEFAULT_THRESHOLDS = {
2113
2113
  zone3Max: 1.0,
2114
2114
  };
2115
2115
  const ZONE_COLORS = {
2116
- zone1: { dark: '#16a34a', light: '#86efac' },
2117
- zone2: { dark: '#ca8a04', light: '#fde68a' },
2118
- zone3: { dark: '#ea580c', light: '#fdba74' },
2119
- zone4: { dark: '#dc2626', light: '#fca5a5' }, // Rojo
2116
+ zone1: { dark: '#2B9429', light: '#80BF7F' },
2117
+ zone2: { dark: '#FFE500', light: '#F4E878' },
2118
+ zone3: { dark: '#FFA826', light: '#F6C276' },
2119
+ zone4: { dark: '#D30000', light: '#DB5E60' }, // Rojo
2120
2120
  };
2121
2121
 
2122
2122
  class LibeyNgCpmIndicatorComponent {
@@ -2141,6 +2141,8 @@ class LibeyNgCpmIndicatorComponent {
2141
2141
  this.cpmChange = new EventEmitter();
2142
2142
  /** Emite true cuando la proyección supera el límite. */
2143
2143
  this.limitExceeded = new EventEmitter();
2144
+ this.colorChange = new EventEmitter();
2145
+ this.scale = 1;
2144
2146
  // ── Propiedades del template ──
2145
2147
  this.baseAmount = 0;
2146
2148
  this.projectedAmount = 0;
@@ -2229,6 +2231,12 @@ class LibeyNgCpmIndicatorComponent {
2229
2231
  this.limitTextPos = this.polar(this.ANGLE_END, this.R + 20);
2230
2232
  this.excess = Math.max(0, this.totalAmount - this.limit);
2231
2233
  this.limitExceeded.emit(this.excess > this.EXCESS_TOLERANCE);
2234
+ this.colorChange.emit({
2235
+ darkColor: this.activeColors.dark,
2236
+ lightColor: this.activeColors.light,
2237
+ grayColor: '#E8EAEF',
2238
+ limitReached: this.totalAmount >= this.limit,
2239
+ });
2232
2240
  }
2233
2241
  emitSummary() {
2234
2242
  this.cpmChange.emit({
@@ -2267,7 +2275,7 @@ class LibeyNgCpmIndicatorComponent {
2267
2275
  }
2268
2276
  }
2269
2277
  LibeyNgCpmIndicatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LibeyNgCpmIndicatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2270
- LibeyNgCpmIndicatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: LibeyNgCpmIndicatorComponent, selector: "lib-libey-ng-cpm-indicator", inputs: { limit: "limit", items: "items", currency: "currency", thresholds: "thresholds", mode: "mode", devMode: "devMode" }, outputs: { cpmChange: "cpmChange", limitExceeded: "limitExceeded" }, viewQueries: [{ propertyName: "cpmLegend", first: true, predicate: ["cpmLegend"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- Modo CPM: solo el gauge con \"CPM\" en el centro -->\r\n<ng-container *ngIf=\"mode === CpmIndicatorMode.Cpm\">\r\n <div class=\"gauge-wrap\">\r\n <svg class=\"gauge-svg\" viewBox=\"0 0 220 130\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <defs>\r\n <filter id=\"dotShadowCpm\" x=\"-60%\" y=\"-60%\" width=\"220%\" height=\"220%\">\r\n <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"2\" flood-color=\"rgba(0,0,0,0.22)\"/>\r\n </filter>\r\n </defs>\r\n\r\n <path [attr.d]=\"trackArcPath\" fill=\"none\" stroke=\"#e8ecf5\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <!-- Proyecci\u00F3n debajo, real encima -->\r\n <path\r\n [style.display]=\"totalAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"totalArcPath\"\r\n [attr.stroke]=\"activeColors.light\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <path\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"baseArcPath\"\r\n [attr.stroke]=\"activeColors.dark\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <circle\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.cx]=\"dotBasePos.x\" [attr.cy]=\"dotBasePos.y\"\r\n r=\"7\" [attr.fill]=\"activeColors.dark\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowCpm)\"/>\r\n\r\n <!-- Solo visible si la proyecci\u00F3n va por delante del real -->\r\n <circle\r\n [style.display]=\"dotTotalVisible ? '' : 'none'\"\r\n [attr.cx]=\"dotTotalPos.x\" [attr.cy]=\"dotTotalPos.y\"\r\n r=\"6\" [attr.fill]=\"activeColors.light\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowCpm)\"/>\r\n </svg>\r\n\r\n <div class=\"gauge-center gauge-center--cpm\">\r\n <div class=\"main-value\">CPM</div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n\r\n<!-- Modo Gauge: gauge completo con montos, leyenda y alerta -->\r\n<ng-container *ngIf=\"mode === CpmIndicatorMode.Gauge\">\r\n <div class=\"gauge-wrap\">\r\n <svg class=\"gauge-svg\" viewBox=\"0 0 220 130\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <defs>\r\n <filter id=\"dotShadowGauge\" x=\"-60%\" y=\"-60%\" width=\"220%\" height=\"220%\">\r\n <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"2\" flood-color=\"rgba(0,0,0,0.22)\"/>\r\n </filter>\r\n </defs>\r\n\r\n <path [attr.d]=\"trackArcPath\" fill=\"none\" stroke=\"#e8ecf5\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <!-- Proyecci\u00F3n debajo, real encima -->\r\n <path\r\n [style.display]=\"totalAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"totalArcPath\"\r\n [attr.stroke]=\"activeColors.light\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <path\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"baseArcPath\"\r\n [attr.stroke]=\"activeColors.dark\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <circle\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.cx]=\"dotBasePos.x\" [attr.cy]=\"dotBasePos.y\"\r\n r=\"7\" [attr.fill]=\"activeColors.dark\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowGauge)\"/>\r\n\r\n <circle\r\n [style.display]=\"dotTotalVisible ? '' : 'none'\"\r\n [attr.cx]=\"dotTotalPos.x\" [attr.cy]=\"dotTotalPos.y\"\r\n r=\"6\" [attr.fill]=\"activeColors.light\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowGauge)\"/>\r\n\r\n <!-- <text\r\n [attr.x]=\"limitTextPos.x\" [attr.y]=\"limitTextPos.y\"\r\n font-family=\"DM Mono,monospace\" font-size=\"9\" font-weight=\"600\"\r\n fill=\"#8a8fa8\" text-anchor=\"middle\">\r\n {{ currency }}{{ limit }}\r\n </text> -->\r\n </svg>\r\n\r\n <!-- El color del monto cambia a rojo si supera el l\u00EDmite -->\r\n <div class=\"gauge-center gauge-center--gauge\">\r\n <div class=\"main-value\" [style.color]=\"totalAmount > limit ? activeColors.dark : '#1a1a2e'\">\r\n CPM <br>\r\n {{ currency }}{{ totalAmount | number:'1.2-2' }}\r\n </div>\r\n <div class=\"limit-label\">de {{ currency }}{{ limit | number:'1.2-2' }}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"legend\">\r\n <div class=\"legend-item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.dark\"></span>\r\n Real\r\n </div>\r\n <div class=\"legend-item\">\r\n <span class=\"dot\"\r\n [style.background]=\"activeColors.light\"\r\n [style.border]=\"'1.5px solid ' + activeColors.dark\">\r\n </span>\r\n Proyecci\u00F3n\r\n </div>\r\n <div class=\"legend-item\">\r\n <span class=\"dot\" style=\"background:#e8ecf5; border:1px solid #ccc\"></span>\r\n Disponible\r\n </div>\r\n </div>\r\n\r\n <!-- Sliders de prueba \u2014 solo en devMode -->\r\n <ng-container *ngIf=\"devMode\">\r\n <div class=\"divider\"></div>\r\n <div class=\"dev-badge\">Dev Mode</div>\r\n <div class=\"controls\">\r\n\r\n <div class=\"ctrl-row\">\r\n <div class=\"ctrl-header\">\r\n <span class=\"ctrl-label\">\r\n <span class=\"ctrl-label-dot\" [style.background]=\"activeColors.dark\"></span>\r\n Gasto real (consumido)\r\n </span>\r\n <span class=\"ctrl-val\" [style.color]=\"activeColors.dark\">\r\n {{ currency }}{{ sliderBase | number:'1.2-2' }}\r\n </span>\r\n </div>\r\n <div class=\"zones-bar\">\r\n <div style=\"background:#16a34a\"></div>\r\n <div style=\"background:#ca8a04\"></div>\r\n <div style=\"background:#ea580c\"></div>\r\n <div style=\"background:#dc2626\"></div>\r\n </div>\r\n <input type=\"range\" [min]=\"0\" [max]=\"sliderMax\" step=\"0.5\"\r\n [value]=\"sliderBase\" (input)=\"onDevBaseChange($event)\">\r\n </div>\r\n\r\n <div class=\"ctrl-row\">\r\n <div class=\"ctrl-header\">\r\n <span class=\"ctrl-label\">\r\n <span class=\"ctrl-label-dot\"\r\n [style.background]=\"activeColors.light\"\r\n [style.border]=\"'1px solid ' + activeColors.dark\"\r\n style=\"border-radius:50%\">\r\n </span>\r\n Proyecci\u00F3n (presupuesto)\r\n </span>\r\n <span class=\"ctrl-val\" [style.color]=\"activeColors.dark\">\r\n {{ currency }}{{ sliderProjected | number:'1.2-2' }}\r\n </span>\r\n </div>\r\n <div class=\"zones-bar\">\r\n <div style=\"background:#16a34a\"></div>\r\n <div style=\"background:#ca8a04\"></div>\r\n <div style=\"background:#ea580c\"></div>\r\n <div style=\"background:#dc2626\"></div>\r\n </div>\r\n <input type=\"range\" [min]=\"0\" [max]=\"sliderMax\" step=\"0.5\"\r\n [value]=\"sliderProjected\" (input)=\"onDevProjectedChange($event)\">\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #cpmLegend>\r\n <div class=\"legend-tooltip\">\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.dark\"></span>\r\n Real<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ baseAmount | number:'1.2-2' }}</span>\r\n </div>\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.light\"></span>\r\n Proyecci\u00F3n<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ projectedAmount | number:'1.2-2' }}</span>\r\n </div>\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" style=\"background:#e8ecf5\"></span>\r\n Disponible<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ (limit - totalAmount) | number:'1.2-2' }}</span>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [":host{display:inline-flex;flex-direction:column;align-items:center;font-family:\"DM Sans\",sans-serif}.card{background:#ffffff;border-radius:20px;padding:36px 40px 28px;width:340px;box-shadow:0 4px 32px #0000001a,0 1px 4px #0000000f;display:flex;flex-direction:column;align-items:center}.gauge-wrap{position:relative;width:220px;height:120px;overflow:visible}.gauge-svg{width:220px;height:135px;overflow:visible}.gauge-center{position:absolute;left:50%;transform:translate(-50%);text-align:center;pointer-events:none;white-space:nowrap}.gauge-center--cpm{bottom:15px}.gauge-center--gauge{bottom:-10px}.main-value{font-size:26px;font-weight:700;font-family:\"DM Mono\",monospace;letter-spacing:-.5px;color:#1a1a2e;line-height:1;transition:color .3s ease}.limit-label{font-size:12px;color:#8a8fa8;font-weight:400;margin-top:3px;font-family:\"DM Mono\",monospace}.legend{display:flex;grid-gap:14px;gap:14px;margin-top:22px;margin-bottom:6px;flex-wrap:wrap;justify-content:center}.legend-item{display:flex;align-items:center;grid-gap:6px;gap:6px;font-size:12px;color:#555;font-weight:500}.dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.divider{width:100%;height:1px;background:#f0f2f5;margin:14px 0 4px}.dev-badge{font-size:11px;font-weight:700;color:#7c3aed;background:#ede9fe;border-radius:6px;padding:3px 10px;margin-bottom:8px;letter-spacing:.3px}.controls{width:100%;display:flex;flex-direction:column;grid-gap:16px;gap:16px}.ctrl-row{display:flex;flex-direction:column;grid-gap:5px;gap:5px}.ctrl-header{display:flex;justify-content:space-between;align-items:center}.ctrl-label{font-size:12px;color:#8a8fa8;font-weight:500;display:flex;align-items:center;grid-gap:5px;gap:5px}.ctrl-label-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.ctrl-val{font-size:12px;font-family:\"DM Mono\",monospace;font-weight:600;color:#1a1a2e}.zones-bar{display:flex;border-radius:4px;overflow:hidden;height:3px;width:100%;margin-bottom:3px}.zones-bar div{flex:1}input[type=range]{appearance:none;width:100%;height:5px;border-radius:99px;background:#e2e6ef;outline:none;cursor:pointer}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:#16a34a;border:2.5px solid #fff;box-shadow:0 1px 8px #0003;cursor:grab;-webkit-transition:background .3s,transform .15s;transition:background .3s,transform .15s}input[type=range]::-webkit-slider-thumb:active{transform:scale(1.2);cursor:grabbing}input[type=range]::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:#16a34a;border:2.5px solid #fff;cursor:grab}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "number": i1.DecimalPipe } });
2278
+ LibeyNgCpmIndicatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: LibeyNgCpmIndicatorComponent, selector: "lib-libey-ng-cpm-indicator", inputs: { limit: "limit", items: "items", currency: "currency", thresholds: "thresholds", mode: "mode", devMode: "devMode", scale: "scale" }, outputs: { cpmChange: "cpmChange", limitExceeded: "limitExceeded", colorChange: "colorChange" }, viewQueries: [{ propertyName: "cpmLegend", first: true, predicate: ["cpmLegend"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- Modo CPM: solo el gauge con \"CPM\" en el centro -->\r\n<ng-container *ngIf=\"mode === CpmIndicatorMode.Cpm\">\r\n <div class=\"gauge-wrap\" [style.width.px]=\"220 * scale\" [style.height.px]=\"120 * scale\">\r\n <svg class=\"gauge-svg\" viewBox=\"0 0 220 130\" xmlns=\"http://www.w3.org/2000/svg\"\r\n [style.width.px]=\"220 * scale\"\r\n [style.height.px]=\"135 * scale\">\r\n <defs>\r\n <filter id=\"dotShadowCpm\" x=\"-60%\" y=\"-60%\" width=\"220%\" height=\"220%\">\r\n <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"2\" flood-color=\"rgba(0,0,0,0.22)\"/>\r\n </filter>\r\n </defs>\r\n\r\n <path [attr.d]=\"trackArcPath\" fill=\"none\" stroke=\"#E8EAEF\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <!-- Proyecci\u00F3n debajo, real encima -->\r\n <path\r\n [style.display]=\"totalAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"totalArcPath\"\r\n [attr.stroke]=\"activeColors.light\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <path\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"baseArcPath\"\r\n [attr.stroke]=\"activeColors.dark\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <circle\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.cx]=\"dotBasePos.x\" [attr.cy]=\"dotBasePos.y\"\r\n r=\"7\" [attr.fill]=\"activeColors.dark\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowCpm)\"/>\r\n\r\n <!-- Solo visible si la proyecci\u00F3n va por delante del real -->\r\n <circle\r\n [style.display]=\"dotTotalVisible ? '' : 'none'\"\r\n [attr.cx]=\"dotTotalPos.x\" [attr.cy]=\"dotTotalPos.y\"\r\n r=\"6\" [attr.fill]=\"activeColors.light\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowCpm)\"/>\r\n </svg>\r\n\r\n <div class=\"gauge-center gauge-center--cpm\" [style.bottom.px]=\"15 * scale\">\r\n <div class=\"main-value\" [style.font-size.px]=\"26 * scale\">CPM</div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n\r\n<!-- Modo Gauge: gauge completo con montos, leyenda y alerta -->\r\n<ng-container *ngIf=\"mode === CpmIndicatorMode.Gauge\">\r\n <div class=\"gauge-wrap\" [style.width.px]=\"220 * scale\" [style.height.px]=\"120 * scale\">\r\n <svg class=\"gauge-svg\" viewBox=\"0 0 220 130\" xmlns=\"http://www.w3.org/2000/svg\"\r\n [style.width.px]=\"220 * scale\"\r\n [style.height.px]=\"135 * scale\">\r\n <defs>\r\n <filter id=\"dotShadowGauge\" x=\"-60%\" y=\"-60%\" width=\"220%\" height=\"220%\">\r\n <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"2\" flood-color=\"rgba(0,0,0,0.22)\"/>\r\n </filter>\r\n </defs>\r\n\r\n <path [attr.d]=\"trackArcPath\" fill=\"none\" stroke=\"#E8EAEF\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <!-- Proyecci\u00F3n debajo, real encima -->\r\n <path\r\n [style.display]=\"totalAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"totalArcPath\"\r\n [attr.stroke]=\"activeColors.light\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <path\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.d]=\"baseArcPath\"\r\n [attr.stroke]=\"activeColors.dark\"\r\n fill=\"none\" stroke-width=\"14\" stroke-linecap=\"round\"/>\r\n\r\n <circle\r\n [style.display]=\"baseAmount > 0 ? '' : 'none'\"\r\n [attr.cx]=\"dotBasePos.x\" [attr.cy]=\"dotBasePos.y\"\r\n r=\"7\" [attr.fill]=\"activeColors.dark\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowGauge)\"/>\r\n\r\n <circle\r\n [style.display]=\"dotTotalVisible ? '' : 'none'\"\r\n [attr.cx]=\"dotTotalPos.x\" [attr.cy]=\"dotTotalPos.y\"\r\n r=\"6\" [attr.fill]=\"activeColors.light\"\r\n stroke=\"#ffffff\" stroke-width=\"2.5\"\r\n filter=\"url(#dotShadowGauge)\"/>\r\n\r\n <!-- <text\r\n [attr.x]=\"limitTextPos.x\" [attr.y]=\"limitTextPos.y\"\r\n font-family=\"DM Mono,monospace\" font-size=\"9\" font-weight=\"600\"\r\n fill=\"#8a8fa8\" text-anchor=\"middle\">\r\n {{ currency }}{{ limit }}\r\n </text> -->\r\n </svg>\r\n\r\n <!-- El color del monto cambia a rojo si supera el l\u00EDmite -->\r\n <div class=\"gauge-center gauge-center--gauge\" [style.bottom.px]=\"-10 * scale\">\r\n <div class=\"main-value\"\r\n [style.font-size.px]=\"26 * scale\"\r\n [style.color]=\"totalAmount > limit ? activeColors.dark : '#1a1a2e'\">\r\n CPM<br>\r\n {{ currency }}{{ totalAmount | number:'1.2-2' }}\r\n </div>\r\n <div class=\"limit-label\" [style.font-size.px]=\"16 * scale\">\r\n de {{ currency }}{{ limit | number:'1.2-2' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"legend\">\r\n <div class=\"legend-item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.dark\"></span>\r\n Real\r\n </div>\r\n <div class=\"legend-item\">\r\n <span class=\"dot\"\r\n [style.background]=\"activeColors.light\"\r\n [style.border]=\"'1.5px solid ' + activeColors.dark\">\r\n </span>\r\n Proyecci\u00F3n\r\n </div>\r\n <div class=\"legend-item\">\r\n <span class=\"dot\" style=\"background:#e8ecf5; border:1px solid #ccc\"></span>\r\n Disponible\r\n </div>\r\n </div>\r\n\r\n <!-- Sliders de prueba \u2014 solo en devMode -->\r\n <ng-container *ngIf=\"devMode\">\r\n <div class=\"divider\"></div>\r\n <div class=\"dev-badge\">Dev Mode</div>\r\n <div class=\"controls\">\r\n\r\n <div class=\"ctrl-row\">\r\n <div class=\"ctrl-header\">\r\n <span class=\"ctrl-label\">\r\n <span class=\"ctrl-label-dot\" [style.background]=\"activeColors.dark\"></span>\r\n Gasto real (consumido)\r\n </span>\r\n <span class=\"ctrl-val\" [style.color]=\"activeColors.dark\">\r\n {{ currency }}{{ sliderBase | number:'1.2-2' }}\r\n </span>\r\n </div>\r\n <div class=\"zones-bar\">\r\n <div style=\"background:#16a34a\"></div>\r\n <div style=\"background:#ca8a04\"></div>\r\n <div style=\"background:#ea580c\"></div>\r\n <div style=\"background:#dc2626\"></div>\r\n </div>\r\n <input type=\"range\" [min]=\"0\" [max]=\"sliderMax\" step=\"0.5\"\r\n [value]=\"sliderBase\" (input)=\"onDevBaseChange($event)\">\r\n </div>\r\n\r\n <div class=\"ctrl-row\">\r\n <div class=\"ctrl-header\">\r\n <span class=\"ctrl-label\">\r\n <span class=\"ctrl-label-dot\"\r\n [style.background]=\"activeColors.light\"\r\n [style.border]=\"'1px solid ' + activeColors.dark\"\r\n style=\"border-radius:50%\">\r\n </span>\r\n Proyecci\u00F3n (presupuesto)\r\n </span>\r\n <span class=\"ctrl-val\" [style.color]=\"activeColors.dark\">\r\n {{ currency }}{{ sliderProjected | number:'1.2-2' }}\r\n </span>\r\n </div>\r\n <div class=\"zones-bar\">\r\n <div style=\"background:#16a34a\"></div>\r\n <div style=\"background:#ca8a04\"></div>\r\n <div style=\"background:#ea580c\"></div>\r\n <div style=\"background:#dc2626\"></div>\r\n </div>\r\n <input type=\"range\" [min]=\"0\" [max]=\"sliderMax\" step=\"0.5\"\r\n [value]=\"sliderProjected\" (input)=\"onDevProjectedChange($event)\">\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #cpmLegend>\r\n <div class=\"legend-tooltip\">\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.dark\"></span>\r\n Real<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ baseAmount | number:'1.2-2' }}</span>\r\n </div>\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" [style.background]=\"activeColors.light\"></span>\r\n Proyecci\u00F3n<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ projectedAmount | number:'1.2-2' }}</span>\r\n </div>\r\n <div class=\"legend-tooltip__item\">\r\n <span class=\"dot\" style=\"background:#e8ecf5\"></span>\r\n Disponible<span *ngIf=\"mode === CpmIndicatorMode.Gauge\">: {{ currency }}{{ (limit - totalAmount) | number:'1.2-2' }}</span>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [":host{display:inline-flex;flex-direction:column;align-items:center;font-family:\"DM Sans\",sans-serif}.card{background:#ffffff;border-radius:20px;padding:36px 40px 28px;width:340px;box-shadow:0 4px 32px #0000001a,0 1px 4px #0000000f;display:flex;flex-direction:column;align-items:center}.gauge-wrap{position:relative;overflow:visible}.gauge-svg{overflow:visible}.gauge-center{position:absolute;left:50%;transform:translate(-50%);text-align:center;pointer-events:none;white-space:nowrap}.gauge-center--cpm{bottom:15px}.gauge-center--gauge{bottom:-10px}.main-value{font-size:26px;font-weight:700;font-family:\"DM Mono\",monospace;letter-spacing:-.5px;color:#1a1a2e;line-height:1;transition:color .3s ease}.limit-label{font-size:12px;color:#8a8fa8;font-weight:400;margin-top:3px;font-family:\"DM Mono\",monospace}.legend{display:flex;grid-gap:14px;gap:14px;margin-top:22px;margin-bottom:6px;flex-wrap:wrap;justify-content:center}.legend-item{display:flex;align-items:center;grid-gap:6px;gap:6px;font-size:12px;color:#555;font-weight:500}.dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.divider{width:100%;height:1px;background:#f0f2f5;margin:14px 0 4px}.dev-badge{font-size:11px;font-weight:700;color:#7c3aed;background:#ede9fe;border-radius:6px;padding:3px 10px;margin-bottom:8px;letter-spacing:.3px}.controls{width:100%;display:flex;flex-direction:column;grid-gap:16px;gap:16px}.ctrl-row{display:flex;flex-direction:column;grid-gap:5px;gap:5px}.ctrl-header{display:flex;justify-content:space-between;align-items:center}.ctrl-label{font-size:12px;color:#8a8fa8;font-weight:500;display:flex;align-items:center;grid-gap:5px;gap:5px}.ctrl-label-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.ctrl-val{font-size:12px;font-family:\"DM Mono\",monospace;font-weight:600;color:#1a1a2e}.zones-bar{display:flex;border-radius:4px;overflow:hidden;height:3px;width:100%;margin-bottom:3px}.zones-bar div{flex:1}input[type=range]{appearance:none;width:100%;height:5px;border-radius:99px;background:#e2e6ef;outline:none;cursor:pointer}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:#16a34a;border:2.5px solid #fff;box-shadow:0 1px 8px #0003;cursor:grab;-webkit-transition:background .3s,transform .15s;transition:background .3s,transform .15s}input[type=range]::-webkit-slider-thumb:active{transform:scale(1.2);cursor:grabbing}input[type=range]::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:#16a34a;border:2.5px solid #fff;cursor:grab}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "number": i1.DecimalPipe } });
2271
2279
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LibeyNgCpmIndicatorComponent, decorators: [{
2272
2280
  type: Component,
2273
2281
  args: [{
@@ -2294,6 +2302,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
2294
2302
  }], cpmLegend: [{
2295
2303
  type: ViewChild,
2296
2304
  args: ['cpmLegend']
2305
+ }], colorChange: [{
2306
+ type: Output
2307
+ }], scale: [{
2308
+ type: Input
2297
2309
  }] } });
2298
2310
 
2299
2311
  class LibeyNgCpmIndicatorModule {