@ndmspc/ndmvr 0.2.0 → 0.20220401.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/dist/index.js +1236 -1144
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +1236 -1144
- package/dist/index.modern.js.map +1 -1
- package/package.json +7 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/observables/jsrootSubject.js","../src/services/jsrootService.js","../src/components/JsrootHistogram/index.js","../src/observables/cameraSubject.js","../src/components/NdmVrCamera/index.js","../src/services/ndmVrStorageService.js","../src/observables/binSubject.js","../src/observables/binDataDistributor.js","../src/aframeComponents/cursorEventAframeComponent.js","../src/aframeComponents/thAframeComponent.js","../src/services/cameraService.js","../src/observables/histogramSubject.js","../src/controllers/keyboardController.js","../src/aframeComponents/histogramAframeComponent.js","../src/aframeComponents/labelHandlerAframeComponent.js","../src/resources/theme.js","../src/resources/themeProvider.js","../src/utils/histogramGenerator.js","../src/components/NdmVrHistogram3D/index.js","../src/components/NdmVrHistogramScene/index.js","../src/utils/EntityBuilder.js","../src/utils/EntityTemplate.js","../src/utils/histogramAframeFactory.js","../src/aframeComponents/th2AframeComponent.js","../src/utils/DefaultHistogram.js","../src/components/AframeComponent/index.js","../src/aframeComponents/infoBannerAframeComponent.js","../src/controllers/oculusController.js","../src/aframeComponents/leftOculusController.js","../src/aframeComponents/rightOculusController.js","../src/index.js"],"sourcesContent":["// service to manage histogram views\n/** @module JsrootSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre JSROOT.\n * @class\n */\nclass JsrootSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Zobrazenie projekcie pre zvolený bin histogramu.\n * @param {Object} binData - Objekt obsahuje dáta o zvolenom bine\n */\n showBinProjection(binData) {\n this.#subject.next(binData)\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getServiceEvent() {\n return this.#subject.asObservable()\n }\n}\n\nconst jsrootSubject = new JsrootSubject()\nexport default jsrootSubject\n","// service for creating histogram projections\n/** @module JsrootService */\n\n// eslint-disable-next-line no-unused-vars\nimport { createDemoTH2Histogram } from '../../example/src/utilsScripts/utilsPageScript'\n\n/**\n * Servis pre vytváranie JSROOT projekcií.\n * @class\n */\nclass JsrootService {\n #jsroot = null\n\n /**\n * Funkcia zabezpečí nastavenie objektu JSROOT servisu.\n * @param {Object} JSROOT - Object JSROOT\n * @return {void}\n */\n set jsrootLibrary(JSROOT) {\n this.#jsroot = JSROOT\n }\n\n get jsrootLibrary() {\n return this.#jsroot\n }\n\n // create projection depends on selected axis\n /**\n * Funkcia pre vytvorenie TH1 projekcie.\n * @param {string} projectionAxis - Hlaná os podľa, ktorej sa vytvorí projekcia\n * @param {Object} info - Objekt obsahujúci potrebné objekt histogramu a objekt obsahujúci informácie o zvolenom bine\n * @param {string} idTargetElm - Identifikátor cieľovej entity, do ktorej sa vykreslí výsledná projekcia\n * @param {Array} axisArray - Pole osí, obsahuje 2 osi na základe ktorých sa projekcia vytvorí\n * @return {void}\n */\n createTH1Projection(projectionAxis, info, idTargetElm, axisArray) {\n if (!info || !projectionAxis || this.#jsroot === null) {\n return\n }\n\n const projectionTargetAxis = projectionAxis === axisArray[0]\n const primary = projectionTargetAxis ? axisArray[0] : axisArray[1]\n const secondary = projectionTargetAxis ? axisArray[1] : axisArray[0]\n\n const primaryAxis = `f${secondary}axis`\n const secondaryAxis = `f${primary}axis`\n const binAxis = `${primary.toLowerCase()}Max`\n\n // console.log(secondaryAxis)\n // console.log(binAxis)\n // projection X\n\n const h1 = this.#jsroot.createHistogram(\n 'TH1I',\n info.obj[primaryAxis].fNbins\n )\n\n // fill important histogram info\n h1.fXaxis.fXmin = info.obj[primaryAxis].fXmin\n h1.fXaxis.fXmax = info.obj[primaryAxis].fXmax\n h1.fXaxis.fTitle = info.obj[primaryAxis].fTitle\n h1.fXaxis.fLabels = info.obj[primaryAxis].fLabels\n\n const currLabel =\n info.obj[secondaryAxis].fLabels?.arr.length > 0\n ? info.obj[secondaryAxis].fLabels.arr[info.bin[binAxis] - 1].fString\n : ''\n\n for (let n = 0; n < info.obj[primaryAxis].fNbins; n++)\n h1.setBinContent(\n n + 1,\n projectionAxis === axisArray[0]\n ? info.obj.getBinContent(info.bin[binAxis], n + 1)\n : info.obj.getBinContent(n + 1, info.bin[binAxis])\n )\n h1.fName = 'px'\n h1.fTitle =\n `Projection of bin=${projectionAxis}` +\n (info.bin.binName !== '' ? info.bin.name : info.bin[binAxis] - 1) +\n `[` +\n currLabel +\n `]`\n this.#jsroot.redraw(idTargetElm, h1)\n }\n\n /**\n * Funkcia pre prečítanie objektu projekcie z adresárovej štruktúry získanej z root súboru.\n * @param {string} projectionAxis - Hlaná os podľa, ktorej sa vytvorí projekcia\n * @param {Object} info - Objekt obsahujúci potrebné objekt histogramu a objekt obsahujúci informácie o zvolenom bine\n * @param {string} idTargetElm - Identifikátor cieľovej entity, do ktorej sa vykreslí výsledná projekcia\n * @param {Array} axisArray - Pole osí, obsahuje 2 osi na základe ktorých sa projekcia vytvorí\n * @param {Object} projections - Adresárová štruktúra obsahujúca projekcie\n * @param {number} projIndex - Index projekcie, ktorá sa má vykresliť\n * @return {void}\n */\n openTH1Projection(\n projectionAxis,\n info,\n idTargetElm,\n axisArray,\n projections,\n projIndex\n ) {\n const xLength = info.obj.fXaxis.fXmax / info.obj.fXaxis.fNbins\n const yLength = info.obj.fYaxis.fXmax / info.obj.fYaxis.fNbins\n const xBin = info.bin.xMin / xLength\n const yBin = info.bin.yMin / yLength\n try {\n const projection =\n projections.fFolders.arr[xBin].fFolders.arr[yBin].fFolders.arr[\n projIndex || 0\n ]\n this.#jsroot.redraw(idTargetElm, projection)\n setTimeout(() => {\n this.displayImageOfProjection(\n 'projectionContainer',\n 'th-mapping',\n '500px',\n '400px'\n )\n }, 200)\n } catch (e) {\n console.log(\"you don't have this projection\")\n }\n }\n\n /**\n * Funkcia získa aktuálny náhľad projekcie SVG elementu a zobrazí ju na panely vo VR\n * @param {string} idSourceElement - Identifikátor zdrojového elementu obsahujúceho SVG projekciu\n * @param {string} idTargetElement - Identifikátor cieľového elementu vo VR, kde bude vložený náhľad projekcie\n * @param {number} width - Šírka pre získanie náhľadu projekcie\n * @param {number} height - Výška pre získanie náhľadu projekcie\n * @return {void}\n */\n displayImageOfProjection(idSourceElement, idTargetElement, width, height) {\n try {\n const sourceSvgElement =\n document.getElementById(idSourceElement).firstElementChild\n const targetElement = document.getElementById(idTargetElement)\n const canvas = document.createElement('canvas')\n // set width an height of elements\n sourceSvgElement.setAttribute('height', height)\n sourceSvgElement.setAttribute('width', width)\n canvas.setAttribute('height', height)\n canvas.setAttribute('width', width)\n\n // eslint-disable-next-line no-undef\n const svgString = new XMLSerializer().serializeToString(sourceSvgElement)\n const ctx = canvas.getContext('2d')\n // eslint-disable-next-line no-undef\n const DOMURL = self.URL || self.webkitURL || self\n // eslint-disable-next-line no-undef\n const img = new Image()\n // create object url of canvas using blob object\n // eslint-disable-next-line no-undef\n const svg = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' })\n const url = DOMURL.createObjectURL(svg)\n\n // the function is executed after load url of the image\n img.onload = function () {\n // draw png image and create url\n ctx.drawImage(img, 0, 0)\n const png = canvas.toDataURL('image/png')\n // targetElement.setAttribute('src', png)\n targetElement.setAttribute('material', `src`, png)\n DOMURL.revokeObjectURL(png)\n }\n img.src = url\n } catch (e) {}\n }\n}\n\nconst jsrootService = new JsrootService()\nexport default jsrootService\n","import React, { useState, useEffect } from 'react'\nimport jsrootSubject from '../../observables/jsrootSubject'\nimport jsrootService from '../../services/jsrootService'\n\n// styles\nconst styles = {\n box: {\n display: 'block',\n margin: 'auto',\n width: '90%',\n textAlign: 'center',\n align: 'center',\n paddingTop: 2\n },\n projection: {\n display: 'block',\n margin: 'auto',\n width: '460px',\n height: '380px'\n },\n form: {\n display: 'block',\n width: '60%',\n margin: 'auto',\n paddingTop: '2%',\n paddingBottom: '2%'\n },\n label: {\n display: 'block'\n },\n input: {\n display: 'block',\n width: '85%',\n margin: 'auto',\n height: 40,\n border: '1px solid grey',\n borderRadius: 3,\n textAlign: 'center',\n fontSize: 20,\n color: 'black',\n opacity: 0.8\n }\n}\n\n/**\n * React komponent pre zobrazenie bočného panelu s JSROOT projekciami.\n * Zobrazenie SVG elementu s histogramom a potrebným formulárom pre nastavenie atribútov.\n * @component\n * @param {Object} histogram - Objekt histogramu, z ktorého je potrebné spraviť projekciu\n * @param {Array} projectionAxes - Pole obsahuje názvy osí, podľa ktorých sa má vytvoriť projekcia\n * @param {Object} projections - Objekt obsahujúci súborovú štruktúru s projekciami\n * @param {Number} projIndex - Index projekcie v poli, ktorá sa má zobraziť\n * @example\n * const histogram = {\n * gitlab: // vytvorený alebo prečítany z root súboru JSROOT-tom\n * projections: // prečítaná z root súboru JSROOT-tom\n * }\n * return (\n * <JSrootHistogram\n * histogram={histogram.gitlab}\n * projectionAxes={['X','Y']}\n * projections={histogram.projections}\n * projIndex={0}/>\n * )\n */\nconst JsrootHistogram = ({\n histogram,\n projectionAxes,\n projections,\n projIndex\n}) => {\n let subscription\n const [axis, setAxis] = useState('X')\n const [data, setData] = useState(null)\n // const histogram = props.histogram object of histogram in props\n const handleInputChange = (event) => {\n const axis = event.target.value\n setAxis(axis)\n }\n\n const renderForm = () => {\n return (\n <div className='form-group' style={styles.form}>\n <label htmlFor='formGroupExampleInput' style={styles.label}>\n Projection axis\n </label>\n <select\n onChange={handleInputChange}\n className='form-control'\n id='axisProjection'\n style={styles.input}\n >\n <option defaultValue={projectionAxes[0]}>\n {histogram[`f${projectionAxes[0]}axis`].fTitle\n ? histogram[`f${projectionAxes[0]}axis`].fTitle\n : projectionAxes[0]}\n </option>\n <option value={projectionAxes[1]}>\n {histogram[`f${projectionAxes[1]}axis`].fTitle\n ? histogram[`f${projectionAxes[1]}axis`].fTitle\n : projectionAxes[1]}\n </option>\n </select>\n </div>\n )\n }\n\n // handle subscription\n const handleSubscription = (data) => {\n setData(data)\n if (projections !== null) {\n jsrootService.openTH1Projection(\n axis,\n { obj: histogram, bin: data },\n 'projectionContainer',\n projectionAxes,\n projections,\n projIndex\n )\n } else {\n jsrootService.createTH1Projection(\n axis,\n { obj: histogram, bin: data },\n 'projectionContainer',\n projectionAxes\n )\n setTimeout(() => {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n 'th-mapping',\n '500px',\n '500px'\n )\n }, 500)\n }\n }\n\n // subscribe for bin data\n useEffect(() => {\n jsrootService.jsrootLibrary = window.JSROOT\n\n subscription = jsrootSubject.getServiceEvent().subscribe(handleSubscription)\n // console.log(histogram)\n return () => subscription.unsubscribe()\n }, [axis, projections, histogram])\n\n if (data !== null) {\n return (\n <div style={styles.box}>\n {projections === null && renderForm()}\n <div id='projectionContainer' style={styles.projection} />\n </div>\n )\n } else {\n return (\n <div style={styles.box}>\n <h3>Empty</h3>\n </div>\n )\n }\n}\n\nexport default JsrootHistogram\n","// service to manage scene camera\n/** @module CameraSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre kameru.\n * @class\n */\nclass CameraSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia signálu s hodnotou špecifikujúcou vstupné zariadenie pre zobrazenie prišných panelov.\n * @return {void}\n */\n setVisibilityOfBanners(inputDevice) {\n this.#subject.next({\n device: inputDevice\n })\n }\n\n /**\n * Publikácia signálu s hodnotou \"shift\" pre posúvanie panelov.\n * @return {void}\n */\n shiftBanners() {\n this.#subject.next('shift')\n }\n\n /**\n * Publikácia signálu s hodnotou \"show\" pre zobrazenie prislúchajúcich panelov.\n * @return {void}\n */\n setUserState() {\n this.#subject.next('show')\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getCameraSubject() {\n return this.#subject.asObservable()\n }\n}\n\nconst cameraSubject = new CameraSubject()\nexport default cameraSubject\n","import React, { useState, useEffect } from 'react'\nimport 'aframe'\nimport cameraSubject from '../../observables/cameraSubject'\nimport jsrootService from '../../services/jsrootService'\n\n/**\n * React komponent pre vytvorenie kamery a jej menežment.\n * @component\n * @example\n * return (\n * <NdmVrCamera />\n * )\n */\nconst NdmVrCamera = () => {\n let subscription\n const offset = 30\n const [rotation, setRotation] = useState(0)\n const [prevPosition, setPrevPosition] = useState(null)\n const [inputDevice, setInputDevice] = useState('keyboard')\n const [show, setShow] = useState(false)\n const [showProjection, setShowProjection] = useState(false)\n\n const handleSubscription = (data) => {\n if (data.device) {\n if (inputDevice !== data.device) setInputDevice(data.device)\n setShow(!show)\n } else if (data === 'shift') {\n compileRotation()\n } else if (data === 'show') {\n setShowProjection(!showProjection)\n }\n }\n\n const compileRotation = () => {\n let currentRotation = rotation + 90\n if (currentRotation >= 360) currentRotation = 0\n setRotation(currentRotation)\n }\n\n // render banners for projection\n const renderProjectionsBanners = () => {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n material='color: white'\n >\n <a-entity\n // geometry='primitive: box; width: 18; height: 5; depth: 0.5;'\n /* geometry={\n inputDevice === 'oculus'\n ? 'primitive: box; width: 40; height: 10; depth: 0.1;'\n : 'primitive: box; width: 18; height: 5; depth: 0.1;'\n } */\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n // position={`8 ${inputDevice === 'oculus' ? 3 - offset : 3} -5`}\n // position={inputDevice === 'oculus' ? '-30 28 0' : '8 3 -5'}\n position='-30 28 0'\n // rotation='0 -45 0'\n // rotation={inputDevice === 'oculus' ? '45 90 0' : '0 -45 0'}\n rotation='45 90 0'\n material='color:white;'\n >\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press C to show help panels'\n : 'Press Button X to show help panels'\n }\n // position={inputDevice === 'oculus' ? '-18 0 1' : '-8 0 1'}\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press V to switch to histogram view'\n : 'Press Button Y to switch to histogram view'\n }\n // position='-8 1 1'\n // position={inputDevice === 'oculus' ? '-18 2.8 1' : '-8 1 1'}\n position='-20 0 1'\n />\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press X to shift panels'\n : 'Press right Trigger to shift panels'\n }\n // position='-8 -1 1'\n // position={inputDevice === 'oculus' ? '-18 -2.8 1' : '-8 -1 1'}\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n id='bannerId_1'\n scale='80 50 2'\n animation__position='property: position; from: 0 0 -60; to: 0 -1 -42; delay: 0; dur: 800; easing: linear;'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 0 0 -60; to: 0 0 -42.5; delay: 0; dur: 800; easing: linear;'\n material='color: white;'\n />\n <a-box\n id='bannerId_2'\n scale='80 50 2'\n animation__position='property: position; from: 60 0 0; to: 42 -1 0; delay: 200; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 60 0 0; to: 42.5 0 0; delay: 200; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='color: white;'\n />\n <a-box\n id='bannerId_3'\n scale='80 50 2'\n animation__position='property: position; from: 0 0 60; to: 0 -1 42; delay: 400; dur: 800; easing: linear;'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 0 0 60; to: 0 0 42.5; delay: 400; dur: 800; easing: linear;'\n material='color: white;'\n />\n <a-box\n id='bannerId_4'\n scale='80 50 2'\n animation__position='property: position; from: -60 0 0; to: -42 -1 0; delay: 600; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: -60 0 0; to: -42.5 0 0; delay: 600; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='color: white;'\n />\n </a-entity>\n )\n }\n\n // render banners for controls\n const renderBannersWithControls = () => {\n if (inputDevice === 'keyboard') {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n material='color: white'\n >\n <a-entity\n // geometry='primitive: box; width: 15; height: 5; depth: 0.5;'\n // position='8 3 -5'\n // rotation='0 -45 0'\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n position='-30 28 0'\n rotation='45 90 0'\n material='color: white'\n >\n <a-text\n color='black'\n // width='20'\n width='50'\n // value='Press C to show projection panels'\n value={\n showProjection\n ? 'Press C to show help panels'\n : 'Press C to show projection panels'\n }\n // position='-6 0 1'\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n // width='20'\n width='50'\n value='Press V to switch to histogram view'\n // position='-6 1 1'\n position='-20 0 1'\n />\n <a-text\n color='black'\n // width='20'\n width='50'\n value='Press X to shift panels'\n // position='-6 -1 1'\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -30 0 60; to: -30 0 30; delay: 0; dur: 800; easing: linear;'\n rotation='0 -45 0'\n // src='https://i.imgur.com/x78XYHM.png'\n src='./ndmvr/keyboardControls/keyboard.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -30 0 -60; to: -30 0 -30; delay: 200; dur: 800; easing: linear;'\n rotation='0 45 0'\n src='./ndmvr/keyboardControls/keyboard1.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 30 0 -60; to: 30 0 -30; delay: 400; dur: 800; easing: linear;'\n rotation='0 -45 0'\n src='./ndmvr/keyboardControls/keyboard2.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 30 0 60; to: 30 0 30; delay: 600; dur: 800; easing: linear;'\n rotation=' 0 45 0'\n src='./ndmvr/keyboardControls/keyboard3.png'\n />\n </a-entity>\n )\n } else {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n >\n <a-entity\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n position='-30 28 0'\n rotation='45 90 0'\n material='color: white'\n >\n <a-text\n color='black'\n width='50'\n // value='Press Button X to show projection panels'\n value={\n showProjection\n ? 'Press Button X to show help panels'\n : 'Press Button X to show projection panels'\n }\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n width='50'\n value='Press Button Y to switch to histogram view'\n position='-20 0 1'\n />\n <a-text\n color='black'\n width='50'\n value='Press right Trigger to shift panels'\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -35 0 60; to: -32 0 32; delay: 0; dur: 800; easing: linear;'\n rotation='-10 -45 0'\n src='./ndmvr/oculusControls/oculus.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -35 0 -60; to: -32 0 -32; delay: 200; dur: 800; easing: linear;'\n rotation='10 45 0'\n src='./ndmvr/oculusControls/oculus2.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 35 0 -60; to: 32 0 -32; delay: 400; dur: 800; easing: linear;'\n rotation='10 -45 0'\n src='./ndmvr/oculusControls/oculus1.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 35 0 60; to: 32 0 32; delay: 600; dur: 800; easing: linear;'\n rotation='-10 45 0'\n src='./ndmvr/oculusControls/oculus3.png'\n />\n </a-entity>\n )\n }\n }\n\n const hideMappingBanner = () => {\n const banner = document.getElementById('th-mapping')\n const background = document.getElementById('th-background')\n if (banner !== undefined && background !== undefined) {\n banner.setAttribute('material', 'opacity', 0)\n background.setAttribute('material', 'opacity', 0)\n }\n }\n\n const showMappingBanner = () => {\n const banner = document.getElementById('th-mapping')\n const background = document.getElementById('th-background')\n if (banner !== undefined && background !== undefined) {\n banner.setAttribute('material', 'opacity', 1)\n background.setAttribute('material', 'opacity', 1)\n }\n }\n\n useEffect(() => {\n subscription = cameraSubject\n .getCameraSubject()\n .subscribe(handleSubscription)\n\n return () => subscription.unsubscribe()\n }, [show, showProjection, rotation])\n\n useEffect(() => {\n const camera = document.getElementById('camera')\n if (!show) {\n camera.object3D.position.y = 1.6\n if (prevPosition !== null) {\n camera.object3D.position.x = prevPosition.x\n camera.object3D.position.z = prevPosition.z\n camera.object3D.position.y = prevPosition.y\n }\n showMappingBanner()\n } else {\n setPrevPosition({\n x: camera.object3D.position.x,\n y: camera.object3D.position.y,\n z: camera.object3D.position.z\n })\n camera.object3D.position.y = camera.object3D.position.y + offset\n hideMappingBanner()\n }\n }, [show, inputDevice])\n\n useEffect(() => {\n if (showProjection) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n 'bannerId_1',\n '500px',\n '400px'\n )\n }\n }, [showProjection])\n\n return (\n <a-entity id='cameraWrapper' rotation='0 180 0' position='0 2 0'>\n {show && !showProjection && renderBannersWithControls()}\n {show && showProjection && renderProjectionsBanners()}\n <a-camera\n id='camera'\n look-control\n wasd-controls-enabled='acceleration:=50'\n >\n <a-entity\n cursor='fuse: false; fuseTimeout: 2000;'\n raycaster='objects: .clickable; showLine: false; far: 100;'\n animation__click='property: scale; startEvents: click; from: 0.1 0.1 0.1; to: 1.4 1.4 1.4; dur: 150'\n animation__mouseenter='property: scale; startEvents: mouseenter; from: 1 1 1; to: 1.4 1.4 1.4; dur: 180'\n animation__mouseleave='property: scale; startEvents: mouseleave; from: 1.4 1.4 1.4; to: 1 1 1; dur: 180'\n line='color: orange; opacity: 0.5'\n far='100'\n position='0 0 -1'\n geometry='primitive: ring; radiusInner: 0.02; radiusOuter: 0.03'\n material='color: white; shader: flat'\n />\n <a-entity oculus-touch-controls='hand: left' left-controller-logging />\n <a-entity\n oculus-touch-controls='hand: right'\n right-controller-logging\n />\n </a-camera>\n </a-entity>\n )\n}\n\nexport default NdmVrCamera\n","/* object for manipulating local storage */\n/** @module NdmVrStorageService */\n\n/**\n * Servis pre ovládanie lokálneho úložiska.\n * Ukladanie a načítavanie dát o ofsetoch a histograme.\n * @class\n */\nexport class NdmVrStorageService {\n #storage\n #camera\n #selectedBins = []\n\n /**\n * Nastavenie referencií a potrebných identifikátorov.\n * Načítanie poľa označených binov z lokalneho úložiska, ak nejaké sú.\n * @return {void}\n */\n constructor() {\n this.#storage = window.localStorage\n this.#camera = document.getElementById('cameraWrapper')\n this.#selectedBins = this.getBinsFromLocalStorage()\n }\n\n /*\n initLocalStorage() {\n if (!this.loadProperty('TH2')) {\n this.storeProperty('TH2', {})\n }\n if (!this.loadProperty('TH3')) {\n this.storeProperty('TH3', {})\n }\n if (!this.#storage.getItem('rootFile')) {\n this.storeFilePath(\n 'https://eos.ndmspc.io/eos/ndmspc/scratch/test/gitlab-hist.root'\n )\n }\n this.storeTH2Offsets(1, 1, 6)\n this.storeTH3Offsets(1, 1, 1, 6)\n }\n */\n\n /**\n * Funkcia pre uloženie binu do zoznamu označených binov.\n * @param {Object} binData - Objekt obsahujúci všetky dáta o zvolenom bine\n * @return {void}\n */\n storeCurrentBinToLocalStorage(binData) {\n this.#storage.setItem('currentBin', JSON.stringify(binData))\n }\n\n getCurrentBinFromLocalStorage() {\n const currentBin = JSON.parse(this.#storage.getItem('currentBin'))\n if (currentBin === undefined || currentBin === '') {\n return null\n }\n return currentBin\n }\n\n /**\n * Funkcia pre načítanie aktuálnych informácií o histograme.\n * @param {string} property - Objekt označujúci typ histogramu, pre ktorý sa majú získať ofsety\n * @return {Object} - Objekt obsahujúci informácie o sekciách určitého histogramu\n */\n loadProperty(property) {\n return JSON.parse(this.#storage.getItem(property))\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme.\n * @param {string} property - Objekt označujúci typ histogramu, pre ktorý sa majú získať ofsety\n * @param {Object} object - Objekt obsahujúci informácie o sekciách určitého histogramu\n * @return {void}\n */\n storeProperty(property, object) {\n this.#storage.setItem(property, JSON.stringify(object))\n }\n\n /*\n storeTH2HistogramLimits(histogram) {\n const object = this.loadProperty('TH2')\n object.binScales = this.#getBinTH2Scales(histogram)\n object.limits = {\n xOffset: histogram.fXaxis.fXmax / object.binScales.xWidth,\n yOffset: histogram.fYaxis.fXmax / object.binScales.yWidth\n }\n this.storeProperty('TH2', object)\n }\n\n storeTH3HistogramLimits(histogram) {\n const object = this.loadProperty('TH3')\n object.binScales = this.#getBinTH3Scales(histogram)\n object.limits = {\n xOffset: histogram.fXaxis.fXmax / object.binScales.xWidth,\n yOffset: histogram.fYaxis.fXmax / object.binScales.yWidth,\n zOffset: histogram.fZaxis.fXmax / object.binScales.zWidth\n }\n this.storeProperty('TH3', object)\n }\n\n storeHistogramLimits(type, histogram) {\n if (type.includes('TH3') || type.includes('th3')) {\n this.storeTH3HistogramLimits(histogram)\n } else if (type.includes('TH2') || type.includes('th2')) {\n this.storeTH2HistogramLimits(histogram)\n }\n }\n\n loadTH3Limits() {\n const object = this.loadProperty('TH3')\n return object.limits\n }\n\n loadTH2Limits() {\n const object = this.loadProperty('TH2')\n return object.limits\n }\n\n loadLimits(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n return this.loadTH3Limits()\n } else if (type.includes('TH2') || type.includes('th2')) {\n return this.loadTH2Limits()\n }\n }\n */\n /*\n #getBinTH2Scales = (histogram) => {\n const xWidth = histogram.fXaxis.fXmax / histogram.fXaxis.fNbins\n const yWidth = histogram.fYaxis.fXmax / histogram.fYaxis.fNbins\n return {\n xWidth: xWidth,\n yWidth: yWidth\n }\n }\n\n #getBinTH3Scales = (histogram) => {\n const xcenter = histogram.fXaxis.GetBinCenter(1)\n const xmin = histogram.fXaxis.GetBinLowEdge(1)\n const xmax = xcenter + (xcenter - xmin)\n const xWidth = xmax - xmin\n const ycenter = histogram.fYaxis.GetBinCenter(1)\n const ymin = histogram.fYaxis.GetBinLowEdge(1)\n const ymax = ycenter + (ycenter - ymin)\n const yWidth = ymax - ymin\n const zcenter = histogram.fZaxis.GetBinCenter(1)\n const zmin = histogram.fZaxis.GetBinLowEdge(1)\n const zmax = zcenter + (zcenter - zmin)\n const zWidth = zmax - zmin\n return {\n xWidth: xWidth,\n yWidth: yWidth,\n zWidth: zWidth\n }\n }\n */\n /*\n loadBinScale(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n const object = this.loadProperty('TH3')\n return object.binScales\n } else if (type.includes('TH2') || type.includes('th2')) {\n const object = this.loadProperty('TH2')\n return object.binScales\n }\n }\n */\n\n initHistogramData(histogram) {\n if (histogram._typename.includes('TH3')) {\n this.storeTH3HistogramLimits(histogram)\n } else if (histogram._typename.includes('TH2')) {\n this.storeTH2HistogramLimits(histogram)\n }\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme TH2.\n * @param {number} xOffset - Hodnota reprezentujúca ofset na osi X\n * @param {number} yOffset - Hodnota reprezentujúca ofset na osi Y\n * @param {number} range - Hodnota reprezentujúca rozsah binov na osiach\n * @return {void}\n */\n storeTH2Offsets(xOffset, yOffset, range) {\n let object = this.loadProperty('TH2')\n let section\n if (object === null) {\n object = {}\n section = {\n name: 'TH2',\n xOffset: 1,\n yOffset: 1,\n range: 8\n }\n } else {\n section = {\n name: 'TH2',\n xOffset: xOffset,\n yOffset: yOffset,\n range: range\n }\n }\n object.section = section\n this.storeProperty('TH2', object)\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme TH3.\n * @param {number} xOffset - Hodnota reprezentujúca ofset na osi X\n * @param {number} yOffset - Hodnota reprezentujúca ofset na osi Y\n * @param {number} zOffset - Hodnota reprezentujúca ofset na osi Z\n * @param {number} range - Hodnota reprezentujúca rozsah binov na osiach\n * @return {void}\n */\n storeTH3Offsets(xOffset, yOffset, zOffset, range) {\n let object = this.loadProperty('TH3')\n let section\n if (object === null) {\n object = {}\n section = {\n name: 'TH3',\n xOffset: 1,\n yOffset: 1,\n zOffset: 1,\n range: 4\n }\n } else {\n section = {\n name: 'TH3',\n xOffset: xOffset,\n yOffset: yOffset,\n zOffset: zOffset,\n range: range\n }\n }\n object.section = section\n this.storeProperty('TH3', object)\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme.\n * @param {Object} section - Objekt obsahujúci ofsety a rozsah pre histogramy. Objekt obsahuje aj typ histogramu podľa ktorého sa uloží správna sekcia do lokálneho úložiska\n * @return {void}\n */\n storeOffsets(section) {\n if (section.name.includes('TH3') || section.name.includes('th3')) {\n this.storeTH3Offsets(\n section.xOffset,\n section.yOffset,\n section.zOffset,\n section.range\n )\n } else if (section.name.includes('TH2') || section.name.includes('th2')) {\n this.storeTH2Offsets(section.xOffset, section.yOffset, section.range)\n }\n }\n\n /**\n * Uloženie názvu root súboru.\n * @param {string} filePath - URL cesta k súboru\n * @return {void}\n */\n storeFilePath(filePath) {\n this.#storage.setItem('rootFile', filePath)\n }\n\n /**\n * Načítanie názvu root súboru.\n * @return {string} - URL root súboru\n */\n loadFilePath() {\n const filename = this.#storage.getItem('rootFile')\n if (filename === null || filename === undefined) {\n // throw new Error('The filename is empty')\n return 'defaultHistogram'\n }\n return filename\n }\n\n /**\n * Načítanie informácií o TH2 histograme\n * @return {Object} - Object obsahujúci ofsety, rozsah, typ histogramu. Ak sa nenachádza v lokálnom uložisku vracia null\n */\n loadTH2Offsets() {\n const object = this.loadProperty('TH2')\n if (object !== null) {\n return object.section\n } else {\n return null\n }\n }\n\n /**\n * Načítanie informácií o TH3 histograme.\n * @return {Object} - Object obsahujúci ofsety, rozsah, typ histogramu. Ak sa nenachádza v lokálnom uložisku vracia null\n */\n loadTH3Offsets() {\n const object = this.loadProperty('TH3')\n if (object !== null) {\n return object.section\n } else {\n return null\n }\n }\n\n /**\n * Načítanie informácií o histograme.\n * @param {string} type - Typ histogramu podľa, ktorého sa získa správny objekt obsahujúci informácie o histograme\n * @return {Object} - Object obsahujúci ofsety, rozsah, typ histogramu. Ak sa nenachádza v lokálnom uložisku vracia null\n */\n loadOffsets(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n return this.loadTH3Offsets()\n } else if (type.includes('TH2') || type.includes('th2')) {\n return this.loadTH2Offsets()\n }\n }\n\n /*\n #getValidOffset = (\n histogramType,\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n ) => {\n if (increment) {\n if (defaultRange) {\n offsets[axisOffset] += 1\n } else {\n offsets[axisOffset] += offsets.range + 1\n }\n if (limits[axisOffset] <= offsets.range) {\n offsets[axisOffset] = 1\n return offsets\n }\n if (offsets[axisOffset] > limits[axisOffset] - offsets.range - 1) {\n offsets[axisOffset] = limits[axisOffset] - offsets.range\n return offsets\n }\n } else {\n if (offsets[axisOffset] - offsets.range + 1 <= 1) {\n offsets[axisOffset] = 1\n return offsets\n }\n if (defaultRange) {\n offsets[axisOffset] -= 1\n } else {\n offsets[axisOffset] -= offsets.range + 1\n }\n }\n return offsets\n }\n */\n\n /*\n editTH2OffsetByOffset(axisOffset, increment, defaultRange) {\n const limits = this.loadTH2Limits()\n const offsets = this.loadTH2Offsets()\n const result = this.#getValidOffset(\n 'TH2',\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n // this.storeTH2Offsets(result.xOffset, result.yOffset, result.range)\n return result\n }\n */\n\n /*\n editTH3OffsetByOffset(axisOffset, increment, defaultRange) {\n const limits = this.loadTH3Limits()\n const offsets = this.loadTH3Offsets()\n const result = this.#getValidOffset(\n 'TH3',\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n // this.storeTH3Offsets(result.xOffset, result.yOffset, result.zOffset, result.range)\n return result\n }\n */\n\n // set offset value\n /*\n setOffsetValue = (typeName, range) => {\n if (typeName.includes('TH2')) {\n if (range > 16) {\n return 16\n } else if (range < 2) {\n return 2\n } else {\n return range\n }\n } else if (typeName.includes('TH3')) {\n if (range > 10) {\n return 10\n } else if (range < 2) {\n return 2\n } else {\n return range\n }\n }\n }\n */\n\n #deleteCurrentBin = (binData) => {\n return this.#selectedBins.filter((item) => item.id !== binData.id)\n }\n\n // check containing bin\n /**\n * Overenie, či je bin v poli označených binov.\n * @param {Object} binData - Objekt obsahujúci informácie o bine\n * @return {boolean} - Ak je True bin je v poli označených binov, ak False bin nie je v poli označených binov\n */\n containThisBin = (binData) => {\n const updatedArray = this.#selectedBins.filter(\n (item) => item.id === binData.id\n )\n return updatedArray.length !== 0\n }\n\n // store bin to local storage\n /**\n * Uloženie binu, uloženie do poľa označených binov.\n * @param {Object} binData - Objekt obsahujúci informácie o bine\n * @return {void}\n */\n storeBinToLocalStorage = (binData) => {\n // let bins = JSON.parse(this.#storage.getItem('currentBin'))\n if (!this.containThisBin(binData)) {\n this.#selectedBins.push(binData)\n this.#storage.setItem('selectedBins', JSON.stringify(this.#selectedBins))\n }\n }\n\n /**\n * Odstránenie binu, vymzanie binu z poľa označených binov.\n * @param {Object} binData - Objekt obsahujúci informácie o bine\n * @return {void}\n */\n deleteBinFromLocalStorage = (binData) => {\n // let bins = JSON.parse(this.#storage.getItem('currentBin'))\n if (this.containThisBin(binData)) {\n this.#selectedBins = this.#deleteCurrentBin(binData)\n this.#storage.setItem('selectedBins', JSON.stringify(this.#selectedBins))\n }\n }\n\n // get bin from local storage\n /**\n * Načítanie všetkých binov z poľa označených binov.\n * @return {Array} - Pole s označenými binmi\n */\n getBinsFromLocalStorage = () => {\n const selectedBins = JSON.parse(this.#storage.getItem('selectedBins'))\n if (selectedBins === null) {\n return []\n } else {\n return selectedBins\n }\n }\n}\n\nconst localStorageService = new NdmVrStorageService()\nexport { localStorageService }\n","// service to manage histogram views\n/** @module BinSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre biny.\n * @class\n */\nclass BinSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia signálnu s hodnotou True pre označenie daného binu.\n * @return {void}\n */\n saveSelectedBinToLocalStorage() {\n this.#subject.next(true)\n }\n\n /**\n * Publikácia signálnu s hodnotou False pre odznačenie daného binu.\n * @return {void}\n */\n deleteBinFromLocalStorage() {\n this.#subject.next(false)\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getKeyboardEvent() {\n return this.#subject.asObservable()\n }\n}\n\nconst binSubject = new BinSubject()\nexport default binSubject\n","// bin distributor\n/** @module BinDataDistributor */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre biny.\n * @class\n */\nclass BinDataDistributor {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia dat oznaceneho binu.\n * @return {void}\n */\n sendDataOfTheSelectedBin(binData) {\n this.#subject.next(binData)\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getBinDistributor() {\n return this.#subject.asObservable()\n }\n}\n\nconst binDataDistributor = new BinDataDistributor()\nexport default binDataDistributor\n","import AFRAME from 'aframe'\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport binSubject from '../observables/binSubject'\nimport jsrootSubject from '../observables/jsrootSubject'\nimport binDataDistributor from '../observables/binDataDistributor'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite, ktorá spracuváva prieniky medzi entitou a raycastrom používateľa.\n * @component mouseevent\n * @module cursorEventAframeComponent\n */\n\n// aframe component for set events on bin\nAFRAME.registerComponent('mouseevent', {\n init: function () {\n let subscription\n const el = this.el\n let clickCount = 0\n let checked = false\n // add mouse listener on mouseenter\n el.addEventListener('mouseenter', function setHover(evt) {\n checked = false\n // subscribe for events\n const intersection = evt.detail.intersection\n subscription = binSubject.getKeyboardEvent().subscribe((save) => {\n if (save) {\n localStorageService.storeBinToLocalStorage(this.userData)\n localStorageService.storeCurrentBinToLocalStorage(this.userData)\n binDataDistributor.sendDataOfTheSelectedBin(this.userData)\n this.userData.markedColor = this.userData.selectColor\n this.setAttribute('material', 'opacity', '1')\n jsrootSubject.showBinProjection(this.userData)\n } else {\n localStorageService.deleteBinFromLocalStorage(this.userData)\n this.userData.markedColor = this.userData.color\n this.setAttribute('material', 'opacity', '0.75')\n }\n })\n if (intersection.face.normal.x !== 0) {\n this.setAttribute('material', 'color', this.userData.axisZ)\n } else if (intersection.face.normal.y !== 0) {\n this.setAttribute('material', 'color', this.userData.axisY)\n } else {\n this.setAttribute('material', 'color', this.userData.axisX)\n }\n this.setAttribute('material', 'opacity', '1')\n })\n\n // add mouse listener on mouseleave\n el.addEventListener('mouseleave', function setPassive() {\n subscription.unsubscribe()\n if (checked === false) {\n this.setAttribute('material', 'color', this.userData.markedColor)\n this.setAttribute('material', 'opacity', '0.75')\n }\n clickCount = 0\n })\n\n // add mouse listener on click\n el.addEventListener('click', function setActive(evt) {\n clickCount = clickCount + 1\n checked = false\n setTimeout(() => {\n clickCount = 0\n }, 600)\n // add mouse listener on double click\n // change position\n if (clickCount === 2) {\n clickCount = 0\n checked = true\n this.setAttribute('material', 'color', '#99ff00')\n this.setAttribute('material', 'opacity', '1')\n // get camera\n const camera = document.getElementById('cameraWrapper')\n // set pos of camera\n if (camera !== null) {\n camera.object3D.position.y = this.object3D.position.y + 0.4\n // camera.object3D.rotation.y = 180\n if (this.userData.content > 0.5) {\n // camera.object3D.position.x = -1.5 + this.object3D.position.x\n // camera.object3D.position.z = this.object3D.position.z - 1.2\n camera.setAttribute(\n 'animation',\n `property: position; to: ${-0.5 + this.object3D.position.x} ${\n this.object3D.position.y\n } ${this.object3D.position.z}\n ; dur: 600; easing: linear;`\n )\n } else if (this.userData.content > 0.2) {\n // camera.object3D.position.x = -0.5 + this.object3D.position.x\n // camera.object3D.position.y = this.object3D.position.y + 0.1\n // camera.object3D.position.z = this.object3D.position.z + 4.5\n camera.setAttribute(\n 'animation',\n `property: position; to: ${-0.5 + this.object3D.position.x} ${\n this.object3D.position.y + 0.1\n } ${this.object3D.position.z + 0.5}\n ; dur: 600; easing: linear;`\n )\n } else {\n // camera.object3D.position.x = this.object3D.position.x + 2\n // camera.object3D.position.y = this.object3D.position.y + 0.1\n // camera.object3D.position.z = this.object3D.position.z + 8.5\n camera.setAttribute(\n 'animation',\n `property: position; to: ${this.object3D.position.x + 2} ${\n this.object3D.position.y + 0.1\n } ${this.object3D.position.z + 8.5}\n ; dur: 600; easing: linear;`\n )\n }\n }\n // change store info to localstorage\n } else if (clickCount === 1) {\n this.setAttribute('material', 'color', '#99ff00')\n this.setAttribute('material', 'opacity', '1')\n localStorageService.storeCurrentBinToLocalStorage(this.userData)\n jsrootSubject.showBinProjection(this.userData)\n }\n\n // get reference to info-banner element\n let infoBanner = document.getElementById('th2-banner')\n if (infoBanner === null) {\n infoBanner = document.getElementById('th3-banner')\n }\n\n // if we have any information banner\n if (infoBanner !== null) {\n const planes = infoBanner.childNodes\n // set message to display\n if (this.userData.typeName === 'TH3' && planes.length === 5) {\n const zCor = `[${this.userData.zTitle}] [${this.userData.zMin},${\n this.userData.zMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const xCor = `[${this.userData.xTitle}] [${this.userData.xMin},${\n this.userData.xMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const yCor = `[${this.userData.yTitle}] [${this.userData.yMin},${\n this.userData.yMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const content = `Content: ${this.userData.absoluteContent} [${this.userData.content}]\\n`\n\n planes[0].setAttribute(\n 'text',\n `value: ${content}; color: ${this.userData.color}; align: center; width: 30; height: auto;`\n )\n planes[1].setAttribute(\n 'text',\n `value: ${xCor}; color: ${this.userData.axisX}; align: center; width: 30; height: auto;`\n )\n planes[2].setAttribute(\n 'text',\n `value: ${yCor}; color: ${this.userData.axisY}; align: center; width: 30; height: auto;`\n )\n planes[3].setAttribute(\n 'text',\n `value: ${zCor}; color: ${this.userData.axisZ}; align: center; width: 30; height: auto;`\n )\n } else {\n const content = `Content: ${this.userData.absoluteContent} [${this.userData.content}]\\n`\n const xCor = `[${this.userData.xTitle}] [${this.userData.xMin},${\n this.userData.xMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const yCor = `[${this.userData.yTitle}] [${this.userData.yMin},${\n this.userData.yMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n planes[0].setAttribute(\n 'text',\n `value: ${content}; color: ${this.userData.color}; align: center; baseline: center; width: 30; height: auto;`\n )\n planes[1].setAttribute(\n 'text',\n `value: ${xCor}; color: ${this.userData.axisX}; align: center; width: 30; height: auto;`\n )\n planes[2].setAttribute(\n 'text',\n `value: ${yCor}; color: ${this.userData.axisY}; align: center; width: 30; height: auto;`\n )\n }\n }\n })\n },\n update: function () {\n const el = this.el\n el.setAttribute('material', 'color', el.userData.markedColor)\n el.setAttribute('material', 'opacity', '0.75')\n }\n})\n","// component to insert data to th3i bin\nimport AFRAME from 'aframe'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite binu TH3 histogram, ktorá umožňuje zmenu atribútov entity.\n * @component binth3\n * @param {string} id - Identifikátor binu\n * @param {number} content - Hodnota optimalizovaného obsahu binu (predvolená 0)\n * @param {number} absoluteContent - Hodnota neoptimalizovaného obsahu binu (predvolená 0)\n * @param {string} binName - Meno binu\n * @param {string} xTitle - Titulok na osi x\n * @param {string} yTitle - Titulok na osi y\n * @param {number} xMin - Súradnica min binu na osi x\n * @param {number} yMin - Súradnica min binu na osi y\n * @param {number} zMin - Súradnica min binu na osi z\n * @param {number} xMax - Súradnica max binu na osi x\n * @param {number} yMax - Súradnica max binu na osi y\n * @param {number} zMax - Súradnica max binu na osi z\n * @param {number} xCenter - Súradnica stredu binu na osi x\n * @param {number} yCenter - Súradnica stredu binu na osi y\n * @param {number} zCenter - Súradnica stredu binu na osi z\n * @param {number} xWidth - Šírka binu na osi x\n * @param {number} yWidth - Šírka binu na osi y\n * @param {number} zWidth - Šírka binu na osi z\n * @param {string} color - Farba binu\n * @param {string} axisX - Farba označení na osi x\n * @param {string} axisY - Farba označení na osi y\n * @param {string} axisZ - Farba označení na osi z\n * @param {string} selectColor - Farba určená za zvolenie binu\n * @param {string} markedColor - Farba určená pre označenie binu (v poli označených binov)\n * @module th2AframeComponent\n */\n\nAFRAME.registerComponent('binth', {\n schema: {\n id: { type: 'string' },\n typeName: { type: 'string' },\n content: { default: 0 },\n absoluteContent: { default: 0 },\n binName: { default: '' },\n xTitle: { type: 'string' },\n yTitle: { type: 'string' },\n zTitle: { type: 'string' },\n xMin: { type: 'number' },\n yMin: { type: 'number' },\n zMin: { type: 'number' },\n xMax: { type: 'number' },\n yMax: { type: 'number' },\n zMax: { type: 'number' },\n xCenter: { type: 'number' },\n yCenter: { type: 'number' },\n zCenter: { type: 'number' },\n xWidth: { type: 'number' },\n yWidth: { type: 'number' },\n zWidth: { type: 'number' },\n color: { type: 'string' },\n axisX: { type: 'string' },\n axisY: { type: 'string' },\n axisZ: { type: 'string' },\n selectColor: { type: 'string' },\n markedColor: { type: 'string' }\n },\n\n init: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: this.data.typeName,\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n zTitle: this.data.zTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n zMin: this.data.zMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n zMax: this.data.zMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n zCenter: this.data.zCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n zWidth: this.data.zWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n },\n\n update: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: this.data.typeName,\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n zTitle: this.data.zTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n zMin: this.data.zMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n zMax: this.data.zMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n zCenter: this.data.zCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n zWidth: this.data.zWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n }\n})\n","// service to manage camera\n/** @module CameraService */\n\n/**\n * Servis pre ovládanie a manipuláciu pozície kamery.\n * @class\n */\nexport class CameraService {\n #cameraWrapper\n constructor() {\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n }\n\n /**\n * Zmena vertikálnej polohy kamery.\n * @param {boolean} moveUp - Ak je True, kamera vyššie ak je False kamera nižšie\n * @param {number} speed - Rýchlosť zmeny pozície kamery\n * @return {void}\n */\n verticalMoveCamera = (moveUp, speed) => {\n // if we have not a cameraWrapper\n if (this.#cameraWrapper === null)\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n if (this.#cameraWrapper !== null) {\n if (moveUp) {\n this.#cameraWrapper.object3D.position.y += speed\n } else {\n if (this.#cameraWrapper.object3D.position.y > 0)\n this.#cameraWrapper.object3D.position.y -= speed\n }\n }\n }\n\n /**\n * Zmena horizontálnej polohy kamery.\n * @param {string} axis - Os po ktorej je ralizovaný pohyb kamery\n * @param {number} increment - Hodnota posunu kamery\n * @param {number} speed - Rýchlosť zmeny pozície kamery\n * @return {void}\n */\n horizontalMoveCamera = (axis, increment, speed) => {\n // if we have not a cameraWrapper\n if (this.#cameraWrapper === null)\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n if (this.#cameraWrapper !== null) {\n if (increment) {\n this.#cameraWrapper.object3D.position[axis] += speed\n } else {\n this.#cameraWrapper.object3D.position[axis] -= speed\n }\n }\n }\n\n /**\n * Zmena vertikálnej polohy kamery.\n * @param {HTMLElement} elm - Cieľový element\n * @param {Object} offset - Ofsety zobrazenej sekcie\n * @param {number} rotation - Rotácia kamery\n * @return {void}\n */\n #setVerticalOffset = (elm, offset, rotation) => {\n if (this.#cameraWrapper !== null && elm !== null) {\n // this.#cameraWrapper.object3D.rotation.y = rotation\n const newXPos = elm.object3D.position.x + 1 * elm.object3D.position.x\n const newZPos = elm.object3D.position.z + 1 * elm.object3D.position.z\n const newYPos = offset\n // this.#cameraWrapper.object3D.position.x = newXPos + 1\n // this.#cameraWrapper.object3D.position.z = newZPos + 1\n // this.#cameraWrapper.object3D.position.y = newYPos\n this.#cameraWrapper.setAttribute(\n 'animation',\n `property: position; to: ${newXPos + 1} ${newYPos} ${\n newZPos + 1\n }; dur: 100;`\n )\n this.#cameraWrapper.setAttribute(\n 'animation__1',\n `property: rotation; to: ${\n this.#cameraWrapper.object3D.rotation.x\n } ${rotation} ${this.#cameraWrapper.object3D.rotation.z}; dur: 100;`\n )\n }\n }\n\n /**\n * Zmena vertikálnej polohy kamery podľa ofsetov.\n * @param {Object} offsets - Ofsety zobrazenej sekcie\n * @return {void}\n */\n setCameraPosition = (offsets) => {\n if (this.#cameraWrapper !== null) {\n let newZPos = this.#cameraWrapper.object3D.position.y\n if (offsets.zOffset !== undefined) {\n // this.#cameraWrapper.object3D.position.y = offsets.zOffset + 2\n newZPos = offsets.zOffset * 2\n }\n const newXPos = offsets.xOffset + offsets.xOffset\n const newYPos = offsets.yOffset + offsets.yOffset\n // this.#cameraWrapper.object3D.position.x = newXPos - 3\n // this.#cameraWrapper.object3D.position.z = newYPos - 3\n setTimeout(() => {\n this.#cameraWrapper.setAttribute(\n 'animation',\n `property: position; to: ${newXPos - 3} ${newZPos} ${\n newYPos - 3\n }; dur: 40;`\n )\n }, 1800)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície.\n * @return {void}\n */\n setPredefinedDownPosition = () => {\n // get target element\n const labelElement = document.getElementById('downLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 180)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedUpPosition = () => {\n // get target element\n const labelElement = document.getElementById('upLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 0)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedRightPosition = () => {\n // get target element\n const labelElement = document.getElementById('rightLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 90)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedLeftPosition = () => {\n // get target element\n const labelElement = document.getElementById('leftLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 270)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedDownPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('downLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 180)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedUpPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('upLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 0)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedRightPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('rightLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 90)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedLeftPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('leftLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 270)\n }\n }\n}\n","// service to manage histogram views\n/** @module HistogramSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre histogram.\n * Prezobrazovanie sekcií histogramu.\n * @class\n */\nclass HistogramSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia signálu pre prezobrazenie sekcie histogramu.\n * @param {string} axis - Názov osi podľa, po ktorej sa budú posúvať ofsety\n * @param {string} histogramType - Typ histogramu (TH2 alebo TH3)\n * @param {boolean} increment - Ak je True tak sa hodnota prípočíta k ofsetu, ak False tak sa odpočíta\n * @param {boolean} defaultRange - Ak je True tak sa použije predvolená hodnota (1), ak False tak nastavený rozsah\n * @return {void}\n */\n changeHistogramSectionByOffset(axis, histogramType, increment, defaultRange) {\n this.#subject.next({\n name: histogramType,\n axis: axis,\n increment: increment,\n defaultRange: defaultRange\n })\n }\n\n /**\n * Publikácia signálu pre zmenu vizuálneho módu.\n * @param {string} typeFunction - Názov funkcie podľa, ktorej sa zmení vizualizačný mód\n * @param {string} histogramType - Typ histogramu (TH2 alebo TH3)\n * @return {void}\n */\n changeHistogramFunction(typeFunction, histogramType) {\n this.#subject.next({\n fFunction: typeFunction,\n name: histogramType\n })\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getChangedSection() {\n return this.#subject.asObservable()\n }\n}\n\nconst histogramTH2Service = new HistogramSubject()\nconst histogramTH3Service = new HistogramSubject()\nexport { histogramTH2Service, histogramTH3Service }\n","/* add listeners for keyboard controller */\n/**\n * Modul obsahuje implementované metódy, ktoré reagujú na vstupy používateľa.\n * Funkcie sú určené pre komponenty slúžiace definovanie listenerov pre klávesnicu počítača.\n * @module keyboardController\n */\nimport { CameraService } from '../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../observables/histogramSubject'\nimport binSubject from '../observables/binSubject'\nimport jsrootService from '../services/jsrootService'\nimport cameraSubject from '../observables/cameraSubject'\n\nconst keyPressed = {}\nlet cameraService = new CameraService()\nlet aframeObj\nlet geoAttributes\n\n/**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @param {string} property - Definuje názov atribútu histogramu (poloha, rozmer, rotácia), ktorý bude modifikovaný\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst handlePositioning = (property, event) => {\n let difference = 0.2\n\n if (property.name === 'scale') difference = 0.01\n else if (property.name === 'rotation') difference = 2\n\n if (event.key === 'ArrowDown') {\n property.xValue = property.xValue + difference\n } else if (event.key === 'ArrowUp') {\n property.xValue = property.xValue - difference\n } else if (event.key === '=') {\n property.yValue = property.yValue + difference\n } else if (event.key === '-') {\n property.yValue = property.yValue - difference\n } else if (event.key === 'ArrowRight') {\n property.zValue = property.zValue + difference\n } else if (event.key === 'ArrowLeft') {\n property.zValue = property.zValue - difference\n }\n aframeObj.setAttribute(\n property.name,\n `${property.xValue} ${property.yValue} ${property.zValue}`\n )\n}\n\n// handle histogram section change by default range = 1\n/**\n * Zmena zobrazovanej sekcie histogramu o predvolený rozsah (1) na klávesnici\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst handleChangeHistogramSectionByDefaultRange = (event) => {\n if (event.key === 'k' || event.key === 'K') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'i' || event.key === 'I') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n true\n )\n } else if (event.key === 'u' || event.key === 'U') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n true\n )\n } else if (event.key === 'o' || event.key === 'O') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'l' || event.key === 'L') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'j' || event.key === 'J') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n true\n )\n }\n}\n\n// handle histogram section change by user's range = user sets this range\n/**\n * Zmena zobrazovanej sekcie histogramu o vlastný rozsah (podľa nastavení používateľa) na klávesnici\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst handleChangeHistogramSectionByOwnRange = (event) => {\n if (event.key === 'k' || event.key === 'K') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'i' || event.key === 'I') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n false\n )\n } else if (event.key === 'u' || event.key === 'U') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n false\n )\n } else if (event.key === 'o' || event.key === 'O') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'l' || event.key === 'L') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'j' || event.key === 'J') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n false\n )\n }\n}\n\n// key press handler\n/**\n * Funkcia, vukonávajúca sa na klik používateľa.\n * Funkcia detekuje, uloží stlačenú klávesu do poľa stlašených kláves a zavolá náležitú funkciu\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst keyPressHandlerFunction = (event) => {\n keyPressed[event.key] = true\n\n if (keyPressed.Z || keyPressed.z) {\n handlePositioning(geoAttributes[0], event)\n }\n if (keyPressed.X || keyPressed.x) {\n handlePositioning(geoAttributes[1], event)\n }\n if (keyPressed.C || keyPressed.c) {\n handlePositioning(geoAttributes[2], event)\n }\n if (keyPressed.Shift) {\n handleChangeHistogramSectionByOwnRange(event)\n }\n handleChangeHistogramSectionByDefaultRange(event)\n // change camera up\n if (event.key === 'q' || event.key === 'Q') {\n cameraService.verticalMoveCamera(true, 0.3)\n }\n // change camera down\n if (event.key === 'e' || event.key === 'E') {\n cameraService.verticalMoveCamera(false, 0.3)\n }\n if (event.key === '1') {\n cameraService.setPredefinedDownPosition()\n }\n if (event.key === '2') {\n cameraService.setPredefinedUpPosition()\n }\n if (event.key === '3') {\n cameraService.setPredefinedRightPosition()\n }\n if (event.key === '4') {\n cameraService.setPredefinedLeftPosition()\n }\n if (event.key === '5') {\n cameraService.setPredefinedDownPositionWithOffset()\n }\n if (event.key === '6') {\n cameraService.setPredefinedUpPositionWithOffset()\n }\n if (event.key === '7') {\n cameraService.setPredefinedRightPositionWithOffset()\n }\n if (event.key === '8') {\n cameraService.setPredefinedLeftPositionWithOffset()\n }\n if (event.key === 'Enter') {\n binSubject.saveSelectedBinToLocalStorage()\n ;[\n 'th-mapping',\n 'bannerId_1',\n 'bannerId_2',\n 'bannerId_3',\n 'bannerId_4'\n ].forEach((targetId) => {\n if (document.getElementById(targetId) !== null) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n targetId,\n '500px',\n '400px'\n )\n }\n })\n }\n if (event.key === 'r' || event.key === 'R') {\n binSubject.deleteBinFromLocalStorage()\n }\n if (event.key === 'm' || event.key === 'M') {\n histogramTH2Service.changeHistogramFunction('feet', 'TH2')\n }\n if (event.key === 'n' || event.key === 'N') {\n histogramTH2Service.changeHistogramFunction('default', 'TH2')\n }\n if (event.key === 'c' || event.key === 'C') {\n cameraSubject.setUserState()\n }\n if (event.key === 'v' || event.key === 'V') {\n cameraSubject.setVisibilityOfBanners('keyboard')\n }\n if (event.key === 'x' || event.key === 'X') {\n cameraSubject.shiftBanners()\n }\n}\n\n// delete function key from array\n/**\n * Funkcia vymaže klávesu z poľa stlačených kláves\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst keyReleaseHandlerFunction = (event) => {\n delete keyPressed[event.key]\n}\n\n/**\n * Funkcia inicializuje všetky údaje o histograme a samotnú referenciu na histogram\n * @param {Object} data - Objekt obsahuje všetky atribúty (rozmer, pozícia, rotácia)\n * @param {HTMLElement} object - Referencia na element histogramu, ktorý sa má modifikovať\n * @return {void}\n */\nconst initialKeyboardController = (data, object) => {\n aframeObj = object\n geoAttributes = [data.position, data.scale, data.rotation]\n // if (this.#cameraService === null) this.#cameraService = new CameraService()\n // set initial position, scale, rotation of the histogram\n for (let i = 0; i < 3; i++) {\n aframeObj.setAttribute(\n geoAttributes[i].name,\n `${geoAttributes[i].xValue} ${geoAttributes[i].yValue} ${geoAttributes[i].zValue}`\n )\n }\n}\n\n/**\n * Funkcia aktualizuje referenciu servis kamery\n * @return {void}\n */\nconst keyboardUpdateCameraReference = () => {\n cameraService = new CameraService()\n}\n\nexport { initialKeyboardController }\nexport { keyPressHandlerFunction }\nexport { keyReleaseHandlerFunction }\nexport { keyboardUpdateCameraReference }\n","// component for modification aframe entity of histogram\nimport AFRAME from 'aframe'\n// import { setPositioning } from '../utils/histogramFactory'\nimport {\n initialKeyboardController,\n keyReleaseHandlerFunction,\n keyPressHandlerFunction,\n keyboardUpdateCameraReference\n} from '../controllers/keyboardController'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite histogram, ktorá umožňuje zmenu atribútov entity.\n * @component histogram-control\n * @param {Object} histogram - Objekt histogramu, z ktorého je potrebné spraviť projekciu\n * @param {Array} projectionAxes - Pole obsahuje názvy osí, podľa ktorých sa má vytvoriť projekcia\n * @param {Object} projections - Objekt obsahujúci súborovú štruktúru s projekciami\n * @param {Number} projIndex - Index projekcie v poli, ktorá sa má zobraziť\n * @module histogramAframeComponent\n */\n\n// aframe component for positioning histogram in scene\nAFRAME.registerComponent('histogram-control', {\n schema: {\n position: {\n name: 'position',\n xValue: 0,\n yValue: 0,\n zValue: 0\n },\n scale: {\n name: 'scale',\n xValue: 2,\n yValue: 2,\n zValue: 2\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 0,\n zValue: 0\n }\n },\n init: function () {\n const el = this.el\n\n // set controllers\n // setPositioning(el, this.schema)\n initialKeyboardController(this.schema, el)\n // keyboard listeners\n document.addEventListener('keydown', keyPressHandlerFunction)\n document.addEventListener('keyup', keyReleaseHandlerFunction)\n },\n\n update: function () {\n keyboardUpdateCameraReference()\n }\n})\n","// component to change text value of the entity after delay\nimport AFRAME from 'aframe'\n/**\n * A-Frame komponent zabezpečí oneskorené aktualizovanie označenia na entite.\n * @component label-handler\n * @param {string} value - Hodnota označenia, na ktorú sa má aktuálne označenie zmeniť\n * @param {number} delay - Hodnota oneskorenia aktualizácie označenia na entite\n * @module labelHandlerAframeComponent\n */\n\n// aframe component for handle labels on entity\nAFRAME.registerComponent('label-handler', {\n schema: {\n value: { type: 'string' },\n delay: { type: 'number' }\n },\n\n init: function () {\n const el = this.el\n this.value = this.data.value\n el.setAttribute('text', 'value', this.data.value)\n },\n\n update: function () {\n const el = this.el // Entity.\n if (this.value !== this.data.value) {\n setTimeout(() => {\n el.setAttribute('text', 'value', this.data.value)\n }, this.data.delay)\n this.value = this.data.value\n }\n }\n})\n","export default {\n def: {\n colorPalette: [\n '#4b0066',\n '#8300b3',\n '#bb00ff',\n '#cf4dff',\n '#e499ff',\n '#ffffcc',\n '#ffff99',\n '#ffff66',\n '#ffff33',\n '#fcba03'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#4b0066',\n secondary: '#FF3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n fire: {\n colorPalette: [\n '#5b0000',\n '#7b2100',\n '#a23b00',\n '#c84900',\n '#df5900',\n '#f18800',\n '#f1a000',\n '#ffae00',\n '#ffcd19',\n '#ffe159'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#5b0000',\n secondary: '#b000d4'\n },\n font: {\n primary: 'black',\n secondary: 'black'\n }\n },\n nebula: {\n colorPalette: [\n '#13004b',\n '#320065',\n '#4e0085',\n '#6100a5',\n '#7000b8',\n '#9800c6',\n '#ab00c6',\n '#b900d2',\n '#d700da',\n '#ff6efc'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#13004b',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n rainforest: {\n colorPalette: [\n '#005b01',\n '#007b23',\n '#00a23d',\n '#00c84c',\n '#00df5c',\n '#00f18b',\n '#00ffb1',\n '#19ffd0',\n '#a6fffe',\n '#56fffe'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#005b01',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n nature: {\n colorPalette: [\n '#4a691a',\n '#5e8425',\n '#79a834',\n '#91c640',\n '#9ed64b',\n '#a8dc59',\n '#b0e166',\n '#bfeb7c',\n '#d7fba2',\n '#deffad'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#4a691a',\n secondary: '#b000d4'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n water: {\n colorPalette: [\n '#00545a',\n '#00717a',\n '#0097a2',\n '#00bac8',\n '#00cede',\n '#00dff0',\n '#00edff',\n '#45f2ff',\n '#7ef6ff',\n '#bdfaff'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#00545a',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n sunflower: {\n colorPalette: [\n '#1e3600',\n '#2e4d00',\n '#507001',\n '#91a004',\n '#b4bb06',\n '#d2d309',\n '#eeed0f',\n '#ffff28',\n '#ffff85',\n '#ffffc2'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#1e3600',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n blood: {\n colorPalette: [\n '#470101',\n '#6e0101',\n '#800b0b',\n '#940c0c',\n '#a30000',\n '#bd0909',\n '#e01f1f',\n '#d43b3b',\n '#db5e5e',\n '#f78888'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#470101',\n secondary: '#f6ff00'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n magma: {\n colorPalette: [\n '#dbff1d',\n '#d5e814',\n '#d5d007',\n '#cc9b00',\n '#b87600',\n '#9c4a00',\n '#812f00',\n '#661900',\n '#661420',\n '#2b0000'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#2b0000',\n secondary: '#ae2000'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n jupiter: {\n colorPalette: [\n '#00340f',\n '#00344f',\n '#006e3a',\n '#00976a',\n '#26efd0',\n '#9c4a00',\n '#9c4a00',\n '#812f00',\n '#661900',\n '#2b0000'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#00340f',\n secondary: '#e3ff5b'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n magic: {\n colorPalette: [\n '#342000',\n '#6e5e00',\n '#888500',\n '#919700',\n '#8dbe00',\n '#caef26',\n '#cf6e85',\n '#b300b8',\n '#6b0090',\n '#3b0066'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#342000',\n secondary: '#c85bff'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n }\n}\n","/** @module ThemeProvider */\n/* object provides all necessary color palettes and schemes */\nimport palette from './theme'\n\n/**\n * Provider pre zabezpečenie všetkých potrebných farieb a štýlov.\n * @class\n */\nexport default class ThemeProvider {\n /**\n * Konštruktor pre nastavenie všetkých potrebných atribútov objektu.\n * @param {Object} theme - Objekt obsahujúci všetky potrebné palety a údaje o témach a fontoch\n * @return {void}\n */\n constructor(theme) {\n if (palette[theme]) {\n // set selected theme\n this.xAxis = palette[theme].axis.x\n this.yAxis = palette[theme].axis.y\n this.zAxis = palette[theme].axis.z\n this.palette = palette[theme].colorPalette\n this.primaryAccent = palette[theme].accent.primary\n this.secondaryAccent = palette[theme].accent.secondary\n this.primaryFont = palette[theme].font.primary\n this.secondaryFont = palette[theme].font.secondary\n } else {\n // set default theme\n this.xAxis = palette.def.axis.x\n this.yAxis = palette.def.axis.y\n this.zAxis = palette.def.axis.z\n this.palette = palette.def.colorPalette\n this.primaryAccent = palette.def.accent.primary\n this.secondaryAccent = palette.def.accent.secondary\n this.primaryFont = palette.def.font.primary\n this.secondaryFont = palette.def.font.secondary\n }\n }\n\n /**\n * Získanie kompetentnej farby pre entitu osi.\n * @param {string} axis - Označenie osi\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getAxisColor(axis) {\n if (axis === 'x' || axis === 'X') return this.xAxis\n if (axis === 'y' || axis === 'Y') return this.yAxis\n if (axis === 'z' || axis === 'Z') return this.zAxis\n return null\n }\n\n /**\n * Získanie hlavnej farby pre zvýraznenie a označenie.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getPrimaryAccentColor() {\n return this.primaryAccent\n }\n\n /**\n * Získanie sekundárnej farby pre zvýraznenie a označenie.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getSecondaryAccentColor() {\n return this.secondaryAccent\n }\n\n /**\n * Získanie hlavnej farby písma.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getPrimaryFontColor() {\n return this.primaryFont\n }\n\n /**\n * Získanie sekundárnej farby písma.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getSecondaryFontColor() {\n return this.secondaryFont\n }\n\n // set bin colors get color\n /**\n * Získanie kompetentnej farby pre bin podľa obsahu binu.\n * @param {number} content - Hodnota definujúca obsah binu\n * @return {string} - Vracia null alebo aktuálnu farbu pre bin, ktorá náleží binu podľa obsahu\n */\n getBinColor(content) {\n const fullContent = 1\n\n let color = this.palette[0]\n\n if (content >= fullContent) {\n return this.palette[9]\n }\n\n const difference = 0.12\n let sum = difference\n\n // find right color\n for (let i = 0; i <= 9; i++) {\n if (content <= sum) {\n color = this.palette[i]\n break\n }\n sum += difference\n }\n // return right color from palette\n return color\n }\n}\n","/** @module HistogramReactFactory */\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport 'aframe'\nimport ThemeProvider from '../resources/themeProvider'\n\n/**\n * Vytvorenie objektu pre generovanie entít histogramu.\n * @class HistogramReactFactory - Histogram generator\n */\nexport default class HistogramReactFactory {\n #id = ''\n #selectedBins = []\n #histogram = null\n #type = ''\n #projections = null\n #themeProvider = null\n // current offsets\n #xOffset = 1\n #yOffset = 1\n #zOffset = 1\n // current histogram limits\n #xLimit = 0\n #yLimit = 0\n #zLimit = 0\n // bin scales\n #xWidth = 1\n #yWidth = 1\n #zWidth = 1\n // range\n #range = 8\n // shiftin scene (shift to initial position)\n #labels = {\n xInitial: 0,\n yInitial: 0,\n zInitial: 0\n }\n\n // constants\n #contentCoef = 1\n #minDisplayedContent = 0\n #binScaleCoef = 2\n\n // option for animation\n #shift = {\n xOffset: 0,\n yOffset: 0,\n zOffset: 0\n }\n\n // older elements\n #previousBins = []\n\n /**\n * Inicializácia objektu pre vytváranie elementov histogramu.\n * @param {string} uniqueName - Identifikátor histogramu\n * @param {Object} histogram - Objekt histogramu určený na vizualizáciu\n * @param {Object} section - Objekt definujúci ofsety a rozsah histogramu\n * @param {number} range - Rozsah, ak sa nedefinujú ofsety ale len rozsah\n * @param {Object} projections - Objekt definujúci súborovú štruktúru s projekciami\n * @param {string} theme - string Definujúci názov témy, ktorá má byť použitá pri vizualizovaní\n * @return {void}\n */\n constructor(uniqueName, histogram, section, range, projections, theme) {\n this.initializeFactory(\n uniqueName,\n histogram,\n section,\n range,\n projections,\n theme\n )\n }\n\n /**\n * Inicializácia objektu pre vytváranie elementov histogramu.\n * @param {string} uniqueName - Identifikátor histogramu\n * @param {Object} histogram - Objekt histogramu určený na vizualizáciu\n * @param {Object} section - Objekt definujúci ofsety a rozsah histogramu\n * @param {number} range - Rozsah, ak sa nedefinujú ofsety ale len rozsah\n * @param {Object} projections - Objekt definujúci súborovú štruktúru s projekciami\n * @param {string} theme - String definujúci názov témy, ktorá má byť použitá pri vizualizovaní\n * @return {void}\n */\n initializeFactory(uniqueName, histogram, section, range, projections, theme) {\n this.setUniqueName(uniqueName)\n this.setTheme(theme)\n this.setHistogram(histogram, projections)\n this.setSection(section)\n this.setRange(range)\n }\n\n /**\n * Nastaví nove unikátne meno pre histogram\n */\n setUniqueName(uniqueName) {\n this.#id = uniqueName\n }\n\n /**\n * Nastaví ofsety pre zobrazenie sekcie histogramu\n */\n setSection(section) {\n // set current section offsets\n if (section !== null && section !== undefined) {\n if (section.xOffset)\n this.#xOffset = this.#checkOffsetValue(section.xOffset, this.#xLimit)\n if (section.yOffset)\n this.#yOffset = this.#checkOffsetValue(section.yOffset, this.#yLimit)\n }\n // define third dimension for th3 histogram\n if (this.#histogram._typename.includes('TH3')) {\n // set current section offsets\n if (section !== null && section !== undefined) {\n if (section.zOffset)\n this.#zOffset = this.#checkOffsetValue(section.zOffset, this.#zLimit)\n }\n }\n }\n\n /**\n * Nastaví histogram a všetky potrebné atribúty\n */\n setHistogram(histogram, projections) {\n this.#projections = projections\n this.#histogram = histogram\n this.#type = histogram._typename\n // set current limits\n this.#xLimit = histogram.fXaxis.fNbins\n this.#yLimit = histogram.fYaxis.fNbins\n // bin scales\n this.#xWidth =\n (histogram.fXaxis.fXmax - histogram.fXaxis.fXmin) /\n histogram.fXaxis.fNbins\n this.#yWidth =\n (histogram.fYaxis.fXmax - histogram.fYaxis.fXmin) /\n histogram.fYaxis.fNbins\n // bin shift in the scene\n this.#labels.xInitial = histogram.fXaxis.fXmin\n this.#labels.yInitial = histogram.fYaxis.fXmin\n\n this.#xOffset = this.#checkOffsetValue(this.#xOffset, this.#xLimit)\n this.#yOffset = this.#checkOffsetValue(this.#yOffset, this.#yLimit)\n\n // define third dimension for th3 histogram\n if (histogram._typename.includes('TH3')) {\n // set current limits\n this.#zLimit = histogram.fZaxis.fNbins\n // bin scales\n this.#zWidth = histogram.fZaxis.fXmax / histogram.fZaxis.fNbins\n // bin shift in the scene\n this.#labels.zInitial = histogram.fZaxis.fXmin\n\n this.#zOffset = this.#checkOffsetValue(this.#zOffset, this.#zLimit)\n }\n }\n\n /**\n * Nastaví range pre požet zobrazených binoch v danom rozmere\n */\n setRange(range) {\n if (range) {\n if (range < 4) this.#range = 4\n this.#range = range\n }\n }\n\n /**\n * Nastaví tému pre vizualizáciu\n */\n setTheme(theme) {\n this.#themeProvider = new ThemeProvider(theme)\n }\n\n /**\n * Vracia atribút objektu offset x.\n * @return {number} offsetX - Offset na osi x\n */\n getXOffset = () => {\n return this.#xOffset\n }\n\n /**\n * Vracia atribút objektu offset y.\n * @return {number} offsetX - Offset na osi y\n */\n getYOffset = () => {\n return this.#yOffset\n }\n\n /**\n * Vracia atribút objektu offset y.\n * @return {number} offsetX - Offset na osi y\n */\n getZOffset = () => {\n return this.#zOffset\n }\n\n /**\n * Vracia atribút objektu range.\n * @return {number} range - Vracia rozsah sekcie\n */\n getRange = () => {\n return this.#range\n }\n\n /**\n * Funkcia overí korektnosť hodnoty offsetu.\n * Porovná aktuálny upravený offset s limitom na danej osi.\n * @param {number} offsetValue - Hodnota offsetu, ktorú je potrebné overiť\n * @param {number} limit - Hodnota offsetu, ktorá predstavuje limit pre danú os.\n * @return {number} currOffset - Vracia upravený offset\n */\n #checkOffsetValue = (offsetValue, limit) => {\n let currOffset =\n offsetValue > limit - this.#range ? limit - this.#range : offsetValue\n\n if (currOffset < 1) {\n currOffset = 1\n }\n return currOffset\n }\n\n /**\n * Funkcia overí stav binu.\n * @param {string} binId - Identifikátor binu, ktorý je potrebné overiť\n * @return {boolean} state - Vracia True ak je bin v poli označených binov, True ak nie je v poli označených binov\n */\n #checkBinState = (binId) => {\n const updatedArray = this.#selectedBins.filter((item) => item.id === binId)\n return updatedArray.length !== 0\n }\n\n /**\n * Funkcia vytvorí entitu reprezentujúcu označenie na osi.\n * @param {string} id - Identifikátor, ktorým bude disponovať vytvorená entita\n * @param {number} positionX - X pozícia entity\n * @param {number} positionY - Y pozícia entity\n * @param {number} positionZ - Z pozícia entity\n * @param {number} rotationX - X rotácia entity\n * @param {number} rotationY - Y rotácia entity\n * @param {number} rotationZ - Z rotácia entity\n * @param {number} width - Šírka entity\n * @param {number} height - Výška entity\n * @param {number} value - Hodnota definujúca časové omeškanie pre zobrazenie označenia v entite\n * @param {string} color - HEX hodnota farby entity\n * @param {string} fontColor - HEX hodnota farby fontu entity\n * @return {HTMLElement} entita - Vytvorená entita\n */\n #createAxisEntity = (\n id,\n positionX,\n positionY,\n positionZ,\n rotationX,\n rotationY,\n rotationZ,\n width,\n height,\n value,\n color,\n fontColor\n ) => {\n return {\n key: id + this.#id,\n geometry: {\n primitive: 'plane',\n width: width,\n height: height\n },\n text: {\n color: fontColor,\n width: 4,\n height: 'auto'\n },\n labelHandler: {\n value: value,\n delay: 500\n },\n rotation: {\n x: rotationX,\n y: rotationY,\n z: rotationZ\n },\n material: {\n color: color\n },\n animation: {\n fromX: positionX + this.#shift.xOffset,\n fromY: positionY + this.#shift.zOffset,\n fromZ: positionZ + this.#shift.yOffset,\n toX: positionX,\n toY: positionY,\n toZ: positionZ\n }\n } /* (\n <a-entity\n key={id + this.#id}\n geometry={`primitive: plane; width:${width}; height:${height};`}\n text={`color: ${fontColor}; width: 4; height:auto; align:center;`}\n label-handler={`value: ${value}; delay:${500}`}\n rotation={`${rotationX} ${rotationY} ${rotationZ}`}\n // position={`${positionX} ${positionY} ${positionZ}`}\n material={`color: ${color};`}\n animation='property: text.width; from: 0; to: 4; dur: 1000;'\n animation__1='property: material.opacity; from: 0; to: 0.8; dur: 1500;'\n animation__2={`property: position; from: ${\n positionX + this.#shift.xOffset\n } ${positionY + this.#shift.zOffset} ${\n positionZ + this.#shift.yOffset\n }; to: ${positionX} ${positionY} ${positionZ}; dur: 1005;`}\n />\n ) */\n }\n\n /**\n * Funkcia na základe atribútov objektu vytvorí všetky potrebné entity pre histogram TH3.\n * @return {Object} elements - Vracia objekt obsahujúci roztriedené všetky potrebné entity histogramu pre VR\n */\n #createTH3Histogram = () => {\n // get selected bins from local storage\n this.#selectedBins = localStorageService.getBinsFromLocalStorage()\n\n // react elements to draw the histograms\n const elements = {\n type: 'TH3',\n bins: [],\n labels: [],\n banners: [],\n ground: {},\n titles: [],\n axisLabels: []\n }\n // variables for rendering the histogram\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let zcenter, zmin, zmax, zwidth\n const binName = ''\n let absoluteContent\n let c\n let count = 0\n\n // load th3 limits from localstorage\n // const binScale = ndmVrStorage.loadBinScale('TH3')\n // console.log(binScale)\n\n const maxXLength =\n this.#xOffset + this.#range > this.#xLimit\n ? this.#xLimit\n : this.#xOffset + this.#range\n const maxYLength =\n this.#yOffset + this.#range > this.#yLimit\n ? this.#yLimit\n : this.#yOffset + this.#range\n const maxZLength =\n this.#zOffset + this.#range > this.#zLimit\n ? this.#zLimit\n : this.#zOffset + this.#range\n\n const xTitle = this.#histogram.fXaxis.fTitle\n const yTitle = this.#histogram.fYaxis.fTitle\n const zTitle = this.#histogram.fZaxis.fTitle\n const xLabels = this.#histogram.fXaxis.fLabels\n ? this.#histogram.fXaxis.fLabels.arr\n : []\n const yLabels = this.#histogram.fYaxis.fLabels\n ? this.#histogram.fYaxis.fLabels.arr\n : []\n const zLabels = this.#histogram.fZaxis.fLabels\n ? this.#histogram.fZaxis.fLabels.arr\n : []\n\n const currentBinScales = []\n\n // generate react elements of the bins\n for (let iz = this.#zOffset; iz <= maxZLength; iz++)\n for (let iy = this.#yOffset; iy <= maxYLength; iy++)\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n xcenter = this.#histogram.fXaxis.GetBinCenter(ix)\n xmin = this.#histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = this.#histogram.fYaxis.GetBinCenter(iy)\n ymin = this.#histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n zcenter = this.#histogram.fZaxis.GetBinCenter(iz)\n zmin = this.#histogram.fZaxis.GetBinLowEdge(iz)\n zmax = zcenter + (zcenter - zmin)\n zwidth = zmax - zmin\n absoluteContent = this.#histogram.getBinContent(ix, iy, iz)\n c = this.#optimizeBinContent(\n absoluteContent,\n this.#histogram.fMaximum\n )\n\n // set a-frame entity box\n // set children component\n if (c > this.#minDisplayedContent) {\n let size = c\n if (c < 0.15) size = 0.15\n\n const color = this.#themeProvider.getBinColor(c)\n // check bin status\n const id =\n this.#id +\n xmin +\n 'th3' +\n xmax +\n 'th3' +\n zmin +\n 'th3' +\n zmax +\n 'th3' +\n ymin +\n 'th3' +\n ymax\n let markedColor\n if (this.#checkBinState(id)) {\n markedColor = this.#themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n typeName: 'TH2'\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: ${zTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${zmin};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${zmax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n zCenter: ${zcenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${zwidth};\n markedColor: ${markedColor};\n selectColor: ${this.#themeProvider.getSecondaryAccentColor()};\n axisX: ${this.#themeProvider.getAxisColor('x')};\n axisY: ${this.#themeProvider.getAxisColor('y')};\n axisZ: ${this.#themeProvider.getAxisColor('z')}`\n\n const width = size * 0.9\n const posX = (ix - 1) / this.#xWidth\n const posY = (iz - 1) / this.#zWidth + 0.2\n const posZ = (iy - 1) / this.#yWidth\n elements.bins[count] = {\n id: id,\n color: color,\n binData: binData,\n animation: {\n fromWidth: this.#getPreviousBinScales(id),\n fromHeight: this.#getPreviousBinScales(id),\n fromDepth: this.#getPreviousBinScales(id),\n toWidth: width,\n toHeight: width,\n toDepth: width\n },\n animation2: {\n fromX: posX + this.#shift.xOffset,\n fromY: posY + this.#shift.zOffset,\n fromZ: posZ + this.#shift.yOffset,\n toX: posX,\n toY: posY,\n toZ: posZ\n },\n animation3: {\n fromColor: this.#getPreviousBinColor(id),\n toColor: markedColor\n }\n }\n /* (\n <a-box\n key={id}\n class='clickable'\n material={`color: ${markedColor};`}\n binth3={binData}\n // position={`${posX} ${posY} ${posZ}`}\n // height={width}\n // width={width}\n // depth={width}\n mouseevent\n animation={`property: scale; from: ${this.#getPreviousBinScales(\n id\n )} ${this.#getPreviousBinScales(\n id\n )} ${this.#getPreviousBinScales(\n id\n )}; to: ${width} ${width} ${width}; dur: 1500; easing: linear;`}\n // animation={`property: scale; to: ${width} ${width} ${width}; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.75; dur: 2600;'\n animation__2={`property: position; from: ${\n posX + this.#shift.xOffset\n } ${posY + this.#shift.zOffset} ${\n posZ + this.#shift.yOffset\n }; to: ${posX} ${posY} ${posZ}; dur: 1000;`}\n animation__3={`property: material.color; from: ${this.#getPreviousBinColor(\n id\n )}; to: ${markedColor}; dur: 2600;`}\n />\n )\n */\n currentBinScales[count] = {\n key: id,\n scale: width,\n color: markedColor\n }\n }\n count++\n }\n\n this.#previousBins = currentBinScales\n // create arrays for labels\n const normalAxis = []\n const reversedAxis = []\n // set axis\n count = 0\n for (let iz = this.#yOffset; iz <= maxYLength; iz++) {\n normalAxis[count] = this.#createAxisEntity(\n 50000 + count,\n -2.5 + this.#xOffset,\n this.#zOffset - 1,\n iz - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `${\n yLabels[iz - 1]\n ? yLabels[iz - 1].fString\n : Math.round(\n (this.#labels.yInitial + iz - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 55000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n iz - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `${\n yLabels[iz - 1]\n ? yLabels[iz - 1].fString\n : Math.round(\n (this.#labels.yInitial + iz - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n }\n // add z label\n elements.axisLabels[0] = {\n id: 'leftLabel',\n key: 6000 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 270,\n z: 0\n },\n animation: {\n fromX: this.#xOffset - 4 + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset + 0.5 + this.#shift.yOffset,\n toX: this.#xOffset - 4,\n toY: this.#zOffset - 1,\n toZ: this.#yOffset + 0.5\n }\n } /* (\n <a-entity\n id='leftLabel'\n key={60000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n /* position={`${this.#xOffset - 4} ${this.#zOffset - 1} ${\n this.#yOffset + 0.5\n }`}\n animation={`property: position; from: ${\n this.#xOffset - 4 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n this.#yOffset + 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 4} ${this.#zOffset - 1} ${\n this.#yOffset + 0.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[1] = {\n id: 'rightLabel',\n key: 64001 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 90,\n z: 0\n },\n animation: {\n fromX: maxXLength + 2 + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: maxYLength - 2.5 + this.#shift.yOffset,\n toX: maxXLength + 2,\n toY: this.#zOffset - 1,\n toZ: maxYLength - 2.5\n }\n } /* (\n <a-entity\n id='rightLabel'\n key={65000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n // position={`${maxXLength + 2} ${this.#zOffset - 1} ${maxYLength - 2.5}`}\n animation={`property: position; from: ${\n maxXLength + 2 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n maxYLength - 2.5 + this.#shift.yOffset\n }; to: ${maxXLength + 2} ${this.#zOffset - 1} ${\n maxYLength - 2.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n // generate x and y axis\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n normalAxis[count] = this.#createAxisEntity(\n 70000 + count,\n ix - 1,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 270,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial + ix - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 75000 + count,\n ix - 1,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 90,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial + ix - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n }\n // add x label\n elements.axisLabels[2] = {\n id: 'downLabel',\n key: 84002 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 180,\n z: 0\n },\n animation: {\n fromX: this.#xOffset + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset - 4 + this.#shift.yOffset,\n toX: this.#xOffset,\n toY: this.#zOffset - 1,\n toZ: this.#yOffset - 4\n }\n } /* (\n <a-entity\n id='downLabel'\n key={80000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n // position={`${this.#xOffset} ${this.#zOffset - 1} ${this.#yOffset - 4}`}\n animation={`property: position; from: ${\n this.#xOffset + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n this.#yOffset - 4 + this.#shift.yOffset\n }; to: ${this.#xOffset} ${this.#zOffset - 1} ${\n this.#yOffset - 4\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[3] = {\n id: 'upLabel',\n key: 85003 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 0,\n z: 0\n },\n animation: {\n fromX: maxXLength - 2.5 + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: maxYLength + 2 + this.#shift.yOffset,\n toX: maxXLength - 2.5,\n toY: this.#zOffset - 1,\n toZ: maxYLength + 2\n }\n } /* (\n <a-entity\n id='upLabel'\n key={85000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n // position={`${maxXLength - 2.5} ${this.#zOffset - 1} ${maxYLength + 2}`}\n animation={`property: position; from: ${\n maxXLength - 2.5 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n maxYLength + 2 + this.#shift.yOffset\n }; to: ${maxXLength - 2.5} ${this.#zOffset - 1} ${\n maxYLength + 2\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n // y axis\n normalAxis[count] = this.#createAxisEntity(\n 90000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 91000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 90,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n normalAxis[count] = this.#createAxisEntity(\n 92000 + count,\n this.#xOffset - 2.5,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 270,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 93000 + count,\n this.#xOffset - 2.5,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n // add y label\n elements.axisLabels[4] = {\n id: 'upLabel1',\n key: 95004 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 270,\n z: 90\n },\n animation: {\n fromX: this.#xOffset - 1.5 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset - 2 + this.#shift.yOffset,\n toX: this.#xOffset - 1.5,\n toY: maxZLength - 1,\n toZ: this.#yOffset - 2\n }\n } /* (\n <a-entity\n key={95000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${270} ${90}`}\n /* position={`${this.#xOffset - 1.5} ${maxZLength - 1} ${\n this.#yOffset - 2\n }`}\n animation={`property: position; from: ${\n this.#xOffset - 1.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n this.#yOffset - 2 + this.#shift.yOffset\n }; to: ${this.#xOffset - 1.5} ${maxZLength - 1} ${\n this.#yOffset - 2\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[5] = {\n id: 'upLabel2',\n key: 100005 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 90,\n z: 90\n },\n animation: {\n fromX: maxXLength - 0.5 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: maxYLength + this.#shift.yOffset,\n toX: maxXLength - 0.5,\n toY: maxZLength - 1,\n toZ: maxYLength\n }\n } /* (\n <a-entity\n key={100000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${90} ${90}`}\n // position={`${maxXLength - 0.5} ${maxZLength - 1} ${maxYLength}`}\n animation={`property: position; from: ${\n maxXLength - 0.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n maxYLength + this.#shift.yOffset\n }; to: ${maxXLength - 0.5} ${maxZLength - 1} ${maxYLength}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[6] = {\n id: 'upLabel3',\n key: 105006 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 360,\n z: 90\n },\n animation: {\n fromX: this.#xOffset - 2 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: maxYLength - 0.5 + this.#shift.yOffset,\n toX: this.#xOffset - 2,\n toY: maxZLength - 1,\n toZ: maxYLength - 0.5\n }\n } /* (\n <a-entity\n key={105000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${360} ${90}`}\n // position={`${this.#xOffset - 2} ${maxZLength - 1} ${maxYLength - 0.5}`}\n animation={`property: position; from: ${\n this.#xOffset - 2 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n maxYLength - 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 2} ${maxZLength - 1} ${\n maxYLength - 0.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[7] = {\n id: 'upLabel4',\n key: 105007 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 180,\n z: 90\n },\n animation: {\n fromX: maxXLength - 0.5 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset - 1.5 + this.#shift.yOffset,\n toX: maxXLength - 0.5,\n toY: maxZLength - 1,\n toZ: this.#yOffset - 1.5\n }\n } /* (\n <a-entity\n key={110000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${180} ${90}`}\n /* position={`${maxXLength - 0.5} ${maxZLength - 1} ${\n }`}\n animation={`property: position; from: ${\n maxXLength - 0.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n this.#yOffset - 1.5 + this.#shift.yOffset\n }; to: ${maxXLength - 0.5} ${maxZLength - 1} ${\n this.#yOffset - 1.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n\n // add histogram title\n elements.titles[0] = {\n key: 150000 + this.#id,\n text: {\n value: this.#histogram.fTitle,\n color: this.#themeProvider.getPrimaryFontColor()\n },\n rotation: {\n x: 0,\n y: 123,\n z: 0\n },\n position: {\n x: this.#xOffset - 90,\n y: maxZLength + 16.5,\n z: this.#yOffset + 90\n },\n innerText: {\n value: 'Press V to show projections or controls',\n color: this.#themeProvider.getPrimaryFontColor()\n }\n } /* (\n <a-entity\n key={115000 + count + this.#id}\n text={`value: ${\n this.#histogram.fTitle\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 270; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${this.#xOffset - 90} ${maxZLength + 16.5} ${\n this.#yOffset + 90\n }`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press V to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) */\n // add file title\n elements.titles[1] = {\n key: 120001 + this.#id,\n text: {\n value: this.#histogram.fName,\n color: this.#themeProvider.getPrimaryFontColor()\n },\n rotation: {\n x: 0,\n y: 330,\n z: 0\n },\n position: {\n x: this.#xOffset + 120,\n y: maxZLength + 16.5,\n z: this.#yOffset - 70\n },\n innerText: {\n value: 'Press buttonY to show projections or controls',\n color: this.#themeProvider.getPrimaryFontColor()\n }\n } /* (\n <a-entity\n key={120000 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fName\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + 120} ${maxZLength + 16.5} ${\n this.#yOffset - 70\n }`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press buttonY to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) */\n count++\n const bannerWidthX =\n this.#range > this.#xLimit ? this.#xLimit + 1 : this.#range\n const bannerWidthY =\n this.#range > this.#yLimit ? this.#yLimit + 1 : this.#range\n elements.ground = {\n key: 125000 + count + this.#id,\n scale: {\n width: bannerWidthX + 8,\n height: 0.2,\n depth: bannerWidthY + 8\n },\n animation: {\n fromX: this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset,\n fromY: this.#zOffset - 1.5 + this.#shift.zOffset,\n fromZ: this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset,\n toX: this.#xOffset + bannerWidthX * 0.5 - 1,\n toY: this.#zOffset - 1.5,\n toZ: this.#yOffset + bannerWidthY * 0.5 - 0.5\n }\n } /* (\n <a-box\n key={125000 + count + this.#id}\n width={bannerWidthX + 8}\n material='color: #171717'\n height={0.2}\n depth={bannerWidthY + 8}\n // position={`${this.#xOffset + 2.5} -0.5 ${this.#yOffset + 2.5}`}\n animation={`property: position; from: ${\n this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset\n } ${this.#zOffset - 1.5 + this.#shift.zOffset}\n ${this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset};\n to: ${this.#xOffset + bannerWidthX * 0.5 - 1} ${this.#zOffset - 1.5} ${\n this.#yOffset + bannerWidthY * 0.5 - 0.5\n }dur: 1100;`}\n />\n ) */\n // add banner\n /*\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th3-banner'\n text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + this.#range / 2 + 2.5} ${\n this.#zOffset + this.#range / 2 + 1.5\n } ${maxYLength + 8}`}\n >\n <a-entity rotation='0 180 0' position='0 6 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n // add banner with mappings\n count++\n elements.banners[1] = {\n key: 130000 + count + this.#id,\n id: 'th-mapping',\n geometry: {\n width: 1,\n height: 15,\n depth: 22\n },\n position: {\n x: maxXLength + 8,\n y: this.#zOffset + this.#range / 2 + 0.5,\n z: this.#yOffset + this.#range / 2 + 2.5\n },\n material: {\n color: '#ffffff',\n transparent: true\n }\n } /* (\n <a-box\n key={130000 + count + this.#id}\n id='th-mapping'\n geometry='width:1; height:15; depth:22;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8} ${this.#zOffset + this.#range / 2 + 0.5}\n ${this.#yOffset + this.#range / 2 + 2.5}`}\n material='transparent:true'\n />\n ) */\n count++\n elements.banners[2] = {\n key: 135000 + count + this.#id,\n id: 'th-background',\n geometry: {\n width: 0.2,\n height: 15,\n depth: 24\n },\n position: {\n x: maxXLength + 8.2,\n y: this.#zOffset + this.#range / 2 + 0.5,\n z: this.#yOffset + 1 + this.#range / 2 + 1.5\n },\n material: {\n color: '#ffffff',\n transparent: false\n }\n } /* (\n <a-box\n key={135000 + count + this.#id}\n id='th-background'\n geometry='width:0.2; height:15; depth:24;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8.2} ${this.#zOffset + this.#range / 2 + 0.5}\n ${this.#yOffset + 1 + this.#range / 2 + 1.5}`}\n material='color: white, transparent:false'\n />\n ) */\n // add normal and reversed labels into elements\n elements.labels = [...normalAxis, ...reversedAxis]\n\n return elements\n }\n\n /**\n * Funkcia na základe atribútov objektu vytvorí všetky potrebné entity pre histogram TH2.\n * @param {string} projectionFunction - parameter určuje, ktorý vizualizačný mód bude použity pri vytvorení entít\n * @return {Object} elements - vracia objekt obsahujúci roztriedené všetky potrebné entity histogramu pre VR\n */\n #createTH2Histogram = (projectionFunction) => {\n // get selected bins from local storage\n this.#selectedBins = localStorageService.getBinsFromLocalStorage()\n\n // react elements to draw the histogram\n const elements = {\n type: 'TH2',\n bins: [],\n labels: [],\n banners: [],\n ground: {},\n titles: [],\n axisLabels: []\n }\n // variables for rendering the histogram\n let centeredYPosition\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let c\n const binName = ''\n let absoluteContent\n let count = 0\n // bin attributes\n // const binScale = ndmVrStorage.loadBinScale('TH2')\n // max length\n const maxXLength =\n this.#xOffset + this.#range > this.#histogram.fXaxis.fNbins\n ? this.#histogram.fXaxis.fNbins\n : this.#xOffset + this.#range\n const maxYLength =\n this.#yOffset + this.#range > this.#histogram.fYaxis.fNbins\n ? this.#histogram.fYaxis.fNbins\n : this.#yOffset + this.#range\n const xTitle =\n this.#histogram.fXaxis.fTitle !== '' ? this.#histogram.fXaxis.fTitle : 'x'\n const yTitle =\n this.#histogram.fYaxis.fTitle !== '' ? this.#histogram.fYaxis.fTitle : 'y'\n const xLabels = this.#histogram.fXaxis.fLabels\n ? this.#histogram.fXaxis.fLabels.arr\n : []\n const yLabels = this.#histogram.fYaxis.fLabels\n ? this.#histogram.fYaxis.fLabels.arr\n : []\n // reset previous bins\n const currentBinScales = []\n\n // generate react elements of the bins\n for (let iy = this.#yOffset; iy <= maxYLength; iy++) {\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n xcenter = this.#histogram.fXaxis.GetBinCenter(ix)\n xmin = this.#histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = this.#histogram.fYaxis.GetBinCenter(iy)\n ymin = this.#histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n absoluteContent = this.#histogram.getBinContent(ix, iy)\n c = this.#optimizeBinContent(absoluteContent, this.#histogram.fMaximum)\n centeredYPosition = c / 2\n\n // set a-frame entity box\n // set children component\n if (c > this.#minDisplayedContent) {\n const projectionColor = this.#projectionFunction(\n projectionFunction,\n xmin,\n ymin\n )\n const color =\n projectionColor === ''\n ? this.#themeProvider.getBinColor(c)\n : projectionColor\n\n // check bin status\n const id =\n this.#id + xmin + 'th2' + xmax + 'th2' + ymin + 'th2' + ymax\n let markedColor\n if (this.#checkBinState(id)) {\n markedColor = this.#themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n typeName: 'TH2'\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: 'none';\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${0};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${0};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n yCenter: ${0};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${0};\n markedColor: ${markedColor};\n selectColor: ${this.#themeProvider.getSecondaryAccentColor()};\n axisX: ${this.#themeProvider.getAxisColor('x')};\n axisY: ${this.#themeProvider.getAxisColor('y')};\n axisZ: ${this.#themeProvider.getAxisColor('z')}`\n\n const width = xwidth / this.#xWidth / this.#binScaleCoef\n const depth = ywidth / this.#yWidth / this.#binScaleCoef\n const posX = ix - 1\n const posY = iy - 1\n elements.bins[count] = {\n id: id,\n color: color,\n binData: binData,\n animation: {\n fromWidth: width,\n fromHeight: this.#getPreviousBinScales(id),\n fromDepth: depth,\n toWidth: width,\n toHeight: c,\n toDepth: depth\n },\n animation2: {\n fromX: posX + this.#shift.xOffset,\n fromY: centeredYPosition,\n fromZ: posY + this.#shift.yOffset,\n toX: posX,\n toY: centeredYPosition,\n toZ: posY\n },\n animation3: {\n fromColor: this.#getPreviousBinColor(id),\n toColor: markedColor\n }\n }\n /* (\n <a-box\n key={id}\n class='clickable'\n material={`color: ${markedColor}; opacity: 0.75;`}\n binth2={binData}\n // position={`${posX} ${centeredYPosition} ${posY}`}\n mouseevent\n animation={`property: scale; from: ${width} ${this.#getPreviousBinScales(\n id\n )} ${depth}; to: ${width} ${c} ${depth}; delay:100; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.75; dur: 2000;'\n animation__2={`property: position; from: ${\n posX + this.#shift.xOffset\n } ${centeredYPosition} ${\n posY + this.#shift.yOffset\n }; to: ${posX} ${centeredYPosition} ${posY}; dur: 1000;`}\n // animation__3={`property: material.color; from: ${this.#getPreviousBinColor(\n // >/ id\n // )}; to: ${markedColor}; dur: 2600;`}\n />\n ) */\n currentBinScales[count] = {\n key: id,\n scale: c,\n color: markedColor\n }\n }\n count++\n }\n }\n this.#previousBins = currentBinScales\n // create arrays for labels\n const normalAxis = []\n const reversedAxis = []\n // set axis\n count = 0\n for (let iy = this.#yOffset; iy <= maxYLength; iy++) {\n normalAxis[count] = this.#createAxisEntity(\n 1500 + count,\n this.#xOffset - 2.5,\n 0,\n iy - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `${\n yLabels[iy - 1]\n ? yLabels[iy - 1].fString\n : Math.round(\n (this.#labels.yInitial +\n (iy - 1) * this.#yWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 3000 + count,\n maxXLength + 0.5,\n 0,\n iy - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `${\n yLabels[iy - 1]\n ? yLabels[iy - 1].fString\n : Math.round(\n (this.#labels.yInitial +\n (iy - 1) * this.#yWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n // axis title\n count++\n }\n // add y label\n elements.axisLabels[0] = {\n id: 'leftLabel',\n key: 4500 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 270,\n z: 0\n },\n animation: {\n fromX: this.#xOffset - 4 + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: this.#yOffset + 0.5 + this.#shift.yOffset,\n toX: this.#xOffset - 4,\n toY: 0,\n toZ: this.#yOffset + 0.5\n }\n } /* (\n <a-entity\n id='leftLabel'\n key={4500 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n // position={`${this.#xOffset - 4} ${0} ${this.#yOffset + 0.5}`}\n animation={`property: position; from: ${\n this.#xOffset - 4 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n this.#yOffset + 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 4} ${0} ${this.#yOffset + 0.5}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[1] = {\n id: 'rightLabel',\n key: 6001 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 90,\n z: 0\n },\n animation: {\n fromX: maxXLength + 2 + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: maxYLength - 2.5 + this.#shift.yOffset,\n toX: maxXLength + 2,\n toY: 0,\n toZ: maxYLength - 2.5\n }\n }\n /* (\n <a-entity\n id='rightLabel'\n key={6000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n // position={`${maxXLength + 2} ${0} ${maxYLength - 2.5}`}\n animation={`property: position; from: ${\n maxXLength + 2 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n maxYLength - 2.5 + this.#shift.yOffset\n }; to: ${maxXLength + 2} ${0} ${maxYLength - 2.5}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n // generate x axis\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n normalAxis[count] = this.#createAxisEntity(\n 7500 + count,\n ix - 1,\n 0,\n this.#yOffset - 2.5,\n 270,\n 270,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial +\n (ix - 1) * this.#xWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 9000 + count,\n ix - 1,\n 0,\n maxYLength + 0.5,\n 270,\n 90,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial +\n (ix - 1) * this.#xWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n }\n // add x label\n elements.axisLabels[2] = {\n id: 'downLabel',\n key: 10502 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 180,\n z: 0\n },\n animation: {\n fromX: this.#xOffset + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: this.#yOffset - 4 + this.#shift.yOffset,\n toX: this.#xOffset,\n toY: 0,\n toZ: this.#yOffset - 4\n }\n } /* (\n <a-entity\n id='downLabel'\n key={10500 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n // position={`${this.#xOffset} ${0} ${this.#yOffset - 4}`}\n animation={`property: position; from: ${\n this.#xOffset + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n this.#yOffset - 4 + this.#shift.yOffset\n }; to: ${this.#xOffset} ${0} ${this.#yOffset - 4}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[3] = {\n id: 'upLabel',\n key: 12003 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 0,\n z: 0\n },\n animation: {\n fromX: maxXLength - 2.5 + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: maxYLength + 2 + this.#shift.yOffset,\n toX: maxXLength - 2.5,\n toY: 0,\n toZ: maxYLength + 2\n }\n } /* (\n <a-entity\n id='upLabel'\n key={12000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n // position={`${maxXLength - 2.5} ${0} ${maxYLength + 2}`}\n animation={`property: position; from: ${\n maxXLength - 2.5 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${maxYLength + 2 + this.#shift.yOffset}; to: ${\n maxXLength - 2.5\n } ${0} ${maxYLength + 2}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n\n // generate y axis\n normalAxis[count] = this.#createAxisEntity(\n 13500 + count,\n maxXLength + 0.5,\n 0,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 15000 + count,\n maxXLength + 0.5,\n 0,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n normalAxis[count] = this.#createAxisEntity(\n 16500 + count,\n this.#xOffset - 2.5,\n 0,\n maxYLength + 0.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 18000 + count,\n this.#xOffset - 2.5,\n 0,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n // add histogram title\n count++\n elements.titles[0] = {\n key: 195000 + this.#id,\n text: {\n value: this.#histogram.fTitle,\n color: this.#themeProvider.getPrimaryFontColor()\n },\n rotation: {\n x: 0,\n y: 123,\n z: 0\n },\n position: {\n x: this.#xOffset - 90,\n y: 16.5,\n z: this.#yOffset + 90\n },\n innerText: {\n value: 'Press V to show projections or controls',\n color: this.#themeProvider.getPrimaryFontColor()\n }\n } /* (\n <a-entity\n key={19500 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fTitle\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 270; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${this.#xOffset - 90} ${16.5} ${this.#yOffset + 90}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press V to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) */\n // add file title\n elements.titles[1] = {\n key: 195001 + this.#id,\n text: {\n value: this.#histogram.fName,\n color: this.#themeProvider.getPrimaryFontColor()\n },\n rotation: {\n x: 0,\n y: 330,\n z: 0\n },\n position: {\n x: this.#xOffset + 120,\n y: 16.5,\n z: this.#yOffset - 70\n },\n innerText: {\n value: 'Press buttonY to show projections or controls',\n color: this.#themeProvider.getPrimaryFontColor()\n }\n } /* (\n <a-entity\n key={21000 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fName\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + 120} ${16.5} ${this.#yOffset - 70}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press buttonY to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) */\n // add banner\n count++\n const bannerWidthX =\n this.#range > this.#xLimit ? this.#xLimit + 1 : this.#range\n const bannerWidthY =\n this.#range > this.#yLimit ? this.#yLimit + 1 : this.#range\n elements.ground = {\n key: 22500 + count + this.#id,\n scale: {\n width: bannerWidthX + 8,\n height: 0.2,\n depth: bannerWidthY + 8\n },\n animation: {\n fromX: this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset,\n fromY: -0.5,\n fromZ: this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset,\n toX: this.#xOffset + bannerWidthX * 0.5 - 1,\n toY: -0.5,\n toZ: this.#yOffset + bannerWidthY * 0.5 - 0.5\n }\n } /* (\n <a-box\n key={22500 + count + this.#id}\n width={bannerWidthX + 8}\n material='color: #171717'\n height={0.2}\n depth={bannerWidthY + 8}\n // position={`${this.#xOffset + 2.5} -0.5 ${this.#yOffset + 2.5}`}\n animation={`property: position; from: ${\n this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset\n }\n -0.5\n ${this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset};\n to:\n ${this.#xOffset + bannerWidthX * 0.5 - 1} -0.5 ${\n this.#yOffset + bannerWidthY * 0.5 - 0.5\n }; dur: 1000;`}\n />\n ) */\n /*\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th2-banner'\n // text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + this.#range / 2 + 2.5} 4.5 ${\n maxYLength + 8\n }`}\n >\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n // add banner with mappings\n count++\n elements.banners[1] = {\n key: 240000 + count + this.#id,\n id: 'th-mapping',\n geometry: {\n width: 0.1,\n height: 15,\n depth: 22\n },\n position: {\n x: maxXLength + 8,\n y: 7,\n z: this.#yOffset + this.#range / 2 + 2.5\n },\n material: {\n color: '#ffffff',\n transparent: true\n }\n } /* (\n <a-box\n key={24000 + count + this.#id}\n id='th-mapping'\n geometry='width:0.1; height:15; depth:22;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8} 7\n ${this.#yOffset + this.#range / 2 + 2.5}`}\n material='transparent:true'\n />\n ) */\n count++\n elements.banners[2] = {\n key: 255000 + count + this.#id,\n id: 'th-background',\n geometry: {\n width: 0.2,\n height: 16,\n depth: 24\n },\n position: {\n x: maxXLength + 8.2,\n y: 7,\n z: this.#yOffset + 1 + this.#range / 2 + 1.5\n },\n material: {\n color: '#ffffff',\n transparent: false\n }\n } /* (\n <a-box\n key={25500 + count + this.#id}\n id='th-background'\n geometry='width:0.2; height:16; depth:24;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8.2} 7\n ${this.#yOffset + 1 + this.#range / 2 + 1.5}`}\n material='color: white, transparent:false'\n />\n ) */\n\n // add normal and reversed labels into elements\n elements.labels = [...normalAxis, ...reversedAxis]\n\n return elements\n }\n\n /**\n * Funkcia mapuje hodnotu obsahu do určitého rozsahu.\n * @param {number} binContent - Aktuálny obsah binu, ktorý obsahuje objekt histogramu\n * @param {number} maxContent - Maximálny možný obsah, ktorý bin môže nadobudnúť\n * @return {number} binContent - Vracia optimalizovaný obsah v potrebnom rozsahu\n */\n getElements(projectionFunction) {\n // generate all necessary element\n let elements = {}\n if (this.#type.includes('TH2')) {\n elements = this.#createTH2Histogram(projectionFunction)\n } else if (this.#type.includes('TH3')) {\n elements = this.#createTH3Histogram()\n }\n return elements\n }\n\n /**\n * Funkcia mapuje hodnotu obsahu do určitého rozsahu.\n * @param {number} binContent - Aktuálny obsah binu, ktorý obsahuje objekt histogramu\n * @param {number} maxContent - Maximálny možný obsah, ktorý bin môže nadobudnúť\n * @return {number} binContent - Vracia optimalizovaný obsah v potrebnom rozsahu\n */\n #optimizeBinContent = (binContent, maxContent) => {\n if (binContent <= 0) return 0\n if (maxContent > 1) {\n // round to 2 decimal numbers\n binContent =\n Math.round(\n (binContent / (maxContent * this.#contentCoef) + Number.EPSILON) * 100\n ) / 100\n }\n\n return binContent\n }\n\n updateSection(axisOffset, increment, defaultRange) {\n if (this.#type.includes('TH3'))\n return this.#editTH3OffsetByOffset(axisOffset, increment, defaultRange)\n else if (this.#type.includes('TH2'))\n return this.#editTH2OffsetByOffset(axisOffset, increment, defaultRange)\n }\n\n /**\n * Funkcia upraví ofset, určí všetky podmienky a na základe nich vráti modifikované ofsety.\n * @param {Object} limits - Objekt, obsahujúci najvyššie povolené ofsety pre histogram\n * @param {Object} offsets - Objekt, obsahujúci všetky aktuálne ofsety pre histogram\n * @param {number} increment - Hodnota obsahujúca hodnotu, o ktoru sa modifikuje ofset\n * @param {string} axisOffset - Názov ofsetu, ktorý je potrebné modifikovať\n * @param {boolean} defaultRange - Ak je True, inkrement je predvolený (1), ak False použije sa hodnota parametra increment\n * @return {Object} result - Vracia objekt obsahujúci všetky aktualizované ofsety\n */\n #getValidOffset = (limits, offsets, increment, axisOffset, defaultRange) => {\n this.#shift = {\n xOffset: 0,\n yOffset: 0,\n zOffset: 0\n }\n if (increment) {\n if (defaultRange) {\n offsets[axisOffset] += 1\n this.#shift[axisOffset] = -1\n } else {\n offsets[axisOffset] += offsets.range\n this.#shift[axisOffset] = -offsets.range\n }\n if (limits[axisOffset] <= offsets.range) {\n offsets[axisOffset] = 1\n this.#shift[axisOffset] = 0\n return offsets\n }\n if (offsets[axisOffset] > limits[axisOffset] - offsets.range) {\n offsets[axisOffset] = limits[axisOffset] - offsets.range\n this.#shift[axisOffset] = 0\n return offsets\n }\n } else {\n if (defaultRange) {\n offsets[axisOffset] -= 1\n this.#shift[axisOffset] = 1\n } else {\n offsets[axisOffset] -= offsets.range\n this.#shift[axisOffset] = offsets.range\n }\n if (offsets[axisOffset] < 1) {\n offsets[axisOffset] = 1\n this.#shift[axisOffset] = 0\n return offsets\n }\n }\n return offsets\n }\n\n /**\n * Funkcia upravuje ofset sekcie pre TH3 histogram.\n * @param {string} axisOffset - Označenie ofsetu, ktorý je potrebné modifikovať\n * @param {number} increment - Hodnota, o ktorú je potrebné upraviť ofset\n * @param {boolean} defaultRange - Ak je True, inkrement je predvolený (1), ak False použije sa hodnota parametra increment\n * @return {Object} result - Vracia objekt obsahujúci všetky aktualizované ofsety\n */\n #editTH3OffsetByOffset = (axisOffset, increment, defaultRange) => {\n // set object with limits\n const limits = {\n xOffset: this.#xLimit,\n yOffset: this.#yLimit,\n zOffset: this.#zLimit\n }\n // set object with current offsets\n const offsets = {\n name: 'TH3',\n xOffset: this.#xOffset,\n yOffset: this.#yOffset,\n zOffset: this.#zOffset,\n range: this.#range\n }\n const result = this.#getValidOffset(\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n this.#xOffset = result.xOffset\n this.#yOffset = result.yOffset\n this.#zOffset = result.zOffset\n // return result as object\n return result\n }\n\n /**\n * Funkcia určuje upravený vzhľad binov, závislom na špeciálnej funkcií.\n * @param {string} projectionFunction - Definuje názov módu, ktorý bude použitý\n * @param {number} xMin - X súradnica binu, ktorý je potrebné upraviť\n * @param {number} yMin - Y súradnica binu, ktorý je potrebné upraviť\n * @return {string} color - Vracia HEX hodnotu farby, ktorá binu prislúcha\n */\n #projectionFunction = (projectionFunction, xMin, yMin) => {\n if (projectionFunction === 'feet' && this.#projections !== null) {\n const xIndex = xMin / this.#xWidth\n const yIndex = yMin / this.#yWidth\n try {\n const projectionHistogram =\n this.#projections.fFolders.arr[xIndex].fFolders.arr[yIndex].fFolders\n .arr[0]\n const LineColor = projectionHistogram.fFunctions.arr[0].fLineColor\n\n if (LineColor === 600) {\n return 'blue'\n } else if (LineColor === 632) {\n return 'red'\n }\n } catch (e) {\n return ''\n }\n }\n return ''\n }\n\n /**\n * Funkcia upravuje ofset sekcie pre TH2 histogram.\n * @param {string} axisOffset - Označenie ofsetu, ktorý je potrebné modifikovať\n * @param {number} increment - Hodnota, o ktorú je potrebné upraviť ofset\n * @param {boolean} defaultRange - Ak je True, inkrement je predvolený (1), ak False použije sa hodnota parametra increment\n * @return {Object} result - Vracia objekt obsahujúci všetky aktualizované ofsety\n */\n #editTH2OffsetByOffset = (axisOffset, increment, defaultRange) => {\n // set object with limits\n const limits = {\n xOffset: this.#xLimit,\n yOffset: this.#yLimit\n }\n // set object with current offsets\n const offsets = {\n name: 'TH2',\n xOffset: this.#xOffset,\n yOffset: this.#yOffset,\n range: this.#range\n }\n const result = this.#getValidOffset(\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n this.#xOffset = result.xOffset\n this.#yOffset = result.yOffset\n // return result as object\n return result\n }\n\n /**\n * Funkcia určuje predošlú veľkosť binu, Pri zmene veľkosti binu sa bin upráví z predošlej hodnoty na novú hodnotu.\n * @param {string} id - Identifikátor binu\n * @return {number} result - Vracia predošlú veľkosť binu\n */\n #getPreviousBinScales = (id) => {\n const previousBin = this.#previousBins.filter(\n (prevBin) => prevBin.key === id\n )\n if (previousBin[0] && previousBin[0].scale) {\n return previousBin[0].scale\n }\n return 0\n }\n\n /**\n * Funkcia určuje predošlú farbu binu, Pri zmene farby binu sa bin zmení z predošlej farby na novú farbu.\n * @param {string} id - Identifikátor binu\n * @return {string} result - Vracia HEX hodnotu predošlej farby binu\n */\n #getPreviousBinColor = (id) => {\n const previousBin = this.#previousBins.filter(\n (prevBin) => prevBin.key === id\n )\n if (previousBin[0] && previousBin[0].scale) {\n return previousBin[0].color\n }\n return '#ffffff'\n }\n}\n","import React, { useState, useEffect } from 'react'\nimport 'aframe'\nimport '../../aframeComponents/cursorEventAframeComponent'\nimport '../../aframeComponents/thAframeComponent'\nimport '../../aframeComponents/histogramAframeComponent'\nimport '../../aframeComponents/labelHandlerAframeComponent'\nimport HistogramReactFactory from '../../utils/histogramGenerator'\n// import { CameraService } from '../../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../../observables/histogramSubject'\n\n/**\n * React komponent pre vytvorenie histogramu.\n * @component\n * @param {string} name - Názov pre histogram\n * @param {Object} histogram - Objekt histogramu, ktorý sa bude v komponente vizualizovať\n * @param {Object} histoSection - Objekt obsahujúci údaje o sekcií a rozsahu, ktorý bude zobrazený\n * @param {Object} projections - Objekt obsahujúci súborovú štruktúru s projekciami\n * @param {number} range - Definuje rozsah, v prípade ak sa vizualizuje bez určených ofsetov iba určitý rozsah\n * @param {string} theme - Definuje tému pre vizualizáciu histogramu\n * @example\n * return (\n * <NdmVrHistogram3D\n * name={info.name}\n * histogram={data.histogram}\n * histoSection={data.section}\n * projections={data.projections}\n * range={data.range}\n * theme={info.theme}/>\n * )\n */\nconst NdmVrHistogram3D = ({\n name,\n histogram,\n histoSection,\n projections,\n range,\n theme\n}) => {\n // const unmounted = useRef(false)\n // pressed keys\n let subscription\n // const cameraService = new CameraService()\n // create factory\n const [factory] = useState(\n new HistogramReactFactory(\n name,\n histogram,\n histoSection || null,\n range,\n projections,\n theme || 'def'\n )\n )\n const [mode, setMode] = useState('default')\n const [elements, setElements] = useState(factory.getElements(mode))\n\n // handler functions\n // handle subscription\n const handleSubscription = (data) => {\n if (histogram._typename.includes(data.name)) {\n // save new section to local storage\n if (data.axis) {\n factory.updateSection(data.axis, data.increment, data.defaultRange)\n setElements(factory.getElements(mode))\n } else {\n setMode((prevState) =>\n prevState !== data.fFunction ? data.fFunction : prevState\n )\n }\n }\n }\n\n // use effect hooks\n // update histogram unique name\n useEffect(() => {\n factory.setUniqueName(name)\n setElements(factory.getElements(mode))\n }, [name])\n\n // update histogram and projection\n useEffect(() => {\n factory.setHistogram(histogram, projections)\n setElements(factory.getElements(mode))\n }, [histogram, projections])\n\n // update histogram section\n useEffect(() => {\n factory.setSection(histoSection)\n setElements(factory.getElements(mode))\n }, [histoSection])\n\n // update histogram section range\n useEffect(() => {\n factory.setRange(range)\n setElements(factory.getElements(mode))\n }, [range])\n\n // update histogram unique name\n useEffect(() => {\n factory.setTheme(theme)\n setElements(factory.getElements(mode))\n }, [theme])\n\n // update histogram with certain mode\n useEffect(() => {\n setElements(factory.getElements(mode))\n }, [mode])\n\n // subscription after render histogram\n useEffect(() => {\n if (histogram._typename.includes('TH2')) {\n subscription = histogramTH2Service\n .getChangedSection()\n .subscribe(handleSubscription)\n } else if (histogram._typename.includes('TH3')) {\n subscription = histogramTH3Service\n .getChangedSection()\n .subscribe(handleSubscription)\n }\n return () => subscription.unsubscribe()\n }, [elements])\n\n if (elements?.bins) {\n return (\n <a-entity histogram-control>\n {elements.bins.map((bin) => (\n <a-box\n key={bin.id}\n class='clickable'\n material={`color: ${bin.color}; opacity: 0.75;`}\n binth={bin.binData}\n mouseevent\n animation={`property: scale; from: ${bin.animation.fromWidth} ${bin.animation.fromHeight} ${bin.animation.fromDepth}; to: ${bin.animation.toWidth} ${bin.animation.toHeight} ${bin.animation.toDepth}; delay:100; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.75; dur: 2000;'\n animation__2={`property: position; from: ${bin.animation2.fromX} ${bin.animation2.fromY} ${bin.animation2.fromZ}; to: ${bin.animation2.toX} ${bin.animation2.toY} ${bin.animation2.toZ}; dur: 1000;`}\n animation__3={`property: material.color; from: ${bin.animation3.fromColor}; to: ${bin.animation3.toColor}; dur: 1600;`}\n />\n ))}\n\n {elements.labels.map((label) => (\n <a-entity\n key={label.key}\n geometry={`primitive: ${label.geometry.primitive}; width:${label.geometry.width}; height:${label.geometry.height};`}\n text={`color: ${label.text.color}; width: ${label.text.width}; height: ${label.text.height}; align:center;`}\n label-handler={`value: ${label.labelHandler.value}; delay:${label.labelHandler.delay}`}\n rotation={`${label.rotation.x} ${label.rotation.y} ${label.rotation.z}`}\n material={`color: ${label.material.color};`}\n animation='property: text.width; from: 0; to: 4; dur: 1000;'\n animation__1='property: material.opacity; from: 0; to: 0.8; dur: 1500;'\n animation__2={`property: position; from: ${label.animation.fromX} ${label.animation.fromY} ${label.animation.fromZ}; to: ${label.animation.toX} ${label.animation.toY} ${label.animation.toZ}; dur: 1005;`}\n />\n ))}\n {elements.titles.map((title) => (\n <a-entity\n key={title.key}\n text={`value: ${title.text.value}; color: ${title.text.color}; width: 230; height:auto; align:center;`}\n rotation={`${title.rotation.x} ${title.rotation.y} ${title.rotation.z}`}\n position={`${title.position.x} ${title.position.y} ${title.position.z}`}\n >\n <a-text\n value={title.innerText.value}\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={title.innerText.color}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ))}\n {elements.axisLabels.map((axisLabel) => (\n <a-entity\n id={axisLabel.id}\n key={axisLabel.key}\n text={`value: ${axisLabel.text.value}; color: ${axisLabel.text.color}; width: 10; height:auto; align:center;`}\n rotation={`${axisLabel.rotation.x} ${axisLabel.rotation.y} ${axisLabel.rotation.z}`}\n animation={`property: position; from: ${axisLabel.animation.fromX} ${axisLabel.animation.fromY} ${axisLabel.animation.fromZ}; to: ${axisLabel.animation.toX} ${axisLabel.animation.toY} ${axisLabel.animation.toZ}; dur: 1000;`}\n material='opacity: 0;'\n />\n ))}\n {elements.ground && (\n <a-box\n key={elements.ground.key}\n width={elements.ground.scale.width}\n material='color: #171717'\n height={elements.ground.scale.height}\n depth={elements.ground.scale.depth}\n animation={`property: position; from: ${elements.ground.animation.fromX} ${elements.ground.animation.fromY} ${elements.ground.animation.fromZ};\n to:\n ${elements.ground.animation.toX} ${elements.ground.animation.toY} ${elements.ground.animation.toZ}; dur: 1000;`}\n />\n )}\n {elements.banners.map((banner) => (\n <a-box\n key={banner.key}\n id={banner.id}\n geometry={`width:${banner.geometry.width}; height:${banner.geometry.height}; depth:${banner.geometry.depth};`}\n position={`${banner.position.x} ${banner.position.y} ${banner.position.z}`}\n material={`color: ${banner.material.color}, transparent: ${banner.material.transparent}`}\n />\n ))}\n </a-entity>\n )\n } else {\n return (\n <a-box\n animation__1='property: rotation; to: 0 180 360; dur: 10000; easing: linear; loop: true'\n animation__2='property: scale; from: 1 1 1; to: 10 10 10; dur: 15000; timeout: 15000; loop: true; easing: linear; dir: alternate'\n animation__color='property: material.color; from: #003682; to: #7d0002; dur: 80000: easing: linear: loop: true; dir: alternate'\n position='0 1.5 -2'\n />\n )\n }\n}\n\nexport default NdmVrHistogram3D\n","import React, { useState } from 'react'\nimport NdmVrCamera from '../NdmVrCamera'\nimport NdmVrHistogram3D from '../NdmVrHistogram3D'\n\n/**\n * React komponent pre vytvorenie VR scény s všetkými potrebnými komponentami.\n * @component\n * @param {Object} data - Objekt obsahuje objekty histogramu, sekcie poprípade projekcie\n * @param {Object} info - Objekt obsahuje sekundárne údaje (meno, témy, atribúty pozadia v scéne)\n * @example\n * data = {\n * histogram: histograms.physics,\n * projections: histograms.projections,\n * section: section\n * }\n * info = {\n * name: 'Physics',\n * theme: theme,\n * background: {\n * url: './ndmvr/backgrounds/background1.jpg',\n * radius: '3000',\n * height: '2048',\n * width: '2048'\n * }\n * }\n * return (\n * <NdmVrScene data={data} info={info} />\n * )\n */\nconst NdmVrScene = ({ data, info }) => {\n const [background] = useState({\n url: info.background.url\n ? info.background.url\n : './ndmvr/backgrounds/background1.jpg',\n radius: info.background.radius ? info.background.radius : '3000',\n height: info.background.height ? info.background.height : '2048',\n width: info.background.width ? info.background.width : '2048'\n })\n\n return (\n <a-scene\n embedded\n style={{\n zIndex: '1',\n width: '100%',\n minHeight: 'calc(90vh)'\n }}\n >\n <a-assets>\n <img id='skyTexture' src={background.url} alt='background' />\n </a-assets>\n\n <NdmVrCamera />\n <NdmVrHistogram3D\n name={info.name}\n histogram={data.histogram}\n histoSection={data.section}\n projections={data.projections}\n range={data.range}\n theme={info.theme}\n />\n <a-sky\n height={background.height}\n radius={background.radius}\n width={background.width}\n src='#skyTexture'\n position='0 1000 0'\n />\n </a-scene>\n )\n}\n\nexport default NdmVrScene\n","/* object for creating the entity builder from templates */\n\nexport default class EntityBuilder {\n model = null\n constructor(model) {\n this.model = model\n }\n\n updateElement(count, histogramElm, element, entityType) {\n if (this.model[element].elements[count]) {\n if (element === 'titles') {\n this.createTitle(\n this.model[element].elements[count],\n this.model[element].attributes[count]\n )\n } else {\n this.createElement(\n this.model[element].elements[count],\n this.model[element].attributes[count],\n entityType\n )\n }\n } else {\n let newElement\n\n if (element === 'titles') {\n newElement = this.createTitle(\n undefined,\n this.model[element].attributes[count]\n )\n } else {\n newElement = this.createElement(\n undefined,\n this.model[element].attributes[count],\n entityType\n )\n }\n this.model[element].elements[count] = newElement\n histogramElm.appendChild(newElement)\n }\n }\n\n deleteUnnecessaryElements(count, element) {\n const newLength = count\n // overbins\n if (element.length === 1) {\n while (this.model[element[0]].elements[count]) {\n this.model[element[0]].elements[count].remove()\n count++\n }\n this.model[element[0]].elements.length = newLength\n this.model[element[0]].attributes.length = newLength\n } else {\n while (this.model[element[0]].elements[count]) {\n this.model[element[0]].elements[count].remove()\n this.model[element[1]].elements[count].remove()\n count++\n }\n this.model[element[0]].elements.length = newLength\n this.model[element[0]].attributes.length = newLength\n this.model[element[1]].elements.length = newLength\n this.model[element[1]].attributes.length = newLength\n }\n }\n\n createElement(Element, data, type) {\n let element = Element\n if (element === undefined || element === null) {\n const entityType = this.checkEntityType(type)\n element = document.createElement(entityType)\n }\n for (const feature in data) {\n element.setAttribute(feature, data[feature])\n }\n return element\n }\n\n createBannerElement(Element, linesCount, data) {\n let parent = Element\n if (parent === undefined || parent === null) {\n parent = document.createElement('a-entity')\n const array = this.createBannerLines(linesCount, data)\n array.map((element) => parent.append(element))\n }\n parent.setAttribute('position', data.position)\n parent.setAttribute('id', data.id)\n return parent\n }\n\n createBannerLines(linesCount, data) {\n const array = []\n for (let i = linesCount - 1; i > -1; i--) {\n data.line.position.y = 2 * i\n const line = document.createElement('a-entity')\n line.setAttribute('rotation', data.line.rotation)\n line.setAttribute('position', data.line.position)\n line.setAttribute('text', data.line.text)\n array.push(line)\n }\n const background = document.createElement('a-entity')\n background.setAttribute('geometry', data.background.geometry)\n background.setAttribute('position', data.background.position)\n background.setAttribute('material', data.background.material)\n array.push(background)\n return array\n }\n\n createTitle(Element, data) {\n let parent = Element\n if (parent === undefined || parent === null) {\n parent = document.createElement('a-entity')\n const child = this.createElement(undefined, data.background)\n parent.appendChild(child)\n }\n delete data.background\n return this.createElement(parent, data)\n }\n\n checkEntityType(type) {\n if (\n type === 'a-box' ||\n type === 'a-sphere' ||\n type === 'a-text' ||\n type === 'a-circle' ||\n type === 'a-text'\n ) {\n return type\n } else {\n return 'a-entity'\n }\n }\n}\n","/* object for creating the entity templates for entities */\n\nexport default class EntityTemplate {\n bannerTemplate(data, lineData, backgroundData) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const id = data.id\n const background = this.bannerBackgroundTemplate(backgroundData)\n const line = this.lineTemplate(lineData)\n return {\n position: position,\n id: id,\n background: background,\n line: line\n }\n }\n\n binTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const scale = {\n x: data.scaleX,\n y: data.scaleY,\n z: data.scaleZ\n }\n const material = {\n color: data.color,\n opacity: 0.75\n }\n const clas = data.class\n const binTh2 = data.data\n const id = data.id\n return {\n position: position,\n scale: scale,\n material: material,\n id: id,\n class: clas,\n binth2: binTh2,\n mouseevent: ''\n }\n }\n\n labelTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const geometry = {\n primitive: 'plane',\n width: 4,\n height: 1\n }\n const text = {\n value: data.value,\n color: data.color,\n width: 10,\n height: 'auto',\n align: 'center'\n }\n const material = {\n opacity: 0\n }\n const id = data.id\n return {\n position: position,\n rotation: rotation,\n geometry: geometry,\n text: text,\n material: material,\n id: id\n }\n }\n\n axisTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const geometry = {\n primitive: 'plane',\n width: data.width,\n height: data.height\n }\n const text = {\n value: data.value,\n color: 'black',\n width: 4,\n height: 'auto',\n align: 'center'\n }\n const material = {\n color: data.color,\n opacity: 0.8\n }\n return {\n position: position,\n rotation: rotation,\n geometry: geometry,\n text: text,\n material: material\n }\n }\n\n titleTemplate(data, textData) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const material = {\n opacity: 0\n }\n const text = {\n value: data.title,\n color: data.color,\n width: 230,\n height: 'auto',\n align: 'center'\n }\n const back = this.titleTextTemplate(textData)\n return {\n position: position,\n rotation: rotation,\n material: material,\n text: text,\n background: back\n }\n }\n\n titleTextTemplate(data) {\n const geometry = {\n primitive: 'plane',\n width: data.width,\n height: data.height\n }\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const material = {\n color: data.color,\n opacity: 0.6\n }\n return {\n position: position,\n geometry: geometry,\n material: material\n }\n }\n\n lineTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const text = {\n value: '',\n width: 14,\n height: 'auto',\n align: 'center'\n }\n return {\n position: position,\n rotation: rotation,\n text: text\n }\n }\n\n bannerBackgroundTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const geometry = {\n primitive: 'box',\n width: data.width,\n height: data.height,\n depth: data.depth\n }\n const material = {\n color: data.color\n }\n return {\n position: position,\n geometry: geometry,\n material: material\n }\n }\n}\n","// import React from 'react'\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport 'aframe'\nimport EntityBuilder from './EntityBuilder'\nimport EntityTemplate from './EntityTemplate'\nimport ThemeProvider from '../resources/themeProvider'\n\nlet selectedBins = []\n\nfunction checkBinState(binId) {\n const updatedArray = selectedBins.filter((item) => item.id === binId)\n return updatedArray.length !== 0\n}\n// create axis entity\n/*\nfunction createAxisEntity(\n id,\n positionX,\n positionY,\n positionZ,\n rotationX,\n rotationY,\n rotationZ,\n width,\n height,\n value,\n color\n) {\n const element = document.createElement('a-entity')\n element.setAttribute('position', {\n x: positionX,\n y: positionY,\n z: positionZ\n })\n element.setAttribute('rotation', {\n x: rotationX,\n y: rotationY,\n z: rotationZ\n })\n element.setAttribute('geometry', {\n primitive: 'plane',\n width: width,\n height: height\n })\n element.setAttribute('text', {\n value: value,\n color: 'black',\n width: 14,\n height: 'auto',\n align: 'center'\n })\n element.setAttribute('material', {\n color: color,\n opacity: 0.8\n })\n return element\n}\n*/\n// create th3 histogram\n/*\n function createTH3Histogram(histogram, xOffset, yOffset, zOffset, range) {\n // get selected bins from local storage\n selectedBins = localStorageService.getBinsFromLocalStorage()\n // react elements to draw the histograms\n const elements = {\n bins: [],\n normalAxis: [],\n reversedAxis: [],\n banners: []\n }\n // variables for rendering the histogram\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let zcenter, zmin, zmax, zwidth\n const binName = ''\n let absoluteContent\n let c\n let count = 0\n\n const maxXLength =\n xOffset + range > histogram.fXaxis.fXmax\n ? histogram.fXaxis.fXmax\n : xOffset + range\n const maxYLength =\n yOffset + range > histogram.fYaxis.fXmax\n ? histogram.fYaxis.fXmax\n : yOffset + range\n const maxZLength =\n zOffset + range > histogram.fZaxis.fXmax\n ? histogram.fZaxis.fXmax\n : zOffset + range\n\n const xTitle = histogram.fXaxis.fTitle\n const yTitle = histogram.fYaxis.fTitle\n const zTitle = histogram.fZaxis.fTitle\n\n // generate react elements of the bins\n for (let iz = zOffset; iz <= maxZLength; iz++)\n for (let iy = yOffset; iy <= maxYLength; iy++)\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n xcenter = histogram.fXaxis.GetBinCenter(ix)\n xmin = histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = histogram.fYaxis.GetBinCenter(iy)\n ymin = histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n zcenter = histogram.fZaxis.GetBinCenter(iz)\n zmin = histogram.fZaxis.GetBinLowEdge(iz)\n zmax = zcenter + (zcenter - zmin)\n zwidth = zmax - zmin\n absoluteContent = histogram.getBinContent(ix, iy, iz)\n c = optimizeBinContent(absoluteContent, histogram.fMaximum)\n\n // set a-frame entity box\n // set children component\n if (c > 0) {\n let size = c\n if (c < 0.15) size = 0.15\n\n const color = setBinColor(c)\n // check bin status\n const id =\n xmin +\n 'th3' +\n xmax +\n 'th3' +\n zmin +\n 'th3' +\n zmax +\n 'th3' +\n ymin +\n 'th3' +\n ymax\n let markedColor\n if (checkBinState(id)) {\n markedColor = '#FF3700'\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: ${zTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${zmin};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${zmax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n zCenter: ${zcenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${zwidth};\n markedColor: ${markedColor}`\n elements.bins[count] = `\n <a-box\n key=${count}\n class='clickable'\n material=color: ${markedColor}; opacity: 0.75;\n bin-th3=${binData}\n position=${xmin} ${zmin + 0.2} ${ymin}\n height=${size * 0.9}\n width=${size * 0.9}\n depth=${size * 0.9}\n mouseEvent\n />\n `\n }\n count++\n }\n\n // set axis\n count = 0\n for (let iz = yOffset; iz <= maxYLength; iz++) {\n const normalAxis = createAxisEntity(\n 1500 + count,\n -2.5 + xOffset,\n zOffset - 1,\n iz - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `__${iz - 1}`,\n 'green'\n )\n const reversedAxis = createAxisEntity(\n 4500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n iz - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `____\\n${iz - 1}`,\n 'green'\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add z label\n elements.normalAxis[count] = (\n <a-entity\n id='leftLabel'\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: green; width: 14; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n position={`${xOffset - 4} ${zOffset - 1} ${yOffset + 0.5}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='rightLabel'\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: green; width: 14; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n position={`${maxXLength + 2} ${zOffset - 1} ${maxYLength - 2.5}`}\n material='opacity: 0;'\n />\n )\n count++\n // generate x and y axis\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n const normalAxis = createAxisEntity(\n 1500 + count,\n ix - 1,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 1,\n 2,\n `''''|\\n${ix - 1}`,\n 'darkred'\n )\n const reversedAxis = createAxisEntity(\n 4500 + count,\n ix - 1,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 1,\n 2,\n `|''''\\n${ix - 1}`,\n 'darkred'\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add x label\n elements.normalAxis[count] = (\n <a-entity\n id='downLabel'\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: red; width: 14; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n position={`${xOffset} ${zOffset - 1} ${yOffset - 4}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='upLabel'\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: red; width: 14; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n position={`${maxXLength - 2.5} ${zOffset - 1} ${maxYLength + 2}`}\n material='opacity: 0;'\n />\n )\n count++\n // y axis\n elements.normalAxis[count] = createAxisEntity(\n 4500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n elements.reversedAxis[count] = createAxisEntity(\n 1500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n count++\n elements.normalAxis[count] = createAxisEntity(\n 1500 + count,\n xOffset - 2.5,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n elements.reversedAxis[count] = createAxisEntity(\n 1500 + count,\n xOffset - 2.5,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n count++\n // add y label\n /*\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${270} ${90}`}\n position={`${xOffset - 1.5} ${maxZLength - 1.5} ${yOffset - 2}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${90} ${90}`}\n position={`${maxXLength - 0.5} ${maxZLength - 1.5} ${maxYLength}`}\n material='opacity: 0;'\n />\n )\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${360} ${90}`}\n position={`${xOffset - 2} ${maxZLength - 1.5} ${maxYLength - 0.5}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${180} ${90}`}\n position={`${maxXLength - 0.5} ${maxZLength - 1.5} ${yOffset - 1.5}`}\n material='opacity: 0;'\n />\n )\n // add histogram title\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${histogram.fTitle}; color: black; width: 230; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${xOffset - 90} ${maxZLength - 6.5} ${yOffset + 90}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.6; color: white;'\n />\n </a-entity>\n )\n // add file title\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${xOffset + 120} ${-6.5} ${yOffset - 70}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.6; color: white;'\n />\n </a-entity>\n )\n // add banner\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th3-banner'\n text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${xOffset + range / 2 + 2.5} ${zOffset + range / 2 + 1.5} ${\n maxYLength + 8\n }`}\n >\n <a-entity rotation='0 180 0' position='0 6 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n// add banner with mappings\n/*\n elements.banners[1] = (\n <a-entity\n key={4500 + count + 3}\n id='th3-mapping'\n geometry='primitive: box; width:1; height:15; depth:15;'\n position={`${maxXLength + 8} ${zOffset + range / 2 + 0.5}\n ${yOffset + range / 2 + 2.5}`}\n material='opacity: 1; color: black;'\n />\n )\n\n return elements\n }\n */\n\n// create th2 histogram\nfunction createTH2Histogram(\n Element,\n model,\n histogram,\n xOffset,\n yOffset,\n range,\n theme\n) {\n // get selected bins from local storage\n selectedBins = localStorageService.getBinsFromLocalStorage()\n // react elements to draw the histogram\n\n const entityTemplate = new EntityTemplate()\n const entityBuilder = new EntityBuilder(model)\n const themeProvider = new ThemeProvider(theme)\n\n const data = {}\n\n const histogramElm = Element\n // variables for rendering the histogram\n let centeredYPosition\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let c\n const binName = ''\n let absoluteContent\n let count = 0\n const maxXLength =\n xOffset + range > histogram.fXaxis.fXmax\n ? histogram.fXaxis.fXmax\n : xOffset + range\n const maxYLength =\n yOffset + range > histogram.fYaxis.fXmax\n ? histogram.fYaxis.fXmax\n : yOffset + range\n const xTitle = histogram.fXaxis.fTitle\n const yTitle = histogram.fYaxis.fTitle\n const xLabels = histogram.fXaxis.fLabels ? histogram.fXaxis.fLabels.arr : []\n const yLabels = histogram.fYaxis.fLabels ? histogram.fYaxis.fLabels.arr : []\n\n // generate react elements of the bins\n for (let iy = yOffset; iy <= maxYLength; iy++) {\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n xcenter = histogram.fXaxis.GetBinCenter(ix)\n xmin = histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = histogram.fYaxis.GetBinCenter(iy)\n ymin = histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n absoluteContent = histogram.getBinContent(ix, iy)\n c = optimizeBinContent(absoluteContent, histogram.fMaximum)\n centeredYPosition = c / 2\n\n // set a-frame entity box\n // set children component\n if (c > 0) {\n const color = themeProvider.getBinColor(c)\n // check bin status\n const id = xmin + 'th2' + xmax + 'th2' + ymin + 'th2' + ymax\n let markedColor\n if (checkBinState(id)) {\n markedColor = themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n xMax: ${xmax};\n yMax: ${ymax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n markedColor: ${markedColor};\n selectColor: ${themeProvider.getSecondaryAccentColor()};\n axisX: ${themeProvider.getAxisColor('x')};\n axisY: ${themeProvider.getAxisColor('y')};\n axisZ: ${themeProvider.getAxisColor('z')}`\n\n data.id = id\n data.positionX = xmin\n data.positionY = centeredYPosition\n data.positionZ = ymin\n data.scaleX = xwidth / 2\n data.scaleY = c\n data.scaleZ = ywidth / 2\n data.color = markedColor\n data.class = 'clickable'\n data.data = binData\n\n model.bins.attributes[count] = entityTemplate.binTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'bins', 'a-box')\n count++\n }\n }\n }\n\n entityBuilder.deleteUnnecessaryElements(count, ['bins'])\n\n // generate YYYYYYYYYYYYYYYYYYYYYYYYYYYY axis\n // left up\n data.id = 1500 + count\n data.positionX = maxXLength + 0.5\n data.positionY = 0\n data.positionZ = maxYLength + 0.5\n data.rotationX = 270\n data.rotationY = 360\n data.rotationZ = 0\n data.width = 2\n data.height = 2\n data.value = `0`\n data.color = themeProvider.getAxisColor('y')\n model.normalXAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'normalXAxis', 'a-entity')\n\n // left down\n data.positionZ = yOffset - 2.5\n data.rotationX = 270\n data.rotationY = 180\n model.reversedYAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'reversedYAxis', 'a-entity')\n\n // right up\n data.positionX = xOffset - 2.5\n data.positionZ = maxYLength + 0.5\n\n model.normalYAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'normalYAxis', 'a-entity')\n\n // right down\n data.positionZ = yOffset - 2.5\n data.rotationY = 180\n model.reversedXAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'reversedXAxis', 'a-entity')\n\n // generate ZZZZZZZZZZZZZZZZZZ axis\n count = 1\n for (let iy = yOffset; iy <= maxYLength; iy++) {\n data.id = 1500 + count\n data.positionX = xOffset - 2.5\n data.positionY = 0\n data.positionZ = iy - 1\n data.rotationX = 270\n data.rotationY = 180\n data.rotationZ = 0\n data.width = 2\n data.height = 1\n data.value = `${yLabels[iy - 1] ? yLabels[iy - 1].fString : iy - 1}`\n data.color = themeProvider.getAxisColor('z')\n\n model.normalYAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'normalYAxis', 'a-entity')\n\n data.id = 4500 + count\n data.positionX = maxXLength + 0.5\n data.rotationY = 360\n data.value = `${yLabels[iy - 1] ? yLabels[iy - 1].fString : iy - 1}`\n\n // axis title\n model.reversedYAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(\n count,\n histogramElm,\n 'reversedYAxis',\n 'a-entity'\n )\n count++\n }\n\n entityBuilder.deleteUnnecessaryElements(count, [\n 'normalYAxis',\n 'reversedYAxis'\n ])\n\n count = 1\n // generate XXXXXXXXXXXXXXXX axis\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n data.id = 1500 + count\n data.positionX = ix - 1\n data.positionY = 0\n data.positionZ = yOffset - 2.5\n data.rotationX = 270\n data.rotationY = 270\n data.rotationZ = 0\n data.width = 2\n data.height = 1\n data.value = `${xLabels[ix - 1] ? xLabels[ix - 1].fString : ix - 1}`\n data.color = themeProvider.getAxisColor('x')\n\n model.normalXAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'normalXAxis', 'a-entity')\n\n data.id = 4500 + count\n data.positionZ = maxYLength + 0.5\n data.rotationX = 270\n data.rotationY = 90\n data.value = `${xLabels[ix - 1] ? xLabels[ix - 1].fString : ix - 1}`\n\n model.reversedXAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(\n count,\n histogramElm,\n 'reversedXAxis',\n 'a-entity'\n )\n count++\n }\n\n entityBuilder.deleteUnnecessaryElements(count, [\n 'normalXAxis',\n 'reversedXAxis'\n ])\n // add x label\n data.positionX = xOffset\n data.positionY = 0\n data.positionZ = yOffset - 4\n data.rotationX = 270\n data.rotationY = 180\n data.rotationZ = 0\n data.width = 4\n data.height = 1\n data.value = xTitle\n data.id = 'downLabel'\n\n model.labels.attributes[0] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'labels', 'a-entity')\n\n data.positionX = maxXLength - 2.5\n data.positionZ = maxYLength + 2\n data.rotationY = 0\n data.id = 'upLabel'\n\n model.labels.attributes[1] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(1, histogramElm, 'labels', 'a-entity')\n\n // add y label\n data.positionX = xOffset - 4\n data.positionY = 0\n data.positionZ = yOffset + 0.5\n data.rotationX = 270\n data.rotationY = 270\n data.rotationZ = 0\n data.width = 4\n data.height = 1\n data.value = yTitle\n data.color = themeProvider.getAxisColor('z')\n data.id = 'leftLabel'\n\n model.labels.attributes[2] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(2, histogramElm, 'labels', 'a-entity')\n\n data.positionX = maxXLength + 2\n data.positionZ = maxYLength - 2.5\n data.rotationX = 270\n data.rotationY = 90\n data.id = 'rightLabel'\n\n model.labels.attributes[3] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(3, histogramElm, 'labels', 'a-entity')\n\n data.positionX = xOffset - 90\n data.positionY = -6.5\n data.positionZ = yOffset + 90\n data.rotationX = 0\n data.rotationY = 123\n data.rotationZ = 0\n data.title = histogram.fTitle\n data.color = themeProvider.getPrimaryFontColor()\n\n const back = {}\n back.positionX = 0\n back.positionY = 0\n back.positionZ = -1\n back.width = 170\n back.height = 30\n back.color = 'white'\n\n model.titles.attributes[0] = entityTemplate.titleTemplate(data, back)\n entityBuilder.updateElement(0, histogramElm, 'titles', 'a-entity')\n\n // add file title\n data.positionX = xOffset + 120\n data.positionZ = yOffset - 70\n data.rotationY = 330\n data.title = histogram.fName\n\n model.titles.attributes[1] = entityTemplate.titleTemplate(data, back)\n entityBuilder.updateElement(1, histogramElm, 'titles', 'a-entity')\n}\n\n// edit bin content to range 0 - 1\nconst optimizeBinContent = (binContent, maxContent) => {\n if (binContent <= 0) return 0\n if (maxContent > 1) {\n // round to 2 decimal numbers\n binContent =\n Math.round((binContent / maxContent + Number.EPSILON) * 100) / 100\n }\n\n return binContent\n}\n\nexport { createTH2Histogram }\n// export { createTH3Histogram }\n","// component to insert data to th2i bin\nimport AFRAME from 'aframe'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite binu TH2 histogram, ktorá umožňuje zmenu atribútov entity.\n * @component binth2\n * @param {string} id - Identifikátor binu\n * @param {number} content - Hodnota optimalizovaného obsahu binu (predvolená 0)\n * @param {number} absoluteContent - Hodnota neoptimalizovaného obsahu binu (predvolená 0)\n * @param {string} binName - Meno binu\n * @param {string} xTitle - Titulok na osi x\n * @param {string} yTitle - Titulok na osi y\n * @param {number} xMin - Súradnica min binu na osi x\n * @param {number} yMin - Súradnica min binu na osi y\n * @param {number} xMax - Súradnica max binu na osi x\n * @param {number} yMax - Súradnica max binu na osi y\n * @param {number} xCenter - Súradnica stredu binu na osi x\n * @param {number} yCenter - Súradnica stredu binu na osi y\n * @param {number} xWidth - Šírka binu na osi x\n * @param {number} yWidth - Šírka binu na osi y\n * @param {string} color - Farba binu\n * @param {string} axisX - Farba označení na osi x\n * @param {string} axisY - Farba označení na osi y\n * @param {string} axisZ - Farba označení na osi z\n * @param {string} selectColor - Farba určená za zvolenie binu\n * @param {string} markedColor - Farba určená pre označenie binu (v poli označených binov)\n * @module th2AframeComponent\n */\n\n// aframe component for positioning histogram in scene\nAFRAME.registerComponent('binth2', {\n schema: {\n id: { type: 'string' },\n content: { default: 0 },\n absoluteContent: { default: 0 },\n binName: { default: '' },\n xTitle: { type: 'string' },\n yTitle: { type: 'string' },\n xMin: { type: 'number' },\n yMin: { type: 'number' },\n xMax: { type: 'number' },\n yMax: { type: 'number' },\n xCenter: { type: 'number' },\n yCenter: { type: 'number' },\n xWidth: { type: 'number' },\n yWidth: { type: 'number' },\n color: { type: 'string' },\n axisX: { type: 'string' },\n axisY: { type: 'string' },\n axisZ: { type: 'string' },\n selectColor: { type: 'string' },\n markedColor: { type: 'string' }\n },\n\n init: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: 'TH2',\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n },\n update: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: 'TH2',\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n }\n})\n","/* object for creating the histogram demos */\n\nexport default class HistogramDemoFactory {\n #jsroot\n\n constructor(jsroot) {\n this.#jsroot = jsroot\n }\n\n createTH2DemoHistogram(xLength, yLength, initialContent, contentIncrement) {\n const histo = this.#jsroot.createHistogram('TH2I', xLength, yLength)\n let cnt = initialContent\n for (let iy = 1; iy <= 20; iy++)\n for (let ix = 1; ix <= 20; ix++) {\n const bin = histo.getBin(ix, iy)\n let val = 0\n val = cnt\n histo.setBinContent(bin, val)\n // cnt += 0.1\n cnt += contentIncrement\n }\n\n histo.fXaxis.fTitle = 'x Axis'\n histo.fYaxis.fTitle = 'y Axis'\n histo.fName = \"You don't have a valid file path\"\n histo.fTitle = 'This is a TH2 histogram demo'\n histo.fMaximum = cnt\n\n return histo\n }\n\n createTH3DemoHistogram(\n xLength,\n yLength,\n zLength,\n initialContent,\n contentIncrement\n ) {\n const histo = this.#jsroot.createHistogram(\n 'TH3I',\n xLength,\n yLength,\n zLength\n )\n let cnt = initialContent\n\n for (let iz = 1; iz <= 20; iz++)\n for (let iy = 1; iy <= 20; iy++)\n for (let ix = 1; ix <= 20; ix++) {\n const bin = histo.getBin(ix, iy, iz)\n let val = 0\n val = cnt\n histo.setBinContent(bin, val)\n // cnt += 0.0005\n cnt += contentIncrement\n }\n\n histo.fXaxis.fTitle = 'x Axis'\n histo.fYaxis.fTitle = 'y Axis'\n histo.fZaxis.fTitle = 'z Axis'\n histo.fName = \"You don't have a valid file path\"\n histo.fTitle = 'This is a TH3 histogram demo'\n histo.fMaximum = cnt\n\n return histo\n }\n}\n","import AFRAME from 'aframe'\nimport { NdmVrStorageService } from '../../services/ndmVrStorageService'\nimport { createTH2Histogram } from '../../utils/histogramAframeFactory'\nimport '../../aframeComponents/cursorEventAframeComponent'\nimport '../../aframeComponents/th2AframeComponent'\nimport '../../aframeComponents/thAframeComponent'\nimport '../../aframeComponents/histogramAframeComponent'\nimport { histogramTH2Service } from '../../observables/histogramSubject'\nimport {\n initialKeyboardController,\n keyReleaseHandlerFunction,\n keyPressHandlerFunction,\n keyboardUpdateCameraReference\n} from '../../controllers/keyboardController'\nimport { CameraService } from '../../services/cameraService'\nimport HistogramDemoFactory from '../../utils/DefaultHistogram'\n\nexport default AFRAME.registerComponent('th2-histogram', {\n schema: {\n section: { type: 'string' },\n filename: { type: 'string' },\n theme: { type: 'string', default: 'def' },\n position: {\n name: 'position',\n xValue: 0,\n yValue: 0,\n zValue: 0\n },\n scale: {\n name: 'scale',\n xValue: 2,\n yValue: 2,\n zValue: 2\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 0,\n zValue: 0\n }\n },\n init: function () {\n const el = this.el\n initialKeyboardController(this.schema, el)\n // keyboard listeners\n document.addEventListener('keydown', keyPressHandlerFunction)\n document.addEventListener('keyup', keyReleaseHandlerFunction)\n this.JSROOT = window.JSROOT\n this.demoHistogramService = new HistogramDemoFactory(this.JSROOT)\n this.localStorageService = new NdmVrStorageService()\n this.cameraService = new CameraService()\n this.render = false\n this.histogram = null\n this.model = {\n bins: {\n elements: [],\n attributes: []\n },\n labels: {\n elements: [],\n attributes: []\n },\n titles: {\n elements: [],\n attributes: []\n },\n banners: {\n elements: [],\n attributes: []\n },\n normalXAxis: {\n elements: [],\n attributes: []\n },\n reversedXAxis: {\n elements: [],\n attributes: []\n },\n normalYAxis: {\n elements: [],\n attributes: []\n },\n reversedYAxis: {\n elements: [],\n attributes: []\n }\n }\n this.section = null\n // functions\n\n const updateHistogramSection = (newSection) => {\n console.log(newSection)\n this.section.xOffset = newSection.xOffset\n this.section.yOffset = newSection.yOffset\n this.range = newSection.range\n\n this.cameraService.setCameraPosition(newSection)\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n }\n const handleSubscription = (section) => {\n this.localStorageService.storeTH2Offsets(\n section.xOffset,\n section.yOffset,\n section.range\n )\n updateHistogramSection(section)\n }\n\n this.subscription = histogramTH2Service\n .getChangedSection()\n .subscribe(handleSubscription)\n },\n update: function () {\n keyboardUpdateCameraReference()\n this.section = JSON.parse(this.data.section)\n this.JSROOT.openFile(this.data.filename)\n .then((file) => file.readObject('hUsersVsProjects'))\n .then((obj) => {\n this.localStorageService.initHistogramData(obj)\n this.histogram = obj\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n })\n .then(() => console.log('drawing completed'))\n .catch((error) => {\n this.histogram = this.demoHistogramService.createTH2DemoHistogram(\n 20,\n 20,\n 0,\n 0.1\n )\n this.localStorageService.initHistogramData(this.histogram)\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n console.log(error)\n })\n },\n tick: function () {\n if (this.render) {\n this.render = false\n console.log(this.section)\n console.log(this.elements)\n }\n },\n remove: function () {\n this.subscription.unsubscribe()\n document.removeEventListener('keydown', keyPressHandlerFunction)\n document.removeEventListener('keyup', keyReleaseHandlerFunction)\n }\n})\n","import AFRAME from 'aframe'\n// import { setBannerPositioning } from '../utils/histogramFactory'\n\n// aframe component for positioning info banner in scene\nexport default AFRAME.registerComponent('banner-control', {\n schema: {\n position: {\n name: 'position',\n xValue: -1.28,\n yValue: 0.3,\n zValue: -1\n },\n scale: {\n name: 'scale',\n xValue: 0.5,\n yValue: 0.7,\n zValue: 0.1\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 20,\n zValue: 0\n }\n },\n init: function () {\n // const el = this.el\n // setBannerPositioning(el, this.schema)\n }\n})\n","/* add listeners for oculus controller */\n/**\n * Modul obsahuje implementované metódy, ktoré reagujú na vstupy používateľa.\n * Funkcie sú určené pre komponenty slúžiace definovanie listenerov pre ovládač Oculusu.\n * @module oculusController\n */\nimport { CameraService } from '../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../observables/histogramSubject'\nimport binSubject from '../observables/binSubject'\nimport cameraSubject from '../observables/cameraSubject'\nimport jsrootService from '../services/jsrootService'\n\n/*\nexport class OculusController {\n #aframeObj\n #cameraService\n constructor(aframeObj) {\n this.#aframeObj = aframeObj\n this.#cameraService = new CameraService()\n }\n\n #thumbStick = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSection('yOffset', 'TH2', false)\n histogramTH3Service.changeHistogramSection('yOffset', 'TH3', false)\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSection('yOffset', 'TH2', true)\n histogramTH3Service.changeHistogramSection('yOffset', 'TH3', true)\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSection('xOffset', 'TH2', false)\n histogramTH3Service.changeHistogramSection('xOffset', 'TH3', false)\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSection('xOffset', 'TH2', true)\n histogramTH3Service.changeHistogramSection('xOffset', 'TH3', true)\n }\n }\n\n // set listeners for positioning\n setControllerOnEntity(data) {\n const aframeObj = this.#aframeObj\n const geoAttributes = [data.position, data.scale, data.rotation]\n // if (this.#cameraService === null) this.#cameraService = new CameraService()\n // set initial position, scale, rotation of the histogram\n for (let i = 0; i < 3; i++) {\n this.#aframeObj.setAttribute(\n geoAttributes[i].name,\n `${geoAttributes[i].xValue} ${geoAttributes[i].yValue} ${geoAttributes[i].zValue}`\n )\n }\n\n // add positioning listeners\n aframeObj.addEventListener('thumbstickmoved', this.#thumbStick)\n aframeObj.addEventListener('xbuttondown', () => {\n this.#cameraService.verticalMoveCamera(false)\n })\n aframeObj.addEventListener('ybuttondown', () => {\n this.#cameraService.verticalMoveCamera(true)\n })\n }\n}\n*/\n\n// let aframeObj\nlet cameraService = new CameraService()\n\n/**\n * Zmena zobrazovanej sekcie histogramu o predvolený rozsah (1) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickByOwnOffset = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n false\n )\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n false\n )\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n false\n )\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n false\n )\n }\n}\n\n/**\n * Zmena zobrazovanej sekcie histogramu o špecifikovaný rozsah (podľa nastavení používateľa) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickByDefaultOffset = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n true\n )\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n true\n )\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n true\n )\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n true\n )\n }\n}\n\n/**\n * Funkcia, zabezpečujúca horizontálny pohyb kamery po osiach.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @param {number} speed - Definuje rýchlosť pohybu\n * @return {void}\n */\nconst thumbStickForMoving = (event, speed) => {\n if (event.detail.y > 0.95) {\n cameraService.horizontalMoveCamera('z', false, speed)\n }\n if (event.detail.y < -0.95) {\n cameraService.horizontalMoveCamera('z', true, speed)\n }\n if (event.detail.x < -0.95) {\n cameraService.horizontalMoveCamera('x', true, speed)\n }\n if (event.detail.x > 0.95) {\n cameraService.horizontalMoveCamera('x', false, speed)\n }\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (len X a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickPredefinedPosition = (event) => {\n if (event.detail.y > 0.95) {\n cameraService.setPredefinedUpPosition()\n }\n if (event.detail.y < -0.95) {\n cameraService.setPredefinedDownPosition()\n }\n if (event.detail.x < -0.95) {\n cameraService.setPredefinedLeftPosition()\n }\n if (event.detail.x > 0.95) {\n cameraService.setPredefinedRightPosition()\n }\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (X a Y a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickPredefinedPositionWithOffset = (event) => {\n if (event.detail.y > 0.95) {\n cameraService.setPredefinedUpPositionWithOffset()\n }\n if (event.detail.y < -0.95) {\n cameraService.setPredefinedDownPositionWithOffset()\n }\n if (event.detail.x < -0.95) {\n cameraService.setPredefinedLeftPositionWithOffset()\n }\n if (event.detail.x > 0.95) {\n cameraService.setPredefinedRightPositionWithOffset()\n }\n}\n\n/**\n * Funkcia, zobrazenie novej sekcie smerom hore.\n * @param {boolean} defaultRange - Ak je True tak bude použitý range (1), ak je False tak (nastavený rozsah)\n * @return {void}\n */\nconst oculusUpSection = (defaultRange) => {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n defaultRange\n )\n}\n\n/**\n * Funkcia, zobrazenie novej sekcie smerom dolu\n * @param {boolean} defaultRange - Ak je True tak bude použitý range (1), ak je False tak (nastavený rozsah)\n * @return {void}\n */\nconst oculusDownSection = (typeOfRange) => {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n typeOfRange\n )\n}\n\n// const initialOculusController = (el) => {\n// aframeObj = el\n// }\n\n/**\n * Funkcia, aktualizuje servis kamery.\n * @return {void}\n */\nconst oculusUpdateCameraReference = () => {\n cameraService = new CameraService()\n}\n\n/**\n * Zmena zobrazovanej sekcie histogramu o špecifikovaný rozsah (podľa nastavení používateľa) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickFunction = (event) => {\n thumbStickByOwnOffset(event)\n}\n\n/**\n * Zmena zobrazovanej sekcie histogramu o predvolený rozsah (1) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickWithGripFunction = (event) => {\n thumbStickByDefaultOffset(event)\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (len X a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickPredefinedCameraPosition = (event) => {\n thumbStickPredefinedPosition(event)\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (X a Y a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickPredefinedCameraPositionWithOffset = (event) => {\n thumbStickPredefinedPositionWithOffset(event)\n}\n\n/**\n * Funkcia, zabezpečujúca horizontálny pohyb kamery po osiach.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @param {Number} speed - Definuje rýchlosť pohybu\n * @return {void}\n */\nconst oculusThumbStickForMoving = (event, speed) => {\n thumbStickForMoving(event, speed)\n}\n\n/**\n * Funkcia, zabezpečí posunutie kamery smerom hore\n * @param {Number} speed - Určuje rýchlosť pohybu kamery\n * @return {void}\n */\nconst oculusXButtonDownFunction = (speed) => {\n cameraService.verticalMoveCamera(true, speed / 2)\n}\n\n/**\n * Funkcia, zabebpečí posunutie kamery smerom dolu\n * @param {Number} speed - Určuje rýchlosť pohybu kamery\n * @return {void}\n */\nconst oculusYButtonDownFunction = (speed) => {\n cameraService.verticalMoveCamera(false, speed / 2)\n}\n\n/**\n * Funkcia, zabezpečí označenie binu\n * @return {void}\n */\nconst oculusThumbStickMarkBin = () => {\n binSubject.saveSelectedBinToLocalStorage()\n}\n\n/**\n * Funkcia, zabezpečí odznačenie binu\n * @return {void}\n */\nconst oculusThumbStickUnmarkBin = () => {\n binSubject.deleteBinFromLocalStorage()\n}\n\n/**\n * Funkcia, zabezpečí prepnutie do špeciálneho módu, určeného funkciou\n * @return {void}\n */\nconst oculusShowFunctionView = () => {\n histogramTH2Service.changeHistogramFunction('feet', 'TH2')\n}\n\n/**\n * Funkcia, zabezpečí prepnutie do predvoleného vizualizačného módu\n * @return {void}\n */\nconst oculusShowDefaultView = () => {\n histogramTH2Service.changeHistogramFunction('default', 'TH2')\n}\n\n/**\n * Funkcia, zabezpečí prepínanie medzi zobrazeniami\n * @return {void}\n */\nconst oculusSwitchViewWithBanners = () => {\n cameraSubject.setVisibilityOfBanners('oculus')\n}\n\n/**\n * Funkcia, zabezpečí zmenu obsahu na paneloch\n * @return {void}\n */\nconst oculusChangeBannerContent = () => {\n cameraSubject.setUserState()\n}\n\n/**\n * Funkcia, zabezpečí rotovanie panelov\n * @return {void}\n */\nconst oculusShiftBanners = () => {\n cameraSubject.shiftBanners()\n}\n\n/**\n * Funkcia, prekreslí náhľady na paneloch vo VR\n * @return {void}\n */\nconst oculusRedrawHistogramBanners = () => {\n ;[\n 'th-mapping',\n 'bannerId_1',\n 'bannerId_2',\n 'bannerId_3',\n 'bannerId_4'\n ].forEach((targetId) => {\n if (document.getElementById(targetId) !== null) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n targetId,\n '500px',\n '400px'\n )\n }\n })\n}\n\n// export { initialOculusController }\nexport { oculusRedrawHistogramBanners }\nexport { oculusShiftBanners }\nexport { oculusChangeBannerContent }\nexport { oculusSwitchViewWithBanners }\nexport { oculusShowDefaultView }\nexport { oculusShowFunctionView }\nexport { oculusThumbStickUnmarkBin }\nexport { oculusThumbStickMarkBin }\nexport { oculusThumbStickFunction }\nexport { oculusThumbStickWithGripFunction }\nexport { oculusXButtonDownFunction }\nexport { oculusYButtonDownFunction }\nexport { oculusUpdateCameraReference }\nexport { oculusThumbStickPredefinedCameraPosition }\nexport { oculusThumbStickPredefinedCameraPositionWithOffset }\nexport { oculusUpSection }\nexport { oculusDownSection }\nexport { oculusThumbStickForMoving }\n","// component for modification aframe entity of histogram\n// manage functionality of camera\nimport AFRAME from 'aframe'\nimport {\n oculusXButtonDownFunction,\n oculusYButtonDownFunction,\n oculusUpdateCameraReference,\n oculusThumbStickPredefinedCameraPositionWithOffset,\n oculusThumbStickForMoving,\n oculusSwitchViewWithBanners,\n oculusChangeBannerContent\n} from '../controllers/oculusController'\n/**\n * A-Frame interakčný komponent zabezpečí možnosť používateľa interagovať s ľavým ovládačom zariadenia Oculus.\n * @component left-controller-logging\n * @module leftOculusAframeComponent\n */\n\n// aframe component for positioning histogram in scene\nexport default AFRAME.registerComponent('left-controller-logging', {\n init: function () {\n let gripActive = false\n let speed = 1\n const el = this.el\n // oculus listeners\n el.addEventListener('gripdown', () => {\n gripActive = true\n })\n el.addEventListener('gripup', () => {\n gripActive = false\n })\n el.addEventListener('thumbstickdown', () => {\n if (gripActive) {\n speed++\n if (speed > 20) speed = 20\n } else {\n speed--\n if (speed < 1) speed = 1\n }\n })\n el.addEventListener('thumbstickmoved', (event) => {\n if (gripActive) {\n oculusThumbStickPredefinedCameraPositionWithOffset(event)\n } else {\n oculusThumbStickForMoving(event, speed)\n }\n })\n el.addEventListener('ybuttondown', () => {\n if (gripActive) {\n oculusXButtonDownFunction(speed)\n } else {\n oculusSwitchViewWithBanners()\n }\n })\n el.addEventListener('xbuttondown', () => {\n if (gripActive) {\n oculusYButtonDownFunction(speed)\n } else {\n oculusChangeBannerContent()\n }\n })\n },\n\n update: function () {\n oculusUpdateCameraReference()\n }\n})\n","// component for modification aframe entity of histogram\n// manage functionality of histogram\nimport AFRAME from 'aframe'\nimport {\n oculusThumbStickFunction,\n oculusUpdateCameraReference,\n oculusUpSection,\n oculusDownSection,\n oculusThumbStickMarkBin,\n oculusThumbStickWithGripFunction,\n oculusThumbStickUnmarkBin,\n oculusShowFunctionView,\n oculusShowDefaultView,\n oculusRedrawHistogramBanners,\n oculusShiftBanners\n} from '../controllers/oculusController'\n/**\n * A-Frame interakčný komponent zabezpečí možnosť používateľa interagovať s pravým ovládačom zariadenia Oculus.\n * @component right-controller-logging\n * @module rightOculusAframeComponent\n */\n\n// aframe component for positioning histogram in scene\nexport default AFRAME.registerComponent('right-controller-logging', {\n init: function () {\n let gripActive = false\n const el = this.el\n // oculus listeners\n el.addEventListener('gripdown', () => {\n gripActive = true\n })\n el.addEventListener('gripup', () => {\n gripActive = false\n })\n el.addEventListener('thumbstickmoved', (event) => {\n if (gripActive) {\n oculusThumbStickFunction(event)\n } else {\n oculusThumbStickWithGripFunction(event)\n }\n })\n el.addEventListener('bbuttondown', () => {\n if (gripActive) {\n oculusUpSection(false)\n } else {\n oculusUpSection(true)\n }\n })\n el.addEventListener('abuttondown', () => {\n if (gripActive) {\n oculusDownSection(false)\n } else {\n oculusDownSection(true)\n }\n })\n el.addEventListener('thumbstickdown', () => {\n if (gripActive) {\n oculusShowFunctionView()\n } else {\n oculusShowDefaultView()\n }\n })\n el.addEventListener('triggerdown', () => {\n if (gripActive) {\n oculusThumbStickMarkBin()\n oculusRedrawHistogramBanners()\n } else {\n oculusThumbStickUnmarkBin()\n oculusShiftBanners()\n }\n })\n },\n\n update: function () {\n oculusUpdateCameraReference()\n }\n})\n","// imports\nimport JSrootHistogram from './components/JsrootHistogram'\nimport NdmVrScene from './components/NdmVrHistogramScene'\nimport HistogramTH2 from './components/AframeComponent'\nimport { NdmVrStorageService } from './services/ndmVrStorageService'\nimport Banner from './aframeComponents/infoBannerAframeComponent'\nimport LeftController from './aframeComponents/leftOculusController'\nimport RightController from './aframeComponents/rightOculusController'\nimport binDataDistributor from './observables/binDataDistributor'\n\n// create services\nconst ndmVrStorage = new NdmVrStorageService()\n\n// export\nexport {\n // react components\n JSrootHistogram,\n NdmVrScene,\n // export aframe components\n Banner,\n LeftController,\n RightController,\n HistogramTH2,\n // export necessary services\n ndmVrStorage,\n // rxjs bin data distributor\n binDataDistributor\n}\n"],"names":["JsrootSubject","Subject","showBinProjection","binData","next","getServiceEvent","asObservable","jsrootSubject","JsrootService","createTH1Projection","projectionAxis","info","idTargetElm","axisArray","projectionTargetAxis","primary","secondary","primaryAxis","secondaryAxis","binAxis","toLowerCase","h1","createHistogram","obj","fNbins","fXaxis","fXmin","fXmax","fTitle","fLabels","currLabel","arr","length","bin","fString","n","setBinContent","getBinContent","fName","binName","name","redraw","openTH1Projection","projections","projIndex","xLength","yLength","fYaxis","xBin","xMin","yBin","yMin","projection","fFolders","setTimeout","displayImageOfProjection","e","console","log","idSourceElement","idTargetElement","width","height","sourceSvgElement","document","getElementById","firstElementChild","targetElement","canvas","createElement","setAttribute","svgString","XMLSerializer","serializeToString","ctx","getContext","DOMURL","self","URL","webkitURL","img","Image","svg","Blob","type","url","createObjectURL","onload","drawImage","png","toDataURL","revokeObjectURL","src","JSROOT","jsrootService","styles","box","display","margin","textAlign","align","paddingTop","form","paddingBottom","label","input","border","borderRadius","fontSize","color","opacity","JsrootHistogram","histogram","projectionAxes","subscription","useState","axis","setAxis","data","setData","handleInputChange","event","target","value","renderForm","React","handleSubscription","useEffect","jsrootLibrary","window","subscribe","unsubscribe","CameraSubject","setVisibilityOfBanners","inputDevice","device","shiftBanners","setUserState","getCameraSubject","cameraSubject","NdmVrCamera","offset","rotation","setRotation","prevPosition","setPrevPosition","setInputDevice","show","setShow","showProjection","setShowProjection","compileRotation","currentRotation","renderProjectionsBanners","x","z","renderBannersWithControls","hideMappingBanner","banner","background","undefined","showMappingBanner","camera","object3D","position","y","NdmVrStorageService","filter","item","id","containThisBin","updatedArray","storeBinToLocalStorage","push","setItem","JSON","stringify","deleteBinFromLocalStorage","getBinsFromLocalStorage","selectedBins","parse","getItem","localStorage","storeCurrentBinToLocalStorage","getCurrentBinFromLocalStorage","currentBin","loadProperty","property","storeProperty","object","initHistogramData","_typename","includes","storeTH3HistogramLimits","storeTH2HistogramLimits","storeTH2Offsets","xOffset","yOffset","range","section","storeTH3Offsets","zOffset","storeOffsets","storeFilePath","filePath","loadFilePath","filename","loadTH2Offsets","loadTH3Offsets","loadOffsets","localStorageService","BinSubject","saveSelectedBinToLocalStorage","getKeyboardEvent","binSubject","BinDataDistributor","sendDataOfTheSelectedBin","getBinDistributor","binDataDistributor","AFRAME","registerComponent","init","el","clickCount","checked","addEventListener","setHover","evt","intersection","detail","save","userData","markedColor","selectColor","face","normal","axisZ","axisY","axisX","setPassive","setActive","content","infoBanner","planes","childNodes","typeName","zCor","zTitle","zMin","zMax","xCor","xTitle","xMax","yCor","yTitle","yMax","absoluteContent","update","schema","xCenter","yCenter","zCenter","xWidth","yWidth","zWidth","CameraService","verticalMoveCamera","moveUp","speed","horizontalMoveCamera","increment","elm","newXPos","newZPos","newYPos","setCameraPosition","offsets","setPredefinedDownPosition","labelElement","setPredefinedUpPosition","setPredefinedRightPosition","setPredefinedLeftPosition","setPredefinedDownPositionWithOffset","setPredefinedUpPositionWithOffset","setPredefinedRightPositionWithOffset","setPredefinedLeftPositionWithOffset","HistogramSubject","changeHistogramSectionByOffset","histogramType","defaultRange","changeHistogramFunction","typeFunction","fFunction","getChangedSection","histogramTH2Service","histogramTH3Service","keyPressed","cameraService","aframeObj","geoAttributes","handlePositioning","difference","key","xValue","yValue","zValue","handleChangeHistogramSectionByDefaultRange","handleChangeHistogramSectionByOwnRange","keyPressHandlerFunction","Z","X","C","c","Shift","forEach","targetId","keyReleaseHandlerFunction","initialKeyboardController","scale","i","keyboardUpdateCameraReference","delay","def","colorPalette","accent","font","fire","nebula","rainforest","nature","water","sunflower","blood","magma","jupiter","magic","ThemeProvider","theme","palette","xAxis","yAxis","zAxis","primaryAccent","secondaryAccent","primaryFont","secondaryFont","getAxisColor","getPrimaryAccentColor","getSecondaryAccentColor","getPrimaryFontColor","getSecondaryFontColor","getBinColor","fullContent","sum","HistogramReactFactory","uniqueName","xInitial","yInitial","zInitial","getXOffset","getYOffset","getZOffset","getRange","offsetValue","limit","currOffset","binId","positionX","positionY","positionZ","rotationX","rotationY","rotationZ","fontColor","geometry","primitive","text","labelHandler","material","animation","fromX","fromY","fromZ","toX","toY","toZ","elements","bins","labels","banners","ground","titles","axisLabels","xcenter","xmin","xmax","xwidth","ycenter","ymin","ymax","ywidth","zcenter","zmin","zmax","zwidth","count","maxXLength","maxYLength","maxZLength","fZaxis","xLabels","yLabels","zLabels","currentBinScales","iz","iy","ix","GetBinCenter","GetBinLowEdge","fMaximum","size","posX","posY","posZ","fromWidth","fromHeight","fromDepth","toWidth","toHeight","toDepth","animation2","animation3","fromColor","toColor","normalAxis","reversedAxis","Math","round","Number","EPSILON","innerText","bannerWidthX","bannerWidthY","depth","transparent","projectionFunction","centeredYPosition","projectionColor","binContent","maxContent","limits","axisOffset","result","xIndex","yIndex","projectionHistogram","LineColor","fFunctions","fLineColor","previousBin","prevBin","initializeFactory","setUniqueName","setTheme","setHistogram","setSection","setRange","getElements","updateSection","NdmVrHistogram3D","histoSection","factory","mode","setMode","setElements","prevState","map","title","axisLabel","NdmVrScene","radius","zIndex","minHeight","EntityBuilder","model","updateElement","histogramElm","element","entityType","createTitle","attributes","newElement","appendChild","deleteUnnecessaryElements","newLength","remove","Element","checkEntityType","feature","createBannerElement","linesCount","parent","array","createBannerLines","append","line","child","EntityTemplate","bannerTemplate","lineData","backgroundData","bannerBackgroundTemplate","lineTemplate","binTemplate","scaleX","scaleY","scaleZ","clas","binTh2","binth2","mouseevent","labelTemplate","axisTemplate","titleTemplate","textData","back","titleTextTemplate","checkBinState","createTH2Histogram","entityTemplate","entityBuilder","themeProvider","optimizeBinContent","normalXAxis","reversedYAxis","normalYAxis","reversedXAxis","HistogramDemoFactory","jsroot","createTH2DemoHistogram","initialContent","contentIncrement","histo","cnt","getBin","val","createTH3DemoHistogram","zLength","demoHistogramService","render","updateHistogramSection","newSection","openFile","then","file","readObject","error","tick","removeEventListener","thumbStickByOwnOffset","thumbStickByDefaultOffset","thumbStickForMoving","thumbStickPredefinedPositionWithOffset","oculusUpSection","oculusDownSection","typeOfRange","oculusUpdateCameraReference","oculusThumbStickFunction","oculusThumbStickWithGripFunction","oculusThumbStickPredefinedCameraPositionWithOffset","oculusThumbStickForMoving","oculusXButtonDownFunction","oculusYButtonDownFunction","oculusThumbStickMarkBin","oculusThumbStickUnmarkBin","oculusShowFunctionView","oculusShowDefaultView","oculusSwitchViewWithBanners","oculusChangeBannerContent","oculusShiftBanners","oculusRedrawHistogramBanners","gripActive","ndmVrStorage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQMA;AAEJ,2BAAc;AAAA;AAAA;AAAA;AAAA;AACZ,4DAAgB,IAAIC,YAAJ,EAAhB;AACD;;;;SAMDC,oBAAA,2BAAkBC,OAAlB,EAA2B;AACzB,0DAAcC,IAAd,CAAmBD,OAAnB;AACD;;SAMDE,kBAAA,2BAAkB;AAChB,WAAO,sDAAcC,YAAd,EAAP;AACD;;;;;AAGH,IAAMC,aAAa,GAAG,IAAIP,aAAJ,EAAtB;;;;ICrBMQ;;;;aACM;;;;;;SAwBVC,sBAAA,6BAAoBC,cAApB,EAAoCC,IAApC,EAA0CC,WAA1C,EAAuDC,SAAvD,EAAkE;AAAA;;AAChE,QAAI,CAACF,IAAD,IAAS,CAACD,cAAV,IAA4B,wDAAiB,IAAjD,EAAuD;AACrD;AACD;;AAED,QAAMI,oBAAoB,GAAGJ,cAAc,KAAKG,SAAS,CAAC,CAAD,CAAzD;AACA,QAAME,OAAO,GAAGD,oBAAoB,GAAGD,SAAS,CAAC,CAAD,CAAZ,GAAkBA,SAAS,CAAC,CAAD,CAA/D;AACA,QAAMG,SAAS,GAAGF,oBAAoB,GAAGD,SAAS,CAAC,CAAD,CAAZ,GAAkBA,SAAS,CAAC,CAAD,CAAjE;AAEA,QAAMI,WAAW,SAAOD,SAAP,SAAjB;AACA,QAAME,aAAa,SAAOH,OAAP,SAAnB;AACA,QAAMI,OAAO,GAAMJ,OAAO,CAACK,WAAR,EAAN,QAAb;;AAMA,QAAMC,EAAE,GAAG,oDAAaC,eAAb,CACT,MADS,EAETX,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBO,MAFb,CAAX;;AAMAH,IAAAA,EAAE,CAACI,MAAH,CAAUC,KAAV,GAAkBf,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBS,KAAxC;AACAL,IAAAA,EAAE,CAACI,MAAH,CAAUE,KAAV,GAAkBhB,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBU,KAAxC;AACAN,IAAAA,EAAE,CAACI,MAAH,CAAUG,MAAV,GAAmBjB,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBW,MAAzC;AACAP,IAAAA,EAAE,CAACI,MAAH,CAAUI,OAAV,GAAoBlB,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBY,OAA1C;AAEA,QAAMC,SAAS,GACb,0BAAAnB,IAAI,CAACY,GAAL,CAASL,aAAT,EAAwBW,OAAxB,gFAAiCE,GAAjC,CAAqCC,MAArC,IAA8C,CAA9C,GACIrB,IAAI,CAACY,GAAL,CAASL,aAAT,EAAwBW,OAAxB,CAAgCE,GAAhC,CAAoCpB,IAAI,CAACsB,GAAL,CAASd,OAAT,IAAoB,CAAxD,EAA2De,OAD/D,GAEI,EAHN;;AAKA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxB,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBO,MAA1C,EAAkDW,CAAC,EAAnD;AACEd,MAAAA,EAAE,CAACe,aAAH,CACED,CAAC,GAAG,CADN,EAEEzB,cAAc,KAAKG,SAAS,CAAC,CAAD,CAA5B,GACIF,IAAI,CAACY,GAAL,CAASc,aAAT,CAAuB1B,IAAI,CAACsB,GAAL,CAASd,OAAT,CAAvB,EAA0CgB,CAAC,GAAG,CAA9C,CADJ,GAEIxB,IAAI,CAACY,GAAL,CAASc,aAAT,CAAuBF,CAAC,GAAG,CAA3B,EAA8BxB,IAAI,CAACsB,GAAL,CAASd,OAAT,CAA9B,CAJN;AADF;;AAOAE,IAAAA,EAAE,CAACiB,KAAH,GAAW,IAAX;AACAjB,IAAAA,EAAE,CAACO,MAAH,GACE,uBAAqBlB,cAArB,IACCC,IAAI,CAACsB,GAAL,CAASM,OAAT,KAAqB,EAArB,GAA0B5B,IAAI,CAACsB,GAAL,CAASO,IAAnC,GAA0C7B,IAAI,CAACsB,GAAL,CAASd,OAAT,IAAoB,CAD/D,UAGAW,SAHA,MADF;;AAMA,wDAAaW,MAAb,CAAoB7B,WAApB,EAAiCS,EAAjC;AACD;;SAYDqB,oBAAA,2BACEhC,cADF,EAEEC,IAFF,EAGEC,WAHF,EAIEC,SAJF,EAKE8B,WALF,EAMEC,SANF,EAOE;AAAA;;AACA,QAAMC,OAAO,GAAGlC,IAAI,CAACY,GAAL,CAASE,MAAT,CAAgBE,KAAhB,GAAwBhB,IAAI,CAACY,GAAL,CAASE,MAAT,CAAgBD,MAAxD;AACA,QAAMsB,OAAO,GAAGnC,IAAI,CAACY,GAAL,CAASwB,MAAT,CAAgBpB,KAAhB,GAAwBhB,IAAI,CAACY,GAAL,CAASwB,MAAT,CAAgBvB,MAAxD;AACA,QAAMwB,IAAI,GAAGrC,IAAI,CAACsB,GAAL,CAASgB,IAAT,GAAgBJ,OAA7B;AACA,QAAMK,IAAI,GAAGvC,IAAI,CAACsB,GAAL,CAASkB,IAAT,GAAgBL,OAA7B;;AACA,QAAI;AACF,UAAMM,UAAU,GACdT,WAAW,CAACU,QAAZ,CAAqBtB,GAArB,CAAyBiB,IAAzB,EAA+BK,QAA/B,CAAwCtB,GAAxC,CAA4CmB,IAA5C,EAAkDG,QAAlD,CAA2DtB,GAA3D,CACEa,SAAS,IAAI,CADf,CADF;;AAIA,0DAAaH,MAAb,CAAoB7B,WAApB,EAAiCwC,UAAjC;;AACAE,MAAAA,UAAU,CAAC,YAAM;AACf,QAAA,KAAI,CAACC,wBAAL,CACE,qBADF,EAEE,YAFF,EAGE,OAHF,EAIE,OAJF;AAMD,OAPS,EAOP,GAPO,CAAV;AAQD,KAdD,CAcE,OAAOC,CAAP,EAAU;AACVC,MAAAA,OAAO,CAACC,GAAR,CAAY,gCAAZ;AACD;AACF;;SAUDH,2BAAA,kCAAyBI,eAAzB,EAA0CC,eAA1C,EAA2DC,KAA3D,EAAkEC,MAAlE,EAA0E;AACxE,QAAI;AACF,UAAMC,gBAAgB,GACpBC,QAAQ,CAACC,cAAT,CAAwBN,eAAxB,EAAyCO,iBAD3C;AAEA,UAAMC,aAAa,GAAGH,QAAQ,CAACC,cAAT,CAAwBL,eAAxB,CAAtB;AACA,UAAMQ,MAAM,GAAGJ,QAAQ,CAACK,aAAT,CAAuB,QAAvB,CAAf;AAEAN,MAAAA,gBAAgB,CAACO,YAAjB,CAA8B,QAA9B,EAAwCR,MAAxC;AACAC,MAAAA,gBAAgB,CAACO,YAAjB,CAA8B,OAA9B,EAAuCT,KAAvC;AACAO,MAAAA,MAAM,CAACE,YAAP,CAAoB,QAApB,EAA8BR,MAA9B;AACAM,MAAAA,MAAM,CAACE,YAAP,CAAoB,OAApB,EAA6BT,KAA7B;AAGA,UAAMU,SAAS,GAAG,IAAIC,aAAJ,GAAoBC,iBAApB,CAAsCV,gBAAtC,CAAlB;AACA,UAAMW,GAAG,GAAGN,MAAM,CAACO,UAAP,CAAkB,IAAlB,CAAZ;AAEA,UAAMC,MAAM,GAAGC,IAAI,CAACC,GAAL,IAAYD,IAAI,CAACE,SAAjB,IAA8BF,IAA7C;AAEA,UAAMG,GAAG,GAAG,IAAIC,KAAJ,EAAZ;AAGA,UAAMC,GAAG,GAAG,IAAIC,IAAJ,CAAS,CAACZ,SAAD,CAAT,EAAsB;AAAEa,QAAAA,IAAI,EAAE;AAAR,OAAtB,CAAZ;AACA,UAAMC,GAAG,GAAGT,MAAM,CAACU,eAAP,CAAuBJ,GAAvB,CAAZ;;AAGAF,MAAAA,GAAG,CAACO,MAAJ,GAAa,YAAY;AAEvBb,QAAAA,GAAG,CAACc,SAAJ,CAAcR,GAAd,EAAmB,CAAnB,EAAsB,CAAtB;AACA,YAAMS,GAAG,GAAGrB,MAAM,CAACsB,SAAP,CAAiB,WAAjB,CAAZ;AAEAvB,QAAAA,aAAa,CAACG,YAAd,CAA2B,UAA3B,SAA8CmB,GAA9C;AACAb,QAAAA,MAAM,CAACe,eAAP,CAAuBF,GAAvB;AACD,OAPD;;AAQAT,MAAAA,GAAG,CAACY,GAAJ,GAAUP,GAAV;AACD,KAjCD,CAiCE,OAAO7B,CAAP,EAAU;AACb;;;;SAnJD,eAAoB;AAClB,yCAAO,IAAP;AACD;SAND,aAAkBqC,MAAlB,EAA0B;AACxB,4DAAeA,MAAf;AACD;;;;;;AAwJH,IAAMC,aAAa,GAAG,IAAItF,aAAJ,EAAtB;;ACvKA,IAAMuF,MAAM,GAAG;AACbC,EAAAA,GAAG,EAAE;AACHC,IAAAA,OAAO,EAAE,OADN;AAEHC,IAAAA,MAAM,EAAE,MAFL;AAGHrC,IAAAA,KAAK,EAAE,KAHJ;AAIHsC,IAAAA,SAAS,EAAE,QAJR;AAKHC,IAAAA,KAAK,EAAE,QALJ;AAMHC,IAAAA,UAAU,EAAE;AANT,GADQ;AASbjD,EAAAA,UAAU,EAAE;AACV6C,IAAAA,OAAO,EAAE,OADC;AAEVC,IAAAA,MAAM,EAAE,MAFE;AAGVrC,IAAAA,KAAK,EAAE,OAHG;AAIVC,IAAAA,MAAM,EAAE;AAJE,GATC;AAebwC,EAAAA,IAAI,EAAE;AACJL,IAAAA,OAAO,EAAE,OADL;AAEJpC,IAAAA,KAAK,EAAE,KAFH;AAGJqC,IAAAA,MAAM,EAAE,MAHJ;AAIJG,IAAAA,UAAU,EAAE,IAJR;AAKJE,IAAAA,aAAa,EAAE;AALX,GAfO;AAsBbC,EAAAA,KAAK,EAAE;AACLP,IAAAA,OAAO,EAAE;AADJ,GAtBM;AAyBbQ,EAAAA,KAAK,EAAE;AACLR,IAAAA,OAAO,EAAE,OADJ;AAELpC,IAAAA,KAAK,EAAE,KAFF;AAGLqC,IAAAA,MAAM,EAAE,MAHH;AAILpC,IAAAA,MAAM,EAAE,EAJH;AAKL4C,IAAAA,MAAM,EAAE,gBALH;AAMLC,IAAAA,YAAY,EAAE,CANT;AAOLR,IAAAA,SAAS,EAAE,QAPN;AAQLS,IAAAA,QAAQ,EAAE,EARL;AASLC,IAAAA,KAAK,EAAE,OATF;AAULC,IAAAA,OAAO,EAAE;AAVJ;AAzBM,CAAf;;AA4DA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,OAKlB;AAAA,MAJJC,SAII,QAJJA,SAII;AAAA,MAHJC,cAGI,QAHJA,cAGI;AAAA,MAFJtE,WAEI,QAFJA,WAEI;AAAA,MADJC,SACI,QADJA,SACI;AACJ,MAAIsE,YAAJ;;AACA,kBAAwBC,cAAQ,CAAC,GAAD,CAAhC;AAAA,MAAOC,IAAP;AAAA,MAAaC,OAAb;;AACA,mBAAwBF,cAAQ,CAAC,IAAD,CAAhC;AAAA,MAAOG,IAAP;AAAA,MAAaC,OAAb;;AAEA,MAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,KAAD,EAAW;AACnC,QAAML,IAAI,GAAGK,KAAK,CAACC,MAAN,CAAaC,KAA1B;AACAN,IAAAA,OAAO,CAACD,IAAD,CAAP;AACD,GAHD;;AAKA,MAAMQ,UAAU,GAAG,SAAbA,UAAa,GAAM;AACvB,wBACEC;AAAK,MAAA,SAAS,EAAC,YAAf;AAA4B,MAAA,KAAK,EAAE9B,MAAM,CAACO;AAA1C,oBACEuB;AAAO,MAAA,OAAO,EAAC,uBAAf;AAAuC,MAAA,KAAK,EAAE9B,MAAM,CAACS;AAArD,yBADF,eAIEqB;AACE,MAAA,QAAQ,EAAEL,iBADZ;AAEE,MAAA,SAAS,EAAC,cAFZ;AAGE,MAAA,EAAE,EAAC,gBAHL;AAIE,MAAA,KAAK,EAAEzB,MAAM,CAACU;AAJhB,oBAMEoB;AAAQ,MAAA,YAAY,EAAEZ,cAAc,CAAC,CAAD;AAApC,OACGD,SAAS,OAAKC,cAAc,CAAC,CAAD,CAAnB,UAAT,CAAuCrF,MAAvC,GACGoF,SAAS,OAAKC,cAAc,CAAC,CAAD,CAAnB,UAAT,CAAuCrF,MAD1C,GAEGqF,cAAc,CAAC,CAAD,CAHpB,CANF,eAWEY;AAAQ,MAAA,KAAK,EAAEZ,cAAc,CAAC,CAAD;AAA7B,OACGD,SAAS,OAAKC,cAAc,CAAC,CAAD,CAAnB,UAAT,CAAuCrF,MAAvC,GACGoF,SAAS,OAAKC,cAAc,CAAC,CAAD,CAAnB,UAAT,CAAuCrF,MAD1C,GAEGqF,cAAc,CAAC,CAAD,CAHpB,CAXF,CAJF,CADF;AAwBD,GAzBD;;AA4BA,MAAMa,kBAAkB,GAAG,SAArBA,kBAAqB,CAACR,IAAD,EAAU;AACnCC,IAAAA,OAAO,CAACD,IAAD,CAAP;;AACA,QAAI3E,WAAW,KAAK,IAApB,EAA0B;AACxBmD,MAAAA,aAAa,CAACpD,iBAAd,CACE0E,IADF,EAEE;AAAE7F,QAAAA,GAAG,EAAEyF,SAAP;AAAkB/E,QAAAA,GAAG,EAAEqF;AAAvB,OAFF,EAGE,qBAHF,EAIEL,cAJF,EAKEtE,WALF,EAMEC,SANF;AAQD,KATD,MASO;AACLkD,MAAAA,aAAa,CAACrF,mBAAd,CACE2G,IADF,EAEE;AAAE7F,QAAAA,GAAG,EAAEyF,SAAP;AAAkB/E,QAAAA,GAAG,EAAEqF;AAAvB,OAFF,EAGE,qBAHF,EAIEL,cAJF;AAMA3D,MAAAA,UAAU,CAAC,YAAM;AACfwC,QAAAA,aAAa,CAACvC,wBAAd,CACE,qBADF,EAEE,YAFF,EAGE,OAHF,EAIE,OAJF;AAMD,OAPS,EAOP,GAPO,CAAV;AAQD;AACF,GA3BD;;AA8BAwE,EAAAA,eAAS,CAAC,YAAM;AACdjC,IAAAA,aAAa,CAACkC,aAAd,GAA8BC,MAAM,CAACpC,MAArC;AAEAqB,IAAAA,YAAY,GAAG3G,aAAa,CAACF,eAAd,GAAgC6H,SAAhC,CAA0CJ,kBAA1C,CAAf;AAEA,WAAO;AAAA,aAAMZ,YAAY,CAACiB,WAAb,EAAN;AAAA,KAAP;AACD,GANQ,EAMN,CAACf,IAAD,EAAOzE,WAAP,EAAoBqE,SAApB,CANM,CAAT;;AAQA,MAAIM,IAAI,KAAK,IAAb,EAAmB;AACjB,wBACEO;AAAK,MAAA,KAAK,EAAE9B,MAAM,CAACC;AAAnB,OACGrD,WAAW,KAAK,IAAhB,IAAwBiF,UAAU,EADrC,eAEEC;AAAK,MAAA,EAAE,EAAC,qBAAR;AAA8B,MAAA,KAAK,EAAE9B,MAAM,CAAC3C;AAA5C,MAFF,CADF;AAMD,GAPD,MAOO;AACL,wBACEyE;AAAK,MAAA,KAAK,EAAE9B,MAAM,CAACC;AAAnB,oBACE6B,iDADF,CADF;AAKD;AACF,CA/FD;;;;ICzDMO;AAEJ,2BAAc;AAAA;AAAA;AAAA;AAAA;AACZ,gEAAgB,IAAInI,YAAJ,EAAhB;AACD;;;;SAMDoI,yBAAA,gCAAuBC,WAAvB,EAAoC;AAClC,8DAAclI,IAAd,CAAmB;AACjBmI,MAAAA,MAAM,EAAED;AADS,KAAnB;AAGD;;SAMDE,eAAA,wBAAe;AACb,8DAAcpI,IAAd,CAAmB,OAAnB;AACD;;SAMDqI,eAAA,wBAAe;AACb,8DAAcrI,IAAd,CAAmB,MAAnB;AACD;;SAMDsI,mBAAA,4BAAmB;AACjB,WAAO,0DAAcpI,YAAd,EAAP;AACD;;;;;AAGH,IAAMqI,aAAa,GAAG,IAAIP,aAAJ,EAAtB;;ACpCA,IAAMQ,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB,MAAI1B,YAAJ;AACA,MAAM2B,MAAM,GAAG,EAAf;;AACA,kBAAgC1B,cAAQ,CAAC,CAAD,CAAxC;AAAA,MAAO2B,QAAP;AAAA,MAAiBC,WAAjB;;AACA,mBAAwC5B,cAAQ,CAAC,IAAD,CAAhD;AAAA,MAAO6B,YAAP;AAAA,MAAqBC,eAArB;;AACA,mBAAsC9B,cAAQ,CAAC,UAAD,CAA9C;AAAA,MAAOmB,WAAP;AAAA,MAAoBY,cAApB;;AACA,mBAAwB/B,cAAQ,CAAC,KAAD,CAAhC;AAAA,MAAOgC,IAAP;AAAA,MAAaC,OAAb;;AACA,mBAA4CjC,cAAQ,CAAC,KAAD,CAApD;AAAA,MAAOkC,cAAP;AAAA,MAAuBC,iBAAvB;;AAEA,MAAMxB,kBAAkB,GAAG,SAArBA,kBAAqB,CAACR,IAAD,EAAU;AACnC,QAAIA,IAAI,CAACiB,MAAT,EAAiB;AACf,UAAID,WAAW,KAAKhB,IAAI,CAACiB,MAAzB,EAAiCW,cAAc,CAAC5B,IAAI,CAACiB,MAAN,CAAd;AACjCa,MAAAA,OAAO,CAAC,CAACD,IAAF,CAAP;AACD,KAHD,MAGO,IAAI7B,IAAI,KAAK,OAAb,EAAsB;AAC3BiC,MAAAA,eAAe;AAChB,KAFM,MAEA,IAAIjC,IAAI,KAAK,MAAb,EAAqB;AAC1BgC,MAAAA,iBAAiB,CAAC,CAACD,cAAF,CAAjB;AACD;AACF,GATD;;AAWA,MAAME,eAAe,GAAG,SAAlBA,eAAkB,GAAM;AAC5B,QAAIC,eAAe,GAAGV,QAAQ,GAAG,EAAjC;AACA,QAAIU,eAAe,IAAI,GAAvB,EAA4BA,eAAe,GAAG,CAAlB;AAC5BT,IAAAA,WAAW,CAACS,eAAD,CAAX;AACD,GAJD;;AAOA,MAAMC,wBAAwB,GAAG,SAA3BA,wBAA2B,GAAM;AACrC,wBACE5B;AACE,MAAA,QAAQ,EACNmB,YAAY,KAAK,IAAjB,UACSH,MADT,UAEOG,YAAY,CAACU,CAFpB,SAEyBb,MAFzB,SAEmCG,YAAY,CAACW,CAJpD;AAME,MAAA,mBAAmB,iCAA+Bb,QAA/B,mCANrB;AAOE,MAAA,QAAQ,EAAC;AAPX,oBASEjB;AAOE,MAAA,QAAQ,EAAC,oDAPX;AAUE,MAAA,QAAQ,EAAC,UAVX;AAaE,MAAA,QAAQ,EAAC,SAbX;AAcE,MAAA,QAAQ,EAAC;AAdX,oBAgBEA;AACE,MAAA,KAAK,EAAC,OADR;AAIE,MAAA,KAAK,EAAE,EAJT;AAKE,MAAA,KAAK,EACHS,WAAW,KAAK,UAAhB,GACI,6BADJ,GAEI,oCARR;AAWE,MAAA,QAAQ,EAAC;AAXX,MAhBF,eA6BET;AACE,MAAA,KAAK,EAAC,OADR;AAIE,MAAA,KAAK,EAAE,EAJT;AAKE,MAAA,KAAK,EACHS,WAAW,KAAK,UAAhB,GACI,qCADJ,GAEI,4CARR;AAYE,MAAA,QAAQ,EAAC;AAZX,MA7BF,eA2CET;AACE,MAAA,KAAK,EAAC,OADR;AAIE,MAAA,KAAK,EAAE,EAJT;AAKE,MAAA,KAAK,EACHS,WAAW,KAAK,UAAhB,GACI,yBADJ,GAEI,qCARR;AAYE,MAAA,QAAQ,EAAC;AAZX,MA3CF,CATF,eAmEET;AACE,MAAA,EAAE,EAAC,YADL;AAEE,MAAA,KAAK,EAAC,SAFR;AAGE,MAAA,mBAAmB,EAAC,sFAHtB;AAIE,MAAA,QAAQ,EAAC;AAJX,MAnEF,eAyEEA;AACE,MAAA,KAAK,EAAC,SADR;AAEE,MAAA,mBAAmB,EAAC,uFAFtB;AAGE,MAAA,QAAQ,EAAC;AAHX,MAzEF,eA8EEA;AACE,MAAA,EAAE,EAAC,YADL;AAEE,MAAA,KAAK,EAAC,SAFR;AAGE,MAAA,mBAAmB,EAAC,sFAHtB;AAIE,MAAA,QAAQ,EAAC,QAJX;AAKE,MAAA,QAAQ,EAAC;AALX,MA9EF,eAqFEA;AACE,MAAA,KAAK,EAAC,SADR;AAEE,MAAA,mBAAmB,EAAC,uFAFtB;AAGE,MAAA,QAAQ,EAAC,QAHX;AAIE,MAAA,QAAQ,EAAC;AAJX,MArFF,eA2FEA;AACE,MAAA,EAAE,EAAC,YADL;AAEE,MAAA,KAAK,EAAC,SAFR;AAGE,MAAA,mBAAmB,EAAC,sFAHtB;AAIE,MAAA,QAAQ,EAAC;AAJX,MA3FF,eAiGEA;AACE,MAAA,KAAK,EAAC,SADR;AAEE,MAAA,mBAAmB,EAAC,uFAFtB;AAGE,MAAA,QAAQ,EAAC;AAHX,MAjGF,eAsGEA;AACE,MAAA,EAAE,EAAC,YADL;AAEE,MAAA,KAAK,EAAC,SAFR;AAGE,MAAA,mBAAmB,EAAC,wFAHtB;AAIE,MAAA,QAAQ,EAAC,QAJX;AAKE,MAAA,QAAQ,EAAC;AALX,MAtGF,eA6GEA;AACE,MAAA,KAAK,EAAC,SADR;AAEE,MAAA,mBAAmB,EAAC,yFAFtB;AAGE,MAAA,QAAQ,EAAC,QAHX;AAIE,MAAA,QAAQ,EAAC;AAJX,MA7GF,CADF;AAsHD,GAvHD;;AA0HA,MAAM+B,yBAAyB,GAAG,SAA5BA,yBAA4B,GAAM;AACtC,QAAItB,WAAW,KAAK,UAApB,EAAgC;AAC9B,0BACET;AACE,QAAA,QAAQ,EACNmB,YAAY,KAAK,IAAjB,UACSH,MADT,UAEOG,YAAY,CAACU,CAFpB,SAEyBb,MAFzB,SAEmCG,YAAY,CAACW,CAJpD;AAME,QAAA,mBAAmB,iCAA+Bb,QAA/B,mCANrB;AAOE,QAAA,QAAQ,EAAC;AAPX,sBASEjB;AAIE,QAAA,QAAQ,EAAC,oDAJX;AAKE,QAAA,QAAQ,EAAC,UALX;AAME,QAAA,QAAQ,EAAC,SANX;AAOE,QAAA,QAAQ,EAAC;AAPX,sBASEA;AACE,QAAA,KAAK,EAAC,OADR;AAGE,QAAA,KAAK,EAAC,IAHR;AAKE,QAAA,KAAK,EACHwB,cAAc,GACV,6BADU,GAEV,mCARR;AAWE,QAAA,QAAQ,EAAC;AAXX,QATF,eAsBExB;AACE,QAAA,KAAK,EAAC,OADR;AAGE,QAAA,KAAK,EAAC,IAHR;AAIE,QAAA,KAAK,EAAC,qCAJR;AAME,QAAA,QAAQ,EAAC;AANX,QAtBF,eA8BEA;AACE,QAAA,KAAK,EAAC,OADR;AAGE,QAAA,KAAK,EAAC,IAHR;AAIE,QAAA,KAAK,EAAC,yBAJR;AAME,QAAA,QAAQ,EAAC;AANX,QA9BF,CATF,eAgDEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,uFAFtB;AAGE,QAAA,QAAQ,EAAC,SAHX;AAKE,QAAA,GAAG,EAAC;AALN,QAhDF,eAuDEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,2FAFtB;AAGE,QAAA,QAAQ,EAAC,QAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QAvDF,eA6DEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,yFAFtB;AAGE,QAAA,QAAQ,EAAC,SAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QA7DF,eAmEEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,uFAFtB;AAGE,QAAA,QAAQ,EAAC,SAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QAnEF,CADF;AA4ED,KA7ED,MA6EO;AACL,0BACEA;AACE,QAAA,QAAQ,EACNmB,YAAY,KAAK,IAAjB,UACSH,MADT,UAEOG,YAAY,CAACU,CAFpB,SAEyBb,MAFzB,SAEmCG,YAAY,CAACW,CAJpD;AAME,QAAA,mBAAmB,iCAA+Bb,QAA/B;AANrB,sBAQEjB;AACE,QAAA,QAAQ,EAAC,oDADX;AAEE,QAAA,QAAQ,EAAC,UAFX;AAGE,QAAA,QAAQ,EAAC,SAHX;AAIE,QAAA,QAAQ,EAAC;AAJX,sBAMEA;AACE,QAAA,KAAK,EAAC,OADR;AAEE,QAAA,KAAK,EAAC,IAFR;AAIE,QAAA,KAAK,EACHwB,cAAc,GACV,oCADU,GAEV,0CAPR;AASE,QAAA,QAAQ,EAAC;AATX,QANF,eAiBExB;AACE,QAAA,KAAK,EAAC,OADR;AAEE,QAAA,KAAK,EAAC,IAFR;AAGE,QAAA,KAAK,EAAC,4CAHR;AAIE,QAAA,QAAQ,EAAC;AAJX,QAjBF,eAuBEA;AACE,QAAA,KAAK,EAAC,OADR;AAEE,QAAA,KAAK,EAAC,IAFR;AAGE,QAAA,KAAK,EAAC,qCAHR;AAIE,QAAA,QAAQ,EAAC;AAJX,QAvBF,CARF,eAsCEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,uFAFtB;AAGE,QAAA,QAAQ,EAAC,WAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QAtCF,eA4CEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,2FAFtB;AAGE,QAAA,QAAQ,EAAC,SAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QA5CF,eAkDEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,yFAFtB;AAGE,QAAA,QAAQ,EAAC,UAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QAlDF,eAwDEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,uFAFtB;AAGE,QAAA,QAAQ,EAAC,UAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QAxDF,CADF;AAiED;AACF,GAjJD;;AAmJA,MAAMgC,iBAAiB,GAAG,SAApBA,iBAAoB,GAAM;AAC9B,QAAMC,MAAM,GAAG9F,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAAf;AACA,QAAM8F,UAAU,GAAG/F,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAnB;;AACA,QAAI6F,MAAM,KAAKE,SAAX,IAAwBD,UAAU,KAAKC,SAA3C,EAAsD;AACpDF,MAAAA,MAAM,CAACxF,YAAP,CAAoB,UAApB,EAAgC,SAAhC,EAA2C,CAA3C;AACAyF,MAAAA,UAAU,CAACzF,YAAX,CAAwB,UAAxB,EAAoC,SAApC,EAA+C,CAA/C;AACD;AACF,GAPD;;AASA,MAAM2F,iBAAiB,GAAG,SAApBA,iBAAoB,GAAM;AAC9B,QAAMH,MAAM,GAAG9F,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAAf;AACA,QAAM8F,UAAU,GAAG/F,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAnB;;AACA,QAAI6F,MAAM,KAAKE,SAAX,IAAwBD,UAAU,KAAKC,SAA3C,EAAsD;AACpDF,MAAAA,MAAM,CAACxF,YAAP,CAAoB,UAApB,EAAgC,SAAhC,EAA2C,CAA3C;AACAyF,MAAAA,UAAU,CAACzF,YAAX,CAAwB,UAAxB,EAAoC,SAApC,EAA+C,CAA/C;AACD;AACF,GAPD;;AASAyD,EAAAA,eAAS,CAAC,YAAM;AACdb,IAAAA,YAAY,GAAGyB,aAAa,CACzBD,gBADY,GAEZR,SAFY,CAEFJ,kBAFE,CAAf;AAIA,WAAO;AAAA,aAAMZ,YAAY,CAACiB,WAAb,EAAN;AAAA,KAAP;AACD,GANQ,EAMN,CAACgB,IAAD,EAAOE,cAAP,EAAuBP,QAAvB,CANM,CAAT;AAQAf,EAAAA,eAAS,CAAC,YAAM;AACd,QAAMmC,MAAM,GAAGlG,QAAQ,CAACC,cAAT,CAAwB,QAAxB,CAAf;;AACA,QAAI,CAACkF,IAAL,EAAW;AACTe,MAAAA,MAAM,CAACC,QAAP,CAAgBC,QAAhB,CAAyBC,CAAzB,GAA6B,GAA7B;;AACA,UAAIrB,YAAY,KAAK,IAArB,EAA2B;AACzBkB,QAAAA,MAAM,CAACC,QAAP,CAAgBC,QAAhB,CAAyBV,CAAzB,GAA6BV,YAAY,CAACU,CAA1C;AACAQ,QAAAA,MAAM,CAACC,QAAP,CAAgBC,QAAhB,CAAyBT,CAAzB,GAA6BX,YAAY,CAACW,CAA1C;AACAO,QAAAA,MAAM,CAACC,QAAP,CAAgBC,QAAhB,CAAyBC,CAAzB,GAA6BrB,YAAY,CAACqB,CAA1C;AACD;;AACDJ,MAAAA,iBAAiB;AAClB,KARD,MAQO;AACLhB,MAAAA,eAAe,CAAC;AACdS,QAAAA,CAAC,EAAEQ,MAAM,CAACC,QAAP,CAAgBC,QAAhB,CAAyBV,CADd;AAEdW,QAAAA,CAAC,EAAEH,MAAM,CAACC,QAAP,CAAgBC,QAAhB,CAAyBC,CAFd;AAGdV,QAAAA,CAAC,EAAEO,MAAM,CAACC,QAAP,CAAgBC,QAAhB,CAAyBT;AAHd,OAAD,CAAf;AAKAO,MAAAA,MAAM,CAACC,QAAP,CAAgBC,QAAhB,CAAyBC,CAAzB,GAA6BH,MAAM,CAACC,QAAP,CAAgBC,QAAhB,CAAyBC,CAAzB,GAA6BxB,MAA1D;AACAgB,MAAAA,iBAAiB;AAClB;AACF,GAnBQ,EAmBN,CAACV,IAAD,EAAOb,WAAP,CAnBM,CAAT;AAqBAP,EAAAA,eAAS,CAAC,YAAM;AACd,QAAIsB,cAAJ,EAAoB;AAClBvD,MAAAA,aAAa,CAACvC,wBAAd,CACE,qBADF,EAEE,YAFF,EAGE,OAHF,EAIE,OAJF;AAMD;AACF,GATQ,EASN,CAAC8F,cAAD,CATM,CAAT;AAWA,sBACExB;AAAU,IAAA,EAAE,EAAC,eAAb;AAA6B,IAAA,QAAQ,EAAC,SAAtC;AAAgD,IAAA,QAAQ,EAAC;AAAzD,KACGsB,IAAI,IAAI,CAACE,cAAT,IAA2BO,yBAAyB,EADvD,EAEGT,IAAI,IAAIE,cAAR,IAA0BI,wBAAwB,EAFrD,eAGE5B;AACE,IAAA,EAAE,EAAC,QADL;AAEE,wBAFF;AAGE,6BAAsB;AAHxB,kBAKEA;AACE,IAAA,MAAM,EAAC,iCADT;AAEE,IAAA,SAAS,EAAC,iDAFZ;AAGE,IAAA,gBAAgB,EAAC,mFAHnB;AAIE,IAAA,qBAAqB,EAAC,kFAJxB;AAKE,IAAA,qBAAqB,EAAC,kFALxB;AAME,IAAA,IAAI,EAAC,6BANP;AAOE,IAAA,GAAG,EAAC,KAPN;AAQE,IAAA,QAAQ,EAAC,QARX;AASE,IAAA,QAAQ,EAAC,uDATX;AAUE,IAAA,QAAQ,EAAC;AAVX,IALF,eAiBEA;AAAU,6BAAsB,YAAhC;AAA6C;AAA7C,IAjBF,eAkBEA;AACE,6BAAsB,aADxB;AAEE;AAFF,IAlBF,CAHF,CADF;AA6BD,CA/XD;;;;;;;;;;ACLA,IAAayC,mBAAb;AAUE,iCAAc;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAPE;AAOF;AAAA;AAAA;AAAA,aA2YM,eAACnK,OAAD,EAAa;AAC/B,eAAO,4BAAA,KAAI,gBAAJ,gBAAmBoK,MAAnB,CAA0B,UAACC,IAAD;AAAA,iBAAUA,IAAI,CAACC,EAAL,KAAYtK,OAAO,CAACsK,EAA9B;AAAA,SAA1B,CAAP;AACD;AA7Ya;;AAAA,SAqZdC,cArZc,GAqZG,UAACvK,OAAD,EAAa;AAC5B,UAAMwK,YAAY,GAAG,4BAAA,KAAI,gBAAJ,gBAAmBJ,MAAnB,CACnB,UAACC,IAAD;AAAA,eAAUA,IAAI,CAACC,EAAL,KAAYtK,OAAO,CAACsK,EAA9B;AAAA,OADmB,CAArB;;AAGA,aAAOE,YAAY,CAAC3I,MAAb,KAAwB,CAA/B;AACD,KA1Za;;AAAA,SAkad4I,sBAlac,GAkaW,UAACzK,OAAD,EAAa;AAEpC,UAAI,CAAC,KAAI,CAACuK,cAAL,CAAoBvK,OAApB,CAAL,EAAmC;AACjC,oCAAA,KAAI,gBAAJ,gBAAmB0K,IAAnB,CAAwB1K,OAAxB;;AACA,oCAAA,KAAI,WAAJ,WAAc2K,OAAd,CAAsB,cAAtB,EAAsCC,IAAI,CAACC,SAAL,6BAAe,KAAf,gCAAtC;AACD;AACF,KAxaa;;AAAA,SA+adC,yBA/ac,GA+ac,UAAC9K,OAAD,EAAa;AAEvC,UAAI,KAAI,CAACuK,cAAL,CAAoBvK,OAApB,CAAJ,EAAkC;AAChC,oCAAA,KAAI,gBAAJ,8CAAqB,KAArB,wCAA4CA,OAA5C;;AACA,oCAAA,KAAI,WAAJ,WAAc2K,OAAd,CAAsB,cAAtB,EAAsCC,IAAI,CAACC,SAAL,6BAAe,KAAf,gCAAtC;AACD;AACF,KArba;;AAAA,SA4bdE,uBA5bc,GA4bY,YAAM;AAC9B,UAAMC,YAAY,GAAGJ,IAAI,CAACK,KAAL,CAAW,4BAAA,KAAI,WAAJ,WAAcC,OAAd,CAAsB,cAAtB,CAAX,CAArB;;AACA,UAAIF,YAAY,KAAK,IAArB,EAA2B;AACzB,eAAO,EAAP;AACD,OAFD,MAEO;AACL,eAAOA,YAAP;AACD;AACF,KAnca;;AACZ,4DAAgBlD,MAAM,CAACqD,YAAvB;AACA,0DAAetH,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAf;AACA,sEAAqB,KAAKiH,uBAAL,EAArB;AACD;;AAdH;;AAAA,SAuCEK,6BAvCF,GAuCE,uCAA8BpL,OAA9B,EAAuC;AACrC,0DAAc2K,OAAd,CAAsB,YAAtB,EAAoCC,IAAI,CAACC,SAAL,CAAe7K,OAAf,CAApC;AACD,GAzCH;;AAAA,SA2CEqL,6BA3CF,GA2CE,yCAAgC;AAC9B,QAAMC,UAAU,GAAGV,IAAI,CAACK,KAAL,CAAW,sDAAcC,OAAd,CAAsB,YAAtB,CAAX,CAAnB;;AACA,QAAII,UAAU,KAAKzB,SAAf,IAA4ByB,UAAU,KAAK,EAA/C,EAAmD;AACjD,aAAO,IAAP;AACD;;AACD,WAAOA,UAAP;AACD,GAjDH;;AAAA,SAwDEC,YAxDF,GAwDE,sBAAaC,QAAb,EAAuB;AACrB,WAAOZ,IAAI,CAACK,KAAL,CAAW,sDAAcC,OAAd,CAAsBM,QAAtB,CAAX,CAAP;AACD,GA1DH;;AAAA,SAkEEC,aAlEF,GAkEE,uBAAcD,QAAd,EAAwBE,MAAxB,EAAgC;AAC9B,0DAAcf,OAAd,CAAsBa,QAAtB,EAAgCZ,IAAI,CAACC,SAAL,CAAea,MAAf,CAAhC;AACD,GApEH;;AAAA,SAgKEC,iBAhKF,GAgKE,2BAAkB9E,SAAlB,EAA6B;AAC3B,QAAIA,SAAS,CAAC+E,SAAV,CAAoBC,QAApB,CAA6B,KAA7B,CAAJ,EAAyC;AACvC,WAAKC,uBAAL,CAA6BjF,SAA7B;AACD,KAFD,MAEO,IAAIA,SAAS,CAAC+E,SAAV,CAAoBC,QAApB,CAA6B,KAA7B,CAAJ,EAAyC;AAC9C,WAAKE,uBAAL,CAA6BlF,SAA7B;AACD;AACF,GAtKH;;AAAA,SA+KEmF,eA/KF,GA+KE,yBAAgBC,OAAhB,EAAyBC,OAAzB,EAAkCC,KAAlC,EAAyC;AACvC,QAAIT,MAAM,GAAG,KAAKH,YAAL,CAAkB,KAAlB,CAAb;AACA,QAAIa,OAAJ;;AACA,QAAIV,MAAM,KAAK,IAAf,EAAqB;AACnBA,MAAAA,MAAM,GAAG,EAAT;AACAU,MAAAA,OAAO,GAAG;AACR/J,QAAAA,IAAI,EAAE,KADE;AAER4J,QAAAA,OAAO,EAAE,CAFD;AAGRC,QAAAA,OAAO,EAAE,CAHD;AAIRC,QAAAA,KAAK,EAAE;AAJC,OAAV;AAMD,KARD,MAQO;AACLC,MAAAA,OAAO,GAAG;AACR/J,QAAAA,IAAI,EAAE,KADE;AAER4J,QAAAA,OAAO,EAAEA,OAFD;AAGRC,QAAAA,OAAO,EAAEA,OAHD;AAIRC,QAAAA,KAAK,EAAEA;AAJC,OAAV;AAMD;;AACDT,IAAAA,MAAM,CAACU,OAAP,GAAiBA,OAAjB;AACA,SAAKX,aAAL,CAAmB,KAAnB,EAA0BC,MAA1B;AACD,GApMH;;AAAA,SA8MEW,eA9MF,GA8ME,yBAAgBJ,OAAhB,EAAyBC,OAAzB,EAAkCI,OAAlC,EAA2CH,KAA3C,EAAkD;AAChD,QAAIT,MAAM,GAAG,KAAKH,YAAL,CAAkB,KAAlB,CAAb;AACA,QAAIa,OAAJ;;AACA,QAAIV,MAAM,KAAK,IAAf,EAAqB;AACnBA,MAAAA,MAAM,GAAG,EAAT;AACAU,MAAAA,OAAO,GAAG;AACR/J,QAAAA,IAAI,EAAE,KADE;AAER4J,QAAAA,OAAO,EAAE,CAFD;AAGRC,QAAAA,OAAO,EAAE,CAHD;AAIRI,QAAAA,OAAO,EAAE,CAJD;AAKRH,QAAAA,KAAK,EAAE;AALC,OAAV;AAOD,KATD,MASO;AACLC,MAAAA,OAAO,GAAG;AACR/J,QAAAA,IAAI,EAAE,KADE;AAER4J,QAAAA,OAAO,EAAEA,OAFD;AAGRC,QAAAA,OAAO,EAAEA,OAHD;AAIRI,QAAAA,OAAO,EAAEA,OAJD;AAKRH,QAAAA,KAAK,EAAEA;AALC,OAAV;AAOD;;AACDT,IAAAA,MAAM,CAACU,OAAP,GAAiBA,OAAjB;AACA,SAAKX,aAAL,CAAmB,KAAnB,EAA0BC,MAA1B;AACD,GArOH;;AAAA,SA4OEa,YA5OF,GA4OE,sBAAaH,OAAb,EAAsB;AACpB,QAAIA,OAAO,CAAC/J,IAAR,CAAawJ,QAAb,CAAsB,KAAtB,KAAgCO,OAAO,CAAC/J,IAAR,CAAawJ,QAAb,CAAsB,KAAtB,CAApC,EAAkE;AAChE,WAAKQ,eAAL,CACED,OAAO,CAACH,OADV,EAEEG,OAAO,CAACF,OAFV,EAGEE,OAAO,CAACE,OAHV,EAIEF,OAAO,CAACD,KAJV;AAMD,KAPD,MAOO,IAAIC,OAAO,CAAC/J,IAAR,CAAawJ,QAAb,CAAsB,KAAtB,KAAgCO,OAAO,CAAC/J,IAAR,CAAawJ,QAAb,CAAsB,KAAtB,CAApC,EAAkE;AACvE,WAAKG,eAAL,CAAqBI,OAAO,CAACH,OAA7B,EAAsCG,OAAO,CAACF,OAA9C,EAAuDE,OAAO,CAACD,KAA/D;AACD;AACF,GAvPH;;AAAA,SA8PEK,aA9PF,GA8PE,uBAAcC,QAAd,EAAwB;AACtB,0DAAc9B,OAAd,CAAsB,UAAtB,EAAkC8B,QAAlC;AACD,GAhQH;;AAAA,SAsQEC,YAtQF,GAsQE,wBAAe;AACb,QAAMC,QAAQ,GAAG,sDAAczB,OAAd,CAAsB,UAAtB,CAAjB;;AACA,QAAIyB,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,KAAK9C,SAAtC,EAAiD;AAE/C,aAAO,kBAAP;AACD;;AACD,WAAO8C,QAAP;AACD,GA7QH;;AAAA,SAmREC,cAnRF,GAmRE,0BAAiB;AACf,QAAMlB,MAAM,GAAG,KAAKH,YAAL,CAAkB,KAAlB,CAAf;;AACA,QAAIG,MAAM,KAAK,IAAf,EAAqB;AACnB,aAAOA,MAAM,CAACU,OAAd;AACD,KAFD,MAEO;AACL,aAAO,IAAP;AACD;AACF,GA1RH;;AAAA,SAgSES,cAhSF,GAgSE,0BAAiB;AACf,QAAMnB,MAAM,GAAG,KAAKH,YAAL,CAAkB,KAAlB,CAAf;;AACA,QAAIG,MAAM,KAAK,IAAf,EAAqB;AACnB,aAAOA,MAAM,CAACU,OAAd;AACD,KAFD,MAEO;AACL,aAAO,IAAP;AACD;AACF,GAvSH;;AAAA,SA8SEU,WA9SF,GA8SE,qBAAY7H,IAAZ,EAAkB;AAChB,QAAIA,IAAI,CAAC4G,QAAL,CAAc,KAAd,KAAwB5G,IAAI,CAAC4G,QAAL,CAAc,KAAd,CAA5B,EAAkD;AAChD,aAAO,KAAKgB,cAAL,EAAP;AACD,KAFD,MAEO,IAAI5H,IAAI,CAAC4G,QAAL,CAAc,KAAd,KAAwB5G,IAAI,CAAC4G,QAAL,CAAc,KAAd,CAA5B,EAAkD;AACvD,aAAO,KAAKe,cAAL,EAAP;AACD;AACF,GApTH;;AAAA;AAAA;AAgdA,IAAMG,mBAAmB,GAAG,IAAI5C,mBAAJ,EAA5B;;;;IChdM6C;AAEJ,wBAAc;AAAA;AAAA;AAAA;AAAA;AACZ,gEAAgB,IAAIlN,YAAJ,EAAhB;AACD;;;;SAMDmN,gCAAA,yCAAgC;AAC9B,8DAAchN,IAAd,CAAmB,IAAnB;AACD;;SAMD6K,4BAAA,qCAA4B;AAC1B,8DAAc7K,IAAd,CAAmB,KAAnB;AACD;;SAMDiN,mBAAA,4BAAmB;AACjB,WAAO,0DAAc/M,YAAd,EAAP;AACD;;;;;AAGH,IAAMgN,UAAU,GAAG,IAAIH,UAAJ,EAAnB;;;;IC/BMI;AAEJ,gCAAc;AAAA;AAAA;AAAA;AAAA;AACZ,gEAAgB,IAAItN,YAAJ,EAAhB;AACD;;;;SAMDuN,2BAAA,kCAAyBrN,OAAzB,EAAkC;AAChC,8DAAcC,IAAd,CAAmBD,OAAnB;AACD;;SAMDsN,oBAAA,6BAAoB;AAClB,WAAO,0DAAcnN,YAAd,EAAP;AACD;;;;;AAGH,IAAMoN,kBAAkB,GAAG,IAAIH,kBAAJ,EAA3B;;ACnBAI,MAAM,CAACC,iBAAP,CAAyB,YAAzB,EAAuC;AACrCC,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAI3G,YAAJ;AACA,QAAM4G,EAAE,GAAG,KAAKA,EAAhB;AACA,QAAIC,UAAU,GAAG,CAAjB;AACA,QAAIC,OAAO,GAAG,KAAd;AAEAF,IAAAA,EAAE,CAACG,gBAAH,CAAoB,YAApB,EAAkC,SAASC,QAAT,CAAkBC,GAAlB,EAAuB;AAAA;;AACvDH,MAAAA,OAAO,GAAG,KAAV;AAEA,UAAMI,YAAY,GAAGD,GAAG,CAACE,MAAJ,CAAWD,YAAhC;AACAlH,MAAAA,YAAY,GAAGoG,UAAU,CAACD,gBAAX,GAA8BnF,SAA9B,CAAwC,UAACoG,IAAD,EAAU;AAC/D,YAAIA,IAAJ,EAAU;AACRpB,UAAAA,mBAAmB,CAACtC,sBAApB,CAA2C,KAAI,CAAC2D,QAAhD;AACArB,UAAAA,mBAAmB,CAAC3B,6BAApB,CAAkD,KAAI,CAACgD,QAAvD;AACAb,UAAAA,kBAAkB,CAACF,wBAAnB,CAA4C,KAAI,CAACe,QAAjD;AACA,UAAA,KAAI,CAACA,QAAL,CAAcC,WAAd,GAA4B,KAAI,CAACD,QAAL,CAAcE,WAA1C;;AACA,UAAA,KAAI,CAACnK,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,GAAzC;;AACA/D,UAAAA,aAAa,CAACL,iBAAd,CAAgC,KAAI,CAACqO,QAArC;AACD,SAPD,MAOO;AACLrB,UAAAA,mBAAmB,CAACjC,yBAApB,CAA8C,KAAI,CAACsD,QAAnD;AACA,UAAA,KAAI,CAACA,QAAL,CAAcC,WAAd,GAA4B,KAAI,CAACD,QAAL,CAAc1H,KAA1C;;AACA,UAAA,KAAI,CAACvC,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,MAAzC;AACD;AACF,OAbc,CAAf;;AAcA,UAAI8J,YAAY,CAACM,IAAb,CAAkBC,MAAlB,CAAyBjF,CAAzB,KAA+B,CAAnC,EAAsC;AACpC,aAAKpF,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,KAAKiK,QAAL,CAAcK,KAArD;AACD,OAFD,MAEO,IAAIR,YAAY,CAACM,IAAb,CAAkBC,MAAlB,CAAyBtE,CAAzB,KAA+B,CAAnC,EAAsC;AAC3C,aAAK/F,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,KAAKiK,QAAL,CAAcM,KAArD;AACD,OAFM,MAEA;AACL,aAAKvK,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,KAAKiK,QAAL,CAAcO,KAArD;AACD;;AACD,WAAKxK,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,GAAzC;AACD,KA1BD;AA6BAwJ,IAAAA,EAAE,CAACG,gBAAH,CAAoB,YAApB,EAAkC,SAASc,UAAT,GAAsB;AACtD7H,MAAAA,YAAY,CAACiB,WAAb;;AACA,UAAI6F,OAAO,KAAK,KAAhB,EAAuB;AACrB,aAAK1J,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,KAAKiK,QAAL,CAAcC,WAArD;AACA,aAAKlK,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,MAAzC;AACD;;AACDyJ,MAAAA,UAAU,GAAG,CAAb;AACD,KAPD;AAUAD,IAAAA,EAAE,CAACG,gBAAH,CAAoB,OAApB,EAA6B,SAASe,SAAT,CAAmBb,GAAnB,EAAwB;AACnDJ,MAAAA,UAAU,GAAGA,UAAU,GAAG,CAA1B;AACAC,MAAAA,OAAO,GAAG,KAAV;AACA1K,MAAAA,UAAU,CAAC,YAAM;AACfyK,QAAAA,UAAU,GAAG,CAAb;AACD,OAFS,EAEP,GAFO,CAAV;;AAKA,UAAIA,UAAU,KAAK,CAAnB,EAAsB;AACpBA,QAAAA,UAAU,GAAG,CAAb;AACAC,QAAAA,OAAO,GAAG,IAAV;AACA,aAAK1J,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,SAAvC;AACA,aAAKA,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,GAAzC;AAEA,YAAM4F,MAAM,GAAGlG,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAf;;AAEA,YAAIiG,MAAM,KAAK,IAAf,EAAqB;AACnBA,UAAAA,MAAM,CAACC,QAAP,CAAgBC,QAAhB,CAAyBC,CAAzB,GAA6B,KAAKF,QAAL,CAAcC,QAAd,CAAuBC,CAAvB,GAA2B,GAAxD;;AAEA,cAAI,KAAKkE,QAAL,CAAcU,OAAd,GAAwB,GAA5B,EAAiC;AAG/B/E,YAAAA,MAAM,CAAC5F,YAAP,CACE,WADF,gCAE6B,CAAC,GAAD,GAAO,KAAK6F,QAAL,CAAcC,QAAd,CAAuBV,CAF3D,UAGI,KAAKS,QAAL,CAAcC,QAAd,CAAuBC,CAH3B,SAIM,KAAKF,QAAL,CAAcC,QAAd,CAAuBT,CAJ7B;AAOD,WAVD,MAUO,IAAI,KAAK4E,QAAL,CAAcU,OAAd,GAAwB,GAA5B,EAAiC;AAItC/E,YAAAA,MAAM,CAAC5F,YAAP,CACE,WADF,gCAE6B,CAAC,GAAD,GAAO,KAAK6F,QAAL,CAAcC,QAAd,CAAuBV,CAF3D,WAGI,KAAKS,QAAL,CAAcC,QAAd,CAAuBC,CAAvB,GAA2B,GAH/B,WAIM,KAAKF,QAAL,CAAcC,QAAd,CAAuBT,CAAvB,GAA2B,GAJjC;AAOD,WAXM,MAWA;AAILO,YAAAA,MAAM,CAAC5F,YAAP,CACE,WADF,gCAE6B,KAAK6F,QAAL,CAAcC,QAAd,CAAuBV,CAAvB,GAA2B,CAFxD,WAGI,KAAKS,QAAL,CAAcC,QAAd,CAAuBC,CAAvB,GAA2B,GAH/B,WAIM,KAAKF,QAAL,CAAcC,QAAd,CAAuBT,CAAvB,GAA2B,GAJjC;AAOD;AACF;AAEF,OA9CD,MA8CO,IAAIoE,UAAU,KAAK,CAAnB,EAAsB;AAC3B,aAAKzJ,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,SAAvC;AACA,aAAKA,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,GAAzC;AACA4I,QAAAA,mBAAmB,CAAC3B,6BAApB,CAAkD,KAAKgD,QAAvD;AACAhO,QAAAA,aAAa,CAACL,iBAAd,CAAgC,KAAKqO,QAArC;AACD;;AAGD,UAAIW,UAAU,GAAGlL,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAAjB;;AACA,UAAIiL,UAAU,KAAK,IAAnB,EAAyB;AACvBA,QAAAA,UAAU,GAAGlL,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAAb;AACD;;AAGD,UAAIiL,UAAU,KAAK,IAAnB,EAAyB;AACvB,YAAMC,MAAM,GAAGD,UAAU,CAACE,UAA1B;;AAEA,YAAI,KAAKb,QAAL,CAAcc,QAAd,KAA2B,KAA3B,IAAoCF,MAAM,CAACnN,MAAP,KAAkB,CAA1D,EAA6D;AAC3D,cAAMsN,IAAI,SAAO,KAAKf,QAAL,CAAcgB,MAArB,WAAiC,KAAKhB,QAAL,CAAciB,IAA/C,SACR,KAAKjB,QAAL,CAAckB,IADN,WAGR,KAAKlB,QAAL,CAAchM,OAAd,KAA0B,EAA1B,GAA+B,KAAKgM,QAAL,CAAchM,OAAd,GAAwB,IAAvD,GAA8D,IAHtD,CAAV;AAKA,cAAMmN,IAAI,SAAO,KAAKnB,QAAL,CAAcoB,MAArB,WAAiC,KAAKpB,QAAL,CAActL,IAA/C,SACR,KAAKsL,QAAL,CAAcqB,IADN,WAGR,KAAKrB,QAAL,CAAchM,OAAd,KAA0B,EAA1B,GAA+B,KAAKgM,QAAL,CAAchM,OAAd,GAAwB,IAAvD,GAA8D,IAHtD,CAAV;AAKA,cAAMsN,IAAI,SAAO,KAAKtB,QAAL,CAAcuB,MAArB,WAAiC,KAAKvB,QAAL,CAAcpL,IAA/C,SACR,KAAKoL,QAAL,CAAcwB,IADN,WAGR,KAAKxB,QAAL,CAAchM,OAAd,KAA0B,EAA1B,GAA+B,KAAKgM,QAAL,CAAchM,OAAd,GAAwB,IAAvD,GAA8D,IAHtD,CAAV;AAKA,cAAM0M,OAAO,iBAAe,KAAKV,QAAL,CAAcyB,eAA7B,UAAiD,KAAKzB,QAAL,CAAcU,OAA/D,QAAb;AAEAE,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAU7K,YAAV,CACE,MADF,cAEY2K,OAFZ,iBAE+B,KAAKV,QAAL,CAAc1H,KAF7C;AAIAsI,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAU7K,YAAV,CACE,MADF,cAEYoL,IAFZ,iBAE4B,KAAKnB,QAAL,CAAcO,KAF1C;AAIAK,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAU7K,YAAV,CACE,MADF,cAEYuL,IAFZ,iBAE4B,KAAKtB,QAAL,CAAcM,KAF1C;AAIAM,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAU7K,YAAV,CACE,MADF,cAEYgL,IAFZ,iBAE4B,KAAKf,QAAL,CAAcK,KAF1C;AAID,SAlCD,MAkCO;AACL,cAAMK,QAAO,iBAAe,KAAKV,QAAL,CAAcyB,eAA7B,UAAiD,KAAKzB,QAAL,CAAcU,OAA/D,QAAb;;AACA,cAAMS,KAAI,SAAO,KAAKnB,QAAL,CAAcoB,MAArB,WAAiC,KAAKpB,QAAL,CAActL,IAA/C,SACR,KAAKsL,QAAL,CAAcqB,IADN,WAGR,KAAKrB,QAAL,CAAchM,OAAd,KAA0B,EAA1B,GAA+B,KAAKgM,QAAL,CAAchM,OAAd,GAAwB,IAAvD,GAA8D,IAHtD,CAAV;;AAKA,cAAMsN,KAAI,SAAO,KAAKtB,QAAL,CAAcuB,MAArB,WAAiC,KAAKvB,QAAL,CAAcpL,IAA/C,SACR,KAAKoL,QAAL,CAAcwB,IADN,WAGR,KAAKxB,QAAL,CAAchM,OAAd,KAA0B,EAA1B,GAA+B,KAAKgM,QAAL,CAAchM,OAAd,GAAwB,IAAvD,GAA8D,IAHtD,CAAV;;AAKA4M,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAU7K,YAAV,CACE,MADF,cAEY2K,QAFZ,iBAE+B,KAAKV,QAAL,CAAc1H,KAF7C;AAIAsI,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAU7K,YAAV,CACE,MADF,cAEYoL,KAFZ,iBAE4B,KAAKnB,QAAL,CAAcO,KAF1C;AAIAK,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAU7K,YAAV,CACE,MADF,cAEYuL,KAFZ,iBAE4B,KAAKtB,QAAL,CAAcM,KAF1C;AAID;AACF;AACF,KAnID;AAoID,GAlLoC;AAmLrCoB,EAAAA,MAAM,EAAE,kBAAY;AAClB,QAAMnC,EAAE,GAAG,KAAKA,EAAhB;AACAA,IAAAA,EAAE,CAACxJ,YAAH,CAAgB,UAAhB,EAA4B,OAA5B,EAAqCwJ,EAAE,CAACS,QAAH,CAAYC,WAAjD;AACAV,IAAAA,EAAE,CAACxJ,YAAH,CAAgB,UAAhB,EAA4B,SAA5B,EAAuC,MAAvC;AACD;AAvLoC,CAAvC;;ACoBAqJ,MAAM,CAACC,iBAAP,CAAyB,OAAzB,EAAkC;AAChCsC,EAAAA,MAAM,EAAE;AACNzF,IAAAA,EAAE,EAAE;AAAErF,MAAAA,IAAI,EAAE;AAAR,KADE;AAENiK,IAAAA,QAAQ,EAAE;AAAEjK,MAAAA,IAAI,EAAE;AAAR,KAFJ;AAGN6J,IAAAA,OAAO,EAAE;AAAE,iBAAS;AAAX,KAHH;AAINe,IAAAA,eAAe,EAAE;AAAE,iBAAS;AAAX,KAJX;AAKNzN,IAAAA,OAAO,EAAE;AAAE,iBAAS;AAAX,KALH;AAMNoN,IAAAA,MAAM,EAAE;AAAEvK,MAAAA,IAAI,EAAE;AAAR,KANF;AAON0K,IAAAA,MAAM,EAAE;AAAE1K,MAAAA,IAAI,EAAE;AAAR,KAPF;AAQNmK,IAAAA,MAAM,EAAE;AAAEnK,MAAAA,IAAI,EAAE;AAAR,KARF;AASNnC,IAAAA,IAAI,EAAE;AAAEmC,MAAAA,IAAI,EAAE;AAAR,KATA;AAUNjC,IAAAA,IAAI,EAAE;AAAEiC,MAAAA,IAAI,EAAE;AAAR,KAVA;AAWNoK,IAAAA,IAAI,EAAE;AAAEpK,MAAAA,IAAI,EAAE;AAAR,KAXA;AAYNwK,IAAAA,IAAI,EAAE;AAAExK,MAAAA,IAAI,EAAE;AAAR,KAZA;AAaN2K,IAAAA,IAAI,EAAE;AAAE3K,MAAAA,IAAI,EAAE;AAAR,KAbA;AAcNqK,IAAAA,IAAI,EAAE;AAAErK,MAAAA,IAAI,EAAE;AAAR,KAdA;AAeN+K,IAAAA,OAAO,EAAE;AAAE/K,MAAAA,IAAI,EAAE;AAAR,KAfH;AAgBNgL,IAAAA,OAAO,EAAE;AAAEhL,MAAAA,IAAI,EAAE;AAAR,KAhBH;AAiBNiL,IAAAA,OAAO,EAAE;AAAEjL,MAAAA,IAAI,EAAE;AAAR,KAjBH;AAkBNkL,IAAAA,MAAM,EAAE;AAAElL,MAAAA,IAAI,EAAE;AAAR,KAlBF;AAmBNmL,IAAAA,MAAM,EAAE;AAAEnL,MAAAA,IAAI,EAAE;AAAR,KAnBF;AAoBNoL,IAAAA,MAAM,EAAE;AAAEpL,MAAAA,IAAI,EAAE;AAAR,KApBF;AAqBNyB,IAAAA,KAAK,EAAE;AAAEzB,MAAAA,IAAI,EAAE;AAAR,KArBD;AAsBN0J,IAAAA,KAAK,EAAE;AAAE1J,MAAAA,IAAI,EAAE;AAAR,KAtBD;AAuBNyJ,IAAAA,KAAK,EAAE;AAAEzJ,MAAAA,IAAI,EAAE;AAAR,KAvBD;AAwBNwJ,IAAAA,KAAK,EAAE;AAAExJ,MAAAA,IAAI,EAAE;AAAR,KAxBD;AAyBNqJ,IAAAA,WAAW,EAAE;AAAErJ,MAAAA,IAAI,EAAE;AAAR,KAzBP;AA0BNoJ,IAAAA,WAAW,EAAE;AAAEpJ,MAAAA,IAAI,EAAE;AAAR;AA1BP,GADwB;AA8BhCyI,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAMC,EAAE,GAAG,KAAKA,EAAhB;AACAA,IAAAA,EAAE,CAACS,QAAH,GAAc;AACZc,MAAAA,QAAQ,EAAE,KAAK/H,IAAL,CAAU+H,QADR;AAEZ5E,MAAAA,EAAE,EAAE,KAAKnD,IAAL,CAAUmD,EAFF;AAGZwE,MAAAA,OAAO,EAAE,KAAK3H,IAAL,CAAU2H,OAHP;AAIZe,MAAAA,eAAe,EAAE,KAAK1I,IAAL,CAAU0I,eAJf;AAKZzN,MAAAA,OAAO,EAAE,KAAK+E,IAAL,CAAU/E,OALP;AAMZoN,MAAAA,MAAM,EAAE,KAAKrI,IAAL,CAAUqI,MANN;AAOZG,MAAAA,MAAM,EAAE,KAAKxI,IAAL,CAAUwI,MAPN;AAQZP,MAAAA,MAAM,EAAE,KAAKjI,IAAL,CAAUiI,MARN;AASZtM,MAAAA,IAAI,EAAE,KAAKqE,IAAL,CAAUrE,IATJ;AAUZE,MAAAA,IAAI,EAAE,KAAKmE,IAAL,CAAUnE,IAVJ;AAWZqM,MAAAA,IAAI,EAAE,KAAKlI,IAAL,CAAUkI,IAXJ;AAYZI,MAAAA,IAAI,EAAE,KAAKtI,IAAL,CAAUsI,IAZJ;AAaZG,MAAAA,IAAI,EAAE,KAAKzI,IAAL,CAAUyI,IAbJ;AAcZN,MAAAA,IAAI,EAAE,KAAKnI,IAAL,CAAUmI,IAdJ;AAeZU,MAAAA,OAAO,EAAE,KAAK7I,IAAL,CAAU6I,OAfP;AAgBZC,MAAAA,OAAO,EAAE,KAAK9I,IAAL,CAAU8I,OAhBP;AAiBZC,MAAAA,OAAO,EAAE,KAAK/I,IAAL,CAAU+I,OAjBP;AAkBZC,MAAAA,MAAM,EAAE,KAAKhJ,IAAL,CAAUgJ,MAlBN;AAmBZC,MAAAA,MAAM,EAAE,KAAKjJ,IAAL,CAAUiJ,MAnBN;AAoBZC,MAAAA,MAAM,EAAE,KAAKlJ,IAAL,CAAUkJ,MApBN;AAqBZ3J,MAAAA,KAAK,EAAE,KAAKS,IAAL,CAAUT,KArBL;AAsBZiI,MAAAA,KAAK,EAAE,KAAKxH,IAAL,CAAUwH,KAtBL;AAuBZD,MAAAA,KAAK,EAAE,KAAKvH,IAAL,CAAUuH,KAvBL;AAwBZD,MAAAA,KAAK,EAAE,KAAKtH,IAAL,CAAUsH,KAxBL;AAyBZH,MAAAA,WAAW,EAAE,KAAKnH,IAAL,CAAUmH,WAzBX;AA0BZD,MAAAA,WAAW,EAAE,KAAKlH,IAAL,CAAUkH;AA1BX,KAAd;AA4BD,GA5D+B;AA8DhCyB,EAAAA,MAAM,EAAE,kBAAY;AAClB,QAAMnC,EAAE,GAAG,KAAKA,EAAhB;AACAA,IAAAA,EAAE,CAACS,QAAH,GAAc;AACZc,MAAAA,QAAQ,EAAE,KAAK/H,IAAL,CAAU+H,QADR;AAEZ5E,MAAAA,EAAE,EAAE,KAAKnD,IAAL,CAAUmD,EAFF;AAGZwE,MAAAA,OAAO,EAAE,KAAK3H,IAAL,CAAU2H,OAHP;AAIZe,MAAAA,eAAe,EAAE,KAAK1I,IAAL,CAAU0I,eAJf;AAKZzN,MAAAA,OAAO,EAAE,KAAK+E,IAAL,CAAU/E,OALP;AAMZoN,MAAAA,MAAM,EAAE,KAAKrI,IAAL,CAAUqI,MANN;AAOZG,MAAAA,MAAM,EAAE,KAAKxI,IAAL,CAAUwI,MAPN;AAQZP,MAAAA,MAAM,EAAE,KAAKjI,IAAL,CAAUiI,MARN;AASZtM,MAAAA,IAAI,EAAE,KAAKqE,IAAL,CAAUrE,IATJ;AAUZE,MAAAA,IAAI,EAAE,KAAKmE,IAAL,CAAUnE,IAVJ;AAWZqM,MAAAA,IAAI,EAAE,KAAKlI,IAAL,CAAUkI,IAXJ;AAYZI,MAAAA,IAAI,EAAE,KAAKtI,IAAL,CAAUsI,IAZJ;AAaZG,MAAAA,IAAI,EAAE,KAAKzI,IAAL,CAAUyI,IAbJ;AAcZN,MAAAA,IAAI,EAAE,KAAKnI,IAAL,CAAUmI,IAdJ;AAeZU,MAAAA,OAAO,EAAE,KAAK7I,IAAL,CAAU6I,OAfP;AAgBZC,MAAAA,OAAO,EAAE,KAAK9I,IAAL,CAAU8I,OAhBP;AAiBZC,MAAAA,OAAO,EAAE,KAAK/I,IAAL,CAAU+I,OAjBP;AAkBZC,MAAAA,MAAM,EAAE,KAAKhJ,IAAL,CAAUgJ,MAlBN;AAmBZC,MAAAA,MAAM,EAAE,KAAKjJ,IAAL,CAAUiJ,MAnBN;AAoBZC,MAAAA,MAAM,EAAE,KAAKlJ,IAAL,CAAUkJ,MApBN;AAqBZ3J,MAAAA,KAAK,EAAE,KAAKS,IAAL,CAAUT,KArBL;AAsBZiI,MAAAA,KAAK,EAAE,KAAKxH,IAAL,CAAUwH,KAtBL;AAuBZD,MAAAA,KAAK,EAAE,KAAKvH,IAAL,CAAUuH,KAvBL;AAwBZD,MAAAA,KAAK,EAAE,KAAKtH,IAAL,CAAUsH,KAxBL;AAyBZH,MAAAA,WAAW,EAAE,KAAKnH,IAAL,CAAUmH,WAzBX;AA0BZD,MAAAA,WAAW,EAAE,KAAKlH,IAAL,CAAUkH;AA1BX,KAAd;AA4BD;AA5F+B,CAAlC;;;;;;ACzBA,IAAaiC,aAAb,GAEE,yBAAc;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA,OAUdC,kBAVc,GAUO,UAACC,MAAD,EAASC,KAAT,EAAmB;AAEtC,QAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAA5B,EACE,4BAAA,KAAI,iBAAJ,mBAAsB5M,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAtB;;AACF,QAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAA5B,EAAkC;AAChC,UAAI0M,MAAJ,EAAY;AACV,oCAAA,KAAI,iBAAJ,iBAAoBxG,QAApB,CAA6BC,QAA7B,CAAsCC,CAAtC,IAA2CuG,KAA3C;AACD,OAFD,MAEO;AACL,YAAI,4BAAA,KAAI,iBAAJ,iBAAoBzG,QAApB,CAA6BC,QAA7B,CAAsCC,CAAtC,GAA0C,CAA9C,EACE,4BAAA,KAAI,iBAAJ,iBAAoBF,QAApB,CAA6BC,QAA7B,CAAsCC,CAAtC,IAA2CuG,KAA3C;AACH;AACF;AACF,GAtBa;;AAAA,OA+BdC,oBA/Bc,GA+BS,UAACzJ,IAAD,EAAO0J,SAAP,EAAkBF,KAAlB,EAA4B;AAEjD,QAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAA5B,EACE,4BAAA,KAAI,iBAAJ,mBAAsB5M,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAtB;;AACF,QAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAA5B,EAAkC;AAChC,UAAI6M,SAAJ,EAAe;AACb,oCAAA,KAAI,iBAAJ,iBAAoB3G,QAApB,CAA6BC,QAA7B,CAAsChD,IAAtC,KAA+CwJ,KAA/C;AACD,OAFD,MAEO;AACL,oCAAA,KAAI,iBAAJ,iBAAoBzG,QAApB,CAA6BC,QAA7B,CAAsChD,IAAtC,KAA+CwJ,KAA/C;AACD;AACF;AACF,GA1Ca;;AAAA;AAAA;AAAA,WAmDO,eAACG,GAAD,EAAMlI,MAAN,EAAcC,QAAd,EAA2B;AAC9C,UAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAAxB,IAAgCiI,GAAG,KAAK,IAA5C,EAAkD;AAEhD,YAAMC,OAAO,GAAGD,GAAG,CAAC5G,QAAJ,CAAaC,QAAb,CAAsBV,CAAtB,GAA0B,IAAIqH,GAAG,CAAC5G,QAAJ,CAAaC,QAAb,CAAsBV,CAApE;AACA,YAAMuH,OAAO,GAAGF,GAAG,CAAC5G,QAAJ,CAAaC,QAAb,CAAsBT,CAAtB,GAA0B,IAAIoH,GAAG,CAAC5G,QAAJ,CAAaC,QAAb,CAAsBT,CAApE;AACA,YAAMuH,OAAO,GAAGrI,MAAhB;;AAIA,oCAAA,KAAI,iBAAJ,iBAAoBvE,YAApB,CACE,WADF,gCAE6B0M,OAAO,GAAG,CAFvC,UAE4CE,OAF5C,UAGID,OAAO,GAAG,CAHd;;AAMA,oCAAA,KAAI,iBAAJ,iBAAoB3M,YAApB,CACE,cADF,+BAGI,4BAAA,KAAI,iBAAJ,iBAAoB6F,QAApB,CAA6BrB,QAA7B,CAAsCY,CAH1C,SAIMZ,QAJN,SAIkB,4BAAA,KAAI,iBAAJ,iBAAoBqB,QAApB,CAA6BrB,QAA7B,CAAsCa,CAJxD;AAMD;AACF;AAzEa;;AAAA,OAgFdwH,iBAhFc,GAgFM,UAACC,OAAD,EAAa;AAC/B,QAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAA5B,EAAkC;AAChC,UAAIH,OAAO,GAAG,4BAAA,KAAI,iBAAJ,iBAAoB9G,QAApB,CAA6BC,QAA7B,CAAsCC,CAApD;;AACA,UAAI+G,OAAO,CAAC3E,OAAR,KAAoBzC,SAAxB,EAAmC;AAEjCiH,QAAAA,OAAO,GAAGG,OAAO,CAAC3E,OAAR,GAAkB,CAA5B;AACD;;AACD,UAAMuE,OAAO,GAAGI,OAAO,CAAChF,OAAR,GAAkBgF,OAAO,CAAChF,OAA1C;AACA,UAAM8E,OAAO,GAAGE,OAAO,CAAC/E,OAAR,GAAkB+E,OAAO,CAAC/E,OAA1C;AAGA/I,MAAAA,UAAU,CAAC,YAAM;AACf,oCAAA,KAAI,iBAAJ,iBAAoBgB,YAApB,CACE,WADF,gCAE6B0M,OAAO,GAAG,CAFvC,UAE4CC,OAF5C,UAGIC,OAAO,GAAG,CAHd;AAMD,OAPS,EAOP,IAPO,CAAV;AAQD;AACF,GApGa;;AAAA,OA0GdG,yBA1Gc,GA0Gc,YAAM;AAEhC,QAAMC,YAAY,GAAGtN,QAAQ,CAACC,cAAT,CAAwB,WAAxB,CAArB;;AACA,QAAIqN,YAAY,KAAKtH,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBsH,YAAxB,EAAsC,CAAtC,EAAyC,GAAzC;AACD;AACF,GAhHa;;AAAA,OAsHdC,uBAtHc,GAsHY,YAAM;AAE9B,QAAMD,YAAY,GAAGtN,QAAQ,CAACC,cAAT,CAAwB,SAAxB,CAArB;;AACA,QAAIqN,YAAY,KAAKtH,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBsH,YAAxB,EAAsC,CAAtC,EAAyC,CAAzC;AACD;AACF,GA5Ha;;AAAA,OAkIdE,0BAlIc,GAkIe,YAAM;AAEjC,QAAMF,YAAY,GAAGtN,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAArB;;AACA,QAAIqN,YAAY,KAAKtH,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBsH,YAAxB,EAAsC,CAAtC,EAAyC,EAAzC;AACD;AACF,GAxIa;;AAAA,OA8IdG,yBA9Ic,GA8Ic,YAAM;AAEhC,QAAMH,YAAY,GAAGtN,QAAQ,CAACC,cAAT,CAAwB,WAAxB,CAArB;;AACA,QAAIqN,YAAY,KAAKtH,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBsH,YAAxB,EAAsC,CAAtC,EAAyC,GAAzC;AACD;AACF,GApJa;;AAAA,OA0JdI,mCA1Jc,GA0JwB,YAAM;AAE1C,QAAMJ,YAAY,GAAGtN,QAAQ,CAACC,cAAT,CAAwB,WAAxB,CAArB;;AACA,QAAIqN,YAAY,KAAKtH,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBsH,YAAxB,EAAsC,EAAtC,EAA0C,GAA1C;AACD;AACF,GAhKa;;AAAA,OAsKdK,iCAtKc,GAsKsB,YAAM;AAExC,QAAML,YAAY,GAAGtN,QAAQ,CAACC,cAAT,CAAwB,SAAxB,CAArB;;AACA,QAAIqN,YAAY,KAAKtH,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBsH,YAAxB,EAAsC,EAAtC,EAA0C,CAA1C;AACD;AACF,GA5Ka;;AAAA,OAkLdM,oCAlLc,GAkLyB,YAAM;AAE3C,QAAMN,YAAY,GAAGtN,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAArB;;AACA,QAAIqN,YAAY,KAAKtH,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBsH,YAAxB,EAAsC,EAAtC,EAA0C,EAA1C;AACD;AACF,GAxLa;;AAAA,OA8LdO,mCA9Lc,GA8LwB,YAAM;AAE1C,QAAMP,YAAY,GAAGtN,QAAQ,CAACC,cAAT,CAAwB,WAAxB,CAArB;;AACA,QAAIqN,YAAY,KAAKtH,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBsH,YAAxB,EAAsC,EAAtC,EAA0C,GAA1C;AACD;AACF,GApMa;;AACZ,sEAAsBtN,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAtB;AACD,CAJH;;;;ICEM6N;AAEJ,8BAAc;AAAA;AAAA;AAAA;AAAA;AACZ,gEAAgB,IAAI7R,YAAJ,EAAhB;AACD;;;;SAUD8R,iCAAA,wCAA+B3K,IAA/B,EAAqC4K,aAArC,EAAoDlB,SAApD,EAA+DmB,YAA/D,EAA6E;AAC3E,8DAAc7R,IAAd,CAAmB;AACjBoC,MAAAA,IAAI,EAAEwP,aADW;AAEjB5K,MAAAA,IAAI,EAAEA,IAFW;AAGjB0J,MAAAA,SAAS,EAAEA,SAHM;AAIjBmB,MAAAA,YAAY,EAAEA;AAJG,KAAnB;AAMD;;SAQDC,0BAAA,iCAAwBC,YAAxB,EAAsCH,aAAtC,EAAqD;AACnD,8DAAc5R,IAAd,CAAmB;AACjBgS,MAAAA,SAAS,EAAED,YADM;AAEjB3P,MAAAA,IAAI,EAAEwP;AAFW,KAAnB;AAID;;SAMDK,oBAAA,6BAAoB;AAClB,WAAO,0DAAc/R,YAAd,EAAP;AACD;;;;;AAGH,IAAMgS,mBAAmB,GAAG,IAAIR,gBAAJ,EAA5B;AACA,IAAMS,mBAAmB,GAAG,IAAIT,gBAAJ,EAA5B;;ACxCA,IAAMU,UAAU,GAAG,EAAnB;AACA,IAAIC,aAAa,GAAG,IAAIhC,aAAJ,EAApB;AACA,IAAIiC,SAAJ;AACA,IAAIC,aAAJ;;AAQA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACjH,QAAD,EAAWlE,KAAX,EAAqB;AAC7C,MAAIoL,UAAU,GAAG,GAAjB;AAEA,MAAIlH,QAAQ,CAACnJ,IAAT,KAAkB,OAAtB,EAA+BqQ,UAAU,GAAG,IAAb,CAA/B,KACK,IAAIlH,QAAQ,CAACnJ,IAAT,KAAkB,UAAtB,EAAkCqQ,UAAU,GAAG,CAAb;;AAEvC,MAAIpL,KAAK,CAACqL,GAAN,KAAc,WAAlB,EAA+B;AAC7BnH,IAAAA,QAAQ,CAACoH,MAAT,GAAkBpH,QAAQ,CAACoH,MAAT,GAAkBF,UAApC;AACD,GAFD,MAEO,IAAIpL,KAAK,CAACqL,GAAN,KAAc,SAAlB,EAA6B;AAClCnH,IAAAA,QAAQ,CAACoH,MAAT,GAAkBpH,QAAQ,CAACoH,MAAT,GAAkBF,UAApC;AACD,GAFM,MAEA,IAAIpL,KAAK,CAACqL,GAAN,KAAc,GAAlB,EAAuB;AAC5BnH,IAAAA,QAAQ,CAACqH,MAAT,GAAkBrH,QAAQ,CAACqH,MAAT,GAAkBH,UAApC;AACD,GAFM,MAEA,IAAIpL,KAAK,CAACqL,GAAN,KAAc,GAAlB,EAAuB;AAC5BnH,IAAAA,QAAQ,CAACqH,MAAT,GAAkBrH,QAAQ,CAACqH,MAAT,GAAkBH,UAApC;AACD,GAFM,MAEA,IAAIpL,KAAK,CAACqL,GAAN,KAAc,YAAlB,EAAgC;AACrCnH,IAAAA,QAAQ,CAACsH,MAAT,GAAkBtH,QAAQ,CAACsH,MAAT,GAAkBJ,UAApC;AACD,GAFM,MAEA,IAAIpL,KAAK,CAACqL,GAAN,KAAc,WAAlB,EAA+B;AACpCnH,IAAAA,QAAQ,CAACsH,MAAT,GAAkBtH,QAAQ,CAACsH,MAAT,GAAkBJ,UAApC;AACD;;AACDH,EAAAA,SAAS,CAACpO,YAAV,CACEqH,QAAQ,CAACnJ,IADX,EAEKmJ,QAAQ,CAACoH,MAFd,SAEwBpH,QAAQ,CAACqH,MAFjC,SAE2CrH,QAAQ,CAACsH,MAFpD;AAID,CAvBD;;AA+BA,IAAMC,0CAA0C,GAAG,SAA7CA,0CAA6C,CAACzL,KAAD,EAAW;AAC5D,MAAIA,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AAC1CR,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMD,GAbD,MAaO,IAAItK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AACjDR,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMD,GAbM,MAaA,IAAItK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AACjDP,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMD,GAPM,MAOA,IAAItK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AACjDP,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMD,GAPM,MAOA,IAAItK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AACjDR,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMD,GAbM,MAaA,IAAItK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AACjDR,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMD;AACF,CApED;;AA4EA,IAAMoB,sCAAsC,GAAG,SAAzCA,sCAAyC,CAAC1L,KAAD,EAAW;AACxD,MAAIA,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AAC1CR,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMD,GAbD,MAaO,IAAItK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AACjDR,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMD,GAbM,MAaA,IAAItK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AACjDP,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMD,GAPM,MAOA,IAAItK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AACjDP,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMD,GAPM,MAOA,IAAItK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AACjDR,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMD,GAbM,MAaA,IAAItK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AACjDR,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMD;AACF,CApED;;AA6EA,IAAMqB,uBAAuB,GAAG,SAA1BA,uBAA0B,CAAC3L,KAAD,EAAW;AACzC+K,EAAAA,UAAU,CAAC/K,KAAK,CAACqL,GAAP,CAAV,GAAwB,IAAxB;;AAEA,MAAIN,UAAU,CAACa,CAAX,IAAgBb,UAAU,CAAC7I,CAA/B,EAAkC;AAChCiJ,IAAAA,iBAAiB,CAACD,aAAa,CAAC,CAAD,CAAd,EAAmBlL,KAAnB,CAAjB;AACD;;AACD,MAAI+K,UAAU,CAACc,CAAX,IAAgBd,UAAU,CAAC9I,CAA/B,EAAkC;AAChCkJ,IAAAA,iBAAiB,CAACD,aAAa,CAAC,CAAD,CAAd,EAAmBlL,KAAnB,CAAjB;AACD;;AACD,MAAI+K,UAAU,CAACe,CAAX,IAAgBf,UAAU,CAACgB,CAA/B,EAAkC;AAChCZ,IAAAA,iBAAiB,CAACD,aAAa,CAAC,CAAD,CAAd,EAAmBlL,KAAnB,CAAjB;AACD;;AACD,MAAI+K,UAAU,CAACiB,KAAf,EAAsB;AACpBN,IAAAA,sCAAsC,CAAC1L,KAAD,CAAtC;AACD;;AACDyL,EAAAA,0CAA0C,CAACzL,KAAD,CAA1C;;AAEA,MAAIA,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AAC1CL,IAAAA,aAAa,CAAC/B,kBAAd,CAAiC,IAAjC,EAAuC,GAAvC;AACD;;AAED,MAAIjJ,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AAC1CL,IAAAA,aAAa,CAAC/B,kBAAd,CAAiC,KAAjC,EAAwC,GAAxC;AACD;;AACD,MAAIjJ,KAAK,CAACqL,GAAN,KAAc,GAAlB,EAAuB;AACrBL,IAAAA,aAAa,CAACpB,yBAAd;AACD;;AACD,MAAI5J,KAAK,CAACqL,GAAN,KAAc,GAAlB,EAAuB;AACrBL,IAAAA,aAAa,CAAClB,uBAAd;AACD;;AACD,MAAI9J,KAAK,CAACqL,GAAN,KAAc,GAAlB,EAAuB;AACrBL,IAAAA,aAAa,CAACjB,0BAAd;AACD;;AACD,MAAI/J,KAAK,CAACqL,GAAN,KAAc,GAAlB,EAAuB;AACrBL,IAAAA,aAAa,CAAChB,yBAAd;AACD;;AACD,MAAIhK,KAAK,CAACqL,GAAN,KAAc,GAAlB,EAAuB;AACrBL,IAAAA,aAAa,CAACf,mCAAd;AACD;;AACD,MAAIjK,KAAK,CAACqL,GAAN,KAAc,GAAlB,EAAuB;AACrBL,IAAAA,aAAa,CAACd,iCAAd;AACD;;AACD,MAAIlK,KAAK,CAACqL,GAAN,KAAc,GAAlB,EAAuB;AACrBL,IAAAA,aAAa,CAACb,oCAAd;AACD;;AACD,MAAInK,KAAK,CAACqL,GAAN,KAAc,GAAlB,EAAuB;AACrBL,IAAAA,aAAa,CAACZ,mCAAd;AACD;;AACD,MAAIpK,KAAK,CAACqL,GAAN,KAAc,OAAlB,EAA2B;AACzBxF,IAAAA,UAAU,CAACF,6BAAX;AACC,KACC,YADD,EAEC,YAFD,EAGC,YAHD,EAIC,YAJD,EAKC,YALD,EAMCsG,OAND,CAMS,UAACC,QAAD,EAAc;AACtB,UAAI3P,QAAQ,CAACC,cAAT,CAAwB0P,QAAxB,MAAsC,IAA1C,EAAgD;AAC9C7N,QAAAA,aAAa,CAACvC,wBAAd,CACE,qBADF,EAEEoQ,QAFF,EAGE,OAHF,EAIE,OAJF;AAMD;AACF,KAfA;AAgBF;;AACD,MAAIlM,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AAC1CxF,IAAAA,UAAU,CAACrC,yBAAX;AACD;;AACD,MAAIxD,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AAC1CR,IAAAA,mBAAmB,CAACJ,uBAApB,CAA4C,MAA5C,EAAoD,KAApD;AACD;;AACD,MAAIzK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AAC1CR,IAAAA,mBAAmB,CAACJ,uBAApB,CAA4C,SAA5C,EAAuD,KAAvD;AACD;;AACD,MAAIzK,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AAC1CnK,IAAAA,aAAa,CAACF,YAAd;AACD;;AACD,MAAIhB,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AAC1CnK,IAAAA,aAAa,CAACN,sBAAd,CAAqC,UAArC;AACD;;AACD,MAAIZ,KAAK,CAACqL,GAAN,KAAc,GAAd,IAAqBrL,KAAK,CAACqL,GAAN,KAAc,GAAvC,EAA4C;AAC1CnK,IAAAA,aAAa,CAACH,YAAd;AACD;AACF,CArFD;;AA6FA,IAAMoL,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACnM,KAAD,EAAW;AAC3C,SAAO+K,UAAU,CAAC/K,KAAK,CAACqL,GAAP,CAAjB;AACD,CAFD;;AAUA,IAAMe,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACvM,IAAD,EAAOuE,MAAP,EAAkB;AAClD6G,EAAAA,SAAS,GAAG7G,MAAZ;AACA8G,EAAAA,aAAa,GAAG,CAACrL,IAAI,CAAC8C,QAAN,EAAgB9C,IAAI,CAACwM,KAArB,EAA4BxM,IAAI,CAACwB,QAAjC,CAAhB;;AAGA,OAAK,IAAIiL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;AAC1BrB,IAAAA,SAAS,CAACpO,YAAV,CACEqO,aAAa,CAACoB,CAAD,CAAb,CAAiBvR,IADnB,EAEKmQ,aAAa,CAACoB,CAAD,CAAb,CAAiBhB,MAFtB,SAEgCJ,aAAa,CAACoB,CAAD,CAAb,CAAiBf,MAFjD,SAE2DL,aAAa,CAACoB,CAAD,CAAb,CAAiBd,MAF5E;AAID;AACF,CAXD;;AAiBA,IAAMe,6BAA6B,GAAG,SAAhCA,6BAAgC,GAAM;AAC1CvB,EAAAA,aAAa,GAAG,IAAIhC,aAAJ,EAAhB;AACD,CAFD;;ACtTA9C,MAAM,CAACC,iBAAP,CAAyB,mBAAzB,EAA8C;AAC5CsC,EAAAA,MAAM,EAAE;AACN9F,IAAAA,QAAQ,EAAE;AACR5H,MAAAA,IAAI,EAAE,UADE;AAERuQ,MAAAA,MAAM,EAAE,CAFA;AAGRC,MAAAA,MAAM,EAAE,CAHA;AAIRC,MAAAA,MAAM,EAAE;AAJA,KADJ;AAONa,IAAAA,KAAK,EAAE;AACLtR,MAAAA,IAAI,EAAE,OADD;AAELuQ,MAAAA,MAAM,EAAE,CAFH;AAGLC,MAAAA,MAAM,EAAE,CAHH;AAILC,MAAAA,MAAM,EAAE;AAJH,KAPD;AAaNnK,IAAAA,QAAQ,EAAE;AACRtG,MAAAA,IAAI,EAAE,UADE;AAERuQ,MAAAA,MAAM,EAAE,CAFA;AAGRC,MAAAA,MAAM,EAAE,CAHA;AAIRC,MAAAA,MAAM,EAAE;AAJA;AAbJ,GADoC;AAqB5CpF,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAMC,EAAE,GAAG,KAAKA,EAAhB;AAIA+F,IAAAA,yBAAyB,CAAC,KAAK3D,MAAN,EAAcpC,EAAd,CAAzB;AAEA9J,IAAAA,QAAQ,CAACiK,gBAAT,CAA0B,SAA1B,EAAqCmF,uBAArC;AACApP,IAAAA,QAAQ,CAACiK,gBAAT,CAA0B,OAA1B,EAAmC2F,yBAAnC;AACD,GA9B2C;AAgC5C3D,EAAAA,MAAM,EAAE,kBAAY;AAClB+D,IAAAA,6BAA6B;AAC9B;AAlC2C,CAA9C;;ACTArG,MAAM,CAACC,iBAAP,CAAyB,eAAzB,EAA0C;AACxCsC,EAAAA,MAAM,EAAE;AACNvI,IAAAA,KAAK,EAAE;AAAEvC,MAAAA,IAAI,EAAE;AAAR,KADD;AAEN6O,IAAAA,KAAK,EAAE;AAAE7O,MAAAA,IAAI,EAAE;AAAR;AAFD,GADgC;AAMxCyI,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAMC,EAAE,GAAG,KAAKA,EAAhB;AACA,SAAKnG,KAAL,GAAa,KAAKL,IAAL,CAAUK,KAAvB;AACAmG,IAAAA,EAAE,CAACxJ,YAAH,CAAgB,MAAhB,EAAwB,OAAxB,EAAiC,KAAKgD,IAAL,CAAUK,KAA3C;AACD,GAVuC;AAYxCsI,EAAAA,MAAM,EAAE,kBAAY;AAAA;;AAClB,QAAMnC,EAAE,GAAG,KAAKA,EAAhB;;AACA,QAAI,KAAKnG,KAAL,KAAe,KAAKL,IAAL,CAAUK,KAA7B,EAAoC;AAClCrE,MAAAA,UAAU,CAAC,YAAM;AACfwK,QAAAA,EAAE,CAACxJ,YAAH,CAAgB,MAAhB,EAAwB,OAAxB,EAAiC,KAAI,CAACgD,IAAL,CAAUK,KAA3C;AACD,OAFS,EAEP,KAAKL,IAAL,CAAU2M,KAFH,CAAV;AAGA,WAAKtM,KAAL,GAAa,KAAKL,IAAL,CAAUK,KAAvB;AACD;AACF;AApBuC,CAA1C;;ACXA,cAAe;AACbuM,EAAAA,GAAG,EAAE;AACHC,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADX;AAaH/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbH;AAkBHyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBL;AAsBHqT,IAAAA,IAAI,EAAE;AAEJtT,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBH,GADQ;AA8BbsT,EAAAA,IAAI,EAAE;AACJH,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADV;AAaJ/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbF;AAkBJyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBJ;AAsBJqT,IAAAA,IAAI,EAAE;AACJtT,MAAAA,OAAO,EAAE,OADL;AAEJC,MAAAA,SAAS,EAAE;AAFP;AAtBF,GA9BO;AAyDbuT,EAAAA,MAAM,EAAE;AACNJ,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADR;AAaN/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbA;AAkBNyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBF;AAsBNqT,IAAAA,IAAI,EAAE;AAEJtT,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBA,GAzDK;AAsFbwT,EAAAA,UAAU,EAAE;AACVL,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADJ;AAaV/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbI;AAkBVyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBE;AAsBVqT,IAAAA,IAAI,EAAE;AAEJtT,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBI,GAtFC;AAmHbyT,EAAAA,MAAM,EAAE;AACNN,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADR;AAaN/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbA;AAkBNyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBF;AAsBNqT,IAAAA,IAAI,EAAE;AAEJtT,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBA,GAnHK;AAgJb0T,EAAAA,KAAK,EAAE;AACLP,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADT;AAaL/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbD;AAkBLyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBH;AAsBLqT,IAAAA,IAAI,EAAE;AAEJtT,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBD,GAhJM;AA6Kb2T,EAAAA,SAAS,EAAE;AACTR,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADL;AAaT/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbG;AAkBTyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBC;AAsBTqT,IAAAA,IAAI,EAAE;AAEJtT,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBG,GA7KE;AA0Mb4T,EAAAA,KAAK,EAAE;AACLT,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADT;AAaL/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbD;AAkBLyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBH;AAsBLqT,IAAAA,IAAI,EAAE;AAEJtT,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBD,GA1MM;AAuOb6T,EAAAA,KAAK,EAAE;AACLV,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADT;AAaL/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbD;AAkBLyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBH;AAsBLqT,IAAAA,IAAI,EAAE;AAEJtT,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBD,GAvOM;AAoQb8T,EAAAA,OAAO,EAAE;AACPX,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADP;AAaP/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbC;AAkBPyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBD;AAsBPqT,IAAAA,IAAI,EAAE;AAEJtT,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBC,GApQI;AAiSb+T,EAAAA,KAAK,EAAE;AACLZ,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADT;AAaL/M,IAAAA,IAAI,EAAE;AACJsC,MAAAA,CAAC,EAAE,SADC;AAEJW,MAAAA,CAAC,EAAE,SAFC;AAGJV,MAAAA,CAAC,EAAE;AAHC,KAbD;AAkBLyK,IAAAA,MAAM,EAAE;AACNrT,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBH;AAsBLqT,IAAAA,IAAI,EAAE;AAEJtT,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBD;AAjSM,CAAf;;ICQqBgU;AAMnB,yBAAYC,KAAZ,EAAmB;AACjB,QAAIC,OAAO,CAACD,KAAD,CAAX,EAAoB;AAElB,WAAKE,KAAL,GAAaD,OAAO,CAACD,KAAD,CAAP,CAAe7N,IAAf,CAAoBsC,CAAjC;AACA,WAAK0L,KAAL,GAAaF,OAAO,CAACD,KAAD,CAAP,CAAe7N,IAAf,CAAoBiD,CAAjC;AACA,WAAKgL,KAAL,GAAaH,OAAO,CAACD,KAAD,CAAP,CAAe7N,IAAf,CAAoBuC,CAAjC;AACA,WAAKuL,OAAL,GAAeA,OAAO,CAACD,KAAD,CAAP,CAAed,YAA9B;AACA,WAAKmB,aAAL,GAAqBJ,OAAO,CAACD,KAAD,CAAP,CAAeb,MAAf,CAAsBrT,OAA3C;AACA,WAAKwU,eAAL,GAAuBL,OAAO,CAACD,KAAD,CAAP,CAAeb,MAAf,CAAsBpT,SAA7C;AACA,WAAKwU,WAAL,GAAmBN,OAAO,CAACD,KAAD,CAAP,CAAeZ,IAAf,CAAoBtT,OAAvC;AACA,WAAK0U,aAAL,GAAqBP,OAAO,CAACD,KAAD,CAAP,CAAeZ,IAAf,CAAoBrT,SAAzC;AACD,KAVD,MAUO;AAEL,WAAKmU,KAAL,GAAaD,OAAO,CAAChB,GAAR,CAAY9M,IAAZ,CAAiBsC,CAA9B;AACA,WAAK0L,KAAL,GAAaF,OAAO,CAAChB,GAAR,CAAY9M,IAAZ,CAAiBiD,CAA9B;AACA,WAAKgL,KAAL,GAAaH,OAAO,CAAChB,GAAR,CAAY9M,IAAZ,CAAiBuC,CAA9B;AACA,WAAKuL,OAAL,GAAeA,OAAO,CAAChB,GAAR,CAAYC,YAA3B;AACA,WAAKmB,aAAL,GAAqBJ,OAAO,CAAChB,GAAR,CAAYE,MAAZ,CAAmBrT,OAAxC;AACA,WAAKwU,eAAL,GAAuBL,OAAO,CAAChB,GAAR,CAAYE,MAAZ,CAAmBpT,SAA1C;AACA,WAAKwU,WAAL,GAAmBN,OAAO,CAAChB,GAAR,CAAYG,IAAZ,CAAiBtT,OAApC;AACA,WAAK0U,aAAL,GAAqBP,OAAO,CAAChB,GAAR,CAAYG,IAAZ,CAAiBrT,SAAtC;AACD;AACF;;;;SAOD0U,eAAA,sBAAatO,IAAb,EAAmB;AACjB,QAAIA,IAAI,KAAK,GAAT,IAAgBA,IAAI,KAAK,GAA7B,EAAkC,OAAO,KAAK+N,KAAZ;AAClC,QAAI/N,IAAI,KAAK,GAAT,IAAgBA,IAAI,KAAK,GAA7B,EAAkC,OAAO,KAAKgO,KAAZ;AAClC,QAAIhO,IAAI,KAAK,GAAT,IAAgBA,IAAI,KAAK,GAA7B,EAAkC,OAAO,KAAKiO,KAAZ;AAClC,WAAO,IAAP;AACD;;SAMDM,wBAAA,iCAAwB;AACtB,WAAO,KAAKL,aAAZ;AACD;;SAMDM,0BAAA,mCAA0B;AACxB,WAAO,KAAKL,eAAZ;AACD;;SAMDM,sBAAA,+BAAsB;AACpB,WAAO,KAAKL,WAAZ;AACD;;SAMDM,wBAAA,iCAAwB;AACtB,WAAO,KAAKL,aAAZ;AACD;;SAQDM,cAAA,qBAAY9G,OAAZ,EAAqB;AACnB,QAAM+G,WAAW,GAAG,CAApB;AAEA,QAAInP,KAAK,GAAG,KAAKqO,OAAL,CAAa,CAAb,CAAZ;;AAEA,QAAIjG,OAAO,IAAI+G,WAAf,EAA4B;AAC1B,aAAO,KAAKd,OAAL,CAAa,CAAb,CAAP;AACD;;AAED,QAAMrC,UAAU,GAAG,IAAnB;AACA,QAAIoD,GAAG,GAAGpD,UAAV;;AAGA,SAAK,IAAIkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAI,CAArB,EAAwBA,CAAC,EAAzB,EAA6B;AAC3B,UAAI9E,OAAO,IAAIgH,GAAf,EAAoB;AAClBpP,QAAAA,KAAK,GAAG,KAAKqO,OAAL,CAAanB,CAAb,CAAR;AACA;AACD;;AACDkC,MAAAA,GAAG,IAAIpD,UAAP;AACD;;AAED,WAAOhM,KAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrGkBqP;AAqDnB,iCAAYC,UAAZ,EAAwBnP,SAAxB,EAAmCuF,OAAnC,EAA4CD,KAA5C,EAAmD3J,WAAnD,EAAgEsS,KAAhE,EAAuE;AAAA;;AAAA;AAAA;AAAA,aApDjE;AAoDiE;AAAA;AAAA;AAAA,aAnDvD;AAmDuD;AAAA;AAAA;AAAA,aAlD1D;AAkD0D;AAAA;AAAA;AAAA,aAjD/D;AAiD+D;AAAA;AAAA;AAAA,aAhDxD;AAgDwD;AAAA;AAAA;AAAA,aA/CtD;AA+CsD;AAAA;AAAA;AAAA,aA7C5D;AA6C4D;AAAA;AAAA;AAAA,aA5C5D;AA4C4D;AAAA;AAAA;AAAA,aA3C5D;AA2C4D;AAAA;AAAA;AAAA,aAzC7D;AAyC6D;AAAA;AAAA;AAAA,aAxC7D;AAwC6D;AAAA;AAAA;AAAA,aAvC7D;AAuC6D;AAAA;AAAA;AAAA,aArC7D;AAqC6D;AAAA;AAAA;AAAA,aApC7D;AAoC6D;AAAA;AAAA;AAAA,aAnC7D;AAmC6D;AAAA;AAAA;AAAA,aAjC9D;AAiC8D;AAAA;AAAA;AAAA,aA/B7D;AACRmB,QAAAA,QAAQ,EAAE,CADF;AAERC,QAAAA,QAAQ,EAAE,CAFF;AAGRC,QAAAA,QAAQ,EAAE;AAHF;AA+B6D;AAAA;AAAA;AAAA,aAxBxD;AAwBwD;AAAA;AAAA;AAAA,aAvBhD;AAuBgD;AAAA;AAAA;AAAA,aAtBvD;AAsBuD;AAAA;AAAA;AAAA,aAnB9D;AACPlK,QAAAA,OAAO,EAAE,CADF;AAEPC,QAAAA,OAAO,EAAE,CAFF;AAGPI,QAAAA,OAAO,EAAE;AAHF;AAmB8D;AAAA;AAAA;AAAA,aAZvD;AAYuD;;AAAA,SAmHvE8J,UAnHuE,GAmH1D,YAAM;AACjB,yCAAO,KAAP;AACD,KArHsE;;AAAA,SA2HvEC,UA3HuE,GA2H1D,YAAM;AACjB,yCAAO,KAAP;AACD,KA7HsE;;AAAA,SAmIvEC,UAnIuE,GAmI1D,YAAM;AACjB,yCAAO,KAAP;AACD,KArIsE;;AAAA,SA2IvEC,QA3IuE,GA2I5D,YAAM;AACf,yCAAO,KAAP;AACD,KA7IsE;;AAAA;AAAA;AAAA,aAsJnD,eAACC,WAAD,EAAcC,KAAd,EAAwB;AAC1C,YAAIC,UAAU,GACZF,WAAW,GAAGC,KAAK,+BAAG,KAAH,iBAAnB,GAAoCA,KAAK,+BAAG,KAAH,iBAAzC,GAA0DD,WAD5D;;AAGA,YAAIE,UAAU,GAAG,CAAjB,EAAoB;AAClBA,UAAAA,UAAU,GAAG,CAAb;AACD;;AACD,eAAOA,UAAP;AACD;AA9JsE;AAAA;AAAA;AAAA,aAqKtD,eAACC,KAAD,EAAW;AAC1B,YAAMnM,YAAY,GAAG,4BAAA,KAAI,kBAAJ,kBAAmBJ,MAAnB,CAA0B,UAACC,IAAD;AAAA,iBAAUA,IAAI,CAACC,EAAL,KAAYqM,KAAtB;AAAA,SAA1B,CAArB;;AACA,eAAOnM,YAAY,CAAC3I,MAAb,KAAwB,CAA/B;AACD;AAxKsE;AAAA;AAAA;AAAA,aA0LnD,eAClByI,EADkB,EAElBsM,SAFkB,EAGlBC,SAHkB,EAIlBC,SAJkB,EAKlBC,SALkB,EAMlBC,SANkB,EAOlBC,SAPkB,EAQlBvT,KARkB,EASlBC,MATkB,EAUlB6D,MAVkB,EAWlBd,KAXkB,EAYlBwQ,SAZkB,EAaf;AACH,eAAO;AACLvE,UAAAA,GAAG,EAAErI,EAAE,+BAAG,KAAH,WADF;AAEL6M,UAAAA,QAAQ,EAAE;AACRC,YAAAA,SAAS,EAAE,OADH;AAER1T,YAAAA,KAAK,EAAEA,KAFC;AAGRC,YAAAA,MAAM,EAAEA;AAHA,WAFL;AAOL0T,UAAAA,IAAI,EAAE;AACJ3Q,YAAAA,KAAK,EAAEwQ,SADH;AAEJxT,YAAAA,KAAK,EAAE,CAFH;AAGJC,YAAAA,MAAM,EAAE;AAHJ,WAPD;AAYL2T,UAAAA,YAAY,EAAE;AACZ9P,YAAAA,KAAK,EAAEA,MADK;AAEZsM,YAAAA,KAAK,EAAE;AAFK,WAZT;AAgBLnL,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAEwN,SADK;AAER7M,YAAAA,CAAC,EAAE8M,SAFK;AAGRxN,YAAAA,CAAC,EAAEyN;AAHK,WAhBL;AAqBLM,UAAAA,QAAQ,EAAE;AACR7Q,YAAAA,KAAK,EAAEA;AADC,WArBL;AAwBL8Q,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAEb,SAAS,GAAG,4BAAA,KAAI,SAAJ,SAAY3K,OADtB;AAETyL,YAAAA,KAAK,EAAEb,SAAS,GAAG,4BAAA,KAAI,SAAJ,SAAYvK,OAFtB;AAGTqL,YAAAA,KAAK,EAAEb,SAAS,GAAG,4BAAA,KAAI,SAAJ,SAAY5K,OAHtB;AAIT0L,YAAAA,GAAG,EAAEhB,SAJI;AAKTiB,YAAAA,GAAG,EAAEhB,SALI;AAMTiB,YAAAA,GAAG,EAAEhB;AANI;AAxBN,SAAP;AAkDD;AA1PsE;AAAA;AAAA;AAAA,aAgQjD,iBAAM;AAE1B,oCAAA,KAAI,kBAAJ,oBAAqB/J,mBAAmB,CAAChC,uBAApB,EAArB;AAGA,YAAMgN,QAAQ,GAAG;AACf9S,UAAAA,IAAI,EAAE,KADS;AAEf+S,UAAAA,IAAI,EAAE,EAFS;AAGfC,UAAAA,MAAM,EAAE,EAHO;AAIfC,UAAAA,OAAO,EAAE,EAJM;AAKfC,UAAAA,MAAM,EAAE,EALO;AAMfC,UAAAA,MAAM,EAAE,EANO;AAOfC,UAAAA,UAAU,EAAE;AAPG,SAAjB;AAUA,YAAIC,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,YAAIC,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,YAAIC,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,YAAM7W,OAAO,GAAG,EAAhB;AACA,YAAIyN,eAAJ;AACA,YAAIwD,CAAJ;AACA,YAAI6F,KAAK,GAAG,CAAZ;AAMA,YAAMC,UAAU,GACd,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,gDAA8B,KAA9B,kDACI,KADJ,sBAEI,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,iBAHN;AAIA,YAAMC,UAAU,GACd,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,gDAA8B,KAA9B,kDACI,KADJ,sBAEI,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,iBAHN;AAIA,YAAMC,UAAU,GACd,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,gDAA8B,KAA9B,kDACI,KADJ,sBAEI,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,iBAHN;;AAKA,YAAM7J,MAAM,GAAG,4BAAA,KAAI,aAAJ,aAAgBlO,MAAhB,CAAuBG,MAAtC;;AACA,YAAMkO,MAAM,GAAG,4BAAA,KAAI,aAAJ,aAAgB/M,MAAhB,CAAuBnB,MAAtC;;AACA,YAAM2N,MAAM,GAAG,4BAAA,KAAI,aAAJ,aAAgBkK,MAAhB,CAAuB7X,MAAtC;;AACA,YAAM8X,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBjY,MAAhB,CAAuBI,OAAvB,GACZ,4BAAA,KAAI,aAAJ,aAAgBJ,MAAhB,CAAuBI,OAAvB,CAA+BE,GADnB,GAEZ,EAFJ;AAGA,YAAM4X,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgB5W,MAAhB,CAAuBlB,OAAvB,GACZ,4BAAA,KAAI,aAAJ,aAAgBkB,MAAhB,CAAuBlB,OAAvB,CAA+BE,GADnB,GAEZ,EAFJ;AAGA,YAAM6X,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBH,MAAhB,CAAuB5X,OAAvB,GACZ,4BAAA,KAAI,aAAJ,aAAgB4X,MAAhB,CAAuB5X,OAAvB,CAA+BE,GADnB,GAEZ,EAFJ;AAIA,YAAM8X,gBAAgB,GAAG,EAAzB;;AAGA,aAAK,IAAIC,EAAE,+BAAG,KAAH,qBAAX,EAA6BA,EAAE,IAAIN,UAAnC,EAA+CM,EAAE,EAAjD;AACE,eAAK,IAAIC,EAAE,+BAAG,KAAH,qBAAX,EAA6BA,EAAE,IAAIR,UAAnC,EAA+CQ,EAAE,EAAjD;AACE,iBAAK,IAAIC,EAAE,+BAAG,KAAH,qBAAX,EAA6BA,EAAE,IAAIV,UAAnC,EAA+CU,EAAE,EAAjD,EAAqD;AACnDvB,cAAAA,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBhX,MAAhB,CAAuBwY,YAAvB,CAAoCD,EAApC,CAAV;AACAtB,cAAAA,IAAI,GAAG,4BAAA,KAAI,aAAJ,aAAgBjX,MAAhB,CAAuByY,aAAvB,CAAqCF,EAArC,CAAP;AACArB,cAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,cAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAG,cAAAA,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgB9V,MAAhB,CAAuBkX,YAAvB,CAAoCF,EAApC,CAAV;AACAjB,cAAAA,IAAI,GAAG,4BAAA,KAAI,aAAJ,aAAgB/V,MAAhB,CAAuBmX,aAAvB,CAAqCH,EAArC,CAAP;AACAhB,cAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,cAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAG,cAAAA,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBQ,MAAhB,CAAuBQ,YAAvB,CAAoCH,EAApC,CAAV;AACAZ,cAAAA,IAAI,GAAG,4BAAA,KAAI,aAAJ,aAAgBO,MAAhB,CAAuBS,aAAvB,CAAqCJ,EAArC,CAAP;AACAX,cAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,cAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAlJ,cAAAA,eAAe,GAAG,4BAAA,KAAI,aAAJ,aAAgB3N,aAAhB,CAA8B2X,EAA9B,EAAkCD,EAAlC,EAAsCD,EAAtC,CAAlB;AACAtG,cAAAA,CAAC,+BAAG,KAAH,4CACCxD,eADD,EAEC,4BAAA,KAAI,aAAJ,aAAgBmK,QAFjB,CAAD;;AAOA,kBAAI3G,CAAC,+BAAG,KAAH,6CAAL,EAAmC;AACjC,oBAAI4G,IAAI,GAAG5G,CAAX;AACA,oBAAIA,CAAC,GAAG,IAAR,EAAc4G,IAAI,GAAG,IAAP;;AAEd,oBAAMvT,KAAK,GAAG,4BAAA,KAAI,iBAAJ,iBAAoBkP,WAApB,CAAgCvC,CAAhC,CAAd;;AAEA,oBAAM/I,EAAE,GACN,4BAAA,KAAI,MAAJ,QACAiO,IADA,GAEA,KAFA,GAGAC,IAHA,GAIA,KAJA,GAKAO,IALA,GAMA,KANA,GAOAC,IAPA,GAQA,KARA,GASAL,IATA,GAUA,KAVA,GAWAC,IAZF;AAaA,oBAAIvK,WAAW,SAAf;;AACA,gDAAI,KAAJ,kCAAwB/D,EAAxB,GAA6B;AAC3B+D,kBAAAA,WAAW,GAAG,4BAAA,KAAI,iBAAJ,iBAAoBoH,uBAApB,EAAd;AACD,iBAFD,MAEO;AACLpH,kBAAAA,WAAW,GAAG3H,KAAd;AACD;;AAED,oBAAM1G,OAAO,YAAUsK,EAAV,iEAEA+I,CAFA,gCAGF3M,KAHE,iCAIDiJ,MAJC,iCAKDH,MALC,iCAMDJ,MANC,0CAOQS,eAPR,kCAQAzN,OARA,+BASHmW,IATG,+BAUHI,IAVG,+BAWHI,IAXG,+BAYHP,IAZG,+BAaHI,IAbG,+BAcHI,IAdG,kCAeAV,OAfA,kCAgBAI,OAhBA,kCAiBAI,OAjBA,iCAkBDL,MAlBC,iCAmBDI,MAnBC,iCAoBDI,MApBC,sCAqBI5K,WArBJ,sCAsBI,4BAAA,KAAI,iBAAJ,iBAAoBoH,uBAApB,EAtBJ,gCAuBF,4BAAA,KAAI,iBAAJ,iBAAoBF,YAApB,CAAiC,GAAjC,CAvBE,gCAwBF,4BAAA,KAAI,iBAAJ,iBAAoBA,YAApB,CAAiC,GAAjC,CAxBE,gCAyBF,4BAAA,KAAI,iBAAJ,iBAAoBA,YAApB,CAAiC,GAAjC,CAzBX;;AA2BA,oBAAM7R,KAAK,GAAGuW,IAAI,GAAG,GAArB;;AACA,oBAAMC,IAAI,GAAG,CAACL,EAAE,GAAG,CAAN,gCAAW,KAAX,mBAAb;;AACA,oBAAMM,IAAI,GAAG,CAACR,EAAE,GAAG,CAAN,gCAAW,KAAX,sBAA0B,GAAvC;;AACA,oBAAMS,IAAI,GAAG,CAACR,EAAE,GAAG,CAAN,gCAAW,KAAX,mBAAb;;AACA7B,gBAAAA,QAAQ,CAACC,IAAT,CAAckB,KAAd,IAAuB;AACrB5O,kBAAAA,EAAE,EAAEA,EADiB;AAErB5D,kBAAAA,KAAK,EAAEA,KAFc;AAGrB1G,kBAAAA,OAAO,EAAEA,OAHY;AAIrBwX,kBAAAA,SAAS,EAAE;AACT6C,oBAAAA,SAAS,8BAAE,KAAF,gDAA6B/P,EAA7B,CADA;AAETgQ,oBAAAA,UAAU,8BAAE,KAAF,gDAA6BhQ,EAA7B,CAFD;AAGTiQ,oBAAAA,SAAS,8BAAE,KAAF,gDAA6BjQ,EAA7B,CAHA;AAITkQ,oBAAAA,OAAO,EAAE9W,KAJA;AAKT+W,oBAAAA,QAAQ,EAAE/W,KALD;AAMTgX,oBAAAA,OAAO,EAAEhX;AANA,mBAJU;AAYrBiX,kBAAAA,UAAU,EAAE;AACVlD,oBAAAA,KAAK,EAAEyC,IAAI,GAAG,4BAAA,KAAI,SAAJ,SAAYjO,OADhB;AAEVyL,oBAAAA,KAAK,EAAEyC,IAAI,GAAG,4BAAA,KAAI,SAAJ,SAAY7N,OAFhB;AAGVqL,oBAAAA,KAAK,EAAEyC,IAAI,GAAG,4BAAA,KAAI,SAAJ,SAAYlO,OAHhB;AAIV0L,oBAAAA,GAAG,EAAEsC,IAJK;AAKVrC,oBAAAA,GAAG,EAAEsC,IALK;AAMVrC,oBAAAA,GAAG,EAAEsC;AANK,mBAZS;AAoBrBQ,kBAAAA,UAAU,EAAE;AACVC,oBAAAA,SAAS,8BAAE,KAAF,8CAA4BvQ,EAA5B,CADC;AAEVwQ,oBAAAA,OAAO,EAAEzM;AAFC;AApBS,iBAAvB;AAwDAqL,gBAAAA,gBAAgB,CAACR,KAAD,CAAhB,GAA0B;AACxBvG,kBAAAA,GAAG,EAAErI,EADmB;AAExBqJ,kBAAAA,KAAK,EAAEjQ,KAFiB;AAGxBgD,kBAAAA,KAAK,EAAE2H;AAHiB,iBAA1B;AAKD;;AACD6K,cAAAA,KAAK;AACN;AA9IH;AADF;;AAiJA,oCAAA,KAAI,gBAAJ,kBAAqBQ,gBAArB;AAEA,YAAMqB,UAAU,GAAG,EAAnB;AACA,YAAMC,YAAY,GAAG,EAArB;AAEA9B,QAAAA,KAAK,GAAG,CAAR;;AACA,aAAK,IAAIS,GAAE,+BAAG,KAAH,qBAAX,EAA6BA,GAAE,IAAIP,UAAnC,EAA+CO,GAAE,EAAjD,EAAqD;AACnDoB,UAAAA,UAAU,CAAC7B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEE,CAAC,GAAD,+BAAO,KAAP,qBAFF,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIES,GAAE,GAAG,CAJP,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIH,OAAO,CAACG,GAAE,GAAG,CAAN,CAAP,GACIH,OAAO,CAACG,GAAE,GAAG,CAAN,CAAP,CAAgB5X,OADpB,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAahF,QAAb,GAAwByD,GAAxB,GAA6B,CAA7B,GAAiCwB,MAAM,CAACC,OAAzC,IAAoD,GADtD,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAqF,UAAAA,YAAY,CAAC9B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEEC,UAAU,GAAG,GAFf,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIEQ,GAAE,GAAG,CAJP,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIH,OAAO,CAACG,GAAE,GAAG,CAAN,CAAP,GACIH,OAAO,CAACG,GAAE,GAAG,CAAN,CAAP,CAAgB5X,OADpB,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAahF,QAAb,GAAwByD,GAAxB,GAA6B,CAA7B,GAAiCwB,MAAM,CAACC,OAAzC,IAAoD,GADtD,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAuD,UAAAA,KAAK;AACN;;AAEDnB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,WADmB;AAEvBqI,UAAAA,GAAG,EAAE,mCAAO,KAAP,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAEmI,MADH;AAEJjJ,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,GADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYxL,OAD9B;AAETyL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYpL,OAF9B;AAGTqL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAAhB,GAAsB,4BAAA,KAAI,SAAJ,SAAYzL,OAHhC;AAIT0L,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAJZ;AAKTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CALZ;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AA0CAC,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,YADmB;AAEvBqI,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAEmI,MADH;AAEJjJ,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,GADK;AAERW,YAAAA,CAAC,EAAE,EAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYlN,OAD3B;AAETyL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYpL,OAF9B;AAGTqL,YAAAA,KAAK,EAAEyB,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlN,OAH7B;AAIT0L,YAAAA,GAAG,EAAEuB,UAAU,GAAG,CAJT;AAKTtB,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CALZ;AAMTC,YAAAA,GAAG,EAAEsB,UAAU,GAAG;AANT;AAZY,SAAzB;;AAyCA,aAAK,IAAIS,GAAE,+BAAG,KAAH,qBAAX,EAA6BA,GAAE,IAAIV,UAAnC,EAA+CU,GAAE,EAAjD,EAAqD;AACnDkB,UAAAA,UAAU,CAAC7B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEEW,GAAE,GAAG,CAFP,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIN,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,GACIN,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,CAAgB9X,OADpB,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAajF,QAAb,GAAwB4D,GAAxB,GAA6B,CAA7B,GAAiCsB,MAAM,CAACC,OAAzC,IAAoD,GADtD,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAqF,UAAAA,YAAY,CAAC9B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEEW,GAAE,GAAG,CAFP,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIET,UAAU,GAAG,GAJf,EAKE,GALF,EAME,EANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIG,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,GACIN,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,CAAgB9X,OADpB,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAajF,QAAb,GAAwB4D,GAAxB,GAA6B,CAA7B,GAAiCsB,MAAM,CAACC,OAAzC,IAAoD,GADtD,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAuD,UAAAA,KAAK;AACN;;AAEDnB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,WADmB;AAEvBqI,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAEgI,MADH;AAEJ9I,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,GADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,SAAYxL,OAD1B;AAETyL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYpL,OAF9B;AAGTqL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYzL,OAH9B;AAIT0L,YAAAA,GAAG,8BAAE,KAAF,qBAJM;AAKTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CALZ;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AAwCAC,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,SADmB;AAEvBqI,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAEgI,MADH;AAEJ9I,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,GADK;AAERW,YAAAA,CAAC,EAAE,CAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlN,OAD7B;AAETyL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYpL,OAF9B;AAGTqL,YAAAA,KAAK,EAAEyB,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYlN,OAH3B;AAIT0L,YAAAA,GAAG,EAAEuB,UAAU,GAAG,GAJT;AAKTtB,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CALZ;AAMTC,YAAAA,GAAG,EAAEsB,UAAU,GAAG;AANT;AAZY,SAAzB;AAyCA2B,QAAAA,UAAU,CAAC7B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEEC,UAAU,GAAG,GAFf,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIEC,UAAU,GAAG,GAJf,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIK,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,GACIA,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,CAA2B1X,OAD/B,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAa/E,QAAb,+BAAwB,KAAxB,wBAAwC,CAAxC,GAA4CgF,MAAM,CAACC,OAApD,IAA+D,GADjE,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAqF,QAAAA,YAAY,CAAC9B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEEC,UAAU,GAAG,GAFf,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,EANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIM,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,GACIA,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,CAA2B1X,OAD/B,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAa/E,QAAb,+BAAwB,KAAxB,wBAAwC,CAAxC,GAA4CgF,MAAM,CAACC,OAApD,IAA+D,GADjE,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAuD,QAAAA,KAAK;AACL6B,QAAAA,UAAU,CAAC7B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEE,4BAAA,KAAI,WAAJ,aAAgB,GAFlB,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIEE,UAAU,GAAG,GAJf,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIK,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,GACIA,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,CAA2B1X,OAD/B,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAa/E,QAAb,+BAAwB,KAAxB,wBAAwC,CAAxC,GAA4CgF,MAAM,CAACC,OAApD,IAA+D,GADjE,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAqF,QAAAA,YAAY,CAAC9B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEE,4BAAA,KAAI,WAAJ,aAAgB,GAFlB,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIO,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,GACIA,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,CAA2B1X,OAD/B,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAa/E,QAAb,+BAAwB,KAAxB,wBAAwC,CAAxC,GAA4CgF,MAAM,CAACC,OAApD,IAA+D,GADjE,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAuD,QAAAA,KAAK;AAELnB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,UADmB;AAEvBqI,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAE4H,MADH;AAEJ1I,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,CADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAAhB,GAAsB,4BAAA,KAAI,SAAJ,SAAYxL,OADhC;AAETyL,YAAAA,KAAK,EAAE2B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAY/M,OAF3B;AAGTqL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYzL,OAH9B;AAIT0L,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAJZ;AAKTC,YAAAA,GAAG,EAAEwB,UAAU,GAAG,CALT;AAMTvB,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AAwCAC,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,UADmB;AAEvBqI,UAAAA,GAAG,EAAE,qCAAS,KAAT,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAE4H,MADH;AAEJ1I,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,CADK;AAERW,YAAAA,CAAC,EAAE,EAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlN,OAD7B;AAETyL,YAAAA,KAAK,EAAE2B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAY/M,OAF3B;AAGTqL,YAAAA,KAAK,EAAEyB,UAAU,GAAG,4BAAA,KAAI,SAAJ,SAAYlN,OAHvB;AAIT0L,YAAAA,GAAG,EAAEuB,UAAU,GAAG,GAJT;AAKTtB,YAAAA,GAAG,EAAEwB,UAAU,GAAG,CALT;AAMTvB,YAAAA,GAAG,EAAEsB;AANI;AAZY,SAAzB;AAoCArB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,UADmB;AAEvBqI,UAAAA,GAAG,EAAE,qCAAS,KAAT,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAE4H,MADH;AAEJ1I,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,CADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYxL,OAD9B;AAETyL,YAAAA,KAAK,EAAE2B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAY/M,OAF3B;AAGTqL,YAAAA,KAAK,EAAEyB,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlN,OAH7B;AAIT0L,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAJZ;AAKTC,YAAAA,GAAG,EAAEwB,UAAU,GAAG,CALT;AAMTvB,YAAAA,GAAG,EAAEsB,UAAU,GAAG;AANT;AAZY,SAAzB;AAsCArB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,UADmB;AAEvBqI,UAAAA,GAAG,EAAE,qCAAS,KAAT,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAE4H,MADH;AAEJ1I,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,CADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlN,OAD7B;AAETyL,YAAAA,KAAK,EAAE2B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAY/M,OAF3B;AAGTqL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAAhB,GAAsB,4BAAA,KAAI,SAAJ,SAAYzL,OAHhC;AAIT0L,YAAAA,GAAG,EAAEuB,UAAU,GAAG,GAJT;AAKTtB,YAAAA,GAAG,EAAEwB,UAAU,GAAG,CALT;AAMTvB,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AAyCAC,QAAAA,QAAQ,CAACK,MAAT,CAAgB,CAAhB,IAAqB;AACnBzF,UAAAA,GAAG,EAAE,qCAAS,KAAT,WADc;AAEnB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAE,4BAAA,KAAI,aAAJ,aAAgB/F,MADnB;AAEJiF,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoBgP,mBAApB;AAFH,WAFa;AAMnB/M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,CADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WANS;AAWnBS,UAAAA,QAAQ,EAAE;AACRV,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,EADX;AAERW,YAAAA,CAAC,EAAEmP,UAAU,GAAG,IAFR;AAGR7P,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AAHX,WAXS;AAgBnB6R,UAAAA,SAAS,EAAE;AACT7T,YAAAA,KAAK,EAAE,yCADE;AAETd,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoBgP,mBAApB;AAFE;AAhBQ,SAArB;AAgDAqC,QAAAA,QAAQ,CAACK,MAAT,CAAgB,CAAhB,IAAqB;AACnBzF,UAAAA,GAAG,EAAE,qCAAS,KAAT,WADc;AAEnB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAE,4BAAA,KAAI,aAAJ,aAAgBrF,KADnB;AAEJuE,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoBgP,mBAApB;AAFH,WAFa;AAMnB/M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,CADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WANS;AAWnBS,UAAAA,QAAQ,EAAE;AACRV,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GADX;AAERW,YAAAA,CAAC,EAAEmP,UAAU,GAAG,IAFR;AAGR7P,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AAHX,WAXS;AAgBnB6R,UAAAA,SAAS,EAAE;AACT7T,YAAAA,KAAK,EAAE,+CADE;AAETd,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoBgP,mBAApB;AAFE;AAhBQ,SAArB;AAgDAwD,QAAAA,KAAK;AACL,YAAMoC,YAAY,GAChB,4BAAA,KAAI,SAAJ,uCAAc,KAAd,sBAA6B,4BAAA,KAAI,UAAJ,YAAe,CAA5C,+BAAgD,KAAhD,iBADF;AAEA,YAAMC,YAAY,GAChB,4BAAA,KAAI,SAAJ,uCAAc,KAAd,sBAA6B,4BAAA,KAAI,UAAJ,YAAe,CAA5C,+BAAgD,KAAhD,iBADF;AAEAxD,QAAAA,QAAQ,CAACI,MAAT,GAAkB;AAChBxF,UAAAA,GAAG,EAAE,SAASuG,KAAT,+BAAiB,KAAjB,WADW;AAEhBvF,UAAAA,KAAK,EAAE;AACLjQ,YAAAA,KAAK,EAAE4X,YAAY,GAAG,CADjB;AAEL3X,YAAAA,MAAM,EAAE,GAFH;AAGL6X,YAAAA,KAAK,EAAED,YAAY,GAAG;AAHjB,WAFS;AAOhB/D,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB6D,YAAY,GAAG,GAA/B,GAAqC,CAArC,GAAyC,4BAAA,KAAI,SAAJ,SAAYrP,OADnD;AAETyL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAAhB,GAAsB,4BAAA,KAAI,SAAJ,SAAYpL,OAFhC;AAGTqL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB4D,YAAY,GAAG,GAA/B,GAAqC,GAArC,GAA2C,4BAAA,KAAI,SAAJ,SAAYrP,OAHrD;AAIT0L,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB0D,YAAY,GAAG,GAA/B,GAAqC,CAJjC;AAKTzD,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GALZ;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgByD,YAAY,GAAG,GAA/B,GAAqC;AANjC;AAPK,SAAlB;AAyDArC,QAAAA,KAAK;AACLnB,QAAAA,QAAQ,CAACG,OAAT,CAAiB,CAAjB,IAAsB;AACpBvF,UAAAA,GAAG,EAAE,SAASuG,KAAT,+BAAiB,KAAjB,WADe;AAEpB5O,UAAAA,EAAE,EAAE,YAFgB;AAGpB6M,UAAAA,QAAQ,EAAE;AACRzT,YAAAA,KAAK,EAAE,CADC;AAERC,YAAAA,MAAM,EAAE,EAFA;AAGR6X,YAAAA,KAAK,EAAE;AAHC,WAHU;AAQpBvR,UAAAA,QAAQ,EAAE;AACRV,YAAAA,CAAC,EAAE4P,UAAU,GAAG,CADR;AAERjP,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,WAAc,CAA9B,GAAkC,GAF7B;AAGRV,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,WAAc,CAA9B,GAAkC;AAH7B,WARU;AAapB+N,UAAAA,QAAQ,EAAE;AACR7Q,YAAAA,KAAK,EAAE,SADC;AAER+U,YAAAA,WAAW,EAAE;AAFL;AAbU,SAAtB;AA6BAvC,QAAAA,KAAK;AACLnB,QAAAA,QAAQ,CAACG,OAAT,CAAiB,CAAjB,IAAsB;AACpBvF,UAAAA,GAAG,EAAE,SAASuG,KAAT,+BAAiB,KAAjB,WADe;AAEpB5O,UAAAA,EAAE,EAAE,eAFgB;AAGpB6M,UAAAA,QAAQ,EAAE;AACRzT,YAAAA,KAAK,EAAE,GADC;AAERC,YAAAA,MAAM,EAAE,EAFA;AAGR6X,YAAAA,KAAK,EAAE;AAHC,WAHU;AAQpBvR,UAAAA,QAAQ,EAAE;AACRV,YAAAA,CAAC,EAAE4P,UAAU,GAAG,GADR;AAERjP,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,WAAc,CAA9B,GAAkC,GAF7B;AAGRV,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,WAAc,CAAlC,GAAsC;AAHjC,WARU;AAapB+N,UAAAA,QAAQ,EAAE;AACR7Q,YAAAA,KAAK,EAAE,SADC;AAER+U,YAAAA,WAAW,EAAE;AAFL;AAbU,SAAtB;AA8BA1D,QAAAA,QAAQ,CAACE,MAAT,aAAsB8C,UAAtB,EAAqCC,YAArC;AAEA,eAAOjD,QAAP;AACD;AAvpCsE;AAAA;AAAA;AAAA,aA8pCjD,eAAC2D,kBAAD,EAAwB;AAE5C,oCAAA,KAAI,kBAAJ,oBAAqB3O,mBAAmB,CAAChC,uBAApB,EAArB;AAGA,YAAMgN,QAAQ,GAAG;AACf9S,UAAAA,IAAI,EAAE,KADS;AAEf+S,UAAAA,IAAI,EAAE,EAFS;AAGfC,UAAAA,MAAM,EAAE,EAHO;AAIfC,UAAAA,OAAO,EAAE,EAJM;AAKfC,UAAAA,MAAM,EAAE,EALO;AAMfC,UAAAA,MAAM,EAAE,EANO;AAOfC,UAAAA,UAAU,EAAE;AAPG,SAAjB;AAUA,YAAIsD,iBAAJ;AACA,YAAIrD,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,YAAIC,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,YAAIxF,CAAJ;AACA,YAAMjR,OAAO,GAAG,EAAhB;AACA,YAAIyN,eAAJ;AACA,YAAIqJ,KAAK,GAAG,CAAZ;AAIA,YAAMC,UAAU,GACd,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,oBAA8B,4BAAA,KAAI,aAAJ,aAAgB7X,MAAhB,CAAuBD,MAArD,GACI,4BAAA,KAAI,aAAJ,aAAgBC,MAAhB,CAAuBD,MAD3B,GAEI,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,iBAHN;AAIA,YAAM+X,UAAU,GACd,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,oBAA8B,4BAAA,KAAI,aAAJ,aAAgBxW,MAAhB,CAAuBvB,MAArD,GACI,4BAAA,KAAI,aAAJ,aAAgBuB,MAAhB,CAAuBvB,MAD3B,GAEI,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,iBAHN;AAIA,YAAMmO,MAAM,GACV,4BAAA,KAAI,aAAJ,aAAgBlO,MAAhB,CAAuBG,MAAvB,KAAkC,EAAlC,GAAuC,4BAAA,KAAI,aAAJ,aAAgBH,MAAhB,CAAuBG,MAA9D,GAAuE,GADzE;AAEA,YAAMkO,MAAM,GACV,4BAAA,KAAI,aAAJ,aAAgB/M,MAAhB,CAAuBnB,MAAvB,KAAkC,EAAlC,GAAuC,4BAAA,KAAI,aAAJ,aAAgBmB,MAAhB,CAAuBnB,MAA9D,GAAuE,GADzE;AAEA,YAAM8X,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBjY,MAAhB,CAAuBI,OAAvB,GACZ,4BAAA,KAAI,aAAJ,aAAgBJ,MAAhB,CAAuBI,OAAvB,CAA+BE,GADnB,GAEZ,EAFJ;AAGA,YAAM4X,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgB5W,MAAhB,CAAuBlB,OAAvB,GACZ,4BAAA,KAAI,aAAJ,aAAgBkB,MAAhB,CAAuBlB,OAAvB,CAA+BE,GADnB,GAEZ,EAFJ;AAIA,YAAM8X,gBAAgB,GAAG,EAAzB;;AAGA,aAAK,IAAIE,EAAE,+BAAG,KAAH,qBAAX,EAA6BA,EAAE,IAAIR,UAAnC,EAA+CQ,EAAE,EAAjD,EAAqD;AACnD,eAAK,IAAIC,EAAE,+BAAG,KAAH,qBAAX,EAA6BA,EAAE,IAAIV,UAAnC,EAA+CU,EAAE,EAAjD,EAAqD;AACnDvB,YAAAA,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBhX,MAAhB,CAAuBwY,YAAvB,CAAoCD,EAApC,CAAV;AACAtB,YAAAA,IAAI,GAAG,4BAAA,KAAI,aAAJ,aAAgBjX,MAAhB,CAAuByY,aAAvB,CAAqCF,EAArC,CAAP;AACArB,YAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,YAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAG,YAAAA,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgB9V,MAAhB,CAAuBkX,YAAvB,CAAoCF,EAApC,CAAV;AACAjB,YAAAA,IAAI,GAAG,4BAAA,KAAI,aAAJ,aAAgB/V,MAAhB,CAAuBmX,aAAvB,CAAqCH,EAArC,CAAP;AACAhB,YAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,YAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACA9I,YAAAA,eAAe,GAAG,4BAAA,KAAI,aAAJ,aAAgB3N,aAAhB,CAA8B2X,EAA9B,EAAkCD,EAAlC,CAAlB;AACAvG,YAAAA,CAAC,+BAAG,KAAH,4CAA4BxD,eAA5B,EAA6C,4BAAA,KAAI,aAAJ,aAAgBmK,QAA7D,CAAD;AACA2B,YAAAA,iBAAiB,GAAGtI,CAAC,GAAG,CAAxB;;AAIA,gBAAIA,CAAC,+BAAG,KAAH,6CAAL,EAAmC;AACjC,kBAAMuI,eAAe,+BAAG,KAAH,4CACnBF,kBADmB,EAEnBnD,IAFmB,EAGnBI,IAHmB,CAArB;;AAKA,kBAAMjS,KAAK,GACTkV,eAAe,KAAK,EAApB,GACI,4BAAA,KAAI,iBAAJ,iBAAoBhG,WAApB,CAAgCvC,CAAhC,CADJ,GAEIuI,eAHN;AAMA,kBAAMtR,EAAE,GACN,4BAAA,KAAI,MAAJ,QAAWiO,IAAX,GAAkB,KAAlB,GAA0BC,IAA1B,GAAiC,KAAjC,GAAyCG,IAAzC,GAAgD,KAAhD,GAAwDC,IAD1D;AAEA,kBAAIvK,WAAW,SAAf;;AACA,8CAAI,KAAJ,kCAAwB/D,EAAxB,GAA6B;AAC3B+D,gBAAAA,WAAW,GAAG,4BAAA,KAAI,iBAAJ,iBAAoBoH,uBAApB,EAAd;AACD,eAFD,MAEO;AACLpH,gBAAAA,WAAW,GAAG3H,KAAd;AACD;;AAED,kBAAM1G,OAAO,YAAUsK,EAAV,6DAEA+I,CAFA,8BAGF3M,KAHE,+BAIDiJ,MAJC,+BAKDH,MALC,qEAOQK,eAPR,gCAQAzN,OARA,6BASHmW,IATG,6BAUHI,IAVG,6BAWH,CAXG,6BAYHH,IAZG,6BAaHI,IAbG,6BAcH,CAdG,gCAeAN,OAfA,gCAgBAI,OAhBA,gCAiBA,CAjBA,+BAkBDD,MAlBC,+BAmBDI,MAnBC,+BAoBD,CApBC,oCAqBIxK,WArBJ,oCAsBI,4BAAA,KAAI,iBAAJ,iBAAoBoH,uBAApB,EAtBJ,8BAuBF,4BAAA,KAAI,iBAAJ,iBAAoBF,YAApB,CAAiC,GAAjC,CAvBE,8BAwBF,4BAAA,KAAI,iBAAJ,iBAAoBA,YAApB,CAAiC,GAAjC,CAxBE,8BAyBF,4BAAA,KAAI,iBAAJ,iBAAoBA,YAApB,CAAiC,GAAjC,CAzBX;;AA2BA,kBAAM7R,KAAK,GAAG+U,MAAM,+BAAG,KAAH,mBAAN,+BAAwB,KAAxB,+BAAd;;AACA,kBAAM+C,KAAK,GAAG3C,MAAM,+BAAG,KAAH,mBAAN,+BAAwB,KAAxB,+BAAd;;AACA,kBAAMqB,IAAI,GAAGL,EAAE,GAAG,CAAlB;AACA,kBAAMM,IAAI,GAAGP,EAAE,GAAG,CAAlB;AACA7B,cAAAA,QAAQ,CAACC,IAAT,CAAckB,KAAd,IAAuB;AACrB5O,gBAAAA,EAAE,EAAEA,EADiB;AAErB5D,gBAAAA,KAAK,EAAEA,KAFc;AAGrB1G,gBAAAA,OAAO,EAAEA,OAHY;AAIrBwX,gBAAAA,SAAS,EAAE;AACT6C,kBAAAA,SAAS,EAAE3W,KADF;AAET4W,kBAAAA,UAAU,8BAAE,KAAF,gDAA6BhQ,EAA7B,CAFD;AAGTiQ,kBAAAA,SAAS,EAAEiB,KAHF;AAIThB,kBAAAA,OAAO,EAAE9W,KAJA;AAKT+W,kBAAAA,QAAQ,EAAEpH,CALD;AAMTqH,kBAAAA,OAAO,EAAEc;AANA,iBAJU;AAYrBb,gBAAAA,UAAU,EAAE;AACVlD,kBAAAA,KAAK,EAAEyC,IAAI,GAAG,4BAAA,KAAI,SAAJ,SAAYjO,OADhB;AAEVyL,kBAAAA,KAAK,EAAEiE,iBAFG;AAGVhE,kBAAAA,KAAK,EAAEwC,IAAI,GAAG,4BAAA,KAAI,SAAJ,SAAYjO,OAHhB;AAIV0L,kBAAAA,GAAG,EAAEsC,IAJK;AAKVrC,kBAAAA,GAAG,EAAE8D,iBALK;AAMV7D,kBAAAA,GAAG,EAAEqC;AANK,iBAZS;AAoBrBS,gBAAAA,UAAU,EAAE;AACVC,kBAAAA,SAAS,8BAAE,KAAF,8CAA4BvQ,EAA5B,CADC;AAEVwQ,kBAAAA,OAAO,EAAEzM;AAFC;AApBS,eAAvB;AA+CAqL,cAAAA,gBAAgB,CAACR,KAAD,CAAhB,GAA0B;AACxBvG,gBAAAA,GAAG,EAAErI,EADmB;AAExBqJ,gBAAAA,KAAK,EAAEN,CAFiB;AAGxB3M,gBAAAA,KAAK,EAAE2H;AAHiB,eAA1B;AAKD;;AACD6K,YAAAA,KAAK;AACN;AACF;;AACD,oCAAA,KAAI,gBAAJ,kBAAqBQ,gBAArB;AAEA,YAAMqB,UAAU,GAAG,EAAnB;AACA,YAAMC,YAAY,GAAG,EAArB;AAEA9B,QAAAA,KAAK,GAAG,CAAR;;AACA,aAAK,IAAIU,GAAE,+BAAG,KAAH,qBAAX,EAA6BA,GAAE,IAAIR,UAAnC,EAA+CQ,GAAE,EAAjD,EAAqD;AACnDmB,UAAAA,UAAU,CAAC7B,KAAD,CAAV,+BAAoB,KAApB,wCACE,OAAOA,KADT,EAEE,4BAAA,KAAI,WAAJ,aAAgB,GAFlB,EAGE,CAHF,EAIEU,GAAE,GAAG,CAJP,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,GACIJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,CAAgB7X,OADpB,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAahF,QAAb,GACC,CAAC0D,GAAE,GAAG,CAAN,gCAAW,KAAX,mBADD,GAECuB,MAAM,CAACC,OAFT,IAGE,GAJJ,IAKI,GAlBZ,GAoBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CApBF,EAqBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EArBF;AAuBAqF,UAAAA,YAAY,CAAC9B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,OAAOA,KADT,EAEEC,UAAU,GAAG,GAFf,EAGE,CAHF,EAIES,GAAE,GAAG,CAJP,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,GACIJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,CAAgB7X,OADpB,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAahF,QAAb,GACC,CAAC0D,GAAE,GAAG,CAAN,gCAAW,KAAX,mBADD,GAECuB,MAAM,CAACC,OAFT,IAGE,GAJJ,IAKI,GAlBZ,GAoBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CApBF,EAqBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EArBF;AAwBAuD,UAAAA,KAAK;AACN;;AAEDnB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,WADmB;AAEvBqI,UAAAA,GAAG,EAAE,mCAAO,KAAP,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAEmI,MADH;AAEJjJ,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,GADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYxL,OAD9B;AAETyL,YAAAA,KAAK,EAAE,4BAAA,KAAI,SAAJ,SAAYpL,OAFV;AAGTqL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAAhB,GAAsB,4BAAA,KAAI,SAAJ,SAAYzL,OAHhC;AAIT0L,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAJZ;AAKTC,YAAAA,GAAG,EAAE,CALI;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AAsCAC,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,YADmB;AAEvBqI,UAAAA,GAAG,EAAE,mCAAO,KAAP,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAEmI,MADH;AAEJjJ,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,GADK;AAERW,YAAAA,CAAC,EAAE,EAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYlN,OAD3B;AAETyL,YAAAA,KAAK,EAAE,4BAAA,KAAI,SAAJ,SAAYpL,OAFV;AAGTqL,YAAAA,KAAK,EAAEyB,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlN,OAH7B;AAIT0L,YAAAA,GAAG,EAAEuB,UAAU,GAAG,CAJT;AAKTtB,YAAAA,GAAG,EAAE,CALI;AAMTC,YAAAA,GAAG,EAAEsB,UAAU,GAAG;AANT;AAZY,SAAzB;;AAwCA,aAAK,IAAIS,IAAE,+BAAG,KAAH,qBAAX,EAA6BA,IAAE,IAAIV,UAAnC,EAA+CU,IAAE,EAAjD,EAAqD;AACnDkB,UAAAA,UAAU,CAAC7B,KAAD,CAAV,+BAAoB,KAApB,wCACE,OAAOA,KADT,EAEEW,IAAE,GAAG,CAFP,EAGE,CAHF,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIN,OAAO,CAACM,IAAE,GAAG,CAAN,CAAP,GACIN,OAAO,CAACM,IAAE,GAAG,CAAN,CAAP,CAAgB9X,OADpB,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAajF,QAAb,GACC,CAAC4D,IAAE,GAAG,CAAN,gCAAW,KAAX,mBADD,GAECsB,MAAM,CAACC,OAFT,IAGE,GAJJ,IAKI,GAlBZ,GAoBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CApBF,EAqBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EArBF;AAuBAqF,UAAAA,YAAY,CAAC9B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,OAAOA,KADT,EAEEW,IAAE,GAAG,CAFP,EAGE,CAHF,EAIET,UAAU,GAAG,GAJf,EAKE,GALF,EAME,EANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIG,OAAO,CAACM,IAAE,GAAG,CAAN,CAAP,GACIN,OAAO,CAACM,IAAE,GAAG,CAAN,CAAP,CAAgB9X,OADpB,GAEIkZ,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAajF,QAAb,GACC,CAAC4D,IAAE,GAAG,CAAN,gCAAW,KAAX,mBADD,GAECsB,MAAM,CAACC,OAFT,IAGE,GAJJ,IAKI,GAlBZ,GAoBE,4BAAA,KAAI,iBAAJ,iBAAoB7F,YAApB,CAAiC,GAAjC,CApBF,EAqBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EArBF;AAuBAuD,UAAAA,KAAK;AACN;;AAEDnB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,WADmB;AAEvBqI,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAEgI,MADH;AAEJ9I,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,GADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,SAAYxL,OAD1B;AAETyL,YAAAA,KAAK,EAAE,4BAAA,KAAI,SAAJ,SAAYpL,OAFV;AAGTqL,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYzL,OAH9B;AAIT0L,YAAAA,GAAG,8BAAE,KAAF,qBAJM;AAKTC,YAAAA,GAAG,EAAE,CALI;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AAsCAC,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvB/N,UAAAA,EAAE,EAAE,SADmB;AAEvBqI,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAEgI,MADH;AAEJ9I,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB6O,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvB5M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,GADK;AAERW,YAAAA,CAAC,EAAE,CAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvBgO,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlN,OAD7B;AAETyL,YAAAA,KAAK,EAAE,4BAAA,KAAI,SAAJ,SAAYpL,OAFV;AAGTqL,YAAAA,KAAK,EAAEyB,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYlN,OAH3B;AAIT0L,YAAAA,GAAG,EAAEuB,UAAU,GAAG,GAJT;AAKTtB,YAAAA,GAAG,EAAE,CALI;AAMTC,YAAAA,GAAG,EAAEsB,UAAU,GAAG;AANT;AAZY,SAAzB;AAwCA2B,QAAAA,UAAU,CAAC7B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEEC,UAAU,GAAG,GAFf,EAGE,CAHF,EAIEC,UAAU,GAAG,GAJf,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,OAWE,4BAAA,KAAI,iBAAJ,iBAAoB7D,YAApB,CAAiC,GAAjC,CAXF,EAYE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAZF;AAcAqF,QAAAA,YAAY,CAAC9B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEEC,UAAU,GAAG,GAFf,EAGE,CAHF,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,OAWE,4BAAA,KAAI,iBAAJ,iBAAoB5D,YAApB,CAAiC,GAAjC,CAXF,EAYE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAZF;AAcAuD,QAAAA,KAAK;AACL6B,QAAAA,UAAU,CAAC7B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEE,4BAAA,KAAI,WAAJ,aAAgB,GAFlB,EAGE,CAHF,EAIEE,UAAU,GAAG,GAJf,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,OAWE,4BAAA,KAAI,iBAAJ,iBAAoB7D,YAApB,CAAiC,GAAjC,CAXF,EAYE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAZF;AAcAqF,QAAAA,YAAY,CAAC9B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEE,4BAAA,KAAI,WAAJ,aAAgB,GAFlB,EAGE,CAHF,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,OAWE,4BAAA,KAAI,iBAAJ,iBAAoB3D,YAApB,CAAiC,GAAjC,CAXF,EAYE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAZF;AAeAuD,QAAAA,KAAK;AACLnB,QAAAA,QAAQ,CAACK,MAAT,CAAgB,CAAhB,IAAqB;AACnBzF,UAAAA,GAAG,EAAE,qCAAS,KAAT,WADc;AAEnB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAE,4BAAA,KAAI,aAAJ,aAAgB/F,MADnB;AAEJiF,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoBgP,mBAApB;AAFH,WAFa;AAMnB/M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,CADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WANS;AAWnBS,UAAAA,QAAQ,EAAE;AACRV,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,EADX;AAERW,YAAAA,CAAC,EAAE,IAFK;AAGRV,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AAHX,WAXS;AAgBnB6R,UAAAA,SAAS,EAAE;AACT7T,YAAAA,KAAK,EAAE,yCADE;AAETd,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoBgP,mBAApB;AAFE;AAhBQ,SAArB;AA+CAqC,QAAAA,QAAQ,CAACK,MAAT,CAAgB,CAAhB,IAAqB;AACnBzF,UAAAA,GAAG,EAAE,qCAAS,KAAT,WADc;AAEnB0E,UAAAA,IAAI,EAAE;AACJ7P,YAAAA,KAAK,EAAE,4BAAA,KAAI,aAAJ,aAAgBrF,KADnB;AAEJuE,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoBgP,mBAApB;AAFH,WAFa;AAMnB/M,UAAAA,QAAQ,EAAE;AACRY,YAAAA,CAAC,EAAE,CADK;AAERW,YAAAA,CAAC,EAAE,GAFK;AAGRV,YAAAA,CAAC,EAAE;AAHK,WANS;AAWnBS,UAAAA,QAAQ,EAAE;AACRV,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GADX;AAERW,YAAAA,CAAC,EAAE,IAFK;AAGRV,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AAHX,WAXS;AAgBnB6R,UAAAA,SAAS,EAAE;AACT7T,YAAAA,KAAK,EAAE,+CADE;AAETd,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoBgP,mBAApB;AAFE;AAhBQ,SAArB;AA+CAwD,QAAAA,KAAK;AACL,YAAMoC,YAAY,GAChB,4BAAA,KAAI,SAAJ,uCAAc,KAAd,sBAA6B,4BAAA,KAAI,UAAJ,YAAe,CAA5C,+BAAgD,KAAhD,iBADF;AAEA,YAAMC,YAAY,GAChB,4BAAA,KAAI,SAAJ,uCAAc,KAAd,sBAA6B,4BAAA,KAAI,UAAJ,YAAe,CAA5C,+BAAgD,KAAhD,iBADF;AAEAxD,QAAAA,QAAQ,CAACI,MAAT,GAAkB;AAChBxF,UAAAA,GAAG,EAAE,QAAQuG,KAAR,+BAAgB,KAAhB,WADW;AAEhBvF,UAAAA,KAAK,EAAE;AACLjQ,YAAAA,KAAK,EAAE4X,YAAY,GAAG,CADjB;AAEL3X,YAAAA,MAAM,EAAE,GAFH;AAGL6X,YAAAA,KAAK,EAAED,YAAY,GAAG;AAHjB,WAFS;AAOhB/D,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB6D,YAAY,GAAG,GAA/B,GAAqC,CAArC,GAAyC,4BAAA,KAAI,SAAJ,SAAYrP,OADnD;AAETyL,YAAAA,KAAK,EAAE,CAAC,GAFC;AAGTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB4D,YAAY,GAAG,GAA/B,GAAqC,GAArC,GAA2C,4BAAA,KAAI,SAAJ,SAAYrP,OAHrD;AAIT0L,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB0D,YAAY,GAAG,GAA/B,GAAqC,CAJjC;AAKTzD,YAAAA,GAAG,EAAE,CAAC,GALG;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgByD,YAAY,GAAG,GAA/B,GAAqC;AANjC;AAPK,SAAlB;AAyDArC,QAAAA,KAAK;AACLnB,QAAAA,QAAQ,CAACG,OAAT,CAAiB,CAAjB,IAAsB;AACpBvF,UAAAA,GAAG,EAAE,SAASuG,KAAT,+BAAiB,KAAjB,WADe;AAEpB5O,UAAAA,EAAE,EAAE,YAFgB;AAGpB6M,UAAAA,QAAQ,EAAE;AACRzT,YAAAA,KAAK,EAAE,GADC;AAERC,YAAAA,MAAM,EAAE,EAFA;AAGR6X,YAAAA,KAAK,EAAE;AAHC,WAHU;AAQpBvR,UAAAA,QAAQ,EAAE;AACRV,YAAAA,CAAC,EAAE4P,UAAU,GAAG,CADR;AAERjP,YAAAA,CAAC,EAAE,CAFK;AAGRV,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,WAAc,CAA9B,GAAkC;AAH7B,WARU;AAapB+N,UAAAA,QAAQ,EAAE;AACR7Q,YAAAA,KAAK,EAAE,SADC;AAER+U,YAAAA,WAAW,EAAE;AAFL;AAbU,SAAtB;AA6BAvC,QAAAA,KAAK;AACLnB,QAAAA,QAAQ,CAACG,OAAT,CAAiB,CAAjB,IAAsB;AACpBvF,UAAAA,GAAG,EAAE,SAASuG,KAAT,+BAAiB,KAAjB,WADe;AAEpB5O,UAAAA,EAAE,EAAE,eAFgB;AAGpB6M,UAAAA,QAAQ,EAAE;AACRzT,YAAAA,KAAK,EAAE,GADC;AAERC,YAAAA,MAAM,EAAE,EAFA;AAGR6X,YAAAA,KAAK,EAAE;AAHC,WAHU;AAQpBvR,UAAAA,QAAQ,EAAE;AACRV,YAAAA,CAAC,EAAE4P,UAAU,GAAG,GADR;AAERjP,YAAAA,CAAC,EAAE,CAFK;AAGRV,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,WAAc,CAAlC,GAAsC;AAHjC,WARU;AAapB+N,UAAAA,QAAQ,EAAE;AACR7Q,YAAAA,KAAK,EAAE,SADC;AAER+U,YAAAA,WAAW,EAAE;AAFL;AAbU,SAAtB;AA+BA1D,QAAAA,QAAQ,CAACE,MAAT,aAAsB8C,UAAtB,EAAqCC,YAArC;AAEA,eAAOjD,QAAP;AACD;AAx2DsE;AAAA;AAAA;AAAA,aAi4DjD,eAAC8D,UAAD,EAAaC,UAAb,EAA4B;AAChD,YAAID,UAAU,IAAI,CAAlB,EAAqB,OAAO,CAAP;;AACrB,YAAIC,UAAU,GAAG,CAAjB,EAAoB;AAElBD,UAAAA,UAAU,GACRZ,IAAI,CAACC,KAAL,CACE,CAACW,UAAU,IAAIC,UAAU,+BAAG,KAAH,6BAAd,CAAV,GAAgDX,MAAM,CAACC,OAAxD,IAAmE,GADrE,IAEI,GAHN;AAID;;AAED,eAAOS,UAAP;AACD;AA54DsE;AAAA;AAAA;AAAA,aA85DrD,eAACE,MAAD,EAAS9K,OAAT,EAAkBN,SAAlB,EAA6BqL,UAA7B,EAAyClK,YAAzC,EAA0D;AAC1E,oCAAA,KAAI,SAAJ,WAAc;AACZ7F,UAAAA,OAAO,EAAE,CADG;AAEZC,UAAAA,OAAO,EAAE,CAFG;AAGZI,UAAAA,OAAO,EAAE;AAHG,SAAd;;AAKA,YAAIqE,SAAJ,EAAe;AACb,cAAImB,YAAJ,EAAkB;AAChBb,YAAAA,OAAO,CAAC+K,UAAD,CAAP,IAAuB,CAAvB;AACA,wCAAA,KAAI,SAAJ,SAAYA,UAAZ,IAA0B,CAAC,CAA3B;AACD,WAHD,MAGO;AACL/K,YAAAA,OAAO,CAAC+K,UAAD,CAAP,IAAuB/K,OAAO,CAAC9E,KAA/B;AACA,wCAAA,KAAI,SAAJ,SAAY6P,UAAZ,IAA0B,CAAC/K,OAAO,CAAC9E,KAAnC;AACD;;AACD,cAAI4P,MAAM,CAACC,UAAD,CAAN,IAAsB/K,OAAO,CAAC9E,KAAlC,EAAyC;AACvC8E,YAAAA,OAAO,CAAC+K,UAAD,CAAP,GAAsB,CAAtB;AACA,wCAAA,KAAI,SAAJ,SAAYA,UAAZ,IAA0B,CAA1B;AACA,mBAAO/K,OAAP;AACD;;AACD,cAAIA,OAAO,CAAC+K,UAAD,CAAP,GAAsBD,MAAM,CAACC,UAAD,CAAN,GAAqB/K,OAAO,CAAC9E,KAAvD,EAA8D;AAC5D8E,YAAAA,OAAO,CAAC+K,UAAD,CAAP,GAAsBD,MAAM,CAACC,UAAD,CAAN,GAAqB/K,OAAO,CAAC9E,KAAnD;AACA,wCAAA,KAAI,SAAJ,SAAY6P,UAAZ,IAA0B,CAA1B;AACA,mBAAO/K,OAAP;AACD;AACF,SAlBD,MAkBO;AACL,cAAIa,YAAJ,EAAkB;AAChBb,YAAAA,OAAO,CAAC+K,UAAD,CAAP,IAAuB,CAAvB;AACA,wCAAA,KAAI,SAAJ,SAAYA,UAAZ,IAA0B,CAA1B;AACD,WAHD,MAGO;AACL/K,YAAAA,OAAO,CAAC+K,UAAD,CAAP,IAAuB/K,OAAO,CAAC9E,KAA/B;AACA,wCAAA,KAAI,SAAJ,SAAY6P,UAAZ,IAA0B/K,OAAO,CAAC9E,KAAlC;AACD;;AACD,cAAI8E,OAAO,CAAC+K,UAAD,CAAP,GAAsB,CAA1B,EAA6B;AAC3B/K,YAAAA,OAAO,CAAC+K,UAAD,CAAP,GAAsB,CAAtB;AACA,wCAAA,KAAI,SAAJ,SAAYA,UAAZ,IAA0B,CAA1B;AACA,mBAAO/K,OAAP;AACD;AACF;;AACD,eAAOA,OAAP;AACD;AAr8DsE;AAAA;AAAA;AAAA,aA88D9C,eAAC+K,UAAD,EAAarL,SAAb,EAAwBmB,YAAxB,EAAyC;AAEhE,YAAMiK,MAAM,GAAG;AACb9P,UAAAA,OAAO,8BAAE,KAAF,mBADM;AAEbC,UAAAA,OAAO,8BAAE,KAAF,mBAFM;AAGbI,UAAAA,OAAO,8BAAE,KAAF;AAHM,SAAf;AAMA,YAAM2E,OAAO,GAAG;AACd5O,UAAAA,IAAI,EAAE,KADQ;AAEd4J,UAAAA,OAAO,8BAAE,KAAF,qBAFO;AAGdC,UAAAA,OAAO,8BAAE,KAAF,qBAHO;AAIdI,UAAAA,OAAO,8BAAE,KAAF,qBAJO;AAKdH,UAAAA,KAAK,8BAAE,KAAF;AALS,SAAhB;;AAOA,YAAM8P,MAAM,+BAAG,KAAH,oCACVF,MADU,EAEV9K,OAFU,EAGVN,SAHU,EAIVqL,UAJU,EAKVlK,YALU,CAAZ;;AAOA,oCAAA,KAAI,WAAJ,aAAgBmK,MAAM,CAAChQ,OAAvB;AACA,oCAAA,KAAI,WAAJ,aAAgBgQ,MAAM,CAAC/P,OAAvB;AACA,oCAAA,KAAI,WAAJ,aAAgB+P,MAAM,CAAC3P,OAAvB;AAEA,eAAO2P,MAAP;AACD;AAz+DsE;AAAA;AAAA;AAAA,aAk/DjD,eAACP,kBAAD,EAAqB5Y,IAArB,EAA2BE,IAA3B,EAAoC;AACxD,YAAI0Y,kBAAkB,KAAK,MAAvB,IAAiC,4BAAA,KAAI,eAAJ,mBAAsB,IAA3D,EAAiE;AAC/D,cAAMQ,MAAM,GAAGpZ,IAAI,+BAAG,KAAH,mBAAnB;;AACA,cAAMqZ,MAAM,GAAGnZ,IAAI,+BAAG,KAAH,mBAAnB;;AACA,cAAI;AACF,gBAAMoZ,mBAAmB,GACvB,4BAAA,KAAI,eAAJ,eAAkBlZ,QAAlB,CAA2BtB,GAA3B,CAA+Bsa,MAA/B,EAAuChZ,QAAvC,CAAgDtB,GAAhD,CAAoDua,MAApD,EAA4DjZ,QAA5D,CACGtB,GADH,CACO,CADP,CADF;;AAGA,gBAAMya,SAAS,GAAGD,mBAAmB,CAACE,UAApB,CAA+B1a,GAA/B,CAAmC,CAAnC,EAAsC2a,UAAxD;;AAEA,gBAAIF,SAAS,KAAK,GAAlB,EAAuB;AACrB,qBAAO,MAAP;AACD,aAFD,MAEO,IAAIA,SAAS,KAAK,GAAlB,EAAuB;AAC5B,qBAAO,KAAP;AACD;AACF,WAXD,CAWE,OAAOhZ,CAAP,EAAU;AACV,mBAAO,EAAP;AACD;AACF;;AACD,eAAO,EAAP;AACD;AAtgEsE;AAAA;AAAA;AAAA,aA+gE9C,eAAC2Y,UAAD,EAAarL,SAAb,EAAwBmB,YAAxB,EAAyC;AAEhE,YAAMiK,MAAM,GAAG;AACb9P,UAAAA,OAAO,8BAAE,KAAF,mBADM;AAEbC,UAAAA,OAAO,8BAAE,KAAF;AAFM,SAAf;AAKA,YAAM+E,OAAO,GAAG;AACd5O,UAAAA,IAAI,EAAE,KADQ;AAEd4J,UAAAA,OAAO,8BAAE,KAAF,qBAFO;AAGdC,UAAAA,OAAO,8BAAE,KAAF,qBAHO;AAIdC,UAAAA,KAAK,8BAAE,KAAF;AAJS,SAAhB;;AAMA,YAAM8P,MAAM,+BAAG,KAAH,oCACVF,MADU,EAEV9K,OAFU,EAGVN,SAHU,EAIVqL,UAJU,EAKVlK,YALU,CAAZ;;AAOA,oCAAA,KAAI,WAAJ,aAAgBmK,MAAM,CAAChQ,OAAvB;AACA,oCAAA,KAAI,WAAJ,aAAgBgQ,MAAM,CAAC/P,OAAvB;AAEA,eAAO+P,MAAP;AACD;AAviEsE;AAAA;AAAA;AAAA,aA8iE/C,eAAC3R,EAAD,EAAQ;AAC9B,YAAMkS,WAAW,GAAG,4BAAA,KAAI,gBAAJ,gBAAmBpS,MAAnB,CAClB,UAACqS,OAAD;AAAA,iBAAaA,OAAO,CAAC9J,GAAR,KAAgBrI,EAA7B;AAAA,SADkB,CAApB;;AAGA,YAAIkS,WAAW,CAAC,CAAD,CAAX,IAAkBA,WAAW,CAAC,CAAD,CAAX,CAAe7I,KAArC,EAA4C;AAC1C,iBAAO6I,WAAW,CAAC,CAAD,CAAX,CAAe7I,KAAtB;AACD;;AACD,eAAO,CAAP;AACD;AAtjEsE;AAAA;AAAA;AAAA,aA6jEhD,eAACrJ,EAAD,EAAQ;AAC7B,YAAMkS,WAAW,GAAG,4BAAA,KAAI,gBAAJ,gBAAmBpS,MAAnB,CAClB,UAACqS,OAAD;AAAA,iBAAaA,OAAO,CAAC9J,GAAR,KAAgBrI,EAA7B;AAAA,SADkB,CAApB;;AAGA,YAAIkS,WAAW,CAAC,CAAD,CAAX,IAAkBA,WAAW,CAAC,CAAD,CAAX,CAAe7I,KAArC,EAA4C;AAC1C,iBAAO6I,WAAW,CAAC,CAAD,CAAX,CAAe9V,KAAtB;AACD;;AACD,eAAO,SAAP;AACD;AArkEsE;AACrE,SAAKgW,iBAAL,CACE1G,UADF,EAEEnP,SAFF,EAGEuF,OAHF,EAIED,KAJF,EAKE3J,WALF,EAMEsS,KANF;AAQD;;;;SAYD4H,oBAAA,2BAAkB1G,UAAlB,EAA8BnP,SAA9B,EAAyCuF,OAAzC,EAAkDD,KAAlD,EAAyD3J,WAAzD,EAAsEsS,KAAtE,EAA6E;AAC3E,SAAK6H,aAAL,CAAmB3G,UAAnB;AACA,SAAK4G,QAAL,CAAc9H,KAAd;AACA,SAAK+H,YAAL,CAAkBhW,SAAlB,EAA6BrE,WAA7B;AACA,SAAKsa,UAAL,CAAgB1Q,OAAhB;AACA,SAAK2Q,QAAL,CAAc5Q,KAAd;AACD;;SAKDwQ,gBAAA,uBAAc3G,UAAd,EAA0B;AACxB,kDAAWA,UAAX;AACD;;SAKD8G,aAAA,oBAAW1Q,OAAX,EAAoB;AAElB,QAAIA,OAAO,KAAK,IAAZ,IAAoBA,OAAO,KAAKvC,SAApC,EAA+C;AAC7C,UAAIuC,OAAO,CAACH,OAAZ,EACE,oFAAgB,IAAhB,wCAAuCG,OAAO,CAACH,OAA/C,8BAAwD,IAAxD;AACF,UAAIG,OAAO,CAACF,OAAZ,EACE,oFAAgB,IAAhB,wCAAuCE,OAAO,CAACF,OAA/C,8BAAwD,IAAxD;AACH;;AAED,QAAI,0DAAgBN,SAAhB,CAA0BC,QAA1B,CAAmC,KAAnC,CAAJ,EAA+C;AAE7C,UAAIO,OAAO,KAAK,IAAZ,IAAoBA,OAAO,KAAKvC,SAApC,EAA+C;AAC7C,YAAIuC,OAAO,CAACE,OAAZ,EACE,oFAAgB,IAAhB,wCAAuCF,OAAO,CAACE,OAA/C,8BAAwD,IAAxD;AACH;AACF;AACF;;SAKDuQ,eAAA,sBAAahW,SAAb,EAAwBrE,WAAxB,EAAqC;AACnC,oEAAoBA,WAApB;AACA,gEAAkBqE,SAAlB;AACA,sDAAaA,SAAS,CAAC+E,SAAvB;AAEA,0DAAe/E,SAAS,CAACvF,MAAV,CAAiBD,MAAhC;AACA,0DAAewF,SAAS,CAACjE,MAAV,CAAiBvB,MAAhC;AAEA,0DACE,CAACwF,SAAS,CAACvF,MAAV,CAAiBE,KAAjB,GAAyBqF,SAAS,CAACvF,MAAV,CAAiBC,KAA3C,IACAsF,SAAS,CAACvF,MAAV,CAAiBD,MAFnB;AAGA,0DACE,CAACwF,SAAS,CAACjE,MAAV,CAAiBpB,KAAjB,GAAyBqF,SAAS,CAACjE,MAAV,CAAiBrB,KAA3C,IACAsF,SAAS,CAACjE,MAAV,CAAiBvB,MAFnB;AAIA,wDAAa4U,QAAb,GAAwBpP,SAAS,CAACvF,MAAV,CAAiBC,KAAzC;AACA,wDAAa2U,QAAb,GAAwBrP,SAAS,CAACjE,MAAV,CAAiBrB,KAAzC;AAEA,wFAAgB,IAAhB,oEAAuC,IAAvC,mDAAsD,IAAtD;AACA,wFAAgB,IAAhB,oEAAuC,IAAvC,mDAAsD,IAAtD;;AAGA,QAAIsF,SAAS,CAAC+E,SAAV,CAAoBC,QAApB,CAA6B,KAA7B,CAAJ,EAAyC;AAEvC,4DAAehF,SAAS,CAACyS,MAAV,CAAiBjY,MAAhC;AAEA,4DAAewF,SAAS,CAACyS,MAAV,CAAiB9X,KAAjB,GAAyBqF,SAAS,CAACyS,MAAV,CAAiBjY,MAAzD;AAEA,0DAAa8U,QAAb,GAAwBtP,SAAS,CAACyS,MAAV,CAAiB/X,KAAzC;AAEA,0FAAgB,IAAhB,oEAAuC,IAAvC,mDAAsD,IAAtD;AACD;AACF;;SAKDwb,WAAA,kBAAS5Q,KAAT,EAAgB;AACd,QAAIA,KAAJ,EAAW;AACT,UAAIA,KAAK,GAAG,CAAZ,EAAe,oDAAc,CAAd;AACf,0DAAcA,KAAd;AACD;AACF;;SAKDyQ,WAAA,kBAAS9H,KAAT,EAAgB;AACd,wEAAsB,IAAID,aAAJ,CAAkBC,KAAlB,CAAtB;AACD;;SAmwDDkI,cAAA,qBAAYtB,kBAAZ,EAAgC;AAE9B,QAAI3D,QAAQ,GAAG,EAAf;;AACA,QAAI,gDAAWlM,QAAX,CAAoB,KAApB,CAAJ,EAAgC;AAC9BkM,MAAAA,QAAQ,+BAAG,IAAH,4CAA4B2D,kBAA5B,CAAR;AACD,KAFD,MAEO,IAAI,gDAAW7P,QAAX,CAAoB,KAApB,CAAJ,EAAgC;AACrCkM,MAAAA,QAAQ,+BAAG,IAAH,6CAAR;AACD;;AACD,WAAOA,QAAP;AACD;;SAqBDkF,gBAAA,uBAAcjB,UAAd,EAA0BrL,SAA1B,EAAqCmB,YAArC,EAAmD;AACjD,QAAI,gDAAWjG,QAAX,CAAoB,KAApB,CAAJ,EACE,mCAAO,IAAP,kDAAmCmQ,UAAnC,EAA+CrL,SAA/C,EAA0DmB,YAA1D,EADF,KAEK,IAAI,gDAAWjG,QAAX,CAAoB,KAApB,CAAJ,EACH,mCAAO,IAAP,kDAAmCmQ,UAAnC,EAA+CrL,SAA/C,EAA0DmB,YAA1D;AACH;;;;;ACh7DH,IAAMoL,gBAAgB,GAAG,SAAnBA,gBAAmB,OAOnB;AAAA,MANJ7a,IAMI,QANJA,IAMI;AAAA,MALJwE,SAKI,QALJA,SAKI;AAAA,MAJJsW,YAII,QAJJA,YAII;AAAA,MAHJ3a,WAGI,QAHJA,WAGI;AAAA,MAFJ2J,KAEI,QAFJA,KAEI;AAAA,MADJ2I,KACI,QADJA,KACI;AAGJ,MAAI/N,YAAJ;;AAGA,kBAAkBC,cAAQ,CACxB,IAAI+O,qBAAJ,CACE1T,IADF,EAEEwE,SAFF,EAGEsW,YAAY,IAAI,IAHlB,EAIEhR,KAJF,EAKE3J,WALF,EAMEsS,KAAK,IAAI,KANX,CADwB,CAA1B;AAAA,MAAOsI,OAAP;;AAUA,mBAAwBpW,cAAQ,CAAC,SAAD,CAAhC;AAAA,MAAOqW,IAAP;AAAA,MAAaC,OAAb;;AACA,mBAAgCtW,cAAQ,CAACoW,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAxC;AAAA,MAAOtF,QAAP;AAAA,MAAiBwF,WAAjB;;AAIA,MAAM5V,kBAAkB,GAAG,SAArBA,kBAAqB,CAACR,IAAD,EAAU;AACnC,QAAIN,SAAS,CAAC+E,SAAV,CAAoBC,QAApB,CAA6B1E,IAAI,CAAC9E,IAAlC,CAAJ,EAA6C;AAE3C,UAAI8E,IAAI,CAACF,IAAT,EAAe;AACbmW,QAAAA,OAAO,CAACH,aAAR,CAAsB9V,IAAI,CAACF,IAA3B,EAAiCE,IAAI,CAACwJ,SAAtC,EAAiDxJ,IAAI,CAAC2K,YAAtD;AACAyL,QAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,OAHD,MAGO;AACLC,QAAAA,OAAO,CAAC,UAACE,SAAD;AAAA,iBACNA,SAAS,KAAKrW,IAAI,CAAC8K,SAAnB,GAA+B9K,IAAI,CAAC8K,SAApC,GAAgDuL,SAD1C;AAAA,SAAD,CAAP;AAGD;AACF;AACF,GAZD;;AAgBA5V,EAAAA,eAAS,CAAC,YAAM;AACdwV,IAAAA,OAAO,CAACT,aAAR,CAAsBta,IAAtB;AACAkb,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAHQ,EAGN,CAAChb,IAAD,CAHM,CAAT;AAMAuF,EAAAA,eAAS,CAAC,YAAM;AACdwV,IAAAA,OAAO,CAACP,YAAR,CAAqBhW,SAArB,EAAgCrE,WAAhC;AACA+a,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAHQ,EAGN,CAACxW,SAAD,EAAYrE,WAAZ,CAHM,CAAT;AAMAoF,EAAAA,eAAS,CAAC,YAAM;AACdwV,IAAAA,OAAO,CAACN,UAAR,CAAmBK,YAAnB;AACAI,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAHQ,EAGN,CAACF,YAAD,CAHM,CAAT;AAMAvV,EAAAA,eAAS,CAAC,YAAM;AACdwV,IAAAA,OAAO,CAACL,QAAR,CAAiB5Q,KAAjB;AACAoR,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAHQ,EAGN,CAAClR,KAAD,CAHM,CAAT;AAMAvE,EAAAA,eAAS,CAAC,YAAM;AACdwV,IAAAA,OAAO,CAACR,QAAR,CAAiB9H,KAAjB;AACAyI,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAHQ,EAGN,CAACvI,KAAD,CAHM,CAAT;AAMAlN,EAAAA,eAAS,CAAC,YAAM;AACd2V,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAFQ,EAEN,CAACA,IAAD,CAFM,CAAT;AAKAzV,EAAAA,eAAS,CAAC,YAAM;AACd,QAAIf,SAAS,CAAC+E,SAAV,CAAoBC,QAApB,CAA6B,KAA7B,CAAJ,EAAyC;AACvC9E,MAAAA,YAAY,GAAGoL,mBAAmB,CAC/BD,iBADY,GAEZnK,SAFY,CAEFJ,kBAFE,CAAf;AAGD,KAJD,MAIO,IAAId,SAAS,CAAC+E,SAAV,CAAoBC,QAApB,CAA6B,KAA7B,CAAJ,EAAyC;AAC9C9E,MAAAA,YAAY,GAAGqL,mBAAmB,CAC/BF,iBADY,GAEZnK,SAFY,CAEFJ,kBAFE,CAAf;AAGD;;AACD,WAAO;AAAA,aAAMZ,YAAY,CAACiB,WAAb,EAAN;AAAA,KAAP;AACD,GAXQ,EAWN,CAAC+P,QAAD,CAXM,CAAT;;AAaA,MAAIA,QAAJ,aAAIA,QAAJ,eAAIA,QAAQ,CAAEC,IAAd,EAAoB;AAClB,wBACEtQ;AAAU;AAAV,OACGqQ,QAAQ,CAACC,IAAT,CAAcyF,GAAd,CAAkB,UAAC3b,GAAD;AAAA,0BACjB4F;AACE,QAAA,GAAG,EAAE5F,GAAG,CAACwI,EADX;AAEE,iBAAM,WAFR;AAGE,QAAA,QAAQ,cAAYxI,GAAG,CAAC4E,KAAhB,qBAHV;AAIE,QAAA,KAAK,EAAE5E,GAAG,CAAC9B,OAJb;AAKE,QAAA,UAAU,MALZ;AAME,QAAA,SAAS,8BAA4B8B,GAAG,CAAC0V,SAAJ,CAAc6C,SAA1C,SAAuDvY,GAAG,CAAC0V,SAAJ,CAAc8C,UAArE,SAAmFxY,GAAG,CAAC0V,SAAJ,CAAc+C,SAAjG,cAAmHzY,GAAG,CAAC0V,SAAJ,CAAcgD,OAAjI,SAA4I1Y,GAAG,CAAC0V,SAAJ,CAAciD,QAA1J,SAAsK3Y,GAAG,CAAC0V,SAAJ,CAAckD,OAApL,4CANX;AAOE,QAAA,YAAY,EAAC,2DAPf;AAQE,QAAA,YAAY,iCAA+B5Y,GAAG,CAAC6Y,UAAJ,CAAelD,KAA9C,SAAuD3V,GAAG,CAAC6Y,UAAJ,CAAejD,KAAtE,SAA+E5V,GAAG,CAAC6Y,UAAJ,CAAehD,KAA9F,cAA4G7V,GAAG,CAAC6Y,UAAJ,CAAe/C,GAA3H,SAAkI9V,GAAG,CAAC6Y,UAAJ,CAAe9C,GAAjJ,SAAwJ/V,GAAG,CAAC6Y,UAAJ,CAAe7C,GAAvK,iBARd;AASE,QAAA,YAAY,uCAAqChW,GAAG,CAAC8Y,UAAJ,CAAeC,SAApD,cAAsE/Y,GAAG,CAAC8Y,UAAJ,CAAeE,OAArF;AATd,QADiB;AAAA,KAAlB,CADH,EAeG/C,QAAQ,CAACE,MAAT,CAAgBwF,GAAhB,CAAoB,UAACpX,KAAD;AAAA,0BACnBqB;AACE,QAAA,GAAG,EAAErB,KAAK,CAACsM,GADb;AAEE,QAAA,QAAQ,kBAAgBtM,KAAK,CAAC8Q,QAAN,CAAeC,SAA/B,gBAAmD/Q,KAAK,CAAC8Q,QAAN,CAAezT,KAAlE,iBAAmF2C,KAAK,CAAC8Q,QAAN,CAAexT,MAAlG,MAFV;AAGE,QAAA,IAAI,cAAY0C,KAAK,CAACgR,IAAN,CAAW3Q,KAAvB,iBAAwCL,KAAK,CAACgR,IAAN,CAAW3T,KAAnD,kBAAqE2C,KAAK,CAACgR,IAAN,CAAW1T,MAAhF,oBAHN;AAIE,qCAAyB0C,KAAK,CAACiR,YAAN,CAAmB9P,KAA5C,gBAA4DnB,KAAK,CAACiR,YAAN,CAAmBxD,KAJjF;AAKE,QAAA,QAAQ,EAAKzN,KAAK,CAACsC,QAAN,CAAeY,CAApB,SAAyBlD,KAAK,CAACsC,QAAN,CAAeuB,CAAxC,SAA6C7D,KAAK,CAACsC,QAAN,CAAea,CALtE;AAME,QAAA,QAAQ,cAAYnD,KAAK,CAACkR,QAAN,CAAe7Q,KAA3B,MANV;AAOE,QAAA,SAAS,EAAC,kDAPZ;AAQE,QAAA,YAAY,EAAC,0DARf;AASE,QAAA,YAAY,iCAA+BL,KAAK,CAACmR,SAAN,CAAgBC,KAA/C,SAAwDpR,KAAK,CAACmR,SAAN,CAAgBE,KAAxE,SAAiFrR,KAAK,CAACmR,SAAN,CAAgBG,KAAjG,cAA+GtR,KAAK,CAACmR,SAAN,CAAgBI,GAA/H,SAAsIvR,KAAK,CAACmR,SAAN,CAAgBK,GAAtJ,SAA6JxR,KAAK,CAACmR,SAAN,CAAgBM,GAA7K;AATd,QADmB;AAAA,KAApB,CAfH,EA4BGC,QAAQ,CAACK,MAAT,CAAgBqF,GAAhB,CAAoB,UAACC,KAAD;AAAA,0BACnBhW;AACE,QAAA,GAAG,EAAEgW,KAAK,CAAC/K,GADb;AAEE,QAAA,IAAI,cAAY+K,KAAK,CAACrG,IAAN,CAAW7P,KAAvB,iBAAwCkW,KAAK,CAACrG,IAAN,CAAW3Q,KAAnD,6CAFN;AAGE,QAAA,QAAQ,EAAKgX,KAAK,CAAC/U,QAAN,CAAeY,CAApB,SAAyBmU,KAAK,CAAC/U,QAAN,CAAeuB,CAAxC,SAA6CwT,KAAK,CAAC/U,QAAN,CAAea,CAHtE;AAIE,QAAA,QAAQ,EAAKkU,KAAK,CAACzT,QAAN,CAAeV,CAApB,SAAyBmU,KAAK,CAACzT,QAAN,CAAeC,CAAxC,SAA6CwT,KAAK,CAACzT,QAAN,CAAeT;AAJtE,sBAME9B;AACE,QAAA,KAAK,EAAEgW,KAAK,CAACrC,SAAN,CAAgB7T,KADzB;AAEE,QAAA,QAAQ,EAAC,QAFX;AAGE,QAAA,KAAK,EAAC,KAHR;AAIE,QAAA,MAAM,EAAC,MAJT;AAKE,QAAA,KAAK,EAAC,QALR;AAME,QAAA,KAAK,EAAEkW,KAAK,CAACrC,SAAN,CAAgB3U;AANzB,QANF,eAcEgB;AACE,QAAA,QAAQ,EAAC,yCADX;AAEE,QAAA,QAAQ,EAAC,QAFX;AAGE,QAAA,QAAQ,EAAC;AAHX,QAdF,CADmB;AAAA,KAApB,CA5BH,EAkDGqQ,QAAQ,CAACM,UAAT,CAAoBoF,GAApB,CAAwB,UAACE,SAAD;AAAA,0BACvBjW;AACE,QAAA,EAAE,EAAEiW,SAAS,CAACrT,EADhB;AAEE,QAAA,GAAG,EAAEqT,SAAS,CAAChL,GAFjB;AAGE,QAAA,IAAI,cAAYgL,SAAS,CAACtG,IAAV,CAAe7P,KAA3B,iBAA4CmW,SAAS,CAACtG,IAAV,CAAe3Q,KAA3D,4CAHN;AAIE,QAAA,QAAQ,EAAKiX,SAAS,CAAChV,QAAV,CAAmBY,CAAxB,SAA6BoU,SAAS,CAAChV,QAAV,CAAmBuB,CAAhD,SAAqDyT,SAAS,CAAChV,QAAV,CAAmBa,CAJlF;AAKE,QAAA,SAAS,iCAA+BmU,SAAS,CAACnG,SAAV,CAAoBC,KAAnD,SAA4DkG,SAAS,CAACnG,SAAV,CAAoBE,KAAhF,SAAyFiG,SAAS,CAACnG,SAAV,CAAoBG,KAA7G,cAA2HgG,SAAS,CAACnG,SAAV,CAAoBI,GAA/I,SAAsJ+F,SAAS,CAACnG,SAAV,CAAoBK,GAA1K,SAAiL8F,SAAS,CAACnG,SAAV,CAAoBM,GAArM,iBALX;AAME,QAAA,QAAQ,EAAC;AANX,QADuB;AAAA,KAAxB,CAlDH,EA4DGC,QAAQ,CAACI,MAAT,iBACCzQ;AACE,MAAA,GAAG,EAAEqQ,QAAQ,CAACI,MAAT,CAAgBxF,GADvB;AAEE,MAAA,KAAK,EAAEoF,QAAQ,CAACI,MAAT,CAAgBxE,KAAhB,CAAsBjQ,KAF/B;AAGE,MAAA,QAAQ,EAAC,gBAHX;AAIE,MAAA,MAAM,EAAEqU,QAAQ,CAACI,MAAT,CAAgBxE,KAAhB,CAAsBhQ,MAJhC;AAKE,MAAA,KAAK,EAAEoU,QAAQ,CAACI,MAAT,CAAgBxE,KAAhB,CAAsB6H,KAL/B;AAME,MAAA,SAAS,iCAA+BzD,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BC,KAAzD,SAAkEM,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BE,KAA5F,SAAqGK,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BG,KAA/H,kCAEVI,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BI,GAFhB,SAEuBG,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BK,GAFjD,SAEwDE,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BM,GAFlF;AANX,MA7DJ,EAwEGC,QAAQ,CAACG,OAAT,CAAiBuF,GAAjB,CAAqB,UAAC9T,MAAD;AAAA,0BACpBjC;AACE,QAAA,GAAG,EAAEiC,MAAM,CAACgJ,GADd;AAEE,QAAA,EAAE,EAAEhJ,MAAM,CAACW,EAFb;AAGE,QAAA,QAAQ,aAAWX,MAAM,CAACwN,QAAP,CAAgBzT,KAA3B,iBAA4CiG,MAAM,CAACwN,QAAP,CAAgBxT,MAA5D,gBAA6EgG,MAAM,CAACwN,QAAP,CAAgBqE,KAA7F,MAHV;AAIE,QAAA,QAAQ,EAAK7R,MAAM,CAACM,QAAP,CAAgBV,CAArB,SAA0BI,MAAM,CAACM,QAAP,CAAgBC,CAA1C,SAA+CP,MAAM,CAACM,QAAP,CAAgBT,CAJzE;AAKE,QAAA,QAAQ,cAAYG,MAAM,CAAC4N,QAAP,CAAgB7Q,KAA5B,uBAAmDiD,MAAM,CAAC4N,QAAP,CAAgBkE;AAL7E,QADoB;AAAA,KAArB,CAxEH,CADF;AAoFD,GArFD,MAqFO;AACL,wBACE/T;AACE,MAAA,YAAY,EAAC,2EADf;AAEE,MAAA,YAAY,EAAC,oHAFf;AAGE,MAAA,gBAAgB,EAAC,8GAHnB;AAIE,MAAA,QAAQ,EAAC;AAJX,MADF;AAQD;AACF,CA3LD;;ACJA,IAAMkW,UAAU,GAAG,SAAbA,UAAa,OAAoB;AAAA,MAAjBzW,IAAiB,QAAjBA,IAAiB;AAAA,MAAX3G,IAAW,QAAXA,IAAW;;AACrC,kBAAqBwG,cAAQ,CAAC;AAC5B9B,IAAAA,GAAG,EAAE1E,IAAI,CAACoJ,UAAL,CAAgB1E,GAAhB,GACD1E,IAAI,CAACoJ,UAAL,CAAgB1E,GADf,GAED,qCAHwB;AAI5B2Y,IAAAA,MAAM,EAAErd,IAAI,CAACoJ,UAAL,CAAgBiU,MAAhB,GAAyBrd,IAAI,CAACoJ,UAAL,CAAgBiU,MAAzC,GAAkD,MAJ9B;AAK5Bla,IAAAA,MAAM,EAAEnD,IAAI,CAACoJ,UAAL,CAAgBjG,MAAhB,GAAyBnD,IAAI,CAACoJ,UAAL,CAAgBjG,MAAzC,GAAkD,MAL9B;AAM5BD,IAAAA,KAAK,EAAElD,IAAI,CAACoJ,UAAL,CAAgBlG,KAAhB,GAAwBlD,IAAI,CAACoJ,UAAL,CAAgBlG,KAAxC,GAAgD;AAN3B,GAAD,CAA7B;AAAA,MAAOkG,UAAP;;AASA,sBACElC;AACE,IAAA,QAAQ,MADV;AAEE,IAAA,KAAK,EAAE;AACLoW,MAAAA,MAAM,EAAE,GADH;AAELpa,MAAAA,KAAK,EAAE,MAFF;AAGLqa,MAAAA,SAAS,EAAE;AAHN;AAFT,kBAQErW,4DACEA;AAAK,IAAA,EAAE,EAAC,YAAR;AAAqB,IAAA,GAAG,EAAEkC,UAAU,CAAC1E,GAArC;AAA0C,IAAA,GAAG,EAAC;AAA9C,IADF,CARF,eAYEwC,6BAAC,WAAD,OAZF,eAaEA,6BAAC,gBAAD;AACE,IAAA,IAAI,EAAElH,IAAI,CAAC6B,IADb;AAEE,IAAA,SAAS,EAAE8E,IAAI,CAACN,SAFlB;AAGE,IAAA,YAAY,EAAEM,IAAI,CAACiF,OAHrB;AAIE,IAAA,WAAW,EAAEjF,IAAI,CAAC3E,WAJpB;AAKE,IAAA,KAAK,EAAE2E,IAAI,CAACgF,KALd;AAME,IAAA,KAAK,EAAE3L,IAAI,CAACsU;AANd,IAbF,eAqBEpN;AACE,IAAA,MAAM,EAAEkC,UAAU,CAACjG,MADrB;AAEE,IAAA,MAAM,EAAEiG,UAAU,CAACiU,MAFrB;AAGE,IAAA,KAAK,EAAEjU,UAAU,CAAClG,KAHpB;AAIE,IAAA,GAAG,EAAC,aAJN;AAKE,IAAA,QAAQ,EAAC;AALX,IArBF,CADF;AA+BD,CAzCD;;IC3BqBsa;AAEnB,yBAAYC,KAAZ,EAAmB;AAAA,SADnBA,KACmB,GADX,IACW;AACjB,SAAKA,KAAL,GAAaA,KAAb;AACD;;;;SAEDC,gBAAA,uBAAchF,KAAd,EAAqBiF,YAArB,EAAmCC,OAAnC,EAA4CC,UAA5C,EAAwD;AACtD,QAAI,KAAKJ,KAAL,CAAWG,OAAX,EAAoBrG,QAApB,CAA6BmB,KAA7B,CAAJ,EAAyC;AACvC,UAAIkF,OAAO,KAAK,QAAhB,EAA0B;AACxB,aAAKE,WAAL,CACE,KAAKL,KAAL,CAAWG,OAAX,EAAoBrG,QAApB,CAA6BmB,KAA7B,CADF,EAEE,KAAK+E,KAAL,CAAWG,OAAX,EAAoBG,UAApB,CAA+BrF,KAA/B,CAFF;AAID,OALD,MAKO;AACL,aAAKhV,aAAL,CACE,KAAK+Z,KAAL,CAAWG,OAAX,EAAoBrG,QAApB,CAA6BmB,KAA7B,CADF,EAEE,KAAK+E,KAAL,CAAWG,OAAX,EAAoBG,UAApB,CAA+BrF,KAA/B,CAFF,EAGEmF,UAHF;AAKD;AACF,KAbD,MAaO;AACL,UAAIG,UAAJ;;AAEA,UAAIJ,OAAO,KAAK,QAAhB,EAA0B;AACxBI,QAAAA,UAAU,GAAG,KAAKF,WAAL,CACXzU,SADW,EAEX,KAAKoU,KAAL,CAAWG,OAAX,EAAoBG,UAApB,CAA+BrF,KAA/B,CAFW,CAAb;AAID,OALD,MAKO;AACLsF,QAAAA,UAAU,GAAG,KAAKta,aAAL,CACX2F,SADW,EAEX,KAAKoU,KAAL,CAAWG,OAAX,EAAoBG,UAApB,CAA+BrF,KAA/B,CAFW,EAGXmF,UAHW,CAAb;AAKD;;AACD,WAAKJ,KAAL,CAAWG,OAAX,EAAoBrG,QAApB,CAA6BmB,KAA7B,IAAsCsF,UAAtC;AACAL,MAAAA,YAAY,CAACM,WAAb,CAAyBD,UAAzB;AACD;AACF;;SAEDE,4BAAA,mCAA0BxF,KAA1B,EAAiCkF,OAAjC,EAA0C;AACxC,QAAMO,SAAS,GAAGzF,KAAlB;;AAEA,QAAIkF,OAAO,CAACvc,MAAR,KAAmB,CAAvB,EAA0B;AACxB,aAAO,KAAKoc,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBrG,QAAvB,CAAgCmB,KAAhC,CAAP,EAA+C;AAC7C,aAAK+E,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBrG,QAAvB,CAAgCmB,KAAhC,EAAuC0F,MAAvC;AACA1F,QAAAA,KAAK;AACN;;AACD,WAAK+E,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBrG,QAAvB,CAAgClW,MAAhC,GAAyC8c,SAAzC;AACA,WAAKV,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBG,UAAvB,CAAkC1c,MAAlC,GAA2C8c,SAA3C;AACD,KAPD,MAOO;AACL,aAAO,KAAKV,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBrG,QAAvB,CAAgCmB,KAAhC,CAAP,EAA+C;AAC7C,aAAK+E,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBrG,QAAvB,CAAgCmB,KAAhC,EAAuC0F,MAAvC;AACA,aAAKX,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBrG,QAAvB,CAAgCmB,KAAhC,EAAuC0F,MAAvC;AACA1F,QAAAA,KAAK;AACN;;AACD,WAAK+E,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBrG,QAAvB,CAAgClW,MAAhC,GAAyC8c,SAAzC;AACA,WAAKV,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBG,UAAvB,CAAkC1c,MAAlC,GAA2C8c,SAA3C;AACA,WAAKV,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBrG,QAAvB,CAAgClW,MAAhC,GAAyC8c,SAAzC;AACA,WAAKV,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBG,UAAvB,CAAkC1c,MAAlC,GAA2C8c,SAA3C;AACD;AACF;;SAEDza,gBAAA,uBAAc2a,OAAd,EAAuB1X,IAAvB,EAA6BlC,IAA7B,EAAmC;AACjC,QAAImZ,OAAO,GAAGS,OAAd;;AACA,QAAIT,OAAO,KAAKvU,SAAZ,IAAyBuU,OAAO,KAAK,IAAzC,EAA+C;AAC7C,UAAMC,UAAU,GAAG,KAAKS,eAAL,CAAqB7Z,IAArB,CAAnB;AACAmZ,MAAAA,OAAO,GAAGva,QAAQ,CAACK,aAAT,CAAuBma,UAAvB,CAAV;AACD;;AACD,SAAK,IAAMU,OAAX,IAAsB5X,IAAtB,EAA4B;AAC1BiX,MAAAA,OAAO,CAACja,YAAR,CAAqB4a,OAArB,EAA8B5X,IAAI,CAAC4X,OAAD,CAAlC;AACD;;AACD,WAAOX,OAAP;AACD;;SAEDY,sBAAA,6BAAoBH,OAApB,EAA6BI,UAA7B,EAAyC9X,IAAzC,EAA+C;AAC7C,QAAI+X,MAAM,GAAGL,OAAb;;AACA,QAAIK,MAAM,KAAKrV,SAAX,IAAwBqV,MAAM,KAAK,IAAvC,EAA6C;AAC3CA,MAAAA,MAAM,GAAGrb,QAAQ,CAACK,aAAT,CAAuB,UAAvB,CAAT;AACA,UAAMib,KAAK,GAAG,KAAKC,iBAAL,CAAuBH,UAAvB,EAAmC9X,IAAnC,CAAd;AACAgY,MAAAA,KAAK,CAAC1B,GAAN,CAAU,UAACW,OAAD;AAAA,eAAac,MAAM,CAACG,MAAP,CAAcjB,OAAd,CAAb;AAAA,OAAV;AACD;;AACDc,IAAAA,MAAM,CAAC/a,YAAP,CAAoB,UAApB,EAAgCgD,IAAI,CAAC8C,QAArC;AACAiV,IAAAA,MAAM,CAAC/a,YAAP,CAAoB,IAApB,EAA0BgD,IAAI,CAACmD,EAA/B;AACA,WAAO4U,MAAP;AACD;;SAEDE,oBAAA,2BAAkBH,UAAlB,EAA8B9X,IAA9B,EAAoC;AAClC,QAAMgY,KAAK,GAAG,EAAd;;AACA,SAAK,IAAIvL,CAAC,GAAGqL,UAAU,GAAG,CAA1B,EAA6BrL,CAAC,GAAG,CAAC,CAAlC,EAAqCA,CAAC,EAAtC,EAA0C;AACxCzM,MAAAA,IAAI,CAACmY,IAAL,CAAUrV,QAAV,CAAmBC,CAAnB,GAAuB,IAAI0J,CAA3B;AACA,UAAM0L,IAAI,GAAGzb,QAAQ,CAACK,aAAT,CAAuB,UAAvB,CAAb;AACAob,MAAAA,IAAI,CAACnb,YAAL,CAAkB,UAAlB,EAA8BgD,IAAI,CAACmY,IAAL,CAAU3W,QAAxC;AACA2W,MAAAA,IAAI,CAACnb,YAAL,CAAkB,UAAlB,EAA8BgD,IAAI,CAACmY,IAAL,CAAUrV,QAAxC;AACAqV,MAAAA,IAAI,CAACnb,YAAL,CAAkB,MAAlB,EAA0BgD,IAAI,CAACmY,IAAL,CAAUjI,IAApC;AACA8H,MAAAA,KAAK,CAACzU,IAAN,CAAW4U,IAAX;AACD;;AACD,QAAM1V,UAAU,GAAG/F,QAAQ,CAACK,aAAT,CAAuB,UAAvB,CAAnB;AACA0F,IAAAA,UAAU,CAACzF,YAAX,CAAwB,UAAxB,EAAoCgD,IAAI,CAACyC,UAAL,CAAgBuN,QAApD;AACAvN,IAAAA,UAAU,CAACzF,YAAX,CAAwB,UAAxB,EAAoCgD,IAAI,CAACyC,UAAL,CAAgBK,QAApD;AACAL,IAAAA,UAAU,CAACzF,YAAX,CAAwB,UAAxB,EAAoCgD,IAAI,CAACyC,UAAL,CAAgB2N,QAApD;AACA4H,IAAAA,KAAK,CAACzU,IAAN,CAAWd,UAAX;AACA,WAAOuV,KAAP;AACD;;SAEDb,cAAA,qBAAYO,OAAZ,EAAqB1X,IAArB,EAA2B;AACzB,QAAI+X,MAAM,GAAGL,OAAb;;AACA,QAAIK,MAAM,KAAKrV,SAAX,IAAwBqV,MAAM,KAAK,IAAvC,EAA6C;AAC3CA,MAAAA,MAAM,GAAGrb,QAAQ,CAACK,aAAT,CAAuB,UAAvB,CAAT;AACA,UAAMqb,KAAK,GAAG,KAAKrb,aAAL,CAAmB2F,SAAnB,EAA8B1C,IAAI,CAACyC,UAAnC,CAAd;AACAsV,MAAAA,MAAM,CAACT,WAAP,CAAmBc,KAAnB;AACD;;AACD,WAAOpY,IAAI,CAACyC,UAAZ;AACA,WAAO,KAAK1F,aAAL,CAAmBgb,MAAnB,EAA2B/X,IAA3B,CAAP;AACD;;SAED2X,kBAAA,yBAAgB7Z,IAAhB,EAAsB;AACpB,QACEA,IAAI,KAAK,OAAT,IACAA,IAAI,KAAK,UADT,IAEAA,IAAI,KAAK,QAFT,IAGAA,IAAI,KAAK,UAHT,IAIAA,IAAI,KAAK,QALX,EAME;AACA,aAAOA,IAAP;AACD,KARD,MAQO;AACL,aAAO,UAAP;AACD;AACF;;;;;IChIkBua;;;;;SACnBC,iBAAA,wBAAetY,IAAf,EAAqBuY,QAArB,EAA+BC,cAA/B,EAA+C;AAC7C,QAAM1V,QAAQ,GAAG;AACfV,MAAAA,CAAC,EAAEpC,IAAI,CAACyP,SADO;AAEf1M,MAAAA,CAAC,EAAE/C,IAAI,CAAC0P,SAFO;AAGfrN,MAAAA,CAAC,EAAErC,IAAI,CAAC2P;AAHO,KAAjB;AAKA,QAAMxM,EAAE,GAAGnD,IAAI,CAACmD,EAAhB;AACA,QAAMV,UAAU,GAAG,KAAKgW,wBAAL,CAA8BD,cAA9B,CAAnB;AACA,QAAML,IAAI,GAAG,KAAKO,YAAL,CAAkBH,QAAlB,CAAb;AACA,WAAO;AACLzV,MAAAA,QAAQ,EAAEA,QADL;AAELK,MAAAA,EAAE,EAAEA,EAFC;AAGLV,MAAAA,UAAU,EAAEA,UAHP;AAIL0V,MAAAA,IAAI,EAAEA;AAJD,KAAP;AAMD;;SAEDQ,cAAA,qBAAY3Y,IAAZ,EAAkB;AAChB,QAAM8C,QAAQ,GAAG;AACfV,MAAAA,CAAC,EAAEpC,IAAI,CAACyP,SADO;AAEf1M,MAAAA,CAAC,EAAE/C,IAAI,CAAC0P,SAFO;AAGfrN,MAAAA,CAAC,EAAErC,IAAI,CAAC2P;AAHO,KAAjB;AAKA,QAAMnD,KAAK,GAAG;AACZpK,MAAAA,CAAC,EAAEpC,IAAI,CAAC4Y,MADI;AAEZ7V,MAAAA,CAAC,EAAE/C,IAAI,CAAC6Y,MAFI;AAGZxW,MAAAA,CAAC,EAAErC,IAAI,CAAC8Y;AAHI,KAAd;AAKA,QAAM1I,QAAQ,GAAG;AACf7Q,MAAAA,KAAK,EAAES,IAAI,CAACT,KADG;AAEfC,MAAAA,OAAO,EAAE;AAFM,KAAjB;AAIA,QAAMuZ,IAAI,GAAG/Y,IAAI,SAAjB;AACA,QAAMgZ,MAAM,GAAGhZ,IAAI,CAACA,IAApB;AACA,QAAMmD,EAAE,GAAGnD,IAAI,CAACmD,EAAhB;AACA,WAAO;AACLL,MAAAA,QAAQ,EAAEA,QADL;AAEL0J,MAAAA,KAAK,EAAEA,KAFF;AAGL4D,MAAAA,QAAQ,EAAEA,QAHL;AAILjN,MAAAA,EAAE,EAAEA,EAJC;AAKL,eAAO4V,IALF;AAMLE,MAAAA,MAAM,EAAED,MANH;AAOLE,MAAAA,UAAU,EAAE;AAPP,KAAP;AASD;;SAEDC,gBAAA,uBAAcnZ,IAAd,EAAoB;AAClB,QAAM8C,QAAQ,GAAG;AACfV,MAAAA,CAAC,EAAEpC,IAAI,CAACyP,SADO;AAEf1M,MAAAA,CAAC,EAAE/C,IAAI,CAAC0P,SAFO;AAGfrN,MAAAA,CAAC,EAAErC,IAAI,CAAC2P;AAHO,KAAjB;AAKA,QAAMnO,QAAQ,GAAG;AACfY,MAAAA,CAAC,EAAEpC,IAAI,CAAC4P,SADO;AAEf7M,MAAAA,CAAC,EAAE/C,IAAI,CAAC6P,SAFO;AAGfxN,MAAAA,CAAC,EAAErC,IAAI,CAAC8P;AAHO,KAAjB;AAKA,QAAME,QAAQ,GAAG;AACfC,MAAAA,SAAS,EAAE,OADI;AAEf1T,MAAAA,KAAK,EAAE,CAFQ;AAGfC,MAAAA,MAAM,EAAE;AAHO,KAAjB;AAKA,QAAM0T,IAAI,GAAG;AACX7P,MAAAA,KAAK,EAAEL,IAAI,CAACK,KADD;AAEXd,MAAAA,KAAK,EAAES,IAAI,CAACT,KAFD;AAGXhD,MAAAA,KAAK,EAAE,EAHI;AAIXC,MAAAA,MAAM,EAAE,MAJG;AAKXsC,MAAAA,KAAK,EAAE;AALI,KAAb;AAOA,QAAMsR,QAAQ,GAAG;AACf5Q,MAAAA,OAAO,EAAE;AADM,KAAjB;AAGA,QAAM2D,EAAE,GAAGnD,IAAI,CAACmD,EAAhB;AACA,WAAO;AACLL,MAAAA,QAAQ,EAAEA,QADL;AAELtB,MAAAA,QAAQ,EAAEA,QAFL;AAGLwO,MAAAA,QAAQ,EAAEA,QAHL;AAILE,MAAAA,IAAI,EAAEA,IAJD;AAKLE,MAAAA,QAAQ,EAAEA,QALL;AAMLjN,MAAAA,EAAE,EAAEA;AANC,KAAP;AAQD;;SAEDiW,eAAA,sBAAapZ,IAAb,EAAmB;AACjB,QAAM8C,QAAQ,GAAG;AACfV,MAAAA,CAAC,EAAEpC,IAAI,CAACyP,SADO;AAEf1M,MAAAA,CAAC,EAAE/C,IAAI,CAAC0P,SAFO;AAGfrN,MAAAA,CAAC,EAAErC,IAAI,CAAC2P;AAHO,KAAjB;AAKA,QAAMnO,QAAQ,GAAG;AACfY,MAAAA,CAAC,EAAEpC,IAAI,CAAC4P,SADO;AAEf7M,MAAAA,CAAC,EAAE/C,IAAI,CAAC6P,SAFO;AAGfxN,MAAAA,CAAC,EAAErC,IAAI,CAAC8P;AAHO,KAAjB;AAKA,QAAME,QAAQ,GAAG;AACfC,MAAAA,SAAS,EAAE,OADI;AAEf1T,MAAAA,KAAK,EAAEyD,IAAI,CAACzD,KAFG;AAGfC,MAAAA,MAAM,EAAEwD,IAAI,CAACxD;AAHE,KAAjB;AAKA,QAAM0T,IAAI,GAAG;AACX7P,MAAAA,KAAK,EAAEL,IAAI,CAACK,KADD;AAEXd,MAAAA,KAAK,EAAE,OAFI;AAGXhD,MAAAA,KAAK,EAAE,CAHI;AAIXC,MAAAA,MAAM,EAAE,MAJG;AAKXsC,MAAAA,KAAK,EAAE;AALI,KAAb;AAOA,QAAMsR,QAAQ,GAAG;AACf7Q,MAAAA,KAAK,EAAES,IAAI,CAACT,KADG;AAEfC,MAAAA,OAAO,EAAE;AAFM,KAAjB;AAIA,WAAO;AACLsD,MAAAA,QAAQ,EAAEA,QADL;AAELtB,MAAAA,QAAQ,EAAEA,QAFL;AAGLwO,MAAAA,QAAQ,EAAEA,QAHL;AAILE,MAAAA,IAAI,EAAEA,IAJD;AAKLE,MAAAA,QAAQ,EAAEA;AALL,KAAP;AAOD;;SAEDiJ,gBAAA,uBAAcrZ,IAAd,EAAoBsZ,QAApB,EAA8B;AAC5B,QAAMxW,QAAQ,GAAG;AACfV,MAAAA,CAAC,EAAEpC,IAAI,CAACyP,SADO;AAEf1M,MAAAA,CAAC,EAAE/C,IAAI,CAAC0P,SAFO;AAGfrN,MAAAA,CAAC,EAAErC,IAAI,CAAC2P;AAHO,KAAjB;AAKA,QAAMnO,QAAQ,GAAG;AACfY,MAAAA,CAAC,EAAEpC,IAAI,CAAC4P,SADO;AAEf7M,MAAAA,CAAC,EAAE/C,IAAI,CAAC6P,SAFO;AAGfxN,MAAAA,CAAC,EAAErC,IAAI,CAAC8P;AAHO,KAAjB;AAKA,QAAMM,QAAQ,GAAG;AACf5Q,MAAAA,OAAO,EAAE;AADM,KAAjB;AAGA,QAAM0Q,IAAI,GAAG;AACX7P,MAAAA,KAAK,EAAEL,IAAI,CAACuW,KADD;AAEXhX,MAAAA,KAAK,EAAES,IAAI,CAACT,KAFD;AAGXhD,MAAAA,KAAK,EAAE,GAHI;AAIXC,MAAAA,MAAM,EAAE,MAJG;AAKXsC,MAAAA,KAAK,EAAE;AALI,KAAb;AAOA,QAAMya,IAAI,GAAG,KAAKC,iBAAL,CAAuBF,QAAvB,CAAb;AACA,WAAO;AACLxW,MAAAA,QAAQ,EAAEA,QADL;AAELtB,MAAAA,QAAQ,EAAEA,QAFL;AAGL4O,MAAAA,QAAQ,EAAEA,QAHL;AAILF,MAAAA,IAAI,EAAEA,IAJD;AAKLzN,MAAAA,UAAU,EAAE8W;AALP,KAAP;AAOD;;SAEDC,oBAAA,2BAAkBxZ,IAAlB,EAAwB;AACtB,QAAMgQ,QAAQ,GAAG;AACfC,MAAAA,SAAS,EAAE,OADI;AAEf1T,MAAAA,KAAK,EAAEyD,IAAI,CAACzD,KAFG;AAGfC,MAAAA,MAAM,EAAEwD,IAAI,CAACxD;AAHE,KAAjB;AAKA,QAAMsG,QAAQ,GAAG;AACfV,MAAAA,CAAC,EAAEpC,IAAI,CAACyP,SADO;AAEf1M,MAAAA,CAAC,EAAE/C,IAAI,CAAC0P,SAFO;AAGfrN,MAAAA,CAAC,EAAErC,IAAI,CAAC2P;AAHO,KAAjB;AAKA,QAAMS,QAAQ,GAAG;AACf7Q,MAAAA,KAAK,EAAES,IAAI,CAACT,KADG;AAEfC,MAAAA,OAAO,EAAE;AAFM,KAAjB;AAIA,WAAO;AACLsD,MAAAA,QAAQ,EAAEA,QADL;AAELkN,MAAAA,QAAQ,EAAEA,QAFL;AAGLI,MAAAA,QAAQ,EAAEA;AAHL,KAAP;AAKD;;SAEDsI,eAAA,sBAAa1Y,IAAb,EAAmB;AACjB,QAAM8C,QAAQ,GAAG;AACfV,MAAAA,CAAC,EAAEpC,IAAI,CAACyP,SADO;AAEf1M,MAAAA,CAAC,EAAE/C,IAAI,CAAC0P,SAFO;AAGfrN,MAAAA,CAAC,EAAErC,IAAI,CAAC2P;AAHO,KAAjB;AAKA,QAAMnO,QAAQ,GAAG;AACfY,MAAAA,CAAC,EAAEpC,IAAI,CAAC4P,SADO;AAEf7M,MAAAA,CAAC,EAAE/C,IAAI,CAAC6P,SAFO;AAGfxN,MAAAA,CAAC,EAAErC,IAAI,CAAC8P;AAHO,KAAjB;AAKA,QAAMI,IAAI,GAAG;AACX7P,MAAAA,KAAK,EAAE,EADI;AAEX9D,MAAAA,KAAK,EAAE,EAFI;AAGXC,MAAAA,MAAM,EAAE,MAHG;AAIXsC,MAAAA,KAAK,EAAE;AAJI,KAAb;AAMA,WAAO;AACLgE,MAAAA,QAAQ,EAAEA,QADL;AAELtB,MAAAA,QAAQ,EAAEA,QAFL;AAGL0O,MAAAA,IAAI,EAAEA;AAHD,KAAP;AAKD;;SAEDuI,2BAAA,kCAAyBzY,IAAzB,EAA+B;AAC7B,QAAM8C,QAAQ,GAAG;AACfV,MAAAA,CAAC,EAAEpC,IAAI,CAACyP,SADO;AAEf1M,MAAAA,CAAC,EAAE/C,IAAI,CAAC0P,SAFO;AAGfrN,MAAAA,CAAC,EAAErC,IAAI,CAAC2P;AAHO,KAAjB;AAKA,QAAMK,QAAQ,GAAG;AACfC,MAAAA,SAAS,EAAE,KADI;AAEf1T,MAAAA,KAAK,EAAEyD,IAAI,CAACzD,KAFG;AAGfC,MAAAA,MAAM,EAAEwD,IAAI,CAACxD,MAHE;AAIf6X,MAAAA,KAAK,EAAErU,IAAI,CAACqU;AAJG,KAAjB;AAMA,QAAMjE,QAAQ,GAAG;AACf7Q,MAAAA,KAAK,EAAES,IAAI,CAACT;AADG,KAAjB;AAGA,WAAO;AACLuD,MAAAA,QAAQ,EAAEA,QADL;AAELkN,MAAAA,QAAQ,EAAEA,QAFL;AAGLI,MAAAA,QAAQ,EAAEA;AAHL,KAAP;AAKD;;;;;ACpNH,IAAIvM,YAAY,GAAG,EAAnB;;AAEA,SAAS4V,aAAT,CAAuBjK,KAAvB,EAA8B;AAC5B,MAAMnM,YAAY,GAAGQ,YAAY,CAACZ,MAAb,CAAoB,UAACC,IAAD;AAAA,WAAUA,IAAI,CAACC,EAAL,KAAYqM,KAAtB;AAAA,GAApB,CAArB;AACA,SAAOnM,YAAY,CAAC3I,MAAb,KAAwB,CAA/B;AACD;;AAucD,SAASgf,kBAAT,CACEhC,OADF,EAEEZ,KAFF,EAGEpX,SAHF,EAIEoF,OAJF,EAKEC,OALF,EAMEC,KANF,EAOE2I,KAPF,EAQE;AAEA9J,EAAAA,YAAY,GAAG+B,mBAAmB,CAAChC,uBAApB,EAAf;AAGA,MAAM+V,cAAc,GAAG,IAAItB,cAAJ,EAAvB;AACA,MAAMuB,aAAa,GAAG,IAAI/C,aAAJ,CAAkBC,KAAlB,CAAtB;AACA,MAAM+C,aAAa,GAAG,IAAInM,aAAJ,CAAkBC,KAAlB,CAAtB;AAEA,MAAM3N,IAAI,GAAG,EAAb;AAEA,MAAMgX,YAAY,GAAGU,OAArB;AAEA,MAAIlD,iBAAJ;AACA,MAAIrD,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,MAAIC,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,MAAIxF,CAAJ;AACA,MAAMjR,OAAO,GAAG,EAAhB;AACA,MAAIyN,eAAJ;AACA,MAAIqJ,KAAK,GAAG,CAAZ;AACA,MAAMC,UAAU,GACdlN,OAAO,GAAGE,KAAV,GAAkBtF,SAAS,CAACvF,MAAV,CAAiBE,KAAnC,GACIqF,SAAS,CAACvF,MAAV,CAAiBE,KADrB,GAEIyK,OAAO,GAAGE,KAHhB;AAIA,MAAMiN,UAAU,GACdlN,OAAO,GAAGC,KAAV,GAAkBtF,SAAS,CAACjE,MAAV,CAAiBpB,KAAnC,GACIqF,SAAS,CAACjE,MAAV,CAAiBpB,KADrB,GAEI0K,OAAO,GAAGC,KAHhB;AAIA,MAAMqD,MAAM,GAAG3I,SAAS,CAACvF,MAAV,CAAiBG,MAAhC;AACA,MAAMkO,MAAM,GAAG9I,SAAS,CAACjE,MAAV,CAAiBnB,MAAhC;AACA,MAAM8X,OAAO,GAAG1S,SAAS,CAACvF,MAAV,CAAiBI,OAAjB,GAA2BmF,SAAS,CAACvF,MAAV,CAAiBI,OAAjB,CAAyBE,GAApD,GAA0D,EAA1E;AACA,MAAM4X,OAAO,GAAG3S,SAAS,CAACjE,MAAV,CAAiBlB,OAAjB,GAA2BmF,SAAS,CAACjE,MAAV,CAAiBlB,OAAjB,CAAyBE,GAApD,GAA0D,EAA1E;;AAGA,OAAK,IAAIgY,EAAE,GAAG1N,OAAd,EAAuB0N,EAAE,IAAIR,UAA7B,EAAyCQ,EAAE,EAA3C,EAA+C;AAC7C,SAAK,IAAIC,EAAE,GAAG5N,OAAd,EAAuB4N,EAAE,IAAIV,UAA7B,EAAyCU,EAAE,EAA3C,EAA+C;AAC7CvB,MAAAA,OAAO,GAAGzR,SAAS,CAACvF,MAAV,CAAiBwY,YAAjB,CAA8BD,EAA9B,CAAV;AACAtB,MAAAA,IAAI,GAAG1R,SAAS,CAACvF,MAAV,CAAiByY,aAAjB,CAA+BF,EAA/B,CAAP;AACArB,MAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,MAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAG,MAAAA,OAAO,GAAG7R,SAAS,CAACjE,MAAV,CAAiBkX,YAAjB,CAA8BF,EAA9B,CAAV;AACAjB,MAAAA,IAAI,GAAG9R,SAAS,CAACjE,MAAV,CAAiBmX,aAAjB,CAA+BH,EAA/B,CAAP;AACAhB,MAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,MAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACA9I,MAAAA,eAAe,GAAGhJ,SAAS,CAAC3E,aAAV,CAAwB2X,EAAxB,EAA4BD,EAA5B,CAAlB;AACAvG,MAAAA,CAAC,GAAG4N,kBAAkB,CAACpR,eAAD,EAAkBhJ,SAAS,CAACmT,QAA5B,CAAtB;AACA2B,MAAAA,iBAAiB,GAAGtI,CAAC,GAAG,CAAxB;;AAIA,UAAIA,CAAC,GAAG,CAAR,EAAW;AACT,YAAM3M,KAAK,GAAGsa,aAAa,CAACpL,WAAd,CAA0BvC,CAA1B,CAAd;AAEA,YAAM/I,EAAE,GAAGiO,IAAI,GAAG,KAAP,GAAeC,IAAf,GAAsB,KAAtB,GAA8BG,IAA9B,GAAqC,KAArC,GAA6CC,IAAxD;AACA,YAAIvK,WAAW,SAAf;;AACA,YAAIuS,aAAa,CAACtW,EAAD,CAAjB,EAAuB;AACrB+D,UAAAA,WAAW,GAAG2S,aAAa,CAACvL,uBAAd,EAAd;AACD,SAFD,MAEO;AACLpH,UAAAA,WAAW,GAAG3H,KAAd;AACD;;AAED,YAAM1G,OAAO,YAAUsK,EAAV,6BACD+I,CADC,2BAEH3M,KAFG,4BAGFiJ,MAHE,4BAIFH,MAJE,qCAKOK,eALP,6BAMDzN,OANC,0BAOJmW,IAPI,0BAQJI,IARI,0BASJH,IATI,0BAUJI,IAVI,6BAWDN,OAXC,6BAYDI,OAZC,4BAaFD,MAbE,4BAcFI,MAdE,iCAeGxK,WAfH,iCAgBG2S,aAAa,CAACvL,uBAAd,EAhBH,2BAiBHuL,aAAa,CAACzL,YAAd,CAA2B,GAA3B,CAjBG,2BAkBHyL,aAAa,CAACzL,YAAd,CAA2B,GAA3B,CAlBG,2BAmBHyL,aAAa,CAACzL,YAAd,CAA2B,GAA3B,CAnBV;AAqBApO,QAAAA,IAAI,CAACmD,EAAL,GAAUA,EAAV;AACAnD,QAAAA,IAAI,CAACyP,SAAL,GAAiB2B,IAAjB;AACApR,QAAAA,IAAI,CAAC0P,SAAL,GAAiB8E,iBAAjB;AACAxU,QAAAA,IAAI,CAAC2P,SAAL,GAAiB6B,IAAjB;AACAxR,QAAAA,IAAI,CAAC4Y,MAAL,GAActH,MAAM,GAAG,CAAvB;AACAtR,QAAAA,IAAI,CAAC6Y,MAAL,GAAc3M,CAAd;AACAlM,QAAAA,IAAI,CAAC8Y,MAAL,GAAcpH,MAAM,GAAG,CAAvB;AACA1R,QAAAA,IAAI,CAACT,KAAL,GAAa2H,WAAb;AACAlH,QAAAA,IAAI,SAAJ,GAAa,WAAb;AACAA,QAAAA,IAAI,CAACA,IAAL,GAAYnH,OAAZ;AAEAie,QAAAA,KAAK,CAACjG,IAAN,CAAWuG,UAAX,CAAsBrF,KAAtB,IAA+B4H,cAAc,CAAChB,WAAf,CAA2B3Y,IAA3B,CAA/B;AACA4Z,QAAAA,aAAa,CAAC7C,aAAd,CAA4BhF,KAA5B,EAAmCiF,YAAnC,EAAiD,MAAjD,EAAyD,OAAzD;AACAjF,QAAAA,KAAK;AACN;AACF;AACF;;AAED6H,EAAAA,aAAa,CAACrC,yBAAd,CAAwCxF,KAAxC,EAA+C,CAAC,MAAD,CAA/C;AAIA/R,EAAAA,IAAI,CAACmD,EAAL,GAAU,OAAO4O,KAAjB;AACA/R,EAAAA,IAAI,CAACyP,SAAL,GAAiBuC,UAAU,GAAG,GAA9B;AACAhS,EAAAA,IAAI,CAAC0P,SAAL,GAAiB,CAAjB;AACA1P,EAAAA,IAAI,CAAC2P,SAAL,GAAiBsC,UAAU,GAAG,GAA9B;AACAjS,EAAAA,IAAI,CAAC4P,SAAL,GAAiB,GAAjB;AACA5P,EAAAA,IAAI,CAAC6P,SAAL,GAAiB,GAAjB;AACA7P,EAAAA,IAAI,CAAC8P,SAAL,GAAiB,CAAjB;AACA9P,EAAAA,IAAI,CAACzD,KAAL,GAAa,CAAb;AACAyD,EAAAA,IAAI,CAACxD,MAAL,GAAc,CAAd;AACAwD,EAAAA,IAAI,CAACK,KAAL;AACAL,EAAAA,IAAI,CAACT,KAAL,GAAasa,aAAa,CAACzL,YAAd,CAA2B,GAA3B,CAAb;AACA0I,EAAAA,KAAK,CAACiD,WAAN,CAAkB3C,UAAlB,CAA6B,CAA7B,IAAkCuC,cAAc,CAACP,YAAf,CAA4BpZ,IAA5B,CAAlC;AACA4Z,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,aAA7C,EAA4D,UAA5D;AAGAhX,EAAAA,IAAI,CAAC2P,SAAL,GAAiB5K,OAAO,GAAG,GAA3B;AACA/E,EAAAA,IAAI,CAAC4P,SAAL,GAAiB,GAAjB;AACA5P,EAAAA,IAAI,CAAC6P,SAAL,GAAiB,GAAjB;AACAiH,EAAAA,KAAK,CAACkD,aAAN,CAAoB5C,UAApB,CAA+B,CAA/B,IAAoCuC,cAAc,CAACP,YAAf,CAA4BpZ,IAA5B,CAApC;AACA4Z,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,eAA7C,EAA8D,UAA9D;AAGAhX,EAAAA,IAAI,CAACyP,SAAL,GAAiB3K,OAAO,GAAG,GAA3B;AACA9E,EAAAA,IAAI,CAAC2P,SAAL,GAAiBsC,UAAU,GAAG,GAA9B;AAEA6E,EAAAA,KAAK,CAACmD,WAAN,CAAkB7C,UAAlB,CAA6B,CAA7B,IAAkCuC,cAAc,CAACP,YAAf,CAA4BpZ,IAA5B,CAAlC;AACA4Z,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,aAA7C,EAA4D,UAA5D;AAGAhX,EAAAA,IAAI,CAAC2P,SAAL,GAAiB5K,OAAO,GAAG,GAA3B;AACA/E,EAAAA,IAAI,CAAC6P,SAAL,GAAiB,GAAjB;AACAiH,EAAAA,KAAK,CAACoD,aAAN,CAAoB9C,UAApB,CAA+B,CAA/B,IAAoCuC,cAAc,CAACP,YAAf,CAA4BpZ,IAA5B,CAApC;AACA4Z,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,eAA7C,EAA8D,UAA9D;AAGAjF,EAAAA,KAAK,GAAG,CAAR;;AACA,OAAK,IAAIU,GAAE,GAAG1N,OAAd,EAAuB0N,GAAE,IAAIR,UAA7B,EAAyCQ,GAAE,EAA3C,EAA+C;AAC7CzS,IAAAA,IAAI,CAACmD,EAAL,GAAU,OAAO4O,KAAjB;AACA/R,IAAAA,IAAI,CAACyP,SAAL,GAAiB3K,OAAO,GAAG,GAA3B;AACA9E,IAAAA,IAAI,CAAC0P,SAAL,GAAiB,CAAjB;AACA1P,IAAAA,IAAI,CAAC2P,SAAL,GAAiB8C,GAAE,GAAG,CAAtB;AACAzS,IAAAA,IAAI,CAAC4P,SAAL,GAAiB,GAAjB;AACA5P,IAAAA,IAAI,CAAC6P,SAAL,GAAiB,GAAjB;AACA7P,IAAAA,IAAI,CAAC8P,SAAL,GAAiB,CAAjB;AACA9P,IAAAA,IAAI,CAACzD,KAAL,GAAa,CAAb;AACAyD,IAAAA,IAAI,CAACxD,MAAL,GAAc,CAAd;AACAwD,IAAAA,IAAI,CAACK,KAAL,SAAgBgS,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,GAAkBJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,CAAgB7X,OAAlC,GAA4C6X,GAAE,GAAG,CAAjE;AACAzS,IAAAA,IAAI,CAACT,KAAL,GAAasa,aAAa,CAACzL,YAAd,CAA2B,GAA3B,CAAb;AAEA0I,IAAAA,KAAK,CAACmD,WAAN,CAAkB7C,UAAlB,CAA6BrF,KAA7B,IAAsC4H,cAAc,CAACP,YAAf,CAA4BpZ,IAA5B,CAAtC;AACA4Z,IAAAA,aAAa,CAAC7C,aAAd,CAA4BhF,KAA5B,EAAmCiF,YAAnC,EAAiD,aAAjD,EAAgE,UAAhE;AAEAhX,IAAAA,IAAI,CAACmD,EAAL,GAAU,OAAO4O,KAAjB;AACA/R,IAAAA,IAAI,CAACyP,SAAL,GAAiBuC,UAAU,GAAG,GAA9B;AACAhS,IAAAA,IAAI,CAAC6P,SAAL,GAAiB,GAAjB;AACA7P,IAAAA,IAAI,CAACK,KAAL,SAAgBgS,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,GAAkBJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,CAAgB7X,OAAlC,GAA4C6X,GAAE,GAAG,CAAjE;AAGAqE,IAAAA,KAAK,CAACkD,aAAN,CAAoB5C,UAApB,CAA+BrF,KAA/B,IAAwC4H,cAAc,CAACP,YAAf,CAA4BpZ,IAA5B,CAAxC;AACA4Z,IAAAA,aAAa,CAAC7C,aAAd,CACEhF,KADF,EAEEiF,YAFF,EAGE,eAHF,EAIE,UAJF;AAMAjF,IAAAA,KAAK;AACN;;AAED6H,EAAAA,aAAa,CAACrC,yBAAd,CAAwCxF,KAAxC,EAA+C,CAC7C,aAD6C,EAE7C,eAF6C,CAA/C;AAKAA,EAAAA,KAAK,GAAG,CAAR;;AAEA,OAAK,IAAIW,GAAE,GAAG5N,OAAd,EAAuB4N,GAAE,IAAIV,UAA7B,EAAyCU,GAAE,EAA3C,EAA+C;AAC7C1S,IAAAA,IAAI,CAACmD,EAAL,GAAU,OAAO4O,KAAjB;AACA/R,IAAAA,IAAI,CAACyP,SAAL,GAAiBiD,GAAE,GAAG,CAAtB;AACA1S,IAAAA,IAAI,CAAC0P,SAAL,GAAiB,CAAjB;AACA1P,IAAAA,IAAI,CAAC2P,SAAL,GAAiB5K,OAAO,GAAG,GAA3B;AACA/E,IAAAA,IAAI,CAAC4P,SAAL,GAAiB,GAAjB;AACA5P,IAAAA,IAAI,CAAC6P,SAAL,GAAiB,GAAjB;AACA7P,IAAAA,IAAI,CAAC8P,SAAL,GAAiB,CAAjB;AACA9P,IAAAA,IAAI,CAACzD,KAAL,GAAa,CAAb;AACAyD,IAAAA,IAAI,CAACxD,MAAL,GAAc,CAAd;AACAwD,IAAAA,IAAI,CAACK,KAAL,SAAgB+R,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,GAAkBN,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,CAAgB9X,OAAlC,GAA4C8X,GAAE,GAAG,CAAjE;AACA1S,IAAAA,IAAI,CAACT,KAAL,GAAasa,aAAa,CAACzL,YAAd,CAA2B,GAA3B,CAAb;AAEA0I,IAAAA,KAAK,CAACiD,WAAN,CAAkB3C,UAAlB,CAA6BrF,KAA7B,IAAsC4H,cAAc,CAACP,YAAf,CAA4BpZ,IAA5B,CAAtC;AACA4Z,IAAAA,aAAa,CAAC7C,aAAd,CAA4BhF,KAA5B,EAAmCiF,YAAnC,EAAiD,aAAjD,EAAgE,UAAhE;AAEAhX,IAAAA,IAAI,CAACmD,EAAL,GAAU,OAAO4O,KAAjB;AACA/R,IAAAA,IAAI,CAAC2P,SAAL,GAAiBsC,UAAU,GAAG,GAA9B;AACAjS,IAAAA,IAAI,CAAC4P,SAAL,GAAiB,GAAjB;AACA5P,IAAAA,IAAI,CAAC6P,SAAL,GAAiB,EAAjB;AACA7P,IAAAA,IAAI,CAACK,KAAL,SAAgB+R,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,GAAkBN,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,CAAgB9X,OAAlC,GAA4C8X,GAAE,GAAG,CAAjE;AAEAoE,IAAAA,KAAK,CAACoD,aAAN,CAAoB9C,UAApB,CAA+BrF,KAA/B,IAAwC4H,cAAc,CAACP,YAAf,CAA4BpZ,IAA5B,CAAxC;AACA4Z,IAAAA,aAAa,CAAC7C,aAAd,CACEhF,KADF,EAEEiF,YAFF,EAGE,eAHF,EAIE,UAJF;AAMAjF,IAAAA,KAAK;AACN;;AAED6H,EAAAA,aAAa,CAACrC,yBAAd,CAAwCxF,KAAxC,EAA+C,CAC7C,aAD6C,EAE7C,eAF6C,CAA/C;AAKA/R,EAAAA,IAAI,CAACyP,SAAL,GAAiB3K,OAAjB;AACA9E,EAAAA,IAAI,CAAC0P,SAAL,GAAiB,CAAjB;AACA1P,EAAAA,IAAI,CAAC2P,SAAL,GAAiB5K,OAAO,GAAG,CAA3B;AACA/E,EAAAA,IAAI,CAAC4P,SAAL,GAAiB,GAAjB;AACA5P,EAAAA,IAAI,CAAC6P,SAAL,GAAiB,GAAjB;AACA7P,EAAAA,IAAI,CAAC8P,SAAL,GAAiB,CAAjB;AACA9P,EAAAA,IAAI,CAACzD,KAAL,GAAa,CAAb;AACAyD,EAAAA,IAAI,CAACxD,MAAL,GAAc,CAAd;AACAwD,EAAAA,IAAI,CAACK,KAAL,GAAagI,MAAb;AACArI,EAAAA,IAAI,CAACmD,EAAL,GAAU,WAAV;AAEA2T,EAAAA,KAAK,CAAChG,MAAN,CAAasG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACR,aAAf,CAA6BnZ,IAA7B,CAA7B;AACA4Z,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AAEAhX,EAAAA,IAAI,CAACyP,SAAL,GAAiBuC,UAAU,GAAG,GAA9B;AACAhS,EAAAA,IAAI,CAAC2P,SAAL,GAAiBsC,UAAU,GAAG,CAA9B;AACAjS,EAAAA,IAAI,CAAC6P,SAAL,GAAiB,CAAjB;AACA7P,EAAAA,IAAI,CAACmD,EAAL,GAAU,SAAV;AAEA2T,EAAAA,KAAK,CAAChG,MAAN,CAAasG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACR,aAAf,CAA6BnZ,IAA7B,CAA7B;AACA4Z,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AAGAhX,EAAAA,IAAI,CAACyP,SAAL,GAAiB3K,OAAO,GAAG,CAA3B;AACA9E,EAAAA,IAAI,CAAC0P,SAAL,GAAiB,CAAjB;AACA1P,EAAAA,IAAI,CAAC2P,SAAL,GAAiB5K,OAAO,GAAG,GAA3B;AACA/E,EAAAA,IAAI,CAAC4P,SAAL,GAAiB,GAAjB;AACA5P,EAAAA,IAAI,CAAC6P,SAAL,GAAiB,GAAjB;AACA7P,EAAAA,IAAI,CAAC8P,SAAL,GAAiB,CAAjB;AACA9P,EAAAA,IAAI,CAACzD,KAAL,GAAa,CAAb;AACAyD,EAAAA,IAAI,CAACxD,MAAL,GAAc,CAAd;AACAwD,EAAAA,IAAI,CAACK,KAAL,GAAamI,MAAb;AACAxI,EAAAA,IAAI,CAACT,KAAL,GAAasa,aAAa,CAACzL,YAAd,CAA2B,GAA3B,CAAb;AACApO,EAAAA,IAAI,CAACmD,EAAL,GAAU,WAAV;AAEA2T,EAAAA,KAAK,CAAChG,MAAN,CAAasG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACR,aAAf,CAA6BnZ,IAA7B,CAA7B;AACA4Z,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AAEAhX,EAAAA,IAAI,CAACyP,SAAL,GAAiBuC,UAAU,GAAG,CAA9B;AACAhS,EAAAA,IAAI,CAAC2P,SAAL,GAAiBsC,UAAU,GAAG,GAA9B;AACAjS,EAAAA,IAAI,CAAC4P,SAAL,GAAiB,GAAjB;AACA5P,EAAAA,IAAI,CAAC6P,SAAL,GAAiB,EAAjB;AACA7P,EAAAA,IAAI,CAACmD,EAAL,GAAU,YAAV;AAEA2T,EAAAA,KAAK,CAAChG,MAAN,CAAasG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACR,aAAf,CAA6BnZ,IAA7B,CAA7B;AACA4Z,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AAEAhX,EAAAA,IAAI,CAACyP,SAAL,GAAiB3K,OAAO,GAAG,EAA3B;AACA9E,EAAAA,IAAI,CAAC0P,SAAL,GAAiB,CAAC,GAAlB;AACA1P,EAAAA,IAAI,CAAC2P,SAAL,GAAiB5K,OAAO,GAAG,EAA3B;AACA/E,EAAAA,IAAI,CAAC4P,SAAL,GAAiB,CAAjB;AACA5P,EAAAA,IAAI,CAAC6P,SAAL,GAAiB,GAAjB;AACA7P,EAAAA,IAAI,CAAC8P,SAAL,GAAiB,CAAjB;AACA9P,EAAAA,IAAI,CAACuW,KAAL,GAAa7W,SAAS,CAACpF,MAAvB;AACA0F,EAAAA,IAAI,CAACT,KAAL,GAAasa,aAAa,CAACtL,mBAAd,EAAb;AAEA,MAAMgL,IAAI,GAAG,EAAb;AACAA,EAAAA,IAAI,CAAC9J,SAAL,GAAiB,CAAjB;AACA8J,EAAAA,IAAI,CAAC7J,SAAL,GAAiB,CAAjB;AACA6J,EAAAA,IAAI,CAAC5J,SAAL,GAAiB,CAAC,CAAlB;AACA4J,EAAAA,IAAI,CAAChd,KAAL,GAAa,GAAb;AACAgd,EAAAA,IAAI,CAAC/c,MAAL,GAAc,EAAd;AACA+c,EAAAA,IAAI,CAACha,KAAL,GAAa,OAAb;AAEAuX,EAAAA,KAAK,CAAC7F,MAAN,CAAamG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACN,aAAf,CAA6BrZ,IAA7B,EAAmCuZ,IAAnC,CAA7B;AACAK,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AAGAhX,EAAAA,IAAI,CAACyP,SAAL,GAAiB3K,OAAO,GAAG,GAA3B;AACA9E,EAAAA,IAAI,CAAC2P,SAAL,GAAiB5K,OAAO,GAAG,EAA3B;AACA/E,EAAAA,IAAI,CAAC6P,SAAL,GAAiB,GAAjB;AACA7P,EAAAA,IAAI,CAACuW,KAAL,GAAa7W,SAAS,CAAC1E,KAAvB;AAEA8b,EAAAA,KAAK,CAAC7F,MAAN,CAAamG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACN,aAAf,CAA6BrZ,IAA7B,EAAmCuZ,IAAnC,CAA7B;AACAK,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AACD;;AAGD,IAAM8C,kBAAkB,GAAG,SAArBA,kBAAqB,CAACpF,UAAD,EAAaC,UAAb,EAA4B;AACrD,MAAID,UAAU,IAAI,CAAlB,EAAqB,OAAO,CAAP;;AACrB,MAAIC,UAAU,GAAG,CAAjB,EAAoB;AAElBD,IAAAA,UAAU,GACRZ,IAAI,CAACC,KAAL,CAAW,CAACW,UAAU,GAAGC,UAAb,GAA0BX,MAAM,CAACC,OAAlC,IAA6C,GAAxD,IAA+D,GADjE;AAED;;AAED,SAAOS,UAAP;AACD,CATD;;ACpuBArO,MAAM,CAACC,iBAAP,CAAyB,QAAzB,EAAmC;AACjCsC,EAAAA,MAAM,EAAE;AACNzF,IAAAA,EAAE,EAAE;AAAErF,MAAAA,IAAI,EAAE;AAAR,KADE;AAEN6J,IAAAA,OAAO,EAAE;AAAE,iBAAS;AAAX,KAFH;AAGNe,IAAAA,eAAe,EAAE;AAAE,iBAAS;AAAX,KAHX;AAINzN,IAAAA,OAAO,EAAE;AAAE,iBAAS;AAAX,KAJH;AAKNoN,IAAAA,MAAM,EAAE;AAAEvK,MAAAA,IAAI,EAAE;AAAR,KALF;AAMN0K,IAAAA,MAAM,EAAE;AAAE1K,MAAAA,IAAI,EAAE;AAAR,KANF;AAONnC,IAAAA,IAAI,EAAE;AAAEmC,MAAAA,IAAI,EAAE;AAAR,KAPA;AAQNjC,IAAAA,IAAI,EAAE;AAAEiC,MAAAA,IAAI,EAAE;AAAR,KARA;AASNwK,IAAAA,IAAI,EAAE;AAAExK,MAAAA,IAAI,EAAE;AAAR,KATA;AAUN2K,IAAAA,IAAI,EAAE;AAAE3K,MAAAA,IAAI,EAAE;AAAR,KAVA;AAWN+K,IAAAA,OAAO,EAAE;AAAE/K,MAAAA,IAAI,EAAE;AAAR,KAXH;AAYNgL,IAAAA,OAAO,EAAE;AAAEhL,MAAAA,IAAI,EAAE;AAAR,KAZH;AAaNkL,IAAAA,MAAM,EAAE;AAAElL,MAAAA,IAAI,EAAE;AAAR,KAbF;AAcNmL,IAAAA,MAAM,EAAE;AAAEnL,MAAAA,IAAI,EAAE;AAAR,KAdF;AAeNyB,IAAAA,KAAK,EAAE;AAAEzB,MAAAA,IAAI,EAAE;AAAR,KAfD;AAgBN0J,IAAAA,KAAK,EAAE;AAAE1J,MAAAA,IAAI,EAAE;AAAR,KAhBD;AAiBNyJ,IAAAA,KAAK,EAAE;AAAEzJ,MAAAA,IAAI,EAAE;AAAR,KAjBD;AAkBNwJ,IAAAA,KAAK,EAAE;AAAExJ,MAAAA,IAAI,EAAE;AAAR,KAlBD;AAmBNqJ,IAAAA,WAAW,EAAE;AAAErJ,MAAAA,IAAI,EAAE;AAAR,KAnBP;AAoBNoJ,IAAAA,WAAW,EAAE;AAAEpJ,MAAAA,IAAI,EAAE;AAAR;AApBP,GADyB;AAwBjCyI,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAMC,EAAE,GAAG,KAAKA,EAAhB;AACAA,IAAAA,EAAE,CAACS,QAAH,GAAc;AACZc,MAAAA,QAAQ,EAAE,KADE;AAEZ5E,MAAAA,EAAE,EAAE,KAAKnD,IAAL,CAAUmD,EAFF;AAGZwE,MAAAA,OAAO,EAAE,KAAK3H,IAAL,CAAU2H,OAHP;AAIZe,MAAAA,eAAe,EAAE,KAAK1I,IAAL,CAAU0I,eAJf;AAKZzN,MAAAA,OAAO,EAAE,KAAK+E,IAAL,CAAU/E,OALP;AAMZoN,MAAAA,MAAM,EAAE,KAAKrI,IAAL,CAAUqI,MANN;AAOZG,MAAAA,MAAM,EAAE,KAAKxI,IAAL,CAAUwI,MAPN;AAQZ7M,MAAAA,IAAI,EAAE,KAAKqE,IAAL,CAAUrE,IARJ;AASZE,MAAAA,IAAI,EAAE,KAAKmE,IAAL,CAAUnE,IATJ;AAUZyM,MAAAA,IAAI,EAAE,KAAKtI,IAAL,CAAUsI,IAVJ;AAWZG,MAAAA,IAAI,EAAE,KAAKzI,IAAL,CAAUyI,IAXJ;AAYZI,MAAAA,OAAO,EAAE,KAAK7I,IAAL,CAAU6I,OAZP;AAaZC,MAAAA,OAAO,EAAE,KAAK9I,IAAL,CAAU8I,OAbP;AAcZE,MAAAA,MAAM,EAAE,KAAKhJ,IAAL,CAAUgJ,MAdN;AAeZC,MAAAA,MAAM,EAAE,KAAKjJ,IAAL,CAAUiJ,MAfN;AAgBZ1J,MAAAA,KAAK,EAAE,KAAKS,IAAL,CAAUT,KAhBL;AAiBZiI,MAAAA,KAAK,EAAE,KAAKxH,IAAL,CAAUwH,KAjBL;AAkBZD,MAAAA,KAAK,EAAE,KAAKvH,IAAL,CAAUuH,KAlBL;AAmBZD,MAAAA,KAAK,EAAE,KAAKtH,IAAL,CAAUsH,KAnBL;AAoBZH,MAAAA,WAAW,EAAE,KAAKnH,IAAL,CAAUmH,WApBX;AAqBZD,MAAAA,WAAW,EAAE,KAAKlH,IAAL,CAAUkH;AArBX,KAAd;AAuBD,GAjDgC;AAkDjCyB,EAAAA,MAAM,EAAE,kBAAY;AAClB,QAAMnC,EAAE,GAAG,KAAKA,EAAhB;AACAA,IAAAA,EAAE,CAACS,QAAH,GAAc;AACZc,MAAAA,QAAQ,EAAE,KADE;AAEZ5E,MAAAA,EAAE,EAAE,KAAKnD,IAAL,CAAUmD,EAFF;AAGZwE,MAAAA,OAAO,EAAE,KAAK3H,IAAL,CAAU2H,OAHP;AAIZe,MAAAA,eAAe,EAAE,KAAK1I,IAAL,CAAU0I,eAJf;AAKZzN,MAAAA,OAAO,EAAE,KAAK+E,IAAL,CAAU/E,OALP;AAMZoN,MAAAA,MAAM,EAAE,KAAKrI,IAAL,CAAUqI,MANN;AAOZG,MAAAA,MAAM,EAAE,KAAKxI,IAAL,CAAUwI,MAPN;AAQZ7M,MAAAA,IAAI,EAAE,KAAKqE,IAAL,CAAUrE,IARJ;AASZE,MAAAA,IAAI,EAAE,KAAKmE,IAAL,CAAUnE,IATJ;AAUZyM,MAAAA,IAAI,EAAE,KAAKtI,IAAL,CAAUsI,IAVJ;AAWZG,MAAAA,IAAI,EAAE,KAAKzI,IAAL,CAAUyI,IAXJ;AAYZI,MAAAA,OAAO,EAAE,KAAK7I,IAAL,CAAU6I,OAZP;AAaZC,MAAAA,OAAO,EAAE,KAAK9I,IAAL,CAAU8I,OAbP;AAcZE,MAAAA,MAAM,EAAE,KAAKhJ,IAAL,CAAUgJ,MAdN;AAeZC,MAAAA,MAAM,EAAE,KAAKjJ,IAAL,CAAUiJ,MAfN;AAgBZ1J,MAAAA,KAAK,EAAE,KAAKS,IAAL,CAAUT,KAhBL;AAiBZiI,MAAAA,KAAK,EAAE,KAAKxH,IAAL,CAAUwH,KAjBL;AAkBZD,MAAAA,KAAK,EAAE,KAAKvH,IAAL,CAAUuH,KAlBL;AAmBZD,MAAAA,KAAK,EAAE,KAAKtH,IAAL,CAAUsH,KAnBL;AAoBZH,MAAAA,WAAW,EAAE,KAAKnH,IAAL,CAAUmH,WApBX;AAqBZD,MAAAA,WAAW,EAAE,KAAKlH,IAAL,CAAUkH;AArBX,KAAd;AAuBD;AA3EgC,CAAnC;;;;IC3BqBiT;AAGnB,gCAAYC,MAAZ,EAAoB;AAAA;AAAA;AAAA;AAAA;AAClB,8DAAeA,MAAf;AACD;;;;SAEDC,yBAAA,gCAAuB9e,OAAvB,EAAgCC,OAAhC,EAAyC8e,cAAzC,EAAyDC,gBAAzD,EAA2E;AACzE,QAAMC,KAAK,GAAG,wDAAaxgB,eAAb,CAA6B,MAA7B,EAAqCuB,OAArC,EAA8CC,OAA9C,CAAd;;AACA,QAAIif,GAAG,GAAGH,cAAV;;AACA,SAAK,IAAI7H,EAAE,GAAG,CAAd,EAAiBA,EAAE,IAAI,EAAvB,EAA2BA,EAAE,EAA7B;AACE,WAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,IAAI,EAAvB,EAA2BA,EAAE,EAA7B,EAAiC;AAC/B,YAAM/X,GAAG,GAAG6f,KAAK,CAACE,MAAN,CAAahI,EAAb,EAAiBD,EAAjB,CAAZ;AACA,YAAIkI,GAAG,GAAG,CAAV;AACAA,QAAAA,GAAG,GAAGF,GAAN;AACAD,QAAAA,KAAK,CAAC1f,aAAN,CAAoBH,GAApB,EAAyBggB,GAAzB;AAEAF,QAAAA,GAAG,IAAIF,gBAAP;AACD;AARH;;AAUAC,IAAAA,KAAK,CAACrgB,MAAN,CAAaG,MAAb,GAAsB,QAAtB;AACAkgB,IAAAA,KAAK,CAAC/e,MAAN,CAAanB,MAAb,GAAsB,QAAtB;AACAkgB,IAAAA,KAAK,CAACxf,KAAN,GAAc,kCAAd;AACAwf,IAAAA,KAAK,CAAClgB,MAAN,GAAe,8BAAf;AACAkgB,IAAAA,KAAK,CAAC3H,QAAN,GAAiB4H,GAAjB;AAEA,WAAOD,KAAP;AACD;;SAEDI,yBAAA,gCACErf,OADF,EAEEC,OAFF,EAGEqf,OAHF,EAIEP,cAJF,EAKEC,gBALF,EAME;AACA,QAAMC,KAAK,GAAG,wDAAaxgB,eAAb,CACZ,MADY,EAEZuB,OAFY,EAGZC,OAHY,EAIZqf,OAJY,CAAd;;AAMA,QAAIJ,GAAG,GAAGH,cAAV;;AAEA,SAAK,IAAI9H,EAAE,GAAG,CAAd,EAAiBA,EAAE,IAAI,EAAvB,EAA2BA,EAAE,EAA7B;AACE,WAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,IAAI,EAAvB,EAA2BA,EAAE,EAA7B;AACE,aAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,IAAI,EAAvB,EAA2BA,EAAE,EAA7B,EAAiC;AAC/B,cAAM/X,GAAG,GAAG6f,KAAK,CAACE,MAAN,CAAahI,EAAb,EAAiBD,EAAjB,EAAqBD,EAArB,CAAZ;AACA,cAAImI,GAAG,GAAG,CAAV;AACAA,UAAAA,GAAG,GAAGF,GAAN;AACAD,UAAAA,KAAK,CAAC1f,aAAN,CAAoBH,GAApB,EAAyBggB,GAAzB;AAEAF,UAAAA,GAAG,IAAIF,gBAAP;AACD;AARH;AADF;;AAWAC,IAAAA,KAAK,CAACrgB,MAAN,CAAaG,MAAb,GAAsB,QAAtB;AACAkgB,IAAAA,KAAK,CAAC/e,MAAN,CAAanB,MAAb,GAAsB,QAAtB;AACAkgB,IAAAA,KAAK,CAACrI,MAAN,CAAa7X,MAAb,GAAsB,QAAtB;AACAkgB,IAAAA,KAAK,CAACxf,KAAN,GAAc,kCAAd;AACAwf,IAAAA,KAAK,CAAClgB,MAAN,GAAe,8BAAf;AACAkgB,IAAAA,KAAK,CAAC3H,QAAN,GAAiB4H,GAAjB;AAEA,WAAOD,KAAP;AACD;;;;;AChDH,YAAenU,MAAM,CAACC,iBAAP,CAAyB,eAAzB,EAA0C;AACvDsC,EAAAA,MAAM,EAAE;AACN3D,IAAAA,OAAO,EAAE;AAAEnH,MAAAA,IAAI,EAAE;AAAR,KADH;AAEN0H,IAAAA,QAAQ,EAAE;AAAE1H,MAAAA,IAAI,EAAE;AAAR,KAFJ;AAGN6P,IAAAA,KAAK,EAAE;AAAE7P,MAAAA,IAAI,EAAE,QAAR;AAAkB,iBAAS;AAA3B,KAHD;AAINgF,IAAAA,QAAQ,EAAE;AACR5H,MAAAA,IAAI,EAAE,UADE;AAERuQ,MAAAA,MAAM,EAAE,CAFA;AAGRC,MAAAA,MAAM,EAAE,CAHA;AAIRC,MAAAA,MAAM,EAAE;AAJA,KAJJ;AAUNa,IAAAA,KAAK,EAAE;AACLtR,MAAAA,IAAI,EAAE,OADD;AAELuQ,MAAAA,MAAM,EAAE,CAFH;AAGLC,MAAAA,MAAM,EAAE,CAHH;AAILC,MAAAA,MAAM,EAAE;AAJH,KAVD;AAgBNnK,IAAAA,QAAQ,EAAE;AACRtG,MAAAA,IAAI,EAAE,UADE;AAERuQ,MAAAA,MAAM,EAAE,CAFA;AAGRC,MAAAA,MAAM,EAAE,CAHA;AAIRC,MAAAA,MAAM,EAAE;AAJA;AAhBJ,GAD+C;AAwBvDpF,EAAAA,IAAI,EAAE,gBAAY;AAAA;;AAChB,QAAMC,EAAE,GAAG,KAAKA,EAAhB;AACA+F,IAAAA,yBAAyB,CAAC,KAAK3D,MAAN,EAAcpC,EAAd,CAAzB;AAEA9J,IAAAA,QAAQ,CAACiK,gBAAT,CAA0B,SAA1B,EAAqCmF,uBAArC;AACApP,IAAAA,QAAQ,CAACiK,gBAAT,CAA0B,OAA1B,EAAmC2F,yBAAnC;AACA,SAAK/N,MAAL,GAAcoC,MAAM,CAACpC,MAArB;AACA,SAAKuc,oBAAL,GAA4B,IAAIX,oBAAJ,CAAyB,KAAK5b,MAA9B,CAA5B;AACA,SAAKqH,mBAAL,GAA2B,IAAI5C,mBAAJ,EAA3B;AACA,SAAKmI,aAAL,GAAqB,IAAIhC,aAAJ,EAArB;AACA,SAAK4R,MAAL,GAAc,KAAd;AACA,SAAKrb,SAAL,GAAiB,IAAjB;AACA,SAAKoX,KAAL,GAAa;AACXjG,MAAAA,IAAI,EAAE;AACJD,QAAAA,QAAQ,EAAE,EADN;AAEJwG,QAAAA,UAAU,EAAE;AAFR,OADK;AAKXtG,MAAAA,MAAM,EAAE;AACNF,QAAAA,QAAQ,EAAE,EADJ;AAENwG,QAAAA,UAAU,EAAE;AAFN,OALG;AASXnG,MAAAA,MAAM,EAAE;AACNL,QAAAA,QAAQ,EAAE,EADJ;AAENwG,QAAAA,UAAU,EAAE;AAFN,OATG;AAaXrG,MAAAA,OAAO,EAAE;AACPH,QAAAA,QAAQ,EAAE,EADH;AAEPwG,QAAAA,UAAU,EAAE;AAFL,OAbE;AAiBX2C,MAAAA,WAAW,EAAE;AACXnJ,QAAAA,QAAQ,EAAE,EADC;AAEXwG,QAAAA,UAAU,EAAE;AAFD,OAjBF;AAqBX8C,MAAAA,aAAa,EAAE;AACbtJ,QAAAA,QAAQ,EAAE,EADG;AAEbwG,QAAAA,UAAU,EAAE;AAFC,OArBJ;AAyBX6C,MAAAA,WAAW,EAAE;AACXrJ,QAAAA,QAAQ,EAAE,EADC;AAEXwG,QAAAA,UAAU,EAAE;AAFD,OAzBF;AA6BX4C,MAAAA,aAAa,EAAE;AACbpJ,QAAAA,QAAQ,EAAE,EADG;AAEbwG,QAAAA,UAAU,EAAE;AAFC;AA7BJ,KAAb;AAkCA,SAAKnS,OAAL,GAAe,IAAf;;AAGA,QAAM+V,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACC,UAAD,EAAgB;AAC7C9e,MAAAA,OAAO,CAACC,GAAR,CAAY6e,UAAZ;AACA,MAAA,KAAI,CAAChW,OAAL,CAAaH,OAAb,GAAuBmW,UAAU,CAACnW,OAAlC;AACA,MAAA,KAAI,CAACG,OAAL,CAAaF,OAAb,GAAuBkW,UAAU,CAAClW,OAAlC;AACA,MAAA,KAAI,CAACC,KAAL,GAAaiW,UAAU,CAACjW,KAAxB;;AAEA,MAAA,KAAI,CAACmG,aAAL,CAAmBtB,iBAAnB,CAAqCoR,UAArC;;AACAvB,MAAAA,kBAAkB,CAChB,KAAI,CAAClT,EADW,EAEhB,KAAI,CAACsQ,KAFW,EAGhB,KAAI,CAACpX,SAHW,EAIhB,KAAI,CAACuF,OAAL,CAAaH,OAJG,EAKhB,KAAI,CAACG,OAAL,CAAaF,OALG,EAMhB,KAAI,CAACE,OAAL,CAAaD,KANG,EAOhB,KAAI,CAAChF,IAAL,CAAU2N,KAPM,CAAlB;AASA,MAAA,KAAI,CAACoN,MAAL,GAAc,IAAd;AACD,KAjBD;;AAkBA,QAAMva,kBAAkB,GAAG,SAArBA,kBAAqB,CAACyE,OAAD,EAAa;AACtC,MAAA,KAAI,CAACW,mBAAL,CAAyBf,eAAzB,CACEI,OAAO,CAACH,OADV,EAEEG,OAAO,CAACF,OAFV,EAGEE,OAAO,CAACD,KAHV;;AAKAgW,MAAAA,sBAAsB,CAAC/V,OAAD,CAAtB;AACD,KAPD;;AASA,SAAKrF,YAAL,GAAoBoL,mBAAmB,CACpCD,iBADiB,GAEjBnK,SAFiB,CAEPJ,kBAFO,CAApB;AAGD,GAvGsD;AAwGvDmI,EAAAA,MAAM,EAAE,kBAAY;AAAA;;AAClB+D,IAAAA,6BAA6B;AAC7B,SAAKzH,OAAL,GAAexB,IAAI,CAACK,KAAL,CAAW,KAAK9D,IAAL,CAAUiF,OAArB,CAAf;AACA,SAAK1G,MAAL,CAAY2c,QAAZ,CAAqB,KAAKlb,IAAL,CAAUwF,QAA/B,EACG2V,IADH,CACQ,UAACC,IAAD;AAAA,aAAUA,IAAI,CAACC,UAAL,CAAgB,kBAAhB,CAAV;AAAA,KADR,EAEGF,IAFH,CAEQ,UAAClhB,GAAD,EAAS;AACb,MAAA,MAAI,CAAC2L,mBAAL,CAAyBpB,iBAAzB,CAA2CvK,GAA3C;;AACA,MAAA,MAAI,CAACyF,SAAL,GAAiBzF,GAAjB;AACAyf,MAAAA,kBAAkB,CAChB,MAAI,CAAClT,EADW,EAEhB,MAAI,CAACsQ,KAFW,EAGhB,MAAI,CAACpX,SAHW,EAIhB,MAAI,CAACuF,OAAL,CAAaH,OAJG,EAKhB,MAAI,CAACG,OAAL,CAAaF,OALG,EAMhB,MAAI,CAACE,OAAL,CAAaD,KANG,EAOhB,MAAI,CAAChF,IAAL,CAAU2N,KAPM,CAAlB;AASA,MAAA,MAAI,CAACoN,MAAL,GAAc,IAAd;AACD,KAfH,EAgBGI,IAhBH,CAgBQ;AAAA,aAAMhf,OAAO,CAACC,GAAR,CAAY,mBAAZ,CAAN;AAAA,KAhBR,WAiBS,UAACkf,KAAD,EAAW;AAChB,MAAA,MAAI,CAAC5b,SAAL,GAAiB,MAAI,CAACob,oBAAL,CAA0BT,sBAA1B,CACf,EADe,EAEf,EAFe,EAGf,CAHe,EAIf,GAJe,CAAjB;;AAMA,MAAA,MAAI,CAACzU,mBAAL,CAAyBpB,iBAAzB,CAA2C,MAAI,CAAC9E,SAAhD;;AACAga,MAAAA,kBAAkB,CAChB,MAAI,CAAClT,EADW,EAEhB,MAAI,CAACsQ,KAFW,EAGhB,MAAI,CAACpX,SAHW,EAIhB,MAAI,CAACuF,OAAL,CAAaH,OAJG,EAKhB,MAAI,CAACG,OAAL,CAAaF,OALG,EAMhB,MAAI,CAACE,OAAL,CAAaD,KANG,EAOhB,MAAI,CAAChF,IAAL,CAAU2N,KAPM,CAAlB;AASA,MAAA,MAAI,CAACoN,MAAL,GAAc,IAAd;AACA5e,MAAAA,OAAO,CAACC,GAAR,CAAYkf,KAAZ;AACD,KApCH;AAqCD,GAhJsD;AAiJvDC,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAI,KAAKR,MAAT,EAAiB;AACf,WAAKA,MAAL,GAAc,KAAd;AACA5e,MAAAA,OAAO,CAACC,GAAR,CAAY,KAAK6I,OAAjB;AACA9I,MAAAA,OAAO,CAACC,GAAR,CAAY,KAAKwU,QAAjB;AACD;AACF,GAvJsD;AAwJvD6G,EAAAA,MAAM,EAAE,kBAAY;AAClB,SAAK7X,YAAL,CAAkBiB,WAAlB;AACAnE,IAAAA,QAAQ,CAAC8e,mBAAT,CAA6B,SAA7B,EAAwC1P,uBAAxC;AACApP,IAAAA,QAAQ,CAAC8e,mBAAT,CAA6B,OAA7B,EAAsClP,yBAAtC;AACD;AA5JsD,CAA1C,CAAf;;ACbA,gCAAejG,MAAM,CAACC,iBAAP,CAAyB,gBAAzB,EAA2C;AACxDsC,EAAAA,MAAM,EAAE;AACN9F,IAAAA,QAAQ,EAAE;AACR5H,MAAAA,IAAI,EAAE,UADE;AAERuQ,MAAAA,MAAM,EAAE,CAAC,IAFD;AAGRC,MAAAA,MAAM,EAAE,GAHA;AAIRC,MAAAA,MAAM,EAAE,CAAC;AAJD,KADJ;AAONa,IAAAA,KAAK,EAAE;AACLtR,MAAAA,IAAI,EAAE,OADD;AAELuQ,MAAAA,MAAM,EAAE,GAFH;AAGLC,MAAAA,MAAM,EAAE,GAHH;AAILC,MAAAA,MAAM,EAAE;AAJH,KAPD;AAaNnK,IAAAA,QAAQ,EAAE;AACRtG,MAAAA,IAAI,EAAE,UADE;AAERuQ,MAAAA,MAAM,EAAE,CAFA;AAGRC,MAAAA,MAAM,EAAE,EAHA;AAIRC,MAAAA,MAAM,EAAE;AAJA;AAbJ,GADgD;AAqBxDpF,EAAAA,IAAI,EAAE,gBAAY;AArBsC,CAA3C,CAAf;;ACiEA,IAAI4E,eAAa,GAAG,IAAIhC,aAAJ,EAApB;;AAOA,IAAMsS,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACtb,KAAD,EAAW;AACvC,MAAIA,KAAK,CAAC4G,MAAN,CAAahE,CAAb,GAAiB,IAArB,EAA2B;AACzBiI,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMD;;AACD,MAAItK,KAAK,CAAC4G,MAAN,CAAahE,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1BiI,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMD;;AACD,MAAItK,KAAK,CAAC4G,MAAN,CAAa3E,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1B4I,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMD;;AACD,MAAItK,KAAK,CAAC4G,MAAN,CAAa3E,CAAb,GAAiB,IAArB,EAA2B;AACzB4I,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMD;AACF,CAzDD;;AAgEA,IAAMiR,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACvb,KAAD,EAAW;AAC3C,MAAIA,KAAK,CAAC4G,MAAN,CAAahE,CAAb,GAAiB,IAArB,EAA2B;AACzBiI,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMD;;AACD,MAAItK,KAAK,CAAC4G,MAAN,CAAahE,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1BiI,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMD;;AACD,MAAItK,KAAK,CAAC4G,MAAN,CAAa3E,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1B4I,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMD;;AACD,MAAItK,KAAK,CAAC4G,MAAN,CAAa3E,CAAb,GAAiB,IAArB,EAA2B;AACzB4I,IAAAA,mBAAmB,CAACP,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMAQ,IAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMD;AACF,CAzDD;;AAiEA,IAAMkR,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACxb,KAAD,EAAQmJ,KAAR,EAAkB;AAC5C,MAAInJ,KAAK,CAAC4G,MAAN,CAAahE,CAAb,GAAiB,IAArB,EAA2B;AACzBoI,IAAAA,eAAa,CAAC5B,oBAAd,CAAmC,GAAnC,EAAwC,KAAxC,EAA+CD,KAA/C;AACD;;AACD,MAAInJ,KAAK,CAAC4G,MAAN,CAAahE,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1BoI,IAAAA,eAAa,CAAC5B,oBAAd,CAAmC,GAAnC,EAAwC,IAAxC,EAA8CD,KAA9C;AACD;;AACD,MAAInJ,KAAK,CAAC4G,MAAN,CAAa3E,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1B+I,IAAAA,eAAa,CAAC5B,oBAAd,CAAmC,GAAnC,EAAwC,IAAxC,EAA8CD,KAA9C;AACD;;AACD,MAAInJ,KAAK,CAAC4G,MAAN,CAAa3E,CAAb,GAAiB,IAArB,EAA2B;AACzB+I,IAAAA,eAAa,CAAC5B,oBAAd,CAAmC,GAAnC,EAAwC,KAAxC,EAA+CD,KAA/C;AACD;AACF,CAbD;;AAwCA,IAAMsS,sCAAsC,GAAG,SAAzCA,sCAAyC,CAACzb,KAAD,EAAW;AACxD,MAAIA,KAAK,CAAC4G,MAAN,CAAahE,CAAb,GAAiB,IAArB,EAA2B;AACzBoI,IAAAA,eAAa,CAACd,iCAAd;AACD;;AACD,MAAIlK,KAAK,CAAC4G,MAAN,CAAahE,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1BoI,IAAAA,eAAa,CAACf,mCAAd;AACD;;AACD,MAAIjK,KAAK,CAAC4G,MAAN,CAAa3E,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1B+I,IAAAA,eAAa,CAACZ,mCAAd;AACD;;AACD,MAAIpK,KAAK,CAAC4G,MAAN,CAAa3E,CAAb,GAAiB,IAArB,EAA2B;AACzB+I,IAAAA,eAAa,CAACb,oCAAd;AACD;AACF,CAbD;;AAoBA,IAAMuR,eAAe,GAAG,SAAlBA,eAAkB,CAAClR,YAAD,EAAkB;AACxCM,EAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIEE,YAJF;AAMD,CAPD;;AAcA,IAAMmR,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,WAAD,EAAiB;AACzC9Q,EAAAA,mBAAmB,CAACR,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIEsR,WAJF;AAMD,CAPD;;AAiBA,IAAMC,2BAA2B,GAAG,SAA9BA,2BAA8B,GAAM;AACxC7Q,EAAAA,eAAa,GAAG,IAAIhC,aAAJ,EAAhB;AACD,CAFD;;AASA,IAAM8S,wBAAwB,GAAG,SAA3BA,wBAA2B,CAAC9b,KAAD,EAAW;AAC1Csb,EAAAA,qBAAqB,CAACtb,KAAD,CAArB;AACD,CAFD;;AASA,IAAM+b,gCAAgC,GAAG,SAAnCA,gCAAmC,CAAC/b,KAAD,EAAW;AAClDub,EAAAA,yBAAyB,CAACvb,KAAD,CAAzB;AACD,CAFD;;AAkBA,IAAMgc,kDAAkD,GAAG,SAArDA,kDAAqD,CAAChc,KAAD,EAAW;AACpEyb,EAAAA,sCAAsC,CAACzb,KAAD,CAAtC;AACD,CAFD;;AAUA,IAAMic,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACjc,KAAD,EAAQmJ,KAAR,EAAkB;AAClDqS,EAAAA,mBAAmB,CAACxb,KAAD,EAAQmJ,KAAR,CAAnB;AACD,CAFD;;AASA,IAAM+S,yBAAyB,GAAG,SAA5BA,yBAA4B,CAAC/S,KAAD,EAAW;AAC3C6B,EAAAA,eAAa,CAAC/B,kBAAd,CAAiC,IAAjC,EAAuCE,KAAK,GAAG,CAA/C;AACD,CAFD;;AASA,IAAMgT,yBAAyB,GAAG,SAA5BA,yBAA4B,CAAChT,KAAD,EAAW;AAC3C6B,EAAAA,eAAa,CAAC/B,kBAAd,CAAiC,KAAjC,EAAwCE,KAAK,GAAG,CAAhD;AACD,CAFD;;AAQA,IAAMiT,uBAAuB,GAAG,SAA1BA,uBAA0B,GAAM;AACpCvW,EAAAA,UAAU,CAACF,6BAAX;AACD,CAFD;;AAQA,IAAM0W,yBAAyB,GAAG,SAA5BA,yBAA4B,GAAM;AACtCxW,EAAAA,UAAU,CAACrC,yBAAX;AACD,CAFD;;AAQA,IAAM8Y,sBAAsB,GAAG,SAAzBA,sBAAyB,GAAM;AACnCzR,EAAAA,mBAAmB,CAACJ,uBAApB,CAA4C,MAA5C,EAAoD,KAApD;AACD,CAFD;;AAQA,IAAM8R,qBAAqB,GAAG,SAAxBA,qBAAwB,GAAM;AAClC1R,EAAAA,mBAAmB,CAACJ,uBAApB,CAA4C,SAA5C,EAAuD,KAAvD;AACD,CAFD;;AAQA,IAAM+R,2BAA2B,GAAG,SAA9BA,2BAA8B,GAAM;AACxCtb,EAAAA,aAAa,CAACN,sBAAd,CAAqC,QAArC;AACD,CAFD;;AAQA,IAAM6b,yBAAyB,GAAG,SAA5BA,yBAA4B,GAAM;AACtCvb,EAAAA,aAAa,CAACF,YAAd;AACD,CAFD;;AAQA,IAAM0b,kBAAkB,GAAG,SAArBA,kBAAqB,GAAM;AAC/Bxb,EAAAA,aAAa,CAACH,YAAd;AACD,CAFD;;AAQA,IAAM4b,4BAA4B,GAAG,SAA/BA,4BAA+B,GAAM;AACzC,AAAC,GACC,YADD,EAEC,YAFD,EAGC,YAHD,EAIC,YAJD,EAKC,YALD,EAMC1Q,OAND,CAMS,UAACC,QAAD,EAAc;AACtB,QAAI3P,QAAQ,CAACC,cAAT,CAAwB0P,QAAxB,MAAsC,IAA1C,EAAgD;AAC9C7N,MAAAA,aAAa,CAACvC,wBAAd,CACE,qBADF,EAEEoQ,QAFF,EAGE,OAHF,EAIE,OAJF;AAMD;AACF,GAfA;AAgBF,CAjBD;;ACrZA,2BAAehG,MAAM,CAACC,iBAAP,CAAyB,yBAAzB,EAAoD;AACjEC,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAIwW,UAAU,GAAG,KAAjB;AACA,QAAIzT,KAAK,GAAG,CAAZ;AACA,QAAM9C,EAAE,GAAG,KAAKA,EAAhB;AAEAA,IAAAA,EAAE,CAACG,gBAAH,CAAoB,UAApB,EAAgC,YAAM;AACpCoW,MAAAA,UAAU,GAAG,IAAb;AACD,KAFD;AAGAvW,IAAAA,EAAE,CAACG,gBAAH,CAAoB,QAApB,EAA8B,YAAM;AAClCoW,MAAAA,UAAU,GAAG,KAAb;AACD,KAFD;AAGAvW,IAAAA,EAAE,CAACG,gBAAH,CAAoB,gBAApB,EAAsC,YAAM;AAC1C,UAAIoW,UAAJ,EAAgB;AACdzT,QAAAA,KAAK;AACL,YAAIA,KAAK,GAAG,EAAZ,EAAgBA,KAAK,GAAG,EAAR;AACjB,OAHD,MAGO;AACLA,QAAAA,KAAK;AACL,YAAIA,KAAK,GAAG,CAAZ,EAAeA,KAAK,GAAG,CAAR;AAChB;AACF,KARD;AASA9C,IAAAA,EAAE,CAACG,gBAAH,CAAoB,iBAApB,EAAuC,UAACxG,KAAD,EAAW;AAChD,UAAI4c,UAAJ,EAAgB;AACdZ,QAAAA,kDAAkD,CAAChc,KAAD,CAAlD;AACD,OAFD,MAEO;AACLic,QAAAA,yBAAyB,CAACjc,KAAD,EAAQmJ,KAAR,CAAzB;AACD;AACF,KAND;AAOA9C,IAAAA,EAAE,CAACG,gBAAH,CAAoB,aAApB,EAAmC,YAAM;AACvC,UAAIoW,UAAJ,EAAgB;AACdV,QAAAA,yBAAyB,CAAC/S,KAAD,CAAzB;AACD,OAFD,MAEO;AACLqT,QAAAA,2BAA2B;AAC5B;AACF,KAND;AAOAnW,IAAAA,EAAE,CAACG,gBAAH,CAAoB,aAApB,EAAmC,YAAM;AACvC,UAAIoW,UAAJ,EAAgB;AACdT,QAAAA,yBAAyB,CAAChT,KAAD,CAAzB;AACD,OAFD,MAEO;AACLsT,QAAAA,yBAAyB;AAC1B;AACF,KAND;AAOD,GA1CgE;AA4CjEjU,EAAAA,MAAM,EAAE,kBAAY;AAClBqT,IAAAA,2BAA2B;AAC5B;AA9CgE,CAApD,CAAf;;ACIA,4BAAe3V,MAAM,CAACC,iBAAP,CAAyB,0BAAzB,EAAqD;AAClEC,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAIwW,UAAU,GAAG,KAAjB;AACA,QAAMvW,EAAE,GAAG,KAAKA,EAAhB;AAEAA,IAAAA,EAAE,CAACG,gBAAH,CAAoB,UAApB,EAAgC,YAAM;AACpCoW,MAAAA,UAAU,GAAG,IAAb;AACD,KAFD;AAGAvW,IAAAA,EAAE,CAACG,gBAAH,CAAoB,QAApB,EAA8B,YAAM;AAClCoW,MAAAA,UAAU,GAAG,KAAb;AACD,KAFD;AAGAvW,IAAAA,EAAE,CAACG,gBAAH,CAAoB,iBAApB,EAAuC,UAACxG,KAAD,EAAW;AAChD,UAAI4c,UAAJ,EAAgB;AACdd,QAAAA,wBAAwB,CAAC9b,KAAD,CAAxB;AACD,OAFD,MAEO;AACL+b,QAAAA,gCAAgC,CAAC/b,KAAD,CAAhC;AACD;AACF,KAND;AAOAqG,IAAAA,EAAE,CAACG,gBAAH,CAAoB,aAApB,EAAmC,YAAM;AACvC,UAAIoW,UAAJ,EAAgB;AACdlB,QAAAA,eAAe,CAAC,KAAD,CAAf;AACD,OAFD,MAEO;AACLA,QAAAA,eAAe,CAAC,IAAD,CAAf;AACD;AACF,KAND;AAOArV,IAAAA,EAAE,CAACG,gBAAH,CAAoB,aAApB,EAAmC,YAAM;AACvC,UAAIoW,UAAJ,EAAgB;AACdjB,QAAAA,iBAAiB,CAAC,KAAD,CAAjB;AACD,OAFD,MAEO;AACLA,QAAAA,iBAAiB,CAAC,IAAD,CAAjB;AACD;AACF,KAND;AAOAtV,IAAAA,EAAE,CAACG,gBAAH,CAAoB,gBAApB,EAAsC,YAAM;AAC1C,UAAIoW,UAAJ,EAAgB;AACdN,QAAAA,sBAAsB;AACvB,OAFD,MAEO;AACLC,QAAAA,qBAAqB;AACtB;AACF,KAND;AAOAlW,IAAAA,EAAE,CAACG,gBAAH,CAAoB,aAApB,EAAmC,YAAM;AACvC,UAAIoW,UAAJ,EAAgB;AACdR,QAAAA,uBAAuB;AACvBO,QAAAA,4BAA4B;AAC7B,OAHD,MAGO;AACLN,QAAAA,yBAAyB;AACzBK,QAAAA,kBAAkB;AACnB;AACF,KARD;AASD,GAhDiE;AAkDlElU,EAAAA,MAAM,EAAE,kBAAY;AAClBqT,IAAAA,2BAA2B;AAC5B;AApDiE,CAArD,CAAf;;ICZMgB,YAAY,GAAG,IAAIha,mBAAJ,EAArB;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/observables/jsrootSubject.js","../src/services/jsrootService.js","../src/components/JsrootHistogram/index.js","../src/observables/cameraSubject.js","../src/services/cameraService.js","../src/observables/histogramSubject.js","../src/observables/binSubject.js","../src/controllers/keyboardController.js","../src/services/ndmVrStorageService.js","../src/observables/binDataDistributor.js","../src/aframeComponents/cursorEventAframeComponent.js","../src/components/NdmVrCamera/index.js","../src/aframeComponents/thAframeComponent.js","../src/aframeComponents/histogramAframeComponent.js","../src/aframeComponents/labelHandlerAframeComponent.js","../src/resources/theme.js","../src/resources/themeProvider.js","../src/utils/histogramGenerator.js","../src/components/NdmVrHistogram3D/index.js","../src/components/NdmVrLaboratory/index.js","../src/components/NdmVrHistogramScene/index.js","../src/utils/EntityBuilder.js","../src/utils/EntityTemplate.js","../src/utils/histogramAframeFactory.js","../src/aframeComponents/th2AframeComponent.js","../src/utils/DefaultHistogram.js","../src/components/AframeComponent/index.js","../src/aframeComponents/infoBannerAframeComponent.js","../src/controllers/oculusController.js","../src/aframeComponents/leftOculusController.js","../src/aframeComponents/rightOculusController.js","../src/index.js"],"sourcesContent":["// service to manage histogram views\n/** @module JsrootSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre JSROOT.\n * @class\n */\nclass JsrootSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Zobrazenie projekcie pre zvolený bin histogramu.\n * @param {Object} binData - Objekt obsahuje dáta o zvolenom bine\n */\n showBinProjection(binData) {\n this.#subject.next(binData)\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getServiceEvent() {\n return this.#subject.asObservable()\n }\n}\n\nconst jsrootSubject = new JsrootSubject()\nexport default jsrootSubject\n","// service for creating histogram projections\n/** @module JsrootService */\n\n// eslint-disable-next-line no-unused-vars\nimport { createDemoTH2Histogram } from '../../example/src/utilsScripts/utilsPageScript'\n\n/**\n * Servis pre vytváranie JSROOT projekcií.\n * @class\n */\nclass JsrootService {\n #jsroot = null\n\n /**\n * Funkcia zabezpečí nastavenie objektu JSROOT servisu.\n * @param {Object} JSROOT - Object JSROOT\n * @return {void}\n */\n set jsrootLibrary(JSROOT) {\n this.#jsroot = JSROOT\n }\n\n get jsrootLibrary() {\n return this.#jsroot\n }\n\n // create projection depends on selected axis\n /**\n * Funkcia pre vytvorenie TH1 projekcie.\n * @param {string} projectionAxis - Hlaná os podľa, ktorej sa vytvorí projekcia\n * @param {Object} info - Objekt obsahujúci potrebné objekt histogramu a objekt obsahujúci informácie o zvolenom bine\n * @param {string} idTargetElm - Identifikátor cieľovej entity, do ktorej sa vykreslí výsledná projekcia\n * @param {Array} axisArray - Pole osí, obsahuje 2 osi na základe ktorých sa projekcia vytvorí\n * @return {void}\n */\n createTH1Projection(projectionAxis, info, idTargetElm, axisArray) {\n if (!info || !projectionAxis || this.#jsroot === null) {\n return\n }\n\n const projectionTargetAxis = projectionAxis === axisArray[0]\n const primary = projectionTargetAxis ? axisArray[0] : axisArray[1]\n const secondary = projectionTargetAxis ? axisArray[1] : axisArray[0]\n\n const primaryAxis = `f${secondary}axis`\n const secondaryAxis = `f${primary}axis`\n const binAxis = `${primary.toLowerCase()}Pos`\n\n // console.log(secondaryAxis)\n // console.log(binAxis)\n // projection X\n\n const h1 = this.#jsroot.createHistogram(\n 'TH1I',\n info.obj[primaryAxis].fNbins\n )\n\n // fill important histogram info\n h1.fXaxis.fXmin = info.obj[primaryAxis].fXmin\n h1.fXaxis.fXmax = info.obj[primaryAxis].fXmax\n h1.fXaxis.fTitle = info.obj[primaryAxis].fTitle\n h1.fXaxis.fLabels = info.obj[primaryAxis].fLabels\n\n const currLabel =\n info.obj[secondaryAxis].fLabels?.arr.length > 0\n ? info.obj[secondaryAxis].fLabels.arr[info.bin[binAxis] - 1].fString\n : ''\n\n for (let n = 0; n < info.obj[primaryAxis].fNbins; n++) {\n console.log(info.obj)\n h1.setBinContent(\n n + 1,\n projectionAxis === axisArray[0]\n ? info.obj.getBinContent(info.bin[binAxis], n + 1)\n : info.obj.getBinContent(n + 1, info.bin[binAxis])\n )\n }\n h1.fName = 'px'\n h1.fTitle =\n `Projection of bin=${projectionAxis}` +\n (info.bin.binName !== '' ? info.bin.name : info.bin[binAxis] - 1) +\n `[` +\n currLabel +\n `]`\n this.#jsroot.redraw(idTargetElm, h1)\n }\n\n /**\n * Funkcia pre prečítanie objektu projekcie z adresárovej štruktúry získanej z root súboru.\n * @param {string} projectionAxis - Hlaná os podľa, ktorej sa vytvorí projekcia\n * @param {Object} info - Objekt obsahujúci potrebné objekt histogramu a objekt obsahujúci informácie o zvolenom bine\n * @param {string} idTargetElm - Identifikátor cieľovej entity, do ktorej sa vykreslí výsledná projekcia\n * @param {Array} axisArray - Pole osí, obsahuje 2 osi na základe ktorých sa projekcia vytvorí\n * @param {Object} projections - Adresárová štruktúra obsahujúca projekcie\n * @param {number} projIndex - Index projekcie, ktorá sa má vykresliť\n * @return {void}\n */\n openTH1Projection(\n projectionAxis,\n info,\n idTargetElm,\n axisArray,\n projections,\n projIndex\n ) {\n // const xLength = info.obj.fXaxis.fXmax / info.obj.fXaxis.fNbins\n // const yLength = info.obj.fYaxis.fXmax / info.obj.fYaxis.fNbins\n // const xBin = info.bin.xMin / xLength\n // const yBin = info.bin.yMin / yLength\n const xBin = info.bin.xPos - 1\n const yBin = info.bin.yPos - 1\n try {\n const projection =\n projections.fFolders.arr[xBin].fFolders.arr[yBin].fFolders.arr[\n projIndex || 0\n ]\n this.#jsroot.redraw(idTargetElm, projection)\n setTimeout(() => {\n this.displayImageOfProjection(\n 'projectionContainer',\n 'th-mapping',\n '500px',\n '400px'\n )\n }, 200)\n } catch (e) {\n console.log(\"you don't have this projection\")\n }\n }\n\n /**\n * Funkcia získa aktuálny náhľad projekcie SVG elementu a zobrazí ju na panely vo VR\n * @param {string} idSourceElement - Identifikátor zdrojového elementu obsahujúceho SVG projekciu\n * @param {string} idTargetElement - Identifikátor cieľového elementu vo VR, kde bude vložený náhľad projekcie\n * @param {number} width - Šírka pre získanie náhľadu projekcie\n * @param {number} height - Výška pre získanie náhľadu projekcie\n * @return {void}\n */\n displayImageOfProjection(idSourceElement, idTargetElement, width, height) {\n try {\n const sourceSvgElement =\n document.getElementById(idSourceElement).firstElementChild\n const targetElement = document.getElementById(idTargetElement)\n const canvas = document.createElement('canvas')\n // set width an height of elements\n sourceSvgElement.setAttribute('height', height)\n sourceSvgElement.setAttribute('width', width)\n canvas.setAttribute('height', height)\n canvas.setAttribute('width', width)\n\n // eslint-disable-next-line no-undef\n const svgString = new XMLSerializer().serializeToString(sourceSvgElement)\n const ctx = canvas.getContext('2d')\n ctx.fillStyle = '#ffffff'\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n // eslint-disable-next-line no-undef\n const DOMURL = self.URL || self.webkitURL || self\n // eslint-disable-next-line no-undef\n const img = new Image()\n // create object url of canvas using blob object\n // eslint-disable-next-line no-undef\n const svg = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' })\n const url = DOMURL.createObjectURL(svg)\n\n // the function is executed after load url of the image\n img.onload = function () {\n // draw png image and create url\n ctx.drawImage(img, 0, 0)\n const png = canvas.toDataURL('image/png')\n // targetElement.setAttribute('src', png)\n targetElement.setAttribute('material', `src`, png)\n DOMURL.revokeObjectURL(png)\n }\n img.src = url\n } catch (e) {}\n }\n}\n\nconst jsrootService = new JsrootService()\nexport default jsrootService\n","import React, { useState, useEffect } from 'react'\nimport jsrootSubject from '../../observables/jsrootSubject'\nimport jsrootService from '../../services/jsrootService'\n\n// styles\nconst styles = {\n box: {\n display: 'block',\n margin: 'auto',\n width: '90%',\n textAlign: 'center',\n align: 'center',\n paddingTop: 4\n },\n projection: {\n display: 'block',\n margin: 'auto',\n width: '420px',\n height: '350px'\n },\n form: {\n display: 'block',\n width: '60%',\n margin: 'auto',\n paddingTop: '2%',\n paddingBottom: '2%'\n },\n label: {\n display: 'block'\n },\n input: {\n display: 'block',\n width: '85%',\n margin: 'auto',\n height: 40,\n border: '1px solid grey',\n borderRadius: 3,\n textAlign: 'center',\n fontSize: 20,\n color: 'black',\n opacity: 0.8\n }\n}\n\n/**\n * React komponent pre zobrazenie bočného panelu s JSROOT projekciami.\n * Zobrazenie SVG elementu s histogramom a potrebným formulárom pre nastavenie atribútov.\n * @component\n * @param {Object} histogram - Objekt histogramu, z ktorého je potrebné spraviť projekciu\n * @param {Array} projectionAxes - Pole obsahuje názvy osí, podľa ktorých sa má vytvoriť projekcia\n * @param {Object} projections - Objekt obsahujúci súborovú štruktúru s projekciami\n * @param {Number} projIndex - Index projekcie v poli, ktorá sa má zobraziť\n * @example\n * const histogram = {\n * gitlab: // vytvorený alebo prečítany z root súboru JSROOT-tom\n * projections: // prečítaná z root súboru JSROOT-tom\n * }\n * return (\n * <JSrootHistogram\n * histogram={histogram.gitlab}\n * projectionAxes={['X','Y']}\n * projections={histogram.projections}\n * projIndex={0}/>\n * )\n */\nconst JsrootHistogram = ({\n histogram,\n projectionAxes,\n projections,\n projIndex\n}) => {\n let subscription\n const [axis, setAxis] = useState('X')\n const [selectedBin, setSelectedBin] = useState(null)\n\n // const histogram = props.histogram object of histogram in props\n const handleInputChange = (event) => {\n setAxis(event.target.value)\n }\n\n // handle subscription\n const handleSubscription = (data) => {\n setSelectedBin(data)\n }\n\n const renderForm = () => {\n return (\n <div className='form-group' style={styles.form}>\n <label htmlFor='formGroupExampleInput' style={styles.label}>\n Projection axis\n </label>\n <select\n onChange={handleInputChange}\n className='form-control'\n id='axisProjection'\n style={styles.input}\n >\n <option value={projectionAxes[0]}>\n {histogram[`f${projectionAxes[0]}axis`].fTitle\n ? histogram[`f${projectionAxes[0]}axis`].fTitle\n : projectionAxes[0]}\n </option>\n <option value={projectionAxes[1]}>\n {histogram[`f${projectionAxes[1]}axis`].fTitle\n ? histogram[`f${projectionAxes[1]}axis`].fTitle\n : projectionAxes[1]}\n </option>\n </select>\n </div>\n )\n }\n\n const createAndDisplayProjection = () => {\n if (projections !== null) {\n jsrootService.openTH1Projection(\n axis,\n { obj: histogram, bin: selectedBin },\n 'projectionContainer',\n projectionAxes,\n projections,\n projIndex\n )\n } else {\n jsrootService.createTH1Projection(\n axis,\n { obj: histogram, bin: selectedBin },\n 'projectionContainer',\n projectionAxes\n )\n setTimeout(() => {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n 'th-mapping',\n '500px',\n '500px'\n )\n }, 500)\n }\n }\n\n // subscribe for bin data\n useEffect(() => {\n jsrootService.jsrootLibrary = window.JSROOT\n setSelectedBin(null)\n\n subscription = jsrootSubject.getServiceEvent().subscribe(handleSubscription)\n // console.log(histogram)\n return () => subscription.unsubscribe()\n }, [histogram])\n\n // update projection\n useEffect(() => {\n if (selectedBin != null) createAndDisplayProjection()\n }, [axis, selectedBin, projections])\n\n return (\n <div style={styles.box}>\n {projections === null && selectedBin !== null && renderForm()}\n <div id='projectionContainer' style={styles.projection} />\n </div>\n )\n}\n\nexport default JsrootHistogram\n","// service to manage scene camera\n/** @module CameraSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre kameru.\n * @class\n */\nclass CameraSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia signálu s hodnotou špecifikujúcou vstupné zariadenie pre zobrazenie prišných panelov.\n * @return {void}\n */\n setVisibilityOfBanners(inputDevice) {\n this.#subject.next({\n device: inputDevice\n })\n }\n\n /**\n * Publikácia signálu s hodnotou \"shift\" pre posúvanie panelov.\n * @return {void}\n */\n shiftBanners() {\n this.#subject.next('shift')\n }\n\n /**\n * Publikácia signálu s hodnotou \"show\" pre zobrazenie prislúchajúcich panelov.\n * @return {void}\n */\n setUserState() {\n this.#subject.next('show')\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getCameraSubject() {\n return this.#subject.asObservable()\n }\n}\n\nconst cameraSubject = new CameraSubject()\nexport default cameraSubject\n","// service to manage camera\n/** @module CameraService */\n\n/**\n * Servis pre ovládanie a manipuláciu pozície kamery.\n * @class\n */\nexport class CameraService {\n #cameraWrapper\n constructor() {\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n }\n\n /**\n * Zmena vertikálnej polohy kamery.\n * @param {boolean} moveUp - Ak je True, kamera vyššie ak je False kamera nižšie\n * @param {number} speed - Rýchlosť zmeny pozície kamery\n * @return {void}\n */\n verticalMoveCamera = (moveUp, speed) => {\n // if we have not a cameraWrapper\n if (this.#cameraWrapper === null)\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n if (this.#cameraWrapper !== null) {\n if (moveUp) {\n this.#cameraWrapper.object3D.position.y += speed\n } else {\n if (this.#cameraWrapper.object3D.position.y > 0)\n this.#cameraWrapper.object3D.position.y -= speed\n }\n }\n }\n\n /**\n * Zmena horizontálnej polohy kamery.\n * @param {string} axis - Os po ktorej je ralizovaný pohyb kamery\n * @param {number} increment - Hodnota posunu kamery\n * @param {number} speed - Rýchlosť zmeny pozície kamery\n * @return {void}\n */\n horizontalMoveCamera = (axis, increment, speed) => {\n // if we have not a cameraWrapper\n if (this.#cameraWrapper === null)\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n if (this.#cameraWrapper !== null) {\n if (increment) {\n this.#cameraWrapper.object3D.position[axis] += speed\n } else {\n this.#cameraWrapper.object3D.position[axis] -= speed\n }\n }\n }\n\n /**\n * Zmena vertikálnej polohy kamery.\n * @param {HTMLElement} elm - Cieľový element\n * @param {Object} offset - Ofsety zobrazenej sekcie\n * @param {number} rotation - Rotácia kamery\n * @return {void}\n */\n #setVerticalOffset = (elm, offset, rotation) => {\n if (this.#cameraWrapper !== null && elm !== null) {\n // this.#cameraWrapper.object3D.rotation.y = rotation\n const newXPos = elm.object3D.position.x + 1 * elm.object3D.position.x\n const newZPos = elm.object3D.position.z + 1 * elm.object3D.position.z\n const newYPos = offset\n // this.#cameraWrapper.object3D.position.x = newXPos + 1\n // this.#cameraWrapper.object3D.position.z = newZPos + 1\n // this.#cameraWrapper.object3D.position.y = newYPos\n this.#cameraWrapper.setAttribute(\n 'animation',\n `property: position; to: ${newXPos + 1} ${newYPos} ${\n newZPos + 1\n }; dur: 100;`\n )\n this.#cameraWrapper.setAttribute(\n 'animation__1',\n `property: rotation; to: ${\n this.#cameraWrapper.object3D.rotation.x\n } ${rotation} ${this.#cameraWrapper.object3D.rotation.z}; dur: 100;`\n )\n }\n }\n\n /**\n * Zmena vertikálnej polohy kamery podľa ofsetov.\n * @param {Object} offsets - Ofsety zobrazenej sekcie\n * @return {void}\n */\n setCameraPosition = (offsets) => {\n if (this.#cameraWrapper !== null) {\n let newZPos = this.#cameraWrapper.object3D.position.y\n if (offsets.zOffset !== undefined) {\n // this.#cameraWrapper.object3D.position.y = offsets.zOffset + 2\n newZPos = offsets.zOffset * 2\n }\n const newXPos = offsets.xOffset + offsets.xOffset\n const newYPos = offsets.yOffset + offsets.yOffset\n // this.#cameraWrapper.object3D.position.x = newXPos - 3\n // this.#cameraWrapper.object3D.position.z = newYPos - 3\n setTimeout(() => {\n this.#cameraWrapper.setAttribute(\n 'animation',\n `property: position; to: ${newXPos - 3} ${newZPos} ${\n newYPos - 3\n }; dur: 40;`\n )\n }, 1800)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície.\n * @return {void}\n */\n setPredefinedDownPosition = () => {\n // get target element\n const labelElement = document.getElementById('downLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 180)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedUpPosition = () => {\n // get target element\n const labelElement = document.getElementById('upLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 0)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedRightPosition = () => {\n // get target element\n const labelElement = document.getElementById('rightLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 90)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedLeftPosition = () => {\n // get target element\n const labelElement = document.getElementById('leftLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 270)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedDownPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('downLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 180)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedUpPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('upLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 0)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedRightPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('rightLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 90)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedLeftPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('leftLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 270)\n }\n }\n}\n","// service to manage histogram views\n/** @module HistogramSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre histogram.\n * Prezobrazovanie sekcií histogramu.\n * @class\n */\nclass HistogramSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia signálu pre prezobrazenie sekcie histogramu.\n * @param {string} axis - Názov osi podľa, po ktorej sa budú posúvať ofsety\n * @param {string} histogramType - Typ histogramu (TH2 alebo TH3)\n * @param {boolean} increment - Ak je True tak sa hodnota prípočíta k ofsetu, ak False tak sa odpočíta\n * @param {boolean} defaultRange - Ak je True tak sa použije predvolená hodnota (1), ak False tak nastavený rozsah\n * @return {void}\n */\n changeHistogramSectionByOffset(axis, histogramType, increment, defaultRange) {\n this.#subject.next({\n name: histogramType,\n axis: axis,\n increment: increment,\n defaultRange: defaultRange\n })\n }\n\n /**\n * Publikácia signálu pre zmenu vizuálneho módu.\n * @param {string} typeFunction - Názov funkcie podľa, ktorej sa zmení vizualizačný mód\n * @param {string} histogramType - Typ histogramu (TH2 alebo TH3)\n * @return {void}\n */\n changeHistogramFunction(typeFunction, histogramType) {\n this.#subject.next({\n fFunction: typeFunction,\n name: histogramType\n })\n }\n\n /**\n * Publikácia signálu pre zmenu zobrazeného údaju na bine.\n * @param {string} histogramType - Typ histogramu (TH2 alebo TH3)\n * @return {void}\n */\n changeTypeOfBinMark(value, histogramType) {\n this.#subject.next({\n binMarkMode: value,\n name: histogramType\n })\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getChangedSection() {\n return this.#subject.asObservable()\n }\n}\n\nconst histogramTH2Service = new HistogramSubject()\nconst histogramTH3Service = new HistogramSubject()\nexport { histogramTH2Service, histogramTH3Service }\n","// service to manage histogram views\n/** @module BinSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre biny.\n * @class\n */\nclass BinSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia signálnu s hodnotou True pre označenie daného binu.\n * @return {void}\n */\n saveSelectedBinToLocalStorage() {\n this.#subject.next(true)\n }\n\n /**\n * Publikácia signálnu s hodnotou False pre odznačenie daného binu.\n * @return {void}\n */\n deleteBinFromLocalStorage() {\n this.#subject.next(false)\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getKeyboardEvent() {\n return this.#subject.asObservable()\n }\n}\n\nconst binSubject = new BinSubject()\nexport default binSubject\n","/* add listeners for keyboard controller */\n/**\n * Modul obsahuje implementované metódy, ktoré reagujú na vstupy používateľa.\n * Funkcie sú určené pre komponenty slúžiace definovanie listenerov pre klávesnicu počítača.\n * @module keyboardController\n */\nimport { Subject } from 'rxjs'\nimport { CameraService } from '../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../observables/histogramSubject'\nimport binSubject from '../observables/binSubject'\nimport jsrootService from '../services/jsrootService'\nimport cameraSubject from '../observables/cameraSubject'\n\nconst keyPressed = {}\nlet cameraService = new CameraService()\nlet aframeObj\nlet geoAttributes\nconst toolsSelector = new Subject()\nlet activeTool\n\n/**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @param {string} property - Definuje názov atribútu histogramu (poloha, rozmer, rotácia), ktorý bude modifikovaný\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst handlePositioning = (property, event) => {\n let difference = 0.2\n\n if (property.name === 'scale') difference = 0.01\n else if (property.name === 'rotation') difference = 2\n\n if (event.key === 'ArrowDown') {\n property.xValue = property.xValue + difference\n } else if (event.key === 'ArrowUp') {\n property.xValue = property.xValue - difference\n } else if (event.key === '=') {\n property.yValue = property.yValue + difference\n } else if (event.key === '-') {\n property.yValue = property.yValue - difference\n } else if (event.key === 'ArrowRight') {\n property.zValue = property.zValue + difference\n } else if (event.key === 'ArrowLeft') {\n property.zValue = property.zValue - difference\n }\n aframeObj.setAttribute(\n property.name,\n `${property.xValue} ${property.yValue} ${property.zValue}`\n )\n}\n\n// handle histogram section change by default range = 1\n/**\n * Zmena zobrazovanej sekcie histogramu o predvolený rozsah (1) na klávesnici\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst handleChangeHistogramSectionByDefaultRange = (event) => {\n if (event.key === 'k' || event.key === 'K') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'i' || event.key === 'I') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n true\n )\n } else if (event.key === 'u' || event.key === 'U') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n true\n )\n } else if (event.key === 'o' || event.key === 'O') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'l' || event.key === 'L') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'j' || event.key === 'J') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n true\n )\n }\n}\n\n// handle histogram section change by user's range = user sets this range\n/**\n * Zmena zobrazovanej sekcie histogramu o vlastný rozsah (podľa nastavení používateľa) na klávesnici\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst handleChangeHistogramSectionByOwnRange = (event) => {\n if (event.key === 'k' || event.key === 'K') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'i' || event.key === 'I') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n false\n )\n } else if (event.key === 'u' || event.key === 'U') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n false\n )\n } else if (event.key === 'o' || event.key === 'O') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'l' || event.key === 'L') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'j' || event.key === 'J') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n false\n )\n }\n}\n\n// key press handler\n/**\n * Funkcia, vukonávajúca sa na klik používateľa.\n * Funkcia detekuje, uloží stlačenú klávesu do poľa stlašených kláves a zavolá náležitú funkciu\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst keyPressHandlerFunction = (event) => {\n keyPressed[event.key] = true\n\n if (keyPressed.Z || keyPressed.z) {\n handlePositioning(geoAttributes[0], event)\n }\n if (keyPressed.X || keyPressed.x) {\n handlePositioning(geoAttributes[1], event)\n }\n if (keyPressed.C || keyPressed.c) {\n handlePositioning(geoAttributes[2], event)\n }\n if (keyPressed.Shift) {\n handleChangeHistogramSectionByOwnRange(event)\n }\n handleChangeHistogramSectionByDefaultRange(event)\n // change camera up\n if (event.key === ' ') {\n cameraService.verticalMoveCamera(true, 0.3)\n }\n // change camera down\n if (event.shiftKey) {\n cameraService.verticalMoveCamera(false, 0.3)\n }\n if (event.key === '1') {\n // cameraService.setPredefinedDownPosition()\n toolsSelector.next(1)\n activeTool = 1\n }\n if (event.key === '2') {\n // cameraService.setPredefinedUpPosition()\n toolsSelector.next(2)\n activeTool = 2\n }\n\n if (event.key === '3') {\n // cameraService.setPredefinedRightPosition()\n toolsSelector.next(3)\n activeTool = 3\n }\n if (event.key === '4') {\n // cameraService.setPredefinedLeftPosition()\n toolsSelector.next(4)\n activeTool = 4\n }\n if (event.key === '5') {\n // cameraService.setPredefinedDownPositionWithOffset()\n toolsSelector.next(5)\n activeTool = 5\n }\n if (event.key === '6') {\n // cameraService.setPredefinedUpPositionWithOffset()\n toolsSelector.next(6)\n activeTool = 6\n }\n if (event.key === '7') {\n // cameraService.setPredefinedRightPositionWithOffset()\n toolsSelector.next(7)\n activeTool = 7\n }\n if (event.key === '8') {\n // cameraService.setPredefinedLeftPositionWithOffset()\n toolsSelector.next(8)\n activeTool = 8\n }\n if (event.key === '9') {\n // cameraService.setPredefinedLeftPositionWithOffset()\n toolsSelector.next(9)\n activeTool = 9\n }\n if (event.key === '0') {\n // cameraService.setPredefinedLeftPositionWithOffset()\n toolsSelector.next(0)\n activeTool = 0\n }\n\n if (event.key === 'Enter') {\n binSubject.saveSelectedBinToLocalStorage()\n ;[\n 'th-mapping',\n 'bannerId_1',\n 'bannerId_2',\n 'bannerId_3',\n 'bannerId_4'\n ].forEach((targetId) => {\n if (document.getElementById(targetId) !== null) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n targetId,\n '500px',\n '400px'\n )\n }\n })\n }\n if (event.key === 'r' || event.key === 'R') {\n binSubject.deleteBinFromLocalStorage()\n }\n if (event.key === 'm' || event.key === 'M') {\n histogramTH2Service.changeHistogramFunction('feet', 'TH2')\n }\n if (event.key === 'n' || event.key === 'N') {\n histogramTH2Service.changeHistogramFunction('default', 'TH2')\n }\n if (event.key === 'c' || event.key === 'C') {\n cameraSubject.setUserState()\n }\n if (event.key === 'v' || event.key === 'V') {\n cameraSubject.setVisibilityOfBanners('keyboard')\n }\n if (event.key === 'x' || event.key === 'X') {\n cameraSubject.shiftBanners()\n }\n if (event.key === 'x' || event.key === 'X') {\n cameraSubject.shiftBanners()\n }\n}\n\nconst switchDisplayModeOnBin = (event) => {\n event.preventDefault()\n\n let binDisplayMode\n if (event.deltaY > 0) {\n binDisplayMode = 1\n } else {\n binDisplayMode = -1\n }\n\n histogramTH2Service.changeTypeOfBinMark(binDisplayMode, 'TH2')\n histogramTH3Service.changeTypeOfBinMark(binDisplayMode, 'TH3')\n}\n\nconst getActiveTool = () => {\n return activeTool\n}\n\n// delete function key from array\n/**\n * Funkcia vymaže klávesu z poľa stlačených kláves\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst keyReleaseHandlerFunction = (event) => {\n delete keyPressed[event.key]\n}\n\n/**\n * Funkcia inicializuje všetky údaje o histograme a samotnú referenciu na histogram\n * @param {Object} data - Objekt obsahuje všetky atribúty (rozmer, pozícia, rotácia)\n * @param {HTMLElement} object - Referencia na element histogramu, ktorý sa má modifikovať\n * @return {void}\n */\nconst initialKeyboardController = (data, object) => {\n aframeObj = object\n geoAttributes = [data.position, data.scale, data.rotation]\n // if (this.#cameraService === null) this.#cameraService = new CameraService()\n // set initial position, scale, rotation of the histogram\n for (let i = 0; i < 3; i++) {\n aframeObj.setAttribute(\n geoAttributes[i].name,\n `${geoAttributes[i].xValue} ${geoAttributes[i].yValue} ${geoAttributes[i].zValue}`\n )\n }\n}\n\n/**\n * Funkcia aktualizuje referenciu servis kamery\n * @return {void}\n */\nconst keyboardUpdateCameraReference = () => {\n cameraService = new CameraService()\n}\n\nexport {\n initialKeyboardController,\n keyPressHandlerFunction,\n keyReleaseHandlerFunction,\n keyboardUpdateCameraReference,\n switchDisplayModeOnBin,\n toolsSelector,\n getActiveTool\n}\n","/* object for manipulating local storage */\n/** @module NdmVrStorageService */\n\n/**\n * Servis pre ovládanie lokálneho úložiska.\n * Ukladanie a načítavanie dát o ofsetoch a histograme.\n * @class\n */\nexport class NdmVrStorageService {\n #storage\n #camera\n #selectedBins = []\n\n /**\n * Nastavenie referencií a potrebných identifikátorov.\n * Načítanie poľa označených binov z lokalneho úložiska, ak nejaké sú.\n * @return {void}\n */\n constructor() {\n this.#storage = window.localStorage\n this.#camera = document.getElementById('cameraWrapper')\n this.#selectedBins = this.getBinsFromLocalStorage()\n }\n\n /*\n initLocalStorage() {\n if (!this.loadProperty('TH2')) {\n this.storeProperty('TH2', {})\n }\n if (!this.loadProperty('TH3')) {\n this.storeProperty('TH3', {})\n }\n if (!this.#storage.getItem('rootFile')) {\n this.storeFilePath(\n 'https://eos.ndmspc.io/eos/ndmspc/scratch/test/gitlab-hist.root'\n )\n }\n this.storeTH2Offsets(1, 1, 6)\n this.storeTH3Offsets(1, 1, 1, 6)\n }\n */\n\n /**\n * Funkcia pre uloženie binu do zoznamu označených binov.\n * @param {Object} binData - Objekt obsahujúci všetky dáta o zvolenom bine\n * @return {void}\n */\n storeCurrentBinToLocalStorage(binData) {\n this.#storage.setItem('currentBin', JSON.stringify(binData))\n }\n\n getCurrentBinFromLocalStorage() {\n const currentBin = JSON.parse(this.#storage.getItem('currentBin'))\n if (currentBin === undefined || currentBin === '') {\n return null\n }\n return currentBin\n }\n\n /**\n * Funkcia pre načítanie aktuálnych informácií o histograme.\n * @param {string} property - Objekt označujúci typ histogramu, pre ktorý sa majú získať ofsety\n * @return {Object} - Objekt obsahujúci informácie o sekciách určitého histogramu\n */\n loadProperty(property) {\n return JSON.parse(this.#storage.getItem(property))\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme.\n * @param {string} property - Objekt označujúci typ histogramu, pre ktorý sa majú získať ofsety\n * @param {Object} object - Objekt obsahujúci informácie o sekciách určitého histogramu\n * @return {void}\n */\n storeProperty(property, object) {\n this.#storage.setItem(property, JSON.stringify(object))\n }\n\n /*\n storeTH2HistogramLimits(histogram) {\n const object = this.loadProperty('TH2')\n object.binScales = this.#getBinTH2Scales(histogram)\n object.limits = {\n xOffset: histogram.fXaxis.fXmax / object.binScales.xWidth,\n yOffset: histogram.fYaxis.fXmax / object.binScales.yWidth\n }\n this.storeProperty('TH2', object)\n }\n\n storeTH3HistogramLimits(histogram) {\n const object = this.loadProperty('TH3')\n object.binScales = this.#getBinTH3Scales(histogram)\n object.limits = {\n xOffset: histogram.fXaxis.fXmax / object.binScales.xWidth,\n yOffset: histogram.fYaxis.fXmax / object.binScales.yWidth,\n zOffset: histogram.fZaxis.fXmax / object.binScales.zWidth\n }\n this.storeProperty('TH3', object)\n }\n\n storeHistogramLimits(type, histogram) {\n if (type.includes('TH3') || type.includes('th3')) {\n this.storeTH3HistogramLimits(histogram)\n } else if (type.includes('TH2') || type.includes('th2')) {\n this.storeTH2HistogramLimits(histogram)\n }\n }\n\n loadTH3Limits() {\n const object = this.loadProperty('TH3')\n return object.limits\n }\n\n loadTH2Limits() {\n const object = this.loadProperty('TH2')\n return object.limits\n }\n\n loadLimits(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n return this.loadTH3Limits()\n } else if (type.includes('TH2') || type.includes('th2')) {\n return this.loadTH2Limits()\n }\n }\n */\n /*\n #getBinTH2Scales = (histogram) => {\n const xWidth = histogram.fXaxis.fXmax / histogram.fXaxis.fNbins\n const yWidth = histogram.fYaxis.fXmax / histogram.fYaxis.fNbins\n return {\n xWidth: xWidth,\n yWidth: yWidth\n }\n }\n\n #getBinTH3Scales = (histogram) => {\n const xcenter = histogram.fXaxis.GetBinCenter(1)\n const xmin = histogram.fXaxis.GetBinLowEdge(1)\n const xmax = xcenter + (xcenter - xmin)\n const xWidth = xmax - xmin\n const ycenter = histogram.fYaxis.GetBinCenter(1)\n const ymin = histogram.fYaxis.GetBinLowEdge(1)\n const ymax = ycenter + (ycenter - ymin)\n const yWidth = ymax - ymin\n const zcenter = histogram.fZaxis.GetBinCenter(1)\n const zmin = histogram.fZaxis.GetBinLowEdge(1)\n const zmax = zcenter + (zcenter - zmin)\n const zWidth = zmax - zmin\n return {\n xWidth: xWidth,\n yWidth: yWidth,\n zWidth: zWidth\n }\n }\n */\n /*\n loadBinScale(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n const object = this.loadProperty('TH3')\n return object.binScales\n } else if (type.includes('TH2') || type.includes('th2')) {\n const object = this.loadProperty('TH2')\n return object.binScales\n }\n }\n */\n\n initHistogramData(histogram) {\n if (histogram._typename.includes('TH3')) {\n this.storeTH3HistogramLimits(histogram)\n } else if (histogram._typename.includes('TH2')) {\n this.storeTH2HistogramLimits(histogram)\n }\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme TH2.\n * @param {number} xOffset - Hodnota reprezentujúca ofset na osi X\n * @param {number} yOffset - Hodnota reprezentujúca ofset na osi Y\n * @param {number} range - Hodnota reprezentujúca rozsah binov na osiach\n * @return {void}\n */\n storeTH2Offsets(xOffset, yOffset, range) {\n let object = this.loadProperty('TH2')\n let section\n if (object === null) {\n object = {}\n section = {\n name: 'TH2',\n xOffset: 1,\n yOffset: 1,\n range: 8\n }\n } else {\n section = {\n name: 'TH2',\n xOffset: xOffset,\n yOffset: yOffset,\n range: range\n }\n }\n object.section = section\n this.storeProperty('TH2', object)\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme TH3.\n * @param {number} xOffset - Hodnota reprezentujúca ofset na osi X\n * @param {number} yOffset - Hodnota reprezentujúca ofset na osi Y\n * @param {number} zOffset - Hodnota reprezentujúca ofset na osi Z\n * @param {number} range - Hodnota reprezentujúca rozsah binov na osiach\n * @return {void}\n */\n storeTH3Offsets(xOffset, yOffset, zOffset, range) {\n let object = this.loadProperty('TH3')\n let section\n if (object === null) {\n object = {}\n section = {\n name: 'TH3',\n xOffset: 1,\n yOffset: 1,\n zOffset: 1,\n range: 4\n }\n } else {\n section = {\n name: 'TH3',\n xOffset: xOffset,\n yOffset: yOffset,\n zOffset: zOffset,\n range: range\n }\n }\n object.section = section\n this.storeProperty('TH3', object)\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme.\n * @param {Object} section - Objekt obsahujúci ofsety a rozsah pre histogramy. Objekt obsahuje aj typ histogramu podľa ktorého sa uloží správna sekcia do lokálneho úložiska\n * @return {void}\n */\n storeOffsets(section) {\n if (section.name.includes('TH3') || section.name.includes('th3')) {\n this.storeTH3Offsets(\n section.xOffset,\n section.yOffset,\n section.zOffset,\n section.range\n )\n } else if (section.name.includes('TH2') || section.name.includes('th2')) {\n this.storeTH2Offsets(section.xOffset, section.yOffset, section.range)\n }\n }\n\n /**\n * Uloženie názvu root súboru.\n * @param {string} filePath - URL cesta k súboru\n * @return {void}\n */\n storeFilePath(filePath) {\n this.#storage.setItem('rootFile', filePath)\n }\n\n /**\n * Načítanie názvu root súboru.\n * @return {string} - URL root súboru\n */\n loadFilePath() {\n const filename = this.#storage.getItem('rootFile')\n if (filename === null || filename === undefined) {\n // throw new Error('The filename is empty')\n return 'defaultHistogram'\n }\n return filename\n }\n\n /**\n * Načítanie informácií o TH2 histograme\n * @return {Object} - Object obsahujúci ofsety, rozsah, typ histogramu. Ak sa nenachádza v lokálnom uložisku vracia null\n */\n loadTH2Offsets() {\n const object = this.loadProperty('TH2')\n if (object !== null) {\n return object.section\n } else {\n return null\n }\n }\n\n /**\n * Načítanie informácií o TH3 histograme.\n * @return {Object} - Object obsahujúci ofsety, rozsah, typ histogramu. Ak sa nenachádza v lokálnom uložisku vracia null\n */\n loadTH3Offsets() {\n const object = this.loadProperty('TH3')\n if (object !== null) {\n return object.section\n } else {\n return null\n }\n }\n\n /**\n * Načítanie informácií o histograme.\n * @param {string} type - Typ histogramu podľa, ktorého sa získa správny objekt obsahujúci informácie o histograme\n * @return {Object} - Object obsahujúci ofsety, rozsah, typ histogramu. Ak sa nenachádza v lokálnom uložisku vracia null\n */\n loadOffsets(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n return this.loadTH3Offsets()\n } else if (type.includes('TH2') || type.includes('th2')) {\n return this.loadTH2Offsets()\n }\n }\n\n /*\n #getValidOffset = (\n histogramType,\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n ) => {\n if (increment) {\n if (defaultRange) {\n offsets[axisOffset] += 1\n } else {\n offsets[axisOffset] += offsets.range + 1\n }\n if (limits[axisOffset] <= offsets.range) {\n offsets[axisOffset] = 1\n return offsets\n }\n if (offsets[axisOffset] > limits[axisOffset] - offsets.range - 1) {\n offsets[axisOffset] = limits[axisOffset] - offsets.range\n return offsets\n }\n } else {\n if (offsets[axisOffset] - offsets.range + 1 <= 1) {\n offsets[axisOffset] = 1\n return offsets\n }\n if (defaultRange) {\n offsets[axisOffset] -= 1\n } else {\n offsets[axisOffset] -= offsets.range + 1\n }\n }\n return offsets\n }\n */\n\n /*\n editTH2OffsetByOffset(axisOffset, increment, defaultRange) {\n const limits = this.loadTH2Limits()\n const offsets = this.loadTH2Offsets()\n const result = this.#getValidOffset(\n 'TH2',\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n // this.storeTH2Offsets(result.xOffset, result.yOffset, result.range)\n return result\n }\n */\n\n /*\n editTH3OffsetByOffset(axisOffset, increment, defaultRange) {\n const limits = this.loadTH3Limits()\n const offsets = this.loadTH3Offsets()\n const result = this.#getValidOffset(\n 'TH3',\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n // this.storeTH3Offsets(result.xOffset, result.yOffset, result.zOffset, result.range)\n return result\n }\n */\n\n // set offset value\n /*\n setOffsetValue = (typeName, range) => {\n if (typeName.includes('TH2')) {\n if (range > 16) {\n return 16\n } else if (range < 2) {\n return 2\n } else {\n return range\n }\n } else if (typeName.includes('TH3')) {\n if (range > 10) {\n return 10\n } else if (range < 2) {\n return 2\n } else {\n return range\n }\n }\n }\n */\n\n #deleteCurrentBin = (binData) => {\n return this.#selectedBins.filter((item) => item.id !== binData.id)\n }\n\n // check containing bin\n /**\n * Overenie, či je bin v poli označených binov.\n * @param {Object} binData - Objekt obsahujúci informácie o bine\n * @return {boolean} - Ak je True bin je v poli označených binov, ak False bin nie je v poli označených binov\n */\n containThisBin = (binData) => {\n const updatedArray = this.#selectedBins.filter(\n (item) => item.id === binData.id\n )\n return updatedArray.length !== 0\n }\n\n // store bin to local storage\n /**\n * Uloženie binu, uloženie do poľa označených binov.\n * @param {Object} binData - Objekt obsahujúci informácie o bine\n * @return {void}\n */\n storeBinToLocalStorage = (binData) => {\n // let bins = JSON.parse(this.#storage.getItem('currentBin'))\n if (!this.containThisBin(binData)) {\n this.#selectedBins.push(binData)\n this.#storage.setItem('selectedBins', JSON.stringify(this.#selectedBins))\n }\n }\n\n /**\n * Odstránenie binu, vymzanie binu z poľa označených binov.\n * @param {Object} binData - Objekt obsahujúci informácie o bine\n * @return {void}\n */\n deleteBinFromLocalStorage = (binData) => {\n // let bins = JSON.parse(this.#storage.getItem('currentBin'))\n if (this.containThisBin(binData)) {\n this.#selectedBins = this.#deleteCurrentBin(binData)\n this.#storage.setItem('selectedBins', JSON.stringify(this.#selectedBins))\n }\n }\n\n // get bin from local storage\n /**\n * Načítanie všetkých binov z poľa označených binov.\n * @return {Array} - Pole s označenými binmi\n */\n getBinsFromLocalStorage = () => {\n const selectedBins = JSON.parse(this.#storage.getItem('selectedBins'))\n if (selectedBins === null) {\n return []\n } else {\n return selectedBins\n }\n }\n}\n\nconst localStorageService = new NdmVrStorageService()\nexport { localStorageService }\n","// bin distributor\n/** @module BinDataDistributor */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre biny.\n * @class\n */\nclass BinDataDistributor {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia dat oznaceneho binu.\n * @return {void}\n */\n sendDataOfTheSelectedBin(binData) {\n this.#subject.next(binData)\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getBinDistributor() {\n return this.#subject.asObservable()\n }\n}\n\nconst binDataDistributor = new BinDataDistributor()\nexport default binDataDistributor\n","import AFRAME from 'aframe'\nimport { Subject } from 'rxjs'\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport binSubject from '../observables/binSubject'\nimport jsrootSubject from '../observables/jsrootSubject'\nimport binDataDistributor from '../observables/binDataDistributor'\nimport { getActiveTool } from '../controllers/keyboardController'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite, ktorá spracuváva prieniky medzi entitou a raycastrom používateľa.\n * @component mouseevent\n * @module cursorEventAframeComponent\n */\nconst binData = new Subject()\n// aframe component for set events on bin\nAFRAME.registerComponent('mouseevent', {\n init: function () {\n let subscription\n\n const el = this.el\n\n let clickCount = 0\n let checked = false\n // add mouse listener on mouseenter\n el.addEventListener('mouseenter', function setHover(evt) {\n checked = false\n // subscribe for events\n const intersection = evt.detail.intersection\n subscription = binSubject.getKeyboardEvent().subscribe((save) => {\n if (save) {\n localStorageService.storeBinToLocalStorage(this.userData)\n localStorageService.storeCurrentBinToLocalStorage(this.userData)\n binDataDistributor.sendDataOfTheSelectedBin(this.userData)\n this.userData.markedColor = this.userData.selectColor\n this.setAttribute('material', 'opacity', '0.70')\n jsrootSubject.showBinProjection(this.userData)\n } else {\n localStorageService.deleteBinFromLocalStorage(this.userData)\n this.userData.markedColor = this.userData.color\n this.setAttribute('material', 'opacity', '0.50')\n }\n })\n if (intersection.face.normal.x !== 0) {\n this.setAttribute('material', 'color', this.userData.axisZ)\n } else if (intersection.face.normal.y !== 0) {\n this.setAttribute('material', 'color', this.userData.axisY)\n } else {\n this.setAttribute('material', 'color', this.userData.axisX)\n }\n this.setAttribute('material', 'opacity', '0.70')\n })\n\n // add mouse listener on mouseleave\n el.addEventListener('mouseleave', function setPassive() {\n subscription.unsubscribe()\n if (checked === false) {\n this.setAttribute('material', 'color', this.userData.markedColor)\n this.setAttribute('material', 'opacity', '0.50')\n }\n clickCount = 0\n })\n\n // add mouse listener on click\n el.addEventListener('click', function setActive(evt) {\n clickCount = clickCount + 1\n checked = false\n setTimeout(() => {\n clickCount = 0\n }, 600)\n // add mouse listener on double click\n // change position\n if (clickCount === 2) {\n clickCount = 0\n checked = true\n this.setAttribute('material', 'color', '#99ff00')\n this.setAttribute('material', 'opacity', '1')\n // get camera\n const camera = document.getElementById('cameraWrapper')\n // set pos of camera\n if (camera !== null) {\n camera.object3D.position.y = this.object3D.position.y + 0.4\n // camera.object3D.rotation.y = 180\n if (this.userData.content > 0.5) {\n // camera.object3D.position.x = -1.5 + this.object3D.position.x\n // camera.object3D.position.z = this.object3D.position.z - 1.2\n camera.setAttribute(\n 'animation',\n `property: position; to: ${-0.5 + this.object3D.position.x} ${\n this.object3D.position.y\n } ${this.object3D.position.z}\n ; dur: 600; easing: linear;`\n )\n } else if (this.userData.content > 0.2) {\n // camera.object3D.position.x = -0.5 + this.object3D.position.x\n // camera.object3D.position.y = this.object3D.position.y + 0.1\n // camera.object3D.position.z = this.object3D.position.z + 4.5\n camera.setAttribute(\n 'animation',\n `property: position; to: ${-0.5 + this.object3D.position.x} ${\n this.object3D.position.y + 0.1\n } ${this.object3D.position.z + 0.5}\n ; dur: 600; easing: linear;`\n )\n } else {\n // camera.object3D.position.x = this.object3D.position.x + 2\n // camera.object3D.position.y = this.object3D.position.y + 0.1\n // camera.object3D.position.z = this.object3D.position.z + 8.5\n camera.setAttribute(\n 'animation',\n `property: position; to: ${this.object3D.position.x + 2} ${\n this.object3D.position.y + 0.1\n } ${this.object3D.position.z + 8.5}\n ; dur: 600; easing: linear;`\n )\n }\n }\n // change store info to localstorage\n } else if (clickCount === 1) {\n this.setAttribute('material', 'color', '#99ff00')\n this.setAttribute('material', 'opacity', '1')\n localStorageService.storeCurrentBinToLocalStorage(this.userData) // !!!!!!!!!!!!!!!!!!\n jsrootSubject.showBinProjection(this.userData)\n switch (getActiveTool()) {\n case 1:\n binData.next(this.userData)\n\n break\n }\n }\n\n // get reference to info-banner element\n let infoBanner = document.getElementById('th2-banner')\n if (infoBanner === null) {\n infoBanner = document.getElementById('th3-banner')\n }\n\n // if we have any information banner\n if (infoBanner !== null) {\n const planes = infoBanner.childNodes\n // set message to display\n if (this.userData.typeName === 'TH3' && planes.length === 5) {\n const zCor = `[${this.userData.zTitle}] [${this.userData.zMin},${\n this.userData.zMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const xCor = `[${this.userData.xTitle}] [${this.userData.xMin},${\n this.userData.xMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const yCor = `[${this.userData.yTitle}] [${this.userData.yMin},${\n this.userData.yMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const content = `Content: ${this.userData.absoluteContent} [${this.userData.content}]\\n`\n\n planes[0].setAttribute(\n 'text',\n `value: ${content}; color: ${this.userData.color}; align: center; width: 30; height: auto;`\n )\n planes[1].setAttribute(\n 'text',\n `value: ${xCor}; color: ${this.userData.axisX}; align: center; width: 30; height: auto;`\n )\n planes[2].setAttribute(\n 'text',\n `value: ${yCor}; color: ${this.userData.axisY}; align: center; width: 30; height: auto;`\n )\n planes[3].setAttribute(\n 'text',\n `value: ${zCor}; color: ${this.userData.axisZ}; align: center; width: 30; height: auto;`\n )\n } else {\n const content = `Content: ${this.userData.absoluteContent} [${this.userData.content}]\\n`\n const xCor = `[${this.userData.xTitle}] [${this.userData.xMin},${\n this.userData.xMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const yCor = `[${this.userData.yTitle}] [${this.userData.yMin},${\n this.userData.yMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n planes[0].setAttribute(\n 'text',\n `value: ${content}; color: ${this.userData.color}; align: center; baseline: center; width: 30; height: auto;`\n )\n planes[1].setAttribute(\n 'text',\n `value: ${xCor}; color: ${this.userData.axisX}; align: center; width: 30; height: auto;`\n )\n planes[2].setAttribute(\n 'text',\n `value: ${yCor}; color: ${this.userData.axisY}; align: center; width: 30; height: auto;`\n )\n }\n }\n })\n },\n update: function () {\n const el = this.el\n el.setAttribute('material', 'color', el.userData.markedColor)\n el.setAttribute('material', 'opacity', '0.75')\n }\n})\n\nexport { binData }\n","import React, { useState, useEffect } from 'react'\nimport 'aframe'\nimport cameraSubject from '../../observables/cameraSubject'\nimport jsrootService from '../../services/jsrootService'\nimport { toolsSelector } from '../../controllers/keyboardController'\nimport { binData } from '../../aframeComponents/cursorEventAframeComponent'\nconst AFRAME = window.AFRAME\n\n/**\n * React komponent pre vytvorenie kamery a jej menežment.\n * @component\n * @example\n * return (\n * <NdmVrCamera />\n * )\n */\n\nconst NdmVrCamera = () => {\n let subscription\n let activeToolHighlight = '0 -0.75 -1'\n let binDataSubscription\n\n const [selectedBinData, setSelectedBinData] = useState(\n 'value: Bin data:\\nX: null\\nY: null\\nZ: null;color: black;'\n )\n const offset = 30\n const [rotation, setRotation] = useState(0)\n const [prevPosition, setPrevPosition] = useState(null)\n const [inputDevice, setInputDevice] = useState('keyboard')\n const [show, setShow] = useState(false)\n const [showProjection, setShowProjection] = useState(false)\n const [activeTool, setActiveTool] = useState(3)\n\n toolsSelector.subscribe((value) => {\n setActiveTool(value)\n if (value === 1) {\n binDataSubscription = binData.subscribe((value) =>\n setSelectedBinData(\n String(\n 'value: Bin data:\\n' +\n 'X: ' +\n value.xPos +\n '\\n' +\n 'Y: ' +\n value.yPos +\n '\\n' +\n 'Z: ' +\n value.zPos +\n '; color: black;'\n )\n )\n )\n } else {\n if (binDataSubscription) binDataSubscription.unsubscribe()\n }\n })\n\n const handleSubscription = (data) => {\n if (data.device) {\n if (inputDevice !== data.device) {\n setInputDevice(data.device)\n }\n setShow(!show)\n } else if (data === 'shift') {\n compileRotation()\n } else if (data === 'show') {\n setShowProjection(!showProjection)\n }\n }\n\n const compileRotation = () => {\n let currentRotation = rotation + 90\n if (currentRotation >= 360) currentRotation = 0\n setRotation(currentRotation)\n }\n\n // function compileRotation(){\n // let currentRotation = rotation + 90\n // if (currentRotation >= 360) currentRotation = 0\n // setRotation(currentRotation)\n // }\n\n // render banners for projection\n const renderProjectionsBanners = () => {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n material='color: white'\n >\n <a-entity\n // geometry='primitive: box; width: 18; height: 5; depth: 0.5;'\n /* geometry={\n inputDevice === 'oculus'\n ? 'primitive: box; width: 40; height: 10; depth: 0.1;'\n : 'primitive: box; width: 18; height: 5; depth: 0.1;'\n } */\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n // position={`8 ${inputDevice === 'oculus' ? 3 - offset : 3} -5`}\n // position={inputDevice === 'oculus' ? '-30 28 0' : '8 3 -5'}\n position='-30 28 0'\n // rotation='0 -45 0'\n // rotation={inputDevice === 'oculus' ? '45 90 0' : '0 -45 0'}\n rotation='45 90 0'\n material='color:white;'\n >\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press C to show help panels'\n : 'Press Button X to show help panels'\n }\n // position={inputDevice === 'oculus' ? '-18 0 1' : '-8 0 1'}\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press V to switch to histogram view'\n : 'Press Button Y to switch to histogram view'\n }\n // position='-8 1 1'\n // position={inputDevice === 'oculus' ? '-18 2.8 1' : '-8 1 1'}\n position='-20 0 1'\n />\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press X to shift panels'\n : 'Press right Trigger to shift panels'\n }\n // position='-8 -1 1'\n // position={inputDevice === 'oculus' ? '-18 -2.8 1' : '-8 -1 1'}\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n id='bannerId_1'\n scale='80 50 2'\n animation__position='property: position; from: 0 0 -60; to: 0 -1 -42; delay: 0; dur: 800; easing: linear;'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 0 0 -60; to: 0 0 -42.5; delay: 0; dur: 800; easing: linear;'\n material='color: white;'\n />\n <a-box\n id='bannerId_2'\n scale='80 50 2'\n animation__position='property: position; from: 60 0 0; to: 42 -1 0; delay: 200; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 60 0 0; to: 42.5 0 0; delay: 200; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='color: white;'\n />\n <a-box\n id='bannerId_3'\n scale='80 50 2'\n animation__position='property: position; from: 0 0 60; to: 0 -1 42; delay: 400; dur: 800; easing: linear;'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 0 0 60; to: 0 0 42.5; delay: 400; dur: 800; easing: linear;'\n material='color: white;'\n />\n <a-box\n id='bannerId_4'\n scale='80 50 2'\n animation__position='property: position; from: -60 0 0; to: -42 -1 0; delay: 600; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: -60 0 0; to: -42.5 0 0; delay: 600; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='color: white;'\n />\n </a-entity>\n )\n }\n\n // render banners for controls\n const renderBannersWithControls = () => {\n if (inputDevice === 'keyboard') {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n material='color: white'\n >\n <a-entity\n // geometry='primitive: box; width: 15; height: 5; depth: 0.5;'\n // position='8 3 -5'\n // rotation='0 -45 0'\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n position='-30 28 0'\n rotation='45 90 0'\n material='color: white'\n >\n <a-text\n color='black'\n // width='20'\n width='50'\n // value='Press C to show projection panels'\n value={\n showProjection\n ? 'Press C to show help panels'\n : 'Press C to show projection panels'\n }\n // position='-6 0 1'\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n // width='20'\n width='50'\n value='Press V to switch to histogram view'\n // position='-6 1 1'\n position='-20 0 1'\n />\n <a-text\n color='black'\n // width='20'\n width='50'\n value='Press X to shift panels'\n // position='-6 -1 1'\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -30 0 60; to: -30 0 30; delay: 0; dur: 800; easing: linear;'\n rotation='0 -45 0'\n // src='https://i.imgur.com/x78XYHM.png'\n src='./ndmvr/keyboardControls/keyboard.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -30 0 -60; to: -30 0 -30; delay: 200; dur: 800; easing: linear;'\n rotation='0 45 0'\n src='./ndmvr/keyboardControls/keyboard1.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 30 0 -60; to: 30 0 -30; delay: 400; dur: 800; easing: linear;'\n rotation='0 -45 0'\n src='./ndmvr/keyboardControls/keyboard2.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 30 0 60; to: 30 0 30; delay: 600; dur: 800; easing: linear;'\n rotation=' 0 45 0'\n src='./ndmvr/keyboardControls/keyboard3.png'\n />\n </a-entity>\n )\n } else {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n >\n <a-entity\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n position='-30 28 0'\n rotation='45 90 0'\n material='color: white'\n >\n <a-text\n color='black'\n width='50'\n // value='Press Button X to show projection panels'\n value={\n showProjection\n ? 'Press Button X to show help panels'\n : 'Press Button X to show projection panels'\n }\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n width='50'\n value='Press Button Y to switch to histogram view'\n position='-20 0 1'\n />\n <a-text\n color='black'\n width='50'\n value='Press right Trigger to shift panels'\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -35 0 60; to: -32 0 32; delay: 0; dur: 800; easing: linear;'\n rotation='-10 -45 0'\n src='./ndmvr/oculusControls/oculus.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -35 0 -60; to: -32 0 -32; delay: 200; dur: 800; easing: linear;'\n rotation='10 45 0'\n src='./ndmvr/oculusControls/oculus2.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 35 0 -60; to: 32 0 -32; delay: 400; dur: 800; easing: linear;'\n rotation='10 -45 0'\n src='./ndmvr/oculusControls/oculus1.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 35 0 60; to: 32 0 32; delay: 600; dur: 800; easing: linear;'\n rotation='-10 45 0'\n src='./ndmvr/oculusControls/oculus3.png'\n />\n </a-entity>\n )\n }\n }\n\n const hideMappingBanner = () => {\n const banner = document.getElementById('th-mapping')\n if (banner !== undefined) {\n banner.setAttribute('material', 'opacity', 0)\n }\n }\n\n const showMappingBanner = () => {\n const banner = document.getElementById('th-mapping')\n if (banner !== undefined) {\n banner.setAttribute('material', 'opacity', 1)\n }\n }\n\n useEffect(() => {\n subscription = cameraSubject\n .getCameraSubject()\n .subscribe(handleSubscription)\n\n return () => subscription.unsubscribe()\n }, [show, showProjection, rotation])\n\n useEffect(() => {\n const camera = document.getElementById('camera')\n if (!show) {\n camera.object3D.position.y = 1.6\n if (prevPosition !== null) {\n camera.object3D.position.x = prevPosition.x\n camera.object3D.position.z = prevPosition.z\n camera.object3D.position.y = prevPosition.y\n }\n showMappingBanner()\n } else {\n setPrevPosition({\n x: camera.object3D.position.x,\n y: camera.object3D.position.y,\n z: camera.object3D.position.z\n })\n camera.object3D.position.y = camera.object3D.position.y + offset\n hideMappingBanner()\n }\n }, [show, inputDevice])\n\n useEffect(() => {\n if (showProjection) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n 'bannerId_1',\n '500px',\n '400px'\n )\n }\n }, [showProjection])\n // testing the branch\n\n const renderActiveTool = () => {\n switch (activeTool) {\n case 1:\n activeToolHighlight = '-0.675 -0.825 -1'\n break\n case 2:\n activeToolHighlight = '-0.525 -0.825 -1'\n break\n case 3:\n activeToolHighlight = '-0.375 -0.825 -1'\n\n break\n case 4:\n activeToolHighlight = '-0.225 -0.825 -1'\n break\n case 5:\n activeToolHighlight = '-0.075 -0.825 -1'\n break\n case 6:\n activeToolHighlight = '0.075 -0.825 -1'\n break\n case 7:\n activeToolHighlight = '0.225 -0.825 -1'\n break\n case 8:\n activeToolHighlight = '0.375 -0.825 -1'\n break\n case 9:\n activeToolHighlight = '0.525 -0.825 -1'\n break\n case 0:\n activeToolHighlight = '0.675 -0.825 -1'\n break\n }\n\n const tools = ['info', 2, 3, 4, 5, 6, 7, 8, 9, 0]\n let toolNumXPos = -0.825\n\n return (\n <React.Fragment>\n {tools.map((tool) => {\n let txt\n toolNumXPos = toolNumXPos + 0.15\n const txtPos = String(toolNumXPos + ' -0.78' + ' -1')\n if (tools.indexOf(tool) + 1 === activeTool)\n txt = String(\n 'value: ' + tool + '; color: #0F52BA;width:1.4;align:center'\n )\n else\n txt = String(\n 'value: ' + tool + '; color: black;width:1;align:center'\n )\n\n return (\n <a-entity\n key={tools.indexOf(tool)}\n text={txt}\n position={txtPos}\n material='shader: flat;'\n ></a-entity>\n )\n })}\n\n <a-entity\n geometry='primitive: plane; height: 0.007; width: 0.17'\n position={activeToolHighlight}\n material='color: #0F52BA;'\n ></a-entity>\n </React.Fragment>\n )\n }\n\n const renderOculusControls = () => {\n return (\n <React.Fragment>\n <a-entity\n laser-controls='hand: right'\n raycaster='objects: .clickable; \n lineOpacity: 0.5; \n far: 20;'\n ></a-entity>\n <a-entity oculus-touch-controls='hand: left' left-controller-logging />\n <a-entity\n oculus-touch-controls='hand: right'\n right-controller-logging\n />\n </React.Fragment>\n )\n }\n\n return (\n <a-entity id='cameraWrapper' rotation='0 -135 0' position='-7 2 -7'>\n {show && !showProjection && renderBannersWithControls()}\n {show && showProjection && renderProjectionsBanners()}\n\n <a-camera\n id='camera'\n look-control\n wasd-controls-enabled='acceleration:=50'\n >\n {/* ////////////HUD/////////// */}\n\n <a-entity\n geometry='primitive: plane; height: 0.2; width: 2'\n position='0 -0.825 -1'\n material='color: #eee;shader: flat;'\n ></a-entity>\n\n <a-entity\n geometry='primitive: plane; height: 0.001; width: 1.75'\n position='0 -0.825 -1'\n material='color: #aaa;shader: flat;'\n ></a-entity>\n\n {activeTool === 1 && (\n <a-entity text={selectedBinData} position='-0.8 0.7 -1' />\n )}\n\n {renderActiveTool()}\n {/* <a-plane width= \"0.5\" \n height =\"0.7\" \n rotation=\"-10 15 10\" \n position=\"-1 -0.3 -0.8\"\n ></a-plane> */}\n {!AFRAME.utils.device.checkHeadsetConnected() && (\n <a-entity\n cursor='fuse: false; fuseTimeout: 2000;'\n raycaster='objects: .clickable; showLine: false; far: 100;'\n animation__click='property: scale; startEvents: click; from: 0.1 0.1 0.1; to: 1.4 1.4 1.4; dur: 150'\n animation__mouseenter='property: scale; startEvents: mouseenter; from: 1 1 1; to: 1.4 1.4 1.4; dur: 180'\n animation__mouseleave='property: scale; startEvents: mouseleave; from: 1.4 1.4 1.4; to: 1 1 1; dur: 180'\n line='color: orange; opacity: 0.5'\n far='100'\n position='0 0 -1'\n geometry='primitive: ring; radiusInner: 0.02; radiusOuter: 0.03'\n material='color: white; shader: flat'\n />\n )}\n </a-camera>\n {AFRAME.utils.device.checkHeadsetConnected() && renderOculusControls()}\n </a-entity>\n )\n}\n\nexport default NdmVrCamera\n","// component to insert data to th3i bin\nimport AFRAME from 'aframe'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite binu TH3 histogram, ktorá umožňuje zmenu atribútov entity.\n * @component binth3\n * @param {string} id - Identifikátor binu\n * @param {number} content - Hodnota optimalizovaného obsahu binu (predvolená 0)\n * @param {number} absoluteContent - Hodnota neoptimalizovaného obsahu binu (predvolená 0)\n * @param {string} binName - Meno binu\n * @param {string} xTitle - Titulok na osi x\n * @param {string} yTitle - Titulok na osi y\n * @param {number} xMin - Súradnica min binu na osi x\n * @param {number} yMin - Súradnica min binu na osi y\n * @param {number} zMin - Súradnica min binu na osi z\n * @param {number} xMax - Súradnica max binu na osi x\n * @param {number} yMax - Súradnica max binu na osi y\n * @param {number} zMax - Súradnica max binu na osi z\n * @param {number} xPos - Realna poloha max binu na osi x\n * @param {number} yPos - Realna poloha max binu na osi y\n * @param {number} zPos - Realna poloha max binu na osi z\n * @param {number} xCenter - Súradnica stredu binu na osi x\n * @param {number} yCenter - Súradnica stredu binu na osi y\n * @param {number} zCenter - Súradnica stredu binu na osi z\n * @param {number} xWidth - Šírka binu na osi x\n * @param {number} yWidth - Šírka binu na osi y\n * @param {number} zWidth - Šírka binu na osi z\n * @param {string} color - Farba binu\n * @param {string} axisX - Farba označení na osi x\n * @param {string} axisY - Farba označení na osi y\n * @param {string} axisZ - Farba označení na osi z\n * @param {string} selectColor - Farba určená za zvolenie binu\n * @param {string} markedColor - Farba určená pre označenie binu (v poli označených binov)\n * @module th2AframeComponent\n */\n\nAFRAME.registerComponent('binth', {\n schema: {\n id: { type: 'string' },\n typeName: { type: 'string' },\n content: { default: 0 },\n absoluteContent: { default: 0 },\n binName: { default: '' },\n xTitle: { type: 'string' },\n yTitle: { type: 'string' },\n zTitle: { type: 'string' },\n xMin: { type: 'number' },\n yMin: { type: 'number' },\n zMin: { type: 'number' },\n xMax: { type: 'number' },\n yMax: { type: 'number' },\n zMax: { type: 'number' },\n xPos: { type: 'number' },\n yPos: { type: 'number' },\n zPos: { type: 'number' },\n xCenter: { type: 'number' },\n yCenter: { type: 'number' },\n zCenter: { type: 'number' },\n xWidth: { type: 'number' },\n yWidth: { type: 'number' },\n zWidth: { type: 'number' },\n color: { type: 'string' },\n axisX: { type: 'string' },\n axisY: { type: 'string' },\n axisZ: { type: 'string' },\n selectColor: { type: 'string' },\n markedColor: { type: 'string' }\n },\n\n init: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: this.data.typeName,\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n zTitle: this.data.zTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n zMin: this.data.zMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n zMax: this.data.zMax,\n xPos: this.data.xPos,\n yPos: this.data.yPos,\n zPos: this.data.zPos,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n zCenter: this.data.zCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n zWidth: this.data.zWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n },\n\n update: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: this.data.typeName,\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n zTitle: this.data.zTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n zMin: this.data.zMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n zMax: this.data.zMax,\n xPos: this.data.xPos,\n yPos: this.data.yPos,\n zPos: this.data.zPos,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n zCenter: this.data.zCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n zWidth: this.data.zWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n }\n})\n","// component for modification aframe entity of histogram\nimport AFRAME from 'aframe'\n// import { setPositioning } from '../utils/histogramFactory'\nimport {\n initialKeyboardController,\n keyReleaseHandlerFunction,\n keyPressHandlerFunction,\n switchDisplayModeOnBin,\n keyboardUpdateCameraReference\n} from '../controllers/keyboardController'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite histogram, ktorá umožňuje zmenu atribútov entity.\n * @component histogram-control\n * @param {Object} histogram - Objekt histogramu, z ktorého je potrebné spraviť projekciu\n * @param {Array} projectionAxes - Pole obsahuje názvy osí, podľa ktorých sa má vytvoriť projekcia\n * @param {Object} projections - Objekt obsahujúci súborovú štruktúru s projekciami\n * @param {Number} projIndex - Index projekcie v poli, ktorá sa má zobraziť\n * @module histogramAframeComponent\n */\n\n// aframe component for positioning histogram in scene\nAFRAME.registerComponent('histogram-control', {\n schema: {\n position: {\n name: 'position',\n xValue: 0,\n yValue: 0,\n zValue: 0\n },\n scale: {\n name: 'scale',\n xValue: 2,\n yValue: 2,\n zValue: 2\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 0,\n zValue: 0\n }\n },\n init: function () {\n const el = this.el\n\n // set controllers\n // setPositioning(el, this.schema)\n initialKeyboardController(this.schema, el)\n // keyboard listeners\n document.addEventListener('keydown', keyPressHandlerFunction)\n document.addEventListener('keyup', keyReleaseHandlerFunction)\n document.addEventListener('wheel', switchDisplayModeOnBin)\n },\n\n update: function () {\n keyboardUpdateCameraReference()\n }\n})\n","// component to change text value of the entity after delay\nimport AFRAME from 'aframe'\n/**\n * A-Frame komponent zabezpečí oneskorené aktualizovanie označenia na entite.\n * @component label-handler\n * @param {string} value - Hodnota označenia, na ktorú sa má aktuálne označenie zmeniť\n * @param {number} delay - Hodnota oneskorenia aktualizácie označenia na entite\n * @module labelHandlerAframeComponent\n */\n\n// aframe component for handle labels on entity\nAFRAME.registerComponent('label-handler', {\n schema: {\n value: { type: 'string' },\n delay: { type: 'number' }\n },\n\n init: function () {\n const el = this.el\n this.value = this.data.value\n el.setAttribute('text', 'value', this.data.value)\n },\n\n update: function () {\n const el = this.el // Entity.\n if (this.value !== this.data.value) {\n setTimeout(() => {\n el.setAttribute('text', 'value', this.data.value)\n }, this.data.delay)\n this.value = this.data.value\n }\n }\n})\n","export default {\n def: {\n colorPalette: [\n '#4b0066',\n '#8300b3',\n '#bb00ff',\n '#cf4dff',\n '#e499ff',\n '#ffffcc',\n '#ffff99',\n '#ffff66',\n '#ffff33',\n '#fcba03'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#4b0066',\n secondary: '#FF3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n fire: {\n colorPalette: [\n '#5b0000',\n '#7b2100',\n '#a23b00',\n '#c84900',\n '#df5900',\n '#f18800',\n '#f1a000',\n '#ffae00',\n '#ffcd19',\n '#ffe159'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#5b0000',\n secondary: '#b000d4'\n },\n font: {\n primary: 'black',\n secondary: 'black'\n }\n },\n nebula: {\n colorPalette: [\n '#13004b',\n '#320065',\n '#4e0085',\n '#6100a5',\n '#7000b8',\n '#9800c6',\n '#ab00c6',\n '#b900d2',\n '#d700da',\n '#ff6efc'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#13004b',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n rainforest: {\n colorPalette: [\n '#005b01',\n '#007b23',\n '#00a23d',\n '#00c84c',\n '#00df5c',\n '#00f18b',\n '#00ffb1',\n '#19ffd0',\n '#a6fffe',\n '#56fffe'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#005b01',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n nature: {\n colorPalette: [\n '#4a691a',\n '#5e8425',\n '#79a834',\n '#91c640',\n '#9ed64b',\n '#a8dc59',\n '#b0e166',\n '#bfeb7c',\n '#d7fba2',\n '#deffad'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#4a691a',\n secondary: '#b000d4'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n water: {\n colorPalette: [\n '#00545a',\n '#00717a',\n '#0097a2',\n '#00bac8',\n '#00cede',\n '#00dff0',\n '#00edff',\n '#45f2ff',\n '#7ef6ff',\n '#bdfaff'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#00545a',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n sunflower: {\n colorPalette: [\n '#1e3600',\n '#2e4d00',\n '#507001',\n '#91a004',\n '#b4bb06',\n '#d2d309',\n '#eeed0f',\n '#ffff28',\n '#ffff85',\n '#ffffc2'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#1e3600',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n blood: {\n colorPalette: [\n '#470101',\n '#6e0101',\n '#800b0b',\n '#940c0c',\n '#a30000',\n '#bd0909',\n '#e01f1f',\n '#d43b3b',\n '#db5e5e',\n '#f78888'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#470101',\n secondary: '#f6ff00'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n magma: {\n colorPalette: [\n '#dbff1d',\n '#d5e814',\n '#d5d007',\n '#cc9b00',\n '#b87600',\n '#9c4a00',\n '#812f00',\n '#661900',\n '#661420',\n '#2b0000'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#2b0000',\n secondary: '#ae2000'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n jupiter: {\n colorPalette: [\n '#00340f',\n '#00344f',\n '#006e3a',\n '#00976a',\n '#26efd0',\n '#9c4a00',\n '#9c4a00',\n '#812f00',\n '#661900',\n '#2b0000'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#00340f',\n secondary: '#e3ff5b'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n magic: {\n colorPalette: [\n '#342000',\n '#6e5e00',\n '#888500',\n '#919700',\n '#8dbe00',\n '#caef26',\n '#cf6e85',\n '#b300b8',\n '#6b0090',\n '#3b0066'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#342000',\n secondary: '#c85bff'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n }\n}\n","/** @module ThemeProvider */\n/* object provides all necessary color palettes and schemes */\nimport palette from './theme'\n\n/**\n * Provider pre zabezpečenie všetkých potrebných farieb a štýlov.\n * @class\n */\nexport default class ThemeProvider {\n /**\n * Konštruktor pre nastavenie všetkých potrebných atribútov objektu.\n * @param {Object} theme - Objekt obsahujúci všetky potrebné palety a údaje o témach a fontoch\n * @return {void}\n */\n constructor(theme) {\n if (palette[theme]) {\n // set selected theme\n this.xAxis = palette[theme].axis.x\n this.yAxis = palette[theme].axis.y\n this.zAxis = palette[theme].axis.z\n this.palette = palette[theme].colorPalette\n this.primaryAccent = palette[theme].accent.primary\n this.secondaryAccent = palette[theme].accent.secondary\n this.primaryFont = palette[theme].font.primary\n this.secondaryFont = palette[theme].font.secondary\n } else {\n // set default theme\n this.xAxis = palette.def.axis.x\n this.yAxis = palette.def.axis.y\n this.zAxis = palette.def.axis.z\n this.palette = palette.def.colorPalette\n this.primaryAccent = palette.def.accent.primary\n this.secondaryAccent = palette.def.accent.secondary\n this.primaryFont = palette.def.font.primary\n this.secondaryFont = palette.def.font.secondary\n }\n }\n\n /**\n * Získanie kompetentnej farby pre entitu osi.\n * @param {string} axis - Označenie osi\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getAxisColor(axis) {\n if (axis === 'x' || axis === 'X') return this.xAxis\n if (axis === 'y' || axis === 'Y') return this.yAxis\n if (axis === 'z' || axis === 'Z') return this.zAxis\n return null\n }\n\n /**\n * Získanie hlavnej farby pre zvýraznenie a označenie.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getPrimaryAccentColor() {\n return this.primaryAccent\n }\n\n /**\n * Získanie sekundárnej farby pre zvýraznenie a označenie.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getSecondaryAccentColor() {\n return this.secondaryAccent\n }\n\n /**\n * Získanie hlavnej farby písma.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getPrimaryFontColor() {\n return this.primaryFont\n }\n\n /**\n * Získanie sekundárnej farby písma.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getSecondaryFontColor() {\n return this.secondaryFont\n }\n\n // set bin colors get color\n /**\n * Získanie kompetentnej farby pre bin podľa obsahu binu.\n * @param {number} content - Hodnota definujúca obsah binu\n * @return {string} - Vracia null alebo aktuálnu farbu pre bin, ktorá náleží binu podľa obsahu\n */\n getBinColor(content) {\n const fullContent = 1\n\n let color = this.palette[0]\n\n if (content >= fullContent) {\n return this.palette[9]\n }\n\n const difference = 0.12\n let sum = difference\n\n // find right color\n for (let i = 0; i <= 9; i++) {\n if (content <= sum) {\n color = this.palette[i]\n break\n }\n sum += difference\n }\n // return right color from palette\n return color\n }\n}\n","/** @module HistogramReactFactory */\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport 'aframe'\nimport ThemeProvider from '../resources/themeProvider'\n\n/**\n * Vytvorenie objektu pre generovanie entít histogramu.\n * @class HistogramReactFactory - Histogram generator\n */\nexport default class HistogramReactFactory {\n #id = ''\n #selectedBins = []\n #histogram = null\n #type = ''\n #projections = null\n #themeProvider = null\n // current offsets\n #xOffset = 1\n #yOffset = 1\n #zOffset = 1\n // current histogram limits\n #xLimit = 0\n #yLimit = 0\n #zLimit = 0\n // bin scales\n #xWidth = 1\n #yWidth = 1\n #zWidth = 1\n // range\n #range = 8\n // shiftin scene (shift to initial position)\n #labels = {\n xInitial: 0,\n yInitial: 0,\n zInitial: 0\n }\n\n // constants\n #contentScale = 1\n #minDisplayedContent = 0\n #binScaleCoef = 2\n\n // option for animation\n #shift = {\n xOffset: 0,\n yOffset: 0,\n zOffset: 0\n }\n\n // older elements\n #previousBins = []\n\n /**\n * Inicializácia objektu pre vytváranie elementov histogramu.\n * @param {string} uniqueName - Identifikátor histogramu\n * @param {Object} histogram - Objekt histogramu určený na vizualizáciu\n * @param {Object} section - Objekt definujúci ofsety a rozsah histogramu\n * @param {number} range - Rozsah, ak sa nedefinujú ofsety ale len rozsah\n * @param {Object} projections - Objekt definujúci súborovú štruktúru s projekciami\n * @param {string} theme - string Definujúci názov témy, ktorá má byť použitá pri vizualizovaní\n * @return {void}\n */\n constructor(uniqueName, histogram, section, range, projections, theme) {\n this.initializeFactory(\n uniqueName,\n histogram,\n section,\n range,\n projections,\n theme\n )\n }\n\n /**\n * Inicializácia objektu pre vytváranie elementov histogramu.\n * @param {string} uniqueName - Identifikátor histogramu\n * @param {Object} histogram - Objekt histogramu určený na vizualizáciu\n * @param {Object} section - Objekt definujúci ofsety a rozsah histogramu\n * @param {number} range - Rozsah, ak sa nedefinujú ofsety ale len rozsah\n * @param {Object} projections - Objekt definujúci súborovú štruktúru s projekciami\n * @param {string} theme - String definujúci názov témy, ktorá má byť použitá pri vizualizovaní\n * @return {void}\n */\n initializeFactory(uniqueName, histogram, section, range, projections, theme) {\n this.setUniqueName(uniqueName)\n this.setTheme(theme)\n this.setHistogram(histogram, projections)\n this.setSection(section)\n this.setRange(range)\n }\n\n /**\n * Nastaví nove unikátne meno pre histogram\n */\n setUniqueName(uniqueName) {\n this.#id = uniqueName\n }\n\n /**\n * Nastaví ofsety pre zobrazenie sekcie histogramu\n */\n setSection(section) {\n // set current section offsets\n if (section !== null && section !== undefined) {\n if (section.xOffset)\n this.#xOffset = this.#checkOffsetValue(section.xOffset, this.#xLimit)\n if (section.yOffset)\n this.#yOffset = this.#checkOffsetValue(section.yOffset, this.#yLimit)\n }\n // define third dimension for th3 histogram\n if (this.#histogram._typename.includes('TH3')) {\n // set current section offsets\n if (section !== null && section !== undefined) {\n if (section.zOffset)\n this.#zOffset = this.#checkOffsetValue(section.zOffset, this.#zLimit)\n }\n }\n }\n\n /**\n * Nastaví histogram a všetky potrebné atribúty\n */\n setHistogram(histogram, projections) {\n this.#projections = projections\n this.#histogram = histogram\n this.#type = histogram._typename\n // set current limits\n this.#xLimit = histogram.fXaxis.fNbins\n this.#yLimit = histogram.fYaxis.fNbins\n // bin scales\n this.#xWidth =\n (histogram.fXaxis.fXmax - histogram.fXaxis.fXmin) /\n histogram.fXaxis.fNbins\n this.#yWidth =\n (histogram.fYaxis.fXmax - histogram.fYaxis.fXmin) /\n histogram.fYaxis.fNbins\n // bin shift in the scene\n this.#labels.xInitial = histogram.fXaxis.fXmin\n this.#labels.yInitial = histogram.fYaxis.fXmin\n\n this.#xOffset = this.#checkOffsetValue(this.#xOffset, this.#xLimit)\n this.#yOffset = this.#checkOffsetValue(this.#yOffset, this.#yLimit)\n\n // define third dimension for th3 histogram\n if (histogram._typename.includes('TH3')) {\n // set current limits\n this.#zLimit = histogram.fZaxis.fNbins\n // bin scales\n this.#zWidth = histogram.fZaxis.fXmax / histogram.fZaxis.fNbins\n // bin shift in the scene\n this.#labels.zInitial = histogram.fZaxis.fXmin\n\n this.#zOffset = this.#checkOffsetValue(this.#zOffset, this.#zLimit)\n }\n }\n\n /**\n * Nastaví range pre požet zobrazených binoch v danom rozmere\n */\n setRange(range) {\n if (range) {\n if (range < 4) this.#range = 4\n this.#range = range\n }\n }\n\n /**\n * Nastaví tému pre vizualizáciu\n */\n setTheme(theme) {\n this.#themeProvider = new ThemeProvider(theme)\n }\n\n /**\n * Vracia atribút objektu offset x.\n * @return {number} offsetX - Offset na osi x\n */\n getXOffset = () => {\n return this.#xOffset\n }\n\n /**\n * Vracia atribút objektu offset y.\n * @return {number} offsetX - Offset na osi y\n */\n getYOffset = () => {\n return this.#yOffset\n }\n\n /**\n * Vracia atribút objektu offset y.\n * @return {number} offsetX - Offset na osi y\n */\n getZOffset = () => {\n return this.#zOffset\n }\n\n /**\n * Vracia atribút objektu range.\n * @return {number} range - Vracia rozsah sekcie\n */\n getRange = () => {\n return this.#range\n }\n\n /**\n * Funkcia overí korektnosť hodnoty offsetu.\n * Porovná aktuálny upravený offset s limitom na danej osi.\n * @param {number} offsetValue - Hodnota offsetu, ktorú je potrebné overiť\n * @param {number} limit - Hodnota offsetu, ktorá predstavuje limit pre danú os.\n * @return {number} currOffset - Vracia upravený offset\n */\n #checkOffsetValue = (offsetValue, limit) => {\n let currOffset =\n offsetValue > limit - this.#range ? limit - this.#range : offsetValue\n\n if (currOffset < 1) {\n currOffset = 1\n }\n return currOffset\n }\n\n /**\n * Funkcia overí stav binu.\n * @param {string} binId - Identifikátor binu, ktorý je potrebné overiť\n * @return {boolean} state - Vracia True ak je bin v poli označených binov, True ak nie je v poli označených binov\n */\n #checkBinState = (binId) => {\n const updatedArray = this.#selectedBins.filter((item) => item.id === binId)\n return updatedArray.length !== 0\n }\n\n /**\n * Funkcia vytvorí entitu reprezentujúcu označenie na osi.\n * @param {string} id - Identifikátor, ktorým bude disponovať vytvorená entita\n * @param {number} positionX - X pozícia entity\n * @param {number} positionY - Y pozícia entity\n * @param {number} positionZ - Z pozícia entity\n * @param {number} rotationX - X rotácia entity\n * @param {number} rotationY - Y rotácia entity\n * @param {number} rotationZ - Z rotácia entity\n * @param {number} width - Šírka entity\n * @param {number} height - Výška entity\n * @param {number} value - Hodnota definujúca časové omeškanie pre zobrazenie označenia v entite\n * @param {string} color - HEX hodnota farby entity\n * @param {string} fontColor - HEX hodnota farby fontu entity\n * @return {HTMLElement} entita - Vytvorená entita\n */\n #createAxisEntity = (\n id,\n positionX,\n positionY,\n positionZ,\n rotationX,\n rotationY,\n rotationZ,\n width,\n height,\n value,\n color,\n fontColor\n ) => {\n return {\n key: id + this.#id,\n geometry: {\n primitive: 'plane',\n width: width,\n height: height\n },\n text: {\n color: fontColor,\n width: 4,\n height: 'auto'\n },\n labelHandler: {\n value: value,\n delay: 500\n },\n rotation: {\n x: rotationX,\n y: rotationY,\n z: rotationZ\n },\n material: {\n color: color\n },\n animation: {\n fromX: positionX + this.#shift.xOffset,\n fromY: positionY + this.#shift.zOffset,\n fromZ: positionZ + this.#shift.yOffset,\n toX: positionX,\n toY: positionY,\n toZ: positionZ\n }\n } /* (\n <a-entity\n key={id + this.#id}\n geometry={`primitive: plane; width:${width}; height:${height};`}\n text={`color: ${fontColor}; width: 4; height:auto; align:center;`}\n label-handler={`value: ${value}; delay:${500}`}\n rotation={`${rotationX} ${rotationY} ${rotationZ}`}\n // position={`${positionX} ${positionY} ${positionZ}`}\n material={`color: ${color};`}\n animation='property: text.width; from: 0; to: 4; dur: 1000;'\n animation__1='property: material.opacity; from: 0; to: 0.8; dur: 1500;'\n animation__2={`property: position; from: ${\n positionX + this.#shift.xOffset\n } ${positionY + this.#shift.zOffset} ${\n positionZ + this.#shift.yOffset\n }; to: ${positionX} ${positionY} ${positionZ}; dur: 1005;`}\n />\n ) */\n }\n\n /**\n * Funkcia na základe atribútov objektu vytvorí všetky potrebné entity pre histogram TH3.\n * @return {Object} elements - Vracia objekt obsahujúci roztriedené všetky potrebné entity histogramu pre VR\n */\n #createTH3Histogram = () => {\n // get selected bins from local storage\n this.#selectedBins = localStorageService.getBinsFromLocalStorage()\n\n // react elements to draw the histograms\n const elements = {\n type: 'TH3',\n bins: [],\n labels: [],\n banners: [],\n ground: {},\n titles: [],\n axisLabels: []\n }\n // variables for rendering the histogram\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let zcenter, zmin, zmax, zwidth\n const binName = ''\n let absoluteContent\n let c\n let count = 0\n\n // load th3 limits from localstorage\n // const binScale = ndmVrStorage.loadBinScale('TH3')\n // console.log(binScale)\n\n const maxXLength =\n this.#xOffset + this.#range > this.#xLimit\n ? this.#xLimit\n : this.#xOffset + this.#range\n const maxYLength =\n this.#yOffset + this.#range > this.#yLimit\n ? this.#yLimit\n : this.#yOffset + this.#range\n const maxZLength =\n this.#zOffset + this.#range > this.#zLimit\n ? this.#zLimit\n : this.#zOffset + this.#range\n\n const xTitle = this.#histogram.fXaxis.fTitle\n const yTitle = this.#histogram.fYaxis.fTitle\n const zTitle = this.#histogram.fZaxis.fTitle\n const xLabels = this.#histogram.fXaxis.fLabels\n ? this.#histogram.fXaxis.fLabels.arr\n : []\n const yLabels = this.#histogram.fYaxis.fLabels\n ? this.#histogram.fYaxis.fLabels.arr\n : []\n const zLabels = this.#histogram.fZaxis.fLabels\n ? this.#histogram.fZaxis.fLabels.arr\n : []\n\n const currentBinScales = []\n\n // generate react elements of the bins\n for (let iz = this.#zOffset; iz <= maxZLength; iz++)\n for (let iy = this.#yOffset; iy <= maxYLength; iy++)\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n xcenter = this.#histogram.fXaxis.GetBinCenter(ix)\n xmin = this.#histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = this.#histogram.fYaxis.GetBinCenter(iy)\n ymin = this.#histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n zcenter = this.#histogram.fZaxis.GetBinCenter(iz)\n zmin = this.#histogram.fZaxis.GetBinLowEdge(iz)\n zmax = zcenter + (zcenter - zmin)\n zwidth = zmax - zmin\n absoluteContent = this.#histogram.getBinContent(ix, iy, iz)\n c = this.#optimizeBinContent(\n absoluteContent,\n this.#histogram.fMaximum\n )\n\n // set a-frame entity box\n // set children component\n if (c > this.#minDisplayedContent) {\n let size = c\n if (c < 0.15) size = 0.15\n\n const color = this.#themeProvider.getBinColor(c)\n // check bin status\n const id =\n this.#id +\n xmin +\n 'th3' +\n xmax +\n 'th3' +\n zmin +\n 'th3' +\n zmax +\n 'th3' +\n ymin +\n 'th3' +\n ymax\n let markedColor\n if (this.#checkBinState(id)) {\n markedColor = this.#themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n typeName: 'TH2'\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: ${zTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${zmin};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${zmax};\n xPos: ${ix};\n yPos: ${iy};\n zPos: ${iz};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n zCenter: ${zcenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${zwidth};\n markedColor: ${markedColor};\n selectColor: ${this.#themeProvider.getSecondaryAccentColor()};\n axisX: ${this.#themeProvider.getAxisColor('x')};\n axisY: ${this.#themeProvider.getAxisColor('y')};\n axisZ: ${this.#themeProvider.getAxisColor('z')}`\n\n const width = size * 0.8\n // const posX = (ix - 1) / this.#xWidth\n // const posY = (iz - 1) / this.#zWidth + 0.2\n // const posZ = (iy - 1) / this.#yWidth\n const posX = ix - 1\n const posY = iz - 1\n const posZ = iy - 1\n elements.bins[count] = {\n id: id,\n color: color,\n binData: binData,\n content: absoluteContent,\n animation: {\n fromWidth: this.#getPreviousBinScales(id),\n fromHeight: this.#getPreviousBinScales(id),\n fromDepth: this.#getPreviousBinScales(id),\n toWidth: width,\n toHeight: width,\n toDepth: width\n },\n animation2: {\n fromX: posX + this.#shift.xOffset,\n fromY: posY + this.#shift.zOffset,\n fromZ: posZ + this.#shift.yOffset,\n toX: posX,\n toY: posY,\n toZ: posZ\n },\n animation3: {\n fromColor: this.#getPreviousBinColor(id),\n toColor: markedColor\n }\n }\n /* (\n <a-box\n key={id}\n class='clickable'\n material={`color: ${markedColor};`}\n binth3={binData}\n // position={`${posX} ${posY} ${posZ}`}\n // height={width}\n // width={width}\n // depth={width}\n mouseevent\n animation={`property: scale; from: ${this.#getPreviousBinScales(\n id\n )} ${this.#getPreviousBinScales(\n id\n )} ${this.#getPreviousBinScales(\n id\n )}; to: ${width} ${width} ${width}; dur: 1500; easing: linear;`}\n // animation={`property: scale; to: ${width} ${width} ${width}; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.75; dur: 2600;'\n animation__2={`property: position; from: ${\n posX + this.#shift.xOffset\n } ${posY + this.#shift.zOffset} ${\n posZ + this.#shift.yOffset\n }; to: ${posX} ${posY} ${posZ}; dur: 1000;`}\n animation__3={`property: material.color; from: ${this.#getPreviousBinColor(\n id\n )}; to: ${markedColor}; dur: 2600;`}\n />\n )\n */\n currentBinScales[count] = {\n key: id,\n scale: width,\n color: markedColor\n }\n }\n count++\n }\n\n this.#previousBins = currentBinScales\n // create arrays for labels\n const normalAxis = []\n const reversedAxis = []\n // set axis\n count = 0\n for (let iz = this.#yOffset; iz <= maxYLength; iz++) {\n normalAxis[count] = this.#createAxisEntity(\n 50000 + count,\n -2.5 + this.#xOffset,\n this.#zOffset - 1,\n iz - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `${\n yLabels[iz - 1]\n ? yLabels[iz - 1].fString\n : Math.round(\n (this.#labels.yInitial + iz - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 55000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n iz - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `${\n yLabels[iz - 1]\n ? yLabels[iz - 1].fString\n : Math.round(\n (this.#labels.yInitial + iz - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n }\n // add z label\n elements.axisLabels[0] = {\n id: 'leftLabel',\n key: 6000 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 270,\n z: 0\n },\n animation: {\n fromX: this.#xOffset - 4 + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset + 0.5 + this.#shift.yOffset,\n toX: this.#xOffset - 4,\n toY: this.#zOffset - 1,\n toZ: this.#yOffset + 0.5\n }\n } /* (\n <a-entity\n id='leftLabel'\n key={60000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n /* position={`${this.#xOffset - 4} ${this.#zOffset - 1} ${\n this.#yOffset + 0.5\n }`}\n animation={`property: position; from: ${\n this.#xOffset - 4 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n this.#yOffset + 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 4} ${this.#zOffset - 1} ${\n this.#yOffset + 0.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[1] = {\n id: 'rightLabel',\n key: 64001 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 90,\n z: 0\n },\n animation: {\n fromX: maxXLength + 2 + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: maxYLength - 2.5 + this.#shift.yOffset,\n toX: maxXLength + 2,\n toY: this.#zOffset - 1,\n toZ: maxYLength - 2.5\n }\n } /* (\n <a-entity\n id='rightLabel'\n key={65000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n // position={`${maxXLength + 2} ${this.#zOffset - 1} ${maxYLength - 2.5}`}\n animation={`property: position; from: ${\n maxXLength + 2 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n maxYLength - 2.5 + this.#shift.yOffset\n }; to: ${maxXLength + 2} ${this.#zOffset - 1} ${\n maxYLength - 2.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n // generate x and y axis\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n normalAxis[count] = this.#createAxisEntity(\n 70000 + count,\n ix - 1,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 270,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial + ix - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 75000 + count,\n ix - 1,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 90,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial + ix - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n }\n // add x label\n elements.axisLabels[2] = {\n id: 'downLabel',\n key: 84002 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 180,\n z: 0\n },\n animation: {\n fromX: this.#xOffset + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset - 4 + this.#shift.yOffset,\n toX: this.#xOffset,\n toY: this.#zOffset - 1,\n toZ: this.#yOffset - 4\n }\n } /* (\n <a-entity\n id='downLabel'\n key={80000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n // position={`${this.#xOffset} ${this.#zOffset - 1} ${this.#yOffset - 4}`}\n animation={`property: position; from: ${\n this.#xOffset + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n this.#yOffset - 4 + this.#shift.yOffset\n }; to: ${this.#xOffset} ${this.#zOffset - 1} ${\n this.#yOffset - 4\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[3] = {\n id: 'upLabel',\n key: 85003 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 0,\n z: 0\n },\n animation: {\n fromX: maxXLength - 2.5 + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: maxYLength + 2 + this.#shift.yOffset,\n toX: maxXLength - 2.5,\n toY: this.#zOffset - 1,\n toZ: maxYLength + 2\n }\n } /* (\n <a-entity\n id='upLabel'\n key={85000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n // position={`${maxXLength - 2.5} ${this.#zOffset - 1} ${maxYLength + 2}`}\n animation={`property: position; from: ${\n maxXLength - 2.5 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n maxYLength + 2 + this.#shift.yOffset\n }; to: ${maxXLength - 2.5} ${this.#zOffset - 1} ${\n maxYLength + 2\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n // y axis\n normalAxis[count] = this.#createAxisEntity(\n 90000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 91000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 90,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n normalAxis[count] = this.#createAxisEntity(\n 92000 + count,\n this.#xOffset - 2.5,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 270,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 93000 + count,\n this.#xOffset - 2.5,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n // add y label\n elements.axisLabels[4] = {\n id: 'upLabel1',\n key: 95004 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 270,\n z: 90\n },\n animation: {\n fromX: this.#xOffset - 1.5 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset - 2 + this.#shift.yOffset,\n toX: this.#xOffset - 1.5,\n toY: maxZLength - 1,\n toZ: this.#yOffset - 2\n }\n } /* (\n <a-entity\n key={95000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${270} ${90}`}\n /* position={`${this.#xOffset - 1.5} ${maxZLength - 1} ${\n this.#yOffset - 2\n }`}\n animation={`property: position; from: ${\n this.#xOffset - 1.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n this.#yOffset - 2 + this.#shift.yOffset\n }; to: ${this.#xOffset - 1.5} ${maxZLength - 1} ${\n this.#yOffset - 2\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[5] = {\n id: 'upLabel2',\n key: 100005 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 90,\n z: 90\n },\n animation: {\n fromX: maxXLength - 0.5 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: maxYLength + this.#shift.yOffset,\n toX: maxXLength - 0.5,\n toY: maxZLength - 1,\n toZ: maxYLength\n }\n } /* (\n <a-entity\n key={100000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${90} ${90}`}\n // position={`${maxXLength - 0.5} ${maxZLength - 1} ${maxYLength}`}\n animation={`property: position; from: ${\n maxXLength - 0.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n maxYLength + this.#shift.yOffset\n }; to: ${maxXLength - 0.5} ${maxZLength - 1} ${maxYLength}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[6] = {\n id: 'upLabel3',\n key: 105006 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 360,\n z: 90\n },\n animation: {\n fromX: this.#xOffset - 2 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: maxYLength - 0.5 + this.#shift.yOffset,\n toX: this.#xOffset - 2,\n toY: maxZLength - 1,\n toZ: maxYLength - 0.5\n }\n } /* (\n <a-entity\n key={105000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${360} ${90}`}\n // position={`${this.#xOffset - 2} ${maxZLength - 1} ${maxYLength - 0.5}`}\n animation={`property: position; from: ${\n this.#xOffset - 2 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n maxYLength - 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 2} ${maxZLength - 1} ${\n maxYLength - 0.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[7] = {\n id: 'upLabel4',\n key: 105007 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 180,\n z: 90\n },\n animation: {\n fromX: maxXLength - 0.5 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset - 1.5 + this.#shift.yOffset,\n toX: maxXLength - 0.5,\n toY: maxZLength - 1,\n toZ: this.#yOffset - 1.5\n }\n } /* (\n <a-entity\n key={110000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${180} ${90}`}\n /* position={`${maxXLength - 0.5} ${maxZLength - 1} ${\n }`}\n animation={`property: position; from: ${\n maxXLength - 0.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n this.#yOffset - 1.5 + this.#shift.yOffset\n }; to: ${maxXLength - 0.5} ${maxZLength - 1} ${\n this.#yOffset - 1.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n\n // add histogram title\n // elements.titles[0] = {\n // key: 150000 + this.#id,\n // text: {\n // value: this.#histogram.fTitle,\n // color: this.#themeProvider.getPrimaryFontColor()\n // },\n // rotation: {\n // x: 0,\n // y: 123,\n // z: 0\n // },\n // position: {\n // x: this.#xOffset - 90,\n // y: maxZLength + 16.5,\n // z: this.#yOffset + 90\n // },\n // innerText: {\n // value: 'Press V to show projections or controls',\n // color: this.#themeProvider.getPrimaryFontColor()\n // }\n // }\n /* \n (\n <a-entity\n key={115000 + count + this.#id}\n text={`value: ${\n this.#histogram.fTitle\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 270; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${this.#xOffset - 90} ${maxZLength + 16.5} ${\n this.#yOffset + 90\n }`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press V to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) \n // add file title\n elements.titles[1] = {\n key: 120001 + this.#id,\n text: {\n value: this.#histogram.fName,\n color: this.#themeProvider.getPrimaryFontColor()\n },\n rotation: {\n x: 0,\n y: 330,\n z: 0\n },\n position: {\n x: this.#xOffset + 120,\n y: maxZLength + 16.5,\n z: this.#yOffset - 70\n },\n innerText: {\n value: 'Press buttonY to show projections or controls',\n color: this.#themeProvider.getPrimaryFontColor()\n }\n } /* (\n <a-entity\n key={120000 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fName\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + 120} ${maxZLength + 16.5} ${\n this.#yOffset - 70\n }`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press buttonY to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) */\n count++\n const bannerWidthX =\n this.#range > this.#xLimit ? this.#xLimit + 1 : this.#range\n const bannerWidthY =\n this.#range > this.#yLimit ? this.#yLimit + 1 : this.#range\n elements.ground = {\n key: 125000 + count + this.#id,\n scale: {\n width: bannerWidthX + 8,\n height: 0.2,\n depth: bannerWidthY + 8\n },\n animation: {\n fromX: this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset,\n fromY: this.#zOffset - 1.5 + this.#shift.zOffset,\n fromZ: this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset,\n toX: this.#xOffset + bannerWidthX * 0.5 - 1,\n toY: this.#zOffset - 1.5,\n toZ: this.#yOffset + bannerWidthY * 0.5 - 0.5\n }\n } /* (\n <a-box\n key={125000 + count + this.#id}\n width={bannerWidthX + 8}\n material='color: #171717'\n height={0.2}\n depth={bannerWidthY + 8}\n // position={`${this.#xOffset + 2.5} -0.5 ${this.#yOffset + 2.5}`}\n animation={`property: position; from: ${\n this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset\n } ${this.#zOffset - 1.5 + this.#shift.zOffset}\n ${this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset};\n to: ${this.#xOffset + bannerWidthX * 0.5 - 1} ${this.#zOffset - 1.5} ${\n this.#yOffset + bannerWidthY * 0.5 - 0.5\n }dur: 1100;`}\n />\n ) */\n // add banner\n /*\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th3-banner'\n text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + this.#range / 2 + 2.5} ${\n this.#zOffset + this.#range / 2 + 1.5\n } ${maxYLength + 8}`}\n >\n <a-entity rotation='0 180 0' position='0 6 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n // add banner with mappings\n count++\n elements.banners[1] = {\n key: 130000 + count + this.#id,\n id: 'th-mapping',\n geometry: {\n width: 1,\n height: 15,\n depth: 22\n },\n position: {\n x: maxXLength + 8,\n y: this.#zOffset + this.#range / 2 + 0.5,\n z: this.#yOffset + this.#range / 2 + 2.5\n },\n material: {\n color: '#ffffff',\n transparent: true\n }\n } /* (\n <a-box\n key={130000 + count + this.#id}\n id='th-mapping'\n geometry='width:1; height:15; depth:22;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8} ${this.#zOffset + this.#range / 2 + 0.5}\n ${this.#yOffset + this.#range / 2 + 2.5}`}\n material='transparent:true'\n />\n ) */\n /*\n count++\n elements.banners[2] = {\n key: 135000 + count + this.#id,\n id: 'th-background',\n geometry: {\n width: 0.2,\n height: 15,\n depth: 24\n },\n position: {\n x: maxXLength + 8.2,\n y: this.#zOffset + this.#range / 2 + 0.5,\n z: this.#yOffset + 1 + this.#range / 2 + 1.5\n },\n material: {\n color: '#ffffff',\n transparent: false\n }\n } (\n <a-box\n key={135000 + count + this.#id}\n id='th-background'\n geometry='width:0.2; height:15; depth:24;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8.2} ${this.#zOffset + this.#range / 2 + 0.5}\n ${this.#yOffset + 1 + this.#range / 2 + 1.5}`}\n material='color: white, transparent:false'\n />\n ) */\n // add normal and reversed labels into elements\n elements.labels = [...normalAxis, ...reversedAxis]\n\n return elements\n }\n\n /**\n * Funkcia na základe atribútov objektu vytvorí všetky potrebné entity pre histogram TH2.\n * @param {string} projectionFunction - parameter určuje, ktorý vizualizačný mód bude použity pri vytvorení entít\n * @return {Object} elements - vracia objekt obsahujúci roztriedené všetky potrebné entity histogramu pre VR\n */\n #createTH2Histogram = (projectionFunction) => {\n // get selected bins from local storage\n this.#selectedBins = localStorageService.getBinsFromLocalStorage()\n\n // react elements to draw the histogram\n const elements = {\n type: 'TH2',\n bins: [],\n labels: [],\n banners: [],\n ground: {},\n titles: [],\n axisLabels: []\n }\n // variables for rendering the histogram\n let centeredYPosition\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let c\n const binName = ''\n let absoluteContent\n let count = 0\n // bin attributes\n // const binScale = ndmVrStorage.loadBinScale('TH2')\n // max length\n const maxXLength =\n this.#xOffset + this.#range > this.#histogram.fXaxis.fNbins\n ? this.#histogram.fXaxis.fNbins\n : this.#xOffset + this.#range\n const maxYLength =\n this.#yOffset + this.#range > this.#histogram.fYaxis.fNbins\n ? this.#histogram.fYaxis.fNbins\n : this.#yOffset + this.#range\n const xTitle =\n this.#histogram.fXaxis.fTitle !== '' ? this.#histogram.fXaxis.fTitle : 'x'\n const yTitle =\n this.#histogram.fYaxis.fTitle !== '' ? this.#histogram.fYaxis.fTitle : 'y'\n const xLabels = this.#histogram.fXaxis.fLabels\n ? this.#histogram.fXaxis.fLabels.arr\n : []\n const yLabels = this.#histogram.fYaxis.fLabels\n ? this.#histogram.fYaxis.fLabels.arr\n : []\n // reset previous bins\n const currentBinScales = []\n\n // generate react elements of the bins\n for (let iy = this.#yOffset; iy <= maxYLength; iy++) {\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n xcenter = this.#histogram.fXaxis.GetBinCenter(ix)\n xmin = this.#histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = this.#histogram.fYaxis.GetBinCenter(iy)\n ymin = this.#histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n absoluteContent = this.#histogram.getBinContent(ix, iy)\n c = this.#optimizeBinContent(absoluteContent, this.#histogram.fMaximum)\n centeredYPosition = (c * this.#range * this.#contentScale) / 16\n\n // set a-frame entity box\n // set children component\n if (c > this.#minDisplayedContent) {\n const projectionColor = this.#projectionFunction(\n projectionFunction,\n xmin,\n ymin\n )\n const color =\n projectionColor === ''\n ? this.#themeProvider.getBinColor(c)\n : projectionColor\n\n // check bin status\n const id =\n this.#id + xmin + 'th2' + xmax + 'th2' + ymin + 'th2' + ymax\n let markedColor\n if (this.#checkBinState(id)) {\n markedColor = this.#themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n typeName: 'TH2'\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: 'none';\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${0};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${0};\n xPos: ${ix};\n yPos: ${iy};\n zPos: ${0};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n yCenter: ${0};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${0};\n markedColor: ${markedColor};\n selectColor: ${this.#themeProvider.getSecondaryAccentColor()};\n axisX: ${this.#themeProvider.getAxisColor('x')};\n axisY: ${this.#themeProvider.getAxisColor('y')};\n axisZ: ${this.#themeProvider.getAxisColor('z')}`\n\n const width = xwidth / this.#xWidth / this.#binScaleCoef\n const depth = ywidth / this.#yWidth / this.#binScaleCoef\n const posX = ix - 1\n const posY = iy - 1\n elements.bins[count] = {\n id: id,\n color: color,\n binData: binData,\n content: absoluteContent,\n animation: {\n fromWidth: width,\n fromHeight: this.#getPreviousBinScales(id),\n fromDepth: depth,\n toWidth: width,\n toHeight: (c * this.#range * this.#contentScale) / 8,\n toDepth: depth\n },\n animation2: {\n fromX: posX + this.#shift.xOffset,\n fromY: centeredYPosition,\n fromZ: posY + this.#shift.yOffset,\n toX: posX,\n toY: centeredYPosition,\n toZ: posY\n },\n animation3: {\n fromColor: this.#getPreviousBinColor(id),\n toColor: markedColor\n }\n }\n /* (\n <a-box\n key={id}\n class='clickable'\n material={`color: ${markedColor}; opacity: 0.75;`}\n binth2={binData}\n // position={`${posX} ${centeredYPosition} ${posY}`}\n mouseevent\n animation={`property: scale; from: ${width} ${this.#getPreviousBinScales(\n id\n )} ${depth}; to: ${width} ${c} ${depth}; delay:100; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.75; dur: 2000;'\n animation__2={`property: position; from: ${\n posX + this.#shift.xOffset\n } ${centeredYPosition} ${\n posY + this.#shift.yOffset\n }; to: ${posX} ${centeredYPosition} ${posY}; dur: 1000;`}\n // animation__3={`property: material.color; from: ${this.#getPreviousBinColor(\n // >/ id\n // )}; to: ${markedColor}; dur: 2600;`}\n />\n ) */\n currentBinScales[count] = {\n key: id,\n scale: c,\n color: markedColor\n }\n }\n count++\n }\n }\n this.#previousBins = currentBinScales\n // create arrays for labels\n const normalAxis = []\n const reversedAxis = []\n // set axis\n count = 0\n for (let iy = this.#yOffset; iy <= maxYLength; iy++) {\n normalAxis[count] = this.#createAxisEntity(\n 1500 + count,\n this.#xOffset - 2.5,\n 0,\n iy - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `${\n yLabels[iy - 1]\n ? yLabels[iy - 1].fString\n : Math.round(\n (this.#labels.yInitial +\n (iy - 1) * this.#yWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 3000 + count,\n maxXLength + 0.5,\n 0,\n iy - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `${\n yLabels[iy - 1]\n ? yLabels[iy - 1].fString\n : Math.round(\n (this.#labels.yInitial +\n (iy - 1) * this.#yWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n // axis title\n count++\n }\n // add y label\n elements.axisLabels[0] = {\n id: 'leftLabel',\n key: 4500 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 270,\n z: 0\n },\n animation: {\n fromX: this.#xOffset - 4 + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: this.#yOffset + 0.5 + this.#shift.yOffset,\n toX: this.#xOffset - 4,\n toY: 0,\n toZ: this.#yOffset + 0.5\n }\n } /* (\n <a-entity\n id='leftLabel'\n key={4500 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n // position={`${this.#xOffset - 4} ${0} ${this.#yOffset + 0.5}`}\n animation={`property: position; from: ${\n this.#xOffset - 4 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n this.#yOffset + 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 4} ${0} ${this.#yOffset + 0.5}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[1] = {\n id: 'rightLabel',\n key: 6001 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 90,\n z: 0\n },\n animation: {\n fromX: maxXLength + 2 + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: maxYLength - 2.5 + this.#shift.yOffset,\n toX: maxXLength + 2,\n toY: 0,\n toZ: maxYLength - 2.5\n }\n }\n /* (\n <a-entity\n id='rightLabel'\n key={6000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n // position={`${maxXLength + 2} ${0} ${maxYLength - 2.5}`}\n animation={`property: position; from: ${\n maxXLength + 2 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n maxYLength - 2.5 + this.#shift.yOffset\n }; to: ${maxXLength + 2} ${0} ${maxYLength - 2.5}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n // generate x axis\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n normalAxis[count] = this.#createAxisEntity(\n 7500 + count,\n ix - 1,\n 0,\n this.#yOffset - 2.5,\n 270,\n 270,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial +\n (ix - 1) * this.#xWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 9000 + count,\n ix - 1,\n 0,\n maxYLength + 0.5,\n 270,\n 90,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial +\n (ix - 1) * this.#xWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n }\n // add x label\n elements.axisLabels[2] = {\n id: 'downLabel',\n key: 10502 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 180,\n z: 0\n },\n animation: {\n fromX: this.#xOffset + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: this.#yOffset - 4 + this.#shift.yOffset,\n toX: this.#xOffset,\n toY: 0,\n toZ: this.#yOffset - 4\n }\n } /* (\n <a-entity\n id='downLabel'\n key={10500 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n // position={`${this.#xOffset} ${0} ${this.#yOffset - 4}`}\n animation={`property: position; from: ${\n this.#xOffset + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n this.#yOffset - 4 + this.#shift.yOffset\n }; to: ${this.#xOffset} ${0} ${this.#yOffset - 4}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[3] = {\n id: 'upLabel',\n key: 12003 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 0,\n z: 0\n },\n animation: {\n fromX: maxXLength - 2.5 + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: maxYLength + 2 + this.#shift.yOffset,\n toX: maxXLength - 2.5,\n toY: 0,\n toZ: maxYLength + 2\n }\n } /* (\n <a-entity\n id='upLabel'\n key={12000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n // position={`${maxXLength - 2.5} ${0} ${maxYLength + 2}`}\n animation={`property: position; from: ${\n maxXLength - 2.5 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${maxYLength + 2 + this.#shift.yOffset}; to: ${\n maxXLength - 2.5\n } ${0} ${maxYLength + 2}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n\n // generate y axis\n normalAxis[count] = this.#createAxisEntity(\n 13500 + count,\n maxXLength + 0.5,\n 0,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 15000 + count,\n maxXLength + 0.5,\n 0,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n normalAxis[count] = this.#createAxisEntity(\n 16500 + count,\n this.#xOffset - 2.5,\n 0,\n maxYLength + 0.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 18000 + count,\n this.#xOffset - 2.5,\n 0,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n // add histogram title\n count++\n elements.titles[0] = {\n key: 195000 + this.#id,\n text: {\n value: this.#histogram.fTitle,\n color: this.#themeProvider.getPrimaryFontColor()\n },\n rotation: {\n x: 0,\n y: 123,\n z: 0\n },\n position: {\n x: this.#xOffset - 90,\n y: 16.5,\n z: this.#yOffset + 90\n },\n innerText: {\n value: 'Press V to show projections or controls',\n color: this.#themeProvider.getPrimaryFontColor()\n }\n } /* (\n <a-entity\n key={19500 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fTitle\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 270; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${this.#xOffset - 90} ${16.5} ${this.#yOffset + 90}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press V to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) \n // add file title\n elements.titles[1] = {\n key: 195001 + this.#id,\n text: {\n value: this.#histogram.fName,\n color: this.#themeProvider.getPrimaryFontColor()\n },\n rotation: {\n x: 0,\n y: 330,\n z: 0\n },\n position: {\n x: this.#xOffset + 120,\n y: 16.5,\n z: this.#yOffset - 70\n },\n innerText: {\n value: 'Press buttonY to show projections or controls',\n color: this.#themeProvider.getPrimaryFontColor()\n }\n } /* (\n <a-entity\n key={21000 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fName\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + 120} ${16.5} ${this.#yOffset - 70}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press buttonY to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) */\n // add banner\n count++\n const bannerWidthX =\n this.#range > this.#xLimit ? this.#xLimit + 1 : this.#range\n const bannerWidthY =\n this.#range > this.#yLimit ? this.#yLimit + 1 : this.#range\n elements.ground = {\n key: 22500 + count + this.#id,\n scale: {\n width: bannerWidthX + 8,\n height: 0.2,\n depth: bannerWidthY + 8\n },\n animation: {\n fromX: this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset,\n fromY: -0.5,\n fromZ: this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset,\n toX: this.#xOffset + bannerWidthX * 0.5 - 1,\n toY: -0.5,\n toZ: this.#yOffset + bannerWidthY * 0.5 - 0.5\n }\n } /* (\n <a-box\n key={22500 + count + this.#id}\n width={bannerWidthX + 8}\n material='color: #171717'\n height={0.2}\n depth={bannerWidthY + 8}\n // position={`${this.#xOffset + 2.5} -0.5 ${this.#yOffset + 2.5}`}\n animation={`property: position; from: ${\n this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset\n }\n -0.5\n ${this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset};\n to:\n ${this.#xOffset + bannerWidthX * 0.5 - 1} -0.5 ${\n this.#yOffset + bannerWidthY * 0.5 - 0.5\n }; dur: 1000;`}\n />\n ) */\n /*\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th2-banner'\n // text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + this.#range / 2 + 2.5} 4.5 ${\n maxYLength + 8\n }`}\n >\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n // add banner with mappings\n count++\n elements.banners[1] = {\n key: 240000 + count + this.#id,\n id: 'th-mapping',\n geometry: {\n width: 0.1,\n height: 15,\n depth: 22\n },\n position: {\n x: maxXLength + 8,\n y: 7,\n z: this.#yOffset + this.#range / 2 + 2.5\n },\n material: {\n color: '#ffffff',\n transparent: true\n }\n } /* (\n <a-box\n key={24000 + count + this.#id}\n id='th-mapping'\n geometry='width:0.1; height:15; depth:22;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8} 7\n ${this.#yOffset + this.#range / 2 + 2.5}`}\n material='transparent:true'\n />\n )\n count++\n elements.banners[2] = {\n key: 255000 + count + this.#id,\n id: 'th-background',\n geometry: {\n width: 0.2,\n height: 16,\n depth: 24\n },\n position: {\n x: maxXLength + 8.2,\n y: 7,\n z: this.#yOffset + 1 + this.#range / 2 + 1.5\n },\n material: {\n color: '#ffffff',\n transparent: false\n }\n } (\n <a-box\n key={25500 + count + this.#id}\n id='th-background'\n geometry='width:0.2; height:16; depth:24;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8.2} 7\n ${this.#yOffset + 1 + this.#range / 2 + 1.5}`}\n material='color: white, transparent:false'\n />\n ) */\n\n // add normal and reversed labels into elements\n elements.labels = [...normalAxis, ...reversedAxis]\n\n return elements\n }\n\n /**\n * Funkcia mapuje hodnotu obsahu do určitého rozsahu.\n * @param {number} binContent - Aktuálny obsah binu, ktorý obsahuje objekt histogramu\n * @param {number} maxContent - Maximálny možný obsah, ktorý bin môže nadobudnúť\n * @return {number} binContent - Vracia optimalizovaný obsah v potrebnom rozsahu\n */\n getElements(projectionFunction) {\n // generate all necessary element\n let elements = {}\n if (this.#type.includes('TH2')) {\n elements = this.#createTH2Histogram(projectionFunction)\n } else if (this.#type.includes('TH3')) {\n elements = this.#createTH3Histogram()\n }\n return elements\n }\n\n /**\n * Funkcia mapuje hodnotu obsahu do určitého rozsahu.\n * @param {number} binContent - Aktuálny obsah binu, ktorý obsahuje objekt histogramu\n * @param {number} maxContent - Maximálny možný obsah, ktorý bin môže nadobudnúť\n * @return {number} binContent - Vracia optimalizovaný obsah v potrebnom rozsahu\n */\n #optimizeBinContent = (binContent, maxContent) => {\n if (binContent <= 0) return 0\n if (maxContent > 1) {\n // round to 2 decimal numbers\n binContent =\n Math.round((binContent / maxContent + Number.EPSILON) * 100) / 100\n }\n\n return binContent\n }\n\n updateSection(axisOffset, increment, defaultRange) {\n if (this.#type.includes('TH3'))\n return this.#editTH3OffsetByOffset(axisOffset, increment, defaultRange)\n else if (this.#type.includes('TH2'))\n return this.#editTH2OffsetByOffset(axisOffset, increment, defaultRange)\n }\n\n /**\n * Funkcia upraví ofset, určí všetky podmienky a na základe nich vráti modifikované ofsety.\n * @param {Object} limits - Objekt, obsahujúci najvyššie povolené ofsety pre histogram\n * @param {Object} offsets - Objekt, obsahujúci všetky aktuálne ofsety pre histogram\n * @param {number} increment - Hodnota obsahujúca hodnotu, o ktoru sa modifikuje ofset\n * @param {string} axisOffset - Názov ofsetu, ktorý je potrebné modifikovať\n * @param {boolean} defaultRange - Ak je True, inkrement je predvolený (1), ak False použije sa hodnota parametra increment\n * @return {Object} result - Vracia objekt obsahujúci všetky aktualizované ofsety\n */\n #getValidOffset = (limits, offsets, increment, axisOffset, defaultRange) => {\n this.#shift = {\n xOffset: 0,\n yOffset: 0,\n zOffset: 0\n }\n if (increment) {\n if (defaultRange) {\n offsets[axisOffset] += 1\n this.#shift[axisOffset] = -1\n } else {\n offsets[axisOffset] += offsets.range\n this.#shift[axisOffset] = -offsets.range\n }\n if (limits[axisOffset] <= offsets.range) {\n offsets[axisOffset] = 1\n this.#shift[axisOffset] = 0\n return offsets\n }\n if (offsets[axisOffset] > limits[axisOffset] - offsets.range) {\n offsets[axisOffset] = limits[axisOffset] - offsets.range\n this.#shift[axisOffset] = 0\n return offsets\n }\n } else {\n if (defaultRange) {\n offsets[axisOffset] -= 1\n this.#shift[axisOffset] = 1\n } else {\n offsets[axisOffset] -= offsets.range\n this.#shift[axisOffset] = offsets.range\n }\n if (offsets[axisOffset] < 1) {\n offsets[axisOffset] = 1\n this.#shift[axisOffset] = 0\n return offsets\n }\n }\n return offsets\n }\n\n /**\n * Funkcia upravuje ofset sekcie pre TH3 histogram.\n * @param {string} axisOffset - Označenie ofsetu, ktorý je potrebné modifikovať\n * @param {number} increment - Hodnota, o ktorú je potrebné upraviť ofset\n * @param {boolean} defaultRange - Ak je True, inkrement je predvolený (1), ak False použije sa hodnota parametra increment\n * @return {Object} result - Vracia objekt obsahujúci všetky aktualizované ofsety\n */\n #editTH3OffsetByOffset = (axisOffset, increment, defaultRange) => {\n // set object with limits\n const limits = {\n xOffset: this.#xLimit,\n yOffset: this.#yLimit,\n zOffset: this.#zLimit\n }\n // set object with current offsets\n const offsets = {\n name: 'TH3',\n xOffset: this.#xOffset,\n yOffset: this.#yOffset,\n zOffset: this.#zOffset,\n range: this.#range\n }\n const result = this.#getValidOffset(\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n this.#xOffset = result.xOffset\n this.#yOffset = result.yOffset\n this.#zOffset = result.zOffset\n // return result as object\n return result\n }\n\n /**\n * Funkcia určuje upravený vzhľad binov, závislom na špeciálnej funkcií.\n * @param {string} projectionFunction - Definuje názov módu, ktorý bude použitý\n * @param {number} xMin - X súradnica binu, ktorý je potrebné upraviť\n * @param {number} yMin - Y súradnica binu, ktorý je potrebné upraviť\n * @return {string} color - Vracia HEX hodnotu farby, ktorá binu prislúcha\n */\n #projectionFunction = (projectionFunction, xMin, yMin) => {\n if (projectionFunction === 'feet' && this.#projections !== null) {\n const xIndex = xMin / this.#xWidth\n const yIndex = yMin / this.#yWidth\n try {\n const projectionHistogram =\n this.#projections.fFolders.arr[xIndex].fFolders.arr[yIndex].fFolders\n .arr[0]\n const LineColor = projectionHistogram.fFunctions.arr[0].fLineColor\n\n if (LineColor === 600) {\n return 'blue'\n } else if (LineColor === 632) {\n return 'red'\n }\n } catch (e) {\n return ''\n }\n }\n return ''\n }\n\n /**\n * Funkcia upravuje ofset sekcie pre TH2 histogram.\n * @param {string} axisOffset - Označenie ofsetu, ktorý je potrebné modifikovať\n * @param {number} increment - Hodnota, o ktorú je potrebné upraviť ofset\n * @param {boolean} defaultRange - Ak je True, inkrement je predvolený (1), ak False použije sa hodnota parametra increment\n * @return {Object} result - Vracia objekt obsahujúci všetky aktualizované ofsety\n */\n #editTH2OffsetByOffset = (axisOffset, increment, defaultRange) => {\n // set object with limits\n const limits = {\n xOffset: this.#xLimit,\n yOffset: this.#yLimit\n }\n // set object with current offsets\n const offsets = {\n name: 'TH2',\n xOffset: this.#xOffset,\n yOffset: this.#yOffset,\n range: this.#range\n }\n const result = this.#getValidOffset(\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n this.#xOffset = result.xOffset\n this.#yOffset = result.yOffset\n // return result as object\n return result\n }\n\n /**\n * Funkcia určuje predošlú veľkosť binu, Pri zmene veľkosti binu sa bin upráví z predošlej hodnoty na novú hodnotu.\n * @param {string} id - Identifikátor binu\n * @return {number} result - Vracia predošlú veľkosť binu\n */\n #getPreviousBinScales = (id) => {\n const previousBin = this.#previousBins.filter(\n (prevBin) => prevBin.key === id\n )\n if (previousBin[0] && previousBin[0].scale) {\n return previousBin[0].scale\n }\n return 0\n }\n\n /**\n * Funkcia určuje predošlú farbu binu, Pri zmene farby binu sa bin zmení z predošlej farby na novú farbu.\n * @param {string} id - Identifikátor binu\n * @return {string} result - Vracia HEX hodnotu predošlej farby binu\n */\n #getPreviousBinColor = (id) => {\n const previousBin = this.#previousBins.filter(\n (prevBin) => prevBin.key === id\n )\n if (previousBin[0] && previousBin[0].scale) {\n return previousBin[0].color\n }\n return '#ffffff'\n }\n}\n","import React, { useState, useEffect } from 'react'\nimport 'aframe'\nimport '../../aframeComponents/cursorEventAframeComponent'\nimport '../../aframeComponents/thAframeComponent'\nimport '../../aframeComponents/histogramAframeComponent'\nimport '../../aframeComponents/labelHandlerAframeComponent'\nimport HistogramReactFactory from '../../utils/histogramGenerator'\n// import { CameraService } from '../../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../../observables/histogramSubject'\n\n/**\n * React komponent pre vytvorenie histogramu.\n * @component\n * @param {string} name - Názov pre histogram\n * @param {Object} histogram - Objekt histogramu, ktorý sa bude v komponente vizualizovať\n * @param {Object} histoSection - Objekt obsahujúci údaje o sekcií a rozsahu, ktorý bude zobrazený\n * @param {Object} projections - Objekt obsahujúci súborovú štruktúru s projekciami\n * @param {number} range - Definuje rozsah, v prípade ak sa vizualizuje bez určených ofsetov iba určitý rozsah\n * @param {string} theme - Definuje tému pre vizualizáciu histogramu\n * @example\n * return (\n * <NdmVrHistogram3D\n * name={info.name}\n * histogram={data.histogram}\n * histoSection={data.section}\n * projections={data.projections}\n * range={data.range}\n * theme={info.theme}/>\n * )\n */\nconst NdmVrHistogram3D = ({\n name,\n histogram,\n histoSection,\n projections,\n range,\n theme\n}) => {\n // const unmounted = useRef(false)\n // pressed keys\n let subscription\n // const cameraService = new CameraService()\n // create factory\n const [factory] = useState(\n new HistogramReactFactory(\n name,\n histogram,\n histoSection || null,\n range,\n projections,\n theme || 'def'\n )\n )\n const [mode, setMode] = useState('default')\n const [elements, setElements] = useState(factory.getElements(mode))\n const [binMarkState, setBinMarkState] = useState(1)\n\n // handler functions\n // handle subscription\n const handleSubscription = (data) => {\n if (histogram._typename.includes(data.name)) {\n // save new section to local storage\n if (data.axis) {\n factory.updateSection(data.axis, data.increment, data.defaultRange)\n setElements(factory.getElements(mode))\n } else if (data.binMarkMode) {\n setBinMarkState((prevState) => {\n if (prevState + data.binMarkMode > 2) return 2\n if (prevState + data.binMarkMode < 1) return 1\n return prevState + data.binMarkMode\n })\n } else {\n setMode((prevState) =>\n prevState !== data.fFunction ? data.fFunction : prevState\n )\n }\n }\n }\n\n // use effect hooks\n // update histogram unique name\n useEffect(() => {\n factory.setUniqueName(name)\n setElements(factory.getElements(mode))\n }, [name])\n\n // update histogram and projection\n useEffect(() => {\n factory.setHistogram(histogram, projections)\n setElements(factory.getElements(mode))\n }, [histogram, projections])\n\n // update histogram section\n useEffect(() => {\n factory.setSection(histoSection)\n setElements(factory.getElements(mode))\n }, [histoSection])\n\n // update histogram section range\n useEffect(() => {\n factory.setRange(range)\n setElements(factory.getElements(mode))\n }, [range])\n\n // update histogram unique name\n useEffect(() => {\n factory.setTheme(theme)\n setElements(factory.getElements(mode))\n }, [theme])\n\n // update histogram with certain mode\n useEffect(() => {\n setElements(factory.getElements(mode))\n }, [mode])\n\n // subscription after render histogram\n useEffect(() => {\n if (histogram._typename.includes('TH2')) {\n subscription = histogramTH2Service\n .getChangedSection()\n .subscribe(handleSubscription)\n } else if (histogram._typename.includes('TH3')) {\n // toto\n subscription = histogramTH3Service\n .getChangedSection()\n .subscribe(handleSubscription)\n }\n return () => subscription.unsubscribe()\n }, [elements])\n\n if (elements?.bins) {\n return (\n <a-entity histogram-control>\n {elements.bins.map((bin) => (\n <a-box\n key={bin.id}\n class='clickable'\n material={`color: ${bin.color}; transparent: true`}\n binth={bin.binData}\n mouseevent\n animation={`property: scale; from: ${bin.animation.fromWidth} ${bin.animation.fromHeight} ${bin.animation.fromDepth}; to: ${bin.animation.toWidth} ${bin.animation.toHeight} ${bin.animation.toDepth}; delay:100; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.50; dur: 2000;'\n animation__2={`property: position; from: ${bin.animation2.fromX} ${bin.animation2.fromY} ${bin.animation2.fromZ}; to: ${bin.animation2.toX} ${bin.animation2.toY} ${bin.animation2.toZ}; dur: 1000;`}\n animation__3={`property: material.color; from: ${bin.animation3.fromColor}; to: ${bin.animation3.toColor}; dur: 1600;`}\n >\n <a-text\n value={bin.content}\n align='center'\n width='10'\n color='black'\n geometry='primitive:plane; width: 1; height: 1'\n material={`color: ${bin.animation3.toColor}; opacity: 0.50; transparent: true`}\n rotation='270 180 0'\n position={`0 ${binMarkState === 1 ? -0.5 : 0.501} 0`}\n />\n </a-box>\n ))}\n\n {elements.labels.map((label) => (\n <a-entity\n key={label.key}\n geometry={`primitive: ${label.geometry.primitive}; width:${label.geometry.width}; height:${label.geometry.height};`}\n text={`color: ${label.text.color}; width: ${label.text.width}; height: ${label.text.height}; align:center;`}\n label-handler={`value: ${label.labelHandler.value}; delay:${label.labelHandler.delay}`}\n rotation={`${label.rotation.x} ${label.rotation.y} ${label.rotation.z}`}\n material={`color: ${label.material.color}; transparent: true`}\n animation='property: text.width; from: 0; to: 4; dur: 1000;'\n animation__1='property: material.opacity; from: 0; to: 0.8; dur: 1500;'\n animation__2={`property: position; from: ${label.animation.fromX} ${label.animation.fromY} ${label.animation.fromZ}; to: ${label.animation.toX} ${label.animation.toY} ${label.animation.toZ}; dur: 1005;`}\n />\n ))}\n {elements.titles.map((title) => (\n <a-entity\n key={title.key}\n text={`value: ${title.text.value}; color: ${title.text.color}; width: 230; height:auto; align:center;`}\n rotation={`${title.rotation.x} ${title.rotation.y} ${title.rotation.z}`}\n position={`${title.position.x} ${title.position.y} ${title.position.z}`}\n material='transparent: true'\n >\n <a-text\n value={title.innerText.value}\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={title.innerText.color}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white; transparent: true'\n />\n </a-entity>\n ))}\n {elements.axisLabels.map((axisLabel) => (\n <a-entity\n id={axisLabel.id}\n key={axisLabel.key}\n text={`value: ${axisLabel.text.value}; color: ${axisLabel.text.color}; width: 10; height:auto; align:center;`}\n rotation={`${axisLabel.rotation.x} ${axisLabel.rotation.y} ${axisLabel.rotation.z}`}\n animation={`property: position; from: ${axisLabel.animation.fromX} ${axisLabel.animation.fromY} ${axisLabel.animation.fromZ}; to: ${axisLabel.animation.toX} ${axisLabel.animation.toY} ${axisLabel.animation.toZ}; dur: 1000;`}\n material='opacity: 0; transparent: true'\n />\n ))}\n {elements.ground && (\n <a-box\n key={elements.ground.key}\n width={elements.ground.scale.width}\n material='color: #fafafa'\n height={elements.ground.scale.height}\n depth={elements.ground.scale.depth}\n animation={`property: position; from: ${elements.ground.animation.fromX} ${elements.ground.animation.fromY} ${elements.ground.animation.fromZ};\n to:\n ${elements.ground.animation.toX} ${elements.ground.animation.toY} ${elements.ground.animation.toZ}; dur: 1000;`}\n />\n )}\n {elements.banners.map((banner) => (\n <a-box\n key={banner.key}\n id={banner.id}\n geometry={`width:${banner.geometry.width}; height:${banner.geometry.height}; depth:${banner.geometry.depth};`}\n position={`${banner.position.x} ${banner.position.y} ${banner.position.z}`}\n material={`color: ${banner.material.color}, transparent: ${banner.material.transparent}`}\n />\n ))}\n </a-entity>\n )\n } else {\n return (\n <a-box\n animation__1='property: rotation; to: 0 180 360; dur: 10000; easing: linear; loop: true'\n animation__2='property: scale; from: 1 1 1; to: 10 10 10; dur: 15000; timeout: 15000; loop: true; easing: linear; dir: alternate'\n animation__color='property: material.color; from: #003682; to: #7d0002; dur: 80000: easing: linear: loop: true; dir: alternate'\n position='0 1.5 -2'\n />\n )\n }\n}\n\nexport default NdmVrHistogram3D\n","import React from 'react'\n\nexport default function NdmVrLaboratory() {\n return (\n <React.Fragment>\n <a-sky color='#dbf0fe'></a-sky>\n <a-plane\n rotation='-90 0 0'\n position='0 -0.5 0'\n width='1000'\n height='1000'\n color='#aaa'\n material='shader:flat;'\n ></a-plane>\n </React.Fragment>\n )\n}\n","import React from 'react'\nimport NdmVrCamera from '../NdmVrCamera'\nimport NdmVrHistogram3D from '../NdmVrHistogram3D'\nimport NdmVrLaboratory from '../NdmVrLaboratory'\n\n/**\n * React komponent pre vytvorenie VR scény s všetkými potrebnými komponentami.\n * @component\n * @param {Object} data - Objekt obsahuje objekty histogramu, sekcie poprípade projekcie\n * @param {Object} info - Objekt obsahuje sekundárne údaje (meno, témy, atribúty pozadia v scéne)\n * @example\n * data = {\n * histogram: histograms.physics,\n * projections: histograms.projections,\n * section: section\n * }\n * info = {\n * name: 'Physics',\n * theme: theme,\n * background: {\n * url: './ndmvr/backgrounds/background1.jpg',\n * radius: '3000',\n * height: '2048',\n * width: '2048'\n * }\n * }\n * return (\n * <NdmVrScene data={data} info={info} />\n * )\n */\nconst NdmVrScene = ({ data, info }) => {\n return (\n <a-scene\n embedded\n style={{\n zIndex: '1',\n width: '100%',\n minHeight: 'calc(90vh)'\n }}\n >\n <a-assets>\n <img id='skyTexture' src={info.background.url} alt='background' />\n </a-assets>\n\n <NdmVrLaboratory />\n\n <NdmVrCamera />\n <NdmVrHistogram3D\n name={info.name}\n histogram={data.histogram}\n histoSection={data.section}\n projections={data.projections}\n range={data.range}\n theme={info.theme}\n />\n {/* <a-sky\n height={info.background.height ? info.background.height : '2048'}\n radius={info.background.radius ? info.background.radius : '3000'}\n width={info.background.width ? info.background.width : '2048'}\n src={\n info.background.url\n ? info.background.url\n : './ndmvr/backgrounds/background1.jpg'\n }\n position={`${info.background.xPosition ? info.background.xPosition : 0}\n ${info.background.yPosition ? info.background.yPosition : 1000}\n ${info.background.zPosition ? info.background.zPosition : 1000}`}\n /> */}\n </a-scene>\n )\n}\n\nexport default NdmVrScene\n","/* object for creating the entity builder from templates */\n\nexport default class EntityBuilder {\n model = null\n constructor(model) {\n this.model = model\n }\n\n updateElement(count, histogramElm, element, entityType) {\n if (this.model[element].elements[count]) {\n if (element === 'titles') {\n this.createTitle(\n this.model[element].elements[count],\n this.model[element].attributes[count]\n )\n } else {\n this.createElement(\n this.model[element].elements[count],\n this.model[element].attributes[count],\n entityType\n )\n }\n } else {\n let newElement\n\n if (element === 'titles') {\n newElement = this.createTitle(\n undefined,\n this.model[element].attributes[count]\n )\n } else {\n newElement = this.createElement(\n undefined,\n this.model[element].attributes[count],\n entityType\n )\n }\n this.model[element].elements[count] = newElement\n histogramElm.appendChild(newElement)\n }\n }\n\n deleteUnnecessaryElements(count, element) {\n const newLength = count\n // overbins\n if (element.length === 1) {\n while (this.model[element[0]].elements[count]) {\n this.model[element[0]].elements[count].remove()\n count++\n }\n this.model[element[0]].elements.length = newLength\n this.model[element[0]].attributes.length = newLength\n } else {\n while (this.model[element[0]].elements[count]) {\n this.model[element[0]].elements[count].remove()\n this.model[element[1]].elements[count].remove()\n count++\n }\n this.model[element[0]].elements.length = newLength\n this.model[element[0]].attributes.length = newLength\n this.model[element[1]].elements.length = newLength\n this.model[element[1]].attributes.length = newLength\n }\n }\n\n createElement(Element, data, type) {\n let element = Element\n if (element === undefined || element === null) {\n const entityType = this.checkEntityType(type)\n element = document.createElement(entityType)\n }\n for (const feature in data) {\n element.setAttribute(feature, data[feature])\n }\n return element\n }\n\n createBannerElement(Element, linesCount, data) {\n let parent = Element\n if (parent === undefined || parent === null) {\n parent = document.createElement('a-entity')\n const array = this.createBannerLines(linesCount, data)\n array.map((element) => parent.append(element))\n }\n parent.setAttribute('position', data.position)\n parent.setAttribute('id', data.id)\n return parent\n }\n\n createBannerLines(linesCount, data) {\n const array = []\n for (let i = linesCount - 1; i > -1; i--) {\n data.line.position.y = 2 * i\n const line = document.createElement('a-entity')\n line.setAttribute('rotation', data.line.rotation)\n line.setAttribute('position', data.line.position)\n line.setAttribute('text', data.line.text)\n array.push(line)\n }\n const background = document.createElement('a-entity')\n background.setAttribute('geometry', data.background.geometry)\n background.setAttribute('position', data.background.position)\n background.setAttribute('material', data.background.material)\n array.push(background)\n return array\n }\n\n createTitle(Element, data) {\n let parent = Element\n if (parent === undefined || parent === null) {\n parent = document.createElement('a-entity')\n const child = this.createElement(undefined, data.background)\n parent.appendChild(child)\n }\n delete data.background\n return this.createElement(parent, data)\n }\n\n checkEntityType(type) {\n if (\n type === 'a-box' ||\n type === 'a-sphere' ||\n type === 'a-text' ||\n type === 'a-circle' ||\n type === 'a-text'\n ) {\n return type\n } else {\n return 'a-entity'\n }\n }\n}\n","/* object for creating the entity templates for entities */\n\nexport default class EntityTemplate {\n bannerTemplate(data, lineData, backgroundData) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const id = data.id\n const background = this.bannerBackgroundTemplate(backgroundData)\n const line = this.lineTemplate(lineData)\n return {\n position: position,\n id: id,\n background: background,\n line: line\n }\n }\n\n binTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const scale = {\n x: data.scaleX,\n y: data.scaleY,\n z: data.scaleZ\n }\n const material = {\n color: data.color,\n opacity: 0.75\n }\n const clas = data.class\n const binTh2 = data.data\n const id = data.id\n return {\n position: position,\n scale: scale,\n material: material,\n id: id,\n class: clas,\n binth2: binTh2,\n mouseevent: ''\n }\n }\n\n labelTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const geometry = {\n primitive: 'plane',\n width: 4,\n height: 1\n }\n const text = {\n value: data.value,\n color: data.color,\n width: 10,\n height: 'auto',\n align: 'center'\n }\n const material = {\n opacity: 0\n }\n const id = data.id\n return {\n position: position,\n rotation: rotation,\n geometry: geometry,\n text: text,\n material: material,\n id: id\n }\n }\n\n axisTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const geometry = {\n primitive: 'plane',\n width: data.width,\n height: data.height\n }\n const text = {\n value: data.value,\n color: 'black',\n width: 4,\n height: 'auto',\n align: 'center'\n }\n const material = {\n color: data.color,\n opacity: 0.8\n }\n return {\n position: position,\n rotation: rotation,\n geometry: geometry,\n text: text,\n material: material\n }\n }\n\n titleTemplate(data, textData) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const material = {\n opacity: 0\n }\n const text = {\n value: data.title,\n color: data.color,\n width: 230,\n height: 'auto',\n align: 'center'\n }\n const back = this.titleTextTemplate(textData)\n return {\n position: position,\n rotation: rotation,\n material: material,\n text: text,\n background: back\n }\n }\n\n titleTextTemplate(data) {\n const geometry = {\n primitive: 'plane',\n width: data.width,\n height: data.height\n }\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const material = {\n color: data.color,\n opacity: 0.6\n }\n return {\n position: position,\n geometry: geometry,\n material: material\n }\n }\n\n lineTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const text = {\n value: '',\n width: 14,\n height: 'auto',\n align: 'center'\n }\n return {\n position: position,\n rotation: rotation,\n text: text\n }\n }\n\n bannerBackgroundTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const geometry = {\n primitive: 'box',\n width: data.width,\n height: data.height,\n depth: data.depth\n }\n const material = {\n color: data.color\n }\n return {\n position: position,\n geometry: geometry,\n material: material\n }\n }\n}\n","// import React from 'react'\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport 'aframe'\nimport EntityBuilder from './EntityBuilder'\nimport EntityTemplate from './EntityTemplate'\nimport ThemeProvider from '../resources/themeProvider'\n\nlet selectedBins = []\n\nfunction checkBinState(binId) {\n const updatedArray = selectedBins.filter((item) => item.id === binId)\n return updatedArray.length !== 0\n}\n// create axis entity\n/*\nfunction createAxisEntity(\n id,\n positionX,\n positionY,\n positionZ,\n rotationX,\n rotationY,\n rotationZ,\n width,\n height,\n value,\n color\n) {\n const element = document.createElement('a-entity')\n element.setAttribute('position', {\n x: positionX,\n y: positionY,\n z: positionZ\n })\n element.setAttribute('rotation', {\n x: rotationX,\n y: rotationY,\n z: rotationZ\n })\n element.setAttribute('geometry', {\n primitive: 'plane',\n width: width,\n height: height\n })\n element.setAttribute('text', {\n value: value,\n color: 'black',\n width: 14,\n height: 'auto',\n align: 'center'\n })\n element.setAttribute('material', {\n color: color,\n opacity: 0.8\n })\n return element\n}\n*/\n// create th3 histogram\n/*\n function createTH3Histogram(histogram, xOffset, yOffset, zOffset, range) {\n // get selected bins from local storage\n selectedBins = localStorageService.getBinsFromLocalStorage()\n // react elements to draw the histograms\n const elements = {\n bins: [],\n normalAxis: [],\n reversedAxis: [],\n banners: []\n }\n // variables for rendering the histogram\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let zcenter, zmin, zmax, zwidth\n const binName = ''\n let absoluteContent\n let c\n let count = 0\n\n const maxXLength =\n xOffset + range > histogram.fXaxis.fXmax\n ? histogram.fXaxis.fXmax\n : xOffset + range\n const maxYLength =\n yOffset + range > histogram.fYaxis.fXmax\n ? histogram.fYaxis.fXmax\n : yOffset + range\n const maxZLength =\n zOffset + range > histogram.fZaxis.fXmax\n ? histogram.fZaxis.fXmax\n : zOffset + range\n\n const xTitle = histogram.fXaxis.fTitle\n const yTitle = histogram.fYaxis.fTitle\n const zTitle = histogram.fZaxis.fTitle\n\n // generate react elements of the bins\n for (let iz = zOffset; iz <= maxZLength; iz++)\n for (let iy = yOffset; iy <= maxYLength; iy++)\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n xcenter = histogram.fXaxis.GetBinCenter(ix)\n xmin = histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = histogram.fYaxis.GetBinCenter(iy)\n ymin = histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n zcenter = histogram.fZaxis.GetBinCenter(iz)\n zmin = histogram.fZaxis.GetBinLowEdge(iz)\n zmax = zcenter + (zcenter - zmin)\n zwidth = zmax - zmin\n absoluteContent = histogram.getBinContent(ix, iy, iz)\n c = optimizeBinContent(absoluteContent, histogram.fMaximum)\n\n // set a-frame entity box\n // set children component\n if (c > 0) {\n let size = c\n if (c < 0.15) size = 0.15\n\n const color = setBinColor(c)\n // check bin status\n const id =\n xmin +\n 'th3' +\n xmax +\n 'th3' +\n zmin +\n 'th3' +\n zmax +\n 'th3' +\n ymin +\n 'th3' +\n ymax\n let markedColor\n if (checkBinState(id)) {\n markedColor = '#FF3700'\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: ${zTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${zmin};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${zmax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n zCenter: ${zcenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${zwidth};\n markedColor: ${markedColor}`\n elements.bins[count] = `\n <a-box\n key=${count}\n class='clickable'\n material=color: ${markedColor}; opacity: 0.75;\n bin-th3=${binData}\n position=${xmin} ${zmin + 0.2} ${ymin}\n height=${size * 0.9}\n width=${size * 0.9}\n depth=${size * 0.9}\n mouseEvent\n />\n `\n }\n count++\n }\n\n // set axis\n count = 0\n for (let iz = yOffset; iz <= maxYLength; iz++) {\n const normalAxis = createAxisEntity(\n 1500 + count,\n -2.5 + xOffset,\n zOffset - 1,\n iz - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `__${iz - 1}`,\n 'green'\n )\n const reversedAxis = createAxisEntity(\n 4500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n iz - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `____\\n${iz - 1}`,\n 'green'\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add z label\n elements.normalAxis[count] = (\n <a-entity\n id='leftLabel'\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: green; width: 14; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n position={`${xOffset - 4} ${zOffset - 1} ${yOffset + 0.5}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='rightLabel'\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: green; width: 14; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n position={`${maxXLength + 2} ${zOffset - 1} ${maxYLength - 2.5}`}\n material='opacity: 0;'\n />\n )\n count++\n // generate x and y axis\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n const normalAxis = createAxisEntity(\n 1500 + count,\n ix - 1,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 1,\n 2,\n `''''|\\n${ix - 1}`,\n 'darkred'\n )\n const reversedAxis = createAxisEntity(\n 4500 + count,\n ix - 1,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 1,\n 2,\n `|''''\\n${ix - 1}`,\n 'darkred'\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add x label\n elements.normalAxis[count] = (\n <a-entity\n id='downLabel'\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: red; width: 14; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n position={`${xOffset} ${zOffset - 1} ${yOffset - 4}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='upLabel'\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: red; width: 14; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n position={`${maxXLength - 2.5} ${zOffset - 1} ${maxYLength + 2}`}\n material='opacity: 0;'\n />\n )\n count++\n // y axis\n elements.normalAxis[count] = createAxisEntity(\n 4500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n elements.reversedAxis[count] = createAxisEntity(\n 1500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n count++\n elements.normalAxis[count] = createAxisEntity(\n 1500 + count,\n xOffset - 2.5,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n elements.reversedAxis[count] = createAxisEntity(\n 1500 + count,\n xOffset - 2.5,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n count++\n // add y label\n /*\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${270} ${90}`}\n position={`${xOffset - 1.5} ${maxZLength - 1.5} ${yOffset - 2}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${90} ${90}`}\n position={`${maxXLength - 0.5} ${maxZLength - 1.5} ${maxYLength}`}\n material='opacity: 0;'\n />\n )\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${360} ${90}`}\n position={`${xOffset - 2} ${maxZLength - 1.5} ${maxYLength - 0.5}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${180} ${90}`}\n position={`${maxXLength - 0.5} ${maxZLength - 1.5} ${yOffset - 1.5}`}\n material='opacity: 0;'\n />\n )\n // add histogram title\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${histogram.fTitle}; color: black; width: 230; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${xOffset - 90} ${maxZLength - 6.5} ${yOffset + 90}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.6; color: white;'\n />\n </a-entity>\n )\n // add file title\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${xOffset + 120} ${-6.5} ${yOffset - 70}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.6; color: white;'\n />\n </a-entity>\n )\n // add banner\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th3-banner'\n text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${xOffset + range / 2 + 2.5} ${zOffset + range / 2 + 1.5} ${\n maxYLength + 8\n }`}\n >\n <a-entity rotation='0 180 0' position='0 6 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n// add banner with mappings\n/*\n elements.banners[1] = (\n <a-entity\n key={4500 + count + 3}\n id='th3-mapping'\n geometry='primitive: box; width:1; height:15; depth:15;'\n position={`${maxXLength + 8} ${zOffset + range / 2 + 0.5}\n ${yOffset + range / 2 + 2.5}`}\n material='opacity: 1; color: black;'\n />\n )\n\n return elements\n }\n */\n\n// create th2 histogram\nfunction createTH2Histogram(\n Element,\n model,\n histogram,\n xOffset,\n yOffset,\n range,\n theme\n) {\n // get selected bins from local storage\n selectedBins = localStorageService.getBinsFromLocalStorage()\n // react elements to draw the histogram\n\n const entityTemplate = new EntityTemplate()\n const entityBuilder = new EntityBuilder(model)\n const themeProvider = new ThemeProvider(theme)\n\n const data = {}\n\n const histogramElm = Element\n // variables for rendering the histogram\n let centeredYPosition\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let c\n const binName = ''\n let absoluteContent\n let count = 0\n const maxXLength =\n xOffset + range > histogram.fXaxis.fXmax\n ? histogram.fXaxis.fXmax\n : xOffset + range\n const maxYLength =\n yOffset + range > histogram.fYaxis.fXmax\n ? histogram.fYaxis.fXmax\n : yOffset + range\n const xTitle = histogram.fXaxis.fTitle\n const yTitle = histogram.fYaxis.fTitle\n const xLabels = histogram.fXaxis.fLabels ? histogram.fXaxis.fLabels.arr : []\n const yLabels = histogram.fYaxis.fLabels ? histogram.fYaxis.fLabels.arr : []\n\n // generate react elements of the bins\n for (let iy = yOffset; iy <= maxYLength; iy++) {\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n xcenter = histogram.fXaxis.GetBinCenter(ix)\n xmin = histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = histogram.fYaxis.GetBinCenter(iy)\n ymin = histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n absoluteContent = histogram.getBinContent(ix, iy)\n c = optimizeBinContent(absoluteContent, histogram.fMaximum)\n centeredYPosition = c / 2\n\n // set a-frame entity box\n // set children component\n if (c > 0) {\n const color = themeProvider.getBinColor(c)\n // check bin status\n const id = xmin + 'th2' + xmax + 'th2' + ymin + 'th2' + ymax\n let markedColor\n if (checkBinState(id)) {\n markedColor = themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n xMax: ${xmax};\n yMax: ${ymax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n markedColor: ${markedColor};\n selectColor: ${themeProvider.getSecondaryAccentColor()};\n axisX: ${themeProvider.getAxisColor('x')};\n axisY: ${themeProvider.getAxisColor('y')};\n axisZ: ${themeProvider.getAxisColor('z')}`\n\n data.id = id\n data.positionX = xmin\n data.positionY = centeredYPosition\n data.positionZ = ymin\n data.scaleX = xwidth / 2\n data.scaleY = c\n data.scaleZ = ywidth / 2\n data.color = markedColor\n data.class = 'clickable'\n data.data = binData\n\n model.bins.attributes[count] = entityTemplate.binTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'bins', 'a-box')\n count++\n }\n }\n }\n\n entityBuilder.deleteUnnecessaryElements(count, ['bins'])\n\n // generate YYYYYYYYYYYYYYYYYYYYYYYYYYYY axis\n // left up\n data.id = 1500 + count\n data.positionX = maxXLength + 0.5\n data.positionY = 0\n data.positionZ = maxYLength + 0.5\n data.rotationX = 270\n data.rotationY = 360\n data.rotationZ = 0\n data.width = 2\n data.height = 2\n data.value = `0`\n data.color = themeProvider.getAxisColor('y')\n model.normalXAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'normalXAxis', 'a-entity')\n\n // left down\n data.positionZ = yOffset - 2.5\n data.rotationX = 270\n data.rotationY = 180\n model.reversedYAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'reversedYAxis', 'a-entity')\n\n // right up\n data.positionX = xOffset - 2.5\n data.positionZ = maxYLength + 0.5\n\n model.normalYAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'normalYAxis', 'a-entity')\n\n // right down\n data.positionZ = yOffset - 2.5\n data.rotationY = 180\n model.reversedXAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'reversedXAxis', 'a-entity')\n\n // generate ZZZZZZZZZZZZZZZZZZ axis\n count = 1\n for (let iy = yOffset; iy <= maxYLength; iy++) {\n data.id = 1500 + count\n data.positionX = xOffset - 2.5\n data.positionY = 0\n data.positionZ = iy - 1\n data.rotationX = 270\n data.rotationY = 180\n data.rotationZ = 0\n data.width = 2\n data.height = 1\n data.value = `${yLabels[iy - 1] ? yLabels[iy - 1].fString : iy - 1}`\n data.color = themeProvider.getAxisColor('z')\n\n model.normalYAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'normalYAxis', 'a-entity')\n\n data.id = 4500 + count\n data.positionX = maxXLength + 0.5\n data.rotationY = 360\n data.value = `${yLabels[iy - 1] ? yLabels[iy - 1].fString : iy - 1}`\n\n // axis title\n model.reversedYAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(\n count,\n histogramElm,\n 'reversedYAxis',\n 'a-entity'\n )\n count++\n }\n\n entityBuilder.deleteUnnecessaryElements(count, [\n 'normalYAxis',\n 'reversedYAxis'\n ])\n\n count = 1\n // generate XXXXXXXXXXXXXXXX axis\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n data.id = 1500 + count\n data.positionX = ix - 1\n data.positionY = 0\n data.positionZ = yOffset - 2.5\n data.rotationX = 270\n data.rotationY = 270\n data.rotationZ = 0\n data.width = 2\n data.height = 1\n data.value = `${xLabels[ix - 1] ? xLabels[ix - 1].fString : ix - 1}`\n data.color = themeProvider.getAxisColor('x')\n\n model.normalXAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'normalXAxis', 'a-entity')\n\n data.id = 4500 + count\n data.positionZ = maxYLength + 0.5\n data.rotationX = 270\n data.rotationY = 90\n data.value = `${xLabels[ix - 1] ? xLabels[ix - 1].fString : ix - 1}`\n\n model.reversedXAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(\n count,\n histogramElm,\n 'reversedXAxis',\n 'a-entity'\n )\n count++\n }\n\n entityBuilder.deleteUnnecessaryElements(count, [\n 'normalXAxis',\n 'reversedXAxis'\n ])\n // add x label\n data.positionX = xOffset\n data.positionY = 0\n data.positionZ = yOffset - 4\n data.rotationX = 270\n data.rotationY = 180\n data.rotationZ = 0\n data.width = 4\n data.height = 1\n data.value = xTitle\n data.id = 'downLabel'\n\n model.labels.attributes[0] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'labels', 'a-entity')\n\n data.positionX = maxXLength - 2.5\n data.positionZ = maxYLength + 2\n data.rotationY = 0\n data.id = 'upLabel'\n\n model.labels.attributes[1] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(1, histogramElm, 'labels', 'a-entity')\n\n // add y label\n data.positionX = xOffset - 4\n data.positionY = 0\n data.positionZ = yOffset + 0.5\n data.rotationX = 270\n data.rotationY = 270\n data.rotationZ = 0\n data.width = 4\n data.height = 1\n data.value = yTitle\n data.color = themeProvider.getAxisColor('z')\n data.id = 'leftLabel'\n\n model.labels.attributes[2] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(2, histogramElm, 'labels', 'a-entity')\n\n data.positionX = maxXLength + 2\n data.positionZ = maxYLength - 2.5\n data.rotationX = 270\n data.rotationY = 90\n data.id = 'rightLabel'\n\n model.labels.attributes[3] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(3, histogramElm, 'labels', 'a-entity')\n\n data.positionX = xOffset - 90\n data.positionY = -6.5\n data.positionZ = yOffset + 90\n data.rotationX = 0\n data.rotationY = 123\n data.rotationZ = 0\n data.title = histogram.fTitle\n data.color = themeProvider.getPrimaryFontColor()\n\n const back = {}\n back.positionX = 0\n back.positionY = 0\n back.positionZ = -1\n back.width = 170\n back.height = 30\n back.color = 'white'\n\n model.titles.attributes[0] = entityTemplate.titleTemplate(data, back)\n entityBuilder.updateElement(0, histogramElm, 'titles', 'a-entity')\n\n // add file title\n data.positionX = xOffset + 120\n data.positionZ = yOffset - 70\n data.rotationY = 330\n data.title = histogram.fName\n\n model.titles.attributes[1] = entityTemplate.titleTemplate(data, back)\n entityBuilder.updateElement(1, histogramElm, 'titles', 'a-entity')\n}\n\n// edit bin content to range 0 - 1\nconst optimizeBinContent = (binContent, maxContent) => {\n if (binContent <= 0) return 0\n if (maxContent > 1) {\n // round to 2 decimal numbers\n binContent =\n Math.round((binContent / maxContent + Number.EPSILON) * 100) / 100\n }\n\n return binContent\n}\n\nexport { createTH2Histogram }\n// export { createTH3Histogram }\n","// component to insert data to th2i bin\nimport AFRAME from 'aframe'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite binu TH2 histogram, ktorá umožňuje zmenu atribútov entity.\n * @component binth2\n * @param {string} id - Identifikátor binu\n * @param {number} content - Hodnota optimalizovaného obsahu binu (predvolená 0)\n * @param {number} absoluteContent - Hodnota neoptimalizovaného obsahu binu (predvolená 0)\n * @param {string} binName - Meno binu\n * @param {string} xTitle - Titulok na osi x\n * @param {string} yTitle - Titulok na osi y\n * @param {number} xMin - Súradnica min binu na osi x\n * @param {number} yMin - Súradnica min binu na osi y\n * @param {number} xMax - Súradnica max binu na osi x\n * @param {number} yMax - Súradnica max binu na osi y\n * @param {number} xCenter - Súradnica stredu binu na osi x\n * @param {number} yCenter - Súradnica stredu binu na osi y\n * @param {number} xWidth - Šírka binu na osi x\n * @param {number} yWidth - Šírka binu na osi y\n * @param {string} color - Farba binu\n * @param {string} axisX - Farba označení na osi x\n * @param {string} axisY - Farba označení na osi y\n * @param {string} axisZ - Farba označení na osi z\n * @param {string} selectColor - Farba určená za zvolenie binu\n * @param {string} markedColor - Farba určená pre označenie binu (v poli označených binov)\n * @module th2AframeComponent\n */\n\n// aframe component for positioning histogram in scene\nAFRAME.registerComponent('binth2', {\n schema: {\n id: { type: 'string' },\n content: { default: 0 },\n absoluteContent: { default: 0 },\n binName: { default: '' },\n xTitle: { type: 'string' },\n yTitle: { type: 'string' },\n xMin: { type: 'number' },\n yMin: { type: 'number' },\n xMax: { type: 'number' },\n yMax: { type: 'number' },\n xCenter: { type: 'number' },\n yCenter: { type: 'number' },\n xWidth: { type: 'number' },\n yWidth: { type: 'number' },\n color: { type: 'string' },\n axisX: { type: 'string' },\n axisY: { type: 'string' },\n axisZ: { type: 'string' },\n selectColor: { type: 'string' },\n markedColor: { type: 'string' }\n },\n\n init: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: 'TH2',\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n },\n update: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: 'TH2',\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n }\n})\n","/* object for creating the histogram demos */\n\nexport default class HistogramDemoFactory {\n #jsroot\n\n constructor(jsroot) {\n this.#jsroot = jsroot\n }\n\n createTH2DemoHistogram(xLength, yLength, initialContent, contentIncrement) {\n const histo = this.#jsroot.createHistogram('TH2I', xLength, yLength)\n let cnt = initialContent\n for (let iy = 1; iy <= 20; iy++)\n for (let ix = 1; ix <= 20; ix++) {\n const bin = histo.getBin(ix, iy)\n let val = 0\n val = cnt\n histo.setBinContent(bin, val)\n // cnt += 0.1\n cnt += contentIncrement\n }\n\n histo.fXaxis.fTitle = 'x Axis'\n histo.fYaxis.fTitle = 'y Axis'\n histo.fName = \"You don't have a valid file path\"\n histo.fTitle = 'This is a TH2 histogram demo'\n histo.fMaximum = cnt\n\n return histo\n }\n\n createTH3DemoHistogram(\n xLength,\n yLength,\n zLength,\n initialContent,\n contentIncrement\n ) {\n const histo = this.#jsroot.createHistogram(\n 'TH3I',\n xLength,\n yLength,\n zLength\n )\n let cnt = initialContent\n\n for (let iz = 1; iz <= 20; iz++)\n for (let iy = 1; iy <= 20; iy++)\n for (let ix = 1; ix <= 20; ix++) {\n const bin = histo.getBin(ix, iy, iz)\n let val = 0\n val = cnt\n histo.setBinContent(bin, val)\n // cnt += 0.0005\n cnt += contentIncrement\n }\n\n histo.fXaxis.fTitle = 'x Axis'\n histo.fYaxis.fTitle = 'y Axis'\n histo.fZaxis.fTitle = 'z Axis'\n histo.fName = \"You don't have a valid file path\"\n histo.fTitle = 'This is a TH3 histogram demo'\n histo.fMaximum = cnt\n\n return histo\n }\n}\n","import AFRAME from 'aframe'\nimport { NdmVrStorageService } from '../../services/ndmVrStorageService'\nimport { createTH2Histogram } from '../../utils/histogramAframeFactory'\nimport '../../aframeComponents/cursorEventAframeComponent'\nimport '../../aframeComponents/th2AframeComponent'\nimport '../../aframeComponents/thAframeComponent'\nimport '../../aframeComponents/histogramAframeComponent'\nimport { histogramTH2Service } from '../../observables/histogramSubject'\nimport {\n initialKeyboardController,\n keyReleaseHandlerFunction,\n keyPressHandlerFunction,\n keyboardUpdateCameraReference\n} from '../../controllers/keyboardController'\nimport { CameraService } from '../../services/cameraService'\nimport HistogramDemoFactory from '../../utils/DefaultHistogram'\n\nexport default AFRAME.registerComponent('th2-histogram', {\n schema: {\n section: { type: 'string' },\n filename: { type: 'string' },\n theme: { type: 'string', default: 'def' },\n position: {\n name: 'position',\n xValue: 0,\n yValue: 0,\n zValue: 0\n },\n scale: {\n name: 'scale',\n xValue: 2,\n yValue: 2,\n zValue: 2\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 0,\n zValue: 0\n }\n },\n init: function () {\n const el = this.el\n initialKeyboardController(this.schema, el)\n // keyboard listeners\n document.addEventListener('keydown', keyPressHandlerFunction)\n document.addEventListener('keyup', keyReleaseHandlerFunction)\n this.JSROOT = window.JSROOT\n this.demoHistogramService = new HistogramDemoFactory(this.JSROOT)\n this.localStorageService = new NdmVrStorageService()\n this.cameraService = new CameraService()\n this.render = false\n this.histogram = null\n this.model = {\n bins: {\n elements: [],\n attributes: []\n },\n labels: {\n elements: [],\n attributes: []\n },\n titles: {\n elements: [],\n attributes: []\n },\n banners: {\n elements: [],\n attributes: []\n },\n normalXAxis: {\n elements: [],\n attributes: []\n },\n reversedXAxis: {\n elements: [],\n attributes: []\n },\n normalYAxis: {\n elements: [],\n attributes: []\n },\n reversedYAxis: {\n elements: [],\n attributes: []\n }\n }\n this.section = null\n // functions\n\n const updateHistogramSection = (newSection) => {\n console.log(newSection)\n this.section.xOffset = newSection.xOffset\n this.section.yOffset = newSection.yOffset\n this.range = newSection.range\n\n this.cameraService.setCameraPosition(newSection)\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n }\n const handleSubscription = (section) => {\n this.localStorageService.storeTH2Offsets(\n section.xOffset,\n section.yOffset,\n section.range\n )\n updateHistogramSection(section)\n }\n\n this.subscription = histogramTH2Service\n .getChangedSection()\n .subscribe(handleSubscription)\n },\n update: function () {\n keyboardUpdateCameraReference()\n this.section = JSON.parse(this.data.section)\n this.JSROOT.openFile(this.data.filename)\n .then((file) => file.readObject('hUsersVsProjects'))\n .then((obj) => {\n this.localStorageService.initHistogramData(obj)\n this.histogram = obj\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n })\n .then(() => console.log('drawing completed'))\n .catch((error) => {\n this.histogram = this.demoHistogramService.createTH2DemoHistogram(\n 20,\n 20,\n 0,\n 0.1\n )\n this.localStorageService.initHistogramData(this.histogram)\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n console.log(error)\n })\n },\n tick: function () {\n if (this.render) {\n this.render = false\n console.log(this.section)\n console.log(this.elements)\n }\n },\n remove: function () {\n this.subscription.unsubscribe()\n document.removeEventListener('keydown', keyPressHandlerFunction)\n document.removeEventListener('keyup', keyReleaseHandlerFunction)\n }\n})\n","import AFRAME from 'aframe'\n// import { setBannerPositioning } from '../utils/histogramFactory'\n\n// aframe component for positioning info banner in scene\nexport default AFRAME.registerComponent('banner-control', {\n schema: {\n position: {\n name: 'position',\n xValue: -1.28,\n yValue: 0.3,\n zValue: -1\n },\n scale: {\n name: 'scale',\n xValue: 0.5,\n yValue: 0.7,\n zValue: 0.1\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 20,\n zValue: 0\n }\n },\n init: function () {\n // const el = this.el\n // setBannerPositioning(el, this.schema)\n }\n})\n","/* add listeners for oculus controller */\n/**\n * Modul obsahuje implementované metódy, ktoré reagujú na vstupy používateľa.\n * Funkcie sú určené pre komponenty slúžiace definovanie listenerov pre ovládač Oculusu.\n * @module oculusController\n */\nimport { CameraService } from '../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../observables/histogramSubject'\nimport binSubject from '../observables/binSubject'\nimport cameraSubject from '../observables/cameraSubject'\nimport jsrootService from '../services/jsrootService'\n\n/*\nexport class OculusController {\n #aframeObj\n #cameraService\n constructor(aframeObj) {\n this.#aframeObj = aframeObj\n this.#cameraService = new CameraService()\n }\n\n #thumbStick = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSection('yOffset', 'TH2', false)\n histogramTH3Service.changeHistogramSection('yOffset', 'TH3', false)\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSection('yOffset', 'TH2', true)\n histogramTH3Service.changeHistogramSection('yOffset', 'TH3', true)\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSection('xOffset', 'TH2', false)\n histogramTH3Service.changeHistogramSection('xOffset', 'TH3', false)\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSection('xOffset', 'TH2', true)\n histogramTH3Service.changeHistogramSection('xOffset', 'TH3', true)\n }\n }\n\n // set listeners for positioning\n setControllerOnEntity(data) {\n const aframeObj = this.#aframeObj\n const geoAttributes = [data.position, data.scale, data.rotation]\n // if (this.#cameraService === null) this.#cameraService = new CameraService()\n // set initial position, scale, rotation of the histogram\n for (let i = 0; i < 3; i++) {\n this.#aframeObj.setAttribute(\n geoAttributes[i].name,\n `${geoAttributes[i].xValue} ${geoAttributes[i].yValue} ${geoAttributes[i].zValue}`\n )\n }\n\n // add positioning listeners\n aframeObj.addEventListener('thumbstickmoved', this.#thumbStick)\n aframeObj.addEventListener('xbuttondown', () => {\n this.#cameraService.verticalMoveCamera(false)\n })\n aframeObj.addEventListener('ybuttondown', () => {\n this.#cameraService.verticalMoveCamera(true)\n })\n }\n}\n*/\n\n// let aframeObj\nlet cameraService = new CameraService()\n\n/**\n * Zmena zobrazovanej sekcie histogramu o predvolený rozsah (1) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickByOwnOffset = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n false\n )\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n false\n )\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n false\n )\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n false\n )\n }\n}\n\n/**\n * Zmena zobrazovanej sekcie histogramu o špecifikovaný rozsah (podľa nastavení používateľa) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickByDefaultOffset = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n true\n )\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n true\n )\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n true\n )\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n true\n )\n }\n}\n\n/**\n * Funkcia, zabezpečujúca horizontálny pohyb kamery po osiach.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @param {number} speed - Definuje rýchlosť pohybu\n * @return {void}\n */\nconst thumbStickForMoving = (event, speed) => {\n if (event.detail.y > 0.95) {\n cameraService.horizontalMoveCamera('z', false, speed)\n }\n if (event.detail.y < -0.95) {\n cameraService.horizontalMoveCamera('z', true, speed)\n }\n if (event.detail.x < -0.95) {\n cameraService.horizontalMoveCamera('x', true, speed)\n }\n if (event.detail.x > 0.95) {\n cameraService.horizontalMoveCamera('x', false, speed)\n }\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (len X a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickPredefinedPosition = (event) => {\n if (event.detail.y > 0.95) {\n cameraService.setPredefinedUpPosition()\n }\n if (event.detail.y < -0.95) {\n cameraService.setPredefinedDownPosition()\n }\n if (event.detail.x < -0.95) {\n cameraService.setPredefinedLeftPosition()\n }\n if (event.detail.x > 0.95) {\n cameraService.setPredefinedRightPosition()\n }\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (X a Y a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickPredefinedPositionWithOffset = (event) => {\n if (event.detail.y > 0.95) {\n cameraService.setPredefinedUpPositionWithOffset()\n }\n if (event.detail.y < -0.95) {\n cameraService.setPredefinedDownPositionWithOffset()\n }\n if (event.detail.x < -0.95) {\n cameraService.setPredefinedLeftPositionWithOffset()\n }\n if (event.detail.x > 0.95) {\n cameraService.setPredefinedRightPositionWithOffset()\n }\n}\n\n/**\n * Funkcia, zobrazenie novej sekcie smerom hore.\n * @param {boolean} defaultRange - Ak je True tak bude použitý range (1), ak je False tak (nastavený rozsah)\n * @return {void}\n */\nconst oculusUpSection = (defaultRange) => {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n defaultRange\n )\n}\n\n/**\n * Funkcia, zobrazenie novej sekcie smerom dolu\n * @param {boolean} defaultRange - Ak je True tak bude použitý range (1), ak je False tak (nastavený rozsah)\n * @return {void}\n */\nconst oculusDownSection = (typeOfRange) => {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n typeOfRange\n )\n}\n\n// const initialOculusController = (el) => {\n// aframeObj = el\n// }\n\n/**\n * Funkcia, aktualizuje servis kamery.\n * @return {void}\n */\nconst oculusUpdateCameraReference = () => {\n cameraService = new CameraService()\n}\n\n/**\n * Zmena zobrazovanej sekcie histogramu o špecifikovaný rozsah (podľa nastavení používateľa) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickFunction = (event) => {\n thumbStickByOwnOffset(event)\n}\n\n/**\n * Zmena zobrazovanej sekcie histogramu o predvolený rozsah (1) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickWithGripFunction = (event) => {\n thumbStickByDefaultOffset(event)\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (len X a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickPredefinedCameraPosition = (event) => {\n thumbStickPredefinedPosition(event)\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (X a Y a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickPredefinedCameraPositionWithOffset = (event) => {\n thumbStickPredefinedPositionWithOffset(event)\n}\n\n/**\n * Funkcia, zabezpečujúca horizontálny pohyb kamery po osiach.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @param {Number} speed - Definuje rýchlosť pohybu\n * @return {void}\n */\nconst oculusThumbStickForMoving = (event, speed) => {\n thumbStickForMoving(event, speed)\n}\n\n/**\n * Funkcia, zabezpečí posunutie kamery smerom hore\n * @param {Number} speed - Určuje rýchlosť pohybu kamery\n * @return {void}\n */\nconst oculusXButtonDownFunction = (speed) => {\n cameraService.verticalMoveCamera(true, speed / 2)\n}\n\n/**\n * Funkcia, zabebpečí posunutie kamery smerom dolu\n * @param {Number} speed - Určuje rýchlosť pohybu kamery\n * @return {void}\n */\nconst oculusYButtonDownFunction = (speed) => {\n cameraService.verticalMoveCamera(false, speed / 2)\n}\n\n/**\n * Funkcia, zabezpečí označenie binu\n * @return {void}\n */\nconst oculusThumbStickMarkBin = () => {\n binSubject.saveSelectedBinToLocalStorage()\n}\n\n/**\n * Funkcia, zabezpečí odznačenie binu\n * @return {void}\n */\nconst oculusThumbStickUnmarkBin = () => {\n binSubject.deleteBinFromLocalStorage()\n}\n\n/**\n * Funkcia, zabezpečí prepnutie do špeciálneho módu, určeného funkciou\n * @return {void}\n */\nconst oculusShowFunctionView = () => {\n histogramTH2Service.changeHistogramFunction('feet', 'TH2')\n}\n\n/**\n * Funkcia, zabezpečí prepnutie do predvoleného vizualizačného módu\n * @return {void}\n */\nconst oculusShowDefaultView = () => {\n histogramTH2Service.changeHistogramFunction('default', 'TH2')\n}\n\n/**\n * Funkcia, zabezpečí prepínanie medzi zobrazeniami\n * @return {void}\n */\nconst oculusSwitchViewWithBanners = () => {\n cameraSubject.setVisibilityOfBanners('oculus')\n}\n\n/**\n * Funkcia, zabezpečí zmenu obsahu na paneloch\n * @return {void}\n */\nconst oculusChangeBannerContent = () => {\n cameraSubject.setUserState()\n}\n\n/**\n * Funkcia, zabezpečí rotovanie panelov\n * @return {void}\n */\nconst oculusShiftBanners = () => {\n cameraSubject.shiftBanners()\n}\n\n/**\n * Funkcia, prekreslí náhľady na paneloch vo VR\n * @return {void}\n */\nconst oculusRedrawHistogramBanners = () => {\n ;[\n 'th-mapping',\n 'bannerId_1',\n 'bannerId_2',\n 'bannerId_3',\n 'bannerId_4'\n ].forEach((targetId) => {\n if (document.getElementById(targetId) !== null) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n targetId,\n '500px',\n '400px'\n )\n }\n })\n}\n\n// export { initialOculusController }\nexport { oculusRedrawHistogramBanners }\nexport { oculusShiftBanners }\nexport { oculusChangeBannerContent }\nexport { oculusSwitchViewWithBanners }\nexport { oculusShowDefaultView }\nexport { oculusShowFunctionView }\nexport { oculusThumbStickUnmarkBin }\nexport { oculusThumbStickMarkBin }\nexport { oculusThumbStickFunction }\nexport { oculusThumbStickWithGripFunction }\nexport { oculusXButtonDownFunction }\nexport { oculusYButtonDownFunction }\nexport { oculusUpdateCameraReference }\nexport { oculusThumbStickPredefinedCameraPosition }\nexport { oculusThumbStickPredefinedCameraPositionWithOffset }\nexport { oculusUpSection }\nexport { oculusDownSection }\nexport { oculusThumbStickForMoving }\n","// component for modification aframe entity of histogram\n// manage functionality of camera\nimport AFRAME from 'aframe'\nimport {\n oculusXButtonDownFunction,\n oculusYButtonDownFunction,\n oculusUpdateCameraReference,\n oculusThumbStickPredefinedCameraPositionWithOffset,\n oculusThumbStickForMoving,\n oculusSwitchViewWithBanners,\n oculusChangeBannerContent\n} from '../controllers/oculusController'\n/**\n * A-Frame interakčný komponent zabezpečí možnosť používateľa interagovať s ľavým ovládačom zariadenia Oculus.\n * @component left-controller-logging\n * @module leftOculusAframeComponent\n */\n\n// aframe component for positioning histogram in scene\nexport default AFRAME.registerComponent('left-controller-logging', {\n init: function () {\n let gripActive = false\n let speed = 1\n const el = this.el\n // oculus listeners\n el.addEventListener('gripdown', () => {\n gripActive = true\n })\n el.addEventListener('gripup', () => {\n gripActive = false\n })\n el.addEventListener('thumbstickdown', () => {\n if (gripActive) {\n speed++\n if (speed > 20) speed = 20\n } else {\n speed--\n if (speed < 1) speed = 1\n }\n })\n el.addEventListener('thumbstickmoved', (event) => {\n if (gripActive) {\n oculusThumbStickPredefinedCameraPositionWithOffset(event)\n } else {\n oculusThumbStickForMoving(event, speed)\n }\n })\n el.addEventListener('ybuttondown', () => {\n if (gripActive) {\n oculusXButtonDownFunction(speed)\n } else {\n oculusSwitchViewWithBanners()\n }\n })\n el.addEventListener('xbuttondown', () => {\n if (gripActive) {\n oculusYButtonDownFunction(speed)\n } else {\n oculusChangeBannerContent()\n }\n })\n },\n\n update: function () {\n oculusUpdateCameraReference()\n }\n})\n","// component for modification aframe entity of histogram\n// manage functionality of histogram\nimport AFRAME from 'aframe'\nimport {\n oculusThumbStickFunction,\n oculusUpdateCameraReference,\n oculusUpSection,\n oculusDownSection,\n oculusThumbStickMarkBin,\n oculusThumbStickWithGripFunction,\n oculusThumbStickUnmarkBin,\n oculusShowFunctionView,\n oculusShowDefaultView,\n oculusRedrawHistogramBanners,\n oculusShiftBanners\n} from '../controllers/oculusController'\n/**\n * A-Frame interakčný komponent zabezpečí možnosť používateľa interagovať s pravým ovládačom zariadenia Oculus.\n * @component right-controller-logging\n * @module rightOculusAframeComponent\n */\n\n// aframe component for positioning histogram in scene\nexport default AFRAME.registerComponent('right-controller-logging', {\n init: function () {\n let gripActive = false\n const el = this.el\n // oculus listeners\n el.addEventListener('gripdown', () => {\n gripActive = true\n })\n el.addEventListener('gripup', () => {\n gripActive = false\n })\n el.addEventListener('thumbstickmoved', (event) => {\n if (gripActive) {\n oculusThumbStickFunction(event)\n } else {\n oculusThumbStickWithGripFunction(event)\n }\n })\n el.addEventListener('bbuttondown', () => {\n if (gripActive) {\n oculusUpSection(false)\n } else {\n oculusUpSection(true)\n }\n })\n el.addEventListener('abuttondown', () => {\n if (gripActive) {\n oculusDownSection(false)\n } else {\n oculusDownSection(true)\n }\n })\n el.addEventListener('thumbstickdown', () => {\n if (gripActive) {\n oculusShowFunctionView()\n } else {\n oculusShowDefaultView()\n }\n })\n el.addEventListener('triggerdown', () => {\n if (gripActive) {\n oculusThumbStickMarkBin()\n oculusRedrawHistogramBanners()\n } else {\n oculusThumbStickUnmarkBin()\n oculusShiftBanners()\n }\n })\n },\n\n update: function () {\n oculusUpdateCameraReference()\n }\n})\n","// imports\nimport JSrootHistogram from './components/JsrootHistogram'\nimport NdmVrScene from './components/NdmVrHistogramScene'\nimport HistogramTH2 from './components/AframeComponent'\nimport { NdmVrStorageService } from './services/ndmVrStorageService'\nimport Banner from './aframeComponents/infoBannerAframeComponent'\nimport LeftController from './aframeComponents/leftOculusController'\nimport RightController from './aframeComponents/rightOculusController'\nimport binDataDistributor from './observables/binDataDistributor'\n\n// create services\nconst ndmVrStorage = new NdmVrStorageService()\n\n// export\nexport {\n // react components\n JSrootHistogram,\n NdmVrScene,\n // export aframe components\n Banner,\n LeftController,\n RightController,\n HistogramTH2,\n // export necessary services\n ndmVrStorage,\n // rxjs bin data distributor\n binDataDistributor\n}\n"],"names":["JsrootSubject","Subject","showBinProjection","binData","next","getServiceEvent","asObservable","jsrootSubject","JsrootService","createTH1Projection","projectionAxis","info","idTargetElm","axisArray","projectionTargetAxis","primary","secondary","primaryAxis","secondaryAxis","binAxis","toLowerCase","h1","createHistogram","obj","fNbins","fXaxis","fXmin","fXmax","fTitle","fLabels","currLabel","arr","length","bin","fString","n","console","log","setBinContent","getBinContent","fName","binName","name","redraw","openTH1Projection","projections","projIndex","xBin","xPos","yBin","yPos","projection","fFolders","setTimeout","displayImageOfProjection","e","idSourceElement","idTargetElement","width","height","sourceSvgElement","document","getElementById","firstElementChild","targetElement","canvas","createElement","setAttribute","svgString","XMLSerializer","serializeToString","ctx","getContext","fillStyle","fillRect","DOMURL","self","URL","webkitURL","img","Image","svg","Blob","type","url","createObjectURL","onload","drawImage","png","toDataURL","revokeObjectURL","src","JSROOT","jsrootService","styles","box","display","margin","textAlign","align","paddingTop","form","paddingBottom","label","input","border","borderRadius","fontSize","color","opacity","JsrootHistogram","histogram","projectionAxes","subscription","useState","axis","setAxis","selectedBin","setSelectedBin","handleInputChange","event","target","value","handleSubscription","data","renderForm","React","createAndDisplayProjection","useEffect","jsrootLibrary","window","subscribe","unsubscribe","CameraSubject","setVisibilityOfBanners","inputDevice","device","shiftBanners","setUserState","getCameraSubject","cameraSubject","CameraService","verticalMoveCamera","moveUp","speed","object3D","position","y","horizontalMoveCamera","increment","elm","offset","rotation","newXPos","x","newZPos","z","newYPos","setCameraPosition","offsets","zOffset","undefined","xOffset","yOffset","setPredefinedDownPosition","labelElement","setPredefinedUpPosition","setPredefinedRightPosition","setPredefinedLeftPosition","setPredefinedDownPositionWithOffset","setPredefinedUpPositionWithOffset","setPredefinedRightPositionWithOffset","setPredefinedLeftPositionWithOffset","HistogramSubject","changeHistogramSectionByOffset","histogramType","defaultRange","changeHistogramFunction","typeFunction","fFunction","changeTypeOfBinMark","binMarkMode","getChangedSection","histogramTH2Service","histogramTH3Service","BinSubject","saveSelectedBinToLocalStorage","deleteBinFromLocalStorage","getKeyboardEvent","binSubject","keyPressed","cameraService","aframeObj","geoAttributes","toolsSelector","activeTool","handlePositioning","property","difference","key","xValue","yValue","zValue","handleChangeHistogramSectionByDefaultRange","handleChangeHistogramSectionByOwnRange","keyPressHandlerFunction","Z","X","C","c","Shift","shiftKey","forEach","targetId","switchDisplayModeOnBin","preventDefault","binDisplayMode","deltaY","getActiveTool","keyReleaseHandlerFunction","initialKeyboardController","object","scale","i","keyboardUpdateCameraReference","NdmVrStorageService","filter","item","id","containThisBin","updatedArray","storeBinToLocalStorage","push","setItem","JSON","stringify","getBinsFromLocalStorage","selectedBins","parse","getItem","localStorage","storeCurrentBinToLocalStorage","getCurrentBinFromLocalStorage","currentBin","loadProperty","storeProperty","initHistogramData","_typename","includes","storeTH3HistogramLimits","storeTH2HistogramLimits","storeTH2Offsets","range","section","storeTH3Offsets","storeOffsets","storeFilePath","filePath","loadFilePath","filename","loadTH2Offsets","loadTH3Offsets","loadOffsets","localStorageService","BinDataDistributor","sendDataOfTheSelectedBin","getBinDistributor","binDataDistributor","AFRAME","registerComponent","init","el","clickCount","checked","addEventListener","setHover","evt","intersection","detail","save","userData","markedColor","selectColor","face","normal","axisZ","axisY","axisX","setPassive","setActive","camera","content","infoBanner","planes","childNodes","typeName","zCor","zTitle","zMin","zMax","xCor","xTitle","xMin","xMax","yCor","yTitle","yMin","yMax","absoluteContent","update","NdmVrCamera","activeToolHighlight","binDataSubscription","selectedBinData","setSelectedBinData","setRotation","prevPosition","setPrevPosition","setInputDevice","show","setShow","showProjection","setShowProjection","setActiveTool","String","zPos","compileRotation","currentRotation","renderProjectionsBanners","renderBannersWithControls","hideMappingBanner","banner","showMappingBanner","renderActiveTool","tools","toolNumXPos","map","tool","txt","txtPos","indexOf","renderOculusControls","utils","checkHeadsetConnected","schema","xCenter","yCenter","zCenter","xWidth","yWidth","zWidth","delay","def","colorPalette","accent","font","fire","nebula","rainforest","nature","water","sunflower","blood","magma","jupiter","magic","ThemeProvider","theme","palette","xAxis","yAxis","zAxis","primaryAccent","secondaryAccent","primaryFont","secondaryFont","getAxisColor","getPrimaryAccentColor","getSecondaryAccentColor","getPrimaryFontColor","getSecondaryFontColor","getBinColor","fullContent","sum","HistogramReactFactory","uniqueName","xInitial","yInitial","zInitial","getXOffset","getYOffset","getZOffset","getRange","offsetValue","limit","currOffset","binId","positionX","positionY","positionZ","rotationX","rotationY","rotationZ","fontColor","geometry","primitive","text","labelHandler","material","animation","fromX","fromY","fromZ","toX","toY","toZ","elements","bins","labels","banners","ground","titles","axisLabels","xcenter","xmin","xmax","xwidth","ycenter","ymin","ymax","ywidth","zcenter","zmin","zmax","zwidth","count","maxXLength","maxYLength","maxZLength","fYaxis","fZaxis","xLabels","yLabels","zLabels","currentBinScales","iz","iy","ix","GetBinCenter","GetBinLowEdge","fMaximum","size","posX","posY","posZ","fromWidth","fromHeight","fromDepth","toWidth","toHeight","toDepth","animation2","animation3","fromColor","toColor","normalAxis","reversedAxis","Math","round","Number","EPSILON","bannerWidthX","bannerWidthY","depth","transparent","projectionFunction","centeredYPosition","projectionColor","innerText","binContent","maxContent","limits","axisOffset","result","xIndex","yIndex","projectionHistogram","LineColor","fFunctions","fLineColor","previousBin","prevBin","initializeFactory","setUniqueName","setTheme","setHistogram","setSection","setRange","getElements","updateSection","NdmVrHistogram3D","histoSection","factory","mode","setMode","setElements","binMarkState","setBinMarkState","prevState","title","axisLabel","NdmVrLaboratory","NdmVrScene","zIndex","minHeight","background","EntityBuilder","model","updateElement","histogramElm","element","entityType","createTitle","attributes","newElement","appendChild","deleteUnnecessaryElements","newLength","remove","Element","checkEntityType","feature","createBannerElement","linesCount","parent","array","createBannerLines","append","line","child","EntityTemplate","bannerTemplate","lineData","backgroundData","bannerBackgroundTemplate","lineTemplate","binTemplate","scaleX","scaleY","scaleZ","clas","binTh2","binth2","mouseevent","labelTemplate","axisTemplate","titleTemplate","textData","back","titleTextTemplate","checkBinState","createTH2Histogram","entityTemplate","entityBuilder","themeProvider","optimizeBinContent","normalXAxis","reversedYAxis","normalYAxis","reversedXAxis","HistogramDemoFactory","jsroot","createTH2DemoHistogram","xLength","yLength","initialContent","contentIncrement","histo","cnt","getBin","val","createTH3DemoHistogram","zLength","demoHistogramService","render","updateHistogramSection","newSection","openFile","then","file","readObject","error","tick","removeEventListener","thumbStickByOwnOffset","thumbStickByDefaultOffset","thumbStickForMoving","thumbStickPredefinedPositionWithOffset","oculusUpSection","oculusDownSection","typeOfRange","oculusUpdateCameraReference","oculusThumbStickFunction","oculusThumbStickWithGripFunction","oculusThumbStickPredefinedCameraPositionWithOffset","oculusThumbStickForMoving","oculusXButtonDownFunction","oculusYButtonDownFunction","oculusThumbStickMarkBin","oculusThumbStickUnmarkBin","oculusShowFunctionView","oculusShowDefaultView","oculusSwitchViewWithBanners","oculusChangeBannerContent","oculusShiftBanners","oculusRedrawHistogramBanners","gripActive","ndmVrStorage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQMA;AAEJ,2BAAc;AAAA;AAAA;AAAA;AAAA;AACZ,4DAAgB,IAAIC,YAAJ,EAAhB;AACD;;;;SAMDC,oBAAA,2BAAkBC,OAAlB,EAA2B;AACzB,0DAAcC,IAAd,CAAmBD,OAAnB;AACD;;SAMDE,kBAAA,2BAAkB;AAChB,WAAO,sDAAcC,YAAd,EAAP;AACD;;;;;AAGH,IAAMC,aAAa,GAAG,IAAIP,aAAJ,EAAtB;;;;ICrBMQ;;;;aACM;;;;;;SAwBVC,sBAAA,6BAAoBC,cAApB,EAAoCC,IAApC,EAA0CC,WAA1C,EAAuDC,SAAvD,EAAkE;AAAA;;AAChE,QAAI,CAACF,IAAD,IAAS,CAACD,cAAV,IAA4B,wDAAiB,IAAjD,EAAuD;AACrD;AACD;;AAED,QAAMI,oBAAoB,GAAGJ,cAAc,KAAKG,SAAS,CAAC,CAAD,CAAzD;AACA,QAAME,OAAO,GAAGD,oBAAoB,GAAGD,SAAS,CAAC,CAAD,CAAZ,GAAkBA,SAAS,CAAC,CAAD,CAA/D;AACA,QAAMG,SAAS,GAAGF,oBAAoB,GAAGD,SAAS,CAAC,CAAD,CAAZ,GAAkBA,SAAS,CAAC,CAAD,CAAjE;AAEA,QAAMI,WAAW,SAAOD,SAAP,SAAjB;AACA,QAAME,aAAa,SAAOH,OAAP,SAAnB;AACA,QAAMI,OAAO,GAAMJ,OAAO,CAACK,WAAR,EAAN,QAAb;;AAMA,QAAMC,EAAE,GAAG,oDAAaC,eAAb,CACT,MADS,EAETX,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBO,MAFb,CAAX;;AAMAH,IAAAA,EAAE,CAACI,MAAH,CAAUC,KAAV,GAAkBf,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBS,KAAxC;AACAL,IAAAA,EAAE,CAACI,MAAH,CAAUE,KAAV,GAAkBhB,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBU,KAAxC;AACAN,IAAAA,EAAE,CAACI,MAAH,CAAUG,MAAV,GAAmBjB,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBW,MAAzC;AACAP,IAAAA,EAAE,CAACI,MAAH,CAAUI,OAAV,GAAoBlB,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBY,OAA1C;AAEA,QAAMC,SAAS,GACb,0BAAAnB,IAAI,CAACY,GAAL,CAASL,aAAT,EAAwBW,OAAxB,gFAAiCE,GAAjC,CAAqCC,MAArC,IAA8C,CAA9C,GACIrB,IAAI,CAACY,GAAL,CAASL,aAAT,EAAwBW,OAAxB,CAAgCE,GAAhC,CAAoCpB,IAAI,CAACsB,GAAL,CAASd,OAAT,IAAoB,CAAxD,EAA2De,OAD/D,GAEI,EAHN;;AAKA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxB,IAAI,CAACY,GAAL,CAASN,WAAT,EAAsBO,MAA1C,EAAkDW,CAAC,EAAnD,EAAuD;AACrDC,MAAAA,OAAO,CAACC,GAAR,CAAY1B,IAAI,CAACY,GAAjB;AACAF,MAAAA,EAAE,CAACiB,aAAH,CACEH,CAAC,GAAG,CADN,EAEEzB,cAAc,KAAKG,SAAS,CAAC,CAAD,CAA5B,GACIF,IAAI,CAACY,GAAL,CAASgB,aAAT,CAAuB5B,IAAI,CAACsB,GAAL,CAASd,OAAT,CAAvB,EAA0CgB,CAAC,GAAG,CAA9C,CADJ,GAEIxB,IAAI,CAACY,GAAL,CAASgB,aAAT,CAAuBJ,CAAC,GAAG,CAA3B,EAA8BxB,IAAI,CAACsB,GAAL,CAASd,OAAT,CAA9B,CAJN;AAMD;;AACDE,IAAAA,EAAE,CAACmB,KAAH,GAAW,IAAX;AACAnB,IAAAA,EAAE,CAACO,MAAH,GACE,uBAAqBlB,cAArB,IACCC,IAAI,CAACsB,GAAL,CAASQ,OAAT,KAAqB,EAArB,GAA0B9B,IAAI,CAACsB,GAAL,CAASS,IAAnC,GAA0C/B,IAAI,CAACsB,GAAL,CAASd,OAAT,IAAoB,CAD/D,UAGAW,SAHA,MADF;;AAMA,wDAAaa,MAAb,CAAoB/B,WAApB,EAAiCS,EAAjC;AACD;;SAYDuB,oBAAA,2BACElC,cADF,EAEEC,IAFF,EAGEC,WAHF,EAIEC,SAJF,EAKEgC,WALF,EAMEC,SANF,EAOE;AAAA;;AAKA,QAAMC,IAAI,GAAGpC,IAAI,CAACsB,GAAL,CAASe,IAAT,GAAgB,CAA7B;AACA,QAAMC,IAAI,GAAGtC,IAAI,CAACsB,GAAL,CAASiB,IAAT,GAAgB,CAA7B;;AACA,QAAI;AACF,UAAMC,UAAU,GACdN,WAAW,CAACO,QAAZ,CAAqBrB,GAArB,CAAyBgB,IAAzB,EAA+BK,QAA/B,CAAwCrB,GAAxC,CAA4CkB,IAA5C,EAAkDG,QAAlD,CAA2DrB,GAA3D,CACEe,SAAS,IAAI,CADf,CADF;;AAIA,0DAAaH,MAAb,CAAoB/B,WAApB,EAAiCuC,UAAjC;;AACAE,MAAAA,UAAU,CAAC,YAAM;AACf,QAAA,KAAI,CAACC,wBAAL,CACE,qBADF,EAEE,YAFF,EAGE,OAHF,EAIE,OAJF;AAMD,OAPS,EAOP,GAPO,CAAV;AAQD,KAdD,CAcE,OAAOC,CAAP,EAAU;AACVnB,MAAAA,OAAO,CAACC,GAAR,CAAY,gCAAZ;AACD;AACF;;SAUDiB,2BAAA,kCAAyBE,eAAzB,EAA0CC,eAA1C,EAA2DC,KAA3D,EAAkEC,MAAlE,EAA0E;AACxE,QAAI;AACF,UAAMC,gBAAgB,GACpBC,QAAQ,CAACC,cAAT,CAAwBN,eAAxB,EAAyCO,iBAD3C;AAEA,UAAMC,aAAa,GAAGH,QAAQ,CAACC,cAAT,CAAwBL,eAAxB,CAAtB;AACA,UAAMQ,MAAM,GAAGJ,QAAQ,CAACK,aAAT,CAAuB,QAAvB,CAAf;AAEAN,MAAAA,gBAAgB,CAACO,YAAjB,CAA8B,QAA9B,EAAwCR,MAAxC;AACAC,MAAAA,gBAAgB,CAACO,YAAjB,CAA8B,OAA9B,EAAuCT,KAAvC;AACAO,MAAAA,MAAM,CAACE,YAAP,CAAoB,QAApB,EAA8BR,MAA9B;AACAM,MAAAA,MAAM,CAACE,YAAP,CAAoB,OAApB,EAA6BT,KAA7B;AAGA,UAAMU,SAAS,GAAG,IAAIC,aAAJ,GAAoBC,iBAApB,CAAsCV,gBAAtC,CAAlB;AACA,UAAMW,GAAG,GAAGN,MAAM,CAACO,UAAP,CAAkB,IAAlB,CAAZ;AACAD,MAAAA,GAAG,CAACE,SAAJ,GAAgB,SAAhB;AACAF,MAAAA,GAAG,CAACG,QAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmBT,MAAM,CAACP,KAA1B,EAAiCO,MAAM,CAACN,MAAxC;AAEA,UAAMgB,MAAM,GAAGC,IAAI,CAACC,GAAL,IAAYD,IAAI,CAACE,SAAjB,IAA8BF,IAA7C;AAEA,UAAMG,GAAG,GAAG,IAAIC,KAAJ,EAAZ;AAGA,UAAMC,GAAG,GAAG,IAAIC,IAAJ,CAAS,CAACd,SAAD,CAAT,EAAsB;AAAEe,QAAAA,IAAI,EAAE;AAAR,OAAtB,CAAZ;AACA,UAAMC,GAAG,GAAGT,MAAM,CAACU,eAAP,CAAuBJ,GAAvB,CAAZ;;AAGAF,MAAAA,GAAG,CAACO,MAAJ,GAAa,YAAY;AAEvBf,QAAAA,GAAG,CAACgB,SAAJ,CAAcR,GAAd,EAAmB,CAAnB,EAAsB,CAAtB;AACA,YAAMS,GAAG,GAAGvB,MAAM,CAACwB,SAAP,CAAiB,WAAjB,CAAZ;AAEAzB,QAAAA,aAAa,CAACG,YAAd,CAA2B,UAA3B,SAA8CqB,GAA9C;AACAb,QAAAA,MAAM,CAACe,eAAP,CAAuBF,GAAvB;AACD,OAPD;;AAQAT,MAAAA,GAAG,CAACY,GAAJ,GAAUP,GAAV;AACD,KAnCD,CAmCE,OAAO7B,CAAP,EAAU;AACb;;;;SAzJD,eAAoB;AAClB,yCAAO,IAAP;AACD;SAND,aAAkBqC,MAAlB,EAA0B;AACxB,4DAAeA,MAAf;AACD;;;;;;AA8JH,IAAMC,aAAa,GAAG,IAAIrF,aAAJ,EAAtB;;AC7KA,IAAMsF,MAAM,GAAG;AACbC,EAAAA,GAAG,EAAE;AACHC,IAAAA,OAAO,EAAE,OADN;AAEHC,IAAAA,MAAM,EAAE,MAFL;AAGHvC,IAAAA,KAAK,EAAE,KAHJ;AAIHwC,IAAAA,SAAS,EAAE,QAJR;AAKHC,IAAAA,KAAK,EAAE,QALJ;AAMHC,IAAAA,UAAU,EAAE;AANT,GADQ;AASbjD,EAAAA,UAAU,EAAE;AACV6C,IAAAA,OAAO,EAAE,OADC;AAEVC,IAAAA,MAAM,EAAE,MAFE;AAGVvC,IAAAA,KAAK,EAAE,OAHG;AAIVC,IAAAA,MAAM,EAAE;AAJE,GATC;AAeb0C,EAAAA,IAAI,EAAE;AACJL,IAAAA,OAAO,EAAE,OADL;AAEJtC,IAAAA,KAAK,EAAE,KAFH;AAGJuC,IAAAA,MAAM,EAAE,MAHJ;AAIJG,IAAAA,UAAU,EAAE,IAJR;AAKJE,IAAAA,aAAa,EAAE;AALX,GAfO;AAsBbC,EAAAA,KAAK,EAAE;AACLP,IAAAA,OAAO,EAAE;AADJ,GAtBM;AAyBbQ,EAAAA,KAAK,EAAE;AACLR,IAAAA,OAAO,EAAE,OADJ;AAELtC,IAAAA,KAAK,EAAE,KAFF;AAGLuC,IAAAA,MAAM,EAAE,MAHH;AAILtC,IAAAA,MAAM,EAAE,EAJH;AAKL8C,IAAAA,MAAM,EAAE,gBALH;AAMLC,IAAAA,YAAY,EAAE,CANT;AAOLR,IAAAA,SAAS,EAAE,QAPN;AAQLS,IAAAA,QAAQ,EAAE,EARL;AASLC,IAAAA,KAAK,EAAE,OATF;AAULC,IAAAA,OAAO,EAAE;AAVJ;AAzBM,CAAf;;AA4DA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,OAKlB;AAAA,MAJJC,SAII,QAJJA,SAII;AAAA,MAHJC,cAGI,QAHJA,cAGI;AAAA,MAFJnE,WAEI,QAFJA,WAEI;AAAA,MADJC,SACI,QADJA,SACI;AACJ,MAAImE,YAAJ;;AACA,kBAAwBC,cAAQ,CAAC,GAAD,CAAhC;AAAA,MAAOC,IAAP;AAAA,MAAaC,OAAb;;AACA,mBAAsCF,cAAQ,CAAC,IAAD,CAA9C;AAAA,MAAOG,WAAP;AAAA,MAAoBC,cAApB;;AAGA,MAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,KAAD,EAAW;AACnCJ,IAAAA,OAAO,CAACI,KAAK,CAACC,MAAN,CAAaC,KAAd,CAAP;AACD,GAFD;;AAKA,MAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,IAAD,EAAU;AACnCN,IAAAA,cAAc,CAACM,IAAD,CAAd;AACD,GAFD;;AAIA,MAAMC,UAAU,GAAG,SAAbA,UAAa,GAAM;AACvB,wBACEC;AAAK,MAAA,SAAS,EAAC,YAAf;AAA4B,MAAA,KAAK,EAAEhC,MAAM,CAACO;AAA1C,oBACEyB;AAAO,MAAA,OAAO,EAAC,uBAAf;AAAuC,MAAA,KAAK,EAAEhC,MAAM,CAACS;AAArD,yBADF,eAIEuB;AACE,MAAA,QAAQ,EAAEP,iBADZ;AAEE,MAAA,SAAS,EAAC,cAFZ;AAGE,MAAA,EAAE,EAAC,gBAHL;AAIE,MAAA,KAAK,EAAEzB,MAAM,CAACU;AAJhB,oBAMEsB;AAAQ,MAAA,KAAK,EAAEd,cAAc,CAAC,CAAD;AAA7B,OACGD,SAAS,OAAKC,cAAc,CAAC,CAAD,CAAnB,UAAT,CAAuCpF,MAAvC,GACGmF,SAAS,OAAKC,cAAc,CAAC,CAAD,CAAnB,UAAT,CAAuCpF,MAD1C,GAEGoF,cAAc,CAAC,CAAD,CAHpB,CANF,eAWEc;AAAQ,MAAA,KAAK,EAAEd,cAAc,CAAC,CAAD;AAA7B,OACGD,SAAS,OAAKC,cAAc,CAAC,CAAD,CAAnB,UAAT,CAAuCpF,MAAvC,GACGmF,SAAS,OAAKC,cAAc,CAAC,CAAD,CAAnB,UAAT,CAAuCpF,MAD1C,GAEGoF,cAAc,CAAC,CAAD,CAHpB,CAXF,CAJF,CADF;AAwBD,GAzBD;;AA2BA,MAAMe,0BAA0B,GAAG,SAA7BA,0BAA6B,GAAM;AACvC,QAAIlF,WAAW,KAAK,IAApB,EAA0B;AACxBgD,MAAAA,aAAa,CAACjD,iBAAd,CACEuE,IADF,EAEE;AAAE5F,QAAAA,GAAG,EAAEwF,SAAP;AAAkB9E,QAAAA,GAAG,EAAEoF;AAAvB,OAFF,EAGE,qBAHF,EAIEL,cAJF,EAKEnE,WALF,EAMEC,SANF;AAQD,KATD,MASO;AACL+C,MAAAA,aAAa,CAACpF,mBAAd,CACE0G,IADF,EAEE;AAAE5F,QAAAA,GAAG,EAAEwF,SAAP;AAAkB9E,QAAAA,GAAG,EAAEoF;AAAvB,OAFF,EAGE,qBAHF,EAIEL,cAJF;AAMA3D,MAAAA,UAAU,CAAC,YAAM;AACfwC,QAAAA,aAAa,CAACvC,wBAAd,CACE,qBADF,EAEE,YAFF,EAGE,OAHF,EAIE,OAJF;AAMD,OAPS,EAOP,GAPO,CAAV;AAQD;AACF,GA1BD;;AA6BA0E,EAAAA,eAAS,CAAC,YAAM;AACdnC,IAAAA,aAAa,CAACoC,aAAd,GAA8BC,MAAM,CAACtC,MAArC;AACA0B,IAAAA,cAAc,CAAC,IAAD,CAAd;AAEAL,IAAAA,YAAY,GAAG1G,aAAa,CAACF,eAAd,GAAgC8H,SAAhC,CAA0CR,kBAA1C,CAAf;AAEA,WAAO;AAAA,aAAMV,YAAY,CAACmB,WAAb,EAAN;AAAA,KAAP;AACD,GAPQ,EAON,CAACrB,SAAD,CAPM,CAAT;AAUAiB,EAAAA,eAAS,CAAC,YAAM;AACd,QAAIX,WAAW,IAAI,IAAnB,EAAyBU,0BAA0B;AACpD,GAFQ,EAEN,CAACZ,IAAD,EAAOE,WAAP,EAAoBxE,WAApB,CAFM,CAAT;AAIA,sBACEiF;AAAK,IAAA,KAAK,EAAEhC,MAAM,CAACC;AAAnB,KACGlD,WAAW,KAAK,IAAhB,IAAwBwE,WAAW,KAAK,IAAxC,IAAgDQ,UAAU,EAD7D,eAEEC;AAAK,IAAA,EAAE,EAAC,qBAAR;AAA8B,IAAA,KAAK,EAAEhC,MAAM,CAAC3C;AAA5C,IAFF,CADF;AAMD,CAhGD;;;;ICzDMkF;AAEJ,2BAAc;AAAA;AAAA;AAAA;AAAA;AACZ,gEAAgB,IAAIpI,YAAJ,EAAhB;AACD;;;;SAMDqI,yBAAA,gCAAuBC,WAAvB,EAAoC;AAClC,8DAAcnI,IAAd,CAAmB;AACjBoI,MAAAA,MAAM,EAAED;AADS,KAAnB;AAGD;;SAMDE,eAAA,wBAAe;AACb,8DAAcrI,IAAd,CAAmB,OAAnB;AACD;;SAMDsI,eAAA,wBAAe;AACb,8DAActI,IAAd,CAAmB,MAAnB;AACD;;SAMDuI,mBAAA,4BAAmB;AACjB,WAAO,0DAAcrI,YAAd,EAAP;AACD;;;;;AAGH,IAAMsI,aAAa,GAAG,IAAIP,aAAJ,EAAtB;;;;;;AC1CA,IAAaQ,aAAb,GAEE,yBAAc;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA,OAUdC,kBAVc,GAUO,UAACC,MAAD,EAASC,KAAT,EAAmB;AAEtC,QAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAA5B,EACE,4BAAA,KAAI,iBAAJ,mBAAsBnF,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAtB;;AACF,QAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAA5B,EAAkC;AAChC,UAAIiF,MAAJ,EAAY;AACV,oCAAA,KAAI,iBAAJ,iBAAoBE,QAApB,CAA6BC,QAA7B,CAAsCC,CAAtC,IAA2CH,KAA3C;AACD,OAFD,MAEO;AACL,YAAI,4BAAA,KAAI,iBAAJ,iBAAoBC,QAApB,CAA6BC,QAA7B,CAAsCC,CAAtC,GAA0C,CAA9C,EACE,4BAAA,KAAI,iBAAJ,iBAAoBF,QAApB,CAA6BC,QAA7B,CAAsCC,CAAtC,IAA2CH,KAA3C;AACH;AACF;AACF,GAtBa;;AAAA,OA+BdI,oBA/Bc,GA+BS,UAACjC,IAAD,EAAOkC,SAAP,EAAkBL,KAAlB,EAA4B;AAEjD,QAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAA5B,EACE,4BAAA,KAAI,iBAAJ,mBAAsBnF,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAtB;;AACF,QAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAA5B,EAAkC;AAChC,UAAIuF,SAAJ,EAAe;AACb,oCAAA,KAAI,iBAAJ,iBAAoBJ,QAApB,CAA6BC,QAA7B,CAAsC/B,IAAtC,KAA+C6B,KAA/C;AACD,OAFD,MAEO;AACL,oCAAA,KAAI,iBAAJ,iBAAoBC,QAApB,CAA6BC,QAA7B,CAAsC/B,IAAtC,KAA+C6B,KAA/C;AACD;AACF;AACF,GA1Ca;;AAAA;AAAA;AAAA,WAmDO,eAACM,GAAD,EAAMC,MAAN,EAAcC,QAAd,EAA2B;AAC9C,UAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAAxB,IAAgCF,GAAG,KAAK,IAA5C,EAAkD;AAEhD,YAAMG,OAAO,GAAGH,GAAG,CAACL,QAAJ,CAAaC,QAAb,CAAsBQ,CAAtB,GAA0B,IAAIJ,GAAG,CAACL,QAAJ,CAAaC,QAAb,CAAsBQ,CAApE;AACA,YAAMC,OAAO,GAAGL,GAAG,CAACL,QAAJ,CAAaC,QAAb,CAAsBU,CAAtB,GAA0B,IAAIN,GAAG,CAACL,QAAJ,CAAaC,QAAb,CAAsBU,CAApE;AACA,YAAMC,OAAO,GAAGN,MAAhB;;AAIA,oCAAA,KAAI,iBAAJ,iBAAoBpF,YAApB,CACE,WADF,gCAE6BsF,OAAO,GAAG,CAFvC,UAE4CI,OAF5C,UAGIF,OAAO,GAAG,CAHd;;AAMA,oCAAA,KAAI,iBAAJ,iBAAoBxF,YAApB,CACE,cADF,+BAGI,4BAAA,KAAI,iBAAJ,iBAAoB8E,QAApB,CAA6BO,QAA7B,CAAsCE,CAH1C,SAIMF,QAJN,SAIkB,4BAAA,KAAI,iBAAJ,iBAAoBP,QAApB,CAA6BO,QAA7B,CAAsCI,CAJxD;AAMD;AACF;AAzEa;;AAAA,OAgFdE,iBAhFc,GAgFM,UAACC,OAAD,EAAa;AAC/B,QAAI,4BAAA,KAAI,iBAAJ,qBAAwB,IAA5B,EAAkC;AAChC,UAAIJ,OAAO,GAAG,4BAAA,KAAI,iBAAJ,iBAAoBV,QAApB,CAA6BC,QAA7B,CAAsCC,CAApD;;AACA,UAAIY,OAAO,CAACC,OAAR,KAAoBC,SAAxB,EAAmC;AAEjCN,QAAAA,OAAO,GAAGI,OAAO,CAACC,OAAR,GAAkB,CAA5B;AACD;;AACD,UAAMP,OAAO,GAAGM,OAAO,CAACG,OAAR,GAAkBH,OAAO,CAACG,OAA1C;AACA,UAAML,OAAO,GAAGE,OAAO,CAACI,OAAR,GAAkBJ,OAAO,CAACI,OAA1C;AAGA9G,MAAAA,UAAU,CAAC,YAAM;AACf,oCAAA,KAAI,iBAAJ,iBAAoBc,YAApB,CACE,WADF,gCAE6BsF,OAAO,GAAG,CAFvC,UAE4CE,OAF5C,UAGIE,OAAO,GAAG,CAHd;AAMD,OAPS,EAOP,IAPO,CAAV;AAQD;AACF,GApGa;;AAAA,OA0GdO,yBA1Gc,GA0Gc,YAAM;AAEhC,QAAMC,YAAY,GAAGxG,QAAQ,CAACC,cAAT,CAAwB,WAAxB,CAArB;;AACA,QAAIuG,YAAY,KAAKJ,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBI,YAAxB,EAAsC,CAAtC,EAAyC,GAAzC;AACD;AACF,GAhHa;;AAAA,OAsHdC,uBAtHc,GAsHY,YAAM;AAE9B,QAAMD,YAAY,GAAGxG,QAAQ,CAACC,cAAT,CAAwB,SAAxB,CAArB;;AACA,QAAIuG,YAAY,KAAKJ,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBI,YAAxB,EAAsC,CAAtC,EAAyC,CAAzC;AACD;AACF,GA5Ha;;AAAA,OAkIdE,0BAlIc,GAkIe,YAAM;AAEjC,QAAMF,YAAY,GAAGxG,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAArB;;AACA,QAAIuG,YAAY,KAAKJ,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBI,YAAxB,EAAsC,CAAtC,EAAyC,EAAzC;AACD;AACF,GAxIa;;AAAA,OA8IdG,yBA9Ic,GA8Ic,YAAM;AAEhC,QAAMH,YAAY,GAAGxG,QAAQ,CAACC,cAAT,CAAwB,WAAxB,CAArB;;AACA,QAAIuG,YAAY,KAAKJ,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBI,YAAxB,EAAsC,CAAtC,EAAyC,GAAzC;AACD;AACF,GApJa;;AAAA,OA0JdI,mCA1Jc,GA0JwB,YAAM;AAE1C,QAAMJ,YAAY,GAAGxG,QAAQ,CAACC,cAAT,CAAwB,WAAxB,CAArB;;AACA,QAAIuG,YAAY,KAAKJ,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBI,YAAxB,EAAsC,EAAtC,EAA0C,GAA1C;AACD;AACF,GAhKa;;AAAA,OAsKdK,iCAtKc,GAsKsB,YAAM;AAExC,QAAML,YAAY,GAAGxG,QAAQ,CAACC,cAAT,CAAwB,SAAxB,CAArB;;AACA,QAAIuG,YAAY,KAAKJ,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBI,YAAxB,EAAsC,EAAtC,EAA0C,CAA1C;AACD;AACF,GA5Ka;;AAAA,OAkLdM,oCAlLc,GAkLyB,YAAM;AAE3C,QAAMN,YAAY,GAAGxG,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAArB;;AACA,QAAIuG,YAAY,KAAKJ,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBI,YAAxB,EAAsC,EAAtC,EAA0C,EAA1C;AACD;AACF,GAxLa;;AAAA,OA8LdO,mCA9Lc,GA8LwB,YAAM;AAE1C,QAAMP,YAAY,GAAGxG,QAAQ,CAACC,cAAT,CAAwB,WAAxB,CAArB;;AACA,QAAIuG,YAAY,KAAKJ,SAArB,EAAgC;AAC9B,kCAAA,KAAI,qBAAJ,qBAAwBI,YAAxB,EAAsC,EAAtC,EAA0C,GAA1C;AACD;AACF,GApMa;;AACZ,sEAAsBxG,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAtB;AACD,CAJH;;;;ICEM+G;AAEJ,8BAAc;AAAA;AAAA;AAAA;AAAA;AACZ,gEAAgB,IAAI5K,YAAJ,EAAhB;AACD;;;;SAUD6K,iCAAA,wCAA+B3D,IAA/B,EAAqC4D,aAArC,EAAoD1B,SAApD,EAA+D2B,YAA/D,EAA6E;AAC3E,8DAAc5K,IAAd,CAAmB;AACjBsC,MAAAA,IAAI,EAAEqI,aADW;AAEjB5D,MAAAA,IAAI,EAAEA,IAFW;AAGjBkC,MAAAA,SAAS,EAAEA,SAHM;AAIjB2B,MAAAA,YAAY,EAAEA;AAJG,KAAnB;AAMD;;SAQDC,0BAAA,iCAAwBC,YAAxB,EAAsCH,aAAtC,EAAqD;AACnD,8DAAc3K,IAAd,CAAmB;AACjB+K,MAAAA,SAAS,EAAED,YADM;AAEjBxI,MAAAA,IAAI,EAAEqI;AAFW,KAAnB;AAID;;SAODK,sBAAA,6BAAoB1D,KAApB,EAA2BqD,aAA3B,EAA0C;AACxC,8DAAc3K,IAAd,CAAmB;AACjBiL,MAAAA,WAAW,EAAE3D,KADI;AAEjBhF,MAAAA,IAAI,EAAEqI;AAFW,KAAnB;AAID;;SAMDO,oBAAA,6BAAoB;AAClB,WAAO,0DAAchL,YAAd,EAAP;AACD;;;;;AAGH,IAAMiL,mBAAmB,GAAG,IAAIV,gBAAJ,EAA5B;AACA,IAAMW,mBAAmB,GAAG,IAAIX,gBAAJ,EAA5B;;;;IC3DMY;AAEJ,wBAAc;AAAA;AAAA;AAAA;AAAA;AACZ,gEAAgB,IAAIxL,YAAJ,EAAhB;AACD;;;;SAMDyL,gCAAA,yCAAgC;AAC9B,8DAActL,IAAd,CAAmB,IAAnB;AACD;;SAMDuL,4BAAA,qCAA4B;AAC1B,8DAAcvL,IAAd,CAAmB,KAAnB;AACD;;SAMDwL,mBAAA,4BAAmB;AACjB,WAAO,0DAActL,YAAd,EAAP;AACD;;;;;AAGH,IAAMuL,UAAU,GAAG,IAAIJ,UAAJ,EAAnB;;ACvBA,IAAMK,UAAU,GAAG,EAAnB;AACA,IAAIC,aAAa,GAAG,IAAIlD,aAAJ,EAApB;AACA,IAAImD,SAAJ;AACA,IAAIC,aAAJ;AACA,IAAMC,aAAa,GAAG,IAAIjM,YAAJ,EAAtB;AACA,IAAIkM,UAAJ;;AAQA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,QAAD,EAAW7E,KAAX,EAAqB;AAC7C,MAAI8E,UAAU,GAAG,GAAjB;AAEA,MAAID,QAAQ,CAAC3J,IAAT,KAAkB,OAAtB,EAA+B4J,UAAU,GAAG,IAAb,CAA/B,KACK,IAAID,QAAQ,CAAC3J,IAAT,KAAkB,UAAtB,EAAkC4J,UAAU,GAAG,CAAb;;AAEvC,MAAI9E,KAAK,CAAC+E,GAAN,KAAc,WAAlB,EAA+B;AAC7BF,IAAAA,QAAQ,CAACG,MAAT,GAAkBH,QAAQ,CAACG,MAAT,GAAkBF,UAApC;AACD,GAFD,MAEO,IAAI9E,KAAK,CAAC+E,GAAN,KAAc,SAAlB,EAA6B;AAClCF,IAAAA,QAAQ,CAACG,MAAT,GAAkBH,QAAQ,CAACG,MAAT,GAAkBF,UAApC;AACD,GAFM,MAEA,IAAI9E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAC5BF,IAAAA,QAAQ,CAACI,MAAT,GAAkBJ,QAAQ,CAACI,MAAT,GAAkBH,UAApC;AACD,GAFM,MAEA,IAAI9E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAC5BF,IAAAA,QAAQ,CAACI,MAAT,GAAkBJ,QAAQ,CAACI,MAAT,GAAkBH,UAApC;AACD,GAFM,MAEA,IAAI9E,KAAK,CAAC+E,GAAN,KAAc,YAAlB,EAAgC;AACrCF,IAAAA,QAAQ,CAACK,MAAT,GAAkBL,QAAQ,CAACK,MAAT,GAAkBJ,UAApC;AACD,GAFM,MAEA,IAAI9E,KAAK,CAAC+E,GAAN,KAAc,WAAlB,EAA+B;AACpCF,IAAAA,QAAQ,CAACK,MAAT,GAAkBL,QAAQ,CAACK,MAAT,GAAkBJ,UAApC;AACD;;AACDN,EAAAA,SAAS,CAAC7H,YAAV,CACEkI,QAAQ,CAAC3J,IADX,EAEK2J,QAAQ,CAACG,MAFd,SAEwBH,QAAQ,CAACI,MAFjC,SAE2CJ,QAAQ,CAACK,MAFpD;AAID,CAvBD;;AA+BA,IAAMC,0CAA0C,GAAG,SAA7CA,0CAA6C,CAACnF,KAAD,EAAW;AAC5D,MAAIA,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AAC1ChB,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMD,GAbD,MAaO,IAAItD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AACjDhB,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMD,GAbM,MAaA,IAAItD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AACjDf,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMD,GAPM,MAOA,IAAItD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AACjDf,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMD,GAPM,MAOA,IAAItD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AACjDhB,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMD,GAbM,MAaA,IAAItD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AACjDhB,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMD;AACF,CApED;;AA4EA,IAAM8B,sCAAsC,GAAG,SAAzCA,sCAAyC,CAACpF,KAAD,EAAW;AACxD,MAAIA,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AAC1ChB,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMD,GAbD,MAaO,IAAItD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AACjDhB,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMD,GAbM,MAaA,IAAItD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AACjDf,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMD,GAPM,MAOA,IAAItD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AACjDf,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMD,GAPM,MAOA,IAAItD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AACjDhB,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMD,GAbM,MAaA,IAAItD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AACjDhB,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMD;AACF,CApED;;AA6EA,IAAM+B,uBAAuB,GAAG,SAA1BA,uBAA0B,CAACrF,KAAD,EAAW;AACzCsE,EAAAA,UAAU,CAACtE,KAAK,CAAC+E,GAAP,CAAV,GAAwB,IAAxB;;AAEA,MAAIT,UAAU,CAACgB,CAAX,IAAgBhB,UAAU,CAAClC,CAA/B,EAAkC;AAChCwC,IAAAA,iBAAiB,CAACH,aAAa,CAAC,CAAD,CAAd,EAAmBzE,KAAnB,CAAjB;AACD;;AACD,MAAIsE,UAAU,CAACiB,CAAX,IAAgBjB,UAAU,CAACpC,CAA/B,EAAkC;AAChC0C,IAAAA,iBAAiB,CAACH,aAAa,CAAC,CAAD,CAAd,EAAmBzE,KAAnB,CAAjB;AACD;;AACD,MAAIsE,UAAU,CAACkB,CAAX,IAAgBlB,UAAU,CAACmB,CAA/B,EAAkC;AAChCb,IAAAA,iBAAiB,CAACH,aAAa,CAAC,CAAD,CAAd,EAAmBzE,KAAnB,CAAjB;AACD;;AACD,MAAIsE,UAAU,CAACoB,KAAf,EAAsB;AACpBN,IAAAA,sCAAsC,CAACpF,KAAD,CAAtC;AACD;;AACDmF,EAAAA,0CAA0C,CAACnF,KAAD,CAA1C;;AAEA,MAAIA,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AACrBR,IAAAA,aAAa,CAACjD,kBAAd,CAAiC,IAAjC,EAAuC,GAAvC;AACD;;AAED,MAAItB,KAAK,CAAC2F,QAAV,EAAoB;AAClBpB,IAAAA,aAAa,CAACjD,kBAAd,CAAiC,KAAjC,EAAwC,GAAxC;AACD;;AACD,MAAItB,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAErBL,IAAAA,aAAa,CAAC9L,IAAd,CAAmB,CAAnB;AACA+L,IAAAA,UAAU,GAAG,CAAb;AACD;;AACD,MAAI3E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAErBL,IAAAA,aAAa,CAAC9L,IAAd,CAAmB,CAAnB;AACA+L,IAAAA,UAAU,GAAG,CAAb;AACD;;AAED,MAAI3E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAErBL,IAAAA,aAAa,CAAC9L,IAAd,CAAmB,CAAnB;AACA+L,IAAAA,UAAU,GAAG,CAAb;AACD;;AACD,MAAI3E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAErBL,IAAAA,aAAa,CAAC9L,IAAd,CAAmB,CAAnB;AACA+L,IAAAA,UAAU,GAAG,CAAb;AACD;;AACD,MAAI3E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAErBL,IAAAA,aAAa,CAAC9L,IAAd,CAAmB,CAAnB;AACA+L,IAAAA,UAAU,GAAG,CAAb;AACD;;AACD,MAAI3E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAErBL,IAAAA,aAAa,CAAC9L,IAAd,CAAmB,CAAnB;AACA+L,IAAAA,UAAU,GAAG,CAAb;AACD;;AACD,MAAI3E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAErBL,IAAAA,aAAa,CAAC9L,IAAd,CAAmB,CAAnB;AACA+L,IAAAA,UAAU,GAAG,CAAb;AACD;;AACD,MAAI3E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAErBL,IAAAA,aAAa,CAAC9L,IAAd,CAAmB,CAAnB;AACA+L,IAAAA,UAAU,GAAG,CAAb;AACD;;AACD,MAAI3E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAErBL,IAAAA,aAAa,CAAC9L,IAAd,CAAmB,CAAnB;AACA+L,IAAAA,UAAU,GAAG,CAAb;AACD;;AACD,MAAI3E,KAAK,CAAC+E,GAAN,KAAc,GAAlB,EAAuB;AAErBL,IAAAA,aAAa,CAAC9L,IAAd,CAAmB,CAAnB;AACA+L,IAAAA,UAAU,GAAG,CAAb;AACD;;AAED,MAAI3E,KAAK,CAAC+E,GAAN,KAAc,OAAlB,EAA2B;AACzBV,IAAAA,UAAU,CAACH,6BAAX;AACC,KACC,YADD,EAEC,YAFD,EAGC,YAHD,EAIC,YAJD,EAKC,YALD,EAMC0B,OAND,CAMS,UAACC,QAAD,EAAc;AACtB,UAAIxJ,QAAQ,CAACC,cAAT,CAAwBuJ,QAAxB,MAAsC,IAA1C,EAAgD;AAC9CxH,QAAAA,aAAa,CAACvC,wBAAd,CACE,qBADF,EAEE+J,QAFF,EAGE,OAHF,EAIE,OAJF;AAMD;AACF,KAfA;AAgBF;;AACD,MAAI7F,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AAC1CV,IAAAA,UAAU,CAACF,yBAAX;AACD;;AACD,MAAInE,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AAC1ChB,IAAAA,mBAAmB,CAACN,uBAApB,CAA4C,MAA5C,EAAoD,KAApD;AACD;;AACD,MAAIzD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AAC1ChB,IAAAA,mBAAmB,CAACN,uBAApB,CAA4C,SAA5C,EAAuD,KAAvD;AACD;;AACD,MAAIzD,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AAC1C3D,IAAAA,aAAa,CAACF,YAAd;AACD;;AACD,MAAIlB,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AAC1C3D,IAAAA,aAAa,CAACN,sBAAd,CAAqC,UAArC;AACD;;AACD,MAAId,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AAC1C3D,IAAAA,aAAa,CAACH,YAAd;AACD;;AACD,MAAIjB,KAAK,CAAC+E,GAAN,KAAc,GAAd,IAAqB/E,KAAK,CAAC+E,GAAN,KAAc,GAAvC,EAA4C;AAC1C3D,IAAAA,aAAa,CAACH,YAAd;AACD;AACF,CApHD;;AAsHA,IAAM6E,sBAAsB,GAAG,SAAzBA,sBAAyB,CAAC9F,KAAD,EAAW;AACxCA,EAAAA,KAAK,CAAC+F,cAAN;AAEA,MAAIC,cAAJ;;AACA,MAAIhG,KAAK,CAACiG,MAAN,GAAe,CAAnB,EAAsB;AACpBD,IAAAA,cAAc,GAAG,CAAjB;AACD,GAFD,MAEO;AACLA,IAAAA,cAAc,GAAG,CAAC,CAAlB;AACD;;AAEDjC,EAAAA,mBAAmB,CAACH,mBAApB,CAAwCoC,cAAxC,EAAwD,KAAxD;AACAhC,EAAAA,mBAAmB,CAACJ,mBAApB,CAAwCoC,cAAxC,EAAwD,KAAxD;AACD,CAZD;;AAcA,IAAME,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1B,SAAOvB,UAAP;AACD,CAFD;;AAUA,IAAMwB,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACnG,KAAD,EAAW;AAC3C,SAAOsE,UAAU,CAACtE,KAAK,CAAC+E,GAAP,CAAjB;AACD,CAFD;;AAUA,IAAMqB,yBAAyB,GAAG,SAA5BA,yBAA4B,CAAChG,IAAD,EAAOiG,MAAP,EAAkB;AAClD7B,EAAAA,SAAS,GAAG6B,MAAZ;AACA5B,EAAAA,aAAa,GAAG,CAACrE,IAAI,CAACsB,QAAN,EAAgBtB,IAAI,CAACkG,KAArB,EAA4BlG,IAAI,CAAC4B,QAAjC,CAAhB;;AAGA,OAAK,IAAIuE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;AAC1B/B,IAAAA,SAAS,CAAC7H,YAAV,CACE8H,aAAa,CAAC8B,CAAD,CAAb,CAAiBrL,IADnB,EAEKuJ,aAAa,CAAC8B,CAAD,CAAb,CAAiBvB,MAFtB,SAEgCP,aAAa,CAAC8B,CAAD,CAAb,CAAiBtB,MAFjD,SAE2DR,aAAa,CAAC8B,CAAD,CAAb,CAAiBrB,MAF5E;AAID;AACF,CAXD;;AAiBA,IAAMsB,6BAA6B,GAAG,SAAhCA,6BAAgC,GAAM;AAC1CjC,EAAAA,aAAa,GAAG,IAAIlD,aAAJ,EAAhB;AACD,CAFD;;;;;;;;;;ACtXA,IAAaoF,mBAAb;AAUE,iCAAc;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAPE;AAOF;AAAA;AAAA;AAAA,aA2YM,eAAC9N,OAAD,EAAa;AAC/B,eAAO,4BAAA,KAAI,gBAAJ,gBAAmB+N,MAAnB,CAA0B,UAACC,IAAD;AAAA,iBAAUA,IAAI,CAACC,EAAL,KAAYjO,OAAO,CAACiO,EAA9B;AAAA,SAA1B,CAAP;AACD;AA7Ya;;AAAA,SAqZdC,cArZc,GAqZG,UAAClO,OAAD,EAAa;AAC5B,UAAMmO,YAAY,GAAG,4BAAA,KAAI,gBAAJ,gBAAmBJ,MAAnB,CACnB,UAACC,IAAD;AAAA,eAAUA,IAAI,CAACC,EAAL,KAAYjO,OAAO,CAACiO,EAA9B;AAAA,OADmB,CAArB;;AAGA,aAAOE,YAAY,CAACtM,MAAb,KAAwB,CAA/B;AACD,KA1Za;;AAAA,SAkaduM,sBAlac,GAkaW,UAACpO,OAAD,EAAa;AAEpC,UAAI,CAAC,KAAI,CAACkO,cAAL,CAAoBlO,OAApB,CAAL,EAAmC;AACjC,oCAAA,KAAI,gBAAJ,gBAAmBqO,IAAnB,CAAwBrO,OAAxB;;AACA,oCAAA,KAAI,WAAJ,WAAcsO,OAAd,CAAsB,cAAtB,EAAsCC,IAAI,CAACC,SAAL,6BAAe,KAAf,gCAAtC;AACD;AACF,KAxaa;;AAAA,SA+adhD,yBA/ac,GA+ac,UAACxL,OAAD,EAAa;AAEvC,UAAI,KAAI,CAACkO,cAAL,CAAoBlO,OAApB,CAAJ,EAAkC;AAChC,oCAAA,KAAI,gBAAJ,8CAAqB,KAArB,wCAA4CA,OAA5C;;AACA,oCAAA,KAAI,WAAJ,WAAcsO,OAAd,CAAsB,cAAtB,EAAsCC,IAAI,CAACC,SAAL,6BAAe,KAAf,gCAAtC;AACD;AACF,KArba;;AAAA,SA4bdC,uBA5bc,GA4bY,YAAM;AAC9B,UAAMC,YAAY,GAAGH,IAAI,CAACI,KAAL,CAAW,4BAAA,KAAI,WAAJ,WAAcC,OAAd,CAAsB,cAAtB,CAAX,CAArB;;AACA,UAAIF,YAAY,KAAK,IAArB,EAA2B;AACzB,eAAO,EAAP;AACD,OAFD,MAEO;AACL,eAAOA,YAAP;AACD;AACF,KAnca;;AACZ,4DAAgB3G,MAAM,CAAC8G,YAAvB;AACA,0DAAenL,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAf;AACA,sEAAqB,KAAK8K,uBAAL,EAArB;AACD;;AAdH;;AAAA,SAuCEK,6BAvCF,GAuCE,uCAA8B9O,OAA9B,EAAuC;AACrC,0DAAcsO,OAAd,CAAsB,YAAtB,EAAoCC,IAAI,CAACC,SAAL,CAAexO,OAAf,CAApC;AACD,GAzCH;;AAAA,SA2CE+O,6BA3CF,GA2CE,yCAAgC;AAC9B,QAAMC,UAAU,GAAGT,IAAI,CAACI,KAAL,CAAW,sDAAcC,OAAd,CAAsB,YAAtB,CAAX,CAAnB;;AACA,QAAII,UAAU,KAAKlF,SAAf,IAA4BkF,UAAU,KAAK,EAA/C,EAAmD;AACjD,aAAO,IAAP;AACD;;AACD,WAAOA,UAAP;AACD,GAjDH;;AAAA,SAwDEC,YAxDF,GAwDE,sBAAa/C,QAAb,EAAuB;AACrB,WAAOqC,IAAI,CAACI,KAAL,CAAW,sDAAcC,OAAd,CAAsB1C,QAAtB,CAAX,CAAP;AACD,GA1DH;;AAAA,SAkEEgD,aAlEF,GAkEE,uBAAchD,QAAd,EAAwBwB,MAAxB,EAAgC;AAC9B,0DAAcY,OAAd,CAAsBpC,QAAtB,EAAgCqC,IAAI,CAACC,SAAL,CAAed,MAAf,CAAhC;AACD,GApEH;;AAAA,SAgKEyB,iBAhKF,GAgKE,2BAAkBvI,SAAlB,EAA6B;AAC3B,QAAIA,SAAS,CAACwI,SAAV,CAAoBC,QAApB,CAA6B,KAA7B,CAAJ,EAAyC;AACvC,WAAKC,uBAAL,CAA6B1I,SAA7B;AACD,KAFD,MAEO,IAAIA,SAAS,CAACwI,SAAV,CAAoBC,QAApB,CAA6B,KAA7B,CAAJ,EAAyC;AAC9C,WAAKE,uBAAL,CAA6B3I,SAA7B;AACD;AACF,GAtKH;;AAAA,SA+KE4I,eA/KF,GA+KE,yBAAgBzF,OAAhB,EAAyBC,OAAzB,EAAkCyF,KAAlC,EAAyC;AACvC,QAAI/B,MAAM,GAAG,KAAKuB,YAAL,CAAkB,KAAlB,CAAb;AACA,QAAIS,OAAJ;;AACA,QAAIhC,MAAM,KAAK,IAAf,EAAqB;AACnBA,MAAAA,MAAM,GAAG,EAAT;AACAgC,MAAAA,OAAO,GAAG;AACRnN,QAAAA,IAAI,EAAE,KADE;AAERwH,QAAAA,OAAO,EAAE,CAFD;AAGRC,QAAAA,OAAO,EAAE,CAHD;AAIRyF,QAAAA,KAAK,EAAE;AAJC,OAAV;AAMD,KARD,MAQO;AACLC,MAAAA,OAAO,GAAG;AACRnN,QAAAA,IAAI,EAAE,KADE;AAERwH,QAAAA,OAAO,EAAEA,OAFD;AAGRC,QAAAA,OAAO,EAAEA,OAHD;AAIRyF,QAAAA,KAAK,EAAEA;AAJC,OAAV;AAMD;;AACD/B,IAAAA,MAAM,CAACgC,OAAP,GAAiBA,OAAjB;AACA,SAAKR,aAAL,CAAmB,KAAnB,EAA0BxB,MAA1B;AACD,GApMH;;AAAA,SA8MEiC,eA9MF,GA8ME,yBAAgB5F,OAAhB,EAAyBC,OAAzB,EAAkCH,OAAlC,EAA2C4F,KAA3C,EAAkD;AAChD,QAAI/B,MAAM,GAAG,KAAKuB,YAAL,CAAkB,KAAlB,CAAb;AACA,QAAIS,OAAJ;;AACA,QAAIhC,MAAM,KAAK,IAAf,EAAqB;AACnBA,MAAAA,MAAM,GAAG,EAAT;AACAgC,MAAAA,OAAO,GAAG;AACRnN,QAAAA,IAAI,EAAE,KADE;AAERwH,QAAAA,OAAO,EAAE,CAFD;AAGRC,QAAAA,OAAO,EAAE,CAHD;AAIRH,QAAAA,OAAO,EAAE,CAJD;AAKR4F,QAAAA,KAAK,EAAE;AALC,OAAV;AAOD,KATD,MASO;AACLC,MAAAA,OAAO,GAAG;AACRnN,QAAAA,IAAI,EAAE,KADE;AAERwH,QAAAA,OAAO,EAAEA,OAFD;AAGRC,QAAAA,OAAO,EAAEA,OAHD;AAIRH,QAAAA,OAAO,EAAEA,OAJD;AAKR4F,QAAAA,KAAK,EAAEA;AALC,OAAV;AAOD;;AACD/B,IAAAA,MAAM,CAACgC,OAAP,GAAiBA,OAAjB;AACA,SAAKR,aAAL,CAAmB,KAAnB,EAA0BxB,MAA1B;AACD,GArOH;;AAAA,SA4OEkC,YA5OF,GA4OE,sBAAaF,OAAb,EAAsB;AACpB,QAAIA,OAAO,CAACnN,IAAR,CAAa8M,QAAb,CAAsB,KAAtB,KAAgCK,OAAO,CAACnN,IAAR,CAAa8M,QAAb,CAAsB,KAAtB,CAApC,EAAkE;AAChE,WAAKM,eAAL,CACED,OAAO,CAAC3F,OADV,EAEE2F,OAAO,CAAC1F,OAFV,EAGE0F,OAAO,CAAC7F,OAHV,EAIE6F,OAAO,CAACD,KAJV;AAMD,KAPD,MAOO,IAAIC,OAAO,CAACnN,IAAR,CAAa8M,QAAb,CAAsB,KAAtB,KAAgCK,OAAO,CAACnN,IAAR,CAAa8M,QAAb,CAAsB,KAAtB,CAApC,EAAkE;AACvE,WAAKG,eAAL,CAAqBE,OAAO,CAAC3F,OAA7B,EAAsC2F,OAAO,CAAC1F,OAA9C,EAAuD0F,OAAO,CAACD,KAA/D;AACD;AACF,GAvPH;;AAAA,SA8PEI,aA9PF,GA8PE,uBAAcC,QAAd,EAAwB;AACtB,0DAAcxB,OAAd,CAAsB,UAAtB,EAAkCwB,QAAlC;AACD,GAhQH;;AAAA,SAsQEC,YAtQF,GAsQE,wBAAe;AACb,QAAMC,QAAQ,GAAG,sDAAcpB,OAAd,CAAsB,UAAtB,CAAjB;;AACA,QAAIoB,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,KAAKlG,SAAtC,EAAiD;AAE/C,aAAO,kBAAP;AACD;;AACD,WAAOkG,QAAP;AACD,GA7QH;;AAAA,SAmREC,cAnRF,GAmRE,0BAAiB;AACf,QAAMvC,MAAM,GAAG,KAAKuB,YAAL,CAAkB,KAAlB,CAAf;;AACA,QAAIvB,MAAM,KAAK,IAAf,EAAqB;AACnB,aAAOA,MAAM,CAACgC,OAAd;AACD,KAFD,MAEO;AACL,aAAO,IAAP;AACD;AACF,GA1RH;;AAAA,SAgSEQ,cAhSF,GAgSE,0BAAiB;AACf,QAAMxC,MAAM,GAAG,KAAKuB,YAAL,CAAkB,KAAlB,CAAf;;AACA,QAAIvB,MAAM,KAAK,IAAf,EAAqB;AACnB,aAAOA,MAAM,CAACgC,OAAd;AACD,KAFD,MAEO;AACL,aAAO,IAAP;AACD;AACF,GAvSH;;AAAA,SA8SES,WA9SF,GA8SE,qBAAYnL,IAAZ,EAAkB;AAChB,QAAIA,IAAI,CAACqK,QAAL,CAAc,KAAd,KAAwBrK,IAAI,CAACqK,QAAL,CAAc,KAAd,CAA5B,EAAkD;AAChD,aAAO,KAAKa,cAAL,EAAP;AACD,KAFD,MAEO,IAAIlL,IAAI,CAACqK,QAAL,CAAc,KAAd,KAAwBrK,IAAI,CAACqK,QAAL,CAAc,KAAd,CAA5B,EAAkD;AACvD,aAAO,KAAKY,cAAL,EAAP;AACD;AACF,GApTH;;AAAA;AAAA;AAgdA,IAAMG,mBAAmB,GAAG,IAAItC,mBAAJ,EAA5B;;;;IChdMuC;AAEJ,gCAAc;AAAA;AAAA;AAAA;AAAA;AACZ,gEAAgB,IAAIvQ,YAAJ,EAAhB;AACD;;;;SAMDwQ,2BAAA,kCAAyBtQ,OAAzB,EAAkC;AAChC,8DAAcC,IAAd,CAAmBD,OAAnB;AACD;;SAMDuQ,oBAAA,6BAAoB;AAClB,WAAO,0DAAcpQ,YAAd,EAAP;AACD;;;;;AAGH,IAAMqQ,kBAAkB,GAAG,IAAIH,kBAAJ,EAA3B;;ACnBA,IAAMrQ,OAAO,GAAG,IAAIF,YAAJ,EAAhB;AAEA2Q,QAAM,CAACC,iBAAP,CAAyB,YAAzB,EAAuC;AACrCC,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAI7J,YAAJ;AAEA,QAAM8J,EAAE,GAAG,KAAKA,EAAhB;AAEA,QAAIC,UAAU,GAAG,CAAjB;AACA,QAAIC,OAAO,GAAG,KAAd;AAEAF,IAAAA,EAAE,CAACG,gBAAH,CAAoB,YAApB,EAAkC,SAASC,QAAT,CAAkBC,GAAlB,EAAuB;AAAA;;AACvDH,MAAAA,OAAO,GAAG,KAAV;AAEA,UAAMI,YAAY,GAAGD,GAAG,CAACE,MAAJ,CAAWD,YAAhC;AACApK,MAAAA,YAAY,GAAG4E,UAAU,CAACD,gBAAX,GAA8BzD,SAA9B,CAAwC,UAACoJ,IAAD,EAAU;AAC/D,YAAIA,IAAJ,EAAU;AACRhB,UAAAA,mBAAmB,CAAChC,sBAApB,CAA2C,KAAI,CAACiD,QAAhD;AACAjB,UAAAA,mBAAmB,CAACtB,6BAApB,CAAkD,KAAI,CAACuC,QAAvD;AACAb,UAAAA,kBAAkB,CAACF,wBAAnB,CAA4C,KAAI,CAACe,QAAjD;AACA,UAAA,KAAI,CAACA,QAAL,CAAcC,WAAd,GAA4B,KAAI,CAACD,QAAL,CAAcE,WAA1C;;AACA,UAAA,KAAI,CAACvN,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,MAAzC;;AACA5D,UAAAA,aAAa,CAACL,iBAAd,CAAgC,KAAI,CAACsR,QAArC;AACD,SAPD,MAOO;AACLjB,UAAAA,mBAAmB,CAAC5E,yBAApB,CAA8C,KAAI,CAAC6F,QAAnD;AACA,UAAA,KAAI,CAACA,QAAL,CAAcC,WAAd,GAA4B,KAAI,CAACD,QAAL,CAAc5K,KAA1C;;AACA,UAAA,KAAI,CAACzC,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,MAAzC;AACD;AACF,OAbc,CAAf;;AAcA,UAAIkN,YAAY,CAACM,IAAb,CAAkBC,MAAlB,CAAyBlI,CAAzB,KAA+B,CAAnC,EAAsC;AACpC,aAAKvF,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,KAAKqN,QAAL,CAAcK,KAArD;AACD,OAFD,MAEO,IAAIR,YAAY,CAACM,IAAb,CAAkBC,MAAlB,CAAyBzI,CAAzB,KAA+B,CAAnC,EAAsC;AAC3C,aAAKhF,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,KAAKqN,QAAL,CAAcM,KAArD;AACD,OAFM,MAEA;AACL,aAAK3N,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,KAAKqN,QAAL,CAAcO,KAArD;AACD;;AACD,WAAK5N,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,MAAzC;AACD,KA1BD;AA6BA4M,IAAAA,EAAE,CAACG,gBAAH,CAAoB,YAApB,EAAkC,SAASc,UAAT,GAAsB;AACtD/K,MAAAA,YAAY,CAACmB,WAAb;;AACA,UAAI6I,OAAO,KAAK,KAAhB,EAAuB;AACrB,aAAK9M,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,KAAKqN,QAAL,CAAcC,WAArD;AACA,aAAKtN,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,MAAzC;AACD;;AACD6M,MAAAA,UAAU,GAAG,CAAb;AACD,KAPD;AAUAD,IAAAA,EAAE,CAACG,gBAAH,CAAoB,OAApB,EAA6B,SAASe,SAAT,CAAmBb,GAAnB,EAAwB;AACnDJ,MAAAA,UAAU,GAAGA,UAAU,GAAG,CAA1B;AACAC,MAAAA,OAAO,GAAG,KAAV;AACA5N,MAAAA,UAAU,CAAC,YAAM;AACf2N,QAAAA,UAAU,GAAG,CAAb;AACD,OAFS,EAEP,GAFO,CAAV;;AAKA,UAAIA,UAAU,KAAK,CAAnB,EAAsB;AACpBA,QAAAA,UAAU,GAAG,CAAb;AACAC,QAAAA,OAAO,GAAG,IAAV;AACA,aAAK9M,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,SAAvC;AACA,aAAKA,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,GAAzC;AAEA,YAAM+N,MAAM,GAAGrO,QAAQ,CAACC,cAAT,CAAwB,eAAxB,CAAf;;AAEA,YAAIoO,MAAM,KAAK,IAAf,EAAqB;AACnBA,UAAAA,MAAM,CAACjJ,QAAP,CAAgBC,QAAhB,CAAyBC,CAAzB,GAA6B,KAAKF,QAAL,CAAcC,QAAd,CAAuBC,CAAvB,GAA2B,GAAxD;;AAEA,cAAI,KAAKqI,QAAL,CAAcW,OAAd,GAAwB,GAA5B,EAAiC;AAG/BD,YAAAA,MAAM,CAAC/N,YAAP,CACE,WADF,gCAE6B,CAAC,GAAD,GAAO,KAAK8E,QAAL,CAAcC,QAAd,CAAuBQ,CAF3D,UAGI,KAAKT,QAAL,CAAcC,QAAd,CAAuBC,CAH3B,SAIM,KAAKF,QAAL,CAAcC,QAAd,CAAuBU,CAJ7B;AAOD,WAVD,MAUO,IAAI,KAAK4H,QAAL,CAAcW,OAAd,GAAwB,GAA5B,EAAiC;AAItCD,YAAAA,MAAM,CAAC/N,YAAP,CACE,WADF,gCAE6B,CAAC,GAAD,GAAO,KAAK8E,QAAL,CAAcC,QAAd,CAAuBQ,CAF3D,WAGI,KAAKT,QAAL,CAAcC,QAAd,CAAuBC,CAAvB,GAA2B,GAH/B,WAIM,KAAKF,QAAL,CAAcC,QAAd,CAAuBU,CAAvB,GAA2B,GAJjC;AAOD,WAXM,MAWA;AAILsI,YAAAA,MAAM,CAAC/N,YAAP,CACE,WADF,gCAE6B,KAAK8E,QAAL,CAAcC,QAAd,CAAuBQ,CAAvB,GAA2B,CAFxD,WAGI,KAAKT,QAAL,CAAcC,QAAd,CAAuBC,CAAvB,GAA2B,GAH/B,WAIM,KAAKF,QAAL,CAAcC,QAAd,CAAuBU,CAAvB,GAA2B,GAJjC;AAOD;AACF;AAEF,OA9CD,MA8CO,IAAIoH,UAAU,KAAK,CAAnB,EAAsB;AAC3B,aAAK7M,YAAL,CAAkB,UAAlB,EAA8B,OAA9B,EAAuC,SAAvC;AACA,aAAKA,YAAL,CAAkB,UAAlB,EAA8B,SAA9B,EAAyC,GAAzC;AACAoM,QAAAA,mBAAmB,CAACtB,6BAApB,CAAkD,KAAKuC,QAAvD;AACAjR,QAAAA,aAAa,CAACL,iBAAd,CAAgC,KAAKsR,QAArC;;AACA,gBAAQ9D,aAAa,EAArB;AACE,eAAK,CAAL;AACEvN,YAAAA,OAAO,CAACC,IAAR,CAAa,KAAKoR,QAAlB;AAEA;AAJJ;AAMD;;AAGD,UAAIY,UAAU,GAAGvO,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAAjB;;AACA,UAAIsO,UAAU,KAAK,IAAnB,EAAyB;AACvBA,QAAAA,UAAU,GAAGvO,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAAb;AACD;;AAGD,UAAIsO,UAAU,KAAK,IAAnB,EAAyB;AACvB,YAAMC,MAAM,GAAGD,UAAU,CAACE,UAA1B;;AAEA,YAAI,KAAKd,QAAL,CAAce,QAAd,KAA2B,KAA3B,IAAoCF,MAAM,CAACrQ,MAAP,KAAkB,CAA1D,EAA6D;AAC3D,cAAMwQ,IAAI,SAAO,KAAKhB,QAAL,CAAciB,MAArB,WAAiC,KAAKjB,QAAL,CAAckB,IAA/C,SACR,KAAKlB,QAAL,CAAcmB,IADN,WAGR,KAAKnB,QAAL,CAAc/O,OAAd,KAA0B,EAA1B,GAA+B,KAAK+O,QAAL,CAAc/O,OAAd,GAAwB,IAAvD,GAA8D,IAHtD,CAAV;AAKA,cAAMmQ,IAAI,SAAO,KAAKpB,QAAL,CAAcqB,MAArB,WAAiC,KAAKrB,QAAL,CAAcsB,IAA/C,SACR,KAAKtB,QAAL,CAAcuB,IADN,WAGR,KAAKvB,QAAL,CAAc/O,OAAd,KAA0B,EAA1B,GAA+B,KAAK+O,QAAL,CAAc/O,OAAd,GAAwB,IAAvD,GAA8D,IAHtD,CAAV;AAKA,cAAMuQ,IAAI,SAAO,KAAKxB,QAAL,CAAcyB,MAArB,WAAiC,KAAKzB,QAAL,CAAc0B,IAA/C,SACR,KAAK1B,QAAL,CAAc2B,IADN,WAGR,KAAK3B,QAAL,CAAc/O,OAAd,KAA0B,EAA1B,GAA+B,KAAK+O,QAAL,CAAc/O,OAAd,GAAwB,IAAvD,GAA8D,IAHtD,CAAV;AAKA,cAAM0P,OAAO,iBAAe,KAAKX,QAAL,CAAc4B,eAA7B,UAAiD,KAAK5B,QAAL,CAAcW,OAA/D,QAAb;AAEAE,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAUlO,YAAV,CACE,MADF,cAEYgO,OAFZ,iBAE+B,KAAKX,QAAL,CAAc5K,KAF7C;AAIAyL,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAUlO,YAAV,CACE,MADF,cAEYyO,IAFZ,iBAE4B,KAAKpB,QAAL,CAAcO,KAF1C;AAIAM,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAUlO,YAAV,CACE,MADF,cAEY6O,IAFZ,iBAE4B,KAAKxB,QAAL,CAAcM,KAF1C;AAIAO,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAUlO,YAAV,CACE,MADF,cAEYqO,IAFZ,iBAE4B,KAAKhB,QAAL,CAAcK,KAF1C;AAID,SAlCD,MAkCO;AACL,cAAMM,QAAO,iBAAe,KAAKX,QAAL,CAAc4B,eAA7B,UAAiD,KAAK5B,QAAL,CAAcW,OAA/D,QAAb;;AACA,cAAMS,KAAI,SAAO,KAAKpB,QAAL,CAAcqB,MAArB,WAAiC,KAAKrB,QAAL,CAAcsB,IAA/C,SACR,KAAKtB,QAAL,CAAcuB,IADN,WAGR,KAAKvB,QAAL,CAAc/O,OAAd,KAA0B,EAA1B,GAA+B,KAAK+O,QAAL,CAAc/O,OAAd,GAAwB,IAAvD,GAA8D,IAHtD,CAAV;;AAKA,cAAMuQ,KAAI,SAAO,KAAKxB,QAAL,CAAcyB,MAArB,WAAiC,KAAKzB,QAAL,CAAc0B,IAA/C,SACR,KAAK1B,QAAL,CAAc2B,IADN,WAGR,KAAK3B,QAAL,CAAc/O,OAAd,KAA0B,EAA1B,GAA+B,KAAK+O,QAAL,CAAc/O,OAAd,GAAwB,IAAvD,GAA8D,IAHtD,CAAV;;AAKA4P,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAUlO,YAAV,CACE,MADF,cAEYgO,QAFZ,iBAE+B,KAAKX,QAAL,CAAc5K,KAF7C;AAIAyL,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAUlO,YAAV,CACE,MADF,cAEYyO,KAFZ,iBAE4B,KAAKpB,QAAL,CAAcO,KAF1C;AAIAM,UAAAA,MAAM,CAAC,CAAD,CAAN,CAAUlO,YAAV,CACE,MADF,cAEY6O,KAFZ,iBAE4B,KAAKxB,QAAL,CAAcM,KAF1C;AAID;AACF;AACF,KAzID;AA0ID,GA1LoC;AA2LrCuB,EAAAA,MAAM,EAAE,kBAAY;AAClB,QAAMtC,EAAE,GAAG,KAAKA,EAAhB;AACAA,IAAAA,EAAE,CAAC5M,YAAH,CAAgB,UAAhB,EAA4B,OAA5B,EAAqC4M,EAAE,CAACS,QAAH,CAAYC,WAAjD;AACAV,IAAAA,EAAE,CAAC5M,YAAH,CAAgB,UAAhB,EAA4B,SAA5B,EAAuC,MAAvC;AACD;AA/LoC,CAAvC;;ACRA,IAAMyM,MAAM,GAAG1I,MAAM,CAAC0I,MAAtB;;AAWA,IAAM0C,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB,MAAIrM,YAAJ;AACA,MAAIsM,mBAAmB,GAAG,YAA1B;AACA,MAAIC,mBAAJ;;AAEA,kBAA8CtM,cAAQ,CACpD,2DADoD,CAAtD;AAAA,MAAOuM,eAAP;AAAA,MAAwBC,kBAAxB;;AAGA,MAAMnK,MAAM,GAAG,EAAf;;AACA,mBAAgCrC,cAAQ,CAAC,CAAD,CAAxC;AAAA,MAAOsC,QAAP;AAAA,MAAiBmK,WAAjB;;AACA,mBAAwCzM,cAAQ,CAAC,IAAD,CAAhD;AAAA,MAAO0M,YAAP;AAAA,MAAqBC,eAArB;;AACA,mBAAsC3M,cAAQ,CAAC,UAAD,CAA9C;AAAA,MAAOqB,WAAP;AAAA,MAAoBuL,cAApB;;AACA,mBAAwB5M,cAAQ,CAAC,KAAD,CAAhC;AAAA,MAAO6M,IAAP;AAAA,MAAaC,OAAb;;AACA,mBAA4C9M,cAAQ,CAAC,KAAD,CAApD;AAAA,MAAO+M,cAAP;AAAA,MAAuBC,iBAAvB;;AACA,mBAAoChN,cAAQ,CAAC,CAAD,CAA5C;AAAA,MAAOiF,UAAP;AAAA,MAAmBgI,aAAnB;;AAEAjI,EAAAA,aAAa,CAAC/D,SAAd,CAAwB,UAACT,KAAD,EAAW;AACjCyM,IAAAA,aAAa,CAACzM,KAAD,CAAb;;AACA,QAAIA,KAAK,KAAK,CAAd,EAAiB;AACf8L,MAAAA,mBAAmB,GAAGrT,OAAO,CAACgI,SAAR,CAAkB,UAACT,KAAD;AAAA,eACtCgM,kBAAkB,CAChBU,MAAM,CACJ,uBACE,KADF,GAEE1M,KAAK,CAAC1E,IAFR,GAGE,IAHF,GAIE,KAJF,GAKE0E,KAAK,CAACxE,IALR,GAME,IANF,GAOE,KAPF,GAQEwE,KAAK,CAAC2M,IARR,GASE,iBAVE,CADU,CADoB;AAAA,OAAlB,CAAtB;AAgBD,KAjBD,MAiBO;AACL,UAAIb,mBAAJ,EAAyBA,mBAAmB,CAACpL,WAApB;AAC1B;AACF,GAtBD;;AAwBA,MAAMT,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,IAAD,EAAU;AACnC,QAAIA,IAAI,CAACY,MAAT,EAAiB;AACf,UAAID,WAAW,KAAKX,IAAI,CAACY,MAAzB,EAAiC;AAC/BsL,QAAAA,cAAc,CAAClM,IAAI,CAACY,MAAN,CAAd;AACD;;AACDwL,MAAAA,OAAO,CAAC,CAACD,IAAF,CAAP;AACD,KALD,MAKO,IAAInM,IAAI,KAAK,OAAb,EAAsB;AAC3B0M,MAAAA,eAAe;AAChB,KAFM,MAEA,IAAI1M,IAAI,KAAK,MAAb,EAAqB;AAC1BsM,MAAAA,iBAAiB,CAAC,CAACD,cAAF,CAAjB;AACD;AACF,GAXD;;AAaA,MAAMK,eAAe,GAAG,SAAlBA,eAAkB,GAAM;AAC5B,QAAIC,eAAe,GAAG/K,QAAQ,GAAG,EAAjC;AACA,QAAI+K,eAAe,IAAI,GAAvB,EAA4BA,eAAe,GAAG,CAAlB;AAC5BZ,IAAAA,WAAW,CAACY,eAAD,CAAX;AACD,GAJD;;AAaA,MAAMC,wBAAwB,GAAG,SAA3BA,wBAA2B,GAAM;AACrC,wBACE1M;AACE,MAAA,QAAQ,EACN8L,YAAY,KAAK,IAAjB,UACSrK,MADT,UAEOqK,YAAY,CAAClK,CAFpB,SAEyBH,MAFzB,SAEmCqK,YAAY,CAAChK,CAJpD;AAME,MAAA,mBAAmB,iCAA+BJ,QAA/B,mCANrB;AAOE,MAAA,QAAQ,EAAC;AAPX,oBASE1B;AAOE,MAAA,QAAQ,EAAC,oDAPX;AAUE,MAAA,QAAQ,EAAC,UAVX;AAaE,MAAA,QAAQ,EAAC,SAbX;AAcE,MAAA,QAAQ,EAAC;AAdX,oBAgBEA;AACE,MAAA,KAAK,EAAC,OADR;AAIE,MAAA,KAAK,EAAE,EAJT;AAKE,MAAA,KAAK,EACHS,WAAW,KAAK,UAAhB,GACI,6BADJ,GAEI,oCARR;AAWE,MAAA,QAAQ,EAAC;AAXX,MAhBF,eA6BET;AACE,MAAA,KAAK,EAAC,OADR;AAIE,MAAA,KAAK,EAAE,EAJT;AAKE,MAAA,KAAK,EACHS,WAAW,KAAK,UAAhB,GACI,qCADJ,GAEI,4CARR;AAYE,MAAA,QAAQ,EAAC;AAZX,MA7BF,eA2CET;AACE,MAAA,KAAK,EAAC,OADR;AAIE,MAAA,KAAK,EAAE,EAJT;AAKE,MAAA,KAAK,EACHS,WAAW,KAAK,UAAhB,GACI,yBADJ,GAEI,qCARR;AAYE,MAAA,QAAQ,EAAC;AAZX,MA3CF,CATF,eAmEET;AACE,MAAA,EAAE,EAAC,YADL;AAEE,MAAA,KAAK,EAAC,SAFR;AAGE,MAAA,mBAAmB,EAAC,sFAHtB;AAIE,MAAA,QAAQ,EAAC;AAJX,MAnEF,eAyEEA;AACE,MAAA,KAAK,EAAC,SADR;AAEE,MAAA,mBAAmB,EAAC,uFAFtB;AAGE,MAAA,QAAQ,EAAC;AAHX,MAzEF,eA8EEA;AACE,MAAA,EAAE,EAAC,YADL;AAEE,MAAA,KAAK,EAAC,SAFR;AAGE,MAAA,mBAAmB,EAAC,sFAHtB;AAIE,MAAA,QAAQ,EAAC,QAJX;AAKE,MAAA,QAAQ,EAAC;AALX,MA9EF,eAqFEA;AACE,MAAA,KAAK,EAAC,SADR;AAEE,MAAA,mBAAmB,EAAC,uFAFtB;AAGE,MAAA,QAAQ,EAAC,QAHX;AAIE,MAAA,QAAQ,EAAC;AAJX,MArFF,eA2FEA;AACE,MAAA,EAAE,EAAC,YADL;AAEE,MAAA,KAAK,EAAC,SAFR;AAGE,MAAA,mBAAmB,EAAC,sFAHtB;AAIE,MAAA,QAAQ,EAAC;AAJX,MA3FF,eAiGEA;AACE,MAAA,KAAK,EAAC,SADR;AAEE,MAAA,mBAAmB,EAAC,uFAFtB;AAGE,MAAA,QAAQ,EAAC;AAHX,MAjGF,eAsGEA;AACE,MAAA,EAAE,EAAC,YADL;AAEE,MAAA,KAAK,EAAC,SAFR;AAGE,MAAA,mBAAmB,EAAC,wFAHtB;AAIE,MAAA,QAAQ,EAAC,QAJX;AAKE,MAAA,QAAQ,EAAC;AALX,MAtGF,eA6GEA;AACE,MAAA,KAAK,EAAC,SADR;AAEE,MAAA,mBAAmB,EAAC,yFAFtB;AAGE,MAAA,QAAQ,EAAC,QAHX;AAIE,MAAA,QAAQ,EAAC;AAJX,MA7GF,CADF;AAsHD,GAvHD;;AA0HA,MAAM2M,yBAAyB,GAAG,SAA5BA,yBAA4B,GAAM;AACtC,QAAIlM,WAAW,KAAK,UAApB,EAAgC;AAC9B,0BACET;AACE,QAAA,QAAQ,EACN8L,YAAY,KAAK,IAAjB,UACSrK,MADT,UAEOqK,YAAY,CAAClK,CAFpB,SAEyBH,MAFzB,SAEmCqK,YAAY,CAAChK,CAJpD;AAME,QAAA,mBAAmB,iCAA+BJ,QAA/B,mCANrB;AAOE,QAAA,QAAQ,EAAC;AAPX,sBASE1B;AAIE,QAAA,QAAQ,EAAC,oDAJX;AAKE,QAAA,QAAQ,EAAC,UALX;AAME,QAAA,QAAQ,EAAC,SANX;AAOE,QAAA,QAAQ,EAAC;AAPX,sBASEA;AACE,QAAA,KAAK,EAAC,OADR;AAGE,QAAA,KAAK,EAAC,IAHR;AAKE,QAAA,KAAK,EACHmM,cAAc,GACV,6BADU,GAEV,mCARR;AAWE,QAAA,QAAQ,EAAC;AAXX,QATF,eAsBEnM;AACE,QAAA,KAAK,EAAC,OADR;AAGE,QAAA,KAAK,EAAC,IAHR;AAIE,QAAA,KAAK,EAAC,qCAJR;AAME,QAAA,QAAQ,EAAC;AANX,QAtBF,eA8BEA;AACE,QAAA,KAAK,EAAC,OADR;AAGE,QAAA,KAAK,EAAC,IAHR;AAIE,QAAA,KAAK,EAAC,yBAJR;AAME,QAAA,QAAQ,EAAC;AANX,QA9BF,CATF,eAgDEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,uFAFtB;AAGE,QAAA,QAAQ,EAAC,SAHX;AAKE,QAAA,GAAG,EAAC;AALN,QAhDF,eAuDEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,2FAFtB;AAGE,QAAA,QAAQ,EAAC,QAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QAvDF,eA6DEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,yFAFtB;AAGE,QAAA,QAAQ,EAAC,SAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QA7DF,eAmEEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,uFAFtB;AAGE,QAAA,QAAQ,EAAC,SAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QAnEF,CADF;AA4ED,KA7ED,MA6EO;AACL,0BACEA;AACE,QAAA,QAAQ,EACN8L,YAAY,KAAK,IAAjB,UACSrK,MADT,UAEOqK,YAAY,CAAClK,CAFpB,SAEyBH,MAFzB,SAEmCqK,YAAY,CAAChK,CAJpD;AAME,QAAA,mBAAmB,iCAA+BJ,QAA/B;AANrB,sBAQE1B;AACE,QAAA,QAAQ,EAAC,oDADX;AAEE,QAAA,QAAQ,EAAC,UAFX;AAGE,QAAA,QAAQ,EAAC,SAHX;AAIE,QAAA,QAAQ,EAAC;AAJX,sBAMEA;AACE,QAAA,KAAK,EAAC,OADR;AAEE,QAAA,KAAK,EAAC,IAFR;AAIE,QAAA,KAAK,EACHmM,cAAc,GACV,oCADU,GAEV,0CAPR;AASE,QAAA,QAAQ,EAAC;AATX,QANF,eAiBEnM;AACE,QAAA,KAAK,EAAC,OADR;AAEE,QAAA,KAAK,EAAC,IAFR;AAGE,QAAA,KAAK,EAAC,4CAHR;AAIE,QAAA,QAAQ,EAAC;AAJX,QAjBF,eAuBEA;AACE,QAAA,KAAK,EAAC,OADR;AAEE,QAAA,KAAK,EAAC,IAFR;AAGE,QAAA,KAAK,EAAC,qCAHR;AAIE,QAAA,QAAQ,EAAC;AAJX,QAvBF,CARF,eAsCEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,uFAFtB;AAGE,QAAA,QAAQ,EAAC,WAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QAtCF,eA4CEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,2FAFtB;AAGE,QAAA,QAAQ,EAAC,SAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QA5CF,eAkDEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,yFAFtB;AAGE,QAAA,QAAQ,EAAC,UAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QAlDF,eAwDEA;AACE,QAAA,KAAK,EAAC,SADR;AAEE,QAAA,mBAAmB,EAAC,uFAFtB;AAGE,QAAA,QAAQ,EAAC,UAHX;AAIE,QAAA,GAAG,EAAC;AAJN,QAxDF,CADF;AAiED;AACF,GAjJD;;AAmJA,MAAM4M,iBAAiB,GAAG,SAApBA,iBAAoB,GAAM;AAC9B,QAAMC,MAAM,GAAG9Q,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAAf;;AACA,QAAI6Q,MAAM,KAAK1K,SAAf,EAA0B;AACxB0K,MAAAA,MAAM,CAACxQ,YAAP,CAAoB,UAApB,EAAgC,SAAhC,EAA2C,CAA3C;AACD;AACF,GALD;;AAOA,MAAMyQ,iBAAiB,GAAG,SAApBA,iBAAoB,GAAM;AAC9B,QAAMD,MAAM,GAAG9Q,QAAQ,CAACC,cAAT,CAAwB,YAAxB,CAAf;;AACA,QAAI6Q,MAAM,KAAK1K,SAAf,EAA0B;AACxB0K,MAAAA,MAAM,CAACxQ,YAAP,CAAoB,UAApB,EAAgC,SAAhC,EAA2C,CAA3C;AACD;AACF,GALD;;AAOA6D,EAAAA,eAAS,CAAC,YAAM;AACdf,IAAAA,YAAY,GAAG2B,aAAa,CACzBD,gBADY,GAEZR,SAFY,CAEFR,kBAFE,CAAf;AAIA,WAAO;AAAA,aAAMV,YAAY,CAACmB,WAAb,EAAN;AAAA,KAAP;AACD,GANQ,EAMN,CAAC2L,IAAD,EAAOE,cAAP,EAAuBzK,QAAvB,CANM,CAAT;AAQAxB,EAAAA,eAAS,CAAC,YAAM;AACd,QAAMkK,MAAM,GAAGrO,QAAQ,CAACC,cAAT,CAAwB,QAAxB,CAAf;;AACA,QAAI,CAACiQ,IAAL,EAAW;AACT7B,MAAAA,MAAM,CAACjJ,QAAP,CAAgBC,QAAhB,CAAyBC,CAAzB,GAA6B,GAA7B;;AACA,UAAIyK,YAAY,KAAK,IAArB,EAA2B;AACzB1B,QAAAA,MAAM,CAACjJ,QAAP,CAAgBC,QAAhB,CAAyBQ,CAAzB,GAA6BkK,YAAY,CAAClK,CAA1C;AACAwI,QAAAA,MAAM,CAACjJ,QAAP,CAAgBC,QAAhB,CAAyBU,CAAzB,GAA6BgK,YAAY,CAAChK,CAA1C;AACAsI,QAAAA,MAAM,CAACjJ,QAAP,CAAgBC,QAAhB,CAAyBC,CAAzB,GAA6ByK,YAAY,CAACzK,CAA1C;AACD;;AACDyL,MAAAA,iBAAiB;AAClB,KARD,MAQO;AACLf,MAAAA,eAAe,CAAC;AACdnK,QAAAA,CAAC,EAAEwI,MAAM,CAACjJ,QAAP,CAAgBC,QAAhB,CAAyBQ,CADd;AAEdP,QAAAA,CAAC,EAAE+I,MAAM,CAACjJ,QAAP,CAAgBC,QAAhB,CAAyBC,CAFd;AAGdS,QAAAA,CAAC,EAAEsI,MAAM,CAACjJ,QAAP,CAAgBC,QAAhB,CAAyBU;AAHd,OAAD,CAAf;AAKAsI,MAAAA,MAAM,CAACjJ,QAAP,CAAgBC,QAAhB,CAAyBC,CAAzB,GAA6B+I,MAAM,CAACjJ,QAAP,CAAgBC,QAAhB,CAAyBC,CAAzB,GAA6BI,MAA1D;AACAmL,MAAAA,iBAAiB;AAClB;AACF,GAnBQ,EAmBN,CAACX,IAAD,EAAOxL,WAAP,CAnBM,CAAT;AAqBAP,EAAAA,eAAS,CAAC,YAAM;AACd,QAAIiM,cAAJ,EAAoB;AAClBpO,MAAAA,aAAa,CAACvC,wBAAd,CACE,qBADF,EAEE,YAFF,EAGE,OAHF,EAIE,OAJF;AAMD;AACF,GATQ,EASN,CAAC2Q,cAAD,CATM,CAAT;;AAYA,MAAMY,gBAAgB,GAAG,SAAnBA,gBAAmB,GAAM;AAC7B,YAAQ1I,UAAR;AACE,WAAK,CAAL;AACEoH,QAAAA,mBAAmB,GAAG,kBAAtB;AACA;;AACF,WAAK,CAAL;AACEA,QAAAA,mBAAmB,GAAG,kBAAtB;AACA;;AACF,WAAK,CAAL;AACEA,QAAAA,mBAAmB,GAAG,kBAAtB;AAEA;;AACF,WAAK,CAAL;AACEA,QAAAA,mBAAmB,GAAG,kBAAtB;AACA;;AACF,WAAK,CAAL;AACEA,QAAAA,mBAAmB,GAAG,kBAAtB;AACA;;AACF,WAAK,CAAL;AACEA,QAAAA,mBAAmB,GAAG,iBAAtB;AACA;;AACF,WAAK,CAAL;AACEA,QAAAA,mBAAmB,GAAG,iBAAtB;AACA;;AACF,WAAK,CAAL;AACEA,QAAAA,mBAAmB,GAAG,iBAAtB;AACA;;AACF,WAAK,CAAL;AACEA,QAAAA,mBAAmB,GAAG,iBAAtB;AACA;;AACF,WAAK,CAAL;AACEA,QAAAA,mBAAmB,GAAG,iBAAtB;AACA;AA/BJ;;AAkCA,QAAMuB,KAAK,GAAG,CAAC,MAAD,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B,EAAiC,CAAjC,CAAd;AACA,QAAIC,WAAW,GAAG,CAAC,KAAnB;AAEA,wBACEjN,6BAACA,cAAD,CAAO,QAAP,QACGgN,KAAK,CAACE,GAAN,CAAU,UAACC,IAAD,EAAU;AACnB,UAAIC,GAAJ;AACAH,MAAAA,WAAW,GAAGA,WAAW,GAAG,IAA5B;AACA,UAAMI,MAAM,GAAGf,MAAM,CAACW,WAAW,GAAG,QAAd,GAAyB,KAA1B,CAArB;AACA,UAAID,KAAK,CAACM,OAAN,CAAcH,IAAd,IAAsB,CAAtB,KAA4B9I,UAAhC,EACE+I,GAAG,GAAGd,MAAM,CACV,YAAYa,IAAZ,GAAmB,yCADT,CAAZ,CADF,KAKEC,GAAG,GAAGd,MAAM,CACV,YAAYa,IAAZ,GAAmB,qCADT,CAAZ;AAIF,0BACEnN;AACE,QAAA,GAAG,EAAEgN,KAAK,CAACM,OAAN,CAAcH,IAAd,CADP;AAEE,QAAA,IAAI,EAAEC,GAFR;AAGE,QAAA,QAAQ,EAAEC,MAHZ;AAIE,QAAA,QAAQ,EAAC;AAJX,QADF;AAQD,KArBA,CADH,eAwBErN;AACE,MAAA,QAAQ,EAAC,8CADX;AAEE,MAAA,QAAQ,EAAEyL,mBAFZ;AAGE,MAAA,QAAQ,EAAC;AAHX,MAxBF,CADF;AAgCD,GAtED;;AAwEA,MAAM8B,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AACjC,wBACEvN,6BAACA,cAAD,CAAO,QAAP,qBACEA;AACE,wBAAe,aADjB;AAEE,MAAA,SAAS,EAAC;AAFZ,MADF,eAOEA;AAAU,+BAAsB,YAAhC;AAA6C;AAA7C,MAPF,eAQEA;AACE,+BAAsB,aADxB;AAEE;AAFF,MARF,CADF;AAeD,GAhBD;;AAkBA,sBACEA;AAAU,IAAA,EAAE,EAAC,eAAb;AAA6B,IAAA,QAAQ,EAAC,UAAtC;AAAiD,IAAA,QAAQ,EAAC;AAA1D,KACGiM,IAAI,IAAI,CAACE,cAAT,IAA2BQ,yBAAyB,EADvD,EAEGV,IAAI,IAAIE,cAAR,IAA0BO,wBAAwB,EAFrD,eAIE1M;AACE,IAAA,EAAE,EAAC,QADL;AAEE,wBAFF;AAGE,6BAAsB;AAHxB,kBAOEA;AACE,IAAA,QAAQ,EAAC,yCADX;AAEE,IAAA,QAAQ,EAAC,aAFX;AAGE,IAAA,QAAQ,EAAC;AAHX,IAPF,eAaEA;AACE,IAAA,QAAQ,EAAC,8CADX;AAEE,IAAA,QAAQ,EAAC,aAFX;AAGE,IAAA,QAAQ,EAAC;AAHX,IAbF,EAmBGqE,UAAU,KAAK,CAAf,iBACCrE;AAAU,IAAA,IAAI,EAAE2L,eAAhB;AAAiC,IAAA,QAAQ,EAAC;AAA1C,IApBJ,EAuBGoB,gBAAgB,EAvBnB,EA6BG,CAACjE,MAAM,CAAC0E,KAAP,CAAa9M,MAAb,CAAoB+M,qBAApB,EAAD,iBACCzN;AACE,IAAA,MAAM,EAAC,iCADT;AAEE,IAAA,SAAS,EAAC,iDAFZ;AAGE,IAAA,gBAAgB,EAAC,mFAHnB;AAIE,IAAA,qBAAqB,EAAC,kFAJxB;AAKE,IAAA,qBAAqB,EAAC,kFALxB;AAME,IAAA,IAAI,EAAC,6BANP;AAOE,IAAA,GAAG,EAAC,KAPN;AAQE,IAAA,QAAQ,EAAC,QARX;AASE,IAAA,QAAQ,EAAC,uDATX;AAUE,IAAA,QAAQ,EAAC;AAVX,IA9BJ,CAJF,EAgDG8I,MAAM,CAAC0E,KAAP,CAAa9M,MAAb,CAAoB+M,qBAApB,MAA+CF,oBAAoB,EAhDtE,CADF;AAoDD,CAphBD;;ACkBAzE,QAAM,CAACC,iBAAP,CAAyB,OAAzB,EAAkC;AAChC2E,EAAAA,MAAM,EAAE;AACNpH,IAAAA,EAAE,EAAE;AAAEjJ,MAAAA,IAAI,EAAE;AAAR,KADE;AAENoN,IAAAA,QAAQ,EAAE;AAAEpN,MAAAA,IAAI,EAAE;AAAR,KAFJ;AAGNgN,IAAAA,OAAO,EAAE;AAAE,iBAAS;AAAX,KAHH;AAINiB,IAAAA,eAAe,EAAE;AAAE,iBAAS;AAAX,KAJX;AAKN3Q,IAAAA,OAAO,EAAE;AAAE,iBAAS;AAAX,KALH;AAMNoQ,IAAAA,MAAM,EAAE;AAAE1N,MAAAA,IAAI,EAAE;AAAR,KANF;AAON8N,IAAAA,MAAM,EAAE;AAAE9N,MAAAA,IAAI,EAAE;AAAR,KAPF;AAQNsN,IAAAA,MAAM,EAAE;AAAEtN,MAAAA,IAAI,EAAE;AAAR,KARF;AASN2N,IAAAA,IAAI,EAAE;AAAE3N,MAAAA,IAAI,EAAE;AAAR,KATA;AAUN+N,IAAAA,IAAI,EAAE;AAAE/N,MAAAA,IAAI,EAAE;AAAR,KAVA;AAWNuN,IAAAA,IAAI,EAAE;AAAEvN,MAAAA,IAAI,EAAE;AAAR,KAXA;AAYN4N,IAAAA,IAAI,EAAE;AAAE5N,MAAAA,IAAI,EAAE;AAAR,KAZA;AAaNgO,IAAAA,IAAI,EAAE;AAAEhO,MAAAA,IAAI,EAAE;AAAR,KAbA;AAcNwN,IAAAA,IAAI,EAAE;AAAExN,MAAAA,IAAI,EAAE;AAAR,KAdA;AAeNnC,IAAAA,IAAI,EAAE;AAAEmC,MAAAA,IAAI,EAAE;AAAR,KAfA;AAgBNjC,IAAAA,IAAI,EAAE;AAAEiC,MAAAA,IAAI,EAAE;AAAR,KAhBA;AAiBNkP,IAAAA,IAAI,EAAE;AAAElP,MAAAA,IAAI,EAAE;AAAR,KAjBA;AAkBNsQ,IAAAA,OAAO,EAAE;AAAEtQ,MAAAA,IAAI,EAAE;AAAR,KAlBH;AAmBNuQ,IAAAA,OAAO,EAAE;AAAEvQ,MAAAA,IAAI,EAAE;AAAR,KAnBH;AAoBNwQ,IAAAA,OAAO,EAAE;AAAExQ,MAAAA,IAAI,EAAE;AAAR,KApBH;AAqBNyQ,IAAAA,MAAM,EAAE;AAAEzQ,MAAAA,IAAI,EAAE;AAAR,KArBF;AAsBN0Q,IAAAA,MAAM,EAAE;AAAE1Q,MAAAA,IAAI,EAAE;AAAR,KAtBF;AAuBN2Q,IAAAA,MAAM,EAAE;AAAE3Q,MAAAA,IAAI,EAAE;AAAR,KAvBF;AAwBNyB,IAAAA,KAAK,EAAE;AAAEzB,MAAAA,IAAI,EAAE;AAAR,KAxBD;AAyBN4M,IAAAA,KAAK,EAAE;AAAE5M,MAAAA,IAAI,EAAE;AAAR,KAzBD;AA0BN2M,IAAAA,KAAK,EAAE;AAAE3M,MAAAA,IAAI,EAAE;AAAR,KA1BD;AA2BN0M,IAAAA,KAAK,EAAE;AAAE1M,MAAAA,IAAI,EAAE;AAAR,KA3BD;AA4BNuM,IAAAA,WAAW,EAAE;AAAEvM,MAAAA,IAAI,EAAE;AAAR,KA5BP;AA6BNsM,IAAAA,WAAW,EAAE;AAAEtM,MAAAA,IAAI,EAAE;AAAR;AA7BP,GADwB;AAiChC2L,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAMC,EAAE,GAAG,KAAKA,EAAhB;AACAA,IAAAA,EAAE,CAACS,QAAH,GAAc;AACZe,MAAAA,QAAQ,EAAE,KAAK3K,IAAL,CAAU2K,QADR;AAEZnE,MAAAA,EAAE,EAAE,KAAKxG,IAAL,CAAUwG,EAFF;AAGZ+D,MAAAA,OAAO,EAAE,KAAKvK,IAAL,CAAUuK,OAHP;AAIZiB,MAAAA,eAAe,EAAE,KAAKxL,IAAL,CAAUwL,eAJf;AAKZ3Q,MAAAA,OAAO,EAAE,KAAKmF,IAAL,CAAUnF,OALP;AAMZoQ,MAAAA,MAAM,EAAE,KAAKjL,IAAL,CAAUiL,MANN;AAOZI,MAAAA,MAAM,EAAE,KAAKrL,IAAL,CAAUqL,MAPN;AAQZR,MAAAA,MAAM,EAAE,KAAK7K,IAAL,CAAU6K,MARN;AASZK,MAAAA,IAAI,EAAE,KAAKlL,IAAL,CAAUkL,IATJ;AAUZI,MAAAA,IAAI,EAAE,KAAKtL,IAAL,CAAUsL,IAVJ;AAWZR,MAAAA,IAAI,EAAE,KAAK9K,IAAL,CAAU8K,IAXJ;AAYZK,MAAAA,IAAI,EAAE,KAAKnL,IAAL,CAAUmL,IAZJ;AAaZI,MAAAA,IAAI,EAAE,KAAKvL,IAAL,CAAUuL,IAbJ;AAcZR,MAAAA,IAAI,EAAE,KAAK/K,IAAL,CAAU+K,IAdJ;AAeZ3P,MAAAA,IAAI,EAAE,KAAK4E,IAAL,CAAU5E,IAfJ;AAgBZE,MAAAA,IAAI,EAAE,KAAK0E,IAAL,CAAU1E,IAhBJ;AAiBZmR,MAAAA,IAAI,EAAE,KAAKzM,IAAL,CAAUyM,IAjBJ;AAkBZoB,MAAAA,OAAO,EAAE,KAAK7N,IAAL,CAAU6N,OAlBP;AAmBZC,MAAAA,OAAO,EAAE,KAAK9N,IAAL,CAAU8N,OAnBP;AAoBZC,MAAAA,OAAO,EAAE,KAAK/N,IAAL,CAAU+N,OApBP;AAqBZC,MAAAA,MAAM,EAAE,KAAKhO,IAAL,CAAUgO,MArBN;AAsBZC,MAAAA,MAAM,EAAE,KAAKjO,IAAL,CAAUiO,MAtBN;AAuBZC,MAAAA,MAAM,EAAE,KAAKlO,IAAL,CAAUkO,MAvBN;AAwBZlP,MAAAA,KAAK,EAAE,KAAKgB,IAAL,CAAUhB,KAxBL;AAyBZmL,MAAAA,KAAK,EAAE,KAAKnK,IAAL,CAAUmK,KAzBL;AA0BZD,MAAAA,KAAK,EAAE,KAAKlK,IAAL,CAAUkK,KA1BL;AA2BZD,MAAAA,KAAK,EAAE,KAAKjK,IAAL,CAAUiK,KA3BL;AA4BZH,MAAAA,WAAW,EAAE,KAAK9J,IAAL,CAAU8J,WA5BX;AA6BZD,MAAAA,WAAW,EAAE,KAAK7J,IAAL,CAAU6J;AA7BX,KAAd;AA+BD,GAlE+B;AAoEhC4B,EAAAA,MAAM,EAAE,kBAAY;AAClB,QAAMtC,EAAE,GAAG,KAAKA,EAAhB;AACAA,IAAAA,EAAE,CAACS,QAAH,GAAc;AACZe,MAAAA,QAAQ,EAAE,KAAK3K,IAAL,CAAU2K,QADR;AAEZnE,MAAAA,EAAE,EAAE,KAAKxG,IAAL,CAAUwG,EAFF;AAGZ+D,MAAAA,OAAO,EAAE,KAAKvK,IAAL,CAAUuK,OAHP;AAIZiB,MAAAA,eAAe,EAAE,KAAKxL,IAAL,CAAUwL,eAJf;AAKZ3Q,MAAAA,OAAO,EAAE,KAAKmF,IAAL,CAAUnF,OALP;AAMZoQ,MAAAA,MAAM,EAAE,KAAKjL,IAAL,CAAUiL,MANN;AAOZI,MAAAA,MAAM,EAAE,KAAKrL,IAAL,CAAUqL,MAPN;AAQZR,MAAAA,MAAM,EAAE,KAAK7K,IAAL,CAAU6K,MARN;AASZK,MAAAA,IAAI,EAAE,KAAKlL,IAAL,CAAUkL,IATJ;AAUZI,MAAAA,IAAI,EAAE,KAAKtL,IAAL,CAAUsL,IAVJ;AAWZR,MAAAA,IAAI,EAAE,KAAK9K,IAAL,CAAU8K,IAXJ;AAYZK,MAAAA,IAAI,EAAE,KAAKnL,IAAL,CAAUmL,IAZJ;AAaZI,MAAAA,IAAI,EAAE,KAAKvL,IAAL,CAAUuL,IAbJ;AAcZR,MAAAA,IAAI,EAAE,KAAK/K,IAAL,CAAU+K,IAdJ;AAeZ3P,MAAAA,IAAI,EAAE,KAAK4E,IAAL,CAAU5E,IAfJ;AAgBZE,MAAAA,IAAI,EAAE,KAAK0E,IAAL,CAAU1E,IAhBJ;AAiBZmR,MAAAA,IAAI,EAAE,KAAKzM,IAAL,CAAUyM,IAjBJ;AAkBZoB,MAAAA,OAAO,EAAE,KAAK7N,IAAL,CAAU6N,OAlBP;AAmBZC,MAAAA,OAAO,EAAE,KAAK9N,IAAL,CAAU8N,OAnBP;AAoBZC,MAAAA,OAAO,EAAE,KAAK/N,IAAL,CAAU+N,OApBP;AAqBZC,MAAAA,MAAM,EAAE,KAAKhO,IAAL,CAAUgO,MArBN;AAsBZC,MAAAA,MAAM,EAAE,KAAKjO,IAAL,CAAUiO,MAtBN;AAuBZC,MAAAA,MAAM,EAAE,KAAKlO,IAAL,CAAUkO,MAvBN;AAwBZlP,MAAAA,KAAK,EAAE,KAAKgB,IAAL,CAAUhB,KAxBL;AAyBZmL,MAAAA,KAAK,EAAE,KAAKnK,IAAL,CAAUmK,KAzBL;AA0BZD,MAAAA,KAAK,EAAE,KAAKlK,IAAL,CAAUkK,KA1BL;AA2BZD,MAAAA,KAAK,EAAE,KAAKjK,IAAL,CAAUiK,KA3BL;AA4BZH,MAAAA,WAAW,EAAE,KAAK9J,IAAL,CAAU8J,WA5BX;AA6BZD,MAAAA,WAAW,EAAE,KAAK7J,IAAL,CAAU6J;AA7BX,KAAd;AA+BD;AArG+B,CAAlC;;ACdAb,QAAM,CAACC,iBAAP,CAAyB,mBAAzB,EAA8C;AAC5C2E,EAAAA,MAAM,EAAE;AACNtM,IAAAA,QAAQ,EAAE;AACRxG,MAAAA,IAAI,EAAE,UADE;AAER8J,MAAAA,MAAM,EAAE,CAFA;AAGRC,MAAAA,MAAM,EAAE,CAHA;AAIRC,MAAAA,MAAM,EAAE;AAJA,KADJ;AAONoB,IAAAA,KAAK,EAAE;AACLpL,MAAAA,IAAI,EAAE,OADD;AAEL8J,MAAAA,MAAM,EAAE,CAFH;AAGLC,MAAAA,MAAM,EAAE,CAHH;AAILC,MAAAA,MAAM,EAAE;AAJH,KAPD;AAaNlD,IAAAA,QAAQ,EAAE;AACR9G,MAAAA,IAAI,EAAE,UADE;AAER8J,MAAAA,MAAM,EAAE,CAFA;AAGRC,MAAAA,MAAM,EAAE,CAHA;AAIRC,MAAAA,MAAM,EAAE;AAJA;AAbJ,GADoC;AAqB5CoE,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAMC,EAAE,GAAG,KAAKA,EAAhB;AAIAnD,IAAAA,yBAAyB,CAAC,KAAK4H,MAAN,EAAczE,EAAd,CAAzB;AAEAlN,IAAAA,QAAQ,CAACqN,gBAAT,CAA0B,SAA1B,EAAqCrE,uBAArC;AACAhJ,IAAAA,QAAQ,CAACqN,gBAAT,CAA0B,OAA1B,EAAmCvD,yBAAnC;AACA9J,IAAAA,QAAQ,CAACqN,gBAAT,CAA0B,OAA1B,EAAmC5D,sBAAnC;AACD,GA/B2C;AAiC5C+F,EAAAA,MAAM,EAAE,kBAAY;AAClBrF,IAAAA,6BAA6B;AAC9B;AAnC2C,CAA9C;;ACVA4C,QAAM,CAACC,iBAAP,CAAyB,eAAzB,EAA0C;AACxC2E,EAAAA,MAAM,EAAE;AACN9N,IAAAA,KAAK,EAAE;AAAEvC,MAAAA,IAAI,EAAE;AAAR,KADD;AAEN4Q,IAAAA,KAAK,EAAE;AAAE5Q,MAAAA,IAAI,EAAE;AAAR;AAFD,GADgC;AAMxC2L,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAMC,EAAE,GAAG,KAAKA,EAAhB;AACA,SAAKrJ,KAAL,GAAa,KAAKE,IAAL,CAAUF,KAAvB;AACAqJ,IAAAA,EAAE,CAAC5M,YAAH,CAAgB,MAAhB,EAAwB,OAAxB,EAAiC,KAAKyD,IAAL,CAAUF,KAA3C;AACD,GAVuC;AAYxC2L,EAAAA,MAAM,EAAE,kBAAY;AAAA;;AAClB,QAAMtC,EAAE,GAAG,KAAKA,EAAhB;;AACA,QAAI,KAAKrJ,KAAL,KAAe,KAAKE,IAAL,CAAUF,KAA7B,EAAoC;AAClCrE,MAAAA,UAAU,CAAC,YAAM;AACf0N,QAAAA,EAAE,CAAC5M,YAAH,CAAgB,MAAhB,EAAwB,OAAxB,EAAiC,KAAI,CAACyD,IAAL,CAAUF,KAA3C;AACD,OAFS,EAEP,KAAKE,IAAL,CAAUmO,KAFH,CAAV;AAGA,WAAKrO,KAAL,GAAa,KAAKE,IAAL,CAAUF,KAAvB;AACD;AACF;AApBuC,CAA1C;;ACXA,cAAe;AACbsO,EAAAA,GAAG,EAAE;AACHC,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADX;AAaH9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbH;AAkBHsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBL;AAsBHmV,IAAAA,IAAI,EAAE;AAEJpV,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBH,GADQ;AA8BboV,EAAAA,IAAI,EAAE;AACJH,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADV;AAaJ9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbF;AAkBJsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBJ;AAsBJmV,IAAAA,IAAI,EAAE;AACJpV,MAAAA,OAAO,EAAE,OADL;AAEJC,MAAAA,SAAS,EAAE;AAFP;AAtBF,GA9BO;AAyDbqV,EAAAA,MAAM,EAAE;AACNJ,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADR;AAaN9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbA;AAkBNsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBF;AAsBNmV,IAAAA,IAAI,EAAE;AAEJpV,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBA,GAzDK;AAsFbsV,EAAAA,UAAU,EAAE;AACVL,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADJ;AAaV9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbI;AAkBVsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBE;AAsBVmV,IAAAA,IAAI,EAAE;AAEJpV,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBI,GAtFC;AAmHbuV,EAAAA,MAAM,EAAE;AACNN,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADR;AAaN9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbA;AAkBNsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBF;AAsBNmV,IAAAA,IAAI,EAAE;AAEJpV,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBA,GAnHK;AAgJbwV,EAAAA,KAAK,EAAE;AACLP,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADT;AAaL9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbD;AAkBLsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBH;AAsBLmV,IAAAA,IAAI,EAAE;AAEJpV,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBD,GAhJM;AA6KbyV,EAAAA,SAAS,EAAE;AACTR,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADL;AAaT9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbG;AAkBTsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBC;AAsBTmV,IAAAA,IAAI,EAAE;AAEJpV,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBG,GA7KE;AA0Mb0V,EAAAA,KAAK,EAAE;AACLT,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADT;AAaL9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbD;AAkBLsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBH;AAsBLmV,IAAAA,IAAI,EAAE;AAEJpV,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBD,GA1MM;AAuOb2V,EAAAA,KAAK,EAAE;AACLV,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADT;AAaL9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbD;AAkBLsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBH;AAsBLmV,IAAAA,IAAI,EAAE;AAEJpV,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBD,GAvOM;AAoQb4V,EAAAA,OAAO,EAAE;AACPX,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADP;AAaP9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbC;AAkBPsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBD;AAsBPmV,IAAAA,IAAI,EAAE;AAEJpV,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBC,GApQI;AAiSb6V,EAAAA,KAAK,EAAE;AACLZ,IAAAA,YAAY,EAAE,CACZ,SADY,EAEZ,SAFY,EAGZ,SAHY,EAIZ,SAJY,EAKZ,SALY,EAMZ,SANY,EAOZ,SAPY,EAQZ,SARY,EASZ,SATY,EAUZ,SAVY,CADT;AAaL9O,IAAAA,IAAI,EAAE;AACJuC,MAAAA,CAAC,EAAE,SADC;AAEJP,MAAAA,CAAC,EAAE,SAFC;AAGJS,MAAAA,CAAC,EAAE;AAHC,KAbD;AAkBLsM,IAAAA,MAAM,EAAE;AACNnV,MAAAA,OAAO,EAAE,SADH;AAENC,MAAAA,SAAS,EAAE;AAFL,KAlBH;AAsBLmV,IAAAA,IAAI,EAAE;AAEJpV,MAAAA,OAAO,EAAE,OAFL;AAIJC,MAAAA,SAAS,EAAE;AAJP;AAtBD;AAjSM,CAAf;;ICQqB8V;AAMnB,yBAAYC,KAAZ,EAAmB;AACjB,QAAIC,OAAO,CAACD,KAAD,CAAX,EAAoB;AAElB,WAAKE,KAAL,GAAaD,OAAO,CAACD,KAAD,CAAP,CAAe5P,IAAf,CAAoBuC,CAAjC;AACA,WAAKwN,KAAL,GAAaF,OAAO,CAACD,KAAD,CAAP,CAAe5P,IAAf,CAAoBgC,CAAjC;AACA,WAAKgO,KAAL,GAAaH,OAAO,CAACD,KAAD,CAAP,CAAe5P,IAAf,CAAoByC,CAAjC;AACA,WAAKoN,OAAL,GAAeA,OAAO,CAACD,KAAD,CAAP,CAAed,YAA9B;AACA,WAAKmB,aAAL,GAAqBJ,OAAO,CAACD,KAAD,CAAP,CAAeb,MAAf,CAAsBnV,OAA3C;AACA,WAAKsW,eAAL,GAAuBL,OAAO,CAACD,KAAD,CAAP,CAAeb,MAAf,CAAsBlV,SAA7C;AACA,WAAKsW,WAAL,GAAmBN,OAAO,CAACD,KAAD,CAAP,CAAeZ,IAAf,CAAoBpV,OAAvC;AACA,WAAKwW,aAAL,GAAqBP,OAAO,CAACD,KAAD,CAAP,CAAeZ,IAAf,CAAoBnV,SAAzC;AACD,KAVD,MAUO;AAEL,WAAKiW,KAAL,GAAaD,OAAO,CAAChB,GAAR,CAAY7O,IAAZ,CAAiBuC,CAA9B;AACA,WAAKwN,KAAL,GAAaF,OAAO,CAAChB,GAAR,CAAY7O,IAAZ,CAAiBgC,CAA9B;AACA,WAAKgO,KAAL,GAAaH,OAAO,CAAChB,GAAR,CAAY7O,IAAZ,CAAiByC,CAA9B;AACA,WAAKoN,OAAL,GAAeA,OAAO,CAAChB,GAAR,CAAYC,YAA3B;AACA,WAAKmB,aAAL,GAAqBJ,OAAO,CAAChB,GAAR,CAAYE,MAAZ,CAAmBnV,OAAxC;AACA,WAAKsW,eAAL,GAAuBL,OAAO,CAAChB,GAAR,CAAYE,MAAZ,CAAmBlV,SAA1C;AACA,WAAKsW,WAAL,GAAmBN,OAAO,CAAChB,GAAR,CAAYG,IAAZ,CAAiBpV,OAApC;AACA,WAAKwW,aAAL,GAAqBP,OAAO,CAAChB,GAAR,CAAYG,IAAZ,CAAiBnV,SAAtC;AACD;AACF;;;;SAODwW,eAAA,sBAAarQ,IAAb,EAAmB;AACjB,QAAIA,IAAI,KAAK,GAAT,IAAgBA,IAAI,KAAK,GAA7B,EAAkC,OAAO,KAAK8P,KAAZ;AAClC,QAAI9P,IAAI,KAAK,GAAT,IAAgBA,IAAI,KAAK,GAA7B,EAAkC,OAAO,KAAK+P,KAAZ;AAClC,QAAI/P,IAAI,KAAK,GAAT,IAAgBA,IAAI,KAAK,GAA7B,EAAkC,OAAO,KAAKgQ,KAAZ;AAClC,WAAO,IAAP;AACD;;SAMDM,wBAAA,iCAAwB;AACtB,WAAO,KAAKL,aAAZ;AACD;;SAMDM,0BAAA,mCAA0B;AACxB,WAAO,KAAKL,eAAZ;AACD;;SAMDM,sBAAA,+BAAsB;AACpB,WAAO,KAAKL,WAAZ;AACD;;SAMDM,wBAAA,iCAAwB;AACtB,WAAO,KAAKL,aAAZ;AACD;;SAQDM,cAAA,qBAAY1F,OAAZ,EAAqB;AACnB,QAAM2F,WAAW,GAAG,CAApB;AAEA,QAAIlR,KAAK,GAAG,KAAKoQ,OAAL,CAAa,CAAb,CAAZ;;AAEA,QAAI7E,OAAO,IAAI2F,WAAf,EAA4B;AAC1B,aAAO,KAAKd,OAAL,CAAa,CAAb,CAAP;AACD;;AAED,QAAM1K,UAAU,GAAG,IAAnB;AACA,QAAIyL,GAAG,GAAGzL,UAAV;;AAGA,SAAK,IAAIyB,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAI,CAArB,EAAwBA,CAAC,EAAzB,EAA6B;AAC3B,UAAIoE,OAAO,IAAI4F,GAAf,EAAoB;AAClBnR,QAAAA,KAAK,GAAG,KAAKoQ,OAAL,CAAajJ,CAAb,CAAR;AACA;AACD;;AACDgK,MAAAA,GAAG,IAAIzL,UAAP;AACD;;AAED,WAAO1F,KAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrGkBoR;AAqDnB,iCAAYC,UAAZ,EAAwBlR,SAAxB,EAAmC8I,OAAnC,EAA4CD,KAA5C,EAAmD/M,WAAnD,EAAgEkU,KAAhE,EAAuE;AAAA;;AAAA;AAAA;AAAA,aApDjE;AAoDiE;AAAA;AAAA;AAAA,aAnDvD;AAmDuD;AAAA;AAAA;AAAA,aAlD1D;AAkD0D;AAAA;AAAA;AAAA,aAjD/D;AAiD+D;AAAA;AAAA;AAAA,aAhDxD;AAgDwD;AAAA;AAAA;AAAA,aA/CtD;AA+CsD;AAAA;AAAA;AAAA,aA7C5D;AA6C4D;AAAA;AAAA;AAAA,aA5C5D;AA4C4D;AAAA;AAAA;AAAA,aA3C5D;AA2C4D;AAAA;AAAA;AAAA,aAzC7D;AAyC6D;AAAA;AAAA;AAAA,aAxC7D;AAwC6D;AAAA;AAAA;AAAA,aAvC7D;AAuC6D;AAAA;AAAA;AAAA,aArC7D;AAqC6D;AAAA;AAAA;AAAA,aApC7D;AAoC6D;AAAA;AAAA;AAAA,aAnC7D;AAmC6D;AAAA;AAAA;AAAA,aAjC9D;AAiC8D;AAAA;AAAA;AAAA,aA/B7D;AACRmB,QAAAA,QAAQ,EAAE,CADF;AAERC,QAAAA,QAAQ,EAAE,CAFF;AAGRC,QAAAA,QAAQ,EAAE;AAHF;AA+B6D;AAAA;AAAA;AAAA,aAxBvD;AAwBuD;AAAA;AAAA;AAAA,aAvBhD;AAuBgD;AAAA;AAAA;AAAA,aAtBvD;AAsBuD;AAAA;AAAA;AAAA,aAnB9D;AACPlO,QAAAA,OAAO,EAAE,CADF;AAEPC,QAAAA,OAAO,EAAE,CAFF;AAGPH,QAAAA,OAAO,EAAE;AAHF;AAmB8D;AAAA;AAAA;AAAA,aAZvD;AAYuD;;AAAA,SAmHvEqO,UAnHuE,GAmH1D,YAAM;AACjB,yCAAO,KAAP;AACD,KArHsE;;AAAA,SA2HvEC,UA3HuE,GA2H1D,YAAM;AACjB,yCAAO,KAAP;AACD,KA7HsE;;AAAA,SAmIvEC,UAnIuE,GAmI1D,YAAM;AACjB,yCAAO,KAAP;AACD,KArIsE;;AAAA,SA2IvEC,QA3IuE,GA2I5D,YAAM;AACf,yCAAO,KAAP;AACD,KA7IsE;;AAAA;AAAA;AAAA,aAsJnD,eAACC,WAAD,EAAcC,KAAd,EAAwB;AAC1C,YAAIC,UAAU,GACZF,WAAW,GAAGC,KAAK,+BAAG,KAAH,iBAAnB,GAAoCA,KAAK,+BAAG,KAAH,iBAAzC,GAA0DD,WAD5D;;AAGA,YAAIE,UAAU,GAAG,CAAjB,EAAoB;AAClBA,UAAAA,UAAU,GAAG,CAAb;AACD;;AACD,eAAOA,UAAP;AACD;AA9JsE;AAAA;AAAA;AAAA,aAqKtD,eAACC,KAAD,EAAW;AAC1B,YAAMtK,YAAY,GAAG,4BAAA,KAAI,kBAAJ,kBAAmBJ,MAAnB,CAA0B,UAACC,IAAD;AAAA,iBAAUA,IAAI,CAACC,EAAL,KAAYwK,KAAtB;AAAA,SAA1B,CAArB;;AACA,eAAOtK,YAAY,CAACtM,MAAb,KAAwB,CAA/B;AACD;AAxKsE;AAAA;AAAA;AAAA,aA0LnD,eAClBoM,EADkB,EAElByK,SAFkB,EAGlBC,SAHkB,EAIlBC,SAJkB,EAKlBC,SALkB,EAMlBC,SANkB,EAOlBC,SAPkB,EAQlBxV,KARkB,EASlBC,MATkB,EAUlB+D,MAVkB,EAWlBd,KAXkB,EAYlBuS,SAZkB,EAaf;AACH,eAAO;AACL5M,UAAAA,GAAG,EAAE6B,EAAE,+BAAG,KAAH,WADF;AAELgL,UAAAA,QAAQ,EAAE;AACRC,YAAAA,SAAS,EAAE,OADH;AAER3V,YAAAA,KAAK,EAAEA,KAFC;AAGRC,YAAAA,MAAM,EAAEA;AAHA,WAFL;AAOL2V,UAAAA,IAAI,EAAE;AACJ1S,YAAAA,KAAK,EAAEuS,SADH;AAEJzV,YAAAA,KAAK,EAAE,CAFH;AAGJC,YAAAA,MAAM,EAAE;AAHJ,WAPD;AAYL4V,UAAAA,YAAY,EAAE;AACZ7R,YAAAA,KAAK,EAAEA,MADK;AAEZqO,YAAAA,KAAK,EAAE;AAFK,WAZT;AAgBLvM,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAEsP,SADK;AAER7P,YAAAA,CAAC,EAAE8P,SAFK;AAGRrP,YAAAA,CAAC,EAAEsP;AAHK,WAhBL;AAqBLM,UAAAA,QAAQ,EAAE;AACR5S,YAAAA,KAAK,EAAEA;AADC,WArBL;AAwBL6S,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAEb,SAAS,GAAG,4BAAA,KAAI,SAAJ,SAAY3O,OADtB;AAETyP,YAAAA,KAAK,EAAEb,SAAS,GAAG,4BAAA,KAAI,SAAJ,SAAY9O,OAFtB;AAGT4P,YAAAA,KAAK,EAAEb,SAAS,GAAG,4BAAA,KAAI,SAAJ,SAAY5O,OAHtB;AAIT0P,YAAAA,GAAG,EAAEhB,SAJI;AAKTiB,YAAAA,GAAG,EAAEhB,SALI;AAMTiB,YAAAA,GAAG,EAAEhB;AANI;AAxBN,SAAP;AAkDD;AA1PsE;AAAA;AAAA;AAAA,aAgQjD,iBAAM;AAE1B,oCAAA,KAAI,kBAAJ,oBAAqBxI,mBAAmB,CAAC3B,uBAApB,EAArB;AAGA,YAAMoL,QAAQ,GAAG;AACf7U,UAAAA,IAAI,EAAE,KADS;AAEf8U,UAAAA,IAAI,EAAE,EAFS;AAGfC,UAAAA,MAAM,EAAE,EAHO;AAIfC,UAAAA,OAAO,EAAE,EAJM;AAKfC,UAAAA,MAAM,EAAE,EALO;AAMfC,UAAAA,MAAM,EAAE,EANO;AAOfC,UAAAA,UAAU,EAAE;AAPG,SAAjB;AAUA,YAAIC,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,YAAIC,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,YAAIC,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,YAAMzY,OAAO,GAAG,EAAhB;AACA,YAAI2Q,eAAJ;AACA,YAAInG,CAAJ;AACA,YAAIkO,KAAK,GAAG,CAAZ;AAMA,YAAMC,UAAU,GACd,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,gDAA8B,KAA9B,kDACI,KADJ,sBAEI,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,iBAHN;AAIA,YAAMC,UAAU,GACd,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,gDAA8B,KAA9B,kDACI,KADJ,sBAEI,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,iBAHN;AAIA,YAAMC,UAAU,GACd,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,gDAA8B,KAA9B,kDACI,KADJ,sBAEI,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,iBAHN;;AAKA,YAAMzI,MAAM,GAAG,4BAAA,KAAI,aAAJ,aAAgBpR,MAAhB,CAAuBG,MAAtC;;AACA,YAAMqR,MAAM,GAAG,4BAAA,KAAI,aAAJ,aAAgBsI,MAAhB,CAAuB3Z,MAAtC;;AACA,YAAM6Q,MAAM,GAAG,4BAAA,KAAI,aAAJ,aAAgB+I,MAAhB,CAAuB5Z,MAAtC;;AACA,YAAM6Z,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBha,MAAhB,CAAuBI,OAAvB,GACZ,4BAAA,KAAI,aAAJ,aAAgBJ,MAAhB,CAAuBI,OAAvB,CAA+BE,GADnB,GAEZ,EAFJ;AAGA,YAAM2Z,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBH,MAAhB,CAAuB1Z,OAAvB,GACZ,4BAAA,KAAI,aAAJ,aAAgB0Z,MAAhB,CAAuB1Z,OAAvB,CAA+BE,GADnB,GAEZ,EAFJ;AAGA,YAAM4Z,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBH,MAAhB,CAAuB3Z,OAAvB,GACZ,4BAAA,KAAI,aAAJ,aAAgB2Z,MAAhB,CAAuB3Z,OAAvB,CAA+BE,GADnB,GAEZ,EAFJ;AAIA,YAAM6Z,gBAAgB,GAAG,EAAzB;;AAGA,aAAK,IAAIC,EAAE,+BAAG,KAAH,qBAAX,EAA6BA,EAAE,IAAIP,UAAnC,EAA+CO,EAAE,EAAjD;AACE,eAAK,IAAIC,EAAE,+BAAG,KAAH,qBAAX,EAA6BA,EAAE,IAAIT,UAAnC,EAA+CS,EAAE,EAAjD;AACE,iBAAK,IAAIC,EAAE,+BAAG,KAAH,qBAAX,EAA6BA,EAAE,IAAIX,UAAnC,EAA+CW,EAAE,EAAjD,EAAqD;AACnDxB,cAAAA,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgB9Y,MAAhB,CAAuBua,YAAvB,CAAoCD,EAApC,CAAV;AACAvB,cAAAA,IAAI,GAAG,4BAAA,KAAI,aAAJ,aAAgB/Y,MAAhB,CAAuBwa,aAAvB,CAAqCF,EAArC,CAAP;AACAtB,cAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,cAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAG,cAAAA,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBY,MAAhB,CAAuBS,YAAvB,CAAoCF,EAApC,CAAV;AACAlB,cAAAA,IAAI,GAAG,4BAAA,KAAI,aAAJ,aAAgBW,MAAhB,CAAuBU,aAAvB,CAAqCH,EAArC,CAAP;AACAjB,cAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,cAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAG,cAAAA,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBS,MAAhB,CAAuBQ,YAAvB,CAAoCH,EAApC,CAAV;AACAb,cAAAA,IAAI,GAAG,4BAAA,KAAI,aAAJ,aAAgBQ,MAAhB,CAAuBS,aAAvB,CAAqCJ,EAArC,CAAP;AACAZ,cAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,cAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACA5H,cAAAA,eAAe,GAAG,4BAAA,KAAI,aAAJ,aAAgB7Q,aAAhB,CAA8BwZ,EAA9B,EAAkCD,EAAlC,EAAsCD,EAAtC,CAAlB;AACA5O,cAAAA,CAAC,+BAAG,KAAH,4CACCmG,eADD,EAEC,4BAAA,KAAI,aAAJ,aAAgB8I,QAFjB,CAAD;;AAOA,kBAAIjP,CAAC,+BAAG,KAAH,6CAAL,EAAmC;AACjC,oBAAIkP,IAAI,GAAGlP,CAAX;AACA,oBAAIA,CAAC,GAAG,IAAR,EAAckP,IAAI,GAAG,IAAP;;AAEd,oBAAMvV,KAAK,GAAG,4BAAA,KAAI,iBAAJ,iBAAoBiR,WAApB,CAAgC5K,CAAhC,CAAd;;AAEA,oBAAMmB,EAAE,GACN,4BAAA,KAAI,MAAJ,QACAoM,IADA,GAEA,KAFA,GAGAC,IAHA,GAIA,KAJA,GAKAO,IALA,GAMA,KANA,GAOAC,IAPA,GAQA,KARA,GASAL,IATA,GAUA,KAVA,GAWAC,IAZF;AAaA,oBAAIpJ,WAAW,SAAf;;AACA,gDAAI,KAAJ,kCAAwBrD,EAAxB,GAA6B;AAC3BqD,kBAAAA,WAAW,GAAG,4BAAA,KAAI,iBAAJ,iBAAoBiG,uBAApB,EAAd;AACD,iBAFD,MAEO;AACLjG,kBAAAA,WAAW,GAAG7K,KAAd;AACD;;AAED,oBAAMzG,OAAO,YAAUiO,EAAV,iEAEAnB,CAFA,gCAGFrG,KAHE,iCAIDqM,MAJC,iCAKDJ,MALC,iCAMDJ,MANC,0CAOQW,eAPR,kCAQA3Q,OARA,+BASH+X,IATG,+BAUHI,IAVG,+BAWHI,IAXG,+BAYHP,IAZG,+BAaHI,IAbG,+BAcHI,IAdG,+BAeHc,EAfG,+BAgBHD,EAhBG,+BAiBHD,EAjBG,kCAkBAtB,OAlBA,kCAmBAI,OAnBA,kCAoBAI,OApBA,iCAqBDL,MArBC,iCAsBDI,MAtBC,iCAuBDI,MAvBC,sCAwBIzJ,WAxBJ,sCAyBI,4BAAA,KAAI,iBAAJ,iBAAoBiG,uBAApB,EAzBJ,gCA0BF,4BAAA,KAAI,iBAAJ,iBAAoBF,YAApB,CAAiC,GAAjC,CA1BE,gCA2BF,4BAAA,KAAI,iBAAJ,iBAAoBA,YAApB,CAAiC,GAAjC,CA3BE,gCA4BF,4BAAA,KAAI,iBAAJ,iBAAoBA,YAApB,CAAiC,GAAjC,CA5BX;;AA8BA,oBAAM9T,KAAK,GAAGyY,IAAI,GAAG,GAArB;AAIA,oBAAMC,IAAI,GAAGL,EAAE,GAAG,CAAlB;AACA,oBAAMM,IAAI,GAAGR,EAAE,GAAG,CAAlB;AACA,oBAAMS,IAAI,GAAGR,EAAE,GAAG,CAAlB;AACA9B,gBAAAA,QAAQ,CAACC,IAAT,CAAckB,KAAd,IAAuB;AACrB/M,kBAAAA,EAAE,EAAEA,EADiB;AAErBxH,kBAAAA,KAAK,EAAEA,KAFc;AAGrBzG,kBAAAA,OAAO,EAAEA,OAHY;AAIrBgS,kBAAAA,OAAO,EAAEiB,eAJY;AAKrBqG,kBAAAA,SAAS,EAAE;AACT8C,oBAAAA,SAAS,8BAAE,KAAF,gDAA6BnO,EAA7B,CADA;AAEToO,oBAAAA,UAAU,8BAAE,KAAF,gDAA6BpO,EAA7B,CAFD;AAGTqO,oBAAAA,SAAS,8BAAE,KAAF,gDAA6BrO,EAA7B,CAHA;AAITsO,oBAAAA,OAAO,EAAEhZ,KAJA;AAKTiZ,oBAAAA,QAAQ,EAAEjZ,KALD;AAMTkZ,oBAAAA,OAAO,EAAElZ;AANA,mBALU;AAarBmZ,kBAAAA,UAAU,EAAE;AACVnD,oBAAAA,KAAK,EAAE0C,IAAI,GAAG,4BAAA,KAAI,SAAJ,SAAYlS,OADhB;AAEVyP,oBAAAA,KAAK,EAAE0C,IAAI,GAAG,4BAAA,KAAI,SAAJ,SAAYrS,OAFhB;AAGV4P,oBAAAA,KAAK,EAAE0C,IAAI,GAAG,4BAAA,KAAI,SAAJ,SAAYnS,OAHhB;AAIV0P,oBAAAA,GAAG,EAAEuC,IAJK;AAKVtC,oBAAAA,GAAG,EAAEuC,IALK;AAMVtC,oBAAAA,GAAG,EAAEuC;AANK,mBAbS;AAqBrBQ,kBAAAA,UAAU,EAAE;AACVC,oBAAAA,SAAS,8BAAE,KAAF,8CAA4B3O,EAA5B,CADC;AAEV4O,oBAAAA,OAAO,EAAEvL;AAFC;AArBS,iBAAvB;AAyDAmK,gBAAAA,gBAAgB,CAACT,KAAD,CAAhB,GAA0B;AACxB5O,kBAAAA,GAAG,EAAE6B,EADmB;AAExBN,kBAAAA,KAAK,EAAEpK,KAFiB;AAGxBkD,kBAAAA,KAAK,EAAE6K;AAHiB,iBAA1B;AAKD;;AACD0J,cAAAA,KAAK;AACN;AArJH;AADF;;AAwJA,oCAAA,KAAI,gBAAJ,kBAAqBS,gBAArB;AAEA,YAAMqB,UAAU,GAAG,EAAnB;AACA,YAAMC,YAAY,GAAG,EAArB;AAEA/B,QAAAA,KAAK,GAAG,CAAR;;AACA,aAAK,IAAIU,GAAE,+BAAG,KAAH,qBAAX,EAA6BA,GAAE,IAAIR,UAAnC,EAA+CQ,GAAE,EAAjD,EAAqD;AACnDoB,UAAAA,UAAU,CAAC9B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEE,CAAC,GAAD,+BAAO,KAAP,qBAFF,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIEU,GAAE,GAAG,CAJP,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIH,OAAO,CAACG,GAAE,GAAG,CAAN,CAAP,GACIH,OAAO,CAACG,GAAE,GAAG,CAAN,CAAP,CAAgB3Z,OADpB,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAajF,QAAb,GAAwB0D,GAAxB,GAA6B,CAA7B,GAAiCwB,MAAM,CAACC,OAAzC,IAAoD,GADtD,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAsF,UAAAA,YAAY,CAAC/B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEEC,UAAU,GAAG,GAFf,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIES,GAAE,GAAG,CAJP,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIH,OAAO,CAACG,GAAE,GAAG,CAAN,CAAP,GACIH,OAAO,CAACG,GAAE,GAAG,CAAN,CAAP,CAAgB3Z,OADpB,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAajF,QAAb,GAAwB0D,GAAxB,GAA6B,CAA7B,GAAiCwB,MAAM,CAACC,OAAzC,IAAoD,GADtD,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAuD,UAAAA,KAAK;AACN;;AAEDnB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,WADmB;AAEvB7B,UAAAA,GAAG,EAAE,mCAAO,KAAP,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAEuL,MADH;AAEJrM,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,GADK;AAERP,YAAAA,CAAC,EAAE,GAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYxP,OAD9B;AAETyP,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAY3P,OAF9B;AAGT4P,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAAhB,GAAsB,4BAAA,KAAI,SAAJ,SAAYzP,OAHhC;AAIT0P,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAJZ;AAKTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CALZ;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AA0CAC,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,YADmB;AAEvB7B,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAEuL,MADH;AAEJrM,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,GADK;AAERP,YAAAA,CAAC,EAAE,EAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYlR,OAD3B;AAETyP,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAY3P,OAF9B;AAGT4P,YAAAA,KAAK,EAAEyB,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlR,OAH7B;AAIT0P,YAAAA,GAAG,EAAEuB,UAAU,GAAG,CAJT;AAKTtB,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CALZ;AAMTC,YAAAA,GAAG,EAAEsB,UAAU,GAAG;AANT;AAZY,SAAzB;;AAyCA,aAAK,IAAIU,GAAE,+BAAG,KAAH,qBAAX,EAA6BA,GAAE,IAAIX,UAAnC,EAA+CW,GAAE,EAAjD,EAAqD;AACnDkB,UAAAA,UAAU,CAAC9B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEEY,GAAE,GAAG,CAFP,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIN,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,GACIN,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,CAAgB7Z,OADpB,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAalF,QAAb,GAAwB6D,GAAxB,GAA6B,CAA7B,GAAiCsB,MAAM,CAACC,OAAzC,IAAoD,GADtD,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAsF,UAAAA,YAAY,CAAC/B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEEY,GAAE,GAAG,CAFP,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIEV,UAAU,GAAG,GAJf,EAKE,GALF,EAME,EANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWII,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,GACIN,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,CAAgB7Z,OADpB,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAalF,QAAb,GAAwB6D,GAAxB,GAA6B,CAA7B,GAAiCsB,MAAM,CAACC,OAAzC,IAAoD,GADtD,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAuD,UAAAA,KAAK;AACN;;AAEDnB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,WADmB;AAEvB7B,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAEmL,MADH;AAEJjM,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,GADK;AAERP,YAAAA,CAAC,EAAE,GAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,SAAYxP,OAD1B;AAETyP,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAY3P,OAF9B;AAGT4P,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYzP,OAH9B;AAIT0P,YAAAA,GAAG,8BAAE,KAAF,qBAJM;AAKTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CALZ;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AAwCAC,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,SADmB;AAEvB7B,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAEmL,MADH;AAEJjM,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,GADK;AAERP,YAAAA,CAAC,EAAE,CAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlR,OAD7B;AAETyP,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAY3P,OAF9B;AAGT4P,YAAAA,KAAK,EAAEyB,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYlR,OAH3B;AAIT0P,YAAAA,GAAG,EAAEuB,UAAU,GAAG,GAJT;AAKTtB,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CALZ;AAMTC,YAAAA,GAAG,EAAEsB,UAAU,GAAG;AANT;AAZY,SAAzB;AAyCA4B,QAAAA,UAAU,CAAC9B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEEC,UAAU,GAAG,GAFf,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIEC,UAAU,GAAG,GAJf,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIM,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,GACIA,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,CAA2BzZ,OAD/B,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAahF,QAAb,+BAAwB,KAAxB,wBAAwC,CAAxC,GAA4CiF,MAAM,CAACC,OAApD,IAA+D,GADjE,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAsF,QAAAA,YAAY,CAAC/B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEEC,UAAU,GAAG,GAFf,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,EANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIO,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,GACIA,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,CAA2BzZ,OAD/B,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAahF,QAAb,+BAAwB,KAAxB,wBAAwC,CAAxC,GAA4CiF,MAAM,CAACC,OAApD,IAA+D,GADjE,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAuD,QAAAA,KAAK;AACL8B,QAAAA,UAAU,CAAC9B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEE,4BAAA,KAAI,WAAJ,aAAgB,GAFlB,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIEE,UAAU,GAAG,GAJf,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIM,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,GACIA,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,CAA2BzZ,OAD/B,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAahF,QAAb,+BAAwB,KAAxB,wBAAwC,CAAxC,GAA4CiF,MAAM,CAACC,OAApD,IAA+D,GADjE,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAsF,QAAAA,YAAY,CAAC/B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEE,4BAAA,KAAI,WAAJ,aAAgB,GAFlB,EAGE,4BAAA,KAAI,WAAJ,aAAgB,CAHlB,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIQ,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,GACIA,OAAO,CAAC,4BAAA,KAAI,WAAJ,aAAgB,CAAjB,CAAP,CAA2BzZ,OAD/B,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAahF,QAAb,+BAAwB,KAAxB,wBAAwC,CAAxC,GAA4CiF,MAAM,CAACC,OAApD,IAA+D,GADjE,IAEI,GAfZ,GAiBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CAjBF,EAkBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAlBF;AAoBAuD,QAAAA,KAAK;AAELnB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,UADmB;AAEvB7B,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAE+K,MADH;AAEJ7L,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,CADK;AAERP,YAAAA,CAAC,EAAE,GAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAAhB,GAAsB,4BAAA,KAAI,SAAJ,SAAYxP,OADhC;AAETyP,YAAAA,KAAK,EAAE2B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYtR,OAF3B;AAGT4P,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYzP,OAH9B;AAIT0P,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAJZ;AAKTC,YAAAA,GAAG,EAAEwB,UAAU,GAAG,CALT;AAMTvB,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AAwCAC,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,UADmB;AAEvB7B,UAAAA,GAAG,EAAE,qCAAS,KAAT,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAE+K,MADH;AAEJ7L,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,CADK;AAERP,YAAAA,CAAC,EAAE,EAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlR,OAD7B;AAETyP,YAAAA,KAAK,EAAE2B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYtR,OAF3B;AAGT4P,YAAAA,KAAK,EAAEyB,UAAU,GAAG,4BAAA,KAAI,SAAJ,SAAYlR,OAHvB;AAIT0P,YAAAA,GAAG,EAAEuB,UAAU,GAAG,GAJT;AAKTtB,YAAAA,GAAG,EAAEwB,UAAU,GAAG,CALT;AAMTvB,YAAAA,GAAG,EAAEsB;AANI;AAZY,SAAzB;AAoCArB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,UADmB;AAEvB7B,UAAAA,GAAG,EAAE,qCAAS,KAAT,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAE+K,MADH;AAEJ7L,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,CADK;AAERP,YAAAA,CAAC,EAAE,GAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYxP,OAD9B;AAETyP,YAAAA,KAAK,EAAE2B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYtR,OAF3B;AAGT4P,YAAAA,KAAK,EAAEyB,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlR,OAH7B;AAIT0P,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAJZ;AAKTC,YAAAA,GAAG,EAAEwB,UAAU,GAAG,CALT;AAMTvB,YAAAA,GAAG,EAAEsB,UAAU,GAAG;AANT;AAZY,SAAzB;AAsCArB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,UADmB;AAEvB7B,UAAAA,GAAG,EAAE,qCAAS,KAAT,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAE+K,MADH;AAEJ7L,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,CADK;AAERP,YAAAA,CAAC,EAAE,GAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlR,OAD7B;AAETyP,YAAAA,KAAK,EAAE2B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYtR,OAF3B;AAGT4P,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAAhB,GAAsB,4BAAA,KAAI,SAAJ,SAAYzP,OAHhC;AAIT0P,YAAAA,GAAG,EAAEuB,UAAU,GAAG,GAJT;AAKTtB,YAAAA,GAAG,EAAEwB,UAAU,GAAG,CALT;AAMTvB,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AA2IAoB,QAAAA,KAAK;AACL,YAAMoC,YAAY,GAChB,4BAAA,KAAI,SAAJ,uCAAc,KAAd,sBAA6B,4BAAA,KAAI,UAAJ,YAAe,CAA5C,+BAAgD,KAAhD,iBADF;AAEA,YAAMC,YAAY,GAChB,4BAAA,KAAI,SAAJ,uCAAc,KAAd,sBAA6B,4BAAA,KAAI,UAAJ,YAAe,CAA5C,+BAAgD,KAAhD,iBADF;AAEAxD,QAAAA,QAAQ,CAACI,MAAT,GAAkB;AAChB7N,UAAAA,GAAG,EAAE,SAAS4O,KAAT,+BAAiB,KAAjB,WADW;AAEhBrN,UAAAA,KAAK,EAAE;AACLpK,YAAAA,KAAK,EAAE6Z,YAAY,GAAG,CADjB;AAEL5Z,YAAAA,MAAM,EAAE,GAFH;AAGL8Z,YAAAA,KAAK,EAAED,YAAY,GAAG;AAHjB,WAFS;AAOhB/D,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB6D,YAAY,GAAG,GAA/B,GAAqC,CAArC,GAAyC,4BAAA,KAAI,SAAJ,SAAYrT,OADnD;AAETyP,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAAhB,GAAsB,4BAAA,KAAI,SAAJ,SAAY3P,OAFhC;AAGT4P,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB4D,YAAY,GAAG,GAA/B,GAAqC,GAArC,GAA2C,4BAAA,KAAI,SAAJ,SAAYrT,OAHrD;AAIT0P,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB0D,YAAY,GAAG,GAA/B,GAAqC,CAJjC;AAKTzD,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GALZ;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgByD,YAAY,GAAG,GAA/B,GAAqC;AANjC;AAPK,SAAlB;AAyDArC,QAAAA,KAAK;AACLnB,QAAAA,QAAQ,CAACG,OAAT,CAAiB,CAAjB,IAAsB;AACpB5N,UAAAA,GAAG,EAAE,SAAS4O,KAAT,+BAAiB,KAAjB,WADe;AAEpB/M,UAAAA,EAAE,EAAE,YAFgB;AAGpBgL,UAAAA,QAAQ,EAAE;AACR1V,YAAAA,KAAK,EAAE,CADC;AAERC,YAAAA,MAAM,EAAE,EAFA;AAGR8Z,YAAAA,KAAK,EAAE;AAHC,WAHU;AAQpBvU,UAAAA,QAAQ,EAAE;AACRQ,YAAAA,CAAC,EAAE0R,UAAU,GAAG,CADR;AAERjS,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,WAAc,CAA9B,GAAkC,GAF7B;AAGRS,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,WAAc,CAA9B,GAAkC;AAH7B,WARU;AAapB4P,UAAAA,QAAQ,EAAE;AACR5S,YAAAA,KAAK,EAAE,SADC;AAER8W,YAAAA,WAAW,EAAE;AAFL;AAbU,SAAtB;AA6DA1D,QAAAA,QAAQ,CAACE,MAAT,aAAsB+C,UAAtB,EAAqCC,YAArC;AAEA,eAAOlD,QAAP;AACD;AAjqCsE;AAAA;AAAA;AAAA,aAwqCjD,eAAC2D,kBAAD,EAAwB;AAE5C,oCAAA,KAAI,kBAAJ,oBAAqBpN,mBAAmB,CAAC3B,uBAApB,EAArB;AAGA,YAAMoL,QAAQ,GAAG;AACf7U,UAAAA,IAAI,EAAE,KADS;AAEf8U,UAAAA,IAAI,EAAE,EAFS;AAGfC,UAAAA,MAAM,EAAE,EAHO;AAIfC,UAAAA,OAAO,EAAE,EAJM;AAKfC,UAAAA,MAAM,EAAE,EALO;AAMfC,UAAAA,MAAM,EAAE,EANO;AAOfC,UAAAA,UAAU,EAAE;AAPG,SAAjB;AAUA,YAAIsD,iBAAJ;AACA,YAAIrD,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,YAAIC,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,YAAI7N,CAAJ;AACA,YAAMxK,OAAO,GAAG,EAAhB;AACA,YAAI2Q,eAAJ;AACA,YAAI+H,KAAK,GAAG,CAAZ;AAIA,YAAMC,UAAU,GACd,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,oBAA8B,4BAAA,KAAI,aAAJ,aAAgB3Z,MAAhB,CAAuBD,MAArD,GACI,4BAAA,KAAI,aAAJ,aAAgBC,MAAhB,CAAuBD,MAD3B,GAEI,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,iBAHN;AAIA,YAAM6Z,UAAU,GACd,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,oBAA8B,4BAAA,KAAI,aAAJ,aAAgBE,MAAhB,CAAuB/Z,MAArD,GACI,4BAAA,KAAI,aAAJ,aAAgB+Z,MAAhB,CAAuB/Z,MAD3B,GAEI,4BAAA,KAAI,WAAJ,yCAAgB,KAAhB,iBAHN;AAIA,YAAMqR,MAAM,GACV,4BAAA,KAAI,aAAJ,aAAgBpR,MAAhB,CAAuBG,MAAvB,KAAkC,EAAlC,GAAuC,4BAAA,KAAI,aAAJ,aAAgBH,MAAhB,CAAuBG,MAA9D,GAAuE,GADzE;AAEA,YAAMqR,MAAM,GACV,4BAAA,KAAI,aAAJ,aAAgBsI,MAAhB,CAAuB3Z,MAAvB,KAAkC,EAAlC,GAAuC,4BAAA,KAAI,aAAJ,aAAgB2Z,MAAhB,CAAuB3Z,MAA9D,GAAuE,GADzE;AAEA,YAAM6Z,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBha,MAAhB,CAAuBI,OAAvB,GACZ,4BAAA,KAAI,aAAJ,aAAgBJ,MAAhB,CAAuBI,OAAvB,CAA+BE,GADnB,GAEZ,EAFJ;AAGA,YAAM2Z,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBH,MAAhB,CAAuB1Z,OAAvB,GACZ,4BAAA,KAAI,aAAJ,aAAgB0Z,MAAhB,CAAuB1Z,OAAvB,CAA+BE,GADnB,GAEZ,EAFJ;AAIA,YAAM6Z,gBAAgB,GAAG,EAAzB;;AAGA,aAAK,IAAIE,EAAE,+BAAG,KAAH,qBAAX,EAA6BA,EAAE,IAAIT,UAAnC,EAA+CS,EAAE,EAAjD,EAAqD;AACnD,eAAK,IAAIC,EAAE,+BAAG,KAAH,qBAAX,EAA6BA,EAAE,IAAIX,UAAnC,EAA+CW,EAAE,EAAjD,EAAqD;AACnDxB,YAAAA,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgB9Y,MAAhB,CAAuBua,YAAvB,CAAoCD,EAApC,CAAV;AACAvB,YAAAA,IAAI,GAAG,4BAAA,KAAI,aAAJ,aAAgB/Y,MAAhB,CAAuBwa,aAAvB,CAAqCF,EAArC,CAAP;AACAtB,YAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,YAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAG,YAAAA,OAAO,GAAG,4BAAA,KAAI,aAAJ,aAAgBY,MAAhB,CAAuBS,YAAvB,CAAoCF,EAApC,CAAV;AACAlB,YAAAA,IAAI,GAAG,4BAAA,KAAI,aAAJ,aAAgBW,MAAhB,CAAuBU,aAAvB,CAAqCH,EAArC,CAAP;AACAjB,YAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,YAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAxH,YAAAA,eAAe,GAAG,4BAAA,KAAI,aAAJ,aAAgB7Q,aAAhB,CAA8BwZ,EAA9B,EAAkCD,EAAlC,CAAlB;AACA7O,YAAAA,CAAC,+BAAG,KAAH,4CAA4BmG,eAA5B,EAA6C,4BAAA,KAAI,aAAJ,aAAgB8I,QAA7D,CAAD;AACA0B,YAAAA,iBAAiB,GAAI3Q,CAAC,+BAAG,KAAH,iBAAD,+BAAkB,KAAlB,+BAAD,GAAyC,EAA7D;;AAIA,gBAAIA,CAAC,+BAAG,KAAH,6CAAL,EAAmC;AACjC,kBAAM4Q,eAAe,+BAAG,KAAH,4CACnBF,kBADmB,EAEnBnD,IAFmB,EAGnBI,IAHmB,CAArB;;AAKA,kBAAMhU,KAAK,GACTiX,eAAe,KAAK,EAApB,GACI,4BAAA,KAAI,iBAAJ,iBAAoBhG,WAApB,CAAgC5K,CAAhC,CADJ,GAEI4Q,eAHN;AAMA,kBAAMzP,EAAE,GACN,4BAAA,KAAI,MAAJ,QAAWoM,IAAX,GAAkB,KAAlB,GAA0BC,IAA1B,GAAiC,KAAjC,GAAyCG,IAAzC,GAAgD,KAAhD,GAAwDC,IAD1D;AAEA,kBAAIpJ,WAAW,SAAf;;AACA,8CAAI,KAAJ,kCAAwBrD,EAAxB,GAA6B;AAC3BqD,gBAAAA,WAAW,GAAG,4BAAA,KAAI,iBAAJ,iBAAoBiG,uBAApB,EAAd;AACD,eAFD,MAEO;AACLjG,gBAAAA,WAAW,GAAG7K,KAAd;AACD;;AAED,kBAAMzG,OAAO,YAAUiO,EAAV,6DAEAnB,CAFA,8BAGFrG,KAHE,+BAIDqM,MAJC,+BAKDJ,MALC,qEAOQO,eAPR,gCAQA3Q,OARA,6BASH+X,IATG,6BAUHI,IAVG,6BAWH,CAXG,6BAYHH,IAZG,6BAaHI,IAbG,6BAcH,CAdG,6BAeHkB,EAfG,6BAgBHD,EAhBG,6BAiBH,CAjBG,gCAkBAvB,OAlBA,gCAmBAI,OAnBA,gCAoBA,CApBA,+BAqBDD,MArBC,+BAsBDI,MAtBC,+BAuBD,CAvBC,oCAwBIrJ,WAxBJ,oCAyBI,4BAAA,KAAI,iBAAJ,iBAAoBiG,uBAApB,EAzBJ,8BA0BF,4BAAA,KAAI,iBAAJ,iBAAoBF,YAApB,CAAiC,GAAjC,CA1BE,8BA2BF,4BAAA,KAAI,iBAAJ,iBAAoBA,YAApB,CAAiC,GAAjC,CA3BE,8BA4BF,4BAAA,KAAI,iBAAJ,iBAAoBA,YAApB,CAAiC,GAAjC,CA5BX;;AA8BA,kBAAM9T,KAAK,GAAGgX,MAAM,+BAAG,KAAH,mBAAN,+BAAwB,KAAxB,+BAAd;;AACA,kBAAM+C,KAAK,GAAG3C,MAAM,+BAAG,KAAH,mBAAN,+BAAwB,KAAxB,+BAAd;;AACA,kBAAMsB,IAAI,GAAGL,EAAE,GAAG,CAAlB;AACA,kBAAMM,IAAI,GAAGP,EAAE,GAAG,CAAlB;AACA9B,cAAAA,QAAQ,CAACC,IAAT,CAAckB,KAAd,IAAuB;AACrB/M,gBAAAA,EAAE,EAAEA,EADiB;AAErBxH,gBAAAA,KAAK,EAAEA,KAFc;AAGrBzG,gBAAAA,OAAO,EAAEA,OAHY;AAIrBgS,gBAAAA,OAAO,EAAEiB,eAJY;AAKrBqG,gBAAAA,SAAS,EAAE;AACT8C,kBAAAA,SAAS,EAAE7Y,KADF;AAET8Y,kBAAAA,UAAU,8BAAE,KAAF,gDAA6BpO,EAA7B,CAFD;AAGTqO,kBAAAA,SAAS,EAAEgB,KAHF;AAITf,kBAAAA,OAAO,EAAEhZ,KAJA;AAKTiZ,kBAAAA,QAAQ,EAAG1P,CAAC,+BAAG,KAAH,iBAAD,+BAAkB,KAAlB,+BAAD,GAAyC,CAL1C;AAMT2P,kBAAAA,OAAO,EAAEa;AANA,iBALU;AAarBZ,gBAAAA,UAAU,EAAE;AACVnD,kBAAAA,KAAK,EAAE0C,IAAI,GAAG,4BAAA,KAAI,SAAJ,SAAYlS,OADhB;AAEVyP,kBAAAA,KAAK,EAAEiE,iBAFG;AAGVhE,kBAAAA,KAAK,EAAEyC,IAAI,GAAG,4BAAA,KAAI,SAAJ,SAAYlS,OAHhB;AAIV0P,kBAAAA,GAAG,EAAEuC,IAJK;AAKVtC,kBAAAA,GAAG,EAAE8D,iBALK;AAMV7D,kBAAAA,GAAG,EAAEsC;AANK,iBAbS;AAqBrBS,gBAAAA,UAAU,EAAE;AACVC,kBAAAA,SAAS,8BAAE,KAAF,8CAA4B3O,EAA5B,CADC;AAEV4O,kBAAAA,OAAO,EAAEvL;AAFC;AArBS,eAAvB;AAgDAmK,cAAAA,gBAAgB,CAACT,KAAD,CAAhB,GAA0B;AACxB5O,gBAAAA,GAAG,EAAE6B,EADmB;AAExBN,gBAAAA,KAAK,EAAEb,CAFiB;AAGxBrG,gBAAAA,KAAK,EAAE6K;AAHiB,eAA1B;AAKD;;AACD0J,YAAAA,KAAK;AACN;AACF;;AACD,oCAAA,KAAI,gBAAJ,kBAAqBS,gBAArB;AAEA,YAAMqB,UAAU,GAAG,EAAnB;AACA,YAAMC,YAAY,GAAG,EAArB;AAEA/B,QAAAA,KAAK,GAAG,CAAR;;AACA,aAAK,IAAIW,GAAE,+BAAG,KAAH,qBAAX,EAA6BA,GAAE,IAAIT,UAAnC,EAA+CS,GAAE,EAAjD,EAAqD;AACnDmB,UAAAA,UAAU,CAAC9B,KAAD,CAAV,+BAAoB,KAApB,wCACE,OAAOA,KADT,EAEE,4BAAA,KAAI,WAAJ,aAAgB,GAFlB,EAGE,CAHF,EAIEW,GAAE,GAAG,CAJP,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,GACIJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,CAAgB5Z,OADpB,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAajF,QAAb,GACC,CAAC2D,GAAE,GAAG,CAAN,gCAAW,KAAX,mBADD,GAECuB,MAAM,CAACC,OAFT,IAGE,GAJJ,IAKI,GAlBZ,GAoBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CApBF,EAqBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EArBF;AAuBAsF,UAAAA,YAAY,CAAC/B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,OAAOA,KADT,EAEEC,UAAU,GAAG,GAFf,EAGE,CAHF,EAIEU,GAAE,GAAG,CAJP,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,GACIJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,CAAgB5Z,OADpB,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAajF,QAAb,GACC,CAAC2D,GAAE,GAAG,CAAN,gCAAW,KAAX,mBADD,GAECuB,MAAM,CAACC,OAFT,IAGE,GAJJ,IAKI,GAlBZ,GAoBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CApBF,EAqBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EArBF;AAwBAuD,UAAAA,KAAK;AACN;;AAEDnB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,WADmB;AAEvB7B,UAAAA,GAAG,EAAE,mCAAO,KAAP,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAEuL,MADH;AAEJrM,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,GADK;AAERP,YAAAA,CAAC,EAAE,GAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYxP,OAD9B;AAETyP,YAAAA,KAAK,EAAE,4BAAA,KAAI,SAAJ,SAAY3P,OAFV;AAGT4P,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,GAAhB,GAAsB,4BAAA,KAAI,SAAJ,SAAYzP,OAHhC;AAIT0P,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAJZ;AAKTC,YAAAA,GAAG,EAAE,CALI;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AAsCAC,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,YADmB;AAEvB7B,UAAAA,GAAG,EAAE,mCAAO,KAAP,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAEuL,MADH;AAEJrM,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,GADK;AAERP,YAAAA,CAAC,EAAE,EAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYlR,OAD3B;AAETyP,YAAAA,KAAK,EAAE,4BAAA,KAAI,SAAJ,SAAY3P,OAFV;AAGT4P,YAAAA,KAAK,EAAEyB,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlR,OAH7B;AAIT0P,YAAAA,GAAG,EAAEuB,UAAU,GAAG,CAJT;AAKTtB,YAAAA,GAAG,EAAE,CALI;AAMTC,YAAAA,GAAG,EAAEsB,UAAU,GAAG;AANT;AAZY,SAAzB;;AAwCA,aAAK,IAAIU,IAAE,+BAAG,KAAH,qBAAX,EAA6BA,IAAE,IAAIX,UAAnC,EAA+CW,IAAE,EAAjD,EAAqD;AACnDkB,UAAAA,UAAU,CAAC9B,KAAD,CAAV,+BAAoB,KAApB,wCACE,OAAOA,KADT,EAEEY,IAAE,GAAG,CAFP,EAGE,CAHF,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWIN,OAAO,CAACM,IAAE,GAAG,CAAN,CAAP,GACIN,OAAO,CAACM,IAAE,GAAG,CAAN,CAAP,CAAgB7Z,OADpB,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAalF,QAAb,GACC,CAAC6D,IAAE,GAAG,CAAN,gCAAW,KAAX,mBADD,GAECsB,MAAM,CAACC,OAFT,IAGE,GAJJ,IAKI,GAlBZ,GAoBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CApBF,EAqBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EArBF;AAuBAsF,UAAAA,YAAY,CAAC/B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,OAAOA,KADT,EAEEY,IAAE,GAAG,CAFP,EAGE,CAHF,EAIEV,UAAU,GAAG,GAJf,EAKE,GALF,EAME,EANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,QAWII,OAAO,CAACM,IAAE,GAAG,CAAN,CAAP,GACIN,OAAO,CAACM,IAAE,GAAG,CAAN,CAAP,CAAgB7Z,OADpB,GAEIib,IAAI,CAACC,KAAL,CACE,CAAC,4BAAA,KAAI,UAAJ,UAAalF,QAAb,GACC,CAAC6D,IAAE,GAAG,CAAN,gCAAW,KAAX,mBADD,GAECsB,MAAM,CAACC,OAFT,IAGE,GAJJ,IAKI,GAlBZ,GAoBE,4BAAA,KAAI,iBAAJ,iBAAoB9F,YAApB,CAAiC,GAAjC,CApBF,EAqBE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EArBF;AAuBAuD,UAAAA,KAAK;AACN;;AAEDnB,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,WADmB;AAEvB7B,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAEmL,MADH;AAEJjM,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,GADK;AAERP,YAAAA,CAAC,EAAE,GAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,SAAYxP,OAD1B;AAETyP,YAAAA,KAAK,EAAE,4BAAA,KAAI,SAAJ,SAAY3P,OAFV;AAGT4P,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB,CAAhB,GAAoB,4BAAA,KAAI,SAAJ,SAAYzP,OAH9B;AAIT0P,YAAAA,GAAG,8BAAE,KAAF,qBAJM;AAKTC,YAAAA,GAAG,EAAE,CALI;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AANZ;AAZY,SAAzB;AAsCAC,QAAAA,QAAQ,CAACM,UAAT,CAAoB,CAApB,IAAyB;AACvBlM,UAAAA,EAAE,EAAE,SADmB;AAEvB7B,UAAAA,GAAG,EAAE,oCAAQ,KAAR,WAFkB;AAGvB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAEmL,MADH;AAEJjM,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB4Q,YAApB,CAAiC,GAAjC;AAFH,WAHiB;AAOvBhO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,GADK;AAERP,YAAAA,CAAC,EAAE,CAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WAPa;AAYvB6P,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE0B,UAAU,GAAG,GAAb,GAAmB,4BAAA,KAAI,SAAJ,SAAYlR,OAD7B;AAETyP,YAAAA,KAAK,EAAE,4BAAA,KAAI,SAAJ,SAAY3P,OAFV;AAGT4P,YAAAA,KAAK,EAAEyB,UAAU,GAAG,CAAb,GAAiB,4BAAA,KAAI,SAAJ,SAAYlR,OAH3B;AAIT0P,YAAAA,GAAG,EAAEuB,UAAU,GAAG,GAJT;AAKTtB,YAAAA,GAAG,EAAE,CALI;AAMTC,YAAAA,GAAG,EAAEsB,UAAU,GAAG;AANT;AAZY,SAAzB;AAwCA4B,QAAAA,UAAU,CAAC9B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEEC,UAAU,GAAG,GAFf,EAGE,CAHF,EAIEC,UAAU,GAAG,GAJf,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,OAWE,4BAAA,KAAI,iBAAJ,iBAAoB7D,YAApB,CAAiC,GAAjC,CAXF,EAYE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAZF;AAcAsF,QAAAA,YAAY,CAAC/B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEEC,UAAU,GAAG,GAFf,EAGE,CAHF,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,OAWE,4BAAA,KAAI,iBAAJ,iBAAoB5D,YAApB,CAAiC,GAAjC,CAXF,EAYE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAZF;AAcAuD,QAAAA,KAAK;AACL8B,QAAAA,UAAU,CAAC9B,KAAD,CAAV,+BAAoB,KAApB,wCACE,QAAQA,KADV,EAEE,4BAAA,KAAI,WAAJ,aAAgB,GAFlB,EAGE,CAHF,EAIEE,UAAU,GAAG,GAJf,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,OAWE,4BAAA,KAAI,iBAAJ,iBAAoB7D,YAApB,CAAiC,GAAjC,CAXF,EAYE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAZF;AAcAsF,QAAAA,YAAY,CAAC/B,KAAD,CAAZ,+BAAsB,KAAtB,wCACE,QAAQA,KADV,EAEE,4BAAA,KAAI,WAAJ,aAAgB,GAFlB,EAGE,CAHF,EAIE,4BAAA,KAAI,WAAJ,aAAgB,GAJlB,EAKE,GALF,EAME,GANF,EAOE,CAPF,EAQE,CARF,EASE,CATF,OAWE,4BAAA,KAAI,iBAAJ,iBAAoB3D,YAApB,CAAiC,GAAjC,CAXF,EAYE,4BAAA,KAAI,iBAAJ,iBAAoBI,qBAApB,EAZF;AAeAuD,QAAAA,KAAK;AACLnB,QAAAA,QAAQ,CAACK,MAAT,CAAgB,CAAhB,IAAqB;AACnB9N,UAAAA,GAAG,EAAE,qCAAS,KAAT,WADc;AAEnB+M,UAAAA,IAAI,EAAE;AACJ5R,YAAAA,KAAK,EAAE,4BAAA,KAAI,aAAJ,aAAgB9F,MADnB;AAEJgF,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB+Q,mBAApB;AAFH,WAFa;AAMnBnO,UAAAA,QAAQ,EAAE;AACRE,YAAAA,CAAC,EAAE,CADK;AAERP,YAAAA,CAAC,EAAE,GAFK;AAGRS,YAAAA,CAAC,EAAE;AAHK,WANS;AAWnBV,UAAAA,QAAQ,EAAE;AACRQ,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,EADX;AAERP,YAAAA,CAAC,EAAE,IAFK;AAGRS,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB;AAHX,WAXS;AAgBnBkU,UAAAA,SAAS,EAAE;AACTpW,YAAAA,KAAK,EAAE,yCADE;AAETd,YAAAA,KAAK,EAAE,4BAAA,KAAI,iBAAJ,iBAAoB+Q,mBAApB;AAFE;AAhBQ,SAArB;AA8FAwD,QAAAA,KAAK;AACL,YAAMoC,YAAY,GAChB,4BAAA,KAAI,SAAJ,uCAAc,KAAd,sBAA6B,4BAAA,KAAI,UAAJ,YAAe,CAA5C,+BAAgD,KAAhD,iBADF;AAEA,YAAMC,YAAY,GAChB,4BAAA,KAAI,SAAJ,uCAAc,KAAd,sBAA6B,4BAAA,KAAI,UAAJ,YAAe,CAA5C,+BAAgD,KAAhD,iBADF;AAEAxD,QAAAA,QAAQ,CAACI,MAAT,GAAkB;AAChB7N,UAAAA,GAAG,EAAE,QAAQ4O,KAAR,+BAAgB,KAAhB,WADW;AAEhBrN,UAAAA,KAAK,EAAE;AACLpK,YAAAA,KAAK,EAAE6Z,YAAY,GAAG,CADjB;AAEL5Z,YAAAA,MAAM,EAAE,GAFH;AAGL8Z,YAAAA,KAAK,EAAED,YAAY,GAAG;AAHjB,WAFS;AAOhB/D,UAAAA,SAAS,EAAE;AACTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB6D,YAAY,GAAG,GAA/B,GAAqC,CAArC,GAAyC,4BAAA,KAAI,SAAJ,SAAYrT,OADnD;AAETyP,YAAAA,KAAK,EAAE,CAAC,GAFC;AAGTC,YAAAA,KAAK,EAAE,4BAAA,KAAI,WAAJ,aAAgB4D,YAAY,GAAG,GAA/B,GAAqC,GAArC,GAA2C,4BAAA,KAAI,SAAJ,SAAYrT,OAHrD;AAIT0P,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgB0D,YAAY,GAAG,GAA/B,GAAqC,CAJjC;AAKTzD,YAAAA,GAAG,EAAE,CAAC,GALG;AAMTC,YAAAA,GAAG,EAAE,4BAAA,KAAI,WAAJ,aAAgByD,YAAY,GAAG,GAA/B,GAAqC;AANjC;AAPK,SAAlB;AAyDArC,QAAAA,KAAK;AACLnB,QAAAA,QAAQ,CAACG,OAAT,CAAiB,CAAjB,IAAsB;AACpB5N,UAAAA,GAAG,EAAE,SAAS4O,KAAT,+BAAiB,KAAjB,WADe;AAEpB/M,UAAAA,EAAE,EAAE,YAFgB;AAGpBgL,UAAAA,QAAQ,EAAE;AACR1V,YAAAA,KAAK,EAAE,GADC;AAERC,YAAAA,MAAM,EAAE,EAFA;AAGR8Z,YAAAA,KAAK,EAAE;AAHC,WAHU;AAQpBvU,UAAAA,QAAQ,EAAE;AACRQ,YAAAA,CAAC,EAAE0R,UAAU,GAAG,CADR;AAERjS,YAAAA,CAAC,EAAE,CAFK;AAGRS,YAAAA,CAAC,EAAE,4BAAA,KAAI,WAAJ,aAAgB,4BAAA,KAAI,SAAJ,WAAc,CAA9B,GAAkC;AAH7B,WARU;AAapB4P,UAAAA,QAAQ,EAAE;AACR5S,YAAAA,KAAK,EAAE,SADC;AAER8W,YAAAA,WAAW,EAAE;AAFL;AAbU,SAAtB;AA6DA1D,QAAAA,QAAQ,CAACE,MAAT,aAAsB+C,UAAtB,EAAqCC,YAArC;AAEA,eAAOlD,QAAP;AACD;AAt3DsE;AAAA;AAAA;AAAA,aA+4DjD,eAAC+D,UAAD,EAAaC,UAAb,EAA4B;AAChD,YAAID,UAAU,IAAI,CAAlB,EAAqB,OAAO,CAAP;;AACrB,YAAIC,UAAU,GAAG,CAAjB,EAAoB;AAElBD,UAAAA,UAAU,GACRZ,IAAI,CAACC,KAAL,CAAW,CAACW,UAAU,GAAGC,UAAb,GAA0BX,MAAM,CAACC,OAAlC,IAA6C,GAAxD,IAA+D,GADjE;AAED;;AAED,eAAOS,UAAP;AACD;AAx5DsE;AAAA;AAAA;AAAA,aA06DrD,eAACE,MAAD,EAASlU,OAAT,EAAkBV,SAAlB,EAA6B6U,UAA7B,EAAyClT,YAAzC,EAA0D;AAC1E,oCAAA,KAAI,SAAJ,WAAc;AACZd,UAAAA,OAAO,EAAE,CADG;AAEZC,UAAAA,OAAO,EAAE,CAFG;AAGZH,UAAAA,OAAO,EAAE;AAHG,SAAd;;AAKA,YAAIX,SAAJ,EAAe;AACb,cAAI2B,YAAJ,EAAkB;AAChBjB,YAAAA,OAAO,CAACmU,UAAD,CAAP,IAAuB,CAAvB;AACA,wCAAA,KAAI,SAAJ,SAAYA,UAAZ,IAA0B,CAAC,CAA3B;AACD,WAHD,MAGO;AACLnU,YAAAA,OAAO,CAACmU,UAAD,CAAP,IAAuBnU,OAAO,CAAC6F,KAA/B;AACA,wCAAA,KAAI,SAAJ,SAAYsO,UAAZ,IAA0B,CAACnU,OAAO,CAAC6F,KAAnC;AACD;;AACD,cAAIqO,MAAM,CAACC,UAAD,CAAN,IAAsBnU,OAAO,CAAC6F,KAAlC,EAAyC;AACvC7F,YAAAA,OAAO,CAACmU,UAAD,CAAP,GAAsB,CAAtB;AACA,wCAAA,KAAI,SAAJ,SAAYA,UAAZ,IAA0B,CAA1B;AACA,mBAAOnU,OAAP;AACD;;AACD,cAAIA,OAAO,CAACmU,UAAD,CAAP,GAAsBD,MAAM,CAACC,UAAD,CAAN,GAAqBnU,OAAO,CAAC6F,KAAvD,EAA8D;AAC5D7F,YAAAA,OAAO,CAACmU,UAAD,CAAP,GAAsBD,MAAM,CAACC,UAAD,CAAN,GAAqBnU,OAAO,CAAC6F,KAAnD;AACA,wCAAA,KAAI,SAAJ,SAAYsO,UAAZ,IAA0B,CAA1B;AACA,mBAAOnU,OAAP;AACD;AACF,SAlBD,MAkBO;AACL,cAAIiB,YAAJ,EAAkB;AAChBjB,YAAAA,OAAO,CAACmU,UAAD,CAAP,IAAuB,CAAvB;AACA,wCAAA,KAAI,SAAJ,SAAYA,UAAZ,IAA0B,CAA1B;AACD,WAHD,MAGO;AACLnU,YAAAA,OAAO,CAACmU,UAAD,CAAP,IAAuBnU,OAAO,CAAC6F,KAA/B;AACA,wCAAA,KAAI,SAAJ,SAAYsO,UAAZ,IAA0BnU,OAAO,CAAC6F,KAAlC;AACD;;AACD,cAAI7F,OAAO,CAACmU,UAAD,CAAP,GAAsB,CAA1B,EAA6B;AAC3BnU,YAAAA,OAAO,CAACmU,UAAD,CAAP,GAAsB,CAAtB;AACA,wCAAA,KAAI,SAAJ,SAAYA,UAAZ,IAA0B,CAA1B;AACA,mBAAOnU,OAAP;AACD;AACF;;AACD,eAAOA,OAAP;AACD;AAj9DsE;AAAA;AAAA;AAAA,aA09D9C,eAACmU,UAAD,EAAa7U,SAAb,EAAwB2B,YAAxB,EAAyC;AAEhE,YAAMiT,MAAM,GAAG;AACb/T,UAAAA,OAAO,8BAAE,KAAF,mBADM;AAEbC,UAAAA,OAAO,8BAAE,KAAF,mBAFM;AAGbH,UAAAA,OAAO,8BAAE,KAAF;AAHM,SAAf;AAMA,YAAMD,OAAO,GAAG;AACdrH,UAAAA,IAAI,EAAE,KADQ;AAEdwH,UAAAA,OAAO,8BAAE,KAAF,qBAFO;AAGdC,UAAAA,OAAO,8BAAE,KAAF,qBAHO;AAIdH,UAAAA,OAAO,8BAAE,KAAF,qBAJO;AAKd4F,UAAAA,KAAK,8BAAE,KAAF;AALS,SAAhB;;AAOA,YAAMuO,MAAM,+BAAG,KAAH,oCACVF,MADU,EAEVlU,OAFU,EAGVV,SAHU,EAIV6U,UAJU,EAKVlT,YALU,CAAZ;;AAOA,oCAAA,KAAI,WAAJ,aAAgBmT,MAAM,CAACjU,OAAvB;AACA,oCAAA,KAAI,WAAJ,aAAgBiU,MAAM,CAAChU,OAAvB;AACA,oCAAA,KAAI,WAAJ,aAAgBgU,MAAM,CAACnU,OAAvB;AAEA,eAAOmU,MAAP;AACD;AAr/DsE;AAAA;AAAA;AAAA,aA8/DjD,eAACR,kBAAD,EAAqB7K,IAArB,EAA2BI,IAA3B,EAAoC;AACxD,YAAIyK,kBAAkB,KAAK,MAAvB,IAAiC,4BAAA,KAAI,eAAJ,mBAAsB,IAA3D,EAAiE;AAC/D,cAAMS,MAAM,GAAGtL,IAAI,+BAAG,KAAH,mBAAnB;;AACA,cAAMuL,MAAM,GAAGnL,IAAI,+BAAG,KAAH,mBAAnB;;AACA,cAAI;AACF,gBAAMoL,mBAAmB,GACvB,4BAAA,KAAI,eAAJ,eAAkBlb,QAAlB,CAA2BrB,GAA3B,CAA+Bqc,MAA/B,EAAuChb,QAAvC,CAAgDrB,GAAhD,CAAoDsc,MAApD,EAA4Djb,QAA5D,CACGrB,GADH,CACO,CADP,CADF;;AAGA,gBAAMwc,SAAS,GAAGD,mBAAmB,CAACE,UAApB,CAA+Bzc,GAA/B,CAAmC,CAAnC,EAAsC0c,UAAxD;;AAEA,gBAAIF,SAAS,KAAK,GAAlB,EAAuB;AACrB,qBAAO,MAAP;AACD,aAFD,MAEO,IAAIA,SAAS,KAAK,GAAlB,EAAuB;AAC5B,qBAAO,KAAP;AACD;AACF,WAXD,CAWE,OAAOhb,CAAP,EAAU;AACV,mBAAO,EAAP;AACD;AACF;;AACD,eAAO,EAAP;AACD;AAlhEsE;AAAA;AAAA;AAAA,aA2hE9C,eAAC2a,UAAD,EAAa7U,SAAb,EAAwB2B,YAAxB,EAAyC;AAEhE,YAAMiT,MAAM,GAAG;AACb/T,UAAAA,OAAO,8BAAE,KAAF,mBADM;AAEbC,UAAAA,OAAO,8BAAE,KAAF;AAFM,SAAf;AAKA,YAAMJ,OAAO,GAAG;AACdrH,UAAAA,IAAI,EAAE,KADQ;AAEdwH,UAAAA,OAAO,8BAAE,KAAF,qBAFO;AAGdC,UAAAA,OAAO,8BAAE,KAAF,qBAHO;AAIdyF,UAAAA,KAAK,8BAAE,KAAF;AAJS,SAAhB;;AAMA,YAAMuO,MAAM,+BAAG,KAAH,oCACVF,MADU,EAEVlU,OAFU,EAGVV,SAHU,EAIV6U,UAJU,EAKVlT,YALU,CAAZ;;AAOA,oCAAA,KAAI,WAAJ,aAAgBmT,MAAM,CAACjU,OAAvB;AACA,oCAAA,KAAI,WAAJ,aAAgBiU,MAAM,CAAChU,OAAvB;AAEA,eAAOgU,MAAP;AACD;AAnjEsE;AAAA;AAAA;AAAA,aA0jE/C,eAAC/P,EAAD,EAAQ;AAC9B,YAAMsQ,WAAW,GAAG,4BAAA,KAAI,gBAAJ,gBAAmBxQ,MAAnB,CAClB,UAACyQ,OAAD;AAAA,iBAAaA,OAAO,CAACpS,GAAR,KAAgB6B,EAA7B;AAAA,SADkB,CAApB;;AAGA,YAAIsQ,WAAW,CAAC,CAAD,CAAX,IAAkBA,WAAW,CAAC,CAAD,CAAX,CAAe5Q,KAArC,EAA4C;AAC1C,iBAAO4Q,WAAW,CAAC,CAAD,CAAX,CAAe5Q,KAAtB;AACD;;AACD,eAAO,CAAP;AACD;AAlkEsE;AAAA;AAAA;AAAA,aAykEhD,eAACM,EAAD,EAAQ;AAC7B,YAAMsQ,WAAW,GAAG,4BAAA,KAAI,gBAAJ,gBAAmBxQ,MAAnB,CAClB,UAACyQ,OAAD;AAAA,iBAAaA,OAAO,CAACpS,GAAR,KAAgB6B,EAA7B;AAAA,SADkB,CAApB;;AAGA,YAAIsQ,WAAW,CAAC,CAAD,CAAX,IAAkBA,WAAW,CAAC,CAAD,CAAX,CAAe5Q,KAArC,EAA4C;AAC1C,iBAAO4Q,WAAW,CAAC,CAAD,CAAX,CAAe9X,KAAtB;AACD;;AACD,eAAO,SAAP;AACD;AAjlEsE;AACrE,SAAKgY,iBAAL,CACE3G,UADF,EAEElR,SAFF,EAGE8I,OAHF,EAIED,KAJF,EAKE/M,WALF,EAMEkU,KANF;AAQD;;;;SAYD6H,oBAAA,2BAAkB3G,UAAlB,EAA8BlR,SAA9B,EAAyC8I,OAAzC,EAAkDD,KAAlD,EAAyD/M,WAAzD,EAAsEkU,KAAtE,EAA6E;AAC3E,SAAK8H,aAAL,CAAmB5G,UAAnB;AACA,SAAK6G,QAAL,CAAc/H,KAAd;AACA,SAAKgI,YAAL,CAAkBhY,SAAlB,EAA6BlE,WAA7B;AACA,SAAKmc,UAAL,CAAgBnP,OAAhB;AACA,SAAKoP,QAAL,CAAcrP,KAAd;AACD;;SAKDiP,gBAAA,uBAAc5G,UAAd,EAA0B;AACxB,kDAAWA,UAAX;AACD;;SAKD+G,aAAA,oBAAWnP,OAAX,EAAoB;AAElB,QAAIA,OAAO,KAAK,IAAZ,IAAoBA,OAAO,KAAK5F,SAApC,EAA+C;AAC7C,UAAI4F,OAAO,CAAC3F,OAAZ,EACE,oFAAgB,IAAhB,wCAAuC2F,OAAO,CAAC3F,OAA/C,8BAAwD,IAAxD;AACF,UAAI2F,OAAO,CAAC1F,OAAZ,EACE,oFAAgB,IAAhB,wCAAuC0F,OAAO,CAAC1F,OAA/C,8BAAwD,IAAxD;AACH;;AAED,QAAI,0DAAgBoF,SAAhB,CAA0BC,QAA1B,CAAmC,KAAnC,CAAJ,EAA+C;AAE7C,UAAIK,OAAO,KAAK,IAAZ,IAAoBA,OAAO,KAAK5F,SAApC,EAA+C;AAC7C,YAAI4F,OAAO,CAAC7F,OAAZ,EACE,oFAAgB,IAAhB,wCAAuC6F,OAAO,CAAC7F,OAA/C,8BAAwD,IAAxD;AACH;AACF;AACF;;SAKD+U,eAAA,sBAAahY,SAAb,EAAwBlE,WAAxB,EAAqC;AACnC,oEAAoBA,WAApB;AACA,gEAAkBkE,SAAlB;AACA,sDAAaA,SAAS,CAACwI,SAAvB;AAEA,0DAAexI,SAAS,CAACtF,MAAV,CAAiBD,MAAhC;AACA,0DAAeuF,SAAS,CAACwU,MAAV,CAAiB/Z,MAAhC;AAEA,0DACE,CAACuF,SAAS,CAACtF,MAAV,CAAiBE,KAAjB,GAAyBoF,SAAS,CAACtF,MAAV,CAAiBC,KAA3C,IACAqF,SAAS,CAACtF,MAAV,CAAiBD,MAFnB;AAGA,0DACE,CAACuF,SAAS,CAACwU,MAAV,CAAiB5Z,KAAjB,GAAyBoF,SAAS,CAACwU,MAAV,CAAiB7Z,KAA3C,IACAqF,SAAS,CAACwU,MAAV,CAAiB/Z,MAFnB;AAIA,wDAAa0W,QAAb,GAAwBnR,SAAS,CAACtF,MAAV,CAAiBC,KAAzC;AACA,wDAAayW,QAAb,GAAwBpR,SAAS,CAACwU,MAAV,CAAiB7Z,KAAzC;AAEA,wFAAgB,IAAhB,oEAAuC,IAAvC,mDAAsD,IAAtD;AACA,wFAAgB,IAAhB,oEAAuC,IAAvC,mDAAsD,IAAtD;;AAGA,QAAIqF,SAAS,CAACwI,SAAV,CAAoBC,QAApB,CAA6B,KAA7B,CAAJ,EAAyC;AAEvC,4DAAezI,SAAS,CAACyU,MAAV,CAAiBha,MAAhC;AAEA,4DAAeuF,SAAS,CAACyU,MAAV,CAAiB7Z,KAAjB,GAAyBoF,SAAS,CAACyU,MAAV,CAAiBha,MAAzD;AAEA,0DAAa4W,QAAb,GAAwBrR,SAAS,CAACyU,MAAV,CAAiB9Z,KAAzC;AAEA,0FAAgB,IAAhB,oEAAuC,IAAvC,mDAAsD,IAAtD;AACD;AACF;;SAKDud,WAAA,kBAASrP,KAAT,EAAgB;AACd,QAAIA,KAAJ,EAAW;AACT,UAAIA,KAAK,GAAG,CAAZ,EAAe,oDAAc,CAAd;AACf,0DAAcA,KAAd;AACD;AACF;;SAKDkP,WAAA,kBAAS/H,KAAT,EAAgB;AACd,wEAAsB,IAAID,aAAJ,CAAkBC,KAAlB,CAAtB;AACD;;SAixDDmI,cAAA,qBAAYvB,kBAAZ,EAAgC;AAE9B,QAAI3D,QAAQ,GAAG,EAAf;;AACA,QAAI,gDAAWxK,QAAX,CAAoB,KAApB,CAAJ,EAAgC;AAC9BwK,MAAAA,QAAQ,+BAAG,IAAH,4CAA4B2D,kBAA5B,CAAR;AACD,KAFD,MAEO,IAAI,gDAAWnO,QAAX,CAAoB,KAApB,CAAJ,EAAgC;AACrCwK,MAAAA,QAAQ,+BAAG,IAAH,6CAAR;AACD;;AACD,WAAOA,QAAP;AACD;;SAmBDmF,gBAAA,uBAAcjB,UAAd,EAA0B7U,SAA1B,EAAqC2B,YAArC,EAAmD;AACjD,QAAI,gDAAWwE,QAAX,CAAoB,KAApB,CAAJ,EACE,mCAAO,IAAP,kDAAmC0O,UAAnC,EAA+C7U,SAA/C,EAA0D2B,YAA1D,EADF,KAEK,IAAI,gDAAWwE,QAAX,CAAoB,KAApB,CAAJ,EACH,mCAAO,IAAP,kDAAmC0O,UAAnC,EAA+C7U,SAA/C,EAA0D2B,YAA1D;AACH;;;;;AC57DH,IAAMoU,gBAAgB,GAAG,SAAnBA,gBAAmB,OAOnB;AAAA,MANJ1c,IAMI,QANJA,IAMI;AAAA,MALJqE,SAKI,QALJA,SAKI;AAAA,MAJJsY,YAII,QAJJA,YAII;AAAA,MAHJxc,WAGI,QAHJA,WAGI;AAAA,MAFJ+M,KAEI,QAFJA,KAEI;AAAA,MADJmH,KACI,QADJA,KACI;AAGJ,MAAI9P,YAAJ;;AAGA,kBAAkBC,cAAQ,CACxB,IAAI8Q,qBAAJ,CACEtV,IADF,EAEEqE,SAFF,EAGEsY,YAAY,IAAI,IAHlB,EAIEzP,KAJF,EAKE/M,WALF,EAMEkU,KAAK,IAAI,KANX,CADwB,CAA1B;AAAA,MAAOuI,OAAP;;AAUA,mBAAwBpY,cAAQ,CAAC,SAAD,CAAhC;AAAA,MAAOqY,IAAP;AAAA,MAAaC,OAAb;;AACA,mBAAgCtY,cAAQ,CAACoY,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAxC;AAAA,MAAOvF,QAAP;AAAA,MAAiByF,WAAjB;;AACA,mBAAwCvY,cAAQ,CAAC,CAAD,CAAhD;AAAA,MAAOwY,YAAP;AAAA,MAAqBC,eAArB;;AAIA,MAAMhY,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,IAAD,EAAU;AACnC,QAAIb,SAAS,CAACwI,SAAV,CAAoBC,QAApB,CAA6B5H,IAAI,CAAClF,IAAlC,CAAJ,EAA6C;AAE3C,UAAIkF,IAAI,CAACT,IAAT,EAAe;AACbmY,QAAAA,OAAO,CAACH,aAAR,CAAsBvX,IAAI,CAACT,IAA3B,EAAiCS,IAAI,CAACyB,SAAtC,EAAiDzB,IAAI,CAACoD,YAAtD;AACAyU,QAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,OAHD,MAGO,IAAI3X,IAAI,CAACyD,WAAT,EAAsB;AAC3BsU,QAAAA,eAAe,CAAC,UAACC,SAAD,EAAe;AAC7B,cAAIA,SAAS,GAAGhY,IAAI,CAACyD,WAAjB,GAA+B,CAAnC,EAAsC,OAAO,CAAP;AACtC,cAAIuU,SAAS,GAAGhY,IAAI,CAACyD,WAAjB,GAA+B,CAAnC,EAAsC,OAAO,CAAP;AACtC,iBAAOuU,SAAS,GAAGhY,IAAI,CAACyD,WAAxB;AACD,SAJc,CAAf;AAKD,OANM,MAMA;AACLmU,QAAAA,OAAO,CAAC,UAACI,SAAD;AAAA,iBACNA,SAAS,KAAKhY,IAAI,CAACuD,SAAnB,GAA+BvD,IAAI,CAACuD,SAApC,GAAgDyU,SAD1C;AAAA,SAAD,CAAP;AAGD;AACF;AACF,GAlBD;;AAsBA5X,EAAAA,eAAS,CAAC,YAAM;AACdsX,IAAAA,OAAO,CAACT,aAAR,CAAsBnc,IAAtB;AACA+c,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAHQ,EAGN,CAAC7c,IAAD,CAHM,CAAT;AAMAsF,EAAAA,eAAS,CAAC,YAAM;AACdsX,IAAAA,OAAO,CAACP,YAAR,CAAqBhY,SAArB,EAAgClE,WAAhC;AACA4c,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAHQ,EAGN,CAACxY,SAAD,EAAYlE,WAAZ,CAHM,CAAT;AAMAmF,EAAAA,eAAS,CAAC,YAAM;AACdsX,IAAAA,OAAO,CAACN,UAAR,CAAmBK,YAAnB;AACAI,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAHQ,EAGN,CAACF,YAAD,CAHM,CAAT;AAMArX,EAAAA,eAAS,CAAC,YAAM;AACdsX,IAAAA,OAAO,CAACL,QAAR,CAAiBrP,KAAjB;AACA6P,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAHQ,EAGN,CAAC3P,KAAD,CAHM,CAAT;AAMA5H,EAAAA,eAAS,CAAC,YAAM;AACdsX,IAAAA,OAAO,CAACR,QAAR,CAAiB/H,KAAjB;AACA0I,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAHQ,EAGN,CAACxI,KAAD,CAHM,CAAT;AAMA/O,EAAAA,eAAS,CAAC,YAAM;AACdyX,IAAAA,WAAW,CAACH,OAAO,CAACJ,WAAR,CAAoBK,IAApB,CAAD,CAAX;AACD,GAFQ,EAEN,CAACA,IAAD,CAFM,CAAT;AAKAvX,EAAAA,eAAS,CAAC,YAAM;AACd,QAAIjB,SAAS,CAACwI,SAAV,CAAoBC,QAApB,CAA6B,KAA7B,CAAJ,EAAyC;AACvCvI,MAAAA,YAAY,GAAGsE,mBAAmB,CAC/BD,iBADY,GAEZnD,SAFY,CAEFR,kBAFE,CAAf;AAGD,KAJD,MAIO,IAAIZ,SAAS,CAACwI,SAAV,CAAoBC,QAApB,CAA6B,KAA7B,CAAJ,EAAyC;AAE9CvI,MAAAA,YAAY,GAAGuE,mBAAmB,CAC/BF,iBADY,GAEZnD,SAFY,CAEFR,kBAFE,CAAf;AAGD;;AACD,WAAO;AAAA,aAAMV,YAAY,CAACmB,WAAb,EAAN;AAAA,KAAP;AACD,GAZQ,EAYN,CAAC4R,QAAD,CAZM,CAAT;;AAcA,MAAIA,QAAJ,aAAIA,QAAJ,eAAIA,QAAQ,CAAEC,IAAd,EAAoB;AAClB,wBACEnS;AAAU;AAAV,OACGkS,QAAQ,CAACC,IAAT,CAAcjF,GAAd,CAAkB,UAAC/S,GAAD;AAAA,0BACjB6F;AACE,QAAA,GAAG,EAAE7F,GAAG,CAACmM,EADX;AAEE,iBAAM,WAFR;AAGE,QAAA,QAAQ,cAAYnM,GAAG,CAAC2E,KAAhB,wBAHV;AAIE,QAAA,KAAK,EAAE3E,GAAG,CAAC9B,OAJb;AAKE,QAAA,UAAU,MALZ;AAME,QAAA,SAAS,8BAA4B8B,GAAG,CAACwX,SAAJ,CAAc8C,SAA1C,SAAuDta,GAAG,CAACwX,SAAJ,CAAc+C,UAArE,SAAmFva,GAAG,CAACwX,SAAJ,CAAcgD,SAAjG,cAAmHxa,GAAG,CAACwX,SAAJ,CAAciD,OAAjI,SAA4Iza,GAAG,CAACwX,SAAJ,CAAckD,QAA1J,SAAsK1a,GAAG,CAACwX,SAAJ,CAAcmD,OAApL,4CANX;AAOE,QAAA,YAAY,EAAC,2DAPf;AAQE,QAAA,YAAY,iCAA+B3a,GAAG,CAAC4a,UAAJ,CAAenD,KAA9C,SAAuDzX,GAAG,CAAC4a,UAAJ,CAAelD,KAAtE,SAA+E1X,GAAG,CAAC4a,UAAJ,CAAejD,KAA9F,cAA4G3X,GAAG,CAAC4a,UAAJ,CAAehD,GAA3H,SAAkI5X,GAAG,CAAC4a,UAAJ,CAAe/C,GAAjJ,SAAwJ7X,GAAG,CAAC4a,UAAJ,CAAe9C,GAAvK,iBARd;AASE,QAAA,YAAY,uCAAqC9X,GAAG,CAAC6a,UAAJ,CAAeC,SAApD,cAAsE9a,GAAG,CAAC6a,UAAJ,CAAeE,OAArF;AATd,sBAWElV;AACE,QAAA,KAAK,EAAE7F,GAAG,CAACkQ,OADb;AAEE,QAAA,KAAK,EAAC,QAFR;AAGE,QAAA,KAAK,EAAC,IAHR;AAIE,QAAA,KAAK,EAAC,OAJR;AAKE,QAAA,QAAQ,EAAC,sCALX;AAME,QAAA,QAAQ,cAAYlQ,GAAG,CAAC6a,UAAJ,CAAeE,OAA3B,uCANV;AAOE,QAAA,QAAQ,EAAC,WAPX;AAQE,QAAA,QAAQ,UAAO0C,YAAY,KAAK,CAAjB,GAAqB,CAAC,GAAtB,GAA4B,KAAnC;AARV,QAXF,CADiB;AAAA,KAAlB,CADH,EA0BG1F,QAAQ,CAACE,MAAT,CAAgBlF,GAAhB,CAAoB,UAACzO,KAAD;AAAA,0BACnBuB;AACE,QAAA,GAAG,EAAEvB,KAAK,CAACgG,GADb;AAEE,QAAA,QAAQ,kBAAgBhG,KAAK,CAAC6S,QAAN,CAAeC,SAA/B,gBAAmD9S,KAAK,CAAC6S,QAAN,CAAe1V,KAAlE,iBAAmF6C,KAAK,CAAC6S,QAAN,CAAezV,MAAlG,MAFV;AAGE,QAAA,IAAI,cAAY4C,KAAK,CAAC+S,IAAN,CAAW1S,KAAvB,iBAAwCL,KAAK,CAAC+S,IAAN,CAAW5V,KAAnD,kBAAqE6C,KAAK,CAAC+S,IAAN,CAAW3V,MAAhF,oBAHN;AAIE,qCAAyB4C,KAAK,CAACgT,YAAN,CAAmB7R,KAA5C,gBAA4DnB,KAAK,CAACgT,YAAN,CAAmBxD,KAJjF;AAKE,QAAA,QAAQ,EAAKxP,KAAK,CAACiD,QAAN,CAAeE,CAApB,SAAyBnD,KAAK,CAACiD,QAAN,CAAeL,CAAxC,SAA6C5C,KAAK,CAACiD,QAAN,CAAeI,CALtE;AAME,QAAA,QAAQ,cAAYrD,KAAK,CAACiT,QAAN,CAAe5S,KAA3B,wBANV;AAOE,QAAA,SAAS,EAAC,kDAPZ;AAQE,QAAA,YAAY,EAAC,0DARf;AASE,QAAA,YAAY,iCAA+BL,KAAK,CAACkT,SAAN,CAAgBC,KAA/C,SAAwDnT,KAAK,CAACkT,SAAN,CAAgBE,KAAxE,SAAiFpT,KAAK,CAACkT,SAAN,CAAgBG,KAAjG,cAA+GrT,KAAK,CAACkT,SAAN,CAAgBI,GAA/H,SAAsItT,KAAK,CAACkT,SAAN,CAAgBK,GAAtJ,SAA6JvT,KAAK,CAACkT,SAAN,CAAgBM,GAA7K;AATd,QADmB;AAAA,KAApB,CA1BH,EAuCGC,QAAQ,CAACK,MAAT,CAAgBrF,GAAhB,CAAoB,UAAC6K,KAAD;AAAA,0BACnB/X;AACE,QAAA,GAAG,EAAE+X,KAAK,CAACtT,GADb;AAEE,QAAA,IAAI,cAAYsT,KAAK,CAACvG,IAAN,CAAW5R,KAAvB,iBAAwCmY,KAAK,CAACvG,IAAN,CAAW1S,KAAnD,6CAFN;AAGE,QAAA,QAAQ,EAAKiZ,KAAK,CAACrW,QAAN,CAAeE,CAApB,SAAyBmW,KAAK,CAACrW,QAAN,CAAeL,CAAxC,SAA6C0W,KAAK,CAACrW,QAAN,CAAeI,CAHtE;AAIE,QAAA,QAAQ,EAAKiW,KAAK,CAAC3W,QAAN,CAAeQ,CAApB,SAAyBmW,KAAK,CAAC3W,QAAN,CAAeC,CAAxC,SAA6C0W,KAAK,CAAC3W,QAAN,CAAeU,CAJtE;AAKE,QAAA,QAAQ,EAAC;AALX,sBAOE9B;AACE,QAAA,KAAK,EAAE+X,KAAK,CAAC/B,SAAN,CAAgBpW,KADzB;AAEE,QAAA,QAAQ,EAAC,QAFX;AAGE,QAAA,KAAK,EAAC,KAHR;AAIE,QAAA,MAAM,EAAC,MAJT;AAKE,QAAA,KAAK,EAAC,QALR;AAME,QAAA,KAAK,EAAEmY,KAAK,CAAC/B,SAAN,CAAgBlX;AANzB,QAPF,eAeEkB;AACE,QAAA,QAAQ,EAAC,yCADX;AAEE,QAAA,QAAQ,EAAC,QAFX;AAGE,QAAA,QAAQ,EAAC;AAHX,QAfF,CADmB;AAAA,KAApB,CAvCH,EA8DGkS,QAAQ,CAACM,UAAT,CAAoBtF,GAApB,CAAwB,UAAC8K,SAAD;AAAA,0BACvBhY;AACE,QAAA,EAAE,EAAEgY,SAAS,CAAC1R,EADhB;AAEE,QAAA,GAAG,EAAE0R,SAAS,CAACvT,GAFjB;AAGE,QAAA,IAAI,cAAYuT,SAAS,CAACxG,IAAV,CAAe5R,KAA3B,iBAA4CoY,SAAS,CAACxG,IAAV,CAAe1S,KAA3D,4CAHN;AAIE,QAAA,QAAQ,EAAKkZ,SAAS,CAACtW,QAAV,CAAmBE,CAAxB,SAA6BoW,SAAS,CAACtW,QAAV,CAAmBL,CAAhD,SAAqD2W,SAAS,CAACtW,QAAV,CAAmBI,CAJlF;AAKE,QAAA,SAAS,iCAA+BkW,SAAS,CAACrG,SAAV,CAAoBC,KAAnD,SAA4DoG,SAAS,CAACrG,SAAV,CAAoBE,KAAhF,SAAyFmG,SAAS,CAACrG,SAAV,CAAoBG,KAA7G,cAA2HkG,SAAS,CAACrG,SAAV,CAAoBI,GAA/I,SAAsJiG,SAAS,CAACrG,SAAV,CAAoBK,GAA1K,SAAiLgG,SAAS,CAACrG,SAAV,CAAoBM,GAArM,iBALX;AAME,QAAA,QAAQ,EAAC;AANX,QADuB;AAAA,KAAxB,CA9DH,EAwEGC,QAAQ,CAACI,MAAT,iBACCtS;AACE,MAAA,GAAG,EAAEkS,QAAQ,CAACI,MAAT,CAAgB7N,GADvB;AAEE,MAAA,KAAK,EAAEyN,QAAQ,CAACI,MAAT,CAAgBtM,KAAhB,CAAsBpK,KAF/B;AAGE,MAAA,QAAQ,EAAC,gBAHX;AAIE,MAAA,MAAM,EAAEsW,QAAQ,CAACI,MAAT,CAAgBtM,KAAhB,CAAsBnK,MAJhC;AAKE,MAAA,KAAK,EAAEqW,QAAQ,CAACI,MAAT,CAAgBtM,KAAhB,CAAsB2P,KAL/B;AAME,MAAA,SAAS,iCAA+BzD,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BC,KAAzD,SAAkEM,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BE,KAA5F,SAAqGK,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BG,KAA/H,kCAEVI,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BI,GAFhB,SAEuBG,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BK,GAFjD,SAEwDE,QAAQ,CAACI,MAAT,CAAgBX,SAAhB,CAA0BM,GAFlF;AANX,MAzEJ,EAoFGC,QAAQ,CAACG,OAAT,CAAiBnF,GAAjB,CAAqB,UAACL,MAAD;AAAA,0BACpB7M;AACE,QAAA,GAAG,EAAE6M,MAAM,CAACpI,GADd;AAEE,QAAA,EAAE,EAAEoI,MAAM,CAACvG,EAFb;AAGE,QAAA,QAAQ,aAAWuG,MAAM,CAACyE,QAAP,CAAgB1V,KAA3B,iBAA4CiR,MAAM,CAACyE,QAAP,CAAgBzV,MAA5D,gBAA6EgR,MAAM,CAACyE,QAAP,CAAgBqE,KAA7F,MAHV;AAIE,QAAA,QAAQ,EAAK9I,MAAM,CAACzL,QAAP,CAAgBQ,CAArB,SAA0BiL,MAAM,CAACzL,QAAP,CAAgBC,CAA1C,SAA+CwL,MAAM,CAACzL,QAAP,CAAgBU,CAJzE;AAKE,QAAA,QAAQ,cAAY+K,MAAM,CAAC6E,QAAP,CAAgB5S,KAA5B,uBAAmD+N,MAAM,CAAC6E,QAAP,CAAgBkE;AAL7E,QADoB;AAAA,KAArB,CApFH,CADF;AAgGD,GAjGD,MAiGO;AACL,wBACE5V;AACE,MAAA,YAAY,EAAC,2EADf;AAEE,MAAA,YAAY,EAAC,oHAFf;AAGE,MAAA,gBAAgB,EAAC,8GAHnB;AAIE,MAAA,QAAQ,EAAC;AAJX,MADF;AAQD;AACF,CA/MD;;AC/Be,SAASiY,eAAT,GAA2B;AACxC,sBACEjY,6BAACA,cAAD,CAAO,QAAP,qBACEA;AAAO,IAAA,KAAK,EAAC;AAAb,IADF,eAEEA;AACE,IAAA,QAAQ,EAAC,SADX;AAEE,IAAA,QAAQ,EAAC,UAFX;AAGE,IAAA,KAAK,EAAC,MAHR;AAIE,IAAA,MAAM,EAAC,MAJT;AAKE,IAAA,KAAK,EAAC,MALR;AAME,IAAA,QAAQ,EAAC;AANX,IAFF,CADF;AAaD;;ACcD,IAAMkY,UAAU,GAAG,SAAbA,UAAa,OAAoB;AAAA,MAAjBpY,IAAiB,QAAjBA,IAAiB;AAAA,MAAXjH,IAAW,QAAXA,IAAW;AACrC,sBACEmH;AACE,IAAA,QAAQ,MADV;AAEE,IAAA,KAAK,EAAE;AACLmY,MAAAA,MAAM,EAAE,GADH;AAELvc,MAAAA,KAAK,EAAE,MAFF;AAGLwc,MAAAA,SAAS,EAAE;AAHN;AAFT,kBAQEpY,4DACEA;AAAK,IAAA,EAAE,EAAC,YAAR;AAAqB,IAAA,GAAG,EAAEnH,IAAI,CAACwf,UAAL,CAAgB/a,GAA1C;AAA+C,IAAA,GAAG,EAAC;AAAnD,IADF,CARF,eAYE0C,6BAAC,eAAD,OAZF,eAcEA,6BAAC,WAAD,OAdF,eAeEA,6BAAC,gBAAD;AACE,IAAA,IAAI,EAAEnH,IAAI,CAAC+B,IADb;AAEE,IAAA,SAAS,EAAEkF,IAAI,CAACb,SAFlB;AAGE,IAAA,YAAY,EAAEa,IAAI,CAACiI,OAHrB;AAIE,IAAA,WAAW,EAAEjI,IAAI,CAAC/E,WAJpB;AAKE,IAAA,KAAK,EAAE+E,IAAI,CAACgI,KALd;AAME,IAAA,KAAK,EAAEjP,IAAI,CAACoW;AANd,IAfF,CADF;AAuCD,CAxCD;;IC5BqBqJ;AAEnB,yBAAYC,KAAZ,EAAmB;AAAA,SADnBA,KACmB,GADX,IACW;AACjB,SAAKA,KAAL,GAAaA,KAAb;AACD;;;;SAEDC,gBAAA,uBAAcnF,KAAd,EAAqBoF,YAArB,EAAmCC,OAAnC,EAA4CC,UAA5C,EAAwD;AACtD,QAAI,KAAKJ,KAAL,CAAWG,OAAX,EAAoBxG,QAApB,CAA6BmB,KAA7B,CAAJ,EAAyC;AACvC,UAAIqF,OAAO,KAAK,QAAhB,EAA0B;AACxB,aAAKE,WAAL,CACE,KAAKL,KAAL,CAAWG,OAAX,EAAoBxG,QAApB,CAA6BmB,KAA7B,CADF,EAEE,KAAKkF,KAAL,CAAWG,OAAX,EAAoBG,UAApB,CAA+BxF,KAA/B,CAFF;AAID,OALD,MAKO;AACL,aAAKjX,aAAL,CACE,KAAKmc,KAAL,CAAWG,OAAX,EAAoBxG,QAApB,CAA6BmB,KAA7B,CADF,EAEE,KAAKkF,KAAL,CAAWG,OAAX,EAAoBG,UAApB,CAA+BxF,KAA/B,CAFF,EAGEsF,UAHF;AAKD;AACF,KAbD,MAaO;AACL,UAAIG,UAAJ;;AAEA,UAAIJ,OAAO,KAAK,QAAhB,EAA0B;AACxBI,QAAAA,UAAU,GAAG,KAAKF,WAAL,CACXzW,SADW,EAEX,KAAKoW,KAAL,CAAWG,OAAX,EAAoBG,UAApB,CAA+BxF,KAA/B,CAFW,CAAb;AAID,OALD,MAKO;AACLyF,QAAAA,UAAU,GAAG,KAAK1c,aAAL,CACX+F,SADW,EAEX,KAAKoW,KAAL,CAAWG,OAAX,EAAoBG,UAApB,CAA+BxF,KAA/B,CAFW,EAGXsF,UAHW,CAAb;AAKD;;AACD,WAAKJ,KAAL,CAAWG,OAAX,EAAoBxG,QAApB,CAA6BmB,KAA7B,IAAsCyF,UAAtC;AACAL,MAAAA,YAAY,CAACM,WAAb,CAAyBD,UAAzB;AACD;AACF;;SAEDE,4BAAA,mCAA0B3F,KAA1B,EAAiCqF,OAAjC,EAA0C;AACxC,QAAMO,SAAS,GAAG5F,KAAlB;;AAEA,QAAIqF,OAAO,CAACxe,MAAR,KAAmB,CAAvB,EAA0B;AACxB,aAAO,KAAKqe,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBxG,QAAvB,CAAgCmB,KAAhC,CAAP,EAA+C;AAC7C,aAAKkF,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBxG,QAAvB,CAAgCmB,KAAhC,EAAuC6F,MAAvC;AACA7F,QAAAA,KAAK;AACN;;AACD,WAAKkF,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBxG,QAAvB,CAAgChY,MAAhC,GAAyC+e,SAAzC;AACA,WAAKV,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBG,UAAvB,CAAkC3e,MAAlC,GAA2C+e,SAA3C;AACD,KAPD,MAOO;AACL,aAAO,KAAKV,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBxG,QAAvB,CAAgCmB,KAAhC,CAAP,EAA+C;AAC7C,aAAKkF,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBxG,QAAvB,CAAgCmB,KAAhC,EAAuC6F,MAAvC;AACA,aAAKX,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBxG,QAAvB,CAAgCmB,KAAhC,EAAuC6F,MAAvC;AACA7F,QAAAA,KAAK;AACN;;AACD,WAAKkF,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBxG,QAAvB,CAAgChY,MAAhC,GAAyC+e,SAAzC;AACA,WAAKV,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBG,UAAvB,CAAkC3e,MAAlC,GAA2C+e,SAA3C;AACA,WAAKV,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBxG,QAAvB,CAAgChY,MAAhC,GAAyC+e,SAAzC;AACA,WAAKV,KAAL,CAAWG,OAAO,CAAC,CAAD,CAAlB,EAAuBG,UAAvB,CAAkC3e,MAAlC,GAA2C+e,SAA3C;AACD;AACF;;SAED7c,gBAAA,uBAAc+c,OAAd,EAAuBrZ,IAAvB,EAA6BzC,IAA7B,EAAmC;AACjC,QAAIqb,OAAO,GAAGS,OAAd;;AACA,QAAIT,OAAO,KAAKvW,SAAZ,IAAyBuW,OAAO,KAAK,IAAzC,EAA+C;AAC7C,UAAMC,UAAU,GAAG,KAAKS,eAAL,CAAqB/b,IAArB,CAAnB;AACAqb,MAAAA,OAAO,GAAG3c,QAAQ,CAACK,aAAT,CAAuBuc,UAAvB,CAAV;AACD;;AACD,SAAK,IAAMU,OAAX,IAAsBvZ,IAAtB,EAA4B;AAC1B4Y,MAAAA,OAAO,CAACrc,YAAR,CAAqBgd,OAArB,EAA8BvZ,IAAI,CAACuZ,OAAD,CAAlC;AACD;;AACD,WAAOX,OAAP;AACD;;SAEDY,sBAAA,6BAAoBH,OAApB,EAA6BI,UAA7B,EAAyCzZ,IAAzC,EAA+C;AAC7C,QAAI0Z,MAAM,GAAGL,OAAb;;AACA,QAAIK,MAAM,KAAKrX,SAAX,IAAwBqX,MAAM,KAAK,IAAvC,EAA6C;AAC3CA,MAAAA,MAAM,GAAGzd,QAAQ,CAACK,aAAT,CAAuB,UAAvB,CAAT;AACA,UAAMqd,KAAK,GAAG,KAAKC,iBAAL,CAAuBH,UAAvB,EAAmCzZ,IAAnC,CAAd;AACA2Z,MAAAA,KAAK,CAACvM,GAAN,CAAU,UAACwL,OAAD;AAAA,eAAac,MAAM,CAACG,MAAP,CAAcjB,OAAd,CAAb;AAAA,OAAV;AACD;;AACDc,IAAAA,MAAM,CAACnd,YAAP,CAAoB,UAApB,EAAgCyD,IAAI,CAACsB,QAArC;AACAoY,IAAAA,MAAM,CAACnd,YAAP,CAAoB,IAApB,EAA0ByD,IAAI,CAACwG,EAA/B;AACA,WAAOkT,MAAP;AACD;;SAEDE,oBAAA,2BAAkBH,UAAlB,EAA8BzZ,IAA9B,EAAoC;AAClC,QAAM2Z,KAAK,GAAG,EAAd;;AACA,SAAK,IAAIxT,CAAC,GAAGsT,UAAU,GAAG,CAA1B,EAA6BtT,CAAC,GAAG,CAAC,CAAlC,EAAqCA,CAAC,EAAtC,EAA0C;AACxCnG,MAAAA,IAAI,CAAC8Z,IAAL,CAAUxY,QAAV,CAAmBC,CAAnB,GAAuB,IAAI4E,CAA3B;AACA,UAAM2T,IAAI,GAAG7d,QAAQ,CAACK,aAAT,CAAuB,UAAvB,CAAb;AACAwd,MAAAA,IAAI,CAACvd,YAAL,CAAkB,UAAlB,EAA8ByD,IAAI,CAAC8Z,IAAL,CAAUlY,QAAxC;AACAkY,MAAAA,IAAI,CAACvd,YAAL,CAAkB,UAAlB,EAA8ByD,IAAI,CAAC8Z,IAAL,CAAUxY,QAAxC;AACAwY,MAAAA,IAAI,CAACvd,YAAL,CAAkB,MAAlB,EAA0ByD,IAAI,CAAC8Z,IAAL,CAAUpI,IAApC;AACAiI,MAAAA,KAAK,CAAC/S,IAAN,CAAWkT,IAAX;AACD;;AACD,QAAMvB,UAAU,GAAGtc,QAAQ,CAACK,aAAT,CAAuB,UAAvB,CAAnB;AACAic,IAAAA,UAAU,CAAChc,YAAX,CAAwB,UAAxB,EAAoCyD,IAAI,CAACuY,UAAL,CAAgB/G,QAApD;AACA+G,IAAAA,UAAU,CAAChc,YAAX,CAAwB,UAAxB,EAAoCyD,IAAI,CAACuY,UAAL,CAAgBjX,QAApD;AACAiX,IAAAA,UAAU,CAAChc,YAAX,CAAwB,UAAxB,EAAoCyD,IAAI,CAACuY,UAAL,CAAgB3G,QAApD;AACA+H,IAAAA,KAAK,CAAC/S,IAAN,CAAW2R,UAAX;AACA,WAAOoB,KAAP;AACD;;SAEDb,cAAA,qBAAYO,OAAZ,EAAqBrZ,IAArB,EAA2B;AACzB,QAAI0Z,MAAM,GAAGL,OAAb;;AACA,QAAIK,MAAM,KAAKrX,SAAX,IAAwBqX,MAAM,KAAK,IAAvC,EAA6C;AAC3CA,MAAAA,MAAM,GAAGzd,QAAQ,CAACK,aAAT,CAAuB,UAAvB,CAAT;AACA,UAAMyd,KAAK,GAAG,KAAKzd,aAAL,CAAmB+F,SAAnB,EAA8BrC,IAAI,CAACuY,UAAnC,CAAd;AACAmB,MAAAA,MAAM,CAACT,WAAP,CAAmBc,KAAnB;AACD;;AACD,WAAO/Z,IAAI,CAACuY,UAAZ;AACA,WAAO,KAAKjc,aAAL,CAAmBod,MAAnB,EAA2B1Z,IAA3B,CAAP;AACD;;SAEDsZ,kBAAA,yBAAgB/b,IAAhB,EAAsB;AACpB,QACEA,IAAI,KAAK,OAAT,IACAA,IAAI,KAAK,UADT,IAEAA,IAAI,KAAK,QAFT,IAGAA,IAAI,KAAK,UAHT,IAIAA,IAAI,KAAK,QALX,EAME;AACA,aAAOA,IAAP;AACD,KARD,MAQO;AACL,aAAO,UAAP;AACD;AACF;;;;;IChIkByc;;;;;SACnBC,iBAAA,wBAAeja,IAAf,EAAqBka,QAArB,EAA+BC,cAA/B,EAA+C;AAC7C,QAAM7Y,QAAQ,GAAG;AACfQ,MAAAA,CAAC,EAAE9B,IAAI,CAACiR,SADO;AAEf1P,MAAAA,CAAC,EAAEvB,IAAI,CAACkR,SAFO;AAGflP,MAAAA,CAAC,EAAEhC,IAAI,CAACmR;AAHO,KAAjB;AAKA,QAAM3K,EAAE,GAAGxG,IAAI,CAACwG,EAAhB;AACA,QAAM+R,UAAU,GAAG,KAAK6B,wBAAL,CAA8BD,cAA9B,CAAnB;AACA,QAAML,IAAI,GAAG,KAAKO,YAAL,CAAkBH,QAAlB,CAAb;AACA,WAAO;AACL5Y,MAAAA,QAAQ,EAAEA,QADL;AAELkF,MAAAA,EAAE,EAAEA,EAFC;AAGL+R,MAAAA,UAAU,EAAEA,UAHP;AAILuB,MAAAA,IAAI,EAAEA;AAJD,KAAP;AAMD;;SAEDQ,cAAA,qBAAYta,IAAZ,EAAkB;AAChB,QAAMsB,QAAQ,GAAG;AACfQ,MAAAA,CAAC,EAAE9B,IAAI,CAACiR,SADO;AAEf1P,MAAAA,CAAC,EAAEvB,IAAI,CAACkR,SAFO;AAGflP,MAAAA,CAAC,EAAEhC,IAAI,CAACmR;AAHO,KAAjB;AAKA,QAAMjL,KAAK,GAAG;AACZpE,MAAAA,CAAC,EAAE9B,IAAI,CAACua,MADI;AAEZhZ,MAAAA,CAAC,EAAEvB,IAAI,CAACwa,MAFI;AAGZxY,MAAAA,CAAC,EAAEhC,IAAI,CAACya;AAHI,KAAd;AAKA,QAAM7I,QAAQ,GAAG;AACf5S,MAAAA,KAAK,EAAEgB,IAAI,CAAChB,KADG;AAEfC,MAAAA,OAAO,EAAE;AAFM,KAAjB;AAIA,QAAMyb,IAAI,GAAG1a,IAAI,SAAjB;AACA,QAAM2a,MAAM,GAAG3a,IAAI,CAACA,IAApB;AACA,QAAMwG,EAAE,GAAGxG,IAAI,CAACwG,EAAhB;AACA,WAAO;AACLlF,MAAAA,QAAQ,EAAEA,QADL;AAEL4E,MAAAA,KAAK,EAAEA,KAFF;AAGL0L,MAAAA,QAAQ,EAAEA,QAHL;AAILpL,MAAAA,EAAE,EAAEA,EAJC;AAKL,eAAOkU,IALF;AAMLE,MAAAA,MAAM,EAAED,MANH;AAOLE,MAAAA,UAAU,EAAE;AAPP,KAAP;AASD;;SAEDC,gBAAA,uBAAc9a,IAAd,EAAoB;AAClB,QAAMsB,QAAQ,GAAG;AACfQ,MAAAA,CAAC,EAAE9B,IAAI,CAACiR,SADO;AAEf1P,MAAAA,CAAC,EAAEvB,IAAI,CAACkR,SAFO;AAGflP,MAAAA,CAAC,EAAEhC,IAAI,CAACmR;AAHO,KAAjB;AAKA,QAAMvP,QAAQ,GAAG;AACfE,MAAAA,CAAC,EAAE9B,IAAI,CAACoR,SADO;AAEf7P,MAAAA,CAAC,EAAEvB,IAAI,CAACqR,SAFO;AAGfrP,MAAAA,CAAC,EAAEhC,IAAI,CAACsR;AAHO,KAAjB;AAKA,QAAME,QAAQ,GAAG;AACfC,MAAAA,SAAS,EAAE,OADI;AAEf3V,MAAAA,KAAK,EAAE,CAFQ;AAGfC,MAAAA,MAAM,EAAE;AAHO,KAAjB;AAKA,QAAM2V,IAAI,GAAG;AACX5R,MAAAA,KAAK,EAAEE,IAAI,CAACF,KADD;AAEXd,MAAAA,KAAK,EAAEgB,IAAI,CAAChB,KAFD;AAGXlD,MAAAA,KAAK,EAAE,EAHI;AAIXC,MAAAA,MAAM,EAAE,MAJG;AAKXwC,MAAAA,KAAK,EAAE;AALI,KAAb;AAOA,QAAMqT,QAAQ,GAAG;AACf3S,MAAAA,OAAO,EAAE;AADM,KAAjB;AAGA,QAAMuH,EAAE,GAAGxG,IAAI,CAACwG,EAAhB;AACA,WAAO;AACLlF,MAAAA,QAAQ,EAAEA,QADL;AAELM,MAAAA,QAAQ,EAAEA,QAFL;AAGL4P,MAAAA,QAAQ,EAAEA,QAHL;AAILE,MAAAA,IAAI,EAAEA,IAJD;AAKLE,MAAAA,QAAQ,EAAEA,QALL;AAMLpL,MAAAA,EAAE,EAAEA;AANC,KAAP;AAQD;;SAEDuU,eAAA,sBAAa/a,IAAb,EAAmB;AACjB,QAAMsB,QAAQ,GAAG;AACfQ,MAAAA,CAAC,EAAE9B,IAAI,CAACiR,SADO;AAEf1P,MAAAA,CAAC,EAAEvB,IAAI,CAACkR,SAFO;AAGflP,MAAAA,CAAC,EAAEhC,IAAI,CAACmR;AAHO,KAAjB;AAKA,QAAMvP,QAAQ,GAAG;AACfE,MAAAA,CAAC,EAAE9B,IAAI,CAACoR,SADO;AAEf7P,MAAAA,CAAC,EAAEvB,IAAI,CAACqR,SAFO;AAGfrP,MAAAA,CAAC,EAAEhC,IAAI,CAACsR;AAHO,KAAjB;AAKA,QAAME,QAAQ,GAAG;AACfC,MAAAA,SAAS,EAAE,OADI;AAEf3V,MAAAA,KAAK,EAAEkE,IAAI,CAAClE,KAFG;AAGfC,MAAAA,MAAM,EAAEiE,IAAI,CAACjE;AAHE,KAAjB;AAKA,QAAM2V,IAAI,GAAG;AACX5R,MAAAA,KAAK,EAAEE,IAAI,CAACF,KADD;AAEXd,MAAAA,KAAK,EAAE,OAFI;AAGXlD,MAAAA,KAAK,EAAE,CAHI;AAIXC,MAAAA,MAAM,EAAE,MAJG;AAKXwC,MAAAA,KAAK,EAAE;AALI,KAAb;AAOA,QAAMqT,QAAQ,GAAG;AACf5S,MAAAA,KAAK,EAAEgB,IAAI,CAAChB,KADG;AAEfC,MAAAA,OAAO,EAAE;AAFM,KAAjB;AAIA,WAAO;AACLqC,MAAAA,QAAQ,EAAEA,QADL;AAELM,MAAAA,QAAQ,EAAEA,QAFL;AAGL4P,MAAAA,QAAQ,EAAEA,QAHL;AAILE,MAAAA,IAAI,EAAEA,IAJD;AAKLE,MAAAA,QAAQ,EAAEA;AALL,KAAP;AAOD;;SAEDoJ,gBAAA,uBAAchb,IAAd,EAAoBib,QAApB,EAA8B;AAC5B,QAAM3Z,QAAQ,GAAG;AACfQ,MAAAA,CAAC,EAAE9B,IAAI,CAACiR,SADO;AAEf1P,MAAAA,CAAC,EAAEvB,IAAI,CAACkR,SAFO;AAGflP,MAAAA,CAAC,EAAEhC,IAAI,CAACmR;AAHO,KAAjB;AAKA,QAAMvP,QAAQ,GAAG;AACfE,MAAAA,CAAC,EAAE9B,IAAI,CAACoR,SADO;AAEf7P,MAAAA,CAAC,EAAEvB,IAAI,CAACqR,SAFO;AAGfrP,MAAAA,CAAC,EAAEhC,IAAI,CAACsR;AAHO,KAAjB;AAKA,QAAMM,QAAQ,GAAG;AACf3S,MAAAA,OAAO,EAAE;AADM,KAAjB;AAGA,QAAMyS,IAAI,GAAG;AACX5R,MAAAA,KAAK,EAAEE,IAAI,CAACiY,KADD;AAEXjZ,MAAAA,KAAK,EAAEgB,IAAI,CAAChB,KAFD;AAGXlD,MAAAA,KAAK,EAAE,GAHI;AAIXC,MAAAA,MAAM,EAAE,MAJG;AAKXwC,MAAAA,KAAK,EAAE;AALI,KAAb;AAOA,QAAM2c,IAAI,GAAG,KAAKC,iBAAL,CAAuBF,QAAvB,CAAb;AACA,WAAO;AACL3Z,MAAAA,QAAQ,EAAEA,QADL;AAELM,MAAAA,QAAQ,EAAEA,QAFL;AAGLgQ,MAAAA,QAAQ,EAAEA,QAHL;AAILF,MAAAA,IAAI,EAAEA,IAJD;AAKL6G,MAAAA,UAAU,EAAE2C;AALP,KAAP;AAOD;;SAEDC,oBAAA,2BAAkBnb,IAAlB,EAAwB;AACtB,QAAMwR,QAAQ,GAAG;AACfC,MAAAA,SAAS,EAAE,OADI;AAEf3V,MAAAA,KAAK,EAAEkE,IAAI,CAAClE,KAFG;AAGfC,MAAAA,MAAM,EAAEiE,IAAI,CAACjE;AAHE,KAAjB;AAKA,QAAMuF,QAAQ,GAAG;AACfQ,MAAAA,CAAC,EAAE9B,IAAI,CAACiR,SADO;AAEf1P,MAAAA,CAAC,EAAEvB,IAAI,CAACkR,SAFO;AAGflP,MAAAA,CAAC,EAAEhC,IAAI,CAACmR;AAHO,KAAjB;AAKA,QAAMS,QAAQ,GAAG;AACf5S,MAAAA,KAAK,EAAEgB,IAAI,CAAChB,KADG;AAEfC,MAAAA,OAAO,EAAE;AAFM,KAAjB;AAIA,WAAO;AACLqC,MAAAA,QAAQ,EAAEA,QADL;AAELkQ,MAAAA,QAAQ,EAAEA,QAFL;AAGLI,MAAAA,QAAQ,EAAEA;AAHL,KAAP;AAKD;;SAEDyI,eAAA,sBAAara,IAAb,EAAmB;AACjB,QAAMsB,QAAQ,GAAG;AACfQ,MAAAA,CAAC,EAAE9B,IAAI,CAACiR,SADO;AAEf1P,MAAAA,CAAC,EAAEvB,IAAI,CAACkR,SAFO;AAGflP,MAAAA,CAAC,EAAEhC,IAAI,CAACmR;AAHO,KAAjB;AAKA,QAAMvP,QAAQ,GAAG;AACfE,MAAAA,CAAC,EAAE9B,IAAI,CAACoR,SADO;AAEf7P,MAAAA,CAAC,EAAEvB,IAAI,CAACqR,SAFO;AAGfrP,MAAAA,CAAC,EAAEhC,IAAI,CAACsR;AAHO,KAAjB;AAKA,QAAMI,IAAI,GAAG;AACX5R,MAAAA,KAAK,EAAE,EADI;AAEXhE,MAAAA,KAAK,EAAE,EAFI;AAGXC,MAAAA,MAAM,EAAE,MAHG;AAIXwC,MAAAA,KAAK,EAAE;AAJI,KAAb;AAMA,WAAO;AACL+C,MAAAA,QAAQ,EAAEA,QADL;AAELM,MAAAA,QAAQ,EAAEA,QAFL;AAGL8P,MAAAA,IAAI,EAAEA;AAHD,KAAP;AAKD;;SAED0I,2BAAA,kCAAyBpa,IAAzB,EAA+B;AAC7B,QAAMsB,QAAQ,GAAG;AACfQ,MAAAA,CAAC,EAAE9B,IAAI,CAACiR,SADO;AAEf1P,MAAAA,CAAC,EAAEvB,IAAI,CAACkR,SAFO;AAGflP,MAAAA,CAAC,EAAEhC,IAAI,CAACmR;AAHO,KAAjB;AAKA,QAAMK,QAAQ,GAAG;AACfC,MAAAA,SAAS,EAAE,KADI;AAEf3V,MAAAA,KAAK,EAAEkE,IAAI,CAAClE,KAFG;AAGfC,MAAAA,MAAM,EAAEiE,IAAI,CAACjE,MAHE;AAIf8Z,MAAAA,KAAK,EAAE7V,IAAI,CAAC6V;AAJG,KAAjB;AAMA,QAAMjE,QAAQ,GAAG;AACf5S,MAAAA,KAAK,EAAEgB,IAAI,CAAChB;AADG,KAAjB;AAGA,WAAO;AACLsC,MAAAA,QAAQ,EAAEA,QADL;AAELkQ,MAAAA,QAAQ,EAAEA,QAFL;AAGLI,MAAAA,QAAQ,EAAEA;AAHL,KAAP;AAKD;;;;;ACpNH,IAAI3K,YAAY,GAAG,EAAnB;;AAEA,SAASmU,aAAT,CAAuBpK,KAAvB,EAA8B;AAC5B,MAAMtK,YAAY,GAAGO,YAAY,CAACX,MAAb,CAAoB,UAACC,IAAD;AAAA,WAAUA,IAAI,CAACC,EAAL,KAAYwK,KAAtB;AAAA,GAApB,CAArB;AACA,SAAOtK,YAAY,CAACtM,MAAb,KAAwB,CAA/B;AACD;;AAucD,SAASihB,kBAAT,CACEhC,OADF,EAEEZ,KAFF,EAGEtZ,SAHF,EAIEmD,OAJF,EAKEC,OALF,EAMEyF,KANF,EAOEmH,KAPF,EAQE;AAEAlI,EAAAA,YAAY,GAAG0B,mBAAmB,CAAC3B,uBAApB,EAAf;AAGA,MAAMsU,cAAc,GAAG,IAAItB,cAAJ,EAAvB;AACA,MAAMuB,aAAa,GAAG,IAAI/C,aAAJ,CAAkBC,KAAlB,CAAtB;AACA,MAAM+C,aAAa,GAAG,IAAItM,aAAJ,CAAkBC,KAAlB,CAAtB;AAEA,MAAMnP,IAAI,GAAG,EAAb;AAEA,MAAM2Y,YAAY,GAAGU,OAArB;AAEA,MAAIrD,iBAAJ;AACA,MAAIrD,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,MAAIC,OAAJ,EAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,MAAzB;AACA,MAAI7N,CAAJ;AACA,MAAMxK,OAAO,GAAG,EAAhB;AACA,MAAI2Q,eAAJ;AACA,MAAI+H,KAAK,GAAG,CAAZ;AACA,MAAMC,UAAU,GACdlR,OAAO,GAAG0F,KAAV,GAAkB7I,SAAS,CAACtF,MAAV,CAAiBE,KAAnC,GACIoF,SAAS,CAACtF,MAAV,CAAiBE,KADrB,GAEIuI,OAAO,GAAG0F,KAHhB;AAIA,MAAMyL,UAAU,GACdlR,OAAO,GAAGyF,KAAV,GAAkB7I,SAAS,CAACwU,MAAV,CAAiB5Z,KAAnC,GACIoF,SAAS,CAACwU,MAAV,CAAiB5Z,KADrB,GAEIwI,OAAO,GAAGyF,KAHhB;AAIA,MAAMiD,MAAM,GAAG9L,SAAS,CAACtF,MAAV,CAAiBG,MAAhC;AACA,MAAMqR,MAAM,GAAGlM,SAAS,CAACwU,MAAV,CAAiB3Z,MAAhC;AACA,MAAM6Z,OAAO,GAAG1U,SAAS,CAACtF,MAAV,CAAiBI,OAAjB,GAA2BkF,SAAS,CAACtF,MAAV,CAAiBI,OAAjB,CAAyBE,GAApD,GAA0D,EAA1E;AACA,MAAM2Z,OAAO,GAAG3U,SAAS,CAACwU,MAAV,CAAiB1Z,OAAjB,GAA2BkF,SAAS,CAACwU,MAAV,CAAiB1Z,OAAjB,CAAyBE,GAApD,GAA0D,EAA1E;;AAGA,OAAK,IAAI+Z,EAAE,GAAG3R,OAAd,EAAuB2R,EAAE,IAAIT,UAA7B,EAAyCS,EAAE,EAA3C,EAA+C;AAC7C,SAAK,IAAIC,EAAE,GAAG7R,OAAd,EAAuB6R,EAAE,IAAIX,UAA7B,EAAyCW,EAAE,EAA3C,EAA+C;AAC7CxB,MAAAA,OAAO,GAAGxT,SAAS,CAACtF,MAAV,CAAiBua,YAAjB,CAA8BD,EAA9B,CAAV;AACAvB,MAAAA,IAAI,GAAGzT,SAAS,CAACtF,MAAV,CAAiBwa,aAAjB,CAA+BF,EAA/B,CAAP;AACAtB,MAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,MAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAG,MAAAA,OAAO,GAAG5T,SAAS,CAACwU,MAAV,CAAiBS,YAAjB,CAA8BF,EAA9B,CAAV;AACAlB,MAAAA,IAAI,GAAG7T,SAAS,CAACwU,MAAV,CAAiBU,aAAjB,CAA+BH,EAA/B,CAAP;AACAjB,MAAAA,IAAI,GAAGF,OAAO,IAAIA,OAAO,GAAGC,IAAd,CAAd;AACAE,MAAAA,MAAM,GAAGD,IAAI,GAAGD,IAAhB;AACAxH,MAAAA,eAAe,GAAGrM,SAAS,CAACxE,aAAV,CAAwBwZ,EAAxB,EAA4BD,EAA5B,CAAlB;AACA7O,MAAAA,CAAC,GAAGoW,kBAAkB,CAACjQ,eAAD,EAAkBrM,SAAS,CAACmV,QAA5B,CAAtB;AACA0B,MAAAA,iBAAiB,GAAG3Q,CAAC,GAAG,CAAxB;;AAIA,UAAIA,CAAC,GAAG,CAAR,EAAW;AACT,YAAMrG,KAAK,GAAGwc,aAAa,CAACvL,WAAd,CAA0B5K,CAA1B,CAAd;AAEA,YAAMmB,EAAE,GAAGoM,IAAI,GAAG,KAAP,GAAeC,IAAf,GAAsB,KAAtB,GAA8BG,IAA9B,GAAqC,KAArC,GAA6CC,IAAxD;AACA,YAAIpJ,WAAW,SAAf;;AACA,YAAIuR,aAAa,CAAC5U,EAAD,CAAjB,EAAuB;AACrBqD,UAAAA,WAAW,GAAG2R,aAAa,CAAC1L,uBAAd,EAAd;AACD,SAFD,MAEO;AACLjG,UAAAA,WAAW,GAAG7K,KAAd;AACD;;AAED,YAAMzG,OAAO,YAAUiO,EAAV,6BACDnB,CADC,2BAEHrG,KAFG,4BAGFqM,MAHE,4BAIFJ,MAJE,qCAKOO,eALP,6BAMD3Q,OANC,0BAOJ+X,IAPI,0BAQJI,IARI,0BASJH,IATI,0BAUJI,IAVI,6BAWDN,OAXC,6BAYDI,OAZC,4BAaFD,MAbE,4BAcFI,MAdE,iCAeGrJ,WAfH,iCAgBG2R,aAAa,CAAC1L,uBAAd,EAhBH,2BAiBH0L,aAAa,CAAC5L,YAAd,CAA2B,GAA3B,CAjBG,2BAkBH4L,aAAa,CAAC5L,YAAd,CAA2B,GAA3B,CAlBG,2BAmBH4L,aAAa,CAAC5L,YAAd,CAA2B,GAA3B,CAnBV;AAqBA5P,QAAAA,IAAI,CAACwG,EAAL,GAAUA,EAAV;AACAxG,QAAAA,IAAI,CAACiR,SAAL,GAAiB2B,IAAjB;AACA5S,QAAAA,IAAI,CAACkR,SAAL,GAAiB8E,iBAAjB;AACAhW,QAAAA,IAAI,CAACmR,SAAL,GAAiB6B,IAAjB;AACAhT,QAAAA,IAAI,CAACua,MAAL,GAAczH,MAAM,GAAG,CAAvB;AACA9S,QAAAA,IAAI,CAACwa,MAAL,GAAcnV,CAAd;AACArF,QAAAA,IAAI,CAACya,MAAL,GAAcvH,MAAM,GAAG,CAAvB;AACAlT,QAAAA,IAAI,CAAChB,KAAL,GAAa6K,WAAb;AACA7J,QAAAA,IAAI,SAAJ,GAAa,WAAb;AACAA,QAAAA,IAAI,CAACA,IAAL,GAAYzH,OAAZ;AAEAkgB,QAAAA,KAAK,CAACpG,IAAN,CAAW0G,UAAX,CAAsBxF,KAAtB,IAA+B+H,cAAc,CAAChB,WAAf,CAA2Bta,IAA3B,CAA/B;AACAub,QAAAA,aAAa,CAAC7C,aAAd,CAA4BnF,KAA5B,EAAmCoF,YAAnC,EAAiD,MAAjD,EAAyD,OAAzD;AACApF,QAAAA,KAAK;AACN;AACF;AACF;;AAEDgI,EAAAA,aAAa,CAACrC,yBAAd,CAAwC3F,KAAxC,EAA+C,CAAC,MAAD,CAA/C;AAIAvT,EAAAA,IAAI,CAACwG,EAAL,GAAU,OAAO+M,KAAjB;AACAvT,EAAAA,IAAI,CAACiR,SAAL,GAAiBuC,UAAU,GAAG,GAA9B;AACAxT,EAAAA,IAAI,CAACkR,SAAL,GAAiB,CAAjB;AACAlR,EAAAA,IAAI,CAACmR,SAAL,GAAiBsC,UAAU,GAAG,GAA9B;AACAzT,EAAAA,IAAI,CAACoR,SAAL,GAAiB,GAAjB;AACApR,EAAAA,IAAI,CAACqR,SAAL,GAAiB,GAAjB;AACArR,EAAAA,IAAI,CAACsR,SAAL,GAAiB,CAAjB;AACAtR,EAAAA,IAAI,CAAClE,KAAL,GAAa,CAAb;AACAkE,EAAAA,IAAI,CAACjE,MAAL,GAAc,CAAd;AACAiE,EAAAA,IAAI,CAACF,KAAL;AACAE,EAAAA,IAAI,CAAChB,KAAL,GAAawc,aAAa,CAAC5L,YAAd,CAA2B,GAA3B,CAAb;AACA6I,EAAAA,KAAK,CAACiD,WAAN,CAAkB3C,UAAlB,CAA6B,CAA7B,IAAkCuC,cAAc,CAACP,YAAf,CAA4B/a,IAA5B,CAAlC;AACAub,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,aAA7C,EAA4D,UAA5D;AAGA3Y,EAAAA,IAAI,CAACmR,SAAL,GAAiB5O,OAAO,GAAG,GAA3B;AACAvC,EAAAA,IAAI,CAACoR,SAAL,GAAiB,GAAjB;AACApR,EAAAA,IAAI,CAACqR,SAAL,GAAiB,GAAjB;AACAoH,EAAAA,KAAK,CAACkD,aAAN,CAAoB5C,UAApB,CAA+B,CAA/B,IAAoCuC,cAAc,CAACP,YAAf,CAA4B/a,IAA5B,CAApC;AACAub,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,eAA7C,EAA8D,UAA9D;AAGA3Y,EAAAA,IAAI,CAACiR,SAAL,GAAiB3O,OAAO,GAAG,GAA3B;AACAtC,EAAAA,IAAI,CAACmR,SAAL,GAAiBsC,UAAU,GAAG,GAA9B;AAEAgF,EAAAA,KAAK,CAACmD,WAAN,CAAkB7C,UAAlB,CAA6B,CAA7B,IAAkCuC,cAAc,CAACP,YAAf,CAA4B/a,IAA5B,CAAlC;AACAub,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,aAA7C,EAA4D,UAA5D;AAGA3Y,EAAAA,IAAI,CAACmR,SAAL,GAAiB5O,OAAO,GAAG,GAA3B;AACAvC,EAAAA,IAAI,CAACqR,SAAL,GAAiB,GAAjB;AACAoH,EAAAA,KAAK,CAACoD,aAAN,CAAoB9C,UAApB,CAA+B,CAA/B,IAAoCuC,cAAc,CAACP,YAAf,CAA4B/a,IAA5B,CAApC;AACAub,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,eAA7C,EAA8D,UAA9D;AAGApF,EAAAA,KAAK,GAAG,CAAR;;AACA,OAAK,IAAIW,GAAE,GAAG3R,OAAd,EAAuB2R,GAAE,IAAIT,UAA7B,EAAyCS,GAAE,EAA3C,EAA+C;AAC7ClU,IAAAA,IAAI,CAACwG,EAAL,GAAU,OAAO+M,KAAjB;AACAvT,IAAAA,IAAI,CAACiR,SAAL,GAAiB3O,OAAO,GAAG,GAA3B;AACAtC,IAAAA,IAAI,CAACkR,SAAL,GAAiB,CAAjB;AACAlR,IAAAA,IAAI,CAACmR,SAAL,GAAiB+C,GAAE,GAAG,CAAtB;AACAlU,IAAAA,IAAI,CAACoR,SAAL,GAAiB,GAAjB;AACApR,IAAAA,IAAI,CAACqR,SAAL,GAAiB,GAAjB;AACArR,IAAAA,IAAI,CAACsR,SAAL,GAAiB,CAAjB;AACAtR,IAAAA,IAAI,CAAClE,KAAL,GAAa,CAAb;AACAkE,IAAAA,IAAI,CAACjE,MAAL,GAAc,CAAd;AACAiE,IAAAA,IAAI,CAACF,KAAL,SAAgBgU,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,GAAkBJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,CAAgB5Z,OAAlC,GAA4C4Z,GAAE,GAAG,CAAjE;AACAlU,IAAAA,IAAI,CAAChB,KAAL,GAAawc,aAAa,CAAC5L,YAAd,CAA2B,GAA3B,CAAb;AAEA6I,IAAAA,KAAK,CAACmD,WAAN,CAAkB7C,UAAlB,CAA6BxF,KAA7B,IAAsC+H,cAAc,CAACP,YAAf,CAA4B/a,IAA5B,CAAtC;AACAub,IAAAA,aAAa,CAAC7C,aAAd,CAA4BnF,KAA5B,EAAmCoF,YAAnC,EAAiD,aAAjD,EAAgE,UAAhE;AAEA3Y,IAAAA,IAAI,CAACwG,EAAL,GAAU,OAAO+M,KAAjB;AACAvT,IAAAA,IAAI,CAACiR,SAAL,GAAiBuC,UAAU,GAAG,GAA9B;AACAxT,IAAAA,IAAI,CAACqR,SAAL,GAAiB,GAAjB;AACArR,IAAAA,IAAI,CAACF,KAAL,SAAgBgU,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,GAAkBJ,OAAO,CAACI,GAAE,GAAG,CAAN,CAAP,CAAgB5Z,OAAlC,GAA4C4Z,GAAE,GAAG,CAAjE;AAGAuE,IAAAA,KAAK,CAACkD,aAAN,CAAoB5C,UAApB,CAA+BxF,KAA/B,IAAwC+H,cAAc,CAACP,YAAf,CAA4B/a,IAA5B,CAAxC;AACAub,IAAAA,aAAa,CAAC7C,aAAd,CACEnF,KADF,EAEEoF,YAFF,EAGE,eAHF,EAIE,UAJF;AAMApF,IAAAA,KAAK;AACN;;AAEDgI,EAAAA,aAAa,CAACrC,yBAAd,CAAwC3F,KAAxC,EAA+C,CAC7C,aAD6C,EAE7C,eAF6C,CAA/C;AAKAA,EAAAA,KAAK,GAAG,CAAR;;AAEA,OAAK,IAAIY,GAAE,GAAG7R,OAAd,EAAuB6R,GAAE,IAAIX,UAA7B,EAAyCW,GAAE,EAA3C,EAA+C;AAC7CnU,IAAAA,IAAI,CAACwG,EAAL,GAAU,OAAO+M,KAAjB;AACAvT,IAAAA,IAAI,CAACiR,SAAL,GAAiBkD,GAAE,GAAG,CAAtB;AACAnU,IAAAA,IAAI,CAACkR,SAAL,GAAiB,CAAjB;AACAlR,IAAAA,IAAI,CAACmR,SAAL,GAAiB5O,OAAO,GAAG,GAA3B;AACAvC,IAAAA,IAAI,CAACoR,SAAL,GAAiB,GAAjB;AACApR,IAAAA,IAAI,CAACqR,SAAL,GAAiB,GAAjB;AACArR,IAAAA,IAAI,CAACsR,SAAL,GAAiB,CAAjB;AACAtR,IAAAA,IAAI,CAAClE,KAAL,GAAa,CAAb;AACAkE,IAAAA,IAAI,CAACjE,MAAL,GAAc,CAAd;AACAiE,IAAAA,IAAI,CAACF,KAAL,SAAgB+T,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,GAAkBN,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,CAAgB7Z,OAAlC,GAA4C6Z,GAAE,GAAG,CAAjE;AACAnU,IAAAA,IAAI,CAAChB,KAAL,GAAawc,aAAa,CAAC5L,YAAd,CAA2B,GAA3B,CAAb;AAEA6I,IAAAA,KAAK,CAACiD,WAAN,CAAkB3C,UAAlB,CAA6BxF,KAA7B,IAAsC+H,cAAc,CAACP,YAAf,CAA4B/a,IAA5B,CAAtC;AACAub,IAAAA,aAAa,CAAC7C,aAAd,CAA4BnF,KAA5B,EAAmCoF,YAAnC,EAAiD,aAAjD,EAAgE,UAAhE;AAEA3Y,IAAAA,IAAI,CAACwG,EAAL,GAAU,OAAO+M,KAAjB;AACAvT,IAAAA,IAAI,CAACmR,SAAL,GAAiBsC,UAAU,GAAG,GAA9B;AACAzT,IAAAA,IAAI,CAACoR,SAAL,GAAiB,GAAjB;AACApR,IAAAA,IAAI,CAACqR,SAAL,GAAiB,EAAjB;AACArR,IAAAA,IAAI,CAACF,KAAL,SAAgB+T,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,GAAkBN,OAAO,CAACM,GAAE,GAAG,CAAN,CAAP,CAAgB7Z,OAAlC,GAA4C6Z,GAAE,GAAG,CAAjE;AAEAsE,IAAAA,KAAK,CAACoD,aAAN,CAAoB9C,UAApB,CAA+BxF,KAA/B,IAAwC+H,cAAc,CAACP,YAAf,CAA4B/a,IAA5B,CAAxC;AACAub,IAAAA,aAAa,CAAC7C,aAAd,CACEnF,KADF,EAEEoF,YAFF,EAGE,eAHF,EAIE,UAJF;AAMApF,IAAAA,KAAK;AACN;;AAEDgI,EAAAA,aAAa,CAACrC,yBAAd,CAAwC3F,KAAxC,EAA+C,CAC7C,aAD6C,EAE7C,eAF6C,CAA/C;AAKAvT,EAAAA,IAAI,CAACiR,SAAL,GAAiB3O,OAAjB;AACAtC,EAAAA,IAAI,CAACkR,SAAL,GAAiB,CAAjB;AACAlR,EAAAA,IAAI,CAACmR,SAAL,GAAiB5O,OAAO,GAAG,CAA3B;AACAvC,EAAAA,IAAI,CAACoR,SAAL,GAAiB,GAAjB;AACApR,EAAAA,IAAI,CAACqR,SAAL,GAAiB,GAAjB;AACArR,EAAAA,IAAI,CAACsR,SAAL,GAAiB,CAAjB;AACAtR,EAAAA,IAAI,CAAClE,KAAL,GAAa,CAAb;AACAkE,EAAAA,IAAI,CAACjE,MAAL,GAAc,CAAd;AACAiE,EAAAA,IAAI,CAACF,KAAL,GAAamL,MAAb;AACAjL,EAAAA,IAAI,CAACwG,EAAL,GAAU,WAAV;AAEAiS,EAAAA,KAAK,CAACnG,MAAN,CAAayG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACR,aAAf,CAA6B9a,IAA7B,CAA7B;AACAub,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AAEA3Y,EAAAA,IAAI,CAACiR,SAAL,GAAiBuC,UAAU,GAAG,GAA9B;AACAxT,EAAAA,IAAI,CAACmR,SAAL,GAAiBsC,UAAU,GAAG,CAA9B;AACAzT,EAAAA,IAAI,CAACqR,SAAL,GAAiB,CAAjB;AACArR,EAAAA,IAAI,CAACwG,EAAL,GAAU,SAAV;AAEAiS,EAAAA,KAAK,CAACnG,MAAN,CAAayG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACR,aAAf,CAA6B9a,IAA7B,CAA7B;AACAub,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AAGA3Y,EAAAA,IAAI,CAACiR,SAAL,GAAiB3O,OAAO,GAAG,CAA3B;AACAtC,EAAAA,IAAI,CAACkR,SAAL,GAAiB,CAAjB;AACAlR,EAAAA,IAAI,CAACmR,SAAL,GAAiB5O,OAAO,GAAG,GAA3B;AACAvC,EAAAA,IAAI,CAACoR,SAAL,GAAiB,GAAjB;AACApR,EAAAA,IAAI,CAACqR,SAAL,GAAiB,GAAjB;AACArR,EAAAA,IAAI,CAACsR,SAAL,GAAiB,CAAjB;AACAtR,EAAAA,IAAI,CAAClE,KAAL,GAAa,CAAb;AACAkE,EAAAA,IAAI,CAACjE,MAAL,GAAc,CAAd;AACAiE,EAAAA,IAAI,CAACF,KAAL,GAAauL,MAAb;AACArL,EAAAA,IAAI,CAAChB,KAAL,GAAawc,aAAa,CAAC5L,YAAd,CAA2B,GAA3B,CAAb;AACA5P,EAAAA,IAAI,CAACwG,EAAL,GAAU,WAAV;AAEAiS,EAAAA,KAAK,CAACnG,MAAN,CAAayG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACR,aAAf,CAA6B9a,IAA7B,CAA7B;AACAub,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AAEA3Y,EAAAA,IAAI,CAACiR,SAAL,GAAiBuC,UAAU,GAAG,CAA9B;AACAxT,EAAAA,IAAI,CAACmR,SAAL,GAAiBsC,UAAU,GAAG,GAA9B;AACAzT,EAAAA,IAAI,CAACoR,SAAL,GAAiB,GAAjB;AACApR,EAAAA,IAAI,CAACqR,SAAL,GAAiB,EAAjB;AACArR,EAAAA,IAAI,CAACwG,EAAL,GAAU,YAAV;AAEAiS,EAAAA,KAAK,CAACnG,MAAN,CAAayG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACR,aAAf,CAA6B9a,IAA7B,CAA7B;AACAub,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AAEA3Y,EAAAA,IAAI,CAACiR,SAAL,GAAiB3O,OAAO,GAAG,EAA3B;AACAtC,EAAAA,IAAI,CAACkR,SAAL,GAAiB,CAAC,GAAlB;AACAlR,EAAAA,IAAI,CAACmR,SAAL,GAAiB5O,OAAO,GAAG,EAA3B;AACAvC,EAAAA,IAAI,CAACoR,SAAL,GAAiB,CAAjB;AACApR,EAAAA,IAAI,CAACqR,SAAL,GAAiB,GAAjB;AACArR,EAAAA,IAAI,CAACsR,SAAL,GAAiB,CAAjB;AACAtR,EAAAA,IAAI,CAACiY,KAAL,GAAa9Y,SAAS,CAACnF,MAAvB;AACAgG,EAAAA,IAAI,CAAChB,KAAL,GAAawc,aAAa,CAACzL,mBAAd,EAAb;AAEA,MAAMmL,IAAI,GAAG,EAAb;AACAA,EAAAA,IAAI,CAACjK,SAAL,GAAiB,CAAjB;AACAiK,EAAAA,IAAI,CAAChK,SAAL,GAAiB,CAAjB;AACAgK,EAAAA,IAAI,CAAC/J,SAAL,GAAiB,CAAC,CAAlB;AACA+J,EAAAA,IAAI,CAACpf,KAAL,GAAa,GAAb;AACAof,EAAAA,IAAI,CAACnf,MAAL,GAAc,EAAd;AACAmf,EAAAA,IAAI,CAAClc,KAAL,GAAa,OAAb;AAEAyZ,EAAAA,KAAK,CAAChG,MAAN,CAAasG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACN,aAAf,CAA6Bhb,IAA7B,EAAmCkb,IAAnC,CAA7B;AACAK,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AAGA3Y,EAAAA,IAAI,CAACiR,SAAL,GAAiB3O,OAAO,GAAG,GAA3B;AACAtC,EAAAA,IAAI,CAACmR,SAAL,GAAiB5O,OAAO,GAAG,EAA3B;AACAvC,EAAAA,IAAI,CAACqR,SAAL,GAAiB,GAAjB;AACArR,EAAAA,IAAI,CAACiY,KAAL,GAAa9Y,SAAS,CAACvE,KAAvB;AAEA6d,EAAAA,KAAK,CAAChG,MAAN,CAAasG,UAAb,CAAwB,CAAxB,IAA6BuC,cAAc,CAACN,aAAf,CAA6Bhb,IAA7B,EAAmCkb,IAAnC,CAA7B;AACAK,EAAAA,aAAa,CAAC7C,aAAd,CAA4B,CAA5B,EAA+BC,YAA/B,EAA6C,QAA7C,EAAuD,UAAvD;AACD;;AAGD,IAAM8C,kBAAkB,GAAG,SAArBA,kBAAqB,CAACtF,UAAD,EAAaC,UAAb,EAA4B;AACrD,MAAID,UAAU,IAAI,CAAlB,EAAqB,OAAO,CAAP;;AACrB,MAAIC,UAAU,GAAG,CAAjB,EAAoB;AAElBD,IAAAA,UAAU,GACRZ,IAAI,CAACC,KAAL,CAAW,CAACW,UAAU,GAAGC,UAAb,GAA0BX,MAAM,CAACC,OAAlC,IAA6C,GAAxD,IAA+D,GADjE;AAED;;AAED,SAAOS,UAAP;AACD,CATD;;ACpuBAnN,QAAM,CAACC,iBAAP,CAAyB,QAAzB,EAAmC;AACjC2E,EAAAA,MAAM,EAAE;AACNpH,IAAAA,EAAE,EAAE;AAAEjJ,MAAAA,IAAI,EAAE;AAAR,KADE;AAENgN,IAAAA,OAAO,EAAE;AAAE,iBAAS;AAAX,KAFH;AAGNiB,IAAAA,eAAe,EAAE;AAAE,iBAAS;AAAX,KAHX;AAIN3Q,IAAAA,OAAO,EAAE;AAAE,iBAAS;AAAX,KAJH;AAKNoQ,IAAAA,MAAM,EAAE;AAAE1N,MAAAA,IAAI,EAAE;AAAR,KALF;AAMN8N,IAAAA,MAAM,EAAE;AAAE9N,MAAAA,IAAI,EAAE;AAAR,KANF;AAON2N,IAAAA,IAAI,EAAE;AAAE3N,MAAAA,IAAI,EAAE;AAAR,KAPA;AAQN+N,IAAAA,IAAI,EAAE;AAAE/N,MAAAA,IAAI,EAAE;AAAR,KARA;AASN4N,IAAAA,IAAI,EAAE;AAAE5N,MAAAA,IAAI,EAAE;AAAR,KATA;AAUNgO,IAAAA,IAAI,EAAE;AAAEhO,MAAAA,IAAI,EAAE;AAAR,KAVA;AAWNsQ,IAAAA,OAAO,EAAE;AAAEtQ,MAAAA,IAAI,EAAE;AAAR,KAXH;AAYNuQ,IAAAA,OAAO,EAAE;AAAEvQ,MAAAA,IAAI,EAAE;AAAR,KAZH;AAaNyQ,IAAAA,MAAM,EAAE;AAAEzQ,MAAAA,IAAI,EAAE;AAAR,KAbF;AAcN0Q,IAAAA,MAAM,EAAE;AAAE1Q,MAAAA,IAAI,EAAE;AAAR,KAdF;AAeNyB,IAAAA,KAAK,EAAE;AAAEzB,MAAAA,IAAI,EAAE;AAAR,KAfD;AAgBN4M,IAAAA,KAAK,EAAE;AAAE5M,MAAAA,IAAI,EAAE;AAAR,KAhBD;AAiBN2M,IAAAA,KAAK,EAAE;AAAE3M,MAAAA,IAAI,EAAE;AAAR,KAjBD;AAkBN0M,IAAAA,KAAK,EAAE;AAAE1M,MAAAA,IAAI,EAAE;AAAR,KAlBD;AAmBNuM,IAAAA,WAAW,EAAE;AAAEvM,MAAAA,IAAI,EAAE;AAAR,KAnBP;AAoBNsM,IAAAA,WAAW,EAAE;AAAEtM,MAAAA,IAAI,EAAE;AAAR;AApBP,GADyB;AAwBjC2L,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAMC,EAAE,GAAG,KAAKA,EAAhB;AACAA,IAAAA,EAAE,CAACS,QAAH,GAAc;AACZe,MAAAA,QAAQ,EAAE,KADE;AAEZnE,MAAAA,EAAE,EAAE,KAAKxG,IAAL,CAAUwG,EAFF;AAGZ+D,MAAAA,OAAO,EAAE,KAAKvK,IAAL,CAAUuK,OAHP;AAIZiB,MAAAA,eAAe,EAAE,KAAKxL,IAAL,CAAUwL,eAJf;AAKZ3Q,MAAAA,OAAO,EAAE,KAAKmF,IAAL,CAAUnF,OALP;AAMZoQ,MAAAA,MAAM,EAAE,KAAKjL,IAAL,CAAUiL,MANN;AAOZI,MAAAA,MAAM,EAAE,KAAKrL,IAAL,CAAUqL,MAPN;AAQZH,MAAAA,IAAI,EAAE,KAAKlL,IAAL,CAAUkL,IARJ;AASZI,MAAAA,IAAI,EAAE,KAAKtL,IAAL,CAAUsL,IATJ;AAUZH,MAAAA,IAAI,EAAE,KAAKnL,IAAL,CAAUmL,IAVJ;AAWZI,MAAAA,IAAI,EAAE,KAAKvL,IAAL,CAAUuL,IAXJ;AAYZsC,MAAAA,OAAO,EAAE,KAAK7N,IAAL,CAAU6N,OAZP;AAaZC,MAAAA,OAAO,EAAE,KAAK9N,IAAL,CAAU8N,OAbP;AAcZE,MAAAA,MAAM,EAAE,KAAKhO,IAAL,CAAUgO,MAdN;AAeZC,MAAAA,MAAM,EAAE,KAAKjO,IAAL,CAAUiO,MAfN;AAgBZjP,MAAAA,KAAK,EAAE,KAAKgB,IAAL,CAAUhB,KAhBL;AAiBZmL,MAAAA,KAAK,EAAE,KAAKnK,IAAL,CAAUmK,KAjBL;AAkBZD,MAAAA,KAAK,EAAE,KAAKlK,IAAL,CAAUkK,KAlBL;AAmBZD,MAAAA,KAAK,EAAE,KAAKjK,IAAL,CAAUiK,KAnBL;AAoBZH,MAAAA,WAAW,EAAE,KAAK9J,IAAL,CAAU8J,WApBX;AAqBZD,MAAAA,WAAW,EAAE,KAAK7J,IAAL,CAAU6J;AArBX,KAAd;AAuBD,GAjDgC;AAkDjC4B,EAAAA,MAAM,EAAE,kBAAY;AAClB,QAAMtC,EAAE,GAAG,KAAKA,EAAhB;AACAA,IAAAA,EAAE,CAACS,QAAH,GAAc;AACZe,MAAAA,QAAQ,EAAE,KADE;AAEZnE,MAAAA,EAAE,EAAE,KAAKxG,IAAL,CAAUwG,EAFF;AAGZ+D,MAAAA,OAAO,EAAE,KAAKvK,IAAL,CAAUuK,OAHP;AAIZiB,MAAAA,eAAe,EAAE,KAAKxL,IAAL,CAAUwL,eAJf;AAKZ3Q,MAAAA,OAAO,EAAE,KAAKmF,IAAL,CAAUnF,OALP;AAMZoQ,MAAAA,MAAM,EAAE,KAAKjL,IAAL,CAAUiL,MANN;AAOZI,MAAAA,MAAM,EAAE,KAAKrL,IAAL,CAAUqL,MAPN;AAQZH,MAAAA,IAAI,EAAE,KAAKlL,IAAL,CAAUkL,IARJ;AASZI,MAAAA,IAAI,EAAE,KAAKtL,IAAL,CAAUsL,IATJ;AAUZH,MAAAA,IAAI,EAAE,KAAKnL,IAAL,CAAUmL,IAVJ;AAWZI,MAAAA,IAAI,EAAE,KAAKvL,IAAL,CAAUuL,IAXJ;AAYZsC,MAAAA,OAAO,EAAE,KAAK7N,IAAL,CAAU6N,OAZP;AAaZC,MAAAA,OAAO,EAAE,KAAK9N,IAAL,CAAU8N,OAbP;AAcZE,MAAAA,MAAM,EAAE,KAAKhO,IAAL,CAAUgO,MAdN;AAeZC,MAAAA,MAAM,EAAE,KAAKjO,IAAL,CAAUiO,MAfN;AAgBZjP,MAAAA,KAAK,EAAE,KAAKgB,IAAL,CAAUhB,KAhBL;AAiBZmL,MAAAA,KAAK,EAAE,KAAKnK,IAAL,CAAUmK,KAjBL;AAkBZD,MAAAA,KAAK,EAAE,KAAKlK,IAAL,CAAUkK,KAlBL;AAmBZD,MAAAA,KAAK,EAAE,KAAKjK,IAAL,CAAUiK,KAnBL;AAoBZH,MAAAA,WAAW,EAAE,KAAK9J,IAAL,CAAU8J,WApBX;AAqBZD,MAAAA,WAAW,EAAE,KAAK7J,IAAL,CAAU6J;AArBX,KAAd;AAuBD;AA3EgC,CAAnC;;;;IC3BqBiS;AAGnB,gCAAYC,MAAZ,EAAoB;AAAA;AAAA;AAAA;AAAA;AAClB,8DAAeA,MAAf;AACD;;;;SAEDC,yBAAA,gCAAuBC,OAAvB,EAAgCC,OAAhC,EAAyCC,cAAzC,EAAyDC,gBAAzD,EAA2E;AACzE,QAAMC,KAAK,GAAG,wDAAa3iB,eAAb,CAA6B,MAA7B,EAAqCuiB,OAArC,EAA8CC,OAA9C,CAAd;;AACA,QAAII,GAAG,GAAGH,cAAV;;AACA,SAAK,IAAIjI,EAAE,GAAG,CAAd,EAAiBA,EAAE,IAAI,EAAvB,EAA2BA,EAAE,EAA7B;AACE,WAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,IAAI,EAAvB,EAA2BA,EAAE,EAA7B,EAAiC;AAC/B,YAAM9Z,GAAG,GAAGgiB,KAAK,CAACE,MAAN,CAAapI,EAAb,EAAiBD,EAAjB,CAAZ;AACA,YAAIsI,GAAG,GAAG,CAAV;AACAA,QAAAA,GAAG,GAAGF,GAAN;AACAD,QAAAA,KAAK,CAAC3hB,aAAN,CAAoBL,GAApB,EAAyBmiB,GAAzB;AAEAF,QAAAA,GAAG,IAAIF,gBAAP;AACD;AARH;;AAUAC,IAAAA,KAAK,CAACxiB,MAAN,CAAaG,MAAb,GAAsB,QAAtB;AACAqiB,IAAAA,KAAK,CAAC1I,MAAN,CAAa3Z,MAAb,GAAsB,QAAtB;AACAqiB,IAAAA,KAAK,CAACzhB,KAAN,GAAc,kCAAd;AACAyhB,IAAAA,KAAK,CAACriB,MAAN,GAAe,8BAAf;AACAqiB,IAAAA,KAAK,CAAC/H,QAAN,GAAiBgI,GAAjB;AAEA,WAAOD,KAAP;AACD;;SAEDI,yBAAA,gCACER,OADF,EAEEC,OAFF,EAGEQ,OAHF,EAIEP,cAJF,EAKEC,gBALF,EAME;AACA,QAAMC,KAAK,GAAG,wDAAa3iB,eAAb,CACZ,MADY,EAEZuiB,OAFY,EAGZC,OAHY,EAIZQ,OAJY,CAAd;;AAMA,QAAIJ,GAAG,GAAGH,cAAV;;AAEA,SAAK,IAAIlI,EAAE,GAAG,CAAd,EAAiBA,EAAE,IAAI,EAAvB,EAA2BA,EAAE,EAA7B;AACE,WAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,IAAI,EAAvB,EAA2BA,EAAE,EAA7B;AACE,aAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,IAAI,EAAvB,EAA2BA,EAAE,EAA7B,EAAiC;AAC/B,cAAM9Z,GAAG,GAAGgiB,KAAK,CAACE,MAAN,CAAapI,EAAb,EAAiBD,EAAjB,EAAqBD,EAArB,CAAZ;AACA,cAAIuI,GAAG,GAAG,CAAV;AACAA,UAAAA,GAAG,GAAGF,GAAN;AACAD,UAAAA,KAAK,CAAC3hB,aAAN,CAAoBL,GAApB,EAAyBmiB,GAAzB;AAEAF,UAAAA,GAAG,IAAIF,gBAAP;AACD;AARH;AADF;;AAWAC,IAAAA,KAAK,CAACxiB,MAAN,CAAaG,MAAb,GAAsB,QAAtB;AACAqiB,IAAAA,KAAK,CAAC1I,MAAN,CAAa3Z,MAAb,GAAsB,QAAtB;AACAqiB,IAAAA,KAAK,CAACzI,MAAN,CAAa5Z,MAAb,GAAsB,QAAtB;AACAqiB,IAAAA,KAAK,CAACzhB,KAAN,GAAc,kCAAd;AACAyhB,IAAAA,KAAK,CAACriB,MAAN,GAAe,8BAAf;AACAqiB,IAAAA,KAAK,CAAC/H,QAAN,GAAiBgI,GAAjB;AAEA,WAAOD,KAAP;AACD;;;;;AChDH,YAAerT,QAAM,CAACC,iBAAP,CAAyB,eAAzB,EAA0C;AACvD2E,EAAAA,MAAM,EAAE;AACN3F,IAAAA,OAAO,EAAE;AAAE1K,MAAAA,IAAI,EAAE;AAAR,KADH;AAENgL,IAAAA,QAAQ,EAAE;AAAEhL,MAAAA,IAAI,EAAE;AAAR,KAFJ;AAGN4R,IAAAA,KAAK,EAAE;AAAE5R,MAAAA,IAAI,EAAE,QAAR;AAAkB,iBAAS;AAA3B,KAHD;AAIN+D,IAAAA,QAAQ,EAAE;AACRxG,MAAAA,IAAI,EAAE,UADE;AAER8J,MAAAA,MAAM,EAAE,CAFA;AAGRC,MAAAA,MAAM,EAAE,CAHA;AAIRC,MAAAA,MAAM,EAAE;AAJA,KAJJ;AAUNoB,IAAAA,KAAK,EAAE;AACLpL,MAAAA,IAAI,EAAE,OADD;AAEL8J,MAAAA,MAAM,EAAE,CAFH;AAGLC,MAAAA,MAAM,EAAE,CAHH;AAILC,MAAAA,MAAM,EAAE;AAJH,KAVD;AAgBNlD,IAAAA,QAAQ,EAAE;AACR9G,MAAAA,IAAI,EAAE,UADE;AAER8J,MAAAA,MAAM,EAAE,CAFA;AAGRC,MAAAA,MAAM,EAAE,CAHA;AAIRC,MAAAA,MAAM,EAAE;AAJA;AAhBJ,GAD+C;AAwBvDoE,EAAAA,IAAI,EAAE,gBAAY;AAAA;;AAChB,QAAMC,EAAE,GAAG,KAAKA,EAAhB;AACAnD,IAAAA,yBAAyB,CAAC,KAAK4H,MAAN,EAAczE,EAAd,CAAzB;AAEAlN,IAAAA,QAAQ,CAACqN,gBAAT,CAA0B,SAA1B,EAAqCrE,uBAArC;AACAhJ,IAAAA,QAAQ,CAACqN,gBAAT,CAA0B,OAA1B,EAAmCvD,yBAAnC;AACA,SAAK/H,MAAL,GAAcsC,MAAM,CAACtC,MAArB;AACA,SAAK2e,oBAAL,GAA4B,IAAIb,oBAAJ,CAAyB,KAAK9d,MAA9B,CAA5B;AACA,SAAK2K,mBAAL,GAA2B,IAAItC,mBAAJ,EAA3B;AACA,SAAKlC,aAAL,GAAqB,IAAIlD,aAAJ,EAArB;AACA,SAAK2b,MAAL,GAAc,KAAd;AACA,SAAKzd,SAAL,GAAiB,IAAjB;AACA,SAAKsZ,KAAL,GAAa;AACXpG,MAAAA,IAAI,EAAE;AACJD,QAAAA,QAAQ,EAAE,EADN;AAEJ2G,QAAAA,UAAU,EAAE;AAFR,OADK;AAKXzG,MAAAA,MAAM,EAAE;AACNF,QAAAA,QAAQ,EAAE,EADJ;AAEN2G,QAAAA,UAAU,EAAE;AAFN,OALG;AASXtG,MAAAA,MAAM,EAAE;AACNL,QAAAA,QAAQ,EAAE,EADJ;AAEN2G,QAAAA,UAAU,EAAE;AAFN,OATG;AAaXxG,MAAAA,OAAO,EAAE;AACPH,QAAAA,QAAQ,EAAE,EADH;AAEP2G,QAAAA,UAAU,EAAE;AAFL,OAbE;AAiBX2C,MAAAA,WAAW,EAAE;AACXtJ,QAAAA,QAAQ,EAAE,EADC;AAEX2G,QAAAA,UAAU,EAAE;AAFD,OAjBF;AAqBX8C,MAAAA,aAAa,EAAE;AACbzJ,QAAAA,QAAQ,EAAE,EADG;AAEb2G,QAAAA,UAAU,EAAE;AAFC,OArBJ;AAyBX6C,MAAAA,WAAW,EAAE;AACXxJ,QAAAA,QAAQ,EAAE,EADC;AAEX2G,QAAAA,UAAU,EAAE;AAFD,OAzBF;AA6BX4C,MAAAA,aAAa,EAAE;AACbvJ,QAAAA,QAAQ,EAAE,EADG;AAEb2G,QAAAA,UAAU,EAAE;AAFC;AA7BJ,KAAb;AAkCA,SAAK9Q,OAAL,GAAe,IAAf;;AAGA,QAAM4U,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACC,UAAD,EAAgB;AAC7CtiB,MAAAA,OAAO,CAACC,GAAR,CAAYqiB,UAAZ;AACA,MAAA,KAAI,CAAC7U,OAAL,CAAa3F,OAAb,GAAuBwa,UAAU,CAACxa,OAAlC;AACA,MAAA,KAAI,CAAC2F,OAAL,CAAa1F,OAAb,GAAuBua,UAAU,CAACva,OAAlC;AACA,MAAA,KAAI,CAACyF,KAAL,GAAa8U,UAAU,CAAC9U,KAAxB;;AAEA,MAAA,KAAI,CAAC7D,aAAL,CAAmBjC,iBAAnB,CAAqC4a,UAArC;;AACAzB,MAAAA,kBAAkB,CAChB,KAAI,CAAClS,EADW,EAEhB,KAAI,CAACsP,KAFW,EAGhB,KAAI,CAACtZ,SAHW,EAIhB,KAAI,CAAC8I,OAAL,CAAa3F,OAJG,EAKhB,KAAI,CAAC2F,OAAL,CAAa1F,OALG,EAMhB,KAAI,CAAC0F,OAAL,CAAaD,KANG,EAOhB,KAAI,CAAChI,IAAL,CAAUmP,KAPM,CAAlB;AASA,MAAA,KAAI,CAACyN,MAAL,GAAc,IAAd;AACD,KAjBD;;AAkBA,QAAM7c,kBAAkB,GAAG,SAArBA,kBAAqB,CAACkI,OAAD,EAAa;AACtC,MAAA,KAAI,CAACU,mBAAL,CAAyBZ,eAAzB,CACEE,OAAO,CAAC3F,OADV,EAEE2F,OAAO,CAAC1F,OAFV,EAGE0F,OAAO,CAACD,KAHV;;AAKA6U,MAAAA,sBAAsB,CAAC5U,OAAD,CAAtB;AACD,KAPD;;AASA,SAAK5I,YAAL,GAAoBsE,mBAAmB,CACpCD,iBADiB,GAEjBnD,SAFiB,CAEPR,kBAFO,CAApB;AAGD,GAvGsD;AAwGvD0L,EAAAA,MAAM,EAAE,kBAAY;AAAA;;AAClBrF,IAAAA,6BAA6B;AAC7B,SAAK6B,OAAL,GAAenB,IAAI,CAACI,KAAL,CAAW,KAAKlH,IAAL,CAAUiI,OAArB,CAAf;AACA,SAAKjK,MAAL,CAAY+e,QAAZ,CAAqB,KAAK/c,IAAL,CAAUuI,QAA/B,EACGyU,IADH,CACQ,UAACC,IAAD;AAAA,aAAUA,IAAI,CAACC,UAAL,CAAgB,kBAAhB,CAAV;AAAA,KADR,EAEGF,IAFH,CAEQ,UAACrjB,GAAD,EAAS;AACb,MAAA,MAAI,CAACgP,mBAAL,CAAyBjB,iBAAzB,CAA2C/N,GAA3C;;AACA,MAAA,MAAI,CAACwF,SAAL,GAAiBxF,GAAjB;AACA0hB,MAAAA,kBAAkB,CAChB,MAAI,CAAClS,EADW,EAEhB,MAAI,CAACsP,KAFW,EAGhB,MAAI,CAACtZ,SAHW,EAIhB,MAAI,CAAC8I,OAAL,CAAa3F,OAJG,EAKhB,MAAI,CAAC2F,OAAL,CAAa1F,OALG,EAMhB,MAAI,CAAC0F,OAAL,CAAaD,KANG,EAOhB,MAAI,CAAChI,IAAL,CAAUmP,KAPM,CAAlB;AASA,MAAA,MAAI,CAACyN,MAAL,GAAc,IAAd;AACD,KAfH,EAgBGI,IAhBH,CAgBQ;AAAA,aAAMxiB,OAAO,CAACC,GAAR,CAAY,mBAAZ,CAAN;AAAA,KAhBR,WAiBS,UAAC0iB,KAAD,EAAW;AAChB,MAAA,MAAI,CAAChe,SAAL,GAAiB,MAAI,CAACwd,oBAAL,CAA0BX,sBAA1B,CACf,EADe,EAEf,EAFe,EAGf,CAHe,EAIf,GAJe,CAAjB;;AAMA,MAAA,MAAI,CAACrT,mBAAL,CAAyBjB,iBAAzB,CAA2C,MAAI,CAACvI,SAAhD;;AACAkc,MAAAA,kBAAkB,CAChB,MAAI,CAAClS,EADW,EAEhB,MAAI,CAACsP,KAFW,EAGhB,MAAI,CAACtZ,SAHW,EAIhB,MAAI,CAAC8I,OAAL,CAAa3F,OAJG,EAKhB,MAAI,CAAC2F,OAAL,CAAa1F,OALG,EAMhB,MAAI,CAAC0F,OAAL,CAAaD,KANG,EAOhB,MAAI,CAAChI,IAAL,CAAUmP,KAPM,CAAlB;AASA,MAAA,MAAI,CAACyN,MAAL,GAAc,IAAd;AACApiB,MAAAA,OAAO,CAACC,GAAR,CAAY0iB,KAAZ;AACD,KApCH;AAqCD,GAhJsD;AAiJvDC,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAI,KAAKR,MAAT,EAAiB;AACf,WAAKA,MAAL,GAAc,KAAd;AACApiB,MAAAA,OAAO,CAACC,GAAR,CAAY,KAAKwN,OAAjB;AACAzN,MAAAA,OAAO,CAACC,GAAR,CAAY,KAAK2X,QAAjB;AACD;AACF,GAvJsD;AAwJvDgH,EAAAA,MAAM,EAAE,kBAAY;AAClB,SAAK/Z,YAAL,CAAkBmB,WAAlB;AACAvE,IAAAA,QAAQ,CAACohB,mBAAT,CAA6B,SAA7B,EAAwCpY,uBAAxC;AACAhJ,IAAAA,QAAQ,CAACohB,mBAAT,CAA6B,OAA7B,EAAsCtX,yBAAtC;AACD;AA5JsD,CAA1C,CAAf;;ACbA,gCAAeiD,QAAM,CAACC,iBAAP,CAAyB,gBAAzB,EAA2C;AACxD2E,EAAAA,MAAM,EAAE;AACNtM,IAAAA,QAAQ,EAAE;AACRxG,MAAAA,IAAI,EAAE,UADE;AAER8J,MAAAA,MAAM,EAAE,CAAC,IAFD;AAGRC,MAAAA,MAAM,EAAE,GAHA;AAIRC,MAAAA,MAAM,EAAE,CAAC;AAJD,KADJ;AAONoB,IAAAA,KAAK,EAAE;AACLpL,MAAAA,IAAI,EAAE,OADD;AAEL8J,MAAAA,MAAM,EAAE,GAFH;AAGLC,MAAAA,MAAM,EAAE,GAHH;AAILC,MAAAA,MAAM,EAAE;AAJH,KAPD;AAaNlD,IAAAA,QAAQ,EAAE;AACR9G,MAAAA,IAAI,EAAE,UADE;AAER8J,MAAAA,MAAM,EAAE,CAFA;AAGRC,MAAAA,MAAM,EAAE,EAHA;AAIRC,MAAAA,MAAM,EAAE;AAJA;AAbJ,GADgD;AAqBxDoE,EAAAA,IAAI,EAAE,gBAAY;AArBsC,CAA3C,CAAf;;ACiEA,IAAI/E,eAAa,GAAG,IAAIlD,aAAJ,EAApB;;AAOA,IAAMqc,qBAAqB,GAAG,SAAxBA,qBAAwB,CAAC1d,KAAD,EAAW;AACvC,MAAIA,KAAK,CAAC8J,MAAN,CAAanI,CAAb,GAAiB,IAArB,EAA2B;AACzBoC,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMD;;AACD,MAAItD,KAAK,CAAC8J,MAAN,CAAanI,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1BoC,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMD;;AACD,MAAItD,KAAK,CAAC8J,MAAN,CAAa5H,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1B6B,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,KAJF;AAMD;;AACD,MAAItD,KAAK,CAAC8J,MAAN,CAAa5H,CAAb,GAAiB,IAArB,EAA2B;AACzB6B,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,KAJF;AAMD;AACF,CAzDD;;AAgEA,IAAMqa,yBAAyB,GAAG,SAA5BA,yBAA4B,CAAC3d,KAAD,EAAW;AAC3C,MAAIA,KAAK,CAAC8J,MAAN,CAAanI,CAAb,GAAiB,IAArB,EAA2B;AACzBoC,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMD;;AACD,MAAItD,KAAK,CAAC8J,MAAN,CAAanI,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1BoC,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMD;;AACD,MAAItD,KAAK,CAAC8J,MAAN,CAAa5H,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1B6B,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIE,IAJF;AAMD;;AACD,MAAItD,KAAK,CAAC8J,MAAN,CAAa5H,CAAb,GAAiB,IAArB,EAA2B;AACzB6B,IAAAA,mBAAmB,CAACT,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMAU,IAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE,IAJF;AAMD;AACF,CAzDD;;AAiEA,IAAMsa,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAC5d,KAAD,EAAQwB,KAAR,EAAkB;AAC5C,MAAIxB,KAAK,CAAC8J,MAAN,CAAanI,CAAb,GAAiB,IAArB,EAA2B;AACzB4C,IAAAA,eAAa,CAAC3C,oBAAd,CAAmC,GAAnC,EAAwC,KAAxC,EAA+CJ,KAA/C;AACD;;AACD,MAAIxB,KAAK,CAAC8J,MAAN,CAAanI,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1B4C,IAAAA,eAAa,CAAC3C,oBAAd,CAAmC,GAAnC,EAAwC,IAAxC,EAA8CJ,KAA9C;AACD;;AACD,MAAIxB,KAAK,CAAC8J,MAAN,CAAa5H,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1BqC,IAAAA,eAAa,CAAC3C,oBAAd,CAAmC,GAAnC,EAAwC,IAAxC,EAA8CJ,KAA9C;AACD;;AACD,MAAIxB,KAAK,CAAC8J,MAAN,CAAa5H,CAAb,GAAiB,IAArB,EAA2B;AACzBqC,IAAAA,eAAa,CAAC3C,oBAAd,CAAmC,GAAnC,EAAwC,KAAxC,EAA+CJ,KAA/C;AACD;AACF,CAbD;;AAwCA,IAAMqc,sCAAsC,GAAG,SAAzCA,sCAAyC,CAAC7d,KAAD,EAAW;AACxD,MAAIA,KAAK,CAAC8J,MAAN,CAAanI,CAAb,GAAiB,IAArB,EAA2B;AACzB4C,IAAAA,eAAa,CAACrB,iCAAd;AACD;;AACD,MAAIlD,KAAK,CAAC8J,MAAN,CAAanI,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1B4C,IAAAA,eAAa,CAACtB,mCAAd;AACD;;AACD,MAAIjD,KAAK,CAAC8J,MAAN,CAAa5H,CAAb,GAAiB,CAAC,IAAtB,EAA4B;AAC1BqC,IAAAA,eAAa,CAACnB,mCAAd;AACD;;AACD,MAAIpD,KAAK,CAAC8J,MAAN,CAAa5H,CAAb,GAAiB,IAArB,EAA2B;AACzBqC,IAAAA,eAAa,CAACpB,oCAAd;AACD;AACF,CAbD;;AAoBA,IAAM2a,eAAe,GAAG,SAAlBA,eAAkB,CAACta,YAAD,EAAkB;AACxCQ,EAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,IAHF,EAIEE,YAJF;AAMD,CAPD;;AAcA,IAAMua,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,WAAD,EAAiB;AACzCha,EAAAA,mBAAmB,CAACV,8BAApB,CACE,SADF,EAEE,KAFF,EAGE,KAHF,EAIE0a,WAJF;AAMD,CAPD;;AAiBA,IAAMC,2BAA2B,GAAG,SAA9BA,2BAA8B,GAAM;AACxC1Z,EAAAA,eAAa,GAAG,IAAIlD,aAAJ,EAAhB;AACD,CAFD;;AASA,IAAM6c,wBAAwB,GAAG,SAA3BA,wBAA2B,CAACle,KAAD,EAAW;AAC1C0d,EAAAA,qBAAqB,CAAC1d,KAAD,CAArB;AACD,CAFD;;AASA,IAAMme,gCAAgC,GAAG,SAAnCA,gCAAmC,CAACne,KAAD,EAAW;AAClD2d,EAAAA,yBAAyB,CAAC3d,KAAD,CAAzB;AACD,CAFD;;AAkBA,IAAMoe,kDAAkD,GAAG,SAArDA,kDAAqD,CAACpe,KAAD,EAAW;AACpE6d,EAAAA,sCAAsC,CAAC7d,KAAD,CAAtC;AACD,CAFD;;AAUA,IAAMqe,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACre,KAAD,EAAQwB,KAAR,EAAkB;AAClDoc,EAAAA,mBAAmB,CAAC5d,KAAD,EAAQwB,KAAR,CAAnB;AACD,CAFD;;AASA,IAAM8c,yBAAyB,GAAG,SAA5BA,yBAA4B,CAAC9c,KAAD,EAAW;AAC3C+C,EAAAA,eAAa,CAACjD,kBAAd,CAAiC,IAAjC,EAAuCE,KAAK,GAAG,CAA/C;AACD,CAFD;;AASA,IAAM+c,yBAAyB,GAAG,SAA5BA,yBAA4B,CAAC/c,KAAD,EAAW;AAC3C+C,EAAAA,eAAa,CAACjD,kBAAd,CAAiC,KAAjC,EAAwCE,KAAK,GAAG,CAAhD;AACD,CAFD;;AAQA,IAAMgd,uBAAuB,GAAG,SAA1BA,uBAA0B,GAAM;AACpCna,EAAAA,UAAU,CAACH,6BAAX;AACD,CAFD;;AAQA,IAAMua,yBAAyB,GAAG,SAA5BA,yBAA4B,GAAM;AACtCpa,EAAAA,UAAU,CAACF,yBAAX;AACD,CAFD;;AAQA,IAAMua,sBAAsB,GAAG,SAAzBA,sBAAyB,GAAM;AACnC3a,EAAAA,mBAAmB,CAACN,uBAApB,CAA4C,MAA5C,EAAoD,KAApD;AACD,CAFD;;AAQA,IAAMkb,qBAAqB,GAAG,SAAxBA,qBAAwB,GAAM;AAClC5a,EAAAA,mBAAmB,CAACN,uBAApB,CAA4C,SAA5C,EAAuD,KAAvD;AACD,CAFD;;AAQA,IAAMmb,2BAA2B,GAAG,SAA9BA,2BAA8B,GAAM;AACxCxd,EAAAA,aAAa,CAACN,sBAAd,CAAqC,QAArC;AACD,CAFD;;AAQA,IAAM+d,yBAAyB,GAAG,SAA5BA,yBAA4B,GAAM;AACtCzd,EAAAA,aAAa,CAACF,YAAd;AACD,CAFD;;AAQA,IAAM4d,kBAAkB,GAAG,SAArBA,kBAAqB,GAAM;AAC/B1d,EAAAA,aAAa,CAACH,YAAd;AACD,CAFD;;AAQA,IAAM8d,4BAA4B,GAAG,SAA/BA,4BAA+B,GAAM;AACzC,AAAC,GACC,YADD,EAEC,YAFD,EAGC,YAHD,EAIC,YAJD,EAKC,YALD,EAMCnZ,OAND,CAMS,UAACC,QAAD,EAAc;AACtB,QAAIxJ,QAAQ,CAACC,cAAT,CAAwBuJ,QAAxB,MAAsC,IAA1C,EAAgD;AAC9CxH,MAAAA,aAAa,CAACvC,wBAAd,CACE,qBADF,EAEE+J,QAFF,EAGE,OAHF,EAIE,OAJF;AAMD;AACF,GAfA;AAgBF,CAjBD;;ACrZA,2BAAeuD,QAAM,CAACC,iBAAP,CAAyB,yBAAzB,EAAoD;AACjEC,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAI0V,UAAU,GAAG,KAAjB;AACA,QAAIxd,KAAK,GAAG,CAAZ;AACA,QAAM+H,EAAE,GAAG,KAAKA,EAAhB;AAEAA,IAAAA,EAAE,CAACG,gBAAH,CAAoB,UAApB,EAAgC,YAAM;AACpCsV,MAAAA,UAAU,GAAG,IAAb;AACD,KAFD;AAGAzV,IAAAA,EAAE,CAACG,gBAAH,CAAoB,QAApB,EAA8B,YAAM;AAClCsV,MAAAA,UAAU,GAAG,KAAb;AACD,KAFD;AAGAzV,IAAAA,EAAE,CAACG,gBAAH,CAAoB,gBAApB,EAAsC,YAAM;AAC1C,UAAIsV,UAAJ,EAAgB;AACdxd,QAAAA,KAAK;AACL,YAAIA,KAAK,GAAG,EAAZ,EAAgBA,KAAK,GAAG,EAAR;AACjB,OAHD,MAGO;AACLA,QAAAA,KAAK;AACL,YAAIA,KAAK,GAAG,CAAZ,EAAeA,KAAK,GAAG,CAAR;AAChB;AACF,KARD;AASA+H,IAAAA,EAAE,CAACG,gBAAH,CAAoB,iBAApB,EAAuC,UAAC1J,KAAD,EAAW;AAChD,UAAIgf,UAAJ,EAAgB;AACdZ,QAAAA,kDAAkD,CAACpe,KAAD,CAAlD;AACD,OAFD,MAEO;AACLqe,QAAAA,yBAAyB,CAACre,KAAD,EAAQwB,KAAR,CAAzB;AACD;AACF,KAND;AAOA+H,IAAAA,EAAE,CAACG,gBAAH,CAAoB,aAApB,EAAmC,YAAM;AACvC,UAAIsV,UAAJ,EAAgB;AACdV,QAAAA,yBAAyB,CAAC9c,KAAD,CAAzB;AACD,OAFD,MAEO;AACLod,QAAAA,2BAA2B;AAC5B;AACF,KAND;AAOArV,IAAAA,EAAE,CAACG,gBAAH,CAAoB,aAApB,EAAmC,YAAM;AACvC,UAAIsV,UAAJ,EAAgB;AACdT,QAAAA,yBAAyB,CAAC/c,KAAD,CAAzB;AACD,OAFD,MAEO;AACLqd,QAAAA,yBAAyB;AAC1B;AACF,KAND;AAOD,GA1CgE;AA4CjEhT,EAAAA,MAAM,EAAE,kBAAY;AAClBoS,IAAAA,2BAA2B;AAC5B;AA9CgE,CAApD,CAAf;;ACIA,4BAAe7U,QAAM,CAACC,iBAAP,CAAyB,0BAAzB,EAAqD;AAClEC,EAAAA,IAAI,EAAE,gBAAY;AAChB,QAAI0V,UAAU,GAAG,KAAjB;AACA,QAAMzV,EAAE,GAAG,KAAKA,EAAhB;AAEAA,IAAAA,EAAE,CAACG,gBAAH,CAAoB,UAApB,EAAgC,YAAM;AACpCsV,MAAAA,UAAU,GAAG,IAAb;AACD,KAFD;AAGAzV,IAAAA,EAAE,CAACG,gBAAH,CAAoB,QAApB,EAA8B,YAAM;AAClCsV,MAAAA,UAAU,GAAG,KAAb;AACD,KAFD;AAGAzV,IAAAA,EAAE,CAACG,gBAAH,CAAoB,iBAApB,EAAuC,UAAC1J,KAAD,EAAW;AAChD,UAAIgf,UAAJ,EAAgB;AACdd,QAAAA,wBAAwB,CAACle,KAAD,CAAxB;AACD,OAFD,MAEO;AACLme,QAAAA,gCAAgC,CAACne,KAAD,CAAhC;AACD;AACF,KAND;AAOAuJ,IAAAA,EAAE,CAACG,gBAAH,CAAoB,aAApB,EAAmC,YAAM;AACvC,UAAIsV,UAAJ,EAAgB;AACdlB,QAAAA,eAAe,CAAC,KAAD,CAAf;AACD,OAFD,MAEO;AACLA,QAAAA,eAAe,CAAC,IAAD,CAAf;AACD;AACF,KAND;AAOAvU,IAAAA,EAAE,CAACG,gBAAH,CAAoB,aAApB,EAAmC,YAAM;AACvC,UAAIsV,UAAJ,EAAgB;AACdjB,QAAAA,iBAAiB,CAAC,KAAD,CAAjB;AACD,OAFD,MAEO;AACLA,QAAAA,iBAAiB,CAAC,IAAD,CAAjB;AACD;AACF,KAND;AAOAxU,IAAAA,EAAE,CAACG,gBAAH,CAAoB,gBAApB,EAAsC,YAAM;AAC1C,UAAIsV,UAAJ,EAAgB;AACdN,QAAAA,sBAAsB;AACvB,OAFD,MAEO;AACLC,QAAAA,qBAAqB;AACtB;AACF,KAND;AAOApV,IAAAA,EAAE,CAACG,gBAAH,CAAoB,aAApB,EAAmC,YAAM;AACvC,UAAIsV,UAAJ,EAAgB;AACdR,QAAAA,uBAAuB;AACvBO,QAAAA,4BAA4B;AAC7B,OAHD,MAGO;AACLN,QAAAA,yBAAyB;AACzBK,QAAAA,kBAAkB;AACnB;AACF,KARD;AASD,GAhDiE;AAkDlEjT,EAAAA,MAAM,EAAE,kBAAY;AAClBoS,IAAAA,2BAA2B;AAC5B;AApDiE,CAArD,CAAf;;ICZMgB,YAAY,GAAG,IAAIxY,mBAAJ,EAArB;;;;;;;;;;;"}
|