@ruc-lib/knob 2.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +158 -84
- package/fesm2022/ruc-lib-knob.mjs +595 -0
- package/fesm2022/ruc-lib-knob.mjs.map +1 -0
- package/index.d.ts +436 -3
- package/package.json +13 -20
- package/esm2020/index.mjs +0 -4
- package/esm2020/lib/ruclib-knob/ruclib-knob.component.mjs +0 -544
- package/esm2020/lib/ruclib-knob.module.mjs +0 -37
- package/esm2020/models/knob-config.model.mjs +0 -33
- package/esm2020/models/knob.interface.mjs +0 -3
- package/esm2020/ruc-lib-knob.mjs +0 -5
- package/fesm2015/ruc-lib-knob.mjs +0 -622
- package/fesm2015/ruc-lib-knob.mjs.map +0 -1
- package/fesm2020/ruc-lib-knob.mjs +0 -618
- package/fesm2020/ruc-lib-knob.mjs.map +0 -1
- package/lib/ruclib-knob/ruclib-knob.component.d.ts +0 -275
- package/lib/ruclib-knob.module.d.ts +0 -11
- package/models/knob-config.model.d.ts +0 -32
- package/models/knob.interface.d.ts +0 -32
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ruc-lib-knob.mjs","sources":["../../../../../libs/ruclib/knob/src/models/knob-config.model.ts","../../../../../libs/ruclib/knob/src/lib/ruclib-knob/ruclib-knob.component.ts","../../../../../libs/ruclib/knob/src/lib/ruclib-knob/ruclib-knob.component.html","../../../../../libs/ruclib/knob/src/lib/ruclib-knob.module.ts","../../../../../libs/ruclib/knob/src/models/knob.interface.ts","../../../../../libs/ruclib/knob/src/ruc-lib-knob.ts"],"sourcesContent":["export const DefaultKnobConfig = {\r\n min:<number> 0,\r\n max:<number> 100,\r\n step:<number> 1,\r\n size:<number> 150,\r\n valueColor:<string> '',\r\n strokeBackground:<string> 'lightblue',\r\n progressBackground: <string | string[]> 'blue', // 'green' | ['green'] | ['red', 'blue', 'green', 'black', 'orange'],\r\n strokeWidth:<number> 15,\r\n valueSize:<number> 20,\r\n valueWeight:<string> 'normal',\r\n showHandle:<boolean> true,\r\n handleBackground:<string> 'lightblue',\r\n handleBorderColor:<string> 'blue',\r\n handleBorderWidth:<number> 4,\r\n roundedCorner:<boolean> true,\r\n valuePrefix:<string> '',\r\n valueSuffix:<string> '',\r\n readOnly:<boolean> false,\r\n disabled:<boolean> false,\r\n enableTooltip:<boolean> false,\r\n animateOnHover:<boolean> false,\r\n isRangeMode:<boolean> false,\r\n rangeStartValue:<number> 25,\r\n rangeEndValue:<number> 75,\r\n showButtons:<boolean> false,\r\n knobType:<'horizontal' | 'vertical' | 'arc'> 'arc' // 'horizontal' | 'vertical' | 'arc'\r\n }\r\n\r\n export const DEFAULT_LABELS = {\r\n incrementButton:<string> 'Increment Value',\r\n decrementButton:<string> 'Decrement Value'\r\n }","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { KnobConfig } from '../../models/knob.interface';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { DEFAULT_LABELS, DefaultKnobConfig } from '../../models/knob-config.model';\r\n\r\n@Component({\r\n selector: 'uxp-ruclib-knob',\r\n templateUrl: './ruclib-knob.component.html',\r\n styleUrls: ['./ruclib-knob.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RuclibKnobComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class RuclibKnobComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnChanges {\r\n\r\n @ViewChild('bgArc') bgArcRef!: ElementRef<SVGPathElement>;\r\n @ViewChild('progressArc') progressArcRef!: ElementRef<SVGPathElement>;\r\n @ViewChild('handle') handleRef!: ElementRef<SVGCircleElement>;\r\n @ViewChild('horizontalLine') horizontalLineRef!: ElementRef<SVGLineElement>;\r\n @ViewChild('verticalLine') verticalLineRef!: ElementRef<SVGLineElement>;\r\n\r\n @Output() rucEvent = new EventEmitter<any>();\r\n\r\n @Input() customTheme?: string = '';\r\n @Input() rucInputData!: KnobConfig;\r\n\r\n activeHandle: 'start' | 'end' | '' = '';\r\n value: number = 0;\r\n dragging:boolean = false;\r\n centerX:number = 0;\r\n centerY:number = 0;\r\n radius:number = 0;\r\n startAngle:number = 210;\r\n endAngle:number = 510;\r\n arcLength:number = 300;\r\n changeColorAfter:number = 0;\r\n tooltipX:number = 0;\r\n tooltipY:number = 0;\r\n showTooltip: boolean = false;\r\n hovering:boolean = false;\r\n\r\n config = DefaultKnobConfig;\r\n\r\n private onTouched = () => { };\r\n private onChange = (value: number) => { };\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n }\r\n\r\n /**\r\n * handling form control binding to write value\r\n * @param val \r\n */\r\n writeValue(val: number): void {\r\n this.value = val;\r\n }\r\n\r\n /**\r\n * registering onChange method to use as form control\r\n * @param fn \r\n */\r\n registerOnChange(fn: () => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n /**\r\n * registering onTouch method to use as form control\r\n * @param fn \r\n */\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n /**\r\n * registering disabled state\r\n * @param isDisabled \r\n */\r\n setDisabledState(isDisabled: boolean): void {\r\n this.config.disabled = isDisabled;\r\n }\r\n\r\n /**\r\n * handling input data changes\r\n * updating default config with user provided config\r\n * @param changes \r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes && changes['rucInputData'] && changes['rucInputData'].currentValue) {\r\n this.config = { ...this.config, ...changes['rucInputData'].currentValue }\r\n }\r\n }\r\n\r\n /**\r\n * handling change on component initilization\r\n */\r\n ngOnInit() {\r\n this.adjustDefaultValue();\r\n if (this.config.knobType != 'arc') {\r\n this.config.isRangeMode = false;\r\n this.config.enableTooltip = false;\r\n }\r\n if (Array.isArray(this.config.progressBackground)) {\r\n this.changeColorAfter = Math.round(100 / this.config.progressBackground.length);\r\n }\r\n }\r\n\r\n /**\r\n * handling change after view initilization\r\n */\r\n ngAfterViewInit() {\r\n this.centerX = this.config.size / 2;\r\n this.centerY = this.config.size / 2;\r\n this.radius = this.config.size / 2 - 20;\r\n\r\n this.bgArcRef?.nativeElement.setAttribute('d',\r\n this.describeArc(this.centerX, this.centerY, this.radius, this.startAngle, this.endAngle));\r\n this.updateArc();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * handling change when dragin on svg\r\n * @returns \r\n */\r\n startDrag() {\r\n if (this.config.disabled || this.config.readOnly) return;\r\n this.dragging = true;\r\n this.showTooltip = true;\r\n this.rucEvent.emit({ eventName: 'dragStart', eventOutput: { value: this.getEventOutput() } })\r\n }\r\n\r\n /**\r\n * rounding value to increment or decrement based on provide config value for step\r\n * @param value \r\n * @returns \r\n */\r\n roundToStep(value: number): number {\r\n const stepped = Math.round((value - this.config.min) / this.config.step) * this.config.step + this.config.min;\r\n return this.clamp(stepped, this.config.min, this.config.max);\r\n }\r\n\r\n /**\r\n * adjusting default value within min & max value when its provide out of range\r\n */\r\n adjustDefaultValue() {\r\n if (this.value < this.config.min) {\r\n this.value = this.config.min;\r\n }\r\n if (this.value > this.config.max) {\r\n this.value = this.config.max;\r\n }\r\n if (this.config.isRangeMode) {\r\n if (this.config.rangeStartValue < this.config.min || this.config.rangeStartValue > this.config.max) {\r\n this.config.rangeStartValue = this.config.min;\r\n }\r\n if (this.config.rangeEndValue > this.config.max || this.config.rangeEndValue < this.config.min) {\r\n this.config.rangeEndValue = this.config.max;\r\n }\r\n }\r\n this.updateArc();\r\n }\r\n\r\n /**\r\n * handle changes on mouseUp and touchEnd event\r\n */\r\n @HostListener('window:mouseup')\r\n @HostListener('window:touchend')\r\n stopDrag() {\r\n this.dragging = false;\r\n this.showTooltip = false;\r\n this.rucEvent.emit({ eventName: 'dragEnd', eventOutput: { value: this.getEventOutput() } })\r\n }\r\n\r\n /**\r\n * handle changes on mouseMove and touch event\r\n * @param event \r\n * @returns \r\n */\r\n @HostListener('window:mousemove', ['$event'])\r\n @HostListener('window:touchmove', ['$event'])\r\n onMove(event: MouseEvent | TouchEvent) {\r\n if (this.config.disabled || this.config.readOnly || !this.dragging) return;\r\n event.preventDefault();\r\n this.setProgressFromEvent(event);\r\n }\r\n\r\n /**\r\n * handling change on main svg click\r\n * @param event \r\n * @returns \r\n */\r\n onSvgClick(event: MouseEvent | TouchEvent) {\r\n if (this.config.disabled || this.config.readOnly || this.config.isRangeMode) return;\r\n this.setProgressFromEvent(event);\r\n }\r\n\r\n /**\r\n * get ref of active svg element for different type of knobs\r\n * @returns \r\n */\r\n getTargetSvg(): SVGElement | null {\r\n if (this.config.knobType === 'horizontal') {\r\n return this.horizontalLineRef.nativeElement.closest('svg');\r\n } else\r\n if (this.config.knobType === 'vertical') {\r\n return this.verticalLineRef.nativeElement.closest('svg');\r\n }\r\n return this.bgArcRef.nativeElement.closest('svg');\r\n\r\n }\r\n\r\n /**\r\n * updating progrees value while dragging the handle on stroke bar\r\n * @param e \r\n * @returns \r\n */\r\n setProgressFromEvent(e: MouseEvent | TouchEvent) {\r\n const svg = this.getTargetSvg();\r\n if (!svg) {\r\n return;\r\n }\r\n const rect = svg.getBoundingClientRect();\r\n const clientX = (e instanceof TouchEvent) ? e.touches[0].clientX : e.clientX;\r\n const clientY = (e instanceof TouchEvent) ? e.touches[0].clientY : e.clientY;\r\n\r\n const x = clientX - rect.left;\r\n const y = clientY - rect.top;\r\n\r\n let rawPercent: number;\r\n if (this.config.knobType === 'horizontal') {\r\n const usableWidth = this.config.size - 2 * this.config.strokeWidth;\r\n rawPercent = ((x - this.config.strokeWidth) / usableWidth) * 100;\r\n } else if (this.config.knobType === 'vertical') {\r\n const usableHeight = this.config.size - 2 * this.config.strokeWidth;\r\n rawPercent = (1 - (y - this.config.strokeWidth) / usableHeight) * 100;\r\n } else {\r\n const angle = this.getAngleFromPoint(x, y);\r\n if (angle === null) return;\r\n rawPercent = ((angle - this.startAngle) / this.arcLength) * 100;\r\n }\r\n\r\n const clampedPercent = this.clamp(rawPercent, 0, 100);\r\n let absolutePercent = this.config.min + (clampedPercent / 100) * (this.config.max - this.config.min);\r\n absolutePercent = this.roundToStep(absolutePercent);\r\n\r\n if (this.config.isRangeMode) {\r\n if (this.activeHandle === 'start') {\r\n if (absolutePercent > this.config.rangeEndValue) {\r\n absolutePercent = this.config.rangeEndValue;\r\n }\r\n this.config.rangeStartValue = absolutePercent;\r\n } else {\r\n if (absolutePercent < this.config.rangeStartValue) {\r\n absolutePercent = this.config.rangeStartValue;\r\n }\r\n this.config.rangeEndValue = absolutePercent;\r\n }\r\n this.rucEvent.emit({ eventName: 'valueChange', eventOutput: { start: this.config.rangeStartValue, end: this.config.rangeEndValue } })\r\n } else {\r\n this.value = absolutePercent;\r\n this.rucEvent.emit({ eventName: 'valueChange', eventOutput: this.value });\r\n }\r\n\r\n this.updateArc();\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * updating svg progress based on value changes\r\n * @returns \r\n */\r\n updateArc() {\r\n if (this.config.knobType !== 'arc') {\r\n return\r\n }\r\n\r\n const scaled = (this.value - this.config.min) / (this.config.max - this.config.min);\r\n const angle = this.startAngle + scaled * this.arcLength;\r\n\r\n const path = this.describeArc(this.centerX, this.centerY, this.radius, this.startAngle, angle);\r\n this.progressArcRef?.nativeElement.setAttribute('d', path);\r\n\r\n const pos = this.polarToCartesian(this.centerX, this.centerY, this.radius, angle);\r\n this.handleRef?.nativeElement.setAttribute('cx', pos.x.toString());\r\n this.handleRef?.nativeElement.setAttribute('cy', pos.y.toString());\r\n\r\n // for tooltip\r\n const angleRad = (angle - 90) * Math.PI / 180;\r\n const tooltipRadius = this.radius + this.config.strokeWidth / 2 + 10;\r\n this.tooltipX = this.centerX + tooltipRadius * Math.cos(angleRad);\r\n this.tooltipY = this.centerY + tooltipRadius * Math.sin(angleRad);\r\n }\r\n\r\n /**\r\n * return maximum value out of min & max range\r\n * @param val \r\n * @param min \r\n * @param max \r\n * @returns \r\n */\r\n clamp(val: number, min: number, max: number): number {\r\n return Math.max(min, Math.min(max, val));\r\n }\r\n\r\n /**\r\n * getting calulated point from polar coordinates to cartesian coordinates\r\n * @param cx \r\n * @param cy \r\n * @param r \r\n * @param angleDeg \r\n * @returns \r\n */\r\n polarToCartesian(cx: number, cy: number, r: number, angleDeg: number) {\r\n const angleRad = (angleDeg - 90) * Math.PI / 180;\r\n return {\r\n x: cx + r * Math.cos(angleRad),\r\n y: cy + r * Math.sin(angleRad)\r\n };\r\n }\r\n\r\n /**\r\n * getting radius for arc handle based on stroke width \r\n * @returns \r\n */\r\n getRadius() {\r\n return this.config.strokeWidth ? (this.config.strokeWidth / 2) - ((this.config.handleBorderWidth ?? 0) / 2) : 4;\r\n }\r\n\r\n /**\r\n * getting svg box size based on different knob shapes\r\n * @returns \r\n */\r\n getSvgViewBoxSize() {\r\n let width = this.config.size, height = this.config.size;\r\n if (this.config.knobType === 'horizontal') {\r\n height = this.config.strokeWidth + 40;\r\n }\r\n if (this.config.knobType === 'vertical') {\r\n height = this.config.size / 4 + 5\r\n width = this.config.strokeWidth + 40;\r\n }\r\n return '0 0 ' + width + ' ' + height\r\n }\r\n\r\n /**\r\n * geeting dynamic bg color for progress stroke based on provide config for \"progressBackground\"\r\n */\r\n get progressColor(): string {\r\n if (typeof this.config.progressBackground === 'string') {\r\n return this.config.progressBackground;\r\n } else\r\n if ((this.config.progressBackground as string[])?.length == 1) {\r\n return this.config.progressBackground[0];\r\n } else\r\n if ((this.config.progressBackground as string[]).length > 1) {\r\n return this.config.progressBackground[Math.ceil(this.value / this.changeColorAfter) - 1]\r\n } else {\r\n return 'green'\r\n }\r\n }\r\n\r\n /**\r\n * getting coordinates for arc based on provided inputs\r\n * @param cx \r\n * @param cy \r\n * @param r \r\n * @param start \r\n * @param end \r\n * @returns \r\n */\r\n describeArc(cx: number, cy: number, r: number, start: number, end: number): string {\r\n const startPos = this.polarToCartesian(cx, cy, r, end);\r\n const endPos = this.polarToCartesian(cx, cy, r, start);\r\n const largeArc = end - start <= 180 ? 0 : 1;\r\n\r\n return [\r\n \"M\", startPos.x, startPos.y,\r\n \"A\", r, r, 0, largeArc, 0, endPos.x, endPos.y\r\n ].join(\" \");\r\n }\r\n\r\n /**\r\n * getting calculated angle for arc progress based on provided input\r\n * @param x \r\n * @param y \r\n * @returns \r\n */\r\n getAngleFromPoint(x: number, y: number): number | null {\r\n const dx = x - this.centerX;\r\n if (dx === 0) {\r\n return null;\r\n }\r\n const dy = y - this.centerY;\r\n\r\n let angle = Math.atan2(dy, dx) * 180 / Math.PI + 90;\r\n if (angle < 0) angle += 360;\r\n\r\n const normalizedStart = this.startAngle % 360;\r\n let delta = angle - normalizedStart;\r\n if (delta < 0) delta += 360;\r\n\r\n if (delta > this.arcLength) return null;\r\n\r\n return this.startAngle + delta;\r\n }\r\n\r\n /**\r\n * increment value on click on button\r\n * @returns \r\n */\r\n increment() {\r\n if (this.config.disabled || this.config.readOnly) return;\r\n this.value = this.clamp((this.value + this.config.step), this.config.min, this.config.max);\r\n this.updateArc();\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * decrement value on click on button\r\n * @returns \r\n */\r\n decrement() {\r\n if (this.config.disabled || this.config.readOnly) return;\r\n this.value = this.clamp((this.value - this.config.step), this.config.min, this.config.max);\r\n this.updateArc();\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n /**\r\n * change value using arrow keys for accessibility\r\n * @param event \r\n * @returns \r\n */\r\n onKeyDown(event: KeyboardEvent) {\r\n if (this.config.readOnly || this.config.disabled) return;\r\n\r\n if (event.key === 'ArrowRight' || event.key === 'ArrowUp') {\r\n this.increment();\r\n event.preventDefault();\r\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') {\r\n this.decrement();\r\n event.preventDefault();\r\n }\r\n }\r\n /**\r\n * geeting arc coordinated for range selection mode\r\n * @returns \r\n */\r\n getRangeArcPath(): string {\r\n const startAngle = this.startAngle + (this.config.rangeStartValue / (this.config.max - this.config.min)) * (this.endAngle - this.startAngle);\r\n const endAngle = this.startAngle + (this.config.rangeEndValue / (this.config.max - this.config.min)) * (this.endAngle - this.startAngle);\r\n return this.describeArc(this.centerX, this.centerY, this.radius, startAngle, endAngle);\r\n }\r\n\r\n /**\r\n * handling mousedown when range mode is enabled \r\n * @param event \r\n * @param handleType \r\n * @returns \r\n */\r\n onHandleMouseDown(event: MouseEvent, handleType: 'start' | 'end') {\r\n if (this.config.disabled || this.config.readOnly) return;\r\n this.activeHandle = handleType;\r\n this.startDrag();\r\n }\r\n\r\n /**\r\n * getting x & y to update handle position when dragging\r\n * @param value \r\n * @returns \r\n */\r\n getHandlePosition(value: number): { x: number, y: number } {\r\n const scaled = (value - this.config.min) / (this.config.max - this.config.min);\r\n const angle = this.startAngle + scaled * this.arcLength;\r\n const pos = this.polarToCartesian(this.centerX, this.centerY, this.radius, angle);\r\n return pos;\r\n }\r\n\r\n /**\r\n * geeting handle position for horizontal line\r\n * @param value \r\n * @returns \r\n */\r\n getHorizontalHandleX(value: number): number {\r\n const usableWidth = this.config.size - 2 * this.config.strokeWidth;\r\n const ratio = (value - this.config.min) / (this.config.max - this.config.min);\r\n return this.config.strokeWidth + usableWidth * ratio;\r\n }\r\n\r\n /**\r\n * geeting start position for horizontal line\r\n * @param value \r\n * @returns \r\n */\r\n getHorizontalLineStartX(): number {\r\n return this.getHorizontalHandleX(this.config.isRangeMode ? this.config.rangeStartValue : this.config.min);\r\n }\r\n\r\n /**\r\n * geeting end position for horizontal line\r\n * @param value \r\n * @returns \r\n */\r\n getHorizontalLineEndX(): number {\r\n return this.getHorizontalHandleX(this.config.isRangeMode ? this.config.rangeEndValue : this.value);\r\n }\r\n\r\n /**\r\n * geeting handle position for vertical line\r\n * @param value \r\n * @returns \r\n */\r\n getVerticalHandleY(value: number): number {\r\n const usableHeight = this.config.size - 2 * this.config.strokeWidth;\r\n const ratio = 1 - (value - this.config.min) / (this.config.max - this.config.min);\r\n return this.config.strokeWidth + usableHeight * ratio;\r\n }\r\n\r\n /**\r\n * geeting start position for vertical line\r\n * @param value \r\n * @returns \r\n */\r\n getVerticalLineStartY(): number {\r\n return this.getVerticalHandleY(this.config.isRangeMode ? this.config.rangeEndValue : this.value);\r\n }\r\n\r\n /**\r\n * get output to be emitted based on range mode\r\n * @returns \r\n */\r\n getEventOutput() {\r\n if (this.config.isRangeMode) {\r\n return { start: this.config.rangeStartValue, end: this.config.rangeEndValue };\r\n }\r\n return this.value;\r\n }\r\n\r\n /**\r\n * get correct page label from object\r\n * @param labelName \r\n * @returns string\r\n */\r\n getLabel(labelName: string): string {\r\n return (DEFAULT_LABELS as any)[labelName] || '';\r\n }\r\n\r\n\r\n // component end\r\n}\r\n","<div class=\"knob-container {{customTheme}}\" [style.width.px]=\"config.size\">\r\n <svg [ngClass]=\"{ 'hover-animate': config.animateOnHover }\" [attr.viewBox]=\"getSvgViewBoxSize()\"\r\n (click)=\"onSvgClick($event)\" [style.cursor]=\"(config.readOnly || config.disabled) ? 'not-allowed' : 'pointer'\"\r\n [class.disabled]=\"config.disabled\" [class.read-only]=\"config.readOnly\"\r\n (mouseenter)=\"showTooltip = true; hovering=true; rucEvent.emit({eventName: 'hover'})\"\r\n (mouseleave)=\"showTooltip = false; hovering=false\" (focus)=\"rucEvent.emit({eventName: 'focus'})\"\r\n (blur)=\"rucEvent.emit({eventName: 'blur'})\" (keydown)=\"onKeyDown($event)\" [attr.role]=\"'slider'\"\r\n [attr.aria-valuemin]=\"config.min\" [attr.aria-valuemax]=\"config.max\" [attr.aria-valuenow]=\"value\"\r\n [attr.aria-disabled]=\"config.disabled\" [ngSwitch]=\"config.knobType\">\r\n\r\n <!-- arc knob -->\r\n <ng-container *ngSwitchCase=\"'arc'\">\r\n\r\n <!-- glow effect -->\r\n <defs>\r\n <filter id=\"glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\r\n <feDropShadow dx=\"0\" dy=\"0\" stdDeviation=\"4\" [attr.flood-color]=\"config.strokeBackground\"\r\n flood-opacity=\"0.75\" />\r\n </filter>\r\n </defs>\r\n\r\n <!-- arc main stroke -->\r\n <path #bgArc fill=\"none\" class=\"main-path\" [attr.stroke]=\"config.strokeBackground\"\r\n [attr.stroke-width]=\"config.strokeWidth\" [attr.stroke-linecap]=\"config.roundedCorner ? 'round' : ''\" />\r\n\r\n <!-- arc progress stroke - single handle -->\r\n <path *ngIf=\"!config.isRangeMode\" #progressArc fill=\"none\" class=\"progress-path\" [attr.stroke]=\"progressColor\"\r\n [attr.stroke-width]=\"config.strokeWidth\" [attr.stroke-linecap]=\"config.roundedCorner ? 'round' : ''\" />\r\n\r\n <!-- arc - single handle -->\r\n <circle *ngIf=\"!config.isRangeMode\" #handle class=\"handle\" [attr.r]=\"getRadius()\"\r\n [attr.fill]=\"config.showHandle ? config.handleBackground : 'transparent'\"\r\n [attr.stroke-width]=\"config.showHandle ? config.handleBorderWidth : 0\"\r\n [attr.stroke]=\"config.showHandle ? config.handleBorderColor : 'transparent'\" (mousedown)=\"startDrag()\"\r\n (touchstart)=\"startDrag()\" />\r\n\r\n <!-- arc progress stroke - dual handle for range -->\r\n <path *ngIf=\"config.isRangeMode\" [attr.d]=\"getRangeArcPath()\" [attr.stroke]=\"progressColor\"\r\n [attr.stroke-width]=\"config.strokeWidth\" fill=\"none\" stroke-linecap=\"round\" />\r\n\r\n <!-- arc dual handle - start -->\r\n <circle *ngIf=\"config.isRangeMode\" [attr.cx]=\"getHandlePosition(config.rangeStartValue).x\"\r\n [attr.cy]=\"getHandlePosition(config.rangeStartValue).y\" [attr.r]=\"getRadius()\"\r\n [attr.fill]=\"config.handleBackground\" [attr.stroke-width]=\"config.handleBorderWidth\"\r\n [attr.stroke]=\"config.handleBorderColor\" (mousedown)=\"onHandleMouseDown($event, 'start')\" />\r\n\r\n <!-- arc dual handle - end -->\r\n <circle *ngIf=\"config.isRangeMode\" [attr.cx]=\"getHandlePosition(config.rangeEndValue).x\"\r\n [attr.cy]=\"getHandlePosition(config.rangeEndValue).y\" [attr.r]=\"getRadius()\"\r\n [attr.fill]=\"config.handleBackground\" [attr.stroke-width]=\"config.handleBorderWidth\"\r\n [attr.stroke]=\"config.handleBorderColor\" (mousedown)=\"onHandleMouseDown($event, 'end')\" />\r\n </ng-container>\r\n\r\n <!-- horizontal line -->\r\n <ng-container *ngSwitchCase=\"'horizontal'\">\r\n <line #horizontalLine [attr.x1]=\"config.strokeWidth\" [attr.x2]=\"config.size\" [attr.y1]=\"config.strokeWidth + 10\"\r\n [attr.y2]=\"config.strokeWidth + 10\" [attr.stroke]=\"config.strokeBackground\"\r\n [attr.stroke-width]=\"config.strokeWidth\" [attr.line-cap]=\"config.roundedCorner ? 'round' : ''\" />\r\n\r\n <!-- progress for horizontal line -->\r\n <line [attr.x1]=\"getHorizontalLineStartX()\" [attr.x2]=\"getHorizontalLineEndX()\"\r\n [attr.y1]=\"config.strokeWidth + 10\" [attr.y2]=\"config.strokeWidth + 10\" [attr.stroke]=\"progressColor\"\r\n [attr.stroke-width]=\"config.strokeWidth\" />\r\n\r\n <!-- handle for horizontal line -->\r\n <rect *ngIf=\"!config.isRangeMode\" [attr.x]=\"getHorizontalHandleX(value)\"\r\n [attr.y]=\"config.strokeWidth + 10 - getRadius()-1\" [attr.width]=\"config.strokeWidth\"\r\n [attr.height]=\"config.strokeWidth\"\r\n [attr.fill]=\"config.handleBackground ? config.handleBackground : progressColor\" (mousedown)=\"startDrag()\"\r\n (touchstart)=\"startDrag()\" />\r\n </ng-container>\r\n\r\n <!-- vertical line -->\r\n <ng-container *ngSwitchCase=\"'vertical'\">\r\n <line #verticalLine [attr.y1]=\"config.strokeWidth/4\" [attr.y2]=\"config.size/4\" [attr.x1]=\"config.strokeWidth + 10\"\r\n [attr.x2]=\"config.strokeWidth + 10\" [attr.stroke]=\"config.strokeBackground\"\r\n [attr.stroke-width]=\"config.strokeWidth/4\" [attr.line-cap]=\"config.roundedCorner ? 'round' : ''\" />\r\n\r\n <!-- progress for vertical line -->\r\n <line [attr.y1]=\"getVerticalLineStartY()/4\" [attr.y2]=\"config.size/4\" [attr.x1]=\"config.strokeWidth + 10\"\r\n [attr.x2]=\"config.strokeWidth + 10\" [attr.stroke]=\"progressColor\" [attr.stroke-width]=\"config.strokeWidth/4\" />\r\n\r\n <!-- Handle for vertical line -->\r\n <rect *ngIf=\"!config.isRangeMode\" [attr.y]=\"getVerticalHandleY(value)/4\" [attr.x]=\"config.strokeWidth + 7.5\"\r\n [attr.width]=\"config.strokeWidth/4\" [attr.height]=\"config.strokeWidth/4\"\r\n [attr.fill]=\"config.handleBackground ? config.handleBackground : progressColor\" (mousedown)=\"startDrag()\"\r\n (touchstart)=\"startDrag()\" />\r\n </ng-container>\r\n </svg>\r\n\r\n <!-- tooltip -->\r\n <div class=\"tooltip\" *ngIf=\"config.enableTooltip && !config.isRangeMode\" [class.show]=\"showTooltip\"\r\n [style.left.px]=\"tooltipX\" [style.top.px]=\"tooltipY\">\r\n {{ value}}\r\n </div>\r\n\r\n <!-- progress value -->\r\n <div class=\"progress-value {{config.knobType}}\" [style.maxWidth.px]=\"config.size * 2 - 50\"\r\n [style.color]=\"config.valueColor\" [style.fontSize.px]=\"config.valueSize\" [style.fontWeight]=\"config.valueWeight\"\r\n [style.cursor]=\"(config.readOnly || config.disabled) ? 'not-allowed' : ''\" [class.disabled]=\"config.disabled\"\r\n [class.read-only]=\"config.readOnly\" title=\"{{config.valuePrefix +''+value+''+config.valueSuffix}}\">\r\n <ng-container *ngIf=\"!config.isRangeMode\">\r\n <span class=\"value-prefix\">{{config.valuePrefix}}</span>\r\n <span class=\"value\">{{ value }}</span>\r\n <span class=\"value-suffix\">{{config.valueSuffix}}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"config.isRangeMode\">\r\n <span class=\"value\">{{config.rangeStartValue}} : {{config.rangeEndValue}}</span>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- increment-decrement button -->\r\n <div class=\"arc-buttons\" *ngIf=\"!config.isRangeMode && config.showButtons\">\r\n <button mat-mini-fab color=\"secondary\" (click)=\"decrement()\" [disabled]=\"config.disabled || config.readOnly\" (keydown)=\"onKeyDown($event)\"\r\n [attr.aria-label]=\"getLabel('decrementButton')\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n \r\n <button mat-mini-fab color=\"secondary\" (click)=\"increment()\" [disabled]=\"config.disabled || config.readOnly\" (keydown)=\"onKeyDown($event)\"\r\n [attr.aria-label]=\"getLabel('incrementButton')\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n \r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RuclibKnobComponent } from './ruclib-knob/ruclib-knob.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport {MatIconModule} from '@angular/material/icon';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatIconModule\r\n ],\r\n declarations: [\r\n RuclibKnobComponent\r\n ],\r\n exports: [RuclibKnobComponent],\r\n})\r\nexport class RuclibKnobModule { }\r\n","// interface for reusable knob component\r\nexport interface KnobConfig {\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n size?: number;\r\n valueColor?: string;\r\n valueWeight?: string;\r\n valueSize?: number;\r\n strokeBackground?: string;\r\n progressBackground?: string | string[];\r\n strokeWidth?: number;\r\n roundedCorner?: boolean;\r\n showHandle?: boolean;\r\n handleBackground?: string;\r\n handleBorderColor?: string;\r\n handleBorderWidth?: number;\r\n valuePrefix?: string;\r\n valueSuffix?: string;\r\n readOnly?: boolean;\r\n disabled?: boolean;\r\n enableTooltip?: boolean;\r\n animateOnHover?: boolean;\r\n isRangeMode?: boolean;\r\n rangeStartValue?: number;\r\n rangeEndValue?: number;\r\n showButtons?: boolean;\r\n knobType?: 'arc' | 'horizontal' | 'vertical';\r\n};\r\n\r\nexport interface KnobRangeValue { start: number, end: number }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAAO,MAAM,iBAAiB,GAAG;AAC7B,IAAA,GAAG,EAAU,CAAC;AACd,IAAA,GAAG,EAAU,GAAG;AAChB,IAAA,IAAI,EAAU,CAAC;AACf,IAAA,IAAI,EAAU,GAAG;AACjB,IAAA,UAAU,EAAU,EAAE;AACtB,IAAA,gBAAgB,EAAU,WAAW;AACrC,IAAA,kBAAkB,EAAsB,MAAM;AAC9C,IAAA,WAAW,EAAU,EAAE;AACvB,IAAA,SAAS,EAAU,EAAE;AACrB,IAAA,WAAW,EAAU,QAAQ;AAC7B,IAAA,UAAU,EAAW,IAAI;AACzB,IAAA,gBAAgB,EAAU,WAAW;AACrC,IAAA,iBAAiB,EAAU,MAAM;AACjC,IAAA,iBAAiB,EAAU,CAAC;AAC5B,IAAA,aAAa,EAAW,IAAI;AAC5B,IAAA,WAAW,EAAU,EAAE;AACvB,IAAA,WAAW,EAAU,EAAE;AACvB,IAAA,QAAQ,EAAW,KAAK;AACxB,IAAA,QAAQ,EAAW,KAAK;AACxB,IAAA,aAAa,EAAW,KAAK;AAC7B,IAAA,cAAc,EAAW,KAAK;AAC9B,IAAA,WAAW,EAAW,KAAK;AAC3B,IAAA,eAAe,EAAU,EAAE;AAC3B,IAAA,aAAa,EAAU,EAAE;AACzB,IAAA,WAAW,EAAW,KAAK;IAC3B,QAAQ,EAAqC,KAAK;CACnD,CAAA;AAEM,MAAM,cAAc,GAAG;AAC5B,IAAA,eAAe,EAAU,iBAAiB;AAC1C,IAAA,eAAe,EAAU,iBAAiB;CAC3C;;MCfU,mBAAmB,CAAA;AAiC9B,IAAA,WAAA,CAAoB,GAAsB,EAAA;AAAtB,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AAzBhC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAO,CAAC;AAEpC,QAAA,IAAW,CAAA,WAAA,GAAY,EAAE,CAAC;AAGnC,QAAA,IAAY,CAAA,YAAA,GAAyB,EAAE,CAAC;AACxC,QAAA,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;AAClB,QAAA,IAAQ,CAAA,QAAA,GAAW,KAAK,CAAC;AACzB,QAAA,IAAO,CAAA,OAAA,GAAU,CAAC,CAAC;AACnB,QAAA,IAAO,CAAA,OAAA,GAAU,CAAC,CAAC;AACnB,QAAA,IAAM,CAAA,MAAA,GAAU,CAAC,CAAC;AAClB,QAAA,IAAU,CAAA,UAAA,GAAU,GAAG,CAAC;AACxB,QAAA,IAAQ,CAAA,QAAA,GAAU,GAAG,CAAC;AACtB,QAAA,IAAS,CAAA,SAAA,GAAU,GAAG,CAAC;AACvB,QAAA,IAAgB,CAAA,gBAAA,GAAU,CAAC,CAAC;AAC5B,QAAA,IAAQ,CAAA,QAAA,GAAU,CAAC,CAAC;AACpB,QAAA,IAAQ,CAAA,QAAA,GAAU,CAAC,CAAC;AACpB,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAC7B,QAAA,IAAQ,CAAA,QAAA,GAAW,KAAK,CAAC;AAEzB,QAAA,IAAM,CAAA,MAAA,GAAG,iBAAiB,CAAC;AAEnB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAI,CAAC;QACtB,IAAA,CAAA,QAAQ,GAAG,CAAC,KAAa,KAAO,GAAC,CAAC;KAGzC;AAED;;;AAGG;AACH,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;KAClB;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,EAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED;;;AAGG;AACH,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC;KACnC;AAED;;;;AAIG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY,EAAE;AAC9E,YAAA,IAAI,CAAC,MAAM,GAAQ,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,MAAM,CAAA,EAAK,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY,CAAE,CAAA;AAC1E,SAAA;KACF;AAED;;AAEG;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,EAAE;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;AACnC,SAAA;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACjF,SAAA;KACF;AAED;;AAEG;IACH,eAAe,GAAA;;QACb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;AAExC,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,YAAY,CAAC,GAAG,EAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;AAED;;;AAGG;IACH,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO;AACzD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,CAAC,CAAA;KAC9F;AAED;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9G,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC9D;AAED;;AAEG;IACH,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9B,SAAA;QACD,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9B,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;gBAClG,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC/C,aAAA;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;gBAC9F,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7C,aAAA;AACF,SAAA;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;AAEG;IAGH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,CAAC,CAAA;KAC5F;AAED;;;;AAIG;AAGH,IAAA,MAAM,CAAC,KAA8B,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3E,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAClC;AAED;;;;AAIG;AACH,IAAA,UAAU,CAAC,KAA8B,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO;AACpF,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAClC;AAED;;;AAGG;IACH,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,YAAY,EAAE;YACzC,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5D,SAAA;AACC,aAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE;YACvC,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1D,SAAA;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAEnD;AAED;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,CAA0B,EAAA;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,EAAE;YACR,OAAO;AACR,SAAA;AACD,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,UAAU,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QAC7E,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,UAAU,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;AAE7E,QAAA,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;AAC9B,QAAA,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;AAE7B,QAAA,IAAI,UAAkB,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,YAAY,EAAE;AACzC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnE,YAAA,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,WAAW,IAAI,GAAG,CAAC;AAClE,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE;AAC9C,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpE,YAAA,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,YAAY,IAAI,GAAG,CAAC;AACvE,SAAA;AAAM,aAAA;YACL,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO;AAC3B,YAAA,UAAU,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC;AACjE,SAAA;AAED,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,cAAc,GAAG,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACrG,QAAA,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AAEpD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;AACjC,gBAAA,IAAI,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AAC/C,oBAAA,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;AAC7C,iBAAA;AACD,gBAAA,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC;AAC/C,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AACjD,oBAAA,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;AAC/C,iBAAA;AACD,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,eAAe,CAAC;AAC7C,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;AACtI,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3E,SAAA;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;;AAGG;IACH,SAAS,GAAA;;AACP,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE;YAClC,OAAM;AACP,SAAA;QAED,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAExD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAC/F,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE3D,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAClF,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnE,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAGnE,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AAC9C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KACnE;AAED;;;;;;AAMG;AACH,IAAA,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;KAC1C;AAED;;;;;;;AAOG;AACH,IAAA,gBAAgB,CAAC,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,QAAgB,EAAA;AAClE,QAAA,MAAM,QAAQ,GAAG,CAAC,QAAQ,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;QACjD,OAAO;YACL,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;SAC/B,CAAC;KACH;AAED;;;AAGG;IACH,SAAS,GAAA;;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC,MAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;KACjH;AAED;;;AAGG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACxD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,YAAY,EAAE;YACzC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;AACvC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE;YACvC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;YACjC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;AACtC,SAAA;AACD,QAAA,OAAO,MAAM,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAA;KACrC;AAED;;AAEG;AACH,IAAA,IAAI,aAAa,GAAA;;QACf,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,KAAK,QAAQ,EAAE;AACtD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;AACvC,SAAA;aACC,IAAK,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,kBAA+B,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,EAAE;YAC7D,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAC1C,SAAA;aACC,IAAK,IAAI,CAAC,MAAM,CAAC,kBAA+B,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3D,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;AACzF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,OAAO,CAAA;AACf,SAAA;KACN;AAED;;;;;;;;AAQG;IACH,WAAW,CAAC,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,KAAa,EAAE,GAAW,EAAA;AACvE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACvD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACvD,QAAA,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAE5C,OAAO;AACL,YAAA,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3B,YAAA,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9C,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACb;AAED;;;;;AAKG;IACH,iBAAiB,CAAC,CAAS,EAAE,CAAS,EAAA;AACpC,QAAA,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,EAAE,KAAK,CAAC,EAAE;AACZ,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;AAE5B,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACpD,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,IAAI,GAAG,CAAC;AAE5B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;AAC9C,QAAA,IAAI,KAAK,GAAG,KAAK,GAAG,eAAe,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,IAAI,GAAG,CAAC;AAE5B,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI,CAAC;AAExC,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAChC;AAED;;;AAGG;IACH,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO;AACzD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;;AAGG;IACH,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO;AACzD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AACD;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO;QAEzD,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACzD,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,SAAA;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YACjE,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,SAAA;KACF;AACD;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7I,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACzI,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;KACxF;AAED;;;;;AAKG;IACH,iBAAiB,CAAC,KAAiB,EAAE,UAA2B,EAAA;QAC9D,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO;AACzD,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;QAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,KAAa,EAAA;QAC7B,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAClF,QAAA,OAAO,GAAG,CAAC;KACZ;AAED;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAChC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACnE,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC;KACtD;AAED;;;;AAIG;IACH,uBAAuB,GAAA;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC3G;AAED;;;;AAIG;IACH,qBAAqB,GAAA;QACnB,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;KACpG;AAED;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,YAAY,GAAG,KAAK,CAAC;KACvD;AAED;;;;AAIG;IACH,qBAAqB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;KAClG;AAED;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3B,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;AAC/E,SAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED;;;;AAIG;AACH,IAAA,QAAQ,CAAC,SAAiB,EAAA;AACxB,QAAA,OAAQ,cAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACjD;;iHAthBU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EARnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACF,KAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfH,ilPA4HM,EAAA,MAAA,EAAA,CAAA,wmDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD3GO,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAZ/B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAGhB,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EAAA,ilPAAA,EAAA,MAAA,EAAA,CAAA,wmDAAA,CAAA,EAAA,CAAA;wGAImB,QAAQ,EAAA,CAAA;sBAA3B,SAAS;uBAAC,OAAO,CAAA;gBACQ,cAAc,EAAA,CAAA;sBAAvC,SAAS;uBAAC,aAAa,CAAA;gBACH,SAAS,EAAA,CAAA;sBAA7B,SAAS;uBAAC,QAAQ,CAAA;gBACU,iBAAiB,EAAA,CAAA;sBAA7C,SAAS;uBAAC,gBAAgB,CAAA;gBACA,eAAe,EAAA,CAAA;sBAAzC,SAAS;uBAAC,cAAc,CAAA;gBAEf,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAEE,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBA+IN,QAAQ,EAAA,CAAA;sBAFP,YAAY;uBAAC,gBAAgB,CAAA;;sBAC7B,YAAY;uBAAC,iBAAiB,CAAA;gBAc/B,MAAM,EAAA,CAAA;sBAFL,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;;sBAC3C,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MElKjC,gBAAgB,CAAA;;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAhB,gBAAgB,EAAA,YAAA,EAAA,CAJzB,mBAAmB,CAAA,EAAA,OAAA,EAAA,CAPnB,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,eAAe;QACf,aAAa,aAKL,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAElB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAXzB,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,eAAe;QACf,aAAa,CAAA,EAAA,CAAA,CAAA;4FAOJ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAb5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,aAAa;AACd,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,mBAAmB;AACpB,qBAAA;oBACD,OAAO,EAAE,CAAC,mBAAmB,CAAC;iBAC/B,CAAA;;;ACQA;;AC5BD;;AAEG;;;;"}
|